diff options
1121 files changed, 41535 insertions, 21775 deletions
| @@ -2166,7 +2166,6 @@ D: Initial implementation of VC's, pty's and select() | |||
| 2166 | 2166 | ||
| 2167 | N: Pavel Machek | 2167 | N: Pavel Machek |
| 2168 | E: pavel@ucw.cz | 2168 | E: pavel@ucw.cz |
| 2169 | E: pavel@suse.cz | ||
| 2170 | D: Softcursor for vga, hypertech cdrom support, vcsa bugfix, nbd | 2169 | D: Softcursor for vga, hypertech cdrom support, vcsa bugfix, nbd |
| 2171 | D: sun4/330 port, capabilities for elf, speedup for rm on ext2, USB, | 2170 | D: sun4/330 port, capabilities for elf, speedup for rm on ext2, USB, |
| 2172 | D: work on suspend-to-ram/disk, killing duplicates from ioctl32 | 2171 | D: work on suspend-to-ram/disk, killing duplicates from ioctl32 |
diff --git a/Documentation/ABI/testing/sysfs-bus-pci b/Documentation/ABI/testing/sysfs-bus-pci index ceddcff4082a..e638e15a8895 100644 --- a/Documentation/ABI/testing/sysfs-bus-pci +++ b/Documentation/ABI/testing/sysfs-bus-pci | |||
| @@ -1,3 +1,46 @@ | |||
| 1 | What: /sys/bus/pci/drivers/.../bind | ||
| 2 | Date: December 2003 | ||
| 3 | Contact: linux-pci@vger.kernel.org | ||
| 4 | Description: | ||
| 5 | Writing a device location to this file will cause | ||
| 6 | the driver to attempt to bind to the device found at | ||
| 7 | this location. This is useful for overriding default | ||
| 8 | bindings. The format for the location is: DDDD:BB:DD.F. | ||
| 9 | That is Domain:Bus:Device.Function and is the same as | ||
| 10 | found in /sys/bus/pci/devices/. For example: | ||
| 11 | # echo 0000:00:19.0 > /sys/bus/pci/drivers/foo/bind | ||
| 12 | (Note: kernels before 2.6.28 may require echo -n). | ||
| 13 | |||
| 14 | What: /sys/bus/pci/drivers/.../unbind | ||
| 15 | Date: December 2003 | ||
| 16 | Contact: linux-pci@vger.kernel.org | ||
| 17 | Description: | ||
| 18 | Writing a device location to this file will cause the | ||
| 19 | driver to attempt to unbind from the device found at | ||
| 20 | this location. This may be useful when overriding default | ||
| 21 | bindings. The format for the location is: DDDD:BB:DD.F. | ||
| 22 | That is Domain:Bus:Device.Function and is the same as | ||
| 23 | found in /sys/bus/pci/devices/. For example: | ||
| 24 | # echo 0000:00:19.0 > /sys/bus/pci/drivers/foo/unbind | ||
| 25 | (Note: kernels before 2.6.28 may require echo -n). | ||
| 26 | |||
| 27 | What: /sys/bus/pci/drivers/.../new_id | ||
| 28 | Date: December 2003 | ||
| 29 | Contact: linux-pci@vger.kernel.org | ||
| 30 | Description: | ||
| 31 | Writing a device ID to this file will attempt to | ||
| 32 | dynamically add a new device ID to a PCI device driver. | ||
| 33 | This may allow the driver to support more hardware than | ||
| 34 | was included in the driver's static device ID support | ||
| 35 | table at compile time. The format for the device ID is: | ||
| 36 | VVVV DDDD SVVV SDDD CCCC MMMM PPPP. That is Vendor ID, | ||
| 37 | Device ID, Subsystem Vendor ID, Subsystem Device ID, | ||
| 38 | Class, Class Mask, and Private Driver Data. The Vendor ID | ||
| 39 | and Device ID fields are required, the rest are optional. | ||
| 40 | Upon successfully adding an ID, the driver will probe | ||
| 41 | for the device and attempt to bind to it. For example: | ||
| 42 | # echo "8086 10f5" > /sys/bus/pci/drivers/foo/new_id | ||
| 43 | |||
| 1 | What: /sys/bus/pci/devices/.../vpd | 44 | What: /sys/bus/pci/devices/.../vpd |
| 2 | Date: February 2008 | 45 | Date: February 2008 |
| 3 | Contact: Ben Hutchings <bhutchings@solarflare.com> | 46 | Contact: Ben Hutchings <bhutchings@solarflare.com> |
diff --git a/Documentation/ABI/testing/sysfs-firmware-memmap b/Documentation/ABI/testing/sysfs-firmware-memmap index 0d99ee6ae02e..eca0d65087dc 100644 --- a/Documentation/ABI/testing/sysfs-firmware-memmap +++ b/Documentation/ABI/testing/sysfs-firmware-memmap | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | What: /sys/firmware/memmap/ | 1 | What: /sys/firmware/memmap/ |
| 2 | Date: June 2008 | 2 | Date: June 2008 |
| 3 | Contact: Bernhard Walle <bwalle@suse.de> | 3 | Contact: Bernhard Walle <bernhard.walle@gmx.de> |
| 4 | Description: | 4 | Description: |
| 5 | On all platforms, the firmware provides a memory map which the | 5 | On all platforms, the firmware provides a memory map which the |
| 6 | kernel reads. The resources from that memory map are registered | 6 | kernel reads. The resources from that memory map are registered |
diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile index dc3154e49279..1462ed86d40a 100644 --- a/Documentation/DocBook/Makefile +++ b/Documentation/DocBook/Makefile | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | # To add a new book the only step required is to add the book to the | 6 | # To add a new book the only step required is to add the book to the |
| 7 | # list of DOCBOOKS. | 7 | # list of DOCBOOKS. |
| 8 | 8 | ||
| 9 | DOCBOOKS := z8530book.xml mcabook.xml \ | 9 | DOCBOOKS := z8530book.xml mcabook.xml device-drivers.xml \ |
| 10 | kernel-hacking.xml kernel-locking.xml deviceiobook.xml \ | 10 | kernel-hacking.xml kernel-locking.xml deviceiobook.xml \ |
| 11 | procfs-guide.xml writing_usb_driver.xml networking.xml \ | 11 | procfs-guide.xml writing_usb_driver.xml networking.xml \ |
| 12 | kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml \ | 12 | kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml \ |
diff --git a/Documentation/DocBook/device-drivers.tmpl b/Documentation/DocBook/device-drivers.tmpl new file mode 100644 index 000000000000..94a20fe8fedf --- /dev/null +++ b/Documentation/DocBook/device-drivers.tmpl | |||
| @@ -0,0 +1,418 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" | ||
| 3 | "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []> | ||
| 4 | |||
| 5 | <book id="LinuxDriversAPI"> | ||
| 6 | <bookinfo> | ||
| 7 | <title>Linux Device Drivers</title> | ||
| 8 | |||
| 9 | <legalnotice> | ||
| 10 | <para> | ||
| 11 | This documentation is free software; you can redistribute | ||
| 12 | it and/or modify it under the terms of the GNU General Public | ||
| 13 | License as published by the Free Software Foundation; either | ||
| 14 | version 2 of the License, or (at your option) any later | ||
| 15 | version. | ||
| 16 | </para> | ||
| 17 | |||
| 18 | <para> | ||
| 19 | This program is distributed in the hope that it will be | ||
| 20 | useful, but WITHOUT ANY WARRANTY; without even the implied | ||
| 21 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
| 22 | See the GNU General Public License for more details. | ||
| 23 | </para> | ||
| 24 | |||
| 25 | <para> | ||
| 26 | You should have received a copy of the GNU General Public | ||
| 27 | License along with this program; if not, write to the Free | ||
| 28 | Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||
| 29 | MA 02111-1307 USA | ||
| 30 | </para> | ||
| 31 | |||
| 32 | <para> | ||
| 33 | For more details see the file COPYING in the source | ||
| 34 | distribution of Linux. | ||
| 35 | </para> | ||
| 36 | </legalnotice> | ||
| 37 | </bookinfo> | ||
| 38 | |||
| 39 | <toc></toc> | ||
| 40 | |||
| 41 | <chapter id="Basics"> | ||
| 42 | <title>Driver Basics</title> | ||
| 43 | <sect1><title>Driver Entry and Exit points</title> | ||
| 44 | !Iinclude/linux/init.h | ||
| 45 | </sect1> | ||
| 46 | |||
| 47 | <sect1><title>Atomic and pointer manipulation</title> | ||
| 48 | !Iarch/x86/include/asm/atomic_32.h | ||
| 49 | !Iarch/x86/include/asm/unaligned.h | ||
| 50 | </sect1> | ||
| 51 | |||
| 52 | <sect1><title>Delaying, scheduling, and timer routines</title> | ||
| 53 | !Iinclude/linux/sched.h | ||
| 54 | !Ekernel/sched.c | ||
| 55 | !Ekernel/timer.c | ||
| 56 | </sect1> | ||
| 57 | <sect1><title>High-resolution timers</title> | ||
| 58 | !Iinclude/linux/ktime.h | ||
| 59 | !Iinclude/linux/hrtimer.h | ||
| 60 | !Ekernel/hrtimer.c | ||
| 61 | </sect1> | ||
| 62 | <sect1><title>Workqueues and Kevents</title> | ||
| 63 | !Ekernel/workqueue.c | ||
| 64 | </sect1> | ||
| 65 | <sect1><title>Internal Functions</title> | ||
| 66 | !Ikernel/exit.c | ||
| 67 | !Ikernel/signal.c | ||
| 68 | !Iinclude/linux/kthread.h | ||
| 69 | !Ekernel/kthread.c | ||
| 70 | </sect1> | ||
| 71 | |||
| 72 | <sect1><title>Kernel objects manipulation</title> | ||
| 73 | <!-- | ||
| 74 | X!Iinclude/linux/kobject.h | ||
| 75 | --> | ||
| 76 | !Elib/kobject.c | ||
| 77 | </sect1> | ||
| 78 | |||
| 79 | <sect1><title>Kernel utility functions</title> | ||
| 80 | !Iinclude/linux/kernel.h | ||
| 81 | !Ekernel/printk.c | ||
| 82 | !Ekernel/panic.c | ||
| 83 | !Ekernel/sys.c | ||
| 84 | !Ekernel/rcupdate.c | ||
| 85 | </sect1> | ||
| 86 | |||
| 87 | <sect1><title>Device Resource Management</title> | ||
| 88 | !Edrivers/base/devres.c | ||
| 89 | </sect1> | ||
| 90 | |||
| 91 | </chapter> | ||
| 92 | |||
| 93 | <chapter id="devdrivers"> | ||
| 94 | <title>Device drivers infrastructure</title> | ||
| 95 | <sect1><title>Device Drivers Base</title> | ||
| 96 | <!-- | ||
| 97 | X!Iinclude/linux/device.h | ||
| 98 | --> | ||
| 99 | !Edrivers/base/driver.c | ||
| 100 | !Edrivers/base/core.c | ||
| 101 | !Edrivers/base/class.c | ||
| 102 | !Edrivers/base/firmware_class.c | ||
| 103 | !Edrivers/base/transport_class.c | ||
| 104 | <!-- Cannot be included, because | ||
| 105 | attribute_container_add_class_device_adapter | ||
| 106 | and attribute_container_classdev_to_container | ||
| 107 | exceed allowed 44 characters maximum | ||
| 108 | X!Edrivers/base/attribute_container.c | ||
| 109 | --> | ||
| 110 | !Edrivers/base/sys.c | ||
| 111 | <!-- | ||
| 112 | X!Edrivers/base/interface.c | ||
| 113 | --> | ||
| 114 | !Edrivers/base/platform.c | ||
| 115 | !Edrivers/base/bus.c | ||
| 116 | </sect1> | ||
| 117 | <sect1><title>Device Drivers Power Management</title> | ||
| 118 | !Edrivers/base/power/main.c | ||
| 119 | </sect1> | ||
| 120 | <sect1><title>Device Drivers ACPI Support</title> | ||
| 121 | <!-- Internal functions only | ||
| 122 | X!Edrivers/acpi/sleep/main.c | ||
| 123 | X!Edrivers/acpi/sleep/wakeup.c | ||
| 124 | X!Edrivers/acpi/motherboard.c | ||
| 125 | X!Edrivers/acpi/bus.c | ||
| 126 | --> | ||
| 127 | !Edrivers/acpi/scan.c | ||
| 128 | !Idrivers/acpi/scan.c | ||
| 129 | <!-- No correct structured comments | ||
| 130 | X!Edrivers/acpi/pci_bind.c | ||
| 131 | --> | ||
| 132 | </sect1> | ||
| 133 | <sect1><title>Device drivers PnP support</title> | ||
| 134 | !Idrivers/pnp/core.c | ||
| 135 | <!-- No correct structured comments | ||
| 136 | X!Edrivers/pnp/system.c | ||
| 137 | --> | ||
| 138 | !Edrivers/pnp/card.c | ||
| 139 | !Idrivers/pnp/driver.c | ||
| 140 | !Edrivers/pnp/manager.c | ||
| 141 | !Edrivers/pnp/support.c | ||
| 142 | </sect1> | ||
| 143 | <sect1><title>Userspace IO devices</title> | ||
| 144 | !Edrivers/uio/uio.c | ||
| 145 | !Iinclude/linux/uio_driver.h | ||
| 146 | </sect1> | ||
| 147 | </chapter> | ||
| 148 | |||
| 149 | <chapter id="parportdev"> | ||
| 150 | <title>Parallel Port Devices</title> | ||
| 151 | !Iinclude/linux/parport.h | ||
| 152 | !Edrivers/parport/ieee1284.c | ||
| 153 | !Edrivers/parport/share.c | ||
| 154 | !Idrivers/parport/daisy.c | ||
| 155 | </chapter> | ||
| 156 | |||
| 157 | <chapter id="message_devices"> | ||
| 158 | <title>Message-based devices</title> | ||
| 159 | <sect1><title>Fusion message devices</title> | ||
| 160 | !Edrivers/message/fusion/mptbase.c | ||
| 161 | !Idrivers/message/fusion/mptbase.c | ||
| 162 | !Edrivers/message/fusion/mptscsih.c | ||
| 163 | !Idrivers/message/fusion/mptscsih.c | ||
| 164 | !Idrivers/message/fusion/mptctl.c | ||
| 165 | !Idrivers/message/fusion/mptspi.c | ||
| 166 | !Idrivers/message/fusion/mptfc.c | ||
| 167 | !Idrivers/message/fusion/mptlan.c | ||
| 168 | </sect1> | ||
| 169 | <sect1><title>I2O message devices</title> | ||
| 170 | !Iinclude/linux/i2o.h | ||
| 171 | !Idrivers/message/i2o/core.h | ||
| 172 | !Edrivers/message/i2o/iop.c | ||
| 173 | !Idrivers/message/i2o/iop.c | ||
| 174 | !Idrivers/message/i2o/config-osm.c | ||
| 175 | !Edrivers/message/i2o/exec-osm.c | ||
| 176 | !Idrivers/message/i2o/exec-osm.c | ||
| 177 | !Idrivers/message/i2o/bus-osm.c | ||
| 178 | !Edrivers/message/i2o/device.c | ||
| 179 | !Idrivers/message/i2o/device.c | ||
| 180 | !Idrivers/message/i2o/driver.c | ||
| 181 | !Idrivers/message/i2o/pci.c | ||
| 182 | !Idrivers/message/i2o/i2o_block.c | ||
| 183 | !Idrivers/message/i2o/i2o_scsi.c | ||
| 184 | !Idrivers/message/i2o/i2o_proc.c | ||
| 185 | </sect1> | ||
| 186 | </chapter> | ||
| 187 | |||
| 188 | <chapter id="snddev"> | ||
| 189 | <title>Sound Devices</title> | ||
| 190 | !Iinclude/sound/core.h | ||
| 191 | !Esound/sound_core.c | ||
| 192 | !Iinclude/sound/pcm.h | ||
| 193 | !Esound/core/pcm.c | ||
| 194 | !Esound/core/device.c | ||
| 195 | !Esound/core/info.c | ||
| 196 | !Esound/core/rawmidi.c | ||
| 197 | !Esound/core/sound.c | ||
| 198 | !Esound/core/memory.c | ||
| 199 | !Esound/core/pcm_memory.c | ||
| 200 | !Esound/core/init.c | ||
| 201 | !Esound/core/isadma.c | ||
| 202 | !Esound/core/control.c | ||
| 203 | !Esound/core/pcm_lib.c | ||
| 204 | !Esound/core/hwdep.c | ||
| 205 | !Esound/core/pcm_native.c | ||
| 206 | !Esound/core/memalloc.c | ||
| 207 | <!-- FIXME: Removed for now since no structured comments in source | ||
| 208 | X!Isound/sound_firmware.c | ||
| 209 | --> | ||
| 210 | </chapter> | ||
| 211 | |||
| 212 | <chapter id="uart16x50"> | ||
| 213 | <title>16x50 UART Driver</title> | ||
| 214 | !Iinclude/linux/serial_core.h | ||
| 215 | !Edrivers/serial/serial_core.c | ||
| 216 | !Edrivers/serial/8250.c | ||
| 217 | </chapter> | ||
| 218 | |||
| 219 | <chapter id="fbdev"> | ||
| 220 | <title>Frame Buffer Library</title> | ||
| 221 | |||
| 222 | <para> | ||
| 223 | The frame buffer drivers depend heavily on four data structures. | ||
| 224 | These structures are declared in include/linux/fb.h. They are | ||
| 225 | fb_info, fb_var_screeninfo, fb_fix_screeninfo and fb_monospecs. | ||
| 226 | The last three can be made available to and from userland. | ||
| 227 | </para> | ||
| 228 | |||
| 229 | <para> | ||
| 230 | fb_info defines the current state of a particular video card. | ||
| 231 | Inside fb_info, there exists a fb_ops structure which is a | ||
| 232 | collection of needed functions to make fbdev and fbcon work. | ||
| 233 | fb_info is only visible to the kernel. | ||
| 234 | </para> | ||
| 235 | |||
| 236 | <para> | ||
| 237 | fb_var_screeninfo is used to describe the features of a video card | ||
| 238 | that are user defined. With fb_var_screeninfo, things such as | ||
| 239 | depth and the resolution may be defined. | ||
| 240 | </para> | ||
| 241 | |||
| 242 | <para> | ||
| 243 | The next structure is fb_fix_screeninfo. This defines the | ||
| 244 | properties of a card that are created when a mode is set and can't | ||
| 245 | be changed otherwise. A good example of this is the start of the | ||
| 246 | frame buffer memory. This "locks" the address of the frame buffer | ||
| 247 | memory, so that it cannot be changed or moved. | ||
| 248 | </para> | ||
| 249 | |||
| 250 | <para> | ||
| 251 | The last structure is fb_monospecs. In the old API, there was | ||
| 252 | little importance for fb_monospecs. This allowed for forbidden things | ||
| 253 | such as setting a mode of 800x600 on a fix frequency monitor. With | ||
| 254 | the new API, fb_monospecs prevents such things, and if used | ||
| 255 | correctly, can prevent a monitor from being cooked. fb_monospecs | ||
| 256 | will not be useful until kernels 2.5.x. | ||
| 257 | </para> | ||
| 258 | |||
| 259 | <sect1><title>Frame Buffer Memory</title> | ||
| 260 | !Edrivers/video/fbmem.c | ||
| 261 | </sect1> | ||
| 262 | <!-- | ||
| 263 | <sect1><title>Frame Buffer Console</title> | ||
| 264 | X!Edrivers/video/console/fbcon.c | ||
| 265 | </sect1> | ||
| 266 | --> | ||
| 267 | <sect1><title>Frame Buffer Colormap</title> | ||
| 268 | !Edrivers/video/fbcmap.c | ||
| 269 | </sect1> | ||
| 270 | <!-- FIXME: | ||
| 271 | drivers/video/fbgen.c has no docs, which stuffs up the sgml. Comment | ||
| 272 | out until somebody adds docs. KAO | ||
| 273 | <sect1><title>Frame Buffer Generic Functions</title> | ||
| 274 | X!Idrivers/video/fbgen.c | ||
| 275 | </sect1> | ||
| 276 | KAO --> | ||
| 277 | <sect1><title>Frame Buffer Video Mode Database</title> | ||
| 278 | !Idrivers/video/modedb.c | ||
| 279 | !Edrivers/video/modedb.c | ||
| 280 | </sect1> | ||
| 281 | <sect1><title>Frame Buffer Macintosh Video Mode Database</title> | ||
| 282 | !Edrivers/video/macmodes.c | ||
| 283 | </sect1> | ||
| 284 | <sect1><title>Frame Buffer Fonts</title> | ||
| 285 | <para> | ||
| 286 | Refer to the file drivers/video/console/fonts.c for more information. | ||
| 287 | </para> | ||
| 288 | <!-- FIXME: Removed for now since no structured comments in source | ||
| 289 | X!Idrivers/video/console/fonts.c | ||
| 290 | --> | ||
| 291 | </sect1> | ||
| 292 | </chapter> | ||
| 293 | |||
| 294 | <chapter id="input_subsystem"> | ||
| 295 | <title>Input Subsystem</title> | ||
| 296 | !Iinclude/linux/input.h | ||
| 297 | !Edrivers/input/input.c | ||
| 298 | !Edrivers/input/ff-core.c | ||
| 299 | !Edrivers/input/ff-memless.c | ||
| 300 | </chapter> | ||
| 301 | |||
| 302 | <chapter id="spi"> | ||
| 303 | <title>Serial Peripheral Interface (SPI)</title> | ||
| 304 | <para> | ||
| 305 | SPI is the "Serial Peripheral Interface", widely used with | ||
| 306 | embedded systems because it is a simple and efficient | ||
| 307 | interface: basically a multiplexed shift register. | ||
| 308 | Its three signal wires hold a clock (SCK, often in the range | ||
| 309 | of 1-20 MHz), a "Master Out, Slave In" (MOSI) data line, and | ||
| 310 | a "Master In, Slave Out" (MISO) data line. | ||
| 311 | SPI is a full duplex protocol; for each bit shifted out the | ||
| 312 | MOSI line (one per clock) another is shifted in on the MISO line. | ||
| 313 | Those bits are assembled into words of various sizes on the | ||
| 314 | way to and from system memory. | ||
| 315 | An additional chipselect line is usually active-low (nCS); | ||
| 316 | four signals are normally used for each peripheral, plus | ||
| 317 | sometimes an interrupt. | ||
| 318 | </para> | ||
| 319 | <para> | ||
| 320 | The SPI bus facilities listed here provide a generalized | ||
| 321 | interface to declare SPI busses and devices, manage them | ||
| 322 | according to the standard Linux driver model, and perform | ||
| 323 | input/output operations. | ||
| 324 | At this time, only "master" side interfaces are supported, | ||
| 325 | where Linux talks to SPI peripherals and does not implement | ||
| 326 | such a peripheral itself. | ||
| 327 | (Interfaces to support implementing SPI slaves would | ||
| 328 | necessarily look different.) | ||
| 329 | </para> | ||
| 330 | <para> | ||
| 331 | The programming interface is structured around two kinds of driver, | ||
| 332 | and two kinds of device. | ||
| 333 | A "Controller Driver" abstracts the controller hardware, which may | ||
| 334 | be as simple as a set of GPIO pins or as complex as a pair of FIFOs | ||
| 335 | connected to dual DMA engines on the other side of the SPI shift | ||
| 336 | register (maximizing throughput). Such drivers bridge between | ||
| 337 | whatever bus they sit on (often the platform bus) and SPI, and | ||
| 338 | expose the SPI side of their device as a | ||
| 339 | <structname>struct spi_master</structname>. | ||
| 340 | SPI devices are children of that master, represented as a | ||
| 341 | <structname>struct spi_device</structname> and manufactured from | ||
| 342 | <structname>struct spi_board_info</structname> descriptors which | ||
| 343 | are usually provided by board-specific initialization code. | ||
| 344 | A <structname>struct spi_driver</structname> is called a | ||
| 345 | "Protocol Driver", and is bound to a spi_device using normal | ||
| 346 | driver model calls. | ||
| 347 | </para> | ||
| 348 | <para> | ||
| 349 | The I/O model is a set of queued messages. Protocol drivers | ||
| 350 | submit one or more <structname>struct spi_message</structname> | ||
| 351 | objects, which are processed and completed asynchronously. | ||
| 352 | (There are synchronous wrappers, however.) Messages are | ||
| 353 | built from one or more <structname>struct spi_transfer</structname> | ||
| 354 | objects, each of which wraps a full duplex SPI transfer. | ||
| 355 | A variety of protocol tweaking options are needed, because | ||
| 356 | different chips adopt very different policies for how they | ||
| 357 | use the bits transferred with SPI. | ||
| 358 | </para> | ||
| 359 | !Iinclude/linux/spi/spi.h | ||
| 360 | !Fdrivers/spi/spi.c spi_register_board_info | ||
| 361 | !Edrivers/spi/spi.c | ||
| 362 | </chapter> | ||
| 363 | |||
| 364 | <chapter id="i2c"> | ||
| 365 | <title>I<superscript>2</superscript>C and SMBus Subsystem</title> | ||
| 366 | |||
| 367 | <para> | ||
| 368 | I<superscript>2</superscript>C (or without fancy typography, "I2C") | ||
| 369 | is an acronym for the "Inter-IC" bus, a simple bus protocol which is | ||
| 370 | widely used where low data rate communications suffice. | ||
| 371 | Since it's also a licensed trademark, some vendors use another | ||
| 372 | name (such as "Two-Wire Interface", TWI) for the same bus. | ||
| 373 | I2C only needs two signals (SCL for clock, SDA for data), conserving | ||
| 374 | board real estate and minimizing signal quality issues. | ||
| 375 | Most I2C devices use seven bit addresses, and bus speeds of up | ||
| 376 | to 400 kHz; there's a high speed extension (3.4 MHz) that's not yet | ||
| 377 | found wide use. | ||
| 378 | I2C is a multi-master bus; open drain signaling is used to | ||
| 379 | arbitrate between masters, as well as to handshake and to | ||
| 380 | synchronize clocks from slower clients. | ||
| 381 | </para> | ||
| 382 | |||
| 383 | <para> | ||
| 384 | The Linux I2C programming interfaces support only the master | ||
| 385 | side of bus interactions, not the slave side. | ||
| 386 | The programming interface is structured around two kinds of driver, | ||
| 387 | and two kinds of device. | ||
| 388 | An I2C "Adapter Driver" abstracts the controller hardware; it binds | ||
| 389 | to a physical device (perhaps a PCI device or platform_device) and | ||
| 390 | exposes a <structname>struct i2c_adapter</structname> representing | ||
| 391 | each I2C bus segment it manages. | ||
| 392 | On each I2C bus segment will be I2C devices represented by a | ||
| 393 | <structname>struct i2c_client</structname>. Those devices will | ||
| 394 | be bound to a <structname>struct i2c_driver</structname>, | ||
| 395 | which should follow the standard Linux driver model. | ||
| 396 | (At this writing, a legacy model is more widely used.) | ||
| 397 | There are functions to perform various I2C protocol operations; at | ||
| 398 | this writing all such functions are usable only from task context. | ||
| 399 | </para> | ||
| 400 | |||
| 401 | <para> | ||
| 402 | The System Management Bus (SMBus) is a sibling protocol. Most SMBus | ||
| 403 | systems are also I2C conformant. The electrical constraints are | ||
| 404 | tighter for SMBus, and it standardizes particular protocol messages | ||
| 405 | and idioms. Controllers that support I2C can also support most | ||
| 406 | SMBus operations, but SMBus controllers don't support all the protocol | ||
| 407 | options that an I2C controller will. | ||
| 408 | There are functions to perform various SMBus protocol operations, | ||
| 409 | either using I2C primitives or by issuing SMBus commands to | ||
| 410 | i2c_adapter devices which don't support those I2C operations. | ||
| 411 | </para> | ||
| 412 | |||
| 413 | !Iinclude/linux/i2c.h | ||
| 414 | !Fdrivers/i2c/i2c-boardinfo.c i2c_register_board_info | ||
| 415 | !Edrivers/i2c/i2c-core.c | ||
| 416 | </chapter> | ||
| 417 | |||
| 418 | </book> | ||
diff --git a/Documentation/DocBook/kernel-api.tmpl b/Documentation/DocBook/kernel-api.tmpl index 5818ff75786a..bc962cda6504 100644 --- a/Documentation/DocBook/kernel-api.tmpl +++ b/Documentation/DocBook/kernel-api.tmpl | |||
| @@ -38,58 +38,6 @@ | |||
| 38 | 38 | ||
| 39 | <toc></toc> | 39 | <toc></toc> |
| 40 | 40 | ||
| 41 | <chapter id="Basics"> | ||
| 42 | <title>Driver Basics</title> | ||
| 43 | <sect1><title>Driver Entry and Exit points</title> | ||
| 44 | !Iinclude/linux/init.h | ||
| 45 | </sect1> | ||
| 46 | |||
| 47 | <sect1><title>Atomic and pointer manipulation</title> | ||
| 48 | !Iarch/x86/include/asm/atomic_32.h | ||
| 49 | !Iarch/x86/include/asm/unaligned.h | ||
| 50 | </sect1> | ||
| 51 | |||
| 52 | <sect1><title>Delaying, scheduling, and timer routines</title> | ||
| 53 | !Iinclude/linux/sched.h | ||
| 54 | !Ekernel/sched.c | ||
| 55 | !Ekernel/timer.c | ||
| 56 | </sect1> | ||
| 57 | <sect1><title>High-resolution timers</title> | ||
| 58 | !Iinclude/linux/ktime.h | ||
| 59 | !Iinclude/linux/hrtimer.h | ||
| 60 | !Ekernel/hrtimer.c | ||
| 61 | </sect1> | ||
| 62 | <sect1><title>Workqueues and Kevents</title> | ||
| 63 | !Ekernel/workqueue.c | ||
| 64 | </sect1> | ||
| 65 | <sect1><title>Internal Functions</title> | ||
| 66 | !Ikernel/exit.c | ||
| 67 | !Ikernel/signal.c | ||
| 68 | !Iinclude/linux/kthread.h | ||
| 69 | !Ekernel/kthread.c | ||
| 70 | </sect1> | ||
| 71 | |||
| 72 | <sect1><title>Kernel objects manipulation</title> | ||
| 73 | <!-- | ||
| 74 | X!Iinclude/linux/kobject.h | ||
| 75 | --> | ||
| 76 | !Elib/kobject.c | ||
| 77 | </sect1> | ||
| 78 | |||
| 79 | <sect1><title>Kernel utility functions</title> | ||
| 80 | !Iinclude/linux/kernel.h | ||
| 81 | !Ekernel/printk.c | ||
| 82 | !Ekernel/panic.c | ||
| 83 | !Ekernel/sys.c | ||
| 84 | !Ekernel/rcupdate.c | ||
| 85 | </sect1> | ||
| 86 | |||
| 87 | <sect1><title>Device Resource Management</title> | ||
| 88 | !Edrivers/base/devres.c | ||
| 89 | </sect1> | ||
| 90 | |||
| 91 | </chapter> | ||
| 92 | |||
| 93 | <chapter id="adt"> | 41 | <chapter id="adt"> |
| 94 | <title>Data Types</title> | 42 | <title>Data Types</title> |
| 95 | <sect1><title>Doubly Linked Lists</title> | 43 | <sect1><title>Doubly Linked Lists</title> |
| @@ -298,62 +246,6 @@ X!Earch/x86/kernel/mca_32.c | |||
| 298 | !Ikernel/acct.c | 246 | !Ikernel/acct.c |
| 299 | </chapter> | 247 | </chapter> |
| 300 | 248 | ||
| 301 | <chapter id="devdrivers"> | ||
| 302 | <title>Device drivers infrastructure</title> | ||
| 303 | <sect1><title>Device Drivers Base</title> | ||
| 304 | <!-- | ||
| 305 | X!Iinclude/linux/device.h | ||
| 306 | --> | ||
| 307 | !Edrivers/base/driver.c | ||
| 308 | !Edrivers/base/core.c | ||
| 309 | !Edrivers/base/class.c | ||
| 310 | !Edrivers/base/firmware_class.c | ||
| 311 | !Edrivers/base/transport_class.c | ||
| 312 | <!-- Cannot be included, because | ||
| 313 | attribute_container_add_class_device_adapter | ||
| 314 | and attribute_container_classdev_to_container | ||
| 315 | exceed allowed 44 characters maximum | ||
| 316 | X!Edrivers/base/attribute_container.c | ||
| 317 | --> | ||
| 318 | !Edrivers/base/sys.c | ||
| 319 | <!-- | ||
| 320 | X!Edrivers/base/interface.c | ||
| 321 | --> | ||
| 322 | !Edrivers/base/platform.c | ||
| 323 | !Edrivers/base/bus.c | ||
| 324 | </sect1> | ||
| 325 | <sect1><title>Device Drivers Power Management</title> | ||
| 326 | !Edrivers/base/power/main.c | ||
| 327 | </sect1> | ||
| 328 | <sect1><title>Device Drivers ACPI Support</title> | ||
| 329 | <!-- Internal functions only | ||
| 330 | X!Edrivers/acpi/sleep/main.c | ||
| 331 | X!Edrivers/acpi/sleep/wakeup.c | ||
| 332 | X!Edrivers/acpi/motherboard.c | ||
| 333 | X!Edrivers/acpi/bus.c | ||
| 334 | --> | ||
| 335 | !Edrivers/acpi/scan.c | ||
| 336 | !Idrivers/acpi/scan.c | ||
| 337 | <!-- No correct structured comments | ||
| 338 | X!Edrivers/acpi/pci_bind.c | ||
| 339 | --> | ||
| 340 | </sect1> | ||
| 341 | <sect1><title>Device drivers PnP support</title> | ||
| 342 | !Idrivers/pnp/core.c | ||
| 343 | <!-- No correct structured comments | ||
| 344 | X!Edrivers/pnp/system.c | ||
| 345 | --> | ||
| 346 | !Edrivers/pnp/card.c | ||
| 347 | !Idrivers/pnp/driver.c | ||
| 348 | !Edrivers/pnp/manager.c | ||
| 349 | !Edrivers/pnp/support.c | ||
| 350 | </sect1> | ||
| 351 | <sect1><title>Userspace IO devices</title> | ||
| 352 | !Edrivers/uio/uio.c | ||
| 353 | !Iinclude/linux/uio_driver.h | ||
| 354 | </sect1> | ||
| 355 | </chapter> | ||
| 356 | |||
| 357 | <chapter id="blkdev"> | 249 | <chapter id="blkdev"> |
| 358 | <title>Block Devices</title> | 250 | <title>Block Devices</title> |
| 359 | !Eblock/blk-core.c | 251 | !Eblock/blk-core.c |
| @@ -381,275 +273,6 @@ X!Edrivers/pnp/system.c | |||
| 381 | !Edrivers/char/misc.c | 273 | !Edrivers/char/misc.c |
| 382 | </chapter> | 274 | </chapter> |
| 383 | 275 | ||
| 384 | <chapter id="parportdev"> | ||
| 385 | <title>Parallel Port Devices</title> | ||
| 386 | !Iinclude/linux/parport.h | ||
| 387 | !Edrivers/parport/ieee1284.c | ||
| 388 | !Edrivers/parport/share.c | ||
| 389 | !Idrivers/parport/daisy.c | ||
| 390 | </chapter> | ||
| 391 | |||
| 392 | <chapter id="message_devices"> | ||
| 393 | <title>Message-based devices</title> | ||
| 394 | <sect1><title>Fusion message devices</title> | ||
| 395 | !Edrivers/message/fusion/mptbase.c | ||
| 396 | !Idrivers/message/fusion/mptbase.c | ||
| 397 | !Edrivers/message/fusion/mptscsih.c | ||
| 398 | !Idrivers/message/fusion/mptscsih.c | ||
| 399 | !Idrivers/message/fusion/mptctl.c | ||
| 400 | !Idrivers/message/fusion/mptspi.c | ||
| 401 | !Idrivers/message/fusion/mptfc.c | ||
| 402 | !Idrivers/message/fusion/mptlan.c | ||
| 403 | </sect1> | ||
| 404 | <sect1><title>I2O message devices</title> | ||
| 405 | !Iinclude/linux/i2o.h | ||
| 406 | !Idrivers/message/i2o/core.h | ||
| 407 | !Edrivers/message/i2o/iop.c | ||
| 408 | !Idrivers/message/i2o/iop.c | ||
| 409 | !Idrivers/message/i2o/config-osm.c | ||
| 410 | !Edrivers/message/i2o/exec-osm.c | ||
| 411 | !Idrivers/message/i2o/exec-osm.c | ||
| 412 | !Idrivers/message/i2o/bus-osm.c | ||
| 413 | !Edrivers/message/i2o/device.c | ||
| 414 | !Idrivers/message/i2o/device.c | ||
| 415 | !Idrivers/message/i2o/driver.c | ||
| 416 | !Idrivers/message/i2o/pci.c | ||
| 417 | !Idrivers/message/i2o/i2o_block.c | ||
| 418 | !Idrivers/message/i2o/i2o_scsi.c | ||
| 419 | !Idrivers/message/i2o/i2o_proc.c | ||
| 420 | </sect1> | ||
| 421 | </chapter> | ||
| 422 | |||
| 423 | <chapter id="snddev"> | ||
| 424 | <title>Sound Devices</title> | ||
| 425 | !Iinclude/sound/core.h | ||
| 426 | !Esound/sound_core.c | ||
| 427 | !Iinclude/sound/pcm.h | ||
| 428 | !Esound/core/pcm.c | ||
| 429 | !Esound/core/device.c | ||
| 430 | !Esound/core/info.c | ||
| 431 | !Esound/core/rawmidi.c | ||
| 432 | !Esound/core/sound.c | ||
| 433 | !Esound/core/memory.c | ||
| 434 | !Esound/core/pcm_memory.c | ||
| 435 | !Esound/core/init.c | ||
| 436 | !Esound/core/isadma.c | ||
| 437 | !Esound/core/control.c | ||
| 438 | !Esound/core/pcm_lib.c | ||
| 439 | !Esound/core/hwdep.c | ||
| 440 | !Esound/core/pcm_native.c | ||
| 441 | !Esound/core/memalloc.c | ||
| 442 | <!-- FIXME: Removed for now since no structured comments in source | ||
| 443 | X!Isound/sound_firmware.c | ||
| 444 | --> | ||
| 445 | </chapter> | ||
| 446 | |||
| 447 | <chapter id="uart16x50"> | ||
| 448 | <title>16x50 UART Driver</title> | ||
| 449 | !Iinclude/linux/serial_core.h | ||
| 450 | !Edrivers/serial/serial_core.c | ||
| 451 | !Edrivers/serial/8250.c | ||
| 452 | </chapter> | ||
| 453 | |||
| 454 | <chapter id="fbdev"> | ||
| 455 | <title>Frame Buffer Library</title> | ||
| 456 | |||
| 457 | <para> | ||
| 458 | The frame buffer drivers depend heavily on four data structures. | ||
| 459 | These structures are declared in include/linux/fb.h. They are | ||
| 460 | fb_info, fb_var_screeninfo, fb_fix_screeninfo and fb_monospecs. | ||
| 461 | The last three can be made available to and from userland. | ||
| 462 | </para> | ||
| 463 | |||
| 464 | <para> | ||
| 465 | fb_info defines the current state of a particular video card. | ||
| 466 | Inside fb_info, there exists a fb_ops structure which is a | ||
| 467 | collection of needed functions to make fbdev and fbcon work. | ||
| 468 | fb_info is only visible to the kernel. | ||
| 469 | </para> | ||
| 470 | |||
| 471 | <para> | ||
| 472 | fb_var_screeninfo is used to describe the features of a video card | ||
| 473 | that are user defined. With fb_var_screeninfo, things such as | ||
| 474 | depth and the resolution may be defined. | ||
| 475 | </para> | ||
| 476 | |||
| 477 | <para> | ||
| 478 | The next structure is fb_fix_screeninfo. This defines the | ||
| 479 | properties of a card that are created when a mode is set and can't | ||
| 480 | be changed otherwise. A good example of this is the start of the | ||
| 481 | frame buffer memory. This "locks" the address of the frame buffer | ||
| 482 | memory, so that it cannot be changed or moved. | ||
| 483 | </para> | ||
| 484 | |||
| 485 | <para> | ||
| 486 | The last structure is fb_monospecs. In the old API, there was | ||
| 487 | little importance for fb_monospecs. This allowed for forbidden things | ||
| 488 | such as setting a mode of 800x600 on a fix frequency monitor. With | ||
| 489 | the new API, fb_monospecs prevents such things, and if used | ||
| 490 | correctly, can prevent a monitor from being cooked. fb_monospecs | ||
| 491 | will not be useful until kernels 2.5.x. | ||
| 492 | </para> | ||
| 493 | |||
| 494 | <sect1><title>Frame Buffer Memory</title> | ||
| 495 | !Edrivers/video/fbmem.c | ||
| 496 | </sect1> | ||
| 497 | <!-- | ||
| 498 | <sect1><title>Frame Buffer Console</title> | ||
| 499 | X!Edrivers/video/console/fbcon.c | ||
| 500 | </sect1> | ||
| 501 | --> | ||
| 502 | <sect1><title>Frame Buffer Colormap</title> | ||
| 503 | !Edrivers/video/fbcmap.c | ||
| 504 | </sect1> | ||
| 505 | <!-- FIXME: | ||
| 506 | drivers/video/fbgen.c has no docs, which stuffs up the sgml. Comment | ||
| 507 | out until somebody adds docs. KAO | ||
| 508 | <sect1><title>Frame Buffer Generic Functions</title> | ||
| 509 | X!Idrivers/video/fbgen.c | ||
| 510 | </sect1> | ||
| 511 | KAO --> | ||
| 512 | <sect1><title>Frame Buffer Video Mode Database</title> | ||
| 513 | !Idrivers/video/modedb.c | ||
| 514 | !Edrivers/video/modedb.c | ||
| 515 | </sect1> | ||
| 516 | <sect1><title>Frame Buffer Macintosh Video Mode Database</title> | ||
| 517 | !Edrivers/video/macmodes.c | ||
| 518 | </sect1> | ||
| 519 | <sect1><title>Frame Buffer Fonts</title> | ||
| 520 | <para> | ||
| 521 | Refer to the file drivers/video/console/fonts.c for more information. | ||
| 522 | </para> | ||
| 523 | <!-- FIXME: Removed for now since no structured comments in source | ||
| 524 | X!Idrivers/video/console/fonts.c | ||
| 525 | --> | ||
| 526 | </sect1> | ||
| 527 | </chapter> | ||
| 528 | |||
| 529 | <chapter id="input_subsystem"> | ||
| 530 | <title>Input Subsystem</title> | ||
| 531 | !Iinclude/linux/input.h | ||
| 532 | !Edrivers/input/input.c | ||
| 533 | !Edrivers/input/ff-core.c | ||
| 534 | !Edrivers/input/ff-memless.c | ||
| 535 | </chapter> | ||
| 536 | |||
| 537 | <chapter id="spi"> | ||
| 538 | <title>Serial Peripheral Interface (SPI)</title> | ||
| 539 | <para> | ||
| 540 | SPI is the "Serial Peripheral Interface", widely used with | ||
| 541 | embedded systems because it is a simple and efficient | ||
| 542 | interface: basically a multiplexed shift register. | ||
| 543 | Its three signal wires hold a clock (SCK, often in the range | ||
| 544 | of 1-20 MHz), a "Master Out, Slave In" (MOSI) data line, and | ||
| 545 | a "Master In, Slave Out" (MISO) data line. | ||
| 546 | SPI is a full duplex protocol; for each bit shifted out the | ||
| 547 | MOSI line (one per clock) another is shifted in on the MISO line. | ||
| 548 | Those bits are assembled into words of various sizes on the | ||
| 549 | way to and from system memory. | ||
| 550 | An additional chipselect line is usually active-low (nCS); | ||
| 551 | four signals are normally used for each peripheral, plus | ||
| 552 | sometimes an interrupt. | ||
| 553 | </para> | ||
| 554 | <para> | ||
| 555 | The SPI bus facilities listed here provide a generalized | ||
| 556 | interface to declare SPI busses and devices, manage them | ||
| 557 | according to the standard Linux driver model, and perform | ||
| 558 | input/output operations. | ||
| 559 | At this time, only "master" side interfaces are supported, | ||
| 560 | where Linux talks to SPI peripherals and does not implement | ||
| 561 | such a peripheral itself. | ||
| 562 | (Interfaces to support implementing SPI slaves would | ||
| 563 | necessarily look different.) | ||
| 564 | </para> | ||
| 565 | <para> | ||
| 566 | The programming interface is structured around two kinds of driver, | ||
| 567 | and two kinds of device. | ||
| 568 | A "Controller Driver" abstracts the controller hardware, which may | ||
| 569 | be as simple as a set of GPIO pins or as complex as a pair of FIFOs | ||
| 570 | connected to dual DMA engines on the other side of the SPI shift | ||
| 571 | register (maximizing throughput). Such drivers bridge between | ||
| 572 | whatever bus they sit on (often the platform bus) and SPI, and | ||
| 573 | expose the SPI side of their device as a | ||
| 574 | <structname>struct spi_master</structname>. | ||
| 575 | SPI devices are children of that master, represented as a | ||
| 576 | <structname>struct spi_device</structname> and manufactured from | ||
| 577 | <structname>struct spi_board_info</structname> descriptors which | ||
| 578 | are usually provided by board-specific initialization code. | ||
| 579 | A <structname>struct spi_driver</structname> is called a | ||
| 580 | "Protocol Driver", and is bound to a spi_device using normal | ||
| 581 | driver model calls. | ||
| 582 | </para> | ||
| 583 | <para> | ||
| 584 | The I/O model is a set of queued messages. Protocol drivers | ||
| 585 | submit one or more <structname>struct spi_message</structname> | ||
| 586 | objects, which are processed and completed asynchronously. | ||
| 587 | (There are synchronous wrappers, however.) Messages are | ||
| 588 | built from one or more <structname>struct spi_transfer</structname> | ||
| 589 | objects, each of which wraps a full duplex SPI transfer. | ||
| 590 | A variety of protocol tweaking options are needed, because | ||
| 591 | different chips adopt very different policies for how they | ||
| 592 | use the bits transferred with SPI. | ||
| 593 | </para> | ||
| 594 | !Iinclude/linux/spi/spi.h | ||
| 595 | !Fdrivers/spi/spi.c spi_register_board_info | ||
| 596 | !Edrivers/spi/spi.c | ||
| 597 | </chapter> | ||
| 598 | |||
| 599 | <chapter id="i2c"> | ||
| 600 | <title>I<superscript>2</superscript>C and SMBus Subsystem</title> | ||
| 601 | |||
| 602 | <para> | ||
| 603 | I<superscript>2</superscript>C (or without fancy typography, "I2C") | ||
| 604 | is an acronym for the "Inter-IC" bus, a simple bus protocol which is | ||
| 605 | widely used where low data rate communications suffice. | ||
| 606 | Since it's also a licensed trademark, some vendors use another | ||
| 607 | name (such as "Two-Wire Interface", TWI) for the same bus. | ||
| 608 | I2C only needs two signals (SCL for clock, SDA for data), conserving | ||
| 609 | board real estate and minimizing signal quality issues. | ||
| 610 | Most I2C devices use seven bit addresses, and bus speeds of up | ||
| 611 | to 400 kHz; there's a high speed extension (3.4 MHz) that's not yet | ||
| 612 | found wide use. | ||
| 613 | I2C is a multi-master bus; open drain signaling is used to | ||
| 614 | arbitrate between masters, as well as to handshake and to | ||
| 615 | synchronize clocks from slower clients. | ||
| 616 | </para> | ||
| 617 | |||
| 618 | <para> | ||
| 619 | The Linux I2C programming interfaces support only the master | ||
| 620 | side of bus interactions, not the slave side. | ||
| 621 | The programming interface is structured around two kinds of driver, | ||
| 622 | and two kinds of device. | ||
| 623 | An I2C "Adapter Driver" abstracts the controller hardware; it binds | ||
| 624 | to a physical device (perhaps a PCI device or platform_device) and | ||
| 625 | exposes a <structname>struct i2c_adapter</structname> representing | ||
| 626 | each I2C bus segment it manages. | ||
| 627 | On each I2C bus segment will be I2C devices represented by a | ||
| 628 | <structname>struct i2c_client</structname>. Those devices will | ||
| 629 | be bound to a <structname>struct i2c_driver</structname>, | ||
| 630 | which should follow the standard Linux driver model. | ||
| 631 | (At this writing, a legacy model is more widely used.) | ||
| 632 | There are functions to perform various I2C protocol operations; at | ||
| 633 | this writing all such functions are usable only from task context. | ||
| 634 | </para> | ||
| 635 | |||
| 636 | <para> | ||
| 637 | The System Management Bus (SMBus) is a sibling protocol. Most SMBus | ||
| 638 | systems are also I2C conformant. The electrical constraints are | ||
| 639 | tighter for SMBus, and it standardizes particular protocol messages | ||
| 640 | and idioms. Controllers that support I2C can also support most | ||
| 641 | SMBus operations, but SMBus controllers don't support all the protocol | ||
| 642 | options that an I2C controller will. | ||
| 643 | There are functions to perform various SMBus protocol operations, | ||
| 644 | either using I2C primitives or by issuing SMBus commands to | ||
| 645 | i2c_adapter devices which don't support those I2C operations. | ||
| 646 | </para> | ||
| 647 | |||
| 648 | !Iinclude/linux/i2c.h | ||
| 649 | !Fdrivers/i2c/i2c-boardinfo.c i2c_register_board_info | ||
| 650 | !Edrivers/i2c/i2c-core.c | ||
| 651 | </chapter> | ||
| 652 | |||
| 653 | <chapter id="clk"> | 276 | <chapter id="clk"> |
| 654 | <title>Clock Framework</title> | 277 | <title>Clock Framework</title> |
| 655 | 278 | ||
diff --git a/Documentation/PCI/PCIEBUS-HOWTO.txt b/Documentation/PCI/PCIEBUS-HOWTO.txt index 9a07e38631b0..6bd5f372adec 100644 --- a/Documentation/PCI/PCIEBUS-HOWTO.txt +++ b/Documentation/PCI/PCIEBUS-HOWTO.txt | |||
| @@ -93,7 +93,7 @@ the PCI Express Port Bus driver from loading a service driver. | |||
| 93 | 93 | ||
| 94 | int pcie_port_service_register(struct pcie_port_service_driver *new) | 94 | int pcie_port_service_register(struct pcie_port_service_driver *new) |
| 95 | 95 | ||
| 96 | This API replaces the Linux Driver Model's pci_module_init API. A | 96 | This API replaces the Linux Driver Model's pci_register_driver API. A |
| 97 | service driver should always calls pcie_port_service_register at | 97 | service driver should always calls pcie_port_service_register at |
| 98 | module init. Note that after service driver being loaded, calls | 98 | module init. Note that after service driver being loaded, calls |
| 99 | such as pci_enable_device(dev) and pci_set_master(dev) are no longer | 99 | such as pci_enable_device(dev) and pci_set_master(dev) are no longer |
diff --git a/Documentation/RCU/checklist.txt b/Documentation/RCU/checklist.txt index 6e253407b3dc..accfe2f5247d 100644 --- a/Documentation/RCU/checklist.txt +++ b/Documentation/RCU/checklist.txt | |||
| @@ -298,3 +298,15 @@ over a rather long period of time, but improvements are always welcome! | |||
| 298 | 298 | ||
| 299 | Note that, rcu_assign_pointer() and rcu_dereference() relate to | 299 | Note that, rcu_assign_pointer() and rcu_dereference() relate to |
| 300 | SRCU just as they do to other forms of RCU. | 300 | SRCU just as they do to other forms of RCU. |
| 301 | |||
| 302 | 15. The whole point of call_rcu(), synchronize_rcu(), and friends | ||
| 303 | is to wait until all pre-existing readers have finished before | ||
| 304 | carrying out some otherwise-destructive operation. It is | ||
| 305 | therefore critically important to -first- remove any path | ||
| 306 | that readers can follow that could be affected by the | ||
| 307 | destructive operation, and -only- -then- invoke call_rcu(), | ||
| 308 | synchronize_rcu(), or friends. | ||
| 309 | |||
| 310 | Because these primitives only wait for pre-existing readers, | ||
| 311 | it is the caller's responsibility to guarantee safety to | ||
| 312 | any subsequent readers. | ||
diff --git a/Documentation/cgroups/cgroups.txt b/Documentation/cgroups/cgroups.txt index d9e5d6f41b92..93feb8444489 100644 --- a/Documentation/cgroups/cgroups.txt +++ b/Documentation/cgroups/cgroups.txt | |||
| @@ -252,10 +252,8 @@ cgroup file system directories. | |||
| 252 | When a task is moved from one cgroup to another, it gets a new | 252 | When a task is moved from one cgroup to another, it gets a new |
| 253 | css_set pointer - if there's an already existing css_set with the | 253 | css_set pointer - if there's an already existing css_set with the |
| 254 | desired collection of cgroups then that group is reused, else a new | 254 | desired collection of cgroups then that group is reused, else a new |
| 255 | css_set is allocated. Note that the current implementation uses a | 255 | css_set is allocated. The appropriate existing css_set is located by |
| 256 | linear search to locate an appropriate existing css_set, so isn't | 256 | looking into a hash table. |
| 257 | very efficient. A future version will use a hash table for better | ||
| 258 | performance. | ||
| 259 | 257 | ||
| 260 | To allow access from a cgroup to the css_sets (and hence tasks) | 258 | To allow access from a cgroup to the css_sets (and hence tasks) |
| 261 | that comprise it, a set of cg_cgroup_link objects form a lattice; | 259 | that comprise it, a set of cg_cgroup_link objects form a lattice; |
diff --git a/Documentation/cgroups/cpusets.txt b/Documentation/cgroups/cpusets.txt index 5c86c258c791..0611e9528c7c 100644 --- a/Documentation/cgroups/cpusets.txt +++ b/Documentation/cgroups/cpusets.txt | |||
| @@ -142,7 +142,7 @@ into the rest of the kernel, none in performance critical paths: | |||
| 142 | - in fork and exit, to attach and detach a task from its cpuset. | 142 | - in fork and exit, to attach and detach a task from its cpuset. |
| 143 | - in sched_setaffinity, to mask the requested CPUs by what's | 143 | - in sched_setaffinity, to mask the requested CPUs by what's |
| 144 | allowed in that tasks cpuset. | 144 | allowed in that tasks cpuset. |
| 145 | - in sched.c migrate_all_tasks(), to keep migrating tasks within | 145 | - in sched.c migrate_live_tasks(), to keep migrating tasks within |
| 146 | the CPUs allowed by their cpuset, if possible. | 146 | the CPUs allowed by their cpuset, if possible. |
| 147 | - in the mbind and set_mempolicy system calls, to mask the requested | 147 | - in the mbind and set_mempolicy system calls, to mask the requested |
| 148 | Memory Nodes by what's allowed in that tasks cpuset. | 148 | Memory Nodes by what's allowed in that tasks cpuset. |
| @@ -175,6 +175,10 @@ files describing that cpuset: | |||
| 175 | - mem_exclusive flag: is memory placement exclusive? | 175 | - mem_exclusive flag: is memory placement exclusive? |
| 176 | - mem_hardwall flag: is memory allocation hardwalled | 176 | - mem_hardwall flag: is memory allocation hardwalled |
| 177 | - memory_pressure: measure of how much paging pressure in cpuset | 177 | - memory_pressure: measure of how much paging pressure in cpuset |
| 178 | - memory_spread_page flag: if set, spread page cache evenly on allowed nodes | ||
| 179 | - memory_spread_slab flag: if set, spread slab cache evenly on allowed nodes | ||
| 180 | - sched_load_balance flag: if set, load balance within CPUs on that cpuset | ||
| 181 | - sched_relax_domain_level: the searching range when migrating tasks | ||
| 178 | 182 | ||
| 179 | In addition, the root cpuset only has the following file: | 183 | In addition, the root cpuset only has the following file: |
| 180 | - memory_pressure_enabled flag: compute memory_pressure? | 184 | - memory_pressure_enabled flag: compute memory_pressure? |
| @@ -252,7 +256,7 @@ is causing. | |||
| 252 | 256 | ||
| 253 | This is useful both on tightly managed systems running a wide mix of | 257 | This is useful both on tightly managed systems running a wide mix of |
| 254 | submitted jobs, which may choose to terminate or re-prioritize jobs that | 258 | submitted jobs, which may choose to terminate or re-prioritize jobs that |
| 255 | are trying to use more memory than allowed on the nodes assigned them, | 259 | are trying to use more memory than allowed on the nodes assigned to them, |
| 256 | and with tightly coupled, long running, massively parallel scientific | 260 | and with tightly coupled, long running, massively parallel scientific |
| 257 | computing jobs that will dramatically fail to meet required performance | 261 | computing jobs that will dramatically fail to meet required performance |
| 258 | goals if they start to use more memory than allowed to them. | 262 | goals if they start to use more memory than allowed to them. |
| @@ -378,7 +382,7 @@ as cpusets and sched_setaffinity. | |||
| 378 | The algorithmic cost of load balancing and its impact on key shared | 382 | The algorithmic cost of load balancing and its impact on key shared |
| 379 | kernel data structures such as the task list increases more than | 383 | kernel data structures such as the task list increases more than |
| 380 | linearly with the number of CPUs being balanced. So the scheduler | 384 | linearly with the number of CPUs being balanced. So the scheduler |
| 381 | has support to partition the systems CPUs into a number of sched | 385 | has support to partition the systems CPUs into a number of sched |
| 382 | domains such that it only load balances within each sched domain. | 386 | domains such that it only load balances within each sched domain. |
| 383 | Each sched domain covers some subset of the CPUs in the system; | 387 | Each sched domain covers some subset of the CPUs in the system; |
| 384 | no two sched domains overlap; some CPUs might not be in any sched | 388 | no two sched domains overlap; some CPUs might not be in any sched |
| @@ -485,17 +489,22 @@ of CPUs allowed to a cpuset having 'sched_load_balance' enabled. | |||
| 485 | The internal kernel cpuset to scheduler interface passes from the | 489 | The internal kernel cpuset to scheduler interface passes from the |
| 486 | cpuset code to the scheduler code a partition of the load balanced | 490 | cpuset code to the scheduler code a partition of the load balanced |
| 487 | CPUs in the system. This partition is a set of subsets (represented | 491 | CPUs in the system. This partition is a set of subsets (represented |
| 488 | as an array of cpumask_t) of CPUs, pairwise disjoint, that cover all | 492 | as an array of struct cpumask) of CPUs, pairwise disjoint, that cover |
| 489 | the CPUs that must be load balanced. | 493 | all the CPUs that must be load balanced. |
| 490 | 494 | ||
| 491 | Whenever the 'sched_load_balance' flag changes, or CPUs come or go | 495 | The cpuset code builds a new such partition and passes it to the |
| 492 | from a cpuset with this flag enabled, or a cpuset with this flag | 496 | scheduler sched domain setup code, to have the sched domains rebuilt |
| 493 | enabled is removed, the cpuset code builds a new such partition and | 497 | as necessary, whenever: |
| 494 | passes it to the scheduler sched domain setup code, to have the sched | 498 | - the 'sched_load_balance' flag of a cpuset with non-empty CPUs changes, |
| 495 | domains rebuilt as necessary. | 499 | - or CPUs come or go from a cpuset with this flag enabled, |
| 500 | - or 'sched_relax_domain_level' value of a cpuset with non-empty CPUs | ||
| 501 | and with this flag enabled changes, | ||
| 502 | - or a cpuset with non-empty CPUs and with this flag enabled is removed, | ||
| 503 | - or a cpu is offlined/onlined. | ||
| 496 | 504 | ||
| 497 | This partition exactly defines what sched domains the scheduler should | 505 | This partition exactly defines what sched domains the scheduler should |
| 498 | setup - one sched domain for each element (cpumask_t) in the partition. | 506 | setup - one sched domain for each element (struct cpumask) in the |
| 507 | partition. | ||
| 499 | 508 | ||
| 500 | The scheduler remembers the currently active sched domain partitions. | 509 | The scheduler remembers the currently active sched domain partitions. |
| 501 | When the scheduler routine partition_sched_domains() is invoked from | 510 | When the scheduler routine partition_sched_domains() is invoked from |
| @@ -559,7 +568,7 @@ domain, the largest value among those is used. Be careful, if one | |||
| 559 | requests 0 and others are -1 then 0 is used. | 568 | requests 0 and others are -1 then 0 is used. |
| 560 | 569 | ||
| 561 | Note that modifying this file will have both good and bad effects, | 570 | Note that modifying this file will have both good and bad effects, |
| 562 | and whether it is acceptable or not will be depend on your situation. | 571 | and whether it is acceptable or not depends on your situation. |
| 563 | Don't modify this file if you are not sure. | 572 | Don't modify this file if you are not sure. |
| 564 | 573 | ||
| 565 | If your situation is: | 574 | If your situation is: |
| @@ -600,19 +609,15 @@ to allocate a page of memory for that task. | |||
| 600 | 609 | ||
| 601 | If a cpuset has its 'cpus' modified, then each task in that cpuset | 610 | If a cpuset has its 'cpus' modified, then each task in that cpuset |
| 602 | will have its allowed CPU placement changed immediately. Similarly, | 611 | will have its allowed CPU placement changed immediately. Similarly, |
| 603 | if a tasks pid is written to a cpusets 'tasks' file, in either its | 612 | if a tasks pid is written to another cpusets 'tasks' file, then its |
| 604 | current cpuset or another cpuset, then its allowed CPU placement is | 613 | allowed CPU placement is changed immediately. If such a task had been |
| 605 | changed immediately. If such a task had been bound to some subset | 614 | bound to some subset of its cpuset using the sched_setaffinity() call, |
| 606 | of its cpuset using the sched_setaffinity() call, the task will be | 615 | the task will be allowed to run on any CPU allowed in its new cpuset, |
| 607 | allowed to run on any CPU allowed in its new cpuset, negating the | 616 | negating the effect of the prior sched_setaffinity() call. |
| 608 | affect of the prior sched_setaffinity() call. | ||
| 609 | 617 | ||
| 610 | In summary, the memory placement of a task whose cpuset is changed is | 618 | In summary, the memory placement of a task whose cpuset is changed is |
| 611 | updated by the kernel, on the next allocation of a page for that task, | 619 | updated by the kernel, on the next allocation of a page for that task, |
| 612 | but the processor placement is not updated, until that tasks pid is | 620 | and the processor placement is updated immediately. |
| 613 | rewritten to the 'tasks' file of its cpuset. This is done to avoid | ||
| 614 | impacting the scheduler code in the kernel with a check for changes | ||
| 615 | in a tasks processor placement. | ||
| 616 | 621 | ||
| 617 | Normally, once a page is allocated (given a physical page | 622 | Normally, once a page is allocated (given a physical page |
| 618 | of main memory) then that page stays on whatever node it | 623 | of main memory) then that page stays on whatever node it |
| @@ -681,10 +686,14 @@ and then start a subshell 'sh' in that cpuset: | |||
| 681 | # The next line should display '/Charlie' | 686 | # The next line should display '/Charlie' |
| 682 | cat /proc/self/cpuset | 687 | cat /proc/self/cpuset |
| 683 | 688 | ||
| 684 | In the future, a C library interface to cpusets will likely be | 689 | There are ways to query or modify cpusets: |
| 685 | available. For now, the only way to query or modify cpusets is | 690 | - via the cpuset file system directly, using the various cd, mkdir, echo, |
| 686 | via the cpuset file system, using the various cd, mkdir, echo, cat, | 691 | cat, rmdir commands from the shell, or their equivalent from C. |
| 687 | rmdir commands from the shell, or their equivalent from C. | 692 | - via the C library libcpuset. |
| 693 | - via the C library libcgroup. | ||
| 694 | (http://sourceforge.net/proects/libcg/) | ||
| 695 | - via the python application cset. | ||
| 696 | (http://developer.novell.com/wiki/index.php/Cpuset) | ||
| 688 | 697 | ||
| 689 | The sched_setaffinity calls can also be done at the shell prompt using | 698 | The sched_setaffinity calls can also be done at the shell prompt using |
| 690 | SGI's runon or Robert Love's taskset. The mbind and set_mempolicy | 699 | SGI's runon or Robert Love's taskset. The mbind and set_mempolicy |
| @@ -756,7 +765,7 @@ mount -t cpuset X /dev/cpuset | |||
| 756 | 765 | ||
| 757 | is equivalent to | 766 | is equivalent to |
| 758 | 767 | ||
| 759 | mount -t cgroup -ocpuset X /dev/cpuset | 768 | mount -t cgroup -ocpuset,noprefix X /dev/cpuset |
| 760 | echo "/sbin/cpuset_release_agent" > /dev/cpuset/release_agent | 769 | echo "/sbin/cpuset_release_agent" > /dev/cpuset/release_agent |
| 761 | 770 | ||
| 762 | 2.2 Adding/removing cpus | 771 | 2.2 Adding/removing cpus |
diff --git a/Documentation/connector/cn_test.c b/Documentation/connector/cn_test.c index be7af146dd30..6977c178729a 100644 --- a/Documentation/connector/cn_test.c +++ b/Documentation/connector/cn_test.c | |||
| @@ -137,7 +137,7 @@ static void cn_test_timer_func(unsigned long __data) | |||
| 137 | 137 | ||
| 138 | memcpy(m + 1, data, m->len); | 138 | memcpy(m + 1, data, m->len); |
| 139 | 139 | ||
| 140 | cn_netlink_send(m, 0, gfp_any()); | 140 | cn_netlink_send(m, 0, GFP_ATOMIC); |
| 141 | kfree(m); | 141 | kfree(m); |
| 142 | } | 142 | } |
| 143 | 143 | ||
| @@ -160,10 +160,8 @@ static int cn_test_init(void) | |||
| 160 | goto err_out; | 160 | goto err_out; |
| 161 | } | 161 | } |
| 162 | 162 | ||
| 163 | init_timer(&cn_test_timer); | 163 | setup_timer(&cn_test_timer, cn_test_timer_func, 0); |
| 164 | cn_test_timer.function = cn_test_timer_func; | ||
| 165 | cn_test_timer.expires = jiffies + HZ; | 164 | cn_test_timer.expires = jiffies + HZ; |
| 166 | cn_test_timer.data = 0; | ||
| 167 | add_timer(&cn_test_timer); | 165 | add_timer(&cn_test_timer); |
| 168 | 166 | ||
| 169 | return 0; | 167 | return 0; |
diff --git a/Documentation/cpu-freq/user-guide.txt b/Documentation/cpu-freq/user-guide.txt index e3443ddcfb89..917918f84fc7 100644 --- a/Documentation/cpu-freq/user-guide.txt +++ b/Documentation/cpu-freq/user-guide.txt | |||
| @@ -195,19 +195,3 @@ scaling_setspeed. By "echoing" a new frequency into this | |||
| 195 | you can change the speed of the CPU, | 195 | you can change the speed of the CPU, |
| 196 | but only within the limits of | 196 | but only within the limits of |
| 197 | scaling_min_freq and scaling_max_freq. | 197 | scaling_min_freq and scaling_max_freq. |
| 198 | |||
| 199 | |||
| 200 | 3.2 Deprecated Interfaces | ||
| 201 | ------------------------- | ||
| 202 | |||
| 203 | Depending on your kernel configuration, you might find the following | ||
| 204 | cpufreq-related files: | ||
| 205 | /proc/cpufreq | ||
| 206 | /proc/sys/cpu/*/speed | ||
| 207 | /proc/sys/cpu/*/speed-min | ||
| 208 | /proc/sys/cpu/*/speed-max | ||
| 209 | |||
| 210 | These are files for deprecated interfaces to cpufreq, which offer far | ||
| 211 | less functionality. Because of this, these interfaces aren't described | ||
| 212 | here. | ||
| 213 | |||
diff --git a/Documentation/driver-model/device.txt b/Documentation/driver-model/device.txt index a05ec50f8004..a7cbfff40d07 100644 --- a/Documentation/driver-model/device.txt +++ b/Documentation/driver-model/device.txt | |||
| @@ -127,9 +127,11 @@ void unlock_device(struct device * dev); | |||
| 127 | Attributes | 127 | Attributes |
| 128 | ~~~~~~~~~~ | 128 | ~~~~~~~~~~ |
| 129 | struct device_attribute { | 129 | struct device_attribute { |
| 130 | struct attribute attr; | 130 | struct attribute attr; |
| 131 | ssize_t (*show)(struct device * dev, char * buf, size_t count, loff_t off); | 131 | ssize_t (*show)(struct device *dev, struct device_attribute *attr, |
| 132 | ssize_t (*store)(struct device * dev, const char * buf, size_t count, loff_t off); | 132 | char *buf); |
| 133 | ssize_t (*store)(struct device *dev, struct device_attribute *attr, | ||
| 134 | const char *buf, size_t count); | ||
| 133 | }; | 135 | }; |
| 134 | 136 | ||
| 135 | Attributes of devices can be exported via drivers using a simple | 137 | Attributes of devices can be exported via drivers using a simple |
diff --git a/Documentation/dvb/README.flexcop b/Documentation/dvb/README.flexcop deleted file mode 100644 index 5515469de7cf..000000000000 --- a/Documentation/dvb/README.flexcop +++ /dev/null | |||
| @@ -1,205 +0,0 @@ | |||
| 1 | This README escorted the skystar2-driver rewriting procedure. It describes the | ||
| 2 | state of the new flexcop-driver set and some internals are written down here | ||
| 3 | too. | ||
| 4 | |||
| 5 | This document hopefully describes things about the flexcop and its | ||
| 6 | device-offsprings. Goal was to write an easy-to-write and easy-to-read set of | ||
| 7 | drivers based on the skystar2.c and other information. | ||
| 8 | |||
| 9 | Remark: flexcop-pci.c was a copy of skystar2.c, but every line has been | ||
| 10 | touched and rewritten. | ||
| 11 | |||
| 12 | History & News | ||
| 13 | ============== | ||
| 14 | 2005-04-01 - correct USB ISOC transfers (thanks to Vadim Catana) | ||
| 15 | |||
| 16 | |||
| 17 | |||
| 18 | |||
| 19 | General coding processing | ||
| 20 | ========================= | ||
| 21 | |||
| 22 | We should proceed as follows (as long as no one complains): | ||
| 23 | |||
| 24 | 0) Think before start writing code! | ||
| 25 | |||
| 26 | 1) rewriting the skystar2.c with the help of the flexcop register descriptions | ||
| 27 | and splitting up the files to a pci-bus-part and a flexcop-part. | ||
| 28 | The new driver will be called b2c2-flexcop-pci.ko/b2c2-flexcop-usb.ko for the | ||
| 29 | device-specific part and b2c2-flexcop.ko for the common flexcop-functions. | ||
| 30 | |||
| 31 | 2) Search for errors in the leftover of flexcop-pci.c (compare with pluto2.c | ||
| 32 | and other pci drivers) | ||
| 33 | |||
| 34 | 3) make some beautification (see 'Improvements when rewriting (refactoring) is | ||
| 35 | done') | ||
| 36 | |||
| 37 | 4) Testing the new driver and maybe substitute the skystar2.c with it, to reach | ||
| 38 | a wider tester audience. | ||
| 39 | |||
| 40 | 5) creating an usb-bus-part using the already written flexcop code for the pci | ||
| 41 | card. | ||
| 42 | |||
| 43 | Idea: create a kernel-object for the flexcop and export all important | ||
| 44 | functions. This option saves kernel-memory, but maybe a lot of functions have | ||
| 45 | to be exported to kernel namespace. | ||
| 46 | |||
| 47 | |||
| 48 | Current situation | ||
| 49 | ================= | ||
| 50 | |||
| 51 | 0) Done :) | ||
| 52 | 1) Done (some minor issues left) | ||
| 53 | 2) Done | ||
| 54 | 3) Not ready yet, more information is necessary | ||
| 55 | 4) next to be done (see the table below) | ||
| 56 | 5) USB driver is working (yes, there are some minor issues) | ||
| 57 | |||
| 58 | What seems to be ready? | ||
| 59 | ----------------------- | ||
| 60 | |||
| 61 | 1) Rewriting | ||
| 62 | 1a) i2c is cut off from the flexcop-pci.c and seems to work | ||
| 63 | 1b) moved tuner and demod stuff from flexcop-pci.c to flexcop-tuner-fe.c | ||
| 64 | 1c) moved lnb and diseqc stuff from flexcop-pci.c to flexcop-tuner-fe.c | ||
| 65 | 1e) eeprom (reading MAC address) | ||
| 66 | 1d) sram (no dynamic sll size detection (commented out) (using default as JJ told me)) | ||
| 67 | 1f) misc. register accesses for reading parameters (e.g. resetting, revision) | ||
| 68 | 1g) pid/mac filter (flexcop-hw-filter.c) | ||
| 69 | 1i) dvb-stuff initialization in flexcop.c (done) | ||
| 70 | 1h) dma stuff (now just using the size-irq, instead of all-together, to be done) | ||
| 71 | 1j) remove flexcop initialization from flexcop-pci.c completely (done) | ||
| 72 | 1l) use a well working dma IRQ method (done, see 'Known bugs and problems and TODO') | ||
| 73 | 1k) cleanup flexcop-files (remove unused EXPORT_SYMBOLs, make static from | ||
| 74 | non-static where possible, moved code to proper places) | ||
| 75 | |||
| 76 | 2) Search for errors in the leftover of flexcop-pci.c (partially done) | ||
| 77 | 5a) add MAC address reading | ||
| 78 | 5c) feeding of ISOC data to the software demux (format of the isochronous data | ||
| 79 | and speed optimization, no real error) (thanks to Vadim Catana) | ||
| 80 | |||
| 81 | What to do in the near future? | ||
| 82 | -------------------------------------- | ||
| 83 | (no special order here) | ||
| 84 | |||
| 85 | 5) USB driver | ||
| 86 | 5b) optimize isoc-transfer (submitting/killing isoc URBs when transfer is starting) | ||
| 87 | |||
| 88 | Testing changes | ||
| 89 | --------------- | ||
| 90 | |||
| 91 | O = item is working | ||
| 92 | P = item is partially working | ||
| 93 | X = item is not working | ||
| 94 | N = item does not apply here | ||
| 95 | <empty field> = item need to be examined | ||
| 96 | |||
| 97 | | PCI | USB | ||
| 98 | item | mt352 | nxt2002 | stv0299 | mt312 | mt352 | nxt2002 | stv0299 | mt312 | ||
| 99 | -------+-------+---------+---------+-------+-------+---------+---------+------- | ||
| 100 | 1a) | O | | | | N | N | N | N | ||
| 101 | 1b) | O | | | | | | O | | ||
| 102 | 1c) | N | N | | | N | N | O | | ||
| 103 | 1d) | O | O | ||
| 104 | 1e) | O | O | ||
| 105 | 1f) | P | ||
| 106 | 1g) | O | ||
| 107 | 1h) | P | | ||
| 108 | 1i) | O | N | ||
| 109 | 1j) | O | N | ||
| 110 | 1l) | O | N | ||
| 111 | 2) | O | N | ||
| 112 | 5a) | N | O | ||
| 113 | 5b)* | N | | ||
| 114 | 5c) | N | O | ||
| 115 | |||
| 116 | * - not done yet | ||
| 117 | |||
| 118 | Known bugs and problems and TODO | ||
| 119 | -------------------------------- | ||
| 120 | |||
| 121 | 1g/h/l) when pid filtering is enabled on the pci card | ||
| 122 | |||
| 123 | DMA usage currently: | ||
| 124 | The DMA is splitted in 2 equal-sized subbuffers. The Flexcop writes to first | ||
| 125 | address and triggers an IRQ when it's full and starts writing to the second | ||
| 126 | address. When the second address is full, the IRQ is triggered again, and | ||
| 127 | the flexcop writes to first address again, and so on. | ||
| 128 | The buffersize of each address is currently 640*188 bytes. | ||
| 129 | |||
| 130 | Problem is, when using hw-pid-filtering and doing some low-bandwidth | ||
| 131 | operation (like scanning) the buffers won't be filled enough to trigger | ||
| 132 | the IRQ. That's why: | ||
| 133 | |||
| 134 | When PID filtering is activated, the timer IRQ is used. Every 1.97 ms the IRQ | ||
| 135 | is triggered. Is the current write address of DMA1 different to the one | ||
| 136 | during the last IRQ, then the data is passed to the demuxer. | ||
| 137 | |||
| 138 | There is an additional DMA-IRQ-method: packet count IRQ. This isn't | ||
| 139 | implemented correctly yet. | ||
| 140 | |||
| 141 | The solution is to disable HW PID filtering, but I don't know how the DVB | ||
| 142 | API software demux behaves on slow systems with 45MBit/s TS. | ||
| 143 | |||
| 144 | Solved bugs :) | ||
| 145 | -------------- | ||
| 146 | 1g) pid-filtering (somehow pid index 4 and 5 (EMM_PID and ECM_PID) aren't | ||
| 147 | working) | ||
| 148 | SOLUTION: also index 0 was affected, because net_translation is done for | ||
| 149 | these indexes by default | ||
| 150 | |||
| 151 | 5b) isochronous transfer does only work in the first attempt (for the Sky2PC | ||
| 152 | USB, Air2PC is working) SOLUTION: the flexcop was going asleep and never really | ||
| 153 | woke up again (don't know if this need fixes, see | ||
| 154 | flexcop-fe-tuner.c:flexcop_sleep) | ||
| 155 | |||
| 156 | NEWS: when the driver is loaded and unloaded and loaded again (w/o doing | ||
| 157 | anything in the while the driver is loaded the first time), no transfers take | ||
| 158 | place anymore. | ||
| 159 | |||
| 160 | Improvements when rewriting (refactoring) is done | ||
| 161 | ================================================= | ||
| 162 | |||
| 163 | - split sleeping of the flexcop (misc_204.ACPI3_sig = 1;) from lnb_control | ||
| 164 | (enable sleeping for other demods than dvb-s) | ||
| 165 | - add support for CableStar (stv0297 Microtune 203x/ALPS) (almost done, incompatibilities with the Nexus-CA) | ||
| 166 | |||
| 167 | Debugging | ||
| 168 | --------- | ||
| 169 | - add verbose debugging to skystar2.c (dump the reg_dw_data) and compare it | ||
| 170 | with this flexcop, this is important, because i2c is now using the | ||
| 171 | flexcop_ibi_value union from flexcop-reg.h (do you have a better idea for | ||
| 172 | that, please tell us so). | ||
| 173 | |||
| 174 | Everything which is identical in the following table, can be put into a common | ||
| 175 | flexcop-module. | ||
| 176 | |||
| 177 | PCI USB | ||
| 178 | ------------------------------------------------------------------------------- | ||
| 179 | Different: | ||
| 180 | Register access: accessing IO memory USB control message | ||
| 181 | I2C bus: I2C bus of the FC USB control message | ||
| 182 | Data transfer: DMA isochronous transfer | ||
| 183 | EEPROM transfer: through i2c bus not clear yet | ||
| 184 | |||
| 185 | Identical: | ||
| 186 | Streaming: accessing registers | ||
| 187 | PID Filtering: accessing registers | ||
| 188 | Sram destinations: accessing registers | ||
| 189 | Tuner/Demod: I2C bus | ||
| 190 | DVB-stuff: can be written for common use | ||
| 191 | |||
| 192 | Acknowledgements (just for the rewriting part) | ||
| 193 | ================ | ||
| 194 | |||
| 195 | Bjarne Steinsbo thought a lot in the first place of the pci part for this code | ||
| 196 | sharing idea. | ||
| 197 | |||
| 198 | Andreas Oberritter for providing a recent PCI initialization template | ||
| 199 | (pluto2.c). | ||
| 200 | |||
| 201 | Boleslaw Ciesielski for pointing out a problem with firmware loader. | ||
| 202 | |||
| 203 | Vadim Catana for correcting the USB transfer. | ||
| 204 | |||
| 205 | comments, critics and ideas to linux-dvb@linuxtv.org. | ||
diff --git a/Documentation/dvb/technisat.txt b/Documentation/dvb/technisat.txt index cdf6ee4b2da1..3f435ffb289c 100644 --- a/Documentation/dvb/technisat.txt +++ b/Documentation/dvb/technisat.txt | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | How to set up the Technisat devices | 1 | How to set up the Technisat/B2C2 Flexcop devices |
| 2 | =================================== | 2 | ================================================ |
| 3 | 3 | ||
| 4 | 1) Find out what device you have | 4 | 1) Find out what device you have |
| 5 | ================================ | 5 | ================================ |
| @@ -16,54 +16,60 @@ DVB: registering frontend 0 (Conexant CX24123/CX24109)... | |||
| 16 | 16 | ||
| 17 | If the Technisat is the only TV device in your box get rid of unnecessary modules and check this one: | 17 | If the Technisat is the only TV device in your box get rid of unnecessary modules and check this one: |
| 18 | "Multimedia devices" => "Customise analog and hybrid tuner modules to build" | 18 | "Multimedia devices" => "Customise analog and hybrid tuner modules to build" |
| 19 | In this directory uncheck every driver which is activated there. | 19 | In this directory uncheck every driver which is activated there (except "Simple tuner support" for case 9 only). |
| 20 | 20 | ||
| 21 | Then please activate: | 21 | Then please activate: |
| 22 | 2a) Main module part: | 22 | 2a) Main module part: |
| 23 | 23 | ||
| 24 | a.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" | 24 | a.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" |
| 25 | b.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Technisat/B2C2 Air/Sky/Cable2PC PCI" in case of a PCI card OR | 25 | b.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Technisat/B2C2 Air/Sky/Cable2PC PCI" in case of a PCI card |
| 26 | OR | ||
| 26 | c.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Technisat/B2C2 Air/Sky/Cable2PC USB" in case of an USB 1.1 adapter | 27 | c.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Technisat/B2C2 Air/Sky/Cable2PC USB" in case of an USB 1.1 adapter |
| 27 | d.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Enable debug for the B2C2 FlexCop drivers" | 28 | d.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Enable debug for the B2C2 FlexCop drivers" |
| 28 | Notice: d.) is helpful for troubleshooting | 29 | Notice: d.) is helpful for troubleshooting |
| 29 | 30 | ||
| 30 | 2b) Frontend module part: | 31 | 2b) Frontend module part: |
| 31 | 32 | ||
| 32 | 1.) Revision 2.3: | 33 | 1.) SkyStar DVB-S Revision 2.3: |
| 33 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" | 34 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" |
| 34 | b.)"Multimedia devices" => "Customise DVB frontends" => "Zarlink VP310/MT312/ZL10313 based" | 35 | b.)"Multimedia devices" => "Customise DVB frontends" => "Zarlink VP310/MT312/ZL10313 based" |
| 35 | 36 | ||
| 36 | 2.) Revision 2.6: | 37 | 2.) SkyStar DVB-S Revision 2.6: |
| 37 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" | 38 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" |
| 38 | b.)"Multimedia devices" => "Customise DVB frontends" => "ST STV0299 based" | 39 | b.)"Multimedia devices" => "Customise DVB frontends" => "ST STV0299 based" |
| 39 | 40 | ||
| 40 | 3.) Revision 2.7: | 41 | 3.) SkyStar DVB-S Revision 2.7: |
| 41 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" | 42 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" |
| 42 | b.)"Multimedia devices" => "Customise DVB frontends" => "Samsung S5H1420 based" | 43 | b.)"Multimedia devices" => "Customise DVB frontends" => "Samsung S5H1420 based" |
| 43 | c.)"Multimedia devices" => "Customise DVB frontends" => "Integrant ITD1000 Zero IF tuner for DVB-S/DSS" | 44 | c.)"Multimedia devices" => "Customise DVB frontends" => "Integrant ITD1000 Zero IF tuner for DVB-S/DSS" |
| 44 | d.)"Multimedia devices" => "Customise DVB frontends" => "ISL6421 SEC controller" | 45 | d.)"Multimedia devices" => "Customise DVB frontends" => "ISL6421 SEC controller" |
| 45 | 46 | ||
| 46 | 4.) Revision 2.8: | 47 | 4.) SkyStar DVB-S Revision 2.8: |
| 47 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" | 48 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" |
| 48 | b.)"Multimedia devices" => "Customise DVB frontends" => "Conexant CX24113/CX24128 tuner for DVB-S/DSS" | 49 | b.)"Multimedia devices" => "Customise DVB frontends" => "Conexant CX24113/CX24128 tuner for DVB-S/DSS" |
| 49 | c.)"Multimedia devices" => "Customise DVB frontends" => "Conexant CX24123 based" | 50 | c.)"Multimedia devices" => "Customise DVB frontends" => "Conexant CX24123 based" |
| 50 | d.)"Multimedia devices" => "Customise DVB frontends" => "ISL6421 SEC controller" | 51 | d.)"Multimedia devices" => "Customise DVB frontends" => "ISL6421 SEC controller" |
| 51 | 52 | ||
| 52 | 5.) DVB-T card: | 53 | 5.) AirStar DVB-T card: |
| 53 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" | 54 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" |
| 54 | b.)"Multimedia devices" => "Customise DVB frontends" => "Zarlink MT352 based" | 55 | b.)"Multimedia devices" => "Customise DVB frontends" => "Zarlink MT352 based" |
| 55 | 56 | ||
| 56 | 6.) DVB-C card: | 57 | 6.) CableStar DVB-C card: |
| 57 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" | 58 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" |
| 58 | b.)"Multimedia devices" => "Customise DVB frontends" => "ST STV0297 based" | 59 | b.)"Multimedia devices" => "Customise DVB frontends" => "ST STV0297 based" |
| 59 | 60 | ||
| 60 | 7.) ATSC card 1st generation: | 61 | 7.) AirStar ATSC card 1st generation: |
| 61 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" | 62 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" |
| 62 | b.)"Multimedia devices" => "Customise DVB frontends" => "Broadcom BCM3510" | 63 | b.)"Multimedia devices" => "Customise DVB frontends" => "Broadcom BCM3510" |
| 63 | 64 | ||
| 64 | 8.) ATSC card 2nd generation: | 65 | 8.) AirStar ATSC card 2nd generation: |
| 65 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" | 66 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" |
| 66 | b.)"Multimedia devices" => "Customise DVB frontends" => "NxtWave Communications NXT2002/NXT2004 based" | 67 | b.)"Multimedia devices" => "Customise DVB frontends" => "NxtWave Communications NXT2002/NXT2004 based" |
| 67 | c.)"Multimedia devices" => "Customise DVB frontends" => "LG Electronics LGDT3302/LGDT3303 based" | 68 | c.)"Multimedia devices" => "Customise DVB frontends" => "Generic I2C PLL based tuners" |
| 68 | 69 | ||
| 69 | Author: Uwe Bugla <uwe.bugla@gmx.de> December 2008 | 70 | 9.) AirStar ATSC card 3rd generation: |
| 71 | a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" | ||
| 72 | b.)"Multimedia devices" => "Customise DVB frontends" => "LG Electronics LGDT3302/LGDT3303 based" | ||
| 73 | c.)"Multimedia devices" => "Customise analog and hybrid tuner modules to build" => "Simple tuner support" | ||
| 74 | |||
| 75 | Author: Uwe Bugla <uwe.bugla@gmx.de> February 2009 | ||
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index 5ddbe350487a..20d3b94703a4 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
| @@ -335,3 +335,12 @@ Why: In 2.6.18 the Secmark concept was introduced to replace the "compat_net" | |||
| 335 | Secmark, it is time to deprecate the older mechanism and start the | 335 | Secmark, it is time to deprecate the older mechanism and start the |
| 336 | process of removing the old code. | 336 | process of removing the old code. |
| 337 | Who: Paul Moore <paul.moore@hp.com> | 337 | Who: Paul Moore <paul.moore@hp.com> |
| 338 | --------------------------- | ||
| 339 | |||
| 340 | What: sysfs ui for changing p4-clockmod parameters | ||
| 341 | When: September 2009 | ||
| 342 | Why: See commits 129f8ae9b1b5be94517da76009ea956e89104ce8 and | ||
| 343 | e088e4c9cdb618675874becb91b2fd581ee707e6. | ||
| 344 | Removal is subject to fixing any remaining bugs in ACPI which may | ||
| 345 | cause the thermal throttling not to happen at the right time. | ||
| 346 | Who: Dave Jones <davej@redhat.com>, Matthew Garrett <mjg@redhat.com> | ||
diff --git a/Documentation/filesystems/squashfs.txt b/Documentation/filesystems/squashfs.txt index 3e79e4a7a392..b324c033035a 100644 --- a/Documentation/filesystems/squashfs.txt +++ b/Documentation/filesystems/squashfs.txt | |||
| @@ -22,7 +22,7 @@ Squashfs filesystem features versus Cramfs: | |||
| 22 | 22 | ||
| 23 | Squashfs Cramfs | 23 | Squashfs Cramfs |
| 24 | 24 | ||
| 25 | Max filesystem size: 2^64 16 MiB | 25 | Max filesystem size: 2^64 256 MiB |
| 26 | Max file size: ~ 2 TiB 16 MiB | 26 | Max file size: ~ 2 TiB 16 MiB |
| 27 | Max files: unlimited unlimited | 27 | Max files: unlimited unlimited |
| 28 | Max directories: unlimited unlimited | 28 | Max directories: unlimited unlimited |
diff --git a/Documentation/filesystems/sysfs-pci.txt b/Documentation/filesystems/sysfs-pci.txt index 68ef48839c04..9f8740ca3f3b 100644 --- a/Documentation/filesystems/sysfs-pci.txt +++ b/Documentation/filesystems/sysfs-pci.txt | |||
| @@ -9,6 +9,7 @@ that support it. For example, a given bus might look like this: | |||
| 9 | | |-- class | 9 | | |-- class |
| 10 | | |-- config | 10 | | |-- config |
| 11 | | |-- device | 11 | | |-- device |
| 12 | | |-- enable | ||
| 12 | | |-- irq | 13 | | |-- irq |
| 13 | | |-- local_cpus | 14 | | |-- local_cpus |
| 14 | | |-- resource | 15 | | |-- resource |
| @@ -32,6 +33,7 @@ files, each with their own function. | |||
| 32 | class PCI class (ascii, ro) | 33 | class PCI class (ascii, ro) |
| 33 | config PCI config space (binary, rw) | 34 | config PCI config space (binary, rw) |
| 34 | device PCI device (ascii, ro) | 35 | device PCI device (ascii, ro) |
| 36 | enable Whether the device is enabled (ascii, rw) | ||
| 35 | irq IRQ number (ascii, ro) | 37 | irq IRQ number (ascii, ro) |
| 36 | local_cpus nearby CPU mask (cpumask, ro) | 38 | local_cpus nearby CPU mask (cpumask, ro) |
| 37 | resource PCI resource host addresses (ascii, ro) | 39 | resource PCI resource host addresses (ascii, ro) |
| @@ -57,10 +59,19 @@ used to do actual device programming from userspace. Note that some platforms | |||
| 57 | don't support mmapping of certain resources, so be sure to check the return | 59 | don't support mmapping of certain resources, so be sure to check the return |
| 58 | value from any attempted mmap. | 60 | value from any attempted mmap. |
| 59 | 61 | ||
| 62 | The 'enable' file provides a counter that indicates how many times the device | ||
| 63 | has been enabled. If the 'enable' file currently returns '4', and a '1' is | ||
| 64 | echoed into it, it will then return '5'. Echoing a '0' into it will decrease | ||
| 65 | the count. Even when it returns to 0, though, some of the initialisation | ||
| 66 | may not be reversed. | ||
| 67 | |||
| 60 | The 'rom' file is special in that it provides read-only access to the device's | 68 | The 'rom' file is special in that it provides read-only access to the device's |
| 61 | ROM file, if available. It's disabled by default, however, so applications | 69 | ROM file, if available. It's disabled by default, however, so applications |
| 62 | should write the string "1" to the file to enable it before attempting a read | 70 | should write the string "1" to the file to enable it before attempting a read |
| 63 | call, and disable it following the access by writing "0" to the file. | 71 | call, and disable it following the access by writing "0" to the file. Note |
| 72 | that the device must be enabled for a rom read to return data succesfully. | ||
| 73 | In the event a driver is not bound to the device, it can be enabled using the | ||
| 74 | 'enable' file, documented above. | ||
| 64 | 75 | ||
| 65 | Accessing legacy resources through sysfs | 76 | Accessing legacy resources through sysfs |
| 66 | ---------------------------------------- | 77 | ---------------------------------------- |
diff --git a/Documentation/filesystems/sysfs.txt b/Documentation/filesystems/sysfs.txt index 9e9c348275a9..7e81e37c0b1e 100644 --- a/Documentation/filesystems/sysfs.txt +++ b/Documentation/filesystems/sysfs.txt | |||
| @@ -2,8 +2,10 @@ | |||
| 2 | sysfs - _The_ filesystem for exporting kernel objects. | 2 | sysfs - _The_ filesystem for exporting kernel objects. |
| 3 | 3 | ||
| 4 | Patrick Mochel <mochel@osdl.org> | 4 | Patrick Mochel <mochel@osdl.org> |
| 5 | Mike Murphy <mamurph@cs.clemson.edu> | ||
| 5 | 6 | ||
| 6 | 10 January 2003 | 7 | Revised: 22 February 2009 |
| 8 | Original: 10 January 2003 | ||
| 7 | 9 | ||
| 8 | 10 | ||
| 9 | What it is: | 11 | What it is: |
| @@ -64,12 +66,13 @@ An attribute definition is simply: | |||
| 64 | 66 | ||
| 65 | struct attribute { | 67 | struct attribute { |
| 66 | char * name; | 68 | char * name; |
| 69 | struct module *owner; | ||
| 67 | mode_t mode; | 70 | mode_t mode; |
| 68 | }; | 71 | }; |
| 69 | 72 | ||
| 70 | 73 | ||
| 71 | int sysfs_create_file(struct kobject * kobj, struct attribute * attr); | 74 | int sysfs_create_file(struct kobject * kobj, const struct attribute * attr); |
| 72 | void sysfs_remove_file(struct kobject * kobj, struct attribute * attr); | 75 | void sysfs_remove_file(struct kobject * kobj, const struct attribute * attr); |
| 73 | 76 | ||
| 74 | 77 | ||
| 75 | A bare attribute contains no means to read or write the value of the | 78 | A bare attribute contains no means to read or write the value of the |
| @@ -80,9 +83,11 @@ a specific object type. | |||
| 80 | For example, the driver model defines struct device_attribute like: | 83 | For example, the driver model defines struct device_attribute like: |
| 81 | 84 | ||
| 82 | struct device_attribute { | 85 | struct device_attribute { |
| 83 | struct attribute attr; | 86 | struct attribute attr; |
| 84 | ssize_t (*show)(struct device * dev, char * buf); | 87 | ssize_t (*show)(struct device *dev, struct device_attribute *attr, |
| 85 | ssize_t (*store)(struct device * dev, const char * buf); | 88 | char *buf); |
| 89 | ssize_t (*store)(struct device *dev, struct device_attribute *attr, | ||
| 90 | const char *buf, size_t count); | ||
| 86 | }; | 91 | }; |
| 87 | 92 | ||
| 88 | int device_create_file(struct device *, struct device_attribute *); | 93 | int device_create_file(struct device *, struct device_attribute *); |
| @@ -90,12 +95,8 @@ void device_remove_file(struct device *, struct device_attribute *); | |||
| 90 | 95 | ||
| 91 | It also defines this helper for defining device attributes: | 96 | It also defines this helper for defining device attributes: |
| 92 | 97 | ||
| 93 | #define DEVICE_ATTR(_name, _mode, _show, _store) \ | 98 | #define DEVICE_ATTR(_name, _mode, _show, _store) \ |
| 94 | struct device_attribute dev_attr_##_name = { \ | 99 | struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store) |
| 95 | .attr = {.name = __stringify(_name) , .mode = _mode }, \ | ||
| 96 | .show = _show, \ | ||
| 97 | .store = _store, \ | ||
| 98 | }; | ||
| 99 | 100 | ||
| 100 | For example, declaring | 101 | For example, declaring |
| 101 | 102 | ||
| @@ -107,9 +108,9 @@ static struct device_attribute dev_attr_foo = { | |||
| 107 | .attr = { | 108 | .attr = { |
| 108 | .name = "foo", | 109 | .name = "foo", |
| 109 | .mode = S_IWUSR | S_IRUGO, | 110 | .mode = S_IWUSR | S_IRUGO, |
| 111 | .show = show_foo, | ||
| 112 | .store = store_foo, | ||
| 110 | }, | 113 | }, |
| 111 | .show = show_foo, | ||
| 112 | .store = store_foo, | ||
| 113 | }; | 114 | }; |
| 114 | 115 | ||
| 115 | 116 | ||
| @@ -161,10 +162,12 @@ To read or write attributes, show() or store() methods must be | |||
| 161 | specified when declaring the attribute. The method types should be as | 162 | specified when declaring the attribute. The method types should be as |
| 162 | simple as those defined for device attributes: | 163 | simple as those defined for device attributes: |
| 163 | 164 | ||
| 164 | ssize_t (*show)(struct device * dev, char * buf); | 165 | ssize_t (*show)(struct device * dev, struct device_attribute * attr, |
| 165 | ssize_t (*store)(struct device * dev, const char * buf); | 166 | char * buf); |
| 167 | ssize_t (*store)(struct device * dev, struct device_attribute * attr, | ||
| 168 | const char * buf); | ||
| 166 | 169 | ||
| 167 | IOW, they should take only an object and a buffer as parameters. | 170 | IOW, they should take only an object, an attribute, and a buffer as parameters. |
| 168 | 171 | ||
| 169 | 172 | ||
| 170 | sysfs allocates a buffer of size (PAGE_SIZE) and passes it to the | 173 | sysfs allocates a buffer of size (PAGE_SIZE) and passes it to the |
| @@ -299,14 +302,16 @@ The following interface layers currently exist in sysfs: | |||
| 299 | Structure: | 302 | Structure: |
| 300 | 303 | ||
| 301 | struct device_attribute { | 304 | struct device_attribute { |
| 302 | struct attribute attr; | 305 | struct attribute attr; |
| 303 | ssize_t (*show)(struct device * dev, char * buf); | 306 | ssize_t (*show)(struct device *dev, struct device_attribute *attr, |
| 304 | ssize_t (*store)(struct device * dev, const char * buf); | 307 | char *buf); |
| 308 | ssize_t (*store)(struct device *dev, struct device_attribute *attr, | ||
| 309 | const char *buf, size_t count); | ||
| 305 | }; | 310 | }; |
| 306 | 311 | ||
| 307 | Declaring: | 312 | Declaring: |
| 308 | 313 | ||
| 309 | DEVICE_ATTR(_name, _str, _mode, _show, _store); | 314 | DEVICE_ATTR(_name, _mode, _show, _store); |
| 310 | 315 | ||
| 311 | Creation/Removal: | 316 | Creation/Removal: |
| 312 | 317 | ||
| @@ -342,7 +347,8 @@ Structure: | |||
| 342 | struct driver_attribute { | 347 | struct driver_attribute { |
| 343 | struct attribute attr; | 348 | struct attribute attr; |
| 344 | ssize_t (*show)(struct device_driver *, char * buf); | 349 | ssize_t (*show)(struct device_driver *, char * buf); |
| 345 | ssize_t (*store)(struct device_driver *, const char * buf); | 350 | ssize_t (*store)(struct device_driver *, const char * buf, |
| 351 | size_t count); | ||
| 346 | }; | 352 | }; |
| 347 | 353 | ||
| 348 | Declaring: | 354 | Declaring: |
diff --git a/Documentation/hwmon/hpfall.c b/Documentation/hwmon/hpfall.c new file mode 100644 index 000000000000..bbea1ccfd46a --- /dev/null +++ b/Documentation/hwmon/hpfall.c | |||
| @@ -0,0 +1,101 @@ | |||
| 1 | /* Disk protection for HP machines. | ||
| 2 | * | ||
| 3 | * Copyright 2008 Eric Piel | ||
| 4 | * Copyright 2009 Pavel Machek <pavel@suse.cz> | ||
| 5 | * | ||
| 6 | * GPLv2. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #include <stdio.h> | ||
| 10 | #include <stdlib.h> | ||
| 11 | #include <unistd.h> | ||
| 12 | #include <fcntl.h> | ||
| 13 | #include <sys/stat.h> | ||
| 14 | #include <sys/types.h> | ||
| 15 | #include <string.h> | ||
| 16 | #include <stdint.h> | ||
| 17 | #include <errno.h> | ||
| 18 | #include <signal.h> | ||
| 19 | |||
| 20 | void write_int(char *path, int i) | ||
| 21 | { | ||
| 22 | char buf[1024]; | ||
| 23 | int fd = open(path, O_RDWR); | ||
| 24 | if (fd < 0) { | ||
| 25 | perror("open"); | ||
| 26 | exit(1); | ||
| 27 | } | ||
| 28 | sprintf(buf, "%d", i); | ||
| 29 | if (write(fd, buf, strlen(buf)) != strlen(buf)) { | ||
| 30 | perror("write"); | ||
| 31 | exit(1); | ||
| 32 | } | ||
| 33 | close(fd); | ||
| 34 | } | ||
| 35 | |||
| 36 | void set_led(int on) | ||
| 37 | { | ||
| 38 | write_int("/sys/class/leds/hp::hddprotect/brightness", on); | ||
| 39 | } | ||
| 40 | |||
| 41 | void protect(int seconds) | ||
| 42 | { | ||
| 43 | write_int("/sys/block/sda/device/unload_heads", seconds*1000); | ||
| 44 | } | ||
| 45 | |||
| 46 | int on_ac(void) | ||
| 47 | { | ||
| 48 | // /sys/class/power_supply/AC0/online | ||
| 49 | } | ||
| 50 | |||
| 51 | int lid_open(void) | ||
| 52 | { | ||
| 53 | // /proc/acpi/button/lid/LID/state | ||
| 54 | } | ||
| 55 | |||
| 56 | void ignore_me(void) | ||
| 57 | { | ||
| 58 | protect(0); | ||
| 59 | set_led(0); | ||
| 60 | |||
| 61 | } | ||
| 62 | |||
| 63 | int main(int argc, char* argv[]) | ||
| 64 | { | ||
| 65 | int fd, ret; | ||
| 66 | |||
| 67 | fd = open("/dev/freefall", O_RDONLY); | ||
| 68 | if (fd < 0) { | ||
| 69 | perror("open"); | ||
| 70 | return EXIT_FAILURE; | ||
| 71 | } | ||
| 72 | |||
| 73 | signal(SIGALRM, ignore_me); | ||
| 74 | |||
| 75 | for (;;) { | ||
| 76 | unsigned char count; | ||
| 77 | |||
| 78 | ret = read(fd, &count, sizeof(count)); | ||
| 79 | alarm(0); | ||
| 80 | if ((ret == -1) && (errno == EINTR)) { | ||
| 81 | /* Alarm expired, time to unpark the heads */ | ||
| 82 | continue; | ||
| 83 | } | ||
| 84 | |||
| 85 | if (ret != sizeof(count)) { | ||
| 86 | perror("read"); | ||
| 87 | break; | ||
| 88 | } | ||
| 89 | |||
| 90 | protect(21); | ||
| 91 | set_led(1); | ||
| 92 | if (1 || on_ac() || lid_open()) { | ||
| 93 | alarm(2); | ||
| 94 | } else { | ||
| 95 | alarm(20); | ||
| 96 | } | ||
| 97 | } | ||
| 98 | |||
| 99 | close(fd); | ||
| 100 | return EXIT_SUCCESS; | ||
| 101 | } | ||
diff --git a/Documentation/hwmon/lis3lv02d b/Documentation/hwmon/lis3lv02d index 0fcfc4a7ccdc..287f8c902656 100644 --- a/Documentation/hwmon/lis3lv02d +++ b/Documentation/hwmon/lis3lv02d | |||
| @@ -33,6 +33,14 @@ rate - reports the sampling rate of the accelerometer device in HZ | |||
| 33 | This driver also provides an absolute input class device, allowing | 33 | This driver also provides an absolute input class device, allowing |
| 34 | the laptop to act as a pinball machine-esque joystick. | 34 | the laptop to act as a pinball machine-esque joystick. |
| 35 | 35 | ||
| 36 | Another feature of the driver is misc device called "freefall" that | ||
| 37 | acts similar to /dev/rtc and reacts on free-fall interrupts received | ||
| 38 | from the device. It supports blocking operations, poll/select and | ||
| 39 | fasync operation modes. You must read 1 bytes from the device. The | ||
| 40 | result is number of free-fall interrupts since the last successful | ||
| 41 | read (or 255 if number of interrupts would not fit). | ||
| 42 | |||
| 43 | |||
| 36 | Axes orientation | 44 | Axes orientation |
| 37 | ---------------- | 45 | ---------------- |
| 38 | 46 | ||
diff --git a/Documentation/kernel-doc-nano-HOWTO.txt b/Documentation/kernel-doc-nano-HOWTO.txt index d73fbd2b2b45..026ec7d57384 100644 --- a/Documentation/kernel-doc-nano-HOWTO.txt +++ b/Documentation/kernel-doc-nano-HOWTO.txt | |||
| @@ -43,7 +43,8 @@ Only comments so marked will be considered by the kernel-doc scripts, | |||
| 43 | and any comment so marked must be in kernel-doc format. Do not use | 43 | and any comment so marked must be in kernel-doc format. Do not use |
| 44 | "/**" to be begin a comment block unless the comment block contains | 44 | "/**" to be begin a comment block unless the comment block contains |
| 45 | kernel-doc formatted comments. The closing comment marker for | 45 | kernel-doc formatted comments. The closing comment marker for |
| 46 | kernel-doc comments can be either "*/" or "**/". | 46 | kernel-doc comments can be either "*/" or "**/", but "*/" is |
| 47 | preferred in the Linux kernel tree. | ||
| 47 | 48 | ||
| 48 | Kernel-doc comments should be placed just before the function | 49 | Kernel-doc comments should be placed just before the function |
| 49 | or data structure being described. | 50 | or data structure being described. |
| @@ -63,7 +64,7 @@ Example kernel-doc function comment: | |||
| 63 | * comment lines. | 64 | * comment lines. |
| 64 | * | 65 | * |
| 65 | * The longer description can have multiple paragraphs. | 66 | * The longer description can have multiple paragraphs. |
| 66 | **/ | 67 | */ |
| 67 | 68 | ||
| 68 | The first line, with the short description, must be on a single line. | 69 | The first line, with the short description, must be on a single line. |
| 69 | 70 | ||
| @@ -85,7 +86,7 @@ Example kernel-doc data structure comment. | |||
| 85 | * perhaps with more lines and words. | 86 | * perhaps with more lines and words. |
| 86 | * | 87 | * |
| 87 | * Longer description of this structure. | 88 | * Longer description of this structure. |
| 88 | **/ | 89 | */ |
| 89 | 90 | ||
| 90 | The kernel-doc function comments describe each parameter to the | 91 | The kernel-doc function comments describe each parameter to the |
| 91 | function, in order, with the @name lines. | 92 | function, in order, with the @name lines. |
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index d8362cf9909e..54f21a5c262b 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
| @@ -114,7 +114,7 @@ In addition, the following text indicates that the option: | |||
| 114 | Parameters denoted with BOOT are actually interpreted by the boot | 114 | Parameters denoted with BOOT are actually interpreted by the boot |
| 115 | loader, and have no meaning to the kernel directly. | 115 | loader, and have no meaning to the kernel directly. |
| 116 | Do not modify the syntax of boot loader parameters without extreme | 116 | Do not modify the syntax of boot loader parameters without extreme |
| 117 | need or coordination with <Documentation/x86/i386/boot.txt>. | 117 | need or coordination with <Documentation/x86/boot.txt>. |
| 118 | 118 | ||
| 119 | There are also arch-specific kernel-parameters not documented here. | 119 | There are also arch-specific kernel-parameters not documented here. |
| 120 | See for example <Documentation/x86/x86_64/boot-options.txt>. | 120 | See for example <Documentation/x86/x86_64/boot-options.txt>. |
| @@ -134,7 +134,7 @@ and is between 256 and 4096 characters. It is defined in the file | |||
| 134 | 134 | ||
| 135 | acpi= [HW,ACPI,X86-64,i386] | 135 | acpi= [HW,ACPI,X86-64,i386] |
| 136 | Advanced Configuration and Power Interface | 136 | Advanced Configuration and Power Interface |
| 137 | Format: { force | off | ht | strict | noirq } | 137 | Format: { force | off | ht | strict | noirq | rsdt } |
| 138 | force -- enable ACPI if default was off | 138 | force -- enable ACPI if default was off |
| 139 | off -- disable ACPI if default was on | 139 | off -- disable ACPI if default was on |
| 140 | noirq -- do not use ACPI for IRQ routing | 140 | noirq -- do not use ACPI for IRQ routing |
| @@ -868,8 +868,10 @@ and is between 256 and 4096 characters. It is defined in the file | |||
| 868 | icn= [HW,ISDN] | 868 | icn= [HW,ISDN] |
| 869 | Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]] | 869 | Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]] |
| 870 | 870 | ||
| 871 | ide= [HW] (E)IDE subsystem | 871 | ide-core.nodma= [HW] (E)IDE subsystem |
| 872 | Format: ide=nodma or ide=doubler | 872 | Format: =0.0 to prevent dma on hda, =0.1 hdb =1.0 hdc |
| 873 | .vlb_clock .pci_clock .noflush .noprobe .nowerr .cdrom | ||
| 874 | .chs .ignore_cable are additional options | ||
| 873 | See Documentation/ide/ide.txt. | 875 | See Documentation/ide/ide.txt. |
| 874 | 876 | ||
| 875 | idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed | 877 | idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed |
| @@ -937,6 +939,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
| 937 | 939 | ||
| 938 | 940 | ||
| 939 | intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option | 941 | intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option |
| 942 | on | ||
| 943 | Enable intel iommu driver. | ||
| 940 | off | 944 | off |
| 941 | Disable intel iommu driver. | 945 | Disable intel iommu driver. |
| 942 | igfx_off [Default Off] | 946 | igfx_off [Default Off] |
| @@ -2447,7 +2451,7 @@ and is between 256 and 4096 characters. It is defined in the file | |||
| 2447 | See Documentation/fb/modedb.txt. | 2451 | See Documentation/fb/modedb.txt. |
| 2448 | 2452 | ||
| 2449 | vga= [BOOT,X86-32] Select a particular video mode | 2453 | vga= [BOOT,X86-32] Select a particular video mode |
| 2450 | See Documentation/x86/i386/boot.txt and | 2454 | See Documentation/x86/boot.txt and |
| 2451 | Documentation/svga.txt. | 2455 | Documentation/svga.txt. |
| 2452 | Use vga=ask for menu. | 2456 | Use vga=ask for menu. |
| 2453 | This is actually a boot loader parameter; the value is | 2457 | This is actually a boot loader parameter; the value is |
diff --git a/Documentation/networking/ipv6.txt b/Documentation/networking/ipv6.txt new file mode 100644 index 000000000000..268e5c103dd8 --- /dev/null +++ b/Documentation/networking/ipv6.txt | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | |||
| 2 | Options for the ipv6 module are supplied as parameters at load time. | ||
| 3 | |||
| 4 | Module options may be given as command line arguments to the insmod | ||
| 5 | or modprobe command, but are usually specified in either the | ||
| 6 | /etc/modules.conf or /etc/modprobe.conf configuration file, or in a | ||
| 7 | distro-specific configuration file. | ||
| 8 | |||
| 9 | The available ipv6 module parameters are listed below. If a parameter | ||
| 10 | is not specified the default value is used. | ||
| 11 | |||
| 12 | The parameters are as follows: | ||
| 13 | |||
| 14 | disable | ||
| 15 | |||
| 16 | Specifies whether to load the IPv6 module, but disable all | ||
| 17 | its functionality. This might be used when another module | ||
| 18 | has a dependency on the IPv6 module being loaded, but no | ||
| 19 | IPv6 addresses or operations are desired. | ||
| 20 | |||
| 21 | The possible values and their effects are: | ||
| 22 | |||
| 23 | 0 | ||
| 24 | IPv6 is enabled. | ||
| 25 | |||
| 26 | This is the default value. | ||
| 27 | |||
| 28 | 1 | ||
| 29 | IPv6 is disabled. | ||
| 30 | |||
| 31 | No IPv6 addresses will be added to interfaces, and | ||
| 32 | it will not be possible to open an IPv6 socket. | ||
| 33 | |||
| 34 | A reboot is required to enable IPv6. | ||
| 35 | |||
diff --git a/Documentation/scsi/cxgb3i.txt b/Documentation/scsi/cxgb3i.txt index 8141fa01978e..7ac8032ee9b2 100644 --- a/Documentation/scsi/cxgb3i.txt +++ b/Documentation/scsi/cxgb3i.txt | |||
| @@ -4,7 +4,7 @@ Introduction | |||
| 4 | ============ | 4 | ============ |
| 5 | 5 | ||
| 6 | The Chelsio T3 ASIC based Adapters (S310, S320, S302, S304, Mezz cards, etc. | 6 | The Chelsio T3 ASIC based Adapters (S310, S320, S302, S304, Mezz cards, etc. |
| 7 | series of products) supports iSCSI acceleration and iSCSI Direct Data Placement | 7 | series of products) support iSCSI acceleration and iSCSI Direct Data Placement |
| 8 | (DDP) where the hardware handles the expensive byte touching operations, such | 8 | (DDP) where the hardware handles the expensive byte touching operations, such |
| 9 | as CRC computation and verification, and direct DMA to the final host memory | 9 | as CRC computation and verification, and direct DMA to the final host memory |
| 10 | destination: | 10 | destination: |
| @@ -31,9 +31,9 @@ destination: | |||
| 31 | the TCP segments onto the wire. It handles TCP retransmission if | 31 | the TCP segments onto the wire. It handles TCP retransmission if |
| 32 | needed. | 32 | needed. |
| 33 | 33 | ||
| 34 | On receving, S3 h/w recovers the iSCSI PDU by reassembling TCP | 34 | On receiving, S3 h/w recovers the iSCSI PDU by reassembling TCP |
| 35 | segments, separating the header and data, calculating and verifying | 35 | segments, separating the header and data, calculating and verifying |
| 36 | the digests, then forwards the header to the host. The payload data, | 36 | the digests, then forwarding the header to the host. The payload data, |
| 37 | if possible, will be directly placed into the pre-posted host DDP | 37 | if possible, will be directly placed into the pre-posted host DDP |
| 38 | buffer. Otherwise, the payload data will be sent to the host too. | 38 | buffer. Otherwise, the payload data will be sent to the host too. |
| 39 | 39 | ||
| @@ -68,9 +68,8 @@ The following steps need to be taken to accelerates the open-iscsi initiator: | |||
| 68 | sure the ip address is unique in the network. | 68 | sure the ip address is unique in the network. |
| 69 | 69 | ||
| 70 | 3. edit /etc/iscsi/iscsid.conf | 70 | 3. edit /etc/iscsi/iscsid.conf |
| 71 | The default setting for MaxRecvDataSegmentLength (131072) is too big, | 71 | The default setting for MaxRecvDataSegmentLength (131072) is too big; |
| 72 | replace "node.conn[0].iscsi.MaxRecvDataSegmentLength" to be a value no | 72 | replace with a value no bigger than 15360 (for example 8192): |
| 73 | bigger than 15360 (for example 8192): | ||
| 74 | 73 | ||
| 75 | node.conn[0].iscsi.MaxRecvDataSegmentLength = 8192 | 74 | node.conn[0].iscsi.MaxRecvDataSegmentLength = 8192 |
| 76 | 75 | ||
diff --git a/Documentation/tracers/mmiotrace.txt b/Documentation/tracers/mmiotrace.txt index cde23b4a12a1..5731c67abc55 100644 --- a/Documentation/tracers/mmiotrace.txt +++ b/Documentation/tracers/mmiotrace.txt | |||
| @@ -78,12 +78,10 @@ to view your kernel log and look for "mmiotrace has lost events" warning. If | |||
| 78 | events were lost, the trace is incomplete. You should enlarge the buffers and | 78 | events were lost, the trace is incomplete. You should enlarge the buffers and |
| 79 | try again. Buffers are enlarged by first seeing how large the current buffers | 79 | try again. Buffers are enlarged by first seeing how large the current buffers |
| 80 | are: | 80 | are: |
| 81 | $ cat /debug/tracing/trace_entries | 81 | $ cat /debug/tracing/buffer_size_kb |
| 82 | gives you a number. Approximately double this number and write it back, for | 82 | gives you a number. Approximately double this number and write it back, for |
| 83 | instance: | 83 | instance: |
| 84 | $ echo 0 > /debug/tracing/tracing_enabled | 84 | $ echo 128000 > /debug/tracing/buffer_size_kb |
| 85 | $ echo 128000 > /debug/tracing/trace_entries | ||
| 86 | $ echo 1 > /debug/tracing/tracing_enabled | ||
| 87 | Then start again from the top. | 85 | Then start again from the top. |
| 88 | 86 | ||
| 89 | If you are doing a trace for a driver project, e.g. Nouveau, you should also | 87 | If you are doing a trace for a driver project, e.g. Nouveau, you should also |
diff --git a/MAINTAINERS b/MAINTAINERS index 799f9d818d18..9633fb0a92b0 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -692,6 +692,13 @@ M: kernel@wantstofly.org | |||
| 692 | L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) | 692 | L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) |
| 693 | S: Maintained | 693 | S: Maintained |
| 694 | 694 | ||
| 695 | ARM/NUVOTON W90X900 ARM ARCHITECTURE | ||
| 696 | P: Wan ZongShun | ||
| 697 | M: mcuos.com@gmail.com | ||
| 698 | L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) | ||
| 699 | W: http://www.mcuos.com | ||
| 700 | S: Maintained | ||
| 701 | |||
| 695 | ARPD SUPPORT | 702 | ARPD SUPPORT |
| 696 | P: Jonathan Layes | 703 | P: Jonathan Layes |
| 697 | L: netdev@vger.kernel.org | 704 | L: netdev@vger.kernel.org |
| @@ -1202,6 +1209,8 @@ S: Supported | |||
| 1202 | CONTROL GROUPS (CGROUPS) | 1209 | CONTROL GROUPS (CGROUPS) |
| 1203 | P: Paul Menage | 1210 | P: Paul Menage |
| 1204 | M: menage@google.com | 1211 | M: menage@google.com |
| 1212 | P: Li Zefan | ||
| 1213 | M: lizf@cn.fujitsu.com | ||
| 1205 | L: containers@lists.linux-foundation.org | 1214 | L: containers@lists.linux-foundation.org |
| 1206 | S: Maintained | 1215 | S: Maintained |
| 1207 | 1216 | ||
| @@ -1903,10 +1912,10 @@ W: http://gigaset307x.sourceforge.net/ | |||
| 1903 | S: Maintained | 1912 | S: Maintained |
| 1904 | 1913 | ||
| 1905 | HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER | 1914 | HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER |
| 1906 | P: Robert Love | 1915 | P: Frank Seidel |
| 1907 | M: rlove@rlove.org | 1916 | M: frank@f-seidel.de |
| 1908 | M: linux-kernel@vger.kernel.org | 1917 | L: lm-sensors@lm-sensors.org |
| 1909 | W: http://www.kernel.org/pub/linux/kernel/people/rml/hdaps/ | 1918 | W: http://www.kernel.org/pub/linux/kernel/people/fseidel/hdaps/ |
| 1910 | S: Maintained | 1919 | S: Maintained |
| 1911 | 1920 | ||
| 1912 | GSPCA FINEPIX SUBDRIVER | 1921 | GSPCA FINEPIX SUBDRIVER |
| @@ -1999,7 +2008,7 @@ S: Maintained | |||
| 1999 | 2008 | ||
| 2000 | HIBERNATION (aka Software Suspend, aka swsusp) | 2009 | HIBERNATION (aka Software Suspend, aka swsusp) |
| 2001 | P: Pavel Machek | 2010 | P: Pavel Machek |
| 2002 | M: pavel@suse.cz | 2011 | M: pavel@ucw.cz |
| 2003 | P: Rafael J. Wysocki | 2012 | P: Rafael J. Wysocki |
| 2004 | M: rjw@sisk.pl | 2013 | M: rjw@sisk.pl |
| 2005 | L: linux-pm@lists.linux-foundation.org | 2014 | L: linux-pm@lists.linux-foundation.org |
| @@ -2455,7 +2464,7 @@ S: Maintained | |||
| 2455 | 2464 | ||
| 2456 | ISDN SUBSYSTEM | 2465 | ISDN SUBSYSTEM |
| 2457 | P: Karsten Keil | 2466 | P: Karsten Keil |
| 2458 | M: kkeil@suse.de | 2467 | M: isdn@linux-pingi.de |
| 2459 | L: isdn4linux@listserv.isdn4linux.de (subscribers-only) | 2468 | L: isdn4linux@listserv.isdn4linux.de (subscribers-only) |
| 2460 | W: http://www.isdn4linux.de | 2469 | W: http://www.isdn4linux.de |
| 2461 | T: git kernel.org:/pub/scm/linux/kernel/kkeil/isdn-2.6.git | 2470 | T: git kernel.org:/pub/scm/linux/kernel/kkeil/isdn-2.6.git |
| @@ -3325,8 +3334,8 @@ P: Jeremy Fitzhardinge | |||
| 3325 | M: jeremy@xensource.com | 3334 | M: jeremy@xensource.com |
| 3326 | P: Chris Wright | 3335 | P: Chris Wright |
| 3327 | M: chrisw@sous-sol.org | 3336 | M: chrisw@sous-sol.org |
| 3328 | P: Zachary Amsden | 3337 | P: Alok Kataria |
| 3329 | M: zach@vmware.com | 3338 | M: akataria@vmware.com |
| 3330 | P: Rusty Russell | 3339 | P: Rusty Russell |
| 3331 | M: rusty@rustcorp.com.au | 3340 | M: rusty@rustcorp.com.au |
| 3332 | L: virtualization@lists.osdl.org | 3341 | L: virtualization@lists.osdl.org |
| @@ -3537,6 +3546,12 @@ S: Maintained | |||
| 3537 | PXA MMCI DRIVER | 3546 | PXA MMCI DRIVER |
| 3538 | S: Orphan | 3547 | S: Orphan |
| 3539 | 3548 | ||
| 3549 | PXA RTC DRIVER | ||
| 3550 | P: Robert Jarzmik | ||
| 3551 | M: robert.jarzmik@free.fr | ||
| 3552 | L: rtc-linux@googlegroups.com | ||
| 3553 | S: Maintained | ||
| 3554 | |||
| 3540 | QLOGIC QLA2XXX FC-SCSI DRIVER | 3555 | QLOGIC QLA2XXX FC-SCSI DRIVER |
| 3541 | P: Andrew Vasquez | 3556 | P: Andrew Vasquez |
| 3542 | M: linux-driver@qlogic.com | 3557 | M: linux-driver@qlogic.com |
| @@ -4164,7 +4179,7 @@ SUSPEND TO RAM | |||
| 4164 | P: Len Brown | 4179 | P: Len Brown |
| 4165 | M: len.brown@intel.com | 4180 | M: len.brown@intel.com |
| 4166 | P: Pavel Machek | 4181 | P: Pavel Machek |
| 4167 | M: pavel@suse.cz | 4182 | M: pavel@ucw.cz |
| 4168 | P: Rafael J. Wysocki | 4183 | P: Rafael J. Wysocki |
| 4169 | M: rjw@sisk.pl | 4184 | M: rjw@sisk.pl |
| 4170 | L: linux-pm@lists.linux-foundation.org | 4185 | L: linux-pm@lists.linux-foundation.org |
| @@ -4285,8 +4300,8 @@ P: Rajiv Andrade | |||
| 4285 | M: srajiv@linux.vnet.ibm.com | 4300 | M: srajiv@linux.vnet.ibm.com |
| 4286 | W: http://tpmdd.sourceforge.net | 4301 | W: http://tpmdd.sourceforge.net |
| 4287 | P: Marcel Selhorst | 4302 | P: Marcel Selhorst |
| 4288 | M: tpm@selhorst.net | 4303 | M: m.selhorst@sirrix.com |
| 4289 | W: http://www.prosec.rub.de/tpm/ | 4304 | W: http://www.sirrix.com |
| 4290 | L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers) | 4305 | L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers) |
| 4291 | S: Maintained | 4306 | S: Maintained |
| 4292 | 4307 | ||
| @@ -4916,11 +4931,11 @@ L: zd1211-devs@lists.sourceforge.net (subscribers-only) | |||
| 4916 | S: Maintained | 4931 | S: Maintained |
| 4917 | 4932 | ||
| 4918 | ZR36067 VIDEO FOR LINUX DRIVER | 4933 | ZR36067 VIDEO FOR LINUX DRIVER |
| 4919 | P: Ronald Bultje | ||
| 4920 | M: rbultje@ronald.bitfreak.net | ||
| 4921 | L: mjpeg-users@lists.sourceforge.net | 4934 | L: mjpeg-users@lists.sourceforge.net |
| 4935 | L: linux-media@vger.kernel.org | ||
| 4922 | W: http://mjpeg.sourceforge.net/driver-zoran/ | 4936 | W: http://mjpeg.sourceforge.net/driver-zoran/ |
| 4923 | S: Maintained | 4937 | T: Mercurial http://linuxtv.org/hg/v4l-dvb |
| 4938 | S: Odd Fixes | ||
| 4924 | 4939 | ||
| 4925 | ZS DECSTATION Z85C30 SERIAL DRIVER | 4940 | ZS DECSTATION Z85C30 SERIAL DRIVER |
| 4926 | P: Maciej W. Rozycki | 4941 | P: Maciej W. Rozycki |
| @@ -1,7 +1,7 @@ | |||
| 1 | VERSION = 2 | 1 | VERSION = 2 |
| 2 | PATCHLEVEL = 6 | 2 | PATCHLEVEL = 6 |
| 3 | SUBLEVEL = 29 | 3 | SUBLEVEL = 29 |
| 4 | EXTRAVERSION = -rc3 | 4 | EXTRAVERSION = -rc7 |
| 5 | NAME = Erotic Pickled Herring | 5 | NAME = Erotic Pickled Herring |
| 6 | 6 | ||
| 7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
| @@ -389,6 +389,7 @@ PHONY += outputmakefile | |||
| 389 | # output directory. | 389 | # output directory. |
| 390 | outputmakefile: | 390 | outputmakefile: |
| 391 | ifneq ($(KBUILD_SRC),) | 391 | ifneq ($(KBUILD_SRC),) |
| 392 | $(Q)ln -fsn $(srctree) source | ||
| 392 | $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \ | 393 | $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \ |
| 393 | $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) | 394 | $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) |
| 394 | endif | 395 | endif |
| @@ -946,7 +947,6 @@ ifneq ($(KBUILD_SRC),) | |||
| 946 | mkdir -p include2; \ | 947 | mkdir -p include2; \ |
| 947 | ln -fsn $(srctree)/include/asm-$(SRCARCH) include2/asm; \ | 948 | ln -fsn $(srctree)/include/asm-$(SRCARCH) include2/asm; \ |
| 948 | fi | 949 | fi |
| 949 | ln -fsn $(srctree) source | ||
| 950 | endif | 950 | endif |
| 951 | 951 | ||
| 952 | # prepare2 creates a makefile if using a separate output directory | 952 | # prepare2 creates a makefile if using a separate output directory |
| @@ -188,7 +188,7 @@ CONFIGURING the kernel: | |||
| 188 | values to random values. | 188 | values to random values. |
| 189 | 189 | ||
| 190 | You can find more information on using the Linux kernel config tools | 190 | You can find more information on using the Linux kernel config tools |
| 191 | in Documentation/kbuild/make-configs.txt. | 191 | in Documentation/kbuild/kconfig.txt. |
| 192 | 192 | ||
| 193 | NOTES on "make config": | 193 | NOTES on "make config": |
| 194 | - having unnecessary drivers will make the kernel bigger, and can | 194 | - having unnecessary drivers will make the kernel bigger, and can |
diff --git a/arch/alpha/kernel/process.c b/arch/alpha/kernel/process.c index f238370c907d..8d0097f10208 100644 --- a/arch/alpha/kernel/process.c +++ b/arch/alpha/kernel/process.c | |||
| @@ -93,8 +93,8 @@ common_shutdown_1(void *generic_ptr) | |||
| 93 | if (cpuid != boot_cpuid) { | 93 | if (cpuid != boot_cpuid) { |
| 94 | flags |= 0x00040000UL; /* "remain halted" */ | 94 | flags |= 0x00040000UL; /* "remain halted" */ |
| 95 | *pflags = flags; | 95 | *pflags = flags; |
| 96 | cpu_clear(cpuid, cpu_present_map); | 96 | set_cpu_present(cpuid, false); |
| 97 | cpu_clear(cpuid, cpu_possible_map); | 97 | set_cpu_possible(cpuid, false); |
| 98 | halt(); | 98 | halt(); |
| 99 | } | 99 | } |
| 100 | #endif | 100 | #endif |
| @@ -120,8 +120,8 @@ common_shutdown_1(void *generic_ptr) | |||
| 120 | 120 | ||
| 121 | #ifdef CONFIG_SMP | 121 | #ifdef CONFIG_SMP |
| 122 | /* Wait for the secondaries to halt. */ | 122 | /* Wait for the secondaries to halt. */ |
| 123 | cpu_clear(boot_cpuid, cpu_present_map); | 123 | set_cpu_present(boot_cpuid, false); |
| 124 | cpu_clear(boot_cpuid, cpu_possible_map); | 124 | set_cpu_possible(boot_cpuid, false); |
| 125 | while (cpus_weight(cpu_present_map)) | 125 | while (cpus_weight(cpu_present_map)) |
| 126 | barrier(); | 126 | barrier(); |
| 127 | #endif | 127 | #endif |
diff --git a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c index 00f1dc3dfd5f..b1fe5674c3a1 100644 --- a/arch/alpha/kernel/smp.c +++ b/arch/alpha/kernel/smp.c | |||
| @@ -120,12 +120,12 @@ void __cpuinit | |||
| 120 | smp_callin(void) | 120 | smp_callin(void) |
| 121 | { | 121 | { |
| 122 | int cpuid = hard_smp_processor_id(); | 122 | int cpuid = hard_smp_processor_id(); |
| 123 | cpumask_t mask = cpu_online_map; | ||
| 124 | 123 | ||
| 125 | if (cpu_test_and_set(cpuid, mask)) { | 124 | if (cpu_online(cpuid)) { |
| 126 | printk("??, cpu 0x%x already present??\n", cpuid); | 125 | printk("??, cpu 0x%x already present??\n", cpuid); |
| 127 | BUG(); | 126 | BUG(); |
| 128 | } | 127 | } |
| 128 | set_cpu_online(cpuid, true); | ||
| 129 | 129 | ||
| 130 | /* Turn on machine checks. */ | 130 | /* Turn on machine checks. */ |
| 131 | wrmces(7); | 131 | wrmces(7); |
| @@ -436,8 +436,8 @@ setup_smp(void) | |||
| 436 | ((char *)cpubase + i*hwrpb->processor_size); | 436 | ((char *)cpubase + i*hwrpb->processor_size); |
| 437 | if ((cpu->flags & 0x1cc) == 0x1cc) { | 437 | if ((cpu->flags & 0x1cc) == 0x1cc) { |
| 438 | smp_num_probed++; | 438 | smp_num_probed++; |
| 439 | cpu_set(i, cpu_possible_map); | 439 | set_cpu_possible(i, true); |
| 440 | cpu_set(i, cpu_present_map); | 440 | set_cpu_present(i, true); |
| 441 | cpu->pal_revision = boot_cpu_palrev; | 441 | cpu->pal_revision = boot_cpu_palrev; |
| 442 | } | 442 | } |
| 443 | 443 | ||
| @@ -470,8 +470,8 @@ smp_prepare_cpus(unsigned int max_cpus) | |||
| 470 | 470 | ||
| 471 | /* Nothing to do on a UP box, or when told not to. */ | 471 | /* Nothing to do on a UP box, or when told not to. */ |
| 472 | if (smp_num_probed == 1 || max_cpus == 0) { | 472 | if (smp_num_probed == 1 || max_cpus == 0) { |
| 473 | cpu_possible_map = cpumask_of_cpu(boot_cpuid); | 473 | init_cpu_possible(cpumask_of(boot_cpuid)); |
| 474 | cpu_present_map = cpumask_of_cpu(boot_cpuid); | 474 | init_cpu_present(cpumask_of(boot_cpuid)); |
| 475 | printk(KERN_INFO "SMP mode deactivated.\n"); | 475 | printk(KERN_INFO "SMP mode deactivated.\n"); |
| 476 | return; | 476 | return; |
| 477 | } | 477 | } |
diff --git a/arch/arm/configs/at91sam9260ek_defconfig b/arch/arm/configs/at91sam9260ek_defconfig index e0ee7060f9aa..98e2f3de4bc5 100644 --- a/arch/arm/configs/at91sam9260ek_defconfig +++ b/arch/arm/configs/at91sam9260ek_defconfig | |||
| @@ -608,7 +608,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 608 | # Watchdog Device Drivers | 608 | # Watchdog Device Drivers |
| 609 | # | 609 | # |
| 610 | # CONFIG_SOFT_WATCHDOG is not set | 610 | # CONFIG_SOFT_WATCHDOG is not set |
| 611 | CONFIG_AT91SAM9_WATCHDOG=y | 611 | CONFIG_AT91SAM9X_WATCHDOG=y |
| 612 | 612 | ||
| 613 | # | 613 | # |
| 614 | # USB-based Watchdog Cards | 614 | # USB-based Watchdog Cards |
diff --git a/arch/arm/configs/at91sam9261ek_defconfig b/arch/arm/configs/at91sam9261ek_defconfig index 01d1ef97d8be..149456142392 100644 --- a/arch/arm/configs/at91sam9261ek_defconfig +++ b/arch/arm/configs/at91sam9261ek_defconfig | |||
| @@ -700,7 +700,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 700 | # Watchdog Device Drivers | 700 | # Watchdog Device Drivers |
| 701 | # | 701 | # |
| 702 | # CONFIG_SOFT_WATCHDOG is not set | 702 | # CONFIG_SOFT_WATCHDOG is not set |
| 703 | CONFIG_AT91SAM9_WATCHDOG=y | 703 | CONFIG_AT91SAM9X_WATCHDOG=y |
| 704 | 704 | ||
| 705 | # | 705 | # |
| 706 | # USB-based Watchdog Cards | 706 | # USB-based Watchdog Cards |
diff --git a/arch/arm/configs/at91sam9263ek_defconfig b/arch/arm/configs/at91sam9263ek_defconfig index 036a126725c1..21599f3c6275 100644 --- a/arch/arm/configs/at91sam9263ek_defconfig +++ b/arch/arm/configs/at91sam9263ek_defconfig | |||
| @@ -710,7 +710,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 710 | # Watchdog Device Drivers | 710 | # Watchdog Device Drivers |
| 711 | # | 711 | # |
| 712 | # CONFIG_SOFT_WATCHDOG is not set | 712 | # CONFIG_SOFT_WATCHDOG is not set |
| 713 | CONFIG_AT91SAM9_WATCHDOG=y | 713 | CONFIG_AT91SAM9X_WATCHDOG=y |
| 714 | 714 | ||
| 715 | # | 715 | # |
| 716 | # USB-based Watchdog Cards | 716 | # USB-based Watchdog Cards |
diff --git a/arch/arm/configs/at91sam9rlek_defconfig b/arch/arm/configs/at91sam9rlek_defconfig index 237a2a6a8517..e2df81a3e804 100644 --- a/arch/arm/configs/at91sam9rlek_defconfig +++ b/arch/arm/configs/at91sam9rlek_defconfig | |||
| @@ -606,7 +606,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 606 | # Watchdog Device Drivers | 606 | # Watchdog Device Drivers |
| 607 | # | 607 | # |
| 608 | # CONFIG_SOFT_WATCHDOG is not set | 608 | # CONFIG_SOFT_WATCHDOG is not set |
| 609 | CONFIG_AT91SAM9_WATCHDOG=y | 609 | CONFIG_AT91SAM9X_WATCHDOG=y |
| 610 | 610 | ||
| 611 | # | 611 | # |
| 612 | # Sonics Silicon Backplane | 612 | # Sonics Silicon Backplane |
diff --git a/arch/arm/configs/qil-a9260_defconfig b/arch/arm/configs/qil-a9260_defconfig index cd1d717903ac..9b32d0eb89ba 100644 --- a/arch/arm/configs/qil-a9260_defconfig +++ b/arch/arm/configs/qil-a9260_defconfig | |||
| @@ -727,7 +727,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
| 727 | # Watchdog Device Drivers | 727 | # Watchdog Device Drivers |
| 728 | # | 728 | # |
| 729 | # CONFIG_SOFT_WATCHDOG is not set | 729 | # CONFIG_SOFT_WATCHDOG is not set |
| 730 | # CONFIG_AT91SAM9_WATCHDOG is not set | 730 | # CONFIG_AT91SAM9X_WATCHDOG is not set |
| 731 | 731 | ||
| 732 | # | 732 | # |
| 733 | # USB-based Watchdog Cards | 733 | # USB-based Watchdog Cards |
diff --git a/arch/arm/kernel/elf.c b/arch/arm/kernel/elf.c index 84849098c8e8..d4a0da1e48f4 100644 --- a/arch/arm/kernel/elf.c +++ b/arch/arm/kernel/elf.c | |||
| @@ -74,9 +74,9 @@ EXPORT_SYMBOL(elf_set_personality); | |||
| 74 | */ | 74 | */ |
| 75 | int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack) | 75 | int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack) |
| 76 | { | 76 | { |
| 77 | if (executable_stack != EXSTACK_ENABLE_X) | 77 | if (executable_stack != EXSTACK_DISABLE_X) |
| 78 | return 1; | 78 | return 1; |
| 79 | if (cpu_architecture() <= CPU_ARCH_ARMv6) | 79 | if (cpu_architecture() < CPU_ARCH_ARMv6) |
| 80 | return 1; | 80 | return 1; |
| 81 | return 0; | 81 | return 0; |
| 82 | } | 82 | } |
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c index 440dc62cdc3a..598ca61e7bca 100644 --- a/arch/arm/kernel/machine_kexec.c +++ b/arch/arm/kernel/machine_kexec.c | |||
| @@ -13,8 +13,8 @@ | |||
| 13 | #include <asm/cacheflush.h> | 13 | #include <asm/cacheflush.h> |
| 14 | #include <asm/mach-types.h> | 14 | #include <asm/mach-types.h> |
| 15 | 15 | ||
| 16 | const extern unsigned char relocate_new_kernel[]; | 16 | extern const unsigned char relocate_new_kernel[]; |
| 17 | const extern unsigned int relocate_new_kernel_size; | 17 | extern const unsigned int relocate_new_kernel_size; |
| 18 | 18 | ||
| 19 | extern void setup_mm_for_reboot(char mode); | 19 | extern void setup_mm_for_reboot(char mode); |
| 20 | 20 | ||
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 8d21427bb679..bc5e4128f9f3 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
| @@ -234,12 +234,13 @@ static void __init cacheid_init(void) | |||
| 234 | unsigned int cachetype = read_cpuid_cachetype(); | 234 | unsigned int cachetype = read_cpuid_cachetype(); |
| 235 | unsigned int arch = cpu_architecture(); | 235 | unsigned int arch = cpu_architecture(); |
| 236 | 236 | ||
| 237 | if (arch >= CPU_ARCH_ARMv7) { | 237 | if (arch >= CPU_ARCH_ARMv6) { |
| 238 | cacheid = CACHEID_VIPT_NONALIASING; | 238 | if ((cachetype & (7 << 29)) == 4 << 29) { |
| 239 | if ((cachetype & (3 << 14)) == 1 << 14) | 239 | /* ARMv7 register format */ |
| 240 | cacheid |= CACHEID_ASID_TAGGED; | 240 | cacheid = CACHEID_VIPT_NONALIASING; |
| 241 | } else if (arch >= CPU_ARCH_ARMv6) { | 241 | if ((cachetype & (3 << 14)) == 1 << 14) |
| 242 | if (cachetype & (1 << 23)) | 242 | cacheid |= CACHEID_ASID_TAGGED; |
| 243 | } else if (cachetype & (1 << 23)) | ||
| 243 | cacheid = CACHEID_VIPT_ALIASING; | 244 | cacheid = CACHEID_VIPT_ALIASING; |
| 244 | else | 245 | else |
| 245 | cacheid = CACHEID_VIPT_NONALIASING; | 246 | cacheid = CACHEID_VIPT_NONALIASING; |
diff --git a/arch/arm/mach-at91/at91cap9_devices.c b/arch/arm/mach-at91/at91cap9_devices.c index 9eca2209cde6..412aa49ad2fb 100644 --- a/arch/arm/mach-at91/at91cap9_devices.c +++ b/arch/arm/mach-at91/at91cap9_devices.c | |||
| @@ -697,7 +697,7 @@ static void __init at91_add_device_rtt(void) | |||
| 697 | * Watchdog | 697 | * Watchdog |
| 698 | * -------------------------------------------------------------------- */ | 698 | * -------------------------------------------------------------------- */ |
| 699 | 699 | ||
| 700 | #if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) | 700 | #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE) |
| 701 | static struct platform_device at91cap9_wdt_device = { | 701 | static struct platform_device at91cap9_wdt_device = { |
| 702 | .name = "at91_wdt", | 702 | .name = "at91_wdt", |
| 703 | .id = -1, | 703 | .id = -1, |
diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c index fdde1ea21b07..d74c9ac007e7 100644 --- a/arch/arm/mach-at91/at91sam9260_devices.c +++ b/arch/arm/mach-at91/at91sam9260_devices.c | |||
| @@ -643,7 +643,7 @@ static void __init at91_add_device_rtt(void) | |||
| 643 | * Watchdog | 643 | * Watchdog |
| 644 | * -------------------------------------------------------------------- */ | 644 | * -------------------------------------------------------------------- */ |
| 645 | 645 | ||
| 646 | #if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) | 646 | #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE) |
| 647 | static struct platform_device at91sam9260_wdt_device = { | 647 | static struct platform_device at91sam9260_wdt_device = { |
| 648 | .name = "at91_wdt", | 648 | .name = "at91_wdt", |
| 649 | .id = -1, | 649 | .id = -1, |
diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c index 17289756f80f..59fc48311fb0 100644 --- a/arch/arm/mach-at91/at91sam9261_devices.c +++ b/arch/arm/mach-at91/at91sam9261_devices.c | |||
| @@ -621,7 +621,7 @@ static void __init at91_add_device_rtt(void) | |||
| 621 | * Watchdog | 621 | * Watchdog |
| 622 | * -------------------------------------------------------------------- */ | 622 | * -------------------------------------------------------------------- */ |
| 623 | 623 | ||
| 624 | #if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) | 624 | #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE) |
| 625 | static struct platform_device at91sam9261_wdt_device = { | 625 | static struct platform_device at91sam9261_wdt_device = { |
| 626 | .name = "at91_wdt", | 626 | .name = "at91_wdt", |
| 627 | .id = -1, | 627 | .id = -1, |
diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c index b753cb879d8e..b7f233242315 100644 --- a/arch/arm/mach-at91/at91sam9263_devices.c +++ b/arch/arm/mach-at91/at91sam9263_devices.c | |||
| @@ -347,6 +347,111 @@ void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) | |||
| 347 | void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) {} | 347 | void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) {} |
| 348 | #endif | 348 | #endif |
| 349 | 349 | ||
| 350 | /* -------------------------------------------------------------------- | ||
| 351 | * Compact Flash (PCMCIA or IDE) | ||
| 352 | * -------------------------------------------------------------------- */ | ||
| 353 | |||
| 354 | #if defined(CONFIG_AT91_CF) || defined(CONFIG_AT91_CF_MODULE) || \ | ||
| 355 | defined(CONFIG_BLK_DEV_IDE_AT91) || defined(CONFIG_BLK_DEV_IDE_AT91_MODULE) | ||
| 356 | |||
| 357 | static struct at91_cf_data cf0_data; | ||
| 358 | |||
| 359 | static struct resource cf0_resources[] = { | ||
| 360 | [0] = { | ||
| 361 | .start = AT91_CHIPSELECT_4, | ||
| 362 | .end = AT91_CHIPSELECT_4 + SZ_256M - 1, | ||
| 363 | .flags = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT, | ||
| 364 | } | ||
| 365 | }; | ||
| 366 | |||
| 367 | static struct platform_device cf0_device = { | ||
| 368 | .id = 0, | ||
| 369 | .dev = { | ||
| 370 | .platform_data = &cf0_data, | ||
| 371 | }, | ||
| 372 | .resource = cf0_resources, | ||
| 373 | .num_resources = ARRAY_SIZE(cf0_resources), | ||
| 374 | }; | ||
| 375 | |||
| 376 | static struct at91_cf_data cf1_data; | ||
| 377 | |||
| 378 | static struct resource cf1_resources[] = { | ||
| 379 | [0] = { | ||
| 380 | .start = AT91_CHIPSELECT_5, | ||
| 381 | .end = AT91_CHIPSELECT_5 + SZ_256M - 1, | ||
| 382 | .flags = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT, | ||
| 383 | } | ||
| 384 | }; | ||
| 385 | |||
| 386 | static struct platform_device cf1_device = { | ||
| 387 | .id = 1, | ||
| 388 | .dev = { | ||
| 389 | .platform_data = &cf1_data, | ||
| 390 | }, | ||
| 391 | .resource = cf1_resources, | ||
| 392 | .num_resources = ARRAY_SIZE(cf1_resources), | ||
| 393 | }; | ||
| 394 | |||
| 395 | void __init at91_add_device_cf(struct at91_cf_data *data) | ||
| 396 | { | ||
| 397 | unsigned long ebi0_csa; | ||
| 398 | struct platform_device *pdev; | ||
| 399 | |||
| 400 | if (!data) | ||
| 401 | return; | ||
| 402 | |||
| 403 | /* | ||
| 404 | * assign CS4 or CS5 to SMC with Compact Flash logic support, | ||
| 405 | * we assume SMC timings are configured by board code, | ||
| 406 | * except True IDE where timings are controlled by driver | ||
| 407 | */ | ||
| 408 | ebi0_csa = at91_sys_read(AT91_MATRIX_EBI0CSA); | ||
| 409 | switch (data->chipselect) { | ||
| 410 | case 4: | ||
| 411 | at91_set_A_periph(AT91_PIN_PD6, 0); /* EBI0_NCS4/CFCS0 */ | ||
| 412 | ebi0_csa |= AT91_MATRIX_EBI0_CS4A_SMC_CF1; | ||
| 413 | cf0_data = *data; | ||
| 414 | pdev = &cf0_device; | ||
| 415 | break; | ||
| 416 | case 5: | ||
| 417 | at91_set_A_periph(AT91_PIN_PD7, 0); /* EBI0_NCS5/CFCS1 */ | ||
| 418 | ebi0_csa |= AT91_MATRIX_EBI0_CS5A_SMC_CF2; | ||
| 419 | cf1_data = *data; | ||
| 420 | pdev = &cf1_device; | ||
| 421 | break; | ||
| 422 | default: | ||
| 423 | printk(KERN_ERR "AT91 CF: bad chip-select requested (%u)\n", | ||
| 424 | data->chipselect); | ||
| 425 | return; | ||
| 426 | } | ||
| 427 | at91_sys_write(AT91_MATRIX_EBI0CSA, ebi0_csa); | ||
| 428 | |||
| 429 | if (data->det_pin) { | ||
| 430 | at91_set_gpio_input(data->det_pin, 1); | ||
| 431 | at91_set_deglitch(data->det_pin, 1); | ||
| 432 | } | ||
| 433 | |||
| 434 | if (data->irq_pin) { | ||
| 435 | at91_set_gpio_input(data->irq_pin, 1); | ||
| 436 | at91_set_deglitch(data->irq_pin, 1); | ||
| 437 | } | ||
| 438 | |||
| 439 | if (data->vcc_pin) | ||
| 440 | /* initially off */ | ||
| 441 | at91_set_gpio_output(data->vcc_pin, 0); | ||
| 442 | |||
| 443 | /* enable EBI controlled pins */ | ||
| 444 | at91_set_A_periph(AT91_PIN_PD5, 1); /* NWAIT */ | ||
| 445 | at91_set_A_periph(AT91_PIN_PD8, 0); /* CFCE1 */ | ||
| 446 | at91_set_A_periph(AT91_PIN_PD9, 0); /* CFCE2 */ | ||
| 447 | at91_set_A_periph(AT91_PIN_PD14, 0); /* CFNRW */ | ||
| 448 | |||
| 449 | pdev->name = (data->flags & AT91_CF_TRUE_IDE) ? "at91_ide" : "at91_cf"; | ||
| 450 | platform_device_register(pdev); | ||
| 451 | } | ||
| 452 | #else | ||
| 453 | void __init at91_add_device_cf(struct at91_cf_data *data) {} | ||
| 454 | #endif | ||
| 350 | 455 | ||
| 351 | /* -------------------------------------------------------------------- | 456 | /* -------------------------------------------------------------------- |
| 352 | * NAND / SmartMedia | 457 | * NAND / SmartMedia |
| @@ -854,7 +959,7 @@ static void __init at91_add_device_rtt(void) | |||
| 854 | * Watchdog | 959 | * Watchdog |
| 855 | * -------------------------------------------------------------------- */ | 960 | * -------------------------------------------------------------------- */ |
| 856 | 961 | ||
| 857 | #if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) | 962 | #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE) |
| 858 | static struct platform_device at91sam9263_wdt_device = { | 963 | static struct platform_device at91sam9263_wdt_device = { |
| 859 | .name = "at91_wdt", | 964 | .name = "at91_wdt", |
| 860 | .id = -1, | 965 | .id = -1, |
diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c index 145324f4ec56..728186515cdf 100644 --- a/arch/arm/mach-at91/at91sam9rl_devices.c +++ b/arch/arm/mach-at91/at91sam9rl_devices.c | |||
| @@ -609,7 +609,7 @@ static void __init at91_add_device_rtt(void) | |||
| 609 | * Watchdog | 609 | * Watchdog |
| 610 | * -------------------------------------------------------------------- */ | 610 | * -------------------------------------------------------------------- */ |
| 611 | 611 | ||
| 612 | #if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) | 612 | #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE) |
| 613 | static struct platform_device at91sam9rl_wdt_device = { | 613 | static struct platform_device at91sam9rl_wdt_device = { |
| 614 | .name = "at91_wdt", | 614 | .name = "at91_wdt", |
| 615 | .id = -1, | 615 | .id = -1, |
diff --git a/arch/arm/mach-at91/gpio.c b/arch/arm/mach-at91/gpio.c index 028e4f7a88be..f2236f0e101f 100644 --- a/arch/arm/mach-at91/gpio.c +++ b/arch/arm/mach-at91/gpio.c | |||
| @@ -437,7 +437,68 @@ static void gpio_irq_handler(unsigned irq, struct irq_desc *desc) | |||
| 437 | 437 | ||
| 438 | /*--------------------------------------------------------------------------*/ | 438 | /*--------------------------------------------------------------------------*/ |
| 439 | 439 | ||
| 440 | /* This lock class tells lockdep that GPIO irqs are in a different | 440 | #ifdef CONFIG_DEBUG_FS |
| 441 | |||
| 442 | static int at91_gpio_show(struct seq_file *s, void *unused) | ||
| 443 | { | ||
| 444 | int bank, j; | ||
| 445 | |||
| 446 | /* print heading */ | ||
| 447 | seq_printf(s, "Pin\t"); | ||
| 448 | for (bank = 0; bank < gpio_banks; bank++) { | ||
| 449 | seq_printf(s, "PIO%c\t", 'A' + bank); | ||
| 450 | }; | ||
| 451 | seq_printf(s, "\n\n"); | ||
| 452 | |||
| 453 | /* print pin status */ | ||
| 454 | for (j = 0; j < 32; j++) { | ||
| 455 | seq_printf(s, "%i:\t", j); | ||
| 456 | |||
| 457 | for (bank = 0; bank < gpio_banks; bank++) { | ||
| 458 | unsigned pin = PIN_BASE + (32 * bank) + j; | ||
| 459 | void __iomem *pio = pin_to_controller(pin); | ||
| 460 | unsigned mask = pin_to_mask(pin); | ||
| 461 | |||
| 462 | if (__raw_readl(pio + PIO_PSR) & mask) | ||
| 463 | seq_printf(s, "GPIO:%s", __raw_readl(pio + PIO_PDSR) & mask ? "1" : "0"); | ||
| 464 | else | ||
| 465 | seq_printf(s, "%s", __raw_readl(pio + PIO_ABSR) & mask ? "B" : "A"); | ||
| 466 | |||
| 467 | seq_printf(s, "\t"); | ||
| 468 | } | ||
| 469 | |||
| 470 | seq_printf(s, "\n"); | ||
| 471 | } | ||
| 472 | |||
| 473 | return 0; | ||
| 474 | } | ||
| 475 | |||
| 476 | static int at91_gpio_open(struct inode *inode, struct file *file) | ||
| 477 | { | ||
| 478 | return single_open(file, at91_gpio_show, NULL); | ||
| 479 | } | ||
| 480 | |||
| 481 | static const struct file_operations at91_gpio_operations = { | ||
| 482 | .open = at91_gpio_open, | ||
| 483 | .read = seq_read, | ||
| 484 | .llseek = seq_lseek, | ||
| 485 | .release = single_release, | ||
| 486 | }; | ||
| 487 | |||
| 488 | static int __init at91_gpio_debugfs_init(void) | ||
| 489 | { | ||
| 490 | /* /sys/kernel/debug/at91_gpio */ | ||
| 491 | (void) debugfs_create_file("at91_gpio", S_IFREG | S_IRUGO, NULL, NULL, &at91_gpio_operations); | ||
| 492 | return 0; | ||
| 493 | } | ||
| 494 | postcore_initcall(at91_gpio_debugfs_init); | ||
| 495 | |||
| 496 | #endif | ||
| 497 | |||
| 498 | /*--------------------------------------------------------------------------*/ | ||
| 499 | |||
| 500 | /* | ||
| 501 | * This lock class tells lockdep that GPIO irqs are in a different | ||
| 441 | * category than their parents, so it won't report false recursion. | 502 | * category than their parents, so it won't report false recursion. |
| 442 | */ | 503 | */ |
| 443 | static struct lock_class_key gpio_lock_class; | 504 | static struct lock_class_key gpio_lock_class; |
| @@ -456,9 +517,6 @@ void __init at91_gpio_irq_setup(void) | |||
| 456 | unsigned id = this->bank->id; | 517 | unsigned id = this->bank->id; |
| 457 | unsigned i; | 518 | unsigned i; |
| 458 | 519 | ||
| 459 | /* enable PIO controller's clock */ | ||
| 460 | clk_enable(this->bank->clock); | ||
| 461 | |||
| 462 | __raw_writel(~0, this->regbase + PIO_IDR); | 520 | __raw_writel(~0, this->regbase + PIO_IDR); |
| 463 | 521 | ||
| 464 | for (i = 0, pin = this->chip.base; i < 32; i++, pin++) { | 522 | for (i = 0, pin = this->chip.base; i < 32; i++, pin++) { |
| @@ -589,6 +647,9 @@ void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks) | |||
| 589 | at91_gpio->regbase = at91_gpio->bank->offset + | 647 | at91_gpio->regbase = at91_gpio->bank->offset + |
| 590 | (void __iomem *)AT91_VA_BASE_SYS; | 648 | (void __iomem *)AT91_VA_BASE_SYS; |
| 591 | 649 | ||
| 650 | /* enable PIO controller's clock */ | ||
| 651 | clk_enable(at91_gpio->bank->clock); | ||
| 652 | |||
| 592 | /* AT91SAM9263_ID_PIOCDE groups PIOC, PIOD, PIOE */ | 653 | /* AT91SAM9263_ID_PIOCDE groups PIOC, PIOD, PIOE */ |
| 593 | if (last && last->bank->id == at91_gpio->bank->id) | 654 | if (last && last->bank->id == at91_gpio->bank->id) |
| 594 | last->next = at91_gpio; | 655 | last->next = at91_gpio; |
diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h index fb51f0e0a83f..793fe7b25f36 100644 --- a/arch/arm/mach-at91/include/mach/board.h +++ b/arch/arm/mach-at91/include/mach/board.h | |||
| @@ -56,6 +56,9 @@ struct at91_cf_data { | |||
| 56 | u8 vcc_pin; /* power switching */ | 56 | u8 vcc_pin; /* power switching */ |
| 57 | u8 rst_pin; /* card reset */ | 57 | u8 rst_pin; /* card reset */ |
| 58 | u8 chipselect; /* EBI Chip Select number */ | 58 | u8 chipselect; /* EBI Chip Select number */ |
| 59 | u8 flags; | ||
| 60 | #define AT91_CF_TRUE_IDE 0x01 | ||
| 61 | #define AT91_IDE_SWAP_A0_A2 0x02 | ||
| 59 | }; | 62 | }; |
| 60 | extern void __init at91_add_device_cf(struct at91_cf_data *data); | 63 | extern void __init at91_add_device_cf(struct at91_cf_data *data); |
| 61 | 64 | ||
| @@ -93,6 +96,7 @@ struct atmel_nand_data { | |||
| 93 | u8 enable_pin; /* chip enable */ | 96 | u8 enable_pin; /* chip enable */ |
| 94 | u8 det_pin; /* card detect */ | 97 | u8 det_pin; /* card detect */ |
| 95 | u8 rdy_pin; /* ready/busy */ | 98 | u8 rdy_pin; /* ready/busy */ |
| 99 | u8 rdy_pin_active_low; /* rdy_pin value is inverted */ | ||
| 96 | u8 ale; /* address line number connected to ALE */ | 100 | u8 ale; /* address line number connected to ALE */ |
| 97 | u8 cle; /* address line number connected to CLE */ | 101 | u8 cle; /* address line number connected to CLE */ |
| 98 | u8 bus_width_16; /* buswidth is 16 bit */ | 102 | u8 bus_width_16; /* buswidth is 16 bit */ |
diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c index 9bb4f043aa22..7ac812dc055a 100644 --- a/arch/arm/mach-at91/pm.c +++ b/arch/arm/mach-at91/pm.c | |||
| @@ -332,7 +332,6 @@ static int at91_pm_enter(suspend_state_t state) | |||
| 332 | at91_sys_read(AT91_AIC_IPR) & at91_sys_read(AT91_AIC_IMR)); | 332 | at91_sys_read(AT91_AIC_IPR) & at91_sys_read(AT91_AIC_IMR)); |
| 333 | 333 | ||
| 334 | error: | 334 | error: |
| 335 | sdram_selfrefresh_disable(); | ||
| 336 | target_state = PM_SUSPEND_ON; | 335 | target_state = PM_SUSPEND_ON; |
| 337 | at91_irq_resume(); | 336 | at91_irq_resume(); |
| 338 | at91_gpio_resume(); | 337 | at91_gpio_resume(); |
diff --git a/arch/arm/mach-davinci/board-evm.c b/arch/arm/mach-davinci/board-evm.c index a957d239a683..38b6a9ce2a93 100644 --- a/arch/arm/mach-davinci/board-evm.c +++ b/arch/arm/mach-davinci/board-evm.c | |||
| @@ -311,6 +311,9 @@ evm_u35_setup(struct i2c_client *client, int gpio, unsigned ngpio, void *c) | |||
| 311 | gpio_request(gpio + 7, "nCF_SEL"); | 311 | gpio_request(gpio + 7, "nCF_SEL"); |
| 312 | gpio_direction_output(gpio + 7, 1); | 312 | gpio_direction_output(gpio + 7, 1); |
| 313 | 313 | ||
| 314 | /* irlml6401 sustains over 3A, switches 5V in under 8 msec */ | ||
| 315 | setup_usb(500, 8); | ||
| 316 | |||
| 314 | return 0; | 317 | return 0; |
| 315 | } | 318 | } |
| 316 | 319 | ||
| @@ -417,9 +420,6 @@ static __init void davinci_evm_init(void) | |||
| 417 | platform_add_devices(davinci_evm_devices, | 420 | platform_add_devices(davinci_evm_devices, |
| 418 | ARRAY_SIZE(davinci_evm_devices)); | 421 | ARRAY_SIZE(davinci_evm_devices)); |
| 419 | evm_init_i2c(); | 422 | evm_init_i2c(); |
| 420 | |||
| 421 | /* irlml6401 sustains over 3A, switches 5V in under 8 msec */ | ||
| 422 | setup_usb(500, 8); | ||
| 423 | } | 423 | } |
| 424 | 424 | ||
| 425 | static __init void davinci_evm_irq_init(void) | 425 | static __init void davinci_evm_irq_init(void) |
diff --git a/arch/arm/mach-davinci/clock.c b/arch/arm/mach-davinci/clock.c index 28f6dbc95bd7..abb92b7eca0c 100644 --- a/arch/arm/mach-davinci/clock.c +++ b/arch/arm/mach-davinci/clock.c | |||
| @@ -231,6 +231,11 @@ static struct clk davinci_clks[] = { | |||
| 231 | .lpsc = DAVINCI_LPSC_GPIO, | 231 | .lpsc = DAVINCI_LPSC_GPIO, |
| 232 | }, | 232 | }, |
| 233 | { | 233 | { |
| 234 | .name = "usb", | ||
| 235 | .rate = &commonrate, | ||
| 236 | .lpsc = DAVINCI_LPSC_USB, | ||
| 237 | }, | ||
| 238 | { | ||
| 234 | .name = "AEMIFCLK", | 239 | .name = "AEMIFCLK", |
| 235 | .rate = &commonrate, | 240 | .rate = &commonrate, |
| 236 | .lpsc = DAVINCI_LPSC_AEMIF, | 241 | .lpsc = DAVINCI_LPSC_AEMIF, |
diff --git a/arch/arm/mach-davinci/usb.c b/arch/arm/mach-davinci/usb.c index 867ead2559ad..69680784448a 100644 --- a/arch/arm/mach-davinci/usb.c +++ b/arch/arm/mach-davinci/usb.c | |||
| @@ -47,6 +47,7 @@ static struct musb_hdrc_platform_data usb_data = { | |||
| 47 | #elif defined(CONFIG_USB_MUSB_HOST) | 47 | #elif defined(CONFIG_USB_MUSB_HOST) |
| 48 | .mode = MUSB_HOST, | 48 | .mode = MUSB_HOST, |
| 49 | #endif | 49 | #endif |
| 50 | .clock = "usb", | ||
| 50 | .config = &musb_config, | 51 | .config = &musb_config, |
| 51 | }; | 52 | }; |
| 52 | 53 | ||
diff --git a/arch/arm/mach-ep93xx/include/mach/gesbc9312.h b/arch/arm/mach-ep93xx/include/mach/gesbc9312.h deleted file mode 100644 index 21fe2b922aa5..000000000000 --- a/arch/arm/mach-ep93xx/include/mach/gesbc9312.h +++ /dev/null | |||
| @@ -1,3 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ep93xx/include/mach/gesbc9312.h | ||
| 3 | */ | ||
diff --git a/arch/arm/mach-ep93xx/include/mach/hardware.h b/arch/arm/mach-ep93xx/include/mach/hardware.h index 529807d182bf..2866297310b7 100644 --- a/arch/arm/mach-ep93xx/include/mach/hardware.h +++ b/arch/arm/mach-ep93xx/include/mach/hardware.h | |||
| @@ -10,7 +10,6 @@ | |||
| 10 | 10 | ||
| 11 | #include "platform.h" | 11 | #include "platform.h" |
| 12 | 12 | ||
| 13 | #include "gesbc9312.h" | ||
| 14 | #include "ts72xx.h" | 13 | #include "ts72xx.h" |
| 15 | 14 | ||
| 16 | #endif | 15 | #endif |
diff --git a/arch/arm/mach-kirkwood/irq.c b/arch/arm/mach-kirkwood/irq.c index efb86b700276..06083b23bb44 100644 --- a/arch/arm/mach-kirkwood/irq.c +++ b/arch/arm/mach-kirkwood/irq.c | |||
| @@ -42,7 +42,7 @@ void __init kirkwood_init_irq(void) | |||
| 42 | writel(0, GPIO_EDGE_CAUSE(32)); | 42 | writel(0, GPIO_EDGE_CAUSE(32)); |
| 43 | 43 | ||
| 44 | for (i = IRQ_KIRKWOOD_GPIO_START; i < NR_IRQS; i++) { | 44 | for (i = IRQ_KIRKWOOD_GPIO_START; i < NR_IRQS; i++) { |
| 45 | set_irq_chip(i, &orion_gpio_irq_level_chip); | 45 | set_irq_chip(i, &orion_gpio_irq_chip); |
| 46 | set_irq_handler(i, handle_level_irq); | 46 | set_irq_handler(i, handle_level_irq); |
| 47 | irq_desc[i].status |= IRQ_LEVEL; | 47 | irq_desc[i].status |= IRQ_LEVEL; |
| 48 | set_irq_flags(i, IRQF_VALID); | 48 | set_irq_flags(i, IRQF_VALID); |
diff --git a/arch/arm/mach-mv78xx0/irq.c b/arch/arm/mach-mv78xx0/irq.c index e273418797b4..30b7e4bcdbc7 100644 --- a/arch/arm/mach-mv78xx0/irq.c +++ b/arch/arm/mach-mv78xx0/irq.c | |||
| @@ -40,7 +40,7 @@ void __init mv78xx0_init_irq(void) | |||
| 40 | writel(0, GPIO_EDGE_CAUSE(0)); | 40 | writel(0, GPIO_EDGE_CAUSE(0)); |
| 41 | 41 | ||
| 42 | for (i = IRQ_MV78XX0_GPIO_START; i < NR_IRQS; i++) { | 42 | for (i = IRQ_MV78XX0_GPIO_START; i < NR_IRQS; i++) { |
| 43 | set_irq_chip(i, &orion_gpio_irq_level_chip); | 43 | set_irq_chip(i, &orion_gpio_irq_chip); |
| 44 | set_irq_handler(i, handle_level_irq); | 44 | set_irq_handler(i, handle_level_irq); |
| 45 | irq_desc[i].status |= IRQ_LEVEL; | 45 | irq_desc[i].status |= IRQ_LEVEL; |
| 46 | set_irq_flags(i, IRQF_VALID); | 46 | set_irq_flags(i, IRQF_VALID); |
diff --git a/arch/arm/mach-mx1/Kconfig b/arch/arm/mach-mx1/Kconfig index 2b59fc74784f..eb7660f5d4b7 100644 --- a/arch/arm/mach-mx1/Kconfig +++ b/arch/arm/mach-mx1/Kconfig | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | if ARCH_MX1 | 1 | if ARCH_MX1 |
| 2 | 2 | ||
| 3 | comment "MX1 Platforms" | 3 | comment "MX1 platforms:" |
| 4 | 4 | ||
| 5 | config MACH_MXLADS | 5 | config MACH_MXLADS |
| 6 | bool | 6 | bool |
| @@ -11,4 +11,9 @@ config ARCH_MX1ADS | |||
| 11 | help | 11 | help |
| 12 | Say Y here if you are using Motorola MX1ADS/MXLADS boards | 12 | Say Y here if you are using Motorola MX1ADS/MXLADS boards |
| 13 | 13 | ||
| 14 | config MACH_SCB9328 | ||
| 15 | bool "Synertronixx scb9328" | ||
| 16 | help | ||
| 17 | Say Y here if you are using a Synertronixx scb9328 board | ||
| 18 | |||
| 14 | endif | 19 | endif |
diff --git a/arch/arm/mach-mx1/Makefile b/arch/arm/mach-mx1/Makefile index b969719011fa..82f1309568ef 100644 --- a/arch/arm/mach-mx1/Makefile +++ b/arch/arm/mach-mx1/Makefile | |||
| @@ -8,3 +8,4 @@ obj-y += generic.o clock.o devices.o | |||
| 8 | 8 | ||
| 9 | # Specific board support | 9 | # Specific board support |
| 10 | obj-$(CONFIG_ARCH_MX1ADS) += mx1ads.o | 10 | obj-$(CONFIG_ARCH_MX1ADS) += mx1ads.o |
| 11 | obj-$(CONFIG_MACH_SCB9328) += scb9328.o \ No newline at end of file | ||
diff --git a/arch/arm/mach-mx1/clock.c b/arch/arm/mach-mx1/clock.c index 4bcd1ece55f5..0d0f306851d0 100644 --- a/arch/arm/mach-mx1/clock.c +++ b/arch/arm/mach-mx1/clock.c | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | 25 | ||
| 26 | #include <mach/clock.h> | 26 | #include <mach/clock.h> |
| 27 | #include <mach/hardware.h> | 27 | #include <mach/hardware.h> |
| 28 | #include <mach/common.h> | ||
| 28 | #include "crm_regs.h" | 29 | #include "crm_regs.h" |
| 29 | 30 | ||
| 30 | static int _clk_enable(struct clk *clk) | 31 | static int _clk_enable(struct clk *clk) |
| @@ -87,33 +88,6 @@ static int _clk_parent_set_rate(struct clk *clk, unsigned long rate) | |||
| 87 | return clk->parent->set_rate(clk->parent, rate); | 88 | return clk->parent->set_rate(clk->parent, rate); |
| 88 | } | 89 | } |
| 89 | 90 | ||
| 90 | /* | ||
| 91 | * get the system pll clock in Hz | ||
| 92 | * | ||
| 93 | * mfi + mfn / (mfd +1) | ||
| 94 | * f = 2 * f_ref * -------------------- | ||
| 95 | * pd + 1 | ||
| 96 | */ | ||
| 97 | static unsigned long mx1_decode_pll(unsigned int pll, u32 f_ref) | ||
| 98 | { | ||
| 99 | unsigned long long ll; | ||
| 100 | unsigned long quot; | ||
| 101 | |||
| 102 | u32 mfi = (pll >> 10) & 0xf; | ||
| 103 | u32 mfn = pll & 0x3ff; | ||
| 104 | u32 mfd = (pll >> 16) & 0x3ff; | ||
| 105 | u32 pd = (pll >> 26) & 0xf; | ||
| 106 | |||
| 107 | mfi = mfi <= 5 ? 5 : mfi; | ||
| 108 | |||
| 109 | ll = 2 * (unsigned long long)f_ref * | ||
| 110 | ((mfi << 16) + (mfn << 16) / (mfd + 1)); | ||
| 111 | quot = (pd + 1) * (1 << 16); | ||
| 112 | ll += quot / 2; | ||
| 113 | do_div(ll, quot); | ||
| 114 | return (unsigned long)ll; | ||
| 115 | } | ||
| 116 | |||
| 117 | static unsigned long clk16m_get_rate(struct clk *clk) | 91 | static unsigned long clk16m_get_rate(struct clk *clk) |
| 118 | { | 92 | { |
| 119 | return 16000000; | 93 | return 16000000; |
| @@ -188,7 +162,7 @@ static struct clk prem_clk = { | |||
| 188 | 162 | ||
| 189 | static unsigned long system_clk_get_rate(struct clk *clk) | 163 | static unsigned long system_clk_get_rate(struct clk *clk) |
| 190 | { | 164 | { |
| 191 | return mx1_decode_pll(__raw_readl(CCM_SPCTL0), | 165 | return mxc_decode_pll(__raw_readl(CCM_SPCTL0), |
| 192 | clk_get_rate(clk->parent)); | 166 | clk_get_rate(clk->parent)); |
| 193 | } | 167 | } |
| 194 | 168 | ||
| @@ -200,7 +174,7 @@ static struct clk system_clk = { | |||
| 200 | 174 | ||
| 201 | static unsigned long mcu_clk_get_rate(struct clk *clk) | 175 | static unsigned long mcu_clk_get_rate(struct clk *clk) |
| 202 | { | 176 | { |
| 203 | return mx1_decode_pll(__raw_readl(CCM_MPCTL0), | 177 | return mxc_decode_pll(__raw_readl(CCM_MPCTL0), |
| 204 | clk_get_rate(clk->parent)); | 178 | clk_get_rate(clk->parent)); |
| 205 | } | 179 | } |
| 206 | 180 | ||
| @@ -488,7 +462,7 @@ static struct clk clko_clk = { | |||
| 488 | }; | 462 | }; |
| 489 | 463 | ||
| 490 | static struct clk dma_clk = { | 464 | static struct clk dma_clk = { |
| 491 | .name = "dma_clk", | 465 | .name = "dma", |
| 492 | .parent = &hclk, | 466 | .parent = &hclk, |
| 493 | .round_rate = _clk_parent_round_rate, | 467 | .round_rate = _clk_parent_round_rate, |
| 494 | .set_rate = _clk_parent_set_rate, | 468 | .set_rate = _clk_parent_set_rate, |
| @@ -539,7 +513,7 @@ static struct clk gpt_clk = { | |||
| 539 | }; | 513 | }; |
| 540 | 514 | ||
| 541 | static struct clk uart_clk = { | 515 | static struct clk uart_clk = { |
| 542 | .name = "uart_clk", | 516 | .name = "uart", |
| 543 | .parent = &perclk[0], | 517 | .parent = &perclk[0], |
| 544 | .round_rate = _clk_parent_round_rate, | 518 | .round_rate = _clk_parent_round_rate, |
| 545 | .set_rate = _clk_parent_set_rate, | 519 | .set_rate = _clk_parent_set_rate, |
| @@ -621,7 +595,7 @@ static struct clk *mxc_clks[] = { | |||
| 621 | &rtc_clk, | 595 | &rtc_clk, |
| 622 | }; | 596 | }; |
| 623 | 597 | ||
| 624 | int __init mxc_clocks_init(unsigned long fref) | 598 | int __init mx1_clocks_init(unsigned long fref) |
| 625 | { | 599 | { |
| 626 | struct clk **clkp; | 600 | struct clk **clkp; |
| 627 | unsigned int reg; | 601 | unsigned int reg; |
| @@ -652,5 +626,7 @@ int __init mxc_clocks_init(unsigned long fref) | |||
| 652 | clk_enable(&hclk); | 626 | clk_enable(&hclk); |
| 653 | clk_enable(&fclk); | 627 | clk_enable(&fclk); |
| 654 | 628 | ||
| 629 | mxc_timer_init(&gpt_clk); | ||
| 630 | |||
| 655 | return 0; | 631 | return 0; |
| 656 | } | 632 | } |
diff --git a/arch/arm/mach-mx1/devices.c b/arch/arm/mach-mx1/devices.c index 686d8d2dbb24..97f42d96d7a1 100644 --- a/arch/arm/mach-mx1/devices.c +++ b/arch/arm/mach-mx1/devices.c | |||
| @@ -23,8 +23,11 @@ | |||
| 23 | #include <linux/init.h> | 23 | #include <linux/init.h> |
| 24 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
| 25 | #include <linux/gpio.h> | 25 | #include <linux/gpio.h> |
| 26 | #include <mach/irqs.h> | ||
| 26 | #include <mach/hardware.h> | 27 | #include <mach/hardware.h> |
| 27 | 28 | ||
| 29 | #include "devices.h" | ||
| 30 | |||
| 28 | static struct resource imx_csi_resources[] = { | 31 | static struct resource imx_csi_resources[] = { |
| 29 | [0] = { | 32 | [0] = { |
| 30 | .start = 0x00224000, | 33 | .start = 0x00224000, |
diff --git a/arch/arm/mach-mx1/mx1ads.c b/arch/arm/mach-mx1/mx1ads.c index 2e4b185fe4a9..89738fe576b1 100644 --- a/arch/arm/mach-mx1/mx1ads.c +++ b/arch/arm/mach-mx1/mx1ads.c | |||
| @@ -16,6 +16,8 @@ | |||
| 16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 17 | #include <linux/platform_device.h> | 17 | #include <linux/platform_device.h> |
| 18 | #include <linux/mtd/physmap.h> | 18 | #include <linux/mtd/physmap.h> |
| 19 | #include <linux/i2c.h> | ||
| 20 | #include <linux/i2c/pcf857x.h> | ||
| 19 | 21 | ||
| 20 | #include <asm/mach-types.h> | 22 | #include <asm/mach-types.h> |
| 21 | #include <asm/mach/arch.h> | 23 | #include <asm/mach/arch.h> |
| @@ -24,7 +26,11 @@ | |||
| 24 | #include <mach/hardware.h> | 26 | #include <mach/hardware.h> |
| 25 | #include <mach/common.h> | 27 | #include <mach/common.h> |
| 26 | #include <mach/imx-uart.h> | 28 | #include <mach/imx-uart.h> |
| 27 | #include <mach/iomux-mx1-mx2.h> | 29 | #include <mach/irqs.h> |
| 30 | #ifdef CONFIG_I2C_IMX | ||
| 31 | #include <mach/i2c.h> | ||
| 32 | #endif | ||
| 33 | #include <mach/iomux.h> | ||
| 28 | #include "devices.h" | 34 | #include "devices.h" |
| 29 | 35 | ||
| 30 | /* | 36 | /* |
| @@ -104,6 +110,55 @@ static struct platform_device flash_device = { | |||
| 104 | }; | 110 | }; |
| 105 | 111 | ||
| 106 | /* | 112 | /* |
| 113 | * I2C | ||
| 114 | */ | ||
| 115 | |||
| 116 | #ifdef CONFIG_I2C_IMX | ||
| 117 | static int i2c_pins[] = { | ||
| 118 | PA15_PF_I2C_SDA, | ||
| 119 | PA16_PF_I2C_SCL, | ||
| 120 | }; | ||
| 121 | |||
| 122 | static int i2c_init(struct device *dev) | ||
| 123 | { | ||
| 124 | return mxc_gpio_setup_multiple_pins(i2c_pins, | ||
| 125 | ARRAY_SIZE(i2c_pins), "I2C"); | ||
| 126 | } | ||
| 127 | |||
| 128 | static void i2c_exit(struct device *dev) | ||
| 129 | { | ||
| 130 | mxc_gpio_release_multiple_pins(i2c_pins, | ||
| 131 | ARRAY_SIZE(i2c_pins)); | ||
| 132 | } | ||
| 133 | |||
| 134 | static struct pcf857x_platform_data pcf857x_data[] = { | ||
| 135 | { | ||
| 136 | .gpio_base = 4 * 32, | ||
| 137 | }, { | ||
| 138 | .gpio_base = 4 * 32 + 16, | ||
| 139 | } | ||
| 140 | }; | ||
| 141 | |||
| 142 | static struct imxi2c_platform_data mx1ads_i2c_data = { | ||
| 143 | .bitrate = 100000, | ||
| 144 | .init = i2c_init, | ||
| 145 | .exit = i2c_exit, | ||
| 146 | }; | ||
| 147 | |||
| 148 | static struct i2c_board_info mx1ads_i2c_devices[] = { | ||
| 149 | { | ||
| 150 | I2C_BOARD_INFO("pcf857x", 0x22), | ||
| 151 | .type = "pcf8575", | ||
| 152 | .platform_data = &pcf857x_data[0], | ||
| 153 | }, { | ||
| 154 | I2C_BOARD_INFO("pcf857x", 0x24), | ||
| 155 | .type = "pcf8575", | ||
| 156 | .platform_data = &pcf857x_data[1], | ||
| 157 | }, | ||
| 158 | }; | ||
| 159 | #endif | ||
| 160 | |||
| 161 | /* | ||
| 107 | * Board init | 162 | * Board init |
| 108 | */ | 163 | */ |
| 109 | static void __init mx1ads_init(void) | 164 | static void __init mx1ads_init(void) |
| @@ -114,12 +169,19 @@ static void __init mx1ads_init(void) | |||
| 114 | 169 | ||
| 115 | /* Physmap flash */ | 170 | /* Physmap flash */ |
| 116 | mxc_register_device(&flash_device, &mx1ads_flash_data); | 171 | mxc_register_device(&flash_device, &mx1ads_flash_data); |
| 172 | |||
| 173 | /* I2C */ | ||
| 174 | #ifdef CONFIG_I2C_IMX | ||
| 175 | i2c_register_board_info(0, mx1ads_i2c_devices, | ||
| 176 | ARRAY_SIZE(mx1ads_i2c_devices)); | ||
| 177 | |||
| 178 | mxc_register_device(&imx_i2c_device, &mx1ads_i2c_data); | ||
| 179 | #endif | ||
| 117 | } | 180 | } |
| 118 | 181 | ||
| 119 | static void __init mx1ads_timer_init(void) | 182 | static void __init mx1ads_timer_init(void) |
| 120 | { | 183 | { |
| 121 | mxc_clocks_init(32000); | 184 | mx1_clocks_init(32000); |
| 122 | mxc_timer_init("gpt_clk"); | ||
| 123 | } | 185 | } |
| 124 | 186 | ||
| 125 | struct sys_timer mx1ads_timer = { | 187 | struct sys_timer mx1ads_timer = { |
diff --git a/arch/arm/mach-mx1/scb9328.c b/arch/arm/mach-mx1/scb9328.c new file mode 100644 index 000000000000..0e71f3fa28bf --- /dev/null +++ b/arch/arm/mach-mx1/scb9328.c | |||
| @@ -0,0 +1,160 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/arm/mach-mx1/scb9328.c | ||
| 3 | * | ||
| 4 | * Copyright (c) 2004 Sascha Hauer <saschahauer@web.de> | ||
| 5 | * Copyright (c) 2006-2008 Juergen Beisert <jbeisert@netscape.net> | ||
| 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/platform_device.h> | ||
| 14 | #include <linux/mtd/physmap.h> | ||
| 15 | #include <linux/interrupt.h> | ||
| 16 | #include <linux/dm9000.h> | ||
| 17 | |||
| 18 | #include <asm/mach-types.h> | ||
| 19 | #include <asm/mach/arch.h> | ||
| 20 | #include <asm/mach/time.h> | ||
| 21 | |||
| 22 | #include <mach/common.h> | ||
| 23 | #include <mach/hardware.h> | ||
| 24 | #include <mach/irqs.h> | ||
| 25 | #include <mach/imx-uart.h> | ||
| 26 | #include <mach/iomux.h> | ||
| 27 | |||
| 28 | #include "devices.h" | ||
| 29 | |||
| 30 | /* | ||
| 31 | * This scb9328 has a 32MiB flash | ||
| 32 | */ | ||
| 33 | static struct resource flash_resource = { | ||
| 34 | .start = IMX_CS0_PHYS, | ||
| 35 | .end = IMX_CS0_PHYS + (32 * 1024 * 1024) - 1, | ||
| 36 | .flags = IORESOURCE_MEM, | ||
| 37 | }; | ||
| 38 | |||
| 39 | static struct physmap_flash_data scb_flash_data = { | ||
| 40 | .width = 2, | ||
| 41 | }; | ||
| 42 | |||
| 43 | static struct platform_device scb_flash_device = { | ||
| 44 | .name = "physmap-flash", | ||
| 45 | .id = 0, | ||
| 46 | .dev = { | ||
| 47 | .platform_data = &scb_flash_data, | ||
| 48 | }, | ||
| 49 | .resource = &flash_resource, | ||
| 50 | .num_resources = 1, | ||
| 51 | }; | ||
| 52 | |||
| 53 | /* | ||
| 54 | * scb9328 has a DM9000 network controller | ||
| 55 | * connected to CS5, with 16 bit data path | ||
| 56 | * and interrupt connected to GPIO 3 | ||
| 57 | */ | ||
| 58 | |||
| 59 | /* | ||
| 60 | * internal datapath is fixed 16 bit | ||
| 61 | */ | ||
| 62 | static struct dm9000_plat_data dm9000_platdata = { | ||
| 63 | .flags = DM9000_PLATF_16BITONLY, | ||
| 64 | }; | ||
| 65 | |||
| 66 | /* | ||
| 67 | * the DM9000 drivers wants two defined address spaces | ||
| 68 | * to gain access to address latch registers and the data path. | ||
| 69 | */ | ||
| 70 | static struct resource dm9000x_resources[] = { | ||
| 71 | [0] = { | ||
| 72 | .name = "address area", | ||
| 73 | .start = IMX_CS5_PHYS, | ||
| 74 | .end = IMX_CS5_PHYS + 1, | ||
| 75 | .flags = IORESOURCE_MEM /* address access */ | ||
| 76 | }, | ||
| 77 | [1] = { | ||
| 78 | .name = "data area", | ||
| 79 | .start = IMX_CS5_PHYS + 4, | ||
| 80 | .end = IMX_CS5_PHYS + 5, | ||
| 81 | .flags = IORESOURCE_MEM /* data access */ | ||
| 82 | }, | ||
| 83 | [2] = { | ||
| 84 | .start = IRQ_GPIOC(3), | ||
| 85 | .end = IRQ_GPIOC(3), | ||
| 86 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL | ||
| 87 | }, | ||
| 88 | }; | ||
| 89 | |||
| 90 | static struct platform_device dm9000x_device = { | ||
| 91 | .name = "dm9000", | ||
| 92 | .id = 0, | ||
| 93 | .num_resources = ARRAY_SIZE(dm9000x_resources), | ||
| 94 | .resource = dm9000x_resources, | ||
| 95 | .dev = { | ||
| 96 | .platform_data = &dm9000_platdata, | ||
| 97 | } | ||
| 98 | }; | ||
| 99 | |||
| 100 | static int mxc_uart1_pins[] = { | ||
| 101 | PC9_PF_UART1_CTS, | ||
| 102 | PC10_PF_UART1_RTS, | ||
| 103 | PC11_PF_UART1_TXD, | ||
| 104 | PC12_PF_UART1_RXD, | ||
| 105 | }; | ||
| 106 | |||
| 107 | static int uart1_mxc_init(struct platform_device *pdev) | ||
| 108 | { | ||
| 109 | return mxc_gpio_setup_multiple_pins(mxc_uart1_pins, | ||
| 110 | ARRAY_SIZE(mxc_uart1_pins), "UART1"); | ||
| 111 | } | ||
| 112 | |||
| 113 | static int uart1_mxc_exit(struct platform_device *pdev) | ||
| 114 | { | ||
| 115 | mxc_gpio_release_multiple_pins(mxc_uart1_pins, | ||
| 116 | ARRAY_SIZE(mxc_uart1_pins)); | ||
| 117 | return 0; | ||
| 118 | } | ||
| 119 | |||
| 120 | static struct imxuart_platform_data uart_pdata = { | ||
| 121 | .init = uart1_mxc_init, | ||
| 122 | .exit = uart1_mxc_exit, | ||
| 123 | .flags = IMXUART_HAVE_RTSCTS, | ||
| 124 | }; | ||
| 125 | |||
| 126 | static struct platform_device *devices[] __initdata = { | ||
| 127 | &scb_flash_device, | ||
| 128 | &dm9000x_device, | ||
| 129 | }; | ||
| 130 | |||
| 131 | /* | ||
| 132 | * scb9328_init - Init the CPU card itself | ||
| 133 | */ | ||
| 134 | static void __init scb9328_init(void) | ||
| 135 | { | ||
| 136 | mxc_register_device(&imx_uart1_device, &uart_pdata); | ||
| 137 | |||
| 138 | printk(KERN_INFO"Scb9328: Adding devices\n"); | ||
| 139 | platform_add_devices(devices, ARRAY_SIZE(devices)); | ||
| 140 | } | ||
| 141 | |||
| 142 | static void __init scb9328_timer_init(void) | ||
| 143 | { | ||
| 144 | mx1_clocks_init(32000); | ||
| 145 | } | ||
| 146 | |||
| 147 | static struct sys_timer scb9328_timer = { | ||
| 148 | .init = scb9328_timer_init, | ||
| 149 | }; | ||
| 150 | |||
| 151 | MACHINE_START(SCB9328, "Synertronixx scb9328") | ||
| 152 | /* Sascha Hauer */ | ||
| 153 | .phys_io = 0x00200000, | ||
| 154 | .io_pg_offst = ((0xe0200000) >> 18) & 0xfffc, | ||
| 155 | .boot_params = 0x08000100, | ||
| 156 | .map_io = mxc_map_io, | ||
| 157 | .init_irq = mxc_init_irq, | ||
| 158 | .timer = &scb9328_timer, | ||
| 159 | .init_machine = scb9328_init, | ||
| 160 | MACHINE_END | ||
diff --git a/arch/arm/mach-mx2/Kconfig b/arch/arm/mach-mx2/Kconfig index 1eaa97cb716d..42a788842f49 100644 --- a/arch/arm/mach-mx2/Kconfig +++ b/arch/arm/mach-mx2/Kconfig | |||
| @@ -1,14 +1,22 @@ | |||
| 1 | comment "MX2 family CPU support" | 1 | if ARCH_MX2 |
| 2 | depends on ARCH_MX2 | 2 | |
| 3 | choice | ||
| 4 | prompt "CPUs:" | ||
| 5 | default MACH_MX21 | ||
| 6 | |||
| 7 | config MACH_MX21 | ||
| 8 | bool "i.MX21 support" | ||
| 9 | help | ||
| 10 | This enables support for Freescale's MX2 based i.MX21 processor. | ||
| 3 | 11 | ||
| 4 | config MACH_MX27 | 12 | config MACH_MX27 |
| 5 | bool "i.MX27 support" | 13 | bool "i.MX27 support" |
| 6 | depends on ARCH_MX2 | ||
| 7 | help | 14 | help |
| 8 | This enables support for Freescale's MX2 based i.MX27 processor. | 15 | This enables support for Freescale's MX2 based i.MX27 processor. |
| 9 | 16 | ||
| 10 | comment "MX2 Platforms" | 17 | endchoice |
| 11 | depends on ARCH_MX2 | 18 | |
| 19 | comment "MX2 platforms:" | ||
| 12 | 20 | ||
| 13 | config MACH_MX27ADS | 21 | config MACH_MX27ADS |
| 14 | bool "MX27ADS platform" | 22 | bool "MX27ADS platform" |
| @@ -37,3 +45,5 @@ config MACH_PCM970_BASEBOARD | |||
| 37 | PCM970 evaluation board. | 45 | PCM970 evaluation board. |
| 38 | 46 | ||
| 39 | endchoice | 47 | endchoice |
| 48 | |||
| 49 | endif | ||
diff --git a/arch/arm/mach-mx2/Makefile b/arch/arm/mach-mx2/Makefile index 382d86080e86..6e1a2bffc812 100644 --- a/arch/arm/mach-mx2/Makefile +++ b/arch/arm/mach-mx2/Makefile | |||
| @@ -6,6 +6,8 @@ | |||
| 6 | 6 | ||
| 7 | obj-y := system.o generic.o devices.o serial.o | 7 | obj-y := system.o generic.o devices.o serial.o |
| 8 | 8 | ||
| 9 | obj-$(CONFIG_MACH_MX21) += clock_imx21.o | ||
| 10 | |||
| 9 | obj-$(CONFIG_MACH_MX27) += cpu_imx27.o | 11 | obj-$(CONFIG_MACH_MX27) += cpu_imx27.o |
| 10 | obj-$(CONFIG_MACH_MX27) += clock_imx27.o | 12 | obj-$(CONFIG_MACH_MX27) += clock_imx27.o |
| 11 | 13 | ||
diff --git a/arch/arm/mach-mx2/Makefile.boot b/arch/arm/mach-mx2/Makefile.boot index 696831dcd485..e867398a8fdb 100644 --- a/arch/arm/mach-mx2/Makefile.boot +++ b/arch/arm/mach-mx2/Makefile.boot | |||
| @@ -1,3 +1,7 @@ | |||
| 1 | zreladdr-y := 0xA0008000 | 1 | zreladdr-$(CONFIG_MACH_MX21) := 0xC0008000 |
| 2 | params_phys-y := 0xA0000100 | 2 | params_phys-$(CONFIG_MACH_MX21) := 0xC0000100 |
| 3 | initrd_phys-y := 0xA0800000 | 3 | initrd_phys-$(CONFIG_MACH_MX21) := 0xC0800000 |
| 4 | |||
| 5 | zreladdr-$(CONFIG_MACH_MX27) := 0xA0008000 | ||
| 6 | params_phys-$(CONFIG_MACH_MX27) := 0xA0000100 | ||
| 7 | initrd_phys-$(CONFIG_MACH_MX27) := 0xA0800000 | ||
diff --git a/arch/arm/mach-mx2/clock_imx21.c b/arch/arm/mach-mx2/clock_imx21.c new file mode 100644 index 000000000000..2dee5c87614c --- /dev/null +++ b/arch/arm/mach-mx2/clock_imx21.c | |||
| @@ -0,0 +1,984 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | * Copyright 2008 Juergen Beisert, kernel@pengutronix.de | ||
| 4 | * Copyright 2008 Martin Fuzzey, mfuzzey@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 | ||
| 8 | * as published by the Free Software Foundation; either version 2 | ||
| 9 | * of the License, or (at your option) any later version. | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License | ||
| 16 | * along with this program; if not, write to the Free Software | ||
| 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
| 18 | * MA 02110-1301, USA. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #include <linux/clk.h> | ||
| 22 | #include <linux/io.h> | ||
| 23 | #include <linux/module.h> | ||
| 24 | |||
| 25 | #include <mach/clock.h> | ||
| 26 | #include <mach/common.h> | ||
| 27 | #include <asm/clkdev.h> | ||
| 28 | #include <asm/div64.h> | ||
| 29 | |||
| 30 | #include "crm_regs.h" | ||
| 31 | |||
| 32 | static int _clk_enable(struct clk *clk) | ||
| 33 | { | ||
| 34 | u32 reg; | ||
| 35 | |||
| 36 | reg = __raw_readl(clk->enable_reg); | ||
| 37 | reg |= 1 << clk->enable_shift; | ||
| 38 | __raw_writel(reg, clk->enable_reg); | ||
| 39 | return 0; | ||
| 40 | } | ||
| 41 | |||
| 42 | static void _clk_disable(struct clk *clk) | ||
| 43 | { | ||
| 44 | u32 reg; | ||
| 45 | |||
| 46 | reg = __raw_readl(clk->enable_reg); | ||
| 47 | reg &= ~(1 << clk->enable_shift); | ||
| 48 | __raw_writel(reg, clk->enable_reg); | ||
| 49 | } | ||
| 50 | |||
| 51 | static int _clk_spll_enable(struct clk *clk) | ||
| 52 | { | ||
| 53 | u32 reg; | ||
| 54 | |||
| 55 | reg = __raw_readl(CCM_CSCR); | ||
| 56 | reg |= CCM_CSCR_SPEN; | ||
| 57 | __raw_writel(reg, CCM_CSCR); | ||
| 58 | |||
| 59 | while ((__raw_readl(CCM_SPCTL1) & CCM_SPCTL1_LF) == 0) | ||
| 60 | ; | ||
| 61 | return 0; | ||
| 62 | } | ||
| 63 | |||
| 64 | static void _clk_spll_disable(struct clk *clk) | ||
| 65 | { | ||
| 66 | u32 reg; | ||
| 67 | |||
| 68 | reg = __raw_readl(CCM_CSCR); | ||
| 69 | reg &= ~CCM_CSCR_SPEN; | ||
| 70 | __raw_writel(reg, CCM_CSCR); | ||
| 71 | } | ||
| 72 | |||
| 73 | |||
| 74 | #define CSCR() (__raw_readl(CCM_CSCR)) | ||
| 75 | #define PCDR0() (__raw_readl(CCM_PCDR0)) | ||
| 76 | #define PCDR1() (__raw_readl(CCM_PCDR1)) | ||
| 77 | |||
| 78 | static unsigned long _clk_perclkx_round_rate(struct clk *clk, | ||
| 79 | unsigned long rate) | ||
| 80 | { | ||
| 81 | u32 div; | ||
| 82 | unsigned long parent_rate; | ||
| 83 | |||
| 84 | parent_rate = clk_get_rate(clk->parent); | ||
| 85 | |||
| 86 | div = parent_rate / rate; | ||
| 87 | if (parent_rate % rate) | ||
| 88 | div++; | ||
| 89 | |||
| 90 | if (div > 64) | ||
| 91 | div = 64; | ||
| 92 | |||
| 93 | return parent_rate / div; | ||
| 94 | } | ||
| 95 | |||
| 96 | static int _clk_perclkx_set_rate(struct clk *clk, unsigned long rate) | ||
| 97 | { | ||
| 98 | u32 reg; | ||
| 99 | u32 div; | ||
| 100 | unsigned long parent_rate; | ||
| 101 | |||
| 102 | parent_rate = clk_get_rate(clk->parent); | ||
| 103 | |||
| 104 | if (clk->id < 0 || clk->id > 3) | ||
| 105 | return -EINVAL; | ||
| 106 | |||
| 107 | div = parent_rate / rate; | ||
| 108 | if (div > 64 || div < 1 || ((parent_rate / div) != rate)) | ||
| 109 | return -EINVAL; | ||
| 110 | div--; | ||
| 111 | |||
| 112 | reg = | ||
| 113 | __raw_readl(CCM_PCDR1) & ~(CCM_PCDR1_PERDIV1_MASK << | ||
| 114 | (clk->id << 3)); | ||
| 115 | reg |= div << (clk->id << 3); | ||
| 116 | __raw_writel(reg, CCM_PCDR1); | ||
| 117 | |||
| 118 | return 0; | ||
| 119 | } | ||
| 120 | |||
| 121 | static unsigned long _clk_usb_recalc(struct clk *clk) | ||
| 122 | { | ||
| 123 | unsigned long usb_pdf; | ||
| 124 | unsigned long parent_rate; | ||
| 125 | |||
| 126 | parent_rate = clk_get_rate(clk->parent); | ||
| 127 | |||
| 128 | usb_pdf = (CSCR() & CCM_CSCR_USB_MASK) >> CCM_CSCR_USB_OFFSET; | ||
| 129 | |||
| 130 | return parent_rate / (usb_pdf + 1U); | ||
| 131 | } | ||
| 132 | |||
| 133 | static unsigned long _clk_ssix_recalc(struct clk *clk, unsigned long pdf) | ||
| 134 | { | ||
| 135 | unsigned long parent_rate; | ||
| 136 | |||
| 137 | parent_rate = clk_get_rate(clk->parent); | ||
| 138 | |||
| 139 | pdf = (pdf < 2) ? 124UL : pdf; /* MX21 & MX27 TO1 */ | ||
| 140 | |||
| 141 | return 2UL * parent_rate / pdf; | ||
| 142 | } | ||
| 143 | |||
| 144 | static unsigned long _clk_ssi1_recalc(struct clk *clk) | ||
| 145 | { | ||
| 146 | return _clk_ssix_recalc(clk, | ||
| 147 | (PCDR0() & CCM_PCDR0_SSI1BAUDDIV_MASK) | ||
| 148 | >> CCM_PCDR0_SSI1BAUDDIV_OFFSET); | ||
| 149 | } | ||
| 150 | |||
| 151 | static unsigned long _clk_ssi2_recalc(struct clk *clk) | ||
| 152 | { | ||
| 153 | return _clk_ssix_recalc(clk, | ||
| 154 | (PCDR0() & CCM_PCDR0_SSI2BAUDDIV_MASK) >> | ||
| 155 | CCM_PCDR0_SSI2BAUDDIV_OFFSET); | ||
| 156 | } | ||
| 157 | |||
| 158 | static unsigned long _clk_nfc_recalc(struct clk *clk) | ||
| 159 | { | ||
| 160 | unsigned long nfc_pdf; | ||
| 161 | unsigned long parent_rate; | ||
| 162 | |||
| 163 | parent_rate = clk_get_rate(clk->parent); | ||
| 164 | |||
| 165 | nfc_pdf = (PCDR0() & CCM_PCDR0_NFCDIV_MASK) | ||
| 166 | >> CCM_PCDR0_NFCDIV_OFFSET; | ||
| 167 | |||
| 168 | return parent_rate / (nfc_pdf + 1); | ||
| 169 | } | ||
| 170 | |||
| 171 | static unsigned long _clk_parent_round_rate(struct clk *clk, unsigned long rate) | ||
| 172 | { | ||
| 173 | return clk->parent->round_rate(clk->parent, rate); | ||
| 174 | } | ||
| 175 | |||
| 176 | static int _clk_parent_set_rate(struct clk *clk, unsigned long rate) | ||
| 177 | { | ||
| 178 | return clk->parent->set_rate(clk->parent, rate); | ||
| 179 | } | ||
| 180 | |||
| 181 | static unsigned long external_high_reference; /* in Hz */ | ||
| 182 | |||
| 183 | static unsigned long get_high_reference_clock_rate(struct clk *clk) | ||
| 184 | { | ||
| 185 | return external_high_reference; | ||
| 186 | } | ||
| 187 | |||
| 188 | /* | ||
| 189 | * the high frequency external clock reference | ||
| 190 | * Default case is 26MHz. | ||
| 191 | */ | ||
| 192 | static struct clk ckih_clk = { | ||
| 193 | .get_rate = get_high_reference_clock_rate, | ||
| 194 | }; | ||
| 195 | |||
| 196 | static unsigned long external_low_reference; /* in Hz */ | ||
| 197 | |||
| 198 | static unsigned long get_low_reference_clock_rate(struct clk *clk) | ||
| 199 | { | ||
| 200 | return external_low_reference; | ||
| 201 | } | ||
| 202 | |||
| 203 | /* | ||
| 204 | * the low frequency external clock reference | ||
| 205 | * Default case is 32.768kHz. | ||
| 206 | */ | ||
| 207 | static struct clk ckil_clk = { | ||
| 208 | .get_rate = get_low_reference_clock_rate, | ||
| 209 | }; | ||
| 210 | |||
| 211 | |||
| 212 | static unsigned long _clk_fpm_recalc(struct clk *clk) | ||
| 213 | { | ||
| 214 | return clk_get_rate(clk->parent) * 512; | ||
| 215 | } | ||
| 216 | |||
| 217 | /* Output of frequency pre multiplier */ | ||
| 218 | static struct clk fpm_clk = { | ||
| 219 | .parent = &ckil_clk, | ||
| 220 | .get_rate = _clk_fpm_recalc, | ||
| 221 | }; | ||
| 222 | |||
| 223 | static unsigned long get_mpll_clk(struct clk *clk) | ||
| 224 | { | ||
| 225 | uint32_t reg; | ||
| 226 | unsigned long ref_clk; | ||
| 227 | unsigned long mfi = 0, mfn = 0, mfd = 0, pdf = 0; | ||
| 228 | unsigned long long temp; | ||
| 229 | |||
| 230 | ref_clk = clk_get_rate(clk->parent); | ||
| 231 | |||
| 232 | reg = __raw_readl(CCM_MPCTL0); | ||
| 233 | pdf = (reg & CCM_MPCTL0_PD_MASK) >> CCM_MPCTL0_PD_OFFSET; | ||
| 234 | mfd = (reg & CCM_MPCTL0_MFD_MASK) >> CCM_MPCTL0_MFD_OFFSET; | ||
| 235 | mfi = (reg & CCM_MPCTL0_MFI_MASK) >> CCM_MPCTL0_MFI_OFFSET; | ||
| 236 | mfn = (reg & CCM_MPCTL0_MFN_MASK) >> CCM_MPCTL0_MFN_OFFSET; | ||
| 237 | |||
| 238 | mfi = (mfi <= 5) ? 5 : mfi; | ||
| 239 | temp = 2LL * ref_clk * mfn; | ||
| 240 | do_div(temp, mfd + 1); | ||
| 241 | temp = 2LL * ref_clk * mfi + temp; | ||
| 242 | do_div(temp, pdf + 1); | ||
| 243 | |||
| 244 | return (unsigned long)temp; | ||
| 245 | } | ||
| 246 | |||
| 247 | static struct clk mpll_clk = { | ||
| 248 | .parent = &ckih_clk, | ||
| 249 | .get_rate = get_mpll_clk, | ||
| 250 | }; | ||
| 251 | |||
| 252 | static unsigned long _clk_fclk_get_rate(struct clk *clk) | ||
| 253 | { | ||
| 254 | unsigned long parent_rate; | ||
| 255 | u32 div; | ||
| 256 | |||
| 257 | div = (CSCR() & CCM_CSCR_PRESC_MASK) >> CCM_CSCR_PRESC_OFFSET; | ||
| 258 | parent_rate = clk_get_rate(clk->parent); | ||
| 259 | |||
| 260 | return parent_rate / (div+1); | ||
| 261 | } | ||
| 262 | |||
| 263 | static struct clk fclk_clk = { | ||
| 264 | .parent = &mpll_clk, | ||
| 265 | .get_rate = _clk_fclk_get_rate | ||
| 266 | }; | ||
| 267 | |||
| 268 | static unsigned long get_spll_clk(struct clk *clk) | ||
| 269 | { | ||
| 270 | uint32_t reg; | ||
| 271 | unsigned long ref_clk; | ||
| 272 | unsigned long mfi = 0, mfn = 0, mfd = 0, pdf = 0; | ||
| 273 | unsigned long long temp; | ||
| 274 | |||
| 275 | ref_clk = clk_get_rate(clk->parent); | ||
| 276 | |||
| 277 | reg = __raw_readl(CCM_SPCTL0); | ||
| 278 | pdf = (reg & CCM_SPCTL0_PD_MASK) >> CCM_SPCTL0_PD_OFFSET; | ||
| 279 | mfd = (reg & CCM_SPCTL0_MFD_MASK) >> CCM_SPCTL0_MFD_OFFSET; | ||
| 280 | mfi = (reg & CCM_SPCTL0_MFI_MASK) >> CCM_SPCTL0_MFI_OFFSET; | ||
| 281 | mfn = (reg & CCM_SPCTL0_MFN_MASK) >> CCM_SPCTL0_MFN_OFFSET; | ||
| 282 | |||
| 283 | mfi = (mfi <= 5) ? 5 : mfi; | ||
| 284 | temp = 2LL * ref_clk * mfn; | ||
| 285 | do_div(temp, mfd + 1); | ||
| 286 | temp = 2LL * ref_clk * mfi + temp; | ||
| 287 | do_div(temp, pdf + 1); | ||
| 288 | |||
| 289 | return (unsigned long)temp; | ||
| 290 | } | ||
| 291 | |||
| 292 | static struct clk spll_clk = { | ||
| 293 | .parent = &ckih_clk, | ||
| 294 | .get_rate = get_spll_clk, | ||
| 295 | .enable = _clk_spll_enable, | ||
| 296 | .disable = _clk_spll_disable, | ||
| 297 | }; | ||
| 298 | |||
| 299 | static unsigned long get_hclk_clk(struct clk *clk) | ||
| 300 | { | ||
| 301 | unsigned long rate; | ||
| 302 | unsigned long bclk_pdf; | ||
| 303 | |||
| 304 | bclk_pdf = (CSCR() & CCM_CSCR_BCLK_MASK) | ||
| 305 | >> CCM_CSCR_BCLK_OFFSET; | ||
| 306 | |||
| 307 | rate = clk_get_rate(clk->parent); | ||
| 308 | return rate / (bclk_pdf + 1); | ||
| 309 | } | ||
| 310 | |||
| 311 | static struct clk hclk_clk = { | ||
| 312 | .parent = &fclk_clk, | ||
| 313 | .get_rate = get_hclk_clk, | ||
| 314 | }; | ||
| 315 | |||
| 316 | static unsigned long get_ipg_clk(struct clk *clk) | ||
| 317 | { | ||
| 318 | unsigned long rate; | ||
| 319 | unsigned long ipg_pdf; | ||
| 320 | |||
| 321 | ipg_pdf = (CSCR() & CCM_CSCR_IPDIV) >> CCM_CSCR_IPDIV_OFFSET; | ||
| 322 | |||
| 323 | rate = clk_get_rate(clk->parent); | ||
| 324 | return rate / (ipg_pdf + 1); | ||
| 325 | } | ||
| 326 | |||
| 327 | static struct clk ipg_clk = { | ||
| 328 | .parent = &hclk_clk, | ||
| 329 | .get_rate = get_ipg_clk, | ||
| 330 | }; | ||
| 331 | |||
| 332 | static unsigned long _clk_perclkx_recalc(struct clk *clk) | ||
| 333 | { | ||
| 334 | unsigned long perclk_pdf; | ||
| 335 | unsigned long parent_rate; | ||
| 336 | |||
| 337 | parent_rate = clk_get_rate(clk->parent); | ||
| 338 | |||
| 339 | if (clk->id < 0 || clk->id > 3) | ||
| 340 | return 0; | ||
| 341 | |||
| 342 | perclk_pdf = (PCDR1() >> (clk->id << 3)) & CCM_PCDR1_PERDIV1_MASK; | ||
| 343 | |||
| 344 | return parent_rate / (perclk_pdf + 1); | ||
| 345 | } | ||
| 346 | |||
| 347 | static struct clk per_clk[] = { | ||
| 348 | { | ||
| 349 | .id = 0, | ||
| 350 | .parent = &mpll_clk, | ||
| 351 | .get_rate = _clk_perclkx_recalc, | ||
| 352 | }, { | ||
| 353 | .id = 1, | ||
| 354 | .parent = &mpll_clk, | ||
| 355 | .get_rate = _clk_perclkx_recalc, | ||
| 356 | }, { | ||
| 357 | .id = 2, | ||
| 358 | .parent = &mpll_clk, | ||
| 359 | .round_rate = _clk_perclkx_round_rate, | ||
| 360 | .set_rate = _clk_perclkx_set_rate, | ||
| 361 | .get_rate = _clk_perclkx_recalc, | ||
| 362 | /* Enable/Disable done via lcd_clkc[1] */ | ||
| 363 | }, { | ||
| 364 | .id = 3, | ||
| 365 | .parent = &mpll_clk, | ||
| 366 | .round_rate = _clk_perclkx_round_rate, | ||
| 367 | .set_rate = _clk_perclkx_set_rate, | ||
| 368 | .get_rate = _clk_perclkx_recalc, | ||
| 369 | /* Enable/Disable done via csi_clk[1] */ | ||
| 370 | }, | ||
| 371 | }; | ||
| 372 | |||
| 373 | static struct clk uart_ipg_clk[]; | ||
| 374 | |||
| 375 | static struct clk uart_clk[] = { | ||
| 376 | { | ||
| 377 | .id = 0, | ||
| 378 | .parent = &per_clk[0], | ||
| 379 | .secondary = &uart_ipg_clk[0], | ||
| 380 | }, { | ||
| 381 | .id = 1, | ||
| 382 | .parent = &per_clk[0], | ||
| 383 | .secondary = &uart_ipg_clk[1], | ||
| 384 | }, { | ||
| 385 | .id = 2, | ||
| 386 | .parent = &per_clk[0], | ||
| 387 | .secondary = &uart_ipg_clk[2], | ||
| 388 | }, { | ||
| 389 | .id = 3, | ||
| 390 | .parent = &per_clk[0], | ||
| 391 | .secondary = &uart_ipg_clk[3], | ||
| 392 | }, | ||
| 393 | }; | ||
| 394 | |||
| 395 | static struct clk uart_ipg_clk[] = { | ||
| 396 | { | ||
| 397 | .id = 0, | ||
| 398 | .parent = &ipg_clk, | ||
| 399 | .enable = _clk_enable, | ||
| 400 | .enable_reg = CCM_PCCR_UART1_REG, | ||
| 401 | .enable_shift = CCM_PCCR_UART1_OFFSET, | ||
| 402 | .disable = _clk_disable, | ||
| 403 | }, { | ||
| 404 | .id = 1, | ||
| 405 | .parent = &ipg_clk, | ||
| 406 | .enable = _clk_enable, | ||
| 407 | .enable_reg = CCM_PCCR_UART2_REG, | ||
| 408 | .enable_shift = CCM_PCCR_UART2_OFFSET, | ||
| 409 | .disable = _clk_disable, | ||
| 410 | }, { | ||
| 411 | .id = 2, | ||
| 412 | .parent = &ipg_clk, | ||
| 413 | .enable = _clk_enable, | ||
| 414 | .enable_reg = CCM_PCCR_UART3_REG, | ||
| 415 | .enable_shift = CCM_PCCR_UART3_OFFSET, | ||
| 416 | .disable = _clk_disable, | ||
| 417 | }, { | ||
| 418 | .id = 3, | ||
| 419 | .parent = &ipg_clk, | ||
| 420 | .enable = _clk_enable, | ||
| 421 | .enable_reg = CCM_PCCR_UART4_REG, | ||
| 422 | .enable_shift = CCM_PCCR_UART4_OFFSET, | ||
| 423 | .disable = _clk_disable, | ||
| 424 | }, | ||
| 425 | }; | ||
| 426 | |||
| 427 | static struct clk gpt_ipg_clk[]; | ||
| 428 | |||
| 429 | static struct clk gpt_clk[] = { | ||
| 430 | { | ||
| 431 | .id = 0, | ||
| 432 | .parent = &per_clk[0], | ||
| 433 | .secondary = &gpt_ipg_clk[0], | ||
| 434 | }, { | ||
| 435 | .id = 1, | ||
| 436 | .parent = &per_clk[0], | ||
| 437 | .secondary = &gpt_ipg_clk[1], | ||
| 438 | }, { | ||
| 439 | .id = 2, | ||
| 440 | .parent = &per_clk[0], | ||
| 441 | .secondary = &gpt_ipg_clk[2], | ||
| 442 | }, | ||
| 443 | }; | ||
| 444 | |||
| 445 | static struct clk gpt_ipg_clk[] = { | ||
| 446 | { | ||
| 447 | .id = 0, | ||
| 448 | .parent = &ipg_clk, | ||
| 449 | .enable = _clk_enable, | ||
| 450 | .enable_reg = CCM_PCCR_GPT1_REG, | ||
| 451 | .enable_shift = CCM_PCCR_GPT1_OFFSET, | ||
| 452 | .disable = _clk_disable, | ||
| 453 | }, { | ||
| 454 | .id = 1, | ||
| 455 | .parent = &ipg_clk, | ||
| 456 | .enable = _clk_enable, | ||
| 457 | .enable_reg = CCM_PCCR_GPT2_REG, | ||
| 458 | .enable_shift = CCM_PCCR_GPT2_OFFSET, | ||
| 459 | .disable = _clk_disable, | ||
| 460 | }, { | ||
| 461 | .id = 2, | ||
| 462 | .parent = &ipg_clk, | ||
| 463 | .enable = _clk_enable, | ||
| 464 | .enable_reg = CCM_PCCR_GPT3_REG, | ||
| 465 | .enable_shift = CCM_PCCR_GPT3_OFFSET, | ||
| 466 | .disable = _clk_disable, | ||
| 467 | }, | ||
| 468 | }; | ||
| 469 | |||
| 470 | static struct clk pwm_clk[] = { | ||
| 471 | { | ||
| 472 | .parent = &per_clk[0], | ||
| 473 | .secondary = &pwm_clk[1], | ||
| 474 | }, { | ||
| 475 | .parent = &ipg_clk, | ||
| 476 | .enable = _clk_enable, | ||
| 477 | .enable_reg = CCM_PCCR_PWM_REG, | ||
| 478 | .enable_shift = CCM_PCCR_PWM_OFFSET, | ||
| 479 | .disable = _clk_disable, | ||
| 480 | }, | ||
| 481 | }; | ||
| 482 | |||
| 483 | static struct clk sdhc_ipg_clk[]; | ||
| 484 | |||
| 485 | static struct clk sdhc_clk[] = { | ||
| 486 | { | ||
| 487 | .id = 0, | ||
| 488 | .parent = &per_clk[1], | ||
| 489 | .secondary = &sdhc_ipg_clk[0], | ||
| 490 | }, { | ||
| 491 | .id = 1, | ||
| 492 | .parent = &per_clk[1], | ||
| 493 | .secondary = &sdhc_ipg_clk[1], | ||
| 494 | }, | ||
| 495 | }; | ||
| 496 | |||
| 497 | static struct clk sdhc_ipg_clk[] = { | ||
| 498 | { | ||
| 499 | .id = 0, | ||
| 500 | .parent = &ipg_clk, | ||
| 501 | .enable = _clk_enable, | ||
| 502 | .enable_reg = CCM_PCCR_SDHC1_REG, | ||
| 503 | .enable_shift = CCM_PCCR_SDHC1_OFFSET, | ||
| 504 | .disable = _clk_disable, | ||
| 505 | }, { | ||
| 506 | .id = 1, | ||
| 507 | .parent = &ipg_clk, | ||
| 508 | .enable = _clk_enable, | ||
| 509 | .enable_reg = CCM_PCCR_SDHC2_REG, | ||
| 510 | .enable_shift = CCM_PCCR_SDHC2_OFFSET, | ||
| 511 | .disable = _clk_disable, | ||
| 512 | }, | ||
| 513 | }; | ||
| 514 | |||
| 515 | static struct clk cspi_ipg_clk[]; | ||
| 516 | |||
| 517 | static struct clk cspi_clk[] = { | ||
| 518 | { | ||
| 519 | .id = 0, | ||
| 520 | .parent = &per_clk[1], | ||
| 521 | .secondary = &cspi_ipg_clk[0], | ||
| 522 | }, { | ||
| 523 | .id = 1, | ||
| 524 | .parent = &per_clk[1], | ||
| 525 | .secondary = &cspi_ipg_clk[1], | ||
| 526 | }, { | ||
| 527 | .id = 2, | ||
| 528 | .parent = &per_clk[1], | ||
| 529 | .secondary = &cspi_ipg_clk[2], | ||
| 530 | }, | ||
| 531 | }; | ||
| 532 | |||
| 533 | static struct clk cspi_ipg_clk[] = { | ||
| 534 | { | ||
| 535 | .id = 0, | ||
| 536 | .parent = &ipg_clk, | ||
| 537 | .enable = _clk_enable, | ||
| 538 | .enable_reg = CCM_PCCR_CSPI1_REG, | ||
| 539 | .enable_shift = CCM_PCCR_CSPI1_OFFSET, | ||
| 540 | .disable = _clk_disable, | ||
| 541 | }, { | ||
| 542 | .id = 1, | ||
| 543 | .parent = &ipg_clk, | ||
| 544 | .enable = _clk_enable, | ||
| 545 | .enable_reg = CCM_PCCR_CSPI2_REG, | ||
| 546 | .enable_shift = CCM_PCCR_CSPI2_OFFSET, | ||
| 547 | .disable = _clk_disable, | ||
| 548 | }, { | ||
| 549 | .id = 3, | ||
| 550 | .parent = &ipg_clk, | ||
| 551 | .enable = _clk_enable, | ||
| 552 | .enable_reg = CCM_PCCR_CSPI3_REG, | ||
| 553 | .enable_shift = CCM_PCCR_CSPI3_OFFSET, | ||
| 554 | .disable = _clk_disable, | ||
| 555 | }, | ||
| 556 | }; | ||
| 557 | |||
| 558 | static struct clk lcdc_clk[] = { | ||
| 559 | { | ||
| 560 | .parent = &per_clk[2], | ||
| 561 | .secondary = &lcdc_clk[1], | ||
| 562 | .round_rate = _clk_parent_round_rate, | ||
| 563 | .set_rate = _clk_parent_set_rate, | ||
| 564 | }, { | ||
| 565 | .parent = &ipg_clk, | ||
| 566 | .secondary = &lcdc_clk[2], | ||
| 567 | .enable = _clk_enable, | ||
| 568 | .enable_reg = CCM_PCCR_LCDC_REG, | ||
| 569 | .enable_shift = CCM_PCCR_LCDC_OFFSET, | ||
| 570 | .disable = _clk_disable, | ||
| 571 | }, { | ||
| 572 | .parent = &hclk_clk, | ||
| 573 | .enable = _clk_enable, | ||
| 574 | .enable_reg = CCM_PCCR_HCLK_LCDC_REG, | ||
| 575 | .enable_shift = CCM_PCCR_HCLK_LCDC_OFFSET, | ||
| 576 | .disable = _clk_disable, | ||
| 577 | }, | ||
| 578 | }; | ||
| 579 | |||
| 580 | static struct clk csi_clk[] = { | ||
| 581 | { | ||
| 582 | .parent = &per_clk[3], | ||
| 583 | .secondary = &csi_clk[1], | ||
| 584 | .round_rate = _clk_parent_round_rate, | ||
| 585 | .set_rate = _clk_parent_set_rate, | ||
| 586 | }, { | ||
| 587 | .parent = &hclk_clk, | ||
| 588 | .enable = _clk_enable, | ||
| 589 | .enable_reg = CCM_PCCR_HCLK_CSI_REG, | ||
| 590 | .enable_shift = CCM_PCCR_HCLK_CSI_OFFSET, | ||
| 591 | .disable = _clk_disable, | ||
| 592 | }, | ||
| 593 | }; | ||
| 594 | |||
| 595 | static struct clk usb_clk[] = { | ||
| 596 | { | ||
| 597 | .parent = &spll_clk, | ||
| 598 | .get_rate = _clk_usb_recalc, | ||
| 599 | .enable = _clk_enable, | ||
| 600 | .enable_reg = CCM_PCCR_USBOTG_REG, | ||
| 601 | .enable_shift = CCM_PCCR_USBOTG_OFFSET, | ||
| 602 | .disable = _clk_disable, | ||
| 603 | }, { | ||
| 604 | .parent = &hclk_clk, | ||
| 605 | .enable = _clk_enable, | ||
| 606 | .enable_reg = CCM_PCCR_HCLK_USBOTG_REG, | ||
| 607 | .enable_shift = CCM_PCCR_HCLK_USBOTG_OFFSET, | ||
| 608 | .disable = _clk_disable, | ||
| 609 | } | ||
| 610 | }; | ||
| 611 | |||
| 612 | static struct clk ssi_ipg_clk[]; | ||
| 613 | |||
| 614 | static struct clk ssi_clk[] = { | ||
| 615 | { | ||
| 616 | .id = 0, | ||
| 617 | .parent = &mpll_clk, | ||
| 618 | .secondary = &ssi_ipg_clk[0], | ||
| 619 | .get_rate = _clk_ssi1_recalc, | ||
| 620 | .enable = _clk_enable, | ||
| 621 | .enable_reg = CCM_PCCR_SSI1_BAUD_REG, | ||
| 622 | .enable_shift = CCM_PCCR_SSI1_BAUD_OFFSET, | ||
| 623 | .disable = _clk_disable, | ||
| 624 | }, { | ||
| 625 | .id = 1, | ||
| 626 | .parent = &mpll_clk, | ||
| 627 | .secondary = &ssi_ipg_clk[1], | ||
| 628 | .get_rate = _clk_ssi2_recalc, | ||
| 629 | .enable = _clk_enable, | ||
| 630 | .enable_reg = CCM_PCCR_SSI2_BAUD_REG, | ||
| 631 | .enable_shift = CCM_PCCR_SSI2_BAUD_OFFSET, | ||
| 632 | .disable = _clk_disable, | ||
| 633 | }, | ||
| 634 | }; | ||
| 635 | |||
| 636 | static struct clk ssi_ipg_clk[] = { | ||
| 637 | { | ||
| 638 | .id = 0, | ||
| 639 | .parent = &ipg_clk, | ||
| 640 | .enable = _clk_enable, | ||
| 641 | .enable_reg = CCM_PCCR_SSI1_REG, | ||
| 642 | .enable_shift = CCM_PCCR_SSI1_IPG_OFFSET, | ||
| 643 | .disable = _clk_disable, | ||
| 644 | }, { | ||
| 645 | .id = 1, | ||
| 646 | .parent = &ipg_clk, | ||
| 647 | .enable = _clk_enable, | ||
| 648 | .enable_reg = CCM_PCCR_SSI2_REG, | ||
| 649 | .enable_shift = CCM_PCCR_SSI2_IPG_OFFSET, | ||
| 650 | .disable = _clk_disable, | ||
| 651 | }, | ||
| 652 | }; | ||
| 653 | |||
| 654 | |||
| 655 | static struct clk nfc_clk = { | ||
| 656 | .parent = &fclk_clk, | ||
| 657 | .get_rate = _clk_nfc_recalc, | ||
| 658 | .enable = _clk_enable, | ||
| 659 | .enable_reg = CCM_PCCR_NFC_REG, | ||
| 660 | .enable_shift = CCM_PCCR_NFC_OFFSET, | ||
| 661 | .disable = _clk_disable, | ||
| 662 | }; | ||
| 663 | |||
| 664 | static struct clk dma_clk[] = { | ||
| 665 | { | ||
| 666 | .parent = &hclk_clk, | ||
| 667 | .enable = _clk_enable, | ||
| 668 | .enable_reg = CCM_PCCR_DMA_REG, | ||
| 669 | .enable_shift = CCM_PCCR_DMA_OFFSET, | ||
| 670 | .disable = _clk_disable, | ||
| 671 | .secondary = &dma_clk[1], | ||
| 672 | }, { | ||
| 673 | .enable = _clk_enable, | ||
| 674 | .enable_reg = CCM_PCCR_HCLK_DMA_REG, | ||
| 675 | .enable_shift = CCM_PCCR_HCLK_DMA_OFFSET, | ||
| 676 | .disable = _clk_disable, | ||
| 677 | }, | ||
| 678 | }; | ||
| 679 | |||
| 680 | static struct clk brom_clk = { | ||
| 681 | .parent = &hclk_clk, | ||
| 682 | .enable = _clk_enable, | ||
| 683 | .enable_reg = CCM_PCCR_HCLK_BROM_REG, | ||
| 684 | .enable_shift = CCM_PCCR_HCLK_BROM_OFFSET, | ||
| 685 | .disable = _clk_disable, | ||
| 686 | }; | ||
| 687 | |||
| 688 | static struct clk emma_clk[] = { | ||
| 689 | { | ||
| 690 | .parent = &hclk_clk, | ||
| 691 | .enable = _clk_enable, | ||
| 692 | .enable_reg = CCM_PCCR_EMMA_REG, | ||
| 693 | .enable_shift = CCM_PCCR_EMMA_OFFSET, | ||
| 694 | .disable = _clk_disable, | ||
| 695 | .secondary = &emma_clk[1], | ||
| 696 | }, { | ||
| 697 | .enable = _clk_enable, | ||
| 698 | .enable_reg = CCM_PCCR_HCLK_EMMA_REG, | ||
| 699 | .enable_shift = CCM_PCCR_HCLK_EMMA_OFFSET, | ||
| 700 | .disable = _clk_disable, | ||
| 701 | } | ||
| 702 | }; | ||
| 703 | |||
| 704 | static struct clk slcdc_clk[] = { | ||
| 705 | { | ||
| 706 | .parent = &hclk_clk, | ||
| 707 | .enable = _clk_enable, | ||
| 708 | .enable_reg = CCM_PCCR_SLCDC_REG, | ||
| 709 | .enable_shift = CCM_PCCR_SLCDC_OFFSET, | ||
| 710 | .disable = _clk_disable, | ||
| 711 | .secondary = &slcdc_clk[1], | ||
| 712 | }, { | ||
| 713 | .enable = _clk_enable, | ||
| 714 | .enable_reg = CCM_PCCR_HCLK_SLCDC_REG, | ||
| 715 | .enable_shift = CCM_PCCR_HCLK_SLCDC_OFFSET, | ||
| 716 | .disable = _clk_disable, | ||
| 717 | } | ||
| 718 | }; | ||
| 719 | |||
| 720 | static struct clk wdog_clk = { | ||
| 721 | .parent = &ipg_clk, | ||
| 722 | .enable = _clk_enable, | ||
| 723 | .enable_reg = CCM_PCCR_WDT_REG, | ||
| 724 | .enable_shift = CCM_PCCR_WDT_OFFSET, | ||
| 725 | .disable = _clk_disable, | ||
| 726 | }; | ||
| 727 | |||
| 728 | static struct clk gpio_clk = { | ||
| 729 | .parent = &ipg_clk, | ||
| 730 | .enable = _clk_enable, | ||
| 731 | .enable_reg = CCM_PCCR_GPIO_REG, | ||
| 732 | .enable_shift = CCM_PCCR_GPIO_OFFSET, | ||
| 733 | .disable = _clk_disable, | ||
| 734 | }; | ||
| 735 | |||
| 736 | static struct clk i2c_clk = { | ||
| 737 | .id = 0, | ||
| 738 | .parent = &ipg_clk, | ||
| 739 | .enable = _clk_enable, | ||
| 740 | .enable_reg = CCM_PCCR_I2C1_REG, | ||
| 741 | .enable_shift = CCM_PCCR_I2C1_OFFSET, | ||
| 742 | .disable = _clk_disable, | ||
| 743 | }; | ||
| 744 | |||
| 745 | static struct clk kpp_clk = { | ||
| 746 | .parent = &ipg_clk, | ||
| 747 | .enable = _clk_enable, | ||
| 748 | .enable_reg = CCM_PCCR_KPP_REG, | ||
| 749 | .enable_shift = CCM_PCCR_KPP_OFFSET, | ||
| 750 | .disable = _clk_disable, | ||
| 751 | }; | ||
| 752 | |||
| 753 | static struct clk owire_clk = { | ||
| 754 | .parent = &ipg_clk, | ||
| 755 | .enable = _clk_enable, | ||
| 756 | .enable_reg = CCM_PCCR_OWIRE_REG, | ||
| 757 | .enable_shift = CCM_PCCR_OWIRE_OFFSET, | ||
| 758 | .disable = _clk_disable, | ||
| 759 | }; | ||
| 760 | |||
| 761 | static struct clk rtc_clk = { | ||
| 762 | .parent = &ipg_clk, | ||
| 763 | .enable = _clk_enable, | ||
| 764 | .enable_reg = CCM_PCCR_RTC_REG, | ||
| 765 | .enable_shift = CCM_PCCR_RTC_OFFSET, | ||
| 766 | .disable = _clk_disable, | ||
| 767 | }; | ||
| 768 | |||
| 769 | static unsigned long _clk_clko_round_rate(struct clk *clk, unsigned long rate) | ||
| 770 | { | ||
| 771 | u32 div; | ||
| 772 | unsigned long parent_rate; | ||
| 773 | |||
| 774 | parent_rate = clk_get_rate(clk->parent); | ||
| 775 | div = parent_rate / rate; | ||
| 776 | if (parent_rate % rate) | ||
| 777 | div++; | ||
| 778 | |||
| 779 | if (div > 8) | ||
| 780 | div = 8; | ||
| 781 | |||
| 782 | return parent_rate / div; | ||
| 783 | } | ||
| 784 | |||
| 785 | static int _clk_clko_set_rate(struct clk *clk, unsigned long rate) | ||
| 786 | { | ||
| 787 | u32 reg; | ||
| 788 | u32 div; | ||
| 789 | unsigned long parent_rate; | ||
| 790 | |||
| 791 | parent_rate = clk_get_rate(clk->parent); | ||
| 792 | |||
| 793 | div = parent_rate / rate; | ||
| 794 | |||
| 795 | if (div > 8 || div < 1 || ((parent_rate / div) != rate)) | ||
| 796 | return -EINVAL; | ||
| 797 | div--; | ||
| 798 | |||
| 799 | reg = __raw_readl(CCM_PCDR0); | ||
| 800 | |||
| 801 | if (clk->parent == &usb_clk[0]) { | ||
| 802 | reg &= ~CCM_PCDR0_48MDIV_MASK; | ||
| 803 | reg |= div << CCM_PCDR0_48MDIV_OFFSET; | ||
| 804 | } | ||
| 805 | __raw_writel(reg, CCM_PCDR0); | ||
| 806 | |||
| 807 | return 0; | ||
| 808 | } | ||
| 809 | |||
| 810 | static unsigned long _clk_clko_recalc(struct clk *clk) | ||
| 811 | { | ||
| 812 | u32 div = 0; | ||
| 813 | unsigned long parent_rate; | ||
| 814 | |||
| 815 | parent_rate = clk_get_rate(clk->parent); | ||
| 816 | |||
| 817 | if (clk->parent == &usb_clk[0]) /* 48M */ | ||
| 818 | div = __raw_readl(CCM_PCDR0) & CCM_PCDR0_48MDIV_MASK | ||
| 819 | >> CCM_PCDR0_48MDIV_OFFSET; | ||
| 820 | div++; | ||
| 821 | |||
| 822 | return parent_rate / div; | ||
| 823 | } | ||
| 824 | |||
| 825 | static struct clk clko_clk; | ||
| 826 | |||
| 827 | static int _clk_clko_set_parent(struct clk *clk, struct clk *parent) | ||
| 828 | { | ||
| 829 | u32 reg; | ||
| 830 | |||
| 831 | reg = __raw_readl(CCM_CCSR) & ~CCM_CCSR_CLKOSEL_MASK; | ||
| 832 | |||
| 833 | if (parent == &ckil_clk) | ||
| 834 | reg |= 0 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 835 | else if (parent == &fpm_clk) | ||
| 836 | reg |= 1 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 837 | else if (parent == &ckih_clk) | ||
| 838 | reg |= 2 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 839 | else if (parent == mpll_clk.parent) | ||
| 840 | reg |= 3 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 841 | else if (parent == spll_clk.parent) | ||
| 842 | reg |= 4 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 843 | else if (parent == &mpll_clk) | ||
| 844 | reg |= 5 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 845 | else if (parent == &spll_clk) | ||
| 846 | reg |= 6 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 847 | else if (parent == &fclk_clk) | ||
| 848 | reg |= 7 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 849 | else if (parent == &hclk_clk) | ||
| 850 | reg |= 8 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 851 | else if (parent == &ipg_clk) | ||
| 852 | reg |= 9 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 853 | else if (parent == &per_clk[0]) | ||
| 854 | reg |= 0xA << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 855 | else if (parent == &per_clk[1]) | ||
| 856 | reg |= 0xB << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 857 | else if (parent == &per_clk[2]) | ||
| 858 | reg |= 0xC << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 859 | else if (parent == &per_clk[3]) | ||
| 860 | reg |= 0xD << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 861 | else if (parent == &ssi_clk[0]) | ||
| 862 | reg |= 0xE << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 863 | else if (parent == &ssi_clk[1]) | ||
| 864 | reg |= 0xF << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 865 | else if (parent == &nfc_clk) | ||
| 866 | reg |= 0x10 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 867 | else if (parent == &usb_clk[0]) | ||
| 868 | reg |= 0x14 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 869 | else if (parent == &clko_clk) | ||
| 870 | reg |= 0x15 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 871 | else | ||
| 872 | return -EINVAL; | ||
| 873 | |||
| 874 | __raw_writel(reg, CCM_CCSR); | ||
| 875 | |||
| 876 | return 0; | ||
| 877 | } | ||
| 878 | |||
| 879 | static struct clk clko_clk = { | ||
| 880 | .get_rate = _clk_clko_recalc, | ||
| 881 | .set_rate = _clk_clko_set_rate, | ||
| 882 | .round_rate = _clk_clko_round_rate, | ||
| 883 | .set_parent = _clk_clko_set_parent, | ||
| 884 | }; | ||
| 885 | |||
| 886 | |||
| 887 | #define _REGISTER_CLOCK(d, n, c) \ | ||
| 888 | { \ | ||
| 889 | .dev_id = d, \ | ||
| 890 | .con_id = n, \ | ||
| 891 | .clk = &c, \ | ||
| 892 | }, | ||
| 893 | static struct clk_lookup lookups[] __initdata = { | ||
| 894 | /* It's unlikely that any driver wants one of them directly: | ||
| 895 | _REGISTER_CLOCK(NULL, "ckih", ckih_clk) | ||
| 896 | _REGISTER_CLOCK(NULL, "ckil", ckil_clk) | ||
| 897 | _REGISTER_CLOCK(NULL, "fpm", fpm_clk) | ||
| 898 | _REGISTER_CLOCK(NULL, "mpll", mpll_clk) | ||
| 899 | _REGISTER_CLOCK(NULL, "spll", spll_clk) | ||
| 900 | _REGISTER_CLOCK(NULL, "fclk", fclk_clk) | ||
| 901 | _REGISTER_CLOCK(NULL, "hclk", hclk_clk) | ||
| 902 | _REGISTER_CLOCK(NULL, "ipg", ipg_clk) | ||
| 903 | */ | ||
| 904 | _REGISTER_CLOCK(NULL, "perclk1", per_clk[0]) | ||
| 905 | _REGISTER_CLOCK(NULL, "perclk2", per_clk[1]) | ||
| 906 | _REGISTER_CLOCK(NULL, "perclk3", per_clk[2]) | ||
| 907 | _REGISTER_CLOCK(NULL, "perclk4", per_clk[3]) | ||
| 908 | _REGISTER_CLOCK(NULL, "clko", clko_clk) | ||
| 909 | _REGISTER_CLOCK("imx-uart.0", NULL, uart_clk[0]) | ||
| 910 | _REGISTER_CLOCK("imx-uart.1", NULL, uart_clk[1]) | ||
| 911 | _REGISTER_CLOCK("imx-uart.2", NULL, uart_clk[2]) | ||
| 912 | _REGISTER_CLOCK("imx-uart.3", NULL, uart_clk[3]) | ||
| 913 | _REGISTER_CLOCK(NULL, "gpt1", gpt_clk[0]) | ||
| 914 | _REGISTER_CLOCK(NULL, "gpt1", gpt_clk[1]) | ||
| 915 | _REGISTER_CLOCK(NULL, "gpt1", gpt_clk[2]) | ||
| 916 | _REGISTER_CLOCK(NULL, "pwm", pwm_clk[0]) | ||
| 917 | _REGISTER_CLOCK(NULL, "sdhc1", sdhc_clk[0]) | ||
| 918 | _REGISTER_CLOCK(NULL, "sdhc2", sdhc_clk[1]) | ||
| 919 | _REGISTER_CLOCK(NULL, "cspi1", cspi_clk[0]) | ||
| 920 | _REGISTER_CLOCK(NULL, "cspi2", cspi_clk[1]) | ||
| 921 | _REGISTER_CLOCK(NULL, "cspi3", cspi_clk[2]) | ||
| 922 | _REGISTER_CLOCK(NULL, "lcdc", lcdc_clk[0]) | ||
| 923 | _REGISTER_CLOCK(NULL, "csi", csi_clk[0]) | ||
| 924 | _REGISTER_CLOCK(NULL, "usb", usb_clk[0]) | ||
| 925 | _REGISTER_CLOCK(NULL, "ssi1", ssi_clk[0]) | ||
| 926 | _REGISTER_CLOCK(NULL, "ssi2", ssi_clk[1]) | ||
| 927 | _REGISTER_CLOCK(NULL, "nfc", nfc_clk) | ||
| 928 | _REGISTER_CLOCK(NULL, "dma", dma_clk[0]) | ||
| 929 | _REGISTER_CLOCK(NULL, "brom", brom_clk) | ||
| 930 | _REGISTER_CLOCK(NULL, "emma", emma_clk[0]) | ||
| 931 | _REGISTER_CLOCK(NULL, "slcdc", slcdc_clk[0]) | ||
| 932 | _REGISTER_CLOCK(NULL, "wdog", wdog_clk) | ||
| 933 | _REGISTER_CLOCK(NULL, "gpio", gpio_clk) | ||
| 934 | _REGISTER_CLOCK(NULL, "i2c", i2c_clk) | ||
| 935 | _REGISTER_CLOCK("mxc-keypad", NULL, kpp_clk) | ||
| 936 | _REGISTER_CLOCK(NULL, "owire", owire_clk) | ||
| 937 | _REGISTER_CLOCK(NULL, "rtc", rtc_clk) | ||
| 938 | }; | ||
| 939 | |||
| 940 | /* | ||
| 941 | * must be called very early to get information about the | ||
| 942 | * available clock rate when the timer framework starts | ||
| 943 | */ | ||
| 944 | int __init mx21_clocks_init(unsigned long lref, unsigned long href) | ||
| 945 | { | ||
| 946 | int i; | ||
| 947 | u32 cscr; | ||
| 948 | |||
| 949 | external_low_reference = lref; | ||
| 950 | external_high_reference = href; | ||
| 951 | |||
| 952 | /* detect clock reference for both system PLL */ | ||
| 953 | cscr = CSCR(); | ||
| 954 | if (cscr & CCM_CSCR_MCU) | ||
| 955 | mpll_clk.parent = &ckih_clk; | ||
| 956 | else | ||
| 957 | mpll_clk.parent = &fpm_clk; | ||
| 958 | |||
| 959 | if (cscr & CCM_CSCR_SP) | ||
| 960 | spll_clk.parent = &ckih_clk; | ||
| 961 | else | ||
| 962 | spll_clk.parent = &fpm_clk; | ||
| 963 | |||
| 964 | for (i = 0; i < ARRAY_SIZE(lookups); i++) | ||
| 965 | clkdev_add(&lookups[i]); | ||
| 966 | |||
| 967 | /* Turn off all clock gates */ | ||
| 968 | __raw_writel(0, CCM_PCCR0); | ||
| 969 | __raw_writel(CCM_PCCR_GPT1_MASK, CCM_PCCR1); | ||
| 970 | |||
| 971 | /* This turns of the serial PLL as well */ | ||
| 972 | spll_clk.disable(&spll_clk); | ||
| 973 | |||
| 974 | /* This will propagate to all children and init all the clock rates. */ | ||
| 975 | clk_enable(&per_clk[0]); | ||
| 976 | clk_enable(&gpio_clk); | ||
| 977 | |||
| 978 | #ifdef CONFIG_DEBUG_LL_CONSOLE | ||
| 979 | clk_enable(&uart_clk[0]); | ||
| 980 | #endif | ||
| 981 | |||
| 982 | mxc_timer_init(&gpt_clk[0]); | ||
| 983 | return 0; | ||
| 984 | } | ||
diff --git a/arch/arm/mach-mx2/clock_imx27.c b/arch/arm/mach-mx2/clock_imx27.c index c69896d011a1..3f7280c490f0 100644 --- a/arch/arm/mach-mx2/clock_imx27.c +++ b/arch/arm/mach-mx2/clock_imx27.c | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. |
| 3 | * Copyright 2008 Juergen Beisert, kernel@pengutronix.de | 3 | * Copyright 2008 Juergen Beisert, kernel@pengutronix.de |
| 4 | * Copyright 2008 Martin Fuzzey, mfuzzey@gmail.com | ||
| 4 | * | 5 | * |
| 5 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
| 6 | * modify it under the terms of the GNU General Public License | 7 | * modify it under the terms of the GNU General Public License |
| @@ -20,23 +21,60 @@ | |||
| 20 | #include <linux/clk.h> | 21 | #include <linux/clk.h> |
| 21 | #include <linux/io.h> | 22 | #include <linux/io.h> |
| 22 | #include <linux/module.h> | 23 | #include <linux/module.h> |
| 23 | #include <linux/spinlock.h> | ||
| 24 | 24 | ||
| 25 | #include <mach/clock.h> | 25 | #include <asm/clkdev.h> |
| 26 | #include <mach/common.h> | ||
| 27 | #include <asm/div64.h> | 26 | #include <asm/div64.h> |
| 28 | 27 | ||
| 29 | #include "crm_regs.h" | 28 | #include <mach/clock.h> |
| 30 | 29 | #include <mach/common.h> | |
| 31 | static struct clk ckil_clk; | 30 | #include <mach/hardware.h> |
| 32 | static struct clk mpll_clk; | 31 | |
| 33 | static struct clk mpll_main_clk[]; | 32 | /* Register offsets */ |
| 34 | static struct clk spll_clk; | 33 | #define CCM_CSCR (IO_ADDRESS(CCM_BASE_ADDR) + 0x0) |
| 35 | 34 | #define CCM_MPCTL0 (IO_ADDRESS(CCM_BASE_ADDR) + 0x4) | |
| 36 | static int _clk_enable(struct clk *clk) | 35 | #define CCM_MPCTL1 (IO_ADDRESS(CCM_BASE_ADDR) + 0x8) |
| 36 | #define CCM_SPCTL0 (IO_ADDRESS(CCM_BASE_ADDR) + 0xC) | ||
| 37 | #define CCM_SPCTL1 (IO_ADDRESS(CCM_BASE_ADDR) + 0x10) | ||
| 38 | #define CCM_OSC26MCTL (IO_ADDRESS(CCM_BASE_ADDR) + 0x14) | ||
| 39 | #define CCM_PCDR0 (IO_ADDRESS(CCM_BASE_ADDR) + 0x18) | ||
| 40 | #define CCM_PCDR1 (IO_ADDRESS(CCM_BASE_ADDR) + 0x1c) | ||
| 41 | #define CCM_PCCR0 (IO_ADDRESS(CCM_BASE_ADDR) + 0x20) | ||
| 42 | #define CCM_PCCR1 (IO_ADDRESS(CCM_BASE_ADDR) + 0x24) | ||
| 43 | #define CCM_CCSR (IO_ADDRESS(CCM_BASE_ADDR) + 0x28) | ||
| 44 | #define CCM_PMCTL (IO_ADDRESS(CCM_BASE_ADDR) + 0x2c) | ||
| 45 | #define CCM_PMCOUNT (IO_ADDRESS(CCM_BASE_ADDR) + 0x30) | ||
| 46 | #define CCM_WKGDCTL (IO_ADDRESS(CCM_BASE_ADDR) + 0x34) | ||
| 47 | |||
| 48 | #define CCM_CSCR_UPDATE_DIS (1 << 31) | ||
| 49 | #define CCM_CSCR_SSI2 (1 << 23) | ||
| 50 | #define CCM_CSCR_SSI1 (1 << 22) | ||
| 51 | #define CCM_CSCR_VPU (1 << 21) | ||
| 52 | #define CCM_CSCR_MSHC (1 << 20) | ||
| 53 | #define CCM_CSCR_SPLLRES (1 << 19) | ||
| 54 | #define CCM_CSCR_MPLLRES (1 << 18) | ||
| 55 | #define CCM_CSCR_SP (1 << 17) | ||
| 56 | #define CCM_CSCR_MCU (1 << 16) | ||
| 57 | #define CCM_CSCR_OSC26MDIV (1 << 4) | ||
| 58 | #define CCM_CSCR_OSC26M (1 << 3) | ||
| 59 | #define CCM_CSCR_FPM (1 << 2) | ||
| 60 | #define CCM_CSCR_SPEN (1 << 1) | ||
| 61 | #define CCM_CSCR_MPEN (1 << 0) | ||
| 62 | |||
| 63 | /* i.MX27 TO 2+ */ | ||
| 64 | #define CCM_CSCR_ARM_SRC (1 << 15) | ||
| 65 | |||
| 66 | #define CCM_SPCTL1_LF (1 << 15) | ||
| 67 | #define CCM_SPCTL1_BRMO (1 << 6) | ||
| 68 | |||
| 69 | static struct clk mpll_main1_clk, mpll_main2_clk; | ||
| 70 | |||
| 71 | static int clk_pccr_enable(struct clk *clk) | ||
| 37 | { | 72 | { |
| 38 | unsigned long reg; | 73 | unsigned long reg; |
| 39 | 74 | ||
| 75 | if (!clk->enable_reg) | ||
| 76 | return 0; | ||
| 77 | |||
| 40 | reg = __raw_readl(clk->enable_reg); | 78 | reg = __raw_readl(clk->enable_reg); |
| 41 | reg |= 1 << clk->enable_shift; | 79 | reg |= 1 << clk->enable_shift; |
| 42 | __raw_writel(reg, clk->enable_reg); | 80 | __raw_writel(reg, clk->enable_reg); |
| @@ -44,16 +82,19 @@ static int _clk_enable(struct clk *clk) | |||
| 44 | return 0; | 82 | return 0; |
| 45 | } | 83 | } |
| 46 | 84 | ||
| 47 | static void _clk_disable(struct clk *clk) | 85 | static void clk_pccr_disable(struct clk *clk) |
| 48 | { | 86 | { |
| 49 | unsigned long reg; | 87 | unsigned long reg; |
| 50 | 88 | ||
| 89 | if (!clk->enable_reg) | ||
| 90 | return; | ||
| 91 | |||
| 51 | reg = __raw_readl(clk->enable_reg); | 92 | reg = __raw_readl(clk->enable_reg); |
| 52 | reg &= ~(1 << clk->enable_shift); | 93 | reg &= ~(1 << clk->enable_shift); |
| 53 | __raw_writel(reg, clk->enable_reg); | 94 | __raw_writel(reg, clk->enable_reg); |
| 54 | } | 95 | } |
| 55 | 96 | ||
| 56 | static int _clk_spll_enable(struct clk *clk) | 97 | static int clk_spll_enable(struct clk *clk) |
| 57 | { | 98 | { |
| 58 | unsigned long reg; | 99 | unsigned long reg; |
| 59 | 100 | ||
| @@ -61,13 +102,12 @@ static int _clk_spll_enable(struct clk *clk) | |||
| 61 | reg |= CCM_CSCR_SPEN; | 102 | reg |= CCM_CSCR_SPEN; |
| 62 | __raw_writel(reg, CCM_CSCR); | 103 | __raw_writel(reg, CCM_CSCR); |
| 63 | 104 | ||
| 64 | while ((__raw_readl(CCM_SPCTL1) & CCM_SPCTL1_LF) == 0) | 105 | while (!(__raw_readl(CCM_SPCTL1) & CCM_SPCTL1_LF)); |
| 65 | ; | ||
| 66 | 106 | ||
| 67 | return 0; | 107 | return 0; |
| 68 | } | 108 | } |
| 69 | 109 | ||
| 70 | static void _clk_spll_disable(struct clk *clk) | 110 | static void clk_spll_disable(struct clk *clk) |
| 71 | { | 111 | { |
| 72 | unsigned long reg; | 112 | unsigned long reg; |
| 73 | 113 | ||
| @@ -76,192 +116,30 @@ static void _clk_spll_disable(struct clk *clk) | |||
| 76 | __raw_writel(reg, CCM_CSCR); | 116 | __raw_writel(reg, CCM_CSCR); |
| 77 | } | 117 | } |
| 78 | 118 | ||
| 79 | static void _clk_pccr01_enable(unsigned long mask0, unsigned long mask1) | 119 | static int clk_cpu_set_parent(struct clk *clk, struct clk *parent) |
| 80 | { | ||
| 81 | unsigned long reg; | ||
| 82 | |||
| 83 | reg = __raw_readl(CCM_PCCR0); | ||
| 84 | reg |= mask0; | ||
| 85 | __raw_writel(reg, CCM_PCCR0); | ||
| 86 | |||
| 87 | reg = __raw_readl(CCM_PCCR1); | ||
| 88 | reg |= mask1; | ||
| 89 | __raw_writel(reg, CCM_PCCR1); | ||
| 90 | |||
| 91 | } | ||
| 92 | |||
| 93 | static void _clk_pccr01_disable(unsigned long mask0, unsigned long mask1) | ||
| 94 | { | ||
| 95 | unsigned long reg; | ||
| 96 | |||
| 97 | reg = __raw_readl(CCM_PCCR0); | ||
| 98 | reg &= ~mask0; | ||
| 99 | __raw_writel(reg, CCM_PCCR0); | ||
| 100 | |||
| 101 | reg = __raw_readl(CCM_PCCR1); | ||
| 102 | reg &= ~mask1; | ||
| 103 | __raw_writel(reg, CCM_PCCR1); | ||
| 104 | } | ||
| 105 | |||
| 106 | static void _clk_pccr10_enable(unsigned long mask1, unsigned long mask0) | ||
| 107 | { | ||
| 108 | unsigned long reg; | ||
| 109 | |||
| 110 | reg = __raw_readl(CCM_PCCR1); | ||
| 111 | reg |= mask1; | ||
| 112 | __raw_writel(reg, CCM_PCCR1); | ||
| 113 | |||
| 114 | reg = __raw_readl(CCM_PCCR0); | ||
| 115 | reg |= mask0; | ||
| 116 | __raw_writel(reg, CCM_PCCR0); | ||
| 117 | } | ||
| 118 | |||
| 119 | static void _clk_pccr10_disable(unsigned long mask1, unsigned long mask0) | ||
| 120 | { | ||
| 121 | unsigned long reg; | ||
| 122 | |||
| 123 | reg = __raw_readl(CCM_PCCR1); | ||
| 124 | reg &= ~mask1; | ||
| 125 | __raw_writel(reg, CCM_PCCR1); | ||
| 126 | |||
| 127 | reg = __raw_readl(CCM_PCCR0); | ||
| 128 | reg &= ~mask0; | ||
| 129 | __raw_writel(reg, CCM_PCCR0); | ||
| 130 | } | ||
| 131 | |||
| 132 | static int _clk_dma_enable(struct clk *clk) | ||
| 133 | { | ||
| 134 | _clk_pccr01_enable(CCM_PCCR0_DMA_MASK, CCM_PCCR1_HCLK_DMA_MASK); | ||
| 135 | |||
| 136 | return 0; | ||
| 137 | } | ||
| 138 | |||
| 139 | static void _clk_dma_disable(struct clk *clk) | ||
| 140 | { | ||
| 141 | _clk_pccr01_disable(CCM_PCCR0_DMA_MASK, CCM_PCCR1_HCLK_DMA_MASK); | ||
| 142 | } | ||
| 143 | |||
| 144 | static int _clk_rtic_enable(struct clk *clk) | ||
| 145 | { | ||
| 146 | _clk_pccr01_enable(CCM_PCCR0_RTIC_MASK, CCM_PCCR1_HCLK_RTIC_MASK); | ||
| 147 | |||
| 148 | return 0; | ||
| 149 | } | ||
| 150 | |||
| 151 | static void _clk_rtic_disable(struct clk *clk) | ||
| 152 | { | ||
| 153 | _clk_pccr01_disable(CCM_PCCR0_RTIC_MASK, CCM_PCCR1_HCLK_RTIC_MASK); | ||
| 154 | } | ||
| 155 | |||
| 156 | static int _clk_emma_enable(struct clk *clk) | ||
| 157 | { | ||
| 158 | _clk_pccr01_enable(CCM_PCCR0_EMMA_MASK, CCM_PCCR1_HCLK_EMMA_MASK); | ||
| 159 | |||
| 160 | return 0; | ||
| 161 | } | ||
| 162 | |||
| 163 | static void _clk_emma_disable(struct clk *clk) | ||
| 164 | { | ||
| 165 | _clk_pccr01_disable(CCM_PCCR0_EMMA_MASK, CCM_PCCR1_HCLK_EMMA_MASK); | ||
| 166 | } | ||
| 167 | |||
| 168 | static int _clk_slcdc_enable(struct clk *clk) | ||
| 169 | { | ||
| 170 | _clk_pccr01_enable(CCM_PCCR0_SLCDC_MASK, CCM_PCCR1_HCLK_SLCDC_MASK); | ||
| 171 | |||
| 172 | return 0; | ||
| 173 | } | ||
| 174 | |||
| 175 | static void _clk_slcdc_disable(struct clk *clk) | ||
| 176 | { | ||
| 177 | _clk_pccr01_disable(CCM_PCCR0_SLCDC_MASK, CCM_PCCR1_HCLK_SLCDC_MASK); | ||
| 178 | } | ||
| 179 | |||
| 180 | static int _clk_fec_enable(struct clk *clk) | ||
| 181 | { | ||
| 182 | _clk_pccr01_enable(CCM_PCCR0_FEC_MASK, CCM_PCCR1_HCLK_FEC_MASK); | ||
| 183 | |||
| 184 | return 0; | ||
| 185 | } | ||
| 186 | |||
| 187 | static void _clk_fec_disable(struct clk *clk) | ||
| 188 | { | ||
| 189 | _clk_pccr01_disable(CCM_PCCR0_FEC_MASK, CCM_PCCR1_HCLK_FEC_MASK); | ||
| 190 | } | ||
| 191 | |||
| 192 | static int _clk_vpu_enable(struct clk *clk) | ||
| 193 | { | ||
| 194 | unsigned long reg; | ||
| 195 | |||
| 196 | reg = __raw_readl(CCM_PCCR1); | ||
| 197 | reg |= CCM_PCCR1_VPU_BAUD_MASK | CCM_PCCR1_HCLK_VPU_MASK; | ||
| 198 | __raw_writel(reg, CCM_PCCR1); | ||
| 199 | |||
| 200 | return 0; | ||
| 201 | } | ||
| 202 | |||
| 203 | static void _clk_vpu_disable(struct clk *clk) | ||
| 204 | { | 120 | { |
| 205 | unsigned long reg; | 121 | int cscr = __raw_readl(CCM_CSCR); |
| 206 | |||
| 207 | reg = __raw_readl(CCM_PCCR1); | ||
| 208 | reg &= ~(CCM_PCCR1_VPU_BAUD_MASK | CCM_PCCR1_HCLK_VPU_MASK); | ||
| 209 | __raw_writel(reg, CCM_PCCR1); | ||
| 210 | } | ||
| 211 | |||
| 212 | static int _clk_sahara2_enable(struct clk *clk) | ||
| 213 | { | ||
| 214 | _clk_pccr01_enable(CCM_PCCR0_SAHARA_MASK, CCM_PCCR1_HCLK_SAHARA_MASK); | ||
| 215 | |||
| 216 | return 0; | ||
| 217 | } | ||
| 218 | |||
| 219 | static void _clk_sahara2_disable(struct clk *clk) | ||
| 220 | { | ||
| 221 | _clk_pccr01_disable(CCM_PCCR0_SAHARA_MASK, CCM_PCCR1_HCLK_SAHARA_MASK); | ||
| 222 | } | ||
| 223 | |||
| 224 | static int _clk_mstick1_enable(struct clk *clk) | ||
| 225 | { | ||
| 226 | _clk_pccr10_enable(CCM_PCCR1_MSHC_BAUD_MASK, CCM_PCCR0_MSHC_MASK); | ||
| 227 | |||
| 228 | return 0; | ||
| 229 | } | ||
| 230 | |||
| 231 | static void _clk_mstick1_disable(struct clk *clk) | ||
| 232 | { | ||
| 233 | _clk_pccr10_disable(CCM_PCCR1_MSHC_BAUD_MASK, CCM_PCCR0_MSHC_MASK); | ||
| 234 | } | ||
| 235 | |||
| 236 | #define CSCR() (__raw_readl(CCM_CSCR)) | ||
| 237 | #define PCDR0() (__raw_readl(CCM_PCDR0)) | ||
| 238 | #define PCDR1() (__raw_readl(CCM_PCDR1)) | ||
| 239 | |||
| 240 | static int _clk_cpu_set_parent(struct clk *clk, struct clk *parent) | ||
| 241 | { | ||
| 242 | int cscr = CSCR(); | ||
| 243 | 122 | ||
| 244 | if (clk->parent == parent) | 123 | if (clk->parent == parent) |
| 245 | return 0; | 124 | return 0; |
| 246 | 125 | ||
| 247 | if (mx27_revision() >= CHIP_REV_2_0) { | 126 | if (mx27_revision() >= CHIP_REV_2_0) { |
| 248 | if (parent == &mpll_main_clk[0]) { | 127 | if (parent == &mpll_main1_clk) { |
| 249 | cscr |= CCM_CSCR_ARM_SRC; | 128 | cscr |= CCM_CSCR_ARM_SRC; |
| 250 | } else { | 129 | } else { |
| 251 | if (parent == &mpll_main_clk[1]) | 130 | if (parent == &mpll_main2_clk) |
| 252 | cscr &= ~CCM_CSCR_ARM_SRC; | 131 | cscr &= ~CCM_CSCR_ARM_SRC; |
| 253 | else | 132 | else |
| 254 | return -EINVAL; | 133 | return -EINVAL; |
| 255 | } | 134 | } |
| 256 | __raw_writel(cscr, CCM_CSCR); | 135 | __raw_writel(cscr, CCM_CSCR); |
| 257 | } else | 136 | clk->parent = parent; |
| 258 | return -ENODEV; | 137 | return 0; |
| 259 | 138 | } | |
| 260 | clk->parent = parent; | 139 | return -ENODEV; |
| 261 | return 0; | ||
| 262 | } | 140 | } |
| 263 | 141 | ||
| 264 | static unsigned long _clk_cpu_round_rate(struct clk *clk, unsigned long rate) | 142 | static unsigned long round_rate_cpu(struct clk *clk, unsigned long rate) |
| 265 | { | 143 | { |
| 266 | int div; | 144 | int div; |
| 267 | unsigned long parent_rate; | 145 | unsigned long parent_rate; |
| @@ -278,7 +156,7 @@ static unsigned long _clk_cpu_round_rate(struct clk *clk, unsigned long rate) | |||
| 278 | return parent_rate / div; | 156 | return parent_rate / div; |
| 279 | } | 157 | } |
| 280 | 158 | ||
| 281 | static int _clk_cpu_set_rate(struct clk *clk, unsigned long rate) | 159 | static int set_rate_cpu(struct clk *clk, unsigned long rate) |
| 282 | { | 160 | { |
| 283 | unsigned int div; | 161 | unsigned int div; |
| 284 | uint32_t reg; | 162 | uint32_t reg; |
| @@ -295,19 +173,18 @@ static int _clk_cpu_set_rate(struct clk *clk, unsigned long rate) | |||
| 295 | 173 | ||
| 296 | reg = __raw_readl(CCM_CSCR); | 174 | reg = __raw_readl(CCM_CSCR); |
| 297 | if (mx27_revision() >= CHIP_REV_2_0) { | 175 | if (mx27_revision() >= CHIP_REV_2_0) { |
| 298 | reg &= ~CCM_CSCR_ARM_MASK; | 176 | reg &= ~(3 << 12); |
| 299 | reg |= div << CCM_CSCR_ARM_OFFSET; | 177 | reg |= div << 12; |
| 300 | reg &= ~0x06; | 178 | reg &= ~(CCM_CSCR_FPM | CCM_CSCR_SPEN); |
| 301 | __raw_writel(reg | 0x80000000, CCM_CSCR); | 179 | __raw_writel(reg | CCM_CSCR_UPDATE_DIS, CCM_CSCR); |
| 302 | } else { | 180 | } else { |
| 303 | printk(KERN_ERR "Cant set CPU frequency!\n"); | 181 | printk(KERN_ERR "Can't set CPU frequency!\n"); |
| 304 | } | 182 | } |
| 305 | 183 | ||
| 306 | return 0; | 184 | return 0; |
| 307 | } | 185 | } |
| 308 | 186 | ||
| 309 | static unsigned long _clk_perclkx_round_rate(struct clk *clk, | 187 | static unsigned long round_rate_per(struct clk *clk, unsigned long rate) |
| 310 | unsigned long rate) | ||
| 311 | { | 188 | { |
| 312 | u32 div; | 189 | u32 div; |
| 313 | unsigned long parent_rate; | 190 | unsigned long parent_rate; |
| @@ -324,7 +201,7 @@ static unsigned long _clk_perclkx_round_rate(struct clk *clk, | |||
| 324 | return parent_rate / div; | 201 | return parent_rate / div; |
| 325 | } | 202 | } |
| 326 | 203 | ||
| 327 | static int _clk_perclkx_set_rate(struct clk *clk, unsigned long rate) | 204 | static int set_rate_per(struct clk *clk, unsigned long rate) |
| 328 | { | 205 | { |
| 329 | u32 reg; | 206 | u32 reg; |
| 330 | u32 div; | 207 | u32 div; |
| @@ -340,84 +217,65 @@ static int _clk_perclkx_set_rate(struct clk *clk, unsigned long rate) | |||
| 340 | return -EINVAL; | 217 | return -EINVAL; |
| 341 | div--; | 218 | div--; |
| 342 | 219 | ||
| 343 | reg = | 220 | reg = __raw_readl(CCM_PCDR1) & ~(0x3f << (clk->id << 3)); |
| 344 | __raw_readl(CCM_PCDR1) & ~(CCM_PCDR1_PERDIV1_MASK << | ||
| 345 | (clk->id << 3)); | ||
| 346 | reg |= div << (clk->id << 3); | 221 | reg |= div << (clk->id << 3); |
| 347 | __raw_writel(reg, CCM_PCDR1); | 222 | __raw_writel(reg, CCM_PCDR1); |
| 348 | 223 | ||
| 349 | return 0; | 224 | return 0; |
| 350 | } | 225 | } |
| 351 | 226 | ||
| 352 | static unsigned long _clk_usb_recalc(struct clk *clk) | 227 | static unsigned long get_rate_usb(struct clk *clk) |
| 353 | { | 228 | { |
| 354 | unsigned long usb_pdf; | 229 | unsigned long usb_pdf; |
| 355 | unsigned long parent_rate; | 230 | unsigned long parent_rate; |
| 356 | 231 | ||
| 357 | parent_rate = clk_get_rate(clk->parent); | 232 | parent_rate = clk_get_rate(clk->parent); |
| 358 | 233 | ||
| 359 | usb_pdf = (CSCR() & CCM_CSCR_USB_MASK) >> CCM_CSCR_USB_OFFSET; | 234 | usb_pdf = (__raw_readl(CCM_CSCR) >> 28) & 0x7; |
| 360 | 235 | ||
| 361 | return parent_rate / (usb_pdf + 1U); | 236 | return parent_rate / (usb_pdf + 1U); |
| 362 | } | 237 | } |
| 363 | 238 | ||
| 364 | static unsigned long _clk_ssi1_recalc(struct clk *clk) | 239 | static unsigned long get_rate_ssix(struct clk *clk, unsigned long pdf) |
| 365 | { | 240 | { |
| 366 | unsigned long ssi1_pdf; | ||
| 367 | unsigned long parent_rate; | 241 | unsigned long parent_rate; |
| 368 | 242 | ||
| 369 | parent_rate = clk_get_rate(clk->parent); | 243 | parent_rate = clk_get_rate(clk->parent); |
| 370 | 244 | ||
| 371 | ssi1_pdf = (PCDR0() & CCM_PCDR0_SSI1BAUDDIV_MASK) >> | ||
| 372 | CCM_PCDR0_SSI1BAUDDIV_OFFSET; | ||
| 373 | |||
| 374 | if (mx27_revision() >= CHIP_REV_2_0) | 245 | if (mx27_revision() >= CHIP_REV_2_0) |
| 375 | ssi1_pdf += 4; | 246 | pdf += 4; /* MX27 TO2+ */ |
| 376 | else | 247 | else |
| 377 | ssi1_pdf = (ssi1_pdf < 2) ? 124UL : ssi1_pdf; | 248 | pdf = (pdf < 2) ? 124UL : pdf; /* MX21 & MX27 TO1 */ |
| 378 | 249 | ||
| 379 | return 2UL * parent_rate / ssi1_pdf; | 250 | return 2UL * parent_rate / pdf; |
| 380 | } | 251 | } |
| 381 | 252 | ||
| 382 | static unsigned long _clk_ssi2_recalc(struct clk *clk) | 253 | static unsigned long get_rate_ssi1(struct clk *clk) |
| 383 | { | 254 | { |
| 384 | unsigned long ssi2_pdf; | 255 | return get_rate_ssix(clk, (__raw_readl(CCM_PCDR0) >> 16) & 0x3f); |
| 385 | unsigned long parent_rate; | 256 | } |
| 386 | |||
| 387 | parent_rate = clk_get_rate(clk->parent); | ||
| 388 | |||
| 389 | ssi2_pdf = (PCDR0() & CCM_PCDR0_SSI2BAUDDIV_MASK) >> | ||
| 390 | CCM_PCDR0_SSI2BAUDDIV_OFFSET; | ||
| 391 | |||
| 392 | if (mx27_revision() >= CHIP_REV_2_0) | ||
| 393 | ssi2_pdf += 4; | ||
| 394 | else | ||
| 395 | ssi2_pdf = (ssi2_pdf < 2) ? 124UL : ssi2_pdf; | ||
| 396 | 257 | ||
| 397 | return 2UL * parent_rate / ssi2_pdf; | 258 | static unsigned long get_rate_ssi2(struct clk *clk) |
| 259 | { | ||
| 260 | return get_rate_ssix(clk, (__raw_readl(CCM_PCDR0) >> 26) & 0x3f); | ||
| 398 | } | 261 | } |
| 399 | 262 | ||
| 400 | static unsigned long _clk_nfc_recalc(struct clk *clk) | 263 | static unsigned long get_rate_nfc(struct clk *clk) |
| 401 | { | 264 | { |
| 402 | unsigned long nfc_pdf; | 265 | unsigned long nfc_pdf; |
| 403 | unsigned long parent_rate; | 266 | unsigned long parent_rate; |
| 404 | 267 | ||
| 405 | parent_rate = clk_get_rate(clk->parent); | 268 | parent_rate = clk_get_rate(clk->parent); |
| 406 | 269 | ||
| 407 | if (mx27_revision() >= CHIP_REV_2_0) { | 270 | if (mx27_revision() >= CHIP_REV_2_0) |
| 408 | nfc_pdf = | 271 | nfc_pdf = (__raw_readl(CCM_PCDR0) >> 6) & 0xf; |
| 409 | (PCDR0() & CCM_PCDR0_NFCDIV2_MASK) >> | 272 | else |
| 410 | CCM_PCDR0_NFCDIV2_OFFSET; | 273 | nfc_pdf = (__raw_readl(CCM_PCDR0) >> 12) & 0xf; |
| 411 | } else { | ||
| 412 | nfc_pdf = | ||
| 413 | (PCDR0() & CCM_PCDR0_NFCDIV_MASK) >> | ||
| 414 | CCM_PCDR0_NFCDIV_OFFSET; | ||
| 415 | } | ||
| 416 | 274 | ||
| 417 | return parent_rate / (nfc_pdf + 1); | 275 | return parent_rate / (nfc_pdf + 1); |
| 418 | } | 276 | } |
| 419 | 277 | ||
| 420 | static unsigned long _clk_vpu_recalc(struct clk *clk) | 278 | static unsigned long get_rate_vpu(struct clk *clk) |
| 421 | { | 279 | { |
| 422 | unsigned long vpu_pdf; | 280 | unsigned long vpu_pdf; |
| 423 | unsigned long parent_rate; | 281 | unsigned long parent_rate; |
| @@ -425,25 +283,27 @@ static unsigned long _clk_vpu_recalc(struct clk *clk) | |||
| 425 | parent_rate = clk_get_rate(clk->parent); | 283 | parent_rate = clk_get_rate(clk->parent); |
| 426 | 284 | ||
| 427 | if (mx27_revision() >= CHIP_REV_2_0) { | 285 | if (mx27_revision() >= CHIP_REV_2_0) { |
| 428 | vpu_pdf = | 286 | vpu_pdf = (__raw_readl(CCM_PCDR0) >> 10) & 0x3f; |
| 429 | (PCDR0() & CCM_PCDR0_VPUDIV2_MASK) >> | ||
| 430 | CCM_PCDR0_VPUDIV2_OFFSET; | ||
| 431 | vpu_pdf += 4; | 287 | vpu_pdf += 4; |
| 432 | } else { | 288 | } else { |
| 433 | vpu_pdf = | 289 | vpu_pdf = (__raw_readl(CCM_PCDR0) >> 8) & 0xf; |
| 434 | (PCDR0() & CCM_PCDR0_VPUDIV_MASK) >> | ||
| 435 | CCM_PCDR0_VPUDIV_OFFSET; | ||
| 436 | vpu_pdf = (vpu_pdf < 2) ? 124 : vpu_pdf; | 290 | vpu_pdf = (vpu_pdf < 2) ? 124 : vpu_pdf; |
| 437 | } | 291 | } |
| 292 | |||
| 438 | return 2UL * parent_rate / vpu_pdf; | 293 | return 2UL * parent_rate / vpu_pdf; |
| 439 | } | 294 | } |
| 440 | 295 | ||
| 441 | static unsigned long _clk_parent_round_rate(struct clk *clk, unsigned long rate) | 296 | static unsigned long round_rate_parent(struct clk *clk, unsigned long rate) |
| 442 | { | 297 | { |
| 443 | return clk->parent->round_rate(clk->parent, rate); | 298 | return clk->parent->round_rate(clk->parent, rate); |
| 444 | } | 299 | } |
| 445 | 300 | ||
| 446 | static int _clk_parent_set_rate(struct clk *clk, unsigned long rate) | 301 | static unsigned long get_rate_parent(struct clk *clk) |
| 302 | { | ||
| 303 | return clk_get_rate(clk->parent); | ||
| 304 | } | ||
| 305 | |||
| 306 | static int set_rate_parent(struct clk *clk, unsigned long rate) | ||
| 447 | { | 307 | { |
| 448 | return clk->parent->set_rate(clk->parent, rate); | 308 | return clk->parent->set_rate(clk->parent, rate); |
| 449 | } | 309 | } |
| @@ -451,1112 +311,380 @@ static int _clk_parent_set_rate(struct clk *clk, unsigned long rate) | |||
| 451 | /* in Hz */ | 311 | /* in Hz */ |
| 452 | static unsigned long external_high_reference = 26000000; | 312 | static unsigned long external_high_reference = 26000000; |
| 453 | 313 | ||
| 454 | static unsigned long get_high_reference_clock_rate(struct clk *clk) | 314 | static unsigned long get_rate_high_reference(struct clk *clk) |
| 455 | { | 315 | { |
| 456 | return external_high_reference; | 316 | return external_high_reference; |
| 457 | } | 317 | } |
| 458 | 318 | ||
| 459 | /* | ||
| 460 | * the high frequency external clock reference | ||
| 461 | * Default case is 26MHz. Could be changed at runtime | ||
| 462 | * with a call to change_external_high_reference() | ||
| 463 | */ | ||
| 464 | static struct clk ckih_clk = { | ||
| 465 | .name = "ckih", | ||
| 466 | .get_rate = get_high_reference_clock_rate, | ||
| 467 | }; | ||
| 468 | |||
| 469 | /* in Hz */ | 319 | /* in Hz */ |
| 470 | static unsigned long external_low_reference = 32768; | 320 | static unsigned long external_low_reference = 32768; |
| 471 | 321 | ||
| 472 | static unsigned long get_low_reference_clock_rate(struct clk *clk) | 322 | static unsigned long get_rate_low_reference(struct clk *clk) |
| 473 | { | 323 | { |
| 474 | return external_low_reference; | 324 | return external_low_reference; |
| 475 | } | 325 | } |
| 476 | 326 | ||
| 477 | /* | 327 | static unsigned long get_rate_fpm(struct clk *clk) |
| 478 | * the low frequency external clock reference | ||
| 479 | * Default case is 32.768kHz Could be changed at runtime | ||
| 480 | * with a call to change_external_low_reference() | ||
| 481 | */ | ||
| 482 | static struct clk ckil_clk = { | ||
| 483 | .name = "ckil", | ||
| 484 | .get_rate = get_low_reference_clock_rate, | ||
| 485 | }; | ||
| 486 | |||
| 487 | static unsigned long get_mpll_clk(struct clk *clk) | ||
| 488 | { | 328 | { |
| 489 | uint32_t reg; | 329 | return clk_get_rate(clk->parent) * 1024; |
| 490 | unsigned long ref_clk; | ||
| 491 | unsigned long mfi = 0, mfn = 0, mfd = 0, pdf = 0; | ||
| 492 | unsigned long long temp; | ||
| 493 | |||
| 494 | ref_clk = clk_get_rate(clk->parent); | ||
| 495 | |||
| 496 | reg = __raw_readl(CCM_MPCTL0); | ||
| 497 | pdf = (reg & CCM_MPCTL0_PD_MASK) >> CCM_MPCTL0_PD_OFFSET; | ||
| 498 | mfd = (reg & CCM_MPCTL0_MFD_MASK) >> CCM_MPCTL0_MFD_OFFSET; | ||
| 499 | mfi = (reg & CCM_MPCTL0_MFI_MASK) >> CCM_MPCTL0_MFI_OFFSET; | ||
| 500 | mfn = (reg & CCM_MPCTL0_MFN_MASK) >> CCM_MPCTL0_MFN_OFFSET; | ||
| 501 | |||
| 502 | mfi = (mfi <= 5) ? 5 : mfi; | ||
| 503 | temp = 2LL * ref_clk * mfn; | ||
| 504 | do_div(temp, mfd + 1); | ||
| 505 | temp = 2LL * ref_clk * mfi + temp; | ||
| 506 | do_div(temp, pdf + 1); | ||
| 507 | |||
| 508 | return (unsigned long)temp; | ||
| 509 | } | 330 | } |
| 510 | 331 | ||
| 511 | static struct clk mpll_clk = { | 332 | static unsigned long get_rate_mpll(struct clk *clk) |
| 512 | .name = "mpll", | 333 | { |
| 513 | .parent = &ckih_clk, | 334 | return mxc_decode_pll(__raw_readl(CCM_MPCTL0), |
| 514 | .get_rate = get_mpll_clk, | 335 | clk_get_rate(clk->parent)); |
| 515 | }; | 336 | } |
| 516 | 337 | ||
| 517 | static unsigned long _clk_mpll_main_get_rate(struct clk *clk) | 338 | static unsigned long get_rate_mpll_main(struct clk *clk) |
| 518 | { | 339 | { |
| 519 | unsigned long parent_rate; | 340 | unsigned long parent_rate; |
| 520 | 341 | ||
| 521 | parent_rate = clk_get_rate(clk->parent); | 342 | parent_rate = clk_get_rate(clk->parent); |
| 522 | 343 | ||
| 523 | /* i.MX27 TO2: | 344 | /* i.MX27 TO2: |
| 524 | * clk->id == 0: arm clock source path 1 which is from 2*MPLL/DIV_2 | 345 | * clk->id == 0: arm clock source path 1 which is from 2 * MPLL / 2 |
| 525 | * clk->id == 1: arm clock source path 2 which is from 2*MPLL/DIV_3 | 346 | * clk->id == 1: arm clock source path 2 which is from 2 * MPLL / 3 |
| 526 | */ | 347 | */ |
| 527 | |||
| 528 | if (mx27_revision() >= CHIP_REV_2_0 && clk->id == 1) | 348 | if (mx27_revision() >= CHIP_REV_2_0 && clk->id == 1) |
| 529 | return 2UL * parent_rate / 3UL; | 349 | return 2UL * parent_rate / 3UL; |
| 530 | 350 | ||
| 531 | return parent_rate; | 351 | return parent_rate; |
| 532 | } | 352 | } |
| 533 | 353 | ||
| 534 | static struct clk mpll_main_clk[] = { | 354 | static unsigned long get_rate_spll(struct clk *clk) |
| 535 | { | ||
| 536 | /* For i.MX27 TO2, it is the MPLL path 1 of ARM core | ||
| 537 | * It provide the clock source whose rate is same as MPLL | ||
| 538 | */ | ||
| 539 | .name = "mpll_main", | ||
| 540 | .id = 0, | ||
| 541 | .parent = &mpll_clk, | ||
| 542 | .get_rate = _clk_mpll_main_get_rate | ||
| 543 | }, { | ||
| 544 | /* For i.MX27 TO2, it is the MPLL path 2 of ARM core | ||
| 545 | * It provide the clock source whose rate is same MPLL * 2/3 | ||
| 546 | */ | ||
| 547 | .name = "mpll_main", | ||
| 548 | .id = 1, | ||
| 549 | .parent = &mpll_clk, | ||
| 550 | .get_rate = _clk_mpll_main_get_rate | ||
| 551 | } | ||
| 552 | }; | ||
| 553 | |||
| 554 | static unsigned long get_spll_clk(struct clk *clk) | ||
| 555 | { | 355 | { |
| 556 | uint32_t reg; | 356 | uint32_t reg; |
| 557 | unsigned long ref_clk; | 357 | unsigned long rate; |
| 558 | unsigned long mfi = 0, mfn = 0, mfd = 0, pdf = 0; | ||
| 559 | unsigned long long temp; | ||
| 560 | 358 | ||
| 561 | ref_clk = clk_get_rate(clk->parent); | 359 | rate = clk_get_rate(clk->parent); |
| 562 | 360 | ||
| 563 | reg = __raw_readl(CCM_SPCTL0); | 361 | reg = __raw_readl(CCM_SPCTL0); |
| 564 | /*TODO: This is TO2 Bug */ | 362 | |
| 363 | /* On TO2 we have to write the value back. Otherwise we | ||
| 364 | * read 0 from this register the next time. | ||
| 365 | */ | ||
| 565 | if (mx27_revision() >= CHIP_REV_2_0) | 366 | if (mx27_revision() >= CHIP_REV_2_0) |
| 566 | __raw_writel(reg, CCM_SPCTL0); | 367 | __raw_writel(reg, CCM_SPCTL0); |
| 567 | 368 | ||
| 568 | pdf = (reg & CCM_SPCTL0_PD_MASK) >> CCM_SPCTL0_PD_OFFSET; | 369 | return mxc_decode_pll(reg, rate); |
| 569 | mfd = (reg & CCM_SPCTL0_MFD_MASK) >> CCM_SPCTL0_MFD_OFFSET; | ||
| 570 | mfi = (reg & CCM_SPCTL0_MFI_MASK) >> CCM_SPCTL0_MFI_OFFSET; | ||
| 571 | mfn = (reg & CCM_SPCTL0_MFN_MASK) >> CCM_SPCTL0_MFN_OFFSET; | ||
| 572 | |||
| 573 | mfi = (mfi <= 5) ? 5 : mfi; | ||
| 574 | temp = 2LL * ref_clk * mfn; | ||
| 575 | do_div(temp, mfd + 1); | ||
| 576 | temp = 2LL * ref_clk * mfi + temp; | ||
| 577 | do_div(temp, pdf + 1); | ||
| 578 | |||
| 579 | return (unsigned long)temp; | ||
| 580 | } | 370 | } |
| 581 | 371 | ||
| 582 | static struct clk spll_clk = { | 372 | static unsigned long get_rate_cpu(struct clk *clk) |
| 583 | .name = "spll", | ||
| 584 | .parent = &ckih_clk, | ||
| 585 | .get_rate = get_spll_clk, | ||
| 586 | .enable = _clk_spll_enable, | ||
| 587 | .disable = _clk_spll_disable, | ||
| 588 | }; | ||
| 589 | |||
| 590 | static unsigned long get_cpu_clk(struct clk *clk) | ||
| 591 | { | 373 | { |
| 592 | u32 div; | 374 | u32 div; |
| 593 | unsigned long rate; | 375 | unsigned long rate; |
| 594 | 376 | ||
| 595 | if (mx27_revision() >= CHIP_REV_2_0) | 377 | if (mx27_revision() >= CHIP_REV_2_0) |
| 596 | div = (CSCR() & CCM_CSCR_ARM_MASK) >> CCM_CSCR_ARM_OFFSET; | 378 | div = (__raw_readl(CCM_CSCR) >> 12) & 0x3; |
| 597 | else | 379 | else |
| 598 | div = (CSCR() & CCM_CSCR_PRESC_MASK) >> CCM_CSCR_PRESC_OFFSET; | 380 | div = (__raw_readl(CCM_CSCR) >> 13) & 0x7; |
| 599 | 381 | ||
| 600 | rate = clk_get_rate(clk->parent); | 382 | rate = clk_get_rate(clk->parent); |
| 601 | return rate / (div + 1); | 383 | return rate / (div + 1); |
| 602 | } | 384 | } |
| 603 | 385 | ||
| 604 | static struct clk cpu_clk = { | 386 | static unsigned long get_rate_ahb(struct clk *clk) |
| 605 | .name = "cpu_clk", | ||
| 606 | .parent = &mpll_main_clk[1], | ||
| 607 | .set_parent = _clk_cpu_set_parent, | ||
| 608 | .round_rate = _clk_cpu_round_rate, | ||
| 609 | .get_rate = get_cpu_clk, | ||
| 610 | .set_rate = _clk_cpu_set_rate, | ||
| 611 | }; | ||
| 612 | |||
| 613 | static unsigned long get_ahb_clk(struct clk *clk) | ||
| 614 | { | 387 | { |
| 615 | unsigned long rate; | 388 | unsigned long rate, bclk_pdf; |
| 616 | unsigned long bclk_pdf; | ||
| 617 | 389 | ||
| 618 | if (mx27_revision() >= CHIP_REV_2_0) | 390 | if (mx27_revision() >= CHIP_REV_2_0) |
| 619 | bclk_pdf = (CSCR() & CCM_CSCR_AHB_MASK) | 391 | bclk_pdf = (__raw_readl(CCM_CSCR) >> 8) & 0x3; |
| 620 | >> CCM_CSCR_AHB_OFFSET; | ||
| 621 | else | 392 | else |
| 622 | bclk_pdf = (CSCR() & CCM_CSCR_BCLK_MASK) | 393 | bclk_pdf = (__raw_readl(CCM_CSCR) >> 9) & 0xf; |
| 623 | >> CCM_CSCR_BCLK_OFFSET; | ||
| 624 | 394 | ||
| 625 | rate = clk_get_rate(clk->parent); | 395 | rate = clk_get_rate(clk->parent); |
| 626 | return rate / (bclk_pdf + 1); | 396 | return rate / (bclk_pdf + 1); |
| 627 | } | 397 | } |
| 628 | 398 | ||
| 629 | static struct clk ahb_clk = { | 399 | static unsigned long get_rate_ipg(struct clk *clk) |
| 630 | .name = "ahb_clk", | ||
| 631 | .parent = &mpll_main_clk[1], | ||
| 632 | .get_rate = get_ahb_clk, | ||
| 633 | }; | ||
| 634 | |||
| 635 | static unsigned long get_ipg_clk(struct clk *clk) | ||
| 636 | { | 400 | { |
| 637 | unsigned long rate; | 401 | unsigned long rate, ipg_pdf; |
| 638 | unsigned long ipg_pdf; | ||
| 639 | 402 | ||
| 640 | if (mx27_revision() >= CHIP_REV_2_0) | 403 | if (mx27_revision() >= CHIP_REV_2_0) |
| 641 | return clk_get_rate(clk->parent); | 404 | return clk_get_rate(clk->parent); |
| 642 | else | 405 | else |
| 643 | ipg_pdf = (CSCR() & CCM_CSCR_IPDIV) >> CCM_CSCR_IPDIV_OFFSET; | 406 | ipg_pdf = (__raw_readl(CCM_CSCR) >> 8) & 1; |
| 644 | 407 | ||
| 645 | rate = clk_get_rate(clk->parent); | 408 | rate = clk_get_rate(clk->parent); |
| 646 | return rate / (ipg_pdf + 1); | 409 | return rate / (ipg_pdf + 1); |
| 647 | } | 410 | } |
| 648 | 411 | ||
| 649 | static struct clk ipg_clk = { | 412 | static unsigned long get_rate_per(struct clk *clk) |
| 650 | .name = "ipg_clk", | ||
| 651 | .parent = &ahb_clk, | ||
| 652 | .get_rate = get_ipg_clk, | ||
| 653 | }; | ||
| 654 | |||
| 655 | static unsigned long _clk_perclkx_recalc(struct clk *clk) | ||
| 656 | { | 413 | { |
| 657 | unsigned long perclk_pdf; | 414 | unsigned long perclk_pdf, parent_rate; |
| 658 | unsigned long parent_rate; | ||
| 659 | 415 | ||
| 660 | parent_rate = clk_get_rate(clk->parent); | 416 | parent_rate = clk_get_rate(clk->parent); |
| 661 | 417 | ||
| 662 | if (clk->id < 0 || clk->id > 3) | 418 | if (clk->id < 0 || clk->id > 3) |
| 663 | return 0; | 419 | return 0; |
| 664 | 420 | ||
| 665 | perclk_pdf = (PCDR1() >> (clk->id << 3)) & CCM_PCDR1_PERDIV1_MASK; | 421 | perclk_pdf = (__raw_readl(CCM_PCDR1) >> (clk->id << 3)) & 0x3f; |
| 666 | 422 | ||
| 667 | return parent_rate / (perclk_pdf + 1); | 423 | return parent_rate / (perclk_pdf + 1); |
| 668 | } | 424 | } |
| 669 | 425 | ||
| 670 | static struct clk per_clk[] = { | 426 | /* |
| 671 | { | 427 | * the high frequency external clock reference |
| 672 | .name = "per_clk", | 428 | * Default case is 26MHz. Could be changed at runtime |
| 673 | .id = 0, | 429 | * with a call to change_external_high_reference() |
| 674 | .parent = &mpll_main_clk[1], | 430 | */ |
| 675 | .get_rate = _clk_perclkx_recalc, | 431 | static struct clk ckih_clk = { |
| 676 | .enable = _clk_enable, | 432 | .get_rate = get_rate_high_reference, |
| 677 | .enable_reg = CCM_PCCR1, | ||
| 678 | .enable_shift = CCM_PCCR1_PERCLK1_OFFSET, | ||
| 679 | .disable = _clk_disable, | ||
| 680 | }, { | ||
| 681 | .name = "per_clk", | ||
| 682 | .id = 1, | ||
| 683 | .parent = &mpll_main_clk[1], | ||
| 684 | .get_rate = _clk_perclkx_recalc, | ||
| 685 | .enable = _clk_enable, | ||
| 686 | .enable_reg = CCM_PCCR1, | ||
| 687 | .enable_shift = CCM_PCCR1_PERCLK2_OFFSET, | ||
| 688 | .disable = _clk_disable, | ||
| 689 | }, { | ||
| 690 | .name = "per_clk", | ||
| 691 | .id = 2, | ||
| 692 | .parent = &mpll_main_clk[1], | ||
| 693 | .round_rate = _clk_perclkx_round_rate, | ||
| 694 | .set_rate = _clk_perclkx_set_rate, | ||
| 695 | .get_rate = _clk_perclkx_recalc, | ||
| 696 | .enable = _clk_enable, | ||
| 697 | .enable_reg = CCM_PCCR1, | ||
| 698 | .enable_shift = CCM_PCCR1_PERCLK3_OFFSET, | ||
| 699 | .disable = _clk_disable, | ||
| 700 | }, { | ||
| 701 | .name = "per_clk", | ||
| 702 | .id = 3, | ||
| 703 | .parent = &mpll_main_clk[1], | ||
| 704 | .round_rate = _clk_perclkx_round_rate, | ||
| 705 | .set_rate = _clk_perclkx_set_rate, | ||
| 706 | .get_rate = _clk_perclkx_recalc, | ||
| 707 | .enable = _clk_enable, | ||
| 708 | .enable_reg = CCM_PCCR1, | ||
| 709 | .enable_shift = CCM_PCCR1_PERCLK4_OFFSET, | ||
| 710 | .disable = _clk_disable, | ||
| 711 | }, | ||
| 712 | }; | ||
| 713 | |||
| 714 | struct clk uart1_clk[] = { | ||
| 715 | { | ||
| 716 | .name = "uart_clk", | ||
| 717 | .id = 0, | ||
| 718 | .parent = &per_clk[0], | ||
| 719 | .secondary = &uart1_clk[1], | ||
| 720 | }, { | ||
| 721 | .name = "uart_ipg_clk", | ||
| 722 | .id = 0, | ||
| 723 | .parent = &ipg_clk, | ||
| 724 | .enable = _clk_enable, | ||
| 725 | .enable_reg = CCM_PCCR1, | ||
| 726 | .enable_shift = CCM_PCCR1_UART1_OFFSET, | ||
| 727 | .disable = _clk_disable, | ||
| 728 | }, | ||
| 729 | }; | ||
| 730 | |||
| 731 | struct clk uart2_clk[] = { | ||
| 732 | { | ||
| 733 | .name = "uart_clk", | ||
| 734 | .id = 1, | ||
| 735 | .parent = &per_clk[0], | ||
| 736 | .secondary = &uart2_clk[1], | ||
| 737 | }, { | ||
| 738 | .name = "uart_ipg_clk", | ||
| 739 | .id = 1, | ||
| 740 | .parent = &ipg_clk, | ||
| 741 | .enable = _clk_enable, | ||
| 742 | .enable_reg = CCM_PCCR1, | ||
| 743 | .enable_shift = CCM_PCCR1_UART2_OFFSET, | ||
| 744 | .disable = _clk_disable, | ||
| 745 | }, | ||
| 746 | }; | ||
| 747 | |||
| 748 | struct clk uart3_clk[] = { | ||
| 749 | { | ||
| 750 | .name = "uart_clk", | ||
| 751 | .id = 2, | ||
| 752 | .parent = &per_clk[0], | ||
| 753 | .secondary = &uart3_clk[1], | ||
| 754 | }, { | ||
| 755 | .name = "uart_ipg_clk", | ||
| 756 | .id = 2, | ||
| 757 | .parent = &ipg_clk, | ||
| 758 | .enable = _clk_enable, | ||
| 759 | .enable_reg = CCM_PCCR1, | ||
| 760 | .enable_shift = CCM_PCCR1_UART3_OFFSET, | ||
| 761 | .disable = _clk_disable, | ||
| 762 | }, | ||
| 763 | }; | ||
| 764 | |||
| 765 | struct clk uart4_clk[] = { | ||
| 766 | { | ||
| 767 | .name = "uart_clk", | ||
| 768 | .id = 3, | ||
| 769 | .parent = &per_clk[0], | ||
| 770 | .secondary = &uart4_clk[1], | ||
| 771 | }, { | ||
| 772 | .name = "uart_ipg_clk", | ||
| 773 | .id = 3, | ||
| 774 | .parent = &ipg_clk, | ||
| 775 | .enable = _clk_enable, | ||
| 776 | .enable_reg = CCM_PCCR1, | ||
| 777 | .enable_shift = CCM_PCCR1_UART4_OFFSET, | ||
| 778 | .disable = _clk_disable, | ||
| 779 | }, | ||
| 780 | }; | ||
| 781 | |||
| 782 | struct clk uart5_clk[] = { | ||
| 783 | { | ||
| 784 | .name = "uart_clk", | ||
| 785 | .id = 4, | ||
| 786 | .parent = &per_clk[0], | ||
| 787 | .secondary = &uart5_clk[1], | ||
| 788 | }, { | ||
| 789 | .name = "uart_ipg_clk", | ||
| 790 | .id = 4, | ||
| 791 | .parent = &ipg_clk, | ||
| 792 | .enable = _clk_enable, | ||
| 793 | .enable_reg = CCM_PCCR1, | ||
| 794 | .enable_shift = CCM_PCCR1_UART5_OFFSET, | ||
| 795 | .disable = _clk_disable, | ||
| 796 | }, | ||
| 797 | }; | ||
| 798 | |||
| 799 | struct clk uart6_clk[] = { | ||
| 800 | { | ||
| 801 | .name = "uart_clk", | ||
| 802 | .id = 5, | ||
| 803 | .parent = &per_clk[0], | ||
| 804 | .secondary = &uart6_clk[1], | ||
| 805 | }, { | ||
| 806 | .name = "uart_ipg_clk", | ||
| 807 | .id = 5, | ||
| 808 | .parent = &ipg_clk, | ||
| 809 | .enable = _clk_enable, | ||
| 810 | .enable_reg = CCM_PCCR1, | ||
| 811 | .enable_shift = CCM_PCCR1_UART6_OFFSET, | ||
| 812 | .disable = _clk_disable, | ||
| 813 | }, | ||
| 814 | }; | ||
| 815 | |||
| 816 | static struct clk gpt1_clk[] = { | ||
| 817 | { | ||
| 818 | .name = "gpt_clk", | ||
| 819 | .id = 0, | ||
| 820 | .parent = &per_clk[0], | ||
| 821 | .secondary = &gpt1_clk[1], | ||
| 822 | }, { | ||
| 823 | .name = "gpt_ipg_clk", | ||
| 824 | .id = 0, | ||
| 825 | .parent = &ipg_clk, | ||
| 826 | .enable = _clk_enable, | ||
| 827 | .enable_reg = CCM_PCCR0, | ||
| 828 | .enable_shift = CCM_PCCR0_GPT1_OFFSET, | ||
| 829 | .disable = _clk_disable, | ||
| 830 | }, | ||
| 831 | }; | ||
| 832 | |||
| 833 | static struct clk gpt2_clk[] = { | ||
| 834 | { | ||
| 835 | .name = "gpt_clk", | ||
| 836 | .id = 1, | ||
| 837 | .parent = &per_clk[0], | ||
| 838 | .secondary = &gpt2_clk[1], | ||
| 839 | }, { | ||
| 840 | .name = "gpt_ipg_clk", | ||
| 841 | .id = 1, | ||
| 842 | .parent = &ipg_clk, | ||
| 843 | .enable = _clk_enable, | ||
| 844 | .enable_reg = CCM_PCCR0, | ||
| 845 | .enable_shift = CCM_PCCR0_GPT2_OFFSET, | ||
| 846 | .disable = _clk_disable, | ||
| 847 | }, | ||
| 848 | }; | ||
| 849 | |||
| 850 | static struct clk gpt3_clk[] = { | ||
| 851 | { | ||
| 852 | .name = "gpt_clk", | ||
| 853 | .id = 2, | ||
| 854 | .parent = &per_clk[0], | ||
| 855 | .secondary = &gpt3_clk[1], | ||
| 856 | }, { | ||
| 857 | .name = "gpt_ipg_clk", | ||
| 858 | .id = 2, | ||
| 859 | .parent = &ipg_clk, | ||
| 860 | .enable = _clk_enable, | ||
| 861 | .enable_reg = CCM_PCCR0, | ||
| 862 | .enable_shift = CCM_PCCR0_GPT3_OFFSET, | ||
| 863 | .disable = _clk_disable, | ||
| 864 | }, | ||
| 865 | }; | ||
| 866 | |||
| 867 | static struct clk gpt4_clk[] = { | ||
| 868 | { | ||
| 869 | .name = "gpt_clk", | ||
| 870 | .id = 3, | ||
| 871 | .parent = &per_clk[0], | ||
| 872 | .secondary = &gpt4_clk[1], | ||
| 873 | }, { | ||
| 874 | .name = "gpt_ipg_clk", | ||
| 875 | .id = 3, | ||
| 876 | .parent = &ipg_clk, | ||
| 877 | .enable = _clk_enable, | ||
| 878 | .enable_reg = CCM_PCCR0, | ||
| 879 | .enable_shift = CCM_PCCR0_GPT4_OFFSET, | ||
| 880 | .disable = _clk_disable, | ||
| 881 | }, | ||
| 882 | }; | ||
| 883 | |||
| 884 | static struct clk gpt5_clk[] = { | ||
| 885 | { | ||
| 886 | .name = "gpt_clk", | ||
| 887 | .id = 4, | ||
| 888 | .parent = &per_clk[0], | ||
| 889 | .secondary = &gpt5_clk[1], | ||
| 890 | }, { | ||
| 891 | .name = "gpt_ipg_clk", | ||
| 892 | .id = 4, | ||
| 893 | .parent = &ipg_clk, | ||
| 894 | .enable = _clk_enable, | ||
| 895 | .enable_reg = CCM_PCCR0, | ||
| 896 | .enable_shift = CCM_PCCR0_GPT5_OFFSET, | ||
| 897 | .disable = _clk_disable, | ||
| 898 | }, | ||
| 899 | }; | 433 | }; |
| 900 | 434 | ||
| 901 | static struct clk gpt6_clk[] = { | 435 | static struct clk mpll_clk = { |
| 902 | { | 436 | .parent = &ckih_clk, |
| 903 | .name = "gpt_clk", | 437 | .get_rate = get_rate_mpll, |
| 904 | .id = 5, | ||
| 905 | .parent = &per_clk[0], | ||
| 906 | .secondary = &gpt6_clk[1], | ||
| 907 | }, { | ||
| 908 | .name = "gpt_ipg_clk", | ||
| 909 | .id = 5, | ||
| 910 | .parent = &ipg_clk, | ||
| 911 | .enable = _clk_enable, | ||
| 912 | .enable_reg = CCM_PCCR0, | ||
| 913 | .enable_shift = CCM_PCCR0_GPT6_OFFSET, | ||
| 914 | .disable = _clk_disable, | ||
| 915 | }, | ||
| 916 | }; | 438 | }; |
| 917 | 439 | ||
| 918 | static struct clk pwm_clk[] = { | 440 | /* For i.MX27 TO2, it is the MPLL path 1 of ARM core |
| 919 | { | 441 | * It provides the clock source whose rate is same as MPLL |
| 920 | .name = "pwm_clk", | 442 | */ |
| 921 | .parent = &per_clk[0], | 443 | static struct clk mpll_main1_clk = { |
| 922 | .secondary = &pwm_clk[1], | 444 | .id = 0, |
| 923 | }, { | 445 | .parent = &mpll_clk, |
| 924 | .name = "pwm_clk", | 446 | .get_rate = get_rate_mpll_main, |
| 925 | .parent = &ipg_clk, | ||
| 926 | .enable = _clk_enable, | ||
| 927 | .enable_reg = CCM_PCCR0, | ||
| 928 | .enable_shift = CCM_PCCR0_PWM_OFFSET, | ||
| 929 | .disable = _clk_disable, | ||
| 930 | }, | ||
| 931 | }; | 447 | }; |
| 932 | 448 | ||
| 933 | static struct clk sdhc1_clk[] = { | 449 | /* For i.MX27 TO2, it is the MPLL path 2 of ARM core |
| 934 | { | 450 | * It provides the clock source whose rate is same MPLL * 2 / 3 |
| 935 | .name = "sdhc_clk", | 451 | */ |
| 936 | .id = 0, | 452 | static struct clk mpll_main2_clk = { |
| 937 | .parent = &per_clk[1], | 453 | .id = 1, |
| 938 | .secondary = &sdhc1_clk[1], | 454 | .parent = &mpll_clk, |
| 939 | }, { | 455 | .get_rate = get_rate_mpll_main, |
| 940 | .name = "sdhc_ipg_clk", | ||
| 941 | .id = 0, | ||
| 942 | .parent = &ipg_clk, | ||
| 943 | .enable = _clk_enable, | ||
| 944 | .enable_reg = CCM_PCCR0, | ||
| 945 | .enable_shift = CCM_PCCR0_SDHC1_OFFSET, | ||
| 946 | .disable = _clk_disable, | ||
| 947 | }, | ||
| 948 | }; | 456 | }; |
| 949 | 457 | ||
| 950 | static struct clk sdhc2_clk[] = { | 458 | static struct clk ahb_clk = { |
| 951 | { | 459 | .parent = &mpll_main2_clk, |
| 952 | .name = "sdhc_clk", | 460 | .get_rate = get_rate_ahb, |
| 953 | .id = 1, | ||
| 954 | .parent = &per_clk[1], | ||
| 955 | .secondary = &sdhc2_clk[1], | ||
| 956 | }, { | ||
| 957 | .name = "sdhc_ipg_clk", | ||
| 958 | .id = 1, | ||
| 959 | .parent = &ipg_clk, | ||
| 960 | .enable = _clk_enable, | ||
| 961 | .enable_reg = CCM_PCCR0, | ||
| 962 | .enable_shift = CCM_PCCR0_SDHC2_OFFSET, | ||
| 963 | .disable = _clk_disable, | ||
| 964 | }, | ||
| 965 | }; | 461 | }; |
| 966 | 462 | ||
| 967 | static struct clk sdhc3_clk[] = { | 463 | static struct clk ipg_clk = { |
| 968 | { | 464 | .parent = &ahb_clk, |
| 969 | .name = "sdhc_clk", | 465 | .get_rate = get_rate_ipg, |
| 970 | .id = 2, | ||
| 971 | .parent = &per_clk[1], | ||
| 972 | .secondary = &sdhc3_clk[1], | ||
| 973 | }, { | ||
| 974 | .name = "sdhc_ipg_clk", | ||
| 975 | .id = 2, | ||
| 976 | .parent = &ipg_clk, | ||
| 977 | .enable = _clk_enable, | ||
| 978 | .enable_reg = CCM_PCCR0, | ||
| 979 | .enable_shift = CCM_PCCR0_SDHC3_OFFSET, | ||
| 980 | .disable = _clk_disable, | ||
| 981 | }, | ||
| 982 | }; | 466 | }; |
| 983 | 467 | ||
| 984 | static struct clk cspi1_clk[] = { | 468 | static struct clk cpu_clk = { |
| 985 | { | 469 | .parent = &mpll_main2_clk, |
| 986 | .name = "cspi_clk", | 470 | .set_parent = clk_cpu_set_parent, |
| 987 | .id = 0, | 471 | .round_rate = round_rate_cpu, |
| 988 | .parent = &per_clk[1], | 472 | .get_rate = get_rate_cpu, |
| 989 | .secondary = &cspi1_clk[1], | 473 | .set_rate = set_rate_cpu, |
| 990 | }, { | ||
| 991 | .name = "cspi_ipg_clk", | ||
| 992 | .id = 0, | ||
| 993 | .parent = &ipg_clk, | ||
| 994 | .enable = _clk_enable, | ||
| 995 | .enable_reg = CCM_PCCR0, | ||
| 996 | .enable_shift = CCM_PCCR0_CSPI1_OFFSET, | ||
| 997 | .disable = _clk_disable, | ||
| 998 | }, | ||
| 999 | }; | 474 | }; |
| 1000 | 475 | ||
| 1001 | static struct clk cspi2_clk[] = { | 476 | static struct clk spll_clk = { |
| 1002 | { | 477 | .parent = &ckih_clk, |
| 1003 | .name = "cspi_clk", | 478 | .get_rate = get_rate_spll, |
| 1004 | .id = 1, | 479 | .enable = clk_spll_enable, |
| 1005 | .parent = &per_clk[1], | 480 | .disable = clk_spll_disable, |
| 1006 | .secondary = &cspi2_clk[1], | ||
| 1007 | }, { | ||
| 1008 | .name = "cspi_ipg_clk", | ||
| 1009 | .id = 1, | ||
| 1010 | .parent = &ipg_clk, | ||
| 1011 | .enable = _clk_enable, | ||
| 1012 | .enable_reg = CCM_PCCR0, | ||
| 1013 | .enable_shift = CCM_PCCR0_CSPI2_OFFSET, | ||
| 1014 | .disable = _clk_disable, | ||
| 1015 | }, | ||
| 1016 | }; | 481 | }; |
| 1017 | 482 | ||
| 1018 | static struct clk cspi3_clk[] = { | 483 | /* |
| 1019 | { | 484 | * the low frequency external clock reference |
| 1020 | .name = "cspi_clk", | 485 | * Default case is 32.768kHz. |
| 1021 | .id = 2, | 486 | */ |
| 1022 | .parent = &per_clk[1], | 487 | static struct clk ckil_clk = { |
| 1023 | .secondary = &cspi3_clk[1], | 488 | .get_rate = get_rate_low_reference, |
| 1024 | }, { | ||
| 1025 | .name = "cspi_ipg_clk", | ||
| 1026 | .id = 2, | ||
| 1027 | .parent = &ipg_clk, | ||
| 1028 | .enable = _clk_enable, | ||
| 1029 | .enable_reg = CCM_PCCR0, | ||
| 1030 | .enable_shift = CCM_PCCR0_CSPI3_OFFSET, | ||
| 1031 | .disable = _clk_disable, | ||
| 1032 | }, | ||
| 1033 | }; | 489 | }; |
| 1034 | 490 | ||
| 1035 | static struct clk lcdc_clk[] = { | 491 | /* Output of frequency pre multiplier */ |
| 1036 | { | 492 | static struct clk fpm_clk = { |
| 1037 | .name = "lcdc_clk", | 493 | .parent = &ckil_clk, |
| 1038 | .parent = &per_clk[2], | 494 | .get_rate = get_rate_fpm, |
| 1039 | .secondary = &lcdc_clk[1], | ||
| 1040 | .round_rate = _clk_parent_round_rate, | ||
| 1041 | .set_rate = _clk_parent_set_rate, | ||
| 1042 | }, { | ||
| 1043 | .name = "lcdc_ipg_clk", | ||
| 1044 | .parent = &ipg_clk, | ||
| 1045 | .secondary = &lcdc_clk[2], | ||
| 1046 | .enable = _clk_enable, | ||
| 1047 | .enable_reg = CCM_PCCR0, | ||
| 1048 | .enable_shift = CCM_PCCR0_LCDC_OFFSET, | ||
| 1049 | .disable = _clk_disable, | ||
| 1050 | }, { | ||
| 1051 | .name = "lcdc_ahb_clk", | ||
| 1052 | .parent = &ahb_clk, | ||
| 1053 | .enable = _clk_enable, | ||
| 1054 | .enable_reg = CCM_PCCR1, | ||
| 1055 | .enable_shift = CCM_PCCR1_HCLK_LCDC_OFFSET, | ||
| 1056 | .disable = _clk_disable, | ||
| 1057 | }, | ||
| 1058 | }; | 495 | }; |
| 1059 | 496 | ||
| 1060 | static struct clk csi_clk[] = { | 497 | #define PCCR0 CCM_PCCR0 |
| 1061 | { | 498 | #define PCCR1 CCM_PCCR1 |
| 1062 | .name = "csi_perclk", | ||
| 1063 | .parent = &per_clk[3], | ||
| 1064 | .secondary = &csi_clk[1], | ||
| 1065 | .round_rate = _clk_parent_round_rate, | ||
| 1066 | .set_rate = _clk_parent_set_rate, | ||
| 1067 | }, { | ||
| 1068 | .name = "csi_ahb_clk", | ||
| 1069 | .parent = &ahb_clk, | ||
| 1070 | .enable = _clk_enable, | ||
| 1071 | .enable_reg = CCM_PCCR1, | ||
| 1072 | .enable_shift = CCM_PCCR1_HCLK_CSI_OFFSET, | ||
| 1073 | .disable = _clk_disable, | ||
| 1074 | }, | ||
| 1075 | }; | ||
| 1076 | 499 | ||
| 1077 | static struct clk usb_clk[] = { | 500 | #define DEFINE_CLOCK(name, i, er, es, gr, s, p) \ |
| 1078 | { | 501 | static struct clk name = { \ |
| 1079 | .name = "usb_clk", | 502 | .id = i, \ |
| 1080 | .parent = &spll_clk, | 503 | .enable_reg = er, \ |
| 1081 | .get_rate = _clk_usb_recalc, | 504 | .enable_shift = es, \ |
| 1082 | .enable = _clk_enable, | 505 | .get_rate = gr, \ |
| 1083 | .enable_reg = CCM_PCCR1, | 506 | .enable = clk_pccr_enable, \ |
| 1084 | .enable_shift = CCM_PCCR1_USBOTG_OFFSET, | 507 | .disable = clk_pccr_disable, \ |
| 1085 | .disable = _clk_disable, | 508 | .secondary = s, \ |
| 1086 | }, { | 509 | .parent = p, \ |
| 1087 | .name = "usb_ahb_clk", | ||
| 1088 | .parent = &ahb_clk, | ||
| 1089 | .enable = _clk_enable, | ||
| 1090 | .enable_reg = CCM_PCCR1, | ||
| 1091 | .enable_shift = CCM_PCCR1_HCLK_USBOTG_OFFSET, | ||
| 1092 | .disable = _clk_disable, | ||
| 1093 | } | 510 | } |
| 1094 | }; | ||
| 1095 | 511 | ||
| 1096 | static struct clk ssi1_clk[] = { | 512 | #define DEFINE_CLOCK1(name, i, er, es, getsetround, s, p) \ |
| 1097 | { | 513 | static struct clk name = { \ |
| 1098 | .name = "ssi_clk", | 514 | .id = i, \ |
| 1099 | .id = 0, | 515 | .enable_reg = er, \ |
| 1100 | .parent = &mpll_main_clk[1], | 516 | .enable_shift = es, \ |
| 1101 | .secondary = &ssi1_clk[1], | 517 | .get_rate = get_rate_##getsetround, \ |
| 1102 | .get_rate = _clk_ssi1_recalc, | 518 | .set_rate = set_rate_##getsetround, \ |
| 1103 | .enable = _clk_enable, | 519 | .round_rate = round_rate_##getsetround, \ |
| 1104 | .enable_reg = CCM_PCCR1, | 520 | .enable = clk_pccr_enable, \ |
| 1105 | .enable_shift = CCM_PCCR1_SSI1_BAUD_OFFSET, | 521 | .disable = clk_pccr_disable, \ |
| 1106 | .disable = _clk_disable, | 522 | .secondary = s, \ |
| 1107 | }, { | 523 | .parent = p, \ |
| 1108 | .name = "ssi_ipg_clk", | 524 | } |
| 1109 | .id = 0, | ||
| 1110 | .parent = &ipg_clk, | ||
| 1111 | .enable = _clk_enable, | ||
| 1112 | .enable_reg = CCM_PCCR0, | ||
| 1113 | .enable_shift = CCM_PCCR0_SSI1_IPG_OFFSET, | ||
| 1114 | .disable = _clk_disable, | ||
| 1115 | }, | ||
| 1116 | }; | ||
| 1117 | 525 | ||
| 1118 | static struct clk ssi2_clk[] = { | 526 | /* Forward declaration to keep the following list in order */ |
| 1119 | { | 527 | static struct clk slcdc_clk1, sahara2_clk1, rtic_clk1, fec_clk1, emma_clk1, |
| 1120 | .name = "ssi_clk", | 528 | dma_clk1, lcdc_clk2, vpu_clk1; |
| 1121 | .id = 1, | 529 | |
| 1122 | .parent = &mpll_main_clk[1], | 530 | /* All clocks we can gate through PCCRx in the order of PCCRx bits */ |
| 1123 | .secondary = &ssi2_clk[1], | 531 | DEFINE_CLOCK(ssi2_clk1, 1, PCCR0, 0, NULL, NULL, &ipg_clk); |
| 1124 | .get_rate = _clk_ssi2_recalc, | 532 | DEFINE_CLOCK(ssi1_clk1, 0, PCCR0, 1, NULL, NULL, &ipg_clk); |
| 1125 | .enable = _clk_enable, | 533 | DEFINE_CLOCK(slcdc_clk, 0, PCCR0, 2, NULL, &slcdc_clk1, &ahb_clk); |
| 1126 | .enable_reg = CCM_PCCR1, | 534 | DEFINE_CLOCK(sdhc3_clk1, 0, PCCR0, 3, NULL, NULL, &ipg_clk); |
| 1127 | .enable_shift = CCM_PCCR1_SSI2_BAUD_OFFSET, | 535 | DEFINE_CLOCK(sdhc2_clk1, 0, PCCR0, 4, NULL, NULL, &ipg_clk); |
| 1128 | .disable = _clk_disable, | 536 | DEFINE_CLOCK(sdhc1_clk1, 0, PCCR0, 5, NULL, NULL, &ipg_clk); |
| 1129 | }, { | 537 | DEFINE_CLOCK(scc_clk, 0, PCCR0, 6, NULL, NULL, &ipg_clk); |
| 1130 | .name = "ssi_ipg_clk", | 538 | DEFINE_CLOCK(sahara2_clk, 0, PCCR0, 7, NULL, &sahara2_clk1, &ahb_clk); |
| 1131 | .id = 1, | 539 | DEFINE_CLOCK(rtic_clk, 0, PCCR0, 8, NULL, &rtic_clk1, &ahb_clk); |
| 1132 | .parent = &ipg_clk, | 540 | DEFINE_CLOCK(rtc_clk, 0, PCCR0, 9, NULL, NULL, &ipg_clk); |
| 1133 | .enable = _clk_enable, | 541 | DEFINE_CLOCK(pwm_clk1, 0, PCCR0, 11, NULL, NULL, &ipg_clk); |
| 1134 | .enable_reg = CCM_PCCR0, | 542 | DEFINE_CLOCK(owire_clk, 0, PCCR0, 12, NULL, NULL, &ipg_clk); |
| 1135 | .enable_shift = CCM_PCCR0_SSI2_IPG_OFFSET, | 543 | DEFINE_CLOCK(mstick_clk1, 0, PCCR0, 13, NULL, NULL, &ipg_clk); |
| 1136 | .disable = _clk_disable, | 544 | DEFINE_CLOCK(lcdc_clk1, 0, PCCR0, 14, NULL, &lcdc_clk2, &ipg_clk); |
| 545 | DEFINE_CLOCK(kpp_clk, 0, PCCR0, 15, NULL, NULL, &ipg_clk); | ||
| 546 | DEFINE_CLOCK(iim_clk, 0, PCCR0, 16, NULL, NULL, &ipg_clk); | ||
| 547 | DEFINE_CLOCK(i2c2_clk, 1, PCCR0, 17, NULL, NULL, &ipg_clk); | ||
| 548 | DEFINE_CLOCK(i2c1_clk, 0, PCCR0, 18, NULL, NULL, &ipg_clk); | ||
| 549 | DEFINE_CLOCK(gpt6_clk1, 0, PCCR0, 29, NULL, NULL, &ipg_clk); | ||
| 550 | DEFINE_CLOCK(gpt5_clk1, 0, PCCR0, 20, NULL, NULL, &ipg_clk); | ||
| 551 | DEFINE_CLOCK(gpt4_clk1, 0, PCCR0, 21, NULL, NULL, &ipg_clk); | ||
| 552 | DEFINE_CLOCK(gpt3_clk1, 0, PCCR0, 22, NULL, NULL, &ipg_clk); | ||
| 553 | DEFINE_CLOCK(gpt2_clk1, 0, PCCR0, 23, NULL, NULL, &ipg_clk); | ||
| 554 | DEFINE_CLOCK(gpt1_clk1, 0, PCCR0, 24, NULL, NULL, &ipg_clk); | ||
| 555 | DEFINE_CLOCK(gpio_clk, 0, PCCR0, 25, NULL, NULL, &ipg_clk); | ||
| 556 | DEFINE_CLOCK(fec_clk, 0, PCCR0, 26, NULL, &fec_clk1, &ahb_clk); | ||
| 557 | DEFINE_CLOCK(emma_clk, 0, PCCR0, 27, NULL, &emma_clk1, &ahb_clk); | ||
| 558 | DEFINE_CLOCK(dma_clk, 0, PCCR0, 28, NULL, &dma_clk1, &ahb_clk); | ||
| 559 | DEFINE_CLOCK(cspi13_clk1, 0, PCCR0, 29, NULL, NULL, &ipg_clk); | ||
| 560 | DEFINE_CLOCK(cspi2_clk1, 0, PCCR0, 30, NULL, NULL, &ipg_clk); | ||
| 561 | DEFINE_CLOCK(cspi1_clk1, 0, PCCR0, 31, NULL, NULL, &ipg_clk); | ||
| 562 | |||
| 563 | DEFINE_CLOCK(mstick_clk, 0, PCCR1, 2, NULL, &mstick_clk1, &ipg_clk); | ||
| 564 | DEFINE_CLOCK(nfc_clk, 0, PCCR1, 3, get_rate_nfc, NULL, &cpu_clk); | ||
| 565 | DEFINE_CLOCK(ssi2_clk, 1, PCCR1, 4, get_rate_ssi2, &ssi2_clk1, &mpll_main2_clk); | ||
| 566 | DEFINE_CLOCK(ssi1_clk, 0, PCCR1, 5, get_rate_ssi1, &ssi1_clk1, &mpll_main2_clk); | ||
| 567 | DEFINE_CLOCK(vpu_clk, 0, PCCR1, 6, get_rate_vpu, &vpu_clk1, &mpll_main2_clk); | ||
| 568 | DEFINE_CLOCK1(per4_clk, 3, PCCR1, 7, per, NULL, &mpll_main2_clk); | ||
| 569 | DEFINE_CLOCK1(per3_clk, 2, PCCR1, 8, per, NULL, &mpll_main2_clk); | ||
| 570 | DEFINE_CLOCK1(per2_clk, 1, PCCR1, 9, per, NULL, &mpll_main2_clk); | ||
| 571 | DEFINE_CLOCK1(per1_clk, 0, PCCR1, 10, per, NULL, &mpll_main2_clk); | ||
| 572 | DEFINE_CLOCK(usb_clk1, 0, PCCR1, 11, NULL, NULL, &ahb_clk); | ||
| 573 | DEFINE_CLOCK(slcdc_clk1, 0, PCCR1, 12, NULL, NULL, &ahb_clk); | ||
| 574 | DEFINE_CLOCK(sahara2_clk1, 0, PCCR1, 13, NULL, NULL, &ahb_clk); | ||
| 575 | DEFINE_CLOCK(rtic_clk1, 0, PCCR1, 14, NULL, NULL, &ahb_clk); | ||
| 576 | DEFINE_CLOCK(lcdc_clk2, 0, PCCR1, 15, NULL, NULL, &ahb_clk); | ||
| 577 | DEFINE_CLOCK(vpu_clk1, 0, PCCR1, 16, NULL, NULL, &ahb_clk); | ||
| 578 | DEFINE_CLOCK(fec_clk1, 0, PCCR1, 17, NULL, NULL, &ahb_clk); | ||
| 579 | DEFINE_CLOCK(emma_clk1, 0, PCCR1, 18, NULL, NULL, &ahb_clk); | ||
| 580 | DEFINE_CLOCK(emi_clk, 0, PCCR1, 19, NULL, NULL, &ahb_clk); | ||
| 581 | DEFINE_CLOCK(dma_clk1, 0, PCCR1, 20, NULL, NULL, &ahb_clk); | ||
| 582 | DEFINE_CLOCK(csi_clk1, 0, PCCR1, 21, NULL, NULL, &ahb_clk); | ||
| 583 | DEFINE_CLOCK(brom_clk, 0, PCCR1, 22, NULL, NULL, &ahb_clk); | ||
| 584 | DEFINE_CLOCK(ata_clk, 0, PCCR1, 23, NULL, NULL, &ahb_clk); | ||
| 585 | DEFINE_CLOCK(wdog_clk, 0, PCCR1, 24, NULL, NULL, &ipg_clk); | ||
| 586 | DEFINE_CLOCK(usb_clk, 0, PCCR1, 25, get_rate_usb, &usb_clk1, &spll_clk); | ||
| 587 | DEFINE_CLOCK(uart6_clk1, 0, PCCR1, 26, NULL, NULL, &ipg_clk); | ||
| 588 | DEFINE_CLOCK(uart5_clk1, 0, PCCR1, 27, NULL, NULL, &ipg_clk); | ||
| 589 | DEFINE_CLOCK(uart4_clk1, 0, PCCR1, 28, NULL, NULL, &ipg_clk); | ||
| 590 | DEFINE_CLOCK(uart3_clk1, 0, PCCR1, 29, NULL, NULL, &ipg_clk); | ||
| 591 | DEFINE_CLOCK(uart2_clk1, 0, PCCR1, 30, NULL, NULL, &ipg_clk); | ||
| 592 | DEFINE_CLOCK(uart1_clk1, 0, PCCR1, 31, NULL, NULL, &ipg_clk); | ||
| 593 | |||
| 594 | /* Clocks we cannot directly gate, but drivers need their rates */ | ||
| 595 | DEFINE_CLOCK(cspi1_clk, 0, 0, 0, NULL, &cspi1_clk1, &per2_clk); | ||
| 596 | DEFINE_CLOCK(cspi2_clk, 1, 0, 0, NULL, &cspi2_clk1, &per2_clk); | ||
| 597 | DEFINE_CLOCK(cspi3_clk, 2, 0, 0, NULL, &cspi13_clk1, &per2_clk); | ||
| 598 | DEFINE_CLOCK(sdhc1_clk, 0, 0, 0, NULL, &sdhc1_clk1, &per2_clk); | ||
| 599 | DEFINE_CLOCK(sdhc2_clk, 1, 0, 0, NULL, &sdhc2_clk1, &per2_clk); | ||
| 600 | DEFINE_CLOCK(sdhc3_clk, 2, 0, 0, NULL, &sdhc3_clk1, &per2_clk); | ||
| 601 | DEFINE_CLOCK(pwm_clk, 0, 0, 0, NULL, &pwm_clk1, &per1_clk); | ||
| 602 | DEFINE_CLOCK(gpt1_clk, 0, 0, 0, NULL, &gpt1_clk1, &per1_clk); | ||
| 603 | DEFINE_CLOCK(gpt2_clk, 1, 0, 0, NULL, &gpt2_clk1, &per1_clk); | ||
| 604 | DEFINE_CLOCK(gpt3_clk, 2, 0, 0, NULL, &gpt3_clk1, &per1_clk); | ||
| 605 | DEFINE_CLOCK(gpt4_clk, 3, 0, 0, NULL, &gpt4_clk1, &per1_clk); | ||
| 606 | DEFINE_CLOCK(gpt5_clk, 4, 0, 0, NULL, &gpt5_clk1, &per1_clk); | ||
| 607 | DEFINE_CLOCK(gpt6_clk, 5, 0, 0, NULL, &gpt6_clk1, &per1_clk); | ||
| 608 | DEFINE_CLOCK(uart1_clk, 0, 0, 0, NULL, &uart1_clk1, &per1_clk); | ||
| 609 | DEFINE_CLOCK(uart2_clk, 1, 0, 0, NULL, &uart2_clk1, &per1_clk); | ||
| 610 | DEFINE_CLOCK(uart3_clk, 2, 0, 0, NULL, &uart3_clk1, &per1_clk); | ||
| 611 | DEFINE_CLOCK(uart4_clk, 3, 0, 0, NULL, &uart4_clk1, &per1_clk); | ||
| 612 | DEFINE_CLOCK(uart5_clk, 4, 0, 0, NULL, &uart5_clk1, &per1_clk); | ||
| 613 | DEFINE_CLOCK(uart6_clk, 5, 0, 0, NULL, &uart6_clk1, &per1_clk); | ||
| 614 | DEFINE_CLOCK1(lcdc_clk, 0, 0, 0, parent, &lcdc_clk1, &per3_clk); | ||
| 615 | DEFINE_CLOCK1(csi_clk, 0, 0, 0, parent, &csi_clk1, &per4_clk); | ||
| 616 | |||
| 617 | #define _REGISTER_CLOCK(d, n, c) \ | ||
| 618 | { \ | ||
| 619 | .dev_id = d, \ | ||
| 620 | .con_id = n, \ | ||
| 621 | .clk = &c, \ | ||
| 1137 | }, | 622 | }, |
| 1138 | }; | ||
| 1139 | |||
| 1140 | static struct clk nfc_clk = { | ||
| 1141 | .name = "nfc_clk", | ||
| 1142 | .parent = &cpu_clk, | ||
| 1143 | .get_rate = _clk_nfc_recalc, | ||
| 1144 | .enable = _clk_enable, | ||
| 1145 | .enable_reg = CCM_PCCR1, | ||
| 1146 | .enable_shift = CCM_PCCR1_NFC_BAUD_OFFSET, | ||
| 1147 | .disable = _clk_disable, | ||
| 1148 | }; | ||
| 1149 | |||
| 1150 | static struct clk vpu_clk = { | ||
| 1151 | .name = "vpu_clk", | ||
| 1152 | .parent = &mpll_main_clk[1], | ||
| 1153 | .get_rate = _clk_vpu_recalc, | ||
| 1154 | .enable = _clk_vpu_enable, | ||
| 1155 | .disable = _clk_vpu_disable, | ||
| 1156 | }; | ||
| 1157 | |||
| 1158 | static struct clk dma_clk = { | ||
| 1159 | .name = "dma_clk", | ||
| 1160 | .parent = &ahb_clk, | ||
| 1161 | .enable = _clk_dma_enable, | ||
| 1162 | .disable = _clk_dma_disable, | ||
| 1163 | }; | ||
| 1164 | |||
| 1165 | static struct clk rtic_clk = { | ||
| 1166 | .name = "rtic_clk", | ||
| 1167 | .parent = &ahb_clk, | ||
| 1168 | .enable = _clk_rtic_enable, | ||
| 1169 | .disable = _clk_rtic_disable, | ||
| 1170 | }; | ||
| 1171 | 623 | ||
| 1172 | static struct clk brom_clk = { | 624 | static struct clk_lookup lookups[] __initdata = { |
| 1173 | .name = "brom_clk", | 625 | _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) |
| 1174 | .parent = &ahb_clk, | 626 | _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) |
| 1175 | .enable = _clk_enable, | 627 | _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) |
| 1176 | .enable_reg = CCM_PCCR1, | 628 | _REGISTER_CLOCK("imx-uart.3", NULL, uart4_clk) |
| 1177 | .enable_shift = CCM_PCCR1_HCLK_BROM_OFFSET, | 629 | _REGISTER_CLOCK("imx-uart.4", NULL, uart5_clk) |
| 1178 | .disable = _clk_disable, | 630 | _REGISTER_CLOCK("imx-uart.5", NULL, uart6_clk) |
| 1179 | }; | 631 | _REGISTER_CLOCK(NULL, "gpt1", gpt1_clk) |
| 1180 | 632 | _REGISTER_CLOCK(NULL, "gpt2", gpt2_clk) | |
| 1181 | static struct clk emma_clk = { | 633 | _REGISTER_CLOCK(NULL, "gpt3", gpt3_clk) |
| 1182 | .name = "emma_clk", | 634 | _REGISTER_CLOCK(NULL, "gpt4", gpt4_clk) |
| 1183 | .parent = &ahb_clk, | 635 | _REGISTER_CLOCK(NULL, "gpt5", gpt5_clk) |
| 1184 | .enable = _clk_emma_enable, | 636 | _REGISTER_CLOCK(NULL, "gpt6", gpt6_clk) |
| 1185 | .disable = _clk_emma_disable, | 637 | _REGISTER_CLOCK("mxc_pwm.0", NULL, pwm_clk) |
| 1186 | }; | 638 | _REGISTER_CLOCK("mxc-mmc.0", NULL, sdhc1_clk) |
| 1187 | 639 | _REGISTER_CLOCK("mxc-mmc.1", NULL, sdhc2_clk) | |
| 1188 | static struct clk slcdc_clk = { | 640 | _REGISTER_CLOCK("mxc-mmc.2", NULL, sdhc3_clk) |
| 1189 | .name = "slcdc_clk", | 641 | _REGISTER_CLOCK(NULL, "cspi1", cspi1_clk) |
| 1190 | .parent = &ahb_clk, | 642 | _REGISTER_CLOCK(NULL, "cspi2", cspi2_clk) |
| 1191 | .enable = _clk_slcdc_enable, | 643 | _REGISTER_CLOCK(NULL, "cspi3", cspi3_clk) |
| 1192 | .disable = _clk_slcdc_disable, | 644 | _REGISTER_CLOCK("imx-fb.0", NULL, lcdc_clk) |
| 1193 | }; | 645 | _REGISTER_CLOCK(NULL, "csi", csi_clk) |
| 1194 | 646 | _REGISTER_CLOCK(NULL, "usb", usb_clk) | |
| 1195 | static struct clk fec_clk = { | 647 | _REGISTER_CLOCK(NULL, "ssi1", ssi1_clk) |
| 1196 | .name = "fec_clk", | 648 | _REGISTER_CLOCK(NULL, "ssi2", ssi2_clk) |
| 1197 | .parent = &ahb_clk, | 649 | _REGISTER_CLOCK("mxc_nand.0", NULL, nfc_clk) |
| 1198 | .enable = _clk_fec_enable, | 650 | _REGISTER_CLOCK(NULL, "vpu", vpu_clk) |
| 1199 | .disable = _clk_fec_disable, | 651 | _REGISTER_CLOCK(NULL, "dma", dma_clk) |
| 1200 | }; | 652 | _REGISTER_CLOCK(NULL, "rtic", rtic_clk) |
| 1201 | 653 | _REGISTER_CLOCK(NULL, "brom", brom_clk) | |
| 1202 | static struct clk emi_clk = { | 654 | _REGISTER_CLOCK(NULL, "emma", emma_clk) |
| 1203 | .name = "emi_clk", | 655 | _REGISTER_CLOCK(NULL, "slcdc", slcdc_clk) |
| 1204 | .parent = &ahb_clk, | 656 | _REGISTER_CLOCK("fec.0", NULL, fec_clk) |
| 1205 | .enable = _clk_enable, | 657 | _REGISTER_CLOCK(NULL, "emi", emi_clk) |
| 1206 | .enable_reg = CCM_PCCR1, | 658 | _REGISTER_CLOCK(NULL, "sahara2", sahara2_clk) |
| 1207 | .enable_shift = CCM_PCCR1_HCLK_EMI_OFFSET, | 659 | _REGISTER_CLOCK(NULL, "ata", ata_clk) |
| 1208 | .disable = _clk_disable, | 660 | _REGISTER_CLOCK(NULL, "mstick", mstick_clk) |
| 1209 | }; | 661 | _REGISTER_CLOCK(NULL, "wdog", wdog_clk) |
| 1210 | 662 | _REGISTER_CLOCK(NULL, "gpio", gpio_clk) | |
| 1211 | static struct clk sahara2_clk = { | 663 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) |
| 1212 | .name = "sahara_clk", | 664 | _REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk) |
| 1213 | .parent = &ahb_clk, | 665 | _REGISTER_CLOCK(NULL, "iim", iim_clk) |
| 1214 | .enable = _clk_sahara2_enable, | 666 | _REGISTER_CLOCK(NULL, "kpp", kpp_clk) |
| 1215 | .disable = _clk_sahara2_disable, | 667 | _REGISTER_CLOCK("mxc_w1.0", NULL, owire_clk) |
| 1216 | }; | 668 | _REGISTER_CLOCK(NULL, "rtc", rtc_clk) |
| 1217 | 669 | _REGISTER_CLOCK(NULL, "scc", scc_clk) | |
| 1218 | static struct clk ata_clk = { | 670 | }; |
| 1219 | .name = "ata_clk", | 671 | |
| 1220 | .parent = &ahb_clk, | 672 | /* Adjust the clock path for TO2 and later */ |
| 1221 | .enable = _clk_enable, | 673 | static void __init to2_adjust_clocks(void) |
| 1222 | .enable_reg = CCM_PCCR1, | 674 | { |
| 1223 | .enable_shift = CCM_PCCR1_HCLK_ATA_OFFSET, | 675 | unsigned long cscr = __raw_readl(CCM_CSCR); |
| 1224 | .disable = _clk_disable, | ||
| 1225 | }; | ||
| 1226 | |||
| 1227 | static struct clk mstick1_clk = { | ||
| 1228 | .name = "mstick1_clk", | ||
| 1229 | .parent = &ipg_clk, | ||
| 1230 | .enable = _clk_mstick1_enable, | ||
| 1231 | .disable = _clk_mstick1_disable, | ||
| 1232 | }; | ||
| 1233 | |||
| 1234 | static struct clk wdog_clk = { | ||
| 1235 | .name = "wdog_clk", | ||
| 1236 | .parent = &ipg_clk, | ||
| 1237 | .enable = _clk_enable, | ||
| 1238 | .enable_reg = CCM_PCCR1, | ||
| 1239 | .enable_shift = CCM_PCCR1_WDT_OFFSET, | ||
| 1240 | .disable = _clk_disable, | ||
| 1241 | }; | ||
| 1242 | |||
| 1243 | static struct clk gpio_clk = { | ||
| 1244 | .name = "gpio_clk", | ||
| 1245 | .parent = &ipg_clk, | ||
| 1246 | .enable = _clk_enable, | ||
| 1247 | .enable_reg = CCM_PCCR1, | ||
| 1248 | .enable_shift = CCM_PCCR0_GPIO_OFFSET, | ||
| 1249 | .disable = _clk_disable, | ||
| 1250 | }; | ||
| 1251 | |||
| 1252 | static struct clk i2c_clk[] = { | ||
| 1253 | { | ||
| 1254 | .name = "i2c_clk", | ||
| 1255 | .id = 0, | ||
| 1256 | .parent = &ipg_clk, | ||
| 1257 | .enable = _clk_enable, | ||
| 1258 | .enable_reg = CCM_PCCR0, | ||
| 1259 | .enable_shift = CCM_PCCR0_I2C1_OFFSET, | ||
| 1260 | .disable = _clk_disable, | ||
| 1261 | }, { | ||
| 1262 | .name = "i2c_clk", | ||
| 1263 | .id = 1, | ||
| 1264 | .parent = &ipg_clk, | ||
| 1265 | .enable = _clk_enable, | ||
| 1266 | .enable_reg = CCM_PCCR0, | ||
| 1267 | .enable_shift = CCM_PCCR0_I2C2_OFFSET, | ||
| 1268 | .disable = _clk_disable, | ||
| 1269 | }, | ||
| 1270 | }; | ||
| 1271 | |||
| 1272 | static struct clk iim_clk = { | ||
| 1273 | .name = "iim_clk", | ||
| 1274 | .parent = &ipg_clk, | ||
| 1275 | .enable = _clk_enable, | ||
| 1276 | .enable_reg = CCM_PCCR0, | ||
| 1277 | .enable_shift = CCM_PCCR0_IIM_OFFSET, | ||
| 1278 | .disable = _clk_disable, | ||
| 1279 | }; | ||
| 1280 | |||
| 1281 | static struct clk kpp_clk = { | ||
| 1282 | .name = "kpp_clk", | ||
| 1283 | .parent = &ipg_clk, | ||
| 1284 | .enable = _clk_enable, | ||
| 1285 | .enable_reg = CCM_PCCR0, | ||
| 1286 | .enable_shift = CCM_PCCR0_KPP_OFFSET, | ||
| 1287 | .disable = _clk_disable, | ||
| 1288 | }; | ||
| 1289 | |||
| 1290 | static struct clk owire_clk = { | ||
| 1291 | .name = "owire_clk", | ||
| 1292 | .parent = &ipg_clk, | ||
| 1293 | .enable = _clk_enable, | ||
| 1294 | .enable_reg = CCM_PCCR0, | ||
| 1295 | .enable_shift = CCM_PCCR0_OWIRE_OFFSET, | ||
| 1296 | .disable = _clk_disable, | ||
| 1297 | }; | ||
| 1298 | |||
| 1299 | static struct clk rtc_clk = { | ||
| 1300 | .name = "rtc_clk", | ||
| 1301 | .parent = &ipg_clk, | ||
| 1302 | .enable = _clk_enable, | ||
| 1303 | .enable_reg = CCM_PCCR0, | ||
| 1304 | .enable_shift = CCM_PCCR0_RTC_OFFSET, | ||
| 1305 | .disable = _clk_disable, | ||
| 1306 | }; | ||
| 1307 | |||
| 1308 | static struct clk scc_clk = { | ||
| 1309 | .name = "scc_clk", | ||
| 1310 | .parent = &ipg_clk, | ||
| 1311 | .enable = _clk_enable, | ||
| 1312 | .enable_reg = CCM_PCCR0, | ||
| 1313 | .enable_shift = CCM_PCCR0_SCC_OFFSET, | ||
| 1314 | .disable = _clk_disable, | ||
| 1315 | }; | ||
| 1316 | |||
| 1317 | static unsigned long _clk_clko_round_rate(struct clk *clk, unsigned long rate) | ||
| 1318 | { | ||
| 1319 | u32 div; | ||
| 1320 | unsigned long parent_rate; | ||
| 1321 | |||
| 1322 | parent_rate = clk_get_rate(clk->parent); | ||
| 1323 | div = parent_rate / rate; | ||
| 1324 | if (parent_rate % rate) | ||
| 1325 | div++; | ||
| 1326 | |||
| 1327 | if (div > 8) | ||
| 1328 | div = 8; | ||
| 1329 | |||
| 1330 | return parent_rate / div; | ||
| 1331 | } | ||
| 1332 | |||
| 1333 | static int _clk_clko_set_rate(struct clk *clk, unsigned long rate) | ||
| 1334 | { | ||
| 1335 | u32 reg; | ||
| 1336 | u32 div; | ||
| 1337 | unsigned long parent_rate; | ||
| 1338 | |||
| 1339 | parent_rate = clk_get_rate(clk->parent); | ||
| 1340 | |||
| 1341 | div = parent_rate / rate; | ||
| 1342 | |||
| 1343 | if (div > 8 || div < 1 || ((parent_rate / div) != rate)) | ||
| 1344 | return -EINVAL; | ||
| 1345 | div--; | ||
| 1346 | |||
| 1347 | reg = __raw_readl(CCM_PCDR0) & ~CCM_PCDR0_CLKODIV_MASK; | ||
| 1348 | reg |= div << CCM_PCDR0_CLKODIV_OFFSET; | ||
| 1349 | __raw_writel(reg, CCM_PCDR0); | ||
| 1350 | |||
| 1351 | return 0; | ||
| 1352 | } | ||
| 1353 | |||
| 1354 | static unsigned long _clk_clko_recalc(struct clk *clk) | ||
| 1355 | { | ||
| 1356 | u32 div; | ||
| 1357 | unsigned long parent_rate; | ||
| 1358 | |||
| 1359 | parent_rate = clk_get_rate(clk->parent); | ||
| 1360 | |||
| 1361 | div = __raw_readl(CCM_PCDR0) & CCM_PCDR0_CLKODIV_MASK >> | ||
| 1362 | CCM_PCDR0_CLKODIV_OFFSET; | ||
| 1363 | div++; | ||
| 1364 | |||
| 1365 | return parent_rate / div; | ||
| 1366 | } | ||
| 1367 | |||
| 1368 | static int _clk_clko_set_parent(struct clk *clk, struct clk *parent) | ||
| 1369 | { | ||
| 1370 | u32 reg; | ||
| 1371 | |||
| 1372 | reg = __raw_readl(CCM_CCSR) & ~CCM_CCSR_CLKOSEL_MASK; | ||
| 1373 | |||
| 1374 | if (parent == &ckil_clk) | ||
| 1375 | reg |= 0 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1376 | else if (parent == &ckih_clk) | ||
| 1377 | reg |= 2 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1378 | else if (parent == mpll_clk.parent) | ||
| 1379 | reg |= 3 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1380 | else if (parent == spll_clk.parent) | ||
| 1381 | reg |= 4 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1382 | else if (parent == &mpll_clk) | ||
| 1383 | reg |= 5 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1384 | else if (parent == &spll_clk) | ||
| 1385 | reg |= 6 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1386 | else if (parent == &cpu_clk) | ||
| 1387 | reg |= 7 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1388 | else if (parent == &ahb_clk) | ||
| 1389 | reg |= 8 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1390 | else if (parent == &ipg_clk) | ||
| 1391 | reg |= 9 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1392 | else if (parent == &per_clk[0]) | ||
| 1393 | reg |= 0xA << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1394 | else if (parent == &per_clk[1]) | ||
| 1395 | reg |= 0xB << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1396 | else if (parent == &per_clk[2]) | ||
| 1397 | reg |= 0xC << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1398 | else if (parent == &per_clk[3]) | ||
| 1399 | reg |= 0xD << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1400 | else if (parent == &ssi1_clk[0]) | ||
| 1401 | reg |= 0xE << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1402 | else if (parent == &ssi2_clk[0]) | ||
| 1403 | reg |= 0xF << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1404 | else if (parent == &nfc_clk) | ||
| 1405 | reg |= 0x10 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1406 | else if (parent == &mstick1_clk) | ||
| 1407 | reg |= 0x11 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1408 | else if (parent == &vpu_clk) | ||
| 1409 | reg |= 0x12 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1410 | else if (parent == &usb_clk[0]) | ||
| 1411 | reg |= 0x15 << CCM_CCSR_CLKOSEL_OFFSET; | ||
| 1412 | else | ||
| 1413 | return -EINVAL; | ||
| 1414 | |||
| 1415 | __raw_writel(reg, CCM_CCSR); | ||
| 1416 | |||
| 1417 | return 0; | ||
| 1418 | } | ||
| 1419 | |||
| 1420 | static int _clk_clko_enable(struct clk *clk) | ||
| 1421 | { | ||
| 1422 | u32 reg; | ||
| 1423 | |||
| 1424 | reg = __raw_readl(CCM_PCDR0) | CCM_PCDR0_CLKO_EN; | ||
| 1425 | __raw_writel(reg, CCM_PCDR0); | ||
| 1426 | |||
| 1427 | return 0; | ||
| 1428 | } | ||
| 1429 | |||
| 1430 | static void _clk_clko_disable(struct clk *clk) | ||
| 1431 | { | ||
| 1432 | u32 reg; | ||
| 1433 | |||
| 1434 | reg = __raw_readl(CCM_PCDR0) & ~CCM_PCDR0_CLKO_EN; | ||
| 1435 | __raw_writel(reg, CCM_PCDR0); | ||
| 1436 | } | ||
| 1437 | |||
| 1438 | static struct clk clko_clk = { | ||
| 1439 | .name = "clko_clk", | ||
| 1440 | .get_rate = _clk_clko_recalc, | ||
| 1441 | .set_rate = _clk_clko_set_rate, | ||
| 1442 | .round_rate = _clk_clko_round_rate, | ||
| 1443 | .set_parent = _clk_clko_set_parent, | ||
| 1444 | .enable = _clk_clko_enable, | ||
| 1445 | .disable = _clk_clko_disable, | ||
| 1446 | }; | ||
| 1447 | |||
| 1448 | static struct clk *mxc_clks[] = { | ||
| 1449 | &ckih_clk, | ||
| 1450 | &ckil_clk, | ||
| 1451 | &mpll_clk, | ||
| 1452 | &mpll_main_clk[0], | ||
| 1453 | &mpll_main_clk[1], | ||
| 1454 | &spll_clk, | ||
| 1455 | &cpu_clk, | ||
| 1456 | &ahb_clk, | ||
| 1457 | &ipg_clk, | ||
| 1458 | &per_clk[0], | ||
| 1459 | &per_clk[1], | ||
| 1460 | &per_clk[2], | ||
| 1461 | &per_clk[3], | ||
| 1462 | &clko_clk, | ||
| 1463 | &uart1_clk[0], | ||
| 1464 | &uart1_clk[1], | ||
| 1465 | &uart2_clk[0], | ||
| 1466 | &uart2_clk[1], | ||
| 1467 | &uart3_clk[0], | ||
| 1468 | &uart3_clk[1], | ||
| 1469 | &uart4_clk[0], | ||
| 1470 | &uart4_clk[1], | ||
| 1471 | &uart5_clk[0], | ||
| 1472 | &uart5_clk[1], | ||
| 1473 | &uart6_clk[0], | ||
| 1474 | &uart6_clk[1], | ||
| 1475 | &gpt1_clk[0], | ||
| 1476 | &gpt1_clk[1], | ||
| 1477 | &gpt2_clk[0], | ||
| 1478 | &gpt2_clk[1], | ||
| 1479 | &gpt3_clk[0], | ||
| 1480 | &gpt3_clk[1], | ||
| 1481 | &gpt4_clk[0], | ||
| 1482 | &gpt4_clk[1], | ||
| 1483 | &gpt5_clk[0], | ||
| 1484 | &gpt5_clk[1], | ||
| 1485 | &gpt6_clk[0], | ||
| 1486 | &gpt6_clk[1], | ||
| 1487 | &pwm_clk[0], | ||
| 1488 | &pwm_clk[1], | ||
| 1489 | &sdhc1_clk[0], | ||
| 1490 | &sdhc1_clk[1], | ||
| 1491 | &sdhc2_clk[0], | ||
| 1492 | &sdhc2_clk[1], | ||
| 1493 | &sdhc3_clk[0], | ||
| 1494 | &sdhc3_clk[1], | ||
| 1495 | &cspi1_clk[0], | ||
| 1496 | &cspi1_clk[1], | ||
| 1497 | &cspi2_clk[0], | ||
| 1498 | &cspi2_clk[1], | ||
| 1499 | &cspi3_clk[0], | ||
| 1500 | &cspi3_clk[1], | ||
| 1501 | &lcdc_clk[0], | ||
| 1502 | &lcdc_clk[1], | ||
| 1503 | &lcdc_clk[2], | ||
| 1504 | &csi_clk[0], | ||
| 1505 | &csi_clk[1], | ||
| 1506 | &usb_clk[0], | ||
| 1507 | &usb_clk[1], | ||
| 1508 | &ssi1_clk[0], | ||
| 1509 | &ssi1_clk[1], | ||
| 1510 | &ssi2_clk[0], | ||
| 1511 | &ssi2_clk[1], | ||
| 1512 | &nfc_clk, | ||
| 1513 | &vpu_clk, | ||
| 1514 | &dma_clk, | ||
| 1515 | &rtic_clk, | ||
| 1516 | &brom_clk, | ||
| 1517 | &emma_clk, | ||
| 1518 | &slcdc_clk, | ||
| 1519 | &fec_clk, | ||
| 1520 | &emi_clk, | ||
| 1521 | &sahara2_clk, | ||
| 1522 | &ata_clk, | ||
| 1523 | &mstick1_clk, | ||
| 1524 | &wdog_clk, | ||
| 1525 | &gpio_clk, | ||
| 1526 | &i2c_clk[0], | ||
| 1527 | &i2c_clk[1], | ||
| 1528 | &iim_clk, | ||
| 1529 | &kpp_clk, | ||
| 1530 | &owire_clk, | ||
| 1531 | &rtc_clk, | ||
| 1532 | &scc_clk, | ||
| 1533 | }; | ||
| 1534 | |||
| 1535 | void __init change_external_low_reference(unsigned long new_ref) | ||
| 1536 | { | ||
| 1537 | external_low_reference = new_ref; | ||
| 1538 | } | ||
| 1539 | |||
| 1540 | unsigned long __init clk_early_get_timer_rate(void) | ||
| 1541 | { | ||
| 1542 | return clk_get_rate(&per_clk[0]); | ||
| 1543 | } | ||
| 1544 | |||
| 1545 | static void __init probe_mxc_clocks(void) | ||
| 1546 | { | ||
| 1547 | int i; | ||
| 1548 | 676 | ||
| 1549 | if (mx27_revision() >= CHIP_REV_2_0) { | 677 | if (mx27_revision() >= CHIP_REV_2_0) { |
| 1550 | if (CSCR() & 0x8000) | 678 | if (cscr & CCM_CSCR_ARM_SRC) |
| 1551 | cpu_clk.parent = &mpll_main_clk[0]; | 679 | cpu_clk.parent = &mpll_main1_clk; |
| 1552 | 680 | ||
| 1553 | if (!(CSCR() & 0x00800000)) | 681 | if (!(cscr & CCM_CSCR_SSI2)) |
| 1554 | ssi2_clk[0].parent = &spll_clk; | 682 | ssi1_clk.parent = &spll_clk; |
| 1555 | 683 | ||
| 1556 | if (!(CSCR() & 0x00400000)) | 684 | if (!(cscr & CCM_CSCR_SSI1)) |
| 1557 | ssi1_clk[0].parent = &spll_clk; | 685 | ssi1_clk.parent = &spll_clk; |
| 1558 | 686 | ||
| 1559 | if (!(CSCR() & 0x00200000)) | 687 | if (!(cscr & CCM_CSCR_VPU)) |
| 1560 | vpu_clk.parent = &spll_clk; | 688 | vpu_clk.parent = &spll_clk; |
| 1561 | } else { | 689 | } else { |
| 1562 | cpu_clk.parent = &mpll_clk; | 690 | cpu_clk.parent = &mpll_clk; |
| @@ -1565,11 +693,13 @@ static void __init probe_mxc_clocks(void) | |||
| 1565 | cpu_clk.set_rate = NULL; | 693 | cpu_clk.set_rate = NULL; |
| 1566 | ahb_clk.parent = &mpll_clk; | 694 | ahb_clk.parent = &mpll_clk; |
| 1567 | 695 | ||
| 1568 | for (i = 0; i < sizeof(per_clk) / sizeof(per_clk[0]); i++) | 696 | per1_clk.parent = &mpll_clk; |
| 1569 | per_clk[i].parent = &mpll_clk; | 697 | per2_clk.parent = &mpll_clk; |
| 698 | per3_clk.parent = &mpll_clk; | ||
| 699 | per4_clk.parent = &mpll_clk; | ||
| 1570 | 700 | ||
| 1571 | ssi1_clk[0].parent = &mpll_clk; | 701 | ssi1_clk.parent = &mpll_clk; |
| 1572 | ssi2_clk[0].parent = &mpll_clk; | 702 | ssi2_clk.parent = &mpll_clk; |
| 1573 | 703 | ||
| 1574 | vpu_clk.parent = &mpll_clk; | 704 | vpu_clk.parent = &mpll_clk; |
| 1575 | } | 705 | } |
| @@ -1579,47 +709,47 @@ static void __init probe_mxc_clocks(void) | |||
| 1579 | * must be called very early to get information about the | 709 | * must be called very early to get information about the |
| 1580 | * available clock rate when the timer framework starts | 710 | * available clock rate when the timer framework starts |
| 1581 | */ | 711 | */ |
| 1582 | int __init mxc_clocks_init(unsigned long fref) | 712 | int __init mx27_clocks_init(unsigned long fref) |
| 1583 | { | 713 | { |
| 1584 | u32 cscr; | 714 | u32 cscr = __raw_readl(CCM_CSCR); |
| 1585 | struct clk **clkp; | 715 | int i; |
| 1586 | 716 | ||
| 1587 | external_high_reference = fref; | 717 | external_high_reference = fref; |
| 1588 | 718 | ||
| 1589 | /* detect clock reference for both system PLL */ | 719 | /* detect clock reference for both system PLLs */ |
| 1590 | cscr = CSCR(); | ||
| 1591 | if (cscr & CCM_CSCR_MCU) | 720 | if (cscr & CCM_CSCR_MCU) |
| 1592 | mpll_clk.parent = &ckih_clk; | 721 | mpll_clk.parent = &ckih_clk; |
| 1593 | else | 722 | else |
| 1594 | mpll_clk.parent = &ckil_clk; | 723 | mpll_clk.parent = &fpm_clk; |
| 1595 | 724 | ||
| 1596 | if (cscr & CCM_CSCR_SP) | 725 | if (cscr & CCM_CSCR_SP) |
| 1597 | spll_clk.parent = &ckih_clk; | 726 | spll_clk.parent = &ckih_clk; |
| 1598 | else | 727 | else |
| 1599 | spll_clk.parent = &ckil_clk; | 728 | spll_clk.parent = &fpm_clk; |
| 1600 | 729 | ||
| 1601 | probe_mxc_clocks(); | 730 | to2_adjust_clocks(); |
| 1602 | 731 | ||
| 1603 | per_clk[0].enable(&per_clk[0]); | 732 | for (i = 0; i < ARRAY_SIZE(lookups); i++) |
| 1604 | gpt1_clk[1].enable(&gpt1_clk[1]); | 733 | clkdev_add(&lookups[i]); |
| 1605 | 734 | ||
| 1606 | for (clkp = mxc_clks; clkp < mxc_clks + ARRAY_SIZE(mxc_clks); clkp++) | 735 | /* Turn off all clocks we do not need */ |
| 1607 | clk_register(*clkp); | 736 | __raw_writel(0, CCM_PCCR0); |
| 737 | __raw_writel((1 << 10) | (1 << 19), CCM_PCCR1); | ||
| 1608 | 738 | ||
| 1609 | /* Turn off all possible clocks */ | ||
| 1610 | __raw_writel(CCM_PCCR0_GPT1_MASK, CCM_PCCR0); | ||
| 1611 | __raw_writel(CCM_PCCR1_PERCLK1_MASK | CCM_PCCR1_HCLK_EMI_MASK, | ||
| 1612 | CCM_PCCR1); | ||
| 1613 | spll_clk.disable(&spll_clk); | 739 | spll_clk.disable(&spll_clk); |
| 1614 | 740 | ||
| 1615 | /* This will propagate to all children and init all the clock rates */ | 741 | /* enable basic clocks */ |
| 1616 | 742 | clk_enable(&per1_clk); | |
| 1617 | clk_enable(&emi_clk); | ||
| 1618 | clk_enable(&gpio_clk); | 743 | clk_enable(&gpio_clk); |
| 744 | clk_enable(&emi_clk); | ||
| 1619 | clk_enable(&iim_clk); | 745 | clk_enable(&iim_clk); |
| 1620 | clk_enable(&gpt1_clk[0]); | 746 | |
| 1621 | #ifdef CONFIG_DEBUG_LL_CONSOLE | 747 | #ifdef CONFIG_DEBUG_LL_CONSOLE |
| 1622 | clk_enable(&uart1_clk[0]); | 748 | clk_enable(&uart1_clk); |
| 1623 | #endif | 749 | #endif |
| 750 | |||
| 751 | mxc_timer_init(&gpt1_clk); | ||
| 752 | |||
| 1624 | return 0; | 753 | return 0; |
| 1625 | } | 754 | } |
| 755 | |||
diff --git a/arch/arm/mach-mx2/cpu_imx27.c b/arch/arm/mach-mx2/cpu_imx27.c index 239308fe6652..d9e3bf9644c9 100644 --- a/arch/arm/mach-mx2/cpu_imx27.c +++ b/arch/arm/mach-mx2/cpu_imx27.c | |||
| @@ -26,11 +26,11 @@ | |||
| 26 | 26 | ||
| 27 | #include <mach/hardware.h> | 27 | #include <mach/hardware.h> |
| 28 | 28 | ||
| 29 | #include "crm_regs.h" | ||
| 30 | |||
| 31 | static int cpu_silicon_rev = -1; | 29 | static int cpu_silicon_rev = -1; |
| 32 | static int cpu_partnumber; | 30 | static int cpu_partnumber; |
| 33 | 31 | ||
| 32 | #define SYS_CHIP_ID 0x00 /* The offset of CHIP ID register */ | ||
| 33 | |||
| 34 | static void query_silicon_parameter(void) | 34 | static void query_silicon_parameter(void) |
| 35 | { | 35 | { |
| 36 | u32 val; | 36 | u32 val; |
diff --git a/arch/arm/mach-mx2/crm_regs.h b/arch/arm/mach-mx2/crm_regs.h index 94644cd0a0fc..749de76b3f95 100644 --- a/arch/arm/mach-mx2/crm_regs.h +++ b/arch/arm/mach-mx2/crm_regs.h | |||
| @@ -38,42 +38,36 @@ | |||
| 38 | #define CCM_PMCOUNT (IO_ADDRESS(CCM_BASE_ADDR) + 0x30) | 38 | #define CCM_PMCOUNT (IO_ADDRESS(CCM_BASE_ADDR) + 0x30) |
| 39 | #define CCM_WKGDCTL (IO_ADDRESS(CCM_BASE_ADDR) + 0x34) | 39 | #define CCM_WKGDCTL (IO_ADDRESS(CCM_BASE_ADDR) + 0x34) |
| 40 | 40 | ||
| 41 | #define CCM_CSCR_USB_OFFSET 28 | 41 | #define CCM_CSCR_PRESC_OFFSET 29 |
| 42 | #define CCM_CSCR_USB_MASK (0x7 << 28) | 42 | #define CCM_CSCR_PRESC_MASK (0x7 << CCM_CSCR_PRESC_OFFSET) |
| 43 | |||
| 44 | #define CCM_CSCR_USB_OFFSET 26 | ||
| 45 | #define CCM_CSCR_USB_MASK (0x7 << CCM_CSCR_USB_OFFSET) | ||
| 43 | #define CCM_CSCR_SD_OFFSET 24 | 46 | #define CCM_CSCR_SD_OFFSET 24 |
| 44 | #define CCM_CSCR_SD_MASK (0x3 << 24) | 47 | #define CCM_CSCR_SD_MASK (0x3 << CCM_CSCR_SD_OFFSET) |
| 45 | #define CCM_CSCR_SSI2 (1 << 23) | 48 | #define CCM_CSCR_SPLLRES (1 << 22) |
| 46 | #define CCM_CSCR_SSI2_OFFSET 23 | 49 | #define CCM_CSCR_MPLLRES (1 << 21) |
| 47 | #define CCM_CSCR_SSI1 (1 << 22) | 50 | #define CCM_CSCR_SSI2_OFFSET 20 |
| 48 | #define CCM_CSCR_SSI1_OFFSET 22 | 51 | #define CCM_CSCR_SSI2 (1 << CCM_CSCR_SSI2_OFFSET) |
| 49 | #define CCM_CSCR_VPU (1 << 21) | 52 | #define CCM_CSCR_SSI1_OFFSET 19 |
| 50 | #define CCM_CSCR_VPU_OFFSET 21 | 53 | #define CCM_CSCR_SSI1 (1 << CCM_CSCR_SSI1_OFFSET) |
| 51 | #define CCM_CSCR_MSHC (1 << 20) | 54 | #define CCM_CSCR_FIR_OFFSET 18 |
| 52 | #define CCM_CSCR_SPLLRES (1 << 19) | 55 | #define CCM_CSCR_FIR (1 << CCM_CSCR_FIR_OFFSET) |
| 53 | #define CCM_CSCR_MPLLRES (1 << 18) | ||
| 54 | #define CCM_CSCR_SP (1 << 17) | 56 | #define CCM_CSCR_SP (1 << 17) |
| 55 | #define CCM_CSCR_MCU (1 << 16) | 57 | #define CCM_CSCR_MCU (1 << 16) |
| 56 | /* CCM_CSCR_ARM_xxx just be avaliable on i.MX27 TO2*/ | 58 | #define CCM_CSCR_BCLK_OFFSET 10 |
| 57 | #define CCM_CSCR_ARM_SRC (1 << 15) | 59 | #define CCM_CSCR_BCLK_MASK (0xf << CCM_CSCR_BCLK_OFFSET) |
| 58 | #define CCM_CSCR_ARM_OFFSET 12 | 60 | #define CCM_CSCR_IPDIV_OFFSET 9 |
| 59 | #define CCM_CSCR_ARM_MASK (0x3 << 12) | 61 | #define CCM_CSCR_IPDIV (1 << CCM_CSCR_IPDIV_OFFSET) |
| 60 | /* CCM_CSCR_ARM_xxx just be avaliable on i.MX27 TO2*/ | 62 | |
| 61 | #define CCM_CSCR_PRESC_OFFSET 13 | ||
| 62 | #define CCM_CSCR_PRESC_MASK (0x7 << 13) | ||
| 63 | #define CCM_CSCR_BCLK_OFFSET 9 | ||
| 64 | #define CCM_CSCR_BCLK_MASK (0xf << 9) | ||
| 65 | #define CCM_CSCR_IPDIV_OFFSET 8 | ||
| 66 | #define CCM_CSCR_IPDIV (1 << 8) | ||
| 67 | /* CCM_CSCR_AHB_xxx just be avaliable on i.MX27 TO2*/ | ||
| 68 | #define CCM_CSCR_AHB_OFFSET 8 | ||
| 69 | #define CCM_CSCR_AHB_MASK (0x3 << 8) | ||
| 70 | /* CCM_CSCR_AHB_xxx just be avaliable on i.MX27 TO2*/ | ||
| 71 | #define CCM_CSCR_OSC26MDIV (1 << 4) | 63 | #define CCM_CSCR_OSC26MDIV (1 << 4) |
| 72 | #define CCM_CSCR_OSC26M (1 << 3) | 64 | #define CCM_CSCR_OSC26M (1 << 3) |
| 73 | #define CCM_CSCR_FPM (1 << 2) | 65 | #define CCM_CSCR_FPM (1 << 2) |
| 74 | #define CCM_CSCR_SPEN (1 << 1) | 66 | #define CCM_CSCR_SPEN (1 << 1) |
| 75 | #define CCM_CSCR_MPEN 1 | 67 | #define CCM_CSCR_MPEN 1 |
| 76 | 68 | ||
| 69 | |||
| 70 | |||
| 77 | #define CCM_MPCTL0_CPLM (1 << 31) | 71 | #define CCM_MPCTL0_CPLM (1 << 31) |
| 78 | #define CCM_MPCTL0_PD_OFFSET 26 | 72 | #define CCM_MPCTL0_PD_OFFSET 26 |
| 79 | #define CCM_MPCTL0_PD_MASK (0xf << 26) | 73 | #define CCM_MPCTL0_PD_MASK (0xf << 26) |
| @@ -109,25 +103,14 @@ | |||
| 109 | 103 | ||
| 110 | #define CCM_PCDR0_SSI2BAUDDIV_OFFSET 26 | 104 | #define CCM_PCDR0_SSI2BAUDDIV_OFFSET 26 |
| 111 | #define CCM_PCDR0_SSI2BAUDDIV_MASK (0x3f << 26) | 105 | #define CCM_PCDR0_SSI2BAUDDIV_MASK (0x3f << 26) |
| 112 | #define CCM_PCDR0_CLKO_EN 25 | ||
| 113 | #define CCM_PCDR0_CLKODIV_OFFSET 22 | ||
| 114 | #define CCM_PCDR0_CLKODIV_MASK (0x7 << 22) | ||
| 115 | #define CCM_PCDR0_SSI1BAUDDIV_OFFSET 16 | 106 | #define CCM_PCDR0_SSI1BAUDDIV_OFFSET 16 |
| 116 | #define CCM_PCDR0_SSI1BAUDDIV_MASK (0x3f << 16) | 107 | #define CCM_PCDR0_SSI1BAUDDIV_MASK (0x3f << 16) |
| 117 | /*The difinition for i.MX27 TO2*/ | ||
| 118 | #define CCM_PCDR0_VPUDIV2_OFFSET 10 | ||
| 119 | #define CCM_PCDR0_VPUDIV2_MASK (0x3f << 10) | ||
| 120 | #define CCM_PCDR0_NFCDIV2_OFFSET 6 | ||
| 121 | #define CCM_PCDR0_NFCDIV2_MASK (0xf << 6) | ||
| 122 | #define CCM_PCDR0_MSHCDIV2_MASK 0x3f | ||
| 123 | /*The difinition for i.MX27 TO2*/ | ||
| 124 | #define CCM_PCDR0_NFCDIV_OFFSET 12 | 108 | #define CCM_PCDR0_NFCDIV_OFFSET 12 |
| 125 | #define CCM_PCDR0_NFCDIV_MASK (0xf << 12) | 109 | #define CCM_PCDR0_NFCDIV_MASK (0xf << 12) |
| 126 | #define CCM_PCDR0_VPUDIV_OFFSET 8 | 110 | #define CCM_PCDR0_48MDIV_OFFSET 5 |
| 127 | #define CCM_PCDR0_VPUDIV_MASK (0xf << 8) | 111 | #define CCM_PCDR0_48MDIV_MASK (0x7 << CCM_PCDR0_48MDIV_OFFSET) |
| 128 | #define CCM_PCDR0_MSHCDIV_OFFSET 0 | 112 | #define CCM_PCDR0_FIRIDIV_OFFSET 0 |
| 129 | #define CCM_PCDR0_MSHCDIV_MASK 0x1f | 113 | #define CCM_PCDR0_FIRIDIV_MASK 0x1f |
| 130 | |||
| 131 | #define CCM_PCDR1_PERDIV4_OFFSET 24 | 114 | #define CCM_PCDR1_PERDIV4_OFFSET 24 |
| 132 | #define CCM_PCDR1_PERDIV4_MASK (0x3f << 24) | 115 | #define CCM_PCDR1_PERDIV4_MASK (0x3f << 24) |
| 133 | #define CCM_PCDR1_PERDIV3_OFFSET 16 | 116 | #define CCM_PCDR1_PERDIV3_OFFSET 16 |
| @@ -137,133 +120,135 @@ | |||
| 137 | #define CCM_PCDR1_PERDIV1_OFFSET 0 | 120 | #define CCM_PCDR1_PERDIV1_OFFSET 0 |
| 138 | #define CCM_PCDR1_PERDIV1_MASK 0x3f | 121 | #define CCM_PCDR1_PERDIV1_MASK 0x3f |
| 139 | 122 | ||
| 140 | #define CCM_PCCR0_CSPI1_OFFSET 31 | 123 | #define CCM_PCCR_HCLK_CSI_OFFSET 31 |
| 141 | #define CCM_PCCR0_CSPI1_MASK (1 << 31) | 124 | #define CCM_PCCR_HCLK_CSI_REG CCM_PCCR0 |
| 142 | #define CCM_PCCR0_CSPI2_OFFSET 30 | 125 | #define CCM_PCCR_HCLK_DMA_OFFSET 30 |
| 143 | #define CCM_PCCR0_CSPI2_MASK (1 << 30) | 126 | #define CCM_PCCR_HCLK_DMA_REG CCM_PCCR0 |
| 144 | #define CCM_PCCR0_CSPI3_OFFSET 29 | 127 | #define CCM_PCCR_HCLK_BROM_OFFSET 28 |
| 145 | #define CCM_PCCR0_CSPI3_MASK (1 << 29) | 128 | #define CCM_PCCR_HCLK_BROM_REG CCM_PCCR0 |
| 146 | #define CCM_PCCR0_DMA_OFFSET 28 | 129 | #define CCM_PCCR_HCLK_EMMA_OFFSET 27 |
| 147 | #define CCM_PCCR0_DMA_MASK (1 << 28) | 130 | #define CCM_PCCR_HCLK_EMMA_REG CCM_PCCR0 |
| 148 | #define CCM_PCCR0_EMMA_OFFSET 27 | 131 | #define CCM_PCCR_HCLK_LCDC_OFFSET 26 |
| 149 | #define CCM_PCCR0_EMMA_MASK (1 << 27) | 132 | #define CCM_PCCR_HCLK_LCDC_REG CCM_PCCR0 |
| 150 | #define CCM_PCCR0_FEC_OFFSET 26 | 133 | #define CCM_PCCR_HCLK_SLCDC_OFFSET 25 |
| 151 | #define CCM_PCCR0_FEC_MASK (1 << 26) | 134 | #define CCM_PCCR_HCLK_SLCDC_REG CCM_PCCR0 |
| 152 | #define CCM_PCCR0_GPIO_OFFSET 25 | 135 | #define CCM_PCCR_HCLK_USBOTG_OFFSET 24 |
| 153 | #define CCM_PCCR0_GPIO_MASK (1 << 25) | 136 | #define CCM_PCCR_HCLK_USBOTG_REG CCM_PCCR0 |
| 154 | #define CCM_PCCR0_GPT1_OFFSET 24 | 137 | #define CCM_PCCR_HCLK_BMI_OFFSET 23 |
| 155 | #define CCM_PCCR0_GPT1_MASK (1 << 24) | 138 | #define CCM_PCCR_BMI_MASK (1 << CCM_PCCR_BMI_MASK) |
| 156 | #define CCM_PCCR0_GPT2_OFFSET 23 | 139 | #define CCM_PCCR_HCLK_BMI_REG CCM_PCCR0 |
| 157 | #define CCM_PCCR0_GPT2_MASK (1 << 23) | 140 | #define CCM_PCCR_PERCLK4_OFFSET 22 |
| 158 | #define CCM_PCCR0_GPT3_OFFSET 22 | 141 | #define CCM_PCCR_PERCLK4_REG CCM_PCCR0 |
| 159 | #define CCM_PCCR0_GPT3_MASK (1 << 22) | 142 | #define CCM_PCCR_SLCDC_OFFSET 21 |
| 160 | #define CCM_PCCR0_GPT4_OFFSET 21 | 143 | #define CCM_PCCR_SLCDC_REG CCM_PCCR0 |
| 161 | #define CCM_PCCR0_GPT4_MASK (1 << 21) | 144 | #define CCM_PCCR_FIRI_BAUD_OFFSET 20 |
| 162 | #define CCM_PCCR0_GPT5_OFFSET 20 | 145 | #define CCM_PCCR_FIRI_BAUD_MASK (1 << CCM_PCCR_FIRI_BAUD_MASK) |
| 163 | #define CCM_PCCR0_GPT5_MASK (1 << 20) | 146 | #define CCM_PCCR_FIRI_BAUD_REG CCM_PCCR0 |
| 164 | #define CCM_PCCR0_GPT6_OFFSET 19 | 147 | #define CCM_PCCR_NFC_OFFSET 19 |
| 165 | #define CCM_PCCR0_GPT6_MASK (1 << 19) | 148 | #define CCM_PCCR_NFC_REG CCM_PCCR0 |
| 166 | #define CCM_PCCR0_I2C1_OFFSET 18 | 149 | #define CCM_PCCR_LCDC_OFFSET 18 |
| 167 | #define CCM_PCCR0_I2C1_MASK (1 << 18) | 150 | #define CCM_PCCR_LCDC_REG CCM_PCCR0 |
| 168 | #define CCM_PCCR0_I2C2_OFFSET 17 | 151 | #define CCM_PCCR_SSI1_BAUD_OFFSET 17 |
| 169 | #define CCM_PCCR0_I2C2_MASK (1 << 17) | 152 | #define CCM_PCCR_SSI1_BAUD_REG CCM_PCCR0 |
| 170 | #define CCM_PCCR0_IIM_OFFSET 16 | 153 | #define CCM_PCCR_SSI2_BAUD_OFFSET 16 |
| 171 | #define CCM_PCCR0_IIM_MASK (1 << 16) | 154 | #define CCM_PCCR_SSI2_BAUD_REG CCM_PCCR0 |
| 172 | #define CCM_PCCR0_KPP_OFFSET 15 | 155 | #define CCM_PCCR_EMMA_OFFSET 15 |
| 173 | #define CCM_PCCR0_KPP_MASK (1 << 15) | 156 | #define CCM_PCCR_EMMA_REG CCM_PCCR0 |
| 174 | #define CCM_PCCR0_LCDC_OFFSET 14 | 157 | #define CCM_PCCR_USBOTG_OFFSET 14 |
| 175 | #define CCM_PCCR0_LCDC_MASK (1 << 14) | 158 | #define CCM_PCCR_USBOTG_REG CCM_PCCR0 |
| 176 | #define CCM_PCCR0_MSHC_OFFSET 13 | 159 | #define CCM_PCCR_DMA_OFFSET 13 |
| 177 | #define CCM_PCCR0_MSHC_MASK (1 << 13) | 160 | #define CCM_PCCR_DMA_REG CCM_PCCR0 |
| 178 | #define CCM_PCCR0_OWIRE_OFFSET 12 | 161 | #define CCM_PCCR_I2C1_OFFSET 12 |
| 179 | #define CCM_PCCR0_OWIRE_MASK (1 << 12) | 162 | #define CCM_PCCR_I2C1_REG CCM_PCCR0 |
| 180 | #define CCM_PCCR0_PWM_OFFSET 11 | 163 | #define CCM_PCCR_GPIO_OFFSET 11 |
| 181 | #define CCM_PCCR0_PWM_MASK (1 << 11) | 164 | #define CCM_PCCR_GPIO_REG CCM_PCCR0 |
| 182 | #define CCM_PCCR0_RTC_OFFSET 9 | 165 | #define CCM_PCCR_SDHC2_OFFSET 10 |
| 183 | #define CCM_PCCR0_RTC_MASK (1 << 9) | 166 | #define CCM_PCCR_SDHC2_REG CCM_PCCR0 |
| 184 | #define CCM_PCCR0_RTIC_OFFSET 8 | 167 | #define CCM_PCCR_SDHC1_OFFSET 9 |
| 185 | #define CCM_PCCR0_RTIC_MASK (1 << 8) | 168 | #define CCM_PCCR_SDHC1_REG CCM_PCCR0 |
| 186 | #define CCM_PCCR0_SAHARA_OFFSET 7 | 169 | #define CCM_PCCR_FIRI_OFFSET 8 |
| 187 | #define CCM_PCCR0_SAHARA_MASK (1 << 7) | 170 | #define CCM_PCCR_FIRI_MASK (1 << CCM_PCCR_BAUD_MASK) |
| 188 | #define CCM_PCCR0_SCC_OFFSET 6 | 171 | #define CCM_PCCR_FIRI_REG CCM_PCCR0 |
| 189 | #define CCM_PCCR0_SCC_MASK (1 << 6) | 172 | #define CCM_PCCR_SSI2_IPG_OFFSET 7 |
| 190 | #define CCM_PCCR0_SDHC1_OFFSET 5 | 173 | #define CCM_PCCR_SSI2_REG CCM_PCCR0 |
| 191 | #define CCM_PCCR0_SDHC1_MASK (1 << 5) | 174 | #define CCM_PCCR_SSI1_IPG_OFFSET 6 |
| 192 | #define CCM_PCCR0_SDHC2_OFFSET 4 | 175 | #define CCM_PCCR_SSI1_REG CCM_PCCR0 |
| 193 | #define CCM_PCCR0_SDHC2_MASK (1 << 4) | 176 | #define CCM_PCCR_CSPI2_OFFSET 5 |
| 194 | #define CCM_PCCR0_SDHC3_OFFSET 3 | 177 | #define CCM_PCCR_CSPI2_REG CCM_PCCR0 |
| 195 | #define CCM_PCCR0_SDHC3_MASK (1 << 3) | 178 | #define CCM_PCCR_CSPI1_OFFSET 4 |
| 196 | #define CCM_PCCR0_SLCDC_OFFSET 2 | 179 | #define CCM_PCCR_CSPI1_REG CCM_PCCR0 |
| 197 | #define CCM_PCCR0_SLCDC_MASK (1 << 2) | 180 | #define CCM_PCCR_UART4_OFFSET 3 |
| 198 | #define CCM_PCCR0_SSI1_IPG_OFFSET 1 | 181 | #define CCM_PCCR_UART4_REG CCM_PCCR0 |
| 199 | #define CCM_PCCR0_SSI1_IPG_MASK (1 << 1) | 182 | #define CCM_PCCR_UART3_OFFSET 2 |
| 200 | #define CCM_PCCR0_SSI2_IPG_OFFSET 0 | 183 | #define CCM_PCCR_UART3_REG CCM_PCCR0 |
| 201 | #define CCM_PCCR0_SSI2_IPG_MASK (1 << 0) | 184 | #define CCM_PCCR_UART2_OFFSET 1 |
| 185 | #define CCM_PCCR_UART2_REG CCM_PCCR0 | ||
| 186 | #define CCM_PCCR_UART1_OFFSET 0 | ||
| 187 | #define CCM_PCCR_UART1_REG CCM_PCCR0 | ||
| 188 | |||
| 189 | #define CCM_PCCR_OWIRE_OFFSET 31 | ||
| 190 | #define CCM_PCCR_OWIRE_REG CCM_PCCR1 | ||
| 191 | #define CCM_PCCR_KPP_OFFSET 30 | ||
| 192 | #define CCM_PCCR_KPP_REG CCM_PCCR1 | ||
| 193 | #define CCM_PCCR_RTC_OFFSET 29 | ||
| 194 | #define CCM_PCCR_RTC_REG CCM_PCCR1 | ||
| 195 | #define CCM_PCCR_PWM_OFFSET 28 | ||
| 196 | #define CCM_PCCR_PWM_REG CCM_PCCR1 | ||
| 197 | #define CCM_PCCR_GPT3_OFFSET 27 | ||
| 198 | #define CCM_PCCR_GPT3_REG CCM_PCCR1 | ||
| 199 | #define CCM_PCCR_GPT2_OFFSET 26 | ||
| 200 | #define CCM_PCCR_GPT2_REG CCM_PCCR1 | ||
| 201 | #define CCM_PCCR_GPT1_OFFSET 25 | ||
| 202 | #define CCM_PCCR_GPT1_REG CCM_PCCR1 | ||
| 203 | #define CCM_PCCR_WDT_OFFSET 24 | ||
| 204 | #define CCM_PCCR_WDT_REG CCM_PCCR1 | ||
| 205 | #define CCM_PCCR_CSPI3_OFFSET 23 | ||
| 206 | #define CCM_PCCR_CSPI3_REG CCM_PCCR1 | ||
| 207 | |||
| 208 | #define CCM_PCCR_CSPI1_MASK (1 << CCM_PCCR_CSPI1_OFFSET) | ||
| 209 | #define CCM_PCCR_CSPI2_MASK (1 << CCM_PCCR_CSPI2_OFFSET) | ||
| 210 | #define CCM_PCCR_CSPI3_MASK (1 << CCM_PCCR_CSPI3_OFFSET) | ||
| 211 | #define CCM_PCCR_DMA_MASK (1 << CCM_PCCR_DMA_OFFSET) | ||
| 212 | #define CCM_PCCR_EMMA_MASK (1 << CCM_PCCR_EMMA_OFFSET) | ||
| 213 | #define CCM_PCCR_GPIO_MASK (1 << CCM_PCCR_GPIO_OFFSET) | ||
| 214 | #define CCM_PCCR_GPT1_MASK (1 << CCM_PCCR_GPT1_OFFSET) | ||
| 215 | #define CCM_PCCR_GPT2_MASK (1 << CCM_PCCR_GPT2_OFFSET) | ||
| 216 | #define CCM_PCCR_GPT3_MASK (1 << CCM_PCCR_GPT3_OFFSET) | ||
| 217 | #define CCM_PCCR_HCLK_BROM_MASK (1 << CCM_PCCR_HCLK_BROM_OFFSET) | ||
| 218 | #define CCM_PCCR_HCLK_CSI_MASK (1 << CCM_PCCR_HCLK_CSI_OFFSET) | ||
| 219 | #define CCM_PCCR_HCLK_DMA_MASK (1 << CCM_PCCR_HCLK_DMA_OFFSET) | ||
| 220 | #define CCM_PCCR_HCLK_EMMA_MASK (1 << CCM_PCCR_HCLK_EMMA_OFFSET) | ||
| 221 | #define CCM_PCCR_HCLK_LCDC_MASK (1 << CCM_PCCR_HCLK_LCDC_OFFSET) | ||
| 222 | #define CCM_PCCR_HCLK_SLCDC_MASK (1 << CCM_PCCR_HCLK_SLCDC_OFFSET) | ||
| 223 | #define CCM_PCCR_HCLK_USBOTG_MASK (1 << CCM_PCCR_HCLK_USBOTG_OFFSET) | ||
| 224 | #define CCM_PCCR_I2C1_MASK (1 << CCM_PCCR_I2C1_OFFSET) | ||
| 225 | #define CCM_PCCR_KPP_MASK (1 << CCM_PCCR_KPP_OFFSET) | ||
| 226 | #define CCM_PCCR_LCDC_MASK (1 << CCM_PCCR_LCDC_OFFSET) | ||
| 227 | #define CCM_PCCR_NFC_MASK (1 << CCM_PCCR_NFC_OFFSET) | ||
| 228 | #define CCM_PCCR_OWIRE_MASK (1 << CCM_PCCR_OWIRE_OFFSET) | ||
| 229 | #define CCM_PCCR_PERCLK4_MASK (1 << CCM_PCCR_PERCLK4_OFFSET) | ||
| 230 | #define CCM_PCCR_PWM_MASK (1 << CCM_PCCR_PWM_OFFSET) | ||
| 231 | #define CCM_PCCR_RTC_MASK (1 << CCM_PCCR_RTC_OFFSET) | ||
| 232 | #define CCM_PCCR_SDHC1_MASK (1 << CCM_PCCR_SDHC1_OFFSET) | ||
| 233 | #define CCM_PCCR_SDHC2_MASK (1 << CCM_PCCR_SDHC2_OFFSET) | ||
| 234 | #define CCM_PCCR_SLCDC_MASK (1 << CCM_PCCR_SLCDC_OFFSET) | ||
| 235 | #define CCM_PCCR_SSI1_BAUD_MASK (1 << CCM_PCCR_SSI1_BAUD_OFFSET) | ||
| 236 | #define CCM_PCCR_SSI1_IPG_MASK (1 << CCM_PCCR_SSI1_IPG_OFFSET) | ||
| 237 | #define CCM_PCCR_SSI2_BAUD_MASK (1 << CCM_PCCR_SSI2_BAUD_OFFSET) | ||
| 238 | #define CCM_PCCR_SSI2_IPG_MASK (1 << CCM_PCCR_SSI2_IPG_OFFSET) | ||
| 239 | #define CCM_PCCR_UART1_MASK (1 << CCM_PCCR_UART1_OFFSET) | ||
| 240 | #define CCM_PCCR_UART2_MASK (1 << CCM_PCCR_UART2_OFFSET) | ||
| 241 | #define CCM_PCCR_UART3_MASK (1 << CCM_PCCR_UART3_OFFSET) | ||
| 242 | #define CCM_PCCR_UART4_MASK (1 << CCM_PCCR_UART4_OFFSET) | ||
| 243 | #define CCM_PCCR_USBOTG_MASK (1 << CCM_PCCR_USBOTG_OFFSET) | ||
| 244 | #define CCM_PCCR_WDT_MASK (1 << CCM_PCCR_WDT_OFFSET) | ||
| 202 | 245 | ||
| 203 | #define CCM_PCCR1_UART1_OFFSET 31 | ||
| 204 | #define CCM_PCCR1_UART1_MASK (1 << 31) | ||
| 205 | #define CCM_PCCR1_UART2_OFFSET 30 | ||
| 206 | #define CCM_PCCR1_UART2_MASK (1 << 30) | ||
| 207 | #define CCM_PCCR1_UART3_OFFSET 29 | ||
| 208 | #define CCM_PCCR1_UART3_MASK (1 << 29) | ||
| 209 | #define CCM_PCCR1_UART4_OFFSET 28 | ||
| 210 | #define CCM_PCCR1_UART4_MASK (1 << 28) | ||
| 211 | #define CCM_PCCR1_UART5_OFFSET 27 | ||
| 212 | #define CCM_PCCR1_UART5_MASK (1 << 27) | ||
| 213 | #define CCM_PCCR1_UART6_OFFSET 26 | ||
| 214 | #define CCM_PCCR1_UART6_MASK (1 << 26) | ||
| 215 | #define CCM_PCCR1_USBOTG_OFFSET 25 | ||
| 216 | #define CCM_PCCR1_USBOTG_MASK (1 << 25) | ||
| 217 | #define CCM_PCCR1_WDT_OFFSET 24 | ||
| 218 | #define CCM_PCCR1_WDT_MASK (1 << 24) | ||
| 219 | #define CCM_PCCR1_HCLK_ATA_OFFSET 23 | ||
| 220 | #define CCM_PCCR1_HCLK_ATA_MASK (1 << 23) | ||
| 221 | #define CCM_PCCR1_HCLK_BROM_OFFSET 22 | ||
| 222 | #define CCM_PCCR1_HCLK_BROM_MASK (1 << 22) | ||
| 223 | #define CCM_PCCR1_HCLK_CSI_OFFSET 21 | ||
| 224 | #define CCM_PCCR1_HCLK_CSI_MASK (1 << 21) | ||
| 225 | #define CCM_PCCR1_HCLK_DMA_OFFSET 20 | ||
| 226 | #define CCM_PCCR1_HCLK_DMA_MASK (1 << 20) | ||
| 227 | #define CCM_PCCR1_HCLK_EMI_OFFSET 19 | ||
| 228 | #define CCM_PCCR1_HCLK_EMI_MASK (1 << 19) | ||
| 229 | #define CCM_PCCR1_HCLK_EMMA_OFFSET 18 | ||
| 230 | #define CCM_PCCR1_HCLK_EMMA_MASK (1 << 18) | ||
| 231 | #define CCM_PCCR1_HCLK_FEC_OFFSET 17 | ||
| 232 | #define CCM_PCCR1_HCLK_FEC_MASK (1 << 17) | ||
| 233 | #define CCM_PCCR1_HCLK_VPU_OFFSET 16 | ||
| 234 | #define CCM_PCCR1_HCLK_VPU_MASK (1 << 16) | ||
| 235 | #define CCM_PCCR1_HCLK_LCDC_OFFSET 15 | ||
| 236 | #define CCM_PCCR1_HCLK_LCDC_MASK (1 << 15) | ||
| 237 | #define CCM_PCCR1_HCLK_RTIC_OFFSET 14 | ||
| 238 | #define CCM_PCCR1_HCLK_RTIC_MASK (1 << 14) | ||
| 239 | #define CCM_PCCR1_HCLK_SAHARA_OFFSET 13 | ||
| 240 | #define CCM_PCCR1_HCLK_SAHARA_MASK (1 << 13) | ||
| 241 | #define CCM_PCCR1_HCLK_SLCDC_OFFSET 12 | ||
| 242 | #define CCM_PCCR1_HCLK_SLCDC_MASK (1 << 12) | ||
| 243 | #define CCM_PCCR1_HCLK_USBOTG_OFFSET 11 | ||
| 244 | #define CCM_PCCR1_HCLK_USBOTG_MASK (1 << 11) | ||
| 245 | #define CCM_PCCR1_PERCLK1_OFFSET 10 | ||
| 246 | #define CCM_PCCR1_PERCLK1_MASK (1 << 10) | ||
| 247 | #define CCM_PCCR1_PERCLK2_OFFSET 9 | ||
| 248 | #define CCM_PCCR1_PERCLK2_MASK (1 << 9) | ||
| 249 | #define CCM_PCCR1_PERCLK3_OFFSET 8 | ||
| 250 | #define CCM_PCCR1_PERCLK3_MASK (1 << 8) | ||
| 251 | #define CCM_PCCR1_PERCLK4_OFFSET 7 | ||
| 252 | #define CCM_PCCR1_PERCLK4_MASK (1 << 7) | ||
| 253 | #define CCM_PCCR1_VPU_BAUD_OFFSET 6 | ||
| 254 | #define CCM_PCCR1_VPU_BAUD_MASK (1 << 6) | ||
| 255 | #define CCM_PCCR1_SSI1_BAUD_OFFSET 5 | ||
| 256 | #define CCM_PCCR1_SSI1_BAUD_MASK (1 << 5) | ||
| 257 | #define CCM_PCCR1_SSI2_BAUD_OFFSET 4 | ||
| 258 | #define CCM_PCCR1_SSI2_BAUD_MASK (1 << 4) | ||
| 259 | #define CCM_PCCR1_NFC_BAUD_OFFSET 3 | ||
| 260 | #define CCM_PCCR1_NFC_BAUD_MASK (1 << 3) | ||
| 261 | #define CCM_PCCR1_MSHC_BAUD_OFFSET 2 | ||
| 262 | #define CCM_PCCR1_MSHC_BAUD_MASK (1 << 2) | ||
| 263 | 246 | ||
| 264 | #define CCM_CCSR_32KSR (1 << 15) | 247 | #define CCM_CCSR_32KSR (1 << 15) |
| 248 | |||
| 265 | #define CCM_CCSR_CLKMODE1 (1 << 9) | 249 | #define CCM_CCSR_CLKMODE1 (1 << 9) |
| 266 | #define CCM_CCSR_CLKMODE0 (1 << 8) | 250 | #define CCM_CCSR_CLKMODE0 (1 << 8) |
| 251 | |||
| 267 | #define CCM_CCSR_CLKOSEL_OFFSET 0 | 252 | #define CCM_CCSR_CLKOSEL_OFFSET 0 |
| 268 | #define CCM_CCSR_CLKOSEL_MASK 0x1f | 253 | #define CCM_CCSR_CLKOSEL_MASK 0x1f |
| 269 | 254 | ||
diff --git a/arch/arm/mach-mx2/devices.c b/arch/arm/mach-mx2/devices.c index 2f9240be1c76..f81aa8a8fbb4 100644 --- a/arch/arm/mach-mx2/devices.c +++ b/arch/arm/mach-mx2/devices.c | |||
| @@ -34,6 +34,10 @@ | |||
| 34 | 34 | ||
| 35 | #include <mach/irqs.h> | 35 | #include <mach/irqs.h> |
| 36 | #include <mach/hardware.h> | 36 | #include <mach/hardware.h> |
| 37 | #include <mach/common.h> | ||
| 38 | #include <mach/mmc.h> | ||
| 39 | |||
| 40 | #include "devices.h" | ||
| 37 | 41 | ||
| 38 | /* | 42 | /* |
| 39 | * Resource definition for the MXC IrDA | 43 | * Resource definition for the MXC IrDA |
| @@ -225,37 +229,217 @@ struct platform_device mxc_nand_device = { | |||
| 225 | .resource = mxc_nand_resources, | 229 | .resource = mxc_nand_resources, |
| 226 | }; | 230 | }; |
| 227 | 231 | ||
| 232 | #ifdef CONFIG_FB_IMX | ||
| 233 | /* | ||
| 234 | * lcdc: | ||
| 235 | * - i.MX1: the basic controller | ||
| 236 | * - i.MX21: to be checked | ||
| 237 | * - i.MX27: like i.MX1, with slightly variations | ||
| 238 | */ | ||
| 239 | static struct resource mxc_fb[] = { | ||
| 240 | { | ||
| 241 | .start = LCDC_BASE_ADDR, | ||
| 242 | .end = LCDC_BASE_ADDR + 0xFFF, | ||
| 243 | .flags = IORESOURCE_MEM, | ||
| 244 | }, | ||
| 245 | { | ||
| 246 | .start = MXC_INT_LCDC, | ||
| 247 | .end = MXC_INT_LCDC, | ||
| 248 | .flags = IORESOURCE_IRQ, | ||
| 249 | } | ||
| 250 | }; | ||
| 251 | |||
| 252 | /* mxc lcd driver */ | ||
| 253 | struct platform_device mxc_fb_device = { | ||
| 254 | .name = "imx-fb", | ||
| 255 | .id = 0, | ||
| 256 | .num_resources = ARRAY_SIZE(mxc_fb), | ||
| 257 | .resource = mxc_fb, | ||
| 258 | .dev = { | ||
| 259 | .coherent_dma_mask = 0xFFFFFFFF, | ||
| 260 | }, | ||
| 261 | }; | ||
| 262 | #endif | ||
| 263 | |||
| 264 | #ifdef CONFIG_MACH_MX27 | ||
| 265 | static struct resource mxc_fec_resources[] = { | ||
| 266 | { | ||
| 267 | .start = FEC_BASE_ADDR, | ||
| 268 | .end = FEC_BASE_ADDR + 0xfff, | ||
| 269 | .flags = IORESOURCE_MEM | ||
| 270 | }, { | ||
| 271 | .start = MXC_INT_FEC, | ||
| 272 | .end = MXC_INT_FEC, | ||
| 273 | .flags = IORESOURCE_IRQ | ||
| 274 | }, | ||
| 275 | }; | ||
| 276 | |||
| 277 | struct platform_device mxc_fec_device = { | ||
| 278 | .name = "fec", | ||
| 279 | .id = 0, | ||
| 280 | .num_resources = ARRAY_SIZE(mxc_fec_resources), | ||
| 281 | .resource = mxc_fec_resources, | ||
| 282 | }; | ||
| 283 | #endif | ||
| 284 | |||
| 285 | static struct resource mxc_i2c_1_resources[] = { | ||
| 286 | [0] = { | ||
| 287 | .start = I2C_BASE_ADDR, | ||
| 288 | .end = I2C_BASE_ADDR + 0x0fff, | ||
| 289 | .flags = IORESOURCE_MEM | ||
| 290 | }, | ||
| 291 | [1] = { | ||
| 292 | .start = MXC_INT_I2C, | ||
| 293 | .end = MXC_INT_I2C, | ||
| 294 | .flags = IORESOURCE_IRQ | ||
| 295 | } | ||
| 296 | }; | ||
| 297 | |||
| 298 | struct platform_device mxc_i2c_device0 = { | ||
| 299 | .name = "imx-i2c", | ||
| 300 | .id = 0, | ||
| 301 | .num_resources = ARRAY_SIZE(mxc_i2c_1_resources), | ||
| 302 | .resource = mxc_i2c_1_resources | ||
| 303 | }; | ||
| 304 | |||
| 305 | #ifdef CONFIG_MACH_MX27 | ||
| 306 | static struct resource mxc_i2c_2_resources[] = { | ||
| 307 | [0] = { | ||
| 308 | .start = I2C2_BASE_ADDR, | ||
| 309 | .end = I2C2_BASE_ADDR + 0x0fff, | ||
| 310 | .flags = IORESOURCE_MEM | ||
| 311 | }, | ||
| 312 | [1] = { | ||
| 313 | .start = MXC_INT_I2C2, | ||
| 314 | .end = MXC_INT_I2C2, | ||
| 315 | .flags = IORESOURCE_IRQ | ||
| 316 | } | ||
| 317 | }; | ||
| 318 | |||
| 319 | struct platform_device mxc_i2c_device1 = { | ||
| 320 | .name = "imx-i2c", | ||
| 321 | .id = 1, | ||
| 322 | .num_resources = ARRAY_SIZE(mxc_i2c_2_resources), | ||
| 323 | .resource = mxc_i2c_2_resources | ||
| 324 | }; | ||
| 325 | #endif | ||
| 326 | |||
| 327 | static struct resource mxc_pwm_resources[] = { | ||
| 328 | [0] = { | ||
| 329 | .start = PWM_BASE_ADDR, | ||
| 330 | .end = PWM_BASE_ADDR + 0x0fff, | ||
| 331 | .flags = IORESOURCE_MEM | ||
| 332 | }, | ||
| 333 | [1] = { | ||
| 334 | .start = MXC_INT_PWM, | ||
| 335 | .end = MXC_INT_PWM, | ||
| 336 | .flags = IORESOURCE_IRQ, | ||
| 337 | } | ||
| 338 | }; | ||
| 339 | |||
| 340 | struct platform_device mxc_pwm_device = { | ||
| 341 | .name = "mxc_pwm", | ||
| 342 | .id = 0, | ||
| 343 | .num_resources = ARRAY_SIZE(mxc_pwm_resources), | ||
| 344 | .resource = mxc_pwm_resources | ||
| 345 | }; | ||
| 346 | |||
| 347 | /* | ||
| 348 | * Resource definition for the MXC SDHC | ||
| 349 | */ | ||
| 350 | static struct resource mxc_sdhc1_resources[] = { | ||
| 351 | [0] = { | ||
| 352 | .start = SDHC1_BASE_ADDR, | ||
| 353 | .end = SDHC1_BASE_ADDR + SZ_4K - 1, | ||
| 354 | .flags = IORESOURCE_MEM, | ||
| 355 | }, | ||
| 356 | [1] = { | ||
| 357 | .start = MXC_INT_SDHC1, | ||
| 358 | .end = MXC_INT_SDHC1, | ||
| 359 | .flags = IORESOURCE_IRQ, | ||
| 360 | }, | ||
| 361 | [2] = { | ||
| 362 | .start = DMA_REQ_SDHC1, | ||
| 363 | .end = DMA_REQ_SDHC1, | ||
| 364 | .flags = IORESOURCE_DMA | ||
| 365 | }, | ||
| 366 | }; | ||
| 367 | |||
| 368 | static u64 mxc_sdhc1_dmamask = 0xffffffffUL; | ||
| 369 | |||
| 370 | struct platform_device mxc_sdhc_device0 = { | ||
| 371 | .name = "mxc-mmc", | ||
| 372 | .id = 0, | ||
| 373 | .dev = { | ||
| 374 | .dma_mask = &mxc_sdhc1_dmamask, | ||
| 375 | .coherent_dma_mask = 0xffffffff, | ||
| 376 | }, | ||
| 377 | .num_resources = ARRAY_SIZE(mxc_sdhc1_resources), | ||
| 378 | .resource = mxc_sdhc1_resources, | ||
| 379 | }; | ||
| 380 | |||
| 381 | static struct resource mxc_sdhc2_resources[] = { | ||
| 382 | [0] = { | ||
| 383 | .start = SDHC2_BASE_ADDR, | ||
| 384 | .end = SDHC2_BASE_ADDR + SZ_4K - 1, | ||
| 385 | .flags = IORESOURCE_MEM, | ||
| 386 | }, | ||
| 387 | [1] = { | ||
| 388 | .start = MXC_INT_SDHC2, | ||
| 389 | .end = MXC_INT_SDHC2, | ||
| 390 | .flags = IORESOURCE_IRQ, | ||
| 391 | }, | ||
| 392 | [2] = { | ||
| 393 | .start = DMA_REQ_SDHC2, | ||
| 394 | .end = DMA_REQ_SDHC2, | ||
| 395 | .flags = IORESOURCE_DMA | ||
| 396 | }, | ||
| 397 | }; | ||
| 398 | |||
| 399 | static u64 mxc_sdhc2_dmamask = 0xffffffffUL; | ||
| 400 | |||
| 401 | struct platform_device mxc_sdhc_device1 = { | ||
| 402 | .name = "mxc-mmc", | ||
| 403 | .id = 1, | ||
| 404 | .dev = { | ||
| 405 | .dma_mask = &mxc_sdhc2_dmamask, | ||
| 406 | .coherent_dma_mask = 0xffffffff, | ||
| 407 | }, | ||
| 408 | .num_resources = ARRAY_SIZE(mxc_sdhc2_resources), | ||
| 409 | .resource = mxc_sdhc2_resources, | ||
| 410 | }; | ||
| 411 | |||
| 228 | /* GPIO port description */ | 412 | /* GPIO port description */ |
| 229 | static struct mxc_gpio_port imx_gpio_ports[] = { | 413 | static struct mxc_gpio_port imx_gpio_ports[] = { |
| 230 | [0] = { | 414 | [0] = { |
| 231 | .chip.label = "gpio-0", | 415 | .chip.label = "gpio-0", |
| 232 | .irq = MXC_INT_GPIO, | 416 | .irq = MXC_INT_GPIO, |
| 233 | .base = (void*)(AIPI_BASE_ADDR_VIRT + 0x15000 + 0x100 * 0), | 417 | .base = IO_ADDRESS(GPIO_BASE_ADDR), |
| 234 | .virtual_irq_start = MXC_GPIO_IRQ_START, | 418 | .virtual_irq_start = MXC_GPIO_IRQ_START, |
| 235 | }, | 419 | }, |
| 236 | [1] = { | 420 | [1] = { |
| 237 | .chip.label = "gpio-1", | 421 | .chip.label = "gpio-1", |
| 238 | .base = (void*)(AIPI_BASE_ADDR_VIRT + 0x15000 + 0x100 * 1), | 422 | .base = IO_ADDRESS(GPIO_BASE_ADDR + 0x100), |
| 239 | .virtual_irq_start = MXC_GPIO_IRQ_START + 32, | 423 | .virtual_irq_start = MXC_GPIO_IRQ_START + 32, |
| 240 | }, | 424 | }, |
| 241 | [2] = { | 425 | [2] = { |
| 242 | .chip.label = "gpio-2", | 426 | .chip.label = "gpio-2", |
| 243 | .base = (void*)(AIPI_BASE_ADDR_VIRT + 0x15000 + 0x100 * 2), | 427 | .base = IO_ADDRESS(GPIO_BASE_ADDR + 0x200), |
| 244 | .virtual_irq_start = MXC_GPIO_IRQ_START + 64, | 428 | .virtual_irq_start = MXC_GPIO_IRQ_START + 64, |
| 245 | }, | 429 | }, |
| 246 | [3] = { | 430 | [3] = { |
| 247 | .chip.label = "gpio-3", | 431 | .chip.label = "gpio-3", |
| 248 | .base = (void*)(AIPI_BASE_ADDR_VIRT + 0x15000 + 0x100 * 3), | 432 | .base = IO_ADDRESS(GPIO_BASE_ADDR + 0x300), |
| 249 | .virtual_irq_start = MXC_GPIO_IRQ_START + 96, | 433 | .virtual_irq_start = MXC_GPIO_IRQ_START + 96, |
| 250 | }, | 434 | }, |
| 251 | [4] = { | 435 | [4] = { |
| 252 | .chip.label = "gpio-4", | 436 | .chip.label = "gpio-4", |
| 253 | .base = (void*)(AIPI_BASE_ADDR_VIRT + 0x15000 + 0x100 * 4), | 437 | .base = IO_ADDRESS(GPIO_BASE_ADDR + 0x400), |
| 254 | .virtual_irq_start = MXC_GPIO_IRQ_START + 128, | 438 | .virtual_irq_start = MXC_GPIO_IRQ_START + 128, |
| 255 | }, | 439 | }, |
| 256 | [5] = { | 440 | [5] = { |
| 257 | .chip.label = "gpio-5", | 441 | .chip.label = "gpio-5", |
| 258 | .base = (void*)(AIPI_BASE_ADDR_VIRT + 0x15000 + 0x100 * 5), | 442 | .base = IO_ADDRESS(GPIO_BASE_ADDR + 0x500), |
| 259 | .virtual_irq_start = MXC_GPIO_IRQ_START + 160, | 443 | .virtual_irq_start = MXC_GPIO_IRQ_START + 160, |
| 260 | } | 444 | } |
| 261 | }; | 445 | }; |
diff --git a/arch/arm/mach-mx2/devices.h b/arch/arm/mach-mx2/devices.h index 1e8cb577a642..049005bb6aa9 100644 --- a/arch/arm/mach-mx2/devices.h +++ b/arch/arm/mach-mx2/devices.h | |||
| @@ -1,4 +1,3 @@ | |||
| 1 | |||
| 2 | extern struct platform_device mxc_gpt1; | 1 | extern struct platform_device mxc_gpt1; |
| 3 | extern struct platform_device mxc_gpt2; | 2 | extern struct platform_device mxc_gpt2; |
| 4 | extern struct platform_device mxc_gpt3; | 3 | extern struct platform_device mxc_gpt3; |
| @@ -14,3 +13,10 @@ extern struct platform_device mxc_uart_device4; | |||
| 14 | extern struct platform_device mxc_uart_device5; | 13 | extern struct platform_device mxc_uart_device5; |
| 15 | extern struct platform_device mxc_w1_master_device; | 14 | extern struct platform_device mxc_w1_master_device; |
| 16 | extern struct platform_device mxc_nand_device; | 15 | extern struct platform_device mxc_nand_device; |
| 16 | extern struct platform_device mxc_fb_device; | ||
| 17 | extern struct platform_device mxc_fec_device; | ||
| 18 | extern struct platform_device mxc_pwm_device; | ||
| 19 | extern struct platform_device mxc_i2c_device0; | ||
| 20 | extern struct platform_device mxc_i2c_device1; | ||
| 21 | extern struct platform_device mxc_sdhc_device0; | ||
| 22 | extern struct platform_device mxc_sdhc_device1; | ||
diff --git a/arch/arm/mach-mx2/generic.c b/arch/arm/mach-mx2/generic.c index dea6521d4d5c..bd51dd04948e 100644 --- a/arch/arm/mach-mx2/generic.c +++ b/arch/arm/mach-mx2/generic.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
| 22 | #include <linux/init.h> | 22 | #include <linux/init.h> |
| 23 | #include <mach/hardware.h> | 23 | #include <mach/hardware.h> |
| 24 | #include <mach/common.h> | ||
| 24 | #include <asm/pgtable.h> | 25 | #include <asm/pgtable.h> |
| 25 | #include <asm/mach/map.h> | 26 | #include <asm/mach/map.h> |
| 26 | 27 | ||
diff --git a/arch/arm/mach-mx2/mx27ads.c b/arch/arm/mach-mx2/mx27ads.c index 2b5c67f54571..4a3b097adc12 100644 --- a/arch/arm/mach-mx2/mx27ads.c +++ b/arch/arm/mach-mx2/mx27ads.c | |||
| @@ -31,7 +31,7 @@ | |||
| 31 | #include <asm/mach/map.h> | 31 | #include <asm/mach/map.h> |
| 32 | #include <mach/gpio.h> | 32 | #include <mach/gpio.h> |
| 33 | #include <mach/imx-uart.h> | 33 | #include <mach/imx-uart.h> |
| 34 | #include <mach/iomux-mx1-mx2.h> | 34 | #include <mach/iomux.h> |
| 35 | #include <mach/board-mx27ads.h> | 35 | #include <mach/board-mx27ads.h> |
| 36 | 36 | ||
| 37 | #include "devices.h" | 37 | #include "devices.h" |
| @@ -135,6 +135,7 @@ static int uart_mxc_port3_exit(struct platform_device *pdev) | |||
| 135 | { | 135 | { |
| 136 | mxc_gpio_release_multiple_pins(mxc_uart3_pins, | 136 | mxc_gpio_release_multiple_pins(mxc_uart3_pins, |
| 137 | ARRAY_SIZE(mxc_uart3_pins)); | 137 | ARRAY_SIZE(mxc_uart3_pins)); |
| 138 | return 0; | ||
| 138 | } | 139 | } |
| 139 | 140 | ||
| 140 | static int mxc_uart4_pins[] = { | 141 | static int mxc_uart4_pins[] = { |
| @@ -179,6 +180,7 @@ static int uart_mxc_port5_exit(struct platform_device *pdev) | |||
| 179 | 180 | ||
| 180 | static struct platform_device *platform_devices[] __initdata = { | 181 | static struct platform_device *platform_devices[] __initdata = { |
| 181 | &mx27ads_nor_mtd_device, | 182 | &mx27ads_nor_mtd_device, |
| 183 | &mxc_fec_device, | ||
| 182 | }; | 184 | }; |
| 183 | 185 | ||
| 184 | static int mxc_fec_pins[] = { | 186 | static int mxc_fec_pins[] = { |
| @@ -196,7 +198,7 @@ static int mxc_fec_pins[] = { | |||
| 196 | PD11_AOUT_FEC_TX_CLK, | 198 | PD11_AOUT_FEC_TX_CLK, |
| 197 | PD12_AOUT_FEC_RXD0, | 199 | PD12_AOUT_FEC_RXD0, |
| 198 | PD13_AOUT_FEC_RX_DV, | 200 | PD13_AOUT_FEC_RX_DV, |
| 199 | PD14_AOUT_FEC_CLR, | 201 | PD14_AOUT_FEC_RX_CLK, |
| 200 | PD15_AOUT_FEC_COL, | 202 | PD15_AOUT_FEC_COL, |
| 201 | PD16_AIN_FEC_TX_ER, | 203 | PD16_AIN_FEC_TX_ER, |
| 202 | PF23_AIN_FEC_TX_EN | 204 | PF23_AIN_FEC_TX_EN |
| @@ -208,12 +210,6 @@ static void gpio_fec_active(void) | |||
| 208 | ARRAY_SIZE(mxc_fec_pins), "FEC"); | 210 | ARRAY_SIZE(mxc_fec_pins), "FEC"); |
| 209 | } | 211 | } |
| 210 | 212 | ||
| 211 | static void gpio_fec_inactive(void) | ||
| 212 | { | ||
| 213 | mxc_gpio_release_multiple_pins(mxc_fec_pins, | ||
| 214 | ARRAY_SIZE(mxc_fec_pins)); | ||
| 215 | } | ||
| 216 | |||
| 217 | static struct imxuart_platform_data uart_pdata[] = { | 213 | static struct imxuart_platform_data uart_pdata[] = { |
| 218 | { | 214 | { |
| 219 | .init = uart_mxc_port0_init, | 215 | .init = uart_mxc_port0_init, |
| @@ -263,11 +259,10 @@ static void __init mx27ads_timer_init(void) | |||
| 263 | if ((__raw_readw(PBC_VERSION_REG) & CKIH_27MHZ_BIT_SET) == 0) | 259 | if ((__raw_readw(PBC_VERSION_REG) & CKIH_27MHZ_BIT_SET) == 0) |
| 264 | fref = 27000000; | 260 | fref = 27000000; |
| 265 | 261 | ||
| 266 | mxc_clocks_init(fref); | 262 | mx27_clocks_init(fref); |
| 267 | mxc_timer_init("gpt_clk.0"); | ||
| 268 | } | 263 | } |
| 269 | 264 | ||
| 270 | struct sys_timer mx27ads_timer = { | 265 | static struct sys_timer mx27ads_timer = { |
| 271 | .init = mx27ads_timer_init, | 266 | .init = mx27ads_timer_init, |
| 272 | }; | 267 | }; |
| 273 | 268 | ||
| @@ -280,7 +275,7 @@ static struct map_desc mx27ads_io_desc[] __initdata = { | |||
| 280 | }, | 275 | }, |
| 281 | }; | 276 | }; |
| 282 | 277 | ||
| 283 | void __init mx27ads_map_io(void) | 278 | static void __init mx27ads_map_io(void) |
| 284 | { | 279 | { |
| 285 | mxc_map_io(); | 280 | mxc_map_io(); |
| 286 | iotable_init(mx27ads_io_desc, ARRAY_SIZE(mx27ads_io_desc)); | 281 | iotable_init(mx27ads_io_desc, ARRAY_SIZE(mx27ads_io_desc)); |
diff --git a/arch/arm/mach-mx2/pcm038.c b/arch/arm/mach-mx2/pcm038.c index dfd4156da7d5..aa4eaa61d1b5 100644 --- a/arch/arm/mach-mx2/pcm038.c +++ b/arch/arm/mach-mx2/pcm038.c | |||
| @@ -20,11 +20,18 @@ | |||
| 20 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
| 21 | #include <linux/mtd/physmap.h> | 21 | #include <linux/mtd/physmap.h> |
| 22 | #include <linux/mtd/plat-ram.h> | 22 | #include <linux/mtd/plat-ram.h> |
| 23 | #include <linux/io.h> | ||
| 24 | #include <linux/i2c.h> | ||
| 25 | #include <linux/i2c/at24.h> | ||
| 26 | |||
| 23 | #include <asm/mach/arch.h> | 27 | #include <asm/mach/arch.h> |
| 24 | #include <asm/mach-types.h> | 28 | #include <asm/mach-types.h> |
| 25 | #include <mach/common.h> | 29 | #include <mach/common.h> |
| 26 | #include <mach/hardware.h> | 30 | #include <mach/hardware.h> |
| 27 | #include <mach/iomux-mx1-mx2.h> | 31 | #include <mach/iomux.h> |
| 32 | #ifdef CONFIG_I2C_IMX | ||
| 33 | #include <mach/i2c.h> | ||
| 34 | #endif | ||
| 28 | #include <asm/mach/time.h> | 35 | #include <asm/mach/time.h> |
| 29 | #include <mach/imx-uart.h> | 36 | #include <mach/imx-uart.h> |
| 30 | #include <mach/board-pcm038.h> | 37 | #include <mach/board-pcm038.h> |
| @@ -121,10 +128,10 @@ static int uart_mxc_port1_exit(struct platform_device *pdev) | |||
| 121 | return 0; | 128 | return 0; |
| 122 | } | 129 | } |
| 123 | 130 | ||
| 124 | static int mxc_uart2_pins[] = { PE10_PF_UART3_CTS, | 131 | static int mxc_uart2_pins[] = { PE8_PF_UART3_TXD, |
| 125 | PE9_PF_UART3_RXD, | 132 | PE9_PF_UART3_RXD, |
| 126 | PE10_PF_UART3_CTS, | 133 | PE10_PF_UART3_CTS, |
| 127 | PE9_PF_UART3_RXD }; | 134 | PE11_PF_UART3_RTS }; |
| 128 | 135 | ||
| 129 | static int uart_mxc_port2_init(struct platform_device *pdev) | 136 | static int uart_mxc_port2_init(struct platform_device *pdev) |
| 130 | { | 137 | { |
| @@ -170,7 +177,7 @@ static int mxc_fec_pins[] = { | |||
| 170 | PD11_AOUT_FEC_TX_CLK, | 177 | PD11_AOUT_FEC_TX_CLK, |
| 171 | PD12_AOUT_FEC_RXD0, | 178 | PD12_AOUT_FEC_RXD0, |
| 172 | PD13_AOUT_FEC_RX_DV, | 179 | PD13_AOUT_FEC_RX_DV, |
| 173 | PD14_AOUT_FEC_CLR, | 180 | PD14_AOUT_FEC_RX_CLK, |
| 174 | PD15_AOUT_FEC_COL, | 181 | PD15_AOUT_FEC_COL, |
| 175 | PD16_AIN_FEC_TX_ER, | 182 | PD16_AIN_FEC_TX_ER, |
| 176 | PF23_AIN_FEC_TX_EN | 183 | PF23_AIN_FEC_TX_EN |
| @@ -182,12 +189,6 @@ static void gpio_fec_active(void) | |||
| 182 | ARRAY_SIZE(mxc_fec_pins), "FEC"); | 189 | ARRAY_SIZE(mxc_fec_pins), "FEC"); |
| 183 | } | 190 | } |
| 184 | 191 | ||
| 185 | static void gpio_fec_inactive(void) | ||
| 186 | { | ||
| 187 | mxc_gpio_release_multiple_pins(mxc_fec_pins, | ||
| 188 | ARRAY_SIZE(mxc_fec_pins)); | ||
| 189 | } | ||
| 190 | |||
| 191 | static struct mxc_nand_platform_data pcm038_nand_board_info = { | 192 | static struct mxc_nand_platform_data pcm038_nand_board_info = { |
| 192 | .width = 1, | 193 | .width = 1, |
| 193 | .hw_ecc = 1, | 194 | .hw_ecc = 1, |
| @@ -196,6 +197,7 @@ static struct mxc_nand_platform_data pcm038_nand_board_info = { | |||
| 196 | static struct platform_device *platform_devices[] __initdata = { | 197 | static struct platform_device *platform_devices[] __initdata = { |
| 197 | &pcm038_nor_mtd_device, | 198 | &pcm038_nor_mtd_device, |
| 198 | &mxc_w1_master_device, | 199 | &mxc_w1_master_device, |
| 200 | &mxc_fec_device, | ||
| 199 | &pcm038_sram_mtd_device, | 201 | &pcm038_sram_mtd_device, |
| 200 | }; | 202 | }; |
| 201 | 203 | ||
| @@ -208,6 +210,51 @@ static void __init pcm038_init_sram(void) | |||
| 208 | __raw_writel(0x22220a00, CSCR_A(1)); | 210 | __raw_writel(0x22220a00, CSCR_A(1)); |
| 209 | } | 211 | } |
| 210 | 212 | ||
| 213 | #ifdef CONFIG_I2C_IMX | ||
| 214 | static int mxc_i2c1_pins[] = { | ||
| 215 | PC5_PF_I2C2_SDA, | ||
| 216 | PC6_PF_I2C2_SCL | ||
| 217 | }; | ||
| 218 | |||
| 219 | static int pcm038_i2c_1_init(struct device *dev) | ||
| 220 | { | ||
| 221 | return mxc_gpio_setup_multiple_pins(mxc_i2c1_pins, ARRAY_SIZE(mxc_i2c1_pins), | ||
| 222 | "I2C1"); | ||
| 223 | } | ||
| 224 | |||
| 225 | static void pcm038_i2c_1_exit(struct device *dev) | ||
| 226 | { | ||
| 227 | mxc_gpio_release_multiple_pins(mxc_i2c1_pins, ARRAY_SIZE(mxc_i2c1_pins)); | ||
| 228 | } | ||
| 229 | |||
| 230 | static struct imxi2c_platform_data pcm038_i2c_1_data = { | ||
| 231 | .bitrate = 100000, | ||
| 232 | .init = pcm038_i2c_1_init, | ||
| 233 | .exit = pcm038_i2c_1_exit, | ||
| 234 | }; | ||
| 235 | |||
| 236 | static struct at24_platform_data board_eeprom = { | ||
| 237 | .byte_len = 4096, | ||
| 238 | .page_size = 32, | ||
| 239 | .flags = AT24_FLAG_ADDR16, | ||
| 240 | }; | ||
| 241 | |||
| 242 | static struct i2c_board_info pcm038_i2c_devices[] = { | ||
| 243 | [0] = { | ||
| 244 | I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */ | ||
| 245 | .platform_data = &board_eeprom, | ||
| 246 | }, | ||
| 247 | [1] = { | ||
| 248 | I2C_BOARD_INFO("rtc-pcf8563", 0x51), | ||
| 249 | .type = "pcf8563" | ||
| 250 | }, | ||
| 251 | [2] = { | ||
| 252 | I2C_BOARD_INFO("lm75", 0x4a), | ||
| 253 | .type = "lm75" | ||
| 254 | } | ||
| 255 | }; | ||
| 256 | #endif | ||
| 257 | |||
| 211 | static void __init pcm038_init(void) | 258 | static void __init pcm038_init(void) |
| 212 | { | 259 | { |
| 213 | gpio_fec_active(); | 260 | gpio_fec_active(); |
| @@ -217,9 +264,17 @@ static void __init pcm038_init(void) | |||
| 217 | mxc_register_device(&mxc_uart_device1, &uart_pdata[1]); | 264 | mxc_register_device(&mxc_uart_device1, &uart_pdata[1]); |
| 218 | mxc_register_device(&mxc_uart_device2, &uart_pdata[2]); | 265 | mxc_register_device(&mxc_uart_device2, &uart_pdata[2]); |
| 219 | 266 | ||
| 220 | mxc_gpio_mode(PE16_AF_RTCK); /* OWIRE */ | 267 | mxc_gpio_mode(PE16_AF_OWIRE); |
| 221 | mxc_register_device(&mxc_nand_device, &pcm038_nand_board_info); | 268 | mxc_register_device(&mxc_nand_device, &pcm038_nand_board_info); |
| 222 | 269 | ||
| 270 | #ifdef CONFIG_I2C_IMX | ||
| 271 | /* only the i2c master 1 is used on this CPU card */ | ||
| 272 | i2c_register_board_info(1, pcm038_i2c_devices, | ||
| 273 | ARRAY_SIZE(pcm038_i2c_devices)); | ||
| 274 | |||
| 275 | mxc_register_device(&mxc_i2c_device1, &pcm038_i2c_1_data); | ||
| 276 | #endif | ||
| 277 | |||
| 223 | platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); | 278 | platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); |
| 224 | 279 | ||
| 225 | #ifdef CONFIG_MACH_PCM970_BASEBOARD | 280 | #ifdef CONFIG_MACH_PCM970_BASEBOARD |
| @@ -229,11 +284,10 @@ static void __init pcm038_init(void) | |||
| 229 | 284 | ||
| 230 | static void __init pcm038_timer_init(void) | 285 | static void __init pcm038_timer_init(void) |
| 231 | { | 286 | { |
| 232 | mxc_clocks_init(26000000); | 287 | mx27_clocks_init(26000000); |
| 233 | mxc_timer_init("gpt_clk.0"); | ||
| 234 | } | 288 | } |
| 235 | 289 | ||
| 236 | struct sys_timer pcm038_timer = { | 290 | static struct sys_timer pcm038_timer = { |
| 237 | .init = pcm038_timer_init, | 291 | .init = pcm038_timer_init, |
| 238 | }; | 292 | }; |
| 239 | 293 | ||
diff --git a/arch/arm/mach-mx2/pcm970-baseboard.c b/arch/arm/mach-mx2/pcm970-baseboard.c index a560cd6ad23d..bf4e520bc1bc 100644 --- a/arch/arm/mach-mx2/pcm970-baseboard.c +++ b/arch/arm/mach-mx2/pcm970-baseboard.c | |||
| @@ -17,9 +17,138 @@ | |||
| 17 | */ | 17 | */ |
| 18 | 18 | ||
| 19 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
| 20 | #include <mach/hardware.h> | 20 | #include <linux/gpio.h> |
| 21 | #include <linux/irq.h> | ||
| 22 | |||
| 21 | #include <asm/mach/arch.h> | 23 | #include <asm/mach/arch.h> |
| 22 | 24 | ||
| 25 | #include <mach/hardware.h> | ||
| 26 | #include <mach/common.h> | ||
| 27 | #include <mach/mmc.h> | ||
| 28 | #include <mach/imxfb.h> | ||
| 29 | #include <mach/iomux.h> | ||
| 30 | |||
| 31 | #include "devices.h" | ||
| 32 | |||
| 33 | static int pcm970_sdhc2_get_ro(struct device *dev) | ||
| 34 | { | ||
| 35 | return gpio_get_value(GPIO_PORTC + 28); | ||
| 36 | } | ||
| 37 | |||
| 38 | static int pcm970_sdhc2_pins[] = { | ||
| 39 | PB4_PF_SD2_D0, | ||
| 40 | PB5_PF_SD2_D1, | ||
| 41 | PB6_PF_SD2_D2, | ||
| 42 | PB7_PF_SD2_D3, | ||
| 43 | PB8_PF_SD2_CMD, | ||
| 44 | PB9_PF_SD2_CLK, | ||
| 45 | }; | ||
| 46 | |||
| 47 | static int pcm970_sdhc2_init(struct device *dev, irq_handler_t detect_irq, void *data) | ||
| 48 | { | ||
| 49 | int ret; | ||
| 50 | |||
| 51 | ret = mxc_gpio_setup_multiple_pins(pcm970_sdhc2_pins, | ||
| 52 | ARRAY_SIZE(pcm970_sdhc2_pins), "sdhc2"); | ||
| 53 | if(ret) | ||
| 54 | return ret; | ||
| 55 | |||
| 56 | ret = request_irq(IRQ_GPIOC(29), detect_irq, 0, | ||
| 57 | "imx-mmc-detect", data); | ||
| 58 | if (ret) | ||
| 59 | goto out_release_gpio; | ||
| 60 | |||
| 61 | set_irq_type(IRQ_GPIOC(29), IRQF_TRIGGER_FALLING); | ||
| 62 | |||
| 63 | ret = gpio_request(GPIO_PORTC + 28, "imx-mmc-ro"); | ||
| 64 | if (ret) | ||
| 65 | goto out_release_gpio; | ||
| 66 | |||
| 67 | mxc_gpio_mode((GPIO_PORTC | 28) | GPIO_GPIO | GPIO_IN); | ||
| 68 | gpio_direction_input(GPIO_PORTC + 28); | ||
| 69 | |||
| 70 | return 0; | ||
| 71 | |||
| 72 | out_release_gpio: | ||
| 73 | mxc_gpio_release_multiple_pins(pcm970_sdhc2_pins, | ||
| 74 | ARRAY_SIZE(pcm970_sdhc2_pins)); | ||
| 75 | return ret; | ||
| 76 | } | ||
| 77 | |||
| 78 | static void pcm970_sdhc2_exit(struct device *dev, void *data) | ||
| 79 | { | ||
| 80 | free_irq(IRQ_GPIOC(29), data); | ||
| 81 | gpio_free(GPIO_PORTC + 28); | ||
| 82 | mxc_gpio_release_multiple_pins(pcm970_sdhc2_pins, | ||
| 83 | ARRAY_SIZE(pcm970_sdhc2_pins)); | ||
| 84 | } | ||
| 85 | |||
| 86 | static struct imxmmc_platform_data sdhc_pdata = { | ||
| 87 | .get_ro = pcm970_sdhc2_get_ro, | ||
| 88 | .init = pcm970_sdhc2_init, | ||
| 89 | .exit = pcm970_sdhc2_exit, | ||
| 90 | }; | ||
| 91 | |||
| 92 | static int mxc_fb_pins[] = { | ||
| 93 | PA5_PF_LSCLK, PA6_PF_LD0, PA7_PF_LD1, PA8_PF_LD2, | ||
| 94 | PA9_PF_LD3, PA10_PF_LD4, PA11_PF_LD5, PA12_PF_LD6, | ||
| 95 | PA13_PF_LD7, PA14_PF_LD8, PA15_PF_LD9, PA16_PF_LD10, | ||
| 96 | PA17_PF_LD11, PA18_PF_LD12, PA19_PF_LD13, PA20_PF_LD14, | ||
| 97 | PA21_PF_LD15, PA22_PF_LD16, PA23_PF_LD17, PA24_PF_REV, | ||
| 98 | PA25_PF_CLS, PA26_PF_PS, PA27_PF_SPL_SPR, PA28_PF_HSYNC, | ||
| 99 | PA29_PF_VSYNC, PA30_PF_CONTRAST, PA31_PF_OE_ACD | ||
| 100 | }; | ||
| 101 | |||
| 102 | static int pcm038_fb_init(struct platform_device *pdev) | ||
| 103 | { | ||
| 104 | return mxc_gpio_setup_multiple_pins(mxc_fb_pins, | ||
| 105 | ARRAY_SIZE(mxc_fb_pins), "FB"); | ||
| 106 | } | ||
| 107 | |||
| 108 | static int pcm038_fb_exit(struct platform_device *pdev) | ||
| 109 | { | ||
| 110 | mxc_gpio_release_multiple_pins(mxc_fb_pins, ARRAY_SIZE(mxc_fb_pins)); | ||
| 111 | |||
| 112 | return 0; | ||
| 113 | } | ||
| 114 | |||
| 115 | /* | ||
| 116 | * Connected is a portrait Sharp-QVGA display | ||
| 117 | * of type: LQ035Q7DH06 | ||
| 118 | */ | ||
| 119 | static struct imx_fb_platform_data pcm038_fb_data = { | ||
| 120 | .pixclock = 188679, /* in ps (5.3MHz) */ | ||
| 121 | .xres = 240, | ||
| 122 | .yres = 320, | ||
| 123 | |||
| 124 | .bpp = 16, | ||
| 125 | .hsync_len = 7, | ||
| 126 | .left_margin = 5, | ||
| 127 | .right_margin = 16, | ||
| 128 | |||
| 129 | .vsync_len = 1, | ||
| 130 | .upper_margin = 7, | ||
| 131 | .lower_margin = 9, | ||
| 132 | .fixed_screen_cpu = 0, | ||
| 133 | |||
| 134 | /* | ||
| 135 | * - HSYNC active high | ||
| 136 | * - VSYNC active high | ||
| 137 | * - clk notenabled while idle | ||
| 138 | * - clock not inverted | ||
| 139 | * - data not inverted | ||
| 140 | * - data enable low active | ||
| 141 | * - enable sharp mode | ||
| 142 | */ | ||
| 143 | .pcr = 0xFA0080C0, | ||
| 144 | .pwmr = 0x00A903FF, | ||
| 145 | .lscr1 = 0x00120300, | ||
| 146 | .dmacr = 0x00020010, | ||
| 147 | |||
| 148 | .init = pcm038_fb_init, | ||
| 149 | .exit = pcm038_fb_exit, | ||
| 150 | }; | ||
| 151 | |||
| 23 | /* | 152 | /* |
| 24 | * system init for baseboard usage. Will be called by pcm038 init. | 153 | * system init for baseboard usage. Will be called by pcm038 init. |
| 25 | * | 154 | * |
| @@ -28,4 +157,6 @@ | |||
| 28 | */ | 157 | */ |
| 29 | void __init pcm970_baseboard_init(void) | 158 | void __init pcm970_baseboard_init(void) |
| 30 | { | 159 | { |
| 160 | mxc_register_device(&mxc_fb_device, &pcm038_fb_data); | ||
| 161 | mxc_register_device(&mxc_sdhc_device1, &sdhc_pdata); | ||
| 31 | } | 162 | } |
diff --git a/arch/arm/mach-mx2/serial.c b/arch/arm/mach-mx2/serial.c index 16debc296dad..40a485cdc10e 100644 --- a/arch/arm/mach-mx2/serial.c +++ b/arch/arm/mach-mx2/serial.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <linux/serial.h> | 22 | #include <linux/serial.h> |
| 23 | #include <mach/hardware.h> | 23 | #include <mach/hardware.h> |
| 24 | #include <mach/imx-uart.h> | 24 | #include <mach/imx-uart.h> |
| 25 | #include "devices.h" | ||
| 25 | 26 | ||
| 26 | static struct resource uart0[] = { | 27 | static struct resource uart0[] = { |
| 27 | { | 28 | { |
| @@ -99,6 +100,7 @@ struct platform_device mxc_uart_device3 = { | |||
| 99 | .num_resources = ARRAY_SIZE(uart3), | 100 | .num_resources = ARRAY_SIZE(uart3), |
| 100 | }; | 101 | }; |
| 101 | 102 | ||
| 103 | #ifdef CONFIG_MACH_MX27 | ||
| 102 | static struct resource uart4[] = { | 104 | static struct resource uart4[] = { |
| 103 | { | 105 | { |
| 104 | .start = UART5_BASE_ADDR, | 106 | .start = UART5_BASE_ADDR, |
| @@ -136,3 +138,4 @@ struct platform_device mxc_uart_device5 = { | |||
| 136 | .resource = uart5, | 138 | .resource = uart5, |
| 137 | .num_resources = ARRAY_SIZE(uart5), | 139 | .num_resources = ARRAY_SIZE(uart5), |
| 138 | }; | 140 | }; |
| 141 | #endif | ||
diff --git a/arch/arm/mach-mx3/Kconfig b/arch/arm/mach-mx3/Kconfig index e79659e8176e..d6235583e979 100644 --- a/arch/arm/mach-mx3/Kconfig +++ b/arch/arm/mach-mx3/Kconfig | |||
| @@ -1,21 +1,40 @@ | |||
| 1 | menu "MX3 Options" | 1 | if ARCH_MX3 |
| 2 | depends on ARCH_MX3 | 2 | |
| 3 | config ARCH_MX31 | ||
| 4 | bool | ||
| 5 | |||
| 6 | config ARCH_MX35 | ||
| 7 | bool | ||
| 8 | |||
| 9 | comment "MX3 platforms:" | ||
| 3 | 10 | ||
| 4 | config MACH_MX31ADS | 11 | config MACH_MX31ADS |
| 5 | bool "Support MX31ADS platforms" | 12 | bool "Support MX31ADS platforms" |
| 13 | select ARCH_MX31 | ||
| 6 | default y | 14 | default y |
| 7 | help | 15 | help |
| 8 | Include support for MX31ADS platform. This includes specific | 16 | Include support for MX31ADS platform. This includes specific |
| 9 | configurations for the board and its peripherals. | 17 | configurations for the board and its peripherals. |
| 10 | 18 | ||
| 19 | config MACH_MX31ADS_WM1133_EV1 | ||
| 20 | bool "Support Wolfson Microelectronics 1133-EV1 module" | ||
| 21 | depends on MACH_MX31ADS | ||
| 22 | select MFD_WM8350_CONFIG_MODE_0 | ||
| 23 | select MFD_WM8352_CONFIG_MODE_0 | ||
| 24 | help | ||
| 25 | Include support for the Wolfson Microelectronics 1133-EV1 PMU | ||
| 26 | and audio module for the MX31ADS platform. | ||
| 27 | |||
| 11 | config MACH_PCM037 | 28 | config MACH_PCM037 |
| 12 | bool "Support Phytec pcm037 platforms" | 29 | bool "Support Phytec pcm037 (i.MX31) platforms" |
| 30 | select ARCH_MX31 | ||
| 13 | help | 31 | help |
| 14 | Include support for Phytec pcm037 platform. This includes | 32 | Include support for Phytec pcm037 platform. This includes |
| 15 | specific configurations for the board and its peripherals. | 33 | specific configurations for the board and its peripherals. |
| 16 | 34 | ||
| 17 | config MACH_MX31LITE | 35 | config MACH_MX31LITE |
| 18 | bool "Support MX31 LITEKIT (LogicPD)" | 36 | bool "Support MX31 LITEKIT (LogicPD)" |
| 37 | select ARCH_MX31 | ||
| 19 | default n | 38 | default n |
| 20 | help | 39 | help |
| 21 | Include support for MX31 LITEKIT platform. This includes specific | 40 | Include support for MX31 LITEKIT platform. This includes specific |
| @@ -23,6 +42,7 @@ config MACH_MX31LITE | |||
| 23 | 42 | ||
| 24 | config MACH_MX31_3DS | 43 | config MACH_MX31_3DS |
| 25 | bool "Support MX31PDK (3DS)" | 44 | bool "Support MX31PDK (3DS)" |
| 45 | select ARCH_MX31 | ||
| 26 | default n | 46 | default n |
| 27 | help | 47 | help |
| 28 | Include support for MX31PDK (3DS) platform. This includes specific | 48 | Include support for MX31PDK (3DS) platform. This includes specific |
| @@ -30,10 +50,18 @@ config MACH_MX31_3DS | |||
| 30 | 50 | ||
| 31 | config MACH_MX31MOBOARD | 51 | config MACH_MX31MOBOARD |
| 32 | bool "Support mx31moboard platforms (EPFL Mobots group)" | 52 | bool "Support mx31moboard platforms (EPFL Mobots group)" |
| 53 | select ARCH_MX31 | ||
| 33 | default n | 54 | default n |
| 34 | help | 55 | help |
| 35 | Include support for mx31moboard platform. This includes specific | 56 | Include support for mx31moboard platform. This includes specific |
| 36 | configurations for the board and its peripherals. | 57 | configurations for the board and its peripherals. |
| 37 | 58 | ||
| 38 | endmenu | 59 | config MACH_QONG |
| 60 | bool "Support Dave/DENX QongEVB-LITE platform" | ||
| 61 | select ARCH_MX31 | ||
| 62 | default n | ||
| 63 | help | ||
| 64 | Include support for Dave/DENX QongEVB-LITE platform. This includes | ||
| 65 | specific configurations for the board and its peripherals. | ||
| 39 | 66 | ||
| 67 | endif | ||
diff --git a/arch/arm/mach-mx3/Makefile b/arch/arm/mach-mx3/Makefile index 5a151540fe83..272c8a953b30 100644 --- a/arch/arm/mach-mx3/Makefile +++ b/arch/arm/mach-mx3/Makefile | |||
| @@ -4,9 +4,13 @@ | |||
| 4 | 4 | ||
| 5 | # Object file lists. | 5 | # Object file lists. |
| 6 | 6 | ||
| 7 | obj-y := mm.o clock.o devices.o iomux.o | 7 | obj-y := mm.o devices.o |
| 8 | obj-$(CONFIG_ARCH_MX31) += clock.o iomux.o | ||
| 9 | obj-$(CONFIG_ARCH_MX35) += clock-imx35.o | ||
| 8 | obj-$(CONFIG_MACH_MX31ADS) += mx31ads.o | 10 | obj-$(CONFIG_MACH_MX31ADS) += mx31ads.o |
| 9 | obj-$(CONFIG_MACH_MX31LITE) += mx31lite.o | 11 | obj-$(CONFIG_MACH_MX31LITE) += mx31lite.o |
| 10 | obj-$(CONFIG_MACH_PCM037) += pcm037.o | 12 | obj-$(CONFIG_MACH_PCM037) += pcm037.o |
| 11 | obj-$(CONFIG_MACH_MX31_3DS) += mx31pdk.o | 13 | obj-$(CONFIG_MACH_MX31_3DS) += mx31pdk.o |
| 12 | obj-$(CONFIG_MACH_MX31MOBOARD) += mx31moboard.o | 14 | obj-$(CONFIG_MACH_MX31MOBOARD) += mx31moboard.o mx31moboard-devboard.o \ |
| 15 | mx31moboard-marxbot.o | ||
| 16 | obj-$(CONFIG_MACH_QONG) += qong.o | ||
diff --git a/arch/arm/mach-mx3/clock-imx35.c b/arch/arm/mach-mx3/clock-imx35.c new file mode 100644 index 000000000000..53a112d4e04a --- /dev/null +++ b/arch/arm/mach-mx3/clock-imx35.c | |||
| @@ -0,0 +1,487 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 by Sascha Hauer, Pengutronix | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or | ||
| 5 | * modify it under the terms of the GNU General Public License | ||
| 6 | * as published by the Free Software Foundation; either version 2 | ||
| 7 | * of the License, or (at your option) any later version. | ||
| 8 | * This program is distributed in the hope that it will be useful, | ||
| 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 11 | * GNU General Public License for more details. | ||
| 12 | * | ||
| 13 | * You should have received a copy of the GNU General Public License | ||
| 14 | * along with this program; if not, write to the Free Software | ||
| 15 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
| 16 | * MA 02110-1301, USA. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <linux/kernel.h> | ||
| 20 | #include <linux/init.h> | ||
| 21 | #include <linux/list.h> | ||
| 22 | #include <linux/clk.h> | ||
| 23 | #include <linux/io.h> | ||
| 24 | |||
| 25 | #include <asm/clkdev.h> | ||
| 26 | |||
| 27 | #include <mach/clock.h> | ||
| 28 | #include <mach/hardware.h> | ||
| 29 | #include <mach/common.h> | ||
| 30 | |||
| 31 | #define CCM_BASE IO_ADDRESS(CCM_BASE_ADDR) | ||
| 32 | |||
| 33 | #define CCM_CCMR 0x00 | ||
| 34 | #define CCM_PDR0 0x04 | ||
| 35 | #define CCM_PDR1 0x08 | ||
| 36 | #define CCM_PDR2 0x0C | ||
| 37 | #define CCM_PDR3 0x10 | ||
| 38 | #define CCM_PDR4 0x14 | ||
| 39 | #define CCM_RCSR 0x18 | ||
| 40 | #define CCM_MPCTL 0x1C | ||
| 41 | #define CCM_PPCTL 0x20 | ||
| 42 | #define CCM_ACMR 0x24 | ||
| 43 | #define CCM_COSR 0x28 | ||
| 44 | #define CCM_CGR0 0x2C | ||
| 45 | #define CCM_CGR1 0x30 | ||
| 46 | #define CCM_CGR2 0x34 | ||
| 47 | #define CCM_CGR3 0x38 | ||
| 48 | |||
| 49 | #ifdef HAVE_SET_RATE_SUPPORT | ||
| 50 | static void calc_dividers(u32 div, u32 *pre, u32 *post, u32 maxpost) | ||
| 51 | { | ||
| 52 | u32 min_pre, temp_pre, old_err, err; | ||
| 53 | |||
| 54 | min_pre = (div - 1) / maxpost + 1; | ||
| 55 | old_err = 8; | ||
| 56 | |||
| 57 | for (temp_pre = 8; temp_pre >= min_pre; temp_pre--) { | ||
| 58 | if (div > (temp_pre * maxpost)) | ||
| 59 | break; | ||
| 60 | |||
| 61 | if (div < (temp_pre * temp_pre)) | ||
| 62 | continue; | ||
| 63 | |||
| 64 | err = div % temp_pre; | ||
| 65 | |||
| 66 | if (err == 0) { | ||
| 67 | *pre = temp_pre; | ||
| 68 | break; | ||
| 69 | } | ||
| 70 | |||
| 71 | err = temp_pre - err; | ||
| 72 | |||
| 73 | if (err < old_err) { | ||
| 74 | old_err = err; | ||
| 75 | *pre = temp_pre; | ||
| 76 | } | ||
| 77 | } | ||
| 78 | |||
| 79 | *post = (div + *pre - 1) / *pre; | ||
| 80 | } | ||
| 81 | |||
| 82 | /* get the best values for a 3-bit divider combined with a 6-bit divider */ | ||
| 83 | static void calc_dividers_3_6(u32 div, u32 *pre, u32 *post) | ||
| 84 | { | ||
| 85 | if (div >= 512) { | ||
| 86 | *pre = 8; | ||
| 87 | *post = 64; | ||
| 88 | } else if (div >= 64) { | ||
| 89 | calc_dividers(div, pre, post, 64); | ||
| 90 | } else if (div <= 8) { | ||
| 91 | *pre = div; | ||
| 92 | *post = 1; | ||
| 93 | } else { | ||
| 94 | *pre = 1; | ||
| 95 | *post = div; | ||
| 96 | } | ||
| 97 | } | ||
| 98 | |||
| 99 | /* get the best values for two cascaded 3-bit dividers */ | ||
| 100 | static void calc_dividers_3_3(u32 div, u32 *pre, u32 *post) | ||
| 101 | { | ||
| 102 | if (div >= 64) { | ||
| 103 | *pre = *post = 8; | ||
| 104 | } else if (div > 8) { | ||
| 105 | calc_dividers(div, pre, post, 8); | ||
| 106 | } else { | ||
| 107 | *pre = 1; | ||
| 108 | *post = div; | ||
| 109 | } | ||
| 110 | } | ||
| 111 | #endif | ||
| 112 | |||
| 113 | static unsigned long get_rate_mpll(void) | ||
| 114 | { | ||
| 115 | ulong mpctl = __raw_readl(CCM_BASE + CCM_MPCTL); | ||
| 116 | |||
| 117 | return mxc_decode_pll(mpctl, 24000000); | ||
| 118 | } | ||
| 119 | |||
| 120 | static unsigned long get_rate_ppll(void) | ||
| 121 | { | ||
| 122 | ulong ppctl = __raw_readl(CCM_BASE + CCM_PPCTL); | ||
| 123 | |||
| 124 | return mxc_decode_pll(ppctl, 24000000); | ||
| 125 | } | ||
| 126 | |||
| 127 | struct arm_ahb_div { | ||
| 128 | unsigned char arm, ahb, sel; | ||
| 129 | }; | ||
| 130 | |||
| 131 | static struct arm_ahb_div clk_consumer[] = { | ||
| 132 | { .arm = 1, .ahb = 4, .sel = 0}, | ||
| 133 | { .arm = 1, .ahb = 3, .sel = 1}, | ||
| 134 | { .arm = 2, .ahb = 2, .sel = 0}, | ||
| 135 | { .arm = 0, .ahb = 0, .sel = 0}, | ||
| 136 | { .arm = 0, .ahb = 0, .sel = 0}, | ||
| 137 | { .arm = 0, .ahb = 0, .sel = 0}, | ||
| 138 | { .arm = 4, .ahb = 1, .sel = 0}, | ||
| 139 | { .arm = 1, .ahb = 5, .sel = 0}, | ||
| 140 | { .arm = 1, .ahb = 8, .sel = 0}, | ||
| 141 | { .arm = 1, .ahb = 6, .sel = 1}, | ||
| 142 | { .arm = 2, .ahb = 4, .sel = 0}, | ||
| 143 | { .arm = 0, .ahb = 0, .sel = 0}, | ||
| 144 | { .arm = 0, .ahb = 0, .sel = 0}, | ||
| 145 | { .arm = 0, .ahb = 0, .sel = 0}, | ||
| 146 | { .arm = 4, .ahb = 2, .sel = 0}, | ||
| 147 | { .arm = 0, .ahb = 0, .sel = 0}, | ||
| 148 | }; | ||
| 149 | |||
| 150 | static struct arm_ahb_div clk_automotive[] = { | ||
| 151 | { .arm = 1, .ahb = 3, .sel = 0}, | ||
| 152 | { .arm = 1, .ahb = 2, .sel = 1}, | ||
| 153 | { .arm = 2, .ahb = 1, .sel = 1}, | ||
| 154 | { .arm = 0, .ahb = 0, .sel = 0}, | ||
| 155 | { .arm = 1, .ahb = 6, .sel = 0}, | ||
| 156 | { .arm = 1, .ahb = 4, .sel = 1}, | ||
| 157 | { .arm = 2, .ahb = 2, .sel = 1}, | ||
| 158 | { .arm = 0, .ahb = 0, .sel = 0}, | ||
| 159 | }; | ||
| 160 | |||
| 161 | static unsigned long get_rate_arm(void) | ||
| 162 | { | ||
| 163 | unsigned long pdr0 = __raw_readl(CCM_BASE + CCM_PDR0); | ||
| 164 | struct arm_ahb_div *aad; | ||
| 165 | unsigned long fref = get_rate_mpll(); | ||
| 166 | |||
| 167 | if (pdr0 & 1) { | ||
| 168 | /* consumer path */ | ||
| 169 | aad = &clk_consumer[(pdr0 >> 16) & 0xf]; | ||
| 170 | if (aad->sel) | ||
| 171 | fref = fref * 2 / 3; | ||
| 172 | } else { | ||
| 173 | /* auto path */ | ||
| 174 | aad = &clk_automotive[(pdr0 >> 9) & 0x7]; | ||
| 175 | if (aad->sel) | ||
| 176 | fref = fref * 3 / 4; | ||
| 177 | } | ||
| 178 | return fref / aad->arm; | ||
| 179 | } | ||
| 180 | |||
| 181 | static unsigned long get_rate_ahb(struct clk *clk) | ||
| 182 | { | ||
| 183 | unsigned long pdr0 = __raw_readl(CCM_BASE + CCM_PDR0); | ||
| 184 | struct arm_ahb_div *aad; | ||
| 185 | unsigned long fref = get_rate_mpll(); | ||
| 186 | |||
| 187 | if (pdr0 & 1) | ||
| 188 | /* consumer path */ | ||
| 189 | aad = &clk_consumer[(pdr0 >> 16) & 0xf]; | ||
| 190 | else | ||
| 191 | /* auto path */ | ||
| 192 | aad = &clk_automotive[(pdr0 >> 9) & 0x7]; | ||
| 193 | |||
| 194 | return fref / aad->ahb; | ||
| 195 | } | ||
| 196 | |||
| 197 | static unsigned long get_rate_ipg(struct clk *clk) | ||
| 198 | { | ||
| 199 | return get_rate_ahb(NULL) >> 1; | ||
| 200 | } | ||
| 201 | |||
| 202 | static unsigned long get_3_3_div(unsigned long in) | ||
| 203 | { | ||
| 204 | return (((in >> 3) & 0x7) + 1) * ((in & 0x7) + 1); | ||
| 205 | } | ||
| 206 | |||
| 207 | static unsigned long get_rate_uart(struct clk *clk) | ||
| 208 | { | ||
| 209 | unsigned long pdr3 = __raw_readl(CCM_BASE + CCM_PDR3); | ||
| 210 | unsigned long pdr4 = __raw_readl(CCM_BASE + CCM_PDR4); | ||
| 211 | unsigned long div = get_3_3_div(pdr4 >> 10); | ||
| 212 | |||
| 213 | if (pdr3 & (1 << 14)) | ||
| 214 | return get_rate_arm() / div; | ||
| 215 | else | ||
| 216 | return get_rate_ppll() / div; | ||
| 217 | } | ||
| 218 | |||
| 219 | static unsigned long get_rate_sdhc(struct clk *clk) | ||
| 220 | { | ||
| 221 | unsigned long pdr3 = __raw_readl(CCM_BASE + CCM_PDR3); | ||
| 222 | unsigned long div, rate; | ||
| 223 | |||
| 224 | if (pdr3 & (1 << 6)) | ||
| 225 | rate = get_rate_arm(); | ||
| 226 | else | ||
| 227 | rate = get_rate_ppll(); | ||
| 228 | |||
| 229 | switch (clk->id) { | ||
| 230 | default: | ||
| 231 | case 0: | ||
| 232 | div = pdr3 & 0x3f; | ||
| 233 | break; | ||
| 234 | case 1: | ||
| 235 | div = (pdr3 >> 8) & 0x3f; | ||
| 236 | break; | ||
| 237 | case 2: | ||
| 238 | div = (pdr3 >> 16) & 0x3f; | ||
| 239 | break; | ||
| 240 | } | ||
| 241 | |||
| 242 | return rate / get_3_3_div(div); | ||
| 243 | } | ||
| 244 | |||
| 245 | static unsigned long get_rate_mshc(struct clk *clk) | ||
| 246 | { | ||
| 247 | unsigned long pdr1 = __raw_readl(CCM_BASE + CCM_PDR1); | ||
| 248 | unsigned long div1, div2, rate; | ||
| 249 | |||
| 250 | if (pdr1 & (1 << 7)) | ||
| 251 | rate = get_rate_arm(); | ||
| 252 | else | ||
| 253 | rate = get_rate_ppll(); | ||
| 254 | |||
| 255 | div1 = (pdr1 >> 29) & 0x7; | ||
| 256 | div2 = (pdr1 >> 22) & 0x3f; | ||
| 257 | |||
| 258 | return rate / ((div1 + 1) * (div2 + 1)); | ||
| 259 | } | ||
| 260 | |||
| 261 | static unsigned long get_rate_ssi(struct clk *clk) | ||
| 262 | { | ||
| 263 | unsigned long pdr2 = __raw_readl(CCM_BASE + CCM_PDR2); | ||
| 264 | unsigned long div1, div2, rate; | ||
| 265 | |||
| 266 | if (pdr2 & (1 << 6)) | ||
| 267 | rate = get_rate_arm(); | ||
| 268 | else | ||
| 269 | rate = get_rate_ppll(); | ||
| 270 | |||
| 271 | switch (clk->id) { | ||
| 272 | default: | ||
| 273 | case 0: | ||
| 274 | div1 = pdr2 & 0x3f; | ||
| 275 | div2 = (pdr2 >> 24) & 0x7; | ||
| 276 | break; | ||
| 277 | case 1: | ||
| 278 | div1 = (pdr2 >> 8) & 0x3f; | ||
| 279 | div2 = (pdr2 >> 27) & 0x7; | ||
| 280 | break; | ||
| 281 | } | ||
| 282 | |||
| 283 | return rate / ((div1 + 1) * (div2 + 1)); | ||
| 284 | } | ||
| 285 | |||
| 286 | static unsigned long get_rate_csi(struct clk *clk) | ||
| 287 | { | ||
| 288 | unsigned long pdr2 = __raw_readl(CCM_BASE + CCM_PDR2); | ||
| 289 | unsigned long rate; | ||
| 290 | |||
| 291 | if (pdr2 & (1 << 7)) | ||
| 292 | rate = get_rate_arm(); | ||
| 293 | else | ||
| 294 | rate = get_rate_ppll(); | ||
| 295 | |||
| 296 | return rate / get_3_3_div((pdr2 >> 16) & 0x3f); | ||
| 297 | } | ||
| 298 | |||
| 299 | static unsigned long get_rate_ipg_per(struct clk *clk) | ||
| 300 | { | ||
| 301 | unsigned long pdr0 = __raw_readl(CCM_BASE + CCM_PDR0); | ||
| 302 | unsigned long pdr4 = __raw_readl(CCM_BASE + CCM_PDR4); | ||
| 303 | unsigned long div1, div2; | ||
| 304 | |||
| 305 | if (pdr0 & (1 << 26)) { | ||
| 306 | div1 = (pdr4 >> 19) & 0x7; | ||
| 307 | div2 = (pdr4 >> 16) & 0x7; | ||
| 308 | return get_rate_arm() / ((div1 + 1) * (div2 + 1)); | ||
| 309 | } else { | ||
| 310 | div1 = (pdr0 >> 12) & 0x7; | ||
| 311 | return get_rate_ahb(NULL) / div1; | ||
| 312 | } | ||
| 313 | } | ||
| 314 | |||
| 315 | static int clk_cgr_enable(struct clk *clk) | ||
| 316 | { | ||
| 317 | u32 reg; | ||
| 318 | |||
| 319 | reg = __raw_readl(clk->enable_reg); | ||
| 320 | reg |= 3 << clk->enable_shift; | ||
| 321 | __raw_writel(reg, clk->enable_reg); | ||
| 322 | |||
| 323 | return 0; | ||
| 324 | } | ||
| 325 | |||
| 326 | static void clk_cgr_disable(struct clk *clk) | ||
| 327 | { | ||
| 328 | u32 reg; | ||
| 329 | |||
| 330 | reg = __raw_readl(clk->enable_reg); | ||
| 331 | reg &= ~(3 << clk->enable_shift); | ||
| 332 | __raw_writel(reg, clk->enable_reg); | ||
| 333 | } | ||
| 334 | |||
| 335 | #define DEFINE_CLOCK(name, i, er, es, gr, sr) \ | ||
| 336 | static struct clk name = { \ | ||
| 337 | .id = i, \ | ||
| 338 | .enable_reg = CCM_BASE + er, \ | ||
| 339 | .enable_shift = es, \ | ||
| 340 | .get_rate = gr, \ | ||
| 341 | .set_rate = sr, \ | ||
| 342 | .enable = clk_cgr_enable, \ | ||
| 343 | .disable = clk_cgr_disable, \ | ||
| 344 | } | ||
| 345 | |||
| 346 | DEFINE_CLOCK(asrc_clk, 0, CCM_CGR0, 0, NULL, NULL); | ||
| 347 | DEFINE_CLOCK(ata_clk, 0, CCM_CGR0, 2, get_rate_ipg, NULL); | ||
| 348 | DEFINE_CLOCK(audmux_clk, 0, CCM_CGR0, 4, NULL, NULL); | ||
| 349 | DEFINE_CLOCK(can1_clk, 0, CCM_CGR0, 6, get_rate_ipg, NULL); | ||
| 350 | DEFINE_CLOCK(can2_clk, 1, CCM_CGR0, 8, get_rate_ipg, NULL); | ||
| 351 | DEFINE_CLOCK(cspi1_clk, 0, CCM_CGR0, 10, get_rate_ipg, NULL); | ||
| 352 | DEFINE_CLOCK(cspi2_clk, 1, CCM_CGR0, 12, get_rate_ipg, NULL); | ||
| 353 | DEFINE_CLOCK(ect_clk, 0, CCM_CGR0, 14, get_rate_ipg, NULL); | ||
| 354 | DEFINE_CLOCK(edio_clk, 0, CCM_CGR0, 16, NULL, NULL); | ||
| 355 | DEFINE_CLOCK(emi_clk, 0, CCM_CGR0, 18, get_rate_ipg, NULL); | ||
| 356 | DEFINE_CLOCK(epit1_clk, 0, CCM_CGR0, 20, get_rate_ipg_per, NULL); | ||
| 357 | DEFINE_CLOCK(epit2_clk, 1, CCM_CGR0, 22, get_rate_ipg_per, NULL); | ||
| 358 | DEFINE_CLOCK(esai_clk, 0, CCM_CGR0, 24, NULL, NULL); | ||
| 359 | DEFINE_CLOCK(esdhc1_clk, 0, CCM_CGR0, 26, get_rate_sdhc, NULL); | ||
| 360 | DEFINE_CLOCK(esdhc2_clk, 1, CCM_CGR0, 28, get_rate_sdhc, NULL); | ||
| 361 | DEFINE_CLOCK(esdhc3_clk, 2, CCM_CGR0, 30, get_rate_sdhc, NULL); | ||
| 362 | |||
| 363 | DEFINE_CLOCK(fec_clk, 0, CCM_CGR1, 0, get_rate_ipg, NULL); | ||
| 364 | DEFINE_CLOCK(gpio1_clk, 0, CCM_CGR1, 2, NULL, NULL); | ||
| 365 | DEFINE_CLOCK(gpio2_clk, 1, CCM_CGR1, 4, NULL, NULL); | ||
| 366 | DEFINE_CLOCK(gpio3_clk, 2, CCM_CGR1, 6, NULL, NULL); | ||
| 367 | DEFINE_CLOCK(gpt_clk, 0, CCM_CGR1, 8, get_rate_ipg, NULL); | ||
| 368 | DEFINE_CLOCK(i2c1_clk, 0, CCM_CGR1, 10, get_rate_ipg_per, NULL); | ||
| 369 | DEFINE_CLOCK(i2c2_clk, 1, CCM_CGR1, 12, get_rate_ipg_per, NULL); | ||
| 370 | DEFINE_CLOCK(i2c3_clk, 2, CCM_CGR1, 14, get_rate_ipg_per, NULL); | ||
| 371 | DEFINE_CLOCK(iomuxc_clk, 0, CCM_CGR1, 16, NULL, NULL); | ||
| 372 | DEFINE_CLOCK(ipu_clk, 0, CCM_CGR1, 18, NULL, NULL); | ||
| 373 | DEFINE_CLOCK(kpp_clk, 0, CCM_CGR1, 20, get_rate_ipg, NULL); | ||
| 374 | DEFINE_CLOCK(mlb_clk, 0, CCM_CGR1, 22, get_rate_ahb, NULL); | ||
| 375 | DEFINE_CLOCK(mshc_clk, 0, CCM_CGR1, 24, get_rate_mshc, NULL); | ||
| 376 | DEFINE_CLOCK(owire_clk, 0, CCM_CGR1, 26, get_rate_ipg_per, NULL); | ||
| 377 | DEFINE_CLOCK(pwm_clk, 0, CCM_CGR1, 28, get_rate_ipg_per, NULL); | ||
| 378 | DEFINE_CLOCK(rngc_clk, 0, CCM_CGR1, 30, get_rate_ipg, NULL); | ||
| 379 | |||
| 380 | DEFINE_CLOCK(rtc_clk, 0, CCM_CGR2, 0, get_rate_ipg, NULL); | ||
| 381 | DEFINE_CLOCK(rtic_clk, 0, CCM_CGR2, 2, get_rate_ahb, NULL); | ||
| 382 | DEFINE_CLOCK(scc_clk, 0, CCM_CGR2, 4, get_rate_ipg, NULL); | ||
| 383 | DEFINE_CLOCK(sdma_clk, 0, CCM_CGR2, 6, NULL, NULL); | ||
| 384 | DEFINE_CLOCK(spba_clk, 0, CCM_CGR2, 8, get_rate_ipg, NULL); | ||
| 385 | DEFINE_CLOCK(spdif_clk, 0, CCM_CGR2, 10, NULL, NULL); | ||
| 386 | DEFINE_CLOCK(ssi1_clk, 0, CCM_CGR2, 12, get_rate_ssi, NULL); | ||
| 387 | DEFINE_CLOCK(ssi2_clk, 1, CCM_CGR2, 14, get_rate_ssi, NULL); | ||
| 388 | DEFINE_CLOCK(uart1_clk, 0, CCM_CGR2, 16, get_rate_uart, NULL); | ||
| 389 | DEFINE_CLOCK(uart2_clk, 1, CCM_CGR2, 18, get_rate_uart, NULL); | ||
| 390 | DEFINE_CLOCK(uart3_clk, 2, CCM_CGR2, 20, get_rate_uart, NULL); | ||
| 391 | DEFINE_CLOCK(usbotg_clk, 0, CCM_CGR2, 22, NULL, NULL); | ||
| 392 | DEFINE_CLOCK(wdog_clk, 0, CCM_CGR2, 24, NULL, NULL); | ||
| 393 | DEFINE_CLOCK(max_clk, 0, CCM_CGR2, 26, NULL, NULL); | ||
| 394 | DEFINE_CLOCK(admux_clk, 0, CCM_CGR2, 30, NULL, NULL); | ||
| 395 | |||
| 396 | DEFINE_CLOCK(csi_clk, 0, CCM_CGR3, 0, get_rate_csi, NULL); | ||
| 397 | DEFINE_CLOCK(iim_clk, 0, CCM_CGR3, 2, NULL, NULL); | ||
| 398 | DEFINE_CLOCK(gpu2d_clk, 0, CCM_CGR3, 4, NULL, NULL); | ||
| 399 | |||
| 400 | #define _REGISTER_CLOCK(d, n, c) \ | ||
| 401 | { \ | ||
| 402 | .dev_id = d, \ | ||
| 403 | .con_id = n, \ | ||
| 404 | .clk = &c, \ | ||
| 405 | }, | ||
| 406 | |||
| 407 | static struct clk_lookup lookups[] __initdata = { | ||
| 408 | _REGISTER_CLOCK(NULL, "asrc", asrc_clk) | ||
| 409 | _REGISTER_CLOCK(NULL, "ata", ata_clk) | ||
| 410 | _REGISTER_CLOCK(NULL, "audmux", audmux_clk) | ||
| 411 | _REGISTER_CLOCK(NULL, "can", can1_clk) | ||
| 412 | _REGISTER_CLOCK(NULL, "can", can2_clk) | ||
| 413 | _REGISTER_CLOCK("spi_imx.0", NULL, cspi1_clk) | ||
| 414 | _REGISTER_CLOCK("spi_imx.1", NULL, cspi2_clk) | ||
| 415 | _REGISTER_CLOCK(NULL, "ect", ect_clk) | ||
| 416 | _REGISTER_CLOCK(NULL, "edio", edio_clk) | ||
| 417 | _REGISTER_CLOCK(NULL, "emi", emi_clk) | ||
| 418 | _REGISTER_CLOCK(NULL, "epit", epit1_clk) | ||
| 419 | _REGISTER_CLOCK(NULL, "epit", epit2_clk) | ||
| 420 | _REGISTER_CLOCK(NULL, "esai", esai_clk) | ||
| 421 | _REGISTER_CLOCK(NULL, "sdhc", esdhc1_clk) | ||
| 422 | _REGISTER_CLOCK(NULL, "sdhc", esdhc2_clk) | ||
| 423 | _REGISTER_CLOCK(NULL, "sdhc", esdhc3_clk) | ||
| 424 | _REGISTER_CLOCK("fec.0", NULL, fec_clk) | ||
| 425 | _REGISTER_CLOCK(NULL, "gpio", gpio1_clk) | ||
| 426 | _REGISTER_CLOCK(NULL, "gpio", gpio2_clk) | ||
| 427 | _REGISTER_CLOCK(NULL, "gpio", gpio3_clk) | ||
| 428 | _REGISTER_CLOCK("gpt.0", NULL, gpt_clk) | ||
| 429 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) | ||
| 430 | _REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk) | ||
| 431 | _REGISTER_CLOCK("imx-i2c.2", NULL, i2c3_clk) | ||
| 432 | _REGISTER_CLOCK(NULL, "iomuxc", iomuxc_clk) | ||
| 433 | _REGISTER_CLOCK(NULL, "ipu", ipu_clk) | ||
| 434 | _REGISTER_CLOCK(NULL, "kpp", kpp_clk) | ||
| 435 | _REGISTER_CLOCK(NULL, "mlb", mlb_clk) | ||
| 436 | _REGISTER_CLOCK(NULL, "mshc", mshc_clk) | ||
| 437 | _REGISTER_CLOCK("mxc_w1", NULL, owire_clk) | ||
| 438 | _REGISTER_CLOCK(NULL, "pwm", pwm_clk) | ||
| 439 | _REGISTER_CLOCK(NULL, "rngc", rngc_clk) | ||
| 440 | _REGISTER_CLOCK(NULL, "rtc", rtc_clk) | ||
| 441 | _REGISTER_CLOCK(NULL, "rtic", rtic_clk) | ||
| 442 | _REGISTER_CLOCK(NULL, "scc", scc_clk) | ||
| 443 | _REGISTER_CLOCK(NULL, "sdma", sdma_clk) | ||
| 444 | _REGISTER_CLOCK(NULL, "spba", spba_clk) | ||
| 445 | _REGISTER_CLOCK(NULL, "spdif", spdif_clk) | ||
| 446 | _REGISTER_CLOCK(NULL, "ssi", ssi1_clk) | ||
| 447 | _REGISTER_CLOCK(NULL, "ssi", ssi2_clk) | ||
| 448 | _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) | ||
| 449 | _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) | ||
| 450 | _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) | ||
| 451 | _REGISTER_CLOCK(NULL, "usbotg", usbotg_clk) | ||
| 452 | _REGISTER_CLOCK("mxc_wdt.0", NULL, wdog_clk) | ||
| 453 | _REGISTER_CLOCK(NULL, "max", max_clk) | ||
| 454 | _REGISTER_CLOCK(NULL, "admux", admux_clk) | ||
| 455 | _REGISTER_CLOCK(NULL, "csi", csi_clk) | ||
| 456 | _REGISTER_CLOCK(NULL, "iim", iim_clk) | ||
| 457 | _REGISTER_CLOCK(NULL, "gpu2d", gpu2d_clk) | ||
| 458 | }; | ||
| 459 | |||
| 460 | int __init mx35_clocks_init() | ||
| 461 | { | ||
| 462 | int i; | ||
| 463 | unsigned int ll = 0; | ||
| 464 | |||
| 465 | mxc_set_cpu_type(MXC_CPU_MX35); | ||
| 466 | |||
| 467 | #ifdef CONFIG_DEBUG_LL_CONSOLE | ||
| 468 | ll = (3 << 16); | ||
| 469 | #endif | ||
| 470 | |||
| 471 | for (i = 0; i < ARRAY_SIZE(lookups); i++) | ||
| 472 | clkdev_add(&lookups[i]); | ||
| 473 | |||
| 474 | /* Turn off all clocks except the ones we need to survive, namely: | ||
| 475 | * EMI, GPIO1/2/3, GPT, IOMUX, MAX and eventually uart | ||
| 476 | */ | ||
| 477 | __raw_writel((3 << 18), CCM_BASE + CCM_CGR0); | ||
| 478 | __raw_writel((3 << 2) | (3 << 4) | (3 << 6) | (3 << 8) | (3 << 16), | ||
| 479 | CCM_BASE + CCM_CGR1); | ||
| 480 | __raw_writel((3 << 26) | ll, CCM_BASE + CCM_CGR2); | ||
| 481 | __raw_writel(0, CCM_BASE + CCM_CGR3); | ||
| 482 | |||
| 483 | mxc_timer_init(&gpt_clk); | ||
| 484 | |||
| 485 | return 0; | ||
| 486 | } | ||
| 487 | |||
diff --git a/arch/arm/mach-mx3/clock.c b/arch/arm/mach-mx3/clock.c index b1746aae1f89..ca46f4801c3d 100644 --- a/arch/arm/mach-mx3/clock.c +++ b/arch/arm/mach-mx3/clock.c | |||
| @@ -23,9 +23,13 @@ | |||
| 23 | #include <linux/clk.h> | 23 | #include <linux/clk.h> |
| 24 | #include <linux/err.h> | 24 | #include <linux/err.h> |
| 25 | #include <linux/io.h> | 25 | #include <linux/io.h> |
| 26 | |||
| 27 | #include <asm/clkdev.h> | ||
| 28 | #include <asm/div64.h> | ||
| 29 | |||
| 26 | #include <mach/clock.h> | 30 | #include <mach/clock.h> |
| 27 | #include <mach/hardware.h> | 31 | #include <mach/hardware.h> |
| 28 | #include <asm/div64.h> | 32 | #include <mach/common.h> |
| 29 | 33 | ||
| 30 | #include "crm_regs.h" | 34 | #include "crm_regs.h" |
| 31 | 35 | ||
| @@ -64,17 +68,17 @@ static void __calc_pre_post_dividers(u32 div, u32 *pre, u32 *post) | |||
| 64 | } | 68 | } |
| 65 | 69 | ||
| 66 | static struct clk mcu_pll_clk; | 70 | static struct clk mcu_pll_clk; |
| 67 | static struct clk mcu_main_clk; | ||
| 68 | static struct clk usb_pll_clk; | ||
| 69 | static struct clk serial_pll_clk; | 71 | static struct clk serial_pll_clk; |
| 70 | static struct clk ipg_clk; | 72 | static struct clk ipg_clk; |
| 71 | static struct clk ckih_clk; | 73 | static struct clk ckih_clk; |
| 72 | static struct clk ahb_clk; | ||
| 73 | 74 | ||
| 74 | static int _clk_enable(struct clk *clk) | 75 | static int cgr_enable(struct clk *clk) |
| 75 | { | 76 | { |
| 76 | u32 reg; | 77 | u32 reg; |
| 77 | 78 | ||
| 79 | if (!clk->enable_reg) | ||
| 80 | return 0; | ||
| 81 | |||
| 78 | reg = __raw_readl(clk->enable_reg); | 82 | reg = __raw_readl(clk->enable_reg); |
| 79 | reg |= 3 << clk->enable_shift; | 83 | reg |= 3 << clk->enable_shift; |
| 80 | __raw_writel(reg, clk->enable_reg); | 84 | __raw_writel(reg, clk->enable_reg); |
| @@ -82,133 +86,69 @@ static int _clk_enable(struct clk *clk) | |||
| 82 | return 0; | 86 | return 0; |
| 83 | } | 87 | } |
| 84 | 88 | ||
| 85 | static void _clk_disable(struct clk *clk) | 89 | static void cgr_disable(struct clk *clk) |
| 86 | { | 90 | { |
| 87 | u32 reg; | 91 | u32 reg; |
| 88 | 92 | ||
| 93 | if (!clk->enable_reg) | ||
| 94 | return; | ||
| 95 | |||
| 89 | reg = __raw_readl(clk->enable_reg); | 96 | reg = __raw_readl(clk->enable_reg); |
| 90 | reg &= ~(3 << clk->enable_shift); | 97 | reg &= ~(3 << clk->enable_shift); |
| 98 | |||
| 99 | /* special case for EMI clock */ | ||
| 100 | if (clk->enable_reg == MXC_CCM_CGR2 && clk->enable_shift == 8) | ||
| 101 | reg |= (1 << clk->enable_shift); | ||
| 102 | |||
| 91 | __raw_writel(reg, clk->enable_reg); | 103 | __raw_writel(reg, clk->enable_reg); |
| 92 | } | 104 | } |
| 93 | 105 | ||
| 94 | static void _clk_emi_disable(struct clk *clk) | 106 | static unsigned long pll_ref_get_rate(void) |
| 95 | { | 107 | { |
| 96 | u32 reg; | 108 | unsigned long ccmr; |
| 109 | unsigned int prcs; | ||
| 97 | 110 | ||
| 98 | reg = __raw_readl(clk->enable_reg); | 111 | ccmr = __raw_readl(MXC_CCM_CCMR); |
| 99 | reg &= ~(3 << clk->enable_shift); | 112 | prcs = (ccmr & MXC_CCM_CCMR_PRCS_MASK) >> MXC_CCM_CCMR_PRCS_OFFSET; |
| 100 | reg |= (1 << clk->enable_shift); | 113 | if (prcs == 0x1) |
| 101 | __raw_writel(reg, clk->enable_reg); | 114 | return CKIL_CLK_FREQ * 1024; |
| 115 | else | ||
| 116 | return clk_get_rate(&ckih_clk); | ||
| 102 | } | 117 | } |
| 103 | 118 | ||
| 104 | static int _clk_pll_set_rate(struct clk *clk, unsigned long rate) | 119 | static unsigned long usb_pll_get_rate(struct clk *clk) |
| 105 | { | 120 | { |
| 106 | u32 reg; | 121 | unsigned long reg; |
| 107 | signed long pd = 1; /* Pre-divider */ | ||
| 108 | signed long mfi; /* Multiplication Factor (Integer part) */ | ||
| 109 | signed long mfn; /* Multiplication Factor (Integer part) */ | ||
| 110 | signed long mfd; /* Multiplication Factor (Denominator Part) */ | ||
| 111 | signed long tmp; | ||
| 112 | u32 ref_freq = clk_get_rate(clk->parent); | ||
| 113 | 122 | ||
| 114 | while (((ref_freq / pd) * 10) > rate) | 123 | reg = __raw_readl(MXC_CCM_UPCTL); |
| 115 | pd++; | ||
| 116 | 124 | ||
| 117 | if ((ref_freq / pd) < PRE_DIV_MIN_FREQ) | 125 | return mxc_decode_pll(reg, pll_ref_get_rate()); |
| 118 | return -EINVAL; | 126 | } |
| 119 | 127 | ||
| 120 | /* the ref_freq/2 in the following is to round up */ | 128 | static unsigned long serial_pll_get_rate(struct clk *clk) |
| 121 | mfi = (((rate / 2) * pd) + (ref_freq / 2)) / ref_freq; | 129 | { |
| 122 | if (mfi < 5 || mfi > 15) | 130 | unsigned long reg; |
| 123 | return -EINVAL; | ||
| 124 | 131 | ||
| 125 | /* pick a mfd value that will work | 132 | reg = __raw_readl(MXC_CCM_SRPCTL); |
| 126 | * then solve for mfn */ | ||
| 127 | mfd = ref_freq / 50000; | ||
| 128 | |||
| 129 | /* | ||
| 130 | * pll_freq * pd * mfd | ||
| 131 | * mfn = -------------------- - (mfi * mfd) | ||
| 132 | * 2 * ref_freq | ||
| 133 | */ | ||
| 134 | /* the tmp/2 is for rounding */ | ||
| 135 | tmp = ref_freq / 10000; | ||
| 136 | mfn = | ||
| 137 | ((((((rate / 2) + (tmp / 2)) / tmp) * pd) * mfd) / 10000) - | ||
| 138 | (mfi * mfd); | ||
| 139 | |||
| 140 | mfn = mfn & 0x3ff; | ||
| 141 | pd--; | ||
| 142 | mfd--; | ||
| 143 | |||
| 144 | /* Change the Pll value */ | ||
| 145 | reg = (mfi << MXC_CCM_PCTL_MFI_OFFSET) | | ||
| 146 | (mfn << MXC_CCM_PCTL_MFN_OFFSET) | | ||
| 147 | (mfd << MXC_CCM_PCTL_MFD_OFFSET) | (pd << MXC_CCM_PCTL_PD_OFFSET); | ||
| 148 | |||
| 149 | if (clk == &mcu_pll_clk) | ||
| 150 | __raw_writel(reg, MXC_CCM_MPCTL); | ||
| 151 | else if (clk == &usb_pll_clk) | ||
| 152 | __raw_writel(reg, MXC_CCM_UPCTL); | ||
| 153 | else if (clk == &serial_pll_clk) | ||
| 154 | __raw_writel(reg, MXC_CCM_SRPCTL); | ||
| 155 | 133 | ||
| 156 | return 0; | 134 | return mxc_decode_pll(reg, pll_ref_get_rate()); |
| 157 | } | 135 | } |
| 158 | 136 | ||
| 159 | static unsigned long _clk_pll_get_rate(struct clk *clk) | 137 | static unsigned long mcu_pll_get_rate(struct clk *clk) |
| 160 | { | 138 | { |
| 161 | long mfi, mfn, mfd, pdf, ref_clk, mfn_abs; | ||
| 162 | unsigned long reg, ccmr; | 139 | unsigned long reg, ccmr; |
| 163 | s64 temp; | ||
| 164 | unsigned int prcs; | ||
| 165 | 140 | ||
| 166 | ccmr = __raw_readl(MXC_CCM_CCMR); | 141 | ccmr = __raw_readl(MXC_CCM_CCMR); |
| 167 | prcs = (ccmr & MXC_CCM_CCMR_PRCS_MASK) >> MXC_CCM_CCMR_PRCS_OFFSET; | ||
| 168 | if (prcs == 0x1) | ||
| 169 | ref_clk = CKIL_CLK_FREQ * 1024; | ||
| 170 | else | ||
| 171 | ref_clk = clk_get_rate(&ckih_clk); | ||
| 172 | |||
| 173 | if (clk == &mcu_pll_clk) { | ||
| 174 | if ((ccmr & MXC_CCM_CCMR_MPE) == 0) | ||
| 175 | return ref_clk; | ||
| 176 | if ((ccmr & MXC_CCM_CCMR_MDS) != 0) | ||
| 177 | return ref_clk; | ||
| 178 | reg = __raw_readl(MXC_CCM_MPCTL); | ||
| 179 | } else if (clk == &usb_pll_clk) | ||
| 180 | reg = __raw_readl(MXC_CCM_UPCTL); | ||
| 181 | else if (clk == &serial_pll_clk) | ||
| 182 | reg = __raw_readl(MXC_CCM_SRPCTL); | ||
| 183 | else { | ||
| 184 | BUG(); | ||
| 185 | return 0; | ||
| 186 | } | ||
| 187 | |||
| 188 | pdf = (reg & MXC_CCM_PCTL_PD_MASK) >> MXC_CCM_PCTL_PD_OFFSET; | ||
| 189 | mfd = (reg & MXC_CCM_PCTL_MFD_MASK) >> MXC_CCM_PCTL_MFD_OFFSET; | ||
| 190 | mfi = (reg & MXC_CCM_PCTL_MFI_MASK) >> MXC_CCM_PCTL_MFI_OFFSET; | ||
| 191 | mfi = (mfi <= 5) ? 5 : mfi; | ||
| 192 | mfn = mfn_abs = reg & MXC_CCM_PCTL_MFN_MASK; | ||
| 193 | 142 | ||
| 194 | if (mfn >= 0x200) { | 143 | if (!(ccmr & MXC_CCM_CCMR_MPE) || (ccmr & MXC_CCM_CCMR_MDS)) |
| 195 | mfn |= 0xFFFFFE00; | 144 | return clk_get_rate(&ckih_clk); |
| 196 | mfn_abs = -mfn; | ||
| 197 | } | ||
| 198 | |||
| 199 | ref_clk *= 2; | ||
| 200 | ref_clk /= pdf + 1; | ||
| 201 | 145 | ||
| 202 | temp = (u64) ref_clk * mfn_abs; | 146 | reg = __raw_readl(MXC_CCM_MPCTL); |
| 203 | do_div(temp, mfd + 1); | ||
| 204 | if (mfn < 0) | ||
| 205 | temp = -temp; | ||
| 206 | temp = (ref_clk * mfi) + temp; | ||
| 207 | 147 | ||
| 208 | return temp; | 148 | return mxc_decode_pll(reg, pll_ref_get_rate()); |
| 209 | } | 149 | } |
| 210 | 150 | ||
| 211 | static int _clk_usb_pll_enable(struct clk *clk) | 151 | static int usb_pll_enable(struct clk *clk) |
| 212 | { | 152 | { |
| 213 | u32 reg; | 153 | u32 reg; |
| 214 | 154 | ||
| @@ -222,7 +162,7 @@ static int _clk_usb_pll_enable(struct clk *clk) | |||
| 222 | return 0; | 162 | return 0; |
| 223 | } | 163 | } |
| 224 | 164 | ||
| 225 | static void _clk_usb_pll_disable(struct clk *clk) | 165 | static void usb_pll_disable(struct clk *clk) |
| 226 | { | 166 | { |
| 227 | u32 reg; | 167 | u32 reg; |
| 228 | 168 | ||
| @@ -231,7 +171,7 @@ static void _clk_usb_pll_disable(struct clk *clk) | |||
| 231 | __raw_writel(reg, MXC_CCM_CCMR); | 171 | __raw_writel(reg, MXC_CCM_CCMR); |
| 232 | } | 172 | } |
| 233 | 173 | ||
| 234 | static int _clk_serial_pll_enable(struct clk *clk) | 174 | static int serial_pll_enable(struct clk *clk) |
| 235 | { | 175 | { |
| 236 | u32 reg; | 176 | u32 reg; |
| 237 | 177 | ||
| @@ -245,7 +185,7 @@ static int _clk_serial_pll_enable(struct clk *clk) | |||
| 245 | return 0; | 185 | return 0; |
| 246 | } | 186 | } |
| 247 | 187 | ||
| 248 | static void _clk_serial_pll_disable(struct clk *clk) | 188 | static void serial_pll_disable(struct clk *clk) |
| 249 | { | 189 | { |
| 250 | u32 reg; | 190 | u32 reg; |
| 251 | 191 | ||
| @@ -258,7 +198,7 @@ static void _clk_serial_pll_disable(struct clk *clk) | |||
| 258 | #define PDR1(mask, off) ((__raw_readl(MXC_CCM_PDR1) & mask) >> off) | 198 | #define PDR1(mask, off) ((__raw_readl(MXC_CCM_PDR1) & mask) >> off) |
| 259 | #define PDR2(mask, off) ((__raw_readl(MXC_CCM_PDR2) & mask) >> off) | 199 | #define PDR2(mask, off) ((__raw_readl(MXC_CCM_PDR2) & mask) >> off) |
| 260 | 200 | ||
| 261 | static unsigned long _clk_mcu_main_get_rate(struct clk *clk) | 201 | static unsigned long mcu_main_get_rate(struct clk *clk) |
| 262 | { | 202 | { |
| 263 | u32 pmcr0 = __raw_readl(MXC_CCM_PMCR0); | 203 | u32 pmcr0 = __raw_readl(MXC_CCM_PMCR0); |
| 264 | 204 | ||
| @@ -268,7 +208,7 @@ static unsigned long _clk_mcu_main_get_rate(struct clk *clk) | |||
| 268 | return clk_get_rate(&mcu_pll_clk); | 208 | return clk_get_rate(&mcu_pll_clk); |
| 269 | } | 209 | } |
| 270 | 210 | ||
| 271 | static unsigned long _clk_hclk_get_rate(struct clk *clk) | 211 | static unsigned long ahb_get_rate(struct clk *clk) |
| 272 | { | 212 | { |
| 273 | unsigned long max_pdf; | 213 | unsigned long max_pdf; |
| 274 | 214 | ||
| @@ -277,7 +217,7 @@ static unsigned long _clk_hclk_get_rate(struct clk *clk) | |||
| 277 | return clk_get_rate(clk->parent) / (max_pdf + 1); | 217 | return clk_get_rate(clk->parent) / (max_pdf + 1); |
| 278 | } | 218 | } |
| 279 | 219 | ||
| 280 | static unsigned long _clk_ipg_get_rate(struct clk *clk) | 220 | static unsigned long ipg_get_rate(struct clk *clk) |
| 281 | { | 221 | { |
| 282 | unsigned long ipg_pdf; | 222 | unsigned long ipg_pdf; |
| 283 | 223 | ||
| @@ -286,7 +226,7 @@ static unsigned long _clk_ipg_get_rate(struct clk *clk) | |||
| 286 | return clk_get_rate(clk->parent) / (ipg_pdf + 1); | 226 | return clk_get_rate(clk->parent) / (ipg_pdf + 1); |
| 287 | } | 227 | } |
| 288 | 228 | ||
| 289 | static unsigned long _clk_nfc_get_rate(struct clk *clk) | 229 | static unsigned long nfc_get_rate(struct clk *clk) |
| 290 | { | 230 | { |
| 291 | unsigned long nfc_pdf; | 231 | unsigned long nfc_pdf; |
| 292 | 232 | ||
| @@ -295,7 +235,7 @@ static unsigned long _clk_nfc_get_rate(struct clk *clk) | |||
| 295 | return clk_get_rate(clk->parent) / (nfc_pdf + 1); | 235 | return clk_get_rate(clk->parent) / (nfc_pdf + 1); |
| 296 | } | 236 | } |
| 297 | 237 | ||
| 298 | static unsigned long _clk_hsp_get_rate(struct clk *clk) | 238 | static unsigned long hsp_get_rate(struct clk *clk) |
| 299 | { | 239 | { |
| 300 | unsigned long hsp_pdf; | 240 | unsigned long hsp_pdf; |
| 301 | 241 | ||
| @@ -304,7 +244,7 @@ static unsigned long _clk_hsp_get_rate(struct clk *clk) | |||
| 304 | return clk_get_rate(clk->parent) / (hsp_pdf + 1); | 244 | return clk_get_rate(clk->parent) / (hsp_pdf + 1); |
| 305 | } | 245 | } |
| 306 | 246 | ||
| 307 | static unsigned long _clk_usb_get_rate(struct clk *clk) | 247 | static unsigned long usb_get_rate(struct clk *clk) |
| 308 | { | 248 | { |
| 309 | unsigned long usb_pdf, usb_prepdf; | 249 | unsigned long usb_pdf, usb_prepdf; |
| 310 | 250 | ||
| @@ -315,7 +255,7 @@ static unsigned long _clk_usb_get_rate(struct clk *clk) | |||
| 315 | return clk_get_rate(clk->parent) / (usb_prepdf + 1) / (usb_pdf + 1); | 255 | return clk_get_rate(clk->parent) / (usb_prepdf + 1) / (usb_pdf + 1); |
| 316 | } | 256 | } |
| 317 | 257 | ||
| 318 | static unsigned long _clk_csi_get_rate(struct clk *clk) | 258 | static unsigned long csi_get_rate(struct clk *clk) |
| 319 | { | 259 | { |
| 320 | u32 reg, pre, post; | 260 | u32 reg, pre, post; |
| 321 | 261 | ||
| @@ -329,7 +269,7 @@ static unsigned long _clk_csi_get_rate(struct clk *clk) | |||
| 329 | return clk_get_rate(clk->parent) / (pre * post); | 269 | return clk_get_rate(clk->parent) / (pre * post); |
| 330 | } | 270 | } |
| 331 | 271 | ||
| 332 | static unsigned long _clk_csi_round_rate(struct clk *clk, unsigned long rate) | 272 | static unsigned long csi_round_rate(struct clk *clk, unsigned long rate) |
| 333 | { | 273 | { |
| 334 | u32 pre, post, parent = clk_get_rate(clk->parent); | 274 | u32 pre, post, parent = clk_get_rate(clk->parent); |
| 335 | u32 div = parent / rate; | 275 | u32 div = parent / rate; |
| @@ -342,7 +282,7 @@ static unsigned long _clk_csi_round_rate(struct clk *clk, unsigned long rate) | |||
| 342 | return parent / (pre * post); | 282 | return parent / (pre * post); |
| 343 | } | 283 | } |
| 344 | 284 | ||
| 345 | static int _clk_csi_set_rate(struct clk *clk, unsigned long rate) | 285 | static int csi_set_rate(struct clk *clk, unsigned long rate) |
| 346 | { | 286 | { |
| 347 | u32 reg, div, pre, post, parent = clk_get_rate(clk->parent); | 287 | u32 reg, div, pre, post, parent = clk_get_rate(clk->parent); |
| 348 | 288 | ||
| @@ -363,16 +303,7 @@ static int _clk_csi_set_rate(struct clk *clk, unsigned long rate) | |||
| 363 | return 0; | 303 | return 0; |
| 364 | } | 304 | } |
| 365 | 305 | ||
| 366 | static unsigned long _clk_per_get_rate(struct clk *clk) | 306 | static unsigned long ssi1_get_rate(struct clk *clk) |
| 367 | { | ||
| 368 | unsigned long per_pdf; | ||
| 369 | |||
| 370 | per_pdf = PDR0(MXC_CCM_PDR0_PER_PODF_MASK, | ||
| 371 | MXC_CCM_PDR0_PER_PODF_OFFSET); | ||
| 372 | return clk_get_rate(clk->parent) / (per_pdf + 1); | ||
| 373 | } | ||
| 374 | |||
| 375 | static unsigned long _clk_ssi1_get_rate(struct clk *clk) | ||
| 376 | { | 307 | { |
| 377 | unsigned long ssi1_pdf, ssi1_prepdf; | 308 | unsigned long ssi1_pdf, ssi1_prepdf; |
| 378 | 309 | ||
| @@ -383,7 +314,7 @@ static unsigned long _clk_ssi1_get_rate(struct clk *clk) | |||
| 383 | return clk_get_rate(clk->parent) / (ssi1_prepdf + 1) / (ssi1_pdf + 1); | 314 | return clk_get_rate(clk->parent) / (ssi1_prepdf + 1) / (ssi1_pdf + 1); |
| 384 | } | 315 | } |
| 385 | 316 | ||
| 386 | static unsigned long _clk_ssi2_get_rate(struct clk *clk) | 317 | static unsigned long ssi2_get_rate(struct clk *clk) |
| 387 | { | 318 | { |
| 388 | unsigned long ssi2_pdf, ssi2_prepdf; | 319 | unsigned long ssi2_pdf, ssi2_prepdf; |
| 389 | 320 | ||
| @@ -394,7 +325,7 @@ static unsigned long _clk_ssi2_get_rate(struct clk *clk) | |||
| 394 | return clk_get_rate(clk->parent) / (ssi2_prepdf + 1) / (ssi2_pdf + 1); | 325 | return clk_get_rate(clk->parent) / (ssi2_prepdf + 1) / (ssi2_pdf + 1); |
| 395 | } | 326 | } |
| 396 | 327 | ||
| 397 | static unsigned long _clk_firi_get_rate(struct clk *clk) | 328 | static unsigned long firi_get_rate(struct clk *clk) |
| 398 | { | 329 | { |
| 399 | unsigned long firi_pdf, firi_prepdf; | 330 | unsigned long firi_pdf, firi_prepdf; |
| 400 | 331 | ||
| @@ -405,7 +336,7 @@ static unsigned long _clk_firi_get_rate(struct clk *clk) | |||
| 405 | return clk_get_rate(clk->parent) / (firi_prepdf + 1) / (firi_pdf + 1); | 336 | return clk_get_rate(clk->parent) / (firi_prepdf + 1) / (firi_pdf + 1); |
| 406 | } | 337 | } |
| 407 | 338 | ||
| 408 | static unsigned long _clk_firi_round_rate(struct clk *clk, unsigned long rate) | 339 | static unsigned long firi_round_rate(struct clk *clk, unsigned long rate) |
| 409 | { | 340 | { |
| 410 | u32 pre, post; | 341 | u32 pre, post; |
| 411 | u32 parent = clk_get_rate(clk->parent); | 342 | u32 parent = clk_get_rate(clk->parent); |
| @@ -420,7 +351,7 @@ static unsigned long _clk_firi_round_rate(struct clk *clk, unsigned long rate) | |||
| 420 | 351 | ||
| 421 | } | 352 | } |
| 422 | 353 | ||
| 423 | static int _clk_firi_set_rate(struct clk *clk, unsigned long rate) | 354 | static int firi_set_rate(struct clk *clk, unsigned long rate) |
| 424 | { | 355 | { |
| 425 | u32 reg, div, pre, post, parent = clk_get_rate(clk->parent); | 356 | u32 reg, div, pre, post, parent = clk_get_rate(clk->parent); |
| 426 | 357 | ||
| @@ -441,12 +372,12 @@ static int _clk_firi_set_rate(struct clk *clk, unsigned long rate) | |||
| 441 | return 0; | 372 | return 0; |
| 442 | } | 373 | } |
| 443 | 374 | ||
| 444 | static unsigned long _clk_mbx_get_rate(struct clk *clk) | 375 | static unsigned long mbx_get_rate(struct clk *clk) |
| 445 | { | 376 | { |
| 446 | return clk_get_rate(clk->parent) / 2; | 377 | return clk_get_rate(clk->parent) / 2; |
| 447 | } | 378 | } |
| 448 | 379 | ||
| 449 | static unsigned long _clk_mstick1_get_rate(struct clk *clk) | 380 | static unsigned long mstick1_get_rate(struct clk *clk) |
| 450 | { | 381 | { |
| 451 | unsigned long msti_pdf; | 382 | unsigned long msti_pdf; |
| 452 | 383 | ||
| @@ -455,7 +386,7 @@ static unsigned long _clk_mstick1_get_rate(struct clk *clk) | |||
| 455 | return clk_get_rate(clk->parent) / (msti_pdf + 1); | 386 | return clk_get_rate(clk->parent) / (msti_pdf + 1); |
| 456 | } | 387 | } |
| 457 | 388 | ||
| 458 | static unsigned long _clk_mstick2_get_rate(struct clk *clk) | 389 | static unsigned long mstick2_get_rate(struct clk *clk) |
| 459 | { | 390 | { |
| 460 | unsigned long msti_pdf; | 391 | unsigned long msti_pdf; |
| 461 | 392 | ||
| @@ -472,661 +403,185 @@ static unsigned long clk_ckih_get_rate(struct clk *clk) | |||
| 472 | } | 403 | } |
| 473 | 404 | ||
| 474 | static struct clk ckih_clk = { | 405 | static struct clk ckih_clk = { |
| 475 | .name = "ckih", | ||
| 476 | .get_rate = clk_ckih_get_rate, | 406 | .get_rate = clk_ckih_get_rate, |
| 477 | }; | 407 | }; |
| 478 | 408 | ||
| 479 | static unsigned long clk_ckil_get_rate(struct clk *clk) | ||
| 480 | { | ||
| 481 | return CKIL_CLK_FREQ; | ||
| 482 | } | ||
| 483 | |||
| 484 | static struct clk ckil_clk = { | ||
| 485 | .name = "ckil", | ||
| 486 | .get_rate = clk_ckil_get_rate, | ||
| 487 | }; | ||
| 488 | |||
| 489 | static struct clk mcu_pll_clk = { | 409 | static struct clk mcu_pll_clk = { |
| 490 | .name = "mcu_pll", | ||
| 491 | .parent = &ckih_clk, | 410 | .parent = &ckih_clk, |
| 492 | .set_rate = _clk_pll_set_rate, | 411 | .get_rate = mcu_pll_get_rate, |
| 493 | .get_rate = _clk_pll_get_rate, | ||
| 494 | }; | 412 | }; |
| 495 | 413 | ||
| 496 | static struct clk mcu_main_clk = { | 414 | static struct clk mcu_main_clk = { |
| 497 | .name = "mcu_main_clk", | ||
| 498 | .parent = &mcu_pll_clk, | 415 | .parent = &mcu_pll_clk, |
| 499 | .get_rate = _clk_mcu_main_get_rate, | 416 | .get_rate = mcu_main_get_rate, |
| 500 | }; | 417 | }; |
| 501 | 418 | ||
| 502 | static struct clk serial_pll_clk = { | 419 | static struct clk serial_pll_clk = { |
| 503 | .name = "serial_pll", | ||
| 504 | .parent = &ckih_clk, | 420 | .parent = &ckih_clk, |
| 505 | .set_rate = _clk_pll_set_rate, | 421 | .get_rate = serial_pll_get_rate, |
| 506 | .get_rate = _clk_pll_get_rate, | 422 | .enable = serial_pll_enable, |
| 507 | .enable = _clk_serial_pll_enable, | 423 | .disable = serial_pll_disable, |
| 508 | .disable = _clk_serial_pll_disable, | ||
| 509 | }; | 424 | }; |
| 510 | 425 | ||
| 511 | static struct clk usb_pll_clk = { | 426 | static struct clk usb_pll_clk = { |
| 512 | .name = "usb_pll", | ||
| 513 | .parent = &ckih_clk, | 427 | .parent = &ckih_clk, |
| 514 | .set_rate = _clk_pll_set_rate, | 428 | .get_rate = usb_pll_get_rate, |
| 515 | .get_rate = _clk_pll_get_rate, | 429 | .enable = usb_pll_enable, |
| 516 | .enable = _clk_usb_pll_enable, | 430 | .disable = usb_pll_disable, |
| 517 | .disable = _clk_usb_pll_disable, | ||
| 518 | }; | 431 | }; |
| 519 | 432 | ||
| 520 | static struct clk ahb_clk = { | 433 | static struct clk ahb_clk = { |
| 521 | .name = "ahb_clk", | ||
| 522 | .parent = &mcu_main_clk, | 434 | .parent = &mcu_main_clk, |
| 523 | .get_rate = _clk_hclk_get_rate, | 435 | .get_rate = ahb_get_rate, |
| 524 | }; | 436 | }; |
| 525 | 437 | ||
| 526 | static struct clk per_clk = { | 438 | #define DEFINE_CLOCK(name, i, er, es, gr, s, p) \ |
| 527 | .name = "per_clk", | 439 | static struct clk name = { \ |
| 528 | .parent = &usb_pll_clk, | 440 | .id = i, \ |
| 529 | .get_rate = _clk_per_get_rate, | 441 | .enable_reg = er, \ |
| 530 | }; | 442 | .enable_shift = es, \ |
| 531 | 443 | .get_rate = gr, \ | |
| 532 | static struct clk perclk_clk = { | 444 | .enable = cgr_enable, \ |
| 533 | .name = "perclk_clk", | 445 | .disable = cgr_disable, \ |
| 534 | .parent = &ipg_clk, | 446 | .secondary = s, \ |
| 535 | }; | 447 | .parent = p, \ |
| 536 | 448 | } | |
| 537 | static struct clk cspi_clk[] = { | ||
| 538 | { | ||
| 539 | .name = "cspi_clk", | ||
| 540 | .id = 0, | ||
| 541 | .parent = &ipg_clk, | ||
| 542 | .enable = _clk_enable, | ||
| 543 | .enable_reg = MXC_CCM_CGR2, | ||
| 544 | .enable_shift = MXC_CCM_CGR2_CSPI1_OFFSET, | ||
| 545 | .disable = _clk_disable,}, | ||
| 546 | { | ||
| 547 | .name = "cspi_clk", | ||
| 548 | .id = 1, | ||
| 549 | .parent = &ipg_clk, | ||
| 550 | .enable = _clk_enable, | ||
| 551 | .enable_reg = MXC_CCM_CGR2, | ||
| 552 | .enable_shift = MXC_CCM_CGR2_CSPI2_OFFSET, | ||
| 553 | .disable = _clk_disable,}, | ||
| 554 | { | ||
| 555 | .name = "cspi_clk", | ||
| 556 | .id = 2, | ||
| 557 | .parent = &ipg_clk, | ||
| 558 | .enable = _clk_enable, | ||
| 559 | .enable_reg = MXC_CCM_CGR0, | ||
| 560 | .enable_shift = MXC_CCM_CGR0_CSPI3_OFFSET, | ||
| 561 | .disable = _clk_disable,}, | ||
| 562 | }; | ||
| 563 | |||
| 564 | static struct clk ipg_clk = { | ||
| 565 | .name = "ipg_clk", | ||
| 566 | .parent = &ahb_clk, | ||
| 567 | .get_rate = _clk_ipg_get_rate, | ||
| 568 | }; | ||
| 569 | |||
| 570 | static struct clk emi_clk = { | ||
| 571 | .name = "emi_clk", | ||
| 572 | .parent = &ahb_clk, | ||
| 573 | .enable = _clk_enable, | ||
| 574 | .enable_reg = MXC_CCM_CGR2, | ||
| 575 | .enable_shift = MXC_CCM_CGR2_EMI_OFFSET, | ||
| 576 | .disable = _clk_emi_disable, | ||
| 577 | }; | ||
| 578 | |||
| 579 | static struct clk gpt_clk = { | ||
| 580 | .name = "gpt_clk", | ||
| 581 | .parent = &perclk_clk, | ||
| 582 | .enable = _clk_enable, | ||
| 583 | .enable_reg = MXC_CCM_CGR0, | ||
| 584 | .enable_shift = MXC_CCM_CGR0_GPT_OFFSET, | ||
| 585 | .disable = _clk_disable, | ||
| 586 | }; | ||
| 587 | |||
| 588 | static struct clk pwm_clk = { | ||
| 589 | .name = "pwm_clk", | ||
| 590 | .parent = &perclk_clk, | ||
| 591 | .enable = _clk_enable, | ||
| 592 | .enable_reg = MXC_CCM_CGR0, | ||
| 593 | .enable_shift = MXC_CCM_CGR1_PWM_OFFSET, | ||
| 594 | .disable = _clk_disable, | ||
| 595 | }; | ||
| 596 | |||
| 597 | static struct clk epit_clk[] = { | ||
| 598 | { | ||
| 599 | .name = "epit_clk", | ||
| 600 | .id = 0, | ||
| 601 | .parent = &perclk_clk, | ||
| 602 | .enable = _clk_enable, | ||
| 603 | .enable_reg = MXC_CCM_CGR0, | ||
| 604 | .enable_shift = MXC_CCM_CGR0_EPIT1_OFFSET, | ||
| 605 | .disable = _clk_disable,}, | ||
| 606 | { | ||
| 607 | .name = "epit_clk", | ||
| 608 | .id = 1, | ||
| 609 | .parent = &perclk_clk, | ||
| 610 | .enable = _clk_enable, | ||
| 611 | .enable_reg = MXC_CCM_CGR0, | ||
| 612 | .enable_shift = MXC_CCM_CGR0_EPIT2_OFFSET, | ||
| 613 | .disable = _clk_disable,}, | ||
| 614 | }; | ||
| 615 | |||
| 616 | static struct clk nfc_clk = { | ||
| 617 | .name = "nfc_clk", | ||
| 618 | .parent = &ahb_clk, | ||
| 619 | .get_rate = _clk_nfc_get_rate, | ||
| 620 | }; | ||
| 621 | |||
| 622 | static struct clk scc_clk = { | ||
| 623 | .name = "scc_clk", | ||
| 624 | .parent = &ipg_clk, | ||
| 625 | }; | ||
| 626 | |||
| 627 | static struct clk ipu_clk = { | ||
| 628 | .name = "ipu_clk", | ||
| 629 | .parent = &mcu_main_clk, | ||
| 630 | .get_rate = _clk_hsp_get_rate, | ||
| 631 | .enable = _clk_enable, | ||
| 632 | .enable_reg = MXC_CCM_CGR1, | ||
| 633 | .enable_shift = MXC_CCM_CGR1_IPU_OFFSET, | ||
| 634 | .disable = _clk_disable, | ||
| 635 | }; | ||
| 636 | |||
| 637 | static struct clk kpp_clk = { | ||
| 638 | .name = "kpp_clk", | ||
| 639 | .parent = &ipg_clk, | ||
| 640 | .enable = _clk_enable, | ||
| 641 | .enable_reg = MXC_CCM_CGR1, | ||
| 642 | .enable_shift = MXC_CCM_CGR1_KPP_OFFSET, | ||
| 643 | .disable = _clk_disable, | ||
| 644 | }; | ||
| 645 | |||
| 646 | static struct clk wdog_clk = { | ||
| 647 | .name = "wdog_clk", | ||
| 648 | .parent = &ipg_clk, | ||
| 649 | .enable = _clk_enable, | ||
| 650 | .enable_reg = MXC_CCM_CGR1, | ||
| 651 | .enable_shift = MXC_CCM_CGR1_WDOG_OFFSET, | ||
| 652 | .disable = _clk_disable, | ||
| 653 | }; | ||
| 654 | static struct clk rtc_clk = { | ||
| 655 | .name = "rtc_clk", | ||
| 656 | .parent = &ipg_clk, | ||
| 657 | .enable = _clk_enable, | ||
| 658 | .enable_reg = MXC_CCM_CGR1, | ||
| 659 | .enable_shift = MXC_CCM_CGR1_RTC_OFFSET, | ||
| 660 | .disable = _clk_disable, | ||
| 661 | }; | ||
| 662 | |||
| 663 | static struct clk usb_clk[] = { | ||
| 664 | { | ||
| 665 | .name = "usb_clk", | ||
| 666 | .parent = &usb_pll_clk, | ||
| 667 | .get_rate = _clk_usb_get_rate,}, | ||
| 668 | { | ||
| 669 | .name = "usb_ahb_clk", | ||
| 670 | .parent = &ahb_clk, | ||
| 671 | .enable = _clk_enable, | ||
| 672 | .enable_reg = MXC_CCM_CGR1, | ||
| 673 | .enable_shift = MXC_CCM_CGR1_USBOTG_OFFSET, | ||
| 674 | .disable = _clk_disable,}, | ||
| 675 | }; | ||
| 676 | |||
| 677 | static struct clk csi_clk = { | ||
| 678 | .name = "csi_clk", | ||
| 679 | .parent = &serial_pll_clk, | ||
| 680 | .get_rate = _clk_csi_get_rate, | ||
| 681 | .round_rate = _clk_csi_round_rate, | ||
| 682 | .set_rate = _clk_csi_set_rate, | ||
| 683 | .enable = _clk_enable, | ||
| 684 | .enable_reg = MXC_CCM_CGR1, | ||
| 685 | .enable_shift = MXC_CCM_CGR1_CSI_OFFSET, | ||
| 686 | .disable = _clk_disable, | ||
| 687 | }; | ||
| 688 | |||
| 689 | static struct clk uart_clk[] = { | ||
| 690 | { | ||
| 691 | .name = "uart_clk", | ||
| 692 | .id = 0, | ||
| 693 | .parent = &perclk_clk, | ||
| 694 | .enable = _clk_enable, | ||
| 695 | .enable_reg = MXC_CCM_CGR0, | ||
| 696 | .enable_shift = MXC_CCM_CGR0_UART1_OFFSET, | ||
| 697 | .disable = _clk_disable,}, | ||
| 698 | { | ||
| 699 | .name = "uart_clk", | ||
| 700 | .id = 1, | ||
| 701 | .parent = &perclk_clk, | ||
| 702 | .enable = _clk_enable, | ||
| 703 | .enable_reg = MXC_CCM_CGR0, | ||
| 704 | .enable_shift = MXC_CCM_CGR0_UART2_OFFSET, | ||
| 705 | .disable = _clk_disable,}, | ||
| 706 | { | ||
| 707 | .name = "uart_clk", | ||
| 708 | .id = 2, | ||
| 709 | .parent = &perclk_clk, | ||
| 710 | .enable = _clk_enable, | ||
| 711 | .enable_reg = MXC_CCM_CGR1, | ||
| 712 | .enable_shift = MXC_CCM_CGR1_UART3_OFFSET, | ||
| 713 | .disable = _clk_disable,}, | ||
| 714 | { | ||
| 715 | .name = "uart_clk", | ||
| 716 | .id = 3, | ||
| 717 | .parent = &perclk_clk, | ||
| 718 | .enable = _clk_enable, | ||
| 719 | .enable_reg = MXC_CCM_CGR1, | ||
| 720 | .enable_shift = MXC_CCM_CGR1_UART4_OFFSET, | ||
| 721 | .disable = _clk_disable,}, | ||
| 722 | { | ||
| 723 | .name = "uart_clk", | ||
| 724 | .id = 4, | ||
| 725 | .parent = &perclk_clk, | ||
| 726 | .enable = _clk_enable, | ||
| 727 | .enable_reg = MXC_CCM_CGR1, | ||
| 728 | .enable_shift = MXC_CCM_CGR1_UART5_OFFSET, | ||
| 729 | .disable = _clk_disable,}, | ||
| 730 | }; | ||
| 731 | |||
| 732 | static struct clk i2c_clk[] = { | ||
| 733 | { | ||
| 734 | .name = "i2c_clk", | ||
| 735 | .id = 0, | ||
| 736 | .parent = &perclk_clk, | ||
| 737 | .enable = _clk_enable, | ||
| 738 | .enable_reg = MXC_CCM_CGR0, | ||
| 739 | .enable_shift = MXC_CCM_CGR0_I2C1_OFFSET, | ||
| 740 | .disable = _clk_disable,}, | ||
| 741 | { | ||
| 742 | .name = "i2c_clk", | ||
| 743 | .id = 1, | ||
| 744 | .parent = &perclk_clk, | ||
| 745 | .enable = _clk_enable, | ||
| 746 | .enable_reg = MXC_CCM_CGR0, | ||
| 747 | .enable_shift = MXC_CCM_CGR0_I2C2_OFFSET, | ||
| 748 | .disable = _clk_disable,}, | ||
| 749 | { | ||
| 750 | .name = "i2c_clk", | ||
| 751 | .id = 2, | ||
| 752 | .parent = &perclk_clk, | ||
| 753 | .enable = _clk_enable, | ||
| 754 | .enable_reg = MXC_CCM_CGR0, | ||
| 755 | .enable_shift = MXC_CCM_CGR0_I2C3_OFFSET, | ||
| 756 | .disable = _clk_disable,}, | ||
| 757 | }; | ||
| 758 | |||
| 759 | static struct clk owire_clk = { | ||
| 760 | .name = "owire_clk", | ||
| 761 | .parent = &perclk_clk, | ||
| 762 | .enable_reg = MXC_CCM_CGR1, | ||
| 763 | .enable_shift = MXC_CCM_CGR1_OWIRE_OFFSET, | ||
| 764 | .enable = _clk_enable, | ||
| 765 | .disable = _clk_disable, | ||
| 766 | }; | ||
| 767 | |||
| 768 | static struct clk sdhc_clk[] = { | ||
| 769 | { | ||
| 770 | .name = "sdhc_clk", | ||
| 771 | .id = 0, | ||
| 772 | .parent = &perclk_clk, | ||
| 773 | .enable = _clk_enable, | ||
| 774 | .enable_reg = MXC_CCM_CGR0, | ||
| 775 | .enable_shift = MXC_CCM_CGR0_SD_MMC1_OFFSET, | ||
| 776 | .disable = _clk_disable,}, | ||
| 777 | { | ||
| 778 | .name = "sdhc_clk", | ||
| 779 | .id = 1, | ||
| 780 | .parent = &perclk_clk, | ||
| 781 | .enable = _clk_enable, | ||
| 782 | .enable_reg = MXC_CCM_CGR0, | ||
| 783 | .enable_shift = MXC_CCM_CGR0_SD_MMC2_OFFSET, | ||
| 784 | .disable = _clk_disable,}, | ||
| 785 | }; | ||
| 786 | |||
| 787 | static struct clk ssi_clk[] = { | ||
| 788 | { | ||
| 789 | .name = "ssi_clk", | ||
| 790 | .parent = &serial_pll_clk, | ||
| 791 | .get_rate = _clk_ssi1_get_rate, | ||
| 792 | .enable = _clk_enable, | ||
| 793 | .enable_reg = MXC_CCM_CGR0, | ||
| 794 | .enable_shift = MXC_CCM_CGR0_SSI1_OFFSET, | ||
| 795 | .disable = _clk_disable,}, | ||
| 796 | { | ||
| 797 | .name = "ssi_clk", | ||
| 798 | .id = 1, | ||
| 799 | .parent = &serial_pll_clk, | ||
| 800 | .get_rate = _clk_ssi2_get_rate, | ||
| 801 | .enable = _clk_enable, | ||
| 802 | .enable_reg = MXC_CCM_CGR2, | ||
| 803 | .enable_shift = MXC_CCM_CGR2_SSI2_OFFSET, | ||
| 804 | .disable = _clk_disable,}, | ||
| 805 | }; | ||
| 806 | |||
| 807 | static struct clk firi_clk = { | ||
| 808 | .name = "firi_clk", | ||
| 809 | .parent = &usb_pll_clk, | ||
| 810 | .round_rate = _clk_firi_round_rate, | ||
| 811 | .set_rate = _clk_firi_set_rate, | ||
| 812 | .get_rate = _clk_firi_get_rate, | ||
| 813 | .enable = _clk_enable, | ||
| 814 | .enable_reg = MXC_CCM_CGR2, | ||
| 815 | .enable_shift = MXC_CCM_CGR2_FIRI_OFFSET, | ||
| 816 | .disable = _clk_disable, | ||
| 817 | }; | ||
| 818 | |||
| 819 | static struct clk ata_clk = { | ||
| 820 | .name = "ata_clk", | ||
| 821 | .parent = &ipg_clk, | ||
| 822 | .enable = _clk_enable, | ||
| 823 | .enable_reg = MXC_CCM_CGR0, | ||
| 824 | .enable_shift = MXC_CCM_CGR0_ATA_OFFSET, | ||
| 825 | .disable = _clk_disable, | ||
| 826 | }; | ||
| 827 | |||
| 828 | static struct clk mbx_clk = { | ||
| 829 | .name = "mbx_clk", | ||
| 830 | .parent = &ahb_clk, | ||
| 831 | .enable = _clk_enable, | ||
| 832 | .enable_reg = MXC_CCM_CGR2, | ||
| 833 | .enable_shift = MXC_CCM_CGR2_GACC_OFFSET, | ||
| 834 | .get_rate = _clk_mbx_get_rate, | ||
| 835 | }; | ||
| 836 | |||
| 837 | static struct clk vpu_clk = { | ||
| 838 | .name = "vpu_clk", | ||
| 839 | .parent = &ahb_clk, | ||
| 840 | .enable = _clk_enable, | ||
| 841 | .enable_reg = MXC_CCM_CGR2, | ||
| 842 | .enable_shift = MXC_CCM_CGR2_GACC_OFFSET, | ||
| 843 | .get_rate = _clk_mbx_get_rate, | ||
| 844 | }; | ||
| 845 | |||
| 846 | static struct clk rtic_clk = { | ||
| 847 | .name = "rtic_clk", | ||
| 848 | .parent = &ahb_clk, | ||
| 849 | .enable = _clk_enable, | ||
| 850 | .enable_reg = MXC_CCM_CGR2, | ||
| 851 | .enable_shift = MXC_CCM_CGR2_RTIC_OFFSET, | ||
| 852 | .disable = _clk_disable, | ||
| 853 | }; | ||
| 854 | |||
| 855 | static struct clk rng_clk = { | ||
| 856 | .name = "rng_clk", | ||
| 857 | .parent = &ipg_clk, | ||
| 858 | .enable = _clk_enable, | ||
| 859 | .enable_reg = MXC_CCM_CGR0, | ||
| 860 | .enable_shift = MXC_CCM_CGR0_RNG_OFFSET, | ||
| 861 | .disable = _clk_disable, | ||
| 862 | }; | ||
| 863 | |||
| 864 | static struct clk sdma_clk[] = { | ||
| 865 | { | ||
| 866 | .name = "sdma_ahb_clk", | ||
| 867 | .parent = &ahb_clk, | ||
| 868 | .enable = _clk_enable, | ||
| 869 | .enable_reg = MXC_CCM_CGR0, | ||
| 870 | .enable_shift = MXC_CCM_CGR0_SDMA_OFFSET, | ||
| 871 | .disable = _clk_disable,}, | ||
| 872 | { | ||
| 873 | .name = "sdma_ipg_clk", | ||
| 874 | .parent = &ipg_clk,} | ||
| 875 | }; | ||
| 876 | |||
| 877 | static struct clk mpeg4_clk = { | ||
| 878 | .name = "mpeg4_clk", | ||
| 879 | .parent = &ahb_clk, | ||
| 880 | .enable = _clk_enable, | ||
| 881 | .enable_reg = MXC_CCM_CGR1, | ||
| 882 | .enable_shift = MXC_CCM_CGR1_HANTRO_OFFSET, | ||
| 883 | .disable = _clk_disable, | ||
| 884 | }; | ||
| 885 | |||
| 886 | static struct clk vl2cc_clk = { | ||
| 887 | .name = "vl2cc_clk", | ||
| 888 | .parent = &ahb_clk, | ||
| 889 | .enable = _clk_enable, | ||
| 890 | .enable_reg = MXC_CCM_CGR1, | ||
| 891 | .enable_shift = MXC_CCM_CGR1_HANTRO_OFFSET, | ||
| 892 | .disable = _clk_disable, | ||
| 893 | }; | ||
| 894 | |||
| 895 | static struct clk mstick_clk[] = { | ||
| 896 | { | ||
| 897 | .name = "mstick_clk", | ||
| 898 | .id = 0, | ||
| 899 | .parent = &usb_pll_clk, | ||
| 900 | .get_rate = _clk_mstick1_get_rate, | ||
| 901 | .enable = _clk_enable, | ||
| 902 | .enable_reg = MXC_CCM_CGR1, | ||
| 903 | .enable_shift = MXC_CCM_CGR1_MEMSTICK1_OFFSET, | ||
| 904 | .disable = _clk_disable,}, | ||
| 905 | { | ||
| 906 | .name = "mstick_clk", | ||
| 907 | .id = 1, | ||
| 908 | .parent = &usb_pll_clk, | ||
| 909 | .get_rate = _clk_mstick2_get_rate, | ||
| 910 | .enable = _clk_enable, | ||
| 911 | .enable_reg = MXC_CCM_CGR1, | ||
| 912 | .enable_shift = MXC_CCM_CGR1_MEMSTICK2_OFFSET, | ||
| 913 | .disable = _clk_disable,}, | ||
| 914 | }; | ||
| 915 | |||
| 916 | static struct clk iim_clk = { | ||
| 917 | .name = "iim_clk", | ||
| 918 | .parent = &ipg_clk, | ||
| 919 | .enable = _clk_enable, | ||
| 920 | .enable_reg = MXC_CCM_CGR0, | ||
| 921 | .enable_shift = MXC_CCM_CGR0_IIM_OFFSET, | ||
| 922 | .disable = _clk_disable, | ||
| 923 | }; | ||
| 924 | |||
| 925 | static unsigned long _clk_cko1_round_rate(struct clk *clk, unsigned long rate) | ||
| 926 | { | ||
| 927 | u32 div, parent = clk_get_rate(clk->parent); | ||
| 928 | |||
| 929 | div = parent / rate; | ||
| 930 | if (parent % rate) | ||
| 931 | div++; | ||
| 932 | |||
| 933 | if (div > 8) | ||
| 934 | div = 16; | ||
| 935 | else if (div > 4) | ||
| 936 | div = 8; | ||
| 937 | else if (div > 2) | ||
| 938 | div = 4; | ||
| 939 | |||
| 940 | return parent / div; | ||
| 941 | } | ||
| 942 | |||
| 943 | static int _clk_cko1_set_rate(struct clk *clk, unsigned long rate) | ||
| 944 | { | ||
| 945 | u32 reg, div, parent = clk_get_rate(clk->parent); | ||
| 946 | |||
| 947 | div = parent / rate; | ||
| 948 | |||
| 949 | if (div == 16) | ||
| 950 | div = 4; | ||
| 951 | else if (div == 8) | ||
| 952 | div = 3; | ||
| 953 | else if (div == 4) | ||
| 954 | div = 2; | ||
| 955 | else if (div == 2) | ||
| 956 | div = 1; | ||
| 957 | else if (div == 1) | ||
| 958 | div = 0; | ||
| 959 | else | ||
| 960 | return -EINVAL; | ||
| 961 | |||
| 962 | reg = __raw_readl(MXC_CCM_COSR) & ~MXC_CCM_COSR_CLKOUTDIV_MASK; | ||
| 963 | reg |= div << MXC_CCM_COSR_CLKOUTDIV_OFFSET; | ||
| 964 | __raw_writel(reg, MXC_CCM_COSR); | ||
| 965 | |||
| 966 | return 0; | ||
| 967 | } | ||
| 968 | |||
| 969 | static unsigned long _clk_cko1_get_rate(struct clk *clk) | ||
| 970 | { | ||
| 971 | u32 div; | ||
| 972 | |||
| 973 | div = __raw_readl(MXC_CCM_COSR) & MXC_CCM_COSR_CLKOUTDIV_MASK >> | ||
| 974 | MXC_CCM_COSR_CLKOUTDIV_OFFSET; | ||
| 975 | |||
| 976 | return clk_get_rate(clk->parent) / (1 << div); | ||
| 977 | } | ||
| 978 | |||
| 979 | static int _clk_cko1_set_parent(struct clk *clk, struct clk *parent) | ||
| 980 | { | ||
| 981 | u32 reg; | ||
| 982 | |||
| 983 | reg = __raw_readl(MXC_CCM_COSR) & ~MXC_CCM_COSR_CLKOSEL_MASK; | ||
| 984 | |||
| 985 | if (parent == &mcu_main_clk) | ||
| 986 | reg |= 0 << MXC_CCM_COSR_CLKOSEL_OFFSET; | ||
| 987 | else if (parent == &ipg_clk) | ||
| 988 | reg |= 1 << MXC_CCM_COSR_CLKOSEL_OFFSET; | ||
| 989 | else if (parent == &usb_pll_clk) | ||
| 990 | reg |= 2 << MXC_CCM_COSR_CLKOSEL_OFFSET; | ||
| 991 | else if (parent == mcu_main_clk.parent) | ||
| 992 | reg |= 3 << MXC_CCM_COSR_CLKOSEL_OFFSET; | ||
| 993 | else if (parent == &ahb_clk) | ||
| 994 | reg |= 5 << MXC_CCM_COSR_CLKOSEL_OFFSET; | ||
| 995 | else if (parent == &serial_pll_clk) | ||
| 996 | reg |= 7 << MXC_CCM_COSR_CLKOSEL_OFFSET; | ||
| 997 | else if (parent == &ckih_clk) | ||
| 998 | reg |= 8 << MXC_CCM_COSR_CLKOSEL_OFFSET; | ||
| 999 | else if (parent == &emi_clk) | ||
| 1000 | reg |= 9 << MXC_CCM_COSR_CLKOSEL_OFFSET; | ||
| 1001 | else if (parent == &ipu_clk) | ||
| 1002 | reg |= 0xA << MXC_CCM_COSR_CLKOSEL_OFFSET; | ||
| 1003 | else if (parent == &nfc_clk) | ||
| 1004 | reg |= 0xB << MXC_CCM_COSR_CLKOSEL_OFFSET; | ||
| 1005 | else if (parent == &uart_clk[0]) | ||
| 1006 | reg |= 0xC << MXC_CCM_COSR_CLKOSEL_OFFSET; | ||
| 1007 | else | ||
| 1008 | return -EINVAL; | ||
| 1009 | |||
| 1010 | __raw_writel(reg, MXC_CCM_COSR); | ||
| 1011 | |||
| 1012 | return 0; | ||
| 1013 | } | ||
| 1014 | |||
| 1015 | static int _clk_cko1_enable(struct clk *clk) | ||
| 1016 | { | ||
| 1017 | u32 reg; | ||
| 1018 | |||
| 1019 | reg = __raw_readl(MXC_CCM_COSR) | MXC_CCM_COSR_CLKOEN; | ||
| 1020 | __raw_writel(reg, MXC_CCM_COSR); | ||
| 1021 | 449 | ||
| 1022 | return 0; | 450 | #define DEFINE_CLOCK1(name, i, er, es, getsetround, s, p) \ |
| 1023 | } | 451 | static struct clk name = { \ |
| 452 | .id = i, \ | ||
| 453 | .enable_reg = er, \ | ||
| 454 | .enable_shift = es, \ | ||
| 455 | .get_rate = getsetround##_get_rate, \ | ||
| 456 | .set_rate = getsetround##_set_rate, \ | ||
| 457 | .round_rate = getsetround##_round_rate, \ | ||
| 458 | .enable = cgr_enable, \ | ||
| 459 | .disable = cgr_disable, \ | ||
| 460 | .secondary = s, \ | ||
| 461 | .parent = p, \ | ||
| 462 | } | ||
| 1024 | 463 | ||
| 1025 | static void _clk_cko1_disable(struct clk *clk) | 464 | DEFINE_CLOCK(perclk_clk, 0, NULL, 0, NULL, NULL, &ipg_clk); |
| 465 | |||
| 466 | DEFINE_CLOCK(sdhc1_clk, 0, MXC_CCM_CGR0, 0, NULL, NULL, &perclk_clk); | ||
| 467 | DEFINE_CLOCK(sdhc2_clk, 1, MXC_CCM_CGR0, 2, NULL, NULL, &perclk_clk); | ||
| 468 | DEFINE_CLOCK(gpt_clk, 0, MXC_CCM_CGR0, 4, NULL, NULL, &perclk_clk); | ||
| 469 | DEFINE_CLOCK(epit1_clk, 0, MXC_CCM_CGR0, 6, NULL, NULL, &perclk_clk); | ||
| 470 | DEFINE_CLOCK(epit2_clk, 1, MXC_CCM_CGR0, 8, NULL, NULL, &perclk_clk); | ||
| 471 | DEFINE_CLOCK(iim_clk, 0, MXC_CCM_CGR0, 10, NULL, NULL, &ipg_clk); | ||
| 472 | DEFINE_CLOCK(ata_clk, 0, MXC_CCM_CGR0, 12, NULL, NULL, &ipg_clk); | ||
| 473 | DEFINE_CLOCK(sdma_clk1, 0, MXC_CCM_CGR0, 14, NULL, &sdma_clk1, &ahb_clk); | ||
| 474 | DEFINE_CLOCK(cspi3_clk, 2, MXC_CCM_CGR0, 16, NULL, NULL, &ipg_clk); | ||
| 475 | DEFINE_CLOCK(rng_clk, 0, MXC_CCM_CGR0, 18, NULL, NULL, &ipg_clk); | ||
| 476 | DEFINE_CLOCK(uart1_clk, 0, MXC_CCM_CGR0, 20, NULL, NULL, &perclk_clk); | ||
| 477 | DEFINE_CLOCK(uart2_clk, 1, MXC_CCM_CGR0, 22, NULL, NULL, &perclk_clk); | ||
| 478 | DEFINE_CLOCK(ssi1_clk, 0, MXC_CCM_CGR0, 24, ssi1_get_rate, NULL, &serial_pll_clk); | ||
| 479 | DEFINE_CLOCK(i2c1_clk, 0, MXC_CCM_CGR0, 26, NULL, NULL, &perclk_clk); | ||
| 480 | DEFINE_CLOCK(i2c2_clk, 1, MXC_CCM_CGR0, 28, NULL, NULL, &perclk_clk); | ||
| 481 | DEFINE_CLOCK(i2c3_clk, 2, MXC_CCM_CGR0, 30, NULL, NULL, &perclk_clk); | ||
| 482 | |||
| 483 | DEFINE_CLOCK(mpeg4_clk, 0, MXC_CCM_CGR1, 0, NULL, NULL, &ahb_clk); | ||
| 484 | DEFINE_CLOCK(mstick1_clk, 0, MXC_CCM_CGR1, 2, mstick1_get_rate, NULL, &usb_pll_clk); | ||
| 485 | DEFINE_CLOCK(mstick2_clk, 1, MXC_CCM_CGR1, 4, mstick2_get_rate, NULL, &usb_pll_clk); | ||
| 486 | DEFINE_CLOCK1(csi_clk, 0, MXC_CCM_CGR1, 6, csi, NULL, &ahb_clk); | ||
| 487 | DEFINE_CLOCK(rtc_clk, 0, MXC_CCM_CGR1, 8, NULL, NULL, &ipg_clk); | ||
| 488 | DEFINE_CLOCK(wdog_clk, 0, MXC_CCM_CGR1, 10, NULL, NULL, &ipg_clk); | ||
| 489 | DEFINE_CLOCK(pwm_clk, 0, MXC_CCM_CGR1, 12, NULL, NULL, &perclk_clk); | ||
| 490 | DEFINE_CLOCK(usb_clk2, 0, MXC_CCM_CGR1, 18, usb_get_rate, NULL, &ahb_clk); | ||
| 491 | DEFINE_CLOCK(kpp_clk, 0, MXC_CCM_CGR1, 20, NULL, NULL, &ipg_clk); | ||
| 492 | DEFINE_CLOCK(ipu_clk, 0, MXC_CCM_CGR1, 22, hsp_get_rate, NULL, &mcu_main_clk); | ||
| 493 | DEFINE_CLOCK(uart3_clk, 2, MXC_CCM_CGR1, 24, NULL, NULL, &perclk_clk); | ||
| 494 | DEFINE_CLOCK(uart4_clk, 3, MXC_CCM_CGR1, 26, NULL, NULL, &perclk_clk); | ||
| 495 | DEFINE_CLOCK(uart5_clk, 4, MXC_CCM_CGR1, 28, NULL, NULL, &perclk_clk); | ||
| 496 | DEFINE_CLOCK(owire_clk, 0, MXC_CCM_CGR1, 30, NULL, NULL, &perclk_clk); | ||
| 497 | |||
| 498 | DEFINE_CLOCK(ssi2_clk, 1, MXC_CCM_CGR2, 0, ssi2_get_rate, NULL, &serial_pll_clk); | ||
| 499 | DEFINE_CLOCK(cspi1_clk, 0, MXC_CCM_CGR2, 2, NULL, NULL, &ipg_clk); | ||
| 500 | DEFINE_CLOCK(cspi2_clk, 1, MXC_CCM_CGR2, 4, NULL, NULL, &ipg_clk); | ||
| 501 | DEFINE_CLOCK(mbx_clk, 0, MXC_CCM_CGR2, 6, mbx_get_rate, NULL, &ahb_clk); | ||
| 502 | DEFINE_CLOCK(emi_clk, 0, MXC_CCM_CGR2, 8, NULL, NULL, &ahb_clk); | ||
| 503 | DEFINE_CLOCK(rtic_clk, 0, MXC_CCM_CGR2, 10, NULL, NULL, &ahb_clk); | ||
| 504 | DEFINE_CLOCK1(firi_clk, 0, MXC_CCM_CGR2, 12, firi, NULL, &usb_pll_clk); | ||
| 505 | |||
| 506 | DEFINE_CLOCK(sdma_clk2, 0, NULL, 0, NULL, NULL, &ipg_clk); | ||
| 507 | DEFINE_CLOCK(usb_clk1, 0, NULL, 0, usb_get_rate, NULL, &usb_pll_clk); | ||
| 508 | DEFINE_CLOCK(nfc_clk, 0, NULL, 0, nfc_get_rate, NULL, &ahb_clk); | ||
| 509 | DEFINE_CLOCK(scc_clk, 0, NULL, 0, NULL, NULL, &ipg_clk); | ||
| 510 | DEFINE_CLOCK(ipg_clk, 0, NULL, 0, ipg_get_rate, NULL, &ahb_clk); | ||
| 511 | |||
| 512 | #define _REGISTER_CLOCK(d, n, c) \ | ||
| 513 | { \ | ||
| 514 | .dev_id = d, \ | ||
| 515 | .con_id = n, \ | ||
| 516 | .clk = &c, \ | ||
| 517 | }, | ||
| 518 | |||
| 519 | static struct clk_lookup lookups[] __initdata = { | ||
| 520 | _REGISTER_CLOCK(NULL, "emi", emi_clk) | ||
| 521 | _REGISTER_CLOCK(NULL, "cspi", cspi1_clk) | ||
| 522 | _REGISTER_CLOCK(NULL, "cspi", cspi2_clk) | ||
| 523 | _REGISTER_CLOCK(NULL, "cspi", cspi3_clk) | ||
| 524 | _REGISTER_CLOCK(NULL, "gpt", gpt_clk) | ||
| 525 | _REGISTER_CLOCK(NULL, "pwm", pwm_clk) | ||
| 526 | _REGISTER_CLOCK(NULL, "wdog", wdog_clk) | ||
| 527 | _REGISTER_CLOCK(NULL, "rtc", rtc_clk) | ||
| 528 | _REGISTER_CLOCK(NULL, "epit", epit1_clk) | ||
| 529 | _REGISTER_CLOCK(NULL, "epit", epit2_clk) | ||
| 530 | _REGISTER_CLOCK("mxc_nand.0", NULL, nfc_clk) | ||
| 531 | _REGISTER_CLOCK("ipu-core", NULL, ipu_clk) | ||
| 532 | _REGISTER_CLOCK("mx3_sdc_fb", NULL, ipu_clk) | ||
| 533 | _REGISTER_CLOCK(NULL, "kpp", kpp_clk) | ||
| 534 | _REGISTER_CLOCK("fsl-usb2-udc", "usb", usb_clk1) | ||
| 535 | _REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", usb_clk2) | ||
| 536 | _REGISTER_CLOCK("mx3-camera.0", "csi", csi_clk) | ||
| 537 | _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) | ||
| 538 | _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) | ||
| 539 | _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) | ||
| 540 | _REGISTER_CLOCK("imx-uart.3", NULL, uart4_clk) | ||
| 541 | _REGISTER_CLOCK("imx-uart.4", NULL, uart5_clk) | ||
| 542 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) | ||
| 543 | _REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk) | ||
| 544 | _REGISTER_CLOCK("imx-i2c.2", NULL, i2c3_clk) | ||
| 545 | _REGISTER_CLOCK("mxc_w1.0", NULL, owire_clk) | ||
| 546 | _REGISTER_CLOCK("mxc-mmc.0", NULL, sdhc1_clk) | ||
| 547 | _REGISTER_CLOCK("mxc-mmc.1", NULL, sdhc2_clk) | ||
| 548 | _REGISTER_CLOCK(NULL, "ssi", ssi1_clk) | ||
| 549 | _REGISTER_CLOCK(NULL, "ssi", ssi2_clk) | ||
| 550 | _REGISTER_CLOCK(NULL, "firi", firi_clk) | ||
| 551 | _REGISTER_CLOCK(NULL, "ata", ata_clk) | ||
| 552 | _REGISTER_CLOCK(NULL, "rtic", rtic_clk) | ||
| 553 | _REGISTER_CLOCK(NULL, "rng", rng_clk) | ||
| 554 | _REGISTER_CLOCK(NULL, "sdma_ahb", sdma_clk1) | ||
| 555 | _REGISTER_CLOCK(NULL, "sdma_ipg", sdma_clk2) | ||
| 556 | _REGISTER_CLOCK(NULL, "mstick", mstick1_clk) | ||
| 557 | _REGISTER_CLOCK(NULL, "mstick", mstick2_clk) | ||
| 558 | _REGISTER_CLOCK(NULL, "scc", scc_clk) | ||
| 559 | _REGISTER_CLOCK(NULL, "iim", iim_clk) | ||
| 560 | _REGISTER_CLOCK(NULL, "mpeg4", mpeg4_clk) | ||
| 561 | _REGISTER_CLOCK(NULL, "mbx", mbx_clk) | ||
| 562 | }; | ||
| 563 | |||
| 564 | int __init mx31_clocks_init(unsigned long fref) | ||
| 1026 | { | 565 | { |
| 1027 | u32 reg; | 566 | u32 reg; |
| 567 | int i; | ||
| 1028 | 568 | ||
| 1029 | reg = __raw_readl(MXC_CCM_COSR) & ~MXC_CCM_COSR_CLKOEN; | 569 | mxc_set_cpu_type(MXC_CPU_MX31); |
| 1030 | __raw_writel(reg, MXC_CCM_COSR); | ||
| 1031 | } | ||
| 1032 | |||
| 1033 | static struct clk cko1_clk = { | ||
| 1034 | .name = "cko1_clk", | ||
| 1035 | .get_rate = _clk_cko1_get_rate, | ||
| 1036 | .set_rate = _clk_cko1_set_rate, | ||
| 1037 | .round_rate = _clk_cko1_round_rate, | ||
| 1038 | .set_parent = _clk_cko1_set_parent, | ||
| 1039 | .enable = _clk_cko1_enable, | ||
| 1040 | .disable = _clk_cko1_disable, | ||
| 1041 | }; | ||
| 1042 | |||
| 1043 | static struct clk *mxc_clks[] = { | ||
| 1044 | &ckih_clk, | ||
| 1045 | &ckil_clk, | ||
| 1046 | &mcu_pll_clk, | ||
| 1047 | &usb_pll_clk, | ||
| 1048 | &serial_pll_clk, | ||
| 1049 | &mcu_main_clk, | ||
| 1050 | &ahb_clk, | ||
| 1051 | &per_clk, | ||
| 1052 | &perclk_clk, | ||
| 1053 | &cko1_clk, | ||
| 1054 | &emi_clk, | ||
| 1055 | &cspi_clk[0], | ||
| 1056 | &cspi_clk[1], | ||
| 1057 | &cspi_clk[2], | ||
| 1058 | &ipg_clk, | ||
| 1059 | &gpt_clk, | ||
| 1060 | &pwm_clk, | ||
| 1061 | &wdog_clk, | ||
| 1062 | &rtc_clk, | ||
| 1063 | &epit_clk[0], | ||
| 1064 | &epit_clk[1], | ||
| 1065 | &nfc_clk, | ||
| 1066 | &ipu_clk, | ||
| 1067 | &kpp_clk, | ||
| 1068 | &usb_clk[0], | ||
| 1069 | &usb_clk[1], | ||
| 1070 | &csi_clk, | ||
| 1071 | &uart_clk[0], | ||
| 1072 | &uart_clk[1], | ||
| 1073 | &uart_clk[2], | ||
| 1074 | &uart_clk[3], | ||
| 1075 | &uart_clk[4], | ||
| 1076 | &i2c_clk[0], | ||
| 1077 | &i2c_clk[1], | ||
| 1078 | &i2c_clk[2], | ||
| 1079 | &owire_clk, | ||
| 1080 | &sdhc_clk[0], | ||
| 1081 | &sdhc_clk[1], | ||
| 1082 | &ssi_clk[0], | ||
| 1083 | &ssi_clk[1], | ||
| 1084 | &firi_clk, | ||
| 1085 | &ata_clk, | ||
| 1086 | &rtic_clk, | ||
| 1087 | &rng_clk, | ||
| 1088 | &sdma_clk[0], | ||
| 1089 | &sdma_clk[1], | ||
| 1090 | &mstick_clk[0], | ||
| 1091 | &mstick_clk[1], | ||
| 1092 | &scc_clk, | ||
| 1093 | &iim_clk, | ||
| 1094 | }; | ||
| 1095 | |||
| 1096 | int __init mxc_clocks_init(unsigned long fref) | ||
| 1097 | { | ||
| 1098 | u32 reg; | ||
| 1099 | struct clk **clkp; | ||
| 1100 | 570 | ||
| 1101 | ckih_rate = fref; | 571 | ckih_rate = fref; |
| 1102 | 572 | ||
| 1103 | for (clkp = mxc_clks; clkp < mxc_clks + ARRAY_SIZE(mxc_clks); clkp++) | 573 | for (i = 0; i < ARRAY_SIZE(lookups); i++) |
| 1104 | clk_register(*clkp); | 574 | clkdev_add(&lookups[i]); |
| 1105 | |||
| 1106 | if (cpu_is_mx31()) { | ||
| 1107 | clk_register(&mpeg4_clk); | ||
| 1108 | clk_register(&mbx_clk); | ||
| 1109 | } else { | ||
| 1110 | clk_register(&vpu_clk); | ||
| 1111 | clk_register(&vl2cc_clk); | ||
| 1112 | } | ||
| 1113 | 575 | ||
| 1114 | /* Turn off all possible clocks */ | 576 | /* Turn off all possible clocks */ |
| 1115 | __raw_writel(MXC_CCM_CGR0_GPT_MASK, MXC_CCM_CGR0); | 577 | __raw_writel((3 << 4), MXC_CCM_CGR0); |
| 1116 | __raw_writel(0, MXC_CCM_CGR1); | 578 | __raw_writel(0, MXC_CCM_CGR1); |
| 1117 | 579 | __raw_writel((3 << 8) | (3 << 14) | (3 << 16)| | |
| 1118 | __raw_writel(MXC_CCM_CGR2_EMI_MASK | | ||
| 1119 | MXC_CCM_CGR2_IPMUX1_MASK | | ||
| 1120 | MXC_CCM_CGR2_IPMUX2_MASK | | ||
| 1121 | MXC_CCM_CGR2_MXCCLKENSEL_MASK | /* for MX32 */ | ||
| 1122 | MXC_CCM_CGR2_CHIKCAMPEN_MASK | /* for MX32 */ | ||
| 1123 | MXC_CCM_CGR2_OVRVPUBUSY_MASK | /* for MX32 */ | ||
| 1124 | 1 << 27 | 1 << 28, /* Bit 27 and 28 are not defined for | 580 | 1 << 27 | 1 << 28, /* Bit 27 and 28 are not defined for |
| 1125 | MX32, but still required to be set */ | 581 | MX32, but still required to be set */ |
| 1126 | MXC_CCM_CGR2); | 582 | MXC_CCM_CGR2); |
| 1127 | 583 | ||
| 1128 | clk_disable(&cko1_clk); | 584 | usb_pll_disable(&usb_pll_clk); |
| 1129 | clk_disable(&usb_pll_clk); | ||
| 1130 | 585 | ||
| 1131 | pr_info("Clock input source is %ld\n", clk_get_rate(&ckih_clk)); | 586 | pr_info("Clock input source is %ld\n", clk_get_rate(&ckih_clk)); |
| 1132 | 587 | ||
| @@ -1143,6 +598,8 @@ int __init mxc_clocks_init(unsigned long fref) | |||
| 1143 | __raw_writel(reg, MXC_CCM_PMCR1); | 598 | __raw_writel(reg, MXC_CCM_PMCR1); |
| 1144 | } | 599 | } |
| 1145 | 600 | ||
| 601 | mxc_timer_init(&ipg_clk); | ||
| 602 | |||
| 1146 | return 0; | 603 | return 0; |
| 1147 | } | 604 | } |
| 1148 | 605 | ||
diff --git a/arch/arm/mach-mx3/crm_regs.h b/arch/arm/mach-mx3/crm_regs.h index 4a0e0ede23bb..adfa3627ad84 100644 --- a/arch/arm/mach-mx3/crm_regs.h +++ b/arch/arm/mach-mx3/crm_regs.h | |||
| @@ -91,47 +91,6 @@ | |||
| 91 | #define MXC_CCM_PDR0_MCU_PODF_OFFSET 0 | 91 | #define MXC_CCM_PDR0_MCU_PODF_OFFSET 0 |
| 92 | #define MXC_CCM_PDR0_MCU_PODF_MASK 0x7 | 92 | #define MXC_CCM_PDR0_MCU_PODF_MASK 0x7 |
| 93 | 93 | ||
| 94 | #define MXC_CCM_PDR0_HSP_DIV_1 (0x0 << 11) | ||
| 95 | #define MXC_CCM_PDR0_HSP_DIV_2 (0x1 << 11) | ||
| 96 | #define MXC_CCM_PDR0_HSP_DIV_3 (0x2 << 11) | ||
| 97 | #define MXC_CCM_PDR0_HSP_DIV_4 (0x3 << 11) | ||
| 98 | #define MXC_CCM_PDR0_HSP_DIV_5 (0x4 << 11) | ||
| 99 | #define MXC_CCM_PDR0_HSP_DIV_6 (0x5 << 11) | ||
| 100 | #define MXC_CCM_PDR0_HSP_DIV_7 (0x6 << 11) | ||
| 101 | #define MXC_CCM_PDR0_HSP_DIV_8 (0x7 << 11) | ||
| 102 | |||
| 103 | #define MXC_CCM_PDR0_IPG_DIV_1 (0x0 << 6) | ||
| 104 | #define MXC_CCM_PDR0_IPG_DIV_2 (0x1 << 6) | ||
| 105 | #define MXC_CCM_PDR0_IPG_DIV_3 (0x2 << 6) | ||
| 106 | #define MXC_CCM_PDR0_IPG_DIV_4 (0x3 << 6) | ||
| 107 | |||
| 108 | #define MXC_CCM_PDR0_MAX_DIV_1 (0x0 << 3) | ||
| 109 | #define MXC_CCM_PDR0_MAX_DIV_2 (0x1 << 3) | ||
| 110 | #define MXC_CCM_PDR0_MAX_DIV_3 (0x2 << 3) | ||
| 111 | #define MXC_CCM_PDR0_MAX_DIV_4 (0x3 << 3) | ||
| 112 | #define MXC_CCM_PDR0_MAX_DIV_5 (0x4 << 3) | ||
| 113 | #define MXC_CCM_PDR0_MAX_DIV_6 (0x5 << 3) | ||
| 114 | #define MXC_CCM_PDR0_MAX_DIV_7 (0x6 << 3) | ||
| 115 | #define MXC_CCM_PDR0_MAX_DIV_8 (0x7 << 3) | ||
| 116 | |||
| 117 | #define MXC_CCM_PDR0_NFC_DIV_1 (0x0 << 8) | ||
| 118 | #define MXC_CCM_PDR0_NFC_DIV_2 (0x1 << 8) | ||
| 119 | #define MXC_CCM_PDR0_NFC_DIV_3 (0x2 << 8) | ||
| 120 | #define MXC_CCM_PDR0_NFC_DIV_4 (0x3 << 8) | ||
| 121 | #define MXC_CCM_PDR0_NFC_DIV_5 (0x4 << 8) | ||
| 122 | #define MXC_CCM_PDR0_NFC_DIV_6 (0x5 << 8) | ||
| 123 | #define MXC_CCM_PDR0_NFC_DIV_7 (0x6 << 8) | ||
| 124 | #define MXC_CCM_PDR0_NFC_DIV_8 (0x7 << 8) | ||
| 125 | |||
| 126 | #define MXC_CCM_PDR0_MCU_DIV_1 0x0 | ||
| 127 | #define MXC_CCM_PDR0_MCU_DIV_2 0x1 | ||
| 128 | #define MXC_CCM_PDR0_MCU_DIV_3 0x2 | ||
| 129 | #define MXC_CCM_PDR0_MCU_DIV_4 0x3 | ||
| 130 | #define MXC_CCM_PDR0_MCU_DIV_5 0x4 | ||
| 131 | #define MXC_CCM_PDR0_MCU_DIV_6 0x5 | ||
| 132 | #define MXC_CCM_PDR0_MCU_DIV_7 0x6 | ||
| 133 | #define MXC_CCM_PDR0_MCU_DIV_8 0x7 | ||
| 134 | |||
| 135 | #define MXC_CCM_PDR1_USB_PRDF_OFFSET 30 | 94 | #define MXC_CCM_PDR1_USB_PRDF_OFFSET 30 |
| 136 | #define MXC_CCM_PDR1_USB_PRDF_MASK (0x3 << 30) | 95 | #define MXC_CCM_PDR1_USB_PRDF_MASK (0x3 << 30) |
| 137 | #define MXC_CCM_PDR1_USB_PODF_OFFSET 27 | 96 | #define MXC_CCM_PDR1_USB_PODF_OFFSET 27 |
| @@ -152,118 +111,6 @@ | |||
| 152 | /* Bit definitions for RCSR */ | 111 | /* Bit definitions for RCSR */ |
| 153 | #define MXC_CCM_RCSR_NF16B 0x80000000 | 112 | #define MXC_CCM_RCSR_NF16B 0x80000000 |
| 154 | 113 | ||
| 155 | /* Bit definitions for both MCU, USB and SR PLL control registers */ | ||
| 156 | #define MXC_CCM_PCTL_BRM 0x80000000 | ||
| 157 | #define MXC_CCM_PCTL_PD_OFFSET 26 | ||
| 158 | #define MXC_CCM_PCTL_PD_MASK (0xF << 26) | ||
| 159 | #define MXC_CCM_PCTL_MFD_OFFSET 16 | ||
| 160 | #define MXC_CCM_PCTL_MFD_MASK (0x3FF << 16) | ||
| 161 | #define MXC_CCM_PCTL_MFI_OFFSET 10 | ||
| 162 | #define MXC_CCM_PCTL_MFI_MASK (0xF << 10) | ||
| 163 | #define MXC_CCM_PCTL_MFN_OFFSET 0 | ||
| 164 | #define MXC_CCM_PCTL_MFN_MASK 0x3FF | ||
| 165 | |||
| 166 | #define MXC_CCM_CGR0_SD_MMC1_OFFSET 0 | ||
| 167 | #define MXC_CCM_CGR0_SD_MMC1_MASK (0x3 << 0) | ||
| 168 | #define MXC_CCM_CGR0_SD_MMC2_OFFSET 2 | ||
| 169 | #define MXC_CCM_CGR0_SD_MMC2_MASK (0x3 << 2) | ||
| 170 | #define MXC_CCM_CGR0_GPT_OFFSET 4 | ||
| 171 | #define MXC_CCM_CGR0_GPT_MASK (0x3 << 4) | ||
| 172 | #define MXC_CCM_CGR0_EPIT1_OFFSET 6 | ||
| 173 | #define MXC_CCM_CGR0_EPIT1_MASK (0x3 << 6) | ||
| 174 | #define MXC_CCM_CGR0_EPIT2_OFFSET 8 | ||
| 175 | #define MXC_CCM_CGR0_EPIT2_MASK (0x3 << 8) | ||
| 176 | #define MXC_CCM_CGR0_IIM_OFFSET 10 | ||
| 177 | #define MXC_CCM_CGR0_IIM_MASK (0x3 << 10) | ||
| 178 | #define MXC_CCM_CGR0_ATA_OFFSET 12 | ||
| 179 | #define MXC_CCM_CGR0_ATA_MASK (0x3 << 12) | ||
| 180 | #define MXC_CCM_CGR0_SDMA_OFFSET 14 | ||
| 181 | #define MXC_CCM_CGR0_SDMA_MASK (0x3 << 14) | ||
| 182 | #define MXC_CCM_CGR0_CSPI3_OFFSET 16 | ||
| 183 | #define MXC_CCM_CGR0_CSPI3_MASK (0x3 << 16) | ||
| 184 | #define MXC_CCM_CGR0_RNG_OFFSET 18 | ||
| 185 | #define MXC_CCM_CGR0_RNG_MASK (0x3 << 18) | ||
| 186 | #define MXC_CCM_CGR0_UART1_OFFSET 20 | ||
| 187 | #define MXC_CCM_CGR0_UART1_MASK (0x3 << 20) | ||
| 188 | #define MXC_CCM_CGR0_UART2_OFFSET 22 | ||
| 189 | #define MXC_CCM_CGR0_UART2_MASK (0x3 << 22) | ||
| 190 | #define MXC_CCM_CGR0_SSI1_OFFSET 24 | ||
| 191 | #define MXC_CCM_CGR0_SSI1_MASK (0x3 << 24) | ||
| 192 | #define MXC_CCM_CGR0_I2C1_OFFSET 26 | ||
| 193 | #define MXC_CCM_CGR0_I2C1_MASK (0x3 << 26) | ||
| 194 | #define MXC_CCM_CGR0_I2C2_OFFSET 28 | ||
| 195 | #define MXC_CCM_CGR0_I2C2_MASK (0x3 << 28) | ||
| 196 | #define MXC_CCM_CGR0_I2C3_OFFSET 30 | ||
| 197 | #define MXC_CCM_CGR0_I2C3_MASK (0x3 << 30) | ||
| 198 | |||
| 199 | #define MXC_CCM_CGR1_HANTRO_OFFSET 0 | ||
| 200 | #define MXC_CCM_CGR1_HANTRO_MASK (0x3 << 0) | ||
| 201 | #define MXC_CCM_CGR1_MEMSTICK1_OFFSET 2 | ||
| 202 | #define MXC_CCM_CGR1_MEMSTICK1_MASK (0x3 << 2) | ||
| 203 | #define MXC_CCM_CGR1_MEMSTICK2_OFFSET 4 | ||
| 204 | #define MXC_CCM_CGR1_MEMSTICK2_MASK (0x3 << 4) | ||
| 205 | #define MXC_CCM_CGR1_CSI_OFFSET 6 | ||
| 206 | #define MXC_CCM_CGR1_CSI_MASK (0x3 << 6) | ||
| 207 | #define MXC_CCM_CGR1_RTC_OFFSET 8 | ||
| 208 | #define MXC_CCM_CGR1_RTC_MASK (0x3 << 8) | ||
| 209 | #define MXC_CCM_CGR1_WDOG_OFFSET 10 | ||
| 210 | #define MXC_CCM_CGR1_WDOG_MASK (0x3 << 10) | ||
| 211 | #define MXC_CCM_CGR1_PWM_OFFSET 12 | ||
| 212 | #define MXC_CCM_CGR1_PWM_MASK (0x3 << 12) | ||
| 213 | #define MXC_CCM_CGR1_SIM_OFFSET 14 | ||
| 214 | #define MXC_CCM_CGR1_SIM_MASK (0x3 << 14) | ||
| 215 | #define MXC_CCM_CGR1_ECT_OFFSET 16 | ||
| 216 | #define MXC_CCM_CGR1_ECT_MASK (0x3 << 16) | ||
| 217 | #define MXC_CCM_CGR1_USBOTG_OFFSET 18 | ||
| 218 | #define MXC_CCM_CGR1_USBOTG_MASK (0x3 << 18) | ||
| 219 | #define MXC_CCM_CGR1_KPP_OFFSET 20 | ||
| 220 | #define MXC_CCM_CGR1_KPP_MASK (0x3 << 20) | ||
| 221 | #define MXC_CCM_CGR1_IPU_OFFSET 22 | ||
| 222 | #define MXC_CCM_CGR1_IPU_MASK (0x3 << 22) | ||
| 223 | #define MXC_CCM_CGR1_UART3_OFFSET 24 | ||
| 224 | #define MXC_CCM_CGR1_UART3_MASK (0x3 << 24) | ||
| 225 | #define MXC_CCM_CGR1_UART4_OFFSET 26 | ||
| 226 | #define MXC_CCM_CGR1_UART4_MASK (0x3 << 26) | ||
| 227 | #define MXC_CCM_CGR1_UART5_OFFSET 28 | ||
| 228 | #define MXC_CCM_CGR1_UART5_MASK (0x3 << 28) | ||
| 229 | #define MXC_CCM_CGR1_OWIRE_OFFSET 30 | ||
| 230 | #define MXC_CCM_CGR1_OWIRE_MASK (0x3 << 30) | ||
| 231 | |||
| 232 | #define MXC_CCM_CGR2_SSI2_OFFSET 0 | ||
| 233 | #define MXC_CCM_CGR2_SSI2_MASK (0x3 << 0) | ||
| 234 | #define MXC_CCM_CGR2_CSPI1_OFFSET 2 | ||
| 235 | #define MXC_CCM_CGR2_CSPI1_MASK (0x3 << 2) | ||
| 236 | #define MXC_CCM_CGR2_CSPI2_OFFSET 4 | ||
| 237 | #define MXC_CCM_CGR2_CSPI2_MASK (0x3 << 4) | ||
| 238 | #define MXC_CCM_CGR2_GACC_OFFSET 6 | ||
| 239 | #define MXC_CCM_CGR2_GACC_MASK (0x3 << 6) | ||
| 240 | #define MXC_CCM_CGR2_EMI_OFFSET 8 | ||
| 241 | #define MXC_CCM_CGR2_EMI_MASK (0x3 << 8) | ||
| 242 | #define MXC_CCM_CGR2_RTIC_OFFSET 10 | ||
| 243 | #define MXC_CCM_CGR2_RTIC_MASK (0x3 << 10) | ||
| 244 | #define MXC_CCM_CGR2_FIRI_OFFSET 12 | ||
| 245 | #define MXC_CCM_CGR2_FIRI_MASK (0x3 << 12) | ||
| 246 | #define MXC_CCM_CGR2_IPMUX1_OFFSET 14 | ||
| 247 | #define MXC_CCM_CGR2_IPMUX1_MASK (0x3 << 14) | ||
| 248 | #define MXC_CCM_CGR2_IPMUX2_OFFSET 16 | ||
| 249 | #define MXC_CCM_CGR2_IPMUX2_MASK (0x3 << 16) | ||
| 250 | |||
| 251 | /* These new CGR2 bits are added in MX32 */ | ||
| 252 | #define MXC_CCM_CGR2_APMSYSCLKSEL_OFFSET 18 | ||
| 253 | #define MXC_CCM_CGR2_APMSYSCLKSEL_MASK (0x3 << 18) | ||
| 254 | #define MXC_CCM_CGR2_APMSSICLKSEL_OFFSET 20 | ||
| 255 | #define MXC_CCM_CGR2_APMSSICLKSEL_MASK (0x3 << 20) | ||
| 256 | #define MXC_CCM_CGR2_APMPERCLKSEL_OFFSET 22 | ||
| 257 | #define MXC_CCM_CGR2_APMPERCLKSEL_MASK (0x3 << 22) | ||
| 258 | #define MXC_CCM_CGR2_MXCCLKENSEL_OFFSET 24 | ||
| 259 | #define MXC_CCM_CGR2_MXCCLKENSEL_MASK (0x1 << 24) | ||
| 260 | #define MXC_CCM_CGR2_CHIKCAMPEN_OFFSET 25 | ||
| 261 | #define MXC_CCM_CGR2_CHIKCAMPEN_MASK (0x1 << 25) | ||
| 262 | #define MXC_CCM_CGR2_OVRVPUBUSY_OFFSET 26 | ||
| 263 | #define MXC_CCM_CGR2_OVRVPUBUSY_MASK (0x1 << 26) | ||
| 264 | #define MXC_CCM_CGR2_APMENA_OFFSET 30 | ||
| 265 | #define MXC_CCM_CGR2_AOMENA_MASK (0x1 << 30) | ||
| 266 | |||
| 267 | /* | 114 | /* |
| 268 | * LTR0 register offsets | 115 | * LTR0 register offsets |
| 269 | */ | 116 | */ |
diff --git a/arch/arm/mach-mx3/devices.c b/arch/arm/mach-mx3/devices.c index f8428800f286..380be0c9b213 100644 --- a/arch/arm/mach-mx3/devices.c +++ b/arch/arm/mach-mx3/devices.c | |||
| @@ -25,6 +25,8 @@ | |||
| 25 | #include <mach/irqs.h> | 25 | #include <mach/irqs.h> |
| 26 | #include <mach/imx-uart.h> | 26 | #include <mach/imx-uart.h> |
| 27 | 27 | ||
| 28 | #include "devices.h" | ||
| 29 | |||
| 28 | static struct resource uart0[] = { | 30 | static struct resource uart0[] = { |
| 29 | { | 31 | { |
| 30 | .start = UART1_BASE_ADDR, | 32 | .start = UART1_BASE_ADDR, |
| @@ -82,6 +84,7 @@ struct platform_device mxc_uart_device2 = { | |||
| 82 | .num_resources = ARRAY_SIZE(uart2), | 84 | .num_resources = ARRAY_SIZE(uart2), |
| 83 | }; | 85 | }; |
| 84 | 86 | ||
| 87 | #ifdef CONFIG_ARCH_MX31 | ||
| 85 | static struct resource uart3[] = { | 88 | static struct resource uart3[] = { |
| 86 | { | 89 | { |
| 87 | .start = UART4_BASE_ADDR, | 90 | .start = UART4_BASE_ADDR, |
| @@ -119,6 +122,7 @@ struct platform_device mxc_uart_device4 = { | |||
| 119 | .resource = uart4, | 122 | .resource = uart4, |
| 120 | .num_resources = ARRAY_SIZE(uart4), | 123 | .num_resources = ARRAY_SIZE(uart4), |
| 121 | }; | 124 | }; |
| 125 | #endif /* CONFIG_ARCH_MX31 */ | ||
| 122 | 126 | ||
| 123 | /* GPIO port description */ | 127 | /* GPIO port description */ |
| 124 | static struct mxc_gpio_port imx_gpio_ports[] = { | 128 | static struct mxc_gpio_port imx_gpio_ports[] = { |
| @@ -164,8 +168,8 @@ struct platform_device mxc_w1_master_device = { | |||
| 164 | 168 | ||
| 165 | static struct resource mxc_nand_resources[] = { | 169 | static struct resource mxc_nand_resources[] = { |
| 166 | { | 170 | { |
| 167 | .start = NFC_BASE_ADDR, | 171 | .start = 0, /* runtime dependent */ |
| 168 | .end = NFC_BASE_ADDR + 0xfff, | 172 | .end = 0, |
| 169 | .flags = IORESOURCE_MEM | 173 | .flags = IORESOURCE_MEM |
| 170 | }, { | 174 | }, { |
| 171 | .start = MXC_INT_NANDFC, | 175 | .start = MXC_INT_NANDFC, |
| @@ -180,3 +184,188 @@ struct platform_device mxc_nand_device = { | |||
| 180 | .num_resources = ARRAY_SIZE(mxc_nand_resources), | 184 | .num_resources = ARRAY_SIZE(mxc_nand_resources), |
| 181 | .resource = mxc_nand_resources, | 185 | .resource = mxc_nand_resources, |
| 182 | }; | 186 | }; |
| 187 | |||
| 188 | static struct resource mxc_i2c0_resources[] = { | ||
| 189 | { | ||
| 190 | .start = I2C_BASE_ADDR, | ||
| 191 | .end = I2C_BASE_ADDR + SZ_4K - 1, | ||
| 192 | .flags = IORESOURCE_MEM, | ||
| 193 | }, | ||
| 194 | { | ||
| 195 | .start = MXC_INT_I2C, | ||
| 196 | .end = MXC_INT_I2C, | ||
| 197 | .flags = IORESOURCE_IRQ, | ||
| 198 | }, | ||
| 199 | }; | ||
| 200 | |||
| 201 | struct platform_device mxc_i2c_device0 = { | ||
| 202 | .name = "imx-i2c", | ||
| 203 | .id = 0, | ||
| 204 | .num_resources = ARRAY_SIZE(mxc_i2c0_resources), | ||
| 205 | .resource = mxc_i2c0_resources, | ||
| 206 | }; | ||
| 207 | |||
| 208 | static struct resource mxc_i2c1_resources[] = { | ||
| 209 | { | ||
| 210 | .start = I2C2_BASE_ADDR, | ||
| 211 | .end = I2C2_BASE_ADDR + SZ_4K - 1, | ||
| 212 | .flags = IORESOURCE_MEM, | ||
| 213 | }, | ||
| 214 | { | ||
| 215 | .start = MXC_INT_I2C2, | ||
| 216 | .end = MXC_INT_I2C2, | ||
| 217 | .flags = IORESOURCE_IRQ, | ||
| 218 | }, | ||
| 219 | }; | ||
| 220 | |||
| 221 | struct platform_device mxc_i2c_device1 = { | ||
| 222 | .name = "imx-i2c", | ||
| 223 | .id = 1, | ||
| 224 | .num_resources = ARRAY_SIZE(mxc_i2c1_resources), | ||
| 225 | .resource = mxc_i2c1_resources, | ||
| 226 | }; | ||
| 227 | |||
| 228 | static struct resource mxc_i2c2_resources[] = { | ||
| 229 | { | ||
| 230 | .start = I2C3_BASE_ADDR, | ||
| 231 | .end = I2C3_BASE_ADDR + SZ_4K - 1, | ||
| 232 | .flags = IORESOURCE_MEM, | ||
| 233 | }, | ||
| 234 | { | ||
| 235 | .start = MXC_INT_I2C3, | ||
| 236 | .end = MXC_INT_I2C3, | ||
| 237 | .flags = IORESOURCE_IRQ, | ||
| 238 | }, | ||
| 239 | }; | ||
| 240 | |||
| 241 | struct platform_device mxc_i2c_device2 = { | ||
| 242 | .name = "imx-i2c", | ||
| 243 | .id = 2, | ||
| 244 | .num_resources = ARRAY_SIZE(mxc_i2c2_resources), | ||
| 245 | .resource = mxc_i2c2_resources, | ||
| 246 | }; | ||
| 247 | |||
| 248 | #ifdef CONFIG_ARCH_MX31 | ||
| 249 | static struct resource mxcsdhc0_resources[] = { | ||
| 250 | { | ||
| 251 | .start = MMC_SDHC1_BASE_ADDR, | ||
| 252 | .end = MMC_SDHC1_BASE_ADDR + SZ_16K - 1, | ||
| 253 | .flags = IORESOURCE_MEM, | ||
| 254 | }, { | ||
| 255 | .start = MXC_INT_MMC_SDHC1, | ||
| 256 | .end = MXC_INT_MMC_SDHC1, | ||
| 257 | .flags = IORESOURCE_IRQ, | ||
| 258 | }, | ||
| 259 | }; | ||
| 260 | |||
| 261 | static struct resource mxcsdhc1_resources[] = { | ||
| 262 | { | ||
| 263 | .start = MMC_SDHC2_BASE_ADDR, | ||
| 264 | .end = MMC_SDHC2_BASE_ADDR + SZ_16K - 1, | ||
| 265 | .flags = IORESOURCE_MEM, | ||
| 266 | }, { | ||
| 267 | .start = MXC_INT_MMC_SDHC2, | ||
| 268 | .end = MXC_INT_MMC_SDHC2, | ||
| 269 | .flags = IORESOURCE_IRQ, | ||
| 270 | }, | ||
| 271 | }; | ||
| 272 | |||
| 273 | struct platform_device mxcsdhc_device0 = { | ||
| 274 | .name = "mxc-mmc", | ||
| 275 | .id = 0, | ||
| 276 | .num_resources = ARRAY_SIZE(mxcsdhc0_resources), | ||
| 277 | .resource = mxcsdhc0_resources, | ||
| 278 | }; | ||
| 279 | |||
| 280 | struct platform_device mxcsdhc_device1 = { | ||
| 281 | .name = "mxc-mmc", | ||
| 282 | .id = 1, | ||
| 283 | .num_resources = ARRAY_SIZE(mxcsdhc1_resources), | ||
| 284 | .resource = mxcsdhc1_resources, | ||
| 285 | }; | ||
| 286 | #endif /* CONFIG_ARCH_MX31 */ | ||
| 287 | |||
| 288 | /* i.MX31 Image Processing Unit */ | ||
| 289 | |||
| 290 | /* The resource order is important! */ | ||
| 291 | static struct resource mx3_ipu_rsrc[] = { | ||
| 292 | { | ||
| 293 | .start = IPU_CTRL_BASE_ADDR, | ||
| 294 | .end = IPU_CTRL_BASE_ADDR + 0x5F, | ||
| 295 | .flags = IORESOURCE_MEM, | ||
| 296 | }, { | ||
| 297 | .start = IPU_CTRL_BASE_ADDR + 0x88, | ||
| 298 | .end = IPU_CTRL_BASE_ADDR + 0xB3, | ||
| 299 | .flags = IORESOURCE_MEM, | ||
| 300 | }, { | ||
| 301 | .start = MXC_INT_IPU_SYN, | ||
| 302 | .end = MXC_INT_IPU_SYN, | ||
| 303 | .flags = IORESOURCE_IRQ, | ||
| 304 | }, { | ||
| 305 | .start = MXC_INT_IPU_ERR, | ||
| 306 | .end = MXC_INT_IPU_ERR, | ||
| 307 | .flags = IORESOURCE_IRQ, | ||
| 308 | }, | ||
| 309 | }; | ||
| 310 | |||
| 311 | struct platform_device mx3_ipu = { | ||
| 312 | .name = "ipu-core", | ||
| 313 | .id = -1, | ||
| 314 | .num_resources = ARRAY_SIZE(mx3_ipu_rsrc), | ||
| 315 | .resource = mx3_ipu_rsrc, | ||
| 316 | }; | ||
| 317 | |||
| 318 | static struct resource fb_resources[] = { | ||
| 319 | { | ||
| 320 | .start = IPU_CTRL_BASE_ADDR + 0xB4, | ||
| 321 | .end = IPU_CTRL_BASE_ADDR + 0x1BF, | ||
| 322 | .flags = IORESOURCE_MEM, | ||
| 323 | }, | ||
| 324 | }; | ||
| 325 | |||
| 326 | struct platform_device mx3_fb = { | ||
| 327 | .name = "mx3_sdc_fb", | ||
| 328 | .id = -1, | ||
| 329 | .num_resources = ARRAY_SIZE(fb_resources), | ||
| 330 | .resource = fb_resources, | ||
| 331 | .dev = { | ||
| 332 | .coherent_dma_mask = 0xffffffff, | ||
| 333 | }, | ||
| 334 | }; | ||
| 335 | |||
| 336 | #ifdef CONFIG_ARCH_MX35 | ||
| 337 | static struct resource mxc_fec_resources[] = { | ||
| 338 | { | ||
| 339 | .start = MXC_FEC_BASE_ADDR, | ||
| 340 | .end = MXC_FEC_BASE_ADDR + 0xfff, | ||
| 341 | .flags = IORESOURCE_MEM | ||
| 342 | }, { | ||
| 343 | .start = MXC_INT_FEC, | ||
| 344 | .end = MXC_INT_FEC, | ||
| 345 | .flags = IORESOURCE_IRQ | ||
| 346 | }, | ||
| 347 | }; | ||
| 348 | |||
| 349 | struct platform_device mxc_fec_device = { | ||
| 350 | .name = "fec", | ||
| 351 | .id = 0, | ||
| 352 | .num_resources = ARRAY_SIZE(mxc_fec_resources), | ||
| 353 | .resource = mxc_fec_resources, | ||
| 354 | }; | ||
| 355 | #endif | ||
| 356 | |||
| 357 | static int mx3_devices_init(void) | ||
| 358 | { | ||
| 359 | if (cpu_is_mx31()) { | ||
| 360 | mxc_nand_resources[0].start = MX31_NFC_BASE_ADDR; | ||
| 361 | mxc_nand_resources[0].end = MX31_NFC_BASE_ADDR + 0xfff; | ||
| 362 | } | ||
| 363 | if (cpu_is_mx35()) { | ||
| 364 | mxc_nand_resources[0].start = MX35_NFC_BASE_ADDR; | ||
| 365 | mxc_nand_resources[0].end = MX35_NFC_BASE_ADDR + 0xfff; | ||
| 366 | } | ||
| 367 | |||
| 368 | return 0; | ||
| 369 | } | ||
| 370 | |||
| 371 | subsys_initcall(mx3_devices_init); | ||
diff --git a/arch/arm/mach-mx3/devices.h b/arch/arm/mach-mx3/devices.h index 9949ef4e0694..88c04b296fab 100644 --- a/arch/arm/mach-mx3/devices.h +++ b/arch/arm/mach-mx3/devices.h | |||
| @@ -6,3 +6,11 @@ extern struct platform_device mxc_uart_device3; | |||
| 6 | extern struct platform_device mxc_uart_device4; | 6 | extern struct platform_device mxc_uart_device4; |
| 7 | extern struct platform_device mxc_w1_master_device; | 7 | extern struct platform_device mxc_w1_master_device; |
| 8 | extern struct platform_device mxc_nand_device; | 8 | extern struct platform_device mxc_nand_device; |
| 9 | extern struct platform_device mxc_i2c_device0; | ||
| 10 | extern struct platform_device mxc_i2c_device1; | ||
| 11 | extern struct platform_device mxc_i2c_device2; | ||
| 12 | extern struct platform_device mx3_ipu; | ||
| 13 | extern struct platform_device mx3_fb; | ||
| 14 | extern struct platform_device mxc_fec_device; | ||
| 15 | extern struct platform_device mxcsdhc_device0; | ||
| 16 | extern struct platform_device mxcsdhc_device1; | ||
diff --git a/arch/arm/mach-mx3/iomux.c b/arch/arm/mach-mx3/iomux.c index 7a5088b519a8..40ffc5a664d9 100644 --- a/arch/arm/mach-mx3/iomux.c +++ b/arch/arm/mach-mx3/iomux.c | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright 2004-2006 Freescale Semiconductor, Inc. All Rights Reserved. | 2 | * Copyright 2004-2006 Freescale Semiconductor, Inc. All Rights Reserved. |
| 3 | * Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de> | 3 | * Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de> |
| 4 | * Copyright (C) 2009 by Valentin Longchamp <valentin.longchamp@epfl.ch> | ||
| 4 | * | 5 | * |
| 5 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
| 6 | * modify it under the terms of the GNU General Public License | 7 | * modify it under the terms of the GNU General Public License |
| @@ -21,6 +22,7 @@ | |||
| 21 | #include <linux/spinlock.h> | 22 | #include <linux/spinlock.h> |
| 22 | #include <linux/io.h> | 23 | #include <linux/io.h> |
| 23 | #include <linux/gpio.h> | 24 | #include <linux/gpio.h> |
| 25 | #include <linux/kernel.h> | ||
| 24 | #include <mach/hardware.h> | 26 | #include <mach/hardware.h> |
| 25 | #include <mach/gpio.h> | 27 | #include <mach/gpio.h> |
| 26 | #include <mach/iomux-mx3.h> | 28 | #include <mach/iomux-mx3.h> |
| @@ -38,6 +40,8 @@ | |||
| 38 | static DEFINE_SPINLOCK(gpio_mux_lock); | 40 | static DEFINE_SPINLOCK(gpio_mux_lock); |
| 39 | 41 | ||
| 40 | #define IOMUX_REG_MASK (IOMUX_PADNUM_MASK & ~0x3) | 42 | #define IOMUX_REG_MASK (IOMUX_PADNUM_MASK & ~0x3) |
| 43 | |||
| 44 | unsigned long mxc_pin_alloc_map[NB_PORTS * 32 / BITS_PER_LONG]; | ||
| 41 | /* | 45 | /* |
| 42 | * set the mode for a IOMUX pin. | 46 | * set the mode for a IOMUX pin. |
| 43 | */ | 47 | */ |
| @@ -50,9 +54,6 @@ int mxc_iomux_mode(unsigned int pin_mode) | |||
| 50 | field = pin_mode & 0x3; | 54 | field = pin_mode & 0x3; |
| 51 | mode = (pin_mode & IOMUX_MODE_MASK) >> IOMUX_MODE_SHIFT; | 55 | mode = (pin_mode & IOMUX_MODE_MASK) >> IOMUX_MODE_SHIFT; |
| 52 | 56 | ||
| 53 | pr_debug("%s: reg offset = 0x%x field = %d mode = 0x%02x\n", | ||
| 54 | __func__, (pin_mode & IOMUX_REG_MASK), field, mode); | ||
| 55 | |||
| 56 | spin_lock(&gpio_mux_lock); | 57 | spin_lock(&gpio_mux_lock); |
| 57 | 58 | ||
| 58 | l = __raw_readl(reg); | 59 | l = __raw_readl(reg); |
| @@ -93,6 +94,86 @@ void mxc_iomux_set_pad(enum iomux_pins pin, u32 config) | |||
| 93 | EXPORT_SYMBOL(mxc_iomux_set_pad); | 94 | EXPORT_SYMBOL(mxc_iomux_set_pad); |
| 94 | 95 | ||
| 95 | /* | 96 | /* |
| 97 | * setups a single pin: | ||
| 98 | * - reserves the pin so that it is not claimed by another driver | ||
| 99 | * - setups the iomux according to the configuration | ||
| 100 | * - if the pin is configured as a GPIO, we claim it through kernel gpiolib | ||
| 101 | */ | ||
| 102 | int mxc_iomux_setup_pin(const unsigned int pin, const char *label) | ||
| 103 | { | ||
| 104 | unsigned pad = pin & IOMUX_PADNUM_MASK; | ||
| 105 | unsigned gpio; | ||
| 106 | |||
| 107 | if (pad >= (PIN_MAX + 1)) { | ||
| 108 | printk(KERN_ERR "mxc_iomux: Attempt to request nonexistant pin %u for \"%s\"\n", | ||
| 109 | pad, label ? label : "?"); | ||
| 110 | return -EINVAL; | ||
| 111 | } | ||
| 112 | |||
| 113 | if (test_and_set_bit(pad, mxc_pin_alloc_map)) { | ||
| 114 | printk(KERN_ERR "mxc_iomux: pin %u already used. Allocation for \"%s\" failed\n", | ||
| 115 | pad, label ? label : "?"); | ||
| 116 | return -EINVAL; | ||
| 117 | } | ||
| 118 | mxc_iomux_mode(pin); | ||
| 119 | |||
| 120 | /* if we have a gpio, we can allocate it */ | ||
| 121 | gpio = (pin & IOMUX_GPIONUM_MASK) >> IOMUX_GPIONUM_SHIFT; | ||
| 122 | if (gpio < (GPIO_PORT_MAX + 1) * 32) | ||
| 123 | if (gpio_request(gpio, label)) | ||
| 124 | return -EINVAL; | ||
| 125 | |||
| 126 | return 0; | ||
| 127 | } | ||
| 128 | EXPORT_SYMBOL(mxc_iomux_setup_pin); | ||
| 129 | |||
| 130 | int mxc_iomux_setup_multiple_pins(unsigned int *pin_list, unsigned count, | ||
| 131 | const char *label) | ||
| 132 | { | ||
| 133 | unsigned int *p = pin_list; | ||
| 134 | int i; | ||
| 135 | int ret = -EINVAL; | ||
| 136 | |||
| 137 | for (i = 0; i < count; i++) { | ||
| 138 | if (mxc_iomux_setup_pin(*p, label)) | ||
| 139 | goto setup_error; | ||
| 140 | p++; | ||
| 141 | } | ||
| 142 | return 0; | ||
| 143 | |||
| 144 | setup_error: | ||
| 145 | mxc_iomux_release_multiple_pins(pin_list, i); | ||
| 146 | return ret; | ||
| 147 | } | ||
| 148 | EXPORT_SYMBOL(mxc_iomux_setup_multiple_pins); | ||
| 149 | |||
| 150 | void mxc_iomux_release_pin(const unsigned int pin) | ||
| 151 | { | ||
| 152 | unsigned pad = pin & IOMUX_PADNUM_MASK; | ||
| 153 | unsigned gpio; | ||
| 154 | |||
| 155 | if (pad < (PIN_MAX + 1)) | ||
| 156 | clear_bit(pad, mxc_pin_alloc_map); | ||
| 157 | |||
| 158 | gpio = (pin & IOMUX_GPIONUM_MASK) >> IOMUX_GPIONUM_SHIFT; | ||
| 159 | if (gpio < (GPIO_PORT_MAX + 1) * 32) | ||
| 160 | gpio_free(gpio); | ||
| 161 | } | ||
| 162 | EXPORT_SYMBOL(mxc_iomux_release_pin); | ||
| 163 | |||
| 164 | void mxc_iomux_release_multiple_pins(unsigned int *pin_list, int count) | ||
| 165 | { | ||
| 166 | unsigned int *p = pin_list; | ||
| 167 | int i; | ||
| 168 | |||
| 169 | for (i = 0; i < count; i++) { | ||
| 170 | mxc_iomux_release_pin(*p); | ||
| 171 | p++; | ||
| 172 | } | ||
| 173 | } | ||
| 174 | EXPORT_SYMBOL(mxc_iomux_release_multiple_pins); | ||
| 175 | |||
| 176 | /* | ||
| 96 | * This function enables/disables the general purpose function for a particular | 177 | * This function enables/disables the general purpose function for a particular |
| 97 | * signal. | 178 | * signal. |
| 98 | */ | 179 | */ |
| @@ -111,4 +192,3 @@ void mxc_iomux_set_gpr(enum iomux_gp_func gp, bool en) | |||
| 111 | spin_unlock(&gpio_mux_lock); | 192 | spin_unlock(&gpio_mux_lock); |
| 112 | } | 193 | } |
| 113 | EXPORT_SYMBOL(mxc_iomux_set_gpr); | 194 | EXPORT_SYMBOL(mxc_iomux_set_gpr); |
| 114 | |||
diff --git a/arch/arm/mach-mx3/mm.c b/arch/arm/mach-mx3/mm.c index 0589b5cd33c7..9e1459cb4b74 100644 --- a/arch/arm/mach-mx3/mm.c +++ b/arch/arm/mach-mx3/mm.c | |||
| @@ -22,10 +22,14 @@ | |||
| 22 | 22 | ||
| 23 | #include <linux/mm.h> | 23 | #include <linux/mm.h> |
| 24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
| 25 | #include <mach/hardware.h> | 25 | #include <linux/err.h> |
| 26 | |||
| 26 | #include <asm/pgtable.h> | 27 | #include <asm/pgtable.h> |
| 27 | #include <asm/mach/map.h> | 28 | #include <asm/mach/map.h> |
| 29 | #include <asm/hardware/cache-l2x0.h> | ||
| 30 | |||
| 28 | #include <mach/common.h> | 31 | #include <mach/common.h> |
| 32 | #include <mach/hardware.h> | ||
| 29 | 33 | ||
| 30 | /*! | 34 | /*! |
| 31 | * @file mm.c | 35 | * @file mm.c |
| @@ -50,6 +54,16 @@ static struct map_desc mxc_io_desc[] __initdata = { | |||
| 50 | .pfn = __phys_to_pfn(AVIC_BASE_ADDR), | 54 | .pfn = __phys_to_pfn(AVIC_BASE_ADDR), |
| 51 | .length = AVIC_SIZE, | 55 | .length = AVIC_SIZE, |
| 52 | .type = MT_DEVICE_NONSHARED | 56 | .type = MT_DEVICE_NONSHARED |
| 57 | }, { | ||
| 58 | .virtual = AIPS1_BASE_ADDR_VIRT, | ||
| 59 | .pfn = __phys_to_pfn(AIPS1_BASE_ADDR), | ||
| 60 | .length = AIPS1_SIZE, | ||
| 61 | .type = MT_DEVICE_NONSHARED | ||
| 62 | }, { | ||
| 63 | .virtual = AIPS2_BASE_ADDR_VIRT, | ||
| 64 | .pfn = __phys_to_pfn(AIPS2_BASE_ADDR), | ||
| 65 | .length = AIPS2_SIZE, | ||
| 66 | .type = MT_DEVICE_NONSHARED | ||
| 53 | }, | 67 | }, |
| 54 | }; | 68 | }; |
| 55 | 69 | ||
| @@ -62,3 +76,24 @@ void __init mxc_map_io(void) | |||
| 62 | { | 76 | { |
| 63 | iotable_init(mxc_io_desc, ARRAY_SIZE(mxc_io_desc)); | 77 | iotable_init(mxc_io_desc, ARRAY_SIZE(mxc_io_desc)); |
| 64 | } | 78 | } |
| 79 | |||
| 80 | #ifdef CONFIG_CACHE_L2X0 | ||
| 81 | static int mxc_init_l2x0(void) | ||
| 82 | { | ||
| 83 | void __iomem *l2x0_base; | ||
| 84 | |||
| 85 | l2x0_base = ioremap(L2CC_BASE_ADDR, 4096); | ||
| 86 | if (IS_ERR(l2x0_base)) { | ||
| 87 | printk(KERN_ERR "remapping L2 cache area failed with %ld\n", | ||
| 88 | PTR_ERR(l2x0_base)); | ||
| 89 | return 0; | ||
| 90 | } | ||
| 91 | |||
| 92 | l2x0_init(l2x0_base, 0x00030024, 0x00000000); | ||
| 93 | |||
| 94 | return 0; | ||
| 95 | } | ||
| 96 | |||
| 97 | arch_initcall(mxc_init_l2x0); | ||
| 98 | #endif | ||
| 99 | |||
diff --git a/arch/arm/mach-mx3/mx31ads.c b/arch/arm/mach-mx3/mx31ads.c index f902a7c37c31..83e5e8e1276f 100644 --- a/arch/arm/mach-mx3/mx31ads.c +++ b/arch/arm/mach-mx3/mx31ads.c | |||
| @@ -22,6 +22,8 @@ | |||
| 22 | #include <linux/init.h> | 22 | #include <linux/init.h> |
| 23 | #include <linux/clk.h> | 23 | #include <linux/clk.h> |
| 24 | #include <linux/serial_8250.h> | 24 | #include <linux/serial_8250.h> |
| 25 | #include <linux/gpio.h> | ||
| 26 | #include <linux/i2c.h> | ||
| 25 | #include <linux/irq.h> | 27 | #include <linux/irq.h> |
| 26 | 28 | ||
| 27 | #include <mach/hardware.h> | 29 | #include <mach/hardware.h> |
| @@ -35,6 +37,12 @@ | |||
| 35 | #include <mach/imx-uart.h> | 37 | #include <mach/imx-uart.h> |
| 36 | #include <mach/iomux-mx3.h> | 38 | #include <mach/iomux-mx3.h> |
| 37 | 39 | ||
| 40 | #ifdef CONFIG_MACH_MX31ADS_WM1133_EV1 | ||
| 41 | #include <linux/mfd/wm8350/audio.h> | ||
| 42 | #include <linux/mfd/wm8350/core.h> | ||
| 43 | #include <linux/mfd/wm8350/pmic.h> | ||
| 44 | #endif | ||
| 45 | |||
| 38 | #include "devices.h" | 46 | #include "devices.h" |
| 39 | 47 | ||
| 40 | /*! | 48 | /*! |
| @@ -94,13 +102,16 @@ static struct imxuart_platform_data uart_pdata = { | |||
| 94 | .flags = IMXUART_HAVE_RTSCTS, | 102 | .flags = IMXUART_HAVE_RTSCTS, |
| 95 | }; | 103 | }; |
| 96 | 104 | ||
| 105 | static int uart_pins[] = { | ||
| 106 | MX31_PIN_CTS1__CTS1, | ||
| 107 | MX31_PIN_RTS1__RTS1, | ||
| 108 | MX31_PIN_TXD1__TXD1, | ||
| 109 | MX31_PIN_RXD1__RXD1 | ||
| 110 | }; | ||
| 111 | |||
| 97 | static inline void mxc_init_imx_uart(void) | 112 | static inline void mxc_init_imx_uart(void) |
| 98 | { | 113 | { |
| 99 | mxc_iomux_mode(MX31_PIN_CTS1__CTS1); | 114 | mxc_iomux_setup_multiple_pins(uart_pins, ARRAY_SIZE(uart_pins), "uart-0"); |
| 100 | mxc_iomux_mode(MX31_PIN_RTS1__RTS1); | ||
| 101 | mxc_iomux_mode(MX31_PIN_TXD1__TXD1); | ||
| 102 | mxc_iomux_mode(MX31_PIN_RXD1__RXD1); | ||
| 103 | |||
| 104 | mxc_register_device(&mxc_uart_device0, &uart_pdata); | 115 | mxc_register_device(&mxc_uart_device0, &uart_pdata); |
| 105 | } | 116 | } |
| 106 | #else /* !SERIAL_IMX */ | 117 | #else /* !SERIAL_IMX */ |
| @@ -176,7 +187,7 @@ static void __init mx31ads_init_expio(void) | |||
| 176 | /* | 187 | /* |
| 177 | * Configure INT line as GPIO input | 188 | * Configure INT line as GPIO input |
| 178 | */ | 189 | */ |
| 179 | mxc_iomux_mode(IOMUX_MODE(MX31_PIN_GPIO1_4, IOMUX_CONFIG_GPIO)); | 190 | mxc_iomux_setup_pin(IOMUX_MODE(MX31_PIN_GPIO1_4, IOMUX_CONFIG_GPIO), "expio"); |
| 180 | 191 | ||
| 181 | /* disable the interrupt and clear the status */ | 192 | /* disable the interrupt and clear the status */ |
| 182 | __raw_writew(0xFFFF, PBC_INTMASK_CLEAR_REG); | 193 | __raw_writew(0xFFFF, PBC_INTMASK_CLEAR_REG); |
| @@ -191,26 +202,301 @@ static void __init mx31ads_init_expio(void) | |||
| 191 | set_irq_chained_handler(EXPIO_PARENT_INT, mx31ads_expio_irq_handler); | 202 | set_irq_chained_handler(EXPIO_PARENT_INT, mx31ads_expio_irq_handler); |
| 192 | } | 203 | } |
| 193 | 204 | ||
| 205 | #ifdef CONFIG_MACH_MX31ADS_WM1133_EV1 | ||
| 206 | /* This section defines setup for the Wolfson Microelectronics | ||
| 207 | * 1133-EV1 PMU/audio board. When other PMU boards are supported the | ||
| 208 | * regulator definitions may be shared with them, but for now they can | ||
| 209 | * only be used with this board so would generate warnings about | ||
| 210 | * unused statics and some of the configuration is specific to this | ||
| 211 | * module. | ||
| 212 | */ | ||
| 213 | |||
| 214 | /* CPU */ | ||
| 215 | static struct regulator_consumer_supply sw1a_consumers[] = { | ||
| 216 | { | ||
| 217 | .supply = "cpu_vcc", | ||
| 218 | } | ||
| 219 | }; | ||
| 220 | |||
| 221 | static struct regulator_init_data sw1a_data = { | ||
| 222 | .constraints = { | ||
| 223 | .name = "SW1A", | ||
| 224 | .min_uV = 1275000, | ||
| 225 | .max_uV = 1600000, | ||
| 226 | .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | | ||
| 227 | REGULATOR_CHANGE_MODE, | ||
| 228 | .valid_modes_mask = REGULATOR_MODE_NORMAL | | ||
| 229 | REGULATOR_MODE_FAST, | ||
| 230 | .state_mem = { | ||
| 231 | .uV = 1400000, | ||
| 232 | .mode = REGULATOR_MODE_NORMAL, | ||
| 233 | .enabled = 1, | ||
| 234 | }, | ||
| 235 | .initial_state = PM_SUSPEND_MEM, | ||
| 236 | .always_on = 1, | ||
| 237 | .boot_on = 1, | ||
| 238 | }, | ||
| 239 | .num_consumer_supplies = ARRAY_SIZE(sw1a_consumers), | ||
| 240 | .consumer_supplies = sw1a_consumers, | ||
| 241 | }; | ||
| 242 | |||
| 243 | /* System IO - High */ | ||
| 244 | static struct regulator_init_data viohi_data = { | ||
| 245 | .constraints = { | ||
| 246 | .name = "VIOHO", | ||
| 247 | .min_uV = 2800000, | ||
| 248 | .max_uV = 2800000, | ||
| 249 | .state_mem = { | ||
| 250 | .uV = 2800000, | ||
| 251 | .mode = REGULATOR_MODE_NORMAL, | ||
| 252 | .enabled = 1, | ||
| 253 | }, | ||
| 254 | .initial_state = PM_SUSPEND_MEM, | ||
| 255 | .always_on = 1, | ||
| 256 | .boot_on = 1, | ||
| 257 | }, | ||
| 258 | }; | ||
| 259 | |||
| 260 | /* System IO - Low */ | ||
| 261 | static struct regulator_init_data violo_data = { | ||
| 262 | .constraints = { | ||
| 263 | .name = "VIOLO", | ||
| 264 | .min_uV = 1800000, | ||
| 265 | .max_uV = 1800000, | ||
| 266 | .state_mem = { | ||
| 267 | .uV = 1800000, | ||
| 268 | .mode = REGULATOR_MODE_NORMAL, | ||
| 269 | .enabled = 1, | ||
| 270 | }, | ||
| 271 | .initial_state = PM_SUSPEND_MEM, | ||
| 272 | .always_on = 1, | ||
| 273 | .boot_on = 1, | ||
| 274 | }, | ||
| 275 | }; | ||
| 276 | |||
| 277 | /* DDR RAM */ | ||
| 278 | static struct regulator_init_data sw2a_data = { | ||
| 279 | .constraints = { | ||
| 280 | .name = "SW2A", | ||
| 281 | .min_uV = 1800000, | ||
| 282 | .max_uV = 1800000, | ||
| 283 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 284 | .state_mem = { | ||
| 285 | .uV = 1800000, | ||
| 286 | .mode = REGULATOR_MODE_NORMAL, | ||
| 287 | .enabled = 1, | ||
| 288 | }, | ||
| 289 | .state_disk = { | ||
| 290 | .mode = REGULATOR_MODE_NORMAL, | ||
| 291 | .enabled = 0, | ||
| 292 | }, | ||
| 293 | .always_on = 1, | ||
| 294 | .boot_on = 1, | ||
| 295 | .initial_state = PM_SUSPEND_MEM, | ||
| 296 | }, | ||
| 297 | }; | ||
| 298 | |||
| 299 | static struct regulator_init_data ldo1_data = { | ||
| 300 | .constraints = { | ||
| 301 | .name = "VCAM/VMMC1/VMMC2", | ||
| 302 | .min_uV = 2800000, | ||
| 303 | .max_uV = 2800000, | ||
| 304 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 305 | .apply_uV = 1, | ||
| 306 | }, | ||
| 307 | }; | ||
| 308 | |||
| 309 | static struct regulator_consumer_supply ldo2_consumers[] = { | ||
| 310 | { | ||
| 311 | .supply = "AVDD", | ||
| 312 | }, | ||
| 313 | { | ||
| 314 | .supply = "HPVDD", | ||
| 315 | }, | ||
| 316 | }; | ||
| 317 | |||
| 318 | /* CODEC and SIM */ | ||
| 319 | static struct regulator_init_data ldo2_data = { | ||
| 320 | .constraints = { | ||
| 321 | .name = "VESIM/VSIM/AVDD", | ||
| 322 | .min_uV = 3300000, | ||
| 323 | .max_uV = 3300000, | ||
| 324 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 325 | .apply_uV = 1, | ||
| 326 | }, | ||
| 327 | .num_consumer_supplies = ARRAY_SIZE(ldo2_consumers), | ||
| 328 | .consumer_supplies = ldo2_consumers, | ||
| 329 | }; | ||
| 330 | |||
| 331 | /* General */ | ||
| 332 | static struct regulator_init_data vdig_data = { | ||
| 333 | .constraints = { | ||
| 334 | .name = "VDIG", | ||
| 335 | .min_uV = 1500000, | ||
| 336 | .max_uV = 1500000, | ||
| 337 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 338 | .apply_uV = 1, | ||
| 339 | .always_on = 1, | ||
| 340 | .boot_on = 1, | ||
| 341 | }, | ||
| 342 | }; | ||
| 343 | |||
| 344 | /* Tranceivers */ | ||
| 345 | static struct regulator_init_data ldo4_data = { | ||
| 346 | .constraints = { | ||
| 347 | .name = "VRF1/CVDD_2.775", | ||
| 348 | .min_uV = 2500000, | ||
| 349 | .max_uV = 2500000, | ||
| 350 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 351 | .apply_uV = 1, | ||
| 352 | .always_on = 1, | ||
| 353 | .boot_on = 1, | ||
| 354 | }, | ||
| 355 | }; | ||
| 356 | |||
| 357 | static struct wm8350_led_platform_data wm8350_led_data = { | ||
| 358 | .name = "wm8350:white", | ||
| 359 | .default_trigger = "heartbeat", | ||
| 360 | .max_uA = 27899, | ||
| 361 | }; | ||
| 362 | |||
| 363 | static struct wm8350_audio_platform_data imx32ads_wm8350_setup = { | ||
| 364 | .vmid_discharge_msecs = 1000, | ||
| 365 | .drain_msecs = 30, | ||
| 366 | .cap_discharge_msecs = 700, | ||
| 367 | .vmid_charge_msecs = 700, | ||
| 368 | .vmid_s_curve = WM8350_S_CURVE_SLOW, | ||
| 369 | .dis_out4 = WM8350_DISCHARGE_SLOW, | ||
| 370 | .dis_out3 = WM8350_DISCHARGE_SLOW, | ||
| 371 | .dis_out2 = WM8350_DISCHARGE_SLOW, | ||
| 372 | .dis_out1 = WM8350_DISCHARGE_SLOW, | ||
| 373 | .vroi_out4 = WM8350_TIE_OFF_500R, | ||
| 374 | .vroi_out3 = WM8350_TIE_OFF_500R, | ||
| 375 | .vroi_out2 = WM8350_TIE_OFF_500R, | ||
| 376 | .vroi_out1 = WM8350_TIE_OFF_500R, | ||
| 377 | .vroi_enable = 0, | ||
| 378 | .codec_current_on = WM8350_CODEC_ISEL_1_0, | ||
| 379 | .codec_current_standby = WM8350_CODEC_ISEL_0_5, | ||
| 380 | .codec_current_charge = WM8350_CODEC_ISEL_1_5, | ||
| 381 | }; | ||
| 382 | |||
| 383 | static int mx31_wm8350_init(struct wm8350 *wm8350) | ||
| 384 | { | ||
| 385 | int i; | ||
| 386 | |||
| 387 | wm8350_gpio_config(wm8350, 0, WM8350_GPIO_DIR_IN, | ||
| 388 | WM8350_GPIO0_PWR_ON_IN, WM8350_GPIO_ACTIVE_LOW, | ||
| 389 | WM8350_GPIO_PULL_UP, WM8350_GPIO_INVERT_OFF, | ||
| 390 | WM8350_GPIO_DEBOUNCE_ON); | ||
| 391 | |||
| 392 | wm8350_gpio_config(wm8350, 3, WM8350_GPIO_DIR_IN, | ||
| 393 | WM8350_GPIO3_PWR_OFF_IN, WM8350_GPIO_ACTIVE_HIGH, | ||
| 394 | WM8350_GPIO_PULL_DOWN, WM8350_GPIO_INVERT_OFF, | ||
| 395 | WM8350_GPIO_DEBOUNCE_ON); | ||
| 396 | |||
| 397 | wm8350_gpio_config(wm8350, 4, WM8350_GPIO_DIR_IN, | ||
| 398 | WM8350_GPIO4_MR_IN, WM8350_GPIO_ACTIVE_HIGH, | ||
| 399 | WM8350_GPIO_PULL_DOWN, WM8350_GPIO_INVERT_OFF, | ||
| 400 | WM8350_GPIO_DEBOUNCE_OFF); | ||
| 401 | |||
| 402 | wm8350_gpio_config(wm8350, 7, WM8350_GPIO_DIR_IN, | ||
| 403 | WM8350_GPIO7_HIBERNATE_IN, WM8350_GPIO_ACTIVE_HIGH, | ||
| 404 | WM8350_GPIO_PULL_DOWN, WM8350_GPIO_INVERT_OFF, | ||
| 405 | WM8350_GPIO_DEBOUNCE_OFF); | ||
| 406 | |||
| 407 | wm8350_gpio_config(wm8350, 6, WM8350_GPIO_DIR_OUT, | ||
| 408 | WM8350_GPIO6_SDOUT_OUT, WM8350_GPIO_ACTIVE_HIGH, | ||
| 409 | WM8350_GPIO_PULL_NONE, WM8350_GPIO_INVERT_OFF, | ||
| 410 | WM8350_GPIO_DEBOUNCE_OFF); | ||
| 411 | |||
| 412 | wm8350_gpio_config(wm8350, 8, WM8350_GPIO_DIR_OUT, | ||
| 413 | WM8350_GPIO8_VCC_FAULT_OUT, WM8350_GPIO_ACTIVE_LOW, | ||
| 414 | WM8350_GPIO_PULL_NONE, WM8350_GPIO_INVERT_OFF, | ||
| 415 | WM8350_GPIO_DEBOUNCE_OFF); | ||
| 416 | |||
| 417 | wm8350_gpio_config(wm8350, 9, WM8350_GPIO_DIR_OUT, | ||
| 418 | WM8350_GPIO9_BATT_FAULT_OUT, WM8350_GPIO_ACTIVE_LOW, | ||
| 419 | WM8350_GPIO_PULL_NONE, WM8350_GPIO_INVERT_OFF, | ||
| 420 | WM8350_GPIO_DEBOUNCE_OFF); | ||
| 421 | |||
| 422 | /* Fix up for our own supplies. */ | ||
| 423 | for (i = 0; i < ARRAY_SIZE(ldo2_consumers); i++) | ||
| 424 | ldo2_consumers[i].dev = wm8350->dev; | ||
| 425 | |||
| 426 | wm8350_register_regulator(wm8350, WM8350_DCDC_1, &sw1a_data); | ||
| 427 | wm8350_register_regulator(wm8350, WM8350_DCDC_3, &viohi_data); | ||
| 428 | wm8350_register_regulator(wm8350, WM8350_DCDC_4, &violo_data); | ||
| 429 | wm8350_register_regulator(wm8350, WM8350_DCDC_6, &sw2a_data); | ||
| 430 | wm8350_register_regulator(wm8350, WM8350_LDO_1, &ldo1_data); | ||
| 431 | wm8350_register_regulator(wm8350, WM8350_LDO_2, &ldo2_data); | ||
| 432 | wm8350_register_regulator(wm8350, WM8350_LDO_3, &vdig_data); | ||
| 433 | wm8350_register_regulator(wm8350, WM8350_LDO_4, &ldo4_data); | ||
| 434 | |||
| 435 | /* LEDs */ | ||
| 436 | wm8350_dcdc_set_slot(wm8350, WM8350_DCDC_5, 1, 1, | ||
| 437 | WM8350_DC5_ERRACT_SHUTDOWN_CONV); | ||
| 438 | wm8350_isink_set_flash(wm8350, WM8350_ISINK_A, | ||
| 439 | WM8350_ISINK_FLASH_DISABLE, | ||
| 440 | WM8350_ISINK_FLASH_TRIG_BIT, | ||
| 441 | WM8350_ISINK_FLASH_DUR_32MS, | ||
| 442 | WM8350_ISINK_FLASH_ON_INSTANT, | ||
| 443 | WM8350_ISINK_FLASH_OFF_INSTANT, | ||
| 444 | WM8350_ISINK_FLASH_MODE_EN); | ||
| 445 | wm8350_dcdc25_set_mode(wm8350, WM8350_DCDC_5, | ||
| 446 | WM8350_ISINK_MODE_BOOST, | ||
| 447 | WM8350_ISINK_ILIM_NORMAL, | ||
| 448 | WM8350_DC5_RMP_20V, | ||
| 449 | WM8350_DC5_FBSRC_ISINKA); | ||
| 450 | wm8350_register_led(wm8350, 0, WM8350_DCDC_5, WM8350_ISINK_A, | ||
| 451 | &wm8350_led_data); | ||
| 452 | |||
| 453 | wm8350->codec.platform_data = &imx32ads_wm8350_setup; | ||
| 454 | |||
| 455 | return 0; | ||
| 456 | } | ||
| 457 | |||
| 458 | static struct wm8350_platform_data __initdata mx31_wm8350_pdata = { | ||
| 459 | .init = mx31_wm8350_init, | ||
| 460 | }; | ||
| 461 | #endif | ||
| 462 | |||
| 463 | #if defined(CONFIG_I2C_IMX) || defined(CONFIG_I2C_IMX_MODULE) | ||
| 464 | static struct i2c_board_info __initdata mx31ads_i2c1_devices[] = { | ||
| 465 | #ifdef CONFIG_MACH_MX31ADS_WM1133_EV1 | ||
| 466 | { | ||
| 467 | I2C_BOARD_INFO("wm8350", 0x1a), | ||
| 468 | .platform_data = &mx31_wm8350_pdata, | ||
| 469 | .irq = IOMUX_TO_IRQ(MX31_PIN_GPIO1_3), | ||
| 470 | }, | ||
| 471 | #endif | ||
| 472 | }; | ||
| 473 | |||
| 474 | static void mxc_init_i2c(void) | ||
| 475 | { | ||
| 476 | i2c_register_board_info(1, mx31ads_i2c1_devices, | ||
| 477 | ARRAY_SIZE(mx31ads_i2c1_devices)); | ||
| 478 | |||
| 479 | mxc_iomux_mode(IOMUX_MODE(MX31_PIN_CSPI2_MOSI, IOMUX_CONFIG_ALT1)); | ||
| 480 | mxc_iomux_mode(IOMUX_MODE(MX31_PIN_CSPI2_MISO, IOMUX_CONFIG_ALT1)); | ||
| 481 | |||
| 482 | mxc_register_device(&mxc_i2c_device1, NULL); | ||
| 483 | } | ||
| 484 | #else | ||
| 485 | static void mxc_init_i2c(void) | ||
| 486 | { | ||
| 487 | } | ||
| 488 | #endif | ||
| 489 | |||
| 194 | /*! | 490 | /*! |
| 195 | * This structure defines static mappings for the i.MX31ADS board. | 491 | * This structure defines static mappings for the i.MX31ADS board. |
| 196 | */ | 492 | */ |
| 197 | static struct map_desc mx31ads_io_desc[] __initdata = { | 493 | static struct map_desc mx31ads_io_desc[] __initdata = { |
| 198 | { | 494 | { |
| 199 | .virtual = AIPS1_BASE_ADDR_VIRT, | ||
| 200 | .pfn = __phys_to_pfn(AIPS1_BASE_ADDR), | ||
| 201 | .length = AIPS1_SIZE, | ||
| 202 | .type = MT_DEVICE_NONSHARED | ||
| 203 | }, { | ||
| 204 | .virtual = SPBA0_BASE_ADDR_VIRT, | 495 | .virtual = SPBA0_BASE_ADDR_VIRT, |
| 205 | .pfn = __phys_to_pfn(SPBA0_BASE_ADDR), | 496 | .pfn = __phys_to_pfn(SPBA0_BASE_ADDR), |
| 206 | .length = SPBA0_SIZE, | 497 | .length = SPBA0_SIZE, |
| 207 | .type = MT_DEVICE_NONSHARED | 498 | .type = MT_DEVICE_NONSHARED |
| 208 | }, { | 499 | }, { |
| 209 | .virtual = AIPS2_BASE_ADDR_VIRT, | ||
| 210 | .pfn = __phys_to_pfn(AIPS2_BASE_ADDR), | ||
| 211 | .length = AIPS2_SIZE, | ||
| 212 | .type = MT_DEVICE_NONSHARED | ||
| 213 | }, { | ||
| 214 | .virtual = CS4_BASE_ADDR_VIRT, | 500 | .virtual = CS4_BASE_ADDR_VIRT, |
| 215 | .pfn = __phys_to_pfn(CS4_BASE_ADDR), | 501 | .pfn = __phys_to_pfn(CS4_BASE_ADDR), |
| 216 | .length = CS4_SIZE / 2, | 502 | .length = CS4_SIZE / 2, |
| @@ -221,13 +507,13 @@ static struct map_desc mx31ads_io_desc[] __initdata = { | |||
| 221 | /*! | 507 | /*! |
| 222 | * Set up static virtual mappings. | 508 | * Set up static virtual mappings. |
| 223 | */ | 509 | */ |
| 224 | void __init mx31ads_map_io(void) | 510 | static void __init mx31ads_map_io(void) |
| 225 | { | 511 | { |
| 226 | mxc_map_io(); | 512 | mxc_map_io(); |
| 227 | iotable_init(mx31ads_io_desc, ARRAY_SIZE(mx31ads_io_desc)); | 513 | iotable_init(mx31ads_io_desc, ARRAY_SIZE(mx31ads_io_desc)); |
| 228 | } | 514 | } |
| 229 | 515 | ||
| 230 | void __init mx31ads_init_irq(void) | 516 | static void __init mx31ads_init_irq(void) |
| 231 | { | 517 | { |
| 232 | mxc_init_irq(); | 518 | mxc_init_irq(); |
| 233 | mx31ads_init_expio(); | 519 | mx31ads_init_expio(); |
| @@ -240,15 +526,15 @@ static void __init mxc_board_init(void) | |||
| 240 | { | 526 | { |
| 241 | mxc_init_extuart(); | 527 | mxc_init_extuart(); |
| 242 | mxc_init_imx_uart(); | 528 | mxc_init_imx_uart(); |
| 529 | mxc_init_i2c(); | ||
| 243 | } | 530 | } |
| 244 | 531 | ||
| 245 | static void __init mx31ads_timer_init(void) | 532 | static void __init mx31ads_timer_init(void) |
| 246 | { | 533 | { |
| 247 | mxc_clocks_init(26000000); | 534 | mx31_clocks_init(26000000); |
| 248 | mxc_timer_init("ipg_clk.0"); | ||
| 249 | } | 535 | } |
| 250 | 536 | ||
| 251 | struct sys_timer mx31ads_timer = { | 537 | static struct sys_timer mx31ads_timer = { |
| 252 | .init = mx31ads_timer_init, | 538 | .init = mx31ads_timer_init, |
| 253 | }; | 539 | }; |
| 254 | 540 | ||
diff --git a/arch/arm/mach-mx3/mx31lite.c b/arch/arm/mach-mx3/mx31lite.c index c43440070143..894d98cd9941 100644 --- a/arch/arm/mach-mx3/mx31lite.c +++ b/arch/arm/mach-mx3/mx31lite.c | |||
| @@ -42,21 +42,11 @@ | |||
| 42 | */ | 42 | */ |
| 43 | static struct map_desc mx31lite_io_desc[] __initdata = { | 43 | static struct map_desc mx31lite_io_desc[] __initdata = { |
| 44 | { | 44 | { |
| 45 | .virtual = AIPS1_BASE_ADDR_VIRT, | ||
| 46 | .pfn = __phys_to_pfn(AIPS1_BASE_ADDR), | ||
| 47 | .length = AIPS1_SIZE, | ||
| 48 | .type = MT_DEVICE_NONSHARED | ||
| 49 | }, { | ||
| 50 | .virtual = SPBA0_BASE_ADDR_VIRT, | 45 | .virtual = SPBA0_BASE_ADDR_VIRT, |
| 51 | .pfn = __phys_to_pfn(SPBA0_BASE_ADDR), | 46 | .pfn = __phys_to_pfn(SPBA0_BASE_ADDR), |
| 52 | .length = SPBA0_SIZE, | 47 | .length = SPBA0_SIZE, |
| 53 | .type = MT_DEVICE_NONSHARED | 48 | .type = MT_DEVICE_NONSHARED |
| 54 | }, { | 49 | }, { |
| 55 | .virtual = AIPS2_BASE_ADDR_VIRT, | ||
| 56 | .pfn = __phys_to_pfn(AIPS2_BASE_ADDR), | ||
| 57 | .length = AIPS2_SIZE, | ||
| 58 | .type = MT_DEVICE_NONSHARED | ||
| 59 | }, { | ||
| 60 | .virtual = CS4_BASE_ADDR_VIRT, | 50 | .virtual = CS4_BASE_ADDR_VIRT, |
| 61 | .pfn = __phys_to_pfn(CS4_BASE_ADDR), | 51 | .pfn = __phys_to_pfn(CS4_BASE_ADDR), |
| 62 | .length = CS4_SIZE, | 52 | .length = CS4_SIZE, |
| @@ -82,8 +72,7 @@ static void __init mxc_board_init(void) | |||
| 82 | 72 | ||
| 83 | static void __init mx31lite_timer_init(void) | 73 | static void __init mx31lite_timer_init(void) |
| 84 | { | 74 | { |
| 85 | mxc_clocks_init(26000000); | 75 | mx31_clocks_init(26000000); |
| 86 | mxc_timer_init("ipg_clk.0"); | ||
| 87 | } | 76 | } |
| 88 | 77 | ||
| 89 | struct sys_timer mx31lite_timer = { | 78 | struct sys_timer mx31lite_timer = { |
diff --git a/arch/arm/mach-mx3/mx31moboard-devboard.c b/arch/arm/mach-mx3/mx31moboard-devboard.c new file mode 100644 index 000000000000..d080b4add79c --- /dev/null +++ b/arch/arm/mach-mx3/mx31moboard-devboard.c | |||
| @@ -0,0 +1,48 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <linux/types.h> | ||
| 20 | #include <linux/init.h> | ||
| 21 | |||
| 22 | #include <linux/platform_device.h> | ||
| 23 | |||
| 24 | #include <mach/hardware.h> | ||
| 25 | #include <mach/common.h> | ||
| 26 | #include <mach/imx-uart.h> | ||
| 27 | #include <mach/iomux-mx3.h> | ||
| 28 | |||
| 29 | #include "devices.h" | ||
| 30 | |||
| 31 | static struct imxuart_platform_data uart_pdata = { | ||
| 32 | .flags = IMXUART_HAVE_RTSCTS, | ||
| 33 | }; | ||
| 34 | |||
| 35 | static int mxc_uart1_pins[] = { | ||
| 36 | MX31_PIN_CTS2__CTS2, MX31_PIN_RTS2__RTS2, | ||
| 37 | MX31_PIN_TXD2__TXD2, MX31_PIN_RXD2__RXD2, | ||
| 38 | }; | ||
| 39 | |||
| 40 | /* | ||
| 41 | * system init for baseboard usage. Will be called by mx31moboard init. | ||
| 42 | */ | ||
| 43 | void __init mx31moboard_devboard_init(void) | ||
| 44 | { | ||
| 45 | printk(KERN_INFO "Initializing mx31devboard peripherals\n"); | ||
| 46 | mxc_iomux_setup_multiple_pins(mxc_uart1_pins, ARRAY_SIZE(mxc_uart1_pins), "uart1"); | ||
| 47 | mxc_register_device(&mxc_uart_device1, &uart_pdata); | ||
| 48 | } | ||
diff --git a/arch/arm/mach-mx3/mx31moboard-marxbot.c b/arch/arm/mach-mx3/mx31moboard-marxbot.c new file mode 100644 index 000000000000..9ef9566823fb --- /dev/null +++ b/arch/arm/mach-mx3/mx31moboard-marxbot.c | |||
| @@ -0,0 +1,37 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <linux/types.h> | ||
| 20 | #include <linux/init.h> | ||
| 21 | |||
| 22 | #include <linux/platform_device.h> | ||
| 23 | |||
| 24 | #include <mach/hardware.h> | ||
| 25 | #include <mach/common.h> | ||
| 26 | #include <mach/imx-uart.h> | ||
| 27 | #include <mach/iomux-mx3.h> | ||
| 28 | |||
| 29 | #include "devices.h" | ||
| 30 | |||
| 31 | /* | ||
| 32 | * system init for baseboard usage. Will be called by mx31moboard init. | ||
| 33 | */ | ||
| 34 | void __init mx31moboard_marxbot_init(void) | ||
| 35 | { | ||
| 36 | printk(KERN_INFO "Initializing mx31marxbot peripherals\n"); | ||
| 37 | } | ||
diff --git a/arch/arm/mach-mx3/mx31moboard.c b/arch/arm/mach-mx3/mx31moboard.c index c29098af7394..34c2a1b99d4f 100644 --- a/arch/arm/mach-mx3/mx31moboard.c +++ b/arch/arm/mach-mx3/mx31moboard.c | |||
| @@ -32,6 +32,7 @@ | |||
| 32 | #include <mach/common.h> | 32 | #include <mach/common.h> |
| 33 | #include <mach/imx-uart.h> | 33 | #include <mach/imx-uart.h> |
| 34 | #include <mach/iomux-mx3.h> | 34 | #include <mach/iomux-mx3.h> |
| 35 | #include <mach/board-mx31moboard.h> | ||
| 35 | 36 | ||
| 36 | #include "devices.h" | 37 | #include "devices.h" |
| 37 | 38 | ||
| @@ -63,6 +64,18 @@ static struct platform_device *devices[] __initdata = { | |||
| 63 | &mx31moboard_flash, | 64 | &mx31moboard_flash, |
| 64 | }; | 65 | }; |
| 65 | 66 | ||
| 67 | static int mxc_uart0_pins[] = { | ||
| 68 | MX31_PIN_CTS1__CTS1, MX31_PIN_RTS1__RTS1, | ||
| 69 | MX31_PIN_TXD1__TXD1, MX31_PIN_RXD1__RXD1, | ||
| 70 | }; | ||
| 71 | static int mxc_uart4_pins[] = { | ||
| 72 | MX31_PIN_PC_RST__CTS5, MX31_PIN_PC_VS2__RTS5, | ||
| 73 | MX31_PIN_PC_BVD2__TXD5, MX31_PIN_PC_BVD1__RXD5, | ||
| 74 | }; | ||
| 75 | |||
| 76 | static int mx31moboard_baseboard; | ||
| 77 | core_param(mx31moboard_baseboard, mx31moboard_baseboard, int, 0444); | ||
| 78 | |||
| 66 | /* | 79 | /* |
| 67 | * Board specific initialization. | 80 | * Board specific initialization. |
| 68 | */ | 81 | */ |
| @@ -70,58 +83,29 @@ static void __init mxc_board_init(void) | |||
| 70 | { | 83 | { |
| 71 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 84 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
| 72 | 85 | ||
| 73 | mxc_iomux_mode(MX31_PIN_CTS1__CTS1); | 86 | mxc_iomux_setup_multiple_pins(mxc_uart0_pins, ARRAY_SIZE(mxc_uart0_pins), "uart0"); |
| 74 | mxc_iomux_mode(MX31_PIN_RTS1__RTS1); | ||
| 75 | mxc_iomux_mode(MX31_PIN_TXD1__TXD1); | ||
| 76 | mxc_iomux_mode(MX31_PIN_RXD1__RXD1); | ||
| 77 | |||
| 78 | mxc_register_device(&mxc_uart_device0, &uart_pdata); | 87 | mxc_register_device(&mxc_uart_device0, &uart_pdata); |
| 79 | 88 | ||
| 80 | mxc_iomux_mode(MX31_PIN_CTS2__CTS2); | 89 | mxc_iomux_setup_multiple_pins(mxc_uart4_pins, ARRAY_SIZE(mxc_uart4_pins), "uart4"); |
| 81 | mxc_iomux_mode(MX31_PIN_RTS2__RTS2); | ||
| 82 | mxc_iomux_mode(MX31_PIN_TXD2__TXD2); | ||
| 83 | mxc_iomux_mode(MX31_PIN_RXD2__RXD2); | ||
| 84 | |||
| 85 | mxc_register_device(&mxc_uart_device1, &uart_pdata); | ||
| 86 | |||
| 87 | mxc_iomux_mode(MX31_PIN_PC_RST__CTS5); | ||
| 88 | mxc_iomux_mode(MX31_PIN_PC_VS2__RTS5); | ||
| 89 | mxc_iomux_mode(MX31_PIN_PC_BVD2__TXD5); | ||
| 90 | mxc_iomux_mode(MX31_PIN_PC_BVD1__RXD5); | ||
| 91 | |||
| 92 | mxc_register_device(&mxc_uart_device4, &uart_pdata); | 90 | mxc_register_device(&mxc_uart_device4, &uart_pdata); |
| 93 | } | ||
| 94 | 91 | ||
| 95 | /* | 92 | switch (mx31moboard_baseboard) { |
| 96 | * This structure defines static mappings for the mx31moboard. | 93 | case MX31NOBOARD: |
| 97 | */ | 94 | break; |
| 98 | static struct map_desc mx31moboard_io_desc[] __initdata = { | 95 | case MX31DEVBOARD: |
| 99 | { | 96 | mx31moboard_devboard_init(); |
| 100 | .virtual = AIPS1_BASE_ADDR_VIRT, | 97 | break; |
| 101 | .pfn = __phys_to_pfn(AIPS1_BASE_ADDR), | 98 | case MX31MARXBOT: |
| 102 | .length = AIPS1_SIZE, | 99 | mx31moboard_marxbot_init(); |
| 103 | .type = MT_DEVICE_NONSHARED | 100 | break; |
| 104 | }, { | 101 | default: |
| 105 | .virtual = AIPS2_BASE_ADDR_VIRT, | 102 | printk(KERN_ERR "Illegal mx31moboard_baseboard type %d\n", mx31moboard_baseboard); |
| 106 | .pfn = __phys_to_pfn(AIPS2_BASE_ADDR), | 103 | } |
| 107 | .length = AIPS2_SIZE, | ||
| 108 | .type = MT_DEVICE_NONSHARED | ||
| 109 | }, | ||
| 110 | }; | ||
| 111 | |||
| 112 | /* | ||
| 113 | * Set up static virtual mappings. | ||
| 114 | */ | ||
| 115 | void __init mx31moboard_map_io(void) | ||
| 116 | { | ||
| 117 | mxc_map_io(); | ||
| 118 | iotable_init(mx31moboard_io_desc, ARRAY_SIZE(mx31moboard_io_desc)); | ||
| 119 | } | 104 | } |
| 120 | 105 | ||
| 121 | static void __init mx31moboard_timer_init(void) | 106 | static void __init mx31moboard_timer_init(void) |
| 122 | { | 107 | { |
| 123 | mxc_clocks_init(26000000); | 108 | mx31_clocks_init(26000000); |
| 124 | mxc_timer_init("ipg_clk.0"); | ||
| 125 | } | 109 | } |
| 126 | 110 | ||
| 127 | struct sys_timer mx31moboard_timer = { | 111 | struct sys_timer mx31moboard_timer = { |
| @@ -133,7 +117,7 @@ MACHINE_START(MX31MOBOARD, "EPFL Mobots mx31moboard") | |||
| 133 | .phys_io = AIPS1_BASE_ADDR, | 117 | .phys_io = AIPS1_BASE_ADDR, |
| 134 | .io_pg_offst = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc, | 118 | .io_pg_offst = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc, |
| 135 | .boot_params = PHYS_OFFSET + 0x100, | 119 | .boot_params = PHYS_OFFSET + 0x100, |
| 136 | .map_io = mx31moboard_map_io, | 120 | .map_io = mxc_map_io, |
| 137 | .init_irq = mxc_init_irq, | 121 | .init_irq = mxc_init_irq, |
| 138 | .init_machine = mxc_board_init, | 122 | .init_machine = mxc_board_init, |
| 139 | .timer = &mx31moboard_timer, | 123 | .timer = &mx31moboard_timer, |
diff --git a/arch/arm/mach-mx3/mx31pdk.c b/arch/arm/mach-mx3/mx31pdk.c index d464d068a4a6..bc63f1785691 100644 --- a/arch/arm/mach-mx3/mx31pdk.c +++ b/arch/arm/mach-mx3/mx31pdk.c | |||
| @@ -45,40 +45,17 @@ static struct imxuart_platform_data uart_pdata = { | |||
| 45 | .flags = IMXUART_HAVE_RTSCTS, | 45 | .flags = IMXUART_HAVE_RTSCTS, |
| 46 | }; | 46 | }; |
| 47 | 47 | ||
| 48 | static inline void mxc_init_imx_uart(void) | 48 | static int uart_pins[] = { |
| 49 | { | 49 | MX31_PIN_CTS1__CTS1, |
| 50 | mxc_iomux_mode(MX31_PIN_CTS1__CTS1); | 50 | MX31_PIN_RTS1__RTS1, |
| 51 | mxc_iomux_mode(MX31_PIN_RTS1__RTS1); | 51 | MX31_PIN_TXD1__TXD1, |
| 52 | mxc_iomux_mode(MX31_PIN_TXD1__TXD1); | 52 | MX31_PIN_RXD1__RXD1 |
| 53 | mxc_iomux_mode(MX31_PIN_RXD1__RXD1); | ||
| 54 | |||
| 55 | mxc_register_device(&mxc_uart_device0, &uart_pdata); | ||
| 56 | } | ||
| 57 | |||
| 58 | /*! | ||
| 59 | * This structure defines static mappings for the i.MX31PDK board. | ||
| 60 | */ | ||
| 61 | static struct map_desc mx31pdk_io_desc[] __initdata = { | ||
| 62 | { | ||
| 63 | .virtual = AIPS1_BASE_ADDR_VIRT, | ||
| 64 | .pfn = __phys_to_pfn(AIPS1_BASE_ADDR), | ||
| 65 | .length = AIPS1_SIZE, | ||
| 66 | .type = MT_DEVICE_NONSHARED | ||
| 67 | }, { | ||
| 68 | .virtual = AIPS2_BASE_ADDR_VIRT, | ||
| 69 | .pfn = __phys_to_pfn(AIPS2_BASE_ADDR), | ||
| 70 | .length = AIPS2_SIZE, | ||
| 71 | .type = MT_DEVICE_NONSHARED | ||
| 72 | }, | ||
| 73 | }; | 53 | }; |
| 74 | 54 | ||
| 75 | /*! | 55 | static inline void mxc_init_imx_uart(void) |
| 76 | * Set up static virtual mappings. | ||
| 77 | */ | ||
| 78 | static void __init mx31pdk_map_io(void) | ||
| 79 | { | 56 | { |
| 80 | mxc_map_io(); | 57 | mxc_iomux_setup_multiple_pins(uart_pins, ARRAY_SIZE(uart_pins), "uart-0"); |
| 81 | iotable_init(mx31pdk_io_desc, ARRAY_SIZE(mx31pdk_io_desc)); | 58 | mxc_register_device(&mxc_uart_device0, &uart_pdata); |
| 82 | } | 59 | } |
| 83 | 60 | ||
| 84 | /*! | 61 | /*! |
| @@ -91,8 +68,7 @@ static void __init mxc_board_init(void) | |||
| 91 | 68 | ||
| 92 | static void __init mx31pdk_timer_init(void) | 69 | static void __init mx31pdk_timer_init(void) |
| 93 | { | 70 | { |
| 94 | mxc_clocks_init(26000000); | 71 | mx31_clocks_init(26000000); |
| 95 | mxc_timer_init("ipg_clk.0"); | ||
| 96 | } | 72 | } |
| 97 | 73 | ||
| 98 | static struct sys_timer mx31pdk_timer = { | 74 | static struct sys_timer mx31pdk_timer = { |
| @@ -108,7 +84,7 @@ MACHINE_START(MX31_3DS, "Freescale MX31PDK (3DS)") | |||
| 108 | .phys_io = AIPS1_BASE_ADDR, | 84 | .phys_io = AIPS1_BASE_ADDR, |
| 109 | .io_pg_offst = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc, | 85 | .io_pg_offst = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc, |
| 110 | .boot_params = PHYS_OFFSET + 0x100, | 86 | .boot_params = PHYS_OFFSET + 0x100, |
| 111 | .map_io = mx31pdk_map_io, | 87 | .map_io = mxc_map_io, |
| 112 | .init_irq = mxc_init_irq, | 88 | .init_irq = mxc_init_irq, |
| 113 | .init_machine = mxc_board_init, | 89 | .init_machine = mxc_board_init, |
| 114 | .timer = &mx31pdk_timer, | 90 | .timer = &mx31pdk_timer, |
diff --git a/arch/arm/mach-mx3/pcm037.c b/arch/arm/mach-mx3/pcm037.c index 8cea82587222..5fce022114de 100644 --- a/arch/arm/mach-mx3/pcm037.c +++ b/arch/arm/mach-mx3/pcm037.c | |||
| @@ -26,6 +26,8 @@ | |||
| 26 | #include <linux/gpio.h> | 26 | #include <linux/gpio.h> |
| 27 | #include <linux/smc911x.h> | 27 | #include <linux/smc911x.h> |
| 28 | #include <linux/interrupt.h> | 28 | #include <linux/interrupt.h> |
| 29 | #include <linux/i2c.h> | ||
| 30 | #include <linux/i2c/at24.h> | ||
| 29 | 31 | ||
| 30 | #include <mach/hardware.h> | 32 | #include <mach/hardware.h> |
| 31 | #include <asm/mach-types.h> | 33 | #include <asm/mach-types.h> |
| @@ -37,6 +39,10 @@ | |||
| 37 | #include <mach/iomux-mx3.h> | 39 | #include <mach/iomux-mx3.h> |
| 38 | #include <mach/board-pcm037.h> | 40 | #include <mach/board-pcm037.h> |
| 39 | #include <mach/mxc_nand.h> | 41 | #include <mach/mxc_nand.h> |
| 42 | #include <mach/mmc.h> | ||
| 43 | #ifdef CONFIG_I2C_IMX | ||
| 44 | #include <mach/i2c.h> | ||
| 45 | #endif | ||
| 40 | 46 | ||
| 41 | #include "devices.h" | 47 | #include "devices.h" |
| 42 | 48 | ||
| @@ -117,12 +123,90 @@ static struct mxc_nand_platform_data pcm037_nand_board_info = { | |||
| 117 | .hw_ecc = 1, | 123 | .hw_ecc = 1, |
| 118 | }; | 124 | }; |
| 119 | 125 | ||
| 126 | #ifdef CONFIG_I2C_IMX | ||
| 127 | static int i2c_1_pins[] = { | ||
| 128 | MX31_PIN_CSPI2_MOSI__SCL, | ||
| 129 | MX31_PIN_CSPI2_MISO__SDA, | ||
| 130 | }; | ||
| 131 | |||
| 132 | static int pcm037_i2c_1_init(struct device *dev) | ||
| 133 | { | ||
| 134 | return mxc_iomux_setup_multiple_pins(i2c_1_pins, ARRAY_SIZE(i2c_1_pins), | ||
| 135 | "i2c-1"); | ||
| 136 | } | ||
| 137 | |||
| 138 | static void pcm037_i2c_1_exit(struct device *dev) | ||
| 139 | { | ||
| 140 | mxc_iomux_release_multiple_pins(i2c_1_pins, ARRAY_SIZE(i2c_1_pins)); | ||
| 141 | } | ||
| 142 | |||
| 143 | static struct imxi2c_platform_data pcm037_i2c_1_data = { | ||
| 144 | .bitrate = 100000, | ||
| 145 | .init = pcm037_i2c_1_init, | ||
| 146 | .exit = pcm037_i2c_1_exit, | ||
| 147 | }; | ||
| 148 | |||
| 149 | static struct at24_platform_data board_eeprom = { | ||
| 150 | .byte_len = 4096, | ||
| 151 | .page_size = 32, | ||
| 152 | .flags = AT24_FLAG_ADDR16, | ||
| 153 | }; | ||
| 154 | |||
| 155 | static struct i2c_board_info pcm037_i2c_devices[] = { | ||
| 156 | { | ||
| 157 | I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */ | ||
| 158 | .platform_data = &board_eeprom, | ||
| 159 | }, { | ||
| 160 | I2C_BOARD_INFO("rtc-pcf8563", 0x51), | ||
| 161 | .type = "pcf8563", | ||
| 162 | } | ||
| 163 | }; | ||
| 164 | #endif | ||
| 165 | |||
| 166 | static int sdhc1_pins[] = { | ||
| 167 | MX31_PIN_SD1_DATA3__SD1_DATA3, | ||
| 168 | MX31_PIN_SD1_DATA2__SD1_DATA2, | ||
| 169 | MX31_PIN_SD1_DATA1__SD1_DATA1, | ||
| 170 | MX31_PIN_SD1_DATA0__SD1_DATA0, | ||
| 171 | MX31_PIN_SD1_CLK__SD1_CLK, | ||
| 172 | MX31_PIN_SD1_CMD__SD1_CMD, | ||
| 173 | }; | ||
| 174 | |||
| 175 | static int pcm970_sdhc1_init(struct device *dev, irq_handler_t h, void *data) | ||
| 176 | { | ||
| 177 | return mxc_iomux_setup_multiple_pins(sdhc1_pins, ARRAY_SIZE(sdhc1_pins), | ||
| 178 | "sdhc-1"); | ||
| 179 | } | ||
| 180 | |||
| 181 | static void pcm970_sdhc1_exit(struct device *dev, void *data) | ||
| 182 | { | ||
| 183 | mxc_iomux_release_multiple_pins(sdhc1_pins, ARRAY_SIZE(sdhc1_pins)); | ||
| 184 | } | ||
| 185 | |||
| 186 | /* No card and rw detection at the moment */ | ||
| 187 | static struct imxmmc_platform_data sdhc_pdata = { | ||
| 188 | .init = pcm970_sdhc1_init, | ||
| 189 | .exit = pcm970_sdhc1_exit, | ||
| 190 | }; | ||
| 191 | |||
| 120 | static struct platform_device *devices[] __initdata = { | 192 | static struct platform_device *devices[] __initdata = { |
| 121 | &pcm037_flash, | 193 | &pcm037_flash, |
| 122 | &pcm037_eth, | 194 | &pcm037_eth, |
| 123 | &pcm037_sram_device, | 195 | &pcm037_sram_device, |
| 124 | }; | 196 | }; |
| 125 | 197 | ||
| 198 | static int uart0_pins[] = { | ||
| 199 | MX31_PIN_CTS1__CTS1, | ||
| 200 | MX31_PIN_RTS1__RTS1, | ||
| 201 | MX31_PIN_TXD1__TXD1, | ||
| 202 | MX31_PIN_RXD1__RXD1 | ||
| 203 | }; | ||
| 204 | |||
| 205 | static int uart2_pins[] = { | ||
| 206 | MX31_PIN_CSPI3_MOSI__RXD3, | ||
| 207 | MX31_PIN_CSPI3_MISO__TXD3 | ||
| 208 | }; | ||
| 209 | |||
| 126 | /* | 210 | /* |
| 127 | * Board specific initialization. | 211 | * Board specific initialization. |
| 128 | */ | 212 | */ |
| @@ -130,59 +214,33 @@ static void __init mxc_board_init(void) | |||
| 130 | { | 214 | { |
| 131 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 215 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
| 132 | 216 | ||
| 133 | mxc_iomux_mode(MX31_PIN_CTS1__CTS1); | 217 | mxc_iomux_setup_multiple_pins(uart0_pins, ARRAY_SIZE(uart0_pins), "uart-0"); |
| 134 | mxc_iomux_mode(MX31_PIN_RTS1__RTS1); | ||
| 135 | mxc_iomux_mode(MX31_PIN_TXD1__TXD1); | ||
| 136 | mxc_iomux_mode(MX31_PIN_RXD1__RXD1); | ||
| 137 | |||
| 138 | mxc_register_device(&mxc_uart_device0, &uart_pdata); | 218 | mxc_register_device(&mxc_uart_device0, &uart_pdata); |
| 139 | 219 | ||
| 140 | mxc_iomux_mode(MX31_PIN_CSPI3_MOSI__RXD3); | 220 | mxc_iomux_setup_multiple_pins(uart2_pins, ARRAY_SIZE(uart2_pins), "uart-2"); |
| 141 | mxc_iomux_mode(MX31_PIN_CSPI3_MISO__TXD3); | ||
| 142 | |||
| 143 | mxc_register_device(&mxc_uart_device2, &uart_pdata); | 221 | mxc_register_device(&mxc_uart_device2, &uart_pdata); |
| 144 | 222 | ||
| 145 | mxc_iomux_mode(MX31_PIN_BATT_LINE__OWIRE); | 223 | mxc_iomux_setup_pin(MX31_PIN_BATT_LINE__OWIRE, "batt-0wire"); |
| 146 | mxc_register_device(&mxc_w1_master_device, NULL); | 224 | mxc_register_device(&mxc_w1_master_device, NULL); |
| 147 | 225 | ||
| 148 | /* SMSC9215 IRQ pin */ | 226 | /* SMSC9215 IRQ pin */ |
| 149 | mxc_iomux_mode(IOMUX_MODE(MX31_PIN_GPIO3_1, IOMUX_CONFIG_GPIO)); | 227 | if (!mxc_iomux_setup_pin(IOMUX_MODE(MX31_PIN_GPIO3_1, IOMUX_CONFIG_GPIO), |
| 150 | if (!gpio_request(MX31_PIN_GPIO3_1, "pcm037-eth")) | 228 | "pcm037-eth")) |
| 151 | gpio_direction_input(MX31_PIN_GPIO3_1); | 229 | gpio_direction_input(MX31_PIN_GPIO3_1); |
| 152 | 230 | ||
| 153 | mxc_register_device(&mxc_nand_device, &pcm037_nand_board_info); | 231 | #ifdef CONFIG_I2C_IMX |
| 154 | } | 232 | i2c_register_board_info(1, pcm037_i2c_devices, |
| 233 | ARRAY_SIZE(pcm037_i2c_devices)); | ||
| 155 | 234 | ||
| 156 | /* | 235 | mxc_register_device(&mxc_i2c_device1, &pcm037_i2c_1_data); |
| 157 | * This structure defines static mappings for the pcm037 board. | 236 | #endif |
| 158 | */ | 237 | mxc_register_device(&mxc_nand_device, &pcm037_nand_board_info); |
| 159 | static struct map_desc pcm037_io_desc[] __initdata = { | 238 | mxc_register_device(&mxcsdhc_device0, &sdhc_pdata); |
| 160 | { | ||
| 161 | .virtual = AIPS1_BASE_ADDR_VIRT, | ||
| 162 | .pfn = __phys_to_pfn(AIPS1_BASE_ADDR), | ||
| 163 | .length = AIPS1_SIZE, | ||
| 164 | .type = MT_DEVICE_NONSHARED | ||
| 165 | }, { | ||
| 166 | .virtual = AIPS2_BASE_ADDR_VIRT, | ||
| 167 | .pfn = __phys_to_pfn(AIPS2_BASE_ADDR), | ||
| 168 | .length = AIPS2_SIZE, | ||
| 169 | .type = MT_DEVICE_NONSHARED | ||
| 170 | }, | ||
| 171 | }; | ||
| 172 | |||
| 173 | /* | ||
| 174 | * Set up static virtual mappings. | ||
| 175 | */ | ||
| 176 | void __init pcm037_map_io(void) | ||
| 177 | { | ||
| 178 | mxc_map_io(); | ||
| 179 | iotable_init(pcm037_io_desc, ARRAY_SIZE(pcm037_io_desc)); | ||
| 180 | } | 239 | } |
| 181 | 240 | ||
| 182 | static void __init pcm037_timer_init(void) | 241 | static void __init pcm037_timer_init(void) |
| 183 | { | 242 | { |
| 184 | mxc_clocks_init(26000000); | 243 | mx31_clocks_init(26000000); |
| 185 | mxc_timer_init("ipg_clk.0"); | ||
| 186 | } | 244 | } |
| 187 | 245 | ||
| 188 | struct sys_timer pcm037_timer = { | 246 | struct sys_timer pcm037_timer = { |
| @@ -194,7 +252,7 @@ MACHINE_START(PCM037, "Phytec Phycore pcm037") | |||
| 194 | .phys_io = AIPS1_BASE_ADDR, | 252 | .phys_io = AIPS1_BASE_ADDR, |
| 195 | .io_pg_offst = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc, | 253 | .io_pg_offst = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc, |
| 196 | .boot_params = PHYS_OFFSET + 0x100, | 254 | .boot_params = PHYS_OFFSET + 0x100, |
| 197 | .map_io = pcm037_map_io, | 255 | .map_io = mxc_map_io, |
| 198 | .init_irq = mxc_init_irq, | 256 | .init_irq = mxc_init_irq, |
| 199 | .init_machine = mxc_board_init, | 257 | .init_machine = mxc_board_init, |
| 200 | .timer = &pcm037_timer, | 258 | .timer = &pcm037_timer, |
diff --git a/arch/arm/mach-mx3/qong.c b/arch/arm/mach-mx3/qong.c new file mode 100644 index 000000000000..6c4283cec6f4 --- /dev/null +++ b/arch/arm/mach-mx3/qong.c | |||
| @@ -0,0 +1,312 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 Ilya Yanok, Emcraft Systems Ltd, <yanok@emcraft.com> | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <linux/types.h> | ||
| 20 | #include <linux/init.h> | ||
| 21 | #include <linux/kernel.h> | ||
| 22 | #include <linux/memory.h> | ||
| 23 | #include <linux/platform_device.h> | ||
| 24 | #include <linux/mtd/physmap.h> | ||
| 25 | #include <linux/mtd/nand.h> | ||
| 26 | #include <linux/gpio.h> | ||
| 27 | |||
| 28 | #include <mach/hardware.h> | ||
| 29 | #include <mach/irqs.h> | ||
| 30 | #include <asm/mach-types.h> | ||
| 31 | #include <asm/mach/arch.h> | ||
| 32 | #include <asm/mach/time.h> | ||
| 33 | #include <asm/mach/map.h> | ||
| 34 | #include <mach/common.h> | ||
| 35 | #include <asm/page.h> | ||
| 36 | #include <asm/setup.h> | ||
| 37 | #include <mach/board-qong.h> | ||
| 38 | #include <mach/imx-uart.h> | ||
| 39 | #include <mach/iomux-mx3.h> | ||
| 40 | #include "devices.h" | ||
| 41 | |||
| 42 | /* FPGA defines */ | ||
| 43 | #define QONG_FPGA_VERSION(major, minor, rev) \ | ||
| 44 | (((major & 0xF) << 12) | ((minor & 0xF) << 8) | (rev & 0xFF)) | ||
| 45 | |||
| 46 | #define QONG_FPGA_BASEADDR CS1_BASE_ADDR | ||
| 47 | #define QONG_FPGA_PERIPH_SIZE (1 << 24) | ||
| 48 | |||
| 49 | #define QONG_FPGA_CTRL_BASEADDR QONG_FPGA_BASEADDR | ||
| 50 | #define QONG_FPGA_CTRL_SIZE 0x10 | ||
| 51 | /* FPGA control registers */ | ||
| 52 | #define QONG_FPGA_CTRL_VERSION 0x00 | ||
| 53 | |||
| 54 | #define QONG_DNET_ID 1 | ||
| 55 | #define QONG_DNET_BASEADDR \ | ||
| 56 | (QONG_FPGA_BASEADDR + QONG_DNET_ID * QONG_FPGA_PERIPH_SIZE) | ||
| 57 | #define QONG_DNET_SIZE 0x00001000 | ||
| 58 | |||
| 59 | #define QONG_FPGA_IRQ IOMUX_TO_IRQ(MX31_PIN_DTR_DCE1) | ||
| 60 | |||
| 61 | /* | ||
| 62 | * This file contains the board-specific initialization routines. | ||
| 63 | */ | ||
| 64 | |||
| 65 | static struct imxuart_platform_data uart_pdata = { | ||
| 66 | .flags = IMXUART_HAVE_RTSCTS, | ||
| 67 | }; | ||
| 68 | |||
| 69 | static int uart_pins[] = { | ||
| 70 | MX31_PIN_CTS1__CTS1, | ||
| 71 | MX31_PIN_RTS1__RTS1, | ||
| 72 | MX31_PIN_TXD1__TXD1, | ||
| 73 | MX31_PIN_RXD1__RXD1 | ||
| 74 | }; | ||
| 75 | |||
| 76 | static inline void mxc_init_imx_uart(void) | ||
| 77 | { | ||
| 78 | mxc_iomux_setup_multiple_pins(uart_pins, ARRAY_SIZE(uart_pins), | ||
| 79 | "uart-0"); | ||
| 80 | mxc_register_device(&mxc_uart_device0, &uart_pdata); | ||
| 81 | } | ||
| 82 | |||
| 83 | static struct resource dnet_resources[] = { | ||
| 84 | [0] = { | ||
| 85 | .name = "dnet-memory", | ||
| 86 | .start = QONG_DNET_BASEADDR, | ||
| 87 | .end = QONG_DNET_BASEADDR + QONG_DNET_SIZE - 1, | ||
| 88 | .flags = IORESOURCE_MEM, | ||
| 89 | }, | ||
| 90 | [1] = { | ||
| 91 | .start = QONG_FPGA_IRQ, | ||
| 92 | .end = QONG_FPGA_IRQ, | ||
| 93 | .flags = IORESOURCE_IRQ, | ||
| 94 | }, | ||
| 95 | }; | ||
| 96 | |||
| 97 | static struct platform_device dnet_device = { | ||
| 98 | .name = "dnet", | ||
| 99 | .id = -1, | ||
| 100 | .num_resources = ARRAY_SIZE(dnet_resources), | ||
| 101 | .resource = dnet_resources, | ||
| 102 | }; | ||
| 103 | |||
| 104 | static int __init qong_init_dnet(void) | ||
| 105 | { | ||
| 106 | int ret; | ||
| 107 | |||
| 108 | ret = platform_device_register(&dnet_device); | ||
| 109 | return ret; | ||
| 110 | } | ||
| 111 | |||
| 112 | /* MTD NOR flash */ | ||
| 113 | |||
| 114 | static struct physmap_flash_data qong_flash_data = { | ||
| 115 | .width = 2, | ||
| 116 | }; | ||
| 117 | |||
| 118 | static struct resource qong_flash_resource = { | ||
| 119 | .start = CS0_BASE_ADDR, | ||
| 120 | .end = CS0_BASE_ADDR + QONG_NOR_SIZE - 1, | ||
| 121 | .flags = IORESOURCE_MEM, | ||
| 122 | }; | ||
| 123 | |||
| 124 | static struct platform_device qong_nor_mtd_device = { | ||
| 125 | .name = "physmap-flash", | ||
| 126 | .id = 0, | ||
| 127 | .dev = { | ||
| 128 | .platform_data = &qong_flash_data, | ||
| 129 | }, | ||
| 130 | .resource = &qong_flash_resource, | ||
| 131 | .num_resources = 1, | ||
| 132 | }; | ||
| 133 | |||
| 134 | static void qong_init_nor_mtd(void) | ||
| 135 | { | ||
| 136 | (void)platform_device_register(&qong_nor_mtd_device); | ||
| 137 | } | ||
| 138 | |||
| 139 | /* | ||
| 140 | * Hardware specific access to control-lines | ||
| 141 | */ | ||
| 142 | static void qong_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) | ||
| 143 | { | ||
| 144 | struct nand_chip *nand_chip = mtd->priv; | ||
| 145 | |||
| 146 | if (cmd == NAND_CMD_NONE) | ||
| 147 | return; | ||
| 148 | |||
| 149 | if (ctrl & NAND_CLE) | ||
| 150 | writeb(cmd, nand_chip->IO_ADDR_W + (1 << 24)); | ||
| 151 | else | ||
| 152 | writeb(cmd, nand_chip->IO_ADDR_W + (1 << 23)); | ||
| 153 | } | ||
| 154 | |||
| 155 | /* | ||
| 156 | * Read the Device Ready pin. | ||
| 157 | */ | ||
| 158 | static int qong_nand_device_ready(struct mtd_info *mtd) | ||
| 159 | { | ||
| 160 | return gpio_get_value(IOMUX_TO_GPIO(MX31_PIN_NFRB)); | ||
| 161 | } | ||
| 162 | |||
| 163 | static void qong_nand_select_chip(struct mtd_info *mtd, int chip) | ||
| 164 | { | ||
| 165 | if (chip >= 0) | ||
| 166 | gpio_set_value(IOMUX_TO_GPIO(MX31_PIN_NFCE_B), 0); | ||
| 167 | else | ||
| 168 | gpio_set_value(IOMUX_TO_GPIO(MX31_PIN_NFCE_B), 1); | ||
| 169 | } | ||
| 170 | |||
| 171 | static struct platform_nand_data qong_nand_data = { | ||
| 172 | .chip = { | ||
| 173 | .chip_delay = 20, | ||
| 174 | .options = 0, | ||
| 175 | }, | ||
| 176 | .ctrl = { | ||
| 177 | .cmd_ctrl = qong_nand_cmd_ctrl, | ||
| 178 | .dev_ready = qong_nand_device_ready, | ||
| 179 | .select_chip = qong_nand_select_chip, | ||
| 180 | } | ||
| 181 | }; | ||
| 182 | |||
| 183 | static struct resource qong_nand_resource = { | ||
| 184 | .start = CS3_BASE_ADDR, | ||
| 185 | .end = CS3_BASE_ADDR + SZ_32M - 1, | ||
| 186 | .flags = IORESOURCE_MEM, | ||
| 187 | }; | ||
| 188 | |||
| 189 | static struct platform_device qong_nand_device = { | ||
| 190 | .name = "gen_nand", | ||
| 191 | .id = -1, | ||
| 192 | .dev = { | ||
| 193 | .platform_data = &qong_nand_data, | ||
| 194 | }, | ||
| 195 | .num_resources = 1, | ||
| 196 | .resource = &qong_nand_resource, | ||
| 197 | }; | ||
| 198 | |||
| 199 | static void __init qong_init_nand_mtd(void) | ||
| 200 | { | ||
| 201 | /* init CS */ | ||
| 202 | __raw_writel(0x00004f00, CSCR_U(3)); | ||
| 203 | __raw_writel(0x20013b31, CSCR_L(3)); | ||
| 204 | __raw_writel(0x00020800, CSCR_A(3)); | ||
| 205 | mxc_iomux_set_gpr(MUX_SDCTL_CSD1_SEL, true); | ||
| 206 | |||
| 207 | /* enable pin */ | ||
| 208 | mxc_iomux_mode(IOMUX_MODE(MX31_PIN_NFCE_B, IOMUX_CONFIG_GPIO)); | ||
| 209 | if (!gpio_request(IOMUX_TO_GPIO(MX31_PIN_NFCE_B), "nand_enable")) | ||
| 210 | gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_NFCE_B), 0); | ||
| 211 | |||
| 212 | /* ready/busy pin */ | ||
| 213 | mxc_iomux_mode(IOMUX_MODE(MX31_PIN_NFRB, IOMUX_CONFIG_GPIO)); | ||
| 214 | if (!gpio_request(IOMUX_TO_GPIO(MX31_PIN_NFRB), "nand_rdy")) | ||
| 215 | gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_NFRB)); | ||
| 216 | |||
| 217 | /* write protect pin */ | ||
| 218 | mxc_iomux_mode(IOMUX_MODE(MX31_PIN_NFWP_B, IOMUX_CONFIG_GPIO)); | ||
| 219 | if (!gpio_request(IOMUX_TO_GPIO(MX31_PIN_NFWP_B), "nand_wp")) | ||
| 220 | gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_NFWP_B)); | ||
| 221 | |||
| 222 | platform_device_register(&qong_nand_device); | ||
| 223 | } | ||
| 224 | |||
| 225 | static void __init qong_init_fpga(void) | ||
| 226 | { | ||
| 227 | void __iomem *regs; | ||
| 228 | u32 fpga_ver; | ||
| 229 | |||
| 230 | regs = ioremap(QONG_FPGA_CTRL_BASEADDR, QONG_FPGA_CTRL_SIZE); | ||
| 231 | if (!regs) { | ||
| 232 | printk(KERN_ERR "%s: failed to map registers, aborting.\n", | ||
| 233 | __func__); | ||
| 234 | return; | ||
| 235 | } | ||
| 236 | |||
| 237 | fpga_ver = readl(regs + QONG_FPGA_CTRL_VERSION); | ||
| 238 | iounmap(regs); | ||
| 239 | printk(KERN_INFO "Qong FPGA version %d.%d.%d\n", | ||
| 240 | (fpga_ver & 0xF000) >> 12, | ||
| 241 | (fpga_ver & 0x0F00) >> 8, fpga_ver & 0x00FF); | ||
| 242 | if (fpga_ver < QONG_FPGA_VERSION(0, 8, 7)) { | ||
| 243 | printk(KERN_ERR "qong: Unexpected FPGA version, FPGA-based " | ||
| 244 | "devices won't be registered!\n"); | ||
| 245 | return; | ||
| 246 | } | ||
| 247 | |||
| 248 | /* register FPGA-based devices */ | ||
| 249 | qong_init_nand_mtd(); | ||
| 250 | qong_init_dnet(); | ||
| 251 | } | ||
| 252 | |||
| 253 | /* | ||
| 254 | * This structure defines the MX31 memory map. | ||
| 255 | */ | ||
| 256 | static struct map_desc qong_io_desc[] __initdata = { | ||
| 257 | { | ||
| 258 | .virtual = AIPS1_BASE_ADDR_VIRT, | ||
| 259 | .pfn = __phys_to_pfn(AIPS1_BASE_ADDR), | ||
| 260 | .length = AIPS1_SIZE, | ||
| 261 | .type = MT_DEVICE_NONSHARED | ||
| 262 | }, { | ||
| 263 | .virtual = AIPS2_BASE_ADDR_VIRT, | ||
| 264 | .pfn = __phys_to_pfn(AIPS2_BASE_ADDR), | ||
| 265 | .length = AIPS2_SIZE, | ||
| 266 | .type = MT_DEVICE_NONSHARED | ||
| 267 | } | ||
| 268 | }; | ||
| 269 | |||
| 270 | /* | ||
| 271 | * Set up static virtual mappings. | ||
| 272 | */ | ||
| 273 | static void __init qong_map_io(void) | ||
| 274 | { | ||
| 275 | mxc_map_io(); | ||
| 276 | iotable_init(qong_io_desc, ARRAY_SIZE(qong_io_desc)); | ||
| 277 | } | ||
| 278 | |||
| 279 | /* | ||
| 280 | * Board specific initialization. | ||
| 281 | */ | ||
| 282 | static void __init mxc_board_init(void) | ||
| 283 | { | ||
| 284 | mxc_init_imx_uart(); | ||
| 285 | qong_init_nor_mtd(); | ||
| 286 | qong_init_fpga(); | ||
| 287 | } | ||
| 288 | |||
| 289 | static void __init qong_timer_init(void) | ||
| 290 | { | ||
| 291 | mx31_clocks_init(26000000); | ||
| 292 | } | ||
| 293 | |||
| 294 | static struct sys_timer qong_timer = { | ||
| 295 | .init = qong_timer_init, | ||
| 296 | }; | ||
| 297 | |||
| 298 | /* | ||
| 299 | * The following uses standard kernel macros defined in arch.h in order to | ||
| 300 | * initialize __mach_desc_QONG data structure. | ||
| 301 | */ | ||
| 302 | |||
| 303 | MACHINE_START(QONG, "Dave/DENX QongEVB-LITE") | ||
| 304 | /* Maintainer: DENX Software Engineering GmbH */ | ||
| 305 | .phys_io = AIPS1_BASE_ADDR, | ||
| 306 | .io_pg_offst = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc, | ||
| 307 | .boot_params = PHYS_OFFSET + 0x100, | ||
| 308 | .map_io = qong_map_io, | ||
| 309 | .init_irq = mxc_init_irq, | ||
| 310 | .init_machine = mxc_board_init, | ||
| 311 | .timer = &qong_timer, | ||
| 312 | MACHINE_END | ||
diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c index f6a13451d1fd..6031e179926b 100644 --- a/arch/arm/mach-omap2/board-ldp.c +++ b/arch/arm/mach-omap2/board-ldp.c | |||
| @@ -81,7 +81,7 @@ static inline void __init ldp_init_smc911x(void) | |||
| 81 | } | 81 | } |
| 82 | 82 | ||
| 83 | ldp_smc911x_resources[0].start = cs_mem_base + 0x0; | 83 | ldp_smc911x_resources[0].start = cs_mem_base + 0x0; |
| 84 | ldp_smc911x_resources[0].end = cs_mem_base + 0xf; | 84 | ldp_smc911x_resources[0].end = cs_mem_base + 0xff; |
| 85 | udelay(100); | 85 | udelay(100); |
| 86 | 86 | ||
| 87 | eth_gpio = LDP_SMC911X_GPIO; | 87 | eth_gpio = LDP_SMC911X_GPIO; |
diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c index ad721e0cbf7a..ce4d46a4a838 100644 --- a/arch/arm/mach-omap2/clock.c +++ b/arch/arm/mach-omap2/clock.c | |||
| @@ -565,7 +565,7 @@ u32 omap2_clksel_to_divisor(struct clk *clk, u32 field_val) | |||
| 565 | * | 565 | * |
| 566 | * Given a struct clk of a rate-selectable clksel clock, and a clock divisor, | 566 | * Given a struct clk of a rate-selectable clksel clock, and a clock divisor, |
| 567 | * find the corresponding register field value. The return register value is | 567 | * find the corresponding register field value. The return register value is |
| 568 | * the value before left-shifting. Returns 0xffffffff on error | 568 | * the value before left-shifting. Returns ~0 on error |
| 569 | */ | 569 | */ |
| 570 | u32 omap2_divisor_to_clksel(struct clk *clk, u32 div) | 570 | u32 omap2_divisor_to_clksel(struct clk *clk, u32 div) |
| 571 | { | 571 | { |
| @@ -577,7 +577,7 @@ u32 omap2_divisor_to_clksel(struct clk *clk, u32 div) | |||
| 577 | 577 | ||
| 578 | clks = omap2_get_clksel_by_parent(clk, clk->parent); | 578 | clks = omap2_get_clksel_by_parent(clk, clk->parent); |
| 579 | if (clks == NULL) | 579 | if (clks == NULL) |
| 580 | return 0; | 580 | return ~0; |
| 581 | 581 | ||
| 582 | for (clkr = clks->rates; clkr->div; clkr++) { | 582 | for (clkr = clks->rates; clkr->div; clkr++) { |
| 583 | if ((clkr->flags & cpu_mask) && (clkr->div == div)) | 583 | if ((clkr->flags & cpu_mask) && (clkr->div == div)) |
| @@ -588,7 +588,7 @@ u32 omap2_divisor_to_clksel(struct clk *clk, u32 div) | |||
| 588 | printk(KERN_ERR "clock: Could not find divisor %d for " | 588 | printk(KERN_ERR "clock: Could not find divisor %d for " |
| 589 | "clock %s parent %s\n", div, clk->name, | 589 | "clock %s parent %s\n", div, clk->name, |
| 590 | clk->parent->name); | 590 | clk->parent->name); |
| 591 | return 0; | 591 | return ~0; |
| 592 | } | 592 | } |
| 593 | 593 | ||
| 594 | return clkr->val; | 594 | return clkr->val; |
| @@ -708,7 +708,7 @@ static u32 omap2_clksel_get_src_field(void __iomem **src_addr, | |||
| 708 | return 0; | 708 | return 0; |
| 709 | 709 | ||
| 710 | for (clkr = clks->rates; clkr->div; clkr++) { | 710 | for (clkr = clks->rates; clkr->div; clkr++) { |
| 711 | if (clkr->flags & (cpu_mask | DEFAULT_RATE)) | 711 | if (clkr->flags & cpu_mask && clkr->flags & DEFAULT_RATE) |
| 712 | break; /* Found the default rate for this platform */ | 712 | break; /* Found the default rate for this platform */ |
| 713 | } | 713 | } |
| 714 | 714 | ||
| @@ -746,7 +746,7 @@ int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent) | |||
| 746 | return -EINVAL; | 746 | return -EINVAL; |
| 747 | 747 | ||
| 748 | if (clk->usecount > 0) | 748 | if (clk->usecount > 0) |
| 749 | _omap2_clk_disable(clk); | 749 | omap2_clk_disable(clk); |
| 750 | 750 | ||
| 751 | /* Set new source value (previous dividers if any in effect) */ | 751 | /* Set new source value (previous dividers if any in effect) */ |
| 752 | reg_val = __raw_readl(src_addr) & ~field_mask; | 752 | reg_val = __raw_readl(src_addr) & ~field_mask; |
| @@ -759,11 +759,11 @@ int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent) | |||
| 759 | wmb(); | 759 | wmb(); |
| 760 | } | 760 | } |
| 761 | 761 | ||
| 762 | if (clk->usecount > 0) | ||
| 763 | _omap2_clk_enable(clk); | ||
| 764 | |||
| 765 | clk->parent = new_parent; | 762 | clk->parent = new_parent; |
| 766 | 763 | ||
| 764 | if (clk->usecount > 0) | ||
| 765 | omap2_clk_enable(clk); | ||
| 766 | |||
| 767 | /* CLKSEL clocks follow their parents' rates, divided by a divisor */ | 767 | /* CLKSEL clocks follow their parents' rates, divided by a divisor */ |
| 768 | clk->rate = new_parent->rate; | 768 | clk->rate = new_parent->rate; |
| 769 | 769 | ||
diff --git a/arch/arm/mach-orion5x/irq.c b/arch/arm/mach-orion5x/irq.c index 0caae43301e5..e03f7b45cb0d 100644 --- a/arch/arm/mach-orion5x/irq.c +++ b/arch/arm/mach-orion5x/irq.c | |||
| @@ -44,7 +44,7 @@ void __init orion5x_init_irq(void) | |||
| 44 | * User can use set_type() if he wants to use edge types handlers. | 44 | * User can use set_type() if he wants to use edge types handlers. |
| 45 | */ | 45 | */ |
| 46 | for (i = IRQ_ORION5X_GPIO_START; i < NR_IRQS; i++) { | 46 | for (i = IRQ_ORION5X_GPIO_START; i < NR_IRQS; i++) { |
| 47 | set_irq_chip(i, &orion_gpio_irq_level_chip); | 47 | set_irq_chip(i, &orion_gpio_irq_chip); |
| 48 | set_irq_handler(i, handle_level_irq); | 48 | set_irq_handler(i, handle_level_irq); |
| 49 | irq_desc[i].status |= IRQ_LEVEL; | 49 | irq_desc[i].status |= IRQ_LEVEL; |
| 50 | set_irq_flags(i, IRQF_VALID); | 50 | set_irq_flags(i, IRQF_VALID); |
diff --git a/arch/arm/mach-rpc/riscpc.c b/arch/arm/mach-rpc/riscpc.c index e88d417736af..c7fc01e9d1f6 100644 --- a/arch/arm/mach-rpc/riscpc.c +++ b/arch/arm/mach-rpc/riscpc.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/serial_8250.h> | 19 | #include <linux/serial_8250.h> |
| 20 | #include <linux/ata_platform.h> | 20 | #include <linux/ata_platform.h> |
| 21 | #include <linux/io.h> | 21 | #include <linux/io.h> |
| 22 | #include <linux/i2c.h> | ||
| 22 | 23 | ||
| 23 | #include <asm/elf.h> | 24 | #include <asm/elf.h> |
| 24 | #include <asm/mach-types.h> | 25 | #include <asm/mach-types.h> |
| @@ -201,8 +202,13 @@ static struct platform_device *devs[] __initdata = { | |||
| 201 | &pata_device, | 202 | &pata_device, |
| 202 | }; | 203 | }; |
| 203 | 204 | ||
| 205 | static struct i2c_board_info i2c_rtc = { | ||
| 206 | I2C_BOARD_INFO("pcf8583", 0x50) | ||
| 207 | }; | ||
| 208 | |||
| 204 | static int __init rpc_init(void) | 209 | static int __init rpc_init(void) |
| 205 | { | 210 | { |
| 211 | i2c_register_board_info(0, &i2c_rtc, 1); | ||
| 206 | return platform_add_devices(devs, ARRAY_SIZE(devs)); | 212 | return platform_add_devices(devs, ARRAY_SIZE(devs)); |
| 207 | } | 213 | } |
| 208 | 214 | ||
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index d490f3773c01..0d8581f11211 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
| @@ -704,7 +704,8 @@ config CACHE_FEROCEON_L2_WRITETHROUGH | |||
| 704 | 704 | ||
| 705 | config CACHE_L2X0 | 705 | config CACHE_L2X0 |
| 706 | bool "Enable the L2x0 outer cache controller" | 706 | bool "Enable the L2x0 outer cache controller" |
| 707 | depends on REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || MACH_REALVIEW_PB1176 || REALVIEW_EB_A9MP | 707 | depends on REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || MACH_REALVIEW_PB1176 || \ |
| 708 | REALVIEW_EB_A9MP || ARCH_MX35 || ARCH_MX31 | ||
| 708 | default y | 709 | default y |
| 709 | select OUTER_CACHE | 710 | select OUTER_CACHE |
| 710 | help | 711 | help |
diff --git a/arch/arm/mm/abort-ev6.S b/arch/arm/mm/abort-ev6.S index 8a7f65ba14b7..94077fbd96b7 100644 --- a/arch/arm/mm/abort-ev6.S +++ b/arch/arm/mm/abort-ev6.S | |||
| @@ -23,7 +23,8 @@ ENTRY(v6_early_abort) | |||
| 23 | #ifdef CONFIG_CPU_32v6K | 23 | #ifdef CONFIG_CPU_32v6K |
| 24 | clrex | 24 | clrex |
| 25 | #else | 25 | #else |
| 26 | strex r0, r1, [sp] @ Clear the exclusive monitor | 26 | sub r1, sp, #4 @ Get unused stack location |
| 27 | strex r0, r1, [r1] @ Clear the exclusive monitor | ||
| 27 | #endif | 28 | #endif |
| 28 | mrc p15, 0, r1, c5, c0, 0 @ get FSR | 29 | mrc p15, 0, r1, c5, c0, 0 @ get FSR |
| 29 | mrc p15, 0, r0, c6, c0, 0 @ get FAR | 30 | mrc p15, 0, r0, c6, c0, 0 @ get FAR |
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index aa424e1da8a1..8c6fc5a6237e 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
| @@ -716,7 +716,8 @@ static void __init sanity_check_meminfo(void) | |||
| 716 | * Check whether this memory bank would entirely overlap | 716 | * Check whether this memory bank would entirely overlap |
| 717 | * the vmalloc area. | 717 | * the vmalloc area. |
| 718 | */ | 718 | */ |
| 719 | if (__va(bank->start) >= VMALLOC_MIN) { | 719 | if (__va(bank->start) >= VMALLOC_MIN || |
| 720 | __va(bank->start) < PAGE_OFFSET) { | ||
| 720 | printk(KERN_NOTICE "Ignoring RAM at %.8lx-%.8lx " | 721 | printk(KERN_NOTICE "Ignoring RAM at %.8lx-%.8lx " |
| 721 | "(vmalloc region overlap).\n", | 722 | "(vmalloc region overlap).\n", |
| 722 | bank->start, bank->start + bank->size - 1); | 723 | bank->start, bank->start + bank->size - 1); |
diff --git a/arch/arm/plat-mxc/Kconfig b/arch/arm/plat-mxc/Kconfig index 9cc2b16fdf79..17d0e9906d5f 100644 --- a/arch/arm/plat-mxc/Kconfig +++ b/arch/arm/plat-mxc/Kconfig | |||
| @@ -3,7 +3,7 @@ if ARCH_MXC | |||
| 3 | menu "Freescale MXC Implementations" | 3 | menu "Freescale MXC Implementations" |
| 4 | 4 | ||
| 5 | choice | 5 | choice |
| 6 | prompt "MXC/iMX Base Type" | 6 | prompt "Freescale CPU family:" |
| 7 | default ARCH_MX3 | 7 | default ARCH_MX3 |
| 8 | 8 | ||
| 9 | config ARCH_MX1 | 9 | config ARCH_MX1 |
| @@ -15,12 +15,14 @@ config ARCH_MX1 | |||
| 15 | config ARCH_MX2 | 15 | config ARCH_MX2 |
| 16 | bool "MX2-based" | 16 | bool "MX2-based" |
| 17 | select CPU_ARM926T | 17 | select CPU_ARM926T |
| 18 | select COMMON_CLKDEV | ||
| 18 | help | 19 | help |
| 19 | This enables support for systems based on the Freescale i.MX2 family | 20 | This enables support for systems based on the Freescale i.MX2 family |
| 20 | 21 | ||
| 21 | config ARCH_MX3 | 22 | config ARCH_MX3 |
| 22 | bool "MX3-based" | 23 | bool "MX3-based" |
| 23 | select CPU_V6 | 24 | select CPU_V6 |
| 25 | select COMMON_CLKDEV | ||
| 24 | help | 26 | help |
| 25 | This enables support for systems based on the Freescale i.MX3 family | 27 | This enables support for systems based on the Freescale i.MX3 family |
| 26 | 28 | ||
| @@ -43,4 +45,10 @@ config MXC_IRQ_PRIOR | |||
| 43 | requirements for timing. | 45 | requirements for timing. |
| 44 | Say N here, unless you have a specialized requirement. | 46 | Say N here, unless you have a specialized requirement. |
| 45 | 47 | ||
| 48 | config MXC_PWM | ||
| 49 | tristate "Enable PWM driver" | ||
| 50 | depends on ARCH_MXC | ||
| 51 | help | ||
| 52 | Enable support for the i.MX PWM controller(s). | ||
| 53 | |||
| 46 | endif | 54 | endif |
diff --git a/arch/arm/plat-mxc/Makefile b/arch/arm/plat-mxc/Makefile index db74a929179d..564fd4ebf38a 100644 --- a/arch/arm/plat-mxc/Makefile +++ b/arch/arm/plat-mxc/Makefile | |||
| @@ -3,7 +3,8 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | # Common support | 5 | # Common support |
| 6 | obj-y := irq.o clock.o gpio.o time.o devices.o | 6 | obj-y := irq.o clock.o gpio.o time.o devices.o cpu.o |
| 7 | 7 | ||
| 8 | obj-$(CONFIG_ARCH_MX1) += iomux-mx1-mx2.o dma-mx1-mx2.o | 8 | obj-$(CONFIG_ARCH_MX1) += iomux-mx1-mx2.o dma-mx1-mx2.o |
| 9 | obj-$(CONFIG_ARCH_MX2) += iomux-mx1-mx2.o dma-mx1-mx2.o | 9 | obj-$(CONFIG_ARCH_MX2) += iomux-mx1-mx2.o dma-mx1-mx2.o |
| 10 | obj-$(CONFIG_MXC_PWM) += pwm.o | ||
diff --git a/arch/arm/plat-mxc/clock.c b/arch/arm/plat-mxc/clock.c index 0a38f0b396eb..92e13566cd4f 100644 --- a/arch/arm/plat-mxc/clock.c +++ b/arch/arm/plat-mxc/clock.c | |||
| @@ -48,6 +48,11 @@ static DEFINE_MUTEX(clocks_mutex); | |||
| 48 | *-------------------------------------------------------------------------*/ | 48 | *-------------------------------------------------------------------------*/ |
| 49 | 49 | ||
| 50 | /* | 50 | /* |
| 51 | * All the code inside #ifndef CONFIG_COMMON_CLKDEV can be removed once all | ||
| 52 | * MXC architectures have switched to using clkdev. | ||
| 53 | */ | ||
| 54 | #ifndef CONFIG_COMMON_CLKDEV | ||
| 55 | /* | ||
| 51 | * Retrieve a clock by name. | 56 | * Retrieve a clock by name. |
| 52 | * | 57 | * |
| 53 | * Note that we first try to use device id on the bus | 58 | * Note that we first try to use device id on the bus |
| @@ -110,6 +115,7 @@ found: | |||
| 110 | return clk; | 115 | return clk; |
| 111 | } | 116 | } |
| 112 | EXPORT_SYMBOL(clk_get); | 117 | EXPORT_SYMBOL(clk_get); |
| 118 | #endif | ||
| 113 | 119 | ||
| 114 | static void __clk_disable(struct clk *clk) | 120 | static void __clk_disable(struct clk *clk) |
| 115 | { | 121 | { |
| @@ -187,6 +193,7 @@ unsigned long clk_get_rate(struct clk *clk) | |||
| 187 | } | 193 | } |
| 188 | EXPORT_SYMBOL(clk_get_rate); | 194 | EXPORT_SYMBOL(clk_get_rate); |
| 189 | 195 | ||
| 196 | #ifndef CONFIG_COMMON_CLKDEV | ||
| 190 | /* Decrement the clock's module reference count */ | 197 | /* Decrement the clock's module reference count */ |
| 191 | void clk_put(struct clk *clk) | 198 | void clk_put(struct clk *clk) |
| 192 | { | 199 | { |
| @@ -194,6 +201,7 @@ void clk_put(struct clk *clk) | |||
| 194 | module_put(clk->owner); | 201 | module_put(clk->owner); |
| 195 | } | 202 | } |
| 196 | EXPORT_SYMBOL(clk_put); | 203 | EXPORT_SYMBOL(clk_put); |
| 204 | #endif | ||
| 197 | 205 | ||
| 198 | /* Round the requested clock rate to the nearest supported | 206 | /* Round the requested clock rate to the nearest supported |
| 199 | * rate that is less than or equal to the requested rate. | 207 | * rate that is less than or equal to the requested rate. |
| @@ -257,6 +265,7 @@ struct clk *clk_get_parent(struct clk *clk) | |||
| 257 | } | 265 | } |
| 258 | EXPORT_SYMBOL(clk_get_parent); | 266 | EXPORT_SYMBOL(clk_get_parent); |
| 259 | 267 | ||
| 268 | #ifndef CONFIG_COMMON_CLKDEV | ||
| 260 | /* | 269 | /* |
| 261 | * Add a new clock to the clock tree. | 270 | * Add a new clock to the clock tree. |
| 262 | */ | 271 | */ |
| @@ -327,4 +336,49 @@ static int __init mxc_setup_proc_entry(void) | |||
| 327 | } | 336 | } |
| 328 | 337 | ||
| 329 | late_initcall(mxc_setup_proc_entry); | 338 | late_initcall(mxc_setup_proc_entry); |
| 339 | #endif /* CONFIG_PROC_FS */ | ||
| 340 | #endif | ||
| 341 | |||
| 342 | /* | ||
| 343 | * Get the resulting clock rate from a PLL register value and the input | ||
| 344 | * frequency. PLLs with this register layout can at least be found on | ||
| 345 | * MX1, MX21, MX27 and MX31 | ||
| 346 | * | ||
| 347 | * mfi + mfn / (mfd + 1) | ||
| 348 | * f = 2 * f_ref * -------------------- | ||
| 349 | * pd + 1 | ||
| 350 | */ | ||
| 351 | unsigned long mxc_decode_pll(unsigned int reg_val, u32 freq) | ||
| 352 | { | ||
| 353 | long long ll; | ||
| 354 | int mfn_abs; | ||
| 355 | unsigned int mfi, mfn, mfd, pd; | ||
| 356 | |||
| 357 | mfi = (reg_val >> 10) & 0xf; | ||
| 358 | mfn = reg_val & 0x3ff; | ||
| 359 | mfd = (reg_val >> 16) & 0x3ff; | ||
| 360 | pd = (reg_val >> 26) & 0xf; | ||
| 361 | |||
| 362 | mfi = mfi <= 5 ? 5 : mfi; | ||
| 363 | |||
| 364 | mfn_abs = mfn; | ||
| 365 | |||
| 366 | #if !defined CONFIG_ARCH_MX1 && !defined CONFIG_ARCH_MX21 | ||
| 367 | if (mfn >= 0x200) { | ||
| 368 | mfn |= 0xFFFFFE00; | ||
| 369 | mfn_abs = -mfn; | ||
| 370 | } | ||
| 330 | #endif | 371 | #endif |
| 372 | |||
| 373 | freq *= 2; | ||
| 374 | freq /= pd + 1; | ||
| 375 | |||
| 376 | ll = (unsigned long long)freq * mfn_abs; | ||
| 377 | |||
| 378 | do_div(ll, mfd + 1); | ||
| 379 | if (mfn < 0) | ||
| 380 | ll = -ll; | ||
| 381 | ll = (freq * mfi) + ll; | ||
| 382 | |||
| 383 | return ll; | ||
| 384 | } | ||
diff --git a/arch/arm/plat-mxc/cpu.c b/arch/arm/plat-mxc/cpu.c new file mode 100644 index 000000000000..386e0d52cf58 --- /dev/null +++ b/arch/arm/plat-mxc/cpu.c | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | |||
| 2 | #include <linux/module.h> | ||
| 3 | |||
| 4 | unsigned int __mxc_cpu_type; | ||
| 5 | EXPORT_SYMBOL(__mxc_cpu_type); | ||
| 6 | |||
| 7 | void mxc_set_cpu_type(unsigned int type) | ||
| 8 | { | ||
| 9 | __mxc_cpu_type = type; | ||
| 10 | } | ||
| 11 | |||
diff --git a/arch/arm/plat-mxc/devices.c b/arch/arm/plat-mxc/devices.c index c66748267c45..56f2fb5cc456 100644 --- a/arch/arm/plat-mxc/devices.c +++ b/arch/arm/plat-mxc/devices.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/kernel.h> | 19 | #include <linux/kernel.h> |
| 20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
| 21 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
| 22 | #include <mach/common.h> | ||
| 22 | 23 | ||
| 23 | int __init mxc_register_device(struct platform_device *pdev, void *data) | 24 | int __init mxc_register_device(struct platform_device *pdev, void *data) |
| 24 | { | 25 | { |
diff --git a/arch/arm/plat-mxc/dma-mx1-mx2.c b/arch/arm/plat-mxc/dma-mx1-mx2.c index a9bab15f0fd0..e364a5ed10f1 100644 --- a/arch/arm/plat-mxc/dma-mx1-mx2.c +++ b/arch/arm/plat-mxc/dma-mx1-mx2.c | |||
| @@ -802,7 +802,7 @@ static int __init imx_dma_init(void) | |||
| 802 | int ret = 0; | 802 | int ret = 0; |
| 803 | int i; | 803 | int i; |
| 804 | 804 | ||
| 805 | dma_clk = clk_get(NULL, "dma_clk"); | 805 | dma_clk = clk_get(NULL, "dma"); |
| 806 | clk_enable(dma_clk); | 806 | clk_enable(dma_clk); |
| 807 | 807 | ||
| 808 | /* reset DMA module */ | 808 | /* reset DMA module */ |
diff --git a/arch/arm/plat-mxc/gpio.c b/arch/arm/plat-mxc/gpio.c index ccbd94adc668..c6483bad8a26 100644 --- a/arch/arm/plat-mxc/gpio.c +++ b/arch/arm/plat-mxc/gpio.c | |||
| @@ -200,8 +200,8 @@ static int mxc_gpio_direction_input(struct gpio_chip *chip, unsigned offset) | |||
| 200 | static int mxc_gpio_direction_output(struct gpio_chip *chip, | 200 | static int mxc_gpio_direction_output(struct gpio_chip *chip, |
| 201 | unsigned offset, int value) | 201 | unsigned offset, int value) |
| 202 | { | 202 | { |
| 203 | _set_gpio_direction(chip, offset, 1); | ||
| 204 | mxc_gpio_set(chip, offset, value); | 203 | mxc_gpio_set(chip, offset, value); |
| 204 | _set_gpio_direction(chip, offset, 1); | ||
| 205 | return 0; | 205 | return 0; |
| 206 | } | 206 | } |
| 207 | 207 | ||
diff --git a/arch/arm/plat-mxc/include/mach/board-mx27ads.h b/arch/arm/plat-mxc/include/mach/board-mx27ads.h index 8f34a05afc87..1cac9d1135cd 100644 --- a/arch/arm/plat-mxc/include/mach/board-mx27ads.h +++ b/arch/arm/plat-mxc/include/mach/board-mx27ads.h | |||
| @@ -48,7 +48,8 @@ | |||
| 48 | * Base address of PBC controller, CS4 | 48 | * Base address of PBC controller, CS4 |
| 49 | */ | 49 | */ |
| 50 | #define PBC_BASE_ADDRESS 0xEB000000 | 50 | #define PBC_BASE_ADDRESS 0xEB000000 |
| 51 | #define PBC_REG_ADDR(offset) (PBC_BASE_ADDRESS + (offset)) | 51 | #define PBC_REG_ADDR(offset) (void __force __iomem *) \ |
| 52 | (PBC_BASE_ADDRESS + (offset)) | ||
| 52 | 53 | ||
| 53 | /* | 54 | /* |
| 54 | * PBC Interupt name definitions | 55 | * PBC Interupt name definitions |
diff --git a/arch/arm/plat-mxc/include/mach/board-mx31ads.h b/arch/arm/plat-mxc/include/mach/board-mx31ads.h index 451d510d08c3..318c72ada13d 100644 --- a/arch/arm/plat-mxc/include/mach/board-mx31ads.h +++ b/arch/arm/plat-mxc/include/mach/board-mx31ads.h | |||
| @@ -11,6 +11,8 @@ | |||
| 11 | #ifndef __ASM_ARCH_MXC_BOARD_MX31ADS_H__ | 11 | #ifndef __ASM_ARCH_MXC_BOARD_MX31ADS_H__ |
| 12 | #define __ASM_ARCH_MXC_BOARD_MX31ADS_H__ | 12 | #define __ASM_ARCH_MXC_BOARD_MX31ADS_H__ |
| 13 | 13 | ||
| 14 | #include <mach/hardware.h> | ||
| 15 | |||
| 14 | /* Base address of PBC controller */ | 16 | /* Base address of PBC controller */ |
| 15 | #define PBC_BASE_ADDRESS IO_ADDRESS(CS4_BASE_ADDR) | 17 | #define PBC_BASE_ADDRESS IO_ADDRESS(CS4_BASE_ADDR) |
| 16 | /* Offsets for the PBC Controller register */ | 18 | /* Offsets for the PBC Controller register */ |
diff --git a/arch/arm/plat-mxc/include/mach/board-mx31moboard.h b/arch/arm/plat-mxc/include/mach/board-mx31moboard.h new file mode 100644 index 000000000000..f8aef1babb75 --- /dev/null +++ b/arch/arm/plat-mxc/include/mach/board-mx31moboard.h | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or | ||
| 5 | * modify it under the terms of the GNU General Public License | ||
| 6 | * as published by the Free Software Foundation; either version 2 | ||
| 7 | * of the License, or (at your option) any later version. | ||
| 8 | * This program is distributed in the hope that it will be useful, | ||
| 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 11 | * GNU General Public License for more details. | ||
| 12 | * | ||
| 13 | * You should have received a copy of the GNU General Public License | ||
| 14 | * along with this program; if not, write to the Free Software | ||
| 15 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
| 16 | * MA 02110-1301, USA. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #ifndef __ASM_ARCH_MXC_BOARD_MX31MOBOARD_H__ | ||
| 20 | #define __ASM_ARCH_MXC_BOARD_MX31MOBOARD_H__ | ||
| 21 | |||
| 22 | /* mandatory for CONFIG_LL_DEBUG */ | ||
| 23 | |||
| 24 | #define MXC_LL_UART_PADDR UART1_BASE_ADDR | ||
| 25 | #define MXC_LL_UART_VADDR (AIPI_BASE_ADDR_VIRT + 0x0A000) | ||
| 26 | |||
| 27 | #ifndef __ASSEMBLY__ | ||
| 28 | |||
| 29 | enum mx31moboard_boards { | ||
| 30 | MX31NOBOARD = 0, | ||
| 31 | MX31DEVBOARD = 1, | ||
| 32 | MX31MARXBOT = 2, | ||
| 33 | }; | ||
| 34 | |||
| 35 | /* | ||
| 36 | * This CPU module needs a baseboard to work. After basic initializing | ||
| 37 | * its own devices, it calls baseboard's init function. | ||
| 38 | */ | ||
| 39 | |||
| 40 | extern void mx31moboard_devboard_init(void); | ||
| 41 | extern void mx31moboard_marxbot_init(void); | ||
| 42 | |||
| 43 | #endif | ||
| 44 | |||
| 45 | #endif /* __ASM_ARCH_MXC_BOARD_MX31MOBOARD_H__ */ | ||
diff --git a/arch/arm/plat-mxc/include/mach/board-qong.h b/arch/arm/plat-mxc/include/mach/board-qong.h new file mode 100644 index 000000000000..4ff762dd45cf --- /dev/null +++ b/arch/arm/plat-mxc/include/mach/board-qong.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2009 Ilya Yanok, Emcraft Systems Ltd, <yanok@emcraft.com> | ||
| 3 | */ | ||
| 4 | |||
| 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 | #ifndef __ASM_ARCH_MXC_BOARD_QONG_H__ | ||
| 12 | #define __ASM_ARCH_MXC_BOARD_QONG_H__ | ||
| 13 | |||
| 14 | /* mandatory for CONFIG_LL_DEBUG */ | ||
| 15 | |||
| 16 | #define MXC_LL_UART_PADDR UART1_BASE_ADDR | ||
| 17 | #define MXC_LL_UART_VADDR AIPS1_IO_ADDRESS(UART1_BASE_ADDR) | ||
| 18 | |||
| 19 | /* NOR FLASH */ | ||
| 20 | #define QONG_NOR_SIZE (128*1024*1024) | ||
| 21 | |||
| 22 | #endif /* __ASM_ARCH_MXC_BOARD_QONG_H__ */ | ||
diff --git a/arch/arm/plat-mxc/include/mach/clkdev.h b/arch/arm/plat-mxc/include/mach/clkdev.h new file mode 100644 index 000000000000..04b37a89801c --- /dev/null +++ b/arch/arm/plat-mxc/include/mach/clkdev.h | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | #ifndef __ASM_MACH_CLKDEV_H | ||
| 2 | #define __ASM_MACH_CLKDEV_H | ||
| 3 | |||
| 4 | #define __clk_get(clk) ({ 1; }) | ||
| 5 | #define __clk_put(clk) do { } while (0) | ||
| 6 | |||
| 7 | #endif | ||
diff --git a/arch/arm/plat-mxc/include/mach/clock.h b/arch/arm/plat-mxc/include/mach/clock.h index d21f78e78819..43a82d0c534d 100644 --- a/arch/arm/plat-mxc/include/mach/clock.h +++ b/arch/arm/plat-mxc/include/mach/clock.h | |||
| @@ -26,9 +26,13 @@ | |||
| 26 | struct module; | 26 | struct module; |
| 27 | 27 | ||
| 28 | struct clk { | 28 | struct clk { |
| 29 | #ifndef CONFIG_COMMON_CLKDEV | ||
| 30 | /* As soon as i.MX1 and i.MX31 switched to clkdev, this | ||
| 31 | * block can go away */ | ||
| 29 | struct list_head node; | 32 | struct list_head node; |
| 30 | struct module *owner; | 33 | struct module *owner; |
| 31 | const char *name; | 34 | const char *name; |
| 35 | #endif | ||
| 32 | int id; | 36 | int id; |
| 33 | /* Source clock this clk depends on */ | 37 | /* Source clock this clk depends on */ |
| 34 | struct clk *parent; | 38 | struct clk *parent; |
| @@ -63,5 +67,7 @@ struct clk { | |||
| 63 | int clk_register(struct clk *clk); | 67 | int clk_register(struct clk *clk); |
| 64 | void clk_unregister(struct clk *clk); | 68 | void clk_unregister(struct clk *clk); |
| 65 | 69 | ||
| 70 | unsigned long mxc_decode_pll(unsigned int pll, u32 f_ref); | ||
| 71 | |||
| 66 | #endif /* __ASSEMBLY__ */ | 72 | #endif /* __ASSEMBLY__ */ |
| 67 | #endif /* __ASM_ARCH_MXC_CLOCK_H__ */ | 73 | #endif /* __ASM_ARCH_MXC_CLOCK_H__ */ |
diff --git a/arch/arm/plat-mxc/include/mach/common.h b/arch/arm/plat-mxc/include/mach/common.h index 6350287a59b9..b2f9b72644db 100644 --- a/arch/arm/plat-mxc/include/mach/common.h +++ b/arch/arm/plat-mxc/include/mach/common.h | |||
| @@ -12,12 +12,18 @@ | |||
| 12 | #define __ASM_ARCH_MXC_COMMON_H__ | 12 | #define __ASM_ARCH_MXC_COMMON_H__ |
| 13 | 13 | ||
| 14 | struct platform_device; | 14 | struct platform_device; |
| 15 | struct clk; | ||
| 15 | 16 | ||
| 16 | extern void mxc_map_io(void); | 17 | extern void mxc_map_io(void); |
| 17 | extern void mxc_init_irq(void); | 18 | extern void mxc_init_irq(void); |
| 18 | extern void mxc_timer_init(const char *clk_timer); | 19 | extern void mxc_timer_init(struct clk *timer_clk); |
| 19 | extern int mxc_clocks_init(unsigned long fref); | 20 | extern int mx1_clocks_init(unsigned long fref); |
| 21 | extern int mx21_clocks_init(unsigned long lref, unsigned long fref); | ||
| 22 | extern int mx27_clocks_init(unsigned long fref); | ||
| 23 | extern int mx31_clocks_init(unsigned long fref); | ||
| 24 | extern int mx35_clocks_init(void); | ||
| 20 | extern int mxc_register_gpios(void); | 25 | extern int mxc_register_gpios(void); |
| 21 | extern int mxc_register_device(struct platform_device *pdev, void *data); | 26 | extern int mxc_register_device(struct platform_device *pdev, void *data); |
| 27 | extern void mxc_set_cpu_type(unsigned int type); | ||
| 22 | 28 | ||
| 23 | #endif | 29 | #endif |
diff --git a/arch/arm/plat-mxc/include/mach/debug-macro.S b/arch/arm/plat-mxc/include/mach/debug-macro.S index 602768b427e2..4f773148bc20 100644 --- a/arch/arm/plat-mxc/include/mach/debug-macro.S +++ b/arch/arm/plat-mxc/include/mach/debug-macro.S | |||
| @@ -31,6 +31,9 @@ | |||
| 31 | #ifdef CONFIG_MACH_MX31_3DS | 31 | #ifdef CONFIG_MACH_MX31_3DS |
| 32 | #include <mach/board-mx31pdk.h> | 32 | #include <mach/board-mx31pdk.h> |
| 33 | #endif | 33 | #endif |
| 34 | #ifdef CONFIG_MACH_QONG | ||
| 35 | #include <mach/board-qong.h> | ||
| 36 | #endif | ||
| 34 | .macro addruart,rx | 37 | .macro addruart,rx |
| 35 | mrc p15, 0, \rx, c1, c0 | 38 | mrc p15, 0, \rx, c1, c0 |
| 36 | tst \rx, #1 @ MMU enabled? | 39 | tst \rx, #1 @ MMU enabled? |
diff --git a/arch/arm/plat-mxc/include/mach/hardware.h b/arch/arm/plat-mxc/include/mach/hardware.h index a612d8bb73c8..42e4ee37ca1f 100644 --- a/arch/arm/plat-mxc/include/mach/hardware.h +++ b/arch/arm/plat-mxc/include/mach/hardware.h | |||
| @@ -23,10 +23,16 @@ | |||
| 23 | #include <asm/sizes.h> | 23 | #include <asm/sizes.h> |
| 24 | 24 | ||
| 25 | #ifdef CONFIG_ARCH_MX3 | 25 | #ifdef CONFIG_ARCH_MX3 |
| 26 | # include <mach/mx31.h> | 26 | #include <mach/mx3x.h> |
| 27 | #include <mach/mx31.h> | ||
| 28 | #include <mach/mx35.h> | ||
| 27 | #endif | 29 | #endif |
| 28 | 30 | ||
| 29 | #ifdef CONFIG_ARCH_MX2 | 31 | #ifdef CONFIG_ARCH_MX2 |
| 32 | # include <mach/mx2x.h> | ||
| 33 | # ifdef CONFIG_MACH_MX21 | ||
| 34 | # include <mach/mx21.h> | ||
| 35 | # endif | ||
| 30 | # ifdef CONFIG_MACH_MX27 | 36 | # ifdef CONFIG_MACH_MX27 |
| 31 | # include <mach/mx27.h> | 37 | # include <mach/mx27.h> |
| 32 | # endif | 38 | # endif |
diff --git a/arch/arm/mach-imx/include/mach/imxfb.h b/arch/arm/plat-mxc/include/mach/imxfb.h index 870d0d939616..762a7b0430e2 100644 --- a/arch/arm/mach-imx/include/mach/imxfb.h +++ b/arch/arm/plat-mxc/include/mach/imxfb.h | |||
| @@ -76,6 +76,9 @@ struct imx_fb_platform_data { | |||
| 76 | u_char * fixed_screen_cpu; | 76 | u_char * fixed_screen_cpu; |
| 77 | dma_addr_t fixed_screen_dma; | 77 | dma_addr_t fixed_screen_dma; |
| 78 | 78 | ||
| 79 | int (*init)(struct platform_device*); | ||
| 80 | int (*exit)(struct platform_device*); | ||
| 81 | |||
| 79 | void (*lcd_power)(int); | 82 | void (*lcd_power)(int); |
| 80 | void (*backlight_power)(int); | 83 | void (*backlight_power)(int); |
| 81 | }; | 84 | }; |
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx1-mx2.h b/arch/arm/plat-mxc/include/mach/iomux-mx1-mx2.h deleted file mode 100644 index 95a383be628e..000000000000 --- a/arch/arm/plat-mxc/include/mach/iomux-mx1-mx2.h +++ /dev/null | |||
| @@ -1,416 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de> | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or | ||
| 5 | * modify it under the terms of the GNU General Public License | ||
| 6 | * as published by the Free Software Foundation; either version 2 | ||
| 7 | * of the License, or (at your option) any later version. | ||
| 8 | * This program is distributed in the hope that it will be useful, | ||
| 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 11 | * GNU General Public License for more details. | ||
| 12 | * | ||
| 13 | * You should have received a copy of the GNU General Public License | ||
| 14 | * along with this program; if not, write to the Free Software | ||
| 15 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
| 16 | * MA 02110-1301, USA. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #ifndef _MXC_GPIO_MX1_MX2_H | ||
| 20 | #define _MXC_GPIO_MX1_MX2_H | ||
| 21 | |||
| 22 | #include <linux/io.h> | ||
| 23 | |||
| 24 | /* | ||
| 25 | * GPIO Module and I/O Multiplexer | ||
| 26 | * x = 0..3 for reg_A, reg_B, reg_C, reg_D | ||
| 27 | */ | ||
| 28 | #define VA_GPIO_BASE IO_ADDRESS(GPIO_BASE_ADDR) | ||
| 29 | #define MXC_DDIR(x) (0x00 + ((x) << 8)) | ||
| 30 | #define MXC_OCR1(x) (0x04 + ((x) << 8)) | ||
| 31 | #define MXC_OCR2(x) (0x08 + ((x) << 8)) | ||
| 32 | #define MXC_ICONFA1(x) (0x0c + ((x) << 8)) | ||
| 33 | #define MXC_ICONFA2(x) (0x10 + ((x) << 8)) | ||
| 34 | #define MXC_ICONFB1(x) (0x14 + ((x) << 8)) | ||
| 35 | #define MXC_ICONFB2(x) (0x18 + ((x) << 8)) | ||
| 36 | #define MXC_DR(x) (0x1c + ((x) << 8)) | ||
| 37 | #define MXC_GIUS(x) (0x20 + ((x) << 8)) | ||
| 38 | #define MXC_SSR(x) (0x24 + ((x) << 8)) | ||
| 39 | #define MXC_ICR1(x) (0x28 + ((x) << 8)) | ||
| 40 | #define MXC_ICR2(x) (0x2c + ((x) << 8)) | ||
| 41 | #define MXC_IMR(x) (0x30 + ((x) << 8)) | ||
| 42 | #define MXC_ISR(x) (0x34 + ((x) << 8)) | ||
| 43 | #define MXC_GPR(x) (0x38 + ((x) << 8)) | ||
| 44 | #define MXC_SWR(x) (0x3c + ((x) << 8)) | ||
| 45 | #define MXC_PUEN(x) (0x40 + ((x) << 8)) | ||
| 46 | |||
| 47 | #ifdef CONFIG_ARCH_MX1 | ||
| 48 | # define GPIO_PORT_MAX 3 | ||
| 49 | #endif | ||
| 50 | #ifdef CONFIG_ARCH_MX2 | ||
| 51 | # define GPIO_PORT_MAX 5 | ||
| 52 | #endif | ||
| 53 | |||
| 54 | #ifndef GPIO_PORT_MAX | ||
| 55 | # error "GPIO config port count unknown!" | ||
| 56 | #endif | ||
| 57 | |||
| 58 | #define GPIO_PIN_MASK 0x1f | ||
| 59 | |||
| 60 | #define GPIO_PORT_SHIFT 5 | ||
| 61 | #define GPIO_PORT_MASK (0x7 << GPIO_PORT_SHIFT) | ||
| 62 | |||
| 63 | #define GPIO_PORTA (0 << GPIO_PORT_SHIFT) | ||
| 64 | #define GPIO_PORTB (1 << GPIO_PORT_SHIFT) | ||
| 65 | #define GPIO_PORTC (2 << GPIO_PORT_SHIFT) | ||
| 66 | #define GPIO_PORTD (3 << GPIO_PORT_SHIFT) | ||
| 67 | #define GPIO_PORTE (4 << GPIO_PORT_SHIFT) | ||
| 68 | #define GPIO_PORTF (5 << GPIO_PORT_SHIFT) | ||
| 69 | |||
| 70 | #define GPIO_OUT (1 << 8) | ||
| 71 | #define GPIO_IN (0 << 8) | ||
| 72 | #define GPIO_PUEN (1 << 9) | ||
| 73 | |||
| 74 | #define GPIO_PF (1 << 10) | ||
| 75 | #define GPIO_AF (1 << 11) | ||
| 76 | |||
| 77 | #define GPIO_OCR_SHIFT 12 | ||
| 78 | #define GPIO_OCR_MASK (3 << GPIO_OCR_SHIFT) | ||
| 79 | #define GPIO_AIN (0 << GPIO_OCR_SHIFT) | ||
| 80 | #define GPIO_BIN (1 << GPIO_OCR_SHIFT) | ||
| 81 | #define GPIO_CIN (2 << GPIO_OCR_SHIFT) | ||
| 82 | #define GPIO_GPIO (3 << GPIO_OCR_SHIFT) | ||
| 83 | |||
| 84 | #define GPIO_AOUT_SHIFT 14 | ||
| 85 | #define GPIO_AOUT_MASK (3 << GPIO_AOUT_SHIFT) | ||
| 86 | #define GPIO_AOUT (0 << GPIO_AOUT_SHIFT) | ||
| 87 | #define GPIO_AOUT_ISR (1 << GPIO_AOUT_SHIFT) | ||
| 88 | #define GPIO_AOUT_0 (2 << GPIO_AOUT_SHIFT) | ||
| 89 | #define GPIO_AOUT_1 (3 << GPIO_AOUT_SHIFT) | ||
| 90 | |||
| 91 | #define GPIO_BOUT_SHIFT 16 | ||
| 92 | #define GPIO_BOUT_MASK (3 << GPIO_BOUT_SHIFT) | ||
| 93 | #define GPIO_BOUT (0 << GPIO_BOUT_SHIFT) | ||
| 94 | #define GPIO_BOUT_ISR (1 << GPIO_BOUT_SHIFT) | ||
| 95 | #define GPIO_BOUT_0 (2 << GPIO_BOUT_SHIFT) | ||
| 96 | #define GPIO_BOUT_1 (3 << GPIO_BOUT_SHIFT) | ||
| 97 | |||
| 98 | extern void mxc_gpio_mode(int gpio_mode); | ||
| 99 | extern int mxc_gpio_setup_multiple_pins(const int *pin_list, unsigned count, | ||
| 100 | const char *label); | ||
| 101 | extern void mxc_gpio_release_multiple_pins(const int *pin_list, int count); | ||
| 102 | |||
| 103 | /*-------------------------------------------------------------------------*/ | ||
| 104 | |||
| 105 | /* assignements for GPIO alternate/primary functions */ | ||
| 106 | |||
| 107 | /* FIXME: This list is not completed. The correct directions are | ||
| 108 | * missing on some (many) pins | ||
| 109 | */ | ||
| 110 | #ifdef CONFIG_ARCH_MX1 | ||
| 111 | #define PA0_AIN_SPI2_CLK (GPIO_PORTA | GPIO_OUT | 0) | ||
| 112 | #define PA0_AF_ETMTRACESYNC (GPIO_PORTA | GPIO_AF | 0) | ||
| 113 | #define PA1_AOUT_SPI2_RXD (GPIO_PORTA | GPIO_IN | 1) | ||
| 114 | #define PA1_PF_TIN (GPIO_PORTA | GPIO_PF | 1) | ||
| 115 | #define PA2_PF_PWM0 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 2) | ||
| 116 | #define PA3_PF_CSI_MCLK (GPIO_PORTA | GPIO_PF | 3) | ||
| 117 | #define PA4_PF_CSI_D0 (GPIO_PORTA | GPIO_PF | 4) | ||
| 118 | #define PA5_PF_CSI_D1 (GPIO_PORTA | GPIO_PF | 5) | ||
| 119 | #define PA6_PF_CSI_D2 (GPIO_PORTA | GPIO_PF | 6) | ||
| 120 | #define PA7_PF_CSI_D3 (GPIO_PORTA | GPIO_PF | 7) | ||
| 121 | #define PA8_PF_CSI_D4 (GPIO_PORTA | GPIO_PF | 8) | ||
| 122 | #define PA9_PF_CSI_D5 (GPIO_PORTA | GPIO_PF | 9) | ||
| 123 | #define PA10_PF_CSI_D6 (GPIO_PORTA | GPIO_PF | 10) | ||
| 124 | #define PA11_PF_CSI_D7 (GPIO_PORTA | GPIO_PF | 11) | ||
| 125 | #define PA12_PF_CSI_VSYNC (GPIO_PORTA | GPIO_PF | 12) | ||
| 126 | #define PA13_PF_CSI_HSYNC (GPIO_PORTA | GPIO_PF | 13) | ||
| 127 | #define PA14_PF_CSI_PIXCLK (GPIO_PORTA | GPIO_PF | 14) | ||
| 128 | #define PA15_PF_I2C_SDA (GPIO_PORTA | GPIO_OUT | GPIO_PF | 15) | ||
| 129 | #define PA16_PF_I2C_SCL (GPIO_PORTA | GPIO_OUT | GPIO_PF | 16) | ||
| 130 | #define PA17_AF_ETMTRACEPKT4 (GPIO_PORTA | GPIO_AF | 17) | ||
| 131 | #define PA17_AIN_SPI2_SS (GPIO_PORTA | GPIO_OUT | 17) | ||
| 132 | #define PA18_AF_ETMTRACEPKT5 (GPIO_PORTA | GPIO_AF | 18) | ||
| 133 | #define PA19_AF_ETMTRACEPKT6 (GPIO_PORTA | GPIO_AF | 19) | ||
| 134 | #define PA20_AF_ETMTRACEPKT7 (GPIO_PORTA | GPIO_AF | 20) | ||
| 135 | #define PA21_PF_A0 (GPIO_PORTA | GPIO_PF | 21) | ||
| 136 | #define PA22_PF_CS4 (GPIO_PORTA | GPIO_PF | 22) | ||
| 137 | #define PA23_PF_CS5 (GPIO_PORTA | GPIO_PF | 23) | ||
| 138 | #define PA24_PF_A16 (GPIO_PORTA | GPIO_PF | 24) | ||
| 139 | #define PA24_AF_ETMTRACEPKT0 (GPIO_PORTA | GPIO_AF | 24) | ||
| 140 | #define PA25_PF_A17 (GPIO_PORTA | GPIO_PF | 25) | ||
| 141 | #define PA25_AF_ETMTRACEPKT1 (GPIO_PORTA | GPIO_AF | 25) | ||
| 142 | #define PA26_PF_A18 (GPIO_PORTA | GPIO_PF | 26) | ||
| 143 | #define PA26_AF_ETMTRACEPKT2 (GPIO_PORTA | GPIO_AF | 26) | ||
| 144 | #define PA27_PF_A19 (GPIO_PORTA | GPIO_PF | 27) | ||
| 145 | #define PA27_AF_ETMTRACEPKT3 (GPIO_PORTA | GPIO_AF | 27) | ||
| 146 | #define PA28_PF_A20 (GPIO_PORTA | GPIO_PF | 28) | ||
| 147 | #define PA28_AF_ETMPIPESTAT0 (GPIO_PORTA | GPIO_AF | 28) | ||
| 148 | #define PA29_PF_A21 (GPIO_PORTA | GPIO_PF | 29) | ||
| 149 | #define PA29_AF_ETMPIPESTAT1 (GPIO_PORTA | GPIO_AF | 29) | ||
| 150 | #define PA30_PF_A22 (GPIO_PORTA | GPIO_PF | 30) | ||
| 151 | #define PA30_AF_ETMPIPESTAT2 (GPIO_PORTA | GPIO_AF | 30) | ||
| 152 | #define PA31_PF_A23 (GPIO_PORTA | GPIO_PF | 31) | ||
| 153 | #define PA31_AF_ETMTRACECLK (GPIO_PORTA | GPIO_AF | 31) | ||
| 154 | #define PB8_PF_SD_DAT0 (GPIO_PORTB | GPIO_PF | GPIO_PUEN | 8) | ||
| 155 | #define PB8_AF_MS_PIO (GPIO_PORTB | GPIO_AF | 8) | ||
| 156 | #define PB9_PF_SD_DAT1 (GPIO_PORTB | GPIO_PF | GPIO_PUEN | 9) | ||
| 157 | #define PB9_AF_MS_PI1 (GPIO_PORTB | GPIO_AF | 9) | ||
| 158 | #define PB10_PF_SD_DAT2 (GPIO_PORTB | GPIO_PF | GPIO_PUEN | 10) | ||
| 159 | #define PB10_AF_MS_SCLKI (GPIO_PORTB | GPIO_AF | 10) | ||
| 160 | #define PB11_PF_SD_DAT3 (GPIO_PORTB | GPIO_PF | 11) | ||
| 161 | #define PB11_AF_MS_SDIO (GPIO_PORTB | GPIO_AF | 11) | ||
| 162 | #define PB12_PF_SD_CLK (GPIO_PORTB | GPIO_PF | 12) | ||
| 163 | #define PB12_AF_MS_SCLK0 (GPIO_PORTB | GPIO_AF | 12) | ||
| 164 | #define PB13_PF_SD_CMD (GPIO_PORTB | GPIO_PF | GPIO_PUEN | 13) | ||
| 165 | #define PB13_AF_MS_BS (GPIO_PORTB | GPIO_AF | 13) | ||
| 166 | #define PB14_AF_SSI_RXFS (GPIO_PORTB | GPIO_AF | 14) | ||
| 167 | #define PB15_AF_SSI_RXCLK (GPIO_PORTB | GPIO_AF | 15) | ||
| 168 | #define PB16_AF_SSI_RXDAT (GPIO_PORTB | GPIO_IN | GPIO_AF | 16) | ||
| 169 | #define PB17_AF_SSI_TXDAT (GPIO_PORTB | GPIO_OUT | GPIO_AF | 17) | ||
| 170 | #define PB18_AF_SSI_TXFS (GPIO_PORTB | GPIO_AF | 18) | ||
| 171 | #define PB19_AF_SSI_TXCLK (GPIO_PORTB | GPIO_AF | 19) | ||
| 172 | #define PB20_PF_USBD_AFE (GPIO_PORTB | GPIO_PF | 20) | ||
| 173 | #define PB21_PF_USBD_OE (GPIO_PORTB | GPIO_PF | 21) | ||
| 174 | #define PB22_PFUSBD_RCV (GPIO_PORTB | GPIO_PF | 22) | ||
| 175 | #define PB23_PF_USBD_SUSPND (GPIO_PORTB | GPIO_PF | 23) | ||
| 176 | #define PB24_PF_USBD_VP (GPIO_PORTB | GPIO_PF | 24) | ||
| 177 | #define PB25_PF_USBD_VM (GPIO_PORTB | GPIO_PF | 25) | ||
| 178 | #define PB26_PF_USBD_VPO (GPIO_PORTB | GPIO_PF | 26) | ||
| 179 | #define PB27_PF_USBD_VMO (GPIO_PORTB | GPIO_PF | 27) | ||
| 180 | #define PB28_PF_UART2_CTS (GPIO_PORTB | GPIO_OUT | GPIO_PF | 28) | ||
| 181 | #define PB29_PF_UART2_RTS (GPIO_PORTB | GPIO_IN | GPIO_PF | 29) | ||
| 182 | #define PB30_PF_UART2_TXD (GPIO_PORTB | GPIO_OUT | GPIO_PF | 30) | ||
| 183 | #define PB31_PF_UART2_RXD (GPIO_PORTB | GPIO_IN | GPIO_PF | 31) | ||
| 184 | #define PC3_PF_SSI_RXFS (GPIO_PORTC | GPIO_PF | 3) | ||
| 185 | #define PC4_PF_SSI_RXCLK (GPIO_PORTC | GPIO_PF | 4) | ||
| 186 | #define PC5_PF_SSI_RXDAT (GPIO_PORTC | GPIO_IN | GPIO_PF | 5) | ||
| 187 | #define PC6_PF_SSI_TXDAT (GPIO_PORTC | GPIO_OUT | GPIO_PF | 6) | ||
| 188 | #define PC7_PF_SSI_TXFS (GPIO_PORTC | GPIO_PF | 7) | ||
| 189 | #define PC8_PF_SSI_TXCLK (GPIO_PORTC | GPIO_PF | 8) | ||
| 190 | #define PC9_PF_UART1_CTS (GPIO_PORTC | GPIO_OUT | GPIO_PF | 9) | ||
| 191 | #define PC10_PF_UART1_RTS (GPIO_PORTC | GPIO_IN | GPIO_PF | 10) | ||
| 192 | #define PC11_PF_UART1_TXD (GPIO_PORTC | GPIO_OUT | GPIO_PF | 11) | ||
| 193 | #define PC12_PF_UART1_RXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 12) | ||
| 194 | #define PC13_PF_SPI1_SPI_RDY (GPIO_PORTC | GPIO_PF | 13) | ||
| 195 | #define PC14_PF_SPI1_SCLK (GPIO_PORTC | GPIO_PF | 14) | ||
| 196 | #define PC15_PF_SPI1_SS (GPIO_PORTC | GPIO_PF | 15) | ||
| 197 | #define PC16_PF_SPI1_MISO (GPIO_PORTC | GPIO_PF | 16) | ||
| 198 | #define PC17_PF_SPI1_MOSI (GPIO_PORTC | GPIO_PF | 17) | ||
| 199 | #define PC24_BIN_UART3_RI (GPIO_PORTC | GPIO_OUT | GPIO_BIN | 24) | ||
| 200 | #define PC25_BIN_UART3_DSR (GPIO_PORTC | GPIO_OUT | GPIO_BIN | 25) | ||
| 201 | #define PC26_AOUT_UART3_DTR (GPIO_PORTC | GPIO_IN | 26) | ||
| 202 | #define PC27_BIN_UART3_DCD (GPIO_PORTC | GPIO_OUT | GPIO_BIN | 27) | ||
| 203 | #define PC28_BIN_UART3_CTS (GPIO_PORTC | GPIO_OUT | GPIO_BIN | 28) | ||
| 204 | #define PC29_AOUT_UART3_RTS (GPIO_PORTC | GPIO_IN | 29) | ||
| 205 | #define PC30_BIN_UART3_TX (GPIO_PORTC | GPIO_BIN | 30) | ||
| 206 | #define PC31_AOUT_UART3_RX (GPIO_PORTC | GPIO_IN | 31) | ||
| 207 | #define PD6_PF_LSCLK (GPIO_PORTD | GPIO_OUT | GPIO_PF | 6) | ||
| 208 | #define PD7_PF_REV (GPIO_PORTD | GPIO_PF | 7) | ||
| 209 | #define PD7_AF_UART2_DTR (GPIO_PORTD | GPIO_IN | GPIO_AF | 7) | ||
| 210 | #define PD7_AIN_SPI2_SCLK (GPIO_PORTD | GPIO_AIN | 7) | ||
| 211 | #define PD8_PF_CLS (GPIO_PORTD | GPIO_PF | 8) | ||
| 212 | #define PD8_AF_UART2_DCD (GPIO_PORTD | GPIO_OUT | GPIO_AF | 8) | ||
| 213 | #define PD8_AIN_SPI2_SS (GPIO_PORTD | GPIO_AIN | 8) | ||
| 214 | #define PD9_PF_PS (GPIO_PORTD | GPIO_PF | 9) | ||
| 215 | #define PD9_AF_UART2_RI (GPIO_PORTD | GPIO_OUT | GPIO_AF | 9) | ||
| 216 | #define PD9_AOUT_SPI2_RXD (GPIO_PORTD | GPIO_IN | 9) | ||
| 217 | #define PD10_PF_SPL_SPR (GPIO_PORTD | GPIO_OUT | GPIO_PF | 10) | ||
| 218 | #define PD10_AF_UART2_DSR (GPIO_PORTD | GPIO_OUT | GPIO_AF | 10) | ||
| 219 | #define PD10_AIN_SPI2_TXD (GPIO_PORTD | GPIO_OUT | 10) | ||
| 220 | #define PD11_PF_CONTRAST (GPIO_PORTD | GPIO_OUT | GPIO_PF | 11) | ||
| 221 | #define PD12_PF_ACD_OE (GPIO_PORTD | GPIO_OUT | GPIO_PF | 12) | ||
| 222 | #define PD13_PF_LP_HSYNC (GPIO_PORTD | GPIO_OUT | GPIO_PF | 13) | ||
| 223 | #define PD14_PF_FLM_VSYNC (GPIO_PORTD | GPIO_OUT | GPIO_PF | 14) | ||
| 224 | #define PD15_PF_LD0 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 15) | ||
| 225 | #define PD16_PF_LD1 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 16) | ||
| 226 | #define PD17_PF_LD2 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 17) | ||
| 227 | #define PD18_PF_LD3 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 18) | ||
| 228 | #define PD19_PF_LD4 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 19) | ||
| 229 | #define PD20_PF_LD5 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 20) | ||
| 230 | #define PD21_PF_LD6 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 21) | ||
| 231 | #define PD22_PF_LD7 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 22) | ||
| 232 | #define PD23_PF_LD8 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 23) | ||
| 233 | #define PD24_PF_LD9 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 24) | ||
| 234 | #define PD25_PF_LD10 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 25) | ||
| 235 | #define PD26_PF_LD11 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 26) | ||
| 236 | #define PD27_PF_LD12 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 27) | ||
| 237 | #define PD28_PF_LD13 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 28) | ||
| 238 | #define PD29_PF_LD14 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 29) | ||
| 239 | #define PD30_PF_LD15 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 30) | ||
| 240 | #define PD31_PF_TMR2OUT (GPIO_PORTD | GPIO_PF | 31) | ||
| 241 | #define PD31_BIN_SPI2_TXD (GPIO_PORTD | GPIO_BIN | 31) | ||
| 242 | #endif | ||
| 243 | |||
| 244 | #ifdef CONFIG_ARCH_MX2 | ||
| 245 | #define PA0_PF_USBH2_CLK (GPIO_PORTA | GPIO_PF | 0) | ||
| 246 | #define PA1_PF_USBH2_DIR (GPIO_PORTA | GPIO_PF | 1) | ||
| 247 | #define PA2_PF_USBH2_DATA7 (GPIO_PORTA | GPIO_PF | 2) | ||
| 248 | #define PA3_PF_USBH2_NXT (GPIO_PORTA | GPIO_PF | 3) | ||
| 249 | #define PA4_PF_USBH2_STP (GPIO_PORTA | GPIO_PF | 4) | ||
| 250 | #define PA5_PF_LSCLK (GPIO_PORTA | GPIO_OUT | GPIO_PF | 5) | ||
| 251 | #define PA6_PF_LD0 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 6) | ||
| 252 | #define PA7_PF_LD1 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 7) | ||
| 253 | #define PA8_PF_LD2 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 8) | ||
| 254 | #define PA9_PF_LD3 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 9) | ||
| 255 | #define PA10_PF_LD4 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 10) | ||
| 256 | #define PA11_PF_LD5 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 11) | ||
| 257 | #define PA12_PF_LD6 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 12) | ||
| 258 | #define PA13_PF_LD7 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 13) | ||
| 259 | #define PA14_PF_LD8 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 14) | ||
| 260 | #define PA15_PF_LD9 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 15) | ||
| 261 | #define PA16_PF_LD10 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 16) | ||
| 262 | #define PA17_PF_LD11 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 17) | ||
| 263 | #define PA18_PF_LD12 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 18) | ||
| 264 | #define PA19_PF_LD13 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 19) | ||
| 265 | #define PA20_PF_LD14 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 20) | ||
| 266 | #define PA21_PF_LD15 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 21) | ||
| 267 | #define PA22_PF_LD16 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 22) | ||
| 268 | #define PA23_PF_LD17 (GPIO_PORTA | GPIO_OUT | GPIO_PF | 23) | ||
| 269 | #define PA24_PF_REV (GPIO_PORTA | GPIO_OUT | GPIO_PF | 24) | ||
| 270 | #define PA25_PF_CLS (GPIO_PORTA | GPIO_OUT | GPIO_PF | 25) | ||
| 271 | #define PA26_PF_PS (GPIO_PORTA | GPIO_OUT | GPIO_PF | 26) | ||
| 272 | #define PA27_PF_SPL_SPR (GPIO_PORTA | GPIO_OUT | GPIO_PF | 27) | ||
| 273 | #define PA28_PF_HSYNC (GPIO_PORTA | GPIO_OUT | GPIO_PF | 28) | ||
| 274 | #define PA29_PF_VSYNC (GPIO_PORTA | GPIO_OUT | GPIO_PF | 29) | ||
| 275 | #define PA30_PF_CONTRAST (GPIO_PORTA | GPIO_OUT | GPIO_PF | 30) | ||
| 276 | #define PA31_PF_OE_ACD (GPIO_PORTA | GPIO_OUT | GPIO_PF | 31) | ||
| 277 | #define PB4_PF_SD2_D0 (GPIO_PORTB | GPIO_PF | 4) | ||
| 278 | #define PB5_PF_SD2_D1 (GPIO_PORTB | GPIO_PF | 5) | ||
| 279 | #define PB6_PF_SD2_D2 (GPIO_PORTB | GPIO_PF | 6) | ||
| 280 | #define PB7_PF_SD2_D3 (GPIO_PORTB | GPIO_PF | 7) | ||
| 281 | #define PB8_PF_SD2_CMD (GPIO_PORTB | GPIO_PF | 8) | ||
| 282 | #define PB9_PF_SD2_CLK (GPIO_PORTB | GPIO_PF | 9) | ||
| 283 | #define PB10_PF_CSI_D0 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 10) | ||
| 284 | #define PB10_AF_UART6_TXD (GPIO_PORTB | GPIO_OUT | GPIO_AF | 10) | ||
| 285 | #define PB11_PF_CSI_D1 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 11) | ||
| 286 | #define PB11_AF_UART6_RXD (GPIO_PORTB | GPIO_IN | GPIO_AF | 11) | ||
| 287 | #define PB12_PF_CSI_D2 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 12) | ||
| 288 | #define PB12_AF_UART6_CTS (GPIO_PORTB | GPIO_OUT | GPIO_AF | 12) | ||
| 289 | #define PB13_PF_CSI_D3 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 13) | ||
| 290 | #define PB13_AF_UART6_RTS (GPIO_PORTB | GPIO_IN | GPIO_AF | 13) | ||
| 291 | #define PB14_PF_CSI_D4 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 14) | ||
| 292 | #define PB15_PF_CSI_MCLK (GPIO_PORTB | GPIO_OUT | GPIO_PF | 15) | ||
| 293 | #define PB16_PF_CSI_PIXCLK (GPIO_PORTB | GPIO_OUT | GPIO_PF | 16) | ||
| 294 | #define PB17_PF_CSI_D5 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 17) | ||
| 295 | #define PB18_PF_CSI_D6 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 18) | ||
| 296 | #define PB18_AF_UART5_TXD (GPIO_PORTB | GPIO_OUT | GPIO_AF | 18) | ||
| 297 | #define PB19_PF_CSI_D7 (GPIO_PORTB | GPIO_OUT | GPIO_PF | 19) | ||
| 298 | #define PB19_AF_UART5_RXD (GPIO_PORTB | GPIO_IN | GPIO_AF | 19) | ||
| 299 | #define PB20_PF_CSI_VSYNC (GPIO_PORTB | GPIO_OUT | GPIO_PF | 20) | ||
| 300 | #define PB20_AF_UART5_CTS (GPIO_PORTB | GPIO_OUT | GPIO_AF | 20) | ||
| 301 | #define PB21_PF_CSI_HSYNC (GPIO_PORTB | GPIO_OUT | GPIO_PF | 21) | ||
| 302 | #define PB21_AF_UART5_RTS (GPIO_PORTB | GPIO_IN | GPIO_AF | 21) | ||
| 303 | #define PB22_PF_USBH1_SUSP (GPIO_PORTB | GPIO_PF | 22) | ||
| 304 | #define PB23_PF_USB_PWR (GPIO_PORTB | GPIO_PF | 23) | ||
| 305 | #define PB24_PF_USB_OC_B (GPIO_PORTB | GPIO_PF | 24) | ||
| 306 | #define PB25_PF_USBH1_RCV (GPIO_PORTB | GPIO_PF | 25) | ||
| 307 | #define PB26_PF_USBH1_FS (GPIO_PORTB | GPIO_PF | 26) | ||
| 308 | #define PB27_PF_USBH1_OE_B (GPIO_PORTB | GPIO_PF | 27) | ||
| 309 | #define PB28_PF_USBH1_TXDM (GPIO_PORTB | GPIO_PF | 28) | ||
| 310 | #define PB29_PF_USBH1_TXDP (GPIO_PORTB | GPIO_PF | 29) | ||
| 311 | #define PB30_PF_USBH1_RXDM (GPIO_PORTB | GPIO_PF | 30) | ||
| 312 | #define PB31_PF_USBH1_RXDP (GPIO_PORTB | GPIO_PF | 31) | ||
| 313 | #define PB26_AF_UART4_RTS (GPIO_PORTB | GPIO_IN | GPIO_PF | 26) | ||
| 314 | #define PB28_AF_UART4_TXD (GPIO_PORTB | GPIO_OUT | GPIO_AF | 28) | ||
| 315 | #define PB29_AF_UART4_CTS (GPIO_PORTB | GPIO_OUT | GPIO_AF | 29) | ||
| 316 | #define PB31_AF_UART4_RXD (GPIO_PORTB | GPIO_IN | GPIO_AF | 31) | ||
| 317 | #define PC5_PF_I2C2_SDA (GPIO_PORTC | GPIO_IN | GPIO_PF | 5) | ||
| 318 | #define PC6_PF_I2C2_SCL (GPIO_PORTC | GPIO_IN | GPIO_PF | 6) | ||
| 319 | #define PC7_PF_USBOTG_DATA5 (GPIO_PORTC | GPIO_OUT | GPIO_PF | 7) | ||
| 320 | #define PC8_PF_USBOTG_DATA6 (GPIO_PORTC | GPIO_OUT | GPIO_PF | 8) | ||
| 321 | #define PC9_PF_USBOTG_DATA0 (GPIO_PORTC | GPIO_OUT | GPIO_PF | 9) | ||
| 322 | #define PC10_PF_USBOTG_DATA2 (GPIO_PORTC | GPIO_OUT | GPIO_PF | 10) | ||
| 323 | #define PC11_PF_USBOTG_DATA1 (GPIO_PORTC | GPIO_OUT | GPIO_PF | 11) | ||
| 324 | #define PC12_PF_USBOTG_DATA4 (GPIO_PORTC | GPIO_OUT | GPIO_PF | 12) | ||
| 325 | #define PC13_PF_USBOTG_DATA3 (GPIO_PORTC | GPIO_OUT | GPIO_PF | 13) | ||
| 326 | #define PC16_PF_SSI4_FS (GPIO_PORTC | GPIO_IN | GPIO_PF | 16) | ||
| 327 | #define PC17_PF_SSI4_RXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 17) | ||
| 328 | #define PC18_PF_SSI4_TXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 18) | ||
| 329 | #define PC19_PF_SSI4_CLK (GPIO_PORTC | GPIO_IN | GPIO_PF | 19) | ||
| 330 | #define PC20_PF_SSI1_FS (GPIO_PORTC | GPIO_IN | GPIO_PF | 20) | ||
| 331 | #define PC21_PF_SSI1_RXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 21) | ||
| 332 | #define PC22_PF_SSI1_TXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 22) | ||
| 333 | #define PC23_PF_SSI1_CLK (GPIO_PORTC | GPIO_IN | GPIO_PF | 23) | ||
| 334 | #define PC24_PF_SSI2_FS (GPIO_PORTC | GPIO_IN | GPIO_PF | 24) | ||
| 335 | #define PC25_PF_SSI2_RXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 25) | ||
| 336 | #define PC26_PF_SSI2_TXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 26) | ||
| 337 | #define PC27_PF_SSI2_CLK (GPIO_PORTC | GPIO_IN | GPIO_PF | 27) | ||
| 338 | #define PC28_PF_SSI3_FS (GPIO_PORTC | GPIO_IN | GPIO_PF | 28) | ||
| 339 | #define PC29_PF_SSI3_RXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 29) | ||
| 340 | #define PC30_PF_SSI3_TXD (GPIO_PORTC | GPIO_IN | GPIO_PF | 30) | ||
| 341 | #define PC31_PF_SSI3_CLK (GPIO_PORTC | GPIO_IN | GPIO_PF | 31) | ||
| 342 | #define PD0_AIN_FEC_TXD0 (GPIO_PORTD | GPIO_OUT | GPIO_AIN | 0) | ||
| 343 | #define PD1_AIN_FEC_TXD1 (GPIO_PORTD | GPIO_OUT | GPIO_AIN | 1) | ||
| 344 | #define PD2_AIN_FEC_TXD2 (GPIO_PORTD | GPIO_OUT | GPIO_AIN | 2) | ||
| 345 | #define PD3_AIN_FEC_TXD3 (GPIO_PORTD | GPIO_OUT | GPIO_AIN | 3) | ||
| 346 | #define PD4_AOUT_FEC_RX_ER (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 4) | ||
| 347 | #define PD5_AOUT_FEC_RXD1 (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 5) | ||
| 348 | #define PD6_AOUT_FEC_RXD2 (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 6) | ||
| 349 | #define PD7_AOUT_FEC_RXD3 (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 7) | ||
| 350 | #define PD8_AF_FEC_MDIO (GPIO_PORTD | GPIO_IN | GPIO_AF | 8) | ||
| 351 | #define PD9_AIN_FEC_MDC (GPIO_PORTD | GPIO_OUT | GPIO_AIN | 9) | ||
| 352 | #define PD10_AOUT_FEC_CRS (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 10) | ||
| 353 | #define PD11_AOUT_FEC_TX_CLK (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 11) | ||
| 354 | #define PD12_AOUT_FEC_RXD0 (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 12) | ||
| 355 | #define PD13_AOUT_FEC_RX_DV (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 13) | ||
| 356 | #define PD14_AOUT_FEC_CLR (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 14) | ||
| 357 | #define PD15_AOUT_FEC_COL (GPIO_PORTD | GPIO_IN | GPIO_AOUT | 15) | ||
| 358 | #define PD16_AIN_FEC_TX_ER (GPIO_PORTD | GPIO_OUT | GPIO_AIN | 16) | ||
| 359 | #define PD17_PF_I2C_DATA (GPIO_PORTD | GPIO_OUT | GPIO_PF | 17) | ||
| 360 | #define PD18_PF_I2C_CLK (GPIO_PORTD | GPIO_OUT | GPIO_PF | 18) | ||
| 361 | #define PD19_AF_USBH2_DATA4 (GPIO_PORTD | GPIO_AF | 19) | ||
| 362 | #define PD20_AF_USBH2_DATA3 (GPIO_PORTD | GPIO_AF | 20) | ||
| 363 | #define PD21_AF_USBH2_DATA6 (GPIO_PORTD | GPIO_AF | 21) | ||
| 364 | #define PD22_AF_USBH2_DATA0 (GPIO_PORTD | GPIO_AF | 22) | ||
| 365 | #define PD23_AF_USBH2_DATA2 (GPIO_PORTD | GPIO_AF | 23) | ||
| 366 | #define PD24_AF_USBH2_DATA1 (GPIO_PORTD | GPIO_AF | 24) | ||
| 367 | #define PD25_PF_CSPI1_RDY (GPIO_PORTD | GPIO_OUT | GPIO_PF | 25) | ||
| 368 | #define PD26_PF_CSPI1_SS2 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 26) | ||
| 369 | #define PD26_AF_USBH2_DATA5 (GPIO_PORTD | GPIO_AF | 26) | ||
| 370 | #define PD27_PF_CSPI1_SS1 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 27) | ||
| 371 | #define PD28_PF_CSPI1_SS0 (GPIO_PORTD | GPIO_OUT | GPIO_PF | 28) | ||
| 372 | #define PD29_PF_CSPI1_SCLK (GPIO_PORTD | GPIO_OUT | GPIO_PF | 29) | ||
| 373 | #define PD30_PF_CSPI1_MISO (GPIO_PORTD | GPIO_IN | GPIO_PF | 30) | ||
| 374 | #define PD31_PF_CSPI1_MOSI (GPIO_PORTD | GPIO_OUT | GPIO_PF | 31) | ||
| 375 | #define PF23_AIN_FEC_TX_EN (GPIO_PORTF | GPIO_OUT | GPIO_AIN | 23) | ||
| 376 | #define PE0_PF_USBOTG_NXT (GPIO_PORTE | GPIO_OUT | GPIO_PF | 0) | ||
| 377 | #define PE1_PF_USBOTG_STP (GPIO_PORTE | GPIO_OUT | GPIO_PF | 1) | ||
| 378 | #define PE2_PF_USBOTG_DIR (GPIO_PORTE | GPIO_OUT | GPIO_PF | 2) | ||
| 379 | #define PE3_PF_UART2_CTS (GPIO_PORTE | GPIO_OUT | GPIO_PF | 3) | ||
| 380 | #define PE4_PF_UART2_RTS (GPIO_PORTE | GPIO_IN | GPIO_PF | 4) | ||
| 381 | #define PE6_PF_UART2_TXD (GPIO_PORTE | GPIO_OUT | GPIO_PF | 6) | ||
| 382 | #define PE7_PF_UART2_RXD (GPIO_PORTE | GPIO_IN | GPIO_PF | 7) | ||
| 383 | #define PE8_PF_UART3_TXD (GPIO_PORTE | GPIO_OUT | GPIO_PF | 8) | ||
| 384 | #define PE9_PF_UART3_RXD (GPIO_PORTE | GPIO_IN | GPIO_PF | 9) | ||
| 385 | #define PE10_PF_UART3_CTS (GPIO_PORTE | GPIO_OUT | GPIO_PF | 10) | ||
| 386 | #define PE11_PF_UART3_RTS (GPIO_PORTE | GPIO_IN | GPIO_PF | 11) | ||
| 387 | #define PE12_PF_UART1_TXD (GPIO_PORTE | GPIO_OUT | GPIO_PF | 12) | ||
| 388 | #define PE13_PF_UART1_RXD (GPIO_PORTE | GPIO_IN | GPIO_PF | 13) | ||
| 389 | #define PE14_PF_UART1_CTS (GPIO_PORTE | GPIO_OUT | GPIO_PF | 14) | ||
| 390 | #define PE15_PF_UART1_RTS (GPIO_PORTE | GPIO_IN | GPIO_PF | 15) | ||
| 391 | #define PE16_AF_RTCK (GPIO_PORTE | GPIO_OUT | GPIO_AF | 16) | ||
| 392 | #define PE16_PF_RTCK (GPIO_PORTE | GPIO_OUT | GPIO_PF | 16) | ||
| 393 | #define PE18_PF_SDHC1_D0 (GPIO_PORTE | GPIO_PF | 18) | ||
| 394 | #define PE18_AF_CSPI3_MISO (GPIO_PORTE | GPIO_IN | GPIO_AF | 18) | ||
| 395 | #define PE19_PF_SDHC1_D1 (GPIO_PORTE | GPIO_PF | 19) | ||
| 396 | #define PE20_PF_SDHC1_D2 (GPIO_PORTE | GPIO_PF | 20) | ||
| 397 | #define PE21_PF_SDHC1_D3 (GPIO_PORTE | GPIO_PF | 21) | ||
| 398 | #define PE21_AF_CSPI3_SS (GPIO_PORTE | GPIO_OUT | GPIO_AF | 21) | ||
| 399 | #define PE22_PF_SDHC1_CMD (GPIO_PORTE | GPIO_PF | 22) | ||
| 400 | #define PE22_AF_CSPI3_MOSI (GPIO_PORTE | GPIO_OUT | GPIO_AF | 22) | ||
| 401 | #define PE22_PF_SDHC1_CLK (GPIO_PORTE | GPIO_PF | 23) | ||
| 402 | #define PE23_AF_CSPI3_SCLK (GPIO_PORTE | GPIO_OUT | GPIO_AF | 23) | ||
| 403 | #define PE24_PF_USBOTG_CLK (GPIO_PORTE | GPIO_OUT | GPIO_PF | 24) | ||
| 404 | #define PE25_PF_USBOTG_DATA7 (GPIO_PORTE | GPIO_OUT | GPIO_PF | 25) | ||
| 405 | #endif | ||
| 406 | |||
| 407 | /* decode irq number to use with IMR(x), ISR(x) and friends */ | ||
| 408 | #define IRQ_TO_REG(irq) ((irq - MXC_INTERNAL_IRQS) >> 5) | ||
| 409 | |||
| 410 | #define IRQ_GPIOA(x) (MXC_GPIO_IRQ_START + x) | ||
| 411 | #define IRQ_GPIOB(x) (IRQ_GPIOA(32) + x) | ||
| 412 | #define IRQ_GPIOC(x) (IRQ_GPIOB(32) + x) | ||
| 413 | #define IRQ_GPIOD(x) (IRQ_GPIOC(32) + x) | ||
| 414 | #define IRQ_GPIOE(x) (IRQ_GPIOD(32) + x) | ||
| 415 | |||
| 416 | #endif /* _MXC_GPIO_MX1_MX2_H */ | ||
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx1.h b/arch/arm/plat-mxc/include/mach/iomux-mx1.h new file mode 100644 index 000000000000..bf23305c19cc --- /dev/null +++ b/arch/arm/plat-mxc/include/mach/iomux-mx1.h | |||
| @@ -0,0 +1,166 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de> | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or | ||
| 5 | * modify it under the terms of the GNU General Public License | ||
| 6 | * as published by the Free Software Foundation; either version 2 | ||
| 7 | * of the License, or (at your option) any later version. | ||
| 8 | * This program is distributed in the hope that it will be useful, | ||
| 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 11 | * GNU General Public License for more details. | ||
| 12 | * | ||
| 13 | * You should have received a copy of the GNU General Public License | ||
| 14 | * along with this program; if not, write to the Free Software | ||
| 15 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
| 16 | * MA 02110-1301, USA. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #ifndef _MXC_IOMUX_MX1_H | ||
| 20 | #define _MXC_IOMUX_MX1_H | ||
| 21 | |||
| 22 | #ifndef GPIO_PORTA | ||
| 23 | #error Please include mach/iomux.h | ||
| 24 | #endif | ||
| 25 | |||
| 26 | /* FIXME: This list is not completed. The correct directions are | ||
| 27 | * missing on some (many) pins | ||
| 28 | */ | ||
| 29 | |||
| 30 | |||
| 31 | /* Primary GPIO pin functions */ | ||
| 32 | |||
| 33 | #define PA0_AIN_SPI2_CLK (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 0) | ||
| 34 | #define PA0_AF_ETMTRACESYNC (GPIO_PORTA | GPIO_AF | 0) | ||
| 35 | #define PA1_AOUT_SPI2_RXD (GPIO_PORTA | GPIO_AOUT | GPIO_IN | 1) | ||
| 36 | #define PA1_PF_TIN (GPIO_PORTA | GPIO_PF | 1) | ||
| 37 | #define PA2_PF_PWM0 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 2) | ||
| 38 | #define PA3_PF_CSI_MCLK (GPIO_PORTA | GPIO_PF | 3) | ||
| 39 | #define PA4_PF_CSI_D0 (GPIO_PORTA | GPIO_PF | 4) | ||
| 40 | #define PA5_PF_CSI_D1 (GPIO_PORTA | GPIO_PF | 5) | ||
| 41 | #define PA6_PF_CSI_D2 (GPIO_PORTA | GPIO_PF | 6) | ||
| 42 | #define PA7_PF_CSI_D3 (GPIO_PORTA | GPIO_PF | 7) | ||
| 43 | #define PA8_PF_CSI_D4 (GPIO_PORTA | GPIO_PF | 8) | ||
| 44 | #define PA9_PF_CSI_D5 (GPIO_PORTA | GPIO_PF | 9) | ||
| 45 | #define PA10_PF_CSI_D6 (GPIO_PORTA | GPIO_PF | 10) | ||
| 46 | #define PA11_PF_CSI_D7 (GPIO_PORTA | GPIO_PF | 11) | ||
| 47 | #define PA12_PF_CSI_VSYNC (GPIO_PORTA | GPIO_PF | 12) | ||
| 48 | #define PA13_PF_CSI_HSYNC (GPIO_PORTA | GPIO_PF | 13) | ||
| 49 | #define PA14_PF_CSI_PIXCLK (GPIO_PORTA | GPIO_PF | 14) | ||
| 50 | #define PA15_PF_I2C_SDA (GPIO_PORTA | GPIO_PF | GPIO_OUT | 15) | ||
| 51 | #define PA16_PF_I2C_SCL (GPIO_PORTA | GPIO_PF | GPIO_OUT | 16) | ||
| 52 | #define PA17_AF_ETMTRACEPKT4 (GPIO_PORTA | GPIO_AF | 17) | ||
| 53 | #define PA17_AIN_SPI2_SS (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 17) | ||
| 54 | #define PA18_AF_ETMTRACEPKT5 (GPIO_PORTA | GPIO_AF | 18) | ||
| 55 | #define PA19_AF_ETMTRACEPKT6 (GPIO_PORTA | GPIO_AF | 19) | ||
| 56 | #define PA20_AF_ETMTRACEPKT7 (GPIO_PORTA | GPIO_AF | 20) | ||
| 57 | #define PA21_PF_A0 (GPIO_PORTA | GPIO_PF | 21) | ||
| 58 | #define PA22_PF_CS4 (GPIO_PORTA | GPIO_PF | 22) | ||
| 59 | #define PA23_PF_CS5 (GPIO_PORTA | GPIO_PF | 23) | ||
| 60 | #define PA24_PF_A16 (GPIO_PORTA | GPIO_PF | 24) | ||
| 61 | #define PA24_AF_ETMTRACEPKT0 (GPIO_PORTA | GPIO_AF | 24) | ||
| 62 | #define PA25_PF_A17 (GPIO_PORTA | GPIO_PF | 25) | ||
| 63 | #define PA25_AF_ETMTRACEPKT1 (GPIO_PORTA | GPIO_AF | 25) | ||
| 64 | #define PA26_PF_A18 (GPIO_PORTA | GPIO_PF | 26) | ||
| 65 | #define PA26_AF_ETMTRACEPKT2 (GPIO_PORTA | GPIO_AF | 26) | ||
| 66 | #define PA27_PF_A19 (GPIO_PORTA | GPIO_PF | 27) | ||
| 67 | #define PA27_AF_ETMTRACEPKT3 (GPIO_PORTA | GPIO_AF | 27) | ||
| 68 | #define PA28_PF_A20 (GPIO_PORTA | GPIO_PF | 28) | ||
| 69 | #define PA28_AF_ETMPIPESTAT0 (GPIO_PORTA | GPIO_AF | 28) | ||
| 70 | #define PA29_PF_A21 (GPIO_PORTA | GPIO_PF | 29) | ||
| 71 | #define PA29_AF_ETMPIPESTAT1 (GPIO_PORTA | GPIO_AF | 29) | ||
| 72 | #define PA30_PF_A22 (GPIO_PORTA | GPIO_PF | 30) | ||
| 73 | #define PA30_AF_ETMPIPESTAT2 (GPIO_PORTA | GPIO_AF | 30) | ||
| 74 | #define PA31_PF_A23 (GPIO_PORTA | GPIO_PF | 31) | ||
| 75 | #define PA31_AF_ETMTRACECLK (GPIO_PORTA | GPIO_AF | 31) | ||
| 76 | #define PB8_PF_SD_DAT0 (GPIO_PORTB | GPIO_PF | GPIO_PUEN | 8) | ||
| 77 | #define PB8_AF_MS_PIO (GPIO_PORTB | GPIO_AF | 8) | ||
| 78 | #define PB9_PF_SD_DAT1 (GPIO_PORTB | GPIO_PF | GPIO_PUEN | 9) | ||
| 79 | #define PB9_AF_MS_PI1 (GPIO_PORTB | GPIO_AF | 9) | ||
| 80 | #define PB10_PF_SD_DAT2 (GPIO_PORTB | GPIO_PF | GPIO_PUEN | 10) | ||
| 81 | #define PB10_AF_MS_SCLKI (GPIO_PORTB | GPIO_AF | 10) | ||
| 82 | #define PB11_PF_SD_DAT3 (GPIO_PORTB | GPIO_PF | 11) | ||
| 83 | #define PB11_AF_MS_SDIO (GPIO_PORTB | GPIO_AF | 11) | ||
| 84 | #define PB12_PF_SD_CLK (GPIO_PORTB | GPIO_PF | 12) | ||
| 85 | #define PB12_AF_MS_SCLK0 (GPIO_PORTB | GPIO_AF | 12) | ||
| 86 | #define PB13_PF_SD_CMD (GPIO_PORTB | GPIO_PF | GPIO_PUEN | 13) | ||
| 87 | #define PB13_AF_MS_BS (GPIO_PORTB | GPIO_AF | 13) | ||
| 88 | #define PB14_AF_SSI_RXFS (GPIO_PORTB | GPIO_AF | 14) | ||
| 89 | #define PB15_AF_SSI_RXCLK (GPIO_PORTB | GPIO_AF | 15) | ||
| 90 | #define PB16_AF_SSI_RXDAT (GPIO_PORTB | GPIO_AF | GPIO_IN | 16) | ||
| 91 | #define PB17_AF_SSI_TXDAT (GPIO_PORTB | GPIO_AF | GPIO_OUT | 17) | ||
| 92 | #define PB18_AF_SSI_TXFS (GPIO_PORTB | GPIO_AF | 18) | ||
| 93 | #define PB19_AF_SSI_TXCLK (GPIO_PORTB | GPIO_AF | 19) | ||
| 94 | #define PB20_PF_USBD_AFE (GPIO_PORTB | GPIO_PF | 20) | ||
| 95 | #define PB21_PF_USBD_OE (GPIO_PORTB | GPIO_PF | 21) | ||
| 96 | #define PB22_PF_USBD_RCV (GPIO_PORTB | GPIO_PF | 22) | ||
| 97 | #define PB23_PF_USBD_SUSPND (GPIO_PORTB | GPIO_PF | 23) | ||
| 98 | #define PB24_PF_USBD_VP (GPIO_PORTB | GPIO_PF | 24) | ||
| 99 | #define PB25_PF_USBD_VM (GPIO_PORTB | GPIO_PF | 25) | ||
| 100 | #define PB26_PF_USBD_VPO (GPIO_PORTB | GPIO_PF | 26) | ||
| 101 | #define PB27_PF_USBD_VMO (GPIO_PORTB | GPIO_PF | 27) | ||
| 102 | #define PB28_PF_UART2_CTS (GPIO_PORTB | GPIO_PF | GPIO_OUT | 28) | ||
| 103 | #define PB29_PF_UART2_RTS (GPIO_PORTB | GPIO_PF | GPIO_IN | 29) | ||
| 104 | #define PB30_PF_UART2_TXD (GPIO_PORTB | GPIO_PF | GPIO_OUT | 30) | ||
| 105 | #define PB31_PF_UART2_RXD (GPIO_PORTB | GPIO_PF | GPIO_IN | 31) | ||
| 106 | #define PC3_PF_SSI_RXFS (GPIO_PORTC | GPIO_PF | 3) | ||
| 107 | #define PC4_PF_SSI_RXCLK (GPIO_PORTC | GPIO_PF | 4) | ||
| 108 | #define PC5_PF_SSI_RXDAT (GPIO_PORTC | GPIO_PF | GPIO_IN | 5) | ||
| 109 | #define PC6_PF_SSI_TXDAT (GPIO_PORTC | GPIO_PF | GPIO_OUT | 6) | ||
| 110 | #define PC7_PF_SSI_TXFS (GPIO_PORTC | GPIO_PF | 7) | ||
| 111 | #define PC8_PF_SSI_TXCLK (GPIO_PORTC | GPIO_PF | 8) | ||
| 112 | #define PC9_PF_UART1_CTS (GPIO_PORTC | GPIO_PF | GPIO_OUT | 9) | ||
| 113 | #define PC10_PF_UART1_RTS (GPIO_PORTC | GPIO_PF | GPIO_IN | 10) | ||
| 114 | #define PC11_PF_UART1_TXD (GPIO_PORTC | GPIO_PF | GPIO_OUT | 11) | ||
| 115 | #define PC12_PF_UART1_RXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 12) | ||
| 116 | #define PC13_PF_SPI1_SPI_RDY (GPIO_PORTC | GPIO_PF | 13) | ||
| 117 | #define PC14_PF_SPI1_SCLK (GPIO_PORTC | GPIO_PF | 14) | ||
| 118 | #define PC15_PF_SPI1_SS (GPIO_PORTC | GPIO_PF | 15) | ||
| 119 | #define PC16_PF_SPI1_MISO (GPIO_PORTC | GPIO_PF | 16) | ||
| 120 | #define PC17_PF_SPI1_MOSI (GPIO_PORTC | GPIO_PF | 17) | ||
| 121 | #define PC24_BIN_UART3_RI (GPIO_PORTC | GPIO_BIN | GPIO_OUT | 24) | ||
| 122 | #define PC25_BIN_UART3_DSR (GPIO_PORTC | GPIO_BIN | GPIO_OUT | 25) | ||
| 123 | #define PC26_AOUT_UART3_DTR (GPIO_PORTC | GPIO_AOUT | GPIO_IN | 26) | ||
| 124 | #define PC27_BIN_UART3_DCD (GPIO_PORTC | GPIO_BIN | GPIO_OUT | 27) | ||
| 125 | #define PC28_BIN_UART3_CTS (GPIO_PORTC | GPIO_BIN | GPIO_OUT | 28) | ||
| 126 | #define PC29_AOUT_UART3_RTS (GPIO_PORTC | GPIO_AOUT | GPIO_IN | 29) | ||
| 127 | #define PC30_BIN_UART3_TX (GPIO_PORTC | GPIO_BIN | 30) | ||
| 128 | #define PC31_AOUT_UART3_RX (GPIO_PORTC | GPIO_AOUT | GPIO_IN | 31) | ||
| 129 | #define PD6_PF_LSCLK (GPIO_PORTD | GPIO_PF | GPIO_OUT | 6) | ||
| 130 | #define PD7_PF_REV (GPIO_PORTD | GPIO_PF | 7) | ||
| 131 | #define PD7_AF_UART2_DTR (GPIO_PORTD | GPIO_AF | GPIO_IN | 7) | ||
| 132 | #define PD7_AIN_SPI2_SCLK (GPIO_PORTD | GPIO_AIN | 7) | ||
| 133 | #define PD8_PF_CLS (GPIO_PORTD | GPIO_PF | 8) | ||
| 134 | #define PD8_AF_UART2_DCD (GPIO_PORTD | GPIO_AF | GPIO_OUT | 8) | ||
| 135 | #define PD8_AIN_SPI2_SS (GPIO_PORTD | GPIO_AIN | 8) | ||
| 136 | #define PD9_PF_PS (GPIO_PORTD | GPIO_PF | 9) | ||
| 137 | #define PD9_AF_UART2_RI (GPIO_PORTD | GPIO_AF | GPIO_OUT | 9) | ||
| 138 | #define PD9_AOUT_SPI2_RXD (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 9) | ||
| 139 | #define PD10_PF_SPL_SPR (GPIO_PORTD | GPIO_PF | GPIO_OUT | 10) | ||
| 140 | #define PD10_AF_UART2_DSR (GPIO_PORTD | GPIO_AF | GPIO_OUT | 10) | ||
| 141 | #define PD10_AIN_SPI2_TXD (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 10) | ||
| 142 | #define PD11_PF_CONTRAST (GPIO_PORTD | GPIO_PF | GPIO_OUT | 11) | ||
| 143 | #define PD12_PF_ACD_OE (GPIO_PORTD | GPIO_PF | GPIO_OUT | 12) | ||
| 144 | #define PD13_PF_LP_HSYNC (GPIO_PORTD | GPIO_PF | GPIO_OUT | 13) | ||
| 145 | #define PD14_PF_FLM_VSYNC (GPIO_PORTD | GPIO_PF | GPIO_OUT | 14) | ||
| 146 | #define PD15_PF_LD0 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 15) | ||
| 147 | #define PD16_PF_LD1 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 16) | ||
| 148 | #define PD17_PF_LD2 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 17) | ||
| 149 | #define PD18_PF_LD3 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 18) | ||
| 150 | #define PD19_PF_LD4 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 19) | ||
| 151 | #define PD20_PF_LD5 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 20) | ||
| 152 | #define PD21_PF_LD6 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 21) | ||
| 153 | #define PD22_PF_LD7 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 22) | ||
| 154 | #define PD23_PF_LD8 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 23) | ||
| 155 | #define PD24_PF_LD9 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 24) | ||
| 156 | #define PD25_PF_LD10 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 25) | ||
| 157 | #define PD26_PF_LD11 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 26) | ||
| 158 | #define PD27_PF_LD12 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 27) | ||
| 159 | #define PD28_PF_LD13 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 28) | ||
| 160 | #define PD29_PF_LD14 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 29) | ||
| 161 | #define PD30_PF_LD15 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 30) | ||
| 162 | #define PD31_PF_TMR2OUT (GPIO_PORTD | GPIO_PF | 31) | ||
| 163 | #define PD31_BIN_SPI2_TXD (GPIO_PORTD | GPIO_BIN | 31) | ||
| 164 | |||
| 165 | |||
| 166 | #endif | ||
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx21.h b/arch/arm/plat-mxc/include/mach/iomux-mx21.h new file mode 100644 index 000000000000..63aaa972e275 --- /dev/null +++ b/arch/arm/plat-mxc/include/mach/iomux-mx21.h | |||
| @@ -0,0 +1,126 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 by Holger Schurig <hs4233@mail.mn-solutions.de> | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or | ||
| 5 | * modify it under the terms of the GNU General Public License | ||
| 6 | * as published by the Free Software Foundation; either version 2 | ||
| 7 | * of the License, or (at your option) any later version. | ||
| 8 | * This program is distributed in the hope that it will be useful, | ||
| 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 11 | * GNU General Public License for more details. | ||
| 12 | * | ||
| 13 | * You should have received a copy of the GNU General Public License | ||
| 14 | * along with this program; if not, write to the Free Software | ||
| 15 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
| 16 | * MA 02110-1301, USA. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #ifndef _MXC_IOMUX_MX21_H | ||
| 20 | #define _MXC_IOMUX_MX21_H | ||
| 21 | |||
| 22 | #ifndef GPIO_PORTA | ||
| 23 | #error Please include mach/iomux.h | ||
| 24 | #endif | ||
| 25 | |||
| 26 | |||
| 27 | /* Primary GPIO pin functions */ | ||
| 28 | |||
| 29 | #define PB22_PF_USBH1_BYP (GPIO_PORTB | GPIO_PF | 22) | ||
| 30 | #define PB25_PF_USBH1_ON (GPIO_PORTB | GPIO_PF | 25) | ||
| 31 | #define PC5_PF_USBOTG_SDA (GPIO_PORTC | GPIO_PF | 5) | ||
| 32 | #define PC6_PF_USBOTG_SCL (GPIO_PORTC | GPIO_PF | 6) | ||
| 33 | #define PC7_PF_USBOTG_ON (GPIO_PORTC | GPIO_PF | 7) | ||
| 34 | #define PC8_PF_USBOTG_FS (GPIO_PORTC | GPIO_PF | 8) | ||
| 35 | #define PC9_PF_USBOTG_OE (GPIO_PORTC | GPIO_PF | 9) | ||
| 36 | #define PC10_PF_USBOTG_TXDM (GPIO_PORTC | GPIO_PF | 10) | ||
| 37 | #define PC11_PF_USBOTG_TXDP (GPIO_PORTC | GPIO_PF | 11) | ||
| 38 | #define PC12_PF_USBOTG_RXDM (GPIO_PORTC | GPIO_PF | 12) | ||
| 39 | #define PC13_PF_USBOTG_RXDP (GPIO_PORTC | GPIO_PF | 13) | ||
| 40 | #define PC16_PF_SAP_FS (GPIO_PORTC | GPIO_PF | 16) | ||
| 41 | #define PC17_PF_SAP_RXD (GPIO_PORTC | GPIO_PF | 17) | ||
| 42 | #define PC18_PF_SAP_TXD (GPIO_PORTC | GPIO_PF | 18) | ||
| 43 | #define PC19_PF_SAP_CLK (GPIO_PORTC | GPIO_PF | 19) | ||
| 44 | #define PE0_PF_TEST_WB2 (GPIO_PORTE | GPIO_PF | 0) | ||
| 45 | #define PE1_PF_TEST_WB1 (GPIO_PORTE | GPIO_PF | 1) | ||
| 46 | #define PE2_PF_TEST_WB0 (GPIO_PORTE | GPIO_PF | 2) | ||
| 47 | #define PF1_PF_NFCE (GPIO_PORTF | GPIO_PF | 1) | ||
| 48 | #define PF3_PF_NFCLE (GPIO_PORTF | GPIO_PF | 3) | ||
| 49 | #define PF7_PF_NFIO0 (GPIO_PORTF | GPIO_PF | 7) | ||
| 50 | #define PF8_PF_NFIO1 (GPIO_PORTF | GPIO_PF | 8) | ||
| 51 | #define PF9_PF_NFIO2 (GPIO_PORTF | GPIO_PF | 9) | ||
| 52 | #define PF10_PF_NFIO3 (GPIO_PORTF | GPIO_PF | 10) | ||
| 53 | #define PF11_PF_NFIO4 (GPIO_PORTF | GPIO_PF | 11) | ||
| 54 | #define PF12_PF_NFIO5 (GPIO_PORTF | GPIO_PF | 12) | ||
| 55 | #define PF13_PF_NFIO6 (GPIO_PORTF | GPIO_PF | 13) | ||
| 56 | #define PF14_PF_NFIO7 (GPIO_PORTF | GPIO_PF | 14) | ||
| 57 | #define PF16_PF_RES (GPIO_PORTF | GPIO_PF | 16) | ||
| 58 | |||
| 59 | /* Alternate GPIO pin functions */ | ||
| 60 | |||
| 61 | #define PA5_AF_BMI_CLK_CS (GPIO_PORTA | GPIO_AF | 5) | ||
| 62 | #define PA6_AF_BMI_D0 (GPIO_PORTA | GPIO_AF | 6) | ||
| 63 | #define PA7_AF_BMI_D1 (GPIO_PORTA | GPIO_AF | 7) | ||
| 64 | #define PA8_AF_BMI_D2 (GPIO_PORTA | GPIO_AF | 8) | ||
| 65 | #define PA9_AF_BMI_D3 (GPIO_PORTA | GPIO_AF | 9) | ||
| 66 | #define PA10_AF_BMI_D4 (GPIO_PORTA | GPIO_AF | 10) | ||
| 67 | #define PA11_AF_BMI_D5 (GPIO_PORTA | GPIO_AF | 11) | ||
| 68 | #define PA12_AF_BMI_D6 (GPIO_PORTA | GPIO_AF | 12) | ||
| 69 | #define PA13_AF_BMI_D7 (GPIO_PORTA | GPIO_AF | 13) | ||
| 70 | #define PA14_AF_BMI_D8 (GPIO_PORTA | GPIO_AF | 14) | ||
| 71 | #define PA15_AF_BMI_D9 (GPIO_PORTA | GPIO_AF | 15) | ||
| 72 | #define PA16_AF_BMI_D10 (GPIO_PORTA | GPIO_AF | 16) | ||
| 73 | #define PA17_AF_BMI_D11 (GPIO_PORTA | GPIO_AF | 17) | ||
| 74 | #define PA18_AF_BMI_D12 (GPIO_PORTA | GPIO_AF | 18) | ||
| 75 | #define PA19_AF_BMI_D13 (GPIO_PORTA | GPIO_AF | 19) | ||
| 76 | #define PA20_AF_BMI_D14 (GPIO_PORTA | GPIO_AF | 20) | ||
| 77 | #define PA21_AF_BMI_D15 (GPIO_PORTA | GPIO_AF | 21) | ||
| 78 | #define PA22_AF_BMI_READ_REQ (GPIO_PORTA | GPIO_AF | 22) | ||
| 79 | #define PA23_AF_BMI_WRITE (GPIO_PORTA | GPIO_AF | 23) | ||
| 80 | #define PA29_AF_BMI_RX_FULL (GPIO_PORTA | GPIO_AF | 29) | ||
| 81 | #define PA30_AF_BMI_READ (GPIO_PORTA | GPIO_AF | 30) | ||
| 82 | |||
| 83 | /* AIN GPIO pin functions */ | ||
| 84 | |||
| 85 | #define PC14_AIN_SYS_CLK (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 14) | ||
| 86 | #define PD21_AIN_USBH2_FS (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 21) | ||
| 87 | #define PD22_AIN_USBH2_OE (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 22) | ||
| 88 | #define PD23_AIN_USBH2_TXDM (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 23) | ||
| 89 | #define PD24_AIN_USBH2_TXDP (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 24) | ||
| 90 | #define PE8_AIN_IR_TXD (GPIO_PORTE | GPIO_AIN | GPIO_OUT | 8) | ||
| 91 | #define PF0_AIN_PC_RST (GPIO_PORTF | GPIO_AIN | GPIO_OUT | 0) | ||
| 92 | #define PF1_AIN_PC_CE1 (GPIO_PORTF | GPIO_AIN | GPIO_OUT | 1) | ||
| 93 | #define PF2_AIN_PC_CE2 (GPIO_PORTF | GPIO_AIN | GPIO_OUT | 2) | ||
| 94 | #define PF3_AIN_PC_POE (GPIO_PORTF | GPIO_AIN | GPIO_OUT | 3) | ||
| 95 | #define PF4_AIN_PC_OE (GPIO_PORTF | GPIO_AIN | GPIO_OUT | 4) | ||
| 96 | #define PF5_AIN_PC_RW (GPIO_PORTF | GPIO_AIN | GPIO_OUT | 5) | ||
| 97 | |||
| 98 | /* BIN GPIO pin functions */ | ||
| 99 | |||
| 100 | #define PC14_BIN_SYS_CLK (GPIO_PORTC | GPIO_BIN | GPIO_OUT | 14) | ||
| 101 | #define PD27_BIN_EXT_DMA_GRANT (GPIO_PORTD | GPIO_BIN | GPIO_OUT | 27) | ||
| 102 | |||
| 103 | /* CIN GPIO pin functions */ | ||
| 104 | |||
| 105 | #define PB26_CIN_USBH1_RXDAT (GPIO_PORTB | GPIO_CIN | GPIO_OUT | 26) | ||
| 106 | |||
| 107 | /* AOUT GPIO pin functions */ | ||
| 108 | |||
| 109 | #define PA29_AOUT_BMI_WAIT (GPIO_PORTA | GPIO_AOUT | GPIO_IN | 29) | ||
| 110 | #define PD19_AOUT_USBH2_RXDM (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 19) | ||
| 111 | #define PD20_AOUT_USBH2_RXDP (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 20) | ||
| 112 | #define PD25_AOUT_EXT_DMAREQ (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 25) | ||
| 113 | #define PD26_AOUT_USBOTG_RXDAT (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 26) | ||
| 114 | #define PE9_AOUT_IR_RXD (GPIO_PORTE | GPIO_AOUT | GPIO_IN | 9) | ||
| 115 | #define PF6_AOUT_PC_BVD2 (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 6) | ||
| 116 | #define PF7_AOUT_PC_BVD1 (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 7) | ||
| 117 | #define PF8_AOUT_PC_VS2 (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 8) | ||
| 118 | #define PF9_AOUT_PC_VS1 (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 9) | ||
| 119 | #define PF10_AOUT_PC_WP (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 10) | ||
| 120 | #define PF11_AOUT_PC_READY (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 11) | ||
| 121 | #define PF12_AOUT_PC_WAIT (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 12) | ||
| 122 | #define PF13_AOUT_PC_CD2 (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 13) | ||
| 123 | #define PF14_AOUT_PC_CD1 (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 14) | ||
| 124 | |||
| 125 | |||
| 126 | #endif | ||
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx27.h b/arch/arm/plat-mxc/include/mach/iomux-mx27.h new file mode 100644 index 000000000000..5ac158b70f61 --- /dev/null +++ b/arch/arm/plat-mxc/include/mach/iomux-mx27.h | |||
| @@ -0,0 +1,207 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de> | ||
| 3 | * Copyright (C) 2009 by Holger Schurig <hs4233@mail.mn-solutions.de> | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or | ||
| 6 | * modify it under the terms of the GNU General Public License | ||
| 7 | * as published by the Free Software Foundation; either version 2 | ||
| 8 | * of the License, or (at your option) any later version. | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
| 17 | * MA 02110-1301, USA. | ||
| 18 | */ | ||
| 19 | |||
| 20 | #ifndef _MXC_IOMUX_MX27_H | ||
| 21 | #define _MXC_IOMUX_MX27_H | ||
| 22 | |||
| 23 | #ifndef GPIO_PORTA | ||
| 24 | #error Please include mach/iomux.h | ||
| 25 | #endif | ||
| 26 | |||
| 27 | |||
| 28 | /* Primary GPIO pin functions */ | ||
| 29 | |||
| 30 | #define PA0_PF_USBH2_CLK (GPIO_PORTA | GPIO_PF | 0) | ||
| 31 | #define PA1_PF_USBH2_DIR (GPIO_PORTA | GPIO_PF | 1) | ||
| 32 | #define PA2_PF_USBH2_DATA7 (GPIO_PORTA | GPIO_PF | 2) | ||
| 33 | #define PA3_PF_USBH2_NXT (GPIO_PORTA | GPIO_PF | 3) | ||
| 34 | #define PA4_PF_USBH2_STP (GPIO_PORTA | GPIO_PF | 4) | ||
| 35 | #define PB22_PF_USBH1_SUSP (GPIO_PORTB | GPIO_PF | 22) | ||
| 36 | #define PB25_PF_USBH1_RCV (GPIO_PORTB | GPIO_PF | 25) | ||
| 37 | #define PC5_PF_I2C2_SDA (GPIO_PORTC | GPIO_PF | GPIO_IN | 5) | ||
| 38 | #define PC6_PF_I2C2_SCL (GPIO_PORTC | GPIO_PF | GPIO_IN | 6) | ||
| 39 | #define PC7_PF_USBOTG_DATA5 (GPIO_PORTC | GPIO_PF | GPIO_OUT | 7) | ||
| 40 | #define PC8_PF_USBOTG_DATA6 (GPIO_PORTC | GPIO_PF | GPIO_OUT | 8) | ||
| 41 | #define PC9_PF_USBOTG_DATA0 (GPIO_PORTC | GPIO_PF | GPIO_OUT | 9) | ||
| 42 | #define PC10_PF_USBOTG_DATA2 (GPIO_PORTC | GPIO_PF | GPIO_OUT | 10) | ||
| 43 | #define PC11_PF_USBOTG_DATA1 (GPIO_PORTC | GPIO_PF | GPIO_OUT | 11) | ||
| 44 | #define PC12_PF_USBOTG_DATA4 (GPIO_PORTC | GPIO_PF | GPIO_OUT | 12) | ||
| 45 | #define PC13_PF_USBOTG_DATA3 (GPIO_PORTC | GPIO_PF | GPIO_OUT | 13) | ||
| 46 | #define PC16_PF_SSI4_FS (GPIO_PORTC | GPIO_PF | GPIO_IN | 16) | ||
| 47 | #define PC17_PF_SSI4_RXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 17) | ||
| 48 | #define PC18_PF_SSI4_TXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 18) | ||
| 49 | #define PC19_PF_SSI4_CLK (GPIO_PORTC | GPIO_PF | GPIO_IN | 19) | ||
| 50 | #define PC25_AF_GPT5_TIN (GPIO_PORTC | GPIO_AF | 25) | ||
| 51 | #define PC27_AF_GPT4_TIN (GPIO_PORTC | GPIO_AF | 27) | ||
| 52 | #define PD0_PF_SD3_CMD (GPIO_PORTD | GPIO_PF | 0) | ||
| 53 | #define PD1_PF_SD3_CLK (GPIO_PORTD | GPIO_PF | 1) | ||
| 54 | #define PD2_PF_ATA_DATA0 (GPIO_PORTD | GPIO_PF | 2) | ||
| 55 | #define PD3_PF_ATA_DATA1 (GPIO_PORTD | GPIO_PF | 3) | ||
| 56 | #define PD4_PF_ATA_DATA2 (GPIO_PORTD | GPIO_PF | 4) | ||
| 57 | #define PD5_PF_ATA_DATA3 (GPIO_PORTD | GPIO_PF | 5) | ||
| 58 | #define PD6_PF_ATA_DATA4 (GPIO_PORTD | GPIO_PF | 6) | ||
| 59 | #define PD7_PF_ATA_DATA5 (GPIO_PORTD | GPIO_PF | 7) | ||
| 60 | #define PD8_PF_ATA_DATA6 (GPIO_PORTD | GPIO_PF | 8) | ||
| 61 | #define PD9_PF_ATA_DATA7 (GPIO_PORTD | GPIO_PF | 9) | ||
| 62 | #define PD10_PF_ATA_DATA8 (GPIO_PORTD | GPIO_PF | 10) | ||
| 63 | #define PD11_PF_ATA_DATA9 (GPIO_PORTD | GPIO_PF | 11) | ||
| 64 | #define PD12_PF_ATA_DATA10 (GPIO_PORTD | GPIO_PF | 12) | ||
| 65 | #define PD13_PF_ATA_DATA11 (GPIO_PORTD | GPIO_PF | 13) | ||
| 66 | #define PD14_PF_ATA_DATA12 (GPIO_PORTD | GPIO_PF | 14) | ||
| 67 | #define PD15_PF_ATA_DATA13 (GPIO_PORTD | GPIO_PF | 15) | ||
| 68 | #define PD16_PF_ATA_DATA14 (GPIO_PORTD | GPIO_PF | 16) | ||
| 69 | #define PE0_PF_USBOTG_NXT (GPIO_PORTE | GPIO_PF | GPIO_OUT | 0) | ||
| 70 | #define PE1_PF_USBOTG_STP (GPIO_PORTE | GPIO_PF | GPIO_OUT | 1) | ||
| 71 | #define PE2_PF_USBOTG_DIR (GPIO_PORTE | GPIO_PF | GPIO_OUT | 2) | ||
| 72 | #define PE24_PF_USBOTG_CLK (GPIO_PORTE | GPIO_PF | GPIO_OUT | 24) | ||
| 73 | #define PE25_PF_USBOTG_DATA7 (GPIO_PORTE | GPIO_PF | GPIO_OUT | 25) | ||
| 74 | #define PF1_PF_NFCLE (GPIO_PORTF | GPIO_PF | 1) | ||
| 75 | #define PF3_PF_NFCE (GPIO_PORTF | GPIO_PF | 3) | ||
| 76 | #define PF7_PF_PC_POE (GPIO_PORTF | GPIO_PF | 7) | ||
| 77 | #define PF8_PF_PC_RW (GPIO_PORTF | GPIO_PF | 8) | ||
| 78 | #define PF9_PF_PC_IOIS16 (GPIO_PORTF | GPIO_PF | 9) | ||
| 79 | #define PF10_PF_PC_RST (GPIO_PORTF | GPIO_PF | 10) | ||
| 80 | #define PF11_PF_PC_BVD2 (GPIO_PORTF | GPIO_PF | 11) | ||
| 81 | #define PF12_PF_PC_BVD1 (GPIO_PORTF | GPIO_PF | 12) | ||
| 82 | #define PF13_PF_PC_VS2 (GPIO_PORTF | GPIO_PF | 13) | ||
| 83 | #define PF14_PF_PC_VS1 (GPIO_PORTF | GPIO_PF | 14) | ||
| 84 | #define PF16_PF_PC_PWRON (GPIO_PORTF | GPIO_PF | 16) | ||
| 85 | #define PF17_PF_PC_READY (GPIO_PORTF | GPIO_PF | 17) | ||
| 86 | #define PF18_PF_PC_WAIT (GPIO_PORTF | GPIO_PF | 18) | ||
| 87 | #define PF19_PF_PC_CD2 (GPIO_PORTF | GPIO_PF | 19) | ||
| 88 | #define PF20_PF_PC_CD1 (GPIO_PORTF | GPIO_PF | 20) | ||
| 89 | #define PF23_PF_ATA_DATA15 (GPIO_PORTF | GPIO_PF | 23) | ||
| 90 | |||
| 91 | /* Alternate GPIO pin functions */ | ||
| 92 | |||
| 93 | #define PB4_AF_MSHC_DATA0 (GPIO_PORTB | GPIO_AF | GPIO_OUT | 4) | ||
| 94 | #define PB5_AF_MSHC_DATA1 (GPIO_PORTB | GPIO_AF | GPIO_OUT | 5) | ||
| 95 | #define PB6_AF_MSHC_DATA2 (GPIO_PORTB | GPIO_AF | GPIO_OUT | 6) | ||
| 96 | #define PB7_AF_MSHC_DATA4 (GPIO_PORTB | GPIO_AF | GPIO_OUT | 7) | ||
| 97 | #define PB8_AF_MSHC_BS (GPIO_PORTB | GPIO_AF | GPIO_OUT | 8) | ||
| 98 | #define PB9_AF_MSHC_SCLK (GPIO_PORTB | GPIO_AF | GPIO_OUT | 9) | ||
| 99 | #define PB10_AF_UART6_TXD (GPIO_PORTB | GPIO_AF | GPIO_OUT | 10) | ||
| 100 | #define PB11_AF_UART6_RXD (GPIO_PORTB | GPIO_AF | GPIO_IN | 11) | ||
| 101 | #define PB12_AF_UART6_CTS (GPIO_PORTB | GPIO_AF | GPIO_OUT | 12) | ||
| 102 | #define PB13_AF_UART6_RTS (GPIO_PORTB | GPIO_AF | GPIO_IN | 13) | ||
| 103 | #define PB18_AF_UART5_TXD (GPIO_PORTB | GPIO_AF | GPIO_OUT | 18) | ||
| 104 | #define PB19_AF_UART5_RXD (GPIO_PORTB | GPIO_AF | GPIO_IN | 19) | ||
| 105 | #define PB20_AF_UART5_CTS (GPIO_PORTB | GPIO_AF | GPIO_OUT | 20) | ||
| 106 | #define PB21_AF_UART5_RTS (GPIO_PORTB | GPIO_AF | GPIO_IN | 21) | ||
| 107 | #define PC8_AF_FEC_MDIO (GPIO_PORTC | GPIO_AF | GPIO_IN | 8) | ||
| 108 | #define PC24_AF_GPT5_TOUT (GPIO_PORTC | GPIO_AF | 24) | ||
| 109 | #define PC26_AF_GPT4_TOUT (GPIO_PORTC | GPIO_AF | 26) | ||
| 110 | #define PD1_AF_ETMTRACE_PKT15 (GPIO_PORTD | GPIO_AF | 1) | ||
| 111 | #define PD6_AF_ETMTRACE_PKT14 (GPIO_PORTD | GPIO_AF | 6) | ||
| 112 | #define PD7_AF_ETMTRACE_PKT13 (GPIO_PORTD | GPIO_AF | 7) | ||
| 113 | #define PD9_AF_ETMTRACE_PKT12 (GPIO_PORTD | GPIO_AF | 9) | ||
| 114 | #define PD2_AF_SD3_D0 (GPIO_PORTD | GPIO_AF | 2) | ||
| 115 | #define PD3_AF_SD3_D1 (GPIO_PORTD | GPIO_AF | 3) | ||
| 116 | #define PD4_AF_SD3_D2 (GPIO_PORTD | GPIO_AF | 4) | ||
| 117 | #define PD5_AF_SD3_D3 (GPIO_PORTD | GPIO_AF | 5) | ||
| 118 | #define PD8_AF_FEC_MDIO (GPIO_PORTD | GPIO_AF | GPIO_IN | 8) | ||
| 119 | #define PD10_AF_ETMTRACE_PKT11 (GPIO_PORTD | GPIO_AF | 10) | ||
| 120 | #define PD11_AF_ETMTRACE_PKT10 (GPIO_PORTD | GPIO_AF | 11) | ||
| 121 | #define PD12_AF_ETMTRACE_PKT9 (GPIO_PORTD | GPIO_AF | 12) | ||
| 122 | #define PD13_AF_ETMTRACE_PKT8 (GPIO_PORTD | GPIO_AF | 13) | ||
| 123 | #define PD14_AF_ETMTRACE_PKT7 (GPIO_PORTD | GPIO_AF | 14) | ||
| 124 | #define PD15_AF_ETMTRACE_PKT6 (GPIO_PORTD | GPIO_AF | 15) | ||
| 125 | #define PD16_AF_ETMTRACE_PKT5 (GPIO_PORTD | GPIO_AF | 16) | ||
| 126 | #define PF1_AF_ETMTRACE_PKT0 (GPIO_PORTF | GPIO_AF | 1) | ||
| 127 | #define PF3_AF_ETMTRACE_PKT2 (GPIO_PORTF | GPIO_AF | 3) | ||
| 128 | #define PF5_AF_ETMPIPESTAT11 (GPIO_PORTF | GPIO_AF | 5) | ||
| 129 | #define PF7_AF_ATA_BUFFER_EN (GPIO_PORTF | GPIO_AF | 7) | ||
| 130 | #define PF8_AF_ATA_IORDY (GPIO_PORTF | GPIO_AF | 8) | ||
| 131 | #define PF9_AF_ATA_INTRQ (GPIO_PORTF | GPIO_AF | 9) | ||
| 132 | #define PF10_AF_ATA_RESET (GPIO_PORTF | GPIO_AF | 10) | ||
| 133 | #define PF11_AF_ATA_DMACK (GPIO_PORTF | GPIO_AF | 11) | ||
| 134 | #define PF12_AF_ATA_DMAREQ (GPIO_PORTF | GPIO_AF | 12) | ||
| 135 | #define PF13_AF_ATA_DA0 (GPIO_PORTF | GPIO_AF | 13) | ||
| 136 | #define PF14_AF_ATA_DA1 (GPIO_PORTF | GPIO_AF | 14) | ||
| 137 | #define PF15_AF_ETMTRACE_SYNC (GPIO_PORTF | GPIO_AF | 15) | ||
| 138 | #define PF16_AF_ATA_DA2 (GPIO_PORTF | GPIO_AF | 16) | ||
| 139 | #define PF17_AF_ATA_CS0 (GPIO_PORTF | GPIO_AF | 17) | ||
| 140 | #define PF18_AF_ATA_CS1 (GPIO_PORTF | GPIO_AF | 18) | ||
| 141 | #define PF19_AF_ATA_DIOW (GPIO_PORTF | GPIO_AF | 19) | ||
| 142 | #define PF20_AF_ATA_DIOR (GPIO_PORTF | GPIO_AF | 20) | ||
| 143 | #define PF22_AF_ETMTRACE_CLK (GPIO_PORTF | GPIO_AF | 22) | ||
| 144 | #define PF23_AF_ETMTRACE_PKT4 (GPIO_PORTF | GPIO_AF | 23) | ||
| 145 | |||
| 146 | /* AIN GPIO pin functions */ | ||
| 147 | |||
| 148 | #define PC14_AIN_SSI1_MCLK (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 14) | ||
| 149 | #define PC15_AIN_GPT6_TOUT (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 15) | ||
| 150 | #define PD0_AIN_FEC_TXD0 (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 0) | ||
| 151 | #define PD1_AIN_FEC_TXD1 (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 1) | ||
| 152 | #define PD2_AIN_FEC_TXD2 (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 2) | ||
| 153 | #define PD3_AIN_FEC_TXD3 (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 3) | ||
| 154 | #define PD9_AIN_FEC_MDC (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 9) | ||
| 155 | #define PD16_AIN_FEC_TX_ER (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 16) | ||
| 156 | #define PD27_AIN_EXT_DMA_GRANT (GPIO_PORTD | GPIO_AIN | GPIO_OUT | 27) | ||
| 157 | #define PF23_AIN_FEC_TX_EN (GPIO_PORTF | GPIO_AIN | GPIO_OUT | 23) | ||
| 158 | |||
| 159 | /* BIN GPIO pin functions */ | ||
| 160 | |||
| 161 | #define PC14_BIN_SSI2_MCLK (GPIO_PORTC | GPIO_BIN | GPIO_OUT | 14) | ||
| 162 | |||
| 163 | /* CIN GPIO pin functions */ | ||
| 164 | |||
| 165 | #define PD2_CIN_SLCDC1_DAT0 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 2) | ||
| 166 | #define PD3_CIN_SLCDC1_DAT1 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 3) | ||
| 167 | #define PD4_CIN_SLCDC1_DAT2 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 4) | ||
| 168 | #define PD5_CIN_SLCDC1_DAT3 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 5) | ||
| 169 | #define PD6_CIN_SLCDC1_DAT4 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 6) | ||
| 170 | #define PD7_CIN_SLCDC1_DAT5 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 7) | ||
| 171 | #define PD8_CIN_SLCDC1_DAT6 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 8) | ||
| 172 | #define PD9_CIN_SLCDC1_DAT7 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 9) | ||
| 173 | #define PD10_CIN_SLCDC1_DAT8 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 10) | ||
| 174 | #define PD11_CIN_SLCDC1_DAT9 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 11) | ||
| 175 | #define PD12_CIN_SLCDC1_DAT10 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 12) | ||
| 176 | #define PD13_CIN_SLCDC1_DAT11 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 13) | ||
| 177 | #define PD14_CIN_SLCDC1_DAT12 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 14) | ||
| 178 | #define PD15_CIN_SLCDC1_DAT13 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 15) | ||
| 179 | #define PD16_CIN_SLCDC1_DAT14 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 16) | ||
| 180 | #define PD23_CIN_SLCDC1_DAT15 (GPIO_PORTD | GPIO_CIN | GPIO_OUT | 23) | ||
| 181 | #define PF27_CIN_EXT_DMA_GRANT (GPIO_PORTF | GPIO_CIN | GPIO_OUT | 27) | ||
| 182 | /* LCDC_TESTx on PBxx omitted, because it's not clear what they do */ | ||
| 183 | |||
| 184 | /* AOUT GPIO pin functions */ | ||
| 185 | |||
| 186 | #define PC14_AOUT_GPT6_TIN (GPIO_PORTC | GPIO_AOUT | GPIO_IN | 14) | ||
| 187 | #define PD4_AOUT_FEC_RX_ER (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 4) | ||
| 188 | #define PD5_AOUT_FEC_RXD1 (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 5) | ||
| 189 | #define PD6_AOUT_FEC_RXD2 (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 6) | ||
| 190 | #define PD7_AOUT_FEC_RXD3 (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 7) | ||
| 191 | #define PD10_AOUT_FEC_CRS (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 10) | ||
| 192 | #define PD11_AOUT_FEC_TX_CLK (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 11) | ||
| 193 | #define PD12_AOUT_FEC_RXD0 (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 12) | ||
| 194 | #define PD13_AOUT_FEC_RX_DV (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 13) | ||
| 195 | #define PD14_AOUT_FEC_RX_CLK (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 14) | ||
| 196 | #define PD15_AOUT_FEC_COL (GPIO_PORTD | GPIO_AOUT | GPIO_IN | 15) | ||
| 197 | |||
| 198 | #define PC17_BOUT_PC_IOIS16 (GPIO_PORTC | GPIO_BOUT | GPIO_IN | 17) | ||
| 199 | #define PC18_BOUT_PC_BVD2 (GPIO_PORTC | GPIO_BOUT | GPIO_IN | 18) | ||
| 200 | #define PC19_BOUT_PC_BVD1 (GPIO_PORTC | GPIO_BOUT | GPIO_IN | 19) | ||
| 201 | #define PC28_BOUT_PC_BVD2 (GPIO_PORTC | GPIO_BOUT | GPIO_IN | 28) | ||
| 202 | #define PC29_BOUT_PC_VS1 (GPIO_PORTC | GPIO_BOUT | GPIO_IN | 29) | ||
| 203 | #define PC30_BOUT_PC_READY (GPIO_PORTC | GPIO_BOUT | GPIO_IN | 30) | ||
| 204 | #define PC31_BOUT_PC_WAIT (GPIO_PORTC | GPIO_BOUT | GPIO_IN | 31) | ||
| 205 | |||
| 206 | |||
| 207 | #endif /* _MXC_GPIO_MX1_MX2_H */ | ||
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx2x.h b/arch/arm/plat-mxc/include/mach/iomux-mx2x.h new file mode 100644 index 000000000000..fb5ae638e79f --- /dev/null +++ b/arch/arm/plat-mxc/include/mach/iomux-mx2x.h | |||
| @@ -0,0 +1,237 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de> | ||
| 3 | * Copyright (C) 2009 by Holger Schurig <hs4233@mail.mn-solutions.de> | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or | ||
| 6 | * modify it under the terms of the GNU General Public License | ||
| 7 | * as published by the Free Software Foundation; either version 2 | ||
| 8 | * of the License, or (at your option) any later version. | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
| 17 | * MA 02110-1301, USA. | ||
| 18 | */ | ||
| 19 | |||
| 20 | #ifndef _MXC_IOMUX_MX2x_H | ||
| 21 | #define _MXC_IOMUX_MX2x_H | ||
| 22 | |||
| 23 | #ifndef GPIO_PORTA | ||
| 24 | #error Please include mach/iomux.h | ||
| 25 | #endif | ||
| 26 | |||
| 27 | |||
| 28 | /* Primary GPIO pin functions */ | ||
| 29 | |||
| 30 | #define PA5_PF_LSCLK (GPIO_PORTA | GPIO_PF | GPIO_OUT | 5) | ||
| 31 | #define PA6_PF_LD0 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 6) | ||
| 32 | #define PA7_PF_LD1 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 7) | ||
| 33 | #define PA8_PF_LD2 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 8) | ||
| 34 | #define PA9_PF_LD3 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 9) | ||
| 35 | #define PA10_PF_LD4 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 10) | ||
| 36 | #define PA11_PF_LD5 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 11) | ||
| 37 | #define PA12_PF_LD6 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 12) | ||
| 38 | #define PA13_PF_LD7 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 13) | ||
| 39 | #define PA14_PF_LD8 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 14) | ||
| 40 | #define PA15_PF_LD9 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 15) | ||
| 41 | #define PA16_PF_LD10 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 16) | ||
| 42 | #define PA17_PF_LD11 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 17) | ||
| 43 | #define PA18_PF_LD12 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 18) | ||
| 44 | #define PA19_PF_LD13 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 19) | ||
| 45 | #define PA20_PF_LD14 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 20) | ||
| 46 | #define PA21_PF_LD15 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 21) | ||
| 47 | #define PA22_PF_LD16 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 22) | ||
| 48 | #define PA23_PF_LD17 (GPIO_PORTA | GPIO_PF | GPIO_OUT | 23) | ||
| 49 | #define PA24_PF_REV (GPIO_PORTA | GPIO_PF | GPIO_OUT | 24) | ||
| 50 | #define PA25_PF_CLS (GPIO_PORTA | GPIO_PF | GPIO_OUT | 25) | ||
| 51 | #define PA26_PF_PS (GPIO_PORTA | GPIO_PF | GPIO_OUT | 26) | ||
| 52 | #define PA27_PF_SPL_SPR (GPIO_PORTA | GPIO_PF | GPIO_OUT | 27) | ||
| 53 | #define PA28_PF_HSYNC (GPIO_PORTA | GPIO_PF | GPIO_OUT | 28) | ||
| 54 | #define PA29_PF_VSYNC (GPIO_PORTA | GPIO_PF | GPIO_OUT | 29) | ||
| 55 | #define PA30_PF_CONTRAST (GPIO_PORTA | GPIO_PF | GPIO_OUT | 30) | ||
| 56 | #define PA31_PF_OE_ACD (GPIO_PORTA | GPIO_PF | GPIO_OUT | 31) | ||
| 57 | #define PB4_PF_SD2_D0 (GPIO_PORTB | GPIO_PF | 4) | ||
| 58 | #define PB5_PF_SD2_D1 (GPIO_PORTB | GPIO_PF | 5) | ||
| 59 | #define PB6_PF_SD2_D2 (GPIO_PORTB | GPIO_PF | 6) | ||
| 60 | #define PB7_PF_SD2_D3 (GPIO_PORTB | GPIO_PF | 7) | ||
| 61 | #define PB8_PF_SD2_CMD (GPIO_PORTB | GPIO_PF | 8) | ||
| 62 | #define PB9_PF_SD2_CLK (GPIO_PORTB | GPIO_PF | 9) | ||
| 63 | #define PB10_PF_CSI_D0 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 10) | ||
| 64 | #define PB11_PF_CSI_D1 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 11) | ||
| 65 | #define PB12_PF_CSI_D2 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 12) | ||
| 66 | #define PB13_PF_CSI_D3 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 13) | ||
| 67 | #define PB14_PF_CSI_D4 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 14) | ||
| 68 | #define PB15_PF_CSI_MCLK (GPIO_PORTB | GPIO_PF | GPIO_OUT | 15) | ||
| 69 | #define PB16_PF_CSI_PIXCLK (GPIO_PORTB | GPIO_PF | GPIO_OUT | 16) | ||
| 70 | #define PB17_PF_CSI_D5 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 17) | ||
| 71 | #define PB18_PF_CSI_D6 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 18) | ||
| 72 | #define PB19_PF_CSI_D7 (GPIO_PORTB | GPIO_PF | GPIO_OUT | 19) | ||
| 73 | #define PB20_PF_CSI_VSYNC (GPIO_PORTB | GPIO_PF | GPIO_OUT | 20) | ||
| 74 | #define PB21_PF_CSI_HSYNC (GPIO_PORTB | GPIO_PF | GPIO_OUT | 21) | ||
| 75 | #define PB23_PF_USB_PWR (GPIO_PORTB | GPIO_PF | 23) | ||
| 76 | #define PB24_PF_USB_OC (GPIO_PORTB | GPIO_PF | 24) | ||
| 77 | #define PB26_PF_USBH1_FS (GPIO_PORTB | GPIO_PF | 26) | ||
| 78 | #define PB27_PF_USBH1_OE (GPIO_PORTB | GPIO_PF | 27) | ||
| 79 | #define PB28_PF_USBH1_TXDM (GPIO_PORTB | GPIO_PF | 28) | ||
| 80 | #define PB29_PF_USBH1_TXDP (GPIO_PORTB | GPIO_PF | 29) | ||
| 81 | #define PB30_PF_USBH1_RXDM (GPIO_PORTB | GPIO_PF | 30) | ||
| 82 | #define PB31_PF_USBH1_RXDP (GPIO_PORTB | GPIO_PF | 31) | ||
| 83 | #define PC14_PF_TOUT (GPIO_PORTC | GPIO_PF | 14) | ||
| 84 | #define PC15_PF_TIN (GPIO_PORTC | GPIO_PF | 15) | ||
| 85 | #define PC20_PF_SSI1_FS (GPIO_PORTC | GPIO_PF | GPIO_IN | 20) | ||
| 86 | #define PC21_PF_SSI1_RXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 21) | ||
| 87 | #define PC22_PF_SSI1_TXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 22) | ||
| 88 | #define PC23_PF_SSI1_CLK (GPIO_PORTC | GPIO_PF | GPIO_IN | 23) | ||
| 89 | #define PC24_PF_SSI2_FS (GPIO_PORTC | GPIO_PF | GPIO_IN | 24) | ||
| 90 | #define PC25_PF_SSI2_RXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 25) | ||
| 91 | #define PC26_PF_SSI2_TXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 26) | ||
| 92 | #define PC27_PF_SSI2_CLK (GPIO_PORTC | GPIO_PF | GPIO_IN | 27) | ||
| 93 | #define PC28_PF_SSI3_FS (GPIO_PORTC | GPIO_PF | GPIO_IN | 28) | ||
| 94 | #define PC29_PF_SSI3_RXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 29) | ||
| 95 | #define PC30_PF_SSI3_TXD (GPIO_PORTC | GPIO_PF | GPIO_IN | 30) | ||
| 96 | #define PC31_PF_SSI3_CLK (GPIO_PORTC | GPIO_PF | GPIO_IN | 31) | ||
| 97 | #define PD17_PF_I2C_DATA (GPIO_PORTD | GPIO_PF | GPIO_OUT | 17) | ||
| 98 | #define PD18_PF_I2C_CLK (GPIO_PORTD | GPIO_PF | GPIO_OUT | 18) | ||
| 99 | #define PD19_PF_CSPI2_SS2 (GPIO_PORTD | GPIO_PF | 19) | ||
| 100 | #define PD20_PF_CSPI2_SS1 (GPIO_PORTD | GPIO_PF | 20) | ||
| 101 | #define PD21_PF_CSPI2_SS0 (GPIO_PORTD | GPIO_PF | 21) | ||
| 102 | #define PD22_PF_CSPI2_SCLK (GPIO_PORTD | GPIO_PF | 22) | ||
| 103 | #define PD23_PF_CSPI2_MISO (GPIO_PORTD | GPIO_PF | 23) | ||
| 104 | #define PD24_PF_CSPI2_MOSI (GPIO_PORTD | GPIO_PF | 24) | ||
| 105 | #define PD25_PF_CSPI1_RDY (GPIO_PORTD | GPIO_PF | GPIO_OUT | 25) | ||
| 106 | #define PD26_PF_CSPI1_SS2 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 26) | ||
| 107 | #define PD27_PF_CSPI1_SS1 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 27) | ||
| 108 | #define PD28_PF_CSPI1_SS0 (GPIO_PORTD | GPIO_PF | GPIO_OUT | 28) | ||
| 109 | #define PD29_PF_CSPI1_SCLK (GPIO_PORTD | GPIO_PF | GPIO_OUT | 29) | ||
| 110 | #define PD30_PF_CSPI1_MISO (GPIO_PORTD | GPIO_PF | GPIO_IN | 30) | ||
| 111 | #define PD31_PF_CSPI1_MOSI (GPIO_PORTD | GPIO_PF | GPIO_OUT | 31) | ||
| 112 | #define PE3_PF_UART2_CTS (GPIO_PORTE | GPIO_PF | GPIO_OUT | 3) | ||
| 113 | #define PE4_PF_UART2_RTS (GPIO_PORTE | GPIO_PF | GPIO_IN | 4) | ||
| 114 | #define PE5_PF_PWMO (GPIO_PORTE | GPIO_PF | 5) | ||
| 115 | #define PE6_PF_UART2_TXD (GPIO_PORTE | GPIO_PF | GPIO_OUT | 6) | ||
| 116 | #define PE7_PF_UART2_RXD (GPIO_PORTE | GPIO_PF | GPIO_IN | 7) | ||
| 117 | #define PE8_PF_UART3_TXD (GPIO_PORTE | GPIO_PF | GPIO_OUT | 8) | ||
| 118 | #define PE9_PF_UART3_RXD (GPIO_PORTE | GPIO_PF | GPIO_IN | 9) | ||
| 119 | #define PE10_PF_UART3_CTS (GPIO_PORTE | GPIO_PF | GPIO_OUT | 10) | ||
| 120 | #define PE11_PF_UART3_RTS (GPIO_PORTE | GPIO_PF | GPIO_IN | 11) | ||
| 121 | #define PE12_PF_UART1_TXD (GPIO_PORTE | GPIO_PF | GPIO_OUT | 12) | ||
| 122 | #define PE13_PF_UART1_RXD (GPIO_PORTE | GPIO_PF | GPIO_IN | 13) | ||
| 123 | #define PE14_PF_UART1_CTS (GPIO_PORTE | GPIO_PF | GPIO_OUT | 14) | ||
| 124 | #define PE15_PF_UART1_RTS (GPIO_PORTE | GPIO_PF | GPIO_IN | 15) | ||
| 125 | #define PE16_PF_RTCK (GPIO_PORTE | GPIO_PF | GPIO_OUT | 16) | ||
| 126 | #define PE17_PF_RESET_OUT (GPIO_PORTE | GPIO_PF | 17) | ||
| 127 | #define PE18_PF_SD1_D0 (GPIO_PORTE | GPIO_PF | 18) | ||
| 128 | #define PE19_PF_SD1_D1 (GPIO_PORTE | GPIO_PF | 19) | ||
| 129 | #define PE20_PF_SD1_D2 (GPIO_PORTE | GPIO_PF | 20) | ||
| 130 | #define PE21_PF_SD1_D3 (GPIO_PORTE | GPIO_PF | 21) | ||
| 131 | #define PE22_PF_SD1_CMD (GPIO_PORTE | GPIO_PF | 22) | ||
| 132 | #define PE23_PF_SD1_CLK (GPIO_PORTE | GPIO_PF | 23) | ||
| 133 | #define PF0_PF_NRFB (GPIO_PORTF | GPIO_PF | 0) | ||
| 134 | #define PF2_PF_NFWP (GPIO_PORTF | GPIO_PF | 2) | ||
| 135 | #define PF4_PF_NFALE (GPIO_PORTF | GPIO_PF | 4) | ||
| 136 | #define PF5_PF_NFRE (GPIO_PORTF | GPIO_PF | 5) | ||
| 137 | #define PF6_PF_NFWE (GPIO_PORTF | GPIO_PF | 6) | ||
| 138 | #define PF15_PF_CLKO (GPIO_PORTF | GPIO_PF | 15) | ||
| 139 | #define PF21_PF_CS4 (GPIO_PORTF | GPIO_PF | 21) | ||
| 140 | #define PF22_PF_CS5 (GPIO_PORTF | GPIO_PF | 22) | ||
| 141 | |||
| 142 | /* Alternate GPIO pin functions */ | ||
| 143 | |||
| 144 | #define PB26_AF_UART4_RTS (GPIO_PORTB | GPIO_AF | GPIO_IN | 26) | ||
| 145 | #define PB28_AF_UART4_TXD (GPIO_PORTB | GPIO_AF | GPIO_OUT | 28) | ||
| 146 | #define PB29_AF_UART4_CTS (GPIO_PORTB | GPIO_AF | GPIO_OUT | 29) | ||
| 147 | #define PB31_AF_UART4_RXD (GPIO_PORTB | GPIO_AF | GPIO_IN | 31) | ||
| 148 | #define PC28_AF_SLCDC2_D0 (GPIO_PORTC | GPIO_AF | 28) | ||
| 149 | #define PC29_AF_SLCDC2_RS (GPIO_PORTC | GPIO_AF | 29) | ||
| 150 | #define PC30_AF_SLCDC2_CS (GPIO_PORTC | GPIO_AF | 30) | ||
| 151 | #define PC31_AF_SLCDC2_CLK (GPIO_PORTC | GPIO_AF | 31) | ||
| 152 | #define PD19_AF_USBH2_DATA4 (GPIO_PORTD | GPIO_AF | 19) | ||
| 153 | #define PD20_AF_USBH2_DATA3 (GPIO_PORTD | GPIO_AF | 20) | ||
| 154 | #define PD21_AF_USBH2_DATA6 (GPIO_PORTD | GPIO_AF | 21) | ||
| 155 | #define PD22_AF_USBH2_DATA0 (GPIO_PORTD | GPIO_AF | 22) | ||
| 156 | #define PD23_AF_USBH2_DATA2 (GPIO_PORTD | GPIO_AF | 23) | ||
| 157 | #define PD24_AF_USBH2_DATA1 (GPIO_PORTD | GPIO_AF | 24) | ||
| 158 | #define PD26_AF_USBH2_DATA5 (GPIO_PORTD | GPIO_AF | 26) | ||
| 159 | #define PE0_AF_KP_COL6 (GPIO_PORTE | GPIO_AF | 0) | ||
| 160 | #define PE1_AF_KP_ROW6 (GPIO_PORTE | GPIO_AF | 1) | ||
| 161 | #define PE2_AF_KP_ROW7 (GPIO_PORTE | GPIO_AF | 2) | ||
| 162 | #define PE3_AF_KP_COL7 (GPIO_PORTE | GPIO_AF | 3) | ||
| 163 | #define PE4_AF_KP_ROW7 (GPIO_PORTE | GPIO_AF | 4) | ||
| 164 | #define PE6_AF_KP_COL6 (GPIO_PORTE | GPIO_AF | 6) | ||
| 165 | #define PE7_AF_KP_ROW6 (GPIO_PORTE | GPIO_AF | 7) | ||
| 166 | #define PE16_AF_OWIRE (GPIO_PORTE | GPIO_AF | 16) | ||
| 167 | #define PE18_AF_CSPI3_MISO (GPIO_PORTE | GPIO_AF | GPIO_IN | 18) | ||
| 168 | #define PE21_AF_CSPI3_SS (GPIO_PORTE | GPIO_AF | GPIO_OUT | 21) | ||
| 169 | #define PE22_AF_CSPI3_MOSI (GPIO_PORTE | GPIO_AF | GPIO_OUT | 22) | ||
| 170 | #define PE23_AF_CSPI3_SCLK (GPIO_PORTE | GPIO_AF | GPIO_OUT | 23) | ||
| 171 | |||
| 172 | /* AIN GPIO pin functions */ | ||
| 173 | |||
| 174 | #define PA6_AIN_SLCDC1_DAT0 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 6) | ||
| 175 | #define PA7_AIN_SLCDC1_DAT1 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 7) | ||
| 176 | #define PA8_AIN_SLCDC1_DAT2 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 8) | ||
| 177 | #define PA0_AIN_SLCDC1_DAT3 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 0) | ||
| 178 | #define PA11_AIN_SLCDC1_DAT5 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 11) | ||
| 179 | #define PA13_AIN_SLCDC1_DAT7 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 13) | ||
| 180 | #define PA15_AIN_SLCDC1_DAT9 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 15) | ||
| 181 | #define PA17_AIN_SLCDC1_DAT11 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 17) | ||
| 182 | #define PA19_AIN_SLCDC1_DAT13 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 19) | ||
| 183 | #define PA21_AIN_SLCDC1_DAT15 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 21) | ||
| 184 | #define PA22_AIN_EXT_DMAGRANT (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 22) | ||
| 185 | #define PA24_AIN_SLCDC1_D0 (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 24) | ||
| 186 | #define PA25_AIN_SLCDC1_RS (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 25) | ||
| 187 | #define PA26_AIN_SLCDC1_CS (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 26) | ||
| 188 | #define PA27_AIN_SLCDC1_CLK (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 27) | ||
| 189 | #define PB6_AIN_SLCDC1_D0 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 6) | ||
| 190 | #define PB7_AIN_SLCDC1_RS (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 7) | ||
| 191 | #define PB8_AIN_SLCDC1_CS (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 8) | ||
| 192 | #define PB9_AIN_SLCDC1_CLK (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 9) | ||
| 193 | #define PB25_AIN_SLCDC1_DAT0 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 25) | ||
| 194 | #define PB26_AIN_SLCDC1_DAT1 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 26) | ||
| 195 | #define PB27_AIN_SLCDC1_DAT2 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 27) | ||
| 196 | #define PB28_AIN_SLCDC1_DAT3 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 28) | ||
| 197 | #define PB29_AIN_SLCDC1_DAT4 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 29) | ||
| 198 | #define PB30_AIN_SLCDC1_DAT5 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 30) | ||
| 199 | #define PB31_AIN_SLCDC1_DAT6 (GPIO_PORTB | GPIO_AIN | GPIO_OUT | 31) | ||
| 200 | #define PC5_AIN_SLCDC1_DAT7 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 5) | ||
| 201 | #define PC6_AIN_SLCDC1_DAT8 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 6) | ||
| 202 | #define PC7_AIN_SLCDC1_DAT9 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 7) | ||
| 203 | #define PC8_AIN_SLCDC1_DAT10 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 8) | ||
| 204 | #define PC9_AIN_SLCDC1_DAT11 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 9) | ||
| 205 | #define PC10_AIN_SLCDC1_DAT12 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 10) | ||
| 206 | #define PC11_AIN_SLCDC1_DAT13 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 11) | ||
| 207 | #define PC12_AIN_SLCDC1_DAT14 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 12) | ||
| 208 | #define PC13_AIN_SLCDC1_DAT15 (GPIO_PORTC | GPIO_AIN | GPIO_OUT | 13) | ||
| 209 | #define PE5_AIN_PC_SPKOUT (GPIO_PORTE | GPIO_AIN | GPIO_OUT | 5) | ||
| 210 | |||
| 211 | /* BIN GPIO pin functions */ | ||
| 212 | |||
| 213 | #define PE5_BIN_TOUT2 (GPIO_PORTE | GPIO_BIN | GPIO_OUT | 5) | ||
| 214 | |||
| 215 | /* CIN GPIO pin functions */ | ||
| 216 | |||
| 217 | #define PA14_CIN_SLCDC1_DAT0 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 14) | ||
| 218 | #define PA15_CIN_SLCDC1_DAT1 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 15) | ||
| 219 | #define PA16_CIN_SLCDC1_DAT2 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 16) | ||
| 220 | #define PA17_CIN_SLCDC1_DAT3 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 17) | ||
| 221 | #define PA18_CIN_SLCDC1_DAT4 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 18) | ||
| 222 | #define PA19_CIN_SLCDC1_DAT5 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 19) | ||
| 223 | #define PA20_CIN_SLCDC1_DAT6 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 20) | ||
| 224 | #define PA21_CIN_SLCDC1_DAT7 (GPIO_PORTA | GPIO_CIN | GPIO_OUT | 21) | ||
| 225 | #define PB30_CIN_UART4_CTS (GPIO_PORTB | GPIO_CIN | GPIO_OUT | 30) | ||
| 226 | #define PE5_CIN_TOUT3 (GPIO_PORTE | GPIO_CIN | GPIO_OUT | 5) | ||
| 227 | |||
| 228 | /* AOUT GPIO pin functions */ | ||
| 229 | |||
| 230 | #define PB29_AOUT_UART4_RXD (GPIO_PORTB | GPIO_AOUT | GPIO_IN | 29) | ||
| 231 | #define PB31_AOUT_UART4_RTS (GPIO_PORTB | GPIO_AOUT | GPIO_IN | 31) | ||
| 232 | #define PC8_AOUT_USBOTG_TXR_INT (GPIO_PORTC | GPIO_AOUT | GPIO_IN | 8) | ||
| 233 | #define PC15_AOUT_WKGD (GPIO_PORTC | GPIO_AOUT | GPIO_IN | 15) | ||
| 234 | #define PF21_AOUT_DTACK (GPIO_PORTF | GPIO_AOUT | GPIO_IN | 21) | ||
| 235 | |||
| 236 | |||
| 237 | #endif | ||
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx3.h b/arch/arm/plat-mxc/include/mach/iomux-mx3.h index c9198c0aea18..ab838cfe94f9 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx3.h +++ b/arch/arm/plat-mxc/include/mach/iomux-mx3.h | |||
| @@ -92,7 +92,7 @@ enum iomux_gp_func { | |||
| 92 | MUX_EXTDMAREQ2_MBX_SEL = 1 << 15, | 92 | MUX_EXTDMAREQ2_MBX_SEL = 1 << 15, |
| 93 | MUX_TAMPER_DETECT_EN = 1 << 16, | 93 | MUX_TAMPER_DETECT_EN = 1 << 16, |
| 94 | MUX_PGP_USB_4WIRE = 1 << 17, | 94 | MUX_PGP_USB_4WIRE = 1 << 17, |
| 95 | MUX_PGB_USB_COMMON = 1 << 18, | 95 | MUX_PGP_USB_COMMON = 1 << 18, |
| 96 | MUX_SDHC_MEMSTICK1 = 1 << 19, | 96 | MUX_SDHC_MEMSTICK1 = 1 << 19, |
| 97 | MUX_SDHC_MEMSTICK2 = 1 << 20, | 97 | MUX_SDHC_MEMSTICK2 = 1 << 20, |
| 98 | MUX_PGP_SPLL_BYP = 1 << 21, | 98 | MUX_PGP_SPLL_BYP = 1 << 21, |
| @@ -109,21 +109,44 @@ enum iomux_gp_func { | |||
| 109 | }; | 109 | }; |
| 110 | 110 | ||
| 111 | /* | 111 | /* |
| 112 | * This function enables/disables the general purpose function for a particular | 112 | * setups a single pin: |
| 113 | * signal. | 113 | * - reserves the pin so that it is not claimed by another driver |
| 114 | * - setups the iomux according to the configuration | ||
| 115 | * - if the pin is configured as a GPIO, we claim it throug kernel gpiolib | ||
| 116 | */ | ||
| 117 | int mxc_iomux_setup_pin(const unsigned int pin, const char *label); | ||
| 118 | /* | ||
| 119 | * setups mutliple pins | ||
| 120 | * convenient way to call the above function with tables | ||
| 114 | */ | 121 | */ |
| 115 | void iomux_config_gpr(enum iomux_gp_func , bool); | 122 | int mxc_iomux_setup_multiple_pins(unsigned int *pin_list, unsigned count, |
| 123 | const char *label); | ||
| 116 | 124 | ||
| 117 | /* | 125 | /* |
| 118 | * set the mode for a IOMUX pin. | 126 | * releases a single pin: |
| 127 | * - make it available for a future use by another driver | ||
| 128 | * - frees the GPIO if the pin was configured as GPIO | ||
| 129 | * - DOES NOT reconfigure the IOMUX in its reset state | ||
| 119 | */ | 130 | */ |
| 120 | int mxc_iomux_mode(unsigned int); | 131 | void mxc_iomux_release_pin(const unsigned int pin); |
| 132 | /* | ||
| 133 | * releases multiple pins | ||
| 134 | * convenvient way to call the above function with tables | ||
| 135 | */ | ||
| 136 | void mxc_iomux_release_multiple_pins(unsigned int *pin_list, int count); | ||
| 121 | 137 | ||
| 122 | /* | 138 | /* |
| 123 | * This function enables/disables the general purpose function for a particular | 139 | * This function enables/disables the general purpose function for a particular |
| 124 | * signal. | 140 | * signal. |
| 125 | */ | 141 | */ |
| 126 | void mxc_iomux_set_gpr(enum iomux_gp_func, bool); | 142 | void mxc_iomux_set_gpr(enum iomux_gp_func, bool en); |
| 143 | |||
| 144 | /* | ||
| 145 | * This function only configures the iomux hardware. | ||
| 146 | * It is called by the setup functions and should not be called directly anymore. | ||
| 147 | * It is here visible for backward compatibility | ||
| 148 | */ | ||
| 149 | int mxc_iomux_mode(unsigned int pin_mode); | ||
| 127 | 150 | ||
| 128 | #define IOMUX_PADNUM_MASK 0x1ff | 151 | #define IOMUX_PADNUM_MASK 0x1ff |
| 129 | #define IOMUX_GPIONUM_SHIFT 9 | 152 | #define IOMUX_GPIONUM_SHIFT 9 |
| @@ -144,6 +167,11 @@ void mxc_iomux_set_gpr(enum iomux_gp_func, bool); | |||
| 144 | MXC_GPIO_IRQ_START) | 167 | MXC_GPIO_IRQ_START) |
| 145 | 168 | ||
| 146 | /* | 169 | /* |
| 170 | * The number of gpio devices among the pads | ||
| 171 | */ | ||
| 172 | #define GPIO_PORT_MAX 3 | ||
| 173 | |||
| 174 | /* | ||
| 147 | * This enumeration is constructed based on the Section | 175 | * This enumeration is constructed based on the Section |
| 148 | * "sw_pad_ctl & sw_mux_ctl details" of the MX31 IC Spec. Each enumerated | 176 | * "sw_pad_ctl & sw_mux_ctl details" of the MX31 IC Spec. Each enumerated |
| 149 | * value is constructed based on the rules described above. | 177 | * value is constructed based on the rules described above. |
| @@ -480,6 +508,9 @@ enum iomux_pins { | |||
| 480 | MX31_PIN_CAPTURE = IOMUX_PIN( 7, 327), | 508 | MX31_PIN_CAPTURE = IOMUX_PIN( 7, 327), |
| 481 | }; | 509 | }; |
| 482 | 510 | ||
| 511 | #define PIN_MAX 327 | ||
| 512 | #define NB_PORTS 12 /* NB_PINS/32, we chose 32 pins per "PORT" */ | ||
| 513 | |||
| 483 | /* | 514 | /* |
| 484 | * Convenience values for use with mxc_iomux_mode() | 515 | * Convenience values for use with mxc_iomux_mode() |
| 485 | * | 516 | * |
| @@ -507,7 +538,9 @@ enum iomux_pins { | |||
| 507 | #define MX31_PIN_CSPI1_SS1__SS1 IOMUX_MODE(MX31_PIN_CSPI1_SS1, IOMUX_CONFIG_FUNC) | 538 | #define MX31_PIN_CSPI1_SS1__SS1 IOMUX_MODE(MX31_PIN_CSPI1_SS1, IOMUX_CONFIG_FUNC) |
| 508 | #define MX31_PIN_CSPI1_SS2__SS2 IOMUX_MODE(MX31_PIN_CSPI1_SS2, IOMUX_CONFIG_FUNC) | 539 | #define MX31_PIN_CSPI1_SS2__SS2 IOMUX_MODE(MX31_PIN_CSPI1_SS2, IOMUX_CONFIG_FUNC) |
| 509 | #define MX31_PIN_CSPI2_MOSI__MOSI IOMUX_MODE(MX31_PIN_CSPI2_MOSI, IOMUX_CONFIG_FUNC) | 540 | #define MX31_PIN_CSPI2_MOSI__MOSI IOMUX_MODE(MX31_PIN_CSPI2_MOSI, IOMUX_CONFIG_FUNC) |
| 541 | #define MX31_PIN_CSPI2_MOSI__SCL IOMUX_MODE(MX31_PIN_CSPI2_MOSI, IOMUX_CONFIG_ALT1) | ||
| 510 | #define MX31_PIN_CSPI2_MISO__MISO IOMUX_MODE(MX31_PIN_CSPI2_MISO, IOMUX_CONFIG_FUNC) | 542 | #define MX31_PIN_CSPI2_MISO__MISO IOMUX_MODE(MX31_PIN_CSPI2_MISO, IOMUX_CONFIG_FUNC) |
| 543 | #define MX31_PIN_CSPI2_MISO__SDA IOMUX_MODE(MX31_PIN_CSPI2_MISO, IOMUX_CONFIG_ALT1) | ||
| 511 | #define MX31_PIN_CSPI2_SCLK__SCLK IOMUX_MODE(MX31_PIN_CSPI2_SCLK, IOMUX_CONFIG_FUNC) | 544 | #define MX31_PIN_CSPI2_SCLK__SCLK IOMUX_MODE(MX31_PIN_CSPI2_SCLK, IOMUX_CONFIG_FUNC) |
| 512 | #define MX31_PIN_CSPI2_SPI_RDY__SPI_RDY IOMUX_MODE(MX31_PIN_CSPI2_SPI_RDY, IOMUX_CONFIG_FUNC) | 545 | #define MX31_PIN_CSPI2_SPI_RDY__SPI_RDY IOMUX_MODE(MX31_PIN_CSPI2_SPI_RDY, IOMUX_CONFIG_FUNC) |
| 513 | #define MX31_PIN_CSPI2_SS0__SS0 IOMUX_MODE(MX31_PIN_CSPI2_SS0, IOMUX_CONFIG_FUNC) | 546 | #define MX31_PIN_CSPI2_SS0__SS0 IOMUX_MODE(MX31_PIN_CSPI2_SS0, IOMUX_CONFIG_FUNC) |
| @@ -525,6 +558,33 @@ enum iomux_pins { | |||
| 525 | #define MX31_PIN_SD1_DATA0__SD1_DATA0 IOMUX_MODE(MX31_PIN_SD1_DATA0, IOMUX_CONFIG_FUNC) | 558 | #define MX31_PIN_SD1_DATA0__SD1_DATA0 IOMUX_MODE(MX31_PIN_SD1_DATA0, IOMUX_CONFIG_FUNC) |
| 526 | #define MX31_PIN_SD1_CLK__SD1_CLK IOMUX_MODE(MX31_PIN_SD1_CLK, IOMUX_CONFIG_FUNC) | 559 | #define MX31_PIN_SD1_CLK__SD1_CLK IOMUX_MODE(MX31_PIN_SD1_CLK, IOMUX_CONFIG_FUNC) |
| 527 | #define MX31_PIN_SD1_CMD__SD1_CMD IOMUX_MODE(MX31_PIN_SD1_CMD, IOMUX_CONFIG_FUNC) | 560 | #define MX31_PIN_SD1_CMD__SD1_CMD IOMUX_MODE(MX31_PIN_SD1_CMD, IOMUX_CONFIG_FUNC) |
| 561 | #define MX31_PIN_LD0__LD0 IOMUX_MODE(MX31_PIN_LD0, IOMUX_CONFIG_FUNC) | ||
| 562 | #define MX31_PIN_LD1__LD1 IOMUX_MODE(MX31_PIN_LD1, IOMUX_CONFIG_FUNC) | ||
| 563 | #define MX31_PIN_LD2__LD2 IOMUX_MODE(MX31_PIN_LD2, IOMUX_CONFIG_FUNC) | ||
| 564 | #define MX31_PIN_LD3__LD3 IOMUX_MODE(MX31_PIN_LD3, IOMUX_CONFIG_FUNC) | ||
| 565 | #define MX31_PIN_LD4__LD4 IOMUX_MODE(MX31_PIN_LD4, IOMUX_CONFIG_FUNC) | ||
| 566 | #define MX31_PIN_LD5__LD5 IOMUX_MODE(MX31_PIN_LD5, IOMUX_CONFIG_FUNC) | ||
| 567 | #define MX31_PIN_LD6__LD6 IOMUX_MODE(MX31_PIN_LD6, IOMUX_CONFIG_FUNC) | ||
| 568 | #define MX31_PIN_LD7__LD7 IOMUX_MODE(MX31_PIN_LD7, IOMUX_CONFIG_FUNC) | ||
| 569 | #define MX31_PIN_LD8__LD8 IOMUX_MODE(MX31_PIN_LD8, IOMUX_CONFIG_FUNC) | ||
| 570 | #define MX31_PIN_LD9__LD9 IOMUX_MODE(MX31_PIN_LD9, IOMUX_CONFIG_FUNC) | ||
| 571 | #define MX31_PIN_LD10__LD10 IOMUX_MODE(MX31_PIN_LD10, IOMUX_CONFIG_FUNC) | ||
| 572 | #define MX31_PIN_LD11__LD11 IOMUX_MODE(MX31_PIN_LD11, IOMUX_CONFIG_FUNC) | ||
| 573 | #define MX31_PIN_LD12__LD12 IOMUX_MODE(MX31_PIN_LD12, IOMUX_CONFIG_FUNC) | ||
| 574 | #define MX31_PIN_LD13__LD13 IOMUX_MODE(MX31_PIN_LD13, IOMUX_CONFIG_FUNC) | ||
| 575 | #define MX31_PIN_LD14__LD14 IOMUX_MODE(MX31_PIN_LD14, IOMUX_CONFIG_FUNC) | ||
| 576 | #define MX31_PIN_LD15__LD15 IOMUX_MODE(MX31_PIN_LD15, IOMUX_CONFIG_FUNC) | ||
| 577 | #define MX31_PIN_LD16__LD16 IOMUX_MODE(MX31_PIN_LD16, IOMUX_CONFIG_FUNC) | ||
| 578 | #define MX31_PIN_LD17__LD17 IOMUX_MODE(MX31_PIN_LD17, IOMUX_CONFIG_FUNC) | ||
| 579 | #define MX31_PIN_VSYNC3__VSYNC3 IOMUX_MODE(MX31_PIN_VSYNC3, IOMUX_CONFIG_FUNC) | ||
| 580 | #define MX31_PIN_HSYNC__HSYNC IOMUX_MODE(MX31_PIN_HSYNC, IOMUX_CONFIG_FUNC) | ||
| 581 | #define MX31_PIN_FPSHIFT__FPSHIFT IOMUX_MODE(MX31_PIN_FPSHIFT, IOMUX_CONFIG_FUNC) | ||
| 582 | #define MX31_PIN_DRDY0__DRDY0 IOMUX_MODE(MX31_PIN_DRDY0, IOMUX_CONFIG_FUNC) | ||
| 583 | #define MX31_PIN_D3_REV__D3_REV IOMUX_MODE(MX31_PIN_D3_REV, IOMUX_CONFIG_FUNC) | ||
| 584 | #define MX31_PIN_CONTRAST__CONTRAST IOMUX_MODE(MX31_PIN_CONTRAST, IOMUX_CONFIG_FUNC) | ||
| 585 | #define MX31_PIN_D3_SPL__D3_SPL IOMUX_MODE(MX31_PIN_D3_SPL, IOMUX_CONFIG_FUNC) | ||
| 586 | #define MX31_PIN_D3_CLS__D3_CLS IOMUX_MODE(MX31_PIN_D3_CLS, IOMUX_CONFIG_FUNC) | ||
| 587 | #define MX31_PIN_LCS0__GPI03_23 IOMUX_MODE(MX31_PIN_LCS0, IOMUX_CONFIG_GPIO) | ||
| 528 | 588 | ||
| 529 | /*XXX: The SS0, SS1, SS2, SS3 lines of spi3 are multiplexed by cspi2_ss0, cspi2_ss1, cspi1_ss0 | 589 | /*XXX: The SS0, SS1, SS2, SS3 lines of spi3 are multiplexed by cspi2_ss0, cspi2_ss1, cspi1_ss0 |
| 530 | * cspi1_ss1*/ | 590 | * cspi1_ss1*/ |
diff --git a/arch/arm/plat-mxc/include/mach/iomux.h b/arch/arm/plat-mxc/include/mach/iomux.h new file mode 100644 index 000000000000..171f8adc1109 --- /dev/null +++ b/arch/arm/plat-mxc/include/mach/iomux.h | |||
| @@ -0,0 +1,127 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de> | ||
| 3 | * Copyright (C) 2009 by Holger Schurig <hs4233@mail.mn-solutions.de> | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or | ||
| 6 | * modify it under the terms of the GNU General Public License | ||
| 7 | * as published by the Free Software Foundation; either version 2 | ||
| 8 | * of the License, or (at your option) any later version. | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
| 17 | * MA 02110-1301, USA. | ||
| 18 | */ | ||
| 19 | |||
| 20 | #ifndef _MXC_IOMUX_H | ||
| 21 | #define _MXC_IOMUX_H | ||
| 22 | |||
| 23 | /* | ||
| 24 | * GPIO Module and I/O Multiplexer | ||
| 25 | * x = 0..3 for reg_A, reg_B, reg_C, reg_D | ||
| 26 | */ | ||
| 27 | #define VA_GPIO_BASE IO_ADDRESS(GPIO_BASE_ADDR) | ||
| 28 | #define MXC_DDIR(x) (0x00 + ((x) << 8)) | ||
| 29 | #define MXC_OCR1(x) (0x04 + ((x) << 8)) | ||
| 30 | #define MXC_OCR2(x) (0x08 + ((x) << 8)) | ||
| 31 | #define MXC_ICONFA1(x) (0x0c + ((x) << 8)) | ||
| 32 | #define MXC_ICONFA2(x) (0x10 + ((x) << 8)) | ||
| 33 | #define MXC_ICONFB1(x) (0x14 + ((x) << 8)) | ||
| 34 | #define MXC_ICONFB2(x) (0x18 + ((x) << 8)) | ||
| 35 | #define MXC_DR(x) (0x1c + ((x) << 8)) | ||
| 36 | #define MXC_GIUS(x) (0x20 + ((x) << 8)) | ||
| 37 | #define MXC_SSR(x) (0x24 + ((x) << 8)) | ||
| 38 | #define MXC_ICR1(x) (0x28 + ((x) << 8)) | ||
| 39 | #define MXC_ICR2(x) (0x2c + ((x) << 8)) | ||
| 40 | #define MXC_IMR(x) (0x30 + ((x) << 8)) | ||
| 41 | #define MXC_ISR(x) (0x34 + ((x) << 8)) | ||
| 42 | #define MXC_GPR(x) (0x38 + ((x) << 8)) | ||
| 43 | #define MXC_SWR(x) (0x3c + ((x) << 8)) | ||
| 44 | #define MXC_PUEN(x) (0x40 + ((x) << 8)) | ||
| 45 | |||
| 46 | #ifdef CONFIG_ARCH_MX1 | ||
| 47 | # define GPIO_PORT_MAX 3 | ||
| 48 | #endif | ||
| 49 | #ifdef CONFIG_ARCH_MX2 | ||
| 50 | # define GPIO_PORT_MAX 5 | ||
| 51 | #endif | ||
| 52 | |||
| 53 | #ifndef GPIO_PORT_MAX | ||
| 54 | # error "GPIO config port count unknown!" | ||
| 55 | #endif | ||
| 56 | |||
| 57 | #define GPIO_PIN_MASK 0x1f | ||
| 58 | |||
| 59 | #define GPIO_PORT_SHIFT 5 | ||
| 60 | #define GPIO_PORT_MASK (0x7 << GPIO_PORT_SHIFT) | ||
| 61 | |||
| 62 | #define GPIO_PORTA (0 << GPIO_PORT_SHIFT) | ||
| 63 | #define GPIO_PORTB (1 << GPIO_PORT_SHIFT) | ||
| 64 | #define GPIO_PORTC (2 << GPIO_PORT_SHIFT) | ||
| 65 | #define GPIO_PORTD (3 << GPIO_PORT_SHIFT) | ||
| 66 | #define GPIO_PORTE (4 << GPIO_PORT_SHIFT) | ||
| 67 | #define GPIO_PORTF (5 << GPIO_PORT_SHIFT) | ||
| 68 | |||
| 69 | #define GPIO_OUT (1 << 8) | ||
| 70 | #define GPIO_IN (0 << 8) | ||
| 71 | #define GPIO_PUEN (1 << 9) | ||
| 72 | |||
| 73 | #define GPIO_PF (1 << 10) | ||
| 74 | #define GPIO_AF (1 << 11) | ||
| 75 | |||
| 76 | #define GPIO_OCR_SHIFT 12 | ||
| 77 | #define GPIO_OCR_MASK (3 << GPIO_OCR_SHIFT) | ||
| 78 | #define GPIO_AIN (0 << GPIO_OCR_SHIFT) | ||
| 79 | #define GPIO_BIN (1 << GPIO_OCR_SHIFT) | ||
| 80 | #define GPIO_CIN (2 << GPIO_OCR_SHIFT) | ||
| 81 | #define GPIO_GPIO (3 << GPIO_OCR_SHIFT) | ||
| 82 | |||
| 83 | #define GPIO_AOUT_SHIFT 14 | ||
| 84 | #define GPIO_AOUT_MASK (3 << GPIO_AOUT_SHIFT) | ||
| 85 | #define GPIO_AOUT (0 << GPIO_AOUT_SHIFT) | ||
| 86 | #define GPIO_AOUT_ISR (1 << GPIO_AOUT_SHIFT) | ||
| 87 | #define GPIO_AOUT_0 (2 << GPIO_AOUT_SHIFT) | ||
| 88 | #define GPIO_AOUT_1 (3 << GPIO_AOUT_SHIFT) | ||
| 89 | |||
| 90 | #define GPIO_BOUT_SHIFT 16 | ||
| 91 | #define GPIO_BOUT_MASK (3 << GPIO_BOUT_SHIFT) | ||
| 92 | #define GPIO_BOUT (0 << GPIO_BOUT_SHIFT) | ||
| 93 | #define GPIO_BOUT_ISR (1 << GPIO_BOUT_SHIFT) | ||
| 94 | #define GPIO_BOUT_0 (2 << GPIO_BOUT_SHIFT) | ||
| 95 | #define GPIO_BOUT_1 (3 << GPIO_BOUT_SHIFT) | ||
| 96 | |||
| 97 | |||
| 98 | #ifdef CONFIG_ARCH_MX1 | ||
| 99 | #include <mach/iomux-mx1.h> | ||
| 100 | #endif | ||
| 101 | #ifdef CONFIG_ARCH_MX2 | ||
| 102 | #include <mach/iomux-mx2x.h> | ||
| 103 | #ifdef CONFIG_MACH_MX21 | ||
| 104 | #include <mach/iomux-mx21.h> | ||
| 105 | #endif | ||
| 106 | #ifdef CONFIG_MACH_MX27 | ||
| 107 | #include <mach/iomux-mx27.h> | ||
| 108 | #endif | ||
| 109 | #endif | ||
| 110 | |||
| 111 | |||
| 112 | /* decode irq number to use with IMR(x), ISR(x) and friends */ | ||
| 113 | #define IRQ_TO_REG(irq) ((irq - MXC_INTERNAL_IRQS) >> 5) | ||
| 114 | |||
| 115 | #define IRQ_GPIOA(x) (MXC_GPIO_IRQ_START + x) | ||
| 116 | #define IRQ_GPIOB(x) (IRQ_GPIOA(32) + x) | ||
| 117 | #define IRQ_GPIOC(x) (IRQ_GPIOB(32) + x) | ||
| 118 | #define IRQ_GPIOD(x) (IRQ_GPIOC(32) + x) | ||
| 119 | #define IRQ_GPIOE(x) (IRQ_GPIOD(32) + x) | ||
| 120 | |||
| 121 | |||
| 122 | extern void mxc_gpio_mode(int gpio_mode); | ||
| 123 | extern int mxc_gpio_setup_multiple_pins(const int *pin_list, unsigned count, | ||
| 124 | const char *label); | ||
| 125 | extern void mxc_gpio_release_multiple_pins(const int *pin_list, int count); | ||
| 126 | |||
| 127 | #endif | ||
diff --git a/arch/arm/plat-mxc/include/mach/memory.h b/arch/arm/plat-mxc/include/mach/memory.h index 0b808399097f..e0783e619580 100644 --- a/arch/arm/plat-mxc/include/mach/memory.h +++ b/arch/arm/plat-mxc/include/mach/memory.h | |||
| @@ -14,7 +14,12 @@ | |||
| 14 | #if defined CONFIG_ARCH_MX1 | 14 | #if defined CONFIG_ARCH_MX1 |
| 15 | #define PHYS_OFFSET UL(0x08000000) | 15 | #define PHYS_OFFSET UL(0x08000000) |
| 16 | #elif defined CONFIG_ARCH_MX2 | 16 | #elif defined CONFIG_ARCH_MX2 |
| 17 | #ifdef CONFIG_MACH_MX21 | ||
| 18 | #define PHYS_OFFSET UL(0xC0000000) | ||
| 19 | #endif | ||
| 20 | #ifdef CONFIG_MACH_MX27 | ||
| 17 | #define PHYS_OFFSET UL(0xA0000000) | 21 | #define PHYS_OFFSET UL(0xA0000000) |
| 22 | #endif | ||
| 18 | #elif defined CONFIG_ARCH_MX3 | 23 | #elif defined CONFIG_ARCH_MX3 |
| 19 | #define PHYS_OFFSET UL(0x80000000) | 24 | #define PHYS_OFFSET UL(0x80000000) |
| 20 | #endif | 25 | #endif |
diff --git a/arch/arm/plat-mxc/include/mach/mx21.h b/arch/arm/plat-mxc/include/mach/mx21.h new file mode 100644 index 000000000000..e8c4cf56c24e --- /dev/null +++ b/arch/arm/plat-mxc/include/mach/mx21.h | |||
| @@ -0,0 +1,78 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | * Copyright 2008 Juergen Beisert, kernel@pengutronix.de | ||
| 4 | * Copyright 2009 Holger Schurig, hs4233@mail.mn-solutions.de | ||
| 5 | * | ||
| 6 | * This contains i.MX21-specific hardware definitions. For those | ||
| 7 | * hardware pieces that are common between i.MX21 and i.MX27, have a | ||
| 8 | * look at mx2x.h. | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or | ||
| 11 | * modify it under the terms of the GNU General Public License | ||
| 12 | * as published by the Free Software Foundation; either version 2 | ||
| 13 | * of the License, or (at your option) any later version. | ||
| 14 | * This program is distributed in the hope that it will be useful, | ||
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 17 | * GNU General Public License for more details. | ||
| 18 | * | ||
| 19 | * You should have received a copy of the GNU General Public License | ||
| 20 | * along with this program; if not, write to the Free Software | ||
| 21 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
| 22 | * MA 02110-1301, USA. | ||
| 23 | */ | ||
| 24 | |||
| 25 | #ifndef __ASM_ARCH_MXC_MX21_H__ | ||
| 26 | #define __ASM_ARCH_MXC_MX21_H__ | ||
| 27 | |||
| 28 | #ifndef __ASM_ARCH_MXC_HARDWARE_H__ | ||
| 29 | #error "Do not include directly." | ||
| 30 | #endif | ||
| 31 | |||
| 32 | |||
| 33 | /* Memory regions and CS */ | ||
| 34 | #define SDRAM_BASE_ADDR 0xC0000000 | ||
| 35 | #define CSD1_BASE_ADDR 0xC4000000 | ||
| 36 | |||
| 37 | #define CS0_BASE_ADDR 0xC8000000 | ||
| 38 | #define CS1_BASE_ADDR 0xCC000000 | ||
| 39 | #define CS2_BASE_ADDR 0xD0000000 | ||
| 40 | #define CS3_BASE_ADDR 0xD1000000 | ||
| 41 | #define CS4_BASE_ADDR 0xD2000000 | ||
| 42 | #define CS5_BASE_ADDR 0xDD000000 | ||
| 43 | #define PCMCIA_MEM_BASE_ADDR 0xD4000000 | ||
| 44 | |||
| 45 | /* NAND, SDRAM, WEIM etc controllers */ | ||
| 46 | #define X_MEMC_BASE_ADDR 0xDF000000 | ||
| 47 | #define X_MEMC_BASE_ADDR_VIRT 0xF4200000 | ||
| 48 | #define X_MEMC_SIZE SZ_256K | ||
| 49 | |||
| 50 | #define SDRAMC_BASE_ADDR (X_MEMC_BASE_ADDR + 0x0000) | ||
| 51 | #define EIM_BASE_ADDR (X_MEMC_BASE_ADDR + 0x1000) | ||
| 52 | #define PCMCIA_CTL_BASE_ADDR (X_MEMC_BASE_ADDR + 0x2000) | ||
| 53 | #define NFC_BASE_ADDR (X_MEMC_BASE_ADDR + 0x3000) | ||
| 54 | |||
| 55 | #define IRAM_BASE_ADDR 0xFFFFE800 /* internal ram */ | ||
| 56 | |||
| 57 | /* this CPU supports up to 192 GPIOs (don't forget the baseboard!) */ | ||
| 58 | #define ARCH_NR_GPIOS (6*32 + 16) | ||
| 59 | |||
| 60 | /* fixed interrupt numbers */ | ||
| 61 | #define MXC_INT_USBCTRL 58 | ||
| 62 | #define MXC_INT_USBCTRL 58 | ||
| 63 | #define MXC_INT_USBMNP 57 | ||
| 64 | #define MXC_INT_USBFUNC 56 | ||
| 65 | #define MXC_INT_USBHOST 55 | ||
| 66 | #define MXC_INT_USBDMA 54 | ||
| 67 | #define MXC_INT_USBWKUP 53 | ||
| 68 | #define MXC_INT_EMMADEC 50 | ||
| 69 | #define MXC_INT_EMMAENC 49 | ||
| 70 | #define MXC_INT_BMI 30 | ||
| 71 | #define MXC_INT_FIRI 9 | ||
| 72 | |||
| 73 | /* fixed DMA request numbers */ | ||
| 74 | #define DMA_REQ_BMI_RX 29 | ||
| 75 | #define DMA_REQ_BMI_TX 28 | ||
| 76 | #define DMA_REQ_FIRI_RX 4 | ||
| 77 | |||
| 78 | #endif /* __ASM_ARCH_MXC_MX21_H__ */ | ||
diff --git a/arch/arm/plat-mxc/include/mach/mx27.h b/arch/arm/plat-mxc/include/mach/mx27.h index 0313be720552..6e93f2c0b7bb 100644 --- a/arch/arm/plat-mxc/include/mach/mx27.h +++ b/arch/arm/plat-mxc/include/mach/mx27.h | |||
| @@ -2,6 +2,10 @@ | |||
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. |
| 3 | * Copyright 2008 Juergen Beisert, kernel@pengutronix.de | 3 | * Copyright 2008 Juergen Beisert, kernel@pengutronix.de |
| 4 | * | 4 | * |
| 5 | * This contains i.MX27-specific hardware definitions. For those | ||
| 6 | * hardware pieces that are common between i.MX21 and i.MX27, have a | ||
| 7 | * look at mx2x.h. | ||
| 8 | * | ||
| 5 | * This program is free software; you can redistribute it and/or | 9 | * This program is free software; you can redistribute it and/or |
| 6 | * modify it under the terms of the GNU General Public License | 10 | * modify it under the terms of the GNU General Public License |
| 7 | * as published by the Free Software Foundation; either version 2 | 11 | * as published by the Free Software Foundation; either version 2 |
| @@ -27,35 +31,6 @@ | |||
| 27 | /* IRAM */ | 31 | /* IRAM */ |
| 28 | #define IRAM_BASE_ADDR 0xFFFF4C00 /* internal ram */ | 32 | #define IRAM_BASE_ADDR 0xFFFF4C00 /* internal ram */ |
| 29 | 33 | ||
| 30 | /* Register offests */ | ||
| 31 | #define AIPI_BASE_ADDR 0x10000000 | ||
| 32 | #define AIPI_BASE_ADDR_VIRT 0xF4000000 | ||
| 33 | #define AIPI_SIZE SZ_1M | ||
| 34 | |||
| 35 | #define DMA_BASE_ADDR (AIPI_BASE_ADDR + 0x01000) | ||
| 36 | #define WDOG_BASE_ADDR (AIPI_BASE_ADDR + 0x02000) | ||
| 37 | #define GPT1_BASE_ADDR (AIPI_BASE_ADDR + 0x03000) | ||
| 38 | #define GPT2_BASE_ADDR (AIPI_BASE_ADDR + 0x04000) | ||
| 39 | #define GPT3_BASE_ADDR (AIPI_BASE_ADDR + 0x05000) | ||
| 40 | #define PWM_BASE_ADDR (AIPI_BASE_ADDR + 0x06000) | ||
| 41 | #define RTC_BASE_ADDR (AIPI_BASE_ADDR + 0x07000) | ||
| 42 | #define KPP_BASE_ADDR (AIPI_BASE_ADDR + 0x08000) | ||
| 43 | #define OWIRE_BASE_ADDR (AIPI_BASE_ADDR + 0x09000) | ||
| 44 | #define UART1_BASE_ADDR (AIPI_BASE_ADDR + 0x0A000) | ||
| 45 | #define UART2_BASE_ADDR (AIPI_BASE_ADDR + 0x0B000) | ||
| 46 | #define UART3_BASE_ADDR (AIPI_BASE_ADDR + 0x0C000) | ||
| 47 | #define UART4_BASE_ADDR (AIPI_BASE_ADDR + 0x0D000) | ||
| 48 | #define CSPI1_BASE_ADDR (AIPI_BASE_ADDR + 0x0E000) | ||
| 49 | #define CSPI2_BASE_ADDR (AIPI_BASE_ADDR + 0x0F000) | ||
| 50 | #define SSI1_BASE_ADDR (AIPI_BASE_ADDR + 0x10000) | ||
| 51 | #define SSI2_BASE_ADDR (AIPI_BASE_ADDR + 0x11000) | ||
| 52 | #define I2C_BASE_ADDR (AIPI_BASE_ADDR + 0x12000) | ||
| 53 | #define SDHC1_BASE_ADDR (AIPI_BASE_ADDR + 0x13000) | ||
| 54 | #define SDHC2_BASE_ADDR (AIPI_BASE_ADDR + 0x14000) | ||
| 55 | #define GPIO_BASE_ADDR (AIPI_BASE_ADDR + 0x15000) | ||
| 56 | #define AUDMUX_BASE_ADDR (AIPI_BASE_ADDR + 0x16000) | ||
| 57 | |||
| 58 | #define CSPI3_BASE_ADDR (AIPI_BASE_ADDR + 0x17000) | ||
| 59 | #define MSHC_BASE_ADDR (AIPI_BASE_ADDR + 0x18000) | 34 | #define MSHC_BASE_ADDR (AIPI_BASE_ADDR + 0x18000) |
| 60 | #define GPT5_BASE_ADDR (AIPI_BASE_ADDR + 0x19000) | 35 | #define GPT5_BASE_ADDR (AIPI_BASE_ADDR + 0x19000) |
| 61 | #define GPT4_BASE_ADDR (AIPI_BASE_ADDR + 0x1A000) | 36 | #define GPT4_BASE_ADDR (AIPI_BASE_ADDR + 0x1A000) |
| @@ -64,55 +39,24 @@ | |||
| 64 | #define I2C2_BASE_ADDR (AIPI_BASE_ADDR + 0x1D000) | 39 | #define I2C2_BASE_ADDR (AIPI_BASE_ADDR + 0x1D000) |
| 65 | #define SDHC3_BASE_ADDR (AIPI_BASE_ADDR + 0x1E000) | 40 | #define SDHC3_BASE_ADDR (AIPI_BASE_ADDR + 0x1E000) |
| 66 | #define GPT6_BASE_ADDR (AIPI_BASE_ADDR + 0x1F000) | 41 | #define GPT6_BASE_ADDR (AIPI_BASE_ADDR + 0x1F000) |
| 67 | |||
| 68 | #define LCDC_BASE_ADDR (AIPI_BASE_ADDR + 0x21000) | ||
| 69 | #define SLCDC_BASE_ADDR (AIPI_BASE_ADDR + 0x22000) | ||
| 70 | #define VPU_BASE_ADDR (AIPI_BASE_ADDR + 0x23000) | 42 | #define VPU_BASE_ADDR (AIPI_BASE_ADDR + 0x23000) |
| 71 | #define USBOTG_BASE_ADDR (AIPI_BASE_ADDR + 0x24000) | ||
| 72 | /* for mx27*/ | ||
| 73 | #define OTG_BASE_ADDR USBOTG_BASE_ADDR | 43 | #define OTG_BASE_ADDR USBOTG_BASE_ADDR |
| 74 | #define SAHARA_BASE_ADDR (AIPI_BASE_ADDR + 0x25000) | 44 | #define SAHARA_BASE_ADDR (AIPI_BASE_ADDR + 0x25000) |
| 75 | #define EMMA_PP_BASE_ADDR (AIPI_BASE_ADDR + 0x26000) | ||
| 76 | #define EMMA_PRP_BASE_ADDR (AIPI_BASE_ADDR + 0x26400) | ||
| 77 | #define CCM_BASE_ADDR (AIPI_BASE_ADDR + 0x27000) | ||
| 78 | #define SYSCTRL_BASE_ADDR (AIPI_BASE_ADDR + 0x27800) | ||
| 79 | #define IIM_BASE_ADDR (AIPI_BASE_ADDR + 0x28000) | 45 | #define IIM_BASE_ADDR (AIPI_BASE_ADDR + 0x28000) |
| 80 | |||
| 81 | #define RTIC_BASE_ADDR (AIPI_BASE_ADDR + 0x2A000) | 46 | #define RTIC_BASE_ADDR (AIPI_BASE_ADDR + 0x2A000) |
| 82 | #define FEC_BASE_ADDR (AIPI_BASE_ADDR + 0x2B000) | 47 | #define FEC_BASE_ADDR (AIPI_BASE_ADDR + 0x2B000) |
| 83 | #define SCC_BASE_ADDR (AIPI_BASE_ADDR + 0x2C000) | 48 | #define SCC_BASE_ADDR (AIPI_BASE_ADDR + 0x2C000) |
| 84 | #define ETB_BASE_ADDR (AIPI_BASE_ADDR + 0x3B000) | 49 | #define ETB_BASE_ADDR (AIPI_BASE_ADDR + 0x3B000) |
| 85 | #define ETB_RAM_BASE_ADDR (AIPI_BASE_ADDR + 0x3C000) | 50 | #define ETB_RAM_BASE_ADDR (AIPI_BASE_ADDR + 0x3C000) |
| 86 | 51 | ||
| 87 | #define JAM_BASE_ADDR (AIPI_BASE_ADDR + 0x3E000) | 52 | /* ROM patch */ |
| 88 | #define MAX_BASE_ADDR (AIPI_BASE_ADDR + 0x3F000) | ||
| 89 | |||
| 90 | /* ROMP and AVIC */ | ||
| 91 | #define ROMP_BASE_ADDR 0x10041000 | 53 | #define ROMP_BASE_ADDR 0x10041000 |
| 92 | 54 | ||
| 93 | #define AVIC_BASE_ADDR 0x10040000 | ||
| 94 | |||
| 95 | #define SAHB1_BASE_ADDR 0x80000000 | ||
| 96 | #define SAHB1_BASE_ADDR_VIRT 0xF4100000 | ||
| 97 | #define SAHB1_SIZE SZ_1M | ||
| 98 | |||
| 99 | #define CSI_BASE_ADDR (SAHB1_BASE_ADDR + 0x0000) | ||
| 100 | #define ATA_BASE_ADDR (SAHB1_BASE_ADDR + 0x1000) | 55 | #define ATA_BASE_ADDR (SAHB1_BASE_ADDR + 0x1000) |
| 101 | 56 | ||
| 102 | /* NAND, SDRAM, WEIM, M3IF, EMI controllers */ | ||
| 103 | #define X_MEMC_BASE_ADDR 0xD8000000 | ||
| 104 | #define X_MEMC_BASE_ADDR_VIRT 0xF4200000 | ||
| 105 | #define X_MEMC_SIZE SZ_1M | ||
| 106 | |||
| 107 | #define NFC_BASE_ADDR (X_MEMC_BASE_ADDR) | ||
| 108 | #define SDRAMC_BASE_ADDR (X_MEMC_BASE_ADDR + 0x1000) | ||
| 109 | #define WEIM_BASE_ADDR (X_MEMC_BASE_ADDR + 0x2000) | ||
| 110 | #define M3IF_BASE_ADDR (X_MEMC_BASE_ADDR + 0x3000) | ||
| 111 | #define PCMCIA_CTL_BASE_ADDR (X_MEMC_BASE_ADDR + 0x4000) | ||
| 112 | |||
| 113 | /* Memory regions and CS */ | 57 | /* Memory regions and CS */ |
| 114 | #define SDRAM_BASE_ADDR 0xA0000000 | 58 | #define SDRAM_BASE_ADDR 0xA0000000 |
| 115 | #define CSD1_BASE_ADDR 0xB0000000 | 59 | #define CSD1_BASE_ADDR 0xB0000000 |
| 116 | 60 | ||
| 117 | #define CS0_BASE_ADDR 0xC0000000 | 61 | #define CS0_BASE_ADDR 0xC0000000 |
| 118 | #define CS1_BASE_ADDR 0xC8000000 | 62 | #define CS1_BASE_ADDR 0xC8000000 |
| @@ -122,44 +66,20 @@ | |||
| 122 | #define CS5_BASE_ADDR 0xD6000000 | 66 | #define CS5_BASE_ADDR 0xD6000000 |
| 123 | #define PCMCIA_MEM_BASE_ADDR 0xDC000000 | 67 | #define PCMCIA_MEM_BASE_ADDR 0xDC000000 |
| 124 | 68 | ||
| 125 | /* | 69 | /* NAND, SDRAM, WEIM, M3IF, EMI controllers */ |
| 126 | * This macro defines the physical to virtual address mapping for all the | 70 | #define X_MEMC_BASE_ADDR 0xD8000000 |
| 127 | * peripheral modules. It is used by passing in the physical address as x | 71 | #define X_MEMC_BASE_ADDR_VIRT 0xF4200000 |
| 128 | * and returning the virtual address. If the physical address is not mapped, | 72 | #define X_MEMC_SIZE SZ_1M |
| 129 | * it returns 0xDEADBEEF | ||
| 130 | */ | ||
| 131 | #define IO_ADDRESS(x) \ | ||
| 132 | (void __iomem *) \ | ||
| 133 | (((x >= AIPI_BASE_ADDR) && (x < (AIPI_BASE_ADDR + AIPI_SIZE))) ? \ | ||
| 134 | AIPI_IO_ADDRESS(x) : \ | ||
| 135 | ((x >= SAHB1_BASE_ADDR) && (x < (SAHB1_BASE_ADDR + SAHB1_SIZE))) ? \ | ||
| 136 | SAHB1_IO_ADDRESS(x) : \ | ||
| 137 | ((x >= X_MEMC_BASE_ADDR) && (x < (X_MEMC_BASE_ADDR + X_MEMC_SIZE))) ? \ | ||
| 138 | X_MEMC_IO_ADDRESS(x) : 0xDEADBEEF) | ||
| 139 | |||
| 140 | /* define the address mapping macros: in physical address order */ | ||
| 141 | #define AIPI_IO_ADDRESS(x) \ | ||
| 142 | (((x) - AIPI_BASE_ADDR) + AIPI_BASE_ADDR_VIRT) | ||
| 143 | |||
| 144 | #define AVIC_IO_ADDRESS(x) AIPI_IO_ADDRESS(x) | ||
| 145 | |||
| 146 | #define SAHB1_IO_ADDRESS(x) \ | ||
| 147 | (((x) - SAHB1_BASE_ADDR) + SAHB1_BASE_ADDR_VIRT) | ||
| 148 | |||
| 149 | #define CS4_IO_ADDRESS(x) \ | ||
| 150 | (((x) - CS4_BASE_ADDR) + CS4_BASE_ADDR_VIRT) | ||
| 151 | |||
| 152 | #define X_MEMC_IO_ADDRESS(x) \ | ||
| 153 | (((x) - X_MEMC_BASE_ADDR) + X_MEMC_BASE_ADDR_VIRT) | ||
| 154 | 73 | ||
| 155 | #define PCMCIA_IO_ADDRESS(x) \ | 74 | #define NFC_BASE_ADDR (X_MEMC_BASE_ADDR) |
| 156 | (((x) - X_MEMC_BASE_ADDR) + X_MEMC_BASE_ADDR_VIRT) | 75 | #define SDRAMC_BASE_ADDR (X_MEMC_BASE_ADDR + 0x1000) |
| 76 | #define WEIM_BASE_ADDR (X_MEMC_BASE_ADDR + 0x2000) | ||
| 77 | #define M3IF_BASE_ADDR (X_MEMC_BASE_ADDR + 0x3000) | ||
| 78 | #define PCMCIA_CTL_BASE_ADDR (X_MEMC_BASE_ADDR + 0x4000) | ||
| 157 | 79 | ||
| 158 | /* fixed interrput numbers */ | 80 | /* fixed interrupt numbers */ |
| 159 | #define MXC_INT_CCM 63 | 81 | #define MXC_INT_CCM 63 |
| 160 | #define MXC_INT_IIM 62 | 82 | #define MXC_INT_IIM 62 |
| 161 | #define MXC_INT_LCDC 61 | ||
| 162 | #define MXC_INT_SLCDC 60 | ||
| 163 | #define MXC_INT_SAHARA 59 | 83 | #define MXC_INT_SAHARA 59 |
| 164 | #define MXC_INT_SCC_SCM 58 | 84 | #define MXC_INT_SCC_SCM 58 |
| 165 | #define MXC_INT_SCC_SMN 57 | 85 | #define MXC_INT_SCC_SMN 57 |
| @@ -167,54 +87,12 @@ | |||
| 167 | #define MXC_INT_USB2 55 | 87 | #define MXC_INT_USB2 55 |
| 168 | #define MXC_INT_USB1 54 | 88 | #define MXC_INT_USB1 54 |
| 169 | #define MXC_INT_VPU 53 | 89 | #define MXC_INT_VPU 53 |
| 170 | #define MXC_INT_EMMAPP 52 | ||
| 171 | #define MXC_INT_EMMAPRP 51 | ||
| 172 | #define MXC_INT_FEC 50 | 90 | #define MXC_INT_FEC 50 |
| 173 | #define MXC_INT_UART5 49 | 91 | #define MXC_INT_UART5 49 |
| 174 | #define MXC_INT_UART6 48 | 92 | #define MXC_INT_UART6 48 |
| 175 | #define MXC_INT_DMACH15 47 | ||
| 176 | #define MXC_INT_DMACH14 46 | ||
| 177 | #define MXC_INT_DMACH13 45 | ||
| 178 | #define MXC_INT_DMACH12 44 | ||
| 179 | #define MXC_INT_DMACH11 43 | ||
| 180 | #define MXC_INT_DMACH10 42 | ||
| 181 | #define MXC_INT_DMACH9 41 | ||
| 182 | #define MXC_INT_DMACH8 40 | ||
| 183 | #define MXC_INT_DMACH7 39 | ||
| 184 | #define MXC_INT_DMACH6 38 | ||
| 185 | #define MXC_INT_DMACH5 37 | ||
| 186 | #define MXC_INT_DMACH4 36 | ||
| 187 | #define MXC_INT_DMACH3 35 | ||
| 188 | #define MXC_INT_DMACH2 34 | ||
| 189 | #define MXC_INT_DMACH1 33 | ||
| 190 | #define MXC_INT_DMACH0 32 | ||
| 191 | #define MXC_INT_CSI 31 | ||
| 192 | #define MXC_INT_ATA 30 | 93 | #define MXC_INT_ATA 30 |
| 193 | #define MXC_INT_NANDFC 29 | ||
| 194 | #define MXC_INT_PCMCIA 28 | ||
| 195 | #define MXC_INT_WDOG 27 | ||
| 196 | #define MXC_INT_GPT1 26 | ||
| 197 | #define MXC_INT_GPT2 25 | ||
| 198 | #define MXC_INT_GPT3 24 | ||
| 199 | #define MXC_INT_GPT INT_GPT1 | ||
| 200 | #define MXC_INT_PWM 23 | ||
| 201 | #define MXC_INT_RTC 22 | ||
| 202 | #define MXC_INT_KPP 21 | ||
| 203 | #define MXC_INT_UART1 20 | ||
| 204 | #define MXC_INT_UART2 19 | ||
| 205 | #define MXC_INT_UART3 18 | ||
| 206 | #define MXC_INT_UART4 17 | ||
| 207 | #define MXC_INT_CSPI1 16 | ||
| 208 | #define MXC_INT_CSPI2 15 | ||
| 209 | #define MXC_INT_SSI1 14 | ||
| 210 | #define MXC_INT_SSI2 13 | ||
| 211 | #define MXC_INT_I2C 12 | ||
| 212 | #define MXC_INT_SDHC1 11 | ||
| 213 | #define MXC_INT_SDHC2 10 | ||
| 214 | #define MXC_INT_SDHC3 9 | 94 | #define MXC_INT_SDHC3 9 |
| 215 | #define MXC_INT_GPIO 8 | ||
| 216 | #define MXC_INT_SDHC 7 | 95 | #define MXC_INT_SDHC 7 |
| 217 | #define MXC_INT_CSPI3 6 | ||
| 218 | #define MXC_INT_RTIC 5 | 96 | #define MXC_INT_RTIC 5 |
| 219 | #define MXC_INT_GPT4 4 | 97 | #define MXC_INT_GPT4 4 |
| 220 | #define MXC_INT_GPT5 3 | 98 | #define MXC_INT_GPT5 3 |
| @@ -228,36 +106,9 @@ | |||
| 228 | #define DMA_REQ_UART6_TX 34 | 106 | #define DMA_REQ_UART6_TX 34 |
| 229 | #define DMA_REQ_UART5_RX 33 | 107 | #define DMA_REQ_UART5_RX 33 |
| 230 | #define DMA_REQ_UART5_TX 32 | 108 | #define DMA_REQ_UART5_TX 32 |
| 231 | #define DMA_REQ_CSI_RX 31 | ||
| 232 | #define DMA_REQ_CSI_STAT 30 | ||
| 233 | #define DMA_REQ_ATA_RCV 29 | 109 | #define DMA_REQ_ATA_RCV 29 |
| 234 | #define DMA_REQ_ATA_TX 28 | 110 | #define DMA_REQ_ATA_TX 28 |
| 235 | #define DMA_REQ_UART1_TX 27 | ||
| 236 | #define DMA_REQ_UART1_RX 26 | ||
| 237 | #define DMA_REQ_UART2_TX 25 | ||
| 238 | #define DMA_REQ_UART2_RX 24 | ||
| 239 | #define DMA_REQ_UART3_TX 23 | ||
| 240 | #define DMA_REQ_UART3_RX 22 | ||
| 241 | #define DMA_REQ_UART4_TX 21 | ||
| 242 | #define DMA_REQ_UART4_RX 20 | ||
| 243 | #define DMA_REQ_CSPI1_TX 19 | ||
| 244 | #define DMA_REQ_CSPI1_RX 18 | ||
| 245 | #define DMA_REQ_CSPI2_TX 17 | ||
| 246 | #define DMA_REQ_CSPI2_RX 16 | ||
| 247 | #define DMA_REQ_SSI1_TX1 15 | ||
| 248 | #define DMA_REQ_SSI1_RX1 14 | ||
| 249 | #define DMA_REQ_SSI1_TX0 13 | ||
| 250 | #define DMA_REQ_SSI1_RX0 12 | ||
| 251 | #define DMA_REQ_SSI2_TX1 11 | ||
| 252 | #define DMA_REQ_SSI2_RX1 10 | ||
| 253 | #define DMA_REQ_SSI2_TX0 9 | ||
| 254 | #define DMA_REQ_SSI2_RX0 8 | ||
| 255 | #define DMA_REQ_SDHC1 7 | ||
| 256 | #define DMA_REQ_SDHC2 6 | ||
| 257 | #define DMA_REQ_MSHC 4 | 111 | #define DMA_REQ_MSHC 4 |
| 258 | #define DMA_REQ_EXT 3 | ||
| 259 | #define DMA_REQ_CSPI3_TX 2 | ||
| 260 | #define DMA_REQ_CSPI3_RX 1 | ||
| 261 | 112 | ||
| 262 | /* silicon revisions specific to i.MX27 */ | 113 | /* silicon revisions specific to i.MX27 */ |
| 263 | #define CHIP_REV_1_0 0x00 | 114 | #define CHIP_REV_1_0 0x00 |
| @@ -267,25 +118,8 @@ | |||
| 267 | extern int mx27_revision(void); | 118 | extern int mx27_revision(void); |
| 268 | #endif | 119 | #endif |
| 269 | 120 | ||
| 270 | /* gpio and gpio based interrupt handling */ | ||
| 271 | #define GPIO_DR 0x1C | ||
| 272 | #define GPIO_GDIR 0x00 | ||
| 273 | #define GPIO_PSR 0x24 | ||
| 274 | #define GPIO_ICR1 0x28 | ||
| 275 | #define GPIO_ICR2 0x2C | ||
| 276 | #define GPIO_IMR 0x30 | ||
| 277 | #define GPIO_ISR 0x34 | ||
| 278 | #define GPIO_INT_LOW_LEV 0x3 | ||
| 279 | #define GPIO_INT_HIGH_LEV 0x2 | ||
| 280 | #define GPIO_INT_RISE_EDGE 0x0 | ||
| 281 | #define GPIO_INT_FALL_EDGE 0x1 | ||
| 282 | #define GPIO_INT_NONE 0x4 | ||
| 283 | |||
| 284 | /* Mandatory defines used globally */ | 121 | /* Mandatory defines used globally */ |
| 285 | 122 | ||
| 286 | /* this is an i.MX27 CPU */ | ||
| 287 | #define cpu_is_mx27() (1) | ||
| 288 | |||
| 289 | /* this CPU supports up to 192 GPIOs (don't forget the baseboard!) */ | 123 | /* this CPU supports up to 192 GPIOs (don't forget the baseboard!) */ |
| 290 | #define ARCH_NR_GPIOS (192 + 16) | 124 | #define ARCH_NR_GPIOS (192 + 16) |
| 291 | 125 | ||
diff --git a/arch/arm/plat-mxc/include/mach/mx2x.h b/arch/arm/plat-mxc/include/mach/mx2x.h new file mode 100644 index 000000000000..fc40d3ab8c5b --- /dev/null +++ b/arch/arm/plat-mxc/include/mach/mx2x.h | |||
| @@ -0,0 +1,200 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | * Copyright 2008 Juergen Beisert, kernel@pengutronix.de | ||
| 4 | * | ||
| 5 | * This contains hardware definitions that are common between i.MX21 and | ||
| 6 | * i.MX27. | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or | ||
| 9 | * modify it under the terms of the GNU General Public License | ||
| 10 | * as published by the Free Software Foundation; either version 2 | ||
| 11 | * of the License, or (at your option) any later version. | ||
| 12 | * This program is distributed in the hope that it will be useful, | ||
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | * GNU General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License | ||
| 18 | * along with this program; if not, write to the Free Software | ||
| 19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
| 20 | * MA 02110-1301, USA. | ||
| 21 | */ | ||
| 22 | |||
| 23 | #ifndef __ASM_ARCH_MXC_MX2x_H__ | ||
| 24 | #define __ASM_ARCH_MXC_MX2x_H__ | ||
| 25 | |||
| 26 | #ifndef __ASM_ARCH_MXC_HARDWARE_H__ | ||
| 27 | #error "Do not include directly." | ||
| 28 | #endif | ||
| 29 | |||
| 30 | /* The following addresses are common between i.MX21 and i.MX27 */ | ||
| 31 | |||
| 32 | /* Register offests */ | ||
| 33 | #define AIPI_BASE_ADDR 0x10000000 | ||
| 34 | #define AIPI_BASE_ADDR_VIRT 0xF4000000 | ||
| 35 | #define AIPI_SIZE SZ_1M | ||
| 36 | |||
| 37 | #define DMA_BASE_ADDR (AIPI_BASE_ADDR + 0x01000) | ||
| 38 | #define WDOG_BASE_ADDR (AIPI_BASE_ADDR + 0x02000) | ||
| 39 | #define GPT1_BASE_ADDR (AIPI_BASE_ADDR + 0x03000) | ||
| 40 | #define GPT2_BASE_ADDR (AIPI_BASE_ADDR + 0x04000) | ||
| 41 | #define GPT3_BASE_ADDR (AIPI_BASE_ADDR + 0x05000) | ||
| 42 | #define PWM_BASE_ADDR (AIPI_BASE_ADDR + 0x06000) | ||
| 43 | #define RTC_BASE_ADDR (AIPI_BASE_ADDR + 0x07000) | ||
| 44 | #define KPP_BASE_ADDR (AIPI_BASE_ADDR + 0x08000) | ||
| 45 | #define OWIRE_BASE_ADDR (AIPI_BASE_ADDR + 0x09000) | ||
| 46 | #define UART1_BASE_ADDR (AIPI_BASE_ADDR + 0x0A000) | ||
| 47 | #define UART2_BASE_ADDR (AIPI_BASE_ADDR + 0x0B000) | ||
| 48 | #define UART3_BASE_ADDR (AIPI_BASE_ADDR + 0x0C000) | ||
| 49 | #define UART4_BASE_ADDR (AIPI_BASE_ADDR + 0x0D000) | ||
| 50 | #define CSPI1_BASE_ADDR (AIPI_BASE_ADDR + 0x0E000) | ||
| 51 | #define CSPI2_BASE_ADDR (AIPI_BASE_ADDR + 0x0F000) | ||
| 52 | #define SSI1_BASE_ADDR (AIPI_BASE_ADDR + 0x10000) | ||
| 53 | #define SSI2_BASE_ADDR (AIPI_BASE_ADDR + 0x11000) | ||
| 54 | #define I2C_BASE_ADDR (AIPI_BASE_ADDR + 0x12000) | ||
| 55 | #define SDHC1_BASE_ADDR (AIPI_BASE_ADDR + 0x13000) | ||
| 56 | #define SDHC2_BASE_ADDR (AIPI_BASE_ADDR + 0x14000) | ||
| 57 | #define GPIO_BASE_ADDR (AIPI_BASE_ADDR + 0x15000) | ||
| 58 | #define AUDMUX_BASE_ADDR (AIPI_BASE_ADDR + 0x16000) | ||
| 59 | #define CSPI3_BASE_ADDR (AIPI_BASE_ADDR + 0x17000) | ||
| 60 | #define LCDC_BASE_ADDR (AIPI_BASE_ADDR + 0x21000) | ||
| 61 | #define SLCDC_BASE_ADDR (AIPI_BASE_ADDR + 0x22000) | ||
| 62 | #define USBOTG_BASE_ADDR (AIPI_BASE_ADDR + 0x24000) | ||
| 63 | #define EMMA_PP_BASE_ADDR (AIPI_BASE_ADDR + 0x26000) | ||
| 64 | #define EMMA_PRP_BASE_ADDR (AIPI_BASE_ADDR + 0x26400) | ||
| 65 | #define CCM_BASE_ADDR (AIPI_BASE_ADDR + 0x27000) | ||
| 66 | #define SYSCTRL_BASE_ADDR (AIPI_BASE_ADDR + 0x27800) | ||
| 67 | #define JAM_BASE_ADDR (AIPI_BASE_ADDR + 0x3E000) | ||
| 68 | #define MAX_BASE_ADDR (AIPI_BASE_ADDR + 0x3F000) | ||
| 69 | |||
| 70 | #define AVIC_BASE_ADDR 0x10040000 | ||
| 71 | |||
| 72 | #define SAHB1_BASE_ADDR 0x80000000 | ||
| 73 | #define SAHB1_BASE_ADDR_VIRT 0xF4100000 | ||
| 74 | #define SAHB1_SIZE SZ_1M | ||
| 75 | |||
| 76 | #define CSI_BASE_ADDR (SAHB1_BASE_ADDR + 0x0000) | ||
| 77 | |||
| 78 | /* | ||
| 79 | * This macro defines the physical to virtual address mapping for all the | ||
| 80 | * peripheral modules. It is used by passing in the physical address as x | ||
| 81 | * and returning the virtual address. If the physical address is not mapped, | ||
| 82 | * it returns 0xDEADBEEF | ||
| 83 | */ | ||
| 84 | #define IO_ADDRESS(x) \ | ||
| 85 | (void __force __iomem *) \ | ||
| 86 | (((x >= AIPI_BASE_ADDR) && (x < (AIPI_BASE_ADDR + AIPI_SIZE))) ? \ | ||
| 87 | AIPI_IO_ADDRESS(x) : \ | ||
| 88 | ((x >= SAHB1_BASE_ADDR) && (x < (SAHB1_BASE_ADDR + SAHB1_SIZE))) ? \ | ||
| 89 | SAHB1_IO_ADDRESS(x) : \ | ||
| 90 | ((x >= X_MEMC_BASE_ADDR) && (x < (X_MEMC_BASE_ADDR + X_MEMC_SIZE))) ? \ | ||
| 91 | X_MEMC_IO_ADDRESS(x) : 0xDEADBEEF) | ||
| 92 | |||
| 93 | /* define the address mapping macros: in physical address order */ | ||
| 94 | #define AIPI_IO_ADDRESS(x) \ | ||
| 95 | (((x) - AIPI_BASE_ADDR) + AIPI_BASE_ADDR_VIRT) | ||
| 96 | |||
| 97 | #define AVIC_IO_ADDRESS(x) AIPI_IO_ADDRESS(x) | ||
| 98 | |||
| 99 | #define SAHB1_IO_ADDRESS(x) \ | ||
| 100 | (((x) - SAHB1_BASE_ADDR) + SAHB1_BASE_ADDR_VIRT) | ||
| 101 | |||
| 102 | #define CS4_IO_ADDRESS(x) \ | ||
| 103 | (((x) - CS4_BASE_ADDR) + CS4_BASE_ADDR_VIRT) | ||
| 104 | |||
| 105 | #define X_MEMC_IO_ADDRESS(x) \ | ||
| 106 | (((x) - X_MEMC_BASE_ADDR) + X_MEMC_BASE_ADDR_VIRT) | ||
| 107 | |||
| 108 | #define PCMCIA_IO_ADDRESS(x) \ | ||
| 109 | (((x) - X_MEMC_BASE_ADDR) + X_MEMC_BASE_ADDR_VIRT) | ||
| 110 | |||
| 111 | /* fixed interrupt numbers */ | ||
| 112 | #define MXC_INT_LCDC 61 | ||
| 113 | #define MXC_INT_SLCDC 60 | ||
| 114 | #define MXC_INT_EMMAPP 52 | ||
| 115 | #define MXC_INT_EMMAPRP 51 | ||
| 116 | #define MXC_INT_DMACH15 47 | ||
| 117 | #define MXC_INT_DMACH14 46 | ||
| 118 | #define MXC_INT_DMACH13 45 | ||
| 119 | #define MXC_INT_DMACH12 44 | ||
| 120 | #define MXC_INT_DMACH11 43 | ||
| 121 | #define MXC_INT_DMACH10 42 | ||
| 122 | #define MXC_INT_DMACH9 41 | ||
| 123 | #define MXC_INT_DMACH8 40 | ||
| 124 | #define MXC_INT_DMACH7 39 | ||
| 125 | #define MXC_INT_DMACH6 38 | ||
| 126 | #define MXC_INT_DMACH5 37 | ||
| 127 | #define MXC_INT_DMACH4 36 | ||
| 128 | #define MXC_INT_DMACH3 35 | ||
| 129 | #define MXC_INT_DMACH2 34 | ||
| 130 | #define MXC_INT_DMACH1 33 | ||
| 131 | #define MXC_INT_DMACH0 32 | ||
| 132 | #define MXC_INT_CSI 31 | ||
| 133 | #define MXC_INT_NANDFC 29 | ||
| 134 | #define MXC_INT_PCMCIA 28 | ||
| 135 | #define MXC_INT_WDOG 27 | ||
| 136 | #define MXC_INT_GPT1 26 | ||
| 137 | #define MXC_INT_GPT2 25 | ||
| 138 | #define MXC_INT_GPT3 24 | ||
| 139 | #define MXC_INT_GPT INT_GPT1 | ||
| 140 | #define MXC_INT_PWM 23 | ||
| 141 | #define MXC_INT_RTC 22 | ||
| 142 | #define MXC_INT_KPP 21 | ||
| 143 | #define MXC_INT_UART1 20 | ||
| 144 | #define MXC_INT_UART2 19 | ||
| 145 | #define MXC_INT_UART3 18 | ||
| 146 | #define MXC_INT_UART4 17 | ||
| 147 | #define MXC_INT_CSPI1 16 | ||
| 148 | #define MXC_INT_CSPI2 15 | ||
| 149 | #define MXC_INT_SSI1 14 | ||
| 150 | #define MXC_INT_SSI2 13 | ||
| 151 | #define MXC_INT_I2C 12 | ||
| 152 | #define MXC_INT_SDHC1 11 | ||
| 153 | #define MXC_INT_SDHC2 10 | ||
| 154 | #define MXC_INT_GPIO 8 | ||
| 155 | #define MXC_INT_CSPI3 6 | ||
| 156 | |||
| 157 | /* gpio and gpio based interrupt handling */ | ||
| 158 | #define GPIO_DR 0x1C | ||
| 159 | #define GPIO_GDIR 0x00 | ||
| 160 | #define GPIO_PSR 0x24 | ||
| 161 | #define GPIO_ICR1 0x28 | ||
| 162 | #define GPIO_ICR2 0x2C | ||
| 163 | #define GPIO_IMR 0x30 | ||
| 164 | #define GPIO_ISR 0x34 | ||
| 165 | #define GPIO_INT_LOW_LEV 0x3 | ||
| 166 | #define GPIO_INT_HIGH_LEV 0x2 | ||
| 167 | #define GPIO_INT_RISE_EDGE 0x0 | ||
| 168 | #define GPIO_INT_FALL_EDGE 0x1 | ||
| 169 | #define GPIO_INT_NONE 0x4 | ||
| 170 | |||
| 171 | /* fixed DMA request numbers */ | ||
| 172 | #define DMA_REQ_CSI_RX 31 | ||
| 173 | #define DMA_REQ_CSI_STAT 30 | ||
| 174 | #define DMA_REQ_UART1_TX 27 | ||
| 175 | #define DMA_REQ_UART1_RX 26 | ||
| 176 | #define DMA_REQ_UART2_TX 25 | ||
| 177 | #define DMA_REQ_UART2_RX 24 | ||
| 178 | #define DMA_REQ_UART3_TX 23 | ||
| 179 | #define DMA_REQ_UART3_RX 22 | ||
| 180 | #define DMA_REQ_UART4_TX 21 | ||
| 181 | #define DMA_REQ_UART4_RX 20 | ||
| 182 | #define DMA_REQ_CSPI1_TX 19 | ||
| 183 | #define DMA_REQ_CSPI1_RX 18 | ||
| 184 | #define DMA_REQ_CSPI2_TX 17 | ||
| 185 | #define DMA_REQ_CSPI2_RX 16 | ||
| 186 | #define DMA_REQ_SSI1_TX1 15 | ||
| 187 | #define DMA_REQ_SSI1_RX1 14 | ||
| 188 | #define DMA_REQ_SSI1_TX0 13 | ||
| 189 | #define DMA_REQ_SSI1_RX0 12 | ||
| 190 | #define DMA_REQ_SSI2_TX1 11 | ||
| 191 | #define DMA_REQ_SSI2_RX1 10 | ||
| 192 | #define DMA_REQ_SSI2_TX0 9 | ||
| 193 | #define DMA_REQ_SSI2_RX0 8 | ||
| 194 | #define DMA_REQ_SDHC1 7 | ||
| 195 | #define DMA_REQ_SDHC2 6 | ||
| 196 | #define DMA_REQ_EXT 3 | ||
| 197 | #define DMA_REQ_CSPI3_TX 2 | ||
| 198 | #define DMA_REQ_CSPI3_RX 1 | ||
| 199 | |||
| 200 | #endif /* __ASM_ARCH_MXC_MX2x_H__ */ | ||
diff --git a/arch/arm/plat-mxc/include/mach/mx31.h b/arch/arm/plat-mxc/include/mach/mx31.h index de026654b00e..0b06941b6139 100644 --- a/arch/arm/plat-mxc/include/mach/mx31.h +++ b/arch/arm/plat-mxc/include/mach/mx31.h | |||
| @@ -1,360 +1,45 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | */ | ||
| 4 | |||
| 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 | #ifndef __ASM_ARCH_MXC_MX31_H__ | ||
| 12 | #define __ASM_ARCH_MXC_MX31_H__ | ||
| 13 | |||
| 14 | #ifndef __ASM_ARCH_MXC_HARDWARE_H__ | ||
| 15 | #error "Do not include directly." | ||
| 16 | #endif | ||
| 17 | |||
| 18 | /* | ||
| 19 | * MX31 memory map: | ||
| 20 | * | ||
| 21 | * Virt Phys Size What | ||
| 22 | * --------------------------------------------------------------------------- | ||
| 23 | * F8000000 1FFC0000 16K IRAM | ||
| 24 | * F9000000 30000000 256M L2CC | ||
| 25 | * FC000000 43F00000 1M AIPS 1 | ||
| 26 | * FC100000 50000000 1M SPBA | ||
| 27 | * FC200000 53F00000 1M AIPS 2 | ||
| 28 | * FC500000 60000000 128M ROMPATCH | ||
| 29 | * FC400000 68000000 128M AVIC | ||
| 30 | * 70000000 256M IPU (MAX M2) | ||
| 31 | * 80000000 256M CSD0 SDRAM/DDR | ||
| 32 | * 90000000 256M CSD1 SDRAM/DDR | ||
| 33 | * A0000000 128M CS0 Flash | ||
| 34 | * A8000000 128M CS1 Flash | ||
| 35 | * B0000000 32M CS2 | ||
| 36 | * B2000000 32M CS3 | ||
| 37 | * F4000000 B4000000 32M CS4 | ||
| 38 | * B6000000 32M CS5 | ||
| 39 | * FC320000 B8000000 64K NAND, SDRAM, WEIM, M3IF, EMI controllers | ||
| 40 | * C0000000 64M PCMCIA/CF | ||
| 41 | */ | ||
| 42 | |||
| 43 | #define CS0_BASE_ADDR 0xA0000000 | ||
| 44 | #define CS1_BASE_ADDR 0xA8000000 | ||
| 45 | #define CS2_BASE_ADDR 0xB0000000 | ||
| 46 | #define CS3_BASE_ADDR 0xB2000000 | ||
| 47 | |||
| 48 | #define CS4_BASE_ADDR 0xB4000000 | ||
| 49 | #define CS4_BASE_ADDR_VIRT 0xF4000000 | ||
| 50 | #define CS4_SIZE SZ_32M | ||
| 51 | |||
| 52 | #define CS5_BASE_ADDR 0xB6000000 | ||
| 53 | #define PCMCIA_MEM_BASE_ADDR 0xBC000000 | ||
| 54 | |||
| 55 | /* | ||
| 56 | * IRAM | 2 | * IRAM |
| 57 | */ | 3 | */ |
| 58 | #define IRAM_BASE_ADDR 0x1FFC0000 /* internal ram */ | 4 | #define MX31_IRAM_BASE_ADDR 0x1FFC0000 /* internal ram */ |
| 59 | #define IRAM_BASE_ADDR_VIRT 0xF8000000 | 5 | #define MX31_IRAM_SIZE SZ_16K |
| 60 | #define IRAM_SIZE SZ_16K | ||
| 61 | |||
| 62 | /* | ||
| 63 | * L2CC | ||
| 64 | */ | ||
| 65 | #define L2CC_BASE_ADDR 0x30000000 | ||
| 66 | #define L2CC_BASE_ADDR_VIRT 0xF9000000 | ||
| 67 | #define L2CC_SIZE SZ_1M | ||
| 68 | |||
| 69 | /* | ||
| 70 | * AIPS 1 | ||
| 71 | */ | ||
| 72 | #define AIPS1_BASE_ADDR 0x43F00000 | ||
| 73 | #define AIPS1_BASE_ADDR_VIRT 0xFC000000 | ||
| 74 | #define AIPS1_SIZE SZ_1M | ||
| 75 | 6 | ||
| 76 | #define MAX_BASE_ADDR (AIPS1_BASE_ADDR + 0x00004000) | ||
| 77 | #define EVTMON_BASE_ADDR (AIPS1_BASE_ADDR + 0x00008000) | ||
| 78 | #define CLKCTL_BASE_ADDR (AIPS1_BASE_ADDR + 0x0000C000) | ||
| 79 | #define ETB_SLOT4_BASE_ADDR (AIPS1_BASE_ADDR + 0x00010000) | ||
| 80 | #define ETB_SLOT5_BASE_ADDR (AIPS1_BASE_ADDR + 0x00014000) | ||
| 81 | #define ECT_CTIO_BASE_ADDR (AIPS1_BASE_ADDR + 0x00018000) | ||
| 82 | #define I2C_BASE_ADDR (AIPS1_BASE_ADDR + 0x00080000) | ||
| 83 | #define I2C3_BASE_ADDR (AIPS1_BASE_ADDR + 0x00084000) | ||
| 84 | #define OTG_BASE_ADDR (AIPS1_BASE_ADDR + 0x00088000) | 7 | #define OTG_BASE_ADDR (AIPS1_BASE_ADDR + 0x00088000) |
| 85 | #define ATA_BASE_ADDR (AIPS1_BASE_ADDR + 0x0008C000) | 8 | #define ATA_BASE_ADDR (AIPS1_BASE_ADDR + 0x0008C000) |
| 86 | #define UART1_BASE_ADDR (AIPS1_BASE_ADDR + 0x00090000) | ||
| 87 | #define UART2_BASE_ADDR (AIPS1_BASE_ADDR + 0x00094000) | ||
| 88 | #define I2C2_BASE_ADDR (AIPS1_BASE_ADDR + 0x00098000) | ||
| 89 | #define OWIRE_BASE_ADDR (AIPS1_BASE_ADDR + 0x0009C000) | ||
| 90 | #define SSI1_BASE_ADDR (AIPS1_BASE_ADDR + 0x000A0000) | ||
| 91 | #define CSPI1_BASE_ADDR (AIPS1_BASE_ADDR + 0x000A4000) | ||
| 92 | #define KPP_BASE_ADDR (AIPS1_BASE_ADDR + 0x000A8000) | ||
| 93 | #define IOMUXC_BASE_ADDR (AIPS1_BASE_ADDR + 0x000AC000) | ||
| 94 | #define UART4_BASE_ADDR (AIPS1_BASE_ADDR + 0x000B0000) | 9 | #define UART4_BASE_ADDR (AIPS1_BASE_ADDR + 0x000B0000) |
| 95 | #define UART5_BASE_ADDR (AIPS1_BASE_ADDR + 0x000B4000) | 10 | #define UART5_BASE_ADDR (AIPS1_BASE_ADDR + 0x000B4000) |
| 96 | #define ECT_IP1_BASE_ADDR (AIPS1_BASE_ADDR + 0x000B8000) | ||
| 97 | #define ECT_IP2_BASE_ADDR (AIPS1_BASE_ADDR + 0x000BC000) | ||
| 98 | |||
| 99 | /* | ||
| 100 | * SPBA global module enabled #0 | ||
| 101 | */ | ||
| 102 | #define SPBA0_BASE_ADDR 0x50000000 | ||
| 103 | #define SPBA0_BASE_ADDR_VIRT 0xFC100000 | ||
| 104 | #define SPBA0_SIZE SZ_1M | ||
| 105 | 11 | ||
| 106 | #define MMC_SDHC1_BASE_ADDR (SPBA0_BASE_ADDR + 0x00004000) | 12 | #define MMC_SDHC1_BASE_ADDR (SPBA0_BASE_ADDR + 0x00004000) |
| 107 | #define MMC_SDHC2_BASE_ADDR (SPBA0_BASE_ADDR + 0x00008000) | 13 | #define MMC_SDHC2_BASE_ADDR (SPBA0_BASE_ADDR + 0x00008000) |
| 108 | #define UART3_BASE_ADDR (SPBA0_BASE_ADDR + 0x0000C000) | ||
| 109 | #define CSPI2_BASE_ADDR (SPBA0_BASE_ADDR + 0x00010000) | ||
| 110 | #define SSI2_BASE_ADDR (SPBA0_BASE_ADDR + 0x00014000) | ||
| 111 | #define SIM1_BASE_ADDR (SPBA0_BASE_ADDR + 0x00018000) | 14 | #define SIM1_BASE_ADDR (SPBA0_BASE_ADDR + 0x00018000) |
| 112 | #define IIM_BASE_ADDR (SPBA0_BASE_ADDR + 0x0001C000) | 15 | #define IIM_BASE_ADDR (SPBA0_BASE_ADDR + 0x0001C000) |
| 113 | #define ATA_DMA_BASE_ADDR (SPBA0_BASE_ADDR + 0x00020000) | ||
| 114 | #define MSHC1_BASE_ADDR (SPBA0_BASE_ADDR + 0x00024000) | ||
| 115 | #define MSHC2_BASE_ADDR (SPBA0_BASE_ADDR + 0x00024000) | ||
| 116 | #define SPBA_CTRL_BASE_ADDR (SPBA0_BASE_ADDR + 0x0003C000) | ||
| 117 | 16 | ||
| 118 | /* | ||
| 119 | * AIPS 2 | ||
| 120 | */ | ||
| 121 | #define AIPS2_BASE_ADDR 0x53F00000 | ||
| 122 | #define AIPS2_BASE_ADDR_VIRT 0xFC200000 | ||
| 123 | #define AIPS2_SIZE SZ_1M | ||
| 124 | #define CCM_BASE_ADDR (AIPS2_BASE_ADDR + 0x00080000) | ||
| 125 | #define CSPI3_BASE_ADDR (AIPS2_BASE_ADDR + 0x00084000) | 17 | #define CSPI3_BASE_ADDR (AIPS2_BASE_ADDR + 0x00084000) |
| 126 | #define FIRI_BASE_ADDR (AIPS2_BASE_ADDR + 0x0008C000) | 18 | #define FIRI_BASE_ADDR (AIPS2_BASE_ADDR + 0x0008C000) |
| 127 | #define GPT1_BASE_ADDR (AIPS2_BASE_ADDR + 0x00090000) | ||
| 128 | #define EPIT1_BASE_ADDR (AIPS2_BASE_ADDR + 0x00094000) | ||
| 129 | #define EPIT2_BASE_ADDR (AIPS2_BASE_ADDR + 0x00098000) | ||
| 130 | #define GPIO3_BASE_ADDR (AIPS2_BASE_ADDR + 0x000A4000) | ||
| 131 | #define SCC_BASE_ADDR (AIPS2_BASE_ADDR + 0x000AC000) | ||
| 132 | #define SCM_BASE_ADDR (AIPS2_BASE_ADDR + 0x000AE000) | 19 | #define SCM_BASE_ADDR (AIPS2_BASE_ADDR + 0x000AE000) |
| 133 | #define SMN_BASE_ADDR (AIPS2_BASE_ADDR + 0x000AF000) | 20 | #define SMN_BASE_ADDR (AIPS2_BASE_ADDR + 0x000AF000) |
| 134 | #define RNGA_BASE_ADDR (AIPS2_BASE_ADDR + 0x000B0000) | ||
| 135 | #define IPU_CTRL_BASE_ADDR (AIPS2_BASE_ADDR + 0x000C0000) | ||
| 136 | #define AUDMUX_BASE_ADDR (AIPS2_BASE_ADDR + 0x000C4000) | ||
| 137 | #define MPEG4_ENC_BASE_ADDR (AIPS2_BASE_ADDR + 0x000C8000) | 21 | #define MPEG4_ENC_BASE_ADDR (AIPS2_BASE_ADDR + 0x000C8000) |
| 138 | #define GPIO1_BASE_ADDR (AIPS2_BASE_ADDR + 0x000CC000) | ||
| 139 | #define GPIO2_BASE_ADDR (AIPS2_BASE_ADDR + 0x000D0000) | ||
| 140 | #define SDMA_BASE_ADDR (AIPS2_BASE_ADDR + 0x000D4000) | ||
| 141 | #define RTC_BASE_ADDR (AIPS2_BASE_ADDR + 0x000D8000) | ||
| 142 | #define WDOG_BASE_ADDR (AIPS2_BASE_ADDR + 0x000DC000) | ||
| 143 | #define PWM_BASE_ADDR (AIPS2_BASE_ADDR + 0x000E0000) | ||
| 144 | #define RTIC_BASE_ADDR (AIPS2_BASE_ADDR + 0x000EC000) | ||
| 145 | |||
| 146 | /* | ||
| 147 | * ROMP and AVIC | ||
| 148 | */ | ||
| 149 | #define ROMP_BASE_ADDR 0x60000000 | ||
| 150 | #define ROMP_BASE_ADDR_VIRT 0xFC500000 | ||
| 151 | #define ROMP_SIZE SZ_1M | ||
| 152 | |||
| 153 | #define AVIC_BASE_ADDR 0x68000000 | ||
| 154 | #define AVIC_BASE_ADDR_VIRT 0xFC400000 | ||
| 155 | #define AVIC_SIZE SZ_1M | ||
| 156 | |||
| 157 | /* | ||
| 158 | * NAND, SDRAM, WEIM, M3IF, EMI controllers | ||
| 159 | */ | ||
| 160 | #define X_MEMC_BASE_ADDR 0xB8000000 | ||
| 161 | #define X_MEMC_BASE_ADDR_VIRT 0xFC320000 | ||
| 162 | #define X_MEMC_SIZE SZ_64K | ||
| 163 | 22 | ||
| 164 | #define NFC_BASE_ADDR (X_MEMC_BASE_ADDR + 0x0000) | 23 | #define MX31_NFC_BASE_ADDR (X_MEMC_BASE_ADDR + 0x0000) |
| 165 | #define ESDCTL_BASE_ADDR (X_MEMC_BASE_ADDR + 0x1000) | ||
| 166 | #define WEIM_BASE_ADDR (X_MEMC_BASE_ADDR + 0x2000) | ||
| 167 | #define M3IF_BASE_ADDR (X_MEMC_BASE_ADDR + 0x3000) | ||
| 168 | #define EMI_CTL_BASE_ADDR (X_MEMC_BASE_ADDR + 0x4000) | ||
| 169 | #define PCMCIA_CTL_BASE_ADDR EMI_CTL_BASE_ADDR | ||
| 170 | 24 | ||
| 171 | /* | ||
| 172 | * Memory regions and CS | ||
| 173 | */ | ||
| 174 | #define IPU_MEM_BASE_ADDR 0x70000000 | ||
| 175 | #define CSD0_BASE_ADDR 0x80000000 | ||
| 176 | #define CSD1_BASE_ADDR 0x90000000 | ||
| 177 | #define CS0_BASE_ADDR 0xA0000000 | ||
| 178 | #define CS1_BASE_ADDR 0xA8000000 | ||
| 179 | #define CS2_BASE_ADDR 0xB0000000 | ||
| 180 | #define CS3_BASE_ADDR 0xB2000000 | ||
| 181 | |||
| 182 | #define CS4_BASE_ADDR 0xB4000000 | ||
| 183 | #define CS4_BASE_ADDR_VIRT 0xF4000000 | ||
| 184 | #define CS4_SIZE SZ_32M | ||
| 185 | |||
| 186 | #define CS5_BASE_ADDR 0xB6000000 | ||
| 187 | #define PCMCIA_MEM_BASE_ADDR 0xBC000000 | ||
| 188 | |||
| 189 | /*! | ||
| 190 | * This macro defines the physical to virtual address mapping for all the | ||
| 191 | * peripheral modules. It is used by passing in the physical address as x | ||
| 192 | * and returning the virtual address. If the physical address is not mapped, | ||
| 193 | * it returns 0xDEADBEEF | ||
| 194 | */ | ||
| 195 | #define IO_ADDRESS(x) \ | ||
| 196 | (void __iomem *) \ | ||
| 197 | (((x >= IRAM_BASE_ADDR) && (x < (IRAM_BASE_ADDR + IRAM_SIZE))) ? IRAM_IO_ADDRESS(x):\ | ||
| 198 | ((x >= L2CC_BASE_ADDR) && (x < (L2CC_BASE_ADDR + L2CC_SIZE))) ? L2CC_IO_ADDRESS(x):\ | ||
| 199 | ((x >= AIPS1_BASE_ADDR) && (x < (AIPS1_BASE_ADDR + AIPS1_SIZE))) ? AIPS1_IO_ADDRESS(x):\ | ||
| 200 | ((x >= SPBA0_BASE_ADDR) && (x < (SPBA0_BASE_ADDR + SPBA0_SIZE))) ? SPBA0_IO_ADDRESS(x):\ | ||
| 201 | ((x >= AIPS2_BASE_ADDR) && (x < (AIPS2_BASE_ADDR + AIPS2_SIZE))) ? AIPS2_IO_ADDRESS(x):\ | ||
| 202 | ((x >= ROMP_BASE_ADDR) && (x < (ROMP_BASE_ADDR + ROMP_SIZE))) ? ROMP_IO_ADDRESS(x):\ | ||
| 203 | ((x >= AVIC_BASE_ADDR) && (x < (AVIC_BASE_ADDR + AVIC_SIZE))) ? AVIC_IO_ADDRESS(x):\ | ||
| 204 | ((x >= CS4_BASE_ADDR) && (x < (CS4_BASE_ADDR + CS4_SIZE))) ? CS4_IO_ADDRESS(x):\ | ||
| 205 | ((x >= X_MEMC_BASE_ADDR) && (x < (X_MEMC_BASE_ADDR + X_MEMC_SIZE))) ? X_MEMC_IO_ADDRESS(x):\ | ||
| 206 | 0xDEADBEEF) | ||
| 207 | |||
| 208 | /* | ||
| 209 | * define the address mapping macros: in physical address order | ||
| 210 | */ | ||
| 211 | |||
| 212 | #define IRAM_IO_ADDRESS(x) \ | ||
| 213 | (((x) - IRAM_BASE_ADDR) + IRAM_BASE_ADDR_VIRT) | ||
| 214 | |||
| 215 | #define L2CC_IO_ADDRESS(x) \ | ||
| 216 | (((x) - L2CC_BASE_ADDR) + L2CC_BASE_ADDR_VIRT) | ||
| 217 | |||
| 218 | #define AIPS1_IO_ADDRESS(x) \ | ||
| 219 | (((x) - AIPS1_BASE_ADDR) + AIPS1_BASE_ADDR_VIRT) | ||
| 220 | |||
| 221 | #define SPBA0_IO_ADDRESS(x) \ | ||
| 222 | (((x) - SPBA0_BASE_ADDR) + SPBA0_BASE_ADDR_VIRT) | ||
| 223 | |||
| 224 | #define AIPS2_IO_ADDRESS(x) \ | ||
| 225 | (((x) - AIPS2_BASE_ADDR) + AIPS2_BASE_ADDR_VIRT) | ||
| 226 | |||
| 227 | #define ROMP_IO_ADDRESS(x) \ | ||
| 228 | (((x) - ROMP_BASE_ADDR) + ROMP_BASE_ADDR_VIRT) | ||
| 229 | |||
| 230 | #define AVIC_IO_ADDRESS(x) \ | ||
| 231 | (((x) - AVIC_BASE_ADDR) + AVIC_BASE_ADDR_VIRT) | ||
| 232 | |||
| 233 | #define CS4_IO_ADDRESS(x) \ | ||
| 234 | (((x) - CS4_BASE_ADDR) + CS4_BASE_ADDR_VIRT) | ||
| 235 | |||
| 236 | #define X_MEMC_IO_ADDRESS(x) \ | ||
| 237 | (((x) - X_MEMC_BASE_ADDR) + X_MEMC_BASE_ADDR_VIRT) | ||
| 238 | |||
| 239 | #define PCMCIA_IO_ADDRESS(x) \ | ||
| 240 | (((x) - X_MEMC_BASE_ADDR) + X_MEMC_BASE_ADDR_VIRT) | ||
| 241 | |||
| 242 | /* | ||
| 243 | * Interrupt numbers | ||
| 244 | */ | ||
| 245 | #define MXC_INT_PEN_ADS7843 0 | ||
| 246 | #define MXC_INT_RESV1 1 | ||
| 247 | #define MXC_INT_CS8900A 2 | ||
| 248 | #define MXC_INT_I2C3 3 | ||
| 249 | #define MXC_INT_I2C2 4 | ||
| 250 | #define MXC_INT_MPEG4_ENCODER 5 | 25 | #define MXC_INT_MPEG4_ENCODER 5 |
| 251 | #define MXC_INT_RTIC 6 | ||
| 252 | #define MXC_INT_FIRI 7 | 26 | #define MXC_INT_FIRI 7 |
| 253 | #define MXC_INT_MMC_SDHC2 8 | 27 | #define MX31_INT_MMC_SDHC2 8 |
| 254 | #define MXC_INT_MMC_SDHC1 9 | 28 | #define MXC_INT_MMC_SDHC1 9 |
| 255 | #define MXC_INT_I2C 10 | 29 | #define MX31_INT_SSI2 11 |
| 256 | #define MXC_INT_SSI2 11 | 30 | #define MX31_INT_SSI1 12 |
| 257 | #define MXC_INT_SSI1 12 | ||
| 258 | #define MXC_INT_CSPI2 13 | ||
| 259 | #define MXC_INT_CSPI1 14 | ||
| 260 | #define MXC_INT_ATA 15 | ||
| 261 | #define MXC_INT_MBX 16 | 31 | #define MXC_INT_MBX 16 |
| 262 | #define MXC_INT_CSPI3 17 | 32 | #define MXC_INT_CSPI3 17 |
| 263 | #define MXC_INT_UART3 18 | ||
| 264 | #define MXC_INT_IIM 19 | ||
| 265 | #define MXC_INT_SIM2 20 | 33 | #define MXC_INT_SIM2 20 |
| 266 | #define MXC_INT_SIM1 21 | 34 | #define MXC_INT_SIM1 21 |
| 267 | #define MXC_INT_RNGA 22 | 35 | #define MXC_INT_CCM_DVFS 31 |
| 268 | #define MXC_INT_EVTMON 23 | ||
| 269 | #define MXC_INT_KPP 24 | ||
| 270 | #define MXC_INT_RTC 25 | ||
| 271 | #define MXC_INT_PWM 26 | ||
| 272 | #define MXC_INT_EPIT2 27 | ||
| 273 | #define MXC_INT_EPIT1 28 | ||
| 274 | #define MXC_INT_GPT 29 | ||
| 275 | #define MXC_INT_RESV30 30 | ||
| 276 | #define MXC_INT_RESV31 31 | ||
| 277 | #define MXC_INT_UART2 32 | ||
| 278 | #define MXC_INT_NANDFC 33 | ||
| 279 | #define MXC_INT_SDMA 34 | ||
| 280 | #define MXC_INT_USB1 35 | 36 | #define MXC_INT_USB1 35 |
| 281 | #define MXC_INT_USB2 36 | 37 | #define MXC_INT_USB2 36 |
| 282 | #define MXC_INT_USB3 37 | 38 | #define MXC_INT_USB3 37 |
| 283 | #define MXC_INT_USB4 38 | 39 | #define MXC_INT_USB4 38 |
| 284 | #define MXC_INT_MSHC1 39 | ||
| 285 | #define MXC_INT_MSHC2 40 | 40 | #define MXC_INT_MSHC2 40 |
| 286 | #define MXC_INT_IPU_ERR 41 | ||
| 287 | #define MXC_INT_IPU_SYN 42 | ||
| 288 | #define MXC_INT_RESV43 43 | ||
| 289 | #define MXC_INT_RESV44 44 | ||
| 290 | #define MXC_INT_UART1 45 | ||
| 291 | #define MXC_INT_UART4 46 | 41 | #define MXC_INT_UART4 46 |
| 292 | #define MXC_INT_UART5 47 | 42 | #define MXC_INT_UART5 47 |
| 293 | #define MXC_INT_ECT 48 | ||
| 294 | #define MXC_INT_SCC_SCM 49 | ||
| 295 | #define MXC_INT_SCC_SMN 50 | ||
| 296 | #define MXC_INT_GPIO2 51 | ||
| 297 | #define MXC_INT_GPIO1 52 | ||
| 298 | #define MXC_INT_CCM 53 | 43 | #define MXC_INT_CCM 53 |
| 299 | #define MXC_INT_PCMCIA 54 | 44 | #define MXC_INT_PCMCIA 54 |
| 300 | #define MXC_INT_WDOG 55 | ||
| 301 | #define MXC_INT_GPIO3 56 | ||
| 302 | #define MXC_INT_RESV57 57 | ||
| 303 | #define MXC_INT_EXT_POWER 58 | ||
| 304 | #define MXC_INT_EXT_TEMPER 59 | ||
| 305 | #define MXC_INT_EXT_SENSOR60 60 | ||
| 306 | #define MXC_INT_EXT_SENSOR61 61 | ||
| 307 | #define MXC_INT_EXT_WDOG 62 | ||
| 308 | #define MXC_INT_EXT_TV 63 | ||
| 309 | |||
| 310 | #define PROD_SIGNATURE 0x1 /* For MX31 */ | ||
| 311 | |||
| 312 | /* silicon revisions specific to i.MX31 */ | ||
| 313 | #define CHIP_REV_1_0 0x10 | ||
| 314 | #define CHIP_REV_1_1 0x11 | ||
| 315 | #define CHIP_REV_1_2 0x12 | ||
| 316 | #define CHIP_REV_1_3 0x13 | ||
| 317 | #define CHIP_REV_2_0 0x20 | ||
| 318 | #define CHIP_REV_2_1 0x21 | ||
| 319 | #define CHIP_REV_2_2 0x22 | ||
| 320 | #define CHIP_REV_2_3 0x23 | ||
| 321 | #define CHIP_REV_3_0 0x30 | ||
| 322 | #define CHIP_REV_3_1 0x31 | ||
| 323 | #define CHIP_REV_3_2 0x32 | ||
| 324 | |||
| 325 | #define SYSTEM_REV_MIN CHIP_REV_1_0 | ||
| 326 | #define SYSTEM_REV_NUM 3 | ||
| 327 | |||
| 328 | /* gpio and gpio based interrupt handling */ | ||
| 329 | #define GPIO_DR 0x00 | ||
| 330 | #define GPIO_GDIR 0x04 | ||
| 331 | #define GPIO_PSR 0x08 | ||
| 332 | #define GPIO_ICR1 0x0C | ||
| 333 | #define GPIO_ICR2 0x10 | ||
| 334 | #define GPIO_IMR 0x14 | ||
| 335 | #define GPIO_ISR 0x18 | ||
| 336 | #define GPIO_INT_LOW_LEV 0x0 | ||
| 337 | #define GPIO_INT_HIGH_LEV 0x1 | ||
| 338 | #define GPIO_INT_RISE_EDGE 0x2 | ||
| 339 | #define GPIO_INT_FALL_EDGE 0x3 | ||
| 340 | #define GPIO_INT_NONE 0x4 | ||
| 341 | |||
| 342 | /* Mandatory defines used globally */ | ||
| 343 | |||
| 344 | /* this CPU supports up to 96 GPIOs */ | ||
| 345 | #define ARCH_NR_GPIOS 96 | ||
| 346 | |||
| 347 | #if !defined(__ASSEMBLY__) && !defined(__MXC_BOOT_UNCOMPRESS) | ||
| 348 | |||
| 349 | /* this is a i.MX31 CPU */ | ||
| 350 | #define cpu_is_mx31() (1) | ||
| 351 | |||
| 352 | extern unsigned int system_rev; | ||
| 353 | |||
| 354 | static inline int mx31_revision(void) | ||
| 355 | { | ||
| 356 | return system_rev; | ||
| 357 | } | ||
| 358 | #endif | ||
| 359 | 45 | ||
| 360 | #endif /* __ASM_ARCH_MXC_MX31_H__ */ | ||
diff --git a/arch/arm/plat-mxc/include/mach/mx35.h b/arch/arm/plat-mxc/include/mach/mx35.h new file mode 100644 index 000000000000..6465fefb42e3 --- /dev/null +++ b/arch/arm/plat-mxc/include/mach/mx35.h | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | /* | ||
| 2 | * IRAM | ||
| 3 | */ | ||
| 4 | #define MX35_IRAM_BASE_ADDR 0x10000000 /* internal ram */ | ||
| 5 | #define MX35_IRAM_SIZE SZ_128K | ||
| 6 | |||
| 7 | #define MXC_FEC_BASE_ADDR 0x50038000 | ||
| 8 | #define MX35_NFC_BASE_ADDR 0xBB000000 | ||
| 9 | |||
| 10 | /* | ||
| 11 | * Interrupt numbers | ||
| 12 | */ | ||
| 13 | #define MXC_INT_OWIRE 2 | ||
| 14 | #define MX35_INT_MMC_SDHC1 7 | ||
| 15 | #define MXC_INT_MMC_SDHC2 8 | ||
| 16 | #define MXC_INT_MMC_SDHC3 9 | ||
| 17 | #define MX35_INT_SSI1 11 | ||
| 18 | #define MX35_INT_SSI2 12 | ||
| 19 | #define MXC_INT_GPU2D 16 | ||
| 20 | #define MXC_INT_ASRC 17 | ||
| 21 | #define MXC_INT_USBHS 35 | ||
| 22 | #define MXC_INT_USBOTG 37 | ||
| 23 | #define MXC_INT_ESAI 40 | ||
| 24 | #define MXC_INT_CAN1 43 | ||
| 25 | #define MXC_INT_CAN2 44 | ||
| 26 | #define MXC_INT_MLB 46 | ||
| 27 | #define MXC_INT_SPDIF 47 | ||
| 28 | #define MXC_INT_FEC 57 | ||
| 29 | |||
diff --git a/arch/arm/plat-mxc/include/mach/mx3x.h b/arch/arm/plat-mxc/include/mach/mx3x.h new file mode 100644 index 000000000000..3878c6085d5c --- /dev/null +++ b/arch/arm/plat-mxc/include/mach/mx3x.h | |||
| @@ -0,0 +1,290 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | */ | ||
| 4 | |||
| 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 | #ifndef __ASM_ARCH_MXC_MX31_H__ | ||
| 12 | #define __ASM_ARCH_MXC_MX31_H__ | ||
| 13 | |||
| 14 | #ifndef __ASM_ARCH_MXC_HARDWARE_H__ | ||
| 15 | #error "Do not include directly." | ||
| 16 | #endif | ||
| 17 | |||
| 18 | /* | ||
| 19 | * MX31 memory map: | ||
| 20 | * | ||
| 21 | * Virt Phys Size What | ||
| 22 | * --------------------------------------------------------------------------- | ||
| 23 | * FC000000 43F00000 1M AIPS 1 | ||
| 24 | * FC100000 50000000 1M SPBA | ||
| 25 | * FC200000 53F00000 1M AIPS 2 | ||
| 26 | * FC500000 60000000 128M ROMPATCH | ||
| 27 | * FC400000 68000000 128M AVIC | ||
| 28 | * 70000000 256M IPU (MAX M2) | ||
| 29 | * 80000000 256M CSD0 SDRAM/DDR | ||
| 30 | * 90000000 256M CSD1 SDRAM/DDR | ||
| 31 | * A0000000 128M CS0 Flash | ||
| 32 | * A8000000 128M CS1 Flash | ||
| 33 | * B0000000 32M CS2 | ||
| 34 | * B2000000 32M CS3 | ||
| 35 | * F4000000 B4000000 32M CS4 | ||
| 36 | * B6000000 32M CS5 | ||
| 37 | * FC320000 B8000000 64K NAND, SDRAM, WEIM, M3IF, EMI controllers | ||
| 38 | * C0000000 64M PCMCIA/CF | ||
| 39 | */ | ||
| 40 | |||
| 41 | #define CS0_BASE_ADDR 0xA0000000 | ||
| 42 | #define CS1_BASE_ADDR 0xA8000000 | ||
| 43 | #define CS2_BASE_ADDR 0xB0000000 | ||
| 44 | #define CS3_BASE_ADDR 0xB2000000 | ||
| 45 | |||
| 46 | #define CS4_BASE_ADDR 0xB4000000 | ||
| 47 | #define CS4_BASE_ADDR_VIRT 0xF4000000 | ||
| 48 | #define CS4_SIZE SZ_32M | ||
| 49 | |||
| 50 | #define CS5_BASE_ADDR 0xB6000000 | ||
| 51 | #define PCMCIA_MEM_BASE_ADDR 0xBC000000 | ||
| 52 | |||
| 53 | /* | ||
| 54 | * L2CC | ||
| 55 | */ | ||
| 56 | #define L2CC_BASE_ADDR 0x30000000 | ||
| 57 | #define L2CC_SIZE SZ_1M | ||
| 58 | |||
| 59 | /* | ||
| 60 | * AIPS 1 | ||
| 61 | */ | ||
| 62 | #define AIPS1_BASE_ADDR 0x43F00000 | ||
| 63 | #define AIPS1_BASE_ADDR_VIRT 0xFC000000 | ||
| 64 | #define AIPS1_SIZE SZ_1M | ||
| 65 | |||
| 66 | #define MAX_BASE_ADDR (AIPS1_BASE_ADDR + 0x00004000) | ||
| 67 | #define EVTMON_BASE_ADDR (AIPS1_BASE_ADDR + 0x00008000) | ||
| 68 | #define CLKCTL_BASE_ADDR (AIPS1_BASE_ADDR + 0x0000C000) | ||
| 69 | #define ETB_SLOT4_BASE_ADDR (AIPS1_BASE_ADDR + 0x00010000) | ||
| 70 | #define ETB_SLOT5_BASE_ADDR (AIPS1_BASE_ADDR + 0x00014000) | ||
| 71 | #define ECT_CTIO_BASE_ADDR (AIPS1_BASE_ADDR + 0x00018000) | ||
| 72 | #define I2C_BASE_ADDR (AIPS1_BASE_ADDR + 0x00080000) | ||
| 73 | #define I2C3_BASE_ADDR (AIPS1_BASE_ADDR + 0x00084000) | ||
| 74 | #define UART1_BASE_ADDR (AIPS1_BASE_ADDR + 0x00090000) | ||
| 75 | #define UART2_BASE_ADDR (AIPS1_BASE_ADDR + 0x00094000) | ||
| 76 | #define I2C2_BASE_ADDR (AIPS1_BASE_ADDR + 0x00098000) | ||
| 77 | #define OWIRE_BASE_ADDR (AIPS1_BASE_ADDR + 0x0009C000) | ||
| 78 | #define SSI1_BASE_ADDR (AIPS1_BASE_ADDR + 0x000A0000) | ||
| 79 | #define CSPI1_BASE_ADDR (AIPS1_BASE_ADDR + 0x000A4000) | ||
| 80 | #define KPP_BASE_ADDR (AIPS1_BASE_ADDR + 0x000A8000) | ||
| 81 | #define IOMUXC_BASE_ADDR (AIPS1_BASE_ADDR + 0x000AC000) | ||
| 82 | #define ECT_IP1_BASE_ADDR (AIPS1_BASE_ADDR + 0x000B8000) | ||
| 83 | #define ECT_IP2_BASE_ADDR (AIPS1_BASE_ADDR + 0x000BC000) | ||
| 84 | |||
| 85 | /* | ||
| 86 | * SPBA global module enabled #0 | ||
| 87 | */ | ||
| 88 | #define SPBA0_BASE_ADDR 0x50000000 | ||
| 89 | #define SPBA0_BASE_ADDR_VIRT 0xFC100000 | ||
| 90 | #define SPBA0_SIZE SZ_1M | ||
| 91 | |||
| 92 | #define UART3_BASE_ADDR (SPBA0_BASE_ADDR + 0x0000C000) | ||
| 93 | #define CSPI2_BASE_ADDR (SPBA0_BASE_ADDR + 0x00010000) | ||
| 94 | #define SSI2_BASE_ADDR (SPBA0_BASE_ADDR + 0x00014000) | ||
| 95 | #define ATA_DMA_BASE_ADDR (SPBA0_BASE_ADDR + 0x00020000) | ||
| 96 | #define MSHC1_BASE_ADDR (SPBA0_BASE_ADDR + 0x00024000) | ||
| 97 | #define SPBA_CTRL_BASE_ADDR (SPBA0_BASE_ADDR + 0x0003C000) | ||
| 98 | |||
| 99 | /* | ||
| 100 | * AIPS 2 | ||
| 101 | */ | ||
| 102 | #define AIPS2_BASE_ADDR 0x53F00000 | ||
| 103 | #define AIPS2_BASE_ADDR_VIRT 0xFC200000 | ||
| 104 | #define AIPS2_SIZE SZ_1M | ||
| 105 | #define CCM_BASE_ADDR (AIPS2_BASE_ADDR + 0x00080000) | ||
| 106 | #define GPT1_BASE_ADDR (AIPS2_BASE_ADDR + 0x00090000) | ||
| 107 | #define EPIT1_BASE_ADDR (AIPS2_BASE_ADDR + 0x00094000) | ||
| 108 | #define EPIT2_BASE_ADDR (AIPS2_BASE_ADDR + 0x00098000) | ||
| 109 | #define GPIO3_BASE_ADDR (AIPS2_BASE_ADDR + 0x000A4000) | ||
| 110 | #define SCC_BASE_ADDR (AIPS2_BASE_ADDR + 0x000AC000) | ||
| 111 | #define RNGA_BASE_ADDR (AIPS2_BASE_ADDR + 0x000B0000) | ||
| 112 | #define IPU_CTRL_BASE_ADDR (AIPS2_BASE_ADDR + 0x000C0000) | ||
| 113 | #define AUDMUX_BASE_ADDR (AIPS2_BASE_ADDR + 0x000C4000) | ||
| 114 | #define GPIO1_BASE_ADDR (AIPS2_BASE_ADDR + 0x000CC000) | ||
| 115 | #define GPIO2_BASE_ADDR (AIPS2_BASE_ADDR + 0x000D0000) | ||
| 116 | #define SDMA_BASE_ADDR (AIPS2_BASE_ADDR + 0x000D4000) | ||
| 117 | #define RTC_BASE_ADDR (AIPS2_BASE_ADDR + 0x000D8000) | ||
| 118 | #define WDOG_BASE_ADDR (AIPS2_BASE_ADDR + 0x000DC000) | ||
| 119 | #define PWM_BASE_ADDR (AIPS2_BASE_ADDR + 0x000E0000) | ||
| 120 | #define RTIC_BASE_ADDR (AIPS2_BASE_ADDR + 0x000EC000) | ||
| 121 | |||
| 122 | /* | ||
| 123 | * ROMP and AVIC | ||
| 124 | */ | ||
| 125 | #define ROMP_BASE_ADDR 0x60000000 | ||
| 126 | #define ROMP_BASE_ADDR_VIRT 0xFC500000 | ||
| 127 | #define ROMP_SIZE SZ_1M | ||
| 128 | |||
| 129 | #define AVIC_BASE_ADDR 0x68000000 | ||
| 130 | #define AVIC_BASE_ADDR_VIRT 0xFC400000 | ||
| 131 | #define AVIC_SIZE SZ_1M | ||
| 132 | |||
| 133 | /* | ||
| 134 | * NAND, SDRAM, WEIM, M3IF, EMI controllers | ||
| 135 | */ | ||
| 136 | #define X_MEMC_BASE_ADDR 0xB8000000 | ||
| 137 | #define X_MEMC_BASE_ADDR_VIRT 0xFC320000 | ||
| 138 | #define X_MEMC_SIZE SZ_64K | ||
| 139 | |||
| 140 | #define ESDCTL_BASE_ADDR (X_MEMC_BASE_ADDR + 0x1000) | ||
| 141 | #define WEIM_BASE_ADDR (X_MEMC_BASE_ADDR + 0x2000) | ||
| 142 | #define M3IF_BASE_ADDR (X_MEMC_BASE_ADDR + 0x3000) | ||
| 143 | #define EMI_CTL_BASE_ADDR (X_MEMC_BASE_ADDR + 0x4000) | ||
| 144 | #define PCMCIA_CTL_BASE_ADDR EMI_CTL_BASE_ADDR | ||
| 145 | |||
| 146 | /* | ||
| 147 | * Memory regions and CS | ||
| 148 | */ | ||
| 149 | #define IPU_MEM_BASE_ADDR 0x70000000 | ||
| 150 | #define CSD0_BASE_ADDR 0x80000000 | ||
| 151 | #define CSD1_BASE_ADDR 0x90000000 | ||
| 152 | |||
| 153 | /*! | ||
| 154 | * This macro defines the physical to virtual address mapping for all the | ||
| 155 | * peripheral modules. It is used by passing in the physical address as x | ||
| 156 | * and returning the virtual address. If the physical address is not mapped, | ||
| 157 | * it returns 0xDEADBEEF | ||
| 158 | */ | ||
| 159 | #define IO_ADDRESS(x) \ | ||
| 160 | (void __force __iomem *) \ | ||
| 161 | (((x >= AIPS1_BASE_ADDR) && (x < (AIPS1_BASE_ADDR + AIPS1_SIZE))) ? AIPS1_IO_ADDRESS(x):\ | ||
| 162 | ((x >= SPBA0_BASE_ADDR) && (x < (SPBA0_BASE_ADDR + SPBA0_SIZE))) ? SPBA0_IO_ADDRESS(x):\ | ||
| 163 | ((x >= AIPS2_BASE_ADDR) && (x < (AIPS2_BASE_ADDR + AIPS2_SIZE))) ? AIPS2_IO_ADDRESS(x):\ | ||
| 164 | ((x >= ROMP_BASE_ADDR) && (x < (ROMP_BASE_ADDR + ROMP_SIZE))) ? ROMP_IO_ADDRESS(x):\ | ||
| 165 | ((x >= AVIC_BASE_ADDR) && (x < (AVIC_BASE_ADDR + AVIC_SIZE))) ? AVIC_IO_ADDRESS(x):\ | ||
| 166 | ((x >= CS4_BASE_ADDR) && (x < (CS4_BASE_ADDR + CS4_SIZE))) ? CS4_IO_ADDRESS(x):\ | ||
| 167 | ((x >= X_MEMC_BASE_ADDR) && (x < (X_MEMC_BASE_ADDR + X_MEMC_SIZE))) ? X_MEMC_IO_ADDRESS(x):\ | ||
| 168 | 0xDEADBEEF) | ||
| 169 | |||
| 170 | /* | ||
| 171 | * define the address mapping macros: in physical address order | ||
| 172 | */ | ||
| 173 | #define L2CC_IO_ADDRESS(x) \ | ||
| 174 | (((x) - L2CC_BASE_ADDR) + L2CC_BASE_ADDR_VIRT) | ||
| 175 | |||
| 176 | #define AIPS1_IO_ADDRESS(x) \ | ||
| 177 | (((x) - AIPS1_BASE_ADDR) + AIPS1_BASE_ADDR_VIRT) | ||
| 178 | |||
| 179 | #define SPBA0_IO_ADDRESS(x) \ | ||
| 180 | (((x) - SPBA0_BASE_ADDR) + SPBA0_BASE_ADDR_VIRT) | ||
| 181 | |||
| 182 | #define AIPS2_IO_ADDRESS(x) \ | ||
| 183 | (((x) - AIPS2_BASE_ADDR) + AIPS2_BASE_ADDR_VIRT) | ||
| 184 | |||
| 185 | #define ROMP_IO_ADDRESS(x) \ | ||
| 186 | (((x) - ROMP_BASE_ADDR) + ROMP_BASE_ADDR_VIRT) | ||
| 187 | |||
| 188 | #define AVIC_IO_ADDRESS(x) \ | ||
| 189 | (((x) - AVIC_BASE_ADDR) + AVIC_BASE_ADDR_VIRT) | ||
| 190 | |||
| 191 | #define CS4_IO_ADDRESS(x) \ | ||
| 192 | (((x) - CS4_BASE_ADDR) + CS4_BASE_ADDR_VIRT) | ||
| 193 | |||
| 194 | #define X_MEMC_IO_ADDRESS(x) \ | ||
| 195 | (((x) - X_MEMC_BASE_ADDR) + X_MEMC_BASE_ADDR_VIRT) | ||
| 196 | |||
| 197 | #define PCMCIA_IO_ADDRESS(x) \ | ||
| 198 | (((x) - X_MEMC_BASE_ADDR) + X_MEMC_BASE_ADDR_VIRT) | ||
| 199 | |||
| 200 | /* | ||
| 201 | * Interrupt numbers | ||
| 202 | */ | ||
| 203 | #define MXC_INT_I2C3 3 | ||
| 204 | #define MXC_INT_I2C2 4 | ||
| 205 | #define MXC_INT_RTIC 6 | ||
| 206 | #define MXC_INT_I2C 10 | ||
| 207 | #define MXC_INT_CSPI2 13 | ||
| 208 | #define MXC_INT_CSPI1 14 | ||
| 209 | #define MXC_INT_ATA 15 | ||
| 210 | #define MXC_INT_UART3 18 | ||
| 211 | #define MXC_INT_IIM 19 | ||
| 212 | #define MXC_INT_RNGA 22 | ||
| 213 | #define MXC_INT_EVTMON 23 | ||
| 214 | #define MXC_INT_KPP 24 | ||
| 215 | #define MXC_INT_RTC 25 | ||
| 216 | #define MXC_INT_PWM 26 | ||
| 217 | #define MXC_INT_EPIT2 27 | ||
| 218 | #define MXC_INT_EPIT1 28 | ||
| 219 | #define MXC_INT_GPT 29 | ||
| 220 | #define MXC_INT_POWER_FAIL 30 | ||
| 221 | #define MXC_INT_UART2 32 | ||
| 222 | #define MXC_INT_NANDFC 33 | ||
| 223 | #define MXC_INT_SDMA 34 | ||
| 224 | #define MXC_INT_MSHC1 39 | ||
| 225 | #define MXC_INT_IPU_ERR 41 | ||
| 226 | #define MXC_INT_IPU_SYN 42 | ||
| 227 | #define MXC_INT_UART1 45 | ||
| 228 | #define MXC_INT_ECT 48 | ||
| 229 | #define MXC_INT_SCC_SCM 49 | ||
| 230 | #define MXC_INT_SCC_SMN 50 | ||
| 231 | #define MXC_INT_GPIO2 51 | ||
| 232 | #define MXC_INT_GPIO1 52 | ||
| 233 | #define MXC_INT_WDOG 55 | ||
| 234 | #define MXC_INT_GPIO3 56 | ||
| 235 | #define MXC_INT_EXT_POWER 58 | ||
| 236 | #define MXC_INT_EXT_TEMPER 59 | ||
| 237 | #define MXC_INT_EXT_SENSOR60 60 | ||
| 238 | #define MXC_INT_EXT_SENSOR61 61 | ||
| 239 | #define MXC_INT_EXT_WDOG 62 | ||
| 240 | #define MXC_INT_EXT_TV 63 | ||
| 241 | |||
| 242 | #define PROD_SIGNATURE 0x1 /* For MX31 */ | ||
| 243 | |||
| 244 | /* silicon revisions specific to i.MX31 */ | ||
| 245 | #define CHIP_REV_1_0 0x10 | ||
| 246 | #define CHIP_REV_1_1 0x11 | ||
| 247 | #define CHIP_REV_1_2 0x12 | ||
| 248 | #define CHIP_REV_1_3 0x13 | ||
| 249 | #define CHIP_REV_2_0 0x20 | ||
| 250 | #define CHIP_REV_2_1 0x21 | ||
| 251 | #define CHIP_REV_2_2 0x22 | ||
| 252 | #define CHIP_REV_2_3 0x23 | ||
| 253 | #define CHIP_REV_3_0 0x30 | ||
| 254 | #define CHIP_REV_3_1 0x31 | ||
| 255 | #define CHIP_REV_3_2 0x32 | ||
| 256 | |||
| 257 | #define SYSTEM_REV_MIN CHIP_REV_1_0 | ||
| 258 | #define SYSTEM_REV_NUM 3 | ||
| 259 | |||
| 260 | /* gpio and gpio based interrupt handling */ | ||
| 261 | #define GPIO_DR 0x00 | ||
| 262 | #define GPIO_GDIR 0x04 | ||
| 263 | #define GPIO_PSR 0x08 | ||
| 264 | #define GPIO_ICR1 0x0C | ||
| 265 | #define GPIO_ICR2 0x10 | ||
| 266 | #define GPIO_IMR 0x14 | ||
| 267 | #define GPIO_ISR 0x18 | ||
| 268 | #define GPIO_INT_LOW_LEV 0x0 | ||
| 269 | #define GPIO_INT_HIGH_LEV 0x1 | ||
| 270 | #define GPIO_INT_RISE_EDGE 0x2 | ||
| 271 | #define GPIO_INT_FALL_EDGE 0x3 | ||
| 272 | #define GPIO_INT_NONE 0x4 | ||
| 273 | |||
| 274 | /* Mandatory defines used globally */ | ||
| 275 | |||
| 276 | /* this CPU supports up to 96 GPIOs */ | ||
| 277 | #define ARCH_NR_GPIOS 96 | ||
| 278 | |||
| 279 | #if !defined(__ASSEMBLY__) && !defined(__MXC_BOOT_UNCOMPRESS) | ||
| 280 | |||
| 281 | extern unsigned int system_rev; | ||
| 282 | |||
| 283 | static inline int mx31_revision(void) | ||
| 284 | { | ||
| 285 | return system_rev; | ||
| 286 | } | ||
| 287 | #endif | ||
| 288 | |||
| 289 | #endif /* __ASM_ARCH_MXC_MX31_H__ */ | ||
| 290 | |||
diff --git a/arch/arm/plat-mxc/include/mach/mxc.h b/arch/arm/plat-mxc/include/mach/mxc.h index f6caab062131..5fa2a07f4eaf 100644 --- a/arch/arm/plat-mxc/include/mach/mxc.h +++ b/arch/arm/plat-mxc/include/mach/mxc.h | |||
| @@ -24,13 +24,74 @@ | |||
| 24 | #error "Do not include directly." | 24 | #error "Do not include directly." |
| 25 | #endif | 25 | #endif |
| 26 | 26 | ||
| 27 | /* clean up all things that are not used */ | 27 | #define MXC_CPU_MX1 1 |
| 28 | #ifndef CONFIG_ARCH_MX3 | 28 | #define MXC_CPU_MX21 21 |
| 29 | # define cpu_is_mx31() (0) | 29 | #define MXC_CPU_MX27 27 |
| 30 | #define MXC_CPU_MX31 31 | ||
| 31 | #define MXC_CPU_MX35 35 | ||
| 32 | |||
| 33 | #ifndef __ASSEMBLY__ | ||
| 34 | extern unsigned int __mxc_cpu_type; | ||
| 35 | #endif | ||
| 36 | |||
| 37 | #ifdef CONFIG_ARCH_MX1 | ||
| 38 | # ifdef mxc_cpu_type | ||
| 39 | # undef mxc_cpu_type | ||
| 40 | # define mxc_cpu_type __mxc_cpu_type | ||
| 41 | # else | ||
| 42 | # define mxc_cpu_type MXC_CPU_MX1 | ||
| 43 | # endif | ||
| 44 | # define cpu_is_mx1() (mxc_cpu_type == MXC_CPU_MX1) | ||
| 45 | #else | ||
| 46 | # define cpu_is_mx1() (0) | ||
| 47 | #endif | ||
| 48 | |||
| 49 | #ifdef CONFIG_MACH_MX21 | ||
| 50 | # ifdef mxc_cpu_type | ||
| 51 | # undef mxc_cpu_type | ||
| 52 | # define mxc_cpu_type __mxc_cpu_type | ||
| 53 | # else | ||
| 54 | # define mxc_cpu_type MXC_CPU_MX21 | ||
| 55 | # endif | ||
| 56 | # define cpu_is_mx21() (mxc_cpu_type == MXC_CPU_MX21) | ||
| 57 | #else | ||
| 58 | # define cpu_is_mx21() (0) | ||
| 30 | #endif | 59 | #endif |
| 31 | 60 | ||
| 32 | #ifndef CONFIG_MACH_MX27 | 61 | #ifdef CONFIG_MACH_MX27 |
| 33 | # define cpu_is_mx27() (0) | 62 | # ifdef mxc_cpu_type |
| 63 | # undef mxc_cpu_type | ||
| 64 | # define mxc_cpu_type __mxc_cpu_type | ||
| 65 | # else | ||
| 66 | # define mxc_cpu_type MXC_CPU_MX27 | ||
| 67 | # endif | ||
| 68 | # define cpu_is_mx27() (mxc_cpu_type == MXC_CPU_MX27) | ||
| 69 | #else | ||
| 70 | # define cpu_is_mx27() (0) | ||
| 71 | #endif | ||
| 72 | |||
| 73 | #ifdef CONFIG_ARCH_MX31 | ||
| 74 | # ifdef mxc_cpu_type | ||
| 75 | # undef mxc_cpu_type | ||
| 76 | # define mxc_cpu_type __mxc_cpu_type | ||
| 77 | # else | ||
| 78 | # define mxc_cpu_type MXC_CPU_MX31 | ||
| 79 | # endif | ||
| 80 | # define cpu_is_mx31() (mxc_cpu_type == MXC_CPU_MX31) | ||
| 81 | #else | ||
| 82 | # define cpu_is_mx31() (0) | ||
| 83 | #endif | ||
| 84 | |||
| 85 | #ifdef CONFIG_ARCH_MX35 | ||
| 86 | # ifdef mxc_cpu_type | ||
| 87 | # undef mxc_cpu_type | ||
| 88 | # define mxc_cpu_type __mxc_cpu_type | ||
| 89 | # else | ||
| 90 | # define mxc_cpu_type MXC_CPU_MX35 | ||
| 91 | # endif | ||
| 92 | # define cpu_is_mx35() (mxc_cpu_type == MXC_CPU_MX35) | ||
| 93 | #else | ||
| 94 | # define cpu_is_mx35() (0) | ||
| 34 | #endif | 95 | #endif |
| 35 | 96 | ||
| 36 | #if defined(CONFIG_ARCH_MX3) || defined(CONFIG_ARCH_MX2) | 97 | #if defined(CONFIG_ARCH_MX3) || defined(CONFIG_ARCH_MX2) |
| @@ -39,4 +100,7 @@ | |||
| 39 | #define CSCR_A(n) (IO_ADDRESS(WEIM_BASE_ADDR) + n * 0x10 + 0x8) | 100 | #define CSCR_A(n) (IO_ADDRESS(WEIM_BASE_ADDR) + n * 0x10 + 0x8) |
| 40 | #endif | 101 | #endif |
| 41 | 102 | ||
| 103 | #define cpu_is_mx3() (cpu_is_mx31() || cpu_is_mx35()) | ||
| 104 | #define cpu_is_mx2() (cpu_is_mx21() || cpu_is_mx27()) | ||
| 105 | |||
| 42 | #endif /* __ASM_ARCH_MXC_H__ */ | 106 | #endif /* __ASM_ARCH_MXC_H__ */ |
diff --git a/arch/arm/plat-mxc/iomux-mx1-mx2.c b/arch/arm/plat-mxc/iomux-mx1-mx2.c index df6f18395686..a37163ce280b 100644 --- a/arch/arm/plat-mxc/iomux-mx1-mx2.c +++ b/arch/arm/plat-mxc/iomux-mx1-mx2.c | |||
| @@ -32,7 +32,7 @@ | |||
| 32 | 32 | ||
| 33 | #include <mach/hardware.h> | 33 | #include <mach/hardware.h> |
| 34 | #include <asm/mach/map.h> | 34 | #include <asm/mach/map.h> |
| 35 | #include <mach/iomux-mx1-mx2.h> | 35 | #include <mach/iomux.h> |
| 36 | 36 | ||
| 37 | void mxc_gpio_mode(int gpio_mode) | 37 | void mxc_gpio_mode(int gpio_mode) |
| 38 | { | 38 | { |
diff --git a/arch/arm/plat-mxc/pwm.c b/arch/arm/plat-mxc/pwm.c new file mode 100644 index 000000000000..9bffbc507cc2 --- /dev/null +++ b/arch/arm/plat-mxc/pwm.c | |||
| @@ -0,0 +1,300 @@ | |||
| 1 | /* | ||
| 2 | * simple driver for PWM (Pulse Width Modulator) controller | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License version 2 as | ||
| 6 | * published by the Free Software Foundation. | ||
| 7 | * | ||
| 8 | * Derived from pxa PWM driver by eric miao <eric.miao@marvell.com> | ||
| 9 | */ | ||
| 10 | |||
| 11 | #include <linux/module.h> | ||
| 12 | #include <linux/kernel.h> | ||
| 13 | #include <linux/platform_device.h> | ||
| 14 | #include <linux/err.h> | ||
| 15 | #include <linux/clk.h> | ||
| 16 | #include <linux/io.h> | ||
| 17 | #include <linux/pwm.h> | ||
| 18 | |||
| 19 | #if defined CONFIG_ARCH_MX1 || defined CONFIG_ARCH_MX21 | ||
| 20 | #define PWM_VER_1 | ||
| 21 | |||
| 22 | #define PWMCR 0x00 /* PWM Control Register */ | ||
| 23 | #define PWMSR 0x04 /* PWM Sample Register */ | ||
| 24 | #define PWMPR 0x08 /* PWM Period Register */ | ||
| 25 | #define PWMCNR 0x0C /* PWM Counter Register */ | ||
| 26 | |||
| 27 | #define PWMCR_HCTR (1 << 18) /* Halfword FIFO Data Swapping */ | ||
| 28 | #define PWMCR_BCTR (1 << 17) /* Byte FIFO Data Swapping */ | ||
| 29 | #define PWMCR_SWR (1 << 16) /* Software Reset */ | ||
| 30 | #define PWMCR_CLKSRC_PERCLK (0 << 15) /* PERCLK Clock Source */ | ||
| 31 | #define PWMCR_CLKSRC_CLK32 (1 << 15) /* 32KHz Clock Source */ | ||
| 32 | #define PWMCR_PRESCALER(x) (((x - 1) & 0x7F) << 8) /* PRESCALER */ | ||
| 33 | #define PWMCR_IRQ (1 << 7) /* Interrupt Request */ | ||
| 34 | #define PWMCR_IRQEN (1 << 6) /* Interrupt Request Enable */ | ||
| 35 | #define PWMCR_FIFOAV (1 << 5) /* FIFO Available */ | ||
| 36 | #define PWMCR_EN (1 << 4) /* Enables/Disables the PWM */ | ||
| 37 | #define PWMCR_REPEAT(x) (((x) & 0x03) << 2) /* Sample Repeats */ | ||
| 38 | #define PWMCR_DIV(x) (((x) & 0x03) << 0) /* Clock divider 2/4/8/16 */ | ||
| 39 | |||
| 40 | #define MAX_DIV (128 * 16) | ||
| 41 | #endif | ||
| 42 | |||
| 43 | #if defined CONFIG_MACH_MX27 || defined CONFIG_ARCH_MX31 | ||
| 44 | #define PWM_VER_2 | ||
| 45 | |||
| 46 | #define PWMCR 0x00 /* PWM Control Register */ | ||
| 47 | #define PWMSR 0x04 /* PWM Status Register */ | ||
| 48 | #define PWMIR 0x08 /* PWM Interrupt Register */ | ||
| 49 | #define PWMSAR 0x0C /* PWM Sample Register */ | ||
| 50 | #define PWMPR 0x10 /* PWM Period Register */ | ||
| 51 | #define PWMCNR 0x14 /* PWM Counter Register */ | ||
| 52 | |||
| 53 | #define PWMCR_EN (1 << 0) /* Enables/Disables the PWM */ | ||
| 54 | #define PWMCR_REPEAT(x) (((x) & 0x03) << 1) /* Sample Repeats */ | ||
| 55 | #define PWMCR_SWR (1 << 3) /* Software Reset */ | ||
| 56 | #define PWMCR_PRESCALER(x) (((x - 1) & 0xFFF) << 4)/* PRESCALER */ | ||
| 57 | #define PWMCR_CLKSRC(x) (((x) & 0x3) << 16) | ||
| 58 | #define PWMCR_CLKSRC_OFF (0 << 16) | ||
| 59 | #define PWMCR_CLKSRC_IPG (1 << 16) | ||
| 60 | #define PWMCR_CLKSRC_IPG_HIGH (2 << 16) | ||
| 61 | #define PWMCR_CLKSRC_CLK32 (3 << 16) | ||
| 62 | #define PWMCR_POUTC | ||
| 63 | #define PWMCR_HCTR (1 << 20) /* Halfword FIFO Data Swapping */ | ||
| 64 | #define PWMCR_BCTR (1 << 21) /* Byte FIFO Data Swapping */ | ||
| 65 | #define PWMCR_DBGEN (1 << 22) /* Debug Mode */ | ||
| 66 | #define PWMCR_WAITEN (1 << 23) /* Wait Mode */ | ||
| 67 | #define PWMCR_DOZEN (1 << 24) /* Doze Mode */ | ||
| 68 | #define PWMCR_STOPEN (1 << 25) /* Stop Mode */ | ||
| 69 | #define PWMCR_FWM(x) (((x) & 0x3) << 26) /* FIFO Water Mark */ | ||
| 70 | |||
| 71 | #define MAX_DIV 4096 | ||
| 72 | #endif | ||
| 73 | |||
| 74 | #define PWMS_SAMPLE(x) ((x) & 0xFFFF) /* Contains a two-sample word */ | ||
| 75 | #define PWMP_PERIOD(x) ((x) & 0xFFFF) /* Represents the PWM's period */ | ||
| 76 | #define PWMC_COUNTER(x) ((x) & 0xFFFF) /* Represents the current count value */ | ||
| 77 | |||
| 78 | struct pwm_device { | ||
| 79 | struct list_head node; | ||
| 80 | struct platform_device *pdev; | ||
| 81 | |||
| 82 | const char *label; | ||
| 83 | struct clk *clk; | ||
| 84 | |||
| 85 | int clk_enabled; | ||
| 86 | void __iomem *mmio_base; | ||
| 87 | |||
| 88 | unsigned int use_count; | ||
| 89 | unsigned int pwm_id; | ||
| 90 | }; | ||
| 91 | |||
| 92 | int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) | ||
| 93 | { | ||
| 94 | unsigned long long c; | ||
| 95 | unsigned long period_cycles, duty_cycles, prescale; | ||
| 96 | |||
| 97 | if (pwm == NULL || period_ns == 0 || duty_ns > period_ns) | ||
| 98 | return -EINVAL; | ||
| 99 | |||
| 100 | c = clk_get_rate(pwm->clk); | ||
| 101 | c = c * period_ns; | ||
| 102 | do_div(c, 1000000000); | ||
| 103 | period_cycles = c; | ||
| 104 | |||
| 105 | prescale = period_cycles / 0x10000 + 1; | ||
| 106 | |||
| 107 | period_cycles /= prescale; | ||
| 108 | c = (unsigned long long)period_cycles * duty_ns; | ||
| 109 | do_div(c, period_ns); | ||
| 110 | duty_cycles = c; | ||
| 111 | |||
| 112 | #ifdef PWM_VER_2 | ||
| 113 | writel(duty_cycles, pwm->mmio_base + PWMSAR); | ||
| 114 | writel(period_cycles, pwm->mmio_base + PWMPR); | ||
| 115 | writel(PWMCR_PRESCALER(prescale - 1) | PWMCR_CLKSRC_IPG_HIGH | PWMCR_EN, | ||
| 116 | pwm->mmio_base + PWMCR); | ||
| 117 | #elif defined PWM_VER_1 | ||
| 118 | #error PWM not yet working on MX1 / MX21 | ||
| 119 | #endif | ||
| 120 | |||
| 121 | return 0; | ||
| 122 | } | ||
| 123 | EXPORT_SYMBOL(pwm_config); | ||
| 124 | |||
| 125 | int pwm_enable(struct pwm_device *pwm) | ||
| 126 | { | ||
| 127 | int rc = 0; | ||
| 128 | |||
| 129 | if (!pwm->clk_enabled) { | ||
| 130 | rc = clk_enable(pwm->clk); | ||
| 131 | if (!rc) | ||
| 132 | pwm->clk_enabled = 1; | ||
| 133 | } | ||
| 134 | return rc; | ||
| 135 | } | ||
| 136 | EXPORT_SYMBOL(pwm_enable); | ||
| 137 | |||
| 138 | void pwm_disable(struct pwm_device *pwm) | ||
| 139 | { | ||
| 140 | if (pwm->clk_enabled) { | ||
| 141 | clk_disable(pwm->clk); | ||
| 142 | pwm->clk_enabled = 0; | ||
| 143 | } | ||
| 144 | } | ||
| 145 | EXPORT_SYMBOL(pwm_disable); | ||
| 146 | |||
| 147 | static DEFINE_MUTEX(pwm_lock); | ||
| 148 | static LIST_HEAD(pwm_list); | ||
| 149 | |||
| 150 | struct pwm_device *pwm_request(int pwm_id, const char *label) | ||
| 151 | { | ||
| 152 | struct pwm_device *pwm; | ||
| 153 | int found = 0; | ||
| 154 | |||
| 155 | mutex_lock(&pwm_lock); | ||
| 156 | |||
| 157 | list_for_each_entry(pwm, &pwm_list, node) { | ||
| 158 | if (pwm->pwm_id == pwm_id) { | ||
| 159 | found = 1; | ||
| 160 | break; | ||
| 161 | } | ||
| 162 | } | ||
| 163 | |||
| 164 | if (found) { | ||
| 165 | if (pwm->use_count == 0) { | ||
| 166 | pwm->use_count++; | ||
| 167 | pwm->label = label; | ||
| 168 | } else | ||
| 169 | pwm = ERR_PTR(-EBUSY); | ||
| 170 | } else | ||
| 171 | pwm = ERR_PTR(-ENOENT); | ||
| 172 | |||
| 173 | mutex_unlock(&pwm_lock); | ||
| 174 | return pwm; | ||
| 175 | } | ||
| 176 | EXPORT_SYMBOL(pwm_request); | ||
| 177 | |||
| 178 | void pwm_free(struct pwm_device *pwm) | ||
| 179 | { | ||
| 180 | mutex_lock(&pwm_lock); | ||
| 181 | |||
| 182 | if (pwm->use_count) { | ||
| 183 | pwm->use_count--; | ||
| 184 | pwm->label = NULL; | ||
| 185 | } else | ||
| 186 | pr_warning("PWM device already freed\n"); | ||
| 187 | |||
| 188 | mutex_unlock(&pwm_lock); | ||
| 189 | } | ||
| 190 | EXPORT_SYMBOL(pwm_free); | ||
| 191 | |||
| 192 | static int __devinit mxc_pwm_probe(struct platform_device *pdev) | ||
| 193 | { | ||
| 194 | struct pwm_device *pwm; | ||
| 195 | struct resource *r; | ||
| 196 | int ret = 0; | ||
| 197 | |||
| 198 | pwm = kzalloc(sizeof(struct pwm_device), GFP_KERNEL); | ||
| 199 | if (pwm == NULL) { | ||
| 200 | dev_err(&pdev->dev, "failed to allocate memory\n"); | ||
| 201 | return -ENOMEM; | ||
| 202 | } | ||
| 203 | |||
| 204 | pwm->clk = clk_get(&pdev->dev, "pwm"); | ||
| 205 | |||
| 206 | if (IS_ERR(pwm->clk)) { | ||
| 207 | ret = PTR_ERR(pwm->clk); | ||
| 208 | goto err_free; | ||
| 209 | } | ||
| 210 | |||
| 211 | pwm->clk_enabled = 0; | ||
| 212 | |||
| 213 | pwm->use_count = 0; | ||
| 214 | pwm->pwm_id = pdev->id; | ||
| 215 | pwm->pdev = pdev; | ||
| 216 | |||
| 217 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
| 218 | if (r == NULL) { | ||
| 219 | dev_err(&pdev->dev, "no memory resource defined\n"); | ||
| 220 | ret = -ENODEV; | ||
| 221 | goto err_free_clk; | ||
| 222 | } | ||
| 223 | |||
| 224 | r = request_mem_region(r->start, r->end - r->start + 1, pdev->name); | ||
| 225 | if (r == NULL) { | ||
| 226 | dev_err(&pdev->dev, "failed to request memory resource\n"); | ||
| 227 | ret = -EBUSY; | ||
| 228 | goto err_free_clk; | ||
| 229 | } | ||
| 230 | |||
| 231 | pwm->mmio_base = ioremap(r->start, r->end - r->start + 1); | ||
| 232 | if (pwm->mmio_base == NULL) { | ||
| 233 | dev_err(&pdev->dev, "failed to ioremap() registers\n"); | ||
| 234 | ret = -ENODEV; | ||
| 235 | goto err_free_mem; | ||
| 236 | } | ||
| 237 | |||
| 238 | mutex_lock(&pwm_lock); | ||
| 239 | list_add_tail(&pwm->node, &pwm_list); | ||
| 240 | mutex_unlock(&pwm_lock); | ||
| 241 | |||
| 242 | platform_set_drvdata(pdev, pwm); | ||
| 243 | return 0; | ||
| 244 | |||
| 245 | err_free_mem: | ||
| 246 | release_mem_region(r->start, r->end - r->start + 1); | ||
| 247 | err_free_clk: | ||
| 248 | clk_put(pwm->clk); | ||
| 249 | err_free: | ||
| 250 | kfree(pwm); | ||
| 251 | return ret; | ||
| 252 | } | ||
| 253 | |||
| 254 | static int __devexit mxc_pwm_remove(struct platform_device *pdev) | ||
| 255 | { | ||
| 256 | struct pwm_device *pwm; | ||
| 257 | struct resource *r; | ||
| 258 | |||
| 259 | pwm = platform_get_drvdata(pdev); | ||
| 260 | if (pwm == NULL) | ||
| 261 | return -ENODEV; | ||
| 262 | |||
| 263 | mutex_lock(&pwm_lock); | ||
| 264 | list_del(&pwm->node); | ||
| 265 | mutex_unlock(&pwm_lock); | ||
| 266 | |||
| 267 | iounmap(pwm->mmio_base); | ||
| 268 | |||
| 269 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
| 270 | release_mem_region(r->start, r->end - r->start + 1); | ||
| 271 | |||
| 272 | clk_put(pwm->clk); | ||
| 273 | |||
| 274 | kfree(pwm); | ||
| 275 | return 0; | ||
| 276 | } | ||
| 277 | |||
| 278 | static struct platform_driver mxc_pwm_driver = { | ||
| 279 | .driver = { | ||
| 280 | .name = "mxc_pwm", | ||
| 281 | }, | ||
| 282 | .probe = mxc_pwm_probe, | ||
| 283 | .remove = __devexit_p(mxc_pwm_remove), | ||
| 284 | }; | ||
| 285 | |||
| 286 | static int __init mxc_pwm_init(void) | ||
| 287 | { | ||
| 288 | return platform_driver_register(&mxc_pwm_driver); | ||
| 289 | } | ||
| 290 | arch_initcall(mxc_pwm_init); | ||
| 291 | |||
| 292 | static void __exit mxc_pwm_exit(void) | ||
| 293 | { | ||
| 294 | platform_driver_unregister(&mxc_pwm_driver); | ||
| 295 | } | ||
| 296 | module_exit(mxc_pwm_exit); | ||
| 297 | |||
| 298 | MODULE_LICENSE("GPL v2"); | ||
| 299 | MODULE_AUTHOR("Sascha Hauer <s.hauer@pengutronix.de>"); | ||
| 300 | |||
diff --git a/arch/arm/plat-mxc/time.c b/arch/arm/plat-mxc/time.c index 758a1293bcfa..ef1b3cd85bd3 100644 --- a/arch/arm/plat-mxc/time.c +++ b/arch/arm/plat-mxc/time.c | |||
| @@ -34,9 +34,6 @@ | |||
| 34 | static struct clock_event_device clockevent_mxc; | 34 | static struct clock_event_device clockevent_mxc; |
| 35 | static enum clock_event_mode clockevent_mode = CLOCK_EVT_MODE_UNUSED; | 35 | static enum clock_event_mode clockevent_mode = CLOCK_EVT_MODE_UNUSED; |
| 36 | 36 | ||
| 37 | /* clock source for the timer */ | ||
| 38 | static struct clk *timer_clk; | ||
| 39 | |||
| 40 | /* clock source */ | 37 | /* clock source */ |
| 41 | 38 | ||
| 42 | static cycle_t mxc_get_cycles(void) | 39 | static cycle_t mxc_get_cycles(void) |
| @@ -53,13 +50,11 @@ static struct clocksource clocksource_mxc = { | |||
| 53 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 50 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
| 54 | }; | 51 | }; |
| 55 | 52 | ||
| 56 | static int __init mxc_clocksource_init(void) | 53 | static int __init mxc_clocksource_init(struct clk *timer_clk) |
| 57 | { | 54 | { |
| 58 | unsigned int clock; | 55 | unsigned int c = clk_get_rate(timer_clk); |
| 59 | |||
| 60 | clock = clk_get_rate(timer_clk); | ||
| 61 | 56 | ||
| 62 | clocksource_mxc.mult = clocksource_hz2mult(clock, | 57 | clocksource_mxc.mult = clocksource_hz2mult(c, |
| 63 | clocksource_mxc.shift); | 58 | clocksource_mxc.shift); |
| 64 | clocksource_register(&clocksource_mxc); | 59 | clocksource_register(&clocksource_mxc); |
| 65 | 60 | ||
| @@ -177,13 +172,11 @@ static struct clock_event_device clockevent_mxc = { | |||
| 177 | .rating = 200, | 172 | .rating = 200, |
| 178 | }; | 173 | }; |
| 179 | 174 | ||
| 180 | static int __init mxc_clockevent_init(void) | 175 | static int __init mxc_clockevent_init(struct clk *timer_clk) |
| 181 | { | 176 | { |
| 182 | unsigned int clock; | 177 | unsigned int c = clk_get_rate(timer_clk); |
| 183 | |||
| 184 | clock = clk_get_rate(timer_clk); | ||
| 185 | 178 | ||
| 186 | clockevent_mxc.mult = div_sc(clock, NSEC_PER_SEC, | 179 | clockevent_mxc.mult = div_sc(c, NSEC_PER_SEC, |
| 187 | clockevent_mxc.shift); | 180 | clockevent_mxc.shift); |
| 188 | clockevent_mxc.max_delta_ns = | 181 | clockevent_mxc.max_delta_ns = |
| 189 | clockevent_delta2ns(0xfffffffe, &clockevent_mxc); | 182 | clockevent_delta2ns(0xfffffffe, &clockevent_mxc); |
| @@ -197,14 +190,8 @@ static int __init mxc_clockevent_init(void) | |||
| 197 | return 0; | 190 | return 0; |
| 198 | } | 191 | } |
| 199 | 192 | ||
| 200 | void __init mxc_timer_init(const char *clk_timer) | 193 | void __init mxc_timer_init(struct clk *timer_clk) |
| 201 | { | 194 | { |
| 202 | timer_clk = clk_get(NULL, clk_timer); | ||
| 203 | if (!timer_clk) { | ||
| 204 | printk(KERN_ERR"Cannot determine timer clock. Giving up.\n"); | ||
| 205 | return; | ||
| 206 | } | ||
| 207 | |||
| 208 | clk_enable(timer_clk); | 195 | clk_enable(timer_clk); |
| 209 | 196 | ||
| 210 | /* | 197 | /* |
| @@ -219,10 +206,9 @@ void __init mxc_timer_init(const char *clk_timer) | |||
| 219 | TIMER_BASE + MXC_TCTL); | 206 | TIMER_BASE + MXC_TCTL); |
| 220 | 207 | ||
| 221 | /* init and register the timer to the framework */ | 208 | /* init and register the timer to the framework */ |
| 222 | mxc_clocksource_init(); | 209 | mxc_clocksource_init(timer_clk); |
| 223 | mxc_clockevent_init(); | 210 | mxc_clockevent_init(timer_clk); |
| 224 | 211 | ||
| 225 | /* Make irqs happen */ | 212 | /* Make irqs happen */ |
| 226 | setup_irq(TIMER_INTERRUPT, &mxc_timer_irq); | 213 | setup_irq(TIMER_INTERRUPT, &mxc_timer_irq); |
| 227 | } | 214 | } |
| 228 | |||
diff --git a/arch/arm/plat-orion/gpio.c b/arch/arm/plat-orion/gpio.c index 967186425ca1..0d12c2164766 100644 --- a/arch/arm/plat-orion/gpio.c +++ b/arch/arm/plat-orion/gpio.c | |||
| @@ -265,51 +265,36 @@ EXPORT_SYMBOL(orion_gpio_set_blink); | |||
| 265 | * polarity LEVEL mask | 265 | * polarity LEVEL mask |
| 266 | * | 266 | * |
| 267 | ****************************************************************************/ | 267 | ****************************************************************************/ |
| 268 | static void gpio_irq_edge_ack(u32 irq) | ||
| 269 | { | ||
| 270 | int pin = irq_to_gpio(irq); | ||
| 271 | |||
| 272 | writel(~(1 << (pin & 31)), GPIO_EDGE_CAUSE(pin)); | ||
| 273 | } | ||
| 274 | |||
| 275 | static void gpio_irq_edge_mask(u32 irq) | ||
| 276 | { | ||
| 277 | int pin = irq_to_gpio(irq); | ||
| 278 | u32 u; | ||
| 279 | |||
| 280 | u = readl(GPIO_EDGE_MASK(pin)); | ||
| 281 | u &= ~(1 << (pin & 31)); | ||
| 282 | writel(u, GPIO_EDGE_MASK(pin)); | ||
| 283 | } | ||
| 284 | 268 | ||
| 285 | static void gpio_irq_edge_unmask(u32 irq) | 269 | static void gpio_irq_ack(u32 irq) |
| 286 | { | 270 | { |
| 287 | int pin = irq_to_gpio(irq); | 271 | int type = irq_desc[irq].status & IRQ_TYPE_SENSE_MASK; |
| 288 | u32 u; | 272 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) { |
| 289 | 273 | int pin = irq_to_gpio(irq); | |
| 290 | u = readl(GPIO_EDGE_MASK(pin)); | 274 | writel(~(1 << (pin & 31)), GPIO_EDGE_CAUSE(pin)); |
| 291 | u |= 1 << (pin & 31); | 275 | } |
| 292 | writel(u, GPIO_EDGE_MASK(pin)); | ||
| 293 | } | 276 | } |
| 294 | 277 | ||
| 295 | static void gpio_irq_level_mask(u32 irq) | 278 | static void gpio_irq_mask(u32 irq) |
| 296 | { | 279 | { |
| 297 | int pin = irq_to_gpio(irq); | 280 | int pin = irq_to_gpio(irq); |
| 298 | u32 u; | 281 | int type = irq_desc[irq].status & IRQ_TYPE_SENSE_MASK; |
| 299 | 282 | u32 reg = (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) ? | |
| 300 | u = readl(GPIO_LEVEL_MASK(pin)); | 283 | GPIO_EDGE_MASK(pin) : GPIO_LEVEL_MASK(pin); |
| 284 | u32 u = readl(reg); | ||
| 301 | u &= ~(1 << (pin & 31)); | 285 | u &= ~(1 << (pin & 31)); |
| 302 | writel(u, GPIO_LEVEL_MASK(pin)); | 286 | writel(u, reg); |
| 303 | } | 287 | } |
| 304 | 288 | ||
| 305 | static void gpio_irq_level_unmask(u32 irq) | 289 | static void gpio_irq_unmask(u32 irq) |
| 306 | { | 290 | { |
| 307 | int pin = irq_to_gpio(irq); | 291 | int pin = irq_to_gpio(irq); |
| 308 | u32 u; | 292 | int type = irq_desc[irq].status & IRQ_TYPE_SENSE_MASK; |
| 309 | 293 | u32 reg = (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) ? | |
| 310 | u = readl(GPIO_LEVEL_MASK(pin)); | 294 | GPIO_EDGE_MASK(pin) : GPIO_LEVEL_MASK(pin); |
| 295 | u32 u = readl(reg); | ||
| 311 | u |= 1 << (pin & 31); | 296 | u |= 1 << (pin & 31); |
| 312 | writel(u, GPIO_LEVEL_MASK(pin)); | 297 | writel(u, reg); |
| 313 | } | 298 | } |
| 314 | 299 | ||
| 315 | static int gpio_irq_set_type(u32 irq, u32 type) | 300 | static int gpio_irq_set_type(u32 irq, u32 type) |
| @@ -331,9 +316,9 @@ static int gpio_irq_set_type(u32 irq, u32 type) | |||
| 331 | * Set edge/level type. | 316 | * Set edge/level type. |
| 332 | */ | 317 | */ |
| 333 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) { | 318 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) { |
| 334 | desc->chip = &orion_gpio_irq_edge_chip; | 319 | desc->handle_irq = handle_edge_irq; |
| 335 | } else if (type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) { | 320 | } else if (type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) { |
| 336 | desc->chip = &orion_gpio_irq_level_chip; | 321 | desc->handle_irq = handle_level_irq; |
| 337 | } else { | 322 | } else { |
| 338 | printk(KERN_ERR "failed to set irq=%d (type=%d)\n", irq, type); | 323 | printk(KERN_ERR "failed to set irq=%d (type=%d)\n", irq, type); |
| 339 | return -EINVAL; | 324 | return -EINVAL; |
| @@ -371,19 +356,11 @@ static int gpio_irq_set_type(u32 irq, u32 type) | |||
| 371 | return 0; | 356 | return 0; |
| 372 | } | 357 | } |
| 373 | 358 | ||
| 374 | struct irq_chip orion_gpio_irq_edge_chip = { | 359 | struct irq_chip orion_gpio_irq_chip = { |
| 375 | .name = "orion_gpio_irq_edge", | 360 | .name = "orion_gpio", |
| 376 | .ack = gpio_irq_edge_ack, | 361 | .ack = gpio_irq_ack, |
| 377 | .mask = gpio_irq_edge_mask, | 362 | .mask = gpio_irq_mask, |
| 378 | .unmask = gpio_irq_edge_unmask, | 363 | .unmask = gpio_irq_unmask, |
| 379 | .set_type = gpio_irq_set_type, | ||
| 380 | }; | ||
| 381 | |||
| 382 | struct irq_chip orion_gpio_irq_level_chip = { | ||
| 383 | .name = "orion_gpio_irq_level", | ||
| 384 | .mask = gpio_irq_level_mask, | ||
| 385 | .mask_ack = gpio_irq_level_mask, | ||
| 386 | .unmask = gpio_irq_level_unmask, | ||
| 387 | .set_type = gpio_irq_set_type, | 364 | .set_type = gpio_irq_set_type, |
| 388 | }; | 365 | }; |
| 389 | 366 | ||
diff --git a/arch/arm/plat-orion/include/plat/gpio.h b/arch/arm/plat-orion/include/plat/gpio.h index 54deaf274b52..ec743e82c876 100644 --- a/arch/arm/plat-orion/include/plat/gpio.h +++ b/arch/arm/plat-orion/include/plat/gpio.h | |||
| @@ -31,8 +31,7 @@ void orion_gpio_set_blink(unsigned pin, int blink); | |||
| 31 | /* | 31 | /* |
| 32 | * GPIO interrupt handling. | 32 | * GPIO interrupt handling. |
| 33 | */ | 33 | */ |
| 34 | extern struct irq_chip orion_gpio_irq_edge_chip; | 34 | extern struct irq_chip orion_gpio_irq_chip; |
| 35 | extern struct irq_chip orion_gpio_irq_level_chip; | ||
| 36 | void orion_gpio_irq_handler(int irqoff); | 35 | void orion_gpio_irq_handler(int irqoff); |
| 37 | 36 | ||
| 38 | 37 | ||
diff --git a/arch/arm/plat-s3c64xx/irq-eint.c b/arch/arm/plat-s3c64xx/irq-eint.c index 1f7cc0067f5c..ebb305ce7689 100644 --- a/arch/arm/plat-s3c64xx/irq-eint.c +++ b/arch/arm/plat-s3c64xx/irq-eint.c | |||
| @@ -55,7 +55,7 @@ static void s3c_irq_eint_unmask(unsigned int irq) | |||
| 55 | u32 mask; | 55 | u32 mask; |
| 56 | 56 | ||
| 57 | mask = __raw_readl(S3C64XX_EINT0MASK); | 57 | mask = __raw_readl(S3C64XX_EINT0MASK); |
| 58 | mask |= eint_irq_to_bit(irq); | 58 | mask &= ~eint_irq_to_bit(irq); |
| 59 | __raw_writel(mask, S3C64XX_EINT0MASK); | 59 | __raw_writel(mask, S3C64XX_EINT0MASK); |
| 60 | } | 60 | } |
| 61 | 61 | ||
diff --git a/arch/avr32/mach-at32ap/include/mach/board.h b/arch/avr32/mach-at32ap/include/mach/board.h index aafaf7a78886..cff8e84f78f2 100644 --- a/arch/avr32/mach-at32ap/include/mach/board.h +++ b/arch/avr32/mach-at32ap/include/mach/board.h | |||
| @@ -116,6 +116,7 @@ struct atmel_nand_data { | |||
| 116 | int enable_pin; /* chip enable */ | 116 | int enable_pin; /* chip enable */ |
| 117 | int det_pin; /* card detect */ | 117 | int det_pin; /* card detect */ |
| 118 | int rdy_pin; /* ready/busy */ | 118 | int rdy_pin; /* ready/busy */ |
| 119 | u8 rdy_pin_active_low; /* rdy_pin value is inverted */ | ||
| 119 | u8 ale; /* address line number connected to ALE */ | 120 | u8 ale; /* address line number connected to ALE */ |
| 120 | u8 cle; /* address line number connected to CLE */ | 121 | u8 cle; /* address line number connected to CLE */ |
| 121 | u8 bus_width_16; /* buswidth is 16 bit */ | 122 | u8 bus_width_16; /* buswidth is 16 bit */ |
diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig index 8f1f97d56e1e..0c1f86e3e44a 100644 --- a/arch/blackfin/Kconfig +++ b/arch/blackfin/Kconfig | |||
| @@ -1129,6 +1129,7 @@ endchoice | |||
| 1129 | 1129 | ||
| 1130 | config PM_WAKEUP_BY_GPIO | 1130 | config PM_WAKEUP_BY_GPIO |
| 1131 | bool "Allow Wakeup from Standby by GPIO" | 1131 | bool "Allow Wakeup from Standby by GPIO" |
| 1132 | depends on PM && !BF54x | ||
| 1132 | 1133 | ||
| 1133 | config PM_WAKEUP_GPIO_NUMBER | 1134 | config PM_WAKEUP_GPIO_NUMBER |
| 1134 | int "GPIO number" | 1135 | int "GPIO number" |
| @@ -1168,6 +1169,12 @@ config PM_BFIN_WAKE_GP | |||
| 1168 | default n | 1169 | default n |
| 1169 | help | 1170 | help |
| 1170 | Enable General-Purpose Wake-Up (Voltage Regulator Power-Up) | 1171 | Enable General-Purpose Wake-Up (Voltage Regulator Power-Up) |
| 1172 | (all processors, except ADSP-BF549). This option sets | ||
| 1173 | the general-purpose wake-up enable (GPWE) control bit to enable | ||
| 1174 | wake-up upon detection of an active low signal on the /GPW (PH7) pin. | ||
| 1175 | On ADSP-BF549 this option enables the the same functionality on the | ||
| 1176 | /MRXON pin also PH7. | ||
| 1177 | |||
| 1171 | endmenu | 1178 | endmenu |
| 1172 | 1179 | ||
| 1173 | menu "CPU Frequency scaling" | 1180 | menu "CPU Frequency scaling" |
diff --git a/arch/blackfin/Kconfig.debug b/arch/blackfin/Kconfig.debug index 5f981d9ca625..79e7e63ab709 100644 --- a/arch/blackfin/Kconfig.debug +++ b/arch/blackfin/Kconfig.debug | |||
| @@ -21,12 +21,6 @@ config DEBUG_STACK_USAGE | |||
| 21 | config HAVE_ARCH_KGDB | 21 | config HAVE_ARCH_KGDB |
| 22 | def_bool y | 22 | def_bool y |
| 23 | 23 | ||
| 24 | config KGDB_TESTCASE | ||
| 25 | tristate "KGDB: for test case in expect" | ||
| 26 | default n | ||
| 27 | help | ||
| 28 | This is a kgdb test case for automated testing. | ||
| 29 | |||
| 30 | config DEBUG_VERBOSE | 24 | config DEBUG_VERBOSE |
| 31 | bool "Verbose fault messages" | 25 | bool "Verbose fault messages" |
| 32 | default y | 26 | default y |
diff --git a/arch/blackfin/configs/BF518F-EZBRD_defconfig b/arch/blackfin/configs/BF518F-EZBRD_defconfig index 4fdb9e04759f..281f4b60e603 100644 --- a/arch/blackfin/configs/BF518F-EZBRD_defconfig +++ b/arch/blackfin/configs/BF518F-EZBRD_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.28-rc2 | 3 | # Linux kernel version: 2.6.28 |
| 4 | # Fri Jan 9 17:58:41 2009 | 4 | # Fri Feb 20 10:01:44 2009 |
| 5 | # | 5 | # |
| 6 | # CONFIG_MMU is not set | 6 | # CONFIG_MMU is not set |
| 7 | # CONFIG_FPU is not set | 7 | # CONFIG_FPU is not set |
| @@ -133,10 +133,15 @@ CONFIG_BF518=y | |||
| 133 | # CONFIG_BF538 is not set | 133 | # CONFIG_BF538 is not set |
| 134 | # CONFIG_BF539 is not set | 134 | # CONFIG_BF539 is not set |
| 135 | # CONFIG_BF542 is not set | 135 | # CONFIG_BF542 is not set |
| 136 | # CONFIG_BF542M is not set | ||
| 136 | # CONFIG_BF544 is not set | 137 | # CONFIG_BF544 is not set |
| 138 | # CONFIG_BF544M is not set | ||
| 137 | # CONFIG_BF547 is not set | 139 | # CONFIG_BF547 is not set |
| 140 | # CONFIG_BF547M is not set | ||
| 138 | # CONFIG_BF548 is not set | 141 | # CONFIG_BF548 is not set |
| 142 | # CONFIG_BF548M is not set | ||
| 139 | # CONFIG_BF549 is not set | 143 | # CONFIG_BF549 is not set |
| 144 | # CONFIG_BF549M is not set | ||
| 140 | # CONFIG_BF561 is not set | 145 | # CONFIG_BF561 is not set |
| 141 | CONFIG_BF_REV_MIN=0 | 146 | CONFIG_BF_REV_MIN=0 |
| 142 | CONFIG_BF_REV_MAX=2 | 147 | CONFIG_BF_REV_MAX=2 |
| @@ -426,7 +431,17 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
| 426 | # CONFIG_TIPC is not set | 431 | # CONFIG_TIPC is not set |
| 427 | # CONFIG_ATM is not set | 432 | # CONFIG_ATM is not set |
| 428 | # CONFIG_BRIDGE is not set | 433 | # CONFIG_BRIDGE is not set |
| 429 | # CONFIG_NET_DSA is not set | 434 | CONFIG_NET_DSA=y |
| 435 | # CONFIG_NET_DSA_TAG_DSA is not set | ||
| 436 | # CONFIG_NET_DSA_TAG_EDSA is not set | ||
| 437 | # CONFIG_NET_DSA_TAG_TRAILER is not set | ||
| 438 | CONFIG_NET_DSA_TAG_STPID=y | ||
| 439 | # CONFIG_NET_DSA_MV88E6XXX is not set | ||
| 440 | # CONFIG_NET_DSA_MV88E6060 is not set | ||
| 441 | # CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set | ||
| 442 | # CONFIG_NET_DSA_MV88E6131 is not set | ||
| 443 | # CONFIG_NET_DSA_MV88E6123_61_65 is not set | ||
| 444 | CONFIG_NET_DSA_KSZ8893M=y | ||
| 430 | # CONFIG_VLAN_8021Q is not set | 445 | # CONFIG_VLAN_8021Q is not set |
| 431 | # CONFIG_DECNET is not set | 446 | # CONFIG_DECNET is not set |
| 432 | # CONFIG_LLC2 is not set | 447 | # CONFIG_LLC2 is not set |
| @@ -529,6 +544,8 @@ CONFIG_MTD_COMPLEX_MAPPINGS=y | |||
| 529 | # | 544 | # |
| 530 | # Self-contained MTD device drivers | 545 | # Self-contained MTD device drivers |
| 531 | # | 546 | # |
| 547 | # CONFIG_MTD_DATAFLASH is not set | ||
| 548 | # CONFIG_MTD_M25P80 is not set | ||
| 532 | # CONFIG_MTD_SLRAM is not set | 549 | # CONFIG_MTD_SLRAM is not set |
| 533 | # CONFIG_MTD_PHRAM is not set | 550 | # CONFIG_MTD_PHRAM is not set |
| 534 | # CONFIG_MTD_MTDRAM is not set | 551 | # CONFIG_MTD_MTDRAM is not set |
| @@ -561,7 +578,9 @@ CONFIG_BLK_DEV_RAM_SIZE=4096 | |||
| 561 | # CONFIG_BLK_DEV_HD is not set | 578 | # CONFIG_BLK_DEV_HD is not set |
| 562 | CONFIG_MISC_DEVICES=y | 579 | CONFIG_MISC_DEVICES=y |
| 563 | # CONFIG_EEPROM_93CX6 is not set | 580 | # CONFIG_EEPROM_93CX6 is not set |
| 581 | # CONFIG_ICS932S401 is not set | ||
| 564 | # CONFIG_ENCLOSURE_SERVICES is not set | 582 | # CONFIG_ENCLOSURE_SERVICES is not set |
| 583 | # CONFIG_C2PORT is not set | ||
| 565 | CONFIG_HAVE_IDE=y | 584 | CONFIG_HAVE_IDE=y |
| 566 | # CONFIG_IDE is not set | 585 | # CONFIG_IDE is not set |
| 567 | 586 | ||
| @@ -607,6 +626,7 @@ CONFIG_BFIN_RX_DESC_NUM=20 | |||
| 607 | # CONFIG_SMC91X is not set | 626 | # CONFIG_SMC91X is not set |
| 608 | # CONFIG_SMSC911X is not set | 627 | # CONFIG_SMSC911X is not set |
| 609 | # CONFIG_DM9000 is not set | 628 | # CONFIG_DM9000 is not set |
| 629 | # CONFIG_ENC28J60 is not set | ||
| 610 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | 630 | # CONFIG_IBM_NEW_EMAC_ZMII is not set |
| 611 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 631 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
| 612 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 632 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
| @@ -764,7 +784,23 @@ CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ=100 | |||
| 764 | # CONFIG_I2C_DEBUG_ALGO is not set | 784 | # CONFIG_I2C_DEBUG_ALGO is not set |
| 765 | # CONFIG_I2C_DEBUG_BUS is not set | 785 | # CONFIG_I2C_DEBUG_BUS is not set |
| 766 | # CONFIG_I2C_DEBUG_CHIP is not set | 786 | # CONFIG_I2C_DEBUG_CHIP is not set |
| 767 | # CONFIG_SPI is not set | 787 | CONFIG_SPI=y |
| 788 | # CONFIG_SPI_DEBUG is not set | ||
| 789 | CONFIG_SPI_MASTER=y | ||
| 790 | |||
| 791 | # | ||
| 792 | # SPI Master Controller Drivers | ||
| 793 | # | ||
| 794 | CONFIG_SPI_BFIN=y | ||
| 795 | # CONFIG_SPI_BFIN_LOCK is not set | ||
| 796 | # CONFIG_SPI_BITBANG is not set | ||
| 797 | |||
| 798 | # | ||
| 799 | # SPI Protocol Masters | ||
| 800 | # | ||
| 801 | # CONFIG_SPI_AT25 is not set | ||
| 802 | # CONFIG_SPI_SPIDEV is not set | ||
| 803 | # CONFIG_SPI_TLE62X0 is not set | ||
| 768 | CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y | 804 | CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y |
| 769 | # CONFIG_GPIOLIB is not set | 805 | # CONFIG_GPIOLIB is not set |
| 770 | # CONFIG_W1 is not set | 806 | # CONFIG_W1 is not set |
| @@ -788,8 +824,10 @@ CONFIG_BFIN_WDT=y | |||
| 788 | # CONFIG_MFD_SM501 is not set | 824 | # CONFIG_MFD_SM501 is not set |
| 789 | # CONFIG_HTC_PASIC3 is not set | 825 | # CONFIG_HTC_PASIC3 is not set |
| 790 | # CONFIG_MFD_TMIO is not set | 826 | # CONFIG_MFD_TMIO is not set |
| 827 | # CONFIG_PMIC_DA903X is not set | ||
| 791 | # CONFIG_MFD_WM8400 is not set | 828 | # CONFIG_MFD_WM8400 is not set |
| 792 | # CONFIG_MFD_WM8350_I2C is not set | 829 | # CONFIG_MFD_WM8350_I2C is not set |
| 830 | # CONFIG_REGULATOR is not set | ||
| 793 | 831 | ||
| 794 | # | 832 | # |
| 795 | # Multimedia devices | 833 | # Multimedia devices |
| @@ -861,10 +899,18 @@ CONFIG_RTC_INTF_DEV=y | |||
| 861 | # CONFIG_RTC_DRV_M41T80 is not set | 899 | # CONFIG_RTC_DRV_M41T80 is not set |
| 862 | # CONFIG_RTC_DRV_S35390A is not set | 900 | # CONFIG_RTC_DRV_S35390A is not set |
| 863 | # CONFIG_RTC_DRV_FM3130 is not set | 901 | # CONFIG_RTC_DRV_FM3130 is not set |
| 902 | # CONFIG_RTC_DRV_RX8581 is not set | ||
| 864 | 903 | ||
| 865 | # | 904 | # |
| 866 | # SPI RTC drivers | 905 | # SPI RTC drivers |
| 867 | # | 906 | # |
| 907 | # CONFIG_RTC_DRV_M41T94 is not set | ||
| 908 | # CONFIG_RTC_DRV_DS1305 is not set | ||
| 909 | # CONFIG_RTC_DRV_DS1390 is not set | ||
| 910 | # CONFIG_RTC_DRV_MAX6902 is not set | ||
| 911 | # CONFIG_RTC_DRV_R9701 is not set | ||
| 912 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 913 | # CONFIG_RTC_DRV_DS3234 is not set | ||
| 868 | 914 | ||
| 869 | # | 915 | # |
| 870 | # Platform RTC drivers | 916 | # Platform RTC drivers |
| @@ -1062,12 +1108,20 @@ CONFIG_DEBUG_INFO=y | |||
| 1062 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | 1108 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set |
| 1063 | # CONFIG_FAULT_INJECTION is not set | 1109 | # CONFIG_FAULT_INJECTION is not set |
| 1064 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 1110 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
| 1111 | |||
| 1112 | # | ||
| 1113 | # Tracers | ||
| 1114 | # | ||
| 1115 | # CONFIG_SCHED_TRACER is not set | ||
| 1116 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | ||
| 1117 | # CONFIG_BOOT_TRACER is not set | ||
| 1065 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | 1118 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set |
| 1066 | # CONFIG_SAMPLES is not set | 1119 | # CONFIG_SAMPLES is not set |
| 1067 | CONFIG_HAVE_ARCH_KGDB=y | 1120 | CONFIG_HAVE_ARCH_KGDB=y |
| 1068 | # CONFIG_KGDB is not set | 1121 | # CONFIG_KGDB is not set |
| 1069 | # CONFIG_DEBUG_STACKOVERFLOW is not set | 1122 | # CONFIG_DEBUG_STACKOVERFLOW is not set |
| 1070 | # CONFIG_DEBUG_STACK_USAGE is not set | 1123 | # CONFIG_DEBUG_STACK_USAGE is not set |
| 1124 | # CONFIG_KGDB_TESTCASE is not set | ||
| 1071 | CONFIG_DEBUG_VERBOSE=y | 1125 | CONFIG_DEBUG_VERBOSE=y |
| 1072 | CONFIG_DEBUG_MMRS=y | 1126 | CONFIG_DEBUG_MMRS=y |
| 1073 | # CONFIG_DEBUG_HWERR is not set | 1127 | # CONFIG_DEBUG_HWERR is not set |
| @@ -1100,6 +1154,7 @@ CONFIG_CRYPTO=y | |||
| 1100 | # | 1154 | # |
| 1101 | # CONFIG_CRYPTO_FIPS is not set | 1155 | # CONFIG_CRYPTO_FIPS is not set |
| 1102 | # CONFIG_CRYPTO_MANAGER is not set | 1156 | # CONFIG_CRYPTO_MANAGER is not set |
| 1157 | # CONFIG_CRYPTO_MANAGER2 is not set | ||
| 1103 | # CONFIG_CRYPTO_GF128MUL is not set | 1158 | # CONFIG_CRYPTO_GF128MUL is not set |
| 1104 | # CONFIG_CRYPTO_NULL is not set | 1159 | # CONFIG_CRYPTO_NULL is not set |
| 1105 | # CONFIG_CRYPTO_CRYPTD is not set | 1160 | # CONFIG_CRYPTO_CRYPTD is not set |
diff --git a/arch/blackfin/configs/BF527-EZKIT_defconfig b/arch/blackfin/configs/BF527-EZKIT_defconfig index 833128b39724..a50050f17706 100644 --- a/arch/blackfin/configs/BF527-EZKIT_defconfig +++ b/arch/blackfin/configs/BF527-EZKIT_defconfig | |||
| @@ -327,8 +327,8 @@ CONFIG_BFIN_ICACHE=y | |||
| 327 | CONFIG_BFIN_DCACHE=y | 327 | CONFIG_BFIN_DCACHE=y |
| 328 | # CONFIG_BFIN_DCACHE_BANKA is not set | 328 | # CONFIG_BFIN_DCACHE_BANKA is not set |
| 329 | # CONFIG_BFIN_ICACHE_LOCK is not set | 329 | # CONFIG_BFIN_ICACHE_LOCK is not set |
| 330 | # CONFIG_BFIN_WB is not set | 330 | CONFIG_BFIN_WB=y |
| 331 | CONFIG_BFIN_WT=y | 331 | # CONFIG_BFIN_WT is not set |
| 332 | # CONFIG_MPU is not set | 332 | # CONFIG_MPU is not set |
| 333 | 333 | ||
| 334 | # | 334 | # |
diff --git a/arch/blackfin/configs/BF533-EZKIT_defconfig b/arch/blackfin/configs/BF533-EZKIT_defconfig index 334c94b51c40..0a2a00d63887 100644 --- a/arch/blackfin/configs/BF533-EZKIT_defconfig +++ b/arch/blackfin/configs/BF533-EZKIT_defconfig | |||
| @@ -290,8 +290,8 @@ CONFIG_BFIN_ICACHE=y | |||
| 290 | CONFIG_BFIN_DCACHE=y | 290 | CONFIG_BFIN_DCACHE=y |
| 291 | # CONFIG_BFIN_DCACHE_BANKA is not set | 291 | # CONFIG_BFIN_DCACHE_BANKA is not set |
| 292 | # CONFIG_BFIN_ICACHE_LOCK is not set | 292 | # CONFIG_BFIN_ICACHE_LOCK is not set |
| 293 | # CONFIG_BFIN_WB is not set | 293 | CONFIG_BFIN_WB=y |
| 294 | CONFIG_BFIN_WT=y | 294 | # CONFIG_BFIN_WT is not set |
| 295 | # CONFIG_MPU is not set | 295 | # CONFIG_MPU is not set |
| 296 | 296 | ||
| 297 | # | 297 | # |
diff --git a/arch/blackfin/configs/BF533-STAMP_defconfig b/arch/blackfin/configs/BF533-STAMP_defconfig index 9d733436e300..eb027587a355 100644 --- a/arch/blackfin/configs/BF533-STAMP_defconfig +++ b/arch/blackfin/configs/BF533-STAMP_defconfig | |||
| @@ -290,8 +290,8 @@ CONFIG_BFIN_ICACHE=y | |||
| 290 | CONFIG_BFIN_DCACHE=y | 290 | CONFIG_BFIN_DCACHE=y |
| 291 | # CONFIG_BFIN_DCACHE_BANKA is not set | 291 | # CONFIG_BFIN_DCACHE_BANKA is not set |
| 292 | # CONFIG_BFIN_ICACHE_LOCK is not set | 292 | # CONFIG_BFIN_ICACHE_LOCK is not set |
| 293 | # CONFIG_BFIN_WB is not set | 293 | CONFIG_BFIN_WB=y |
| 294 | CONFIG_BFIN_WT=y | 294 | # CONFIG_BFIN_WT is not set |
| 295 | # CONFIG_MPU is not set | 295 | # CONFIG_MPU is not set |
| 296 | 296 | ||
| 297 | # | 297 | # |
diff --git a/arch/blackfin/configs/BF537-STAMP_defconfig b/arch/blackfin/configs/BF537-STAMP_defconfig index 4fb4108d3103..9e62b9f40eb1 100644 --- a/arch/blackfin/configs/BF537-STAMP_defconfig +++ b/arch/blackfin/configs/BF537-STAMP_defconfig | |||
| @@ -298,8 +298,8 @@ CONFIG_BFIN_ICACHE=y | |||
| 298 | CONFIG_BFIN_DCACHE=y | 298 | CONFIG_BFIN_DCACHE=y |
| 299 | # CONFIG_BFIN_DCACHE_BANKA is not set | 299 | # CONFIG_BFIN_DCACHE_BANKA is not set |
| 300 | # CONFIG_BFIN_ICACHE_LOCK is not set | 300 | # CONFIG_BFIN_ICACHE_LOCK is not set |
| 301 | # CONFIG_BFIN_WB is not set | 301 | CONFIG_BFIN_WB=y |
| 302 | CONFIG_BFIN_WT=y | 302 | # CONFIG_BFIN_WT is not set |
| 303 | # CONFIG_MPU is not set | 303 | # CONFIG_MPU is not set |
| 304 | 304 | ||
| 305 | # | 305 | # |
| @@ -568,15 +568,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | |||
| 568 | # CONFIG_MTD_DOC2000 is not set | 568 | # CONFIG_MTD_DOC2000 is not set |
| 569 | # CONFIG_MTD_DOC2001 is not set | 569 | # CONFIG_MTD_DOC2001 is not set |
| 570 | # CONFIG_MTD_DOC2001PLUS is not set | 570 | # CONFIG_MTD_DOC2001PLUS is not set |
| 571 | CONFIG_MTD_NAND=m | 571 | # CONFIG_MTD_NAND is not set |
| 572 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set | ||
| 573 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
| 574 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
| 575 | # CONFIG_MTD_NAND_BFIN is not set | ||
| 576 | CONFIG_MTD_NAND_IDS=m | ||
| 577 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
| 578 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
| 579 | CONFIG_MTD_NAND_PLATFORM=m | ||
| 580 | # CONFIG_MTD_ONENAND is not set | 572 | # CONFIG_MTD_ONENAND is not set |
| 581 | 573 | ||
| 582 | # | 574 | # |
diff --git a/arch/blackfin/configs/BF538-EZKIT_defconfig b/arch/blackfin/configs/BF538-EZKIT_defconfig index cb32f5624a1b..dd6ad6be1c87 100644 --- a/arch/blackfin/configs/BF538-EZKIT_defconfig +++ b/arch/blackfin/configs/BF538-EZKIT_defconfig | |||
| @@ -306,8 +306,8 @@ CONFIG_BFIN_ICACHE=y | |||
| 306 | CONFIG_BFIN_DCACHE=y | 306 | CONFIG_BFIN_DCACHE=y |
| 307 | # CONFIG_BFIN_DCACHE_BANKA is not set | 307 | # CONFIG_BFIN_DCACHE_BANKA is not set |
| 308 | # CONFIG_BFIN_ICACHE_LOCK is not set | 308 | # CONFIG_BFIN_ICACHE_LOCK is not set |
| 309 | # CONFIG_BFIN_WB is not set | 309 | CONFIG_BFIN_WB=y |
| 310 | CONFIG_BFIN_WT=y | 310 | # CONFIG_BFIN_WT is not set |
| 311 | # CONFIG_MPU is not set | 311 | # CONFIG_MPU is not set |
| 312 | 312 | ||
| 313 | # | 313 | # |
diff --git a/arch/blackfin/configs/BF548-EZKIT_defconfig b/arch/blackfin/configs/BF548-EZKIT_defconfig index 0f8697618aa5..6bc2fb1b2a70 100644 --- a/arch/blackfin/configs/BF548-EZKIT_defconfig +++ b/arch/blackfin/configs/BF548-EZKIT_defconfig | |||
| @@ -361,8 +361,8 @@ CONFIG_BFIN_ICACHE=y | |||
| 361 | CONFIG_BFIN_DCACHE=y | 361 | CONFIG_BFIN_DCACHE=y |
| 362 | # CONFIG_BFIN_DCACHE_BANKA is not set | 362 | # CONFIG_BFIN_DCACHE_BANKA is not set |
| 363 | # CONFIG_BFIN_ICACHE_LOCK is not set | 363 | # CONFIG_BFIN_ICACHE_LOCK is not set |
| 364 | # CONFIG_BFIN_WB is not set | 364 | CONFIG_BFIN_WB=y |
| 365 | CONFIG_BFIN_WT=y | 365 | # CONFIG_BFIN_WT is not set |
| 366 | # CONFIG_BFIN_L2_CACHEABLE is not set | 366 | # CONFIG_BFIN_L2_CACHEABLE is not set |
| 367 | # CONFIG_MPU is not set | 367 | # CONFIG_MPU is not set |
| 368 | 368 | ||
| @@ -680,7 +680,7 @@ CONFIG_SCSI=y | |||
| 680 | CONFIG_SCSI_DMA=y | 680 | CONFIG_SCSI_DMA=y |
| 681 | # CONFIG_SCSI_TGT is not set | 681 | # CONFIG_SCSI_TGT is not set |
| 682 | # CONFIG_SCSI_NETLINK is not set | 682 | # CONFIG_SCSI_NETLINK is not set |
| 683 | CONFIG_SCSI_PROC_FS=y | 683 | # CONFIG_SCSI_PROC_FS is not set |
| 684 | 684 | ||
| 685 | # | 685 | # |
| 686 | # SCSI support type (disk, tape, CD-ROM) | 686 | # SCSI support type (disk, tape, CD-ROM) |
diff --git a/arch/blackfin/configs/BF561-EZKIT_defconfig b/arch/blackfin/configs/BF561-EZKIT_defconfig index 042c7adfccfa..69714fb3e608 100644 --- a/arch/blackfin/configs/BF561-EZKIT_defconfig +++ b/arch/blackfin/configs/BF561-EZKIT_defconfig | |||
| @@ -329,8 +329,8 @@ CONFIG_BFIN_ICACHE=y | |||
| 329 | CONFIG_BFIN_DCACHE=y | 329 | CONFIG_BFIN_DCACHE=y |
| 330 | # CONFIG_BFIN_DCACHE_BANKA is not set | 330 | # CONFIG_BFIN_DCACHE_BANKA is not set |
| 331 | # CONFIG_BFIN_ICACHE_LOCK is not set | 331 | # CONFIG_BFIN_ICACHE_LOCK is not set |
| 332 | # CONFIG_BFIN_WB is not set | 332 | CONFIG_BFIN_WB=y |
| 333 | CONFIG_BFIN_WT=y | 333 | # CONFIG_BFIN_WT is not set |
| 334 | # CONFIG_BFIN_L2_CACHEABLE is not set | 334 | # CONFIG_BFIN_L2_CACHEABLE is not set |
| 335 | # CONFIG_MPU is not set | 335 | # CONFIG_MPU is not set |
| 336 | 336 | ||
diff --git a/arch/blackfin/configs/BlackStamp_defconfig b/arch/blackfin/configs/BlackStamp_defconfig index 3a20e281d23c..017c6ea071b5 100644 --- a/arch/blackfin/configs/BlackStamp_defconfig +++ b/arch/blackfin/configs/BlackStamp_defconfig | |||
| @@ -288,8 +288,8 @@ CONFIG_BFIN_ICACHE=y | |||
| 288 | CONFIG_BFIN_DCACHE=y | 288 | CONFIG_BFIN_DCACHE=y |
| 289 | # CONFIG_BFIN_DCACHE_BANKA is not set | 289 | # CONFIG_BFIN_DCACHE_BANKA is not set |
| 290 | # CONFIG_BFIN_ICACHE_LOCK is not set | 290 | # CONFIG_BFIN_ICACHE_LOCK is not set |
| 291 | # CONFIG_BFIN_WB is not set | 291 | CONFIG_BFIN_WB=y |
| 292 | CONFIG_BFIN_WT=y | 292 | # CONFIG_BFIN_WT is not set |
| 293 | # CONFIG_MPU is not set | 293 | # CONFIG_MPU is not set |
| 294 | 294 | ||
| 295 | # | 295 | # |
diff --git a/arch/blackfin/configs/CM-BF527_defconfig b/arch/blackfin/configs/CM-BF527_defconfig index 865ed85a5760..d880ef786770 100644 --- a/arch/blackfin/configs/CM-BF527_defconfig +++ b/arch/blackfin/configs/CM-BF527_defconfig | |||
| @@ -332,8 +332,8 @@ CONFIG_BFIN_ICACHE=y | |||
| 332 | CONFIG_BFIN_DCACHE=y | 332 | CONFIG_BFIN_DCACHE=y |
| 333 | # CONFIG_BFIN_DCACHE_BANKA is not set | 333 | # CONFIG_BFIN_DCACHE_BANKA is not set |
| 334 | # CONFIG_BFIN_ICACHE_LOCK is not set | 334 | # CONFIG_BFIN_ICACHE_LOCK is not set |
| 335 | # CONFIG_BFIN_WB is not set | 335 | CONFIG_BFIN_WB=y |
| 336 | CONFIG_BFIN_WT=y | 336 | # CONFIG_BFIN_WT is not set |
| 337 | # CONFIG_MPU is not set | 337 | # CONFIG_MPU is not set |
| 338 | 338 | ||
| 339 | # | 339 | # |
diff --git a/arch/blackfin/configs/CM-BF548_defconfig b/arch/blackfin/configs/CM-BF548_defconfig index efe9741b1f14..f410430b4e3d 100644 --- a/arch/blackfin/configs/CM-BF548_defconfig +++ b/arch/blackfin/configs/CM-BF548_defconfig | |||
| @@ -336,8 +336,8 @@ CONFIG_BFIN_ICACHE=y | |||
| 336 | CONFIG_BFIN_DCACHE=y | 336 | CONFIG_BFIN_DCACHE=y |
| 337 | # CONFIG_BFIN_DCACHE_BANKA is not set | 337 | # CONFIG_BFIN_DCACHE_BANKA is not set |
| 338 | # CONFIG_BFIN_ICACHE_LOCK is not set | 338 | # CONFIG_BFIN_ICACHE_LOCK is not set |
| 339 | # CONFIG_BFIN_WB is not set | 339 | CONFIG_BFIN_WB=y |
| 340 | CONFIG_BFIN_WT=y | 340 | # CONFIG_BFIN_WT is not set |
| 341 | CONFIG_L1_MAX_PIECE=16 | 341 | CONFIG_L1_MAX_PIECE=16 |
| 342 | # CONFIG_MPU is not set | 342 | # CONFIG_MPU is not set |
| 343 | 343 | ||
| @@ -595,7 +595,7 @@ CONFIG_SCSI=y | |||
| 595 | CONFIG_SCSI_DMA=y | 595 | CONFIG_SCSI_DMA=y |
| 596 | # CONFIG_SCSI_TGT is not set | 596 | # CONFIG_SCSI_TGT is not set |
| 597 | # CONFIG_SCSI_NETLINK is not set | 597 | # CONFIG_SCSI_NETLINK is not set |
| 598 | CONFIG_SCSI_PROC_FS=y | 598 | # CONFIG_SCSI_PROC_FS is not set |
| 599 | 599 | ||
| 600 | # | 600 | # |
| 601 | # SCSI support type (disk, tape, CD-ROM) | 601 | # SCSI support type (disk, tape, CD-ROM) |
diff --git a/arch/blackfin/configs/IP0X_defconfig b/arch/blackfin/configs/IP0X_defconfig index eae83b5de92f..7db93874c987 100644 --- a/arch/blackfin/configs/IP0X_defconfig +++ b/arch/blackfin/configs/IP0X_defconfig | |||
| @@ -612,7 +612,7 @@ CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | |||
| 612 | CONFIG_SCSI=y | 612 | CONFIG_SCSI=y |
| 613 | # CONFIG_SCSI_TGT is not set | 613 | # CONFIG_SCSI_TGT is not set |
| 614 | # CONFIG_SCSI_NETLINK is not set | 614 | # CONFIG_SCSI_NETLINK is not set |
| 615 | CONFIG_SCSI_PROC_FS=y | 615 | # CONFIG_SCSI_PROC_FS is not set |
| 616 | 616 | ||
| 617 | # | 617 | # |
| 618 | # SCSI support type (disk, tape, CD-ROM) | 618 | # SCSI support type (disk, tape, CD-ROM) |
diff --git a/arch/blackfin/configs/SRV1_defconfig b/arch/blackfin/configs/SRV1_defconfig index fa580affc9d6..a46529c6ade3 100644 --- a/arch/blackfin/configs/SRV1_defconfig +++ b/arch/blackfin/configs/SRV1_defconfig | |||
| @@ -282,8 +282,8 @@ CONFIG_BFIN_ICACHE=y | |||
| 282 | CONFIG_BFIN_DCACHE=y | 282 | CONFIG_BFIN_DCACHE=y |
| 283 | # CONFIG_BFIN_DCACHE_BANKA is not set | 283 | # CONFIG_BFIN_DCACHE_BANKA is not set |
| 284 | # CONFIG_BFIN_ICACHE_LOCK is not set | 284 | # CONFIG_BFIN_ICACHE_LOCK is not set |
| 285 | # CONFIG_BFIN_WB is not set | 285 | CONFIG_BFIN_WB=y |
| 286 | CONFIG_BFIN_WT=y | 286 | # CONFIG_BFIN_WT is not set |
| 287 | CONFIG_L1_MAX_PIECE=16 | 287 | CONFIG_L1_MAX_PIECE=16 |
| 288 | 288 | ||
| 289 | # | 289 | # |
diff --git a/arch/blackfin/include/asm/Kbuild b/arch/blackfin/include/asm/Kbuild index 606ecfdcc962..09c31418cc08 100644 --- a/arch/blackfin/include/asm/Kbuild +++ b/arch/blackfin/include/asm/Kbuild | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | include include/asm-generic/Kbuild.asm | 1 | include include/asm-generic/Kbuild.asm |
| 2 | 2 | ||
| 3 | unifdef-y += bfin_sport.h | ||
| 3 | unifdef-y += fixed_code.h | 4 | unifdef-y += fixed_code.h |
diff --git a/arch/blackfin/include/asm/bfin_sport.h b/arch/blackfin/include/asm/bfin_sport.h index fe88a2c19213..65a651db5b07 100644 --- a/arch/blackfin/include/asm/bfin_sport.h +++ b/arch/blackfin/include/asm/bfin_sport.h | |||
| @@ -1,30 +1,9 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * File: include/asm-blackfin/bfin_sport.h | 2 | * bfin_sport.h - userspace header for bfin sport driver |
| 3 | * Based on: | ||
| 4 | * Author: Roy Huang (roy.huang@analog.com) | ||
| 5 | * | 3 | * |
| 6 | * Created: Thu Aug. 24 2006 | 4 | * Copyright 2004-2008 Analog Devices Inc. |
| 7 | * Description: | ||
| 8 | * | 5 | * |
| 9 | * Modified: | 6 | * Licensed under the GPL-2 or later. |
| 10 | * Copyright 2004-2006 Analog Devices Inc. | ||
| 11 | * | ||
| 12 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | ||
| 13 | * | ||
| 14 | * This program is free software; you can redistribute it and/or modify | ||
| 15 | * it under the terms of the GNU General Public License as published by | ||
| 16 | * the Free Software Foundation; either version 2 of the License, or | ||
| 17 | * (at your option) any later version. | ||
| 18 | * | ||
| 19 | * This program is distributed in the hope that it will be useful, | ||
| 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 22 | * GNU General Public License for more details. | ||
| 23 | * | ||
| 24 | * You should have received a copy of the GNU General Public License | ||
| 25 | * along with this program; if not, see the file COPYING, or write | ||
| 26 | * to the Free Software Foundation, Inc., | ||
| 27 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 28 | */ | 7 | */ |
| 29 | 8 | ||
| 30 | #ifndef __BFIN_SPORT_H__ | 9 | #ifndef __BFIN_SPORT_H__ |
| @@ -42,11 +21,10 @@ | |||
| 42 | #define NORM_FORMAT 0x0 | 21 | #define NORM_FORMAT 0x0 |
| 43 | #define ALAW_FORMAT 0x2 | 22 | #define ALAW_FORMAT 0x2 |
| 44 | #define ULAW_FORMAT 0x3 | 23 | #define ULAW_FORMAT 0x3 |
| 45 | struct sport_register; | ||
| 46 | 24 | ||
| 47 | /* Function driver which use sport must initialize the structure */ | 25 | /* Function driver which use sport must initialize the structure */ |
| 48 | struct sport_config { | 26 | struct sport_config { |
| 49 | /*TDM (multichannels), I2S or other mode */ | 27 | /* TDM (multichannels), I2S or other mode */ |
| 50 | unsigned int mode:3; | 28 | unsigned int mode:3; |
| 51 | 29 | ||
| 52 | /* if TDM mode is selected, channels must be set */ | 30 | /* if TDM mode is selected, channels must be set */ |
| @@ -72,12 +50,18 @@ struct sport_config { | |||
| 72 | int serial_clk; | 50 | int serial_clk; |
| 73 | int fsync_clk; | 51 | int fsync_clk; |
| 74 | 52 | ||
| 75 | unsigned int data_format:2; /*Normal, u-law or a-law */ | 53 | unsigned int data_format:2; /* Normal, u-law or a-law */ |
| 76 | 54 | ||
| 77 | int word_len; /* How length of the word in bits, 3-32 bits */ | 55 | int word_len; /* How length of the word in bits, 3-32 bits */ |
| 78 | int dma_enabled; | 56 | int dma_enabled; |
| 79 | }; | 57 | }; |
| 80 | 58 | ||
| 59 | /* Userspace interface */ | ||
| 60 | #define SPORT_IOC_MAGIC 'P' | ||
| 61 | #define SPORT_IOC_CONFIG _IOWR('P', 0x01, struct sport_config) | ||
| 62 | |||
| 63 | #ifdef __KERNEL__ | ||
| 64 | |||
| 81 | struct sport_register { | 65 | struct sport_register { |
| 82 | unsigned short tcr1; | 66 | unsigned short tcr1; |
| 83 | unsigned short reserved0; | 67 | unsigned short reserved0; |
| @@ -117,9 +101,6 @@ struct sport_register { | |||
| 117 | unsigned long mrcs3; | 101 | unsigned long mrcs3; |
| 118 | }; | 102 | }; |
| 119 | 103 | ||
| 120 | #define SPORT_IOC_MAGIC 'P' | ||
| 121 | #define SPORT_IOC_CONFIG _IOWR('P', 0x01, struct sport_config) | ||
| 122 | |||
| 123 | struct sport_dev { | 104 | struct sport_dev { |
| 124 | struct cdev cdev; /* Char device structure */ | 105 | struct cdev cdev; /* Char device structure */ |
| 125 | 106 | ||
| @@ -149,6 +130,8 @@ struct sport_dev { | |||
| 149 | struct sport_config config; | 130 | struct sport_config config; |
| 150 | }; | 131 | }; |
| 151 | 132 | ||
| 133 | #endif | ||
| 134 | |||
| 152 | #define SPORT_TCR1 0 | 135 | #define SPORT_TCR1 0 |
| 153 | #define SPORT_TCR2 1 | 136 | #define SPORT_TCR2 1 |
| 154 | #define SPORT_TCLKDIV 2 | 137 | #define SPORT_TCLKDIV 2 |
| @@ -169,4 +152,4 @@ struct sport_dev { | |||
| 169 | #define SPORT_MRCS2 22 | 152 | #define SPORT_MRCS2 22 |
| 170 | #define SPORT_MRCS3 23 | 153 | #define SPORT_MRCS3 23 |
| 171 | 154 | ||
| 172 | #endif /*__BFIN_SPORT_H__*/ | 155 | #endif |
diff --git a/arch/blackfin/include/asm/ipipe.h b/arch/blackfin/include/asm/ipipe.h index 76f53d8b9a0d..343b56361ec9 100644 --- a/arch/blackfin/include/asm/ipipe.h +++ b/arch/blackfin/include/asm/ipipe.h | |||
| @@ -35,9 +35,9 @@ | |||
| 35 | #include <asm/atomic.h> | 35 | #include <asm/atomic.h> |
| 36 | #include <asm/traps.h> | 36 | #include <asm/traps.h> |
| 37 | 37 | ||
| 38 | #define IPIPE_ARCH_STRING "1.8-00" | 38 | #define IPIPE_ARCH_STRING "1.9-00" |
| 39 | #define IPIPE_MAJOR_NUMBER 1 | 39 | #define IPIPE_MAJOR_NUMBER 1 |
| 40 | #define IPIPE_MINOR_NUMBER 8 | 40 | #define IPIPE_MINOR_NUMBER 9 |
| 41 | #define IPIPE_PATCH_NUMBER 0 | 41 | #define IPIPE_PATCH_NUMBER 0 |
| 42 | 42 | ||
| 43 | #ifdef CONFIG_SMP | 43 | #ifdef CONFIG_SMP |
| @@ -83,9 +83,9 @@ struct ipipe_sysinfo { | |||
| 83 | "%2 = CYCLES2\n" \ | 83 | "%2 = CYCLES2\n" \ |
| 84 | "CC = %2 == %0\n" \ | 84 | "CC = %2 == %0\n" \ |
| 85 | "if ! CC jump 1b\n" \ | 85 | "if ! CC jump 1b\n" \ |
| 86 | : "=r" (((unsigned long *)&t)[1]), \ | 86 | : "=d,a" (((unsigned long *)&t)[1]), \ |
| 87 | "=r" (((unsigned long *)&t)[0]), \ | 87 | "=d,a" (((unsigned long *)&t)[0]), \ |
| 88 | "=r" (__cy2) \ | 88 | "=d,a" (__cy2) \ |
| 89 | : /*no input*/ : "CC"); \ | 89 | : /*no input*/ : "CC"); \ |
| 90 | t; \ | 90 | t; \ |
| 91 | }) | 91 | }) |
| @@ -118,35 +118,40 @@ void __ipipe_disable_irqdesc(struct ipipe_domain *ipd, | |||
| 118 | 118 | ||
| 119 | #define __ipipe_disable_irq(irq) (irq_desc[irq].chip->mask(irq)) | 119 | #define __ipipe_disable_irq(irq) (irq_desc[irq].chip->mask(irq)) |
| 120 | 120 | ||
| 121 | #define __ipipe_lock_root() \ | 121 | static inline int __ipipe_check_tickdev(const char *devname) |
| 122 | set_bit(IPIPE_ROOTLOCK_FLAG, &ipipe_root_domain->flags) | 122 | { |
| 123 | return 1; | ||
| 124 | } | ||
| 123 | 125 | ||
| 124 | #define __ipipe_unlock_root() \ | 126 | static inline void __ipipe_lock_root(void) |
| 125 | clear_bit(IPIPE_ROOTLOCK_FLAG, &ipipe_root_domain->flags) | 127 | { |
| 128 | set_bit(IPIPE_SYNCDEFER_FLAG, &ipipe_root_cpudom_var(status)); | ||
| 129 | } | ||
| 130 | |||
| 131 | static inline void __ipipe_unlock_root(void) | ||
| 132 | { | ||
| 133 | clear_bit(IPIPE_SYNCDEFER_FLAG, &ipipe_root_cpudom_var(status)); | ||
| 134 | } | ||
| 126 | 135 | ||
| 127 | void __ipipe_enable_pipeline(void); | 136 | void __ipipe_enable_pipeline(void); |
| 128 | 137 | ||
| 129 | #define __ipipe_hook_critical_ipi(ipd) do { } while (0) | 138 | #define __ipipe_hook_critical_ipi(ipd) do { } while (0) |
| 130 | 139 | ||
| 131 | #define __ipipe_sync_pipeline(syncmask) \ | 140 | #define __ipipe_sync_pipeline ___ipipe_sync_pipeline |
| 132 | do { \ | 141 | void ___ipipe_sync_pipeline(unsigned long syncmask); |
| 133 | struct ipipe_domain *ipd = ipipe_current_domain; \ | ||
| 134 | if (likely(ipd != ipipe_root_domain || !test_bit(IPIPE_ROOTLOCK_FLAG, &ipd->flags))) \ | ||
| 135 | __ipipe_sync_stage(syncmask); \ | ||
| 136 | } while (0) | ||
| 137 | 142 | ||
| 138 | void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs); | 143 | void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs); |
| 139 | 144 | ||
| 140 | int __ipipe_get_irq_priority(unsigned irq); | 145 | int __ipipe_get_irq_priority(unsigned irq); |
| 141 | 146 | ||
| 142 | int __ipipe_get_irqthread_priority(unsigned irq); | ||
| 143 | |||
| 144 | void __ipipe_stall_root_raw(void); | 147 | void __ipipe_stall_root_raw(void); |
| 145 | 148 | ||
| 146 | void __ipipe_unstall_root_raw(void); | 149 | void __ipipe_unstall_root_raw(void); |
| 147 | 150 | ||
| 148 | void __ipipe_serial_debug(const char *fmt, ...); | 151 | void __ipipe_serial_debug(const char *fmt, ...); |
| 149 | 152 | ||
| 153 | asmlinkage void __ipipe_call_irqtail(unsigned long addr); | ||
| 154 | |||
| 150 | DECLARE_PER_CPU(struct pt_regs, __ipipe_tick_regs); | 155 | DECLARE_PER_CPU(struct pt_regs, __ipipe_tick_regs); |
| 151 | 156 | ||
| 152 | extern unsigned long __ipipe_core_clock; | 157 | extern unsigned long __ipipe_core_clock; |
| @@ -162,42 +167,25 @@ static inline unsigned long __ipipe_ffnz(unsigned long ul) | |||
| 162 | 167 | ||
| 163 | #define __ipipe_run_irqtail() /* Must be a macro */ \ | 168 | #define __ipipe_run_irqtail() /* Must be a macro */ \ |
| 164 | do { \ | 169 | do { \ |
| 165 | asmlinkage void __ipipe_call_irqtail(void); \ | ||
| 166 | unsigned long __pending; \ | 170 | unsigned long __pending; \ |
| 167 | CSYNC(); \ | 171 | CSYNC(); \ |
| 168 | __pending = bfin_read_IPEND(); \ | 172 | __pending = bfin_read_IPEND(); \ |
| 169 | if (__pending & 0x8000) { \ | 173 | if (__pending & 0x8000) { \ |
| 170 | __pending &= ~0x8010; \ | 174 | __pending &= ~0x8010; \ |
| 171 | if (__pending && (__pending & (__pending - 1)) == 0) \ | 175 | if (__pending && (__pending & (__pending - 1)) == 0) \ |
| 172 | __ipipe_call_irqtail(); \ | 176 | __ipipe_call_irqtail(__ipipe_irq_tail_hook); \ |
| 173 | } \ | 177 | } \ |
| 174 | } while (0) | 178 | } while (0) |
| 175 | 179 | ||
| 176 | #define __ipipe_run_isr(ipd, irq) \ | 180 | #define __ipipe_run_isr(ipd, irq) \ |
| 177 | do { \ | 181 | do { \ |
| 178 | if (ipd == ipipe_root_domain) { \ | 182 | if (ipd == ipipe_root_domain) { \ |
| 179 | /* \ | 183 | local_irq_enable_hw(); \ |
| 180 | * Note: the I-pipe implements a threaded interrupt model on \ | 184 | if (ipipe_virtual_irq_p(irq)) \ |
| 181 | * this arch for Linux external IRQs. The interrupt handler we \ | ||
| 182 | * call here only wakes up the associated IRQ thread. \ | ||
| 183 | */ \ | ||
| 184 | if (ipipe_virtual_irq_p(irq)) { \ | ||
| 185 | /* No irqtail here; virtual interrupts have no effect \ | ||
| 186 | on IPEND so there is no need for processing \ | ||
| 187 | deferral. */ \ | ||
| 188 | local_irq_enable_nohead(ipd); \ | ||
| 189 | ipd->irqs[irq].handler(irq, ipd->irqs[irq].cookie); \ | 185 | ipd->irqs[irq].handler(irq, ipd->irqs[irq].cookie); \ |
| 190 | local_irq_disable_nohead(ipd); \ | 186 | else \ |
| 191 | } else \ | ||
| 192 | /* \ | ||
| 193 | * No need to run the irqtail here either; \ | ||
| 194 | * we can't be preempted by hw IRQs, so \ | ||
| 195 | * non-Linux IRQs cannot stack over the short \ | ||
| 196 | * thread wakeup code. Which in turn means \ | ||
| 197 | * that no irqtail condition could be pending \ | ||
| 198 | * for domains above Linux in the pipeline. \ | ||
| 199 | */ \ | ||
| 200 | ipd->irqs[irq].handler(irq, &__raw_get_cpu_var(__ipipe_tick_regs)); \ | 187 | ipd->irqs[irq].handler(irq, &__raw_get_cpu_var(__ipipe_tick_regs)); \ |
| 188 | local_irq_disable_hw(); \ | ||
| 201 | } else { \ | 189 | } else { \ |
| 202 | __clear_bit(IPIPE_SYNC_FLAG, &ipipe_cpudom_var(ipd, status)); \ | 190 | __clear_bit(IPIPE_SYNC_FLAG, &ipipe_cpudom_var(ipd, status)); \ |
| 203 | local_irq_enable_nohead(ipd); \ | 191 | local_irq_enable_nohead(ipd); \ |
| @@ -217,42 +205,24 @@ void ipipe_init_irq_threads(void); | |||
| 217 | 205 | ||
| 218 | int ipipe_start_irq_thread(unsigned irq, struct irq_desc *desc); | 206 | int ipipe_start_irq_thread(unsigned irq, struct irq_desc *desc); |
| 219 | 207 | ||
| 220 | #define IS_SYSIRQ(irq) ((irq) > IRQ_CORETMR && (irq) <= SYS_IRQS) | 208 | #ifdef CONFIG_GENERIC_CLOCKEVENTS |
| 221 | #define IS_GPIOIRQ(irq) ((irq) >= GPIO_IRQ_BASE && (irq) < NR_IRQS) | 209 | #define IRQ_SYSTMR IRQ_CORETMR |
| 222 | 210 | #define IRQ_PRIOTMR IRQ_CORETMR | |
| 211 | #else | ||
| 223 | #define IRQ_SYSTMR IRQ_TIMER0 | 212 | #define IRQ_SYSTMR IRQ_TIMER0 |
| 224 | #define IRQ_PRIOTMR CONFIG_IRQ_TIMER0 | 213 | #define IRQ_PRIOTMR CONFIG_IRQ_TIMER0 |
| 214 | #endif | ||
| 225 | 215 | ||
| 226 | #if defined(CONFIG_BF531) || defined(CONFIG_BF532) || defined(CONFIG_BF533) | 216 | #ifdef CONFIG_BF561 |
| 227 | #define PRIO_GPIODEMUX(irq) CONFIG_PFA | ||
| 228 | #elif defined(CONFIG_BF534) || defined(CONFIG_BF536) || defined(CONFIG_BF537) | ||
| 229 | #define PRIO_GPIODEMUX(irq) CONFIG_IRQ_PROG_INTA | ||
| 230 | #elif defined(CONFIG_BF52x) | ||
| 231 | #define PRIO_GPIODEMUX(irq) ((irq) == IRQ_PORTF_INTA ? CONFIG_IRQ_PORTF_INTA : \ | ||
| 232 | (irq) == IRQ_PORTG_INTA ? CONFIG_IRQ_PORTG_INTA : \ | ||
| 233 | (irq) == IRQ_PORTH_INTA ? CONFIG_IRQ_PORTH_INTA : \ | ||
| 234 | -1) | ||
| 235 | #elif defined(CONFIG_BF561) | ||
| 236 | #define PRIO_GPIODEMUX(irq) ((irq) == IRQ_PROG0_INTA ? CONFIG_IRQ_PROG0_INTA : \ | ||
| 237 | (irq) == IRQ_PROG1_INTA ? CONFIG_IRQ_PROG1_INTA : \ | ||
| 238 | (irq) == IRQ_PROG2_INTA ? CONFIG_IRQ_PROG2_INTA : \ | ||
| 239 | -1) | ||
| 240 | #define bfin_write_TIMER_DISABLE(val) bfin_write_TMRS8_DISABLE(val) | 217 | #define bfin_write_TIMER_DISABLE(val) bfin_write_TMRS8_DISABLE(val) |
| 241 | #define bfin_write_TIMER_ENABLE(val) bfin_write_TMRS8_ENABLE(val) | 218 | #define bfin_write_TIMER_ENABLE(val) bfin_write_TMRS8_ENABLE(val) |
| 242 | #define bfin_write_TIMER_STATUS(val) bfin_write_TMRS8_STATUS(val) | 219 | #define bfin_write_TIMER_STATUS(val) bfin_write_TMRS8_STATUS(val) |
| 243 | #define bfin_read_TIMER_STATUS() bfin_read_TMRS8_STATUS() | 220 | #define bfin_read_TIMER_STATUS() bfin_read_TMRS8_STATUS() |
| 244 | #elif defined(CONFIG_BF54x) | 221 | #elif defined(CONFIG_BF54x) |
| 245 | #define PRIO_GPIODEMUX(irq) ((irq) == IRQ_PINT0 ? CONFIG_IRQ_PINT0 : \ | ||
| 246 | (irq) == IRQ_PINT1 ? CONFIG_IRQ_PINT1 : \ | ||
| 247 | (irq) == IRQ_PINT2 ? CONFIG_IRQ_PINT2 : \ | ||
| 248 | (irq) == IRQ_PINT3 ? CONFIG_IRQ_PINT3 : \ | ||
| 249 | -1) | ||
| 250 | #define bfin_write_TIMER_DISABLE(val) bfin_write_TIMER_DISABLE0(val) | 222 | #define bfin_write_TIMER_DISABLE(val) bfin_write_TIMER_DISABLE0(val) |
| 251 | #define bfin_write_TIMER_ENABLE(val) bfin_write_TIMER_ENABLE0(val) | 223 | #define bfin_write_TIMER_ENABLE(val) bfin_write_TIMER_ENABLE0(val) |
| 252 | #define bfin_write_TIMER_STATUS(val) bfin_write_TIMER_STATUS0(val) | 224 | #define bfin_write_TIMER_STATUS(val) bfin_write_TIMER_STATUS0(val) |
| 253 | #define bfin_read_TIMER_STATUS(val) bfin_read_TIMER_STATUS0(val) | 225 | #define bfin_read_TIMER_STATUS(val) bfin_read_TIMER_STATUS0(val) |
| 254 | #else | ||
| 255 | # error "no PRIO_GPIODEMUX() for this part" | ||
| 256 | #endif | 226 | #endif |
| 257 | 227 | ||
| 258 | #define __ipipe_root_tick_p(regs) ((regs->ipend & 0x10) != 0) | 228 | #define __ipipe_root_tick_p(regs) ((regs->ipend & 0x10) != 0) |
| @@ -275,4 +245,6 @@ int ipipe_start_irq_thread(unsigned irq, struct irq_desc *desc); | |||
| 275 | 245 | ||
| 276 | #endif /* !CONFIG_IPIPE */ | 246 | #endif /* !CONFIG_IPIPE */ |
| 277 | 247 | ||
| 248 | #define ipipe_update_tick_evtdev(evtdev) do { } while (0) | ||
| 249 | |||
| 278 | #endif /* !__ASM_BLACKFIN_IPIPE_H */ | 250 | #endif /* !__ASM_BLACKFIN_IPIPE_H */ |
diff --git a/arch/blackfin/include/asm/ipipe_base.h b/arch/blackfin/include/asm/ipipe_base.h index cb1025aeabcf..3e8acbd1a3be 100644 --- a/arch/blackfin/include/asm/ipipe_base.h +++ b/arch/blackfin/include/asm/ipipe_base.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* -*- linux-c -*- | 1 | /* -*- linux-c -*- |
| 2 | * include/asm-blackfin/_baseipipe.h | 2 | * include/asm-blackfin/ipipe_base.h |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2007 Philippe Gerum. | 4 | * Copyright (C) 2007 Philippe Gerum. |
| 5 | * | 5 | * |
| @@ -27,8 +27,9 @@ | |||
| 27 | #define IPIPE_NR_XIRQS NR_IRQS | 27 | #define IPIPE_NR_XIRQS NR_IRQS |
| 28 | #define IPIPE_IRQ_ISHIFT 5 /* 2^5 for 32bits arch. */ | 28 | #define IPIPE_IRQ_ISHIFT 5 /* 2^5 for 32bits arch. */ |
| 29 | 29 | ||
| 30 | /* Blackfin-specific, global domain flags */ | 30 | /* Blackfin-specific, per-cpu pipeline status */ |
| 31 | #define IPIPE_ROOTLOCK_FLAG 1 /* Lock pipeline for root */ | 31 | #define IPIPE_SYNCDEFER_FLAG 15 |
| 32 | #define IPIPE_SYNCDEFER_MASK (1L << IPIPE_SYNCDEFER_MASK) | ||
| 32 | 33 | ||
| 33 | /* Blackfin traps -- i.e. exception vector numbers */ | 34 | /* Blackfin traps -- i.e. exception vector numbers */ |
| 34 | #define IPIPE_NR_FAULTS 52 /* We leave a gap after VEC_ILL_RES. */ | 35 | #define IPIPE_NR_FAULTS 52 /* We leave a gap after VEC_ILL_RES. */ |
| @@ -48,11 +49,6 @@ | |||
| 48 | 49 | ||
| 49 | #ifndef __ASSEMBLY__ | 50 | #ifndef __ASSEMBLY__ |
| 50 | 51 | ||
| 51 | #include <linux/bitops.h> | ||
| 52 | |||
| 53 | extern int test_bit(int nr, const void *addr); | ||
| 54 | |||
| 55 | |||
| 56 | extern unsigned long __ipipe_root_status; /* Alias to ipipe_root_cpudom_var(status) */ | 52 | extern unsigned long __ipipe_root_status; /* Alias to ipipe_root_cpudom_var(status) */ |
| 57 | 53 | ||
| 58 | static inline void __ipipe_stall_root(void) | 54 | static inline void __ipipe_stall_root(void) |
diff --git a/arch/blackfin/include/asm/irq.h b/arch/blackfin/include/asm/irq.h index 3d977909ce7d..7645e85a5f6f 100644 --- a/arch/blackfin/include/asm/irq.h +++ b/arch/blackfin/include/asm/irq.h | |||
| @@ -61,20 +61,38 @@ void __ipipe_restore_root(unsigned long flags); | |||
| 61 | #define raw_irqs_disabled_flags(flags) (!irqs_enabled_from_flags_hw(flags)) | 61 | #define raw_irqs_disabled_flags(flags) (!irqs_enabled_from_flags_hw(flags)) |
| 62 | #define local_test_iflag_hw(x) irqs_enabled_from_flags_hw(x) | 62 | #define local_test_iflag_hw(x) irqs_enabled_from_flags_hw(x) |
| 63 | 63 | ||
| 64 | #define local_save_flags(x) \ | 64 | #define local_save_flags(x) \ |
| 65 | do { \ | 65 | do { \ |
| 66 | (x) = __ipipe_test_root() ? \ | 66 | (x) = __ipipe_test_root() ? \ |
| 67 | __all_masked_irq_flags : bfin_irq_flags; \ | 67 | __all_masked_irq_flags : bfin_irq_flags; \ |
| 68 | barrier(); \ | ||
| 68 | } while (0) | 69 | } while (0) |
| 69 | 70 | ||
| 70 | #define local_irq_save(x) \ | 71 | #define local_irq_save(x) \ |
| 71 | do { \ | 72 | do { \ |
| 72 | (x) = __ipipe_test_and_stall_root(); \ | 73 | (x) = __ipipe_test_and_stall_root() ? \ |
| 74 | __all_masked_irq_flags : bfin_irq_flags; \ | ||
| 75 | barrier(); \ | ||
| 76 | } while (0) | ||
| 77 | |||
| 78 | static inline void local_irq_restore(unsigned long x) | ||
| 79 | { | ||
| 80 | barrier(); | ||
| 81 | __ipipe_restore_root(x == __all_masked_irq_flags); | ||
| 82 | } | ||
| 83 | |||
| 84 | #define local_irq_disable() \ | ||
| 85 | do { \ | ||
| 86 | __ipipe_stall_root(); \ | ||
| 87 | barrier(); \ | ||
| 73 | } while (0) | 88 | } while (0) |
| 74 | 89 | ||
| 75 | #define local_irq_restore(x) __ipipe_restore_root(x) | 90 | static inline void local_irq_enable(void) |
| 76 | #define local_irq_disable() __ipipe_stall_root() | 91 | { |
| 77 | #define local_irq_enable() __ipipe_unstall_root() | 92 | barrier(); |
| 93 | __ipipe_unstall_root(); | ||
| 94 | } | ||
| 95 | |||
| 78 | #define irqs_disabled() __ipipe_test_root() | 96 | #define irqs_disabled() __ipipe_test_root() |
| 79 | 97 | ||
| 80 | #define local_save_flags_hw(x) \ | 98 | #define local_save_flags_hw(x) \ |
diff --git a/arch/blackfin/include/asm/thread_info.h b/arch/blackfin/include/asm/thread_info.h index e721ce55956c..2920087516f2 100644 --- a/arch/blackfin/include/asm/thread_info.h +++ b/arch/blackfin/include/asm/thread_info.h | |||
| @@ -122,6 +122,7 @@ static inline struct thread_info *current_thread_info(void) | |||
| 122 | #define TIF_MEMDIE 4 | 122 | #define TIF_MEMDIE 4 |
| 123 | #define TIF_RESTORE_SIGMASK 5 /* restore signal mask in do_signal() */ | 123 | #define TIF_RESTORE_SIGMASK 5 /* restore signal mask in do_signal() */ |
| 124 | #define TIF_FREEZE 6 /* is freezing for suspend */ | 124 | #define TIF_FREEZE 6 /* is freezing for suspend */ |
| 125 | #define TIF_IRQ_SYNC 7 /* sync pipeline stage */ | ||
| 125 | 126 | ||
| 126 | /* as above, but as bit values */ | 127 | /* as above, but as bit values */ |
| 127 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) | 128 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) |
| @@ -130,6 +131,7 @@ static inline struct thread_info *current_thread_info(void) | |||
| 130 | #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) | 131 | #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) |
| 131 | #define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK) | 132 | #define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK) |
| 132 | #define _TIF_FREEZE (1<<TIF_FREEZE) | 133 | #define _TIF_FREEZE (1<<TIF_FREEZE) |
| 134 | #define _TIF_IRQ_SYNC (1<<TIF_IRQ_SYNC) | ||
| 133 | 135 | ||
| 134 | #define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */ | 136 | #define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */ |
| 135 | 137 | ||
diff --git a/arch/blackfin/kernel/Makefile b/arch/blackfin/kernel/Makefile index 4a92a86824b7..fd4d4328a0f2 100644 --- a/arch/blackfin/kernel/Makefile +++ b/arch/blackfin/kernel/Makefile | |||
| @@ -15,13 +15,15 @@ else | |||
| 15 | obj-y += time.o | 15 | obj-y += time.o |
| 16 | endif | 16 | endif |
| 17 | 17 | ||
| 18 | CFLAGS_kgdb_test.o := -mlong-calls -O0 | ||
| 19 | |||
| 20 | obj-$(CONFIG_IPIPE) += ipipe.o | 18 | obj-$(CONFIG_IPIPE) += ipipe.o |
| 21 | obj-$(CONFIG_IPIPE_TRACE_MCOUNT) += mcount.o | 19 | obj-$(CONFIG_IPIPE_TRACE_MCOUNT) += mcount.o |
| 22 | obj-$(CONFIG_BFIN_GPTIMERS) += gptimers.o | 20 | obj-$(CONFIG_BFIN_GPTIMERS) += gptimers.o |
| 23 | obj-$(CONFIG_CPLB_INFO) += cplbinfo.o | 21 | obj-$(CONFIG_CPLB_INFO) += cplbinfo.o |
| 24 | obj-$(CONFIG_MODULES) += module.o | 22 | obj-$(CONFIG_MODULES) += module.o |
| 25 | obj-$(CONFIG_KGDB) += kgdb.o | 23 | obj-$(CONFIG_KGDB) += kgdb.o |
| 26 | obj-$(CONFIG_KGDB_TESTCASE) += kgdb_test.o | 24 | obj-$(CONFIG_KGDB_TESTS) += kgdb_test.o |
| 27 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o | 25 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o |
| 26 | |||
| 27 | # the kgdb test puts code into L2 and without linker | ||
| 28 | # relaxation, we need to force long calls to/from it | ||
| 29 | CFLAGS_kgdb_test.o := -mlong-calls -O0 | ||
diff --git a/arch/blackfin/kernel/cplb-nompu/cplbinit.c b/arch/blackfin/kernel/cplb-nompu/cplbinit.c index 0e28f7595733..d6c067782e63 100644 --- a/arch/blackfin/kernel/cplb-nompu/cplbinit.c +++ b/arch/blackfin/kernel/cplb-nompu/cplbinit.c | |||
| @@ -53,9 +53,13 @@ void __init generate_cplb_tables_cpu(unsigned int cpu) | |||
| 53 | 53 | ||
| 54 | i_d = i_i = 0; | 54 | i_d = i_i = 0; |
| 55 | 55 | ||
| 56 | #ifdef CONFIG_DEBUG_HUNT_FOR_ZERO | ||
| 56 | /* Set up the zero page. */ | 57 | /* Set up the zero page. */ |
| 57 | d_tbl[i_d].addr = 0; | 58 | d_tbl[i_d].addr = 0; |
| 58 | d_tbl[i_d++].data = SDRAM_OOPS | PAGE_SIZE_1KB; | 59 | d_tbl[i_d++].data = SDRAM_OOPS | PAGE_SIZE_1KB; |
| 60 | i_tbl[i_i].addr = 0; | ||
| 61 | i_tbl[i_i++].data = SDRAM_OOPS | PAGE_SIZE_1KB; | ||
| 62 | #endif | ||
| 59 | 63 | ||
| 60 | /* Cover kernel memory with 4M pages. */ | 64 | /* Cover kernel memory with 4M pages. */ |
| 61 | addr = 0; | 65 | addr = 0; |
diff --git a/arch/blackfin/kernel/ipipe.c b/arch/blackfin/kernel/ipipe.c index 339be5a3ae6a..a5de8d45424c 100644 --- a/arch/blackfin/kernel/ipipe.c +++ b/arch/blackfin/kernel/ipipe.c | |||
| @@ -35,14 +35,8 @@ | |||
| 35 | #include <asm/atomic.h> | 35 | #include <asm/atomic.h> |
| 36 | #include <asm/io.h> | 36 | #include <asm/io.h> |
| 37 | 37 | ||
| 38 | static int create_irq_threads; | ||
| 39 | |||
| 40 | DEFINE_PER_CPU(struct pt_regs, __ipipe_tick_regs); | 38 | DEFINE_PER_CPU(struct pt_regs, __ipipe_tick_regs); |
| 41 | 39 | ||
| 42 | static DEFINE_PER_CPU(unsigned long, pending_irqthread_mask); | ||
| 43 | |||
| 44 | static DEFINE_PER_CPU(int [IVG13 + 1], pending_irq_count); | ||
| 45 | |||
| 46 | asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs); | 40 | asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs); |
| 47 | 41 | ||
| 48 | static void __ipipe_no_irqtail(void); | 42 | static void __ipipe_no_irqtail(void); |
| @@ -93,6 +87,7 @@ void __ipipe_enable_pipeline(void) | |||
| 93 | */ | 87 | */ |
| 94 | void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs) | 88 | void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs) |
| 95 | { | 89 | { |
| 90 | struct ipipe_percpu_domain_data *p = ipipe_root_cpudom_ptr(); | ||
| 96 | struct ipipe_domain *this_domain, *next_domain; | 91 | struct ipipe_domain *this_domain, *next_domain; |
| 97 | struct list_head *head, *pos; | 92 | struct list_head *head, *pos; |
| 98 | int m_ack, s = -1; | 93 | int m_ack, s = -1; |
| @@ -104,7 +99,6 @@ void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs) | |||
| 104 | * interrupt. | 99 | * interrupt. |
| 105 | */ | 100 | */ |
| 106 | m_ack = (regs == NULL || irq == IRQ_SYSTMR || irq == IRQ_CORETMR); | 101 | m_ack = (regs == NULL || irq == IRQ_SYSTMR || irq == IRQ_CORETMR); |
| 107 | |||
| 108 | this_domain = ipipe_current_domain; | 102 | this_domain = ipipe_current_domain; |
| 109 | 103 | ||
| 110 | if (unlikely(test_bit(IPIPE_STICKY_FLAG, &this_domain->irqs[irq].control))) | 104 | if (unlikely(test_bit(IPIPE_STICKY_FLAG, &this_domain->irqs[irq].control))) |
| @@ -114,49 +108,28 @@ void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs) | |||
| 114 | next_domain = list_entry(head, struct ipipe_domain, p_link); | 108 | next_domain = list_entry(head, struct ipipe_domain, p_link); |
| 115 | if (likely(test_bit(IPIPE_WIRED_FLAG, &next_domain->irqs[irq].control))) { | 109 | if (likely(test_bit(IPIPE_WIRED_FLAG, &next_domain->irqs[irq].control))) { |
| 116 | if (!m_ack && next_domain->irqs[irq].acknowledge != NULL) | 110 | if (!m_ack && next_domain->irqs[irq].acknowledge != NULL) |
| 117 | next_domain->irqs[irq].acknowledge(irq, irq_desc + irq); | 111 | next_domain->irqs[irq].acknowledge(irq, irq_to_desc(irq)); |
| 118 | if (test_bit(IPIPE_ROOTLOCK_FLAG, &ipipe_root_domain->flags)) | 112 | if (test_bit(IPIPE_SYNCDEFER_FLAG, &p->status)) |
| 119 | s = __test_and_set_bit(IPIPE_STALL_FLAG, | 113 | s = __test_and_set_bit(IPIPE_STALL_FLAG, &p->status); |
| 120 | &ipipe_root_cpudom_var(status)); | ||
| 121 | __ipipe_dispatch_wired(next_domain, irq); | 114 | __ipipe_dispatch_wired(next_domain, irq); |
| 122 | goto finalize; | 115 | goto out; |
| 123 | return; | ||
| 124 | } | 116 | } |
| 125 | } | 117 | } |
| 126 | 118 | ||
| 127 | /* Ack the interrupt. */ | 119 | /* Ack the interrupt. */ |
| 128 | 120 | ||
| 129 | pos = head; | 121 | pos = head; |
| 130 | |||
| 131 | while (pos != &__ipipe_pipeline) { | 122 | while (pos != &__ipipe_pipeline) { |
| 132 | next_domain = list_entry(pos, struct ipipe_domain, p_link); | 123 | next_domain = list_entry(pos, struct ipipe_domain, p_link); |
| 133 | /* | ||
| 134 | * For each domain handling the incoming IRQ, mark it | ||
| 135 | * as pending in its log. | ||
| 136 | */ | ||
| 137 | if (test_bit(IPIPE_HANDLE_FLAG, &next_domain->irqs[irq].control)) { | 124 | if (test_bit(IPIPE_HANDLE_FLAG, &next_domain->irqs[irq].control)) { |
| 138 | /* | ||
| 139 | * Domains that handle this IRQ are polled for | ||
| 140 | * acknowledging it by decreasing priority | ||
| 141 | * order. The interrupt must be made pending | ||
| 142 | * _first_ in the domain's status flags before | ||
| 143 | * the PIC is unlocked. | ||
| 144 | */ | ||
| 145 | __ipipe_set_irq_pending(next_domain, irq); | 125 | __ipipe_set_irq_pending(next_domain, irq); |
| 146 | |||
| 147 | if (!m_ack && next_domain->irqs[irq].acknowledge != NULL) { | 126 | if (!m_ack && next_domain->irqs[irq].acknowledge != NULL) { |
| 148 | next_domain->irqs[irq].acknowledge(irq, irq_desc + irq); | 127 | next_domain->irqs[irq].acknowledge(irq, irq_to_desc(irq)); |
| 149 | m_ack = 1; | 128 | m_ack = 1; |
| 150 | } | 129 | } |
| 151 | } | 130 | } |
| 152 | |||
| 153 | /* | ||
| 154 | * If the domain does not want the IRQ to be passed | ||
| 155 | * down the interrupt pipe, exit the loop now. | ||
| 156 | */ | ||
| 157 | if (!test_bit(IPIPE_PASS_FLAG, &next_domain->irqs[irq].control)) | 131 | if (!test_bit(IPIPE_PASS_FLAG, &next_domain->irqs[irq].control)) |
| 158 | break; | 132 | break; |
| 159 | |||
| 160 | pos = next_domain->p_link.next; | 133 | pos = next_domain->p_link.next; |
| 161 | } | 134 | } |
| 162 | 135 | ||
| @@ -166,18 +139,24 @@ void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs) | |||
| 166 | * immediately to the current domain if the interrupt has been | 139 | * immediately to the current domain if the interrupt has been |
| 167 | * marked as 'sticky'. This search does not go beyond the | 140 | * marked as 'sticky'. This search does not go beyond the |
| 168 | * current domain in the pipeline. We also enforce the | 141 | * current domain in the pipeline. We also enforce the |
| 169 | * additional root stage lock (blackfin-specific). */ | 142 | * additional root stage lock (blackfin-specific). |
| 143 | */ | ||
| 144 | if (test_bit(IPIPE_SYNCDEFER_FLAG, &p->status)) | ||
| 145 | s = __test_and_set_bit(IPIPE_STALL_FLAG, &p->status); | ||
| 170 | 146 | ||
| 171 | if (test_bit(IPIPE_ROOTLOCK_FLAG, &ipipe_root_domain->flags)) | 147 | /* |
| 172 | s = __test_and_set_bit(IPIPE_STALL_FLAG, | 148 | * If the interrupt preempted the head domain, then do not |
| 173 | &ipipe_root_cpudom_var(status)); | 149 | * even try to walk the pipeline, unless an interrupt is |
| 174 | finalize: | 150 | * pending for it. |
| 151 | */ | ||
| 152 | if (test_bit(IPIPE_AHEAD_FLAG, &this_domain->flags) && | ||
| 153 | ipipe_head_cpudom_var(irqpend_himask) == 0) | ||
| 154 | goto out; | ||
| 175 | 155 | ||
| 176 | __ipipe_walk_pipeline(head); | 156 | __ipipe_walk_pipeline(head); |
| 177 | 157 | out: | |
| 178 | if (!s) | 158 | if (!s) |
| 179 | __clear_bit(IPIPE_STALL_FLAG, | 159 | __clear_bit(IPIPE_STALL_FLAG, &p->status); |
| 180 | &ipipe_root_cpudom_var(status)); | ||
| 181 | } | 160 | } |
| 182 | 161 | ||
| 183 | int __ipipe_check_root(void) | 162 | int __ipipe_check_root(void) |
| @@ -187,7 +166,7 @@ int __ipipe_check_root(void) | |||
| 187 | 166 | ||
| 188 | void __ipipe_enable_irqdesc(struct ipipe_domain *ipd, unsigned irq) | 167 | void __ipipe_enable_irqdesc(struct ipipe_domain *ipd, unsigned irq) |
| 189 | { | 168 | { |
| 190 | struct irq_desc *desc = irq_desc + irq; | 169 | struct irq_desc *desc = irq_to_desc(irq); |
| 191 | int prio = desc->ic_prio; | 170 | int prio = desc->ic_prio; |
| 192 | 171 | ||
| 193 | desc->depth = 0; | 172 | desc->depth = 0; |
| @@ -199,7 +178,7 @@ EXPORT_SYMBOL(__ipipe_enable_irqdesc); | |||
| 199 | 178 | ||
| 200 | void __ipipe_disable_irqdesc(struct ipipe_domain *ipd, unsigned irq) | 179 | void __ipipe_disable_irqdesc(struct ipipe_domain *ipd, unsigned irq) |
| 201 | { | 180 | { |
| 202 | struct irq_desc *desc = irq_desc + irq; | 181 | struct irq_desc *desc = irq_to_desc(irq); |
| 203 | int prio = desc->ic_prio; | 182 | int prio = desc->ic_prio; |
| 204 | 183 | ||
| 205 | if (ipd != &ipipe_root && | 184 | if (ipd != &ipipe_root && |
| @@ -236,15 +215,18 @@ int __ipipe_syscall_root(struct pt_regs *regs) | |||
| 236 | { | 215 | { |
| 237 | unsigned long flags; | 216 | unsigned long flags; |
| 238 | 217 | ||
| 239 | /* We need to run the IRQ tail hook whenever we don't | 218 | /* |
| 219 | * We need to run the IRQ tail hook whenever we don't | ||
| 240 | * propagate a syscall to higher domains, because we know that | 220 | * propagate a syscall to higher domains, because we know that |
| 241 | * important operations might be pending there (e.g. Xenomai | 221 | * important operations might be pending there (e.g. Xenomai |
| 242 | * deferred rescheduling). */ | 222 | * deferred rescheduling). |
| 223 | */ | ||
| 243 | 224 | ||
| 244 | if (!__ipipe_syscall_watched_p(current, regs->orig_p0)) { | 225 | if (regs->orig_p0 < NR_syscalls) { |
| 245 | void (*hook)(void) = (void (*)(void))__ipipe_irq_tail_hook; | 226 | void (*hook)(void) = (void (*)(void))__ipipe_irq_tail_hook; |
| 246 | hook(); | 227 | hook(); |
| 247 | return 0; | 228 | if ((current->flags & PF_EVNOTIFY) == 0) |
| 229 | return 0; | ||
| 248 | } | 230 | } |
| 249 | 231 | ||
| 250 | /* | 232 | /* |
| @@ -312,112 +294,46 @@ int ipipe_trigger_irq(unsigned irq) | |||
| 312 | { | 294 | { |
| 313 | unsigned long flags; | 295 | unsigned long flags; |
| 314 | 296 | ||
| 297 | #ifdef CONFIG_IPIPE_DEBUG | ||
| 315 | if (irq >= IPIPE_NR_IRQS || | 298 | if (irq >= IPIPE_NR_IRQS || |
| 316 | (ipipe_virtual_irq_p(irq) | 299 | (ipipe_virtual_irq_p(irq) |
| 317 | && !test_bit(irq - IPIPE_VIRQ_BASE, &__ipipe_virtual_irq_map))) | 300 | && !test_bit(irq - IPIPE_VIRQ_BASE, &__ipipe_virtual_irq_map))) |
| 318 | return -EINVAL; | 301 | return -EINVAL; |
| 302 | #endif | ||
| 319 | 303 | ||
| 320 | local_irq_save_hw(flags); | 304 | local_irq_save_hw(flags); |
| 321 | |||
| 322 | __ipipe_handle_irq(irq, NULL); | 305 | __ipipe_handle_irq(irq, NULL); |
| 323 | |||
| 324 | local_irq_restore_hw(flags); | 306 | local_irq_restore_hw(flags); |
| 325 | 307 | ||
| 326 | return 1; | 308 | return 1; |
| 327 | } | 309 | } |
| 328 | 310 | ||
| 329 | /* Move Linux IRQ to threads. */ | 311 | asmlinkage void __ipipe_sync_root(void) |
| 330 | |||
| 331 | static int do_irqd(void *__desc) | ||
| 332 | { | 312 | { |
| 333 | struct irq_desc *desc = __desc; | 313 | unsigned long flags; |
| 334 | unsigned irq = desc - irq_desc; | ||
| 335 | int thrprio = desc->thr_prio; | ||
| 336 | int thrmask = 1 << thrprio; | ||
| 337 | int cpu = smp_processor_id(); | ||
| 338 | cpumask_t cpumask; | ||
| 339 | |||
| 340 | sigfillset(¤t->blocked); | ||
| 341 | current->flags |= PF_NOFREEZE; | ||
| 342 | cpumask = cpumask_of_cpu(cpu); | ||
| 343 | set_cpus_allowed(current, cpumask); | ||
| 344 | ipipe_setscheduler_root(current, SCHED_FIFO, 50 + thrprio); | ||
| 345 | |||
| 346 | while (!kthread_should_stop()) { | ||
| 347 | local_irq_disable(); | ||
| 348 | if (!(desc->status & IRQ_SCHEDULED)) { | ||
| 349 | set_current_state(TASK_INTERRUPTIBLE); | ||
| 350 | resched: | ||
| 351 | local_irq_enable(); | ||
| 352 | schedule(); | ||
| 353 | local_irq_disable(); | ||
| 354 | } | ||
| 355 | __set_current_state(TASK_RUNNING); | ||
| 356 | /* | ||
| 357 | * If higher priority interrupt servers are ready to | ||
| 358 | * run, reschedule immediately. We need this for the | ||
| 359 | * GPIO demux IRQ handler to unmask the interrupt line | ||
| 360 | * _last_, after all GPIO IRQs have run. | ||
| 361 | */ | ||
| 362 | if (per_cpu(pending_irqthread_mask, cpu) & ~(thrmask|(thrmask-1))) | ||
| 363 | goto resched; | ||
| 364 | if (--per_cpu(pending_irq_count[thrprio], cpu) == 0) | ||
| 365 | per_cpu(pending_irqthread_mask, cpu) &= ~thrmask; | ||
| 366 | desc->status &= ~IRQ_SCHEDULED; | ||
| 367 | desc->thr_handler(irq, &__raw_get_cpu_var(__ipipe_tick_regs)); | ||
| 368 | local_irq_enable(); | ||
| 369 | } | ||
| 370 | __set_current_state(TASK_RUNNING); | ||
| 371 | return 0; | ||
| 372 | } | ||
| 373 | 314 | ||
| 374 | static void kick_irqd(unsigned irq, void *cookie) | 315 | BUG_ON(irqs_disabled()); |
| 375 | { | ||
| 376 | struct irq_desc *desc = irq_desc + irq; | ||
| 377 | int thrprio = desc->thr_prio; | ||
| 378 | int thrmask = 1 << thrprio; | ||
| 379 | int cpu = smp_processor_id(); | ||
| 380 | |||
| 381 | if (!(desc->status & IRQ_SCHEDULED)) { | ||
| 382 | desc->status |= IRQ_SCHEDULED; | ||
| 383 | per_cpu(pending_irqthread_mask, cpu) |= thrmask; | ||
| 384 | ++per_cpu(pending_irq_count[thrprio], cpu); | ||
| 385 | wake_up_process(desc->thread); | ||
| 386 | } | ||
| 387 | } | ||
| 388 | 316 | ||
| 389 | int ipipe_start_irq_thread(unsigned irq, struct irq_desc *desc) | 317 | local_irq_save_hw(flags); |
| 390 | { | ||
| 391 | if (desc->thread || !create_irq_threads) | ||
| 392 | return 0; | ||
| 393 | |||
| 394 | desc->thread = kthread_create(do_irqd, desc, "IRQ %d", irq); | ||
| 395 | if (desc->thread == NULL) { | ||
| 396 | printk(KERN_ERR "irqd: could not create IRQ thread %d!\n", irq); | ||
| 397 | return -ENOMEM; | ||
| 398 | } | ||
| 399 | 318 | ||
| 400 | wake_up_process(desc->thread); | 319 | clear_thread_flag(TIF_IRQ_SYNC); |
| 401 | 320 | ||
| 402 | desc->thr_handler = ipipe_root_domain->irqs[irq].handler; | 321 | if (ipipe_root_cpudom_var(irqpend_himask) != 0) |
| 403 | ipipe_root_domain->irqs[irq].handler = &kick_irqd; | 322 | __ipipe_sync_pipeline(IPIPE_IRQMASK_ANY); |
| 404 | 323 | ||
| 405 | return 0; | 324 | local_irq_restore_hw(flags); |
| 406 | } | 325 | } |
| 407 | 326 | ||
| 408 | void __init ipipe_init_irq_threads(void) | 327 | void ___ipipe_sync_pipeline(unsigned long syncmask) |
| 409 | { | 328 | { |
| 410 | unsigned irq; | 329 | struct ipipe_domain *ipd = ipipe_current_domain; |
| 411 | struct irq_desc *desc; | ||
| 412 | |||
| 413 | create_irq_threads = 1; | ||
| 414 | 330 | ||
| 415 | for (irq = 0; irq < NR_IRQS; irq++) { | 331 | if (ipd == ipipe_root_domain) { |
| 416 | desc = irq_desc + irq; | 332 | if (test_bit(IPIPE_SYNCDEFER_FLAG, &ipipe_root_cpudom_var(status))) |
| 417 | if (desc->action != NULL || | 333 | return; |
| 418 | (desc->status & IRQ_NOREQUEST) != 0) | ||
| 419 | ipipe_start_irq_thread(irq, desc); | ||
| 420 | } | 334 | } |
| 335 | |||
| 336 | __ipipe_sync_stage(syncmask); | ||
| 421 | } | 337 | } |
| 422 | 338 | ||
| 423 | EXPORT_SYMBOL(show_stack); | 339 | EXPORT_SYMBOL(show_stack); |
diff --git a/arch/blackfin/kernel/irqchip.c b/arch/blackfin/kernel/irqchip.c index 75724eee6494..7fd126564846 100644 --- a/arch/blackfin/kernel/irqchip.c +++ b/arch/blackfin/kernel/irqchip.c | |||
| @@ -144,11 +144,15 @@ asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) | |||
| 144 | #endif | 144 | #endif |
| 145 | generic_handle_irq(irq); | 145 | generic_handle_irq(irq); |
| 146 | 146 | ||
| 147 | #ifndef CONFIG_IPIPE /* Useless and bugous over the I-pipe: IRQs are threaded. */ | 147 | #ifndef CONFIG_IPIPE |
| 148 | /* If we're the only interrupt running (ignoring IRQ15 which is for | 148 | /* |
| 149 | syscalls), lower our priority to IRQ14 so that softirqs run at | 149 | * If we're the only interrupt running (ignoring IRQ15 which |
| 150 | that level. If there's another, lower-level interrupt, irq_exit | 150 | * is for syscalls), lower our priority to IRQ14 so that |
| 151 | will defer softirqs to that. */ | 151 | * softirqs run at that level. If there's another, |
| 152 | * lower-level interrupt, irq_exit will defer softirqs to | ||
| 153 | * that. If the interrupt pipeline is enabled, we are already | ||
| 154 | * running at IRQ14 priority, so we don't need this code. | ||
| 155 | */ | ||
| 152 | CSYNC(); | 156 | CSYNC(); |
| 153 | pending = bfin_read_IPEND() & ~0x8000; | 157 | pending = bfin_read_IPEND() & ~0x8000; |
| 154 | other_ints = pending & (pending - 1); | 158 | other_ints = pending & (pending - 1); |
diff --git a/arch/blackfin/kernel/kgdb_test.c b/arch/blackfin/kernel/kgdb_test.c index 3dba9c17304a..dbcf3e45cb0b 100644 --- a/arch/blackfin/kernel/kgdb_test.c +++ b/arch/blackfin/kernel/kgdb_test.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | static char cmdline[256]; | 20 | static char cmdline[256]; |
| 21 | static unsigned long len; | 21 | static unsigned long len; |
| 22 | 22 | ||
| 23 | #ifndef CONFIG_SMP | ||
| 23 | static int num1 __attribute__((l1_data)); | 24 | static int num1 __attribute__((l1_data)); |
| 24 | 25 | ||
| 25 | void kgdb_l1_test(void) __attribute__((l1_text)); | 26 | void kgdb_l1_test(void) __attribute__((l1_text)); |
| @@ -32,6 +33,8 @@ void kgdb_l1_test(void) | |||
| 32 | printk(KERN_ALERT "L1(after change) : data variable addr = 0x%p, data value is %d\n", &num1, num1); | 33 | printk(KERN_ALERT "L1(after change) : data variable addr = 0x%p, data value is %d\n", &num1, num1); |
| 33 | return ; | 34 | return ; |
| 34 | } | 35 | } |
| 36 | #endif | ||
| 37 | |||
| 35 | #if L2_LENGTH | 38 | #if L2_LENGTH |
| 36 | 39 | ||
| 37 | static int num2 __attribute__((l2)); | 40 | static int num2 __attribute__((l2)); |
| @@ -59,10 +62,12 @@ int kgdb_test(char *name, int len, int count, int z) | |||
| 59 | static int test_proc_output(char *buf) | 62 | static int test_proc_output(char *buf) |
| 60 | { | 63 | { |
| 61 | kgdb_test("hello world!", 12, 0x55, 0x10); | 64 | kgdb_test("hello world!", 12, 0x55, 0x10); |
| 65 | #ifndef CONFIG_SMP | ||
| 62 | kgdb_l1_test(); | 66 | kgdb_l1_test(); |
| 63 | #if L2_LENGTH | 67 | #endif |
| 68 | #if L2_LENGTH | ||
| 64 | kgdb_l2_test(); | 69 | kgdb_l2_test(); |
| 65 | #endif | 70 | #endif |
| 66 | 71 | ||
| 67 | return 0; | 72 | return 0; |
| 68 | } | 73 | } |
diff --git a/arch/blackfin/kernel/ptrace.c b/arch/blackfin/kernel/ptrace.c index 594e325b40e4..d76618db50df 100644 --- a/arch/blackfin/kernel/ptrace.c +++ b/arch/blackfin/kernel/ptrace.c | |||
| @@ -45,6 +45,7 @@ | |||
| 45 | #include <asm/asm-offsets.h> | 45 | #include <asm/asm-offsets.h> |
| 46 | #include <asm/dma.h> | 46 | #include <asm/dma.h> |
| 47 | #include <asm/fixed_code.h> | 47 | #include <asm/fixed_code.h> |
| 48 | #include <asm/cacheflush.h> | ||
| 48 | #include <asm/mem_map.h> | 49 | #include <asm/mem_map.h> |
| 49 | 50 | ||
| 50 | #define TEXT_OFFSET 0 | 51 | #define TEXT_OFFSET 0 |
| @@ -240,7 +241,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
| 240 | 241 | ||
| 241 | } else if (addr >= FIXED_CODE_START | 242 | } else if (addr >= FIXED_CODE_START |
| 242 | && addr + sizeof(tmp) <= FIXED_CODE_END) { | 243 | && addr + sizeof(tmp) <= FIXED_CODE_END) { |
| 243 | memcpy(&tmp, (const void *)(addr), sizeof(tmp)); | 244 | copy_from_user_page(0, 0, 0, &tmp, (const void *)(addr), sizeof(tmp)); |
| 244 | copied = sizeof(tmp); | 245 | copied = sizeof(tmp); |
| 245 | 246 | ||
| 246 | } else | 247 | } else |
| @@ -320,7 +321,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
| 320 | 321 | ||
| 321 | } else if (addr >= FIXED_CODE_START | 322 | } else if (addr >= FIXED_CODE_START |
| 322 | && addr + sizeof(data) <= FIXED_CODE_END) { | 323 | && addr + sizeof(data) <= FIXED_CODE_END) { |
| 323 | memcpy((void *)(addr), &data, sizeof(data)); | 324 | copy_to_user_page(0, 0, 0, (void *)(addr), &data, sizeof(data)); |
| 324 | copied = sizeof(data); | 325 | copied = sizeof(data); |
| 325 | 326 | ||
| 326 | } else | 327 | } else |
diff --git a/arch/blackfin/kernel/setup.c b/arch/blackfin/kernel/setup.c index e5c116230800..a58687bdee6a 100644 --- a/arch/blackfin/kernel/setup.c +++ b/arch/blackfin/kernel/setup.c | |||
| @@ -889,6 +889,10 @@ void __init setup_arch(char **cmdline_p) | |||
| 889 | CPU, bfin_revid()); | 889 | CPU, bfin_revid()); |
| 890 | } | 890 | } |
| 891 | 891 | ||
| 892 | /* We can't run on BF548-0.1 due to ANOMALY 05000448 */ | ||
| 893 | if (bfin_cpuid() == 0x27de && bfin_revid() == 1) | ||
| 894 | panic("You can't run on this processor due to 05000448\n"); | ||
| 895 | |||
| 892 | printk(KERN_INFO "Blackfin Linux support by http://blackfin.uclinux.org/\n"); | 896 | printk(KERN_INFO "Blackfin Linux support by http://blackfin.uclinux.org/\n"); |
| 893 | 897 | ||
| 894 | printk(KERN_INFO "Processor Speed: %lu MHz core clock and %lu MHz System Clock\n", | 898 | printk(KERN_INFO "Processor Speed: %lu MHz core clock and %lu MHz System Clock\n", |
| @@ -1141,12 +1145,12 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
| 1141 | icache_size = 0; | 1145 | icache_size = 0; |
| 1142 | 1146 | ||
| 1143 | seq_printf(m, "cache size\t: %d KB(L1 icache) " | 1147 | seq_printf(m, "cache size\t: %d KB(L1 icache) " |
| 1144 | "%d KB(L1 dcache-%s) %d KB(L2 cache)\n", | 1148 | "%d KB(L1 dcache%s) %d KB(L2 cache)\n", |
| 1145 | icache_size, dcache_size, | 1149 | icache_size, dcache_size, |
| 1146 | #if defined CONFIG_BFIN_WB | 1150 | #if defined CONFIG_BFIN_WB |
| 1147 | "wb" | 1151 | "-wb" |
| 1148 | #elif defined CONFIG_BFIN_WT | 1152 | #elif defined CONFIG_BFIN_WT |
| 1149 | "wt" | 1153 | "-wt" |
| 1150 | #endif | 1154 | #endif |
| 1151 | "", 0); | 1155 | "", 0); |
| 1152 | 1156 | ||
diff --git a/arch/blackfin/kernel/time.c b/arch/blackfin/kernel/time.c index 172b4c588467..1bbacfbd4c5d 100644 --- a/arch/blackfin/kernel/time.c +++ b/arch/blackfin/kernel/time.c | |||
| @@ -134,7 +134,10 @@ irqreturn_t timer_interrupt(int irq, void *dummy) | |||
| 134 | 134 | ||
| 135 | write_seqlock(&xtime_lock); | 135 | write_seqlock(&xtime_lock); |
| 136 | #if defined(CONFIG_TICK_SOURCE_SYSTMR0) && !defined(CONFIG_IPIPE) | 136 | #if defined(CONFIG_TICK_SOURCE_SYSTMR0) && !defined(CONFIG_IPIPE) |
| 137 | /* FIXME: Here TIMIL0 is not set when IPIPE enabled, why? */ | 137 | /* |
| 138 | * TIMIL0 is latched in __ipipe_grab_irq() when the I-Pipe is | ||
| 139 | * enabled. | ||
| 140 | */ | ||
| 138 | if (get_gptimer_status(0) & TIMER_STATUS_TIMIL0) { | 141 | if (get_gptimer_status(0) & TIMER_STATUS_TIMIL0) { |
| 139 | #endif | 142 | #endif |
| 140 | do_timer(1); | 143 | do_timer(1); |
diff --git a/arch/blackfin/mach-bf518/boards/ezbrd.c b/arch/blackfin/mach-bf518/boards/ezbrd.c index 0e175342112e..41f2eacfef20 100644 --- a/arch/blackfin/mach-bf518/boards/ezbrd.c +++ b/arch/blackfin/mach-bf518/boards/ezbrd.c | |||
| @@ -113,7 +113,6 @@ static struct platform_device bfin_mac_device = { | |||
| 113 | .name = "bfin_mac", | 113 | .name = "bfin_mac", |
| 114 | .dev.platform_data = &bfin_mii_bus, | 114 | .dev.platform_data = &bfin_mii_bus, |
| 115 | }; | 115 | }; |
| 116 | #endif | ||
| 117 | 116 | ||
| 118 | #if defined(CONFIG_NET_DSA_KSZ8893M) || defined(CONFIG_NET_DSA_KSZ8893M_MODULE) | 117 | #if defined(CONFIG_NET_DSA_KSZ8893M) || defined(CONFIG_NET_DSA_KSZ8893M_MODULE) |
| 119 | static struct dsa_platform_data ksz8893m_switch_data = { | 118 | static struct dsa_platform_data ksz8893m_switch_data = { |
| @@ -132,6 +131,7 @@ static struct platform_device ksz8893m_switch_device = { | |||
| 132 | .dev.platform_data = &ksz8893m_switch_data, | 131 | .dev.platform_data = &ksz8893m_switch_data, |
| 133 | }; | 132 | }; |
| 134 | #endif | 133 | #endif |
| 134 | #endif | ||
| 135 | 135 | ||
| 136 | #if defined(CONFIG_MTD_M25P80) \ | 136 | #if defined(CONFIG_MTD_M25P80) \ |
| 137 | || defined(CONFIG_MTD_M25P80_MODULE) | 137 | || defined(CONFIG_MTD_M25P80_MODULE) |
| @@ -171,6 +171,7 @@ static struct bfin5xx_spi_chip spi_adc_chip_info = { | |||
| 171 | }; | 171 | }; |
| 172 | #endif | 172 | #endif |
| 173 | 173 | ||
| 174 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) | ||
| 174 | #if defined(CONFIG_NET_DSA_KSZ8893M) \ | 175 | #if defined(CONFIG_NET_DSA_KSZ8893M) \ |
| 175 | || defined(CONFIG_NET_DSA_KSZ8893M_MODULE) | 176 | || defined(CONFIG_NET_DSA_KSZ8893M_MODULE) |
| 176 | /* SPI SWITCH CHIP */ | 177 | /* SPI SWITCH CHIP */ |
| @@ -179,10 +180,11 @@ static struct bfin5xx_spi_chip spi_switch_info = { | |||
| 179 | .bits_per_word = 8, | 180 | .bits_per_word = 8, |
| 180 | }; | 181 | }; |
| 181 | #endif | 182 | #endif |
| 183 | #endif | ||
| 182 | 184 | ||
| 183 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 185 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 184 | static struct bfin5xx_spi_chip spi_mmc_chip_info = { | 186 | static struct bfin5xx_spi_chip mmc_spi_chip_info = { |
| 185 | .enable_dma = 1, | 187 | .enable_dma = 0, |
| 186 | .bits_per_word = 8, | 188 | .bits_per_word = 8, |
| 187 | }; | 189 | }; |
| 188 | #endif | 190 | #endif |
| @@ -259,6 +261,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
| 259 | }, | 261 | }, |
| 260 | #endif | 262 | #endif |
| 261 | 263 | ||
| 264 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) | ||
| 262 | #if defined(CONFIG_NET_DSA_KSZ8893M) \ | 265 | #if defined(CONFIG_NET_DSA_KSZ8893M) \ |
| 263 | || defined(CONFIG_NET_DSA_KSZ8893M_MODULE) | 266 | || defined(CONFIG_NET_DSA_KSZ8893M_MODULE) |
| 264 | { | 267 | { |
| @@ -271,24 +274,15 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
| 271 | .mode = SPI_MODE_3, | 274 | .mode = SPI_MODE_3, |
| 272 | }, | 275 | }, |
| 273 | #endif | 276 | #endif |
| 277 | #endif | ||
| 274 | 278 | ||
| 275 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 279 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 276 | { | 280 | { |
| 277 | .modalias = "spi_mmc_dummy", | 281 | .modalias = "mmc_spi", |
| 278 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | 282 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ |
| 279 | .bus_num = 0, | 283 | .bus_num = 0, |
| 280 | .chip_select = 0, | 284 | .chip_select = 5, |
| 281 | .platform_data = NULL, | 285 | .controller_data = &mmc_spi_chip_info, |
| 282 | .controller_data = &spi_mmc_chip_info, | ||
| 283 | .mode = SPI_MODE_3, | ||
| 284 | }, | ||
| 285 | { | ||
| 286 | .modalias = "spi_mmc", | ||
| 287 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | ||
| 288 | .bus_num = 0, | ||
| 289 | .chip_select = CONFIG_SPI_MMC_CS_CHAN, | ||
| 290 | .platform_data = NULL, | ||
| 291 | .controller_data = &spi_mmc_chip_info, | ||
| 292 | .mode = SPI_MODE_3, | 286 | .mode = SPI_MODE_3, |
| 293 | }, | 287 | }, |
| 294 | #endif | 288 | #endif |
| @@ -630,11 +624,10 @@ static struct platform_device *stamp_devices[] __initdata = { | |||
| 630 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) | 624 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) |
| 631 | &bfin_mii_bus, | 625 | &bfin_mii_bus, |
| 632 | &bfin_mac_device, | 626 | &bfin_mac_device, |
| 633 | #endif | ||
| 634 | |||
| 635 | #if defined(CONFIG_NET_DSA_KSZ8893M) || defined(CONFIG_NET_DSA_KSZ8893M_MODULE) | 627 | #if defined(CONFIG_NET_DSA_KSZ8893M) || defined(CONFIG_NET_DSA_KSZ8893M_MODULE) |
| 636 | &ksz8893m_switch_device, | 628 | &ksz8893m_switch_device, |
| 637 | #endif | 629 | #endif |
| 630 | #endif | ||
| 638 | 631 | ||
| 639 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | 632 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) |
| 640 | &bfin_spi0_device, | 633 | &bfin_spi0_device, |
diff --git a/arch/blackfin/mach-bf518/include/mach/anomaly.h b/arch/blackfin/mach-bf518/include/mach/anomaly.h index e5b4bef0edae..c847bb101076 100644 --- a/arch/blackfin/mach-bf518/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf518/include/mach/anomaly.h | |||
| @@ -2,12 +2,12 @@ | |||
| 2 | * File: include/asm-blackfin/mach-bf518/anomaly.h | 2 | * File: include/asm-blackfin/mach-bf518/anomaly.h |
| 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 2004-2008 Analog Devices Inc. | 5 | * Copyright (C) 2004-2009 Analog Devices Inc. |
| 6 | * Licensed under the GPL-2 or later. | 6 | * Licensed under the GPL-2 or later. |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | /* This file shoule be up to date with: | 9 | /* This file shoule be up to date with: |
| 10 | * - ???? | 10 | * - Revision B, 02/03/2009; ADSP-BF512/BF514/BF516/BF518 Blackfin Processor Anomaly List |
| 11 | */ | 11 | */ |
| 12 | 12 | ||
| 13 | #ifndef _MACH_ANOMALY_H_ | 13 | #ifndef _MACH_ANOMALY_H_ |
| @@ -19,6 +19,8 @@ | |||
| 19 | #define ANOMALY_05000122 (1) | 19 | #define ANOMALY_05000122 (1) |
| 20 | /* False Hardware Error from an Access in the Shadow of a Conditional Branch */ | 20 | /* False Hardware Error from an Access in the Shadow of a Conditional Branch */ |
| 21 | #define ANOMALY_05000245 (1) | 21 | #define ANOMALY_05000245 (1) |
| 22 | /* Incorrect Timer Pulse Width in Single-Shot PWM_OUT Mode with External Clock */ | ||
| 23 | #define ANOMALY_05000254 (1) | ||
| 22 | /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */ | 24 | /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */ |
| 23 | #define ANOMALY_05000265 (1) | 25 | #define ANOMALY_05000265 (1) |
| 24 | /* False Hardware Errors Caused by Fetches at the Boundary of Reserved Memory */ | 26 | /* False Hardware Errors Caused by Fetches at the Boundary of Reserved Memory */ |
| @@ -53,6 +55,12 @@ | |||
| 53 | #define ANOMALY_05000443 (1) | 55 | #define ANOMALY_05000443 (1) |
| 54 | /* Incorrect L1 Instruction Bank B Memory Map Location */ | 56 | /* Incorrect L1 Instruction Bank B Memory Map Location */ |
| 55 | #define ANOMALY_05000444 (1) | 57 | #define ANOMALY_05000444 (1) |
| 58 | /* Incorrect Default Hysteresis Setting for RESET, NMI, and BMODE Signals */ | ||
| 59 | #define ANOMALY_05000452 (1) | ||
| 60 | /* PWM_TRIPB Signal Not Available on PG10 */ | ||
| 61 | #define ANOMALY_05000453 (1) | ||
| 62 | /* PPI_FS3 is Driven One Half Cycle Later Than PPI Data */ | ||
| 63 | #define ANOMALY_05000455 (1) | ||
| 56 | 64 | ||
| 57 | /* Anomalies that don't exist on this proc */ | 65 | /* Anomalies that don't exist on this proc */ |
| 58 | #define ANOMALY_05000125 (0) | 66 | #define ANOMALY_05000125 (0) |
| @@ -65,15 +73,20 @@ | |||
| 65 | #define ANOMALY_05000263 (0) | 73 | #define ANOMALY_05000263 (0) |
| 66 | #define ANOMALY_05000266 (0) | 74 | #define ANOMALY_05000266 (0) |
| 67 | #define ANOMALY_05000273 (0) | 75 | #define ANOMALY_05000273 (0) |
| 76 | #define ANOMALY_05000278 (0) | ||
| 68 | #define ANOMALY_05000285 (0) | 77 | #define ANOMALY_05000285 (0) |
| 78 | #define ANOMALY_05000305 (0) | ||
| 69 | #define ANOMALY_05000307 (0) | 79 | #define ANOMALY_05000307 (0) |
| 70 | #define ANOMALY_05000311 (0) | 80 | #define ANOMALY_05000311 (0) |
| 71 | #define ANOMALY_05000312 (0) | 81 | #define ANOMALY_05000312 (0) |
| 72 | #define ANOMALY_05000323 (0) | 82 | #define ANOMALY_05000323 (0) |
| 73 | #define ANOMALY_05000353 (0) | 83 | #define ANOMALY_05000353 (0) |
| 74 | #define ANOMALY_05000363 (0) | 84 | #define ANOMALY_05000363 (0) |
| 85 | #define ANOMALY_05000380 (0) | ||
| 75 | #define ANOMALY_05000386 (0) | 86 | #define ANOMALY_05000386 (0) |
| 76 | #define ANOMALY_05000412 (0) | 87 | #define ANOMALY_05000412 (0) |
| 77 | #define ANOMALY_05000432 (0) | 88 | #define ANOMALY_05000432 (0) |
| 89 | #define ANOMALY_05000447 (0) | ||
| 90 | #define ANOMALY_05000448 (0) | ||
| 78 | 91 | ||
| 79 | #endif | 92 | #endif |
diff --git a/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h index b50a63b975a2..e21c1c3e4ec7 100644 --- a/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h +++ b/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h | |||
| @@ -144,7 +144,7 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
| 144 | CH_UART0_TX, | 144 | CH_UART0_TX, |
| 145 | CH_UART0_RX, | 145 | CH_UART0_RX, |
| 146 | #endif | 146 | #endif |
| 147 | #ifdef CONFIG_BFIN_UART0_CTSRTS | 147 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS |
| 148 | CONFIG_UART0_CTS_PIN, | 148 | CONFIG_UART0_CTS_PIN, |
| 149 | CONFIG_UART0_RTS_PIN, | 149 | CONFIG_UART0_RTS_PIN, |
| 150 | #endif | 150 | #endif |
| @@ -158,7 +158,7 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
| 158 | CH_UART1_TX, | 158 | CH_UART1_TX, |
| 159 | CH_UART1_RX, | 159 | CH_UART1_RX, |
| 160 | #endif | 160 | #endif |
| 161 | #ifdef CONFIG_BFIN_UART1_CTSRTS | 161 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS |
| 162 | CONFIG_UART1_CTS_PIN, | 162 | CONFIG_UART1_CTS_PIN, |
| 163 | CONFIG_UART1_RTS_PIN, | 163 | CONFIG_UART1_RTS_PIN, |
| 164 | #endif | 164 | #endif |
diff --git a/arch/blackfin/mach-bf527/boards/cm_bf527.c b/arch/blackfin/mach-bf527/boards/cm_bf527.c index 856c097b5317..48e69eecdba4 100644 --- a/arch/blackfin/mach-bf527/boards/cm_bf527.c +++ b/arch/blackfin/mach-bf527/boards/cm_bf527.c | |||
| @@ -487,9 +487,9 @@ static struct bfin5xx_spi_chip ad9960_spi_chip_info = { | |||
| 487 | }; | 487 | }; |
| 488 | #endif | 488 | #endif |
| 489 | 489 | ||
| 490 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 490 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 491 | static struct bfin5xx_spi_chip spi_mmc_chip_info = { | 491 | static struct bfin5xx_spi_chip mmc_spi_chip_info = { |
| 492 | .enable_dma = 1, | 492 | .enable_dma = 0, |
| 493 | .bits_per_word = 8, | 493 | .bits_per_word = 8, |
| 494 | }; | 494 | }; |
| 495 | #endif | 495 | #endif |
| @@ -585,23 +585,13 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
| 585 | .controller_data = &ad9960_spi_chip_info, | 585 | .controller_data = &ad9960_spi_chip_info, |
| 586 | }, | 586 | }, |
| 587 | #endif | 587 | #endif |
| 588 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 588 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 589 | { | 589 | { |
| 590 | .modalias = "spi_mmc_dummy", | 590 | .modalias = "mmc_spi", |
| 591 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | 591 | .max_speed_hz = 20000000, /* max spi clock (SCK) speed in HZ */ |
| 592 | .bus_num = 0, | ||
| 593 | .chip_select = 0, | ||
| 594 | .platform_data = NULL, | ||
| 595 | .controller_data = &spi_mmc_chip_info, | ||
| 596 | .mode = SPI_MODE_3, | ||
| 597 | }, | ||
| 598 | { | ||
| 599 | .modalias = "spi_mmc", | ||
| 600 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | ||
| 601 | .bus_num = 0, | 592 | .bus_num = 0, |
| 602 | .chip_select = CONFIG_SPI_MMC_CS_CHAN, | 593 | .chip_select = 5, |
| 603 | .platform_data = NULL, | 594 | .controller_data = &mmc_spi_chip_info, |
| 604 | .controller_data = &spi_mmc_chip_info, | ||
| 605 | .mode = SPI_MODE_3, | 595 | .mode = SPI_MODE_3, |
| 606 | }, | 596 | }, |
| 607 | #endif | 597 | #endif |
diff --git a/arch/blackfin/mach-bf527/boards/ezbrd.c b/arch/blackfin/mach-bf527/boards/ezbrd.c index 83606fcdde27..7fe480e4ebe8 100644 --- a/arch/blackfin/mach-bf527/boards/ezbrd.c +++ b/arch/blackfin/mach-bf527/boards/ezbrd.c | |||
| @@ -256,9 +256,9 @@ static struct bfin5xx_spi_chip spi_adc_chip_info = { | |||
| 256 | }; | 256 | }; |
| 257 | #endif | 257 | #endif |
| 258 | 258 | ||
| 259 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 259 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 260 | static struct bfin5xx_spi_chip spi_mmc_chip_info = { | 260 | static struct bfin5xx_spi_chip mmc_spi_chip_info = { |
| 261 | .enable_dma = 1, | 261 | .enable_dma = 0, |
| 262 | .bits_per_word = 8, | 262 | .bits_per_word = 8, |
| 263 | }; | 263 | }; |
| 264 | #endif | 264 | #endif |
| @@ -366,23 +366,13 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
| 366 | }, | 366 | }, |
| 367 | #endif | 367 | #endif |
| 368 | 368 | ||
| 369 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 369 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 370 | { | 370 | { |
| 371 | .modalias = "spi_mmc_dummy", | 371 | .modalias = "mmc_spi", |
| 372 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | 372 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ |
| 373 | .bus_num = 0, | 373 | .bus_num = 0, |
| 374 | .chip_select = 0, | 374 | .chip_select = 5, |
| 375 | .platform_data = NULL, | 375 | .controller_data = &mmc_spi_chip_info, |
| 376 | .controller_data = &spi_mmc_chip_info, | ||
| 377 | .mode = SPI_MODE_3, | ||
| 378 | }, | ||
| 379 | { | ||
| 380 | .modalias = "spi_mmc", | ||
| 381 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | ||
| 382 | .bus_num = 0, | ||
| 383 | .chip_select = CONFIG_SPI_MMC_CS_CHAN, | ||
| 384 | .platform_data = NULL, | ||
| 385 | .controller_data = &spi_mmc_chip_info, | ||
| 386 | .mode = SPI_MODE_3, | 376 | .mode = SPI_MODE_3, |
| 387 | }, | 377 | }, |
| 388 | #endif | 378 | #endif |
diff --git a/arch/blackfin/mach-bf527/include/mach/anomaly.h b/arch/blackfin/mach-bf527/include/mach/anomaly.h index 035e8d835058..df6808d8a6ef 100644 --- a/arch/blackfin/mach-bf527/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf527/include/mach/anomaly.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * File: include/asm-blackfin/mach-bf527/anomaly.h | 2 | * File: include/asm-blackfin/mach-bf527/anomaly.h |
| 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 2004-2008 Analog Devices Inc. | 5 | * Copyright (C) 2004-2009 Analog Devices Inc. |
| 6 | * Licensed under the GPL-2 or later. | 6 | * Licensed under the GPL-2 or later. |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| @@ -167,12 +167,16 @@ | |||
| 167 | #define ANOMALY_05000263 (0) | 167 | #define ANOMALY_05000263 (0) |
| 168 | #define ANOMALY_05000266 (0) | 168 | #define ANOMALY_05000266 (0) |
| 169 | #define ANOMALY_05000273 (0) | 169 | #define ANOMALY_05000273 (0) |
| 170 | #define ANOMALY_05000278 (0) | ||
| 170 | #define ANOMALY_05000285 (0) | 171 | #define ANOMALY_05000285 (0) |
| 172 | #define ANOMALY_05000305 (0) | ||
| 171 | #define ANOMALY_05000307 (0) | 173 | #define ANOMALY_05000307 (0) |
| 172 | #define ANOMALY_05000311 (0) | 174 | #define ANOMALY_05000311 (0) |
| 173 | #define ANOMALY_05000312 (0) | 175 | #define ANOMALY_05000312 (0) |
| 174 | #define ANOMALY_05000323 (0) | 176 | #define ANOMALY_05000323 (0) |
| 175 | #define ANOMALY_05000363 (0) | 177 | #define ANOMALY_05000363 (0) |
| 176 | #define ANOMALY_05000412 (0) | 178 | #define ANOMALY_05000412 (0) |
| 179 | #define ANOMALY_05000447 (0) | ||
| 180 | #define ANOMALY_05000448 (0) | ||
| 177 | 181 | ||
| 178 | #endif | 182 | #endif |
diff --git a/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h index 75722d6008b0..e8c41fd842b5 100644 --- a/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h +++ b/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h | |||
| @@ -144,7 +144,7 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
| 144 | CH_UART0_TX, | 144 | CH_UART0_TX, |
| 145 | CH_UART0_RX, | 145 | CH_UART0_RX, |
| 146 | #endif | 146 | #endif |
| 147 | #ifdef CONFIG_BFIN_UART0_CTSRTS | 147 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS |
| 148 | CONFIG_UART0_CTS_PIN, | 148 | CONFIG_UART0_CTS_PIN, |
| 149 | CONFIG_UART0_RTS_PIN, | 149 | CONFIG_UART0_RTS_PIN, |
| 150 | #endif | 150 | #endif |
| @@ -158,7 +158,7 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
| 158 | CH_UART1_TX, | 158 | CH_UART1_TX, |
| 159 | CH_UART1_RX, | 159 | CH_UART1_RX, |
| 160 | #endif | 160 | #endif |
| 161 | #ifdef CONFIG_BFIN_UART1_CTSRTS | 161 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS |
| 162 | CONFIG_UART1_CTS_PIN, | 162 | CONFIG_UART1_CTS_PIN, |
| 163 | CONFIG_UART1_RTS_PIN, | 163 | CONFIG_UART1_RTS_PIN, |
| 164 | #endif | 164 | #endif |
diff --git a/arch/blackfin/mach-bf533/boards/Kconfig b/arch/blackfin/mach-bf533/boards/Kconfig index 308c98dc5aba..8d8b3e7321e6 100644 --- a/arch/blackfin/mach-bf533/boards/Kconfig +++ b/arch/blackfin/mach-bf533/boards/Kconfig | |||
| @@ -38,9 +38,4 @@ config BFIN532_IP0X | |||
| 38 | help | 38 | help |
| 39 | Core support for IP04/IP04 open hardware IP-PBX. | 39 | Core support for IP04/IP04 open hardware IP-PBX. |
| 40 | 40 | ||
| 41 | config GENERIC_BF533_BOARD | ||
| 42 | bool "Generic" | ||
| 43 | help | ||
| 44 | Generic or Custom board support. | ||
| 45 | |||
| 46 | endchoice | 41 | endchoice |
diff --git a/arch/blackfin/mach-bf533/boards/Makefile b/arch/blackfin/mach-bf533/boards/Makefile index 9afbe72b484f..ff1e832f80d2 100644 --- a/arch/blackfin/mach-bf533/boards/Makefile +++ b/arch/blackfin/mach-bf533/boards/Makefile | |||
| @@ -2,7 +2,6 @@ | |||
| 2 | # arch/blackfin/mach-bf533/boards/Makefile | 2 | # arch/blackfin/mach-bf533/boards/Makefile |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-$(CONFIG_GENERIC_BF533_BOARD) += generic_board.o | ||
| 6 | obj-$(CONFIG_BFIN533_STAMP) += stamp.o | 5 | obj-$(CONFIG_BFIN533_STAMP) += stamp.o |
| 7 | obj-$(CONFIG_BFIN532_IP0X) += ip0x.o | 6 | obj-$(CONFIG_BFIN532_IP0X) += ip0x.o |
| 8 | obj-$(CONFIG_BFIN533_EZKIT) += ezkit.o | 7 | obj-$(CONFIG_BFIN533_EZKIT) += ezkit.o |
diff --git a/arch/blackfin/mach-bf533/boards/blackstamp.c b/arch/blackfin/mach-bf533/boards/blackstamp.c index 015c18f85e7f..0765872a8ada 100644 --- a/arch/blackfin/mach-bf533/boards/blackstamp.c +++ b/arch/blackfin/mach-bf533/boards/blackstamp.c | |||
| @@ -101,9 +101,9 @@ static struct bfin5xx_spi_chip spi_flash_chip_info = { | |||
| 101 | }; | 101 | }; |
| 102 | #endif | 102 | #endif |
| 103 | 103 | ||
| 104 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 104 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 105 | static struct bfin5xx_spi_chip spi_mmc_chip_info = { | 105 | static struct bfin5xx_spi_chip mmc_spi_chip_info = { |
| 106 | .enable_dma = 1, | 106 | .enable_dma = 0, |
| 107 | .bits_per_word = 8, | 107 | .bits_per_word = 8, |
| 108 | }; | 108 | }; |
| 109 | #endif | 109 | #endif |
| @@ -129,23 +129,13 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
| 129 | }, | 129 | }, |
| 130 | #endif | 130 | #endif |
| 131 | 131 | ||
| 132 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 132 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 133 | { | ||
| 134 | .modalias = "spi_mmc_dummy", | ||
| 135 | .max_speed_hz = 20000000, /* max spi clock (SCK) speed in HZ */ | ||
| 136 | .bus_num = 0, | ||
| 137 | .chip_select = 0, | ||
| 138 | .platform_data = NULL, | ||
| 139 | .controller_data = &spi_mmc_chip_info, | ||
| 140 | .mode = SPI_MODE_3, | ||
| 141 | }, | ||
| 142 | { | 133 | { |
| 143 | .modalias = "spi_mmc", | 134 | .modalias = "mmc_spi", |
| 144 | .max_speed_hz = 20000000, /* max spi clock (SCK) speed in HZ */ | 135 | .max_speed_hz = 20000000, /* max spi clock (SCK) speed in HZ */ |
| 145 | .bus_num = 0, | 136 | .bus_num = 0, |
| 146 | .chip_select = CONFIG_SPI_MMC_CS_CHAN, | 137 | .chip_select = 5, |
| 147 | .platform_data = NULL, | 138 | .controller_data = &mmc_spi_chip_info, |
| 148 | .controller_data = &spi_mmc_chip_info, | ||
| 149 | .mode = SPI_MODE_3, | 139 | .mode = SPI_MODE_3, |
| 150 | }, | 140 | }, |
| 151 | #endif | 141 | #endif |
diff --git a/arch/blackfin/mach-bf533/boards/cm_bf533.c b/arch/blackfin/mach-bf533/boards/cm_bf533.c index e7061c7e8c42..e8974878d8c2 100644 --- a/arch/blackfin/mach-bf533/boards/cm_bf533.c +++ b/arch/blackfin/mach-bf533/boards/cm_bf533.c | |||
| @@ -96,9 +96,9 @@ static struct bfin5xx_spi_chip ad1836_spi_chip_info = { | |||
| 96 | }; | 96 | }; |
| 97 | #endif | 97 | #endif |
| 98 | 98 | ||
| 99 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 99 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 100 | static struct bfin5xx_spi_chip spi_mmc_chip_info = { | 100 | static struct bfin5xx_spi_chip mmc_spi_chip_info = { |
| 101 | .enable_dma = 1, | 101 | .enable_dma = 0, |
| 102 | .bits_per_word = 8, | 102 | .bits_per_word = 8, |
| 103 | }; | 103 | }; |
| 104 | #endif | 104 | #endif |
| @@ -138,23 +138,13 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
| 138 | }, | 138 | }, |
| 139 | #endif | 139 | #endif |
| 140 | 140 | ||
| 141 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 141 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 142 | { | ||
| 143 | .modalias = "spi_mmc_dummy", | ||
| 144 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | ||
| 145 | .bus_num = 0, | ||
| 146 | .chip_select = 0, | ||
| 147 | .platform_data = NULL, | ||
| 148 | .controller_data = &spi_mmc_chip_info, | ||
| 149 | .mode = SPI_MODE_3, | ||
| 150 | }, | ||
| 151 | { | 142 | { |
| 152 | .modalias = "spi_mmc", | 143 | .modalias = "mmc_spi", |
| 153 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | 144 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ |
| 154 | .bus_num = 0, | 145 | .bus_num = 0, |
| 155 | .chip_select = CONFIG_SPI_MMC_CS_CHAN, | 146 | .chip_select = 5, |
| 156 | .platform_data = NULL, | 147 | .controller_data = &mmc_spi_chip_info, |
| 157 | .controller_data = &spi_mmc_chip_info, | ||
| 158 | .mode = SPI_MODE_3, | 148 | .mode = SPI_MODE_3, |
| 159 | }, | 149 | }, |
| 160 | #endif | 150 | #endif |
diff --git a/arch/blackfin/mach-bf533/boards/generic_board.c b/arch/blackfin/mach-bf533/boards/generic_board.c deleted file mode 100644 index 986eeec53b1f..000000000000 --- a/arch/blackfin/mach-bf533/boards/generic_board.c +++ /dev/null | |||
| @@ -1,126 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * File: arch/blackfin/mach-bf533/generic_board.c | ||
| 3 | * Based on: arch/blackfin/mach-bf533/ezkit.c | ||
| 4 | * Author: Aidan Williams <aidan@nicta.com.au> | ||
| 5 | * | ||
| 6 | * Created: 2005 | ||
| 7 | * Description: | ||
| 8 | * | ||
| 9 | * Modified: | ||
| 10 | * Copyright 2005 National ICT Australia (NICTA) | ||
| 11 | * Copyright 2004-2006 Analog Devices Inc. | ||
| 12 | * | ||
| 13 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | ||
| 14 | * | ||
| 15 | * This program is free software; you can redistribute it and/or modify | ||
| 16 | * it under the terms of the GNU General Public License as published by | ||
| 17 | * the Free Software Foundation; either version 2 of the License, or | ||
| 18 | * (at your option) any later version. | ||
| 19 | * | ||
| 20 | * This program is distributed in the hope that it will be useful, | ||
| 21 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 22 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 23 | * GNU General Public License for more details. | ||
| 24 | * | ||
| 25 | * You should have received a copy of the GNU General Public License | ||
| 26 | * along with this program; if not, see the file COPYING, or write | ||
| 27 | * to the Free Software Foundation, Inc., | ||
| 28 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 29 | */ | ||
| 30 | |||
| 31 | #include <linux/device.h> | ||
| 32 | #include <linux/platform_device.h> | ||
| 33 | #include <linux/irq.h> | ||
| 34 | |||
| 35 | /* | ||
| 36 | * Name the Board for the /proc/cpuinfo | ||
| 37 | */ | ||
| 38 | const char bfin_board_name[] = "UNKNOWN BOARD"; | ||
| 39 | |||
| 40 | #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE) | ||
| 41 | static struct platform_device rtc_device = { | ||
| 42 | .name = "rtc-bfin", | ||
| 43 | .id = -1, | ||
| 44 | }; | ||
| 45 | #endif | ||
| 46 | |||
| 47 | /* | ||
| 48 | * Driver needs to know address, irq and flag pin. | ||
| 49 | */ | ||
| 50 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) | ||
| 51 | static struct resource smc91x_resources[] = { | ||
| 52 | { | ||
| 53 | .start = 0x20300300, | ||
| 54 | .end = 0x20300300 + 16, | ||
| 55 | .flags = IORESOURCE_MEM, | ||
| 56 | }, { | ||
| 57 | .start = IRQ_PROG_INTB, | ||
| 58 | .end = IRQ_PROG_INTB, | ||
| 59 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, | ||
| 60 | }, { | ||
| 61 | .start = IRQ_PF7, | ||
| 62 | .end = IRQ_PF7, | ||
| 63 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, | ||
| 64 | }, | ||
| 65 | }; | ||
| 66 | |||
| 67 | static struct platform_device smc91x_device = { | ||
| 68 | .name = "smc91x", | ||
| 69 | .id = 0, | ||
| 70 | .num_resources = ARRAY_SIZE(smc91x_resources), | ||
| 71 | .resource = smc91x_resources, | ||
| 72 | }; | ||
| 73 | #endif | ||
| 74 | |||
| 75 | #if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE) | ||
| 76 | #ifdef CONFIG_BFIN_SIR0 | ||
| 77 | static struct resource bfin_sir0_resources[] = { | ||
| 78 | { | ||
| 79 | .start = 0xFFC00400, | ||
| 80 | .end = 0xFFC004FF, | ||
| 81 | .flags = IORESOURCE_MEM, | ||
| 82 | }, | ||
| 83 | { | ||
| 84 | .start = IRQ_UART0_RX, | ||
| 85 | .end = IRQ_UART0_RX+1, | ||
| 86 | .flags = IORESOURCE_IRQ, | ||
| 87 | }, | ||
| 88 | { | ||
| 89 | .start = CH_UART0_RX, | ||
| 90 | .end = CH_UART0_RX+1, | ||
| 91 | .flags = IORESOURCE_DMA, | ||
| 92 | }, | ||
| 93 | }; | ||
| 94 | |||
| 95 | static struct platform_device bfin_sir0_device = { | ||
| 96 | .name = "bfin_sir", | ||
| 97 | .id = 0, | ||
| 98 | .num_resources = ARRAY_SIZE(bfin_sir0_resources), | ||
| 99 | .resource = bfin_sir0_resources, | ||
| 100 | }; | ||
| 101 | #endif | ||
| 102 | #endif | ||
| 103 | |||
| 104 | static struct platform_device *generic_board_devices[] __initdata = { | ||
| 105 | #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE) | ||
| 106 | &rtc_device, | ||
| 107 | #endif | ||
| 108 | |||
| 109 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) | ||
| 110 | &smc91x_device, | ||
| 111 | #endif | ||
| 112 | |||
| 113 | #if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE) | ||
| 114 | #ifdef CONFIG_BFIN_SIR0 | ||
| 115 | &bfin_sir0_device, | ||
| 116 | #endif | ||
| 117 | #endif | ||
| 118 | }; | ||
| 119 | |||
| 120 | static int __init generic_board_init(void) | ||
| 121 | { | ||
| 122 | printk(KERN_INFO "%s(): registering device resources\n", __func__); | ||
| 123 | return platform_add_devices(generic_board_devices, ARRAY_SIZE(generic_board_devices)); | ||
| 124 | } | ||
| 125 | |||
| 126 | arch_initcall(generic_board_init); | ||
diff --git a/arch/blackfin/mach-bf533/boards/ip0x.c b/arch/blackfin/mach-bf533/boards/ip0x.c index e30b1b7d1442..f19b63378b12 100644 --- a/arch/blackfin/mach-bf533/boards/ip0x.c +++ b/arch/blackfin/mach-bf533/boards/ip0x.c | |||
| @@ -127,8 +127,8 @@ static struct platform_device dm9000_device2 = { | |||
| 127 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | 127 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) |
| 128 | /* all SPI peripherals info goes here */ | 128 | /* all SPI peripherals info goes here */ |
| 129 | 129 | ||
| 130 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 130 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 131 | static struct bfin5xx_spi_chip spi_mmc_chip_info = { | 131 | static struct bfin5xx_spi_chip mmc_spi_chip_info = { |
| 132 | /* | 132 | /* |
| 133 | * CPOL (Clock Polarity) | 133 | * CPOL (Clock Polarity) |
| 134 | * 0 - Active high SCK | 134 | * 0 - Active high SCK |
| @@ -152,14 +152,13 @@ static struct bfin5xx_spi_chip spi_mmc_chip_info = { | |||
| 152 | /* Notice: for blackfin, the speed_hz is the value of register | 152 | /* Notice: for blackfin, the speed_hz is the value of register |
| 153 | * SPI_BAUD, not the real baudrate */ | 153 | * SPI_BAUD, not the real baudrate */ |
| 154 | static struct spi_board_info bfin_spi_board_info[] __initdata = { | 154 | static struct spi_board_info bfin_spi_board_info[] __initdata = { |
| 155 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 155 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 156 | { | 156 | { |
| 157 | .modalias = "spi_mmc", | 157 | .modalias = "mmc_spi", |
| 158 | .max_speed_hz = 2, | 158 | .max_speed_hz = 2, |
| 159 | .bus_num = 1, | 159 | .bus_num = 1, |
| 160 | .chip_select = CONFIG_SPI_MMC_CS_CHAN, | 160 | .chip_select = 5, |
| 161 | .platform_data = NULL, | 161 | .controller_data = &mmc_spi_chip_info, |
| 162 | .controller_data = &spi_mmc_chip_info, | ||
| 163 | }, | 162 | }, |
| 164 | #endif | 163 | #endif |
| 165 | }; | 164 | }; |
diff --git a/arch/blackfin/mach-bf533/include/mach/anomaly.h b/arch/blackfin/mach-bf533/include/mach/anomaly.h index 0d3a03429fb9..1cf893e2e55b 100644 --- a/arch/blackfin/mach-bf533/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf533/include/mach/anomaly.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * File: include/asm-blackfin/mach-bf533/anomaly.h | 2 | * File: include/asm-blackfin/mach-bf533/anomaly.h |
| 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 2004-2008 Analog Devices Inc. | 5 | * Copyright (C) 2004-2009 Analog Devices Inc. |
| 6 | * Licensed under the GPL-2 or later. | 6 | * Licensed under the GPL-2 or later. |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| @@ -160,7 +160,7 @@ | |||
| 160 | #define ANOMALY_05000301 (__SILICON_REVISION__ < 6) | 160 | #define ANOMALY_05000301 (__SILICON_REVISION__ < 6) |
| 161 | /* SSYNCs After Writes To DMA MMR Registers May Not Be Handled Correctly */ | 161 | /* SSYNCs After Writes To DMA MMR Registers May Not Be Handled Correctly */ |
| 162 | #define ANOMALY_05000302 (__SILICON_REVISION__ < 5) | 162 | #define ANOMALY_05000302 (__SILICON_REVISION__ < 5) |
| 163 | /* New Feature: Additional Hysteresis on SPORT Input Pins (Not Available On Older Silicon) */ | 163 | /* SPORT_HYS Bit in PLL_CTL Register Is Not Functional */ |
| 164 | #define ANOMALY_05000305 (__SILICON_REVISION__ < 5) | 164 | #define ANOMALY_05000305 (__SILICON_REVISION__ < 5) |
| 165 | /* New Feature: Additional PPI Frame Sync Sampling Options (Not Available On Older Silicon) */ | 165 | /* New Feature: Additional PPI Frame Sync Sampling Options (Not Available On Older Silicon) */ |
| 166 | #define ANOMALY_05000306 (__SILICON_REVISION__ < 5) | 166 | #define ANOMALY_05000306 (__SILICON_REVISION__ < 5) |
| @@ -278,9 +278,12 @@ | |||
| 278 | #define ANOMALY_05000266 (0) | 278 | #define ANOMALY_05000266 (0) |
| 279 | #define ANOMALY_05000323 (0) | 279 | #define ANOMALY_05000323 (0) |
| 280 | #define ANOMALY_05000353 (1) | 280 | #define ANOMALY_05000353 (1) |
| 281 | #define ANOMALY_05000380 (0) | ||
| 281 | #define ANOMALY_05000386 (1) | 282 | #define ANOMALY_05000386 (1) |
| 282 | #define ANOMALY_05000412 (0) | 283 | #define ANOMALY_05000412 (0) |
| 283 | #define ANOMALY_05000432 (0) | 284 | #define ANOMALY_05000432 (0) |
| 284 | #define ANOMALY_05000435 (0) | 285 | #define ANOMALY_05000435 (0) |
| 286 | #define ANOMALY_05000447 (0) | ||
| 287 | #define ANOMALY_05000448 (0) | ||
| 285 | 288 | ||
| 286 | #endif | 289 | #endif |
diff --git a/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h index f3d9e495230c..5f517f53b0fd 100644 --- a/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h +++ b/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h | |||
| @@ -134,7 +134,7 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
| 134 | CH_UART_TX, | 134 | CH_UART_TX, |
| 135 | CH_UART_RX, | 135 | CH_UART_RX, |
| 136 | #endif | 136 | #endif |
| 137 | #ifdef CONFIG_BFIN_UART0_CTSRTS | 137 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS |
| 138 | CONFIG_UART0_CTS_PIN, | 138 | CONFIG_UART0_CTS_PIN, |
| 139 | CONFIG_UART0_RTS_PIN, | 139 | CONFIG_UART0_RTS_PIN, |
| 140 | #endif | 140 | #endif |
diff --git a/arch/blackfin/mach-bf537/boards/Kconfig b/arch/blackfin/mach-bf537/boards/Kconfig index 42a57b0acb29..77c59da87e85 100644 --- a/arch/blackfin/mach-bf537/boards/Kconfig +++ b/arch/blackfin/mach-bf537/boards/Kconfig | |||
| @@ -33,9 +33,4 @@ config CAMSIG_MINOTAUR | |||
| 33 | help | 33 | help |
| 34 | Board supply package for CSP Minotaur | 34 | Board supply package for CSP Minotaur |
| 35 | 35 | ||
| 36 | config GENERIC_BF537_BOARD | ||
| 37 | bool "Generic" | ||
| 38 | help | ||
| 39 | Generic or Custom board support. | ||
| 40 | |||
| 41 | endchoice | 36 | endchoice |
diff --git a/arch/blackfin/mach-bf537/boards/Makefile b/arch/blackfin/mach-bf537/boards/Makefile index 7168cc14afd8..68b98a7af6a6 100644 --- a/arch/blackfin/mach-bf537/boards/Makefile +++ b/arch/blackfin/mach-bf537/boards/Makefile | |||
| @@ -2,7 +2,6 @@ | |||
| 2 | # arch/blackfin/mach-bf537/boards/Makefile | 2 | # arch/blackfin/mach-bf537/boards/Makefile |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-$(CONFIG_GENERIC_BF537_BOARD) += generic_board.o | ||
| 6 | obj-$(CONFIG_BFIN537_STAMP) += stamp.o | 5 | obj-$(CONFIG_BFIN537_STAMP) += stamp.o |
| 7 | obj-$(CONFIG_BFIN537_BLUETECHNIX_CM) += cm_bf537.o | 6 | obj-$(CONFIG_BFIN537_BLUETECHNIX_CM) += cm_bf537.o |
| 8 | obj-$(CONFIG_BFIN537_BLUETECHNIX_TCM) += tcm_bf537.o | 7 | obj-$(CONFIG_BFIN537_BLUETECHNIX_TCM) += tcm_bf537.o |
diff --git a/arch/blackfin/mach-bf537/boards/cm_bf537.c b/arch/blackfin/mach-bf537/boards/cm_bf537.c index 9cd8fb2a30d3..41c75b9bfac0 100644 --- a/arch/blackfin/mach-bf537/boards/cm_bf537.c +++ b/arch/blackfin/mach-bf537/boards/cm_bf537.c | |||
| @@ -108,9 +108,9 @@ static struct bfin5xx_spi_chip ad9960_spi_chip_info = { | |||
| 108 | }; | 108 | }; |
| 109 | #endif | 109 | #endif |
| 110 | 110 | ||
| 111 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 111 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 112 | static struct bfin5xx_spi_chip spi_mmc_chip_info = { | 112 | static struct bfin5xx_spi_chip mmc_spi_chip_info = { |
| 113 | .enable_dma = 1, | 113 | .enable_dma = 0, |
| 114 | .bits_per_word = 8, | 114 | .bits_per_word = 8, |
| 115 | }; | 115 | }; |
| 116 | #endif | 116 | #endif |
| @@ -160,23 +160,13 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
| 160 | }, | 160 | }, |
| 161 | #endif | 161 | #endif |
| 162 | 162 | ||
| 163 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 163 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 164 | { | ||
| 165 | .modalias = "spi_mmc_dummy", | ||
| 166 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | ||
| 167 | .bus_num = 0, | ||
| 168 | .chip_select = 7, | ||
| 169 | .platform_data = NULL, | ||
| 170 | .controller_data = &spi_mmc_chip_info, | ||
| 171 | .mode = SPI_MODE_3, | ||
| 172 | }, | ||
| 173 | { | 164 | { |
| 174 | .modalias = "spi_mmc", | 165 | .modalias = "mmc_spi", |
| 175 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | 166 | .max_speed_hz = 20000000, /* max spi clock (SCK) speed in HZ */ |
| 176 | .bus_num = 0, | 167 | .bus_num = 0, |
| 177 | .chip_select = CONFIG_SPI_MMC_CS_CHAN, | 168 | .chip_select = 1, |
| 178 | .platform_data = NULL, | 169 | .controller_data = &mmc_spi_chip_info, |
| 179 | .controller_data = &spi_mmc_chip_info, | ||
| 180 | .mode = SPI_MODE_3, | 170 | .mode = SPI_MODE_3, |
| 181 | }, | 171 | }, |
| 182 | #endif | 172 | #endif |
diff --git a/arch/blackfin/mach-bf537/boards/generic_board.c b/arch/blackfin/mach-bf537/boards/generic_board.c deleted file mode 100644 index da710fdc4569..000000000000 --- a/arch/blackfin/mach-bf537/boards/generic_board.c +++ /dev/null | |||
| @@ -1,745 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * File: arch/blackfin/mach-bf537/boards/generic_board.c | ||
| 3 | * Based on: arch/blackfin/mach-bf533/boards/ezkit.c | ||
| 4 | * Author: Aidan Williams <aidan@nicta.com.au> | ||
| 5 | * | ||
| 6 | * Created: | ||
| 7 | * Description: | ||
| 8 | * | ||
| 9 | * Modified: | ||
| 10 | * Copyright 2005 National ICT Australia (NICTA) | ||
| 11 | * Copyright 2004-2008 Analog Devices Inc. | ||
| 12 | * | ||
| 13 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | ||
| 14 | * | ||
| 15 | * This program is free software; you can redistribute it and/or modify | ||
| 16 | * it under the terms of the GNU General Public License as published by | ||
| 17 | * the Free Software Foundation; either version 2 of the License, or | ||
| 18 | * (at your option) any later version. | ||
| 19 | * | ||
| 20 | * This program is distributed in the hope that it will be useful, | ||
| 21 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 22 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 23 | * GNU General Public License for more details. | ||
| 24 | * | ||
| 25 | * You should have received a copy of the GNU General Public License | ||
| 26 | * along with this program; if not, see the file COPYING, or write | ||
| 27 | * to the Free Software Foundation, Inc., | ||
| 28 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 29 | */ | ||
| 30 | |||
| 31 | #include <linux/device.h> | ||
| 32 | #include <linux/etherdevice.h> | ||
| 33 | #include <linux/platform_device.h> | ||
| 34 | #include <linux/mtd/mtd.h> | ||
| 35 | #include <linux/mtd/partitions.h> | ||
| 36 | #include <linux/spi/spi.h> | ||
| 37 | #include <linux/spi/flash.h> | ||
| 38 | #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) | ||
| 39 | #include <linux/usb/isp1362.h> | ||
| 40 | #endif | ||
| 41 | #include <linux/irq.h> | ||
| 42 | #include <linux/interrupt.h> | ||
| 43 | #include <linux/usb/sl811.h> | ||
| 44 | #include <asm/dma.h> | ||
| 45 | #include <asm/bfin5xx_spi.h> | ||
| 46 | #include <asm/reboot.h> | ||
| 47 | #include <asm/portmux.h> | ||
| 48 | #include <linux/spi/ad7877.h> | ||
| 49 | |||
| 50 | /* | ||
| 51 | * Name the Board for the /proc/cpuinfo | ||
| 52 | */ | ||
| 53 | const char bfin_board_name[] = "UNKNOWN BOARD"; | ||
| 54 | |||
| 55 | /* | ||
| 56 | * Driver needs to know address, irq and flag pin. | ||
| 57 | */ | ||
| 58 | |||
| 59 | #if defined(CONFIG_USB_ISP1760_HCD) || defined(CONFIG_USB_ISP1760_HCD_MODULE) | ||
| 60 | #include <linux/usb/isp1760.h> | ||
| 61 | static struct resource bfin_isp1760_resources[] = { | ||
| 62 | [0] = { | ||
| 63 | .start = 0x203C0000, | ||
| 64 | .end = 0x203C0000 + 0x000fffff, | ||
| 65 | .flags = IORESOURCE_MEM, | ||
| 66 | }, | ||
| 67 | [1] = { | ||
| 68 | .start = IRQ_PF7, | ||
| 69 | .end = IRQ_PF7, | ||
| 70 | .flags = IORESOURCE_IRQ, | ||
| 71 | }, | ||
| 72 | }; | ||
| 73 | |||
| 74 | static struct isp1760_platform_data isp1760_priv = { | ||
| 75 | .is_isp1761 = 0, | ||
| 76 | .port1_disable = 0, | ||
| 77 | .bus_width_16 = 1, | ||
| 78 | .port1_otg = 0, | ||
| 79 | .analog_oc = 0, | ||
| 80 | .dack_polarity_high = 0, | ||
| 81 | .dreq_polarity_high = 0, | ||
| 82 | }; | ||
| 83 | |||
| 84 | static struct platform_device bfin_isp1760_device = { | ||
| 85 | .name = "isp1760-hcd", | ||
| 86 | .id = 0, | ||
| 87 | .dev = { | ||
| 88 | .platform_data = &isp1760_priv, | ||
| 89 | }, | ||
| 90 | .num_resources = ARRAY_SIZE(bfin_isp1760_resources), | ||
| 91 | .resource = bfin_isp1760_resources, | ||
| 92 | }; | ||
| 93 | #endif | ||
| 94 | |||
| 95 | #if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE) | ||
| 96 | static struct resource bfin_pcmcia_cf_resources[] = { | ||
| 97 | { | ||
| 98 | .start = 0x20310000, /* IO PORT */ | ||
| 99 | .end = 0x20312000, | ||
| 100 | .flags = IORESOURCE_MEM, | ||
| 101 | }, { | ||
| 102 | .start = 0x20311000, /* Attribute Memory */ | ||
| 103 | .end = 0x20311FFF, | ||
| 104 | .flags = IORESOURCE_MEM, | ||
| 105 | }, { | ||
| 106 | .start = IRQ_PF4, | ||
| 107 | .end = IRQ_PF4, | ||
| 108 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL, | ||
| 109 | }, { | ||
| 110 | .start = 6, /* Card Detect PF6 */ | ||
| 111 | .end = 6, | ||
| 112 | .flags = IORESOURCE_IRQ, | ||
| 113 | }, | ||
| 114 | }; | ||
| 115 | |||
| 116 | static struct platform_device bfin_pcmcia_cf_device = { | ||
| 117 | .name = "bfin_cf_pcmcia", | ||
| 118 | .id = -1, | ||
| 119 | .num_resources = ARRAY_SIZE(bfin_pcmcia_cf_resources), | ||
| 120 | .resource = bfin_pcmcia_cf_resources, | ||
| 121 | }; | ||
| 122 | #endif | ||
| 123 | |||
| 124 | #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE) | ||
| 125 | static struct platform_device rtc_device = { | ||
| 126 | .name = "rtc-bfin", | ||
| 127 | .id = -1, | ||
| 128 | }; | ||
| 129 | #endif | ||
| 130 | |||
| 131 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) | ||
| 132 | static struct resource smc91x_resources[] = { | ||
| 133 | { | ||
| 134 | .name = "smc91x-regs", | ||
| 135 | .start = 0x20300300, | ||
| 136 | .end = 0x20300300 + 16, | ||
| 137 | .flags = IORESOURCE_MEM, | ||
| 138 | }, { | ||
| 139 | |||
| 140 | .start = IRQ_PF7, | ||
| 141 | .end = IRQ_PF7, | ||
| 142 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, | ||
| 143 | }, | ||
| 144 | }; | ||
| 145 | static struct platform_device smc91x_device = { | ||
| 146 | .name = "smc91x", | ||
| 147 | .id = 0, | ||
| 148 | .num_resources = ARRAY_SIZE(smc91x_resources), | ||
| 149 | .resource = smc91x_resources, | ||
| 150 | }; | ||
| 151 | #endif | ||
| 152 | |||
| 153 | #if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE) | ||
| 154 | static struct resource dm9000_resources[] = { | ||
| 155 | [0] = { | ||
| 156 | .start = 0x203FB800, | ||
| 157 | .end = 0x203FB800 + 1, | ||
| 158 | .flags = IORESOURCE_MEM, | ||
| 159 | }, | ||
| 160 | [1] = { | ||
| 161 | .start = 0x203FB800 + 4, | ||
| 162 | .end = 0x203FB800 + 5, | ||
| 163 | .flags = IORESOURCE_MEM, | ||
| 164 | }, | ||
| 165 | [2] = { | ||
| 166 | .start = IRQ_PF9, | ||
| 167 | .end = IRQ_PF9, | ||
| 168 | .flags = (IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE), | ||
| 169 | }, | ||
| 170 | }; | ||
| 171 | |||
| 172 | static struct platform_device dm9000_device = { | ||
| 173 | .name = "dm9000", | ||
| 174 | .id = -1, | ||
| 175 | .num_resources = ARRAY_SIZE(dm9000_resources), | ||
| 176 | .resource = dm9000_resources, | ||
| 177 | }; | ||
| 178 | #endif | ||
| 179 | |||
| 180 | #if defined(CONFIG_USB_SL811_HCD) || defined(CONFIG_USB_SL811_HCD_MODULE) | ||
| 181 | static struct resource sl811_hcd_resources[] = { | ||
| 182 | { | ||
| 183 | .start = 0x20340000, | ||
| 184 | .end = 0x20340000, | ||
| 185 | .flags = IORESOURCE_MEM, | ||
| 186 | }, { | ||
| 187 | .start = 0x20340004, | ||
| 188 | .end = 0x20340004, | ||
| 189 | .flags = IORESOURCE_MEM, | ||
| 190 | }, { | ||
| 191 | .start = CONFIG_USB_SL811_BFIN_IRQ, | ||
| 192 | .end = CONFIG_USB_SL811_BFIN_IRQ, | ||
| 193 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, | ||
| 194 | }, | ||
| 195 | }; | ||
| 196 | |||
| 197 | #if defined(CONFIG_USB_SL811_BFIN_USE_VBUS) | ||
| 198 | void sl811_port_power(struct device *dev, int is_on) | ||
| 199 | { | ||
| 200 | gpio_request(CONFIG_USB_SL811_BFIN_GPIO_VBUS, "usb:SL811_VBUS"); | ||
| 201 | gpio_direction_output(CONFIG_USB_SL811_BFIN_GPIO_VBUS, is_on); | ||
| 202 | |||
| 203 | } | ||
| 204 | #endif | ||
| 205 | |||
| 206 | static struct sl811_platform_data sl811_priv = { | ||
| 207 | .potpg = 10, | ||
| 208 | .power = 250, /* == 500mA */ | ||
| 209 | #if defined(CONFIG_USB_SL811_BFIN_USE_VBUS) | ||
| 210 | .port_power = &sl811_port_power, | ||
| 211 | #endif | ||
| 212 | }; | ||
| 213 | |||
| 214 | static struct platform_device sl811_hcd_device = { | ||
| 215 | .name = "sl811-hcd", | ||
| 216 | .id = 0, | ||
| 217 | .dev = { | ||
| 218 | .platform_data = &sl811_priv, | ||
| 219 | }, | ||
| 220 | .num_resources = ARRAY_SIZE(sl811_hcd_resources), | ||
| 221 | .resource = sl811_hcd_resources, | ||
| 222 | }; | ||
| 223 | #endif | ||
| 224 | |||
| 225 | #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) | ||
| 226 | static struct resource isp1362_hcd_resources[] = { | ||
| 227 | { | ||
| 228 | .start = 0x20360000, | ||
| 229 | .end = 0x20360000, | ||
| 230 | .flags = IORESOURCE_MEM, | ||
| 231 | }, { | ||
| 232 | .start = 0x20360004, | ||
| 233 | .end = 0x20360004, | ||
| 234 | .flags = IORESOURCE_MEM, | ||
| 235 | }, { | ||
| 236 | .start = CONFIG_USB_ISP1362_BFIN_GPIO_IRQ, | ||
| 237 | .end = CONFIG_USB_ISP1362_BFIN_GPIO_IRQ, | ||
| 238 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, | ||
| 239 | }, | ||
| 240 | }; | ||
| 241 | |||
| 242 | static struct isp1362_platform_data isp1362_priv = { | ||
| 243 | .sel15Kres = 1, | ||
| 244 | .clknotstop = 0, | ||
| 245 | .oc_enable = 0, | ||
| 246 | .int_act_high = 0, | ||
| 247 | .int_edge_triggered = 0, | ||
| 248 | .remote_wakeup_connected = 0, | ||
| 249 | .no_power_switching = 1, | ||
| 250 | .power_switching_mode = 0, | ||
| 251 | }; | ||
| 252 | |||
| 253 | static struct platform_device isp1362_hcd_device = { | ||
| 254 | .name = "isp1362-hcd", | ||
| 255 | .id = 0, | ||
| 256 | .dev = { | ||
| 257 | .platform_data = &isp1362_priv, | ||
| 258 | }, | ||
| 259 | .num_resources = ARRAY_SIZE(isp1362_hcd_resources), | ||
| 260 | .resource = isp1362_hcd_resources, | ||
| 261 | }; | ||
| 262 | #endif | ||
| 263 | |||
| 264 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) | ||
| 265 | static struct platform_device bfin_mii_bus = { | ||
| 266 | .name = "bfin_mii_bus", | ||
| 267 | }; | ||
| 268 | |||
| 269 | static struct platform_device bfin_mac_device = { | ||
| 270 | .name = "bfin_mac", | ||
| 271 | .dev.platform_data = &bfin_mii_bus, | ||
| 272 | }; | ||
| 273 | #endif | ||
| 274 | |||
| 275 | #if defined(CONFIG_USB_NET2272) || defined(CONFIG_USB_NET2272_MODULE) | ||
| 276 | static struct resource net2272_bfin_resources[] = { | ||
| 277 | { | ||
| 278 | .start = 0x20300000, | ||
| 279 | .end = 0x20300000 + 0x100, | ||
| 280 | .flags = IORESOURCE_MEM, | ||
| 281 | }, { | ||
| 282 | .start = IRQ_PF7, | ||
| 283 | .end = IRQ_PF7, | ||
| 284 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, | ||
| 285 | }, | ||
| 286 | }; | ||
| 287 | |||
| 288 | static struct platform_device net2272_bfin_device = { | ||
| 289 | .name = "net2272", | ||
| 290 | .id = -1, | ||
| 291 | .num_resources = ARRAY_SIZE(net2272_bfin_resources), | ||
| 292 | .resource = net2272_bfin_resources, | ||
| 293 | }; | ||
| 294 | #endif | ||
| 295 | |||
| 296 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | ||
| 297 | /* all SPI peripherals info goes here */ | ||
| 298 | |||
| 299 | #if defined(CONFIG_MTD_M25P80) \ | ||
| 300 | || defined(CONFIG_MTD_M25P80_MODULE) | ||
| 301 | static struct mtd_partition bfin_spi_flash_partitions[] = { | ||
| 302 | { | ||
| 303 | .name = "bootloader(spi)", | ||
| 304 | .size = 0x00020000, | ||
| 305 | .offset = 0, | ||
| 306 | .mask_flags = MTD_CAP_ROM | ||
| 307 | }, { | ||
| 308 | .name = "linux kernel(spi)", | ||
| 309 | .size = 0xe0000, | ||
| 310 | .offset = 0x20000 | ||
| 311 | }, { | ||
| 312 | .name = "file system(spi)", | ||
| 313 | .size = 0x700000, | ||
| 314 | .offset = 0x00100000, | ||
| 315 | } | ||
| 316 | }; | ||
| 317 | |||
| 318 | static struct flash_platform_data bfin_spi_flash_data = { | ||
| 319 | .name = "m25p80", | ||
| 320 | .parts = bfin_spi_flash_partitions, | ||
| 321 | .nr_parts = ARRAY_SIZE(bfin_spi_flash_partitions), | ||
| 322 | .type = "m25p64", | ||
| 323 | }; | ||
| 324 | |||
| 325 | /* SPI flash chip (m25p64) */ | ||
| 326 | static struct bfin5xx_spi_chip spi_flash_chip_info = { | ||
| 327 | .enable_dma = 0, /* use dma transfer with this chip*/ | ||
| 328 | .bits_per_word = 8, | ||
| 329 | }; | ||
| 330 | #endif | ||
| 331 | |||
| 332 | #if defined(CONFIG_SPI_ADC_BF533) \ | ||
| 333 | || defined(CONFIG_SPI_ADC_BF533_MODULE) | ||
| 334 | /* SPI ADC chip */ | ||
| 335 | static struct bfin5xx_spi_chip spi_adc_chip_info = { | ||
| 336 | .enable_dma = 1, /* use dma transfer with this chip*/ | ||
| 337 | .bits_per_word = 16, | ||
| 338 | }; | ||
| 339 | #endif | ||
| 340 | |||
| 341 | #if defined(CONFIG_SND_BLACKFIN_AD1836) \ | ||
| 342 | || defined(CONFIG_SND_BLACKFIN_AD1836_MODULE) | ||
| 343 | static struct bfin5xx_spi_chip ad1836_spi_chip_info = { | ||
| 344 | .enable_dma = 0, | ||
| 345 | .bits_per_word = 16, | ||
| 346 | }; | ||
| 347 | #endif | ||
| 348 | |||
| 349 | #if defined(CONFIG_AD9960) || defined(CONFIG_AD9960_MODULE) | ||
| 350 | static struct bfin5xx_spi_chip ad9960_spi_chip_info = { | ||
| 351 | .enable_dma = 0, | ||
| 352 | .bits_per_word = 16, | ||
| 353 | }; | ||
| 354 | #endif | ||
| 355 | |||
| 356 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | ||
| 357 | static struct bfin5xx_spi_chip spi_mmc_chip_info = { | ||
| 358 | .enable_dma = 1, | ||
| 359 | .bits_per_word = 8, | ||
| 360 | }; | ||
| 361 | #endif | ||
| 362 | |||
| 363 | #if defined(CONFIG_PBX) | ||
| 364 | static struct bfin5xx_spi_chip spi_si3xxx_chip_info = { | ||
| 365 | .ctl_reg = 0x4, /* send zero */ | ||
| 366 | .enable_dma = 0, | ||
| 367 | .bits_per_word = 8, | ||
| 368 | .cs_change_per_word = 1, | ||
| 369 | }; | ||
| 370 | #endif | ||
| 371 | |||
| 372 | #if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE) | ||
| 373 | static struct bfin5xx_spi_chip spi_ad7877_chip_info = { | ||
| 374 | .enable_dma = 0, | ||
| 375 | .bits_per_word = 16, | ||
| 376 | }; | ||
| 377 | |||
| 378 | static const struct ad7877_platform_data bfin_ad7877_ts_info = { | ||
| 379 | .model = 7877, | ||
| 380 | .vref_delay_usecs = 50, /* internal, no capacitor */ | ||
| 381 | .x_plate_ohms = 419, | ||
| 382 | .y_plate_ohms = 486, | ||
| 383 | .pressure_max = 1000, | ||
| 384 | .pressure_min = 0, | ||
| 385 | .stopacq_polarity = 1, | ||
| 386 | .first_conversion_delay = 3, | ||
| 387 | .acquisition_time = 1, | ||
| 388 | .averaging = 1, | ||
| 389 | .pen_down_acc_interval = 1, | ||
| 390 | }; | ||
| 391 | #endif | ||
| 392 | |||
| 393 | static struct spi_board_info bfin_spi_board_info[] __initdata = { | ||
| 394 | #if defined(CONFIG_MTD_M25P80) \ | ||
| 395 | || defined(CONFIG_MTD_M25P80_MODULE) | ||
| 396 | { | ||
| 397 | /* the modalias must be the same as spi device driver name */ | ||
| 398 | .modalias = "m25p80", /* Name of spi_driver for this device */ | ||
| 399 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | ||
| 400 | .bus_num = 0, /* Framework bus number */ | ||
| 401 | .chip_select = 1, /* Framework chip select. On STAMP537 it is SPISSEL1*/ | ||
| 402 | .platform_data = &bfin_spi_flash_data, | ||
| 403 | .controller_data = &spi_flash_chip_info, | ||
| 404 | .mode = SPI_MODE_3, | ||
| 405 | }, | ||
| 406 | #endif | ||
| 407 | |||
| 408 | #if defined(CONFIG_SPI_ADC_BF533) \ | ||
| 409 | || defined(CONFIG_SPI_ADC_BF533_MODULE) | ||
| 410 | { | ||
| 411 | .modalias = "bfin_spi_adc", /* Name of spi_driver for this device */ | ||
| 412 | .max_speed_hz = 6250000, /* max spi clock (SCK) speed in HZ */ | ||
| 413 | .bus_num = 0, /* Framework bus number */ | ||
| 414 | .chip_select = 1, /* Framework chip select. */ | ||
| 415 | .platform_data = NULL, /* No spi_driver specific config */ | ||
| 416 | .controller_data = &spi_adc_chip_info, | ||
| 417 | }, | ||
| 418 | #endif | ||
| 419 | |||
| 420 | #if defined(CONFIG_SND_BLACKFIN_AD1836) \ | ||
| 421 | || defined(CONFIG_SND_BLACKFIN_AD1836_MODULE) | ||
| 422 | { | ||
| 423 | .modalias = "ad1836-spi", | ||
| 424 | .max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */ | ||
| 425 | .bus_num = 0, | ||
| 426 | .chip_select = CONFIG_SND_BLACKFIN_SPI_PFBIT, | ||
| 427 | .controller_data = &ad1836_spi_chip_info, | ||
| 428 | }, | ||
| 429 | #endif | ||
| 430 | #if defined(CONFIG_AD9960) || defined(CONFIG_AD9960_MODULE) | ||
| 431 | { | ||
| 432 | .modalias = "ad9960-spi", | ||
| 433 | .max_speed_hz = 10000000, /* max spi clock (SCK) speed in HZ */ | ||
| 434 | .bus_num = 0, | ||
| 435 | .chip_select = 1, | ||
| 436 | .controller_data = &ad9960_spi_chip_info, | ||
| 437 | }, | ||
| 438 | #endif | ||
| 439 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | ||
| 440 | { | ||
| 441 | .modalias = "spi_mmc_dummy", | ||
| 442 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | ||
| 443 | .bus_num = 0, | ||
| 444 | .chip_select = 0, | ||
| 445 | .platform_data = NULL, | ||
| 446 | .controller_data = &spi_mmc_chip_info, | ||
| 447 | .mode = SPI_MODE_3, | ||
| 448 | }, | ||
| 449 | { | ||
| 450 | .modalias = "spi_mmc", | ||
| 451 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | ||
| 452 | .bus_num = 0, | ||
| 453 | .chip_select = CONFIG_SPI_MMC_CS_CHAN, | ||
| 454 | .platform_data = NULL, | ||
| 455 | .controller_data = &spi_mmc_chip_info, | ||
| 456 | .mode = SPI_MODE_3, | ||
| 457 | }, | ||
| 458 | #endif | ||
| 459 | #if defined(CONFIG_PBX) | ||
| 460 | { | ||
| 461 | .modalias = "fxs-spi", | ||
| 462 | .max_speed_hz = 12500000, /* max spi clock (SCK) speed in HZ */ | ||
| 463 | .bus_num = 0, | ||
| 464 | .chip_select = 8 - CONFIG_J11_JUMPER, | ||
| 465 | .controller_data = &spi_si3xxx_chip_info, | ||
| 466 | .mode = SPI_MODE_3, | ||
| 467 | }, | ||
| 468 | { | ||
| 469 | .modalias = "fxo-spi", | ||
| 470 | .max_speed_hz = 12500000, /* max spi clock (SCK) speed in HZ */ | ||
| 471 | .bus_num = 0, | ||
| 472 | .chip_select = 8 - CONFIG_J19_JUMPER, | ||
| 473 | .controller_data = &spi_si3xxx_chip_info, | ||
| 474 | .mode = SPI_MODE_3, | ||
| 475 | }, | ||
| 476 | #endif | ||
| 477 | #if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE) | ||
| 478 | { | ||
| 479 | .modalias = "ad7877", | ||
| 480 | .platform_data = &bfin_ad7877_ts_info, | ||
| 481 | .irq = IRQ_PF6, | ||
| 482 | .max_speed_hz = 12500000, /* max spi clock (SCK) speed in HZ */ | ||
| 483 | .bus_num = 0, | ||
| 484 | .chip_select = 1, | ||
| 485 | .controller_data = &spi_ad7877_chip_info, | ||
| 486 | }, | ||
| 487 | #endif | ||
| 488 | }; | ||
| 489 | |||
| 490 | /* SPI controller data */ | ||
| 491 | static struct bfin5xx_spi_master bfin_spi0_info = { | ||
| 492 | .num_chipselect = 8, | ||
| 493 | .enable_dma = 1, /* master has the ability to do dma transfer */ | ||
| 494 | .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0}, | ||
| 495 | }; | ||
| 496 | |||
| 497 | /* SPI (0) */ | ||
| 498 | static struct resource bfin_spi0_resource[] = { | ||
| 499 | [0] = { | ||
| 500 | .start = SPI0_REGBASE, | ||
| 501 | .end = SPI0_REGBASE + 0xFF, | ||
| 502 | .flags = IORESOURCE_MEM, | ||
| 503 | }, | ||
| 504 | [1] = { | ||
| 505 | .start = CH_SPI, | ||
| 506 | .end = CH_SPI, | ||
| 507 | .flags = IORESOURCE_IRQ, | ||
| 508 | }, | ||
| 509 | }; | ||
| 510 | |||
| 511 | static struct platform_device bfin_spi0_device = { | ||
| 512 | .name = "bfin-spi", | ||
| 513 | .id = 0, /* Bus number */ | ||
| 514 | .num_resources = ARRAY_SIZE(bfin_spi0_resource), | ||
| 515 | .resource = bfin_spi0_resource, | ||
| 516 | .dev = { | ||
| 517 | .platform_data = &bfin_spi0_info, /* Passed to driver */ | ||
| 518 | }, | ||
| 519 | }; | ||
| 520 | #endif /* spi master and devices */ | ||
| 521 | |||
| 522 | #if defined(CONFIG_FB_BF537_LQ035) || defined(CONFIG_FB_BF537_LQ035_MODULE) | ||
| 523 | static struct platform_device bfin_fb_device = { | ||
| 524 | .name = "bf537-lq035", | ||
| 525 | }; | ||
| 526 | #endif | ||
| 527 | |||
| 528 | #if defined(CONFIG_FB_BFIN_7393) || defined(CONFIG_FB_BFIN_7393_MODULE) | ||
| 529 | static struct platform_device bfin_fb_adv7393_device = { | ||
| 530 | .name = "bfin-adv7393", | ||
| 531 | }; | ||
| 532 | #endif | ||
| 533 | |||
| 534 | #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) | ||
| 535 | static struct resource bfin_uart_resources[] = { | ||
| 536 | { | ||
| 537 | .start = 0xFFC00400, | ||
| 538 | .end = 0xFFC004FF, | ||
| 539 | .flags = IORESOURCE_MEM, | ||
| 540 | }, { | ||
| 541 | .start = 0xFFC02000, | ||
| 542 | .end = 0xFFC020FF, | ||
| 543 | .flags = IORESOURCE_MEM, | ||
| 544 | }, | ||
| 545 | }; | ||
| 546 | |||
| 547 | static struct platform_device bfin_uart_device = { | ||
| 548 | .name = "bfin-uart", | ||
| 549 | .id = 1, | ||
| 550 | .num_resources = ARRAY_SIZE(bfin_uart_resources), | ||
| 551 | .resource = bfin_uart_resources, | ||
| 552 | }; | ||
| 553 | #endif | ||
| 554 | |||
| 555 | #if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE) | ||
| 556 | #ifdef CONFIG_BFIN_SIR0 | ||
| 557 | static struct resource bfin_sir0_resources[] = { | ||
| 558 | { | ||
| 559 | .start = 0xFFC00400, | ||
| 560 | .end = 0xFFC004FF, | ||
| 561 | .flags = IORESOURCE_MEM, | ||
| 562 | }, | ||
| 563 | { | ||
| 564 | .start = IRQ_UART0_RX, | ||
| 565 | .end = IRQ_UART0_RX+1, | ||
| 566 | .flags = IORESOURCE_IRQ, | ||
| 567 | }, | ||
| 568 | { | ||
| 569 | .start = CH_UART0_RX, | ||
| 570 | .end = CH_UART0_RX+1, | ||
| 571 | .flags = IORESOURCE_DMA, | ||
| 572 | }, | ||
| 573 | }; | ||
| 574 | |||
| 575 | static struct platform_device bfin_sir0_device = { | ||
| 576 | .name = "bfin_sir", | ||
| 577 | .id = 0, | ||
| 578 | .num_resources = ARRAY_SIZE(bfin_sir0_resources), | ||
| 579 | .resource = bfin_sir0_resources, | ||
| 580 | }; | ||
| 581 | #endif | ||
| 582 | #ifdef CONFIG_BFIN_SIR1 | ||
| 583 | static struct resource bfin_sir1_resources[] = { | ||
| 584 | { | ||
| 585 | .start = 0xFFC02000, | ||
| 586 | .end = 0xFFC020FF, | ||
| 587 | .flags = IORESOURCE_MEM, | ||
| 588 | }, | ||
| 589 | { | ||
| 590 | .start = IRQ_UART1_RX, | ||
| 591 | .end = IRQ_UART1_RX+1, | ||
| 592 | .flags = IORESOURCE_IRQ, | ||
| 593 | }, | ||
| 594 | { | ||
| 595 | .start = CH_UART1_RX, | ||
| 596 | .end = CH_UART1_RX+1, | ||
| 597 | .flags = IORESOURCE_DMA, | ||
| 598 | }, | ||
| 599 | }; | ||
| 600 | |||
| 601 | static struct platform_device bfin_sir1_device = { | ||
| 602 | .name = "bfin_sir", | ||
| 603 | .id = 1, | ||
| 604 | .num_resources = ARRAY_SIZE(bfin_sir1_resources), | ||
| 605 | .resource = bfin_sir1_resources, | ||
| 606 | }; | ||
| 607 | #endif | ||
| 608 | #endif | ||
| 609 | |||
| 610 | #if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE) | ||
| 611 | static struct resource bfin_twi0_resource[] = { | ||
| 612 | [0] = { | ||
| 613 | .start = TWI0_REGBASE, | ||
| 614 | .end = TWI0_REGBASE + 0xFF, | ||
| 615 | .flags = IORESOURCE_MEM, | ||
| 616 | }, | ||
| 617 | [1] = { | ||
| 618 | .start = IRQ_TWI, | ||
| 619 | .end = IRQ_TWI, | ||
| 620 | .flags = IORESOURCE_IRQ, | ||
| 621 | }, | ||
| 622 | }; | ||
| 623 | |||
| 624 | static struct platform_device i2c_bfin_twi_device = { | ||
| 625 | .name = "i2c-bfin-twi", | ||
| 626 | .id = 0, | ||
| 627 | .num_resources = ARRAY_SIZE(bfin_twi0_resource), | ||
| 628 | .resource = bfin_twi0_resource, | ||
| 629 | }; | ||
| 630 | #endif | ||
| 631 | |||
| 632 | #if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE) | ||
| 633 | static struct platform_device bfin_sport0_uart_device = { | ||
| 634 | .name = "bfin-sport-uart", | ||
| 635 | .id = 0, | ||
| 636 | }; | ||
| 637 | |||
| 638 | static struct platform_device bfin_sport1_uart_device = { | ||
| 639 | .name = "bfin-sport-uart", | ||
| 640 | .id = 1, | ||
| 641 | }; | ||
| 642 | #endif | ||
| 643 | |||
| 644 | static struct platform_device *stamp_devices[] __initdata = { | ||
| 645 | #if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE) | ||
| 646 | &bfin_pcmcia_cf_device, | ||
| 647 | #endif | ||
| 648 | |||
| 649 | #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE) | ||
| 650 | &rtc_device, | ||
| 651 | #endif | ||
| 652 | |||
| 653 | #if defined(CONFIG_USB_SL811_HCD) || defined(CONFIG_USB_SL811_HCD_MODULE) | ||
| 654 | &sl811_hcd_device, | ||
| 655 | #endif | ||
| 656 | |||
| 657 | #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) | ||
| 658 | &isp1362_hcd_device, | ||
| 659 | #endif | ||
| 660 | |||
| 661 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) | ||
| 662 | &smc91x_device, | ||
| 663 | #endif | ||
| 664 | |||
| 665 | #if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE) | ||
| 666 | &dm9000_device, | ||
| 667 | #endif | ||
| 668 | |||
| 669 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) | ||
| 670 | &bfin_mii_bus, | ||
| 671 | &bfin_mac_device, | ||
| 672 | #endif | ||
| 673 | |||
| 674 | #if defined(CONFIG_USB_NET2272) || defined(CONFIG_USB_NET2272_MODULE) | ||
| 675 | &net2272_bfin_device, | ||
| 676 | #endif | ||
| 677 | |||
| 678 | #if defined(CONFIG_USB_ISP1760_HCD) || defined(CONFIG_USB_ISP1760_HCD_MODULE) | ||
| 679 | &bfin_isp1760_device, | ||
| 680 | #endif | ||
| 681 | |||
| 682 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | ||
| 683 | &bfin_spi0_device, | ||
| 684 | #endif | ||
| 685 | |||
| 686 | #if defined(CONFIG_FB_BF537_LQ035) || defined(CONFIG_FB_BF537_LQ035_MODULE) | ||
| 687 | &bfin_fb_device, | ||
| 688 | #endif | ||
| 689 | |||
| 690 | #if defined(CONFIG_FB_BFIN_7393) || defined(CONFIG_FB_BFIN_7393_MODULE) | ||
| 691 | &bfin_fb_adv7393_device, | ||
| 692 | #endif | ||
| 693 | |||
| 694 | #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) | ||
| 695 | &bfin_uart_device, | ||
| 696 | #endif | ||
| 697 | |||
| 698 | #if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE) | ||
| 699 | #ifdef CONFIG_BFIN_SIR0 | ||
| 700 | &bfin_sir0_device, | ||
| 701 | #endif | ||
| 702 | #ifdef CONFIG_BFIN_SIR1 | ||
| 703 | &bfin_sir1_device, | ||
| 704 | #endif | ||
| 705 | #endif | ||
| 706 | |||
| 707 | #if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE) | ||
| 708 | &i2c_bfin_twi_device, | ||
| 709 | #endif | ||
| 710 | |||
| 711 | #if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE) | ||
| 712 | &bfin_sport0_uart_device, | ||
| 713 | &bfin_sport1_uart_device, | ||
| 714 | #endif | ||
| 715 | }; | ||
| 716 | |||
| 717 | static int __init generic_init(void) | ||
| 718 | { | ||
| 719 | printk(KERN_INFO "%s(): registering device resources\n", __func__); | ||
| 720 | platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices)); | ||
| 721 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | ||
| 722 | spi_register_board_info(bfin_spi_board_info, | ||
| 723 | ARRAY_SIZE(bfin_spi_board_info)); | ||
| 724 | #endif | ||
| 725 | |||
| 726 | return 0; | ||
| 727 | } | ||
| 728 | |||
| 729 | arch_initcall(generic_init); | ||
| 730 | |||
| 731 | void native_machine_restart(char *cmd) | ||
| 732 | { | ||
| 733 | /* workaround reboot hang when booting from SPI */ | ||
| 734 | if ((bfin_read_SYSCR() & 0x7) == 0x3) | ||
| 735 | bfin_reset_boot_spi_cs(P_DEFAULT_BOOT_SPI_CS); | ||
| 736 | } | ||
| 737 | |||
| 738 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) | ||
| 739 | void bfin_get_ether_addr(char *addr) | ||
| 740 | { | ||
| 741 | random_ether_addr(addr); | ||
| 742 | printk(KERN_WARNING "%s:%s: Setting Ethernet MAC to a random one\n", __FILE__, __func__); | ||
| 743 | } | ||
| 744 | EXPORT_SYMBOL(bfin_get_ether_addr); | ||
| 745 | #endif | ||
diff --git a/arch/blackfin/mach-bf537/boards/minotaur.c b/arch/blackfin/mach-bf537/boards/minotaur.c index db7d3a385e4b..3c159819e555 100644 --- a/arch/blackfin/mach-bf537/boards/minotaur.c +++ b/arch/blackfin/mach-bf537/boards/minotaur.c | |||
| @@ -134,9 +134,9 @@ static struct bfin5xx_spi_chip spi_flash_chip_info = { | |||
| 134 | }; | 134 | }; |
| 135 | #endif | 135 | #endif |
| 136 | 136 | ||
| 137 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 137 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 138 | static struct bfin5xx_spi_chip spi_mmc_chip_info = { | 138 | static struct bfin5xx_spi_chip mmc_spi_chip_info = { |
| 139 | .enable_dma = 1, | 139 | .enable_dma = 0, |
| 140 | .bits_per_word = 8, | 140 | .bits_per_word = 8, |
| 141 | }; | 141 | }; |
| 142 | #endif | 142 | #endif |
| @@ -156,23 +156,13 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
| 156 | }, | 156 | }, |
| 157 | #endif | 157 | #endif |
| 158 | 158 | ||
| 159 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 159 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 160 | { | 160 | { |
| 161 | .modalias = "spi_mmc_dummy", | 161 | .modalias = "mmc_spi", |
| 162 | .max_speed_hz = 5000000, /* max spi clock (SCK) speed in HZ */ | 162 | .max_speed_hz = 5000000, /* max spi clock (SCK) speed in HZ */ |
| 163 | .bus_num = 0, | 163 | .bus_num = 0, |
| 164 | .chip_select = 0, | 164 | .chip_select = 5, |
| 165 | .platform_data = NULL, | 165 | .controller_data = &mmc_spi_chip_info, |
| 166 | .controller_data = &spi_mmc_chip_info, | ||
| 167 | .mode = SPI_MODE_3, | ||
| 168 | }, | ||
| 169 | { | ||
| 170 | .modalias = "spi_mmc", | ||
| 171 | .max_speed_hz = 5000000, /* max spi clock (SCK) speed in HZ */ | ||
| 172 | .bus_num = 0, | ||
| 173 | .chip_select = CONFIG_SPI_MMC_CS_CHAN, | ||
| 174 | .platform_data = NULL, | ||
| 175 | .controller_data = &spi_mmc_chip_info, | ||
| 176 | .mode = SPI_MODE_3, | 166 | .mode = SPI_MODE_3, |
| 177 | }, | 167 | }, |
| 178 | #endif | 168 | #endif |
diff --git a/arch/blackfin/mach-bf537/boards/pnav10.c b/arch/blackfin/mach-bf537/boards/pnav10.c index 590eb3a139b7..4e1de1e53f89 100644 --- a/arch/blackfin/mach-bf537/boards/pnav10.c +++ b/arch/blackfin/mach-bf537/boards/pnav10.c | |||
| @@ -289,9 +289,9 @@ static struct bfin5xx_spi_chip ad9960_spi_chip_info = { | |||
| 289 | }; | 289 | }; |
| 290 | #endif | 290 | #endif |
| 291 | 291 | ||
| 292 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 292 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 293 | static struct bfin5xx_spi_chip spi_mmc_chip_info = { | 293 | static struct bfin5xx_spi_chip mmc_spi_chip_info = { |
| 294 | .enable_dma = 1, | 294 | .enable_dma = 0, |
| 295 | .bits_per_word = 8, | 295 | .bits_per_word = 8, |
| 296 | }; | 296 | }; |
| 297 | #endif | 297 | #endif |
| @@ -364,23 +364,13 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
| 364 | .controller_data = &ad9960_spi_chip_info, | 364 | .controller_data = &ad9960_spi_chip_info, |
| 365 | }, | 365 | }, |
| 366 | #endif | 366 | #endif |
| 367 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 367 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 368 | { | ||
| 369 | .modalias = "spi_mmc_dummy", | ||
| 370 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | ||
| 371 | .bus_num = 0, | ||
| 372 | .chip_select = 7, | ||
| 373 | .platform_data = NULL, | ||
| 374 | .controller_data = &spi_mmc_chip_info, | ||
| 375 | .mode = SPI_MODE_3, | ||
| 376 | }, | ||
| 377 | { | 368 | { |
| 378 | .modalias = "spi_mmc", | 369 | .modalias = "mmc_spi", |
| 379 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | 370 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ |
| 380 | .bus_num = 0, | 371 | .bus_num = 0, |
| 381 | .chip_select = CONFIG_SPI_MMC_CS_CHAN, | 372 | .chip_select = 5, |
| 382 | .platform_data = NULL, | 373 | .controller_data = &mmc_spi_chip_info, |
| 383 | .controller_data = &spi_mmc_chip_info, | ||
| 384 | .mode = SPI_MODE_3, | 374 | .mode = SPI_MODE_3, |
| 385 | }, | 375 | }, |
| 386 | #endif | 376 | #endif |
diff --git a/arch/blackfin/mach-bf537/boards/tcm_bf537.c b/arch/blackfin/mach-bf537/boards/tcm_bf537.c index 3f4f203a06ec..53ad10f3cd76 100644 --- a/arch/blackfin/mach-bf537/boards/tcm_bf537.c +++ b/arch/blackfin/mach-bf537/boards/tcm_bf537.c | |||
| @@ -108,9 +108,9 @@ static struct bfin5xx_spi_chip ad9960_spi_chip_info = { | |||
| 108 | }; | 108 | }; |
| 109 | #endif | 109 | #endif |
| 110 | 110 | ||
| 111 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 111 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 112 | static struct bfin5xx_spi_chip spi_mmc_chip_info = { | 112 | static struct bfin5xx_spi_chip mmc_spi_chip_info = { |
| 113 | .enable_dma = 1, | 113 | .enable_dma = 0, |
| 114 | .bits_per_word = 8, | 114 | .bits_per_word = 8, |
| 115 | }; | 115 | }; |
| 116 | #endif | 116 | #endif |
| @@ -160,23 +160,13 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
| 160 | }, | 160 | }, |
| 161 | #endif | 161 | #endif |
| 162 | 162 | ||
| 163 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 163 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 164 | { | ||
| 165 | .modalias = "spi_mmc_dummy", | ||
| 166 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | ||
| 167 | .bus_num = 0, | ||
| 168 | .chip_select = 7, | ||
| 169 | .platform_data = NULL, | ||
| 170 | .controller_data = &spi_mmc_chip_info, | ||
| 171 | .mode = SPI_MODE_3, | ||
| 172 | }, | ||
| 173 | { | 164 | { |
| 174 | .modalias = "spi_mmc", | 165 | .modalias = "mmc_spi", |
| 175 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | 166 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ |
| 176 | .bus_num = 0, | 167 | .bus_num = 0, |
| 177 | .chip_select = CONFIG_SPI_MMC_CS_CHAN, | 168 | .chip_select = 5, |
| 178 | .platform_data = NULL, | 169 | .controller_data = &mmc_spi_chip_info, |
| 179 | .controller_data = &spi_mmc_chip_info, | ||
| 180 | .mode = SPI_MODE_3, | 170 | .mode = SPI_MODE_3, |
| 181 | }, | 171 | }, |
| 182 | #endif | 172 | #endif |
diff --git a/arch/blackfin/mach-bf537/include/mach/anomaly.h b/arch/blackfin/mach-bf537/include/mach/anomaly.h index 9cb39121d1cb..1bfd80c26c90 100644 --- a/arch/blackfin/mach-bf537/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf537/include/mach/anomaly.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * File: include/asm-blackfin/mach-bf537/anomaly.h | 2 | * File: include/asm-blackfin/mach-bf537/anomaly.h |
| 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 2004-2008 Analog Devices Inc. | 5 | * Copyright (C) 2004-2009 Analog Devices Inc. |
| 6 | * Licensed under the GPL-2 or later. | 6 | * Licensed under the GPL-2 or later. |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| @@ -110,7 +110,7 @@ | |||
| 110 | #define ANOMALY_05000301 (1) | 110 | #define ANOMALY_05000301 (1) |
| 111 | /* SSYNCs After Writes To CAN/DMA MMR Registers Are Not Always Handled Correctly */ | 111 | /* SSYNCs After Writes To CAN/DMA MMR Registers Are Not Always Handled Correctly */ |
| 112 | #define ANOMALY_05000304 (__SILICON_REVISION__ < 3) | 112 | #define ANOMALY_05000304 (__SILICON_REVISION__ < 3) |
| 113 | /* New Feature: Additional Hysteresis on SPORT Input Pins (Not Available On Older Silicon) */ | 113 | /* SPORT_HYS Bit in PLL_CTL Register Is Not Functional */ |
| 114 | #define ANOMALY_05000305 (__SILICON_REVISION__ < 3) | 114 | #define ANOMALY_05000305 (__SILICON_REVISION__ < 3) |
| 115 | /* SCKELOW Bit Does Not Maintain State Through Hibernate */ | 115 | /* SCKELOW Bit Does Not Maintain State Through Hibernate */ |
| 116 | #define ANOMALY_05000307 (__SILICON_REVISION__ < 3) | 116 | #define ANOMALY_05000307 (__SILICON_REVISION__ < 3) |
| @@ -168,9 +168,12 @@ | |||
| 168 | #define ANOMALY_05000323 (0) | 168 | #define ANOMALY_05000323 (0) |
| 169 | #define ANOMALY_05000353 (1) | 169 | #define ANOMALY_05000353 (1) |
| 170 | #define ANOMALY_05000363 (0) | 170 | #define ANOMALY_05000363 (0) |
| 171 | #define ANOMALY_05000380 (0) | ||
| 171 | #define ANOMALY_05000386 (1) | 172 | #define ANOMALY_05000386 (1) |
| 172 | #define ANOMALY_05000412 (0) | 173 | #define ANOMALY_05000412 (0) |
| 173 | #define ANOMALY_05000432 (0) | 174 | #define ANOMALY_05000432 (0) |
| 174 | #define ANOMALY_05000435 (0) | 175 | #define ANOMALY_05000435 (0) |
| 176 | #define ANOMALY_05000447 (0) | ||
| 177 | #define ANOMALY_05000448 (0) | ||
| 175 | 178 | ||
| 176 | #endif | 179 | #endif |
diff --git a/arch/blackfin/mach-bf537/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf537/include/mach/bfin_serial_5xx.h index b3f87e1d16a2..9e34700844a2 100644 --- a/arch/blackfin/mach-bf537/include/mach/bfin_serial_5xx.h +++ b/arch/blackfin/mach-bf537/include/mach/bfin_serial_5xx.h | |||
| @@ -144,7 +144,7 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
| 144 | CH_UART0_TX, | 144 | CH_UART0_TX, |
| 145 | CH_UART0_RX, | 145 | CH_UART0_RX, |
| 146 | #endif | 146 | #endif |
| 147 | #ifdef CONFIG_BFIN_UART0_CTSRTS | 147 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS |
| 148 | CONFIG_UART0_CTS_PIN, | 148 | CONFIG_UART0_CTS_PIN, |
| 149 | CONFIG_UART0_RTS_PIN, | 149 | CONFIG_UART0_RTS_PIN, |
| 150 | #endif | 150 | #endif |
| @@ -158,7 +158,7 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
| 158 | CH_UART1_TX, | 158 | CH_UART1_TX, |
| 159 | CH_UART1_RX, | 159 | CH_UART1_RX, |
| 160 | #endif | 160 | #endif |
| 161 | #ifdef CONFIG_BFIN_UART1_CTSRTS | 161 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS |
| 162 | CONFIG_UART1_CTS_PIN, | 162 | CONFIG_UART1_CTS_PIN, |
| 163 | CONFIG_UART1_RTS_PIN, | 163 | CONFIG_UART1_RTS_PIN, |
| 164 | #endif | 164 | #endif |
diff --git a/arch/blackfin/mach-bf538/include/mach/anomaly.h b/arch/blackfin/mach-bf538/include/mach/anomaly.h index e130b4f8a05d..3a5699827363 100644 --- a/arch/blackfin/mach-bf538/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf538/include/mach/anomaly.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * File: include/asm-blackfin/mach-bf538/anomaly.h | 2 | * File: include/asm-blackfin/mach-bf538/anomaly.h |
| 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 2004-2008 Analog Devices Inc. | 5 | * Copyright (C) 2004-2009 Analog Devices Inc. |
| 6 | * Licensed under the GPL-2 or later. | 6 | * Licensed under the GPL-2 or later. |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| @@ -120,13 +120,17 @@ | |||
| 120 | #define ANOMALY_05000198 (0) | 120 | #define ANOMALY_05000198 (0) |
| 121 | #define ANOMALY_05000230 (0) | 121 | #define ANOMALY_05000230 (0) |
| 122 | #define ANOMALY_05000263 (0) | 122 | #define ANOMALY_05000263 (0) |
| 123 | #define ANOMALY_05000305 (0) | ||
| 123 | #define ANOMALY_05000311 (0) | 124 | #define ANOMALY_05000311 (0) |
| 124 | #define ANOMALY_05000323 (0) | 125 | #define ANOMALY_05000323 (0) |
| 125 | #define ANOMALY_05000353 (1) | 126 | #define ANOMALY_05000353 (1) |
| 126 | #define ANOMALY_05000363 (0) | 127 | #define ANOMALY_05000363 (0) |
| 128 | #define ANOMALY_05000380 (0) | ||
| 127 | #define ANOMALY_05000386 (1) | 129 | #define ANOMALY_05000386 (1) |
| 128 | #define ANOMALY_05000412 (0) | 130 | #define ANOMALY_05000412 (0) |
| 129 | #define ANOMALY_05000432 (0) | 131 | #define ANOMALY_05000432 (0) |
| 130 | #define ANOMALY_05000435 (0) | 132 | #define ANOMALY_05000435 (0) |
| 133 | #define ANOMALY_05000447 (0) | ||
| 134 | #define ANOMALY_05000448 (0) | ||
| 131 | 135 | ||
| 132 | #endif | 136 | #endif |
diff --git a/arch/blackfin/mach-bf538/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf538/include/mach/bfin_serial_5xx.h index 40503b6b89a3..3c2811ebecdd 100644 --- a/arch/blackfin/mach-bf538/include/mach/bfin_serial_5xx.h +++ b/arch/blackfin/mach-bf538/include/mach/bfin_serial_5xx.h | |||
| @@ -144,7 +144,7 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
| 144 | CH_UART0_TX, | 144 | CH_UART0_TX, |
| 145 | CH_UART0_RX, | 145 | CH_UART0_RX, |
| 146 | #endif | 146 | #endif |
| 147 | #ifdef CONFIG_BFIN_UART0_CTSRTS | 147 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS |
| 148 | CONFIG_UART0_CTS_PIN, | 148 | CONFIG_UART0_CTS_PIN, |
| 149 | CONFIG_UART0_RTS_PIN, | 149 | CONFIG_UART0_RTS_PIN, |
| 150 | #endif | 150 | #endif |
| @@ -158,7 +158,7 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
| 158 | CH_UART1_TX, | 158 | CH_UART1_TX, |
| 159 | CH_UART1_RX, | 159 | CH_UART1_RX, |
| 160 | #endif | 160 | #endif |
| 161 | #ifdef CONFIG_BFIN_UART1_CTSRTS | 161 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS |
| 162 | CONFIG_UART1_CTS_PIN, | 162 | CONFIG_UART1_CTS_PIN, |
| 163 | CONFIG_UART1_RTS_PIN, | 163 | CONFIG_UART1_RTS_PIN, |
| 164 | #endif | 164 | #endif |
diff --git a/arch/blackfin/mach-bf548/include/mach/anomaly.h b/arch/blackfin/mach-bf548/include/mach/anomaly.h index 23d03c52f4b4..882e40ccf0d1 100644 --- a/arch/blackfin/mach-bf548/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf548/include/mach/anomaly.h | |||
| @@ -2,12 +2,12 @@ | |||
| 2 | * File: include/asm-blackfin/mach-bf548/anomaly.h | 2 | * File: include/asm-blackfin/mach-bf548/anomaly.h |
| 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 2004-2008 Analog Devices Inc. | 5 | * Copyright (C) 2004-2009 Analog Devices Inc. |
| 6 | * Licensed under the GPL-2 or later. | 6 | * Licensed under the GPL-2 or later. |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | /* This file shoule be up to date with: | 9 | /* This file shoule be up to date with: |
| 10 | * - Revision G, 08/07/2008; ADSP-BF542/BF544/BF547/BF548/BF549 Blackfin Processor Anomaly List | 10 | * - Revision H, 01/16/2009; ADSP-BF542/BF544/BF547/BF548/BF549 Blackfin Processor Anomaly List |
| 11 | */ | 11 | */ |
| 12 | 12 | ||
| 13 | #ifndef _MACH_ANOMALY_H_ | 13 | #ifndef _MACH_ANOMALY_H_ |
| @@ -91,8 +91,6 @@ | |||
| 91 | #define ANOMALY_05000371 (__SILICON_REVISION__ < 2) | 91 | #define ANOMALY_05000371 (__SILICON_REVISION__ < 2) |
| 92 | /* USB DP/DM Data Pins May Lose State When Entering Hibernate */ | 92 | /* USB DP/DM Data Pins May Lose State When Entering Hibernate */ |
| 93 | #define ANOMALY_05000372 (__SILICON_REVISION__ < 1) | 93 | #define ANOMALY_05000372 (__SILICON_REVISION__ < 1) |
| 94 | /* Mobile DDR Operation Not Functional */ | ||
| 95 | #define ANOMALY_05000377 (1) | ||
| 96 | /* Security/Authentication Speedpath Causes Authentication To Fail To Initiate */ | 94 | /* Security/Authentication Speedpath Causes Authentication To Fail To Initiate */ |
| 97 | #define ANOMALY_05000378 (__SILICON_REVISION__ < 2) | 95 | #define ANOMALY_05000378 (__SILICON_REVISION__ < 2) |
| 98 | /* 16-Bit NAND FLASH Boot Mode Is Not Functional */ | 96 | /* 16-Bit NAND FLASH Boot Mode Is Not Functional */ |
| @@ -157,8 +155,22 @@ | |||
| 157 | #define ANOMALY_05000429 (__SILICON_REVISION__ < 2) | 155 | #define ANOMALY_05000429 (__SILICON_REVISION__ < 2) |
| 158 | /* Software System Reset Corrupts PLL_LOCKCNT Register */ | 156 | /* Software System Reset Corrupts PLL_LOCKCNT Register */ |
| 159 | #define ANOMALY_05000430 (__SILICON_REVISION__ >= 2) | 157 | #define ANOMALY_05000430 (__SILICON_REVISION__ >= 2) |
| 158 | /* Incorrect Use of Stack in Lockbox Firmware During Authentication */ | ||
| 159 | #define ANOMALY_05000431 (__SILICON_REVISION__ < 3) | ||
| 160 | /* OTP Write Accesses Not Supported */ | ||
| 161 | #define ANOMALY_05000442 (__SILICON_REVISION__ < 1) | ||
| 160 | /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */ | 162 | /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */ |
| 161 | #define ANOMALY_05000443 (1) | 163 | #define ANOMALY_05000443 (1) |
| 164 | /* CDMAPRIO and L2DMAPRIO Bits in the SYSCR Register Are Not Functional */ | ||
| 165 | #define ANOMALY_05000446 (1) | ||
| 166 | /* UART IrDA Receiver Fails on Extended Bit Pulses */ | ||
| 167 | #define ANOMALY_05000447 (1) | ||
| 168 | /* DDR Clock Duty Cycle Spec Violation (tCH, tCL) */ | ||
| 169 | #define ANOMALY_05000448 (__SILICON_REVISION__ == 1) | ||
| 170 | /* Reduced Timing Margins on DDR Output Setup and Hold (tDS and tDH) */ | ||
| 171 | #define ANOMALY_05000449 (__SILICON_REVISION__ == 1) | ||
| 172 | /* USB DMA Mode 1 Short Packet Data Corruption */ | ||
| 173 | #define ANOMALY_05000450 (1 | ||
| 162 | 174 | ||
| 163 | /* Anomalies that don't exist on this proc */ | 175 | /* Anomalies that don't exist on this proc */ |
| 164 | #define ANOMALY_05000125 (0) | 176 | #define ANOMALY_05000125 (0) |
| @@ -171,6 +183,8 @@ | |||
| 171 | #define ANOMALY_05000263 (0) | 183 | #define ANOMALY_05000263 (0) |
| 172 | #define ANOMALY_05000266 (0) | 184 | #define ANOMALY_05000266 (0) |
| 173 | #define ANOMALY_05000273 (0) | 185 | #define ANOMALY_05000273 (0) |
| 186 | #define ANOMALY_05000278 (0) | ||
| 187 | #define ANOMALY_05000305 (0) | ||
| 174 | #define ANOMALY_05000307 (0) | 188 | #define ANOMALY_05000307 (0) |
| 175 | #define ANOMALY_05000311 (0) | 189 | #define ANOMALY_05000311 (0) |
| 176 | #define ANOMALY_05000323 (0) | 190 | #define ANOMALY_05000323 (0) |
diff --git a/arch/blackfin/mach-bf548/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf548/include/mach/bfin_serial_5xx.h index e4cf35e7ab9f..c05e79cba257 100644 --- a/arch/blackfin/mach-bf548/include/mach/bfin_serial_5xx.h +++ b/arch/blackfin/mach-bf548/include/mach/bfin_serial_5xx.h | |||
| @@ -63,7 +63,7 @@ | |||
| 63 | #define UART_ENABLE_INTS(x, v) UART_SET_IER(x, v) | 63 | #define UART_ENABLE_INTS(x, v) UART_SET_IER(x, v) |
| 64 | #define UART_DISABLE_INTS(x) UART_CLEAR_IER(x, 0xF) | 64 | #define UART_DISABLE_INTS(x) UART_CLEAR_IER(x, 0xF) |
| 65 | 65 | ||
| 66 | #if defined(CONFIG_BFIN_UART0_CTSRTS) || defined(CONFIG_BFIN_UART1_CTSRTS) | 66 | #if defined(CONFIG_BFIN_UART0_CTSRTS) || defined(CONFIG_BFIN_UART2_CTSRTS) |
| 67 | # define CONFIG_SERIAL_BFIN_CTSRTS | 67 | # define CONFIG_SERIAL_BFIN_CTSRTS |
| 68 | 68 | ||
| 69 | # ifndef CONFIG_UART0_CTS_PIN | 69 | # ifndef CONFIG_UART0_CTS_PIN |
| @@ -74,12 +74,12 @@ | |||
| 74 | # define CONFIG_UART0_RTS_PIN -1 | 74 | # define CONFIG_UART0_RTS_PIN -1 |
| 75 | # endif | 75 | # endif |
| 76 | 76 | ||
| 77 | # ifndef CONFIG_UART1_CTS_PIN | 77 | # ifndef CONFIG_UART2_CTS_PIN |
| 78 | # define CONFIG_UART1_CTS_PIN -1 | 78 | # define CONFIG_UART2_CTS_PIN -1 |
| 79 | # endif | 79 | # endif |
| 80 | 80 | ||
| 81 | # ifndef CONFIG_UART1_RTS_PIN | 81 | # ifndef CONFIG_UART2_RTS_PIN |
| 82 | # define CONFIG_UART1_RTS_PIN -1 | 82 | # define CONFIG_UART2_RTS_PIN -1 |
| 83 | # endif | 83 | # endif |
| 84 | #endif | 84 | #endif |
| 85 | 85 | ||
| @@ -130,7 +130,7 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
| 130 | CH_UART0_TX, | 130 | CH_UART0_TX, |
| 131 | CH_UART0_RX, | 131 | CH_UART0_RX, |
| 132 | #endif | 132 | #endif |
| 133 | #ifdef CONFIG_BFIN_UART0_CTSRTS | 133 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS |
| 134 | CONFIG_UART0_CTS_PIN, | 134 | CONFIG_UART0_CTS_PIN, |
| 135 | CONFIG_UART0_RTS_PIN, | 135 | CONFIG_UART0_RTS_PIN, |
| 136 | #endif | 136 | #endif |
| @@ -144,6 +144,10 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
| 144 | CH_UART1_TX, | 144 | CH_UART1_TX, |
| 145 | CH_UART1_RX, | 145 | CH_UART1_RX, |
| 146 | #endif | 146 | #endif |
| 147 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS | ||
| 148 | 0, | ||
| 149 | 0, | ||
| 150 | #endif | ||
| 147 | }, | 151 | }, |
| 148 | #endif | 152 | #endif |
| 149 | #ifdef CONFIG_SERIAL_BFIN_UART2 | 153 | #ifdef CONFIG_SERIAL_BFIN_UART2 |
| @@ -154,7 +158,7 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
| 154 | CH_UART2_TX, | 158 | CH_UART2_TX, |
| 155 | CH_UART2_RX, | 159 | CH_UART2_RX, |
| 156 | #endif | 160 | #endif |
| 157 | #ifdef CONFIG_BFIN_UART2_CTSRTS | 161 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS |
| 158 | CONFIG_UART2_CTS_PIN, | 162 | CONFIG_UART2_CTS_PIN, |
| 159 | CONFIG_UART2_RTS_PIN, | 163 | CONFIG_UART2_RTS_PIN, |
| 160 | #endif | 164 | #endif |
| @@ -168,6 +172,10 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
| 168 | CH_UART3_TX, | 172 | CH_UART3_TX, |
| 169 | CH_UART3_RX, | 173 | CH_UART3_RX, |
| 170 | #endif | 174 | #endif |
| 175 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS | ||
| 176 | 0, | ||
| 177 | 0, | ||
| 178 | #endif | ||
| 171 | }, | 179 | }, |
| 172 | #endif | 180 | #endif |
| 173 | }; | 181 | }; |
diff --git a/arch/blackfin/mach-bf548/include/mach/irq.h b/arch/blackfin/mach-bf548/include/mach/irq.h index 60299a71e090..f194625f6821 100644 --- a/arch/blackfin/mach-bf548/include/mach/irq.h +++ b/arch/blackfin/mach-bf548/include/mach/irq.h | |||
| @@ -123,8 +123,8 @@ Events (highest priority) EMU 0 | |||
| 123 | #define IRQ_MXVR_ERROR BFIN_IRQ(51) /* MXVR Status (Error) Interrupt */ | 123 | #define IRQ_MXVR_ERROR BFIN_IRQ(51) /* MXVR Status (Error) Interrupt */ |
| 124 | #define IRQ_MXVR_MSG BFIN_IRQ(52) /* MXVR Message Interrupt */ | 124 | #define IRQ_MXVR_MSG BFIN_IRQ(52) /* MXVR Message Interrupt */ |
| 125 | #define IRQ_MXVR_PKT BFIN_IRQ(53) /* MXVR Packet Interrupt */ | 125 | #define IRQ_MXVR_PKT BFIN_IRQ(53) /* MXVR Packet Interrupt */ |
| 126 | #define IRQ_EPP1_ERROR BFIN_IRQ(54) /* EPPI1 Error Interrupt */ | 126 | #define IRQ_EPPI1_ERROR BFIN_IRQ(54) /* EPPI1 Error Interrupt */ |
| 127 | #define IRQ_EPP2_ERROR BFIN_IRQ(55) /* EPPI2 Error Interrupt */ | 127 | #define IRQ_EPPI2_ERROR BFIN_IRQ(55) /* EPPI2 Error Interrupt */ |
| 128 | #define IRQ_UART3_ERROR BFIN_IRQ(56) /* UART3 Status (Error) Interrupt */ | 128 | #define IRQ_UART3_ERROR BFIN_IRQ(56) /* UART3 Status (Error) Interrupt */ |
| 129 | #define IRQ_HOST_ERROR BFIN_IRQ(57) /* HOST Status (Error) Interrupt */ | 129 | #define IRQ_HOST_ERROR BFIN_IRQ(57) /* HOST Status (Error) Interrupt */ |
| 130 | #define IRQ_PIXC_ERROR BFIN_IRQ(59) /* PIXC Status (Error) Interrupt */ | 130 | #define IRQ_PIXC_ERROR BFIN_IRQ(59) /* PIXC Status (Error) Interrupt */ |
| @@ -361,8 +361,8 @@ Events (highest priority) EMU 0 | |||
| 361 | #define IRQ_UART2_ERR IRQ_UART2_ERROR | 361 | #define IRQ_UART2_ERR IRQ_UART2_ERROR |
| 362 | #define IRQ_CAN0_ERR IRQ_CAN0_ERROR | 362 | #define IRQ_CAN0_ERR IRQ_CAN0_ERROR |
| 363 | #define IRQ_MXVR_ERR IRQ_MXVR_ERROR | 363 | #define IRQ_MXVR_ERR IRQ_MXVR_ERROR |
| 364 | #define IRQ_EPP1_ERR IRQ_EPP1_ERROR | 364 | #define IRQ_EPPI1_ERR IRQ_EPPI1_ERROR |
| 365 | #define IRQ_EPP2_ERR IRQ_EPP2_ERROR | 365 | #define IRQ_EPPI2_ERR IRQ_EPPI2_ERROR |
| 366 | #define IRQ_UART3_ERR IRQ_UART3_ERROR | 366 | #define IRQ_UART3_ERR IRQ_UART3_ERROR |
| 367 | #define IRQ_HOST_ERR IRQ_HOST_ERROR | 367 | #define IRQ_HOST_ERR IRQ_HOST_ERROR |
| 368 | #define IRQ_PIXC_ERR IRQ_PIXC_ERROR | 368 | #define IRQ_PIXC_ERR IRQ_PIXC_ERROR |
diff --git a/arch/blackfin/mach-bf561/boards/Kconfig b/arch/blackfin/mach-bf561/boards/Kconfig index e41a67b1fb53..e4bc6d7c5a6a 100644 --- a/arch/blackfin/mach-bf561/boards/Kconfig +++ b/arch/blackfin/mach-bf561/boards/Kconfig | |||
| @@ -19,9 +19,4 @@ config BFIN561_BLUETECHNIX_CM | |||
| 19 | help | 19 | help |
| 20 | CM-BF561 support for EVAL- and DEV-Board. | 20 | CM-BF561 support for EVAL- and DEV-Board. |
| 21 | 21 | ||
| 22 | config GENERIC_BF561_BOARD | ||
| 23 | bool "Generic" | ||
| 24 | help | ||
| 25 | Generic or Custom board support. | ||
| 26 | |||
| 27 | endchoice | 22 | endchoice |
diff --git a/arch/blackfin/mach-bf561/boards/Makefile b/arch/blackfin/mach-bf561/boards/Makefile index 04add010b568..3a152559e957 100644 --- a/arch/blackfin/mach-bf561/boards/Makefile +++ b/arch/blackfin/mach-bf561/boards/Makefile | |||
| @@ -2,7 +2,6 @@ | |||
| 2 | # arch/blackfin/mach-bf561/boards/Makefile | 2 | # arch/blackfin/mach-bf561/boards/Makefile |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-$(CONFIG_GENERIC_BF561_BOARD) += generic_board.o | ||
| 6 | obj-$(CONFIG_BFIN561_BLUETECHNIX_CM) += cm_bf561.o | 5 | obj-$(CONFIG_BFIN561_BLUETECHNIX_CM) += cm_bf561.o |
| 7 | obj-$(CONFIG_BFIN561_EZKIT) += ezkit.o | 6 | obj-$(CONFIG_BFIN561_EZKIT) += ezkit.o |
| 8 | obj-$(CONFIG_BFIN561_TEPLA) += tepla.o | 7 | obj-$(CONFIG_BFIN561_TEPLA) += tepla.o |
diff --git a/arch/blackfin/mach-bf561/boards/cm_bf561.c b/arch/blackfin/mach-bf561/boards/cm_bf561.c index 6880d1ebfe60..f623c6b0719f 100644 --- a/arch/blackfin/mach-bf561/boards/cm_bf561.c +++ b/arch/blackfin/mach-bf561/boards/cm_bf561.c | |||
| @@ -105,9 +105,9 @@ static struct bfin5xx_spi_chip ad9960_spi_chip_info = { | |||
| 105 | }; | 105 | }; |
| 106 | #endif | 106 | #endif |
| 107 | 107 | ||
| 108 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 108 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 109 | static struct bfin5xx_spi_chip spi_mmc_chip_info = { | 109 | static struct bfin5xx_spi_chip mmc_spi_chip_info = { |
| 110 | .enable_dma = 1, | 110 | .enable_dma = 0, |
| 111 | .bits_per_word = 8, | 111 | .bits_per_word = 8, |
| 112 | }; | 112 | }; |
| 113 | #endif | 113 | #endif |
| @@ -155,14 +155,13 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
| 155 | .controller_data = &ad9960_spi_chip_info, | 155 | .controller_data = &ad9960_spi_chip_info, |
| 156 | }, | 156 | }, |
| 157 | #endif | 157 | #endif |
| 158 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | 158 | #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) |
| 159 | { | 159 | { |
| 160 | .modalias = "spi_mmc", | 160 | .modalias = "mmc_spi", |
| 161 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | 161 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ |
| 162 | .bus_num = 0, | 162 | .bus_num = 0, |
| 163 | .chip_select = CONFIG_SPI_MMC_CS_CHAN, | 163 | .chip_select = 5, |
| 164 | .platform_data = NULL, | 164 | .controller_data = &mmc_spi_chip_info, |
| 165 | .controller_data = &spi_mmc_chip_info, | ||
| 166 | .mode = SPI_MODE_3, | 165 | .mode = SPI_MODE_3, |
| 167 | }, | 166 | }, |
| 168 | #endif | 167 | #endif |
diff --git a/arch/blackfin/mach-bf561/boards/generic_board.c b/arch/blackfin/mach-bf561/boards/generic_board.c deleted file mode 100644 index 0ba366a0e696..000000000000 --- a/arch/blackfin/mach-bf561/boards/generic_board.c +++ /dev/null | |||
| @@ -1,113 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * File: arch/blackfin/mach-bf561/generic_board.c | ||
| 3 | * Based on: arch/blackfin/mach-bf533/ezkit.c | ||
| 4 | * Author: Aidan Williams <aidan@nicta.com.au> | ||
| 5 | * | ||
| 6 | * Created: | ||
| 7 | * Description: | ||
| 8 | * | ||
| 9 | * Modified: | ||
| 10 | * Copyright 2005 National ICT Australia (NICTA) | ||
| 11 | * Copyright 2004-2006 Analog Devices Inc. | ||
| 12 | * | ||
| 13 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | ||
| 14 | * | ||
| 15 | * This program is free software; you can redistribute it and/or modify | ||
| 16 | * it under the terms of the GNU General Public License as published by | ||
| 17 | * the Free Software Foundation; either version 2 of the License, or | ||
| 18 | * (at your option) any later version. | ||
| 19 | * | ||
| 20 | * This program is distributed in the hope that it will be useful, | ||
| 21 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 22 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 23 | * GNU General Public License for more details. | ||
| 24 | * | ||
| 25 | * You should have received a copy of the GNU General Public License | ||
| 26 | * along with this program; if not, see the file COPYING, or write | ||
| 27 | * to the Free Software Foundation, Inc., | ||
| 28 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 29 | */ | ||
| 30 | |||
| 31 | #include <linux/device.h> | ||
| 32 | #include <linux/platform_device.h> | ||
| 33 | #include <linux/irq.h> | ||
| 34 | |||
| 35 | const char bfin_board_name[] = "UNKNOWN BOARD"; | ||
| 36 | |||
| 37 | /* | ||
| 38 | * Driver needs to know address, irq and flag pin. | ||
| 39 | */ | ||
| 40 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) | ||
| 41 | static struct resource smc91x_resources[] = { | ||
| 42 | { | ||
| 43 | .start = 0x2C010300, | ||
| 44 | .end = 0x2C010300 + 16, | ||
| 45 | .flags = IORESOURCE_MEM, | ||
| 46 | }, { | ||
| 47 | .start = IRQ_PROG_INTB, | ||
| 48 | .end = IRQ_PROG_INTB, | ||
| 49 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, | ||
| 50 | }, { | ||
| 51 | .start = IRQ_PF9, | ||
| 52 | .end = IRQ_PF9, | ||
| 53 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, | ||
| 54 | }, | ||
| 55 | }; | ||
| 56 | |||
| 57 | static struct platform_device smc91x_device = { | ||
| 58 | .name = "smc91x", | ||
| 59 | .id = 0, | ||
| 60 | .num_resources = ARRAY_SIZE(smc91x_resources), | ||
| 61 | .resource = smc91x_resources, | ||
| 62 | }; | ||
| 63 | #endif | ||
| 64 | |||
| 65 | #if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE) | ||
| 66 | #ifdef CONFIG_BFIN_SIR0 | ||
| 67 | static struct resource bfin_sir0_resources[] = { | ||
| 68 | { | ||
| 69 | .start = 0xFFC00400, | ||
| 70 | .end = 0xFFC004FF, | ||
| 71 | .flags = IORESOURCE_MEM, | ||
| 72 | }, | ||
| 73 | { | ||
| 74 | .start = IRQ_UART0_RX, | ||
| 75 | .end = IRQ_UART0_RX+1, | ||
| 76 | .flags = IORESOURCE_IRQ, | ||
| 77 | }, | ||
| 78 | { | ||
| 79 | .start = CH_UART0_RX, | ||
| 80 | .end = CH_UART0_RX+1, | ||
| 81 | .flags = IORESOURCE_DMA, | ||
| 82 | }, | ||
| 83 | }; | ||
| 84 | |||
| 85 | static struct platform_device bfin_sir0_device = { | ||
| 86 | .name = "bfin_sir", | ||
| 87 | .id = 0, | ||
| 88 | .num_resources = ARRAY_SIZE(bfin_sir0_resources), | ||
| 89 | .resource = bfin_sir0_resources, | ||
| 90 | }; | ||
| 91 | #endif | ||
| 92 | #endif | ||
| 93 | |||
| 94 | static struct platform_device *generic_board_devices[] __initdata = { | ||
| 95 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) | ||
| 96 | &smc91x_device, | ||
| 97 | #endif | ||
| 98 | |||
| 99 | #if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE) | ||
| 100 | #ifdef CONFIG_BFIN_SIR0 | ||
| 101 | &bfin_sir0_device, | ||
| 102 | #endif | ||
| 103 | #endif | ||
| 104 | }; | ||
| 105 | |||
| 106 | static int __init generic_board_init(void) | ||
| 107 | { | ||
| 108 | printk(KERN_INFO "%s(): registering device resources\n", __func__); | ||
| 109 | return platform_add_devices(generic_board_devices, | ||
| 110 | ARRAY_SIZE(generic_board_devices)); | ||
| 111 | } | ||
| 112 | |||
| 113 | arch_initcall(generic_board_init); | ||
diff --git a/arch/blackfin/mach-bf561/include/mach/anomaly.h b/arch/blackfin/mach-bf561/include/mach/anomaly.h index 1a9e17562821..d0b0b3506440 100644 --- a/arch/blackfin/mach-bf561/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf561/include/mach/anomaly.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * File: include/asm-blackfin/mach-bf561/anomaly.h | 2 | * File: include/asm-blackfin/mach-bf561/anomaly.h |
| 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 2004-2008 Analog Devices Inc. | 5 | * Copyright (C) 2004-2009 Analog Devices Inc. |
| 6 | * Licensed under the GPL-2 or later. | 6 | * Licensed under the GPL-2 or later. |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| @@ -224,7 +224,7 @@ | |||
| 224 | #define ANOMALY_05000301 (1) | 224 | #define ANOMALY_05000301 (1) |
| 225 | /* SSYNCs After Writes To DMA MMR Registers May Not Be Handled Correctly */ | 225 | /* SSYNCs After Writes To DMA MMR Registers May Not Be Handled Correctly */ |
| 226 | #define ANOMALY_05000302 (1) | 226 | #define ANOMALY_05000302 (1) |
| 227 | /* New Feature: Additional Hysteresis on SPORT Input Pins (Not Available On Older Silicon) */ | 227 | /* SPORT_HYS Bit in PLL_CTL Register Is Not Functional */ |
| 228 | #define ANOMALY_05000305 (__SILICON_REVISION__ < 5) | 228 | #define ANOMALY_05000305 (__SILICON_REVISION__ < 5) |
| 229 | /* SCKELOW Bit Does Not Maintain State Through Hibernate */ | 229 | /* SCKELOW Bit Does Not Maintain State Through Hibernate */ |
| 230 | #define ANOMALY_05000307 (__SILICON_REVISION__ < 5) | 230 | #define ANOMALY_05000307 (__SILICON_REVISION__ < 5) |
| @@ -283,8 +283,11 @@ | |||
| 283 | #define ANOMALY_05000273 (0) | 283 | #define ANOMALY_05000273 (0) |
| 284 | #define ANOMALY_05000311 (0) | 284 | #define ANOMALY_05000311 (0) |
| 285 | #define ANOMALY_05000353 (1) | 285 | #define ANOMALY_05000353 (1) |
| 286 | #define ANOMALY_05000380 (0) | ||
| 286 | #define ANOMALY_05000386 (1) | 287 | #define ANOMALY_05000386 (1) |
| 287 | #define ANOMALY_05000432 (0) | 288 | #define ANOMALY_05000432 (0) |
| 288 | #define ANOMALY_05000435 (0) | 289 | #define ANOMALY_05000435 (0) |
| 290 | #define ANOMALY_05000447 (0) | ||
| 291 | #define ANOMALY_05000448 (0) | ||
| 289 | 292 | ||
| 290 | #endif | 293 | #endif |
diff --git a/arch/blackfin/mach-bf561/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf561/include/mach/bfin_serial_5xx.h index 043bfcf26c52..ca8c5f645209 100644 --- a/arch/blackfin/mach-bf561/include/mach/bfin_serial_5xx.h +++ b/arch/blackfin/mach-bf561/include/mach/bfin_serial_5xx.h | |||
| @@ -134,7 +134,7 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
| 134 | CH_UART_TX, | 134 | CH_UART_TX, |
| 135 | CH_UART_RX, | 135 | CH_UART_RX, |
| 136 | #endif | 136 | #endif |
| 137 | #ifdef CONFIG_BFIN_UART0_CTSRTS | 137 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS |
| 138 | CONFIG_UART0_CTS_PIN, | 138 | CONFIG_UART0_CTS_PIN, |
| 139 | CONFIG_UART0_RTS_PIN, | 139 | CONFIG_UART0_RTS_PIN, |
| 140 | #endif | 140 | #endif |
diff --git a/arch/blackfin/mach-common/arch_checks.c b/arch/blackfin/mach-common/arch_checks.c index 98133b968f7b..80d39b2f9db2 100644 --- a/arch/blackfin/mach-common/arch_checks.c +++ b/arch/blackfin/mach-common/arch_checks.c | |||
| @@ -62,3 +62,12 @@ | |||
| 62 | #if (CONFIG_BOOT_LOAD & 0x3) | 62 | #if (CONFIG_BOOT_LOAD & 0x3) |
| 63 | # error "The kernel load address must be 4 byte aligned" | 63 | # error "The kernel load address must be 4 byte aligned" |
| 64 | #endif | 64 | #endif |
| 65 | |||
| 66 | /* The entire kernel must be able to make a 24bit pcrel call to start of L1 */ | ||
| 67 | #if ((0xffffffff - L1_CODE_START + 1) + CONFIG_BOOT_LOAD) > 0x1000000 | ||
| 68 | # error "The kernel load address is too high; keep it below 10meg for safety" | ||
| 69 | #endif | ||
| 70 | |||
| 71 | #if ANOMALY_05000448 | ||
| 72 | # error You are using a part with anomaly 05000448, this issue causes random memory read/write failures - that means random crashes. | ||
| 73 | #endif | ||
diff --git a/arch/blackfin/mach-common/cache.S b/arch/blackfin/mach-common/cache.S index 3c98dacbf289..aa0648c6a9fe 100644 --- a/arch/blackfin/mach-common/cache.S +++ b/arch/blackfin/mach-common/cache.S | |||
| @@ -66,11 +66,33 @@ | |||
| 66 | 66 | ||
| 67 | /* Invalidate all instruction cache lines assocoiated with this memory area */ | 67 | /* Invalidate all instruction cache lines assocoiated with this memory area */ |
| 68 | ENTRY(_blackfin_icache_flush_range) | 68 | ENTRY(_blackfin_icache_flush_range) |
| 69 | /* | ||
| 70 | * Walkaround to avoid loading wrong instruction after invalidating icache | ||
| 71 | * and following sequence is met. | ||
| 72 | * | ||
| 73 | * 1) One instruction address is cached in the instruction cache. | ||
| 74 | * 2) This instruction in SDRAM is changed. | ||
| 75 | * 3) IFLASH[P0] is executed only once in blackfin_icache_flush_range(). | ||
| 76 | * 4) This instruction is executed again, but the old one is loaded. | ||
| 77 | */ | ||
| 78 | P0 = R0; | ||
| 79 | IFLUSH[P0]; | ||
| 69 | do_flush IFLUSH, , nop | 80 | do_flush IFLUSH, , nop |
| 70 | ENDPROC(_blackfin_icache_flush_range) | 81 | ENDPROC(_blackfin_icache_flush_range) |
| 71 | 82 | ||
| 72 | /* Flush all cache lines assocoiated with this area of memory. */ | 83 | /* Flush all cache lines assocoiated with this area of memory. */ |
| 73 | ENTRY(_blackfin_icache_dcache_flush_range) | 84 | ENTRY(_blackfin_icache_dcache_flush_range) |
| 85 | /* | ||
| 86 | * Walkaround to avoid loading wrong instruction after invalidating icache | ||
| 87 | * and following sequence is met. | ||
| 88 | * | ||
| 89 | * 1) One instruction address is cached in the instruction cache. | ||
| 90 | * 2) This instruction in SDRAM is changed. | ||
| 91 | * 3) IFLASH[P0] is executed only once in blackfin_icache_flush_range(). | ||
| 92 | * 4) This instruction is executed again, but the old one is loaded. | ||
| 93 | */ | ||
| 94 | P0 = R0; | ||
| 95 | IFLUSH[P0]; | ||
| 74 | do_flush FLUSH, IFLUSH | 96 | do_flush FLUSH, IFLUSH |
| 75 | ENDPROC(_blackfin_icache_dcache_flush_range) | 97 | ENDPROC(_blackfin_icache_dcache_flush_range) |
| 76 | 98 | ||
diff --git a/arch/blackfin/mach-common/clocks-init.c b/arch/blackfin/mach-common/clocks-init.c index 9dddb6f8cc85..35393651359b 100644 --- a/arch/blackfin/mach-common/clocks-init.c +++ b/arch/blackfin/mach-common/clocks-init.c | |||
| @@ -17,7 +17,7 @@ | |||
| 17 | #define SDGCTL_WIDTH (1 << 31) /* SDRAM external data path width */ | 17 | #define SDGCTL_WIDTH (1 << 31) /* SDRAM external data path width */ |
| 18 | #define PLL_CTL_VAL \ | 18 | #define PLL_CTL_VAL \ |
| 19 | (((CONFIG_VCO_MULT & 63) << 9) | CLKIN_HALF | \ | 19 | (((CONFIG_VCO_MULT & 63) << 9) | CLKIN_HALF | \ |
| 20 | (PLL_BYPASS << 8) | (ANOMALY_05000265 ? 0x8000 : 0)) | 20 | (PLL_BYPASS << 8) | (ANOMALY_05000305 ? 0 : 0x8000)) |
| 21 | 21 | ||
| 22 | __attribute__((l1_text)) | 22 | __attribute__((l1_text)) |
| 23 | static void do_sync(void) | 23 | static void do_sync(void) |
diff --git a/arch/blackfin/mach-common/dpmc_modes.S b/arch/blackfin/mach-common/dpmc_modes.S index 4da50bcd9300..8009a512fb11 100644 --- a/arch/blackfin/mach-common/dpmc_modes.S +++ b/arch/blackfin/mach-common/dpmc_modes.S | |||
| @@ -376,10 +376,22 @@ ENTRY(_do_hibernate) | |||
| 376 | #endif | 376 | #endif |
| 377 | 377 | ||
| 378 | #ifdef PINT0_ASSIGN | 378 | #ifdef PINT0_ASSIGN |
| 379 | PM_SYS_PUSH(PINT0_MASK_SET) | ||
| 380 | PM_SYS_PUSH(PINT1_MASK_SET) | ||
| 381 | PM_SYS_PUSH(PINT2_MASK_SET) | ||
| 382 | PM_SYS_PUSH(PINT3_MASK_SET) | ||
| 379 | PM_SYS_PUSH(PINT0_ASSIGN) | 383 | PM_SYS_PUSH(PINT0_ASSIGN) |
| 380 | PM_SYS_PUSH(PINT1_ASSIGN) | 384 | PM_SYS_PUSH(PINT1_ASSIGN) |
| 381 | PM_SYS_PUSH(PINT2_ASSIGN) | 385 | PM_SYS_PUSH(PINT2_ASSIGN) |
| 382 | PM_SYS_PUSH(PINT3_ASSIGN) | 386 | PM_SYS_PUSH(PINT3_ASSIGN) |
| 387 | PM_SYS_PUSH(PINT0_INVERT_SET) | ||
| 388 | PM_SYS_PUSH(PINT1_INVERT_SET) | ||
| 389 | PM_SYS_PUSH(PINT2_INVERT_SET) | ||
| 390 | PM_SYS_PUSH(PINT3_INVERT_SET) | ||
| 391 | PM_SYS_PUSH(PINT0_EDGE_SET) | ||
| 392 | PM_SYS_PUSH(PINT1_EDGE_SET) | ||
| 393 | PM_SYS_PUSH(PINT2_EDGE_SET) | ||
| 394 | PM_SYS_PUSH(PINT3_EDGE_SET) | ||
| 383 | #endif | 395 | #endif |
| 384 | 396 | ||
| 385 | PM_SYS_PUSH(EBIU_AMBCTL0) | 397 | PM_SYS_PUSH(EBIU_AMBCTL0) |
| @@ -714,10 +726,22 @@ ENTRY(_do_hibernate) | |||
| 714 | PM_SYS_POP(EBIU_AMBCTL0) | 726 | PM_SYS_POP(EBIU_AMBCTL0) |
| 715 | 727 | ||
| 716 | #ifdef PINT0_ASSIGN | 728 | #ifdef PINT0_ASSIGN |
| 729 | PM_SYS_POP(PINT3_EDGE_SET) | ||
| 730 | PM_SYS_POP(PINT2_EDGE_SET) | ||
| 731 | PM_SYS_POP(PINT1_EDGE_SET) | ||
| 732 | PM_SYS_POP(PINT0_EDGE_SET) | ||
| 733 | PM_SYS_POP(PINT3_INVERT_SET) | ||
| 734 | PM_SYS_POP(PINT2_INVERT_SET) | ||
| 735 | PM_SYS_POP(PINT1_INVERT_SET) | ||
| 736 | PM_SYS_POP(PINT0_INVERT_SET) | ||
| 717 | PM_SYS_POP(PINT3_ASSIGN) | 737 | PM_SYS_POP(PINT3_ASSIGN) |
| 718 | PM_SYS_POP(PINT2_ASSIGN) | 738 | PM_SYS_POP(PINT2_ASSIGN) |
| 719 | PM_SYS_POP(PINT1_ASSIGN) | 739 | PM_SYS_POP(PINT1_ASSIGN) |
| 720 | PM_SYS_POP(PINT0_ASSIGN) | 740 | PM_SYS_POP(PINT0_ASSIGN) |
| 741 | PM_SYS_POP(PINT3_MASK_SET) | ||
| 742 | PM_SYS_POP(PINT2_MASK_SET) | ||
| 743 | PM_SYS_POP(PINT1_MASK_SET) | ||
| 744 | PM_SYS_POP(PINT0_MASK_SET) | ||
| 721 | #endif | 745 | #endif |
| 722 | 746 | ||
| 723 | #ifdef SICA_IWR1 | 747 | #ifdef SICA_IWR1 |
diff --git a/arch/blackfin/mach-common/entry.S b/arch/blackfin/mach-common/entry.S index 88de053bbe8e..21e65a339a22 100644 --- a/arch/blackfin/mach-common/entry.S +++ b/arch/blackfin/mach-common/entry.S | |||
| @@ -600,6 +600,19 @@ ENTRY(_system_call) | |||
| 600 | p2 = [p2]; | 600 | p2 = [p2]; |
| 601 | 601 | ||
| 602 | [p2+(TASK_THREAD+THREAD_KSP)] = sp; | 602 | [p2+(TASK_THREAD+THREAD_KSP)] = sp; |
| 603 | #ifdef CONFIG_IPIPE | ||
| 604 | r0 = sp; | ||
| 605 | SP += -12; | ||
| 606 | call ___ipipe_syscall_root; | ||
| 607 | SP += 12; | ||
| 608 | cc = r0 == 1; | ||
| 609 | if cc jump .Lsyscall_really_exit; | ||
| 610 | cc = r0 == -1; | ||
| 611 | if cc jump .Lresume_userspace; | ||
| 612 | r3 = [sp + PT_R3]; | ||
| 613 | r4 = [sp + PT_R4]; | ||
| 614 | p0 = [sp + PT_ORIG_P0]; | ||
| 615 | #endif /* CONFIG_IPIPE */ | ||
| 603 | 616 | ||
| 604 | /* Check the System Call */ | 617 | /* Check the System Call */ |
| 605 | r7 = __NR_syscall; | 618 | r7 = __NR_syscall; |
| @@ -654,6 +667,17 @@ ENTRY(_system_call) | |||
| 654 | r7 = r7 & r4; | 667 | r7 = r7 & r4; |
| 655 | 668 | ||
| 656 | .Lsyscall_resched: | 669 | .Lsyscall_resched: |
| 670 | #ifdef CONFIG_IPIPE | ||
| 671 | cc = BITTST(r7, TIF_IRQ_SYNC); | ||
| 672 | if !cc jump .Lsyscall_no_irqsync; | ||
| 673 | [--sp] = reti; | ||
| 674 | r0 = [sp++]; | ||
| 675 | SP += -12; | ||
| 676 | call ___ipipe_sync_root; | ||
| 677 | SP += 12; | ||
| 678 | jump .Lresume_userspace_1; | ||
| 679 | .Lsyscall_no_irqsync: | ||
| 680 | #endif | ||
| 657 | cc = BITTST(r7, TIF_NEED_RESCHED); | 681 | cc = BITTST(r7, TIF_NEED_RESCHED); |
| 658 | if !cc jump .Lsyscall_sigpending; | 682 | if !cc jump .Lsyscall_sigpending; |
| 659 | 683 | ||
| @@ -685,6 +709,10 @@ ENTRY(_system_call) | |||
| 685 | .Lsyscall_really_exit: | 709 | .Lsyscall_really_exit: |
| 686 | r5 = [sp + PT_RESERVED]; | 710 | r5 = [sp + PT_RESERVED]; |
| 687 | rets = r5; | 711 | rets = r5; |
| 712 | #ifdef CONFIG_IPIPE | ||
| 713 | [--sp] = reti; | ||
| 714 | r5 = [sp++]; | ||
| 715 | #endif /* CONFIG_IPIPE */ | ||
| 688 | rts; | 716 | rts; |
| 689 | ENDPROC(_system_call) | 717 | ENDPROC(_system_call) |
| 690 | 718 | ||
| @@ -771,6 +799,15 @@ _new_old_task: | |||
| 771 | ENDPROC(_resume) | 799 | ENDPROC(_resume) |
| 772 | 800 | ||
| 773 | ENTRY(_ret_from_exception) | 801 | ENTRY(_ret_from_exception) |
| 802 | #ifdef CONFIG_IPIPE | ||
| 803 | [--sp] = rets; | ||
| 804 | SP += -12; | ||
| 805 | call ___ipipe_check_root | ||
| 806 | SP += 12 | ||
| 807 | rets = [sp++]; | ||
| 808 | cc = r0 == 0; | ||
| 809 | if cc jump 4f; /* not on behalf of Linux, get out */ | ||
| 810 | #endif /* CONFIG_IPIPE */ | ||
| 774 | p2.l = lo(IPEND); | 811 | p2.l = lo(IPEND); |
| 775 | p2.h = hi(IPEND); | 812 | p2.h = hi(IPEND); |
| 776 | 813 | ||
| @@ -827,6 +864,28 @@ ENTRY(_ret_from_exception) | |||
| 827 | rts; | 864 | rts; |
| 828 | ENDPROC(_ret_from_exception) | 865 | ENDPROC(_ret_from_exception) |
| 829 | 866 | ||
| 867 | #ifdef CONFIG_IPIPE | ||
| 868 | |||
| 869 | _sync_root_irqs: | ||
| 870 | [--sp] = reti; /* Reenable interrupts */ | ||
| 871 | r0 = [sp++]; | ||
| 872 | jump.l ___ipipe_sync_root | ||
| 873 | |||
| 874 | _resume_kernel_from_int: | ||
| 875 | r0.l = _sync_root_irqs | ||
| 876 | r0.h = _sync_root_irqs | ||
| 877 | [--sp] = rets; | ||
| 878 | [--sp] = ( r7:4, p5:3 ); | ||
| 879 | SP += -12; | ||
| 880 | call ___ipipe_call_irqtail | ||
| 881 | SP += 12; | ||
| 882 | ( r7:4, p5:3 ) = [sp++]; | ||
| 883 | rets = [sp++]; | ||
| 884 | rts | ||
| 885 | #else | ||
| 886 | #define _resume_kernel_from_int 2f | ||
| 887 | #endif | ||
| 888 | |||
| 830 | ENTRY(_return_from_int) | 889 | ENTRY(_return_from_int) |
| 831 | /* If someone else already raised IRQ 15, do nothing. */ | 890 | /* If someone else already raised IRQ 15, do nothing. */ |
| 832 | csync; | 891 | csync; |
| @@ -848,7 +907,7 @@ ENTRY(_return_from_int) | |||
| 848 | r1 = r0 - r1; | 907 | r1 = r0 - r1; |
| 849 | r2 = r0 & r1; | 908 | r2 = r0 & r1; |
| 850 | cc = r2 == 0; | 909 | cc = r2 == 0; |
| 851 | if !cc jump 2f; | 910 | if !cc jump _resume_kernel_from_int; |
| 852 | 911 | ||
| 853 | /* Lower the interrupt level to 15. */ | 912 | /* Lower the interrupt level to 15. */ |
| 854 | p0.l = lo(EVT15); | 913 | p0.l = lo(EVT15); |
diff --git a/arch/blackfin/mach-common/interrupt.S b/arch/blackfin/mach-common/interrupt.S index 43c4eb9acb65..0069c2dd4625 100644 --- a/arch/blackfin/mach-common/interrupt.S +++ b/arch/blackfin/mach-common/interrupt.S | |||
| @@ -235,6 +235,7 @@ ENDPROC(_evt_system_call) | |||
| 235 | 235 | ||
| 236 | #ifdef CONFIG_IPIPE | 236 | #ifdef CONFIG_IPIPE |
| 237 | ENTRY(___ipipe_call_irqtail) | 237 | ENTRY(___ipipe_call_irqtail) |
| 238 | p0 = r0; | ||
| 238 | r0.l = 1f; | 239 | r0.l = 1f; |
| 239 | r0.h = 1f; | 240 | r0.h = 1f; |
| 240 | reti = r0; | 241 | reti = r0; |
| @@ -242,9 +243,6 @@ ENTRY(___ipipe_call_irqtail) | |||
| 242 | 1: | 243 | 1: |
| 243 | [--sp] = rets; | 244 | [--sp] = rets; |
| 244 | [--sp] = ( r7:4, p5:3 ); | 245 | [--sp] = ( r7:4, p5:3 ); |
| 245 | p0.l = ___ipipe_irq_tail_hook; | ||
| 246 | p0.h = ___ipipe_irq_tail_hook; | ||
| 247 | p0 = [p0]; | ||
| 248 | sp += -12; | 246 | sp += -12; |
| 249 | call (p0); | 247 | call (p0); |
| 250 | sp += 12; | 248 | sp += 12; |
| @@ -259,7 +257,7 @@ ENTRY(___ipipe_call_irqtail) | |||
| 259 | p0.h = hi(EVT14); | 257 | p0.h = hi(EVT14); |
| 260 | [p0] = r0; | 258 | [p0] = r0; |
| 261 | csync; | 259 | csync; |
| 262 | r0 = 0x401f; | 260 | r0 = 0x401f (z); |
| 263 | sti r0; | 261 | sti r0; |
| 264 | raise 14; | 262 | raise 14; |
| 265 | [--sp] = reti; /* IRQs on. */ | 263 | [--sp] = reti; /* IRQs on. */ |
| @@ -277,11 +275,7 @@ ENTRY(___ipipe_call_irqtail) | |||
| 277 | p0.h = _bfin_irq_flags; | 275 | p0.h = _bfin_irq_flags; |
| 278 | r0 = [p0]; | 276 | r0 = [p0]; |
| 279 | sti r0; | 277 | sti r0; |
| 280 | #if 0 /* FIXME: this actually raises scheduling latencies */ | ||
| 281 | /* Reenable interrupts */ | ||
| 282 | [--sp] = reti; | ||
| 283 | r0 = [sp++]; | ||
| 284 | #endif | ||
| 285 | rts; | 278 | rts; |
| 286 | ENDPROC(___ipipe_call_irqtail) | 279 | ENDPROC(___ipipe_call_irqtail) |
| 280 | |||
| 287 | #endif /* CONFIG_IPIPE */ | 281 | #endif /* CONFIG_IPIPE */ |
diff --git a/arch/blackfin/mach-common/ints-priority.c b/arch/blackfin/mach-common/ints-priority.c index 202494568c6c..a7d7b2dd4059 100644 --- a/arch/blackfin/mach-common/ints-priority.c +++ b/arch/blackfin/mach-common/ints-priority.c | |||
| @@ -161,11 +161,15 @@ static void bfin_core_unmask_irq(unsigned int irq) | |||
| 161 | 161 | ||
| 162 | static void bfin_internal_mask_irq(unsigned int irq) | 162 | static void bfin_internal_mask_irq(unsigned int irq) |
| 163 | { | 163 | { |
| 164 | unsigned long flags; | ||
| 165 | |||
| 164 | #ifdef CONFIG_BF53x | 166 | #ifdef CONFIG_BF53x |
| 167 | local_irq_save_hw(flags); | ||
| 165 | bfin_write_SIC_IMASK(bfin_read_SIC_IMASK() & | 168 | bfin_write_SIC_IMASK(bfin_read_SIC_IMASK() & |
| 166 | ~(1 << SIC_SYSIRQ(irq))); | 169 | ~(1 << SIC_SYSIRQ(irq))); |
| 167 | #else | 170 | #else |
| 168 | unsigned mask_bank, mask_bit; | 171 | unsigned mask_bank, mask_bit; |
| 172 | local_irq_save_hw(flags); | ||
| 169 | mask_bank = SIC_SYSIRQ(irq) / 32; | 173 | mask_bank = SIC_SYSIRQ(irq) / 32; |
| 170 | mask_bit = SIC_SYSIRQ(irq) % 32; | 174 | mask_bit = SIC_SYSIRQ(irq) % 32; |
| 171 | bfin_write_SIC_IMASK(mask_bank, bfin_read_SIC_IMASK(mask_bank) & | 175 | bfin_write_SIC_IMASK(mask_bank, bfin_read_SIC_IMASK(mask_bank) & |
| @@ -175,15 +179,20 @@ static void bfin_internal_mask_irq(unsigned int irq) | |||
| 175 | ~(1 << mask_bit)); | 179 | ~(1 << mask_bit)); |
| 176 | #endif | 180 | #endif |
| 177 | #endif | 181 | #endif |
| 182 | local_irq_restore_hw(flags); | ||
| 178 | } | 183 | } |
| 179 | 184 | ||
| 180 | static void bfin_internal_unmask_irq(unsigned int irq) | 185 | static void bfin_internal_unmask_irq(unsigned int irq) |
| 181 | { | 186 | { |
| 187 | unsigned long flags; | ||
| 188 | |||
| 182 | #ifdef CONFIG_BF53x | 189 | #ifdef CONFIG_BF53x |
| 190 | local_irq_save_hw(flags); | ||
| 183 | bfin_write_SIC_IMASK(bfin_read_SIC_IMASK() | | 191 | bfin_write_SIC_IMASK(bfin_read_SIC_IMASK() | |
| 184 | (1 << SIC_SYSIRQ(irq))); | 192 | (1 << SIC_SYSIRQ(irq))); |
| 185 | #else | 193 | #else |
| 186 | unsigned mask_bank, mask_bit; | 194 | unsigned mask_bank, mask_bit; |
| 195 | local_irq_save_hw(flags); | ||
| 187 | mask_bank = SIC_SYSIRQ(irq) / 32; | 196 | mask_bank = SIC_SYSIRQ(irq) / 32; |
| 188 | mask_bit = SIC_SYSIRQ(irq) % 32; | 197 | mask_bit = SIC_SYSIRQ(irq) % 32; |
| 189 | bfin_write_SIC_IMASK(mask_bank, bfin_read_SIC_IMASK(mask_bank) | | 198 | bfin_write_SIC_IMASK(mask_bank, bfin_read_SIC_IMASK(mask_bank) | |
| @@ -193,6 +202,7 @@ static void bfin_internal_unmask_irq(unsigned int irq) | |||
| 193 | (1 << mask_bit)); | 202 | (1 << mask_bit)); |
| 194 | #endif | 203 | #endif |
| 195 | #endif | 204 | #endif |
| 205 | local_irq_restore_hw(flags); | ||
| 196 | } | 206 | } |
| 197 | 207 | ||
| 198 | #ifdef CONFIG_PM | 208 | #ifdef CONFIG_PM |
| @@ -390,7 +400,7 @@ static void bfin_demux_error_irq(unsigned int int_err_irq, | |||
| 390 | static inline void bfin_set_irq_handler(unsigned irq, irq_flow_handler_t handle) | 400 | static inline void bfin_set_irq_handler(unsigned irq, irq_flow_handler_t handle) |
| 391 | { | 401 | { |
| 392 | #ifdef CONFIG_IPIPE | 402 | #ifdef CONFIG_IPIPE |
| 393 | _set_irq_handler(irq, handle_edge_irq); | 403 | _set_irq_handler(irq, handle_level_irq); |
| 394 | #else | 404 | #else |
| 395 | struct irq_desc *desc = irq_desc + irq; | 405 | struct irq_desc *desc = irq_desc + irq; |
| 396 | /* May not call generic set_irq_handler() due to spinlock | 406 | /* May not call generic set_irq_handler() due to spinlock |
| @@ -1055,13 +1065,18 @@ int __init init_arch_irq(void) | |||
| 1055 | #endif | 1065 | #endif |
| 1056 | default: | 1066 | default: |
| 1057 | #ifdef CONFIG_IPIPE | 1067 | #ifdef CONFIG_IPIPE |
| 1058 | /* | 1068 | /* |
| 1059 | * We want internal interrupt sources to be masked, because | 1069 | * We want internal interrupt sources to be |
| 1060 | * ISRs may trigger interrupts recursively (e.g. DMA), but | 1070 | * masked, because ISRs may trigger interrupts |
| 1061 | * interrupts are _not_ masked at CPU level. So let's handle | 1071 | * recursively (e.g. DMA), but interrupts are |
| 1062 | * them as level interrupts. | 1072 | * _not_ masked at CPU level. So let's handle |
| 1063 | */ | 1073 | * most of them as level interrupts, except |
| 1064 | set_irq_handler(irq, handle_level_irq); | 1074 | * the timer interrupt which is special. |
| 1075 | */ | ||
| 1076 | if (irq == IRQ_SYSTMR || irq == IRQ_CORETMR) | ||
| 1077 | set_irq_handler(irq, handle_simple_irq); | ||
| 1078 | else | ||
| 1079 | set_irq_handler(irq, handle_level_irq); | ||
| 1065 | #else /* !CONFIG_IPIPE */ | 1080 | #else /* !CONFIG_IPIPE */ |
| 1066 | set_irq_handler(irq, handle_simple_irq); | 1081 | set_irq_handler(irq, handle_simple_irq); |
| 1067 | #endif /* !CONFIG_IPIPE */ | 1082 | #endif /* !CONFIG_IPIPE */ |
| @@ -1123,9 +1138,8 @@ int __init init_arch_irq(void) | |||
| 1123 | 1138 | ||
| 1124 | #ifdef CONFIG_IPIPE | 1139 | #ifdef CONFIG_IPIPE |
| 1125 | for (irq = 0; irq < NR_IRQS; irq++) { | 1140 | for (irq = 0; irq < NR_IRQS; irq++) { |
| 1126 | struct irq_desc *desc = irq_desc + irq; | 1141 | struct irq_desc *desc = irq_to_desc(irq); |
| 1127 | desc->ic_prio = __ipipe_get_irq_priority(irq); | 1142 | desc->ic_prio = __ipipe_get_irq_priority(irq); |
| 1128 | desc->thr_prio = __ipipe_get_irqthread_priority(irq); | ||
| 1129 | } | 1143 | } |
| 1130 | #endif /* CONFIG_IPIPE */ | 1144 | #endif /* CONFIG_IPIPE */ |
| 1131 | 1145 | ||
| @@ -1208,76 +1222,21 @@ int __ipipe_get_irq_priority(unsigned irq) | |||
| 1208 | return IVG15; | 1222 | return IVG15; |
| 1209 | } | 1223 | } |
| 1210 | 1224 | ||
| 1211 | int __ipipe_get_irqthread_priority(unsigned irq) | ||
| 1212 | { | ||
| 1213 | int ient, prio; | ||
| 1214 | int demux_irq; | ||
| 1215 | |||
| 1216 | /* The returned priority value is rescaled to [0..IVG13+1] | ||
| 1217 | * with 0 being the lowest effective priority level. */ | ||
| 1218 | |||
| 1219 | if (irq <= IRQ_CORETMR) | ||
| 1220 | return IVG13 - irq + 1; | ||
| 1221 | |||
| 1222 | /* GPIO IRQs are given the priority of the demux | ||
| 1223 | * interrupt. */ | ||
| 1224 | if (IS_GPIOIRQ(irq)) { | ||
| 1225 | #if defined(CONFIG_BF54x) | ||
| 1226 | u32 bank = PINT_2_BANK(irq2pint_lut[irq - SYS_IRQS]); | ||
| 1227 | demux_irq = (bank == 0 ? IRQ_PINT0 : | ||
| 1228 | bank == 1 ? IRQ_PINT1 : | ||
| 1229 | bank == 2 ? IRQ_PINT2 : | ||
| 1230 | IRQ_PINT3); | ||
| 1231 | #elif defined(CONFIG_BF561) | ||
| 1232 | demux_irq = (irq >= IRQ_PF32 ? IRQ_PROG2_INTA : | ||
| 1233 | irq >= IRQ_PF16 ? IRQ_PROG1_INTA : | ||
| 1234 | IRQ_PROG0_INTA); | ||
| 1235 | #elif defined(CONFIG_BF52x) | ||
| 1236 | demux_irq = (irq >= IRQ_PH0 ? IRQ_PORTH_INTA : | ||
| 1237 | irq >= IRQ_PG0 ? IRQ_PORTG_INTA : | ||
| 1238 | IRQ_PORTF_INTA); | ||
| 1239 | #else | ||
| 1240 | demux_irq = irq; | ||
| 1241 | #endif | ||
| 1242 | return IVG13 - PRIO_GPIODEMUX(demux_irq) + 1; | ||
| 1243 | } | ||
| 1244 | |||
| 1245 | /* The GPIO demux interrupt is given a lower priority | ||
| 1246 | * than the GPIO IRQs, so that its threaded handler | ||
| 1247 | * unmasks the interrupt line after the decoded IRQs | ||
| 1248 | * have been processed. */ | ||
| 1249 | prio = PRIO_GPIODEMUX(irq); | ||
| 1250 | /* demux irq? */ | ||
| 1251 | if (prio != -1) | ||
| 1252 | return IVG13 - prio; | ||
| 1253 | |||
| 1254 | for (ient = 0; ient < NR_PERI_INTS; ient++) { | ||
| 1255 | struct ivgx *ivg = ivg_table + ient; | ||
| 1256 | if (ivg->irqno == irq) { | ||
| 1257 | for (prio = 0; prio <= IVG13-IVG7; prio++) { | ||
| 1258 | if (ivg7_13[prio].ifirst <= ivg && | ||
| 1259 | ivg7_13[prio].istop > ivg) | ||
| 1260 | return IVG7 - prio; | ||
| 1261 | } | ||
| 1262 | } | ||
| 1263 | } | ||
| 1264 | |||
| 1265 | return 0; | ||
| 1266 | } | ||
| 1267 | |||
| 1268 | /* Hw interrupts are disabled on entry (check SAVE_CONTEXT). */ | 1225 | /* Hw interrupts are disabled on entry (check SAVE_CONTEXT). */ |
| 1269 | #ifdef CONFIG_DO_IRQ_L1 | 1226 | #ifdef CONFIG_DO_IRQ_L1 |
| 1270 | __attribute__((l1_text)) | 1227 | __attribute__((l1_text)) |
| 1271 | #endif | 1228 | #endif |
| 1272 | asmlinkage int __ipipe_grab_irq(int vec, struct pt_regs *regs) | 1229 | asmlinkage int __ipipe_grab_irq(int vec, struct pt_regs *regs) |
| 1273 | { | 1230 | { |
| 1231 | struct ipipe_percpu_domain_data *p = ipipe_root_cpudom_ptr(); | ||
| 1232 | struct ipipe_domain *this_domain = ipipe_current_domain; | ||
| 1274 | struct ivgx *ivg_stop = ivg7_13[vec-IVG7].istop; | 1233 | struct ivgx *ivg_stop = ivg7_13[vec-IVG7].istop; |
| 1275 | struct ivgx *ivg = ivg7_13[vec-IVG7].ifirst; | 1234 | struct ivgx *ivg = ivg7_13[vec-IVG7].ifirst; |
| 1276 | int irq; | 1235 | int irq, s; |
| 1277 | 1236 | ||
| 1278 | if (likely(vec == EVT_IVTMR_P)) { | 1237 | if (likely(vec == EVT_IVTMR_P)) { |
| 1279 | irq = IRQ_CORETMR; | 1238 | irq = IRQ_CORETMR; |
| 1280 | goto handle_irq; | 1239 | goto core_tick; |
| 1281 | } | 1240 | } |
| 1282 | 1241 | ||
| 1283 | SSYNC(); | 1242 | SSYNC(); |
| @@ -1319,24 +1278,39 @@ asmlinkage int __ipipe_grab_irq(int vec, struct pt_regs *regs) | |||
| 1319 | irq = ivg->irqno; | 1278 | irq = ivg->irqno; |
| 1320 | 1279 | ||
| 1321 | if (irq == IRQ_SYSTMR) { | 1280 | if (irq == IRQ_SYSTMR) { |
| 1281 | #ifdef CONFIG_GENERIC_CLOCKEVENTS | ||
| 1282 | core_tick: | ||
| 1283 | #else | ||
| 1322 | bfin_write_TIMER_STATUS(1); /* Latch TIMIL0 */ | 1284 | bfin_write_TIMER_STATUS(1); /* Latch TIMIL0 */ |
| 1285 | #endif | ||
| 1323 | /* This is basically what we need from the register frame. */ | 1286 | /* This is basically what we need from the register frame. */ |
| 1324 | __raw_get_cpu_var(__ipipe_tick_regs).ipend = regs->ipend; | 1287 | __raw_get_cpu_var(__ipipe_tick_regs).ipend = regs->ipend; |
| 1325 | __raw_get_cpu_var(__ipipe_tick_regs).pc = regs->pc; | 1288 | __raw_get_cpu_var(__ipipe_tick_regs).pc = regs->pc; |
| 1326 | if (!ipipe_root_domain_p) | 1289 | if (this_domain != ipipe_root_domain) |
| 1327 | __raw_get_cpu_var(__ipipe_tick_regs).ipend |= 0x10; | ||
| 1328 | else | ||
| 1329 | __raw_get_cpu_var(__ipipe_tick_regs).ipend &= ~0x10; | 1290 | __raw_get_cpu_var(__ipipe_tick_regs).ipend &= ~0x10; |
| 1291 | else | ||
| 1292 | __raw_get_cpu_var(__ipipe_tick_regs).ipend |= 0x10; | ||
| 1330 | } | 1293 | } |
| 1331 | 1294 | ||
| 1332 | handle_irq: | 1295 | #ifndef CONFIG_GENERIC_CLOCKEVENTS |
| 1296 | core_tick: | ||
| 1297 | #endif | ||
| 1298 | if (this_domain == ipipe_root_domain) { | ||
| 1299 | s = __test_and_set_bit(IPIPE_SYNCDEFER_FLAG, &p->status); | ||
| 1300 | barrier(); | ||
| 1301 | } | ||
| 1333 | 1302 | ||
| 1334 | ipipe_trace_irq_entry(irq); | 1303 | ipipe_trace_irq_entry(irq); |
| 1335 | __ipipe_handle_irq(irq, regs); | 1304 | __ipipe_handle_irq(irq, regs); |
| 1336 | ipipe_trace_irq_exit(irq); | 1305 | ipipe_trace_irq_exit(irq); |
| 1337 | 1306 | ||
| 1338 | if (ipipe_root_domain_p) | 1307 | if (this_domain == ipipe_root_domain) { |
| 1339 | return !test_bit(IPIPE_STALL_FLAG, &ipipe_root_cpudom_var(status)); | 1308 | set_thread_flag(TIF_IRQ_SYNC); |
| 1309 | if (!s) { | ||
| 1310 | __clear_bit(IPIPE_SYNCDEFER_FLAG, &p->status); | ||
| 1311 | return !test_bit(IPIPE_STALL_FLAG, &p->status); | ||
| 1312 | } | ||
| 1313 | } | ||
| 1340 | 1314 | ||
| 1341 | return 0; | 1315 | return 0; |
| 1342 | } | 1316 | } |
diff --git a/arch/blackfin/mach-common/smp.c b/arch/blackfin/mach-common/smp.c index 77c992847094..93eab6146079 100644 --- a/arch/blackfin/mach-common/smp.c +++ b/arch/blackfin/mach-common/smp.c | |||
| @@ -158,10 +158,14 @@ static irqreturn_t ipi_handler(int irq, void *dev_instance) | |||
| 158 | kfree(msg); | 158 | kfree(msg); |
| 159 | break; | 159 | break; |
| 160 | case BFIN_IPI_CALL_FUNC: | 160 | case BFIN_IPI_CALL_FUNC: |
| 161 | spin_unlock(&msg_queue->lock); | ||
| 161 | ipi_call_function(cpu, msg); | 162 | ipi_call_function(cpu, msg); |
| 163 | spin_lock(&msg_queue->lock); | ||
| 162 | break; | 164 | break; |
| 163 | case BFIN_IPI_CPU_STOP: | 165 | case BFIN_IPI_CPU_STOP: |
| 166 | spin_unlock(&msg_queue->lock); | ||
| 164 | ipi_cpu_stop(cpu); | 167 | ipi_cpu_stop(cpu); |
| 168 | spin_lock(&msg_queue->lock); | ||
| 165 | kfree(msg); | 169 | kfree(msg); |
| 166 | break; | 170 | break; |
| 167 | default: | 171 | default: |
| @@ -457,7 +461,7 @@ void smp_icache_flush_range_others(unsigned long start, unsigned long end) | |||
| 457 | smp_flush_data.start = start; | 461 | smp_flush_data.start = start; |
| 458 | smp_flush_data.end = end; | 462 | smp_flush_data.end = end; |
| 459 | 463 | ||
| 460 | if (smp_call_function(&ipi_flush_icache, &smp_flush_data, 1)) | 464 | if (smp_call_function(&ipi_flush_icache, &smp_flush_data, 0)) |
| 461 | printk(KERN_WARNING "SMP: failed to run I-cache flush request on other CPUs\n"); | 465 | printk(KERN_WARNING "SMP: failed to run I-cache flush request on other CPUs\n"); |
| 462 | } | 466 | } |
| 463 | EXPORT_SYMBOL_GPL(smp_icache_flush_range_others); | 467 | EXPORT_SYMBOL_GPL(smp_icache_flush_range_others); |
diff --git a/arch/blackfin/mm/init.c b/arch/blackfin/mm/init.c index d0532b72bba5..9c3629b9a689 100644 --- a/arch/blackfin/mm/init.c +++ b/arch/blackfin/mm/init.c | |||
| @@ -104,7 +104,7 @@ void __init paging_init(void) | |||
| 104 | } | 104 | } |
| 105 | } | 105 | } |
| 106 | 106 | ||
| 107 | asmlinkage void init_pda(void) | 107 | asmlinkage void __init init_pda(void) |
| 108 | { | 108 | { |
| 109 | unsigned int cpu = raw_smp_processor_id(); | 109 | unsigned int cpu = raw_smp_processor_id(); |
| 110 | 110 | ||
diff --git a/arch/frv/mm/dma-alloc.c b/arch/frv/mm/dma-alloc.c index dc6522c464d4..44840e73e907 100644 --- a/arch/frv/mm/dma-alloc.c +++ b/arch/frv/mm/dma-alloc.c | |||
| @@ -36,10 +36,10 @@ | |||
| 36 | #include <linux/vmalloc.h> | 36 | #include <linux/vmalloc.h> |
| 37 | #include <linux/init.h> | 37 | #include <linux/init.h> |
| 38 | #include <linux/pci.h> | 38 | #include <linux/pci.h> |
| 39 | #include <linux/hardirq.h> | ||
| 39 | 40 | ||
| 40 | #include <asm/pgalloc.h> | 41 | #include <asm/pgalloc.h> |
| 41 | #include <asm/io.h> | 42 | #include <asm/io.h> |
| 42 | #include <asm/hardirq.h> | ||
| 43 | #include <asm/mmu_context.h> | 43 | #include <asm/mmu_context.h> |
| 44 | #include <asm/pgtable.h> | 44 | #include <asm/pgtable.h> |
| 45 | #include <asm/mmu.h> | 45 | #include <asm/mmu.h> |
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 6183aeccecf1..153e727a6e8e 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
| @@ -221,7 +221,11 @@ config IA64_HP_SIM | |||
| 221 | 221 | ||
| 222 | config IA64_XEN_GUEST | 222 | config IA64_XEN_GUEST |
| 223 | bool "Xen guest" | 223 | bool "Xen guest" |
| 224 | select SWIOTLB | ||
| 224 | depends on XEN | 225 | depends on XEN |
| 226 | help | ||
| 227 | Build a kernel that runs on Xen guest domain. At this moment only | ||
| 228 | 16KB page size in supported. | ||
| 225 | 229 | ||
| 226 | endchoice | 230 | endchoice |
| 227 | 231 | ||
| @@ -479,8 +483,7 @@ config HOLES_IN_ZONE | |||
| 479 | default y if VIRTUAL_MEM_MAP | 483 | default y if VIRTUAL_MEM_MAP |
| 480 | 484 | ||
| 481 | config HAVE_ARCH_EARLY_PFN_TO_NID | 485 | config HAVE_ARCH_EARLY_PFN_TO_NID |
| 482 | def_bool y | 486 | def_bool NUMA && SPARSEMEM |
| 483 | depends on NEED_MULTIPLE_NODES | ||
| 484 | 487 | ||
| 485 | config HAVE_ARCH_NODEDATA_EXTENSION | 488 | config HAVE_ARCH_NODEDATA_EXTENSION |
| 486 | def_bool y | 489 | def_bool y |
| @@ -635,6 +638,17 @@ config DMAR | |||
| 635 | and include PCI device scope covered by these DMA | 638 | and include PCI device scope covered by these DMA |
| 636 | remapping devices. | 639 | remapping devices. |
| 637 | 640 | ||
| 641 | config DMAR_DEFAULT_ON | ||
| 642 | def_bool y | ||
| 643 | prompt "Enable DMA Remapping Devices by default" | ||
| 644 | depends on DMAR | ||
| 645 | help | ||
| 646 | Selecting this option will enable a DMAR device at boot time if | ||
| 647 | one is found. If this option is not selected, DMAR support can | ||
| 648 | be enabled by passing intel_iommu=on to the kernel. It is | ||
| 649 | recommended you say N here while the DMAR code remains | ||
| 650 | experimental. | ||
| 651 | |||
| 638 | endmenu | 652 | endmenu |
| 639 | 653 | ||
| 640 | endif | 654 | endif |
diff --git a/arch/ia64/configs/xen_domu_defconfig b/arch/ia64/configs/xen_domu_defconfig new file mode 100644 index 000000000000..0bb0714dc19d --- /dev/null +++ b/arch/ia64/configs/xen_domu_defconfig | |||
| @@ -0,0 +1,1601 @@ | |||
| 1 | # | ||
| 2 | # Automatically generated make config: don't edit | ||
| 3 | # Linux kernel version: 2.6.29-rc1 | ||
| 4 | # Fri Jan 16 11:49:59 2009 | ||
| 5 | # | ||
| 6 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 7 | |||
| 8 | # | ||
| 9 | # General setup | ||
| 10 | # | ||
| 11 | CONFIG_EXPERIMENTAL=y | ||
| 12 | CONFIG_LOCK_KERNEL=y | ||
| 13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
| 14 | CONFIG_LOCALVERSION="" | ||
| 15 | CONFIG_LOCALVERSION_AUTO=y | ||
| 16 | CONFIG_SWAP=y | ||
| 17 | CONFIG_SYSVIPC=y | ||
| 18 | CONFIG_SYSVIPC_SYSCTL=y | ||
| 19 | CONFIG_POSIX_MQUEUE=y | ||
| 20 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
| 21 | # CONFIG_TASKSTATS is not set | ||
| 22 | # CONFIG_AUDIT is not set | ||
| 23 | CONFIG_IKCONFIG=y | ||
| 24 | CONFIG_IKCONFIG_PROC=y | ||
| 25 | CONFIG_LOG_BUF_SHIFT=20 | ||
| 26 | CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y | ||
| 27 | # CONFIG_GROUP_SCHED is not set | ||
| 28 | |||
| 29 | # | ||
| 30 | # Control Group support | ||
| 31 | # | ||
| 32 | # CONFIG_CGROUPS is not set | ||
| 33 | CONFIG_SYSFS_DEPRECATED=y | ||
| 34 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 35 | # CONFIG_RELAY is not set | ||
| 36 | CONFIG_NAMESPACES=y | ||
| 37 | # CONFIG_UTS_NS is not set | ||
| 38 | # CONFIG_IPC_NS is not set | ||
| 39 | # CONFIG_USER_NS is not set | ||
| 40 | # CONFIG_PID_NS is not set | ||
| 41 | CONFIG_BLK_DEV_INITRD=y | ||
| 42 | CONFIG_INITRAMFS_SOURCE="" | ||
| 43 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 44 | CONFIG_SYSCTL=y | ||
| 45 | # CONFIG_EMBEDDED is not set | ||
| 46 | CONFIG_SYSCTL_SYSCALL=y | ||
| 47 | CONFIG_KALLSYMS=y | ||
| 48 | CONFIG_KALLSYMS_ALL=y | ||
| 49 | CONFIG_KALLSYMS_STRIP_GENERATED=y | ||
| 50 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
| 51 | CONFIG_HOTPLUG=y | ||
| 52 | CONFIG_PRINTK=y | ||
| 53 | CONFIG_BUG=y | ||
| 54 | CONFIG_ELF_CORE=y | ||
| 55 | CONFIG_COMPAT_BRK=y | ||
| 56 | CONFIG_BASE_FULL=y | ||
| 57 | CONFIG_FUTEX=y | ||
| 58 | CONFIG_ANON_INODES=y | ||
| 59 | CONFIG_EPOLL=y | ||
| 60 | CONFIG_SIGNALFD=y | ||
| 61 | CONFIG_TIMERFD=y | ||
| 62 | CONFIG_EVENTFD=y | ||
| 63 | CONFIG_SHMEM=y | ||
| 64 | CONFIG_AIO=y | ||
| 65 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 66 | CONFIG_PCI_QUIRKS=y | ||
| 67 | CONFIG_SLUB_DEBUG=y | ||
| 68 | # CONFIG_SLAB is not set | ||
| 69 | CONFIG_SLUB=y | ||
| 70 | # CONFIG_SLOB is not set | ||
| 71 | # CONFIG_PROFILING is not set | ||
| 72 | CONFIG_HAVE_OPROFILE=y | ||
| 73 | # CONFIG_KPROBES is not set | ||
| 74 | CONFIG_HAVE_KPROBES=y | ||
| 75 | CONFIG_HAVE_KRETPROBES=y | ||
| 76 | CONFIG_HAVE_ARCH_TRACEHOOK=y | ||
| 77 | CONFIG_HAVE_DMA_ATTRS=y | ||
| 78 | CONFIG_USE_GENERIC_SMP_HELPERS=y | ||
| 79 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
| 80 | CONFIG_SLABINFO=y | ||
| 81 | CONFIG_RT_MUTEXES=y | ||
| 82 | CONFIG_BASE_SMALL=0 | ||
| 83 | CONFIG_MODULES=y | ||
| 84 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 85 | CONFIG_MODULE_UNLOAD=y | ||
| 86 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
| 87 | CONFIG_MODVERSIONS=y | ||
| 88 | CONFIG_MODULE_SRCVERSION_ALL=y | ||
| 89 | CONFIG_STOP_MACHINE=y | ||
| 90 | CONFIG_BLOCK=y | ||
| 91 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
| 92 | # CONFIG_BLK_DEV_BSG is not set | ||
| 93 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
| 94 | |||
| 95 | # | ||
| 96 | # IO Schedulers | ||
| 97 | # | ||
| 98 | CONFIG_IOSCHED_NOOP=y | ||
| 99 | CONFIG_IOSCHED_AS=y | ||
| 100 | CONFIG_IOSCHED_DEADLINE=y | ||
| 101 | CONFIG_IOSCHED_CFQ=y | ||
| 102 | CONFIG_DEFAULT_AS=y | ||
| 103 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 104 | # CONFIG_DEFAULT_CFQ is not set | ||
| 105 | # CONFIG_DEFAULT_NOOP is not set | ||
| 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
| 107 | CONFIG_CLASSIC_RCU=y | ||
| 108 | # CONFIG_TREE_RCU is not set | ||
| 109 | # CONFIG_PREEMPT_RCU is not set | ||
| 110 | # CONFIG_TREE_RCU_TRACE is not set | ||
| 111 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
| 112 | CONFIG_FREEZER=y | ||
| 113 | |||
| 114 | # | ||
| 115 | # Processor type and features | ||
| 116 | # | ||
| 117 | CONFIG_IA64=y | ||
| 118 | CONFIG_64BIT=y | ||
| 119 | CONFIG_ZONE_DMA=y | ||
| 120 | CONFIG_QUICKLIST=y | ||
| 121 | CONFIG_MMU=y | ||
| 122 | CONFIG_SWIOTLB=y | ||
| 123 | CONFIG_IOMMU_HELPER=y | ||
| 124 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
| 125 | CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y | ||
| 126 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
| 127 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
| 128 | CONFIG_GENERIC_TIME=y | ||
| 129 | CONFIG_GENERIC_TIME_VSYSCALL=y | ||
| 130 | CONFIG_HAVE_SETUP_PER_CPU_AREA=y | ||
| 131 | CONFIG_DMI=y | ||
| 132 | CONFIG_EFI=y | ||
| 133 | CONFIG_GENERIC_IOMAP=y | ||
| 134 | CONFIG_SCHED_OMIT_FRAME_POINTER=y | ||
| 135 | CONFIG_AUDIT_ARCH=y | ||
| 136 | CONFIG_PARAVIRT_GUEST=y | ||
| 137 | CONFIG_PARAVIRT=y | ||
| 138 | CONFIG_XEN=y | ||
| 139 | CONFIG_XEN_XENCOMM=y | ||
| 140 | CONFIG_NO_IDLE_HZ=y | ||
| 141 | # CONFIG_IA64_GENERIC is not set | ||
| 142 | # CONFIG_IA64_DIG is not set | ||
| 143 | # CONFIG_IA64_DIG_VTD is not set | ||
| 144 | # CONFIG_IA64_HP_ZX1 is not set | ||
| 145 | # CONFIG_IA64_HP_ZX1_SWIOTLB is not set | ||
| 146 | # CONFIG_IA64_SGI_SN2 is not set | ||
| 147 | # CONFIG_IA64_SGI_UV is not set | ||
| 148 | # CONFIG_IA64_HP_SIM is not set | ||
| 149 | CONFIG_IA64_XEN_GUEST=y | ||
| 150 | # CONFIG_ITANIUM is not set | ||
| 151 | CONFIG_MCKINLEY=y | ||
| 152 | # CONFIG_IA64_PAGE_SIZE_4KB is not set | ||
| 153 | # CONFIG_IA64_PAGE_SIZE_8KB is not set | ||
| 154 | CONFIG_IA64_PAGE_SIZE_16KB=y | ||
| 155 | # CONFIG_IA64_PAGE_SIZE_64KB is not set | ||
| 156 | CONFIG_PGTABLE_3=y | ||
| 157 | # CONFIG_PGTABLE_4 is not set | ||
| 158 | CONFIG_HZ=250 | ||
| 159 | # CONFIG_HZ_100 is not set | ||
| 160 | CONFIG_HZ_250=y | ||
| 161 | # CONFIG_HZ_300 is not set | ||
| 162 | # CONFIG_HZ_1000 is not set | ||
| 163 | # CONFIG_SCHED_HRTICK is not set | ||
| 164 | CONFIG_IA64_L1_CACHE_SHIFT=7 | ||
| 165 | CONFIG_IA64_CYCLONE=y | ||
| 166 | CONFIG_IOSAPIC=y | ||
| 167 | CONFIG_FORCE_MAX_ZONEORDER=17 | ||
| 168 | # CONFIG_VIRT_CPU_ACCOUNTING is not set | ||
| 169 | CONFIG_SMP=y | ||
| 170 | CONFIG_NR_CPUS=16 | ||
| 171 | CONFIG_HOTPLUG_CPU=y | ||
| 172 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
| 173 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y | ||
| 174 | # CONFIG_SCHED_SMT is not set | ||
| 175 | CONFIG_PERMIT_BSP_REMOVE=y | ||
| 176 | CONFIG_FORCE_CPEI_RETARGET=y | ||
| 177 | CONFIG_PREEMPT_NONE=y | ||
| 178 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
| 179 | # CONFIG_PREEMPT is not set | ||
| 180 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 181 | CONFIG_FLATMEM_MANUAL=y | ||
| 182 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 183 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 184 | CONFIG_FLATMEM=y | ||
| 185 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 186 | CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y | ||
| 187 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 188 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
| 189 | CONFIG_MIGRATION=y | ||
| 190 | CONFIG_PHYS_ADDR_T_64BIT=y | ||
| 191 | CONFIG_ZONE_DMA_FLAG=1 | ||
| 192 | CONFIG_BOUNCE=y | ||
| 193 | CONFIG_NR_QUICK=1 | ||
| 194 | CONFIG_VIRT_TO_BUS=y | ||
| 195 | CONFIG_UNEVICTABLE_LRU=y | ||
| 196 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
| 197 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
| 198 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
| 199 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
| 200 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
| 201 | CONFIG_VIRTUAL_MEM_MAP=y | ||
| 202 | CONFIG_HOLES_IN_ZONE=y | ||
| 203 | # CONFIG_IA32_SUPPORT is not set | ||
| 204 | # CONFIG_COMPAT_FOR_U64_ALIGNMENT is not set | ||
| 205 | CONFIG_IA64_MCA_RECOVERY=y | ||
| 206 | CONFIG_PERFMON=y | ||
| 207 | CONFIG_IA64_PALINFO=y | ||
| 208 | # CONFIG_IA64_MC_ERR_INJECT is not set | ||
| 209 | # CONFIG_IA64_ESI is not set | ||
| 210 | # CONFIG_IA64_HP_AML_NFW is not set | ||
| 211 | CONFIG_KEXEC=y | ||
| 212 | # CONFIG_CRASH_DUMP is not set | ||
| 213 | |||
| 214 | # | ||
| 215 | # Firmware Drivers | ||
| 216 | # | ||
| 217 | # CONFIG_FIRMWARE_MEMMAP is not set | ||
| 218 | CONFIG_EFI_VARS=y | ||
| 219 | CONFIG_EFI_PCDP=y | ||
| 220 | CONFIG_DMIID=y | ||
| 221 | CONFIG_BINFMT_ELF=y | ||
| 222 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
| 223 | # CONFIG_HAVE_AOUT is not set | ||
| 224 | CONFIG_BINFMT_MISC=m | ||
| 225 | |||
| 226 | # | ||
| 227 | # Power management and ACPI options | ||
| 228 | # | ||
| 229 | CONFIG_PM=y | ||
| 230 | # CONFIG_PM_DEBUG is not set | ||
| 231 | CONFIG_PM_SLEEP=y | ||
| 232 | CONFIG_SUSPEND=y | ||
| 233 | CONFIG_SUSPEND_FREEZER=y | ||
| 234 | CONFIG_ACPI=y | ||
| 235 | CONFIG_ACPI_SLEEP=y | ||
| 236 | CONFIG_ACPI_PROCFS=y | ||
| 237 | CONFIG_ACPI_PROCFS_POWER=y | ||
| 238 | CONFIG_ACPI_SYSFS_POWER=y | ||
| 239 | CONFIG_ACPI_PROC_EVENT=y | ||
| 240 | CONFIG_ACPI_BUTTON=m | ||
| 241 | CONFIG_ACPI_FAN=m | ||
| 242 | # CONFIG_ACPI_DOCK is not set | ||
| 243 | CONFIG_ACPI_PROCESSOR=m | ||
| 244 | CONFIG_ACPI_HOTPLUG_CPU=y | ||
| 245 | CONFIG_ACPI_THERMAL=m | ||
| 246 | # CONFIG_ACPI_CUSTOM_DSDT is not set | ||
| 247 | CONFIG_ACPI_BLACKLIST_YEAR=0 | ||
| 248 | # CONFIG_ACPI_DEBUG is not set | ||
| 249 | # CONFIG_ACPI_PCI_SLOT is not set | ||
| 250 | CONFIG_ACPI_SYSTEM=y | ||
| 251 | CONFIG_ACPI_CONTAINER=m | ||
| 252 | |||
| 253 | # | ||
| 254 | # CPU Frequency scaling | ||
| 255 | # | ||
| 256 | # CONFIG_CPU_FREQ is not set | ||
| 257 | |||
| 258 | # | ||
| 259 | # Bus options (PCI, PCMCIA) | ||
| 260 | # | ||
| 261 | CONFIG_PCI=y | ||
| 262 | CONFIG_PCI_DOMAINS=y | ||
| 263 | CONFIG_PCI_SYSCALL=y | ||
| 264 | # CONFIG_PCIEPORTBUS is not set | ||
| 265 | CONFIG_ARCH_SUPPORTS_MSI=y | ||
| 266 | # CONFIG_PCI_MSI is not set | ||
| 267 | CONFIG_PCI_LEGACY=y | ||
| 268 | # CONFIG_PCI_DEBUG is not set | ||
| 269 | # CONFIG_PCI_STUB is not set | ||
| 270 | CONFIG_HOTPLUG_PCI=m | ||
| 271 | # CONFIG_HOTPLUG_PCI_FAKE is not set | ||
| 272 | CONFIG_HOTPLUG_PCI_ACPI=m | ||
| 273 | # CONFIG_HOTPLUG_PCI_ACPI_IBM is not set | ||
| 274 | # CONFIG_HOTPLUG_PCI_CPCI is not set | ||
| 275 | # CONFIG_HOTPLUG_PCI_SHPC is not set | ||
| 276 | # CONFIG_PCCARD is not set | ||
| 277 | CONFIG_NET=y | ||
| 278 | |||
| 279 | # | ||
| 280 | # Networking options | ||
| 281 | # | ||
| 282 | # CONFIG_NET_NS is not set | ||
| 283 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
| 284 | CONFIG_PACKET=y | ||
| 285 | # CONFIG_PACKET_MMAP is not set | ||
| 286 | CONFIG_UNIX=y | ||
| 287 | CONFIG_XFRM=y | ||
| 288 | # CONFIG_XFRM_USER is not set | ||
| 289 | # CONFIG_XFRM_SUB_POLICY is not set | ||
| 290 | # CONFIG_XFRM_MIGRATE is not set | ||
| 291 | # CONFIG_XFRM_STATISTICS is not set | ||
| 292 | # CONFIG_NET_KEY is not set | ||
| 293 | CONFIG_INET=y | ||
| 294 | CONFIG_IP_MULTICAST=y | ||
| 295 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
| 296 | CONFIG_IP_FIB_HASH=y | ||
| 297 | # CONFIG_IP_PNP is not set | ||
| 298 | # CONFIG_NET_IPIP is not set | ||
| 299 | # CONFIG_NET_IPGRE is not set | ||
| 300 | # CONFIG_IP_MROUTE is not set | ||
| 301 | CONFIG_ARPD=y | ||
| 302 | CONFIG_SYN_COOKIES=y | ||
| 303 | # CONFIG_INET_AH is not set | ||
| 304 | # CONFIG_INET_ESP is not set | ||
| 305 | # CONFIG_INET_IPCOMP is not set | ||
| 306 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
| 307 | # CONFIG_INET_TUNNEL is not set | ||
| 308 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
| 309 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
| 310 | CONFIG_INET_XFRM_MODE_BEET=y | ||
| 311 | # CONFIG_INET_LRO is not set | ||
| 312 | CONFIG_INET_DIAG=y | ||
| 313 | CONFIG_INET_TCP_DIAG=y | ||
| 314 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
| 315 | CONFIG_TCP_CONG_CUBIC=y | ||
| 316 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 317 | # CONFIG_TCP_MD5SIG is not set | ||
| 318 | # CONFIG_IPV6 is not set | ||
| 319 | # CONFIG_NETWORK_SECMARK is not set | ||
| 320 | # CONFIG_NETFILTER is not set | ||
| 321 | # CONFIG_IP_DCCP is not set | ||
| 322 | # CONFIG_IP_SCTP is not set | ||
| 323 | # CONFIG_TIPC is not set | ||
| 324 | # CONFIG_ATM is not set | ||
| 325 | # CONFIG_BRIDGE is not set | ||
| 326 | # CONFIG_NET_DSA is not set | ||
| 327 | # CONFIG_VLAN_8021Q is not set | ||
| 328 | # CONFIG_DECNET is not set | ||
| 329 | # CONFIG_LLC2 is not set | ||
| 330 | # CONFIG_IPX is not set | ||
| 331 | # CONFIG_ATALK is not set | ||
| 332 | # CONFIG_X25 is not set | ||
| 333 | # CONFIG_LAPB is not set | ||
| 334 | # CONFIG_ECONET is not set | ||
| 335 | # CONFIG_WAN_ROUTER is not set | ||
| 336 | # CONFIG_NET_SCHED is not set | ||
| 337 | # CONFIG_DCB is not set | ||
| 338 | |||
| 339 | # | ||
| 340 | # Network testing | ||
| 341 | # | ||
| 342 | # CONFIG_NET_PKTGEN is not set | ||
| 343 | # CONFIG_HAMRADIO is not set | ||
| 344 | # CONFIG_CAN is not set | ||
| 345 | # CONFIG_IRDA is not set | ||
| 346 | # CONFIG_BT is not set | ||
| 347 | # CONFIG_AF_RXRPC is not set | ||
| 348 | # CONFIG_PHONET is not set | ||
| 349 | # CONFIG_WIRELESS is not set | ||
| 350 | # CONFIG_WIMAX is not set | ||
| 351 | # CONFIG_RFKILL is not set | ||
| 352 | # CONFIG_NET_9P is not set | ||
| 353 | |||
| 354 | # | ||
| 355 | # Device Drivers | ||
| 356 | # | ||
| 357 | |||
| 358 | # | ||
| 359 | # Generic Driver Options | ||
| 360 | # | ||
| 361 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 362 | CONFIG_STANDALONE=y | ||
| 363 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 364 | CONFIG_FW_LOADER=y | ||
| 365 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
| 366 | CONFIG_EXTRA_FIRMWARE="" | ||
| 367 | # CONFIG_DEBUG_DRIVER is not set | ||
| 368 | # CONFIG_DEBUG_DEVRES is not set | ||
| 369 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 370 | # CONFIG_CONNECTOR is not set | ||
| 371 | # CONFIG_MTD is not set | ||
| 372 | # CONFIG_PARPORT is not set | ||
| 373 | CONFIG_PNP=y | ||
| 374 | CONFIG_PNP_DEBUG_MESSAGES=y | ||
| 375 | |||
| 376 | # | ||
| 377 | # Protocols | ||
| 378 | # | ||
| 379 | CONFIG_PNPACPI=y | ||
| 380 | CONFIG_BLK_DEV=y | ||
| 381 | # CONFIG_BLK_CPQ_DA is not set | ||
| 382 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
| 383 | # CONFIG_BLK_DEV_DAC960 is not set | ||
| 384 | # CONFIG_BLK_DEV_UMEM is not set | ||
| 385 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 386 | CONFIG_BLK_DEV_LOOP=m | ||
| 387 | CONFIG_BLK_DEV_CRYPTOLOOP=m | ||
| 388 | CONFIG_BLK_DEV_NBD=m | ||
| 389 | # CONFIG_BLK_DEV_SX8 is not set | ||
| 390 | # CONFIG_BLK_DEV_UB is not set | ||
| 391 | CONFIG_BLK_DEV_RAM=y | ||
| 392 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 393 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
| 394 | # CONFIG_BLK_DEV_XIP is not set | ||
| 395 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 396 | # CONFIG_ATA_OVER_ETH is not set | ||
| 397 | CONFIG_XEN_BLKDEV_FRONTEND=y | ||
| 398 | # CONFIG_BLK_DEV_HD is not set | ||
| 399 | CONFIG_MISC_DEVICES=y | ||
| 400 | # CONFIG_PHANTOM is not set | ||
| 401 | # CONFIG_EEPROM_93CX6 is not set | ||
| 402 | # CONFIG_SGI_IOC4 is not set | ||
| 403 | # CONFIG_TIFM_CORE is not set | ||
| 404 | # CONFIG_ICS932S401 is not set | ||
| 405 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
| 406 | # CONFIG_HP_ILO is not set | ||
| 407 | # CONFIG_C2PORT is not set | ||
| 408 | CONFIG_HAVE_IDE=y | ||
| 409 | CONFIG_IDE=y | ||
| 410 | |||
| 411 | # | ||
| 412 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | ||
| 413 | # | ||
| 414 | CONFIG_IDE_TIMINGS=y | ||
| 415 | CONFIG_IDE_ATAPI=y | ||
| 416 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
| 417 | CONFIG_IDE_GD=y | ||
| 418 | CONFIG_IDE_GD_ATA=y | ||
| 419 | # CONFIG_IDE_GD_ATAPI is not set | ||
| 420 | CONFIG_BLK_DEV_IDECD=y | ||
| 421 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y | ||
| 422 | # CONFIG_BLK_DEV_IDETAPE is not set | ||
| 423 | # CONFIG_BLK_DEV_IDEACPI is not set | ||
| 424 | # CONFIG_IDE_TASK_IOCTL is not set | ||
| 425 | CONFIG_IDE_PROC_FS=y | ||
| 426 | |||
| 427 | # | ||
| 428 | # IDE chipset support/bugfixes | ||
| 429 | # | ||
| 430 | # CONFIG_IDE_GENERIC is not set | ||
| 431 | # CONFIG_BLK_DEV_PLATFORM is not set | ||
| 432 | # CONFIG_BLK_DEV_IDEPNP is not set | ||
| 433 | CONFIG_BLK_DEV_IDEDMA_SFF=y | ||
| 434 | |||
| 435 | # | ||
| 436 | # PCI IDE chipsets support | ||
| 437 | # | ||
| 438 | CONFIG_BLK_DEV_IDEPCI=y | ||
| 439 | CONFIG_IDEPCI_PCIBUS_ORDER=y | ||
| 440 | # CONFIG_BLK_DEV_OFFBOARD is not set | ||
| 441 | CONFIG_BLK_DEV_GENERIC=y | ||
| 442 | # CONFIG_BLK_DEV_OPTI621 is not set | ||
| 443 | CONFIG_BLK_DEV_IDEDMA_PCI=y | ||
| 444 | # CONFIG_BLK_DEV_AEC62XX is not set | ||
| 445 | # CONFIG_BLK_DEV_ALI15X3 is not set | ||
| 446 | # CONFIG_BLK_DEV_AMD74XX is not set | ||
| 447 | CONFIG_BLK_DEV_CMD64X=y | ||
| 448 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
| 449 | # CONFIG_BLK_DEV_CS5520 is not set | ||
| 450 | # CONFIG_BLK_DEV_CS5530 is not set | ||
| 451 | # CONFIG_BLK_DEV_HPT366 is not set | ||
| 452 | # CONFIG_BLK_DEV_JMICRON is not set | ||
| 453 | # CONFIG_BLK_DEV_SC1200 is not set | ||
| 454 | CONFIG_BLK_DEV_PIIX=y | ||
| 455 | # CONFIG_BLK_DEV_IT8172 is not set | ||
| 456 | # CONFIG_BLK_DEV_IT8213 is not set | ||
| 457 | # CONFIG_BLK_DEV_IT821X is not set | ||
| 458 | # CONFIG_BLK_DEV_NS87415 is not set | ||
| 459 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
| 460 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||
| 461 | # CONFIG_BLK_DEV_SVWKS is not set | ||
| 462 | # CONFIG_BLK_DEV_SIIMAGE is not set | ||
| 463 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
| 464 | # CONFIG_BLK_DEV_TRM290 is not set | ||
| 465 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
| 466 | # CONFIG_BLK_DEV_TC86C001 is not set | ||
| 467 | CONFIG_BLK_DEV_IDEDMA=y | ||
| 468 | |||
| 469 | # | ||
| 470 | # SCSI device support | ||
| 471 | # | ||
| 472 | # CONFIG_RAID_ATTRS is not set | ||
| 473 | CONFIG_SCSI=y | ||
| 474 | CONFIG_SCSI_DMA=y | ||
| 475 | # CONFIG_SCSI_TGT is not set | ||
| 476 | CONFIG_SCSI_NETLINK=y | ||
| 477 | CONFIG_SCSI_PROC_FS=y | ||
| 478 | |||
| 479 | # | ||
| 480 | # SCSI support type (disk, tape, CD-ROM) | ||
| 481 | # | ||
| 482 | CONFIG_BLK_DEV_SD=y | ||
| 483 | CONFIG_CHR_DEV_ST=m | ||
| 484 | # CONFIG_CHR_DEV_OSST is not set | ||
| 485 | CONFIG_BLK_DEV_SR=m | ||
| 486 | # CONFIG_BLK_DEV_SR_VENDOR is not set | ||
| 487 | CONFIG_CHR_DEV_SG=m | ||
| 488 | # CONFIG_CHR_DEV_SCH is not set | ||
| 489 | |||
| 490 | # | ||
| 491 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
| 492 | # | ||
| 493 | # CONFIG_SCSI_MULTI_LUN is not set | ||
| 494 | # CONFIG_SCSI_CONSTANTS is not set | ||
| 495 | # CONFIG_SCSI_LOGGING is not set | ||
| 496 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
| 497 | CONFIG_SCSI_WAIT_SCAN=m | ||
| 498 | |||
| 499 | # | ||
| 500 | # SCSI Transports | ||
| 501 | # | ||
| 502 | CONFIG_SCSI_SPI_ATTRS=y | ||
| 503 | CONFIG_SCSI_FC_ATTRS=y | ||
| 504 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
| 505 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
| 506 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
| 507 | CONFIG_SCSI_LOWLEVEL=y | ||
| 508 | # CONFIG_ISCSI_TCP is not set | ||
| 509 | # CONFIG_SCSI_CXGB3_ISCSI is not set | ||
| 510 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||
| 511 | # CONFIG_SCSI_3W_9XXX is not set | ||
| 512 | # CONFIG_SCSI_ACARD is not set | ||
| 513 | # CONFIG_SCSI_AACRAID is not set | ||
| 514 | # CONFIG_SCSI_AIC7XXX is not set | ||
| 515 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
| 516 | # CONFIG_SCSI_AIC79XX is not set | ||
| 517 | # CONFIG_SCSI_AIC94XX is not set | ||
| 518 | # CONFIG_SCSI_DPT_I2O is not set | ||
| 519 | # CONFIG_SCSI_ADVANSYS is not set | ||
| 520 | # CONFIG_SCSI_ARCMSR is not set | ||
| 521 | # CONFIG_MEGARAID_NEWGEN is not set | ||
| 522 | # CONFIG_MEGARAID_LEGACY is not set | ||
| 523 | # CONFIG_MEGARAID_SAS is not set | ||
| 524 | # CONFIG_SCSI_HPTIOP is not set | ||
| 525 | # CONFIG_LIBFC is not set | ||
| 526 | # CONFIG_FCOE is not set | ||
| 527 | # CONFIG_SCSI_DMX3191D is not set | ||
| 528 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
| 529 | # CONFIG_SCSI_IPS is not set | ||
| 530 | # CONFIG_SCSI_INITIO is not set | ||
| 531 | # CONFIG_SCSI_INIA100 is not set | ||
| 532 | # CONFIG_SCSI_MVSAS is not set | ||
| 533 | # CONFIG_SCSI_STEX is not set | ||
| 534 | CONFIG_SCSI_SYM53C8XX_2=y | ||
| 535 | CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 | ||
| 536 | CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 | ||
| 537 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | ||
| 538 | CONFIG_SCSI_SYM53C8XX_MMIO=y | ||
| 539 | CONFIG_SCSI_QLOGIC_1280=y | ||
| 540 | # CONFIG_SCSI_QLA_FC is not set | ||
| 541 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
| 542 | # CONFIG_SCSI_LPFC is not set | ||
| 543 | # CONFIG_SCSI_DC395x is not set | ||
| 544 | # CONFIG_SCSI_DC390T is not set | ||
| 545 | # CONFIG_SCSI_DEBUG is not set | ||
| 546 | # CONFIG_SCSI_SRP is not set | ||
| 547 | # CONFIG_SCSI_DH is not set | ||
| 548 | # CONFIG_ATA is not set | ||
| 549 | CONFIG_MD=y | ||
| 550 | CONFIG_BLK_DEV_MD=m | ||
| 551 | CONFIG_MD_LINEAR=m | ||
| 552 | CONFIG_MD_RAID0=m | ||
| 553 | CONFIG_MD_RAID1=m | ||
| 554 | # CONFIG_MD_RAID10 is not set | ||
| 555 | # CONFIG_MD_RAID456 is not set | ||
| 556 | CONFIG_MD_MULTIPATH=m | ||
| 557 | # CONFIG_MD_FAULTY is not set | ||
| 558 | CONFIG_BLK_DEV_DM=m | ||
| 559 | # CONFIG_DM_DEBUG is not set | ||
| 560 | CONFIG_DM_CRYPT=m | ||
| 561 | CONFIG_DM_SNAPSHOT=m | ||
| 562 | CONFIG_DM_MIRROR=m | ||
| 563 | CONFIG_DM_ZERO=m | ||
| 564 | # CONFIG_DM_MULTIPATH is not set | ||
| 565 | # CONFIG_DM_DELAY is not set | ||
| 566 | # CONFIG_DM_UEVENT is not set | ||
| 567 | CONFIG_FUSION=y | ||
| 568 | CONFIG_FUSION_SPI=y | ||
| 569 | CONFIG_FUSION_FC=y | ||
| 570 | # CONFIG_FUSION_SAS is not set | ||
| 571 | CONFIG_FUSION_MAX_SGE=128 | ||
| 572 | CONFIG_FUSION_CTL=y | ||
| 573 | # CONFIG_FUSION_LOGGING is not set | ||
| 574 | |||
| 575 | # | ||
| 576 | # IEEE 1394 (FireWire) support | ||
| 577 | # | ||
| 578 | |||
| 579 | # | ||
| 580 | # Enable only one of the two stacks, unless you know what you are doing | ||
| 581 | # | ||
| 582 | # CONFIG_FIREWIRE is not set | ||
| 583 | # CONFIG_IEEE1394 is not set | ||
| 584 | # CONFIG_I2O is not set | ||
| 585 | CONFIG_NETDEVICES=y | ||
| 586 | CONFIG_DUMMY=m | ||
| 587 | # CONFIG_BONDING is not set | ||
| 588 | # CONFIG_MACVLAN is not set | ||
| 589 | # CONFIG_EQUALIZER is not set | ||
| 590 | # CONFIG_TUN is not set | ||
| 591 | # CONFIG_VETH is not set | ||
| 592 | # CONFIG_NET_SB1000 is not set | ||
| 593 | # CONFIG_ARCNET is not set | ||
| 594 | CONFIG_PHYLIB=y | ||
| 595 | |||
| 596 | # | ||
| 597 | # MII PHY device drivers | ||
| 598 | # | ||
| 599 | # CONFIG_MARVELL_PHY is not set | ||
| 600 | # CONFIG_DAVICOM_PHY is not set | ||
| 601 | # CONFIG_QSEMI_PHY is not set | ||
| 602 | # CONFIG_LXT_PHY is not set | ||
| 603 | # CONFIG_CICADA_PHY is not set | ||
| 604 | # CONFIG_VITESSE_PHY is not set | ||
| 605 | # CONFIG_SMSC_PHY is not set | ||
| 606 | # CONFIG_BROADCOM_PHY is not set | ||
| 607 | # CONFIG_ICPLUS_PHY is not set | ||
| 608 | # CONFIG_REALTEK_PHY is not set | ||
| 609 | # CONFIG_NATIONAL_PHY is not set | ||
| 610 | # CONFIG_STE10XP is not set | ||
| 611 | # CONFIG_LSI_ET1011C_PHY is not set | ||
| 612 | # CONFIG_FIXED_PHY is not set | ||
| 613 | # CONFIG_MDIO_BITBANG is not set | ||
| 614 | CONFIG_NET_ETHERNET=y | ||
| 615 | CONFIG_MII=m | ||
| 616 | # CONFIG_HAPPYMEAL is not set | ||
| 617 | # CONFIG_SUNGEM is not set | ||
| 618 | # CONFIG_CASSINI is not set | ||
| 619 | # CONFIG_NET_VENDOR_3COM is not set | ||
| 620 | CONFIG_NET_TULIP=y | ||
| 621 | # CONFIG_DE2104X is not set | ||
| 622 | CONFIG_TULIP=m | ||
| 623 | # CONFIG_TULIP_MWI is not set | ||
| 624 | # CONFIG_TULIP_MMIO is not set | ||
| 625 | # CONFIG_TULIP_NAPI is not set | ||
| 626 | # CONFIG_DE4X5 is not set | ||
| 627 | # CONFIG_WINBOND_840 is not set | ||
| 628 | # CONFIG_DM9102 is not set | ||
| 629 | # CONFIG_ULI526X is not set | ||
| 630 | # CONFIG_HP100 is not set | ||
| 631 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
| 632 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
| 633 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
| 634 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
| 635 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
| 636 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
| 637 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
| 638 | CONFIG_NET_PCI=y | ||
| 639 | # CONFIG_PCNET32 is not set | ||
| 640 | # CONFIG_AMD8111_ETH is not set | ||
| 641 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
| 642 | # CONFIG_B44 is not set | ||
| 643 | # CONFIG_FORCEDETH is not set | ||
| 644 | CONFIG_E100=m | ||
| 645 | # CONFIG_FEALNX is not set | ||
| 646 | # CONFIG_NATSEMI is not set | ||
| 647 | # CONFIG_NE2K_PCI is not set | ||
| 648 | # CONFIG_8139CP is not set | ||
| 649 | # CONFIG_8139TOO is not set | ||
| 650 | # CONFIG_R6040 is not set | ||
| 651 | # CONFIG_SIS900 is not set | ||
| 652 | # CONFIG_EPIC100 is not set | ||
| 653 | # CONFIG_SMSC9420 is not set | ||
| 654 | # CONFIG_SUNDANCE is not set | ||
| 655 | # CONFIG_TLAN is not set | ||
| 656 | # CONFIG_VIA_RHINE is not set | ||
| 657 | # CONFIG_SC92031 is not set | ||
| 658 | # CONFIG_ATL2 is not set | ||
| 659 | CONFIG_NETDEV_1000=y | ||
| 660 | # CONFIG_ACENIC is not set | ||
| 661 | # CONFIG_DL2K is not set | ||
| 662 | CONFIG_E1000=y | ||
| 663 | # CONFIG_E1000E is not set | ||
| 664 | # CONFIG_IP1000 is not set | ||
| 665 | # CONFIG_IGB is not set | ||
| 666 | # CONFIG_NS83820 is not set | ||
| 667 | # CONFIG_HAMACHI is not set | ||
| 668 | # CONFIG_YELLOWFIN is not set | ||
| 669 | # CONFIG_R8169 is not set | ||
| 670 | # CONFIG_SIS190 is not set | ||
| 671 | # CONFIG_SKGE is not set | ||
| 672 | # CONFIG_SKY2 is not set | ||
| 673 | # CONFIG_VIA_VELOCITY is not set | ||
| 674 | CONFIG_TIGON3=y | ||
| 675 | # CONFIG_BNX2 is not set | ||
| 676 | # CONFIG_QLA3XXX is not set | ||
| 677 | # CONFIG_ATL1 is not set | ||
| 678 | # CONFIG_ATL1E is not set | ||
| 679 | # CONFIG_JME is not set | ||
| 680 | CONFIG_NETDEV_10000=y | ||
| 681 | # CONFIG_CHELSIO_T1 is not set | ||
| 682 | CONFIG_CHELSIO_T3_DEPENDS=y | ||
| 683 | # CONFIG_CHELSIO_T3 is not set | ||
| 684 | # CONFIG_ENIC is not set | ||
| 685 | # CONFIG_IXGBE is not set | ||
| 686 | # CONFIG_IXGB is not set | ||
| 687 | # CONFIG_S2IO is not set | ||
| 688 | # CONFIG_MYRI10GE is not set | ||
| 689 | # CONFIG_NETXEN_NIC is not set | ||
| 690 | # CONFIG_NIU is not set | ||
| 691 | # CONFIG_MLX4_EN is not set | ||
| 692 | # CONFIG_MLX4_CORE is not set | ||
| 693 | # CONFIG_TEHUTI is not set | ||
| 694 | # CONFIG_BNX2X is not set | ||
| 695 | # CONFIG_QLGE is not set | ||
| 696 | # CONFIG_SFC is not set | ||
| 697 | # CONFIG_TR is not set | ||
| 698 | |||
| 699 | # | ||
| 700 | # Wireless LAN | ||
| 701 | # | ||
| 702 | # CONFIG_WLAN_PRE80211 is not set | ||
| 703 | # CONFIG_WLAN_80211 is not set | ||
| 704 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 705 | |||
| 706 | # | ||
| 707 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
| 708 | # | ||
| 709 | |||
| 710 | # | ||
| 711 | # USB Network Adapters | ||
| 712 | # | ||
| 713 | # CONFIG_USB_CATC is not set | ||
| 714 | # CONFIG_USB_KAWETH is not set | ||
| 715 | # CONFIG_USB_PEGASUS is not set | ||
| 716 | # CONFIG_USB_RTL8150 is not set | ||
| 717 | # CONFIG_USB_USBNET is not set | ||
| 718 | # CONFIG_WAN is not set | ||
| 719 | CONFIG_XEN_NETDEV_FRONTEND=y | ||
| 720 | # CONFIG_FDDI is not set | ||
| 721 | # CONFIG_HIPPI is not set | ||
| 722 | # CONFIG_PPP is not set | ||
| 723 | # CONFIG_SLIP is not set | ||
| 724 | # CONFIG_NET_FC is not set | ||
| 725 | CONFIG_NETCONSOLE=y | ||
| 726 | # CONFIG_NETCONSOLE_DYNAMIC is not set | ||
| 727 | CONFIG_NETPOLL=y | ||
| 728 | # CONFIG_NETPOLL_TRAP is not set | ||
| 729 | CONFIG_NET_POLL_CONTROLLER=y | ||
| 730 | # CONFIG_ISDN is not set | ||
| 731 | # CONFIG_PHONE is not set | ||
| 732 | |||
| 733 | # | ||
| 734 | # Input device support | ||
| 735 | # | ||
| 736 | CONFIG_INPUT=y | ||
| 737 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 738 | # CONFIG_INPUT_POLLDEV is not set | ||
| 739 | |||
| 740 | # | ||
| 741 | # Userland interfaces | ||
| 742 | # | ||
| 743 | CONFIG_INPUT_MOUSEDEV=y | ||
| 744 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
| 745 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
| 746 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
| 747 | # CONFIG_INPUT_JOYDEV is not set | ||
| 748 | # CONFIG_INPUT_EVDEV is not set | ||
| 749 | # CONFIG_INPUT_EVBUG is not set | ||
| 750 | |||
| 751 | # | ||
| 752 | # Input Device Drivers | ||
| 753 | # | ||
| 754 | CONFIG_INPUT_KEYBOARD=y | ||
| 755 | CONFIG_KEYBOARD_ATKBD=y | ||
| 756 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
| 757 | # CONFIG_KEYBOARD_LKKBD is not set | ||
| 758 | # CONFIG_KEYBOARD_XTKBD is not set | ||
| 759 | # CONFIG_KEYBOARD_NEWTON is not set | ||
| 760 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
| 761 | CONFIG_INPUT_MOUSE=y | ||
| 762 | CONFIG_MOUSE_PS2=y | ||
| 763 | CONFIG_MOUSE_PS2_ALPS=y | ||
| 764 | CONFIG_MOUSE_PS2_LOGIPS2PP=y | ||
| 765 | CONFIG_MOUSE_PS2_SYNAPTICS=y | ||
| 766 | CONFIG_MOUSE_PS2_LIFEBOOK=y | ||
| 767 | CONFIG_MOUSE_PS2_TRACKPOINT=y | ||
| 768 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
| 769 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | ||
| 770 | # CONFIG_MOUSE_SERIAL is not set | ||
| 771 | # CONFIG_MOUSE_APPLETOUCH is not set | ||
| 772 | # CONFIG_MOUSE_BCM5974 is not set | ||
| 773 | # CONFIG_MOUSE_VSXXXAA is not set | ||
| 774 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 775 | # CONFIG_INPUT_TABLET is not set | ||
| 776 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
| 777 | # CONFIG_INPUT_MISC is not set | ||
| 778 | |||
| 779 | # | ||
| 780 | # Hardware I/O ports | ||
| 781 | # | ||
| 782 | CONFIG_SERIO=y | ||
| 783 | CONFIG_SERIO_I8042=y | ||
| 784 | # CONFIG_SERIO_SERPORT is not set | ||
| 785 | # CONFIG_SERIO_PCIPS2 is not set | ||
| 786 | CONFIG_SERIO_LIBPS2=y | ||
| 787 | # CONFIG_SERIO_RAW is not set | ||
| 788 | CONFIG_GAMEPORT=m | ||
| 789 | # CONFIG_GAMEPORT_NS558 is not set | ||
| 790 | # CONFIG_GAMEPORT_L4 is not set | ||
| 791 | # CONFIG_GAMEPORT_EMU10K1 is not set | ||
| 792 | # CONFIG_GAMEPORT_FM801 is not set | ||
| 793 | |||
| 794 | # | ||
| 795 | # Character devices | ||
| 796 | # | ||
| 797 | CONFIG_VT=y | ||
| 798 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
| 799 | CONFIG_VT_CONSOLE=y | ||
| 800 | CONFIG_HW_CONSOLE=y | ||
| 801 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
| 802 | CONFIG_DEVKMEM=y | ||
| 803 | CONFIG_SERIAL_NONSTANDARD=y | ||
| 804 | # CONFIG_COMPUTONE is not set | ||
| 805 | # CONFIG_ROCKETPORT is not set | ||
| 806 | # CONFIG_CYCLADES is not set | ||
| 807 | # CONFIG_DIGIEPCA is not set | ||
| 808 | # CONFIG_MOXA_INTELLIO is not set | ||
| 809 | # CONFIG_MOXA_SMARTIO is not set | ||
| 810 | # CONFIG_ISI is not set | ||
| 811 | # CONFIG_SYNCLINKMP is not set | ||
| 812 | # CONFIG_SYNCLINK_GT is not set | ||
| 813 | # CONFIG_N_HDLC is not set | ||
| 814 | # CONFIG_RISCOM8 is not set | ||
| 815 | # CONFIG_SPECIALIX is not set | ||
| 816 | # CONFIG_SX is not set | ||
| 817 | # CONFIG_RIO is not set | ||
| 818 | # CONFIG_STALDRV is not set | ||
| 819 | # CONFIG_NOZOMI is not set | ||
| 820 | |||
| 821 | # | ||
| 822 | # Serial drivers | ||
| 823 | # | ||
| 824 | CONFIG_SERIAL_8250=y | ||
| 825 | CONFIG_SERIAL_8250_CONSOLE=y | ||
| 826 | CONFIG_SERIAL_8250_PCI=y | ||
| 827 | CONFIG_SERIAL_8250_PNP=y | ||
| 828 | CONFIG_SERIAL_8250_NR_UARTS=6 | ||
| 829 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
| 830 | CONFIG_SERIAL_8250_EXTENDED=y | ||
| 831 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
| 832 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | ||
| 833 | # CONFIG_SERIAL_8250_RSA is not set | ||
| 834 | |||
| 835 | # | ||
| 836 | # Non-8250 serial port support | ||
| 837 | # | ||
| 838 | CONFIG_SERIAL_CORE=y | ||
| 839 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
| 840 | # CONFIG_SERIAL_JSM is not set | ||
| 841 | CONFIG_UNIX98_PTYS=y | ||
| 842 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
| 843 | CONFIG_LEGACY_PTYS=y | ||
| 844 | CONFIG_LEGACY_PTY_COUNT=256 | ||
| 845 | CONFIG_HVC_DRIVER=y | ||
| 846 | CONFIG_HVC_IRQ=y | ||
| 847 | CONFIG_HVC_XEN=y | ||
| 848 | # CONFIG_IPMI_HANDLER is not set | ||
| 849 | # CONFIG_HW_RANDOM is not set | ||
| 850 | CONFIG_EFI_RTC=y | ||
| 851 | # CONFIG_R3964 is not set | ||
| 852 | # CONFIG_APPLICOM is not set | ||
| 853 | CONFIG_RAW_DRIVER=m | ||
| 854 | CONFIG_MAX_RAW_DEVS=256 | ||
| 855 | CONFIG_HPET=y | ||
| 856 | CONFIG_HPET_MMAP=y | ||
| 857 | # CONFIG_HANGCHECK_TIMER is not set | ||
| 858 | # CONFIG_TCG_TPM is not set | ||
| 859 | CONFIG_DEVPORT=y | ||
| 860 | CONFIG_I2C=m | ||
| 861 | CONFIG_I2C_BOARDINFO=y | ||
| 862 | # CONFIG_I2C_CHARDEV is not set | ||
| 863 | CONFIG_I2C_HELPER_AUTO=y | ||
| 864 | CONFIG_I2C_ALGOBIT=m | ||
| 865 | |||
| 866 | # | ||
| 867 | # I2C Hardware Bus support | ||
| 868 | # | ||
| 869 | |||
| 870 | # | ||
| 871 | # PC SMBus host controller drivers | ||
| 872 | # | ||
| 873 | # CONFIG_I2C_ALI1535 is not set | ||
| 874 | # CONFIG_I2C_ALI1563 is not set | ||
| 875 | # CONFIG_I2C_ALI15X3 is not set | ||
| 876 | # CONFIG_I2C_AMD756 is not set | ||
| 877 | # CONFIG_I2C_AMD8111 is not set | ||
| 878 | # CONFIG_I2C_I801 is not set | ||
| 879 | # CONFIG_I2C_ISCH is not set | ||
| 880 | # CONFIG_I2C_PIIX4 is not set | ||
| 881 | # CONFIG_I2C_NFORCE2 is not set | ||
| 882 | # CONFIG_I2C_SIS5595 is not set | ||
| 883 | # CONFIG_I2C_SIS630 is not set | ||
| 884 | # CONFIG_I2C_SIS96X is not set | ||
| 885 | # CONFIG_I2C_VIA is not set | ||
| 886 | # CONFIG_I2C_VIAPRO is not set | ||
| 887 | |||
| 888 | # | ||
| 889 | # I2C system bus drivers (mostly embedded / system-on-chip) | ||
| 890 | # | ||
| 891 | # CONFIG_I2C_OCORES is not set | ||
| 892 | # CONFIG_I2C_SIMTEC is not set | ||
| 893 | |||
| 894 | # | ||
| 895 | # External I2C/SMBus adapter drivers | ||
| 896 | # | ||
| 897 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
| 898 | # CONFIG_I2C_TAOS_EVM is not set | ||
| 899 | # CONFIG_I2C_TINY_USB is not set | ||
| 900 | |||
| 901 | # | ||
| 902 | # Graphics adapter I2C/DDC channel drivers | ||
| 903 | # | ||
| 904 | # CONFIG_I2C_VOODOO3 is not set | ||
| 905 | |||
| 906 | # | ||
| 907 | # Other I2C/SMBus bus drivers | ||
| 908 | # | ||
| 909 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
| 910 | # CONFIG_I2C_STUB is not set | ||
| 911 | |||
| 912 | # | ||
| 913 | # Miscellaneous I2C Chip support | ||
| 914 | # | ||
| 915 | # CONFIG_DS1682 is not set | ||
| 916 | # CONFIG_AT24 is not set | ||
| 917 | # CONFIG_SENSORS_EEPROM is not set | ||
| 918 | # CONFIG_SENSORS_PCF8574 is not set | ||
| 919 | # CONFIG_PCF8575 is not set | ||
| 920 | # CONFIG_SENSORS_PCA9539 is not set | ||
| 921 | # CONFIG_SENSORS_PCF8591 is not set | ||
| 922 | # CONFIG_SENSORS_MAX6875 is not set | ||
| 923 | # CONFIG_SENSORS_TSL2550 is not set | ||
| 924 | # CONFIG_I2C_DEBUG_CORE is not set | ||
| 925 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
| 926 | # CONFIG_I2C_DEBUG_BUS is not set | ||
| 927 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
| 928 | # CONFIG_SPI is not set | ||
| 929 | # CONFIG_W1 is not set | ||
| 930 | CONFIG_POWER_SUPPLY=y | ||
| 931 | # CONFIG_POWER_SUPPLY_DEBUG is not set | ||
| 932 | # CONFIG_PDA_POWER is not set | ||
| 933 | # CONFIG_BATTERY_DS2760 is not set | ||
| 934 | # CONFIG_BATTERY_BQ27x00 is not set | ||
| 935 | CONFIG_HWMON=y | ||
| 936 | # CONFIG_HWMON_VID is not set | ||
| 937 | # CONFIG_SENSORS_AD7414 is not set | ||
| 938 | # CONFIG_SENSORS_AD7418 is not set | ||
| 939 | # CONFIG_SENSORS_ADM1021 is not set | ||
| 940 | # CONFIG_SENSORS_ADM1025 is not set | ||
| 941 | # CONFIG_SENSORS_ADM1026 is not set | ||
| 942 | # CONFIG_SENSORS_ADM1029 is not set | ||
| 943 | # CONFIG_SENSORS_ADM1031 is not set | ||
| 944 | # CONFIG_SENSORS_ADM9240 is not set | ||
| 945 | # CONFIG_SENSORS_ADT7462 is not set | ||
| 946 | # CONFIG_SENSORS_ADT7470 is not set | ||
| 947 | # CONFIG_SENSORS_ADT7473 is not set | ||
| 948 | # CONFIG_SENSORS_ATXP1 is not set | ||
| 949 | # CONFIG_SENSORS_DS1621 is not set | ||
| 950 | # CONFIG_SENSORS_I5K_AMB is not set | ||
| 951 | # CONFIG_SENSORS_F71805F is not set | ||
| 952 | # CONFIG_SENSORS_F71882FG is not set | ||
| 953 | # CONFIG_SENSORS_F75375S is not set | ||
| 954 | # CONFIG_SENSORS_GL518SM is not set | ||
| 955 | # CONFIG_SENSORS_GL520SM is not set | ||
| 956 | # CONFIG_SENSORS_IT87 is not set | ||
| 957 | # CONFIG_SENSORS_LM63 is not set | ||
| 958 | # CONFIG_SENSORS_LM75 is not set | ||
| 959 | # CONFIG_SENSORS_LM77 is not set | ||
| 960 | # CONFIG_SENSORS_LM78 is not set | ||
| 961 | # CONFIG_SENSORS_LM80 is not set | ||
| 962 | # CONFIG_SENSORS_LM83 is not set | ||
| 963 | # CONFIG_SENSORS_LM85 is not set | ||
| 964 | # CONFIG_SENSORS_LM87 is not set | ||
| 965 | # CONFIG_SENSORS_LM90 is not set | ||
| 966 | # CONFIG_SENSORS_LM92 is not set | ||
| 967 | # CONFIG_SENSORS_LM93 is not set | ||
| 968 | # CONFIG_SENSORS_LTC4245 is not set | ||
| 969 | # CONFIG_SENSORS_MAX1619 is not set | ||
| 970 | # CONFIG_SENSORS_MAX6650 is not set | ||
| 971 | # CONFIG_SENSORS_PC87360 is not set | ||
| 972 | # CONFIG_SENSORS_PC87427 is not set | ||
| 973 | # CONFIG_SENSORS_SIS5595 is not set | ||
| 974 | # CONFIG_SENSORS_DME1737 is not set | ||
| 975 | # CONFIG_SENSORS_SMSC47M1 is not set | ||
| 976 | # CONFIG_SENSORS_SMSC47M192 is not set | ||
| 977 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
| 978 | # CONFIG_SENSORS_ADS7828 is not set | ||
| 979 | # CONFIG_SENSORS_THMC50 is not set | ||
| 980 | # CONFIG_SENSORS_VIA686A is not set | ||
| 981 | # CONFIG_SENSORS_VT1211 is not set | ||
| 982 | # CONFIG_SENSORS_VT8231 is not set | ||
| 983 | # CONFIG_SENSORS_W83781D is not set | ||
| 984 | # CONFIG_SENSORS_W83791D is not set | ||
| 985 | # CONFIG_SENSORS_W83792D is not set | ||
| 986 | # CONFIG_SENSORS_W83793 is not set | ||
| 987 | # CONFIG_SENSORS_W83L785TS is not set | ||
| 988 | # CONFIG_SENSORS_W83L786NG is not set | ||
| 989 | # CONFIG_SENSORS_W83627HF is not set | ||
| 990 | # CONFIG_SENSORS_W83627EHF is not set | ||
| 991 | # CONFIG_SENSORS_LIS3LV02D is not set | ||
| 992 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
| 993 | CONFIG_THERMAL=m | ||
| 994 | # CONFIG_THERMAL_HWMON is not set | ||
| 995 | # CONFIG_WATCHDOG is not set | ||
| 996 | CONFIG_SSB_POSSIBLE=y | ||
| 997 | |||
| 998 | # | ||
| 999 | # Sonics Silicon Backplane | ||
| 1000 | # | ||
| 1001 | # CONFIG_SSB is not set | ||
| 1002 | |||
| 1003 | # | ||
| 1004 | # Multifunction device drivers | ||
| 1005 | # | ||
| 1006 | # CONFIG_MFD_CORE is not set | ||
| 1007 | # CONFIG_MFD_SM501 is not set | ||
| 1008 | # CONFIG_HTC_PASIC3 is not set | ||
| 1009 | # CONFIG_MFD_TMIO is not set | ||
| 1010 | # CONFIG_MFD_WM8400 is not set | ||
| 1011 | # CONFIG_MFD_WM8350_I2C is not set | ||
| 1012 | # CONFIG_MFD_PCF50633 is not set | ||
| 1013 | # CONFIG_REGULATOR is not set | ||
| 1014 | |||
| 1015 | # | ||
| 1016 | # Multimedia devices | ||
| 1017 | # | ||
| 1018 | |||
| 1019 | # | ||
| 1020 | # Multimedia core support | ||
| 1021 | # | ||
| 1022 | # CONFIG_VIDEO_DEV is not set | ||
| 1023 | # CONFIG_DVB_CORE is not set | ||
| 1024 | # CONFIG_VIDEO_MEDIA is not set | ||
| 1025 | |||
| 1026 | # | ||
| 1027 | # Multimedia drivers | ||
| 1028 | # | ||
| 1029 | CONFIG_DAB=y | ||
| 1030 | # CONFIG_USB_DABUSB is not set | ||
| 1031 | |||
| 1032 | # | ||
| 1033 | # Graphics support | ||
| 1034 | # | ||
| 1035 | CONFIG_AGP=m | ||
| 1036 | CONFIG_DRM=m | ||
| 1037 | CONFIG_DRM_TDFX=m | ||
| 1038 | CONFIG_DRM_R128=m | ||
| 1039 | CONFIG_DRM_RADEON=m | ||
| 1040 | CONFIG_DRM_MGA=m | ||
| 1041 | CONFIG_DRM_SIS=m | ||
| 1042 | # CONFIG_DRM_VIA is not set | ||
| 1043 | # CONFIG_DRM_SAVAGE is not set | ||
| 1044 | # CONFIG_VGASTATE is not set | ||
| 1045 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
| 1046 | # CONFIG_FB is not set | ||
| 1047 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 1048 | |||
| 1049 | # | ||
| 1050 | # Display device support | ||
| 1051 | # | ||
| 1052 | # CONFIG_DISPLAY_SUPPORT is not set | ||
| 1053 | |||
| 1054 | # | ||
| 1055 | # Console display driver support | ||
| 1056 | # | ||
| 1057 | CONFIG_VGA_CONSOLE=y | ||
| 1058 | # CONFIG_VGACON_SOFT_SCROLLBACK is not set | ||
| 1059 | CONFIG_DUMMY_CONSOLE=y | ||
| 1060 | # CONFIG_SOUND is not set | ||
| 1061 | CONFIG_HID_SUPPORT=y | ||
| 1062 | CONFIG_HID=y | ||
| 1063 | # CONFIG_HID_DEBUG is not set | ||
| 1064 | # CONFIG_HIDRAW is not set | ||
| 1065 | |||
| 1066 | # | ||
| 1067 | # USB Input Devices | ||
| 1068 | # | ||
| 1069 | CONFIG_USB_HID=y | ||
| 1070 | # CONFIG_HID_PID is not set | ||
| 1071 | # CONFIG_USB_HIDDEV is not set | ||
| 1072 | |||
| 1073 | # | ||
| 1074 | # Special HID drivers | ||
| 1075 | # | ||
| 1076 | CONFIG_HID_COMPAT=y | ||
| 1077 | CONFIG_HID_A4TECH=y | ||
| 1078 | CONFIG_HID_APPLE=y | ||
| 1079 | CONFIG_HID_BELKIN=y | ||
| 1080 | CONFIG_HID_CHERRY=y | ||
| 1081 | CONFIG_HID_CHICONY=y | ||
| 1082 | CONFIG_HID_CYPRESS=y | ||
| 1083 | CONFIG_HID_EZKEY=y | ||
| 1084 | CONFIG_HID_GYRATION=y | ||
| 1085 | CONFIG_HID_LOGITECH=y | ||
| 1086 | # CONFIG_LOGITECH_FF is not set | ||
| 1087 | # CONFIG_LOGIRUMBLEPAD2_FF is not set | ||
| 1088 | CONFIG_HID_MICROSOFT=y | ||
| 1089 | CONFIG_HID_MONTEREY=y | ||
| 1090 | CONFIG_HID_NTRIG=y | ||
| 1091 | CONFIG_HID_PANTHERLORD=y | ||
| 1092 | # CONFIG_PANTHERLORD_FF is not set | ||
| 1093 | CONFIG_HID_PETALYNX=y | ||
| 1094 | CONFIG_HID_SAMSUNG=y | ||
| 1095 | CONFIG_HID_SONY=y | ||
| 1096 | CONFIG_HID_SUNPLUS=y | ||
| 1097 | # CONFIG_GREENASIA_FF is not set | ||
| 1098 | CONFIG_HID_TOPSEED=y | ||
| 1099 | # CONFIG_THRUSTMASTER_FF is not set | ||
| 1100 | # CONFIG_ZEROPLUS_FF is not set | ||
| 1101 | CONFIG_USB_SUPPORT=y | ||
| 1102 | CONFIG_USB_ARCH_HAS_HCD=y | ||
| 1103 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
| 1104 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
| 1105 | CONFIG_USB=y | ||
| 1106 | # CONFIG_USB_DEBUG is not set | ||
| 1107 | # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set | ||
| 1108 | |||
| 1109 | # | ||
| 1110 | # Miscellaneous USB options | ||
| 1111 | # | ||
| 1112 | CONFIG_USB_DEVICEFS=y | ||
| 1113 | CONFIG_USB_DEVICE_CLASS=y | ||
| 1114 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
| 1115 | # CONFIG_USB_SUSPEND is not set | ||
| 1116 | # CONFIG_USB_OTG is not set | ||
| 1117 | # CONFIG_USB_MON is not set | ||
| 1118 | # CONFIG_USB_WUSB is not set | ||
| 1119 | # CONFIG_USB_WUSB_CBAF is not set | ||
| 1120 | |||
| 1121 | # | ||
| 1122 | # USB Host Controller Drivers | ||
| 1123 | # | ||
| 1124 | # CONFIG_USB_C67X00_HCD is not set | ||
| 1125 | CONFIG_USB_EHCI_HCD=m | ||
| 1126 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | ||
| 1127 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | ||
| 1128 | # CONFIG_USB_OXU210HP_HCD is not set | ||
| 1129 | # CONFIG_USB_ISP116X_HCD is not set | ||
| 1130 | # CONFIG_USB_ISP1760_HCD is not set | ||
| 1131 | CONFIG_USB_OHCI_HCD=m | ||
| 1132 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
| 1133 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | ||
| 1134 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
| 1135 | CONFIG_USB_UHCI_HCD=y | ||
| 1136 | # CONFIG_USB_SL811_HCD is not set | ||
| 1137 | # CONFIG_USB_R8A66597_HCD is not set | ||
| 1138 | # CONFIG_USB_WHCI_HCD is not set | ||
| 1139 | # CONFIG_USB_HWA_HCD is not set | ||
| 1140 | |||
| 1141 | # | ||
| 1142 | # USB Device Class drivers | ||
| 1143 | # | ||
| 1144 | # CONFIG_USB_ACM is not set | ||
| 1145 | # CONFIG_USB_PRINTER is not set | ||
| 1146 | # CONFIG_USB_WDM is not set | ||
| 1147 | # CONFIG_USB_TMC is not set | ||
| 1148 | |||
| 1149 | # | ||
| 1150 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; | ||
| 1151 | # | ||
| 1152 | |||
| 1153 | # | ||
| 1154 | # see USB_STORAGE Help for more information | ||
| 1155 | # | ||
| 1156 | CONFIG_USB_STORAGE=m | ||
| 1157 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
| 1158 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
| 1159 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
| 1160 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
| 1161 | # CONFIG_USB_STORAGE_USBAT is not set | ||
| 1162 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
| 1163 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
| 1164 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
| 1165 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
| 1166 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
| 1167 | # CONFIG_USB_STORAGE_KARMA is not set | ||
| 1168 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
| 1169 | # CONFIG_USB_LIBUSUAL is not set | ||
| 1170 | |||
| 1171 | # | ||
| 1172 | # USB Imaging devices | ||
| 1173 | # | ||
| 1174 | # CONFIG_USB_MDC800 is not set | ||
| 1175 | # CONFIG_USB_MICROTEK is not set | ||
| 1176 | |||
| 1177 | # | ||
| 1178 | # USB port drivers | ||
| 1179 | # | ||
| 1180 | # CONFIG_USB_SERIAL is not set | ||
| 1181 | |||
| 1182 | # | ||
| 1183 | # USB Miscellaneous drivers | ||
| 1184 | # | ||
| 1185 | # CONFIG_USB_EMI62 is not set | ||
| 1186 | # CONFIG_USB_EMI26 is not set | ||
| 1187 | # CONFIG_USB_ADUTUX is not set | ||
| 1188 | # CONFIG_USB_SEVSEG is not set | ||
| 1189 | # CONFIG_USB_RIO500 is not set | ||
| 1190 | # CONFIG_USB_LEGOTOWER is not set | ||
| 1191 | # CONFIG_USB_LCD is not set | ||
| 1192 | # CONFIG_USB_BERRY_CHARGE is not set | ||
| 1193 | # CONFIG_USB_LED is not set | ||
| 1194 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
| 1195 | # CONFIG_USB_CYTHERM is not set | ||
| 1196 | # CONFIG_USB_PHIDGET is not set | ||
| 1197 | # CONFIG_USB_IDMOUSE is not set | ||
| 1198 | # CONFIG_USB_FTDI_ELAN is not set | ||
| 1199 | # CONFIG_USB_APPLEDISPLAY is not set | ||
| 1200 | # CONFIG_USB_SISUSBVGA is not set | ||
| 1201 | # CONFIG_USB_LD is not set | ||
| 1202 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 1203 | # CONFIG_USB_IOWARRIOR is not set | ||
| 1204 | # CONFIG_USB_TEST is not set | ||
| 1205 | # CONFIG_USB_ISIGHTFW is not set | ||
| 1206 | # CONFIG_USB_VST is not set | ||
| 1207 | # CONFIG_USB_GADGET is not set | ||
| 1208 | |||
| 1209 | # | ||
| 1210 | # OTG and related infrastructure | ||
| 1211 | # | ||
| 1212 | # CONFIG_UWB is not set | ||
| 1213 | # CONFIG_MMC is not set | ||
| 1214 | # CONFIG_MEMSTICK is not set | ||
| 1215 | # CONFIG_NEW_LEDS is not set | ||
| 1216 | # CONFIG_ACCESSIBILITY is not set | ||
| 1217 | # CONFIG_INFINIBAND is not set | ||
| 1218 | # CONFIG_RTC_CLASS is not set | ||
| 1219 | # CONFIG_DMADEVICES is not set | ||
| 1220 | # CONFIG_UIO is not set | ||
| 1221 | CONFIG_XEN_BALLOON=y | ||
| 1222 | CONFIG_XEN_SCRUB_PAGES=y | ||
| 1223 | CONFIG_XENFS=y | ||
| 1224 | CONFIG_XEN_COMPAT_XENFS=y | ||
| 1225 | # CONFIG_STAGING is not set | ||
| 1226 | # CONFIG_MSPEC is not set | ||
| 1227 | |||
| 1228 | # | ||
| 1229 | # File systems | ||
| 1230 | # | ||
| 1231 | CONFIG_EXT2_FS=y | ||
| 1232 | CONFIG_EXT2_FS_XATTR=y | ||
| 1233 | CONFIG_EXT2_FS_POSIX_ACL=y | ||
| 1234 | CONFIG_EXT2_FS_SECURITY=y | ||
| 1235 | # CONFIG_EXT2_FS_XIP is not set | ||
| 1236 | CONFIG_EXT3_FS=y | ||
| 1237 | CONFIG_EXT3_FS_XATTR=y | ||
| 1238 | CONFIG_EXT3_FS_POSIX_ACL=y | ||
| 1239 | CONFIG_EXT3_FS_SECURITY=y | ||
| 1240 | # CONFIG_EXT4_FS is not set | ||
| 1241 | CONFIG_JBD=y | ||
| 1242 | CONFIG_FS_MBCACHE=y | ||
| 1243 | CONFIG_REISERFS_FS=y | ||
| 1244 | # CONFIG_REISERFS_CHECK is not set | ||
| 1245 | # CONFIG_REISERFS_PROC_INFO is not set | ||
| 1246 | CONFIG_REISERFS_FS_XATTR=y | ||
| 1247 | CONFIG_REISERFS_FS_POSIX_ACL=y | ||
| 1248 | CONFIG_REISERFS_FS_SECURITY=y | ||
| 1249 | # CONFIG_JFS_FS is not set | ||
| 1250 | CONFIG_FS_POSIX_ACL=y | ||
| 1251 | CONFIG_FILE_LOCKING=y | ||
| 1252 | CONFIG_XFS_FS=y | ||
| 1253 | # CONFIG_XFS_QUOTA is not set | ||
| 1254 | # CONFIG_XFS_POSIX_ACL is not set | ||
| 1255 | # CONFIG_XFS_RT is not set | ||
| 1256 | # CONFIG_XFS_DEBUG is not set | ||
| 1257 | # CONFIG_GFS2_FS is not set | ||
| 1258 | # CONFIG_OCFS2_FS is not set | ||
| 1259 | # CONFIG_BTRFS_FS is not set | ||
| 1260 | CONFIG_DNOTIFY=y | ||
| 1261 | CONFIG_INOTIFY=y | ||
| 1262 | CONFIG_INOTIFY_USER=y | ||
| 1263 | # CONFIG_QUOTA is not set | ||
| 1264 | CONFIG_AUTOFS_FS=y | ||
| 1265 | CONFIG_AUTOFS4_FS=y | ||
| 1266 | # CONFIG_FUSE_FS is not set | ||
| 1267 | |||
| 1268 | # | ||
| 1269 | # CD-ROM/DVD Filesystems | ||
| 1270 | # | ||
| 1271 | CONFIG_ISO9660_FS=m | ||
| 1272 | CONFIG_JOLIET=y | ||
| 1273 | # CONFIG_ZISOFS is not set | ||
| 1274 | CONFIG_UDF_FS=m | ||
| 1275 | CONFIG_UDF_NLS=y | ||
| 1276 | |||
| 1277 | # | ||
| 1278 | # DOS/FAT/NT Filesystems | ||
| 1279 | # | ||
| 1280 | CONFIG_FAT_FS=y | ||
| 1281 | # CONFIG_MSDOS_FS is not set | ||
| 1282 | CONFIG_VFAT_FS=y | ||
| 1283 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
| 1284 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
| 1285 | CONFIG_NTFS_FS=m | ||
| 1286 | # CONFIG_NTFS_DEBUG is not set | ||
| 1287 | # CONFIG_NTFS_RW is not set | ||
| 1288 | |||
| 1289 | # | ||
| 1290 | # Pseudo filesystems | ||
| 1291 | # | ||
| 1292 | CONFIG_PROC_FS=y | ||
| 1293 | CONFIG_PROC_KCORE=y | ||
| 1294 | CONFIG_PROC_SYSCTL=y | ||
| 1295 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 1296 | CONFIG_SYSFS=y | ||
| 1297 | CONFIG_TMPFS=y | ||
| 1298 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 1299 | CONFIG_HUGETLBFS=y | ||
| 1300 | CONFIG_HUGETLB_PAGE=y | ||
| 1301 | # CONFIG_CONFIGFS_FS is not set | ||
| 1302 | CONFIG_MISC_FILESYSTEMS=y | ||
| 1303 | # CONFIG_ADFS_FS is not set | ||
| 1304 | # CONFIG_AFFS_FS is not set | ||
| 1305 | # CONFIG_HFS_FS is not set | ||
| 1306 | # CONFIG_HFSPLUS_FS is not set | ||
| 1307 | # CONFIG_BEFS_FS is not set | ||
| 1308 | # CONFIG_BFS_FS is not set | ||
| 1309 | # CONFIG_EFS_FS is not set | ||
| 1310 | # CONFIG_CRAMFS is not set | ||
| 1311 | # CONFIG_SQUASHFS is not set | ||
| 1312 | # CONFIG_VXFS_FS is not set | ||
| 1313 | # CONFIG_MINIX_FS is not set | ||
| 1314 | # CONFIG_OMFS_FS is not set | ||
| 1315 | # CONFIG_HPFS_FS is not set | ||
| 1316 | # CONFIG_QNX4FS_FS is not set | ||
| 1317 | # CONFIG_ROMFS_FS is not set | ||
| 1318 | # CONFIG_SYSV_FS is not set | ||
| 1319 | # CONFIG_UFS_FS is not set | ||
| 1320 | CONFIG_NETWORK_FILESYSTEMS=y | ||
| 1321 | CONFIG_NFS_FS=m | ||
| 1322 | CONFIG_NFS_V3=y | ||
| 1323 | # CONFIG_NFS_V3_ACL is not set | ||
| 1324 | CONFIG_NFS_V4=y | ||
| 1325 | CONFIG_NFSD=m | ||
| 1326 | CONFIG_NFSD_V3=y | ||
| 1327 | # CONFIG_NFSD_V3_ACL is not set | ||
| 1328 | CONFIG_NFSD_V4=y | ||
| 1329 | CONFIG_LOCKD=m | ||
| 1330 | CONFIG_LOCKD_V4=y | ||
| 1331 | CONFIG_EXPORTFS=m | ||
| 1332 | CONFIG_NFS_COMMON=y | ||
| 1333 | CONFIG_SUNRPC=m | ||
| 1334 | CONFIG_SUNRPC_GSS=m | ||
| 1335 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
| 1336 | CONFIG_RPCSEC_GSS_KRB5=m | ||
| 1337 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 1338 | CONFIG_SMB_FS=m | ||
| 1339 | CONFIG_SMB_NLS_DEFAULT=y | ||
| 1340 | CONFIG_SMB_NLS_REMOTE="cp437" | ||
| 1341 | CONFIG_CIFS=m | ||
| 1342 | # CONFIG_CIFS_STATS is not set | ||
| 1343 | # CONFIG_CIFS_WEAK_PW_HASH is not set | ||
| 1344 | # CONFIG_CIFS_XATTR is not set | ||
| 1345 | # CONFIG_CIFS_DEBUG2 is not set | ||
| 1346 | # CONFIG_CIFS_EXPERIMENTAL is not set | ||
| 1347 | # CONFIG_NCP_FS is not set | ||
| 1348 | # CONFIG_CODA_FS is not set | ||
| 1349 | # CONFIG_AFS_FS is not set | ||
| 1350 | |||
| 1351 | # | ||
| 1352 | # Partition Types | ||
| 1353 | # | ||
| 1354 | CONFIG_PARTITION_ADVANCED=y | ||
| 1355 | # CONFIG_ACORN_PARTITION is not set | ||
| 1356 | # CONFIG_OSF_PARTITION is not set | ||
| 1357 | # CONFIG_AMIGA_PARTITION is not set | ||
| 1358 | # CONFIG_ATARI_PARTITION is not set | ||
| 1359 | # CONFIG_MAC_PARTITION is not set | ||
| 1360 | CONFIG_MSDOS_PARTITION=y | ||
| 1361 | # CONFIG_BSD_DISKLABEL is not set | ||
| 1362 | # CONFIG_MINIX_SUBPARTITION is not set | ||
| 1363 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
| 1364 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
| 1365 | # CONFIG_LDM_PARTITION is not set | ||
| 1366 | CONFIG_SGI_PARTITION=y | ||
| 1367 | # CONFIG_ULTRIX_PARTITION is not set | ||
| 1368 | # CONFIG_SUN_PARTITION is not set | ||
| 1369 | # CONFIG_KARMA_PARTITION is not set | ||
| 1370 | CONFIG_EFI_PARTITION=y | ||
| 1371 | # CONFIG_SYSV68_PARTITION is not set | ||
| 1372 | CONFIG_NLS=y | ||
| 1373 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
| 1374 | CONFIG_NLS_CODEPAGE_437=y | ||
| 1375 | CONFIG_NLS_CODEPAGE_737=m | ||
| 1376 | CONFIG_NLS_CODEPAGE_775=m | ||
| 1377 | CONFIG_NLS_CODEPAGE_850=m | ||
| 1378 | CONFIG_NLS_CODEPAGE_852=m | ||
| 1379 | CONFIG_NLS_CODEPAGE_855=m | ||
| 1380 | CONFIG_NLS_CODEPAGE_857=m | ||
| 1381 | CONFIG_NLS_CODEPAGE_860=m | ||
| 1382 | CONFIG_NLS_CODEPAGE_861=m | ||
| 1383 | CONFIG_NLS_CODEPAGE_862=m | ||
| 1384 | CONFIG_NLS_CODEPAGE_863=m | ||
| 1385 | CONFIG_NLS_CODEPAGE_864=m | ||
| 1386 | CONFIG_NLS_CODEPAGE_865=m | ||
| 1387 | CONFIG_NLS_CODEPAGE_866=m | ||
| 1388 | CONFIG_NLS_CODEPAGE_869=m | ||
| 1389 | CONFIG_NLS_CODEPAGE_936=m | ||
| 1390 | CONFIG_NLS_CODEPAGE_950=m | ||
| 1391 | CONFIG_NLS_CODEPAGE_932=m | ||
| 1392 | CONFIG_NLS_CODEPAGE_949=m | ||
| 1393 | CONFIG_NLS_CODEPAGE_874=m | ||
| 1394 | CONFIG_NLS_ISO8859_8=m | ||
| 1395 | CONFIG_NLS_CODEPAGE_1250=m | ||
| 1396 | CONFIG_NLS_CODEPAGE_1251=m | ||
| 1397 | # CONFIG_NLS_ASCII is not set | ||
| 1398 | CONFIG_NLS_ISO8859_1=y | ||
| 1399 | CONFIG_NLS_ISO8859_2=m | ||
| 1400 | CONFIG_NLS_ISO8859_3=m | ||
| 1401 | CONFIG_NLS_ISO8859_4=m | ||
| 1402 | CONFIG_NLS_ISO8859_5=m | ||
| 1403 | CONFIG_NLS_ISO8859_6=m | ||
| 1404 | CONFIG_NLS_ISO8859_7=m | ||
| 1405 | CONFIG_NLS_ISO8859_9=m | ||
| 1406 | CONFIG_NLS_ISO8859_13=m | ||
| 1407 | CONFIG_NLS_ISO8859_14=m | ||
| 1408 | CONFIG_NLS_ISO8859_15=m | ||
| 1409 | CONFIG_NLS_KOI8_R=m | ||
| 1410 | CONFIG_NLS_KOI8_U=m | ||
| 1411 | CONFIG_NLS_UTF8=m | ||
| 1412 | # CONFIG_DLM is not set | ||
| 1413 | |||
| 1414 | # | ||
| 1415 | # Kernel hacking | ||
| 1416 | # | ||
| 1417 | # CONFIG_PRINTK_TIME is not set | ||
| 1418 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
| 1419 | CONFIG_ENABLE_MUST_CHECK=y | ||
| 1420 | CONFIG_FRAME_WARN=2048 | ||
| 1421 | CONFIG_MAGIC_SYSRQ=y | ||
| 1422 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 1423 | # CONFIG_DEBUG_FS is not set | ||
| 1424 | # CONFIG_HEADERS_CHECK is not set | ||
| 1425 | CONFIG_DEBUG_KERNEL=y | ||
| 1426 | # CONFIG_DEBUG_SHIRQ is not set | ||
| 1427 | CONFIG_DETECT_SOFTLOCKUP=y | ||
| 1428 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||
| 1429 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||
| 1430 | CONFIG_SCHED_DEBUG=y | ||
| 1431 | # CONFIG_SCHEDSTATS is not set | ||
| 1432 | # CONFIG_TIMER_STATS is not set | ||
| 1433 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 1434 | # CONFIG_SLUB_DEBUG_ON is not set | ||
| 1435 | # CONFIG_SLUB_STATS is not set | ||
| 1436 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
| 1437 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 1438 | # CONFIG_DEBUG_SPINLOCK is not set | ||
| 1439 | CONFIG_DEBUG_MUTEXES=y | ||
| 1440 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
| 1441 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
| 1442 | # CONFIG_DEBUG_KOBJECT is not set | ||
| 1443 | # CONFIG_DEBUG_INFO is not set | ||
| 1444 | # CONFIG_DEBUG_VM is not set | ||
| 1445 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 1446 | CONFIG_DEBUG_MEMORY_INIT=y | ||
| 1447 | # CONFIG_DEBUG_LIST is not set | ||
| 1448 | # CONFIG_DEBUG_SG is not set | ||
| 1449 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
| 1450 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
| 1451 | # CONFIG_RCU_TORTURE_TEST is not set | ||
| 1452 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
| 1453 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
| 1454 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
| 1455 | # CONFIG_FAULT_INJECTION is not set | ||
| 1456 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | ||
| 1457 | |||
| 1458 | # | ||
| 1459 | # Tracers | ||
| 1460 | # | ||
| 1461 | # CONFIG_SCHED_TRACER is not set | ||
| 1462 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | ||
| 1463 | # CONFIG_BOOT_TRACER is not set | ||
| 1464 | # CONFIG_TRACE_BRANCH_PROFILING is not set | ||
| 1465 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | ||
| 1466 | # CONFIG_SAMPLES is not set | ||
| 1467 | CONFIG_IA64_GRANULE_16MB=y | ||
| 1468 | # CONFIG_IA64_GRANULE_64MB is not set | ||
| 1469 | # CONFIG_IA64_PRINT_HAZARDS is not set | ||
| 1470 | # CONFIG_DISABLE_VHPT is not set | ||
| 1471 | # CONFIG_IA64_DEBUG_CMPXCHG is not set | ||
| 1472 | # CONFIG_IA64_DEBUG_IRQ is not set | ||
| 1473 | |||
| 1474 | # | ||
| 1475 | # Security options | ||
| 1476 | # | ||
| 1477 | # CONFIG_KEYS is not set | ||
| 1478 | # CONFIG_SECURITY is not set | ||
| 1479 | # CONFIG_SECURITYFS is not set | ||
| 1480 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
| 1481 | CONFIG_CRYPTO=y | ||
| 1482 | |||
| 1483 | # | ||
| 1484 | # Crypto core or helper | ||
| 1485 | # | ||
| 1486 | # CONFIG_CRYPTO_FIPS is not set | ||
| 1487 | CONFIG_CRYPTO_ALGAPI=y | ||
| 1488 | CONFIG_CRYPTO_ALGAPI2=y | ||
| 1489 | CONFIG_CRYPTO_AEAD2=y | ||
| 1490 | CONFIG_CRYPTO_BLKCIPHER=m | ||
| 1491 | CONFIG_CRYPTO_BLKCIPHER2=y | ||
| 1492 | CONFIG_CRYPTO_HASH=y | ||
| 1493 | CONFIG_CRYPTO_HASH2=y | ||
| 1494 | CONFIG_CRYPTO_RNG2=y | ||
| 1495 | CONFIG_CRYPTO_MANAGER=m | ||
| 1496 | CONFIG_CRYPTO_MANAGER2=y | ||
| 1497 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 1498 | # CONFIG_CRYPTO_NULL is not set | ||
| 1499 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1500 | # CONFIG_CRYPTO_AUTHENC is not set | ||
| 1501 | # CONFIG_CRYPTO_TEST is not set | ||
| 1502 | |||
| 1503 | # | ||
| 1504 | # Authenticated Encryption with Associated Data | ||
| 1505 | # | ||
| 1506 | # CONFIG_CRYPTO_CCM is not set | ||
| 1507 | # CONFIG_CRYPTO_GCM is not set | ||
| 1508 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 1509 | |||
| 1510 | # | ||
| 1511 | # Block modes | ||
| 1512 | # | ||
| 1513 | CONFIG_CRYPTO_CBC=m | ||
| 1514 | # CONFIG_CRYPTO_CTR is not set | ||
| 1515 | # CONFIG_CRYPTO_CTS is not set | ||
| 1516 | CONFIG_CRYPTO_ECB=m | ||
| 1517 | # CONFIG_CRYPTO_LRW is not set | ||
| 1518 | CONFIG_CRYPTO_PCBC=m | ||
| 1519 | # CONFIG_CRYPTO_XTS is not set | ||
| 1520 | |||
| 1521 | # | ||
| 1522 | # Hash modes | ||
| 1523 | # | ||
| 1524 | # CONFIG_CRYPTO_HMAC is not set | ||
| 1525 | # CONFIG_CRYPTO_XCBC is not set | ||
| 1526 | |||
| 1527 | # | ||
| 1528 | # Digest | ||
| 1529 | # | ||
| 1530 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1531 | # CONFIG_CRYPTO_MD4 is not set | ||
| 1532 | CONFIG_CRYPTO_MD5=y | ||
| 1533 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1534 | # CONFIG_CRYPTO_RMD128 is not set | ||
| 1535 | # CONFIG_CRYPTO_RMD160 is not set | ||
| 1536 | # CONFIG_CRYPTO_RMD256 is not set | ||
| 1537 | # CONFIG_CRYPTO_RMD320 is not set | ||
| 1538 | # CONFIG_CRYPTO_SHA1 is not set | ||
| 1539 | # CONFIG_CRYPTO_SHA256 is not set | ||
| 1540 | # CONFIG_CRYPTO_SHA512 is not set | ||
| 1541 | # CONFIG_CRYPTO_TGR192 is not set | ||
| 1542 | # CONFIG_CRYPTO_WP512 is not set | ||
| 1543 | |||
| 1544 | # | ||
| 1545 | # Ciphers | ||
| 1546 | # | ||
| 1547 | # CONFIG_CRYPTO_AES is not set | ||
| 1548 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1549 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 1550 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1551 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1552 | # CONFIG_CRYPTO_CAST5 is not set | ||
| 1553 | # CONFIG_CRYPTO_CAST6 is not set | ||
| 1554 | CONFIG_CRYPTO_DES=m | ||
| 1555 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 1556 | # CONFIG_CRYPTO_KHAZAD is not set | ||
| 1557 | # CONFIG_CRYPTO_SALSA20 is not set | ||
| 1558 | # CONFIG_CRYPTO_SEED is not set | ||
| 1559 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1560 | # CONFIG_CRYPTO_TEA is not set | ||
| 1561 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1562 | |||
| 1563 | # | ||
| 1564 | # Compression | ||
| 1565 | # | ||
| 1566 | # CONFIG_CRYPTO_DEFLATE is not set | ||
| 1567 | # CONFIG_CRYPTO_LZO is not set | ||
| 1568 | |||
| 1569 | # | ||
| 1570 | # Random Number Generation | ||
| 1571 | # | ||
| 1572 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
| 1573 | CONFIG_CRYPTO_HW=y | ||
| 1574 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set | ||
| 1575 | CONFIG_HAVE_KVM=y | ||
| 1576 | CONFIG_VIRTUALIZATION=y | ||
| 1577 | # CONFIG_KVM is not set | ||
| 1578 | # CONFIG_VIRTIO_PCI is not set | ||
| 1579 | # CONFIG_VIRTIO_BALLOON is not set | ||
| 1580 | |||
| 1581 | # | ||
| 1582 | # Library routines | ||
| 1583 | # | ||
| 1584 | CONFIG_BITREVERSE=y | ||
| 1585 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
| 1586 | # CONFIG_CRC_CCITT is not set | ||
| 1587 | # CONFIG_CRC16 is not set | ||
| 1588 | # CONFIG_CRC_T10DIF is not set | ||
| 1589 | CONFIG_CRC_ITU_T=m | ||
| 1590 | CONFIG_CRC32=y | ||
| 1591 | # CONFIG_CRC7 is not set | ||
| 1592 | # CONFIG_LIBCRC32C is not set | ||
| 1593 | CONFIG_PLIST=y | ||
| 1594 | CONFIG_HAS_IOMEM=y | ||
| 1595 | CONFIG_HAS_IOPORT=y | ||
| 1596 | CONFIG_HAS_DMA=y | ||
| 1597 | CONFIG_GENERIC_HARDIRQS=y | ||
| 1598 | CONFIG_GENERIC_IRQ_PROBE=y | ||
| 1599 | CONFIG_GENERIC_PENDING_IRQ=y | ||
| 1600 | CONFIG_IRQ_PER_CPU=y | ||
| 1601 | # CONFIG_IOMMU_API is not set | ||
diff --git a/arch/ia64/include/asm/kvm.h b/arch/ia64/include/asm/kvm.h index 68aa6da807c1..bfa86b6af7cd 100644 --- a/arch/ia64/include/asm/kvm.h +++ b/arch/ia64/include/asm/kvm.h | |||
| @@ -25,6 +25,10 @@ | |||
| 25 | 25 | ||
| 26 | #include <linux/ioctl.h> | 26 | #include <linux/ioctl.h> |
| 27 | 27 | ||
| 28 | /* Select x86 specific features in <linux/kvm.h> */ | ||
| 29 | #define __KVM_HAVE_IOAPIC | ||
| 30 | #define __KVM_HAVE_DEVICE_ASSIGNMENT | ||
| 31 | |||
| 28 | /* Architectural interrupt line count. */ | 32 | /* Architectural interrupt line count. */ |
| 29 | #define KVM_NR_INTERRUPTS 256 | 33 | #define KVM_NR_INTERRUPTS 256 |
| 30 | 34 | ||
diff --git a/arch/ia64/include/asm/mmzone.h b/arch/ia64/include/asm/mmzone.h index 34efe88eb849..f2ca32069b3f 100644 --- a/arch/ia64/include/asm/mmzone.h +++ b/arch/ia64/include/asm/mmzone.h | |||
| @@ -31,10 +31,6 @@ static inline int pfn_to_nid(unsigned long pfn) | |||
| 31 | #endif | 31 | #endif |
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | #ifdef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID | ||
| 35 | extern int early_pfn_to_nid(unsigned long pfn); | ||
| 36 | #endif | ||
| 37 | |||
| 38 | #ifdef CONFIG_IA64_DIG /* DIG systems are small */ | 34 | #ifdef CONFIG_IA64_DIG /* DIG systems are small */ |
| 39 | # define MAX_PHYSNODE_ID 8 | 35 | # define MAX_PHYSNODE_ID 8 |
| 40 | # define NR_NODE_MEMBLKS (MAX_NUMNODES * 8) | 36 | # define NR_NODE_MEMBLKS (MAX_NUMNODES * 8) |
diff --git a/arch/ia64/include/asm/sn/bte.h b/arch/ia64/include/asm/sn/bte.h index 5efecf06c9a4..96798d2da7c2 100644 --- a/arch/ia64/include/asm/sn/bte.h +++ b/arch/ia64/include/asm/sn/bte.h | |||
| @@ -39,7 +39,7 @@ | |||
| 39 | /* BTE status register only supports 16 bits for length field */ | 39 | /* BTE status register only supports 16 bits for length field */ |
| 40 | #define BTE_LEN_BITS (16) | 40 | #define BTE_LEN_BITS (16) |
| 41 | #define BTE_LEN_MASK ((1 << BTE_LEN_BITS) - 1) | 41 | #define BTE_LEN_MASK ((1 << BTE_LEN_BITS) - 1) |
| 42 | #define BTE_MAX_XFER ((1 << BTE_LEN_BITS) * L1_CACHE_BYTES) | 42 | #define BTE_MAX_XFER (BTE_LEN_MASK << L1_CACHE_SHIFT) |
| 43 | 43 | ||
| 44 | 44 | ||
| 45 | /* Define hardware */ | 45 | /* Define hardware */ |
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c index 5cfd3d91001a..e13125058bed 100644 --- a/arch/ia64/kernel/iosapic.c +++ b/arch/ia64/kernel/iosapic.c | |||
| @@ -507,7 +507,7 @@ static int iosapic_find_sharable_irq(unsigned long trigger, unsigned long pol) | |||
| 507 | if (trigger == IOSAPIC_EDGE) | 507 | if (trigger == IOSAPIC_EDGE) |
| 508 | return -EINVAL; | 508 | return -EINVAL; |
| 509 | 509 | ||
| 510 | for (i = 0; i <= NR_IRQS; i++) { | 510 | for (i = 0; i < NR_IRQS; i++) { |
| 511 | info = &iosapic_intr_info[i]; | 511 | info = &iosapic_intr_info[i]; |
| 512 | if (info->trigger == trigger && info->polarity == pol && | 512 | if (info->trigger == trigger && info->polarity == pol && |
| 513 | (info->dmode == IOSAPIC_FIXED || | 513 | (info->dmode == IOSAPIC_FIXED || |
diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c index 11463994a7d5..52290547c85b 100644 --- a/arch/ia64/kernel/smpboot.c +++ b/arch/ia64/kernel/smpboot.c | |||
| @@ -736,14 +736,15 @@ int __cpu_disable(void) | |||
| 736 | return -EBUSY; | 736 | return -EBUSY; |
| 737 | } | 737 | } |
| 738 | 738 | ||
| 739 | cpu_clear(cpu, cpu_online_map); | ||
| 740 | |||
| 739 | if (migrate_platform_irqs(cpu)) { | 741 | if (migrate_platform_irqs(cpu)) { |
| 740 | cpu_set(cpu, cpu_online_map); | 742 | cpu_set(cpu, cpu_online_map); |
| 741 | return (-EBUSY); | 743 | return -EBUSY; |
| 742 | } | 744 | } |
| 743 | 745 | ||
| 744 | remove_siblinginfo(cpu); | 746 | remove_siblinginfo(cpu); |
| 745 | fixup_irqs(); | 747 | fixup_irqs(); |
| 746 | cpu_clear(cpu, cpu_online_map); | ||
| 747 | local_flush_tlb_all(); | 748 | local_flush_tlb_all(); |
| 748 | cpu_clear(cpu, cpu_callin_map); | 749 | cpu_clear(cpu, cpu_callin_map); |
| 749 | return 0; | 750 | return 0; |
diff --git a/arch/ia64/kernel/unwind.c b/arch/ia64/kernel/unwind.c index 67810b77d998..b6c0e63a0bf6 100644 --- a/arch/ia64/kernel/unwind.c +++ b/arch/ia64/kernel/unwind.c | |||
| @@ -2149,7 +2149,7 @@ unw_remove_unwind_table (void *handle) | |||
| 2149 | 2149 | ||
| 2150 | /* next, remove hash table entries for this table */ | 2150 | /* next, remove hash table entries for this table */ |
| 2151 | 2151 | ||
| 2152 | for (index = 0; index <= UNW_HASH_SIZE; ++index) { | 2152 | for (index = 0; index < UNW_HASH_SIZE; ++index) { |
| 2153 | tmp = unw.cache + unw.hash[index]; | 2153 | tmp = unw.cache + unw.hash[index]; |
| 2154 | if (unw.hash[index] >= UNW_CACHE_SIZE | 2154 | if (unw.hash[index] >= UNW_CACHE_SIZE |
| 2155 | || tmp->ip < table->start || tmp->ip >= table->end) | 2155 | || tmp->ip < table->start || tmp->ip >= table->end) |
diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c index 4e586f6110aa..28f982045f29 100644 --- a/arch/ia64/kvm/kvm-ia64.c +++ b/arch/ia64/kvm/kvm-ia64.c | |||
| @@ -1337,6 +1337,10 @@ static void kvm_release_vm_pages(struct kvm *kvm) | |||
| 1337 | } | 1337 | } |
| 1338 | } | 1338 | } |
| 1339 | 1339 | ||
| 1340 | void kvm_arch_sync_events(struct kvm *kvm) | ||
| 1341 | { | ||
| 1342 | } | ||
| 1343 | |||
| 1340 | void kvm_arch_destroy_vm(struct kvm *kvm) | 1344 | void kvm_arch_destroy_vm(struct kvm *kvm) |
| 1341 | { | 1345 | { |
| 1342 | kvm_iommu_unmap_guest(kvm); | 1346 | kvm_iommu_unmap_guest(kvm); |
diff --git a/arch/ia64/kvm/process.c b/arch/ia64/kvm/process.c index 552d07724207..230eae482f32 100644 --- a/arch/ia64/kvm/process.c +++ b/arch/ia64/kvm/process.c | |||
| @@ -455,13 +455,18 @@ fpswa_ret_t vmm_fp_emulate(int fp_fault, void *bundle, unsigned long *ipsr, | |||
| 455 | if (!vmm_fpswa_interface) | 455 | if (!vmm_fpswa_interface) |
| 456 | return (fpswa_ret_t) {-1, 0, 0, 0}; | 456 | return (fpswa_ret_t) {-1, 0, 0, 0}; |
| 457 | 457 | ||
| 458 | /* | ||
| 459 | * Just let fpswa driver to use hardware fp registers. | ||
| 460 | * No fp register is valid in memory. | ||
| 461 | */ | ||
| 462 | memset(&fp_state, 0, sizeof(fp_state_t)); | 458 | memset(&fp_state, 0, sizeof(fp_state_t)); |
| 463 | 459 | ||
| 464 | /* | 460 | /* |
| 461 | * compute fp_state. only FP registers f6 - f11 are used by the | ||
| 462 | * vmm, so set those bits in the mask and set the low volatile | ||
| 463 | * pointer to point to these registers. | ||
| 464 | */ | ||
| 465 | fp_state.bitmask_low64 = 0xfc0; /* bit6..bit11 */ | ||
| 466 | |||
| 467 | fp_state.fp_state_low_volatile = (fp_state_low_volatile_t *) ®s->f6; | ||
| 468 | |||
| 469 | /* | ||
| 465 | * unsigned long (*EFI_FPSWA) ( | 470 | * unsigned long (*EFI_FPSWA) ( |
| 466 | * unsigned long trap_type, | 471 | * unsigned long trap_type, |
| 467 | * void *Bundle, | 472 | * void *Bundle, |
| @@ -545,10 +550,6 @@ void reflect_interruption(u64 ifa, u64 isr, u64 iim, | |||
| 545 | status = vmm_handle_fpu_swa(0, regs, isr); | 550 | status = vmm_handle_fpu_swa(0, regs, isr); |
| 546 | if (!status) | 551 | if (!status) |
| 547 | return ; | 552 | return ; |
| 548 | else if (-EAGAIN == status) { | ||
| 549 | vcpu_decrement_iip(vcpu); | ||
| 550 | return ; | ||
| 551 | } | ||
| 552 | break; | 553 | break; |
| 553 | } | 554 | } |
| 554 | 555 | ||
diff --git a/arch/ia64/mm/numa.c b/arch/ia64/mm/numa.c index b73bf1838e57..3efea7d0a351 100644 --- a/arch/ia64/mm/numa.c +++ b/arch/ia64/mm/numa.c | |||
| @@ -58,7 +58,7 @@ paddr_to_nid(unsigned long paddr) | |||
| 58 | * SPARSEMEM to allocate the SPARSEMEM sectionmap on the NUMA node where | 58 | * SPARSEMEM to allocate the SPARSEMEM sectionmap on the NUMA node where |
| 59 | * the section resides. | 59 | * the section resides. |
| 60 | */ | 60 | */ |
| 61 | int early_pfn_to_nid(unsigned long pfn) | 61 | int __meminit __early_pfn_to_nid(unsigned long pfn) |
| 62 | { | 62 | { |
| 63 | int i, section = pfn >> PFN_SECTION_SHIFT, ssec, esec; | 63 | int i, section = pfn >> PFN_SECTION_SHIFT, ssec, esec; |
| 64 | 64 | ||
| @@ -70,7 +70,7 @@ int early_pfn_to_nid(unsigned long pfn) | |||
| 70 | return node_memblk[i].nid; | 70 | return node_memblk[i].nid; |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | return 0; | 73 | return -1; |
| 74 | } | 74 | } |
| 75 | 75 | ||
| 76 | #ifdef CONFIG_MEMORY_HOTPLUG | 76 | #ifdef CONFIG_MEMORY_HOTPLUG |
diff --git a/arch/ia64/sn/kernel/bte.c b/arch/ia64/sn/kernel/bte.c index 9456d4034024..c6d6b62db66c 100644 --- a/arch/ia64/sn/kernel/bte.c +++ b/arch/ia64/sn/kernel/bte.c | |||
| @@ -97,9 +97,10 @@ bte_result_t bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification) | |||
| 97 | return BTE_SUCCESS; | 97 | return BTE_SUCCESS; |
| 98 | } | 98 | } |
| 99 | 99 | ||
| 100 | BUG_ON((len & L1_CACHE_MASK) || | 100 | BUG_ON(len & L1_CACHE_MASK); |
| 101 | (src & L1_CACHE_MASK) || (dest & L1_CACHE_MASK)); | 101 | BUG_ON(src & L1_CACHE_MASK); |
| 102 | BUG_ON(!(len < ((BTE_LEN_MASK + 1) << L1_CACHE_SHIFT))); | 102 | BUG_ON(dest & L1_CACHE_MASK); |
| 103 | BUG_ON(len > BTE_MAX_XFER); | ||
| 103 | 104 | ||
| 104 | /* | 105 | /* |
| 105 | * Start with interface corresponding to cpu number | 106 | * Start with interface corresponding to cpu number |
diff --git a/arch/ia64/sn/kernel/io_acpi_init.c b/arch/ia64/sn/kernel/io_acpi_init.c index c5a214026a77..d0223abbbbd4 100644 --- a/arch/ia64/sn/kernel/io_acpi_init.c +++ b/arch/ia64/sn/kernel/io_acpi_init.c | |||
| @@ -443,7 +443,7 @@ sn_acpi_slot_fixup(struct pci_dev *dev) | |||
| 443 | size = pci_resource_len(dev, PCI_ROM_RESOURCE); | 443 | size = pci_resource_len(dev, PCI_ROM_RESOURCE); |
| 444 | addr = ioremap(pcidev_info->pdi_pio_mapped_addr[PCI_ROM_RESOURCE], | 444 | addr = ioremap(pcidev_info->pdi_pio_mapped_addr[PCI_ROM_RESOURCE], |
| 445 | size); | 445 | size); |
| 446 | image_size = pci_get_rom_size(addr, size); | 446 | image_size = pci_get_rom_size(dev, addr, size); |
| 447 | dev->resource[PCI_ROM_RESOURCE].start = (unsigned long) addr; | 447 | dev->resource[PCI_ROM_RESOURCE].start = (unsigned long) addr; |
| 448 | dev->resource[PCI_ROM_RESOURCE].end = | 448 | dev->resource[PCI_ROM_RESOURCE].end = |
| 449 | (unsigned long) addr + image_size - 1; | 449 | (unsigned long) addr + image_size - 1; |
diff --git a/arch/ia64/sn/kernel/io_init.c b/arch/ia64/sn/kernel/io_init.c index 4e1801bad83a..e2eb2da60f96 100644 --- a/arch/ia64/sn/kernel/io_init.c +++ b/arch/ia64/sn/kernel/io_init.c | |||
| @@ -269,7 +269,7 @@ sn_io_slot_fixup(struct pci_dev *dev) | |||
| 269 | 269 | ||
| 270 | rom = ioremap(pci_resource_start(dev, PCI_ROM_RESOURCE), | 270 | rom = ioremap(pci_resource_start(dev, PCI_ROM_RESOURCE), |
| 271 | size + 1); | 271 | size + 1); |
| 272 | image_size = pci_get_rom_size(rom, size + 1); | 272 | image_size = pci_get_rom_size(dev, rom, size + 1); |
| 273 | dev->resource[PCI_ROM_RESOURCE].end = | 273 | dev->resource[PCI_ROM_RESOURCE].end = |
| 274 | dev->resource[PCI_ROM_RESOURCE].start + | 274 | dev->resource[PCI_ROM_RESOURCE].start + |
| 275 | image_size - 1; | 275 | image_size - 1; |
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_dma.c b/arch/ia64/sn/pci/pcibr/pcibr_dma.c index e626e50a938a..060df4aa9916 100644 --- a/arch/ia64/sn/pci/pcibr/pcibr_dma.c +++ b/arch/ia64/sn/pci/pcibr/pcibr_dma.c | |||
| @@ -135,11 +135,10 @@ pcibr_dmatrans_direct64(struct pcidev_info * info, u64 paddr, | |||
| 135 | if (SN_DMA_ADDRTYPE(dma_flags) == SN_DMA_ADDR_PHYS) | 135 | if (SN_DMA_ADDRTYPE(dma_flags) == SN_DMA_ADDR_PHYS) |
| 136 | pci_addr = IS_PIC_SOFT(pcibus_info) ? | 136 | pci_addr = IS_PIC_SOFT(pcibus_info) ? |
| 137 | PHYS_TO_DMA(paddr) : | 137 | PHYS_TO_DMA(paddr) : |
| 138 | PHYS_TO_TIODMA(paddr) | dma_attributes; | 138 | PHYS_TO_TIODMA(paddr); |
| 139 | else | 139 | else |
| 140 | pci_addr = IS_PIC_SOFT(pcibus_info) ? | 140 | pci_addr = paddr; |
| 141 | paddr : | 141 | pci_addr |= dma_attributes; |
| 142 | paddr | dma_attributes; | ||
| 143 | 142 | ||
| 144 | /* Handle Bus mode */ | 143 | /* Handle Bus mode */ |
| 145 | if (IS_PCIX(pcibus_info)) | 144 | if (IS_PCIX(pcibus_info)) |
diff --git a/arch/ia64/xen/Kconfig b/arch/ia64/xen/Kconfig index f1683a20275b..515e0826803a 100644 --- a/arch/ia64/xen/Kconfig +++ b/arch/ia64/xen/Kconfig | |||
| @@ -8,8 +8,7 @@ config XEN | |||
| 8 | depends on PARAVIRT && MCKINLEY && IA64_PAGE_SIZE_16KB && EXPERIMENTAL | 8 | depends on PARAVIRT && MCKINLEY && IA64_PAGE_SIZE_16KB && EXPERIMENTAL |
| 9 | select XEN_XENCOMM | 9 | select XEN_XENCOMM |
| 10 | select NO_IDLE_HZ | 10 | select NO_IDLE_HZ |
| 11 | 11 | # followings are required to save/restore. | |
| 12 | # those are required to save/restore. | ||
| 13 | select ARCH_SUSPEND_POSSIBLE | 12 | select ARCH_SUSPEND_POSSIBLE |
| 14 | select SUSPEND | 13 | select SUSPEND |
| 15 | select PM_SLEEP | 14 | select PM_SLEEP |
diff --git a/arch/ia64/xen/xen_pv_ops.c b/arch/ia64/xen/xen_pv_ops.c index 04cd12350455..936cff3c96e0 100644 --- a/arch/ia64/xen/xen_pv_ops.c +++ b/arch/ia64/xen/xen_pv_ops.c | |||
| @@ -153,7 +153,7 @@ xen_post_smp_prepare_boot_cpu(void) | |||
| 153 | xen_setup_vcpu_info_placement(); | 153 | xen_setup_vcpu_info_placement(); |
| 154 | } | 154 | } |
| 155 | 155 | ||
| 156 | static const struct pv_init_ops xen_init_ops __initdata = { | 156 | static const struct pv_init_ops xen_init_ops __initconst = { |
| 157 | .banner = xen_banner, | 157 | .banner = xen_banner, |
| 158 | 158 | ||
| 159 | .reserve_memory = xen_reserve_memory, | 159 | .reserve_memory = xen_reserve_memory, |
| @@ -337,7 +337,7 @@ xen_iosapic_write(char __iomem *iosapic, unsigned int reg, u32 val) | |||
| 337 | HYPERVISOR_physdev_op(PHYSDEVOP_apic_write, &apic_op); | 337 | HYPERVISOR_physdev_op(PHYSDEVOP_apic_write, &apic_op); |
| 338 | } | 338 | } |
| 339 | 339 | ||
| 340 | static const struct pv_iosapic_ops xen_iosapic_ops __initdata = { | 340 | static const struct pv_iosapic_ops xen_iosapic_ops __initconst = { |
| 341 | .pcat_compat_init = xen_pcat_compat_init, | 341 | .pcat_compat_init = xen_pcat_compat_init, |
| 342 | .__get_irq_chip = xen_iosapic_get_irq_chip, | 342 | .__get_irq_chip = xen_iosapic_get_irq_chip, |
| 343 | 343 | ||
diff --git a/arch/m68k/atari/ataints.c b/arch/m68k/atari/ataints.c index dba4afabb444..39478dd08e67 100644 --- a/arch/m68k/atari/ataints.c +++ b/arch/m68k/atari/ataints.c | |||
| @@ -187,8 +187,8 @@ __asm__ (__ALIGN_STR "\n" \ | |||
| 187 | " jbra ret_from_interrupt\n" \ | 187 | " jbra ret_from_interrupt\n" \ |
| 188 | : : "i" (&kstat_cpu(0).irqs[n+8]), "i" (&irq_handler[n+8]), \ | 188 | : : "i" (&kstat_cpu(0).irqs[n+8]), "i" (&irq_handler[n+8]), \ |
| 189 | "n" (PT_OFF_SR), "n" (n), \ | 189 | "n" (PT_OFF_SR), "n" (n), \ |
| 190 | "i" (n & 8 ? (n & 16 ? &tt_mfp.int_mk_a : &mfp.int_mk_a) \ | 190 | "i" (n & 8 ? (n & 16 ? &tt_mfp.int_mk_a : &st_mfp.int_mk_a) \ |
| 191 | : (n & 16 ? &tt_mfp.int_mk_b : &mfp.int_mk_b)), \ | 191 | : (n & 16 ? &tt_mfp.int_mk_b : &st_mfp.int_mk_b)), \ |
| 192 | "m" (preempt_count()), "di" (HARDIRQ_OFFSET) \ | 192 | "m" (preempt_count()), "di" (HARDIRQ_OFFSET) \ |
| 193 | ); \ | 193 | ); \ |
| 194 | for (;;); /* fake noreturn */ \ | 194 | for (;;); /* fake noreturn */ \ |
| @@ -366,14 +366,14 @@ void __init atari_init_IRQ(void) | |||
| 366 | /* Initialize the MFP(s) */ | 366 | /* Initialize the MFP(s) */ |
| 367 | 367 | ||
| 368 | #ifdef ATARI_USE_SOFTWARE_EOI | 368 | #ifdef ATARI_USE_SOFTWARE_EOI |
| 369 | mfp.vec_adr = 0x48; /* Software EOI-Mode */ | 369 | st_mfp.vec_adr = 0x48; /* Software EOI-Mode */ |
| 370 | #else | 370 | #else |
| 371 | mfp.vec_adr = 0x40; /* Automatic EOI-Mode */ | 371 | st_mfp.vec_adr = 0x40; /* Automatic EOI-Mode */ |
| 372 | #endif | 372 | #endif |
| 373 | mfp.int_en_a = 0x00; /* turn off MFP-Ints */ | 373 | st_mfp.int_en_a = 0x00; /* turn off MFP-Ints */ |
| 374 | mfp.int_en_b = 0x00; | 374 | st_mfp.int_en_b = 0x00; |
| 375 | mfp.int_mk_a = 0xff; /* no Masking */ | 375 | st_mfp.int_mk_a = 0xff; /* no Masking */ |
| 376 | mfp.int_mk_b = 0xff; | 376 | st_mfp.int_mk_b = 0xff; |
| 377 | 377 | ||
| 378 | if (ATARIHW_PRESENT(TT_MFP)) { | 378 | if (ATARIHW_PRESENT(TT_MFP)) { |
| 379 | #ifdef ATARI_USE_SOFTWARE_EOI | 379 | #ifdef ATARI_USE_SOFTWARE_EOI |
diff --git a/arch/m68k/atari/atakeyb.c b/arch/m68k/atari/atakeyb.c index a5f33c059979..4add96d13b19 100644 --- a/arch/m68k/atari/atakeyb.c +++ b/arch/m68k/atari/atakeyb.c | |||
| @@ -609,10 +609,10 @@ int atari_keyb_init(void) | |||
| 609 | ACIA_RHTID : 0); | 609 | ACIA_RHTID : 0); |
| 610 | 610 | ||
| 611 | /* make sure the interrupt line is up */ | 611 | /* make sure the interrupt line is up */ |
| 612 | } while ((mfp.par_dt_reg & 0x10) == 0); | 612 | } while ((st_mfp.par_dt_reg & 0x10) == 0); |
| 613 | 613 | ||
| 614 | /* enable ACIA Interrupts */ | 614 | /* enable ACIA Interrupts */ |
| 615 | mfp.active_edge &= ~0x10; | 615 | st_mfp.active_edge &= ~0x10; |
| 616 | atari_turnon_irq(IRQ_MFP_ACIA); | 616 | atari_turnon_irq(IRQ_MFP_ACIA); |
| 617 | 617 | ||
| 618 | ikbd_self_test = 1; | 618 | ikbd_self_test = 1; |
diff --git a/arch/m68k/atari/config.c b/arch/m68k/atari/config.c index 49c28cdbea5c..ae2d96e5d618 100644 --- a/arch/m68k/atari/config.c +++ b/arch/m68k/atari/config.c | |||
| @@ -258,7 +258,7 @@ void __init config_atari(void) | |||
| 258 | printk("STND_SHIFTER "); | 258 | printk("STND_SHIFTER "); |
| 259 | } | 259 | } |
| 260 | } | 260 | } |
| 261 | if (hwreg_present(&mfp.par_dt_reg)) { | 261 | if (hwreg_present(&st_mfp.par_dt_reg)) { |
| 262 | ATARIHW_SET(ST_MFP); | 262 | ATARIHW_SET(ST_MFP); |
| 263 | printk("ST_MFP "); | 263 | printk("ST_MFP "); |
| 264 | } | 264 | } |
diff --git a/arch/m68k/atari/debug.c b/arch/m68k/atari/debug.c index 702b15ccfab7..28efdc33c1ae 100644 --- a/arch/m68k/atari/debug.c +++ b/arch/m68k/atari/debug.c | |||
| @@ -34,9 +34,9 @@ static struct console atari_console_driver = { | |||
| 34 | 34 | ||
| 35 | static inline void ata_mfp_out(char c) | 35 | static inline void ata_mfp_out(char c) |
| 36 | { | 36 | { |
| 37 | while (!(mfp.trn_stat & 0x80)) /* wait for tx buf empty */ | 37 | while (!(st_mfp.trn_stat & 0x80)) /* wait for tx buf empty */ |
| 38 | barrier(); | 38 | barrier(); |
| 39 | mfp.usart_dta = c; | 39 | st_mfp.usart_dta = c; |
| 40 | } | 40 | } |
| 41 | 41 | ||
| 42 | static void atari_mfp_console_write(struct console *co, const char *str, | 42 | static void atari_mfp_console_write(struct console *co, const char *str, |
| @@ -91,7 +91,7 @@ static int ata_par_out(char c) | |||
| 91 | /* This a some-seconds timeout in case no printer is connected */ | 91 | /* This a some-seconds timeout in case no printer is connected */ |
| 92 | unsigned long i = loops_per_jiffy > 1 ? loops_per_jiffy : 10000000/HZ; | 92 | unsigned long i = loops_per_jiffy > 1 ? loops_per_jiffy : 10000000/HZ; |
| 93 | 93 | ||
| 94 | while ((mfp.par_dt_reg & 1) && --i) /* wait for BUSY == L */ | 94 | while ((st_mfp.par_dt_reg & 1) && --i) /* wait for BUSY == L */ |
| 95 | ; | 95 | ; |
| 96 | if (!i) | 96 | if (!i) |
| 97 | return 0; | 97 | return 0; |
| @@ -131,9 +131,9 @@ static void atari_par_console_write(struct console *co, const char *str, | |||
| 131 | #if 0 | 131 | #if 0 |
| 132 | int atari_mfp_console_wait_key(struct console *co) | 132 | int atari_mfp_console_wait_key(struct console *co) |
| 133 | { | 133 | { |
| 134 | while (!(mfp.rcv_stat & 0x80)) /* wait for rx buf filled */ | 134 | while (!(st_mfp.rcv_stat & 0x80)) /* wait for rx buf filled */ |
| 135 | barrier(); | 135 | barrier(); |
| 136 | return mfp.usart_dta; | 136 | return st_mfp.usart_dta; |
| 137 | } | 137 | } |
| 138 | 138 | ||
| 139 | int atari_scc_console_wait_key(struct console *co) | 139 | int atari_scc_console_wait_key(struct console *co) |
| @@ -175,12 +175,12 @@ static void __init atari_init_mfp_port(int cflag) | |||
| 175 | baud = B9600; /* use default 9600bps for non-implemented rates */ | 175 | baud = B9600; /* use default 9600bps for non-implemented rates */ |
| 176 | baud -= B1200; /* baud_table[] starts at 1200bps */ | 176 | baud -= B1200; /* baud_table[] starts at 1200bps */ |
| 177 | 177 | ||
| 178 | mfp.trn_stat &= ~0x01; /* disable TX */ | 178 | st_mfp.trn_stat &= ~0x01; /* disable TX */ |
| 179 | mfp.usart_ctr = parity | csize | 0x88; /* 1:16 clk mode, 1 stop bit */ | 179 | st_mfp.usart_ctr = parity | csize | 0x88; /* 1:16 clk mode, 1 stop bit */ |
| 180 | mfp.tim_ct_cd &= 0x70; /* stop timer D */ | 180 | st_mfp.tim_ct_cd &= 0x70; /* stop timer D */ |
| 181 | mfp.tim_dt_d = baud_table[baud]; | 181 | st_mfp.tim_dt_d = baud_table[baud]; |
| 182 | mfp.tim_ct_cd |= 0x01; /* start timer D, 1:4 */ | 182 | st_mfp.tim_ct_cd |= 0x01; /* start timer D, 1:4 */ |
| 183 | mfp.trn_stat |= 0x01; /* enable TX */ | 183 | st_mfp.trn_stat |= 0x01; /* enable TX */ |
| 184 | } | 184 | } |
| 185 | 185 | ||
| 186 | #define SCC_WRITE(reg, val) \ | 186 | #define SCC_WRITE(reg, val) \ |
diff --git a/arch/m68k/atari/time.c b/arch/m68k/atari/time.c index d076ff8d1b39..a0531f34c617 100644 --- a/arch/m68k/atari/time.c +++ b/arch/m68k/atari/time.c | |||
| @@ -27,9 +27,9 @@ void __init | |||
| 27 | atari_sched_init(irq_handler_t timer_routine) | 27 | atari_sched_init(irq_handler_t timer_routine) |
| 28 | { | 28 | { |
| 29 | /* set Timer C data Register */ | 29 | /* set Timer C data Register */ |
| 30 | mfp.tim_dt_c = INT_TICKS; | 30 | st_mfp.tim_dt_c = INT_TICKS; |
| 31 | /* start timer C, div = 1:100 */ | 31 | /* start timer C, div = 1:100 */ |
| 32 | mfp.tim_ct_cd = (mfp.tim_ct_cd & 15) | 0x60; | 32 | st_mfp.tim_ct_cd = (st_mfp.tim_ct_cd & 15) | 0x60; |
| 33 | /* install interrupt service routine for MFP Timer C */ | 33 | /* install interrupt service routine for MFP Timer C */ |
| 34 | if (request_irq(IRQ_MFP_TIMC, timer_routine, IRQ_TYPE_SLOW, | 34 | if (request_irq(IRQ_MFP_TIMC, timer_routine, IRQ_TYPE_SLOW, |
| 35 | "timer", timer_routine)) | 35 | "timer", timer_routine)) |
| @@ -46,11 +46,11 @@ unsigned long atari_gettimeoffset (void) | |||
| 46 | unsigned long ticks, offset = 0; | 46 | unsigned long ticks, offset = 0; |
| 47 | 47 | ||
| 48 | /* read MFP timer C current value */ | 48 | /* read MFP timer C current value */ |
| 49 | ticks = mfp.tim_dt_c; | 49 | ticks = st_mfp.tim_dt_c; |
| 50 | /* The probability of underflow is less than 2% */ | 50 | /* The probability of underflow is less than 2% */ |
| 51 | if (ticks > INT_TICKS - INT_TICKS / 50) | 51 | if (ticks > INT_TICKS - INT_TICKS / 50) |
| 52 | /* Check for pending timer interrupt */ | 52 | /* Check for pending timer interrupt */ |
| 53 | if (mfp.int_pn_b & (1 << 5)) | 53 | if (st_mfp.int_pn_b & (1 << 5)) |
| 54 | offset = TICK_SIZE; | 54 | offset = TICK_SIZE; |
| 55 | 55 | ||
| 56 | ticks = INT_TICKS - ticks; | 56 | ticks = INT_TICKS - ticks; |
diff --git a/arch/m68k/include/asm/atarihw.h b/arch/m68k/include/asm/atarihw.h index 1412b4ab202f..a714e1aa072a 100644 --- a/arch/m68k/include/asm/atarihw.h +++ b/arch/m68k/include/asm/atarihw.h | |||
| @@ -113,7 +113,7 @@ extern struct atari_hw_present atari_hw_present; | |||
| 113 | * of nops on various machines. Somebody claimed that the tstb takes 600 ns. | 113 | * of nops on various machines. Somebody claimed that the tstb takes 600 ns. |
| 114 | */ | 114 | */ |
| 115 | #define MFPDELAY() \ | 115 | #define MFPDELAY() \ |
| 116 | __asm__ __volatile__ ( "tstb %0" : : "m" (mfp.par_dt_reg) : "cc" ); | 116 | __asm__ __volatile__ ( "tstb %0" : : "m" (st_mfp.par_dt_reg) : "cc" ); |
| 117 | 117 | ||
| 118 | /* Do cache push/invalidate for DMA read/write. This function obeys the | 118 | /* Do cache push/invalidate for DMA read/write. This function obeys the |
| 119 | * snooping on some machines (Medusa) and processors: The Medusa itself can | 119 | * snooping on some machines (Medusa) and processors: The Medusa itself can |
| @@ -565,7 +565,7 @@ struct MFP | |||
| 565 | u_char char_dummy23; | 565 | u_char char_dummy23; |
| 566 | u_char usart_dta; | 566 | u_char usart_dta; |
| 567 | }; | 567 | }; |
| 568 | # define mfp ((*(volatile struct MFP*)MFP_BAS)) | 568 | # define st_mfp ((*(volatile struct MFP*)MFP_BAS)) |
| 569 | 569 | ||
| 570 | /* TT's second MFP */ | 570 | /* TT's second MFP */ |
| 571 | 571 | ||
diff --git a/arch/m68k/include/asm/atariints.h b/arch/m68k/include/asm/atariints.h index 5748e99f4e26..f597892e43a0 100644 --- a/arch/m68k/include/asm/atariints.h +++ b/arch/m68k/include/asm/atariints.h | |||
| @@ -113,7 +113,7 @@ static inline int get_mfp_bit( unsigned irq, int type ) | |||
| 113 | { unsigned char mask, *reg; | 113 | { unsigned char mask, *reg; |
| 114 | 114 | ||
| 115 | mask = 1 << (irq & 7); | 115 | mask = 1 << (irq & 7); |
| 116 | reg = (unsigned char *)&mfp.int_en_a + type*4 + | 116 | reg = (unsigned char *)&st_mfp.int_en_a + type*4 + |
| 117 | ((irq & 8) >> 2) + (((irq-8) & 16) << 3); | 117 | ((irq & 8) >> 2) + (((irq-8) & 16) << 3); |
| 118 | return( *reg & mask ); | 118 | return( *reg & mask ); |
| 119 | } | 119 | } |
| @@ -123,7 +123,7 @@ static inline void set_mfp_bit( unsigned irq, int type ) | |||
| 123 | { unsigned char mask, *reg; | 123 | { unsigned char mask, *reg; |
| 124 | 124 | ||
| 125 | mask = 1 << (irq & 7); | 125 | mask = 1 << (irq & 7); |
| 126 | reg = (unsigned char *)&mfp.int_en_a + type*4 + | 126 | reg = (unsigned char *)&st_mfp.int_en_a + type*4 + |
| 127 | ((irq & 8) >> 2) + (((irq-8) & 16) << 3); | 127 | ((irq & 8) >> 2) + (((irq-8) & 16) << 3); |
| 128 | __asm__ __volatile__ ( "orb %0,%1" | 128 | __asm__ __volatile__ ( "orb %0,%1" |
| 129 | : : "di" (mask), "m" (*reg) : "memory" ); | 129 | : : "di" (mask), "m" (*reg) : "memory" ); |
| @@ -134,7 +134,7 @@ static inline void clear_mfp_bit( unsigned irq, int type ) | |||
| 134 | { unsigned char mask, *reg; | 134 | { unsigned char mask, *reg; |
| 135 | 135 | ||
| 136 | mask = ~(1 << (irq & 7)); | 136 | mask = ~(1 << (irq & 7)); |
| 137 | reg = (unsigned char *)&mfp.int_en_a + type*4 + | 137 | reg = (unsigned char *)&st_mfp.int_en_a + type*4 + |
| 138 | ((irq & 8) >> 2) + (((irq-8) & 16) << 3); | 138 | ((irq & 8) >> 2) + (((irq-8) & 16) << 3); |
| 139 | if (type == MFP_PENDING || type == MFP_SERVICE) | 139 | if (type == MFP_PENDING || type == MFP_SERVICE) |
| 140 | __asm__ __volatile__ ( "moveb %0,%1" | 140 | __asm__ __volatile__ ( "moveb %0,%1" |
diff --git a/arch/m68knommu/platform/5206e/config.c b/arch/m68knommu/platform/5206e/config.c index d01a5d2b7557..db902540bf2c 100644 --- a/arch/m68knommu/platform/5206e/config.c +++ b/arch/m68knommu/platform/5206e/config.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include <asm/coldfire.h> | 17 | #include <asm/coldfire.h> |
| 18 | #include <asm/mcfsim.h> | 18 | #include <asm/mcfsim.h> |
| 19 | #include <asm/mcfdma.h> | 19 | #include <asm/mcfdma.h> |
| 20 | #include <asm/mcfuart.h> | ||
| 20 | 21 | ||
| 21 | /***************************************************************************/ | 22 | /***************************************************************************/ |
| 22 | 23 | ||
diff --git a/arch/m68knommu/platform/528x/config.c b/arch/m68knommu/platform/528x/config.c index dfdb5c2ed8e6..44baeb225dc7 100644 --- a/arch/m68knommu/platform/528x/config.c +++ b/arch/m68knommu/platform/528x/config.c | |||
| @@ -24,7 +24,6 @@ | |||
| 24 | #include <asm/coldfire.h> | 24 | #include <asm/coldfire.h> |
| 25 | #include <asm/mcfsim.h> | 25 | #include <asm/mcfsim.h> |
| 26 | #include <asm/mcfuart.h> | 26 | #include <asm/mcfuart.h> |
| 27 | #include <asm/mcfqspi.h> | ||
| 28 | 27 | ||
| 29 | #ifdef CONFIG_MTD_PARTITIONS | 28 | #ifdef CONFIG_MTD_PARTITIONS |
| 30 | #include <linux/mtd/partitions.h> | 29 | #include <linux/mtd/partitions.h> |
| @@ -33,233 +32,6 @@ | |||
| 33 | /***************************************************************************/ | 32 | /***************************************************************************/ |
| 34 | 33 | ||
| 35 | void coldfire_reset(void); | 34 | void coldfire_reset(void); |
| 36 | static void coldfire_qspi_cs_control(u8 cs, u8 command); | ||
| 37 | |||
| 38 | /***************************************************************************/ | ||
| 39 | |||
| 40 | #if defined(CONFIG_SPI) | ||
| 41 | |||
| 42 | #if defined(CONFIG_WILDFIRE) | ||
| 43 | #define SPI_NUM_CHIPSELECTS 0x02 | ||
| 44 | #define SPI_PAR_VAL 0x07 /* Enable DIN, DOUT, CLK */ | ||
| 45 | #define SPI_CS_MASK 0x18 | ||
| 46 | |||
| 47 | #define FLASH_BLOCKSIZE (1024*64) | ||
| 48 | #define FLASH_NUMBLOCKS 16 | ||
| 49 | #define FLASH_TYPE "m25p80" | ||
| 50 | |||
| 51 | #define M25P80_CS 0 | ||
| 52 | #define MMC_CS 1 | ||
| 53 | |||
| 54 | #ifdef CONFIG_MTD_PARTITIONS | ||
| 55 | static struct mtd_partition stm25p_partitions[] = { | ||
| 56 | /* sflash */ | ||
| 57 | [0] = { | ||
| 58 | .name = "stm25p80", | ||
| 59 | .offset = 0x00000000, | ||
| 60 | .size = FLASH_BLOCKSIZE * FLASH_NUMBLOCKS, | ||
| 61 | .mask_flags = 0 | ||
| 62 | } | ||
| 63 | }; | ||
| 64 | |||
| 65 | #endif | ||
| 66 | |||
| 67 | #elif defined(CONFIG_WILDFIREMOD) | ||
| 68 | |||
| 69 | #define SPI_NUM_CHIPSELECTS 0x08 | ||
| 70 | #define SPI_PAR_VAL 0x07 /* Enable DIN, DOUT, CLK */ | ||
| 71 | #define SPI_CS_MASK 0x78 | ||
| 72 | |||
| 73 | #define FLASH_BLOCKSIZE (1024*64) | ||
| 74 | #define FLASH_NUMBLOCKS 64 | ||
| 75 | #define FLASH_TYPE "m25p32" | ||
| 76 | /* Reserve 1M for the kernel parition */ | ||
| 77 | #define FLASH_KERNEL_SIZE (1024 * 1024) | ||
| 78 | |||
| 79 | #define M25P80_CS 5 | ||
| 80 | #define MMC_CS 6 | ||
| 81 | |||
| 82 | #ifdef CONFIG_MTD_PARTITIONS | ||
| 83 | static struct mtd_partition stm25p_partitions[] = { | ||
| 84 | /* sflash */ | ||
| 85 | [0] = { | ||
| 86 | .name = "kernel", | ||
| 87 | .offset = FLASH_BLOCKSIZE * FLASH_NUMBLOCKS - FLASH_KERNEL_SIZE, | ||
| 88 | .size = FLASH_KERNEL_SIZE, | ||
| 89 | .mask_flags = 0 | ||
| 90 | }, | ||
| 91 | [1] = { | ||
| 92 | .name = "image", | ||
| 93 | .offset = 0x00000000, | ||
| 94 | .size = FLASH_BLOCKSIZE * FLASH_NUMBLOCKS - FLASH_KERNEL_SIZE, | ||
| 95 | .mask_flags = 0 | ||
| 96 | }, | ||
| 97 | [2] = { | ||
| 98 | .name = "all", | ||
| 99 | .offset = 0x00000000, | ||
| 100 | .size = FLASH_BLOCKSIZE * FLASH_NUMBLOCKS, | ||
| 101 | .mask_flags = 0 | ||
| 102 | } | ||
| 103 | }; | ||
| 104 | #endif | ||
| 105 | |||
| 106 | #else | ||
| 107 | #define SPI_NUM_CHIPSELECTS 0x04 | ||
| 108 | #define SPI_PAR_VAL 0x7F /* Enable DIN, DOUT, CLK, CS0 - CS4 */ | ||
| 109 | #endif | ||
| 110 | |||
| 111 | #ifdef MMC_CS | ||
| 112 | static struct coldfire_spi_chip flash_chip_info = { | ||
| 113 | .mode = SPI_MODE_0, | ||
| 114 | .bits_per_word = 16, | ||
| 115 | .del_cs_to_clk = 17, | ||
| 116 | .del_after_trans = 1, | ||
| 117 | .void_write_data = 0 | ||
| 118 | }; | ||
| 119 | |||
| 120 | static struct coldfire_spi_chip mmc_chip_info = { | ||
| 121 | .mode = SPI_MODE_0, | ||
| 122 | .bits_per_word = 16, | ||
| 123 | .del_cs_to_clk = 17, | ||
| 124 | .del_after_trans = 1, | ||
| 125 | .void_write_data = 0xFFFF | ||
| 126 | }; | ||
| 127 | #endif | ||
| 128 | |||
| 129 | #ifdef M25P80_CS | ||
| 130 | static struct flash_platform_data stm25p80_platform_data = { | ||
| 131 | .name = "ST M25P80 SPI Flash chip", | ||
| 132 | #ifdef CONFIG_MTD_PARTITIONS | ||
| 133 | .parts = stm25p_partitions, | ||
| 134 | .nr_parts = sizeof(stm25p_partitions) / sizeof(*stm25p_partitions), | ||
| 135 | #endif | ||
| 136 | .type = FLASH_TYPE | ||
| 137 | }; | ||
| 138 | #endif | ||
| 139 | |||
| 140 | static struct spi_board_info spi_board_info[] __initdata = { | ||
| 141 | #ifdef M25P80_CS | ||
| 142 | { | ||
| 143 | .modalias = "m25p80", | ||
| 144 | .max_speed_hz = 16000000, | ||
| 145 | .bus_num = 1, | ||
| 146 | .chip_select = M25P80_CS, | ||
| 147 | .platform_data = &stm25p80_platform_data, | ||
| 148 | .controller_data = &flash_chip_info | ||
| 149 | }, | ||
| 150 | #endif | ||
| 151 | #ifdef MMC_CS | ||
| 152 | { | ||
| 153 | .modalias = "mmc_spi", | ||
| 154 | .max_speed_hz = 16000000, | ||
| 155 | .bus_num = 1, | ||
| 156 | .chip_select = MMC_CS, | ||
| 157 | .controller_data = &mmc_chip_info | ||
| 158 | } | ||
| 159 | #endif | ||
| 160 | }; | ||
| 161 | |||
| 162 | static struct coldfire_spi_master coldfire_master_info = { | ||
| 163 | .bus_num = 1, | ||
| 164 | .num_chipselect = SPI_NUM_CHIPSELECTS, | ||
| 165 | .irq_source = MCF5282_QSPI_IRQ_SOURCE, | ||
| 166 | .irq_vector = MCF5282_QSPI_IRQ_VECTOR, | ||
| 167 | .irq_mask = ((0x01 << MCF5282_QSPI_IRQ_SOURCE) | 0x01), | ||
| 168 | .irq_lp = 0x2B, /* Level 5 and Priority 3 */ | ||
| 169 | .par_val = SPI_PAR_VAL, | ||
| 170 | .cs_control = coldfire_qspi_cs_control, | ||
| 171 | }; | ||
| 172 | |||
| 173 | static struct resource coldfire_spi_resources[] = { | ||
| 174 | [0] = { | ||
| 175 | .name = "qspi-par", | ||
| 176 | .start = MCF5282_QSPI_PAR, | ||
| 177 | .end = MCF5282_QSPI_PAR, | ||
| 178 | .flags = IORESOURCE_MEM | ||
| 179 | }, | ||
| 180 | |||
| 181 | [1] = { | ||
| 182 | .name = "qspi-module", | ||
| 183 | .start = MCF5282_QSPI_QMR, | ||
| 184 | .end = MCF5282_QSPI_QMR + 0x18, | ||
| 185 | .flags = IORESOURCE_MEM | ||
| 186 | }, | ||
| 187 | |||
| 188 | [2] = { | ||
| 189 | .name = "qspi-int-level", | ||
| 190 | .start = MCF5282_INTC0 + MCFINTC_ICR0 + MCF5282_QSPI_IRQ_SOURCE, | ||
| 191 | .end = MCF5282_INTC0 + MCFINTC_ICR0 + MCF5282_QSPI_IRQ_SOURCE, | ||
| 192 | .flags = IORESOURCE_MEM | ||
| 193 | }, | ||
| 194 | |||
| 195 | [3] = { | ||
| 196 | .name = "qspi-int-mask", | ||
| 197 | .start = MCF5282_INTC0 + MCFINTC_IMRL, | ||
| 198 | .end = MCF5282_INTC0 + MCFINTC_IMRL, | ||
| 199 | .flags = IORESOURCE_MEM | ||
| 200 | } | ||
| 201 | }; | ||
| 202 | |||
| 203 | static struct platform_device coldfire_spi = { | ||
| 204 | .name = "spi_coldfire", | ||
| 205 | .id = -1, | ||
| 206 | .resource = coldfire_spi_resources, | ||
| 207 | .num_resources = ARRAY_SIZE(coldfire_spi_resources), | ||
| 208 | .dev = { | ||
| 209 | .platform_data = &coldfire_master_info, | ||
| 210 | } | ||
| 211 | }; | ||
| 212 | |||
| 213 | static void coldfire_qspi_cs_control(u8 cs, u8 command) | ||
| 214 | { | ||
| 215 | u8 cs_bit = ((0x01 << cs) << 3) & SPI_CS_MASK; | ||
| 216 | |||
| 217 | #if defined(CONFIG_WILDFIRE) | ||
| 218 | u8 cs_mask = ~(((0x01 << cs) << 3) & SPI_CS_MASK); | ||
| 219 | #endif | ||
| 220 | #if defined(CONFIG_WILDFIREMOD) | ||
| 221 | u8 cs_mask = (cs << 3) & SPI_CS_MASK; | ||
| 222 | #endif | ||
| 223 | |||
| 224 | /* | ||
| 225 | * Don't do anything if the chip select is not | ||
| 226 | * one of the port qs pins. | ||
| 227 | */ | ||
| 228 | if (command & QSPI_CS_INIT) { | ||
| 229 | #if defined(CONFIG_WILDFIRE) | ||
| 230 | MCF5282_GPIO_DDRQS |= cs_bit; | ||
| 231 | MCF5282_GPIO_PQSPAR &= ~cs_bit; | ||
| 232 | #endif | ||
| 233 | |||
| 234 | #if defined(CONFIG_WILDFIREMOD) | ||
| 235 | MCF5282_GPIO_DDRQS |= SPI_CS_MASK; | ||
| 236 | MCF5282_GPIO_PQSPAR &= ~SPI_CS_MASK; | ||
| 237 | #endif | ||
| 238 | } | ||
| 239 | |||
| 240 | if (command & QSPI_CS_ASSERT) { | ||
| 241 | MCF5282_GPIO_PORTQS &= ~SPI_CS_MASK; | ||
| 242 | MCF5282_GPIO_PORTQS |= cs_mask; | ||
| 243 | } else if (command & QSPI_CS_DROP) { | ||
| 244 | MCF5282_GPIO_PORTQS |= SPI_CS_MASK; | ||
| 245 | } | ||
| 246 | } | ||
| 247 | |||
| 248 | static int __init spi_dev_init(void) | ||
| 249 | { | ||
| 250 | int retval; | ||
| 251 | |||
| 252 | retval = platform_device_register(&coldfire_spi); | ||
| 253 | if (retval < 0) | ||
| 254 | return retval; | ||
| 255 | |||
| 256 | if (ARRAY_SIZE(spi_board_info)) | ||
| 257 | retval = spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info)); | ||
| 258 | |||
| 259 | return retval; | ||
| 260 | } | ||
| 261 | |||
| 262 | #endif /* CONFIG_SPI */ | ||
| 263 | 35 | ||
| 264 | /***************************************************************************/ | 36 | /***************************************************************************/ |
| 265 | 37 | ||
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 600eef3f3ac7..e61465a18c7e 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
| @@ -603,7 +603,7 @@ config CAVIUM_OCTEON_SIMULATOR | |||
| 603 | select SYS_SUPPORTS_64BIT_KERNEL | 603 | select SYS_SUPPORTS_64BIT_KERNEL |
| 604 | select SYS_SUPPORTS_BIG_ENDIAN | 604 | select SYS_SUPPORTS_BIG_ENDIAN |
| 605 | select SYS_SUPPORTS_HIGHMEM | 605 | select SYS_SUPPORTS_HIGHMEM |
| 606 | select CPU_CAVIUM_OCTEON | 606 | select SYS_HAS_CPU_CAVIUM_OCTEON |
| 607 | help | 607 | help |
| 608 | The Octeon simulator is software performance model of the Cavium | 608 | The Octeon simulator is software performance model of the Cavium |
| 609 | Octeon Processor. It supports simulating Octeon processors on x86 | 609 | Octeon Processor. It supports simulating Octeon processors on x86 |
| @@ -618,7 +618,7 @@ config CAVIUM_OCTEON_REFERENCE_BOARD | |||
| 618 | select SYS_SUPPORTS_BIG_ENDIAN | 618 | select SYS_SUPPORTS_BIG_ENDIAN |
| 619 | select SYS_SUPPORTS_HIGHMEM | 619 | select SYS_SUPPORTS_HIGHMEM |
| 620 | select SYS_HAS_EARLY_PRINTK | 620 | select SYS_HAS_EARLY_PRINTK |
| 621 | select CPU_CAVIUM_OCTEON | 621 | select SYS_HAS_CPU_CAVIUM_OCTEON |
| 622 | select SWAP_IO_SPACE | 622 | select SWAP_IO_SPACE |
| 623 | help | 623 | help |
| 624 | This option supports all of the Octeon reference boards from Cavium | 624 | This option supports all of the Octeon reference boards from Cavium |
| @@ -1234,6 +1234,7 @@ config CPU_SB1 | |||
| 1234 | 1234 | ||
| 1235 | config CPU_CAVIUM_OCTEON | 1235 | config CPU_CAVIUM_OCTEON |
| 1236 | bool "Cavium Octeon processor" | 1236 | bool "Cavium Octeon processor" |
| 1237 | depends on SYS_HAS_CPU_CAVIUM_OCTEON | ||
| 1237 | select IRQ_CPU | 1238 | select IRQ_CPU |
| 1238 | select IRQ_CPU_OCTEON | 1239 | select IRQ_CPU_OCTEON |
| 1239 | select CPU_HAS_PREFETCH | 1240 | select CPU_HAS_PREFETCH |
| @@ -1314,6 +1315,9 @@ config SYS_HAS_CPU_RM9000 | |||
| 1314 | config SYS_HAS_CPU_SB1 | 1315 | config SYS_HAS_CPU_SB1 |
| 1315 | bool | 1316 | bool |
| 1316 | 1317 | ||
| 1318 | config SYS_HAS_CPU_CAVIUM_OCTEON | ||
| 1319 | bool | ||
| 1320 | |||
| 1317 | # | 1321 | # |
| 1318 | # CPU may reorder R->R, R->W, W->R, W->W | 1322 | # CPU may reorder R->R, R->W, W->R, W->W |
| 1319 | # Reordering beyond LL and SC is handled in WEAK_REORDERING_BEYOND_LLSC | 1323 | # Reordering beyond LL and SC is handled in WEAK_REORDERING_BEYOND_LLSC |
| @@ -1387,6 +1391,7 @@ config 32BIT | |||
| 1387 | config 64BIT | 1391 | config 64BIT |
| 1388 | bool "64-bit kernel" | 1392 | bool "64-bit kernel" |
| 1389 | depends on CPU_SUPPORTS_64BIT_KERNEL && SYS_SUPPORTS_64BIT_KERNEL | 1393 | depends on CPU_SUPPORTS_64BIT_KERNEL && SYS_SUPPORTS_64BIT_KERNEL |
| 1394 | select HAVE_SYSCALL_WRAPPERS | ||
| 1390 | help | 1395 | help |
| 1391 | Select this option if you want to build a 64-bit kernel. | 1396 | Select this option if you want to build a 64-bit kernel. |
| 1392 | 1397 | ||
diff --git a/arch/mips/alchemy/common/time.c b/arch/mips/alchemy/common/time.c index 6fd441d16af5..f58d4ffb8945 100644 --- a/arch/mips/alchemy/common/time.c +++ b/arch/mips/alchemy/common/time.c | |||
| @@ -118,7 +118,7 @@ void __init plat_time_init(void) | |||
| 118 | * setup counter 1 (RTC) to tick at full speed | 118 | * setup counter 1 (RTC) to tick at full speed |
| 119 | */ | 119 | */ |
| 120 | t = 0xffffff; | 120 | t = 0xffffff; |
| 121 | while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_T1S) && t--) | 121 | while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_T1S) && --t) |
| 122 | asm volatile ("nop"); | 122 | asm volatile ("nop"); |
| 123 | if (!t) | 123 | if (!t) |
| 124 | goto cntr_err; | 124 | goto cntr_err; |
| @@ -127,7 +127,7 @@ void __init plat_time_init(void) | |||
| 127 | au_sync(); | 127 | au_sync(); |
| 128 | 128 | ||
| 129 | t = 0xffffff; | 129 | t = 0xffffff; |
| 130 | while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C1S) && t--) | 130 | while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C1S) && --t) |
| 131 | asm volatile ("nop"); | 131 | asm volatile ("nop"); |
| 132 | if (!t) | 132 | if (!t) |
| 133 | goto cntr_err; | 133 | goto cntr_err; |
| @@ -135,7 +135,7 @@ void __init plat_time_init(void) | |||
| 135 | au_sync(); | 135 | au_sync(); |
| 136 | 136 | ||
| 137 | t = 0xffffff; | 137 | t = 0xffffff; |
| 138 | while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C1S) && t--) | 138 | while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C1S) && --t) |
| 139 | asm volatile ("nop"); | 139 | asm volatile ("nop"); |
| 140 | if (!t) | 140 | if (!t) |
| 141 | goto cntr_err; | 141 | goto cntr_err; |
diff --git a/arch/mips/include/asm/compat.h b/arch/mips/include/asm/compat.h index ac5d541368e9..6c5b40905dd6 100644 --- a/arch/mips/include/asm/compat.h +++ b/arch/mips/include/asm/compat.h | |||
| @@ -3,6 +3,8 @@ | |||
| 3 | /* | 3 | /* |
| 4 | * Architecture specific compatibility types | 4 | * Architecture specific compatibility types |
| 5 | */ | 5 | */ |
| 6 | #include <linux/seccomp.h> | ||
| 7 | #include <linux/thread_info.h> | ||
| 6 | #include <linux/types.h> | 8 | #include <linux/types.h> |
| 7 | #include <asm/page.h> | 9 | #include <asm/page.h> |
| 8 | #include <asm/ptrace.h> | 10 | #include <asm/ptrace.h> |
| @@ -218,4 +220,9 @@ struct compat_shmid64_ds { | |||
| 218 | compat_ulong_t __unused2; | 220 | compat_ulong_t __unused2; |
| 219 | }; | 221 | }; |
| 220 | 222 | ||
| 223 | static inline int is_compat_task(void) | ||
| 224 | { | ||
| 225 | return test_thread_flag(TIF_32BIT); | ||
| 226 | } | ||
| 227 | |||
| 221 | #endif /* _ASM_COMPAT_H */ | 228 | #endif /* _ASM_COMPAT_H */ |
diff --git a/arch/mips/include/asm/seccomp.h b/arch/mips/include/asm/seccomp.h index 36ed44070256..a6772e9507f5 100644 --- a/arch/mips/include/asm/seccomp.h +++ b/arch/mips/include/asm/seccomp.h | |||
| @@ -1,6 +1,5 @@ | |||
| 1 | #ifndef __ASM_SECCOMP_H | 1 | #ifndef __ASM_SECCOMP_H |
| 2 | 2 | ||
| 3 | #include <linux/thread_info.h> | ||
| 4 | #include <linux/unistd.h> | 3 | #include <linux/unistd.h> |
| 5 | 4 | ||
| 6 | #define __NR_seccomp_read __NR_read | 5 | #define __NR_seccomp_read __NR_read |
diff --git a/arch/mips/include/asm/spinlock.h b/arch/mips/include/asm/spinlock.h index 1a1f320c30d8..0884947ebe27 100644 --- a/arch/mips/include/asm/spinlock.h +++ b/arch/mips/include/asm/spinlock.h | |||
| @@ -51,6 +51,7 @@ static inline int __raw_spin_is_contended(raw_spinlock_t *lock) | |||
| 51 | 51 | ||
| 52 | return (((counters >> 14) - counters) & 0x1fff) > 1; | 52 | return (((counters >> 14) - counters) & 0x1fff) > 1; |
| 53 | } | 53 | } |
| 54 | #define __raw_spin_is_contended __raw_spin_is_contended | ||
| 54 | 55 | ||
| 55 | static inline void __raw_spin_lock(raw_spinlock_t *lock) | 56 | static inline void __raw_spin_lock(raw_spinlock_t *lock) |
| 56 | { | 57 | { |
diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c index a0ff2b66e22b..4b4007b3083a 100644 --- a/arch/mips/kernel/irq.c +++ b/arch/mips/kernel/irq.c | |||
| @@ -111,7 +111,6 @@ int show_interrupts(struct seq_file *p, void *v) | |||
| 111 | seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); | 111 | seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); |
| 112 | #endif | 112 | #endif |
| 113 | seq_printf(p, " %14s", irq_desc[i].chip->name); | 113 | seq_printf(p, " %14s", irq_desc[i].chip->name); |
| 114 | seq_printf(p, "-%-8s", irq_desc[i].name); | ||
| 115 | seq_printf(p, " %s", action->name); | 114 | seq_printf(p, " %s", action->name); |
| 116 | 115 | ||
| 117 | for (action=action->next; action; action = action->next) | 116 | for (action=action->next; action; action = action->next) |
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c index aa2c55e3b55f..2f8452b404c7 100644 --- a/arch/mips/kernel/linux32.c +++ b/arch/mips/kernel/linux32.c | |||
| @@ -32,6 +32,7 @@ | |||
| 32 | #include <linux/module.h> | 32 | #include <linux/module.h> |
| 33 | #include <linux/binfmts.h> | 33 | #include <linux/binfmts.h> |
| 34 | #include <linux/security.h> | 34 | #include <linux/security.h> |
| 35 | #include <linux/syscalls.h> | ||
| 35 | #include <linux/compat.h> | 36 | #include <linux/compat.h> |
| 36 | #include <linux/vfs.h> | 37 | #include <linux/vfs.h> |
| 37 | #include <linux/ipc.h> | 38 | #include <linux/ipc.h> |
| @@ -63,9 +64,9 @@ | |||
| 63 | #define merge_64(r1, r2) ((((r2) & 0xffffffffUL) << 32) + ((r1) & 0xffffffffUL)) | 64 | #define merge_64(r1, r2) ((((r2) & 0xffffffffUL) << 32) + ((r1) & 0xffffffffUL)) |
| 64 | #endif | 65 | #endif |
| 65 | 66 | ||
| 66 | asmlinkage unsigned long | 67 | SYSCALL_DEFINE6(32_mmap2, unsigned long, addr, unsigned long, len, |
| 67 | sys32_mmap2(unsigned long addr, unsigned long len, unsigned long prot, | 68 | unsigned long, prot, unsigned long, flags, unsigned long, fd, |
| 68 | unsigned long flags, unsigned long fd, unsigned long pgoff) | 69 | unsigned long, pgoff) |
| 69 | { | 70 | { |
| 70 | struct file * file = NULL; | 71 | struct file * file = NULL; |
| 71 | unsigned long error; | 72 | unsigned long error; |
| @@ -121,21 +122,21 @@ struct rlimit32 { | |||
| 121 | int rlim_max; | 122 | int rlim_max; |
| 122 | }; | 123 | }; |
| 123 | 124 | ||
| 124 | asmlinkage long sys32_truncate64(const char __user * path, | 125 | SYSCALL_DEFINE4(32_truncate64, const char __user *, path, |
| 125 | unsigned long __dummy, int a2, int a3) | 126 | unsigned long, __dummy, unsigned long, a2, unsigned long, a3) |
| 126 | { | 127 | { |
| 127 | return sys_truncate(path, merge_64(a2, a3)); | 128 | return sys_truncate(path, merge_64(a2, a3)); |
| 128 | } | 129 | } |
| 129 | 130 | ||
| 130 | asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long __dummy, | 131 | SYSCALL_DEFINE4(32_ftruncate64, unsigned long, fd, unsigned long, __dummy, |
| 131 | int a2, int a3) | 132 | unsigned long, a2, unsigned long, a3) |
| 132 | { | 133 | { |
| 133 | return sys_ftruncate(fd, merge_64(a2, a3)); | 134 | return sys_ftruncate(fd, merge_64(a2, a3)); |
| 134 | } | 135 | } |
| 135 | 136 | ||
| 136 | asmlinkage int sys32_llseek(unsigned int fd, unsigned int offset_high, | 137 | SYSCALL_DEFINE5(32_llseek, unsigned long, fd, unsigned long, offset_high, |
| 137 | unsigned int offset_low, loff_t __user * result, | 138 | unsigned long, offset_low, loff_t __user *, result, |
| 138 | unsigned int origin) | 139 | unsigned long, origin) |
| 139 | { | 140 | { |
| 140 | return sys_llseek(fd, offset_high, offset_low, result, origin); | 141 | return sys_llseek(fd, offset_high, offset_low, result, origin); |
| 141 | } | 142 | } |
| @@ -144,20 +145,20 @@ asmlinkage int sys32_llseek(unsigned int fd, unsigned int offset_high, | |||
| 144 | lseek back to original location. They fail just like lseek does on | 145 | lseek back to original location. They fail just like lseek does on |
| 145 | non-seekable files. */ | 146 | non-seekable files. */ |
| 146 | 147 | ||
| 147 | asmlinkage ssize_t sys32_pread(unsigned int fd, char __user * buf, | 148 | SYSCALL_DEFINE6(32_pread, unsigned long, fd, char __user *, buf, size_t, count, |
| 148 | size_t count, u32 unused, u64 a4, u64 a5) | 149 | unsigned long, unused, unsigned long, a4, unsigned long, a5) |
| 149 | { | 150 | { |
| 150 | return sys_pread64(fd, buf, count, merge_64(a4, a5)); | 151 | return sys_pread64(fd, buf, count, merge_64(a4, a5)); |
| 151 | } | 152 | } |
| 152 | 153 | ||
| 153 | asmlinkage ssize_t sys32_pwrite(unsigned int fd, const char __user * buf, | 154 | SYSCALL_DEFINE6(32_pwrite, unsigned int, fd, const char __user *, buf, |
| 154 | size_t count, u32 unused, u64 a4, u64 a5) | 155 | size_t, count, u32, unused, u64, a4, u64, a5) |
| 155 | { | 156 | { |
| 156 | return sys_pwrite64(fd, buf, count, merge_64(a4, a5)); | 157 | return sys_pwrite64(fd, buf, count, merge_64(a4, a5)); |
| 157 | } | 158 | } |
| 158 | 159 | ||
| 159 | asmlinkage int sys32_sched_rr_get_interval(compat_pid_t pid, | 160 | SYSCALL_DEFINE2(32_sched_rr_get_interval, compat_pid_t, pid, |
| 160 | struct compat_timespec __user *interval) | 161 | struct compat_timespec __user *, interval) |
| 161 | { | 162 | { |
| 162 | struct timespec t; | 163 | struct timespec t; |
| 163 | int ret; | 164 | int ret; |
| @@ -174,8 +175,8 @@ asmlinkage int sys32_sched_rr_get_interval(compat_pid_t pid, | |||
| 174 | 175 | ||
| 175 | #ifdef CONFIG_SYSVIPC | 176 | #ifdef CONFIG_SYSVIPC |
| 176 | 177 | ||
| 177 | asmlinkage long | 178 | SYSCALL_DEFINE6(32_ipc, u32, call, long, first, long, second, long, third, |
| 178 | sys32_ipc(u32 call, int first, int second, int third, u32 ptr, u32 fifth) | 179 | unsigned long, ptr, unsigned long, fifth) |
| 179 | { | 180 | { |
| 180 | int version, err; | 181 | int version, err; |
| 181 | 182 | ||
| @@ -233,8 +234,8 @@ sys32_ipc(u32 call, int first, int second, int third, u32 ptr, u32 fifth) | |||
| 233 | 234 | ||
| 234 | #else | 235 | #else |
| 235 | 236 | ||
| 236 | asmlinkage long | 237 | SYSCALL_DEFINE6(32_ipc, u32, call, int, first, int, second, int, third, |
| 237 | sys32_ipc(u32 call, int first, int second, int third, u32 ptr, u32 fifth) | 238 | u32, ptr, u32 fifth) |
| 238 | { | 239 | { |
| 239 | return -ENOSYS; | 240 | return -ENOSYS; |
| 240 | } | 241 | } |
| @@ -242,7 +243,7 @@ sys32_ipc(u32 call, int first, int second, int third, u32 ptr, u32 fifth) | |||
| 242 | #endif /* CONFIG_SYSVIPC */ | 243 | #endif /* CONFIG_SYSVIPC */ |
| 243 | 244 | ||
| 244 | #ifdef CONFIG_MIPS32_N32 | 245 | #ifdef CONFIG_MIPS32_N32 |
| 245 | asmlinkage long sysn32_semctl(int semid, int semnum, int cmd, u32 arg) | 246 | SYSCALL_DEFINE4(n32_semctl, int, semid, int, semnum, int, cmd, u32, arg) |
| 246 | { | 247 | { |
| 247 | /* compat_sys_semctl expects a pointer to union semun */ | 248 | /* compat_sys_semctl expects a pointer to union semun */ |
| 248 | u32 __user *uptr = compat_alloc_user_space(sizeof(u32)); | 249 | u32 __user *uptr = compat_alloc_user_space(sizeof(u32)); |
| @@ -251,13 +252,14 @@ asmlinkage long sysn32_semctl(int semid, int semnum, int cmd, u32 arg) | |||
| 251 | return compat_sys_semctl(semid, semnum, cmd, uptr); | 252 | return compat_sys_semctl(semid, semnum, cmd, uptr); |
| 252 | } | 253 | } |
| 253 | 254 | ||
| 254 | asmlinkage long sysn32_msgsnd(int msqid, u32 msgp, unsigned msgsz, int msgflg) | 255 | SYSCALL_DEFINE4(n32_msgsnd, int, msqid, u32, msgp, unsigned int, msgsz, |
| 256 | int, msgflg) | ||
| 255 | { | 257 | { |
| 256 | return compat_sys_msgsnd(msqid, msgsz, msgflg, compat_ptr(msgp)); | 258 | return compat_sys_msgsnd(msqid, msgsz, msgflg, compat_ptr(msgp)); |
| 257 | } | 259 | } |
| 258 | 260 | ||
| 259 | asmlinkage long sysn32_msgrcv(int msqid, u32 msgp, size_t msgsz, int msgtyp, | 261 | SYSCALL_DEFINE5(n32_msgrcv, int, msqid, u32, msgp, size_t, msgsz, |
| 260 | int msgflg) | 262 | int, msgtyp, int, msgflg) |
| 261 | { | 263 | { |
| 262 | return compat_sys_msgrcv(msqid, msgsz, msgtyp, msgflg, IPC_64, | 264 | return compat_sys_msgrcv(msqid, msgsz, msgtyp, msgflg, IPC_64, |
| 263 | compat_ptr(msgp)); | 265 | compat_ptr(msgp)); |
| @@ -277,7 +279,7 @@ struct sysctl_args32 | |||
| 277 | 279 | ||
| 278 | #ifdef CONFIG_SYSCTL_SYSCALL | 280 | #ifdef CONFIG_SYSCTL_SYSCALL |
| 279 | 281 | ||
| 280 | asmlinkage long sys32_sysctl(struct sysctl_args32 __user *args) | 282 | SYSCALL_DEFINE1(32_sysctl, struct sysctl_args32 __user *, args) |
| 281 | { | 283 | { |
| 282 | struct sysctl_args32 tmp; | 284 | struct sysctl_args32 tmp; |
| 283 | int error; | 285 | int error; |
| @@ -316,9 +318,16 @@ asmlinkage long sys32_sysctl(struct sysctl_args32 __user *args) | |||
| 316 | return error; | 318 | return error; |
| 317 | } | 319 | } |
| 318 | 320 | ||
| 321 | #else | ||
| 322 | |||
| 323 | SYSCALL_DEFINE1(32_sysctl, struct sysctl_args32 __user *, args) | ||
| 324 | { | ||
| 325 | return -ENOSYS; | ||
| 326 | } | ||
| 327 | |||
| 319 | #endif /* CONFIG_SYSCTL_SYSCALL */ | 328 | #endif /* CONFIG_SYSCTL_SYSCALL */ |
| 320 | 329 | ||
| 321 | asmlinkage long sys32_newuname(struct new_utsname __user * name) | 330 | SYSCALL_DEFINE1(32_newuname, struct new_utsname __user *, name) |
| 322 | { | 331 | { |
| 323 | int ret = 0; | 332 | int ret = 0; |
| 324 | 333 | ||
| @@ -334,7 +343,7 @@ asmlinkage long sys32_newuname(struct new_utsname __user * name) | |||
| 334 | return ret; | 343 | return ret; |
| 335 | } | 344 | } |
| 336 | 345 | ||
| 337 | asmlinkage int sys32_personality(unsigned long personality) | 346 | SYSCALL_DEFINE1(32_personality, unsigned long, personality) |
| 338 | { | 347 | { |
| 339 | int ret; | 348 | int ret; |
| 340 | personality &= 0xffffffff; | 349 | personality &= 0xffffffff; |
| @@ -357,7 +366,7 @@ struct ustat32 { | |||
| 357 | 366 | ||
| 358 | extern asmlinkage long sys_ustat(dev_t dev, struct ustat __user * ubuf); | 367 | extern asmlinkage long sys_ustat(dev_t dev, struct ustat __user * ubuf); |
| 359 | 368 | ||
| 360 | asmlinkage int sys32_ustat(dev_t dev, struct ustat32 __user * ubuf32) | 369 | SYSCALL_DEFINE2(32_ustat, dev_t, dev, struct ustat32 __user *, ubuf32) |
| 361 | { | 370 | { |
| 362 | int err; | 371 | int err; |
| 363 | struct ustat tmp; | 372 | struct ustat tmp; |
| @@ -381,8 +390,8 @@ out: | |||
| 381 | return err; | 390 | return err; |
| 382 | } | 391 | } |
| 383 | 392 | ||
| 384 | asmlinkage int sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offset, | 393 | SYSCALL_DEFINE4(32_sendfile, long, out_fd, long, in_fd, |
| 385 | s32 count) | 394 | compat_off_t __user *, offset, s32, count) |
| 386 | { | 395 | { |
| 387 | mm_segment_t old_fs = get_fs(); | 396 | mm_segment_t old_fs = get_fs(); |
| 388 | int ret; | 397 | int ret; |
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S index 51d1ba415b90..9ab70c3b5be6 100644 --- a/arch/mips/kernel/scall32-o32.S +++ b/arch/mips/kernel/scall32-o32.S | |||
| @@ -399,7 +399,7 @@ einval: li v0, -ENOSYS | |||
| 399 | sys sys_swapon 2 | 399 | sys sys_swapon 2 |
| 400 | sys sys_reboot 3 | 400 | sys sys_reboot 3 |
| 401 | sys sys_old_readdir 3 | 401 | sys sys_old_readdir 3 |
| 402 | sys old_mmap 6 /* 4090 */ | 402 | sys sys_mips_mmap 6 /* 4090 */ |
| 403 | sys sys_munmap 2 | 403 | sys sys_munmap 2 |
| 404 | sys sys_truncate 2 | 404 | sys sys_truncate 2 |
| 405 | sys sys_ftruncate 2 | 405 | sys sys_ftruncate 2 |
| @@ -519,7 +519,7 @@ einval: li v0, -ENOSYS | |||
| 519 | sys sys_sendfile 4 | 519 | sys sys_sendfile 4 |
| 520 | sys sys_ni_syscall 0 | 520 | sys sys_ni_syscall 0 |
| 521 | sys sys_ni_syscall 0 | 521 | sys sys_ni_syscall 0 |
| 522 | sys sys_mmap2 6 /* 4210 */ | 522 | sys sys_mips_mmap2 6 /* 4210 */ |
| 523 | sys sys_truncate64 4 | 523 | sys sys_truncate64 4 |
| 524 | sys sys_ftruncate64 4 | 524 | sys sys_ftruncate64 4 |
| 525 | sys sys_stat64 2 | 525 | sys sys_stat64 2 |
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S index a9e171618994..9b4698667154 100644 --- a/arch/mips/kernel/scall64-64.S +++ b/arch/mips/kernel/scall64-64.S | |||
| @@ -207,7 +207,7 @@ sys_call_table: | |||
| 207 | PTR sys_newlstat | 207 | PTR sys_newlstat |
| 208 | PTR sys_poll | 208 | PTR sys_poll |
| 209 | PTR sys_lseek | 209 | PTR sys_lseek |
| 210 | PTR old_mmap | 210 | PTR sys_mips_mmap |
| 211 | PTR sys_mprotect /* 5010 */ | 211 | PTR sys_mprotect /* 5010 */ |
| 212 | PTR sys_munmap | 212 | PTR sys_munmap |
| 213 | PTR sys_brk | 213 | PTR sys_brk |
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S index 30f3b6317a83..7438e92f8a01 100644 --- a/arch/mips/kernel/scall64-n32.S +++ b/arch/mips/kernel/scall64-n32.S | |||
| @@ -129,12 +129,12 @@ EXPORT(sysn32_call_table) | |||
| 129 | PTR sys_newlstat | 129 | PTR sys_newlstat |
| 130 | PTR sys_poll | 130 | PTR sys_poll |
| 131 | PTR sys_lseek | 131 | PTR sys_lseek |
| 132 | PTR old_mmap | 132 | PTR sys_mips_mmap |
| 133 | PTR sys_mprotect /* 6010 */ | 133 | PTR sys_mprotect /* 6010 */ |
| 134 | PTR sys_munmap | 134 | PTR sys_munmap |
| 135 | PTR sys_brk | 135 | PTR sys_brk |
| 136 | PTR sys32_rt_sigaction | 136 | PTR sys_32_rt_sigaction |
| 137 | PTR sys32_rt_sigprocmask | 137 | PTR sys_32_rt_sigprocmask |
| 138 | PTR compat_sys_ioctl /* 6015 */ | 138 | PTR compat_sys_ioctl /* 6015 */ |
| 139 | PTR sys_pread64 | 139 | PTR sys_pread64 |
| 140 | PTR sys_pwrite64 | 140 | PTR sys_pwrite64 |
| @@ -159,7 +159,7 @@ EXPORT(sysn32_call_table) | |||
| 159 | PTR compat_sys_setitimer | 159 | PTR compat_sys_setitimer |
| 160 | PTR sys_alarm | 160 | PTR sys_alarm |
| 161 | PTR sys_getpid | 161 | PTR sys_getpid |
| 162 | PTR sys32_sendfile | 162 | PTR sys_32_sendfile |
| 163 | PTR sys_socket /* 6040 */ | 163 | PTR sys_socket /* 6040 */ |
| 164 | PTR sys_connect | 164 | PTR sys_connect |
| 165 | PTR sys_accept | 165 | PTR sys_accept |
| @@ -181,14 +181,14 @@ EXPORT(sysn32_call_table) | |||
| 181 | PTR sys_exit | 181 | PTR sys_exit |
| 182 | PTR compat_sys_wait4 | 182 | PTR compat_sys_wait4 |
| 183 | PTR sys_kill /* 6060 */ | 183 | PTR sys_kill /* 6060 */ |
| 184 | PTR sys32_newuname | 184 | PTR sys_32_newuname |
| 185 | PTR sys_semget | 185 | PTR sys_semget |
| 186 | PTR sys_semop | 186 | PTR sys_semop |
| 187 | PTR sysn32_semctl | 187 | PTR sys_n32_semctl |
| 188 | PTR sys_shmdt /* 6065 */ | 188 | PTR sys_shmdt /* 6065 */ |
| 189 | PTR sys_msgget | 189 | PTR sys_msgget |
| 190 | PTR sysn32_msgsnd | 190 | PTR sys_n32_msgsnd |
| 191 | PTR sysn32_msgrcv | 191 | PTR sys_n32_msgrcv |
| 192 | PTR compat_sys_msgctl | 192 | PTR compat_sys_msgctl |
| 193 | PTR compat_sys_fcntl /* 6070 */ | 193 | PTR compat_sys_fcntl /* 6070 */ |
| 194 | PTR sys_flock | 194 | PTR sys_flock |
| @@ -245,15 +245,15 @@ EXPORT(sysn32_call_table) | |||
| 245 | PTR sys_getsid | 245 | PTR sys_getsid |
| 246 | PTR sys_capget | 246 | PTR sys_capget |
| 247 | PTR sys_capset | 247 | PTR sys_capset |
| 248 | PTR sys32_rt_sigpending /* 6125 */ | 248 | PTR sys_32_rt_sigpending /* 6125 */ |
| 249 | PTR compat_sys_rt_sigtimedwait | 249 | PTR compat_sys_rt_sigtimedwait |
| 250 | PTR sys32_rt_sigqueueinfo | 250 | PTR sys_32_rt_sigqueueinfo |
| 251 | PTR sysn32_rt_sigsuspend | 251 | PTR sysn32_rt_sigsuspend |
| 252 | PTR sys32_sigaltstack | 252 | PTR sys32_sigaltstack |
| 253 | PTR compat_sys_utime /* 6130 */ | 253 | PTR compat_sys_utime /* 6130 */ |
| 254 | PTR sys_mknod | 254 | PTR sys_mknod |
| 255 | PTR sys32_personality | 255 | PTR sys_32_personality |
| 256 | PTR sys32_ustat | 256 | PTR sys_32_ustat |
| 257 | PTR compat_sys_statfs | 257 | PTR compat_sys_statfs |
| 258 | PTR compat_sys_fstatfs /* 6135 */ | 258 | PTR compat_sys_fstatfs /* 6135 */ |
| 259 | PTR sys_sysfs | 259 | PTR sys_sysfs |
| @@ -265,14 +265,14 @@ EXPORT(sysn32_call_table) | |||
| 265 | PTR sys_sched_getscheduler | 265 | PTR sys_sched_getscheduler |
| 266 | PTR sys_sched_get_priority_max | 266 | PTR sys_sched_get_priority_max |
| 267 | PTR sys_sched_get_priority_min | 267 | PTR sys_sched_get_priority_min |
| 268 | PTR sys32_sched_rr_get_interval /* 6145 */ | 268 | PTR sys_32_sched_rr_get_interval /* 6145 */ |
| 269 | PTR sys_mlock | 269 | PTR sys_mlock |
| 270 | PTR sys_munlock | 270 | PTR sys_munlock |
| 271 | PTR sys_mlockall | 271 | PTR sys_mlockall |
| 272 | PTR sys_munlockall | 272 | PTR sys_munlockall |
| 273 | PTR sys_vhangup /* 6150 */ | 273 | PTR sys_vhangup /* 6150 */ |
| 274 | PTR sys_pivot_root | 274 | PTR sys_pivot_root |
| 275 | PTR sys32_sysctl | 275 | PTR sys_32_sysctl |
| 276 | PTR sys_prctl | 276 | PTR sys_prctl |
| 277 | PTR compat_sys_adjtimex | 277 | PTR compat_sys_adjtimex |
| 278 | PTR compat_sys_setrlimit /* 6155 */ | 278 | PTR compat_sys_setrlimit /* 6155 */ |
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S index fefef4af8595..b0fef4ff9827 100644 --- a/arch/mips/kernel/scall64-o32.S +++ b/arch/mips/kernel/scall64-o32.S | |||
| @@ -265,12 +265,12 @@ sys_call_table: | |||
| 265 | PTR sys_olduname | 265 | PTR sys_olduname |
| 266 | PTR sys_umask /* 4060 */ | 266 | PTR sys_umask /* 4060 */ |
| 267 | PTR sys_chroot | 267 | PTR sys_chroot |
| 268 | PTR sys32_ustat | 268 | PTR sys_32_ustat |
| 269 | PTR sys_dup2 | 269 | PTR sys_dup2 |
| 270 | PTR sys_getppid | 270 | PTR sys_getppid |
| 271 | PTR sys_getpgrp /* 4065 */ | 271 | PTR sys_getpgrp /* 4065 */ |
| 272 | PTR sys_setsid | 272 | PTR sys_setsid |
| 273 | PTR sys32_sigaction | 273 | PTR sys_32_sigaction |
| 274 | PTR sys_sgetmask | 274 | PTR sys_sgetmask |
| 275 | PTR sys_ssetmask | 275 | PTR sys_ssetmask |
| 276 | PTR sys_setreuid /* 4070 */ | 276 | PTR sys_setreuid /* 4070 */ |
| @@ -293,7 +293,7 @@ sys_call_table: | |||
| 293 | PTR sys_swapon | 293 | PTR sys_swapon |
| 294 | PTR sys_reboot | 294 | PTR sys_reboot |
| 295 | PTR compat_sys_old_readdir | 295 | PTR compat_sys_old_readdir |
| 296 | PTR old_mmap /* 4090 */ | 296 | PTR sys_mips_mmap /* 4090 */ |
| 297 | PTR sys_munmap | 297 | PTR sys_munmap |
| 298 | PTR sys_truncate | 298 | PTR sys_truncate |
| 299 | PTR sys_ftruncate | 299 | PTR sys_ftruncate |
| @@ -320,12 +320,12 @@ sys_call_table: | |||
| 320 | PTR compat_sys_wait4 | 320 | PTR compat_sys_wait4 |
| 321 | PTR sys_swapoff /* 4115 */ | 321 | PTR sys_swapoff /* 4115 */ |
| 322 | PTR compat_sys_sysinfo | 322 | PTR compat_sys_sysinfo |
| 323 | PTR sys32_ipc | 323 | PTR sys_32_ipc |
| 324 | PTR sys_fsync | 324 | PTR sys_fsync |
| 325 | PTR sys32_sigreturn | 325 | PTR sys32_sigreturn |
| 326 | PTR sys32_clone /* 4120 */ | 326 | PTR sys32_clone /* 4120 */ |
| 327 | PTR sys_setdomainname | 327 | PTR sys_setdomainname |
| 328 | PTR sys32_newuname | 328 | PTR sys_32_newuname |
| 329 | PTR sys_ni_syscall /* sys_modify_ldt */ | 329 | PTR sys_ni_syscall /* sys_modify_ldt */ |
| 330 | PTR compat_sys_adjtimex | 330 | PTR compat_sys_adjtimex |
| 331 | PTR sys_mprotect /* 4125 */ | 331 | PTR sys_mprotect /* 4125 */ |
| @@ -339,11 +339,11 @@ sys_call_table: | |||
| 339 | PTR sys_fchdir | 339 | PTR sys_fchdir |
| 340 | PTR sys_bdflush | 340 | PTR sys_bdflush |
| 341 | PTR sys_sysfs /* 4135 */ | 341 | PTR sys_sysfs /* 4135 */ |
| 342 | PTR sys32_personality | 342 | PTR sys_32_personality |
| 343 | PTR sys_ni_syscall /* for afs_syscall */ | 343 | PTR sys_ni_syscall /* for afs_syscall */ |
| 344 | PTR sys_setfsuid | 344 | PTR sys_setfsuid |
| 345 | PTR sys_setfsgid | 345 | PTR sys_setfsgid |
| 346 | PTR sys32_llseek /* 4140 */ | 346 | PTR sys_32_llseek /* 4140 */ |
| 347 | PTR compat_sys_getdents | 347 | PTR compat_sys_getdents |
| 348 | PTR compat_sys_select | 348 | PTR compat_sys_select |
| 349 | PTR sys_flock | 349 | PTR sys_flock |
| @@ -356,7 +356,7 @@ sys_call_table: | |||
| 356 | PTR sys_ni_syscall /* 4150 */ | 356 | PTR sys_ni_syscall /* 4150 */ |
| 357 | PTR sys_getsid | 357 | PTR sys_getsid |
| 358 | PTR sys_fdatasync | 358 | PTR sys_fdatasync |
| 359 | PTR sys32_sysctl | 359 | PTR sys_32_sysctl |
| 360 | PTR sys_mlock | 360 | PTR sys_mlock |
| 361 | PTR sys_munlock /* 4155 */ | 361 | PTR sys_munlock /* 4155 */ |
| 362 | PTR sys_mlockall | 362 | PTR sys_mlockall |
| @@ -368,7 +368,7 @@ sys_call_table: | |||
| 368 | PTR sys_sched_yield | 368 | PTR sys_sched_yield |
| 369 | PTR sys_sched_get_priority_max | 369 | PTR sys_sched_get_priority_max |
| 370 | PTR sys_sched_get_priority_min | 370 | PTR sys_sched_get_priority_min |
| 371 | PTR sys32_sched_rr_get_interval /* 4165 */ | 371 | PTR sys_32_sched_rr_get_interval /* 4165 */ |
| 372 | PTR compat_sys_nanosleep | 372 | PTR compat_sys_nanosleep |
| 373 | PTR sys_mremap | 373 | PTR sys_mremap |
| 374 | PTR sys_accept | 374 | PTR sys_accept |
| @@ -397,25 +397,25 @@ sys_call_table: | |||
| 397 | PTR sys_getresgid | 397 | PTR sys_getresgid |
| 398 | PTR sys_prctl | 398 | PTR sys_prctl |
| 399 | PTR sys32_rt_sigreturn | 399 | PTR sys32_rt_sigreturn |
| 400 | PTR sys32_rt_sigaction | 400 | PTR sys_32_rt_sigaction |
| 401 | PTR sys32_rt_sigprocmask /* 4195 */ | 401 | PTR sys_32_rt_sigprocmask /* 4195 */ |
| 402 | PTR sys32_rt_sigpending | 402 | PTR sys_32_rt_sigpending |
| 403 | PTR compat_sys_rt_sigtimedwait | 403 | PTR compat_sys_rt_sigtimedwait |
| 404 | PTR sys32_rt_sigqueueinfo | 404 | PTR sys_32_rt_sigqueueinfo |
| 405 | PTR sys32_rt_sigsuspend | 405 | PTR sys32_rt_sigsuspend |
| 406 | PTR sys32_pread /* 4200 */ | 406 | PTR sys_32_pread /* 4200 */ |
| 407 | PTR sys32_pwrite | 407 | PTR sys_32_pwrite |
| 408 | PTR sys_chown | 408 | PTR sys_chown |
| 409 | PTR sys_getcwd | 409 | PTR sys_getcwd |
| 410 | PTR sys_capget | 410 | PTR sys_capget |
| 411 | PTR sys_capset /* 4205 */ | 411 | PTR sys_capset /* 4205 */ |
| 412 | PTR sys32_sigaltstack | 412 | PTR sys32_sigaltstack |
| 413 | PTR sys32_sendfile | 413 | PTR sys_32_sendfile |
| 414 | PTR sys_ni_syscall | 414 | PTR sys_ni_syscall |
| 415 | PTR sys_ni_syscall | 415 | PTR sys_ni_syscall |
| 416 | PTR sys32_mmap2 /* 4210 */ | 416 | PTR sys_mips_mmap2 /* 4210 */ |
| 417 | PTR sys32_truncate64 | 417 | PTR sys_32_truncate64 |
| 418 | PTR sys32_ftruncate64 | 418 | PTR sys_32_ftruncate64 |
| 419 | PTR sys_newstat | 419 | PTR sys_newstat |
| 420 | PTR sys_newlstat | 420 | PTR sys_newlstat |
| 421 | PTR sys_newfstat /* 4215 */ | 421 | PTR sys_newfstat /* 4215 */ |
| @@ -481,7 +481,7 @@ sys_call_table: | |||
| 481 | PTR compat_sys_mq_notify /* 4275 */ | 481 | PTR compat_sys_mq_notify /* 4275 */ |
| 482 | PTR compat_sys_mq_getsetattr | 482 | PTR compat_sys_mq_getsetattr |
| 483 | PTR sys_ni_syscall /* sys_vserver */ | 483 | PTR sys_ni_syscall /* sys_vserver */ |
| 484 | PTR sys32_waitid | 484 | PTR sys_32_waitid |
| 485 | PTR sys_ni_syscall /* available, was setaltroot */ | 485 | PTR sys_ni_syscall /* available, was setaltroot */ |
| 486 | PTR sys_add_key /* 4280 */ | 486 | PTR sys_add_key /* 4280 */ |
| 487 | PTR sys_request_key | 487 | PTR sys_request_key |
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c index a4e106c56ab5..830c5ef9932b 100644 --- a/arch/mips/kernel/signal.c +++ b/arch/mips/kernel/signal.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/ptrace.h> | 19 | #include <linux/ptrace.h> |
| 20 | #include <linux/unistd.h> | 20 | #include <linux/unistd.h> |
| 21 | #include <linux/compiler.h> | 21 | #include <linux/compiler.h> |
| 22 | #include <linux/syscalls.h> | ||
| 22 | #include <linux/uaccess.h> | 23 | #include <linux/uaccess.h> |
| 23 | 24 | ||
| 24 | #include <asm/abi.h> | 25 | #include <asm/abi.h> |
| @@ -338,8 +339,8 @@ asmlinkage int sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) | |||
| 338 | } | 339 | } |
| 339 | 340 | ||
| 340 | #ifdef CONFIG_TRAD_SIGNALS | 341 | #ifdef CONFIG_TRAD_SIGNALS |
| 341 | asmlinkage int sys_sigaction(int sig, const struct sigaction __user *act, | 342 | SYSCALL_DEFINE3(sigaction, int, sig, const struct sigaction __user *, act, |
| 342 | struct sigaction __user *oact) | 343 | struct sigaction __user *, oact) |
| 343 | { | 344 | { |
| 344 | struct k_sigaction new_ka, old_ka; | 345 | struct k_sigaction new_ka, old_ka; |
| 345 | int ret; | 346 | int ret; |
diff --git a/arch/mips/kernel/signal32.c b/arch/mips/kernel/signal32.c index 652709b353ad..2e74075ac0ca 100644 --- a/arch/mips/kernel/signal32.c +++ b/arch/mips/kernel/signal32.c | |||
| @@ -349,8 +349,8 @@ asmlinkage int sys32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) | |||
| 349 | return -ERESTARTNOHAND; | 349 | return -ERESTARTNOHAND; |
| 350 | } | 350 | } |
| 351 | 351 | ||
| 352 | asmlinkage int sys32_sigaction(int sig, const struct sigaction32 __user *act, | 352 | SYSCALL_DEFINE3(32_sigaction, long, sig, const struct sigaction32 __user *, act, |
| 353 | struct sigaction32 __user *oact) | 353 | struct sigaction32 __user *, oact) |
| 354 | { | 354 | { |
| 355 | struct k_sigaction new_ka, old_ka; | 355 | struct k_sigaction new_ka, old_ka; |
| 356 | int ret; | 356 | int ret; |
| @@ -704,9 +704,9 @@ struct mips_abi mips_abi_32 = { | |||
| 704 | .restart = __NR_O32_restart_syscall | 704 | .restart = __NR_O32_restart_syscall |
| 705 | }; | 705 | }; |
| 706 | 706 | ||
| 707 | asmlinkage int sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, | 707 | SYSCALL_DEFINE4(32_rt_sigaction, int, sig, |
| 708 | struct sigaction32 __user *oact, | 708 | const struct sigaction32 __user *, act, |
| 709 | unsigned int sigsetsize) | 709 | struct sigaction32 __user *, oact, unsigned int, sigsetsize) |
| 710 | { | 710 | { |
| 711 | struct k_sigaction new_sa, old_sa; | 711 | struct k_sigaction new_sa, old_sa; |
| 712 | int ret = -EINVAL; | 712 | int ret = -EINVAL; |
| @@ -748,8 +748,8 @@ out: | |||
| 748 | return ret; | 748 | return ret; |
| 749 | } | 749 | } |
| 750 | 750 | ||
| 751 | asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t __user *set, | 751 | SYSCALL_DEFINE4(32_rt_sigprocmask, int, how, compat_sigset_t __user *, set, |
| 752 | compat_sigset_t __user *oset, unsigned int sigsetsize) | 752 | compat_sigset_t __user *, oset, unsigned int, sigsetsize) |
| 753 | { | 753 | { |
| 754 | sigset_t old_set, new_set; | 754 | sigset_t old_set, new_set; |
| 755 | int ret; | 755 | int ret; |
| @@ -770,8 +770,8 @@ asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t __user *set, | |||
| 770 | return ret; | 770 | return ret; |
| 771 | } | 771 | } |
| 772 | 772 | ||
| 773 | asmlinkage int sys32_rt_sigpending(compat_sigset_t __user *uset, | 773 | SYSCALL_DEFINE2(32_rt_sigpending, compat_sigset_t __user *, uset, |
| 774 | unsigned int sigsetsize) | 774 | unsigned int, sigsetsize) |
| 775 | { | 775 | { |
| 776 | int ret; | 776 | int ret; |
| 777 | sigset_t set; | 777 | sigset_t set; |
| @@ -787,7 +787,8 @@ asmlinkage int sys32_rt_sigpending(compat_sigset_t __user *uset, | |||
| 787 | return ret; | 787 | return ret; |
| 788 | } | 788 | } |
| 789 | 789 | ||
| 790 | asmlinkage int sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t __user *uinfo) | 790 | SYSCALL_DEFINE3(32_rt_sigqueueinfo, int, pid, int, sig, |
| 791 | compat_siginfo_t __user *, uinfo) | ||
| 791 | { | 792 | { |
| 792 | siginfo_t info; | 793 | siginfo_t info; |
| 793 | int ret; | 794 | int ret; |
| @@ -802,10 +803,9 @@ asmlinkage int sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t __user * | |||
| 802 | return ret; | 803 | return ret; |
| 803 | } | 804 | } |
| 804 | 805 | ||
| 805 | asmlinkage long | 806 | SYSCALL_DEFINE5(32_waitid, int, which, compat_pid_t, pid, |
| 806 | sys32_waitid(int which, compat_pid_t pid, | 807 | compat_siginfo_t __user *, uinfo, int, options, |
| 807 | compat_siginfo_t __user *uinfo, int options, | 808 | struct compat_rusage __user *, uru) |
| 808 | struct compat_rusage __user *uru) | ||
| 809 | { | 809 | { |
| 810 | siginfo_t info; | 810 | siginfo_t info; |
| 811 | struct rusage ru; | 811 | struct rusage ru; |
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c index 37970d9b2186..8cf384644040 100644 --- a/arch/mips/kernel/syscall.c +++ b/arch/mips/kernel/syscall.c | |||
| @@ -152,9 +152,9 @@ out: | |||
| 152 | return error; | 152 | return error; |
| 153 | } | 153 | } |
| 154 | 154 | ||
| 155 | asmlinkage unsigned long | 155 | SYSCALL_DEFINE6(mips_mmap, unsigned long, addr, unsigned long, len, |
| 156 | old_mmap(unsigned long addr, unsigned long len, int prot, | 156 | unsigned long, prot, unsigned long, flags, unsigned long, |
| 157 | int flags, int fd, off_t offset) | 157 | fd, off_t, offset) |
| 158 | { | 158 | { |
| 159 | unsigned long result; | 159 | unsigned long result; |
| 160 | 160 | ||
| @@ -168,9 +168,9 @@ out: | |||
| 168 | return result; | 168 | return result; |
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | asmlinkage unsigned long | 171 | SYSCALL_DEFINE6(mips_mmap2, unsigned long, addr, unsigned long, len, |
| 172 | sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, | 172 | unsigned long, prot, unsigned long, flags, unsigned long, fd, |
| 173 | unsigned long flags, unsigned long fd, unsigned long pgoff) | 173 | unsigned long, pgoff) |
| 174 | { | 174 | { |
| 175 | if (pgoff & (~PAGE_MASK >> 12)) | 175 | if (pgoff & (~PAGE_MASK >> 12)) |
| 176 | return -EINVAL; | 176 | return -EINVAL; |
| @@ -240,7 +240,7 @@ out: | |||
| 240 | /* | 240 | /* |
| 241 | * Compacrapability ... | 241 | * Compacrapability ... |
| 242 | */ | 242 | */ |
| 243 | asmlinkage int sys_uname(struct old_utsname __user * name) | 243 | SYSCALL_DEFINE1(uname, struct old_utsname __user *, name) |
| 244 | { | 244 | { |
| 245 | if (name && !copy_to_user(name, utsname(), sizeof (*name))) | 245 | if (name && !copy_to_user(name, utsname(), sizeof (*name))) |
| 246 | return 0; | 246 | return 0; |
| @@ -250,7 +250,7 @@ asmlinkage int sys_uname(struct old_utsname __user * name) | |||
| 250 | /* | 250 | /* |
| 251 | * Compacrapability ... | 251 | * Compacrapability ... |
| 252 | */ | 252 | */ |
| 253 | asmlinkage int sys_olduname(struct oldold_utsname __user * name) | 253 | SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name) |
| 254 | { | 254 | { |
| 255 | int error; | 255 | int error; |
| 256 | 256 | ||
| @@ -279,7 +279,7 @@ asmlinkage int sys_olduname(struct oldold_utsname __user * name) | |||
| 279 | return error; | 279 | return error; |
| 280 | } | 280 | } |
| 281 | 281 | ||
| 282 | asmlinkage int sys_set_thread_area(unsigned long addr) | 282 | SYSCALL_DEFINE1(set_thread_area, unsigned long, addr) |
| 283 | { | 283 | { |
| 284 | struct thread_info *ti = task_thread_info(current); | 284 | struct thread_info *ti = task_thread_info(current); |
| 285 | 285 | ||
| @@ -290,7 +290,7 @@ asmlinkage int sys_set_thread_area(unsigned long addr) | |||
| 290 | return 0; | 290 | return 0; |
| 291 | } | 291 | } |
| 292 | 292 | ||
| 293 | asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) | 293 | asmlinkage int _sys_sysmips(long cmd, long arg1, long arg2, long arg3) |
| 294 | { | 294 | { |
| 295 | switch (cmd) { | 295 | switch (cmd) { |
| 296 | case MIPS_ATOMIC_SET: | 296 | case MIPS_ATOMIC_SET: |
| @@ -325,8 +325,8 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) | |||
| 325 | * | 325 | * |
| 326 | * This is really horribly ugly. | 326 | * This is really horribly ugly. |
| 327 | */ | 327 | */ |
| 328 | asmlinkage int sys_ipc(unsigned int call, int first, int second, | 328 | SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, int, second, |
| 329 | unsigned long third, void __user *ptr, long fifth) | 329 | unsigned long, third, void __user *, ptr, long, fifth) |
| 330 | { | 330 | { |
| 331 | int version, ret; | 331 | int version, ret; |
| 332 | 332 | ||
| @@ -411,7 +411,7 @@ asmlinkage int sys_ipc(unsigned int call, int first, int second, | |||
| 411 | /* | 411 | /* |
| 412 | * No implemented yet ... | 412 | * No implemented yet ... |
| 413 | */ | 413 | */ |
| 414 | asmlinkage int sys_cachectl(char *addr, int nbytes, int op) | 414 | SYSCALL_DEFINE3(cachectl, char *, addr, int, nbytes, int, op) |
| 415 | { | 415 | { |
| 416 | return -ENOSYS; | 416 | return -ENOSYS; |
| 417 | } | 417 | } |
diff --git a/arch/mips/mm/cache.c b/arch/mips/mm/cache.c index 98ad0a82c29e..694d51f523d1 100644 --- a/arch/mips/mm/cache.c +++ b/arch/mips/mm/cache.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
| 14 | #include <linux/module.h> | 14 | #include <linux/module.h> |
| 15 | #include <linux/sched.h> | 15 | #include <linux/sched.h> |
| 16 | #include <linux/syscalls.h> | ||
| 16 | #include <linux/mm.h> | 17 | #include <linux/mm.h> |
| 17 | 18 | ||
| 18 | #include <asm/cacheflush.h> | 19 | #include <asm/cacheflush.h> |
| @@ -58,8 +59,8 @@ EXPORT_SYMBOL(_dma_cache_wback_inv); | |||
| 58 | * We could optimize the case where the cache argument is not BCACHE but | 59 | * We could optimize the case where the cache argument is not BCACHE but |
| 59 | * that seems very atypical use ... | 60 | * that seems very atypical use ... |
| 60 | */ | 61 | */ |
| 61 | asmlinkage int sys_cacheflush(unsigned long addr, | 62 | SYSCALL_DEFINE3(cacheflush, unsigned long, addr, unsigned long, bytes, |
| 62 | unsigned long bytes, unsigned int cache) | 63 | unsigned int, cache) |
| 63 | { | 64 | { |
| 64 | if (bytes == 0) | 65 | if (bytes == 0) |
| 65 | return 0; | 66 | return 0; |
diff --git a/arch/mn10300/Kconfig b/arch/mn10300/Kconfig index 9a9f43358879..41d16822e616 100644 --- a/arch/mn10300/Kconfig +++ b/arch/mn10300/Kconfig | |||
| @@ -7,6 +7,7 @@ mainmenu "Linux Kernel Configuration" | |||
| 7 | 7 | ||
| 8 | config MN10300 | 8 | config MN10300 |
| 9 | def_bool y | 9 | def_bool y |
| 10 | select HAVE_OPROFILE | ||
| 10 | 11 | ||
| 11 | config AM33 | 12 | config AM33 |
| 12 | def_bool y | 13 | def_bool y |
diff --git a/arch/mn10300/unit-asb2305/pci.c b/arch/mn10300/unit-asb2305/pci.c index 1a86425fec42..07dbbcda3b2e 100644 --- a/arch/mn10300/unit-asb2305/pci.c +++ b/arch/mn10300/unit-asb2305/pci.c | |||
| @@ -173,7 +173,7 @@ static int pci_ampci_write_config_byte(struct pci_bus *bus, unsigned int devfn, | |||
| 173 | BRIDGEREGB(where) = value; | 173 | BRIDGEREGB(where) = value; |
| 174 | } else { | 174 | } else { |
| 175 | if (bus->number == 0 && | 175 | if (bus->number == 0 && |
| 176 | (devfn == PCI_DEVFN(2, 0) && devfn == PCI_DEVFN(3, 0)) | 176 | (devfn == PCI_DEVFN(2, 0) || devfn == PCI_DEVFN(3, 0)) |
| 177 | ) | 177 | ) |
| 178 | __pcidebug("<= %02x", bus, devfn, where, value); | 178 | __pcidebug("<= %02x", bus, devfn, where, value); |
| 179 | CONFIG_ADDRESS = CONFIG_CMD(bus, devfn, where); | 179 | CONFIG_ADDRESS = CONFIG_CMD(bus, devfn, where); |
diff --git a/arch/powerpc/boot/dts/mpc8313erdb.dts b/arch/powerpc/boot/dts/mpc8313erdb.dts index 909a89cab9ac..3ebf7ec0484c 100644 --- a/arch/powerpc/boot/dts/mpc8313erdb.dts +++ b/arch/powerpc/boot/dts/mpc8313erdb.dts | |||
| @@ -191,7 +191,8 @@ | |||
| 191 | interrupts = <37 0x8 36 0x8 35 0x8>; | 191 | interrupts = <37 0x8 36 0x8 35 0x8>; |
| 192 | interrupt-parent = <&ipic>; | 192 | interrupt-parent = <&ipic>; |
| 193 | tbi-handle = < &tbi0 >; | 193 | tbi-handle = < &tbi0 >; |
| 194 | phy-handle = < &phy1 >; | 194 | /* Vitesse 7385 isn't on the MDIO bus */ |
| 195 | fixed-link = <1 1 1000 0 0>; | ||
| 195 | fsl,magic-packet; | 196 | fsl,magic-packet; |
| 196 | 197 | ||
| 197 | mdio@24520 { | 198 | mdio@24520 { |
| @@ -199,12 +200,6 @@ | |||
| 199 | #size-cells = <0>; | 200 | #size-cells = <0>; |
| 200 | compatible = "fsl,gianfar-mdio"; | 201 | compatible = "fsl,gianfar-mdio"; |
| 201 | reg = <0x24520 0x20>; | 202 | reg = <0x24520 0x20>; |
| 202 | phy1: ethernet-phy@1 { | ||
| 203 | interrupt-parent = <&ipic>; | ||
| 204 | interrupts = <19 0x8>; | ||
| 205 | reg = <0x1>; | ||
| 206 | device_type = "ethernet-phy"; | ||
| 207 | }; | ||
| 208 | phy4: ethernet-phy@4 { | 203 | phy4: ethernet-phy@4 { |
| 209 | interrupt-parent = <&ipic>; | 204 | interrupt-parent = <&ipic>; |
| 210 | interrupts = <20 0x8>; | 205 | interrupts = <20 0x8>; |
| @@ -219,6 +214,8 @@ | |||
| 219 | }; | 214 | }; |
| 220 | 215 | ||
| 221 | enet1: ethernet@25000 { | 216 | enet1: ethernet@25000 { |
| 217 | #address-cells = <1>; | ||
| 218 | #size-cells = <1>; | ||
| 222 | cell-index = <1>; | 219 | cell-index = <1>; |
| 223 | device_type = "network"; | 220 | device_type = "network"; |
| 224 | model = "eTSEC"; | 221 | model = "eTSEC"; |
diff --git a/arch/powerpc/configs/83xx/mpc8313_rdb_defconfig b/arch/powerpc/configs/83xx/mpc8313_rdb_defconfig index 9e47ae957e2e..409d017621a8 100644 --- a/arch/powerpc/configs/83xx/mpc8313_rdb_defconfig +++ b/arch/powerpc/configs/83xx/mpc8313_rdb_defconfig | |||
| @@ -651,7 +651,7 @@ CONFIG_CICADA_PHY=y | |||
| 651 | # CONFIG_NATIONAL_PHY is not set | 651 | # CONFIG_NATIONAL_PHY is not set |
| 652 | # CONFIG_STE10XP is not set | 652 | # CONFIG_STE10XP is not set |
| 653 | # CONFIG_LSI_ET1011C_PHY is not set | 653 | # CONFIG_LSI_ET1011C_PHY is not set |
| 654 | # CONFIG_FIXED_PHY is not set | 654 | CONFIG_FIXED_PHY=y |
| 655 | # CONFIG_MDIO_BITBANG is not set | 655 | # CONFIG_MDIO_BITBANG is not set |
| 656 | CONFIG_NET_ETHERNET=y | 656 | CONFIG_NET_ETHERNET=y |
| 657 | CONFIG_MII=y | 657 | CONFIG_MII=y |
diff --git a/arch/powerpc/include/asm/compat.h b/arch/powerpc/include/asm/compat.h index d811a8cd7b58..4774c2f92232 100644 --- a/arch/powerpc/include/asm/compat.h +++ b/arch/powerpc/include/asm/compat.h | |||
| @@ -210,5 +210,10 @@ struct compat_shmid64_ds { | |||
| 210 | compat_ulong_t __unused6; | 210 | compat_ulong_t __unused6; |
| 211 | }; | 211 | }; |
| 212 | 212 | ||
| 213 | static inline int is_compat_task(void) | ||
| 214 | { | ||
| 215 | return test_thread_flag(TIF_32BIT); | ||
| 216 | } | ||
| 217 | |||
| 213 | #endif /* __KERNEL__ */ | 218 | #endif /* __KERNEL__ */ |
| 214 | #endif /* _ASM_POWERPC_COMPAT_H */ | 219 | #endif /* _ASM_POWERPC_COMPAT_H */ |
diff --git a/arch/powerpc/include/asm/pgtable-4k.h b/arch/powerpc/include/asm/pgtable-4k.h index 6b18ba9d2d85..1dbca4e7de67 100644 --- a/arch/powerpc/include/asm/pgtable-4k.h +++ b/arch/powerpc/include/asm/pgtable-4k.h | |||
| @@ -60,7 +60,7 @@ | |||
| 60 | /* It should be preserving the high 48 bits and then specifically */ | 60 | /* It should be preserving the high 48 bits and then specifically */ |
| 61 | /* preserving _PAGE_SECONDARY | _PAGE_GROUP_IX */ | 61 | /* preserving _PAGE_SECONDARY | _PAGE_GROUP_IX */ |
| 62 | #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | \ | 62 | #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | \ |
| 63 | _PAGE_HPTEFLAGS) | 63 | _PAGE_HPTEFLAGS | _PAGE_SPECIAL) |
| 64 | 64 | ||
| 65 | /* Bits to mask out from a PMD to get to the PTE page */ | 65 | /* Bits to mask out from a PMD to get to the PTE page */ |
| 66 | #define PMD_MASKED_BITS 0 | 66 | #define PMD_MASKED_BITS 0 |
diff --git a/arch/powerpc/include/asm/pgtable-64k.h b/arch/powerpc/include/asm/pgtable-64k.h index 07b0d8f09cb6..7389003349a6 100644 --- a/arch/powerpc/include/asm/pgtable-64k.h +++ b/arch/powerpc/include/asm/pgtable-64k.h | |||
| @@ -114,7 +114,7 @@ static inline struct subpage_prot_table *pgd_subpage_prot(pgd_t *pgd) | |||
| 114 | * pgprot changes | 114 | * pgprot changes |
| 115 | */ | 115 | */ |
| 116 | #define _PAGE_CHG_MASK (PTE_RPN_MASK | _PAGE_HPTEFLAGS | _PAGE_DIRTY | \ | 116 | #define _PAGE_CHG_MASK (PTE_RPN_MASK | _PAGE_HPTEFLAGS | _PAGE_DIRTY | \ |
| 117 | _PAGE_ACCESSED) | 117 | _PAGE_ACCESSED | _PAGE_SPECIAL) |
| 118 | 118 | ||
| 119 | /* Bits to mask out from a PMD to get to the PTE page */ | 119 | /* Bits to mask out from a PMD to get to the PTE page */ |
| 120 | #define PMD_MASKED_BITS 0x1ff | 120 | #define PMD_MASKED_BITS 0x1ff |
diff --git a/arch/powerpc/include/asm/pgtable-ppc32.h b/arch/powerpc/include/asm/pgtable-ppc32.h index f69a4d977729..820b5f0a35ce 100644 --- a/arch/powerpc/include/asm/pgtable-ppc32.h +++ b/arch/powerpc/include/asm/pgtable-ppc32.h | |||
| @@ -429,7 +429,8 @@ extern int icache_44x_need_flush; | |||
| 429 | #define PMD_PAGE_SIZE(pmd) bad_call_to_PMD_PAGE_SIZE() | 429 | #define PMD_PAGE_SIZE(pmd) bad_call_to_PMD_PAGE_SIZE() |
| 430 | #endif | 430 | #endif |
| 431 | 431 | ||
| 432 | #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY) | 432 | #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | \ |
| 433 | _PAGE_SPECIAL) | ||
| 433 | 434 | ||
| 434 | 435 | ||
| 435 | #define PAGE_PROT_BITS (_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \ | 436 | #define PAGE_PROT_BITS (_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \ |
diff --git a/arch/powerpc/include/asm/seccomp.h b/arch/powerpc/include/asm/seccomp.h index 853765eb1f65..00c1d9133cfe 100644 --- a/arch/powerpc/include/asm/seccomp.h +++ b/arch/powerpc/include/asm/seccomp.h | |||
| @@ -1,10 +1,6 @@ | |||
| 1 | #ifndef _ASM_POWERPC_SECCOMP_H | 1 | #ifndef _ASM_POWERPC_SECCOMP_H |
| 2 | #define _ASM_POWERPC_SECCOMP_H | 2 | #define _ASM_POWERPC_SECCOMP_H |
| 3 | 3 | ||
| 4 | #ifdef __KERNEL__ | ||
| 5 | #include <linux/thread_info.h> | ||
| 6 | #endif | ||
| 7 | |||
| 8 | #include <linux/unistd.h> | 4 | #include <linux/unistd.h> |
| 9 | 5 | ||
| 10 | #define __NR_seccomp_read __NR_read | 6 | #define __NR_seccomp_read __NR_read |
diff --git a/arch/powerpc/kernel/align.c b/arch/powerpc/kernel/align.c index 5af4e9b2dbe2..73cb6a3229ae 100644 --- a/arch/powerpc/kernel/align.c +++ b/arch/powerpc/kernel/align.c | |||
| @@ -367,27 +367,24 @@ static int emulate_multiple(struct pt_regs *regs, unsigned char __user *addr, | |||
| 367 | static int emulate_fp_pair(unsigned char __user *addr, unsigned int reg, | 367 | static int emulate_fp_pair(unsigned char __user *addr, unsigned int reg, |
| 368 | unsigned int flags) | 368 | unsigned int flags) |
| 369 | { | 369 | { |
| 370 | char *ptr = (char *) ¤t->thread.TS_FPR(reg); | 370 | char *ptr0 = (char *) ¤t->thread.TS_FPR(reg); |
| 371 | int i, ret; | 371 | char *ptr1 = (char *) ¤t->thread.TS_FPR(reg+1); |
| 372 | int i, ret, sw = 0; | ||
| 372 | 373 | ||
| 373 | if (!(flags & F)) | 374 | if (!(flags & F)) |
| 374 | return 0; | 375 | return 0; |
| 375 | if (reg & 1) | 376 | if (reg & 1) |
| 376 | return 0; /* invalid form: FRS/FRT must be even */ | 377 | return 0; /* invalid form: FRS/FRT must be even */ |
| 377 | if (!(flags & SW)) { | 378 | if (flags & SW) |
| 378 | /* not byte-swapped - easy */ | 379 | sw = 7; |
| 379 | if (!(flags & ST)) | 380 | ret = 0; |
| 380 | ret = __copy_from_user(ptr, addr, 16); | 381 | for (i = 0; i < 8; ++i) { |
| 381 | else | 382 | if (!(flags & ST)) { |
| 382 | ret = __copy_to_user(addr, ptr, 16); | 383 | ret |= __get_user(ptr0[i^sw], addr + i); |
| 383 | } else { | 384 | ret |= __get_user(ptr1[i^sw], addr + i + 8); |
| 384 | /* each FPR value is byte-swapped separately */ | 385 | } else { |
| 385 | ret = 0; | 386 | ret |= __put_user(ptr0[i^sw], addr + i); |
| 386 | for (i = 0; i < 16; ++i) { | 387 | ret |= __put_user(ptr1[i^sw], addr + i + 8); |
| 387 | if (!(flags & ST)) | ||
| 388 | ret |= __get_user(ptr[i^7], addr + i); | ||
| 389 | else | ||
| 390 | ret |= __put_user(ptr[i^7], addr + i); | ||
| 391 | } | 388 | } |
| 392 | } | 389 | } |
| 393 | if (ret) | 390 | if (ret) |
| @@ -646,11 +643,16 @@ static int emulate_vsx(unsigned char __user *addr, unsigned int reg, | |||
| 646 | unsigned int areg, struct pt_regs *regs, | 643 | unsigned int areg, struct pt_regs *regs, |
| 647 | unsigned int flags, unsigned int length) | 644 | unsigned int flags, unsigned int length) |
| 648 | { | 645 | { |
| 649 | char *ptr = (char *) ¤t->thread.TS_FPR(reg); | 646 | char *ptr; |
| 650 | int ret = 0; | 647 | int ret = 0; |
| 651 | 648 | ||
| 652 | flush_vsx_to_thread(current); | 649 | flush_vsx_to_thread(current); |
| 653 | 650 | ||
| 651 | if (reg < 32) | ||
| 652 | ptr = (char *) ¤t->thread.TS_FPR(reg); | ||
| 653 | else | ||
| 654 | ptr = (char *) ¤t->thread.vr[reg - 32]; | ||
| 655 | |||
| 654 | if (flags & ST) | 656 | if (flags & ST) |
| 655 | ret = __copy_to_user(addr, ptr, length); | 657 | ret = __copy_to_user(addr, ptr, length); |
| 656 | else { | 658 | else { |
diff --git a/arch/powerpc/kernel/ftrace.c b/arch/powerpc/kernel/ftrace.c index 5355244c99ff..60c60ccf5e3c 100644 --- a/arch/powerpc/kernel/ftrace.c +++ b/arch/powerpc/kernel/ftrace.c | |||
| @@ -195,8 +195,9 @@ __ftrace_make_nop(struct module *mod, | |||
| 195 | return -EINVAL; | 195 | return -EINVAL; |
| 196 | } | 196 | } |
| 197 | 197 | ||
| 198 | offset = (unsigned)((unsigned short)jmp[0]) << 16 | | 198 | /* The bottom half is signed extended */ |
| 199 | (unsigned)((unsigned short)jmp[1]); | 199 | offset = ((unsigned)((unsigned short)jmp[0]) << 16) + |
| 200 | (int)((short)jmp[1]); | ||
| 200 | 201 | ||
| 201 | DEBUGP(" %x ", offset); | 202 | DEBUGP(" %x ", offset); |
| 202 | 203 | ||
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index 19b12d2cbb4b..0f4181272311 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c | |||
| @@ -561,8 +561,21 @@ int pci_mmap_legacy_page_range(struct pci_bus *bus, | |||
| 561 | (unsigned long long)(offset + size - 1)); | 561 | (unsigned long long)(offset + size - 1)); |
| 562 | 562 | ||
| 563 | if (mmap_state == pci_mmap_mem) { | 563 | if (mmap_state == pci_mmap_mem) { |
| 564 | if ((offset + size) > hose->isa_mem_size) | 564 | /* Hack alert ! |
| 565 | return -ENXIO; | 565 | * |
| 566 | * Because X is lame and can fail starting if it gets an error trying | ||
| 567 | * to mmap legacy_mem (instead of just moving on without legacy memory | ||
| 568 | * access) we fake it here by giving it anonymous memory, effectively | ||
| 569 | * behaving just like /dev/zero | ||
| 570 | */ | ||
| 571 | if ((offset + size) > hose->isa_mem_size) { | ||
| 572 | printk(KERN_DEBUG | ||
| 573 | "Process %s (pid:%d) mapped non-existing PCI legacy memory for 0%04x:%02x\n", | ||
| 574 | current->comm, current->pid, pci_domain_nr(bus), bus->number); | ||
| 575 | if (vma->vm_flags & VM_SHARED) | ||
| 576 | return shmem_zero_setup(vma); | ||
| 577 | return 0; | ||
| 578 | } | ||
| 566 | offset += hose->isa_mem_phys; | 579 | offset += hose->isa_mem_phys; |
| 567 | } else { | 580 | } else { |
| 568 | unsigned long io_offset = (unsigned long)hose->io_base_virt - _IO_BASE; | 581 | unsigned long io_offset = (unsigned long)hose->io_base_virt - _IO_BASE; |
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c index 2822c8ccfaaf..5f81256287f5 100644 --- a/arch/powerpc/kvm/powerpc.c +++ b/arch/powerpc/kvm/powerpc.c | |||
| @@ -125,6 +125,10 @@ static void kvmppc_free_vcpus(struct kvm *kvm) | |||
| 125 | } | 125 | } |
| 126 | } | 126 | } |
| 127 | 127 | ||
| 128 | void kvm_arch_sync_events(struct kvm *kvm) | ||
| 129 | { | ||
| 130 | } | ||
| 131 | |||
| 128 | void kvm_arch_destroy_vm(struct kvm *kvm) | 132 | void kvm_arch_destroy_vm(struct kvm *kvm) |
| 129 | { | 133 | { |
| 130 | kvmppc_free_vcpus(kvm); | 134 | kvmppc_free_vcpus(kvm); |
diff --git a/arch/powerpc/lib/copyuser_64.S b/arch/powerpc/lib/copyuser_64.S index 70693a5c12a1..693b14a778fa 100644 --- a/arch/powerpc/lib/copyuser_64.S +++ b/arch/powerpc/lib/copyuser_64.S | |||
| @@ -62,18 +62,19 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) | |||
| 62 | 72: std r8,8(r3) | 62 | 72: std r8,8(r3) |
| 63 | beq+ 3f | 63 | beq+ 3f |
| 64 | addi r3,r3,16 | 64 | addi r3,r3,16 |
| 65 | 23: ld r9,8(r4) | ||
| 66 | .Ldo_tail: | 65 | .Ldo_tail: |
| 67 | bf cr7*4+1,1f | 66 | bf cr7*4+1,1f |
| 68 | rotldi r9,r9,32 | 67 | 23: lwz r9,8(r4) |
| 68 | addi r4,r4,4 | ||
| 69 | 73: stw r9,0(r3) | 69 | 73: stw r9,0(r3) |
| 70 | addi r3,r3,4 | 70 | addi r3,r3,4 |
| 71 | 1: bf cr7*4+2,2f | 71 | 1: bf cr7*4+2,2f |
| 72 | rotldi r9,r9,16 | 72 | 44: lhz r9,8(r4) |
| 73 | addi r4,r4,2 | ||
| 73 | 74: sth r9,0(r3) | 74 | 74: sth r9,0(r3) |
| 74 | addi r3,r3,2 | 75 | addi r3,r3,2 |
| 75 | 2: bf cr7*4+3,3f | 76 | 2: bf cr7*4+3,3f |
| 76 | rotldi r9,r9,8 | 77 | 45: lbz r9,8(r4) |
| 77 | 75: stb r9,0(r3) | 78 | 75: stb r9,0(r3) |
| 78 | 3: li r3,0 | 79 | 3: li r3,0 |
| 79 | blr | 80 | blr |
| @@ -141,11 +142,24 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) | |||
| 141 | 6: cmpwi cr1,r5,8 | 142 | 6: cmpwi cr1,r5,8 |
| 142 | addi r3,r3,32 | 143 | addi r3,r3,32 |
| 143 | sld r9,r9,r10 | 144 | sld r9,r9,r10 |
| 144 | ble cr1,.Ldo_tail | 145 | ble cr1,7f |
| 145 | 34: ld r0,8(r4) | 146 | 34: ld r0,8(r4) |
| 146 | srd r7,r0,r11 | 147 | srd r7,r0,r11 |
| 147 | or r9,r7,r9 | 148 | or r9,r7,r9 |
| 148 | b .Ldo_tail | 149 | 7: |
| 150 | bf cr7*4+1,1f | ||
| 151 | rotldi r9,r9,32 | ||
| 152 | 94: stw r9,0(r3) | ||
| 153 | addi r3,r3,4 | ||
| 154 | 1: bf cr7*4+2,2f | ||
| 155 | rotldi r9,r9,16 | ||
| 156 | 95: sth r9,0(r3) | ||
| 157 | addi r3,r3,2 | ||
| 158 | 2: bf cr7*4+3,3f | ||
| 159 | rotldi r9,r9,8 | ||
| 160 | 96: stb r9,0(r3) | ||
| 161 | 3: li r3,0 | ||
| 162 | blr | ||
| 149 | 163 | ||
| 150 | .Ldst_unaligned: | 164 | .Ldst_unaligned: |
| 151 | PPC_MTOCRF 0x01,r6 /* put #bytes to 8B bdry into cr7 */ | 165 | PPC_MTOCRF 0x01,r6 /* put #bytes to 8B bdry into cr7 */ |
| @@ -218,7 +232,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) | |||
| 218 | 121: | 232 | 121: |
| 219 | 132: | 233 | 132: |
| 220 | addi r3,r3,8 | 234 | addi r3,r3,8 |
| 221 | 123: | ||
| 222 | 134: | 235 | 134: |
| 223 | 135: | 236 | 135: |
| 224 | 138: | 237 | 138: |
| @@ -226,6 +239,9 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) | |||
| 226 | 140: | 239 | 140: |
| 227 | 141: | 240 | 141: |
| 228 | 142: | 241 | 142: |
| 242 | 123: | ||
| 243 | 144: | ||
| 244 | 145: | ||
| 229 | 245 | ||
| 230 | /* | 246 | /* |
| 231 | * here we have had a fault on a load and r3 points to the first | 247 | * here we have had a fault on a load and r3 points to the first |
| @@ -309,6 +325,9 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) | |||
| 309 | 187: | 325 | 187: |
| 310 | 188: | 326 | 188: |
| 311 | 189: | 327 | 189: |
| 328 | 194: | ||
| 329 | 195: | ||
| 330 | 196: | ||
| 312 | 1: | 331 | 1: |
| 313 | ld r6,-24(r1) | 332 | ld r6,-24(r1) |
| 314 | ld r5,-8(r1) | 333 | ld r5,-8(r1) |
| @@ -329,7 +348,9 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) | |||
| 329 | .llong 72b,172b | 348 | .llong 72b,172b |
| 330 | .llong 23b,123b | 349 | .llong 23b,123b |
| 331 | .llong 73b,173b | 350 | .llong 73b,173b |
| 351 | .llong 44b,144b | ||
| 332 | .llong 74b,174b | 352 | .llong 74b,174b |
| 353 | .llong 45b,145b | ||
| 333 | .llong 75b,175b | 354 | .llong 75b,175b |
| 334 | .llong 24b,124b | 355 | .llong 24b,124b |
| 335 | .llong 25b,125b | 356 | .llong 25b,125b |
| @@ -347,6 +368,9 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) | |||
| 347 | .llong 79b,179b | 368 | .llong 79b,179b |
| 348 | .llong 80b,180b | 369 | .llong 80b,180b |
| 349 | .llong 34b,134b | 370 | .llong 34b,134b |
| 371 | .llong 94b,194b | ||
| 372 | .llong 95b,195b | ||
| 373 | .llong 96b,196b | ||
| 350 | .llong 35b,135b | 374 | .llong 35b,135b |
| 351 | .llong 81b,181b | 375 | .llong 81b,181b |
| 352 | .llong 36b,136b | 376 | .llong 36b,136b |
diff --git a/arch/powerpc/lib/memcpy_64.S b/arch/powerpc/lib/memcpy_64.S index fe2d34e5332d..e178922b2c21 100644 --- a/arch/powerpc/lib/memcpy_64.S +++ b/arch/powerpc/lib/memcpy_64.S | |||
| @@ -53,18 +53,19 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) | |||
| 53 | 3: std r8,8(r3) | 53 | 3: std r8,8(r3) |
| 54 | beq 3f | 54 | beq 3f |
| 55 | addi r3,r3,16 | 55 | addi r3,r3,16 |
| 56 | ld r9,8(r4) | ||
| 57 | .Ldo_tail: | 56 | .Ldo_tail: |
| 58 | bf cr7*4+1,1f | 57 | bf cr7*4+1,1f |
| 59 | rotldi r9,r9,32 | 58 | lwz r9,8(r4) |
| 59 | addi r4,r4,4 | ||
| 60 | stw r9,0(r3) | 60 | stw r9,0(r3) |
| 61 | addi r3,r3,4 | 61 | addi r3,r3,4 |
| 62 | 1: bf cr7*4+2,2f | 62 | 1: bf cr7*4+2,2f |
| 63 | rotldi r9,r9,16 | 63 | lhz r9,8(r4) |
| 64 | addi r4,r4,2 | ||
| 64 | sth r9,0(r3) | 65 | sth r9,0(r3) |
| 65 | addi r3,r3,2 | 66 | addi r3,r3,2 |
| 66 | 2: bf cr7*4+3,3f | 67 | 2: bf cr7*4+3,3f |
| 67 | rotldi r9,r9,8 | 68 | lbz r9,8(r4) |
| 68 | stb r9,0(r3) | 69 | stb r9,0(r3) |
| 69 | 3: ld r3,48(r1) /* return dest pointer */ | 70 | 3: ld r3,48(r1) /* return dest pointer */ |
| 70 | blr | 71 | blr |
| @@ -133,11 +134,24 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) | |||
| 133 | cmpwi cr1,r5,8 | 134 | cmpwi cr1,r5,8 |
| 134 | addi r3,r3,32 | 135 | addi r3,r3,32 |
| 135 | sld r9,r9,r10 | 136 | sld r9,r9,r10 |
| 136 | ble cr1,.Ldo_tail | 137 | ble cr1,6f |
| 137 | ld r0,8(r4) | 138 | ld r0,8(r4) |
| 138 | srd r7,r0,r11 | 139 | srd r7,r0,r11 |
| 139 | or r9,r7,r9 | 140 | or r9,r7,r9 |
| 140 | b .Ldo_tail | 141 | 6: |
| 142 | bf cr7*4+1,1f | ||
| 143 | rotldi r9,r9,32 | ||
| 144 | stw r9,0(r3) | ||
| 145 | addi r3,r3,4 | ||
| 146 | 1: bf cr7*4+2,2f | ||
| 147 | rotldi r9,r9,16 | ||
| 148 | sth r9,0(r3) | ||
| 149 | addi r3,r3,2 | ||
| 150 | 2: bf cr7*4+3,3f | ||
| 151 | rotldi r9,r9,8 | ||
| 152 | stb r9,0(r3) | ||
| 153 | 3: ld r3,48(r1) /* return dest pointer */ | ||
| 154 | blr | ||
| 141 | 155 | ||
| 142 | .Ldst_unaligned: | 156 | .Ldst_unaligned: |
| 143 | PPC_MTOCRF 0x01,r6 # put #bytes to 8B bdry into cr7 | 157 | PPC_MTOCRF 0x01,r6 # put #bytes to 8B bdry into cr7 |
diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c index 4aae0c387645..13b7d54f185b 100644 --- a/arch/powerpc/lib/sstep.c +++ b/arch/powerpc/lib/sstep.c | |||
| @@ -172,6 +172,8 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) | |||
| 172 | } | 172 | } |
| 173 | break; | 173 | break; |
| 174 | case 0x378: /* orx */ | 174 | case 0x378: /* orx */ |
| 175 | if (instr & 1) | ||
| 176 | break; | ||
| 175 | rs = (instr >> 21) & 0x1f; | 177 | rs = (instr >> 21) & 0x1f; |
| 176 | rb = (instr >> 11) & 0x1f; | 178 | rb = (instr >> 11) & 0x1f; |
| 177 | if (rs == rb) { /* mr */ | 179 | if (rs == rb) { /* mr */ |
diff --git a/arch/powerpc/mm/fsl_booke_mmu.c b/arch/powerpc/mm/fsl_booke_mmu.c index 1971e4ee3d6e..ea6e41e39d9f 100644 --- a/arch/powerpc/mm/fsl_booke_mmu.c +++ b/arch/powerpc/mm/fsl_booke_mmu.c | |||
| @@ -73,7 +73,7 @@ extern unsigned int tlbcam_index; | |||
| 73 | /* | 73 | /* |
| 74 | * Return PA for this VA if it is mapped by a CAM, or 0 | 74 | * Return PA for this VA if it is mapped by a CAM, or 0 |
| 75 | */ | 75 | */ |
| 76 | unsigned long v_mapped_by_tlbcam(unsigned long va) | 76 | phys_addr_t v_mapped_by_tlbcam(unsigned long va) |
| 77 | { | 77 | { |
| 78 | int b; | 78 | int b; |
| 79 | for (b = 0; b < tlbcam_index; ++b) | 79 | for (b = 0; b < tlbcam_index; ++b) |
| @@ -85,7 +85,7 @@ unsigned long v_mapped_by_tlbcam(unsigned long va) | |||
| 85 | /* | 85 | /* |
| 86 | * Return VA for a given PA or 0 if not mapped | 86 | * Return VA for a given PA or 0 if not mapped |
| 87 | */ | 87 | */ |
| 88 | unsigned long p_mapped_by_tlbcam(unsigned long pa) | 88 | unsigned long p_mapped_by_tlbcam(phys_addr_t pa) |
| 89 | { | 89 | { |
| 90 | int b; | 90 | int b; |
| 91 | for (b = 0; b < tlbcam_index; ++b) | 91 | for (b = 0; b < tlbcam_index; ++b) |
diff --git a/arch/powerpc/mm/hash_low_32.S b/arch/powerpc/mm/hash_low_32.S index 67850ec9feb3..14af8cedab70 100644 --- a/arch/powerpc/mm/hash_low_32.S +++ b/arch/powerpc/mm/hash_low_32.S | |||
| @@ -320,7 +320,7 @@ _GLOBAL(create_hpte) | |||
| 320 | and r8,r8,r0 /* writable if _RW & _DIRTY */ | 320 | and r8,r8,r0 /* writable if _RW & _DIRTY */ |
| 321 | rlwimi r5,r5,32-1,30,30 /* _PAGE_USER -> PP msb */ | 321 | rlwimi r5,r5,32-1,30,30 /* _PAGE_USER -> PP msb */ |
| 322 | rlwimi r5,r5,32-2,31,31 /* _PAGE_USER -> PP lsb */ | 322 | rlwimi r5,r5,32-2,31,31 /* _PAGE_USER -> PP lsb */ |
| 323 | ori r8,r8,0xe14 /* clear out reserved bits and M */ | 323 | ori r8,r8,0xe04 /* clear out reserved bits */ |
| 324 | andc r8,r5,r8 /* PP = user? (rw&dirty? 2: 3): 0 */ | 324 | andc r8,r5,r8 /* PP = user? (rw&dirty? 2: 3): 0 */ |
| 325 | BEGIN_FTR_SECTION | 325 | BEGIN_FTR_SECTION |
| 326 | rlwinm r8,r8,0,~_PAGE_COHERENT /* clear M (coherence not required) */ | 326 | rlwinm r8,r8,0,~_PAGE_COHERENT /* clear M (coherence not required) */ |
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index 7393bd76d698..5ac08b8ab654 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/notifier.h> | 19 | #include <linux/notifier.h> |
| 20 | #include <linux/lmb.h> | 20 | #include <linux/lmb.h> |
| 21 | #include <linux/of.h> | 21 | #include <linux/of.h> |
| 22 | #include <linux/pfn.h> | ||
| 22 | #include <asm/sparsemem.h> | 23 | #include <asm/sparsemem.h> |
| 23 | #include <asm/prom.h> | 24 | #include <asm/prom.h> |
| 24 | #include <asm/system.h> | 25 | #include <asm/system.h> |
| @@ -882,7 +883,7 @@ static void mark_reserved_regions_for_nid(int nid) | |||
| 882 | unsigned long physbase = lmb.reserved.region[i].base; | 883 | unsigned long physbase = lmb.reserved.region[i].base; |
| 883 | unsigned long size = lmb.reserved.region[i].size; | 884 | unsigned long size = lmb.reserved.region[i].size; |
| 884 | unsigned long start_pfn = physbase >> PAGE_SHIFT; | 885 | unsigned long start_pfn = physbase >> PAGE_SHIFT; |
| 885 | unsigned long end_pfn = ((physbase + size) >> PAGE_SHIFT); | 886 | unsigned long end_pfn = PFN_UP(physbase + size); |
| 886 | struct node_active_region node_ar; | 887 | struct node_active_region node_ar; |
| 887 | unsigned long node_end_pfn = node->node_start_pfn + | 888 | unsigned long node_end_pfn = node->node_start_pfn + |
| 888 | node->node_spanned_pages; | 889 | node->node_spanned_pages; |
| @@ -908,7 +909,7 @@ static void mark_reserved_regions_for_nid(int nid) | |||
| 908 | */ | 909 | */ |
| 909 | if (end_pfn > node_ar.end_pfn) | 910 | if (end_pfn > node_ar.end_pfn) |
| 910 | reserve_size = (node_ar.end_pfn << PAGE_SHIFT) | 911 | reserve_size = (node_ar.end_pfn << PAGE_SHIFT) |
| 911 | - (start_pfn << PAGE_SHIFT); | 912 | - physbase; |
| 912 | /* | 913 | /* |
| 913 | * Only worry about *this* node, others may not | 914 | * Only worry about *this* node, others may not |
| 914 | * yet have valid NODE_DATA(). | 915 | * yet have valid NODE_DATA(). |
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c index 22972cd83cc9..58bcaeba728d 100644 --- a/arch/powerpc/mm/pgtable_32.c +++ b/arch/powerpc/mm/pgtable_32.c | |||
| @@ -61,8 +61,8 @@ void setbat(int index, unsigned long virt, phys_addr_t phys, | |||
| 61 | 61 | ||
| 62 | #ifdef HAVE_TLBCAM | 62 | #ifdef HAVE_TLBCAM |
| 63 | extern unsigned int tlbcam_index; | 63 | extern unsigned int tlbcam_index; |
| 64 | extern unsigned long v_mapped_by_tlbcam(unsigned long va); | 64 | extern phys_addr_t v_mapped_by_tlbcam(unsigned long va); |
| 65 | extern unsigned long p_mapped_by_tlbcam(unsigned long pa); | 65 | extern unsigned long p_mapped_by_tlbcam(phys_addr_t pa); |
| 66 | #else /* !HAVE_TLBCAM */ | 66 | #else /* !HAVE_TLBCAM */ |
| 67 | #define v_mapped_by_tlbcam(x) (0UL) | 67 | #define v_mapped_by_tlbcam(x) (0UL) |
| 68 | #define p_mapped_by_tlbcam(x) (0UL) | 68 | #define p_mapped_by_tlbcam(x) (0UL) |
diff --git a/arch/powerpc/oprofile/cell/spu_profiler.c b/arch/powerpc/oprofile/cell/spu_profiler.c index 9305ddaac512..b129d007e7fe 100644 --- a/arch/powerpc/oprofile/cell/spu_profiler.c +++ b/arch/powerpc/oprofile/cell/spu_profiler.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <linux/smp.h> | 16 | #include <linux/smp.h> |
| 17 | #include <linux/slab.h> | 17 | #include <linux/slab.h> |
| 18 | #include <asm/cell-pmu.h> | 18 | #include <asm/cell-pmu.h> |
| 19 | #include <asm/time.h> | ||
| 19 | #include "pr_util.h" | 20 | #include "pr_util.h" |
| 20 | 21 | ||
| 21 | #define SCALE_SHIFT 14 | 22 | #define SCALE_SHIFT 14 |
diff --git a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c index 9876d7e072f4..ddf0bdc0fc8b 100644 --- a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c +++ b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c | |||
| @@ -186,7 +186,7 @@ out_unmap_regs: | |||
| 186 | iounmap(priv->regs); | 186 | iounmap(priv->regs); |
| 187 | out_free_bootmem: | 187 | out_free_bootmem: |
| 188 | free_bootmem((unsigned long)priv, | 188 | free_bootmem((unsigned long)priv, |
| 189 | sizeof(sizeof(struct pq2ads_pci_pic))); | 189 | sizeof(struct pq2ads_pci_pic)); |
| 190 | of_node_put(np); | 190 | of_node_put(np); |
| 191 | out_unmap_irq: | 191 | out_unmap_irq: |
| 192 | irq_dispose_mapping(irq); | 192 | irq_dispose_mapping(irq); |
diff --git a/arch/powerpc/platforms/86xx/gef_sbc610.c b/arch/powerpc/platforms/86xx/gef_sbc610.c index fb371f5ce132..d6b772ba3b8f 100644 --- a/arch/powerpc/platforms/86xx/gef_sbc610.c +++ b/arch/powerpc/platforms/86xx/gef_sbc610.c | |||
| @@ -142,6 +142,10 @@ static void __init gef_sbc610_nec_fixup(struct pci_dev *pdev) | |||
| 142 | { | 142 | { |
| 143 | unsigned int val; | 143 | unsigned int val; |
| 144 | 144 | ||
| 145 | /* Do not do the fixup on other platforms! */ | ||
| 146 | if (!machine_is(gef_sbc610)) | ||
| 147 | return; | ||
| 148 | |||
| 145 | printk(KERN_INFO "Running NEC uPD720101 Fixup\n"); | 149 | printk(KERN_INFO "Running NEC uPD720101 Fixup\n"); |
| 146 | 150 | ||
| 147 | /* Ensure ports 1, 2, 3, 4 & 5 are enabled */ | 151 | /* Ensure ports 1, 2, 3, 4 & 5 are enabled */ |
diff --git a/arch/powerpc/platforms/ps3/mm.c b/arch/powerpc/platforms/ps3/mm.c index 67de6bf3db3d..d281cc0bca71 100644 --- a/arch/powerpc/platforms/ps3/mm.c +++ b/arch/powerpc/platforms/ps3/mm.c | |||
| @@ -328,7 +328,7 @@ static int __init ps3_mm_add_memory(void) | |||
| 328 | return result; | 328 | return result; |
| 329 | } | 329 | } |
| 330 | 330 | ||
| 331 | core_initcall(ps3_mm_add_memory); | 331 | device_initcall(ps3_mm_add_memory); |
| 332 | 332 | ||
| 333 | /*============================================================================*/ | 333 | /*============================================================================*/ |
| 334 | /* dma routines */ | 334 | /* dma routines */ |
diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c index a623ad256e9e..9b21ee68ea50 100644 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <asm/firmware.h> | 14 | #include <asm/firmware.h> |
| 15 | #include <asm/machdep.h> | 15 | #include <asm/machdep.h> |
| 16 | #include <asm/pSeries_reconfig.h> | 16 | #include <asm/pSeries_reconfig.h> |
| 17 | #include <asm/sparsemem.h> | ||
| 17 | 18 | ||
| 18 | static int pseries_remove_lmb(unsigned long base, unsigned int lmb_size) | 19 | static int pseries_remove_lmb(unsigned long base, unsigned int lmb_size) |
| 19 | { | 20 | { |
diff --git a/arch/powerpc/sysdev/cpm2_pic.c b/arch/powerpc/sysdev/cpm2_pic.c index b16ca3ed65d2..78f1f7cca0a0 100644 --- a/arch/powerpc/sysdev/cpm2_pic.c +++ b/arch/powerpc/sysdev/cpm2_pic.c | |||
| @@ -165,7 +165,7 @@ static int cpm2_set_irq_type(unsigned int virq, unsigned int flow_type) | |||
| 165 | edibit = (14 - (src - CPM2_IRQ_EXT1)); | 165 | edibit = (14 - (src - CPM2_IRQ_EXT1)); |
| 166 | else | 166 | else |
| 167 | if (src >= CPM2_IRQ_PORTC15 && src <= CPM2_IRQ_PORTC0) | 167 | if (src >= CPM2_IRQ_PORTC15 && src <= CPM2_IRQ_PORTC0) |
| 168 | edibit = (31 - (src - CPM2_IRQ_PORTC15)); | 168 | edibit = (31 - (CPM2_IRQ_PORTC0 - src)); |
| 169 | else | 169 | else |
| 170 | return (flow_type & IRQ_TYPE_LEVEL_LOW) ? 0 : -EINVAL; | 170 | return (flow_type & IRQ_TYPE_LEVEL_LOW) ? 0 : -EINVAL; |
| 171 | 171 | ||
diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c index 88a983ece5c9..9a89cd3e80a2 100644 --- a/arch/powerpc/sysdev/ipic.c +++ b/arch/powerpc/sysdev/ipic.c | |||
| @@ -890,7 +890,7 @@ unsigned int ipic_get_irq(void) | |||
| 890 | return irq_linear_revmap(primary_ipic->irqhost, irq); | 890 | return irq_linear_revmap(primary_ipic->irqhost, irq); |
| 891 | } | 891 | } |
| 892 | 892 | ||
| 893 | #ifdef CONFIG_PM | 893 | #ifdef CONFIG_SUSPEND |
| 894 | static struct { | 894 | static struct { |
| 895 | u32 sicfr; | 895 | u32 sicfr; |
| 896 | u32 siprr[2]; | 896 | u32 siprr[2]; |
diff --git a/arch/powerpc/sysdev/ppc4xx_pci.c b/arch/powerpc/sysdev/ppc4xx_pci.c index 77fae5f64f2e..5558d932b4d5 100644 --- a/arch/powerpc/sysdev/ppc4xx_pci.c +++ b/arch/powerpc/sysdev/ppc4xx_pci.c | |||
| @@ -204,6 +204,23 @@ static int __init ppc4xx_setup_one_pci_PMM(struct pci_controller *hose, | |||
| 204 | { | 204 | { |
| 205 | u32 ma, pcila, pciha; | 205 | u32 ma, pcila, pciha; |
| 206 | 206 | ||
| 207 | /* Hack warning ! The "old" PCI 2.x cell only let us configure the low | ||
| 208 | * 32-bit of incoming PLB addresses. The top 4 bits of the 36-bit | ||
| 209 | * address are actually hard wired to a value that appears to depend | ||
| 210 | * on the specific SoC. For example, it's 0 on 440EP and 1 on 440EPx. | ||
| 211 | * | ||
| 212 | * The trick here is we just crop those top bits and ignore them when | ||
| 213 | * programming the chip. That means the device-tree has to be right | ||
| 214 | * for the specific part used (we don't print a warning if it's wrong | ||
| 215 | * but on the other hand, you'll crash quickly enough), but at least | ||
| 216 | * this code should work whatever the hard coded value is | ||
| 217 | */ | ||
| 218 | plb_addr &= 0xffffffffull; | ||
| 219 | |||
| 220 | /* Note: Due to the above hack, the test below doesn't actually test | ||
| 221 | * if you address is above 4G, but it tests that address and | ||
| 222 | * (address + size) are both contained in the same 4G | ||
| 223 | */ | ||
| 207 | if ((plb_addr + size) > 0xffffffffull || !is_power_of_2(size) || | 224 | if ((plb_addr + size) > 0xffffffffull || !is_power_of_2(size) || |
| 208 | size < 0x1000 || (plb_addr & (size - 1)) != 0) { | 225 | size < 0x1000 || (plb_addr & (size - 1)) != 0) { |
| 209 | printk(KERN_WARNING "%s: Resource out of range\n", | 226 | printk(KERN_WARNING "%s: Resource out of range\n", |
diff --git a/arch/s390/crypto/aes_s390.c b/arch/s390/crypto/aes_s390.c index c42cd898f68b..6118890c946d 100644 --- a/arch/s390/crypto/aes_s390.c +++ b/arch/s390/crypto/aes_s390.c | |||
| @@ -556,7 +556,7 @@ static void __exit aes_s390_fini(void) | |||
| 556 | module_init(aes_s390_init); | 556 | module_init(aes_s390_init); |
| 557 | module_exit(aes_s390_fini); | 557 | module_exit(aes_s390_fini); |
| 558 | 558 | ||
| 559 | MODULE_ALIAS("aes"); | 559 | MODULE_ALIAS("aes-all"); |
| 560 | 560 | ||
| 561 | MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm"); | 561 | MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm"); |
| 562 | MODULE_LICENSE("GPL"); | 562 | MODULE_LICENSE("GPL"); |
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index a0e748da9909..31e809c77790 100644 --- a/arch/s390/defconfig +++ b/arch/s390/defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.28-rc6 | 3 | # Linux kernel version: 2.6.29-rc4 |
| 4 | # Thu Nov 27 11:00:49 2008 | 4 | # Wed Feb 11 10:07:16 2009 |
| 5 | # | 5 | # |
| 6 | CONFIG_SCHED_MC=y | 6 | CONFIG_SCHED_MC=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -14,12 +14,14 @@ CONFIG_RWSEM_XCHGADD_ALGORITHM=y | |||
| 14 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 14 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
| 15 | CONFIG_GENERIC_HWEIGHT=y | 15 | CONFIG_GENERIC_HWEIGHT=y |
| 16 | CONFIG_GENERIC_TIME=y | 16 | CONFIG_GENERIC_TIME=y |
| 17 | CONFIG_GENERIC_TIME_VSYSCALL=y | ||
| 17 | CONFIG_GENERIC_CLOCKEVENTS=y | 18 | CONFIG_GENERIC_CLOCKEVENTS=y |
| 18 | CONFIG_GENERIC_BUG=y | 19 | CONFIG_GENERIC_BUG=y |
| 19 | CONFIG_NO_IOMEM=y | 20 | CONFIG_NO_IOMEM=y |
| 20 | CONFIG_NO_DMA=y | 21 | CONFIG_NO_DMA=y |
| 21 | CONFIG_GENERIC_LOCKBREAK=y | 22 | CONFIG_GENERIC_LOCKBREAK=y |
| 22 | CONFIG_PGSTE=y | 23 | CONFIG_PGSTE=y |
| 24 | CONFIG_VIRT_CPU_ACCOUNTING=y | ||
| 23 | CONFIG_S390=y | 25 | CONFIG_S390=y |
| 24 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 26 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
| 25 | 27 | ||
| @@ -39,20 +41,29 @@ CONFIG_POSIX_MQUEUE=y | |||
| 39 | # CONFIG_TASKSTATS is not set | 41 | # CONFIG_TASKSTATS is not set |
| 40 | CONFIG_AUDIT=y | 42 | CONFIG_AUDIT=y |
| 41 | # CONFIG_AUDITSYSCALL is not set | 43 | # CONFIG_AUDITSYSCALL is not set |
| 44 | |||
| 45 | # | ||
| 46 | # RCU Subsystem | ||
| 47 | # | ||
| 48 | CONFIG_CLASSIC_RCU=y | ||
| 49 | # CONFIG_TREE_RCU is not set | ||
| 50 | # CONFIG_PREEMPT_RCU is not set | ||
| 51 | # CONFIG_TREE_RCU_TRACE is not set | ||
| 52 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
| 42 | CONFIG_IKCONFIG=y | 53 | CONFIG_IKCONFIG=y |
| 43 | CONFIG_IKCONFIG_PROC=y | 54 | CONFIG_IKCONFIG_PROC=y |
| 44 | CONFIG_LOG_BUF_SHIFT=17 | 55 | CONFIG_LOG_BUF_SHIFT=17 |
| 56 | CONFIG_GROUP_SCHED=y | ||
| 57 | CONFIG_FAIR_GROUP_SCHED=y | ||
| 58 | # CONFIG_RT_GROUP_SCHED is not set | ||
| 59 | CONFIG_USER_SCHED=y | ||
| 60 | # CONFIG_CGROUP_SCHED is not set | ||
| 45 | CONFIG_CGROUPS=y | 61 | CONFIG_CGROUPS=y |
| 46 | # CONFIG_CGROUP_DEBUG is not set | 62 | # CONFIG_CGROUP_DEBUG is not set |
| 47 | CONFIG_CGROUP_NS=y | 63 | CONFIG_CGROUP_NS=y |
| 48 | # CONFIG_CGROUP_FREEZER is not set | 64 | # CONFIG_CGROUP_FREEZER is not set |
| 49 | # CONFIG_CGROUP_DEVICE is not set | 65 | # CONFIG_CGROUP_DEVICE is not set |
| 50 | # CONFIG_CPUSETS is not set | 66 | # CONFIG_CPUSETS is not set |
| 51 | CONFIG_GROUP_SCHED=y | ||
| 52 | CONFIG_FAIR_GROUP_SCHED=y | ||
| 53 | # CONFIG_RT_GROUP_SCHED is not set | ||
| 54 | CONFIG_USER_SCHED=y | ||
| 55 | # CONFIG_CGROUP_SCHED is not set | ||
| 56 | # CONFIG_CGROUP_CPUACCT is not set | 67 | # CONFIG_CGROUP_CPUACCT is not set |
| 57 | # CONFIG_RESOURCE_COUNTERS is not set | 68 | # CONFIG_RESOURCE_COUNTERS is not set |
| 58 | CONFIG_SYSFS_DEPRECATED=y | 69 | CONFIG_SYSFS_DEPRECATED=y |
| @@ -63,6 +74,7 @@ CONFIG_UTS_NS=y | |||
| 63 | CONFIG_IPC_NS=y | 74 | CONFIG_IPC_NS=y |
| 64 | # CONFIG_USER_NS is not set | 75 | # CONFIG_USER_NS is not set |
| 65 | # CONFIG_PID_NS is not set | 76 | # CONFIG_PID_NS is not set |
| 77 | # CONFIG_NET_NS is not set | ||
| 66 | CONFIG_BLK_DEV_INITRD=y | 78 | CONFIG_BLK_DEV_INITRD=y |
| 67 | CONFIG_INITRAMFS_SOURCE="" | 79 | CONFIG_INITRAMFS_SOURCE="" |
| 68 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 80 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
| @@ -91,17 +103,17 @@ CONFIG_SLAB=y | |||
| 91 | # CONFIG_SLUB is not set | 103 | # CONFIG_SLUB is not set |
| 92 | # CONFIG_SLOB is not set | 104 | # CONFIG_SLOB is not set |
| 93 | # CONFIG_PROFILING is not set | 105 | # CONFIG_PROFILING is not set |
| 94 | # CONFIG_MARKERS is not set | ||
| 95 | CONFIG_HAVE_OPROFILE=y | 106 | CONFIG_HAVE_OPROFILE=y |
| 96 | CONFIG_KPROBES=y | 107 | CONFIG_KPROBES=y |
| 108 | CONFIG_HAVE_SYSCALL_WRAPPERS=y | ||
| 97 | CONFIG_KRETPROBES=y | 109 | CONFIG_KRETPROBES=y |
| 98 | CONFIG_HAVE_KPROBES=y | 110 | CONFIG_HAVE_KPROBES=y |
| 99 | CONFIG_HAVE_KRETPROBES=y | 111 | CONFIG_HAVE_KRETPROBES=y |
| 100 | CONFIG_HAVE_ARCH_TRACEHOOK=y | 112 | CONFIG_HAVE_ARCH_TRACEHOOK=y |
| 113 | CONFIG_USE_GENERIC_SMP_HELPERS=y | ||
| 101 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 114 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
| 102 | CONFIG_SLABINFO=y | 115 | CONFIG_SLABINFO=y |
| 103 | CONFIG_RT_MUTEXES=y | 116 | CONFIG_RT_MUTEXES=y |
| 104 | # CONFIG_TINY_SHMEM is not set | ||
| 105 | CONFIG_BASE_SMALL=0 | 117 | CONFIG_BASE_SMALL=0 |
| 106 | CONFIG_MODULES=y | 118 | CONFIG_MODULES=y |
| 107 | # CONFIG_MODULE_FORCE_LOAD is not set | 119 | # CONFIG_MODULE_FORCE_LOAD is not set |
| @@ -109,7 +121,7 @@ CONFIG_MODULE_UNLOAD=y | |||
| 109 | # CONFIG_MODULE_FORCE_UNLOAD is not set | 121 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
| 110 | CONFIG_MODVERSIONS=y | 122 | CONFIG_MODVERSIONS=y |
| 111 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 123 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
| 112 | CONFIG_KMOD=y | 124 | CONFIG_INIT_ALL_POSSIBLE=y |
| 113 | CONFIG_STOP_MACHINE=y | 125 | CONFIG_STOP_MACHINE=y |
| 114 | CONFIG_BLOCK=y | 126 | CONFIG_BLOCK=y |
| 115 | # CONFIG_BLK_DEV_IO_TRACE is not set | 127 | # CONFIG_BLK_DEV_IO_TRACE is not set |
| @@ -130,7 +142,6 @@ CONFIG_DEFAULT_DEADLINE=y | |||
| 130 | # CONFIG_DEFAULT_NOOP is not set | 142 | # CONFIG_DEFAULT_NOOP is not set |
| 131 | CONFIG_DEFAULT_IOSCHED="deadline" | 143 | CONFIG_DEFAULT_IOSCHED="deadline" |
| 132 | CONFIG_PREEMPT_NOTIFIERS=y | 144 | CONFIG_PREEMPT_NOTIFIERS=y |
| 133 | CONFIG_CLASSIC_RCU=y | ||
| 134 | # CONFIG_FREEZER is not set | 145 | # CONFIG_FREEZER is not set |
| 135 | 146 | ||
| 136 | # | 147 | # |
| @@ -161,6 +172,7 @@ CONFIG_S390_EXEC_PROTECT=y | |||
| 161 | CONFIG_MARCH_Z900=y | 172 | CONFIG_MARCH_Z900=y |
| 162 | # CONFIG_MARCH_Z990 is not set | 173 | # CONFIG_MARCH_Z990 is not set |
| 163 | # CONFIG_MARCH_Z9_109 is not set | 174 | # CONFIG_MARCH_Z9_109 is not set |
| 175 | # CONFIG_MARCH_Z10 is not set | ||
| 164 | CONFIG_PACK_STACK=y | 176 | CONFIG_PACK_STACK=y |
| 165 | # CONFIG_SMALL_STACK is not set | 177 | # CONFIG_SMALL_STACK is not set |
| 166 | CONFIG_CHECK_STACK=y | 178 | CONFIG_CHECK_STACK=y |
| @@ -174,7 +186,6 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y | |||
| 174 | # CONFIG_PREEMPT_NONE is not set | 186 | # CONFIG_PREEMPT_NONE is not set |
| 175 | # CONFIG_PREEMPT_VOLUNTARY is not set | 187 | # CONFIG_PREEMPT_VOLUNTARY is not set |
| 176 | CONFIG_PREEMPT=y | 188 | CONFIG_PREEMPT=y |
| 177 | # CONFIG_PREEMPT_RCU is not set | ||
| 178 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | 189 | CONFIG_ARCH_SPARSEMEM_ENABLE=y |
| 179 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y | 190 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y |
| 180 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 191 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
| @@ -195,7 +206,6 @@ CONFIG_MEMORY_HOTREMOVE=y | |||
| 195 | CONFIG_PAGEFLAGS_EXTENDED=y | 206 | CONFIG_PAGEFLAGS_EXTENDED=y |
| 196 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 207 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 197 | CONFIG_MIGRATION=y | 208 | CONFIG_MIGRATION=y |
| 198 | CONFIG_RESOURCES_64BIT=y | ||
| 199 | CONFIG_PHYS_ADDR_T_64BIT=y | 209 | CONFIG_PHYS_ADDR_T_64BIT=y |
| 200 | CONFIG_ZONE_DMA_FLAG=1 | 210 | CONFIG_ZONE_DMA_FLAG=1 |
| 201 | CONFIG_BOUNCE=y | 211 | CONFIG_BOUNCE=y |
| @@ -207,7 +217,6 @@ CONFIG_UNEVICTABLE_LRU=y | |||
| 207 | # | 217 | # |
| 208 | CONFIG_MACHCHK_WARNING=y | 218 | CONFIG_MACHCHK_WARNING=y |
| 209 | CONFIG_QDIO=y | 219 | CONFIG_QDIO=y |
| 210 | # CONFIG_QDIO_DEBUG is not set | ||
| 211 | CONFIG_CHSC_SCH=m | 220 | CONFIG_CHSC_SCH=m |
| 212 | 221 | ||
| 213 | # | 222 | # |
| @@ -227,15 +236,13 @@ CONFIG_PFAULT=y | |||
| 227 | # CONFIG_SHARED_KERNEL is not set | 236 | # CONFIG_SHARED_KERNEL is not set |
| 228 | # CONFIG_CMM is not set | 237 | # CONFIG_CMM is not set |
| 229 | # CONFIG_PAGE_STATES is not set | 238 | # CONFIG_PAGE_STATES is not set |
| 230 | CONFIG_VIRT_TIMER=y | ||
| 231 | CONFIG_VIRT_CPU_ACCOUNTING=y | ||
| 232 | # CONFIG_APPLDATA_BASE is not set | 239 | # CONFIG_APPLDATA_BASE is not set |
| 233 | CONFIG_HZ_100=y | 240 | CONFIG_HZ_100=y |
| 234 | # CONFIG_HZ_250 is not set | 241 | # CONFIG_HZ_250 is not set |
| 235 | # CONFIG_HZ_300 is not set | 242 | # CONFIG_HZ_300 is not set |
| 236 | # CONFIG_HZ_1000 is not set | 243 | # CONFIG_HZ_1000 is not set |
| 237 | CONFIG_HZ=100 | 244 | CONFIG_HZ=100 |
| 238 | # CONFIG_SCHED_HRTICK is not set | 245 | CONFIG_SCHED_HRTICK=y |
| 239 | CONFIG_S390_HYPFS_FS=y | 246 | CONFIG_S390_HYPFS_FS=y |
| 240 | CONFIG_KEXEC=y | 247 | CONFIG_KEXEC=y |
| 241 | # CONFIG_ZFCPDUMP is not set | 248 | # CONFIG_ZFCPDUMP is not set |
| @@ -245,6 +252,7 @@ CONFIG_NET=y | |||
| 245 | # | 252 | # |
| 246 | # Networking options | 253 | # Networking options |
| 247 | # | 254 | # |
| 255 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
| 248 | CONFIG_PACKET=y | 256 | CONFIG_PACKET=y |
| 249 | # CONFIG_PACKET_MMAP is not set | 257 | # CONFIG_PACKET_MMAP is not set |
| 250 | CONFIG_UNIX=y | 258 | CONFIG_UNIX=y |
| @@ -383,6 +391,7 @@ CONFIG_NET_SCH_TBF=m | |||
| 383 | CONFIG_NET_SCH_GRED=m | 391 | CONFIG_NET_SCH_GRED=m |
| 384 | CONFIG_NET_SCH_DSMARK=m | 392 | CONFIG_NET_SCH_DSMARK=m |
| 385 | # CONFIG_NET_SCH_NETEM is not set | 393 | # CONFIG_NET_SCH_NETEM is not set |
| 394 | # CONFIG_NET_SCH_DRR is not set | ||
| 386 | # CONFIG_NET_SCH_INGRESS is not set | 395 | # CONFIG_NET_SCH_INGRESS is not set |
| 387 | 396 | ||
| 388 | # | 397 | # |
| @@ -400,6 +409,7 @@ CONFIG_CLS_U32_MARK=y | |||
| 400 | CONFIG_NET_CLS_RSVP=m | 409 | CONFIG_NET_CLS_RSVP=m |
| 401 | CONFIG_NET_CLS_RSVP6=m | 410 | CONFIG_NET_CLS_RSVP6=m |
| 402 | CONFIG_NET_CLS_FLOW=m | 411 | CONFIG_NET_CLS_FLOW=m |
| 412 | # CONFIG_NET_CLS_CGROUP is not set | ||
| 403 | # CONFIG_NET_EMATCH is not set | 413 | # CONFIG_NET_EMATCH is not set |
| 404 | CONFIG_NET_CLS_ACT=y | 414 | CONFIG_NET_CLS_ACT=y |
| 405 | CONFIG_NET_ACT_POLICE=y | 415 | CONFIG_NET_ACT_POLICE=y |
| @@ -411,6 +421,7 @@ CONFIG_NET_ACT_NAT=m | |||
| 411 | # CONFIG_NET_ACT_SKBEDIT is not set | 421 | # CONFIG_NET_ACT_SKBEDIT is not set |
| 412 | # CONFIG_NET_CLS_IND is not set | 422 | # CONFIG_NET_CLS_IND is not set |
| 413 | CONFIG_NET_SCH_FIFO=y | 423 | CONFIG_NET_SCH_FIFO=y |
| 424 | # CONFIG_DCB is not set | ||
| 414 | 425 | ||
| 415 | # | 426 | # |
| 416 | # Network testing | 427 | # Network testing |
| @@ -428,6 +439,7 @@ CONFIG_CAN_VCAN=m | |||
| 428 | # CONFIG_CAN_DEBUG_DEVICES is not set | 439 | # CONFIG_CAN_DEBUG_DEVICES is not set |
| 429 | # CONFIG_AF_RXRPC is not set | 440 | # CONFIG_AF_RXRPC is not set |
| 430 | # CONFIG_PHONET is not set | 441 | # CONFIG_PHONET is not set |
| 442 | # CONFIG_WIMAX is not set | ||
| 431 | # CONFIG_RFKILL is not set | 443 | # CONFIG_RFKILL is not set |
| 432 | # CONFIG_NET_9P is not set | 444 | # CONFIG_NET_9P is not set |
| 433 | # CONFIG_PCMCIA is not set | 445 | # CONFIG_PCMCIA is not set |
| @@ -475,11 +487,15 @@ CONFIG_DASD_DIAG=y | |||
| 475 | CONFIG_DASD_EER=y | 487 | CONFIG_DASD_EER=y |
| 476 | CONFIG_VIRTIO_BLK=m | 488 | CONFIG_VIRTIO_BLK=m |
| 477 | CONFIG_MISC_DEVICES=y | 489 | CONFIG_MISC_DEVICES=y |
| 478 | # CONFIG_EEPROM_93CX6 is not set | ||
| 479 | # CONFIG_ENCLOSURE_SERVICES is not set | 490 | # CONFIG_ENCLOSURE_SERVICES is not set |
| 480 | # CONFIG_C2PORT is not set | 491 | # CONFIG_C2PORT is not set |
| 481 | 492 | ||
| 482 | # | 493 | # |
| 494 | # EEPROM support | ||
| 495 | # | ||
| 496 | # CONFIG_EEPROM_93CX6 is not set | ||
| 497 | |||
| 498 | # | ||
| 483 | # SCSI device support | 499 | # SCSI device support |
| 484 | # | 500 | # |
| 485 | # CONFIG_RAID_ATTRS is not set | 501 | # CONFIG_RAID_ATTRS is not set |
| @@ -520,6 +536,7 @@ CONFIG_SCSI_FC_ATTRS=y | |||
| 520 | # CONFIG_SCSI_SRP_ATTRS is not set | 536 | # CONFIG_SCSI_SRP_ATTRS is not set |
| 521 | CONFIG_SCSI_LOWLEVEL=y | 537 | CONFIG_SCSI_LOWLEVEL=y |
| 522 | # CONFIG_ISCSI_TCP is not set | 538 | # CONFIG_ISCSI_TCP is not set |
| 539 | # CONFIG_LIBFC is not set | ||
| 523 | # CONFIG_SCSI_DEBUG is not set | 540 | # CONFIG_SCSI_DEBUG is not set |
| 524 | CONFIG_ZFCP=y | 541 | CONFIG_ZFCP=y |
| 525 | CONFIG_SCSI_DH=m | 542 | CONFIG_SCSI_DH=m |
| @@ -566,6 +583,10 @@ CONFIG_NET_ETHERNET=y | |||
| 566 | CONFIG_NETDEV_1000=y | 583 | CONFIG_NETDEV_1000=y |
| 567 | CONFIG_NETDEV_10000=y | 584 | CONFIG_NETDEV_10000=y |
| 568 | # CONFIG_TR is not set | 585 | # CONFIG_TR is not set |
| 586 | |||
| 587 | # | ||
| 588 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
| 589 | # | ||
| 569 | # CONFIG_WAN is not set | 590 | # CONFIG_WAN is not set |
| 570 | 591 | ||
| 571 | # | 592 | # |
| @@ -593,9 +614,11 @@ CONFIG_VIRTIO_NET=m | |||
| 593 | # | 614 | # |
| 594 | CONFIG_DEVKMEM=y | 615 | CONFIG_DEVKMEM=y |
| 595 | CONFIG_UNIX98_PTYS=y | 616 | CONFIG_UNIX98_PTYS=y |
| 617 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
| 596 | CONFIG_LEGACY_PTYS=y | 618 | CONFIG_LEGACY_PTYS=y |
| 597 | CONFIG_LEGACY_PTY_COUNT=256 | 619 | CONFIG_LEGACY_PTY_COUNT=256 |
| 598 | CONFIG_HVC_DRIVER=y | 620 | CONFIG_HVC_DRIVER=y |
| 621 | CONFIG_HVC_IUCV=y | ||
| 599 | CONFIG_VIRTIO_CONSOLE=y | 622 | CONFIG_VIRTIO_CONSOLE=y |
| 600 | CONFIG_HW_RANDOM=m | 623 | CONFIG_HW_RANDOM=m |
| 601 | CONFIG_HW_RANDOM_VIRTIO=m | 624 | CONFIG_HW_RANDOM_VIRTIO=m |
| @@ -645,7 +668,6 @@ CONFIG_S390_VMUR=m | |||
| 645 | # CONFIG_NEW_LEDS is not set | 668 | # CONFIG_NEW_LEDS is not set |
| 646 | CONFIG_ACCESSIBILITY=y | 669 | CONFIG_ACCESSIBILITY=y |
| 647 | # CONFIG_STAGING is not set | 670 | # CONFIG_STAGING is not set |
| 648 | CONFIG_STAGING_EXCLUDE_BUILD=y | ||
| 649 | 671 | ||
| 650 | # | 672 | # |
| 651 | # File systems | 673 | # File systems |
| @@ -668,6 +690,7 @@ CONFIG_FILE_LOCKING=y | |||
| 668 | # CONFIG_XFS_FS is not set | 690 | # CONFIG_XFS_FS is not set |
| 669 | # CONFIG_GFS2_FS is not set | 691 | # CONFIG_GFS2_FS is not set |
| 670 | # CONFIG_OCFS2_FS is not set | 692 | # CONFIG_OCFS2_FS is not set |
| 693 | # CONFIG_BTRFS_FS is not set | ||
| 671 | CONFIG_DNOTIFY=y | 694 | CONFIG_DNOTIFY=y |
| 672 | CONFIG_INOTIFY=y | 695 | CONFIG_INOTIFY=y |
| 673 | CONFIG_INOTIFY_USER=y | 696 | CONFIG_INOTIFY_USER=y |
| @@ -703,10 +726,7 @@ CONFIG_TMPFS_POSIX_ACL=y | |||
| 703 | # CONFIG_HUGETLBFS is not set | 726 | # CONFIG_HUGETLBFS is not set |
| 704 | # CONFIG_HUGETLB_PAGE is not set | 727 | # CONFIG_HUGETLB_PAGE is not set |
| 705 | CONFIG_CONFIGFS_FS=m | 728 | CONFIG_CONFIGFS_FS=m |
| 706 | 729 | CONFIG_MISC_FILESYSTEMS=y | |
| 707 | # | ||
| 708 | # Miscellaneous filesystems | ||
| 709 | # | ||
| 710 | # CONFIG_ADFS_FS is not set | 730 | # CONFIG_ADFS_FS is not set |
| 711 | # CONFIG_AFFS_FS is not set | 731 | # CONFIG_AFFS_FS is not set |
| 712 | # CONFIG_HFS_FS is not set | 732 | # CONFIG_HFS_FS is not set |
| @@ -715,6 +735,7 @@ CONFIG_CONFIGFS_FS=m | |||
| 715 | # CONFIG_BFS_FS is not set | 735 | # CONFIG_BFS_FS is not set |
| 716 | # CONFIG_EFS_FS is not set | 736 | # CONFIG_EFS_FS is not set |
| 717 | # CONFIG_CRAMFS is not set | 737 | # CONFIG_CRAMFS is not set |
| 738 | # CONFIG_SQUASHFS is not set | ||
| 718 | # CONFIG_VXFS_FS is not set | 739 | # CONFIG_VXFS_FS is not set |
| 719 | # CONFIG_MINIX_FS is not set | 740 | # CONFIG_MINIX_FS is not set |
| 720 | # CONFIG_OMFS_FS is not set | 741 | # CONFIG_OMFS_FS is not set |
| @@ -808,6 +829,7 @@ CONFIG_DEBUG_BUGVERBOSE=y | |||
| 808 | CONFIG_DEBUG_MEMORY_INIT=y | 829 | CONFIG_DEBUG_MEMORY_INIT=y |
| 809 | # CONFIG_DEBUG_LIST is not set | 830 | # CONFIG_DEBUG_LIST is not set |
| 810 | # CONFIG_DEBUG_SG is not set | 831 | # CONFIG_DEBUG_SG is not set |
| 832 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
| 811 | # CONFIG_FRAME_POINTER is not set | 833 | # CONFIG_FRAME_POINTER is not set |
| 812 | # CONFIG_RCU_TORTURE_TEST is not set | 834 | # CONFIG_RCU_TORTURE_TEST is not set |
| 813 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 835 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
| @@ -818,15 +840,19 @@ CONFIG_DEBUG_MEMORY_INIT=y | |||
| 818 | # CONFIG_FAULT_INJECTION is not set | 840 | # CONFIG_FAULT_INJECTION is not set |
| 819 | # CONFIG_LATENCYTOP is not set | 841 | # CONFIG_LATENCYTOP is not set |
| 820 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 842 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
| 843 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
| 821 | 844 | ||
| 822 | # | 845 | # |
| 823 | # Tracers | 846 | # Tracers |
| 824 | # | 847 | # |
| 848 | # CONFIG_FUNCTION_TRACER is not set | ||
| 825 | # CONFIG_IRQSOFF_TRACER is not set | 849 | # CONFIG_IRQSOFF_TRACER is not set |
| 826 | # CONFIG_PREEMPT_TRACER is not set | 850 | # CONFIG_PREEMPT_TRACER is not set |
| 827 | # CONFIG_SCHED_TRACER is not set | 851 | # CONFIG_SCHED_TRACER is not set |
| 828 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | 852 | # CONFIG_CONTEXT_SWITCH_TRACER is not set |
| 829 | # CONFIG_BOOT_TRACER is not set | 853 | # CONFIG_BOOT_TRACER is not set |
| 854 | # CONFIG_TRACE_BRANCH_PROFILING is not set | ||
| 855 | # CONFIG_STACK_TRACER is not set | ||
| 830 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | 856 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set |
| 831 | CONFIG_SAMPLES=y | 857 | CONFIG_SAMPLES=y |
| 832 | # CONFIG_SAMPLE_KOBJECT is not set | 858 | # CONFIG_SAMPLE_KOBJECT is not set |
| @@ -847,11 +873,17 @@ CONFIG_CRYPTO=y | |||
| 847 | # | 873 | # |
| 848 | CONFIG_CRYPTO_FIPS=y | 874 | CONFIG_CRYPTO_FIPS=y |
| 849 | CONFIG_CRYPTO_ALGAPI=y | 875 | CONFIG_CRYPTO_ALGAPI=y |
| 850 | CONFIG_CRYPTO_AEAD=y | 876 | CONFIG_CRYPTO_ALGAPI2=y |
| 877 | CONFIG_CRYPTO_AEAD=m | ||
| 878 | CONFIG_CRYPTO_AEAD2=y | ||
| 851 | CONFIG_CRYPTO_BLKCIPHER=y | 879 | CONFIG_CRYPTO_BLKCIPHER=y |
| 852 | CONFIG_CRYPTO_HASH=y | 880 | CONFIG_CRYPTO_BLKCIPHER2=y |
| 853 | CONFIG_CRYPTO_RNG=y | 881 | CONFIG_CRYPTO_HASH=m |
| 882 | CONFIG_CRYPTO_HASH2=y | ||
| 883 | CONFIG_CRYPTO_RNG=m | ||
| 884 | CONFIG_CRYPTO_RNG2=y | ||
| 854 | CONFIG_CRYPTO_MANAGER=y | 885 | CONFIG_CRYPTO_MANAGER=y |
| 886 | CONFIG_CRYPTO_MANAGER2=y | ||
| 855 | CONFIG_CRYPTO_GF128MUL=m | 887 | CONFIG_CRYPTO_GF128MUL=m |
| 856 | # CONFIG_CRYPTO_NULL is not set | 888 | # CONFIG_CRYPTO_NULL is not set |
| 857 | # CONFIG_CRYPTO_CRYPTD is not set | 889 | # CONFIG_CRYPTO_CRYPTD is not set |
| @@ -885,7 +917,7 @@ CONFIG_CRYPTO_HMAC=m | |||
| 885 | # | 917 | # |
| 886 | # Digest | 918 | # Digest |
| 887 | # | 919 | # |
| 888 | # CONFIG_CRYPTO_CRC32C is not set | 920 | CONFIG_CRYPTO_CRC32C=m |
| 889 | # CONFIG_CRYPTO_MD4 is not set | 921 | # CONFIG_CRYPTO_MD4 is not set |
| 890 | CONFIG_CRYPTO_MD5=m | 922 | CONFIG_CRYPTO_MD5=m |
| 891 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | 923 | # CONFIG_CRYPTO_MICHAEL_MIC is not set |
| @@ -942,6 +974,7 @@ CONFIG_S390_PRNG=m | |||
| 942 | # Library routines | 974 | # Library routines |
| 943 | # | 975 | # |
| 944 | CONFIG_BITREVERSE=m | 976 | CONFIG_BITREVERSE=m |
| 977 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
| 945 | # CONFIG_CRC_CCITT is not set | 978 | # CONFIG_CRC_CCITT is not set |
| 946 | # CONFIG_CRC16 is not set | 979 | # CONFIG_CRC16 is not set |
| 947 | CONFIG_CRC_T10DIF=y | 980 | CONFIG_CRC_T10DIF=y |
diff --git a/arch/s390/include/asm/cputime.h b/arch/s390/include/asm/cputime.h index 521726430afa..95b0f7db3c69 100644 --- a/arch/s390/include/asm/cputime.h +++ b/arch/s390/include/asm/cputime.h | |||
| @@ -145,7 +145,7 @@ cputime_to_timeval(const cputime_t cputime, struct timeval *value) | |||
| 145 | value->tv_usec = rp.subreg.even / 4096; | 145 | value->tv_usec = rp.subreg.even / 4096; |
| 146 | value->tv_sec = rp.subreg.odd; | 146 | value->tv_sec = rp.subreg.odd; |
| 147 | #else | 147 | #else |
| 148 | value->tv_usec = cputime % 4096000000ULL; | 148 | value->tv_usec = (cputime % 4096000000ULL) / 4096; |
| 149 | value->tv_sec = cputime / 4096000000ULL; | 149 | value->tv_sec = cputime / 4096000000ULL; |
| 150 | #endif | 150 | #endif |
| 151 | } | 151 | } |
diff --git a/arch/s390/include/asm/lowcore.h b/arch/s390/include/asm/lowcore.h index ffdef5fe8587..f3720defdd16 100644 --- a/arch/s390/include/asm/lowcore.h +++ b/arch/s390/include/asm/lowcore.h | |||
| @@ -384,8 +384,8 @@ struct _lowcore | |||
| 384 | __u32 panic_magic; /* 0xe00 */ | 384 | __u32 panic_magic; /* 0xe00 */ |
| 385 | 385 | ||
| 386 | /* Per cpu primary space access list */ | 386 | /* Per cpu primary space access list */ |
| 387 | __u8 pad_0xe04[0xe3c-0xe04]; /* 0xe04 */ | 387 | __u8 pad_0xe04[0xe38-0xe04]; /* 0xe04 */ |
| 388 | __u32 vdso_per_cpu_data; /* 0xe3c */ | 388 | __u64 vdso_per_cpu_data; /* 0xe38 */ |
| 389 | __u32 paste[16]; /* 0xe40 */ | 389 | __u32 paste[16]; /* 0xe40 */ |
| 390 | 390 | ||
| 391 | __u8 pad13[0x11b8-0xe80]; /* 0xe80 */ | 391 | __u8 pad13[0x11b8-0xe80]; /* 0xe80 */ |
diff --git a/arch/s390/include/asm/setup.h b/arch/s390/include/asm/setup.h index 2bd9faeb3919..e8bd6ac22c99 100644 --- a/arch/s390/include/asm/setup.h +++ b/arch/s390/include/asm/setup.h | |||
| @@ -43,6 +43,8 @@ struct mem_chunk { | |||
| 43 | 43 | ||
| 44 | extern struct mem_chunk memory_chunk[]; | 44 | extern struct mem_chunk memory_chunk[]; |
| 45 | extern unsigned long real_memory_size; | 45 | extern unsigned long real_memory_size; |
| 46 | extern int memory_end_set; | ||
| 47 | extern unsigned long memory_end; | ||
| 46 | 48 | ||
| 47 | void detect_memory_layout(struct mem_chunk chunk[]); | 49 | void detect_memory_layout(struct mem_chunk chunk[]); |
| 48 | 50 | ||
diff --git a/arch/s390/kernel/irq.c b/arch/s390/kernel/irq.c index e7c5bfb7c755..026a37a94fc9 100644 --- a/arch/s390/kernel/irq.c +++ b/arch/s390/kernel/irq.c | |||
| @@ -95,6 +95,7 @@ asmlinkage void do_softirq(void) | |||
| 95 | local_irq_restore(flags); | 95 | local_irq_restore(flags); |
| 96 | } | 96 | } |
| 97 | 97 | ||
| 98 | #ifdef CONFIG_PROC_FS | ||
| 98 | void init_irq_proc(void) | 99 | void init_irq_proc(void) |
| 99 | { | 100 | { |
| 100 | struct proc_dir_entry *root_irq_dir; | 101 | struct proc_dir_entry *root_irq_dir; |
| @@ -102,3 +103,4 @@ void init_irq_proc(void) | |||
| 102 | root_irq_dir = proc_mkdir("irq", NULL); | 103 | root_irq_dir = proc_mkdir("irq", NULL); |
| 103 | create_prof_cpu_mask(root_irq_dir); | 104 | create_prof_cpu_mask(root_irq_dir); |
| 104 | } | 105 | } |
| 106 | #endif | ||
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index d825f4950e4e..c5cfb6185eac 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c | |||
| @@ -82,7 +82,9 @@ char elf_platform[ELF_PLATFORM_SIZE]; | |||
| 82 | 82 | ||
| 83 | struct mem_chunk __initdata memory_chunk[MEMORY_CHUNKS]; | 83 | struct mem_chunk __initdata memory_chunk[MEMORY_CHUNKS]; |
| 84 | volatile int __cpu_logical_map[NR_CPUS]; /* logical cpu to cpu address */ | 84 | volatile int __cpu_logical_map[NR_CPUS]; /* logical cpu to cpu address */ |
| 85 | static unsigned long __initdata memory_end; | 85 | |
| 86 | int __initdata memory_end_set; | ||
| 87 | unsigned long __initdata memory_end; | ||
| 86 | 88 | ||
| 87 | /* | 89 | /* |
| 88 | * This is set up by the setup-routine at boot-time | 90 | * This is set up by the setup-routine at boot-time |
| @@ -281,6 +283,7 @@ void (*pm_power_off)(void) = machine_power_off; | |||
| 281 | static int __init early_parse_mem(char *p) | 283 | static int __init early_parse_mem(char *p) |
| 282 | { | 284 | { |
| 283 | memory_end = memparse(p, &p); | 285 | memory_end = memparse(p, &p); |
| 286 | memory_end_set = 1; | ||
| 284 | return 0; | 287 | return 0; |
| 285 | } | 288 | } |
| 286 | early_param("mem", early_parse_mem); | 289 | early_param("mem", early_parse_mem); |
| @@ -508,8 +511,10 @@ static void __init setup_memory_end(void) | |||
| 508 | int i; | 511 | int i; |
| 509 | 512 | ||
| 510 | #if defined(CONFIG_ZFCPDUMP) || defined(CONFIG_ZFCPDUMP_MODULE) | 513 | #if defined(CONFIG_ZFCPDUMP) || defined(CONFIG_ZFCPDUMP_MODULE) |
| 511 | if (ipl_info.type == IPL_TYPE_FCP_DUMP) | 514 | if (ipl_info.type == IPL_TYPE_FCP_DUMP) { |
| 512 | memory_end = ZFCPDUMP_HSA_SIZE; | 515 | memory_end = ZFCPDUMP_HSA_SIZE; |
| 516 | memory_end_set = 1; | ||
| 517 | } | ||
| 513 | #endif | 518 | #endif |
| 514 | memory_size = 0; | 519 | memory_size = 0; |
| 515 | memory_end &= PAGE_MASK; | 520 | memory_end &= PAGE_MASK; |
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index be8497186b96..0d33893e1e89 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c | |||
| @@ -212,6 +212,10 @@ static void kvm_free_vcpus(struct kvm *kvm) | |||
| 212 | } | 212 | } |
| 213 | } | 213 | } |
| 214 | 214 | ||
| 215 | void kvm_arch_sync_events(struct kvm *kvm) | ||
| 216 | { | ||
| 217 | } | ||
| 218 | |||
| 215 | void kvm_arch_destroy_vm(struct kvm *kvm) | 219 | void kvm_arch_destroy_vm(struct kvm *kvm) |
| 216 | { | 220 | { |
| 217 | kvm_free_vcpus(kvm); | 221 | kvm_free_vcpus(kvm); |
diff --git a/arch/sh/boards/board-ap325rxa.c b/arch/sh/boards/board-ap325rxa.c index 7c35787d29b4..15b6d450fbf0 100644 --- a/arch/sh/boards/board-ap325rxa.c +++ b/arch/sh/boards/board-ap325rxa.c | |||
| @@ -22,7 +22,7 @@ | |||
| 22 | #include <linux/gpio.h> | 22 | #include <linux/gpio.h> |
| 23 | #include <linux/spi/spi.h> | 23 | #include <linux/spi/spi.h> |
| 24 | #include <linux/spi/spi_gpio.h> | 24 | #include <linux/spi/spi_gpio.h> |
| 25 | #include <media/ov772x.h> | 25 | #include <media/soc_camera.h> |
| 26 | #include <media/soc_camera_platform.h> | 26 | #include <media/soc_camera_platform.h> |
| 27 | #include <media/sh_mobile_ceu.h> | 27 | #include <media/sh_mobile_ceu.h> |
| 28 | #include <video/sh_mobile_lcdc.h> | 28 | #include <video/sh_mobile_lcdc.h> |
| @@ -224,7 +224,6 @@ static void camera_power(int val) | |||
| 224 | } | 224 | } |
| 225 | 225 | ||
| 226 | #ifdef CONFIG_I2C | 226 | #ifdef CONFIG_I2C |
| 227 | /* support for the old ncm03j camera */ | ||
| 228 | static unsigned char camera_ncm03j_magic[] = | 227 | static unsigned char camera_ncm03j_magic[] = |
| 229 | { | 228 | { |
| 230 | 0x87, 0x00, 0x88, 0x08, 0x89, 0x01, 0x8A, 0xE8, | 229 | 0x87, 0x00, 0x88, 0x08, 0x89, 0x01, 0x8A, 0xE8, |
| @@ -245,23 +244,6 @@ static unsigned char camera_ncm03j_magic[] = | |||
| 245 | 0x63, 0xD4, 0x64, 0xEA, 0xD6, 0x0F, | 244 | 0x63, 0xD4, 0x64, 0xEA, 0xD6, 0x0F, |
| 246 | }; | 245 | }; |
| 247 | 246 | ||
| 248 | static int camera_probe(void) | ||
| 249 | { | ||
| 250 | struct i2c_adapter *a = i2c_get_adapter(0); | ||
| 251 | struct i2c_msg msg; | ||
| 252 | int ret; | ||
| 253 | |||
| 254 | camera_power(1); | ||
| 255 | msg.addr = 0x6e; | ||
| 256 | msg.buf = camera_ncm03j_magic; | ||
| 257 | msg.len = 2; | ||
| 258 | msg.flags = 0; | ||
| 259 | ret = i2c_transfer(a, &msg, 1); | ||
| 260 | camera_power(0); | ||
| 261 | |||
| 262 | return ret; | ||
| 263 | } | ||
| 264 | |||
| 265 | static int camera_set_capture(struct soc_camera_platform_info *info, | 247 | static int camera_set_capture(struct soc_camera_platform_info *info, |
| 266 | int enable) | 248 | int enable) |
| 267 | { | 249 | { |
| @@ -313,35 +295,8 @@ static struct platform_device camera_device = { | |||
| 313 | .platform_data = &camera_info, | 295 | .platform_data = &camera_info, |
| 314 | }, | 296 | }, |
| 315 | }; | 297 | }; |
| 316 | |||
| 317 | static int __init camera_setup(void) | ||
| 318 | { | ||
| 319 | if (camera_probe() > 0) | ||
| 320 | platform_device_register(&camera_device); | ||
| 321 | |||
| 322 | return 0; | ||
| 323 | } | ||
| 324 | late_initcall(camera_setup); | ||
| 325 | |||
| 326 | #endif /* CONFIG_I2C */ | 298 | #endif /* CONFIG_I2C */ |
| 327 | 299 | ||
| 328 | static int ov7725_power(struct device *dev, int mode) | ||
| 329 | { | ||
| 330 | camera_power(0); | ||
| 331 | if (mode) | ||
| 332 | camera_power(1); | ||
| 333 | |||
| 334 | return 0; | ||
| 335 | } | ||
| 336 | |||
| 337 | static struct ov772x_camera_info ov7725_info = { | ||
| 338 | .buswidth = SOCAM_DATAWIDTH_8, | ||
| 339 | .flags = OV772X_FLAG_VFLIP | OV772X_FLAG_HFLIP, | ||
| 340 | .link = { | ||
| 341 | .power = ov7725_power, | ||
| 342 | }, | ||
| 343 | }; | ||
| 344 | |||
| 345 | static struct sh_mobile_ceu_info sh_mobile_ceu_info = { | 300 | static struct sh_mobile_ceu_info sh_mobile_ceu_info = { |
| 346 | .flags = SOCAM_PCLK_SAMPLE_RISING | SOCAM_HSYNC_ACTIVE_HIGH | | 301 | .flags = SOCAM_PCLK_SAMPLE_RISING | SOCAM_HSYNC_ACTIVE_HIGH | |
| 347 | SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_MASTER | SOCAM_DATAWIDTH_8, | 302 | SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_MASTER | SOCAM_DATAWIDTH_8, |
| @@ -392,6 +347,9 @@ static struct platform_device *ap325rxa_devices[] __initdata = { | |||
| 392 | &ap325rxa_nor_flash_device, | 347 | &ap325rxa_nor_flash_device, |
| 393 | &lcdc_device, | 348 | &lcdc_device, |
| 394 | &ceu_device, | 349 | &ceu_device, |
| 350 | #ifdef CONFIG_I2C | ||
| 351 | &camera_device, | ||
| 352 | #endif | ||
| 395 | &nand_flash_device, | 353 | &nand_flash_device, |
| 396 | &sdcard_cn3_device, | 354 | &sdcard_cn3_device, |
| 397 | }; | 355 | }; |
| @@ -400,10 +358,6 @@ static struct i2c_board_info __initdata ap325rxa_i2c_devices[] = { | |||
| 400 | { | 358 | { |
| 401 | I2C_BOARD_INFO("pcf8563", 0x51), | 359 | I2C_BOARD_INFO("pcf8563", 0x51), |
| 402 | }, | 360 | }, |
| 403 | { | ||
| 404 | I2C_BOARD_INFO("ov772x", 0x21), | ||
| 405 | .platform_data = &ov7725_info, | ||
| 406 | }, | ||
| 407 | }; | 361 | }; |
| 408 | 362 | ||
| 409 | static struct spi_board_info ap325rxa_spi_devices[] = { | 363 | static struct spi_board_info ap325rxa_spi_devices[] = { |
diff --git a/arch/sh/kernel/cpu/sh2a/clock-sh7201.c b/arch/sh/kernel/cpu/sh2a/clock-sh7201.c index 020a96fe961a..4a5e59732334 100644 --- a/arch/sh/kernel/cpu/sh2a/clock-sh7201.c +++ b/arch/sh/kernel/cpu/sh2a/clock-sh7201.c | |||
| @@ -18,8 +18,8 @@ | |||
| 18 | #include <asm/freq.h> | 18 | #include <asm/freq.h> |
| 19 | #include <asm/io.h> | 19 | #include <asm/io.h> |
| 20 | 20 | ||
| 21 | const static int pll1rate[]={1,2,3,4,6,8}; | 21 | static const int pll1rate[]={1,2,3,4,6,8}; |
| 22 | const static int pfc_divisors[]={1,2,3,4,6,8,12}; | 22 | static const int pfc_divisors[]={1,2,3,4,6,8,12}; |
| 23 | #define ifc_divisors pfc_divisors | 23 | #define ifc_divisors pfc_divisors |
| 24 | 24 | ||
| 25 | #if (CONFIG_SH_CLK_MD == 0) | 25 | #if (CONFIG_SH_CLK_MD == 0) |
diff --git a/arch/sparc/include/asm/compat.h b/arch/sparc/include/asm/compat.h index f260b58f5ce9..0e706257918f 100644 --- a/arch/sparc/include/asm/compat.h +++ b/arch/sparc/include/asm/compat.h | |||
| @@ -240,4 +240,9 @@ struct compat_shmid64_ds { | |||
| 240 | unsigned int __unused2; | 240 | unsigned int __unused2; |
| 241 | }; | 241 | }; |
| 242 | 242 | ||
| 243 | static inline int is_compat_task(void) | ||
| 244 | { | ||
| 245 | return test_thread_flag(TIF_32BIT); | ||
| 246 | } | ||
| 247 | |||
| 243 | #endif /* _ASM_SPARC64_COMPAT_H */ | 248 | #endif /* _ASM_SPARC64_COMPAT_H */ |
diff --git a/arch/sparc/include/asm/seccomp.h b/arch/sparc/include/asm/seccomp.h index 7fcd9968192b..adca1bce41d4 100644 --- a/arch/sparc/include/asm/seccomp.h +++ b/arch/sparc/include/asm/seccomp.h | |||
| @@ -1,11 +1,5 @@ | |||
| 1 | #ifndef _ASM_SECCOMP_H | 1 | #ifndef _ASM_SECCOMP_H |
| 2 | 2 | ||
| 3 | #include <linux/thread_info.h> /* already defines TIF_32BIT */ | ||
| 4 | |||
| 5 | #ifndef TIF_32BIT | ||
| 6 | #error "unexpected TIF_32BIT on sparc64" | ||
| 7 | #endif | ||
| 8 | |||
| 9 | #include <linux/unistd.h> | 3 | #include <linux/unistd.h> |
| 10 | 4 | ||
| 11 | #define __NR_seccomp_read __NR_read | 5 | #define __NR_seccomp_read __NR_read |
diff --git a/arch/sparc/kernel/chmc.c b/arch/sparc/kernel/chmc.c index 3b9f4d6e14a9..e1a9598e2a4d 100644 --- a/arch/sparc/kernel/chmc.c +++ b/arch/sparc/kernel/chmc.c | |||
| @@ -306,6 +306,7 @@ static int jbusmc_print_dimm(int syndrome_code, | |||
| 306 | buf[1] = '?'; | 306 | buf[1] = '?'; |
| 307 | buf[2] = '?'; | 307 | buf[2] = '?'; |
| 308 | buf[3] = '\0'; | 308 | buf[3] = '\0'; |
| 309 | return 0; | ||
| 309 | } | 310 | } |
| 310 | p = dp->controller; | 311 | p = dp->controller; |
| 311 | prop = &p->layout; | 312 | prop = &p->layout; |
diff --git a/arch/sparc/kernel/head_64.S b/arch/sparc/kernel/head_64.S index 8ffee714f932..a46c3a21e26d 100644 --- a/arch/sparc/kernel/head_64.S +++ b/arch/sparc/kernel/head_64.S | |||
| @@ -891,10 +891,35 @@ prom_tba: .xword 0 | |||
| 891 | tlb_type: .word 0 /* Must NOT end up in BSS */ | 891 | tlb_type: .word 0 /* Must NOT end up in BSS */ |
| 892 | .section ".fixup",#alloc,#execinstr | 892 | .section ".fixup",#alloc,#execinstr |
| 893 | 893 | ||
| 894 | .globl __ret_efault, __retl_efault | 894 | .globl __ret_efault, __retl_efault, __ret_one, __retl_one |
| 895 | __ret_efault: | 895 | ENTRY(__ret_efault) |
| 896 | ret | 896 | ret |
| 897 | restore %g0, -EFAULT, %o0 | 897 | restore %g0, -EFAULT, %o0 |
| 898 | __retl_efault: | 898 | ENDPROC(__ret_efault) |
| 899 | |||
| 900 | ENTRY(__retl_efault) | ||
| 899 | retl | 901 | retl |
| 900 | mov -EFAULT, %o0 | 902 | mov -EFAULT, %o0 |
| 903 | ENDPROC(__retl_efault) | ||
| 904 | |||
| 905 | ENTRY(__retl_one) | ||
| 906 | retl | ||
| 907 | mov 1, %o0 | ||
| 908 | ENDPROC(__retl_one) | ||
| 909 | |||
| 910 | ENTRY(__ret_one_asi) | ||
| 911 | wr %g0, ASI_AIUS, %asi | ||
| 912 | ret | ||
| 913 | restore %g0, 1, %o0 | ||
| 914 | ENDPROC(__ret_one_asi) | ||
| 915 | |||
| 916 | ENTRY(__retl_one_asi) | ||
| 917 | wr %g0, ASI_AIUS, %asi | ||
| 918 | retl | ||
| 919 | mov 1, %o0 | ||
| 920 | ENDPROC(__retl_one_asi) | ||
| 921 | |||
| 922 | ENTRY(__retl_o1) | ||
| 923 | retl | ||
| 924 | mov %o1, %o0 | ||
| 925 | ENDPROC(__retl_o1) | ||
diff --git a/arch/sparc/kernel/nmi.c b/arch/sparc/kernel/nmi.c index 09f088ed4a64..f3577223c863 100644 --- a/arch/sparc/kernel/nmi.c +++ b/arch/sparc/kernel/nmi.c | |||
| @@ -70,6 +70,7 @@ static void die_nmi(const char *str, struct pt_regs *regs, int do_panic) | |||
| 70 | printk(" on CPU%d, ip %08lx, registers:\n", | 70 | printk(" on CPU%d, ip %08lx, registers:\n", |
| 71 | smp_processor_id(), regs->tpc); | 71 | smp_processor_id(), regs->tpc); |
| 72 | show_regs(regs); | 72 | show_regs(regs); |
| 73 | dump_stack(); | ||
| 73 | 74 | ||
| 74 | bust_spinlocks(0); | 75 | bust_spinlocks(0); |
| 75 | 76 | ||
diff --git a/arch/sparc/kernel/pcr.c b/arch/sparc/kernel/pcr.c index 92e0dda141a4..1ae8cdd7e703 100644 --- a/arch/sparc/kernel/pcr.c +++ b/arch/sparc/kernel/pcr.c | |||
| @@ -133,11 +133,16 @@ int __init pcr_arch_init(void) | |||
| 133 | 133 | ||
| 134 | case cheetah: | 134 | case cheetah: |
| 135 | case cheetah_plus: | 135 | case cheetah_plus: |
| 136 | case spitfire: | ||
| 137 | pcr_ops = &direct_pcr_ops; | 136 | pcr_ops = &direct_pcr_ops; |
| 138 | pcr_enable = PCR_SUN4U_ENABLE; | 137 | pcr_enable = PCR_SUN4U_ENABLE; |
| 139 | break; | 138 | break; |
| 140 | 139 | ||
| 140 | case spitfire: | ||
| 141 | /* UltraSPARC-I/II and derivatives lack a profile | ||
| 142 | * counter overflow interrupt so we can't make use of | ||
| 143 | * their hardware currently. | ||
| 144 | */ | ||
| 145 | /* fallthrough */ | ||
| 141 | default: | 146 | default: |
| 142 | err = -ENODEV; | 147 | err = -ENODEV; |
| 143 | goto out_unregister; | 148 | goto out_unregister; |
diff --git a/arch/sparc/lib/GENbzero.S b/arch/sparc/lib/GENbzero.S index 6a4f956a2f7a..8e7a843ddd88 100644 --- a/arch/sparc/lib/GENbzero.S +++ b/arch/sparc/lib/GENbzero.S | |||
| @@ -6,13 +6,9 @@ | |||
| 6 | 6 | ||
| 7 | #define EX_ST(x,y) \ | 7 | #define EX_ST(x,y) \ |
| 8 | 98: x,y; \ | 8 | 98: x,y; \ |
| 9 | .section .fixup; \ | ||
| 10 | .align 4; \ | ||
| 11 | 99: retl; \ | ||
| 12 | mov %o1, %o0; \ | ||
| 13 | .section __ex_table,"a";\ | 9 | .section __ex_table,"a";\ |
| 14 | .align 4; \ | 10 | .align 4; \ |
| 15 | .word 98b, 99b; \ | 11 | .word 98b, __retl_o1; \ |
| 16 | .text; \ | 12 | .text; \ |
| 17 | .align 4; | 13 | .align 4; |
| 18 | 14 | ||
diff --git a/arch/sparc/lib/GENcopy_from_user.S b/arch/sparc/lib/GENcopy_from_user.S index 2b9df99e87f9..b7d0bd6b1406 100644 --- a/arch/sparc/lib/GENcopy_from_user.S +++ b/arch/sparc/lib/GENcopy_from_user.S | |||
| @@ -5,13 +5,9 @@ | |||
| 5 | 5 | ||
| 6 | #define EX_LD(x) \ | 6 | #define EX_LD(x) \ |
| 7 | 98: x; \ | 7 | 98: x; \ |
| 8 | .section .fixup; \ | ||
| 9 | .align 4; \ | ||
| 10 | 99: retl; \ | ||
| 11 | mov 1, %o0; \ | ||
| 12 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
| 13 | .align 4; \ | 9 | .align 4; \ |
| 14 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one; \ |
| 15 | .text; \ | 11 | .text; \ |
| 16 | .align 4; | 12 | .align 4; |
| 17 | 13 | ||
| @@ -27,7 +23,7 @@ | |||
| 27 | #define PREAMBLE \ | 23 | #define PREAMBLE \ |
| 28 | rd %asi, %g1; \ | 24 | rd %asi, %g1; \ |
| 29 | cmp %g1, ASI_AIUS; \ | 25 | cmp %g1, ASI_AIUS; \ |
| 30 | bne,pn %icc, memcpy_user_stub; \ | 26 | bne,pn %icc, ___copy_in_user; \ |
| 31 | nop | 27 | nop |
| 32 | #endif | 28 | #endif |
| 33 | 29 | ||
diff --git a/arch/sparc/lib/GENcopy_to_user.S b/arch/sparc/lib/GENcopy_to_user.S index bb3f7084daf9..780550e1afc7 100644 --- a/arch/sparc/lib/GENcopy_to_user.S +++ b/arch/sparc/lib/GENcopy_to_user.S | |||
| @@ -5,13 +5,9 @@ | |||
| 5 | 5 | ||
| 6 | #define EX_ST(x) \ | 6 | #define EX_ST(x) \ |
| 7 | 98: x; \ | 7 | 98: x; \ |
| 8 | .section .fixup; \ | ||
| 9 | .align 4; \ | ||
| 10 | 99: retl; \ | ||
| 11 | mov 1, %o0; \ | ||
| 12 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
| 13 | .align 4; \ | 9 | .align 4; \ |
| 14 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one; \ |
| 15 | .text; \ | 11 | .text; \ |
| 16 | .align 4; | 12 | .align 4; |
| 17 | 13 | ||
| @@ -31,7 +27,7 @@ | |||
| 31 | #define PREAMBLE \ | 27 | #define PREAMBLE \ |
| 32 | rd %asi, %g1; \ | 28 | rd %asi, %g1; \ |
| 33 | cmp %g1, ASI_AIUS; \ | 29 | cmp %g1, ASI_AIUS; \ |
| 34 | bne,pn %icc, memcpy_user_stub; \ | 30 | bne,pn %icc, ___copy_in_user; \ |
| 35 | nop | 31 | nop |
| 36 | #endif | 32 | #endif |
| 37 | 33 | ||
diff --git a/arch/sparc/lib/NG2copy_from_user.S b/arch/sparc/lib/NG2copy_from_user.S index c77ef5f22102..119ccb9a54f4 100644 --- a/arch/sparc/lib/NG2copy_from_user.S +++ b/arch/sparc/lib/NG2copy_from_user.S | |||
| @@ -5,14 +5,9 @@ | |||
| 5 | 5 | ||
| 6 | #define EX_LD(x) \ | 6 | #define EX_LD(x) \ |
| 7 | 98: x; \ | 7 | 98: x; \ |
| 8 | .section .fixup; \ | ||
| 9 | .align 4; \ | ||
| 10 | 99: wr %g0, ASI_AIUS, %asi;\ | ||
| 11 | retl; \ | ||
| 12 | mov 1, %o0; \ | ||
| 13 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
| 14 | .align 4; \ | 9 | .align 4; \ |
| 15 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one_asi;\ |
| 16 | .text; \ | 11 | .text; \ |
| 17 | .align 4; | 12 | .align 4; |
| 18 | 13 | ||
| @@ -33,7 +28,7 @@ | |||
| 33 | #define PREAMBLE \ | 28 | #define PREAMBLE \ |
| 34 | rd %asi, %g1; \ | 29 | rd %asi, %g1; \ |
| 35 | cmp %g1, ASI_AIUS; \ | 30 | cmp %g1, ASI_AIUS; \ |
| 36 | bne,pn %icc, memcpy_user_stub; \ | 31 | bne,pn %icc, ___copy_in_user; \ |
| 37 | nop | 32 | nop |
| 38 | #endif | 33 | #endif |
| 39 | 34 | ||
diff --git a/arch/sparc/lib/NG2copy_to_user.S b/arch/sparc/lib/NG2copy_to_user.S index 4bd4093acbbd..7fe1ccefd9d0 100644 --- a/arch/sparc/lib/NG2copy_to_user.S +++ b/arch/sparc/lib/NG2copy_to_user.S | |||
| @@ -5,14 +5,9 @@ | |||
| 5 | 5 | ||
| 6 | #define EX_ST(x) \ | 6 | #define EX_ST(x) \ |
| 7 | 98: x; \ | 7 | 98: x; \ |
| 8 | .section .fixup; \ | ||
| 9 | .align 4; \ | ||
| 10 | 99: wr %g0, ASI_AIUS, %asi;\ | ||
| 11 | retl; \ | ||
| 12 | mov 1, %o0; \ | ||
| 13 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
| 14 | .align 4; \ | 9 | .align 4; \ |
| 15 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one_asi;\ |
| 16 | .text; \ | 11 | .text; \ |
| 17 | .align 4; | 12 | .align 4; |
| 18 | 13 | ||
| @@ -42,7 +37,7 @@ | |||
| 42 | #define PREAMBLE \ | 37 | #define PREAMBLE \ |
| 43 | rd %asi, %g1; \ | 38 | rd %asi, %g1; \ |
| 44 | cmp %g1, ASI_AIUS; \ | 39 | cmp %g1, ASI_AIUS; \ |
| 45 | bne,pn %icc, memcpy_user_stub; \ | 40 | bne,pn %icc, ___copy_in_user; \ |
| 46 | nop | 41 | nop |
| 47 | #endif | 42 | #endif |
| 48 | 43 | ||
diff --git a/arch/sparc/lib/NGbzero.S b/arch/sparc/lib/NGbzero.S index 814d5f7a45e1..beab29bf419b 100644 --- a/arch/sparc/lib/NGbzero.S +++ b/arch/sparc/lib/NGbzero.S | |||
| @@ -6,13 +6,9 @@ | |||
| 6 | 6 | ||
| 7 | #define EX_ST(x,y) \ | 7 | #define EX_ST(x,y) \ |
| 8 | 98: x,y; \ | 8 | 98: x,y; \ |
| 9 | .section .fixup; \ | ||
| 10 | .align 4; \ | ||
| 11 | 99: retl; \ | ||
| 12 | mov %o1, %o0; \ | ||
| 13 | .section __ex_table,"a";\ | 9 | .section __ex_table,"a";\ |
| 14 | .align 4; \ | 10 | .align 4; \ |
| 15 | .word 98b, 99b; \ | 11 | .word 98b, __retl_o1; \ |
| 16 | .text; \ | 12 | .text; \ |
| 17 | .align 4; | 13 | .align 4; |
| 18 | 14 | ||
diff --git a/arch/sparc/lib/NGcopy_from_user.S b/arch/sparc/lib/NGcopy_from_user.S index e7f433f71b42..5d1e4d1ac21e 100644 --- a/arch/sparc/lib/NGcopy_from_user.S +++ b/arch/sparc/lib/NGcopy_from_user.S | |||
| @@ -5,14 +5,9 @@ | |||
| 5 | 5 | ||
| 6 | #define EX_LD(x) \ | 6 | #define EX_LD(x) \ |
| 7 | 98: x; \ | 7 | 98: x; \ |
| 8 | .section .fixup; \ | ||
| 9 | .align 4; \ | ||
| 10 | 99: wr %g0, ASI_AIUS, %asi;\ | ||
| 11 | ret; \ | ||
| 12 | restore %g0, 1, %o0; \ | ||
| 13 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
| 14 | .align 4; \ | 9 | .align 4; \ |
| 15 | .word 98b, 99b; \ | 10 | .word 98b, __ret_one_asi;\ |
| 16 | .text; \ | 11 | .text; \ |
| 17 | .align 4; | 12 | .align 4; |
| 18 | 13 | ||
| @@ -30,7 +25,7 @@ | |||
| 30 | #define PREAMBLE \ | 25 | #define PREAMBLE \ |
| 31 | rd %asi, %g1; \ | 26 | rd %asi, %g1; \ |
| 32 | cmp %g1, ASI_AIUS; \ | 27 | cmp %g1, ASI_AIUS; \ |
| 33 | bne,pn %icc, memcpy_user_stub; \ | 28 | bne,pn %icc, ___copy_in_user; \ |
| 34 | nop | 29 | nop |
| 35 | #endif | 30 | #endif |
| 36 | 31 | ||
diff --git a/arch/sparc/lib/NGcopy_to_user.S b/arch/sparc/lib/NGcopy_to_user.S index 6ea01c5532a0..ff630dcb273c 100644 --- a/arch/sparc/lib/NGcopy_to_user.S +++ b/arch/sparc/lib/NGcopy_to_user.S | |||
| @@ -5,14 +5,9 @@ | |||
| 5 | 5 | ||
| 6 | #define EX_ST(x) \ | 6 | #define EX_ST(x) \ |
| 7 | 98: x; \ | 7 | 98: x; \ |
| 8 | .section .fixup; \ | ||
| 9 | .align 4; \ | ||
| 10 | 99: wr %g0, ASI_AIUS, %asi;\ | ||
| 11 | ret; \ | ||
| 12 | restore %g0, 1, %o0; \ | ||
| 13 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
| 14 | .align 4; \ | 9 | .align 4; \ |
| 15 | .word 98b, 99b; \ | 10 | .word 98b, __ret_one_asi;\ |
| 16 | .text; \ | 11 | .text; \ |
| 17 | .align 4; | 12 | .align 4; |
| 18 | 13 | ||
| @@ -33,7 +28,7 @@ | |||
| 33 | #define PREAMBLE \ | 28 | #define PREAMBLE \ |
| 34 | rd %asi, %g1; \ | 29 | rd %asi, %g1; \ |
| 35 | cmp %g1, ASI_AIUS; \ | 30 | cmp %g1, ASI_AIUS; \ |
| 36 | bne,pn %icc, memcpy_user_stub; \ | 31 | bne,pn %icc, ___copy_in_user; \ |
| 37 | nop | 32 | nop |
| 38 | #endif | 33 | #endif |
| 39 | 34 | ||
diff --git a/arch/sparc/lib/U1copy_from_user.S b/arch/sparc/lib/U1copy_from_user.S index 3192b0bf4fab..a6ae2ea04bf5 100644 --- a/arch/sparc/lib/U1copy_from_user.S +++ b/arch/sparc/lib/U1copy_from_user.S | |||
| @@ -5,13 +5,9 @@ | |||
| 5 | 5 | ||
| 6 | #define EX_LD(x) \ | 6 | #define EX_LD(x) \ |
| 7 | 98: x; \ | 7 | 98: x; \ |
| 8 | .section .fixup; \ | ||
| 9 | .align 4; \ | ||
| 10 | 99: retl; \ | ||
| 11 | mov 1, %o0; \ | ||
| 12 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
| 13 | .align 4; \ | 9 | .align 4; \ |
| 14 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one; \ |
| 15 | .text; \ | 11 | .text; \ |
| 16 | .align 4; | 12 | .align 4; |
| 17 | 13 | ||
| @@ -27,7 +23,7 @@ | |||
| 27 | #define PREAMBLE \ | 23 | #define PREAMBLE \ |
| 28 | rd %asi, %g1; \ | 24 | rd %asi, %g1; \ |
| 29 | cmp %g1, ASI_AIUS; \ | 25 | cmp %g1, ASI_AIUS; \ |
| 30 | bne,pn %icc, memcpy_user_stub; \ | 26 | bne,pn %icc, ___copy_in_user; \ |
| 31 | nop; \ | 27 | nop; \ |
| 32 | 28 | ||
| 33 | #include "U1memcpy.S" | 29 | #include "U1memcpy.S" |
diff --git a/arch/sparc/lib/U1copy_to_user.S b/arch/sparc/lib/U1copy_to_user.S index d1210ffb0b82..f4b970eeb485 100644 --- a/arch/sparc/lib/U1copy_to_user.S +++ b/arch/sparc/lib/U1copy_to_user.S | |||
| @@ -5,13 +5,9 @@ | |||
| 5 | 5 | ||
| 6 | #define EX_ST(x) \ | 6 | #define EX_ST(x) \ |
| 7 | 98: x; \ | 7 | 98: x; \ |
| 8 | .section .fixup; \ | ||
| 9 | .align 4; \ | ||
| 10 | 99: retl; \ | ||
| 11 | mov 1, %o0; \ | ||
| 12 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
| 13 | .align 4; \ | 9 | .align 4; \ |
| 14 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one; \ |
| 15 | .text; \ | 11 | .text; \ |
| 16 | .align 4; | 12 | .align 4; |
| 17 | 13 | ||
| @@ -27,7 +23,7 @@ | |||
| 27 | #define PREAMBLE \ | 23 | #define PREAMBLE \ |
| 28 | rd %asi, %g1; \ | 24 | rd %asi, %g1; \ |
| 29 | cmp %g1, ASI_AIUS; \ | 25 | cmp %g1, ASI_AIUS; \ |
| 30 | bne,pn %icc, memcpy_user_stub; \ | 26 | bne,pn %icc, ___copy_in_user; \ |
| 31 | nop; \ | 27 | nop; \ |
| 32 | 28 | ||
| 33 | #include "U1memcpy.S" | 29 | #include "U1memcpy.S" |
diff --git a/arch/sparc/lib/U3copy_from_user.S b/arch/sparc/lib/U3copy_from_user.S index f5bfc8d9d216..b1acd1331c33 100644 --- a/arch/sparc/lib/U3copy_from_user.S +++ b/arch/sparc/lib/U3copy_from_user.S | |||
| @@ -5,13 +5,9 @@ | |||
| 5 | 5 | ||
| 6 | #define EX_LD(x) \ | 6 | #define EX_LD(x) \ |
| 7 | 98: x; \ | 7 | 98: x; \ |
| 8 | .section .fixup; \ | ||
| 9 | .align 4; \ | ||
| 10 | 99: retl; \ | ||
| 11 | mov 1, %o0; \ | ||
| 12 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
| 13 | .align 4; \ | 9 | .align 4; \ |
| 14 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one; \ |
| 15 | .text; \ | 11 | .text; \ |
| 16 | .align 4; | 12 | .align 4; |
| 17 | 13 | ||
diff --git a/arch/sparc/lib/U3copy_to_user.S b/arch/sparc/lib/U3copy_to_user.S index 2334f111bb0c..ef1e493afdfa 100644 --- a/arch/sparc/lib/U3copy_to_user.S +++ b/arch/sparc/lib/U3copy_to_user.S | |||
| @@ -5,13 +5,9 @@ | |||
| 5 | 5 | ||
| 6 | #define EX_ST(x) \ | 6 | #define EX_ST(x) \ |
| 7 | 98: x; \ | 7 | 98: x; \ |
| 8 | .section .fixup; \ | ||
| 9 | .align 4; \ | ||
| 10 | 99: retl; \ | ||
| 11 | mov 1, %o0; \ | ||
| 12 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
| 13 | .align 4; \ | 9 | .align 4; \ |
| 14 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one; \ |
| 15 | .text; \ | 11 | .text; \ |
| 16 | .align 4; | 12 | .align 4; |
| 17 | 13 | ||
| @@ -27,7 +23,7 @@ | |||
| 27 | #define PREAMBLE \ | 23 | #define PREAMBLE \ |
| 28 | rd %asi, %g1; \ | 24 | rd %asi, %g1; \ |
| 29 | cmp %g1, ASI_AIUS; \ | 25 | cmp %g1, ASI_AIUS; \ |
| 30 | bne,pn %icc, memcpy_user_stub; \ | 26 | bne,pn %icc, ___copy_in_user; \ |
| 31 | nop; \ | 27 | nop; \ |
| 32 | 28 | ||
| 33 | #include "U3memcpy.S" | 29 | #include "U3memcpy.S" |
diff --git a/arch/sparc/lib/bzero.S b/arch/sparc/lib/bzero.S index c7bbae8c590f..b6557297440f 100644 --- a/arch/sparc/lib/bzero.S +++ b/arch/sparc/lib/bzero.S | |||
| @@ -88,13 +88,9 @@ __bzero_done: | |||
| 88 | 88 | ||
| 89 | #define EX_ST(x,y) \ | 89 | #define EX_ST(x,y) \ |
| 90 | 98: x,y; \ | 90 | 98: x,y; \ |
| 91 | .section .fixup; \ | ||
| 92 | .align 4; \ | ||
| 93 | 99: retl; \ | ||
| 94 | mov %o1, %o0; \ | ||
| 95 | .section __ex_table,"a";\ | 91 | .section __ex_table,"a";\ |
| 96 | .align 4; \ | 92 | .align 4; \ |
| 97 | .word 98b, 99b; \ | 93 | .word 98b, __retl_o1; \ |
| 98 | .text; \ | 94 | .text; \ |
| 99 | .align 4; | 95 | .align 4; |
| 100 | 96 | ||
diff --git a/arch/sparc/lib/copy_in_user.S b/arch/sparc/lib/copy_in_user.S index 650af3f21f78..302c0e60dc2c 100644 --- a/arch/sparc/lib/copy_in_user.S +++ b/arch/sparc/lib/copy_in_user.S | |||
| @@ -3,19 +3,16 @@ | |||
| 3 | * Copyright (C) 1999, 2000, 2004 David S. Miller (davem@redhat.com) | 3 | * Copyright (C) 1999, 2000, 2004 David S. Miller (davem@redhat.com) |
| 4 | */ | 4 | */ |
| 5 | 5 | ||
| 6 | #include <linux/linkage.h> | ||
| 6 | #include <asm/asi.h> | 7 | #include <asm/asi.h> |
| 7 | 8 | ||
| 8 | #define XCC xcc | 9 | #define XCC xcc |
| 9 | 10 | ||
| 10 | #define EX(x,y) \ | 11 | #define EX(x,y) \ |
| 11 | 98: x,y; \ | 12 | 98: x,y; \ |
| 12 | .section .fixup; \ | ||
| 13 | .align 4; \ | ||
| 14 | 99: retl; \ | ||
| 15 | mov 1, %o0; \ | ||
| 16 | .section __ex_table,"a";\ | 13 | .section __ex_table,"a";\ |
| 17 | .align 4; \ | 14 | .align 4; \ |
| 18 | .word 98b, 99b; \ | 15 | .word 98b, __retl_one; \ |
| 19 | .text; \ | 16 | .text; \ |
| 20 | .align 4; | 17 | .align 4; |
| 21 | 18 | ||
| @@ -31,18 +28,7 @@ | |||
| 31 | * to copy register windows around during thread cloning. | 28 | * to copy register windows around during thread cloning. |
| 32 | */ | 29 | */ |
| 33 | 30 | ||
| 34 | .globl ___copy_in_user | 31 | ENTRY(___copy_in_user) /* %o0=dst, %o1=src, %o2=len */ |
| 35 | .type ___copy_in_user,#function | ||
| 36 | ___copy_in_user: /* %o0=dst, %o1=src, %o2=len */ | ||
| 37 | /* Writing to %asi is _expensive_ so we hardcode it. | ||
| 38 | * Reading %asi to check for KERNEL_DS is comparatively | ||
| 39 | * cheap. | ||
| 40 | */ | ||
| 41 | rd %asi, %g1 | ||
| 42 | cmp %g1, ASI_AIUS | ||
| 43 | bne,pn %icc, memcpy_user_stub | ||
| 44 | nop | ||
| 45 | |||
| 46 | cmp %o2, 0 | 32 | cmp %o2, 0 |
| 47 | be,pn %XCC, 85f | 33 | be,pn %XCC, 85f |
| 48 | or %o0, %o1, %o3 | 34 | or %o0, %o1, %o3 |
| @@ -53,22 +39,24 @@ ___copy_in_user: /* %o0=dst, %o1=src, %o2=len */ | |||
| 53 | /* 16 < len <= 64 */ | 39 | /* 16 < len <= 64 */ |
| 54 | andcc %o3, 0x7, %g0 | 40 | andcc %o3, 0x7, %g0 |
| 55 | bne,pn %XCC, 90f | 41 | bne,pn %XCC, 90f |
| 56 | sub %o0, %o1, %o3 | 42 | nop |
| 57 | 43 | ||
| 58 | andn %o2, 0x7, %o4 | 44 | andn %o2, 0x7, %o4 |
| 59 | and %o2, 0x7, %o2 | 45 | and %o2, 0x7, %o2 |
| 60 | 1: subcc %o4, 0x8, %o4 | 46 | 1: subcc %o4, 0x8, %o4 |
| 61 | EX(ldxa [%o1] %asi, %o5) | 47 | EX(ldxa [%o1] %asi, %o5) |
| 62 | EX(stxa %o5, [%o1 + %o3] ASI_AIUS) | 48 | EX(stxa %o5, [%o0] %asi) |
| 49 | add %o1, 0x8, %o1 | ||
| 63 | bgu,pt %XCC, 1b | 50 | bgu,pt %XCC, 1b |
| 64 | add %o1, 0x8, %o1 | 51 | add %o0, 0x8, %o0 |
| 65 | andcc %o2, 0x4, %g0 | 52 | andcc %o2, 0x4, %g0 |
| 66 | be,pt %XCC, 1f | 53 | be,pt %XCC, 1f |
| 67 | nop | 54 | nop |
| 68 | sub %o2, 0x4, %o2 | 55 | sub %o2, 0x4, %o2 |
| 69 | EX(lduwa [%o1] %asi, %o5) | 56 | EX(lduwa [%o1] %asi, %o5) |
| 70 | EX(stwa %o5, [%o1 + %o3] ASI_AIUS) | 57 | EX(stwa %o5, [%o0] %asi) |
| 71 | add %o1, 0x4, %o1 | 58 | add %o1, 0x4, %o1 |
| 59 | add %o0, 0x4, %o0 | ||
| 72 | 1: cmp %o2, 0 | 60 | 1: cmp %o2, 0 |
| 73 | be,pt %XCC, 85f | 61 | be,pt %XCC, 85f |
| 74 | nop | 62 | nop |
| @@ -78,14 +66,15 @@ ___copy_in_user: /* %o0=dst, %o1=src, %o2=len */ | |||
| 78 | 80: /* 0 < len <= 16 */ | 66 | 80: /* 0 < len <= 16 */ |
| 79 | andcc %o3, 0x3, %g0 | 67 | andcc %o3, 0x3, %g0 |
| 80 | bne,pn %XCC, 90f | 68 | bne,pn %XCC, 90f |
| 81 | sub %o0, %o1, %o3 | 69 | nop |
| 82 | 70 | ||
| 83 | 82: | 71 | 82: |
| 84 | subcc %o2, 4, %o2 | 72 | subcc %o2, 4, %o2 |
| 85 | EX(lduwa [%o1] %asi, %g1) | 73 | EX(lduwa [%o1] %asi, %g1) |
| 86 | EX(stwa %g1, [%o1 + %o3] ASI_AIUS) | 74 | EX(stwa %g1, [%o0] %asi) |
| 75 | add %o1, 4, %o1 | ||
| 87 | bgu,pt %XCC, 82b | 76 | bgu,pt %XCC, 82b |
| 88 | add %o1, 4, %o1 | 77 | add %o0, 4, %o0 |
| 89 | 78 | ||
| 90 | 85: retl | 79 | 85: retl |
| 91 | clr %o0 | 80 | clr %o0 |
| @@ -94,26 +83,10 @@ ___copy_in_user: /* %o0=dst, %o1=src, %o2=len */ | |||
| 94 | 90: | 83 | 90: |
| 95 | subcc %o2, 1, %o2 | 84 | subcc %o2, 1, %o2 |
| 96 | EX(lduba [%o1] %asi, %g1) | 85 | EX(lduba [%o1] %asi, %g1) |
| 97 | EX(stba %g1, [%o1 + %o3] ASI_AIUS) | 86 | EX(stba %g1, [%o0] %asi) |
| 87 | add %o1, 1, %o1 | ||
| 98 | bgu,pt %XCC, 90b | 88 | bgu,pt %XCC, 90b |
| 99 | add %o1, 1, %o1 | 89 | add %o0, 1, %o0 |
| 100 | retl | 90 | retl |
| 101 | clr %o0 | 91 | clr %o0 |
| 102 | 92 | ENDPROC(___copy_in_user) | |
| 103 | .size ___copy_in_user, .-___copy_in_user | ||
| 104 | |||
| 105 | /* Act like copy_{to,in}_user(), ie. return zero instead | ||
| 106 | * of original destination pointer. This is invoked when | ||
| 107 | * copy_{to,in}_user() finds that %asi is kernel space. | ||
| 108 | */ | ||
| 109 | .globl memcpy_user_stub | ||
| 110 | .type memcpy_user_stub,#function | ||
| 111 | memcpy_user_stub: | ||
| 112 | save %sp, -192, %sp | ||
| 113 | mov %i0, %o0 | ||
| 114 | mov %i1, %o1 | ||
| 115 | call memcpy | ||
| 116 | mov %i2, %o2 | ||
| 117 | ret | ||
| 118 | restore %g0, %g0, %o0 | ||
| 119 | .size memcpy_user_stub, .-memcpy_user_stub | ||
diff --git a/arch/um/drivers/vde_user.c b/arch/um/drivers/vde_user.c index 56533db25343..c5c43253e6ce 100644 --- a/arch/um/drivers/vde_user.c +++ b/arch/um/drivers/vde_user.c | |||
| @@ -78,7 +78,7 @@ void vde_init_libstuff(struct vde_data *vpri, struct vde_init *init) | |||
| 78 | { | 78 | { |
| 79 | struct vde_open_args *args; | 79 | struct vde_open_args *args; |
| 80 | 80 | ||
| 81 | vpri->args = kmalloc(sizeof(struct vde_open_args), UM_GFP_KERNEL); | 81 | vpri->args = uml_kmalloc(sizeof(struct vde_open_args), UM_GFP_KERNEL); |
| 82 | if (vpri->args == NULL) { | 82 | if (vpri->args == NULL) { |
| 83 | printk(UM_KERN_ERR "vde_init_libstuff - vde_open_args " | 83 | printk(UM_KERN_ERR "vde_init_libstuff - vde_open_args " |
| 84 | "allocation failed"); | 84 | "allocation failed"); |
| @@ -91,8 +91,8 @@ void vde_init_libstuff(struct vde_data *vpri, struct vde_init *init) | |||
| 91 | args->group = init->group; | 91 | args->group = init->group; |
| 92 | args->mode = init->mode ? init->mode : 0700; | 92 | args->mode = init->mode ? init->mode : 0700; |
| 93 | 93 | ||
| 94 | args->port ? printk(UM_KERN_INFO "port %d", args->port) : | 94 | args->port ? printk("port %d", args->port) : |
| 95 | printk(UM_KERN_INFO "undefined port"); | 95 | printk("undefined port"); |
| 96 | } | 96 | } |
| 97 | 97 | ||
| 98 | int vde_user_read(void *conn, void *buf, int len) | 98 | int vde_user_read(void *conn, void *buf, int len) |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 73f7fe8fd4d1..bc2fbadff9f9 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
| @@ -1802,6 +1802,17 @@ config DMAR | |||
| 1802 | and include PCI device scope covered by these DMA | 1802 | and include PCI device scope covered by these DMA |
| 1803 | remapping devices. | 1803 | remapping devices. |
| 1804 | 1804 | ||
| 1805 | config DMAR_DEFAULT_ON | ||
| 1806 | def_bool y | ||
| 1807 | prompt "Enable DMA Remapping Devices by default" | ||
| 1808 | depends on DMAR | ||
| 1809 | help | ||
| 1810 | Selecting this option will enable a DMAR device at boot time if | ||
| 1811 | one is found. If this option is not selected, DMAR support can | ||
| 1812 | be enabled by passing intel_iommu=on to the kernel. It is | ||
| 1813 | recommended you say N here while the DMAR code remains | ||
| 1814 | experimental. | ||
| 1815 | |||
| 1805 | config DMAR_GFX_WA | 1816 | config DMAR_GFX_WA |
| 1806 | def_bool y | 1817 | def_bool y |
| 1807 | prompt "Support for Graphics workaround" | 1818 | prompt "Support for Graphics workaround" |
diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu index 8078955845ae..c98d52e82966 100644 --- a/arch/x86/Kconfig.cpu +++ b/arch/x86/Kconfig.cpu | |||
| @@ -167,9 +167,9 @@ config MK7 | |||
| 167 | config MK8 | 167 | config MK8 |
| 168 | bool "Opteron/Athlon64/Hammer/K8" | 168 | bool "Opteron/Athlon64/Hammer/K8" |
| 169 | help | 169 | help |
| 170 | Select this for an AMD Opteron or Athlon64 Hammer-family processor. Enables | 170 | Select this for an AMD Opteron or Athlon64 Hammer-family processor. |
| 171 | use of some extended instructions, and passes appropriate optimization | 171 | Enables use of some extended instructions, and passes appropriate |
| 172 | flags to GCC. | 172 | optimization flags to GCC. |
| 173 | 173 | ||
| 174 | config MCRUSOE | 174 | config MCRUSOE |
| 175 | bool "Crusoe" | 175 | bool "Crusoe" |
| @@ -256,9 +256,11 @@ config MPSC | |||
| 256 | config MCORE2 | 256 | config MCORE2 |
| 257 | bool "Core 2/newer Xeon" | 257 | bool "Core 2/newer Xeon" |
| 258 | help | 258 | help |
| 259 | Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and 53xx) | 259 | |
| 260 | CPUs. You can distinguish newer from older Xeons by the CPU family | 260 | Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and |
| 261 | in /proc/cpuinfo. Newer ones have 6 and older ones 15 (not a typo) | 261 | 53xx) CPUs. You can distinguish newer from older Xeons by the CPU |
| 262 | family in /proc/cpuinfo. Newer ones have 6 and older ones 15 | ||
| 263 | (not a typo) | ||
| 262 | 264 | ||
| 263 | config GENERIC_CPU | 265 | config GENERIC_CPU |
| 264 | bool "Generic-x86-64" | 266 | bool "Generic-x86-64" |
| @@ -320,14 +322,14 @@ config X86_PPRO_FENCE | |||
| 320 | bool "PentiumPro memory ordering errata workaround" | 322 | bool "PentiumPro memory ordering errata workaround" |
| 321 | depends on M686 || M586MMX || M586TSC || M586 || M486 || M386 || MGEODEGX1 | 323 | depends on M686 || M586MMX || M586TSC || M586 || M486 || M386 || MGEODEGX1 |
| 322 | help | 324 | help |
| 323 | Old PentiumPro multiprocessor systems had errata that could cause memory | 325 | Old PentiumPro multiprocessor systems had errata that could cause |
| 324 | operations to violate the x86 ordering standard in rare cases. Enabling this | 326 | memory operations to violate the x86 ordering standard in rare cases. |
| 325 | option will attempt to work around some (but not all) occurances of | 327 | Enabling this option will attempt to work around some (but not all) |
| 326 | this problem, at the cost of much heavier spinlock and memory barrier | 328 | occurances of this problem, at the cost of much heavier spinlock and |
| 327 | operations. | 329 | memory barrier operations. |
| 328 | 330 | ||
| 329 | If unsure, say n here. Even distro kernels should think twice before enabling | 331 | If unsure, say n here. Even distro kernels should think twice before |
| 330 | this: there are few systems, and an unlikely bug. | 332 | enabling this: there are few systems, and an unlikely bug. |
| 331 | 333 | ||
| 332 | config X86_F00F_BUG | 334 | config X86_F00F_BUG |
| 333 | def_bool y | 335 | def_bool y |
diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug index 10d6cc3fd052..e1983fa025d2 100644 --- a/arch/x86/Kconfig.debug +++ b/arch/x86/Kconfig.debug | |||
| @@ -174,28 +174,8 @@ config IOMMU_LEAK | |||
| 174 | Add a simple leak tracer to the IOMMU code. This is useful when you | 174 | Add a simple leak tracer to the IOMMU code. This is useful when you |
| 175 | are debugging a buggy device driver that leaks IOMMU mappings. | 175 | are debugging a buggy device driver that leaks IOMMU mappings. |
| 176 | 176 | ||
| 177 | config MMIOTRACE | 177 | config HAVE_MMIOTRACE_SUPPORT |
| 178 | bool "Memory mapped IO tracing" | 178 | def_bool y |
| 179 | depends on DEBUG_KERNEL && PCI | ||
| 180 | select TRACING | ||
| 181 | help | ||
| 182 | Mmiotrace traces Memory Mapped I/O access and is meant for | ||
| 183 | debugging and reverse engineering. It is called from the ioremap | ||
| 184 | implementation and works via page faults. Tracing is disabled by | ||
| 185 | default and can be enabled at run-time. | ||
| 186 | |||
| 187 | See Documentation/tracers/mmiotrace.txt. | ||
| 188 | If you are not helping to develop drivers, say N. | ||
| 189 | |||
| 190 | config MMIOTRACE_TEST | ||
| 191 | tristate "Test module for mmiotrace" | ||
| 192 | depends on MMIOTRACE && m | ||
| 193 | help | ||
| 194 | This is a dumb module for testing mmiotrace. It is very dangerous | ||
| 195 | as it will write garbage to IO memory starting at a given address. | ||
| 196 | However, it should be safe to use on e.g. unused portion of VRAM. | ||
| 197 | |||
| 198 | Say N, unless you absolutely know what you are doing. | ||
| 199 | 179 | ||
| 200 | # | 180 | # |
| 201 | # IO delay types: | 181 | # IO delay types: |
diff --git a/arch/x86/include/asm/a.out-core.h b/arch/x86/include/asm/a.out-core.h index 37822206083e..3c601f8224be 100644 --- a/arch/x86/include/asm/a.out-core.h +++ b/arch/x86/include/asm/a.out-core.h | |||
| @@ -23,8 +23,6 @@ | |||
| 23 | */ | 23 | */ |
| 24 | static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump) | 24 | static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump) |
| 25 | { | 25 | { |
| 26 | u16 gs; | ||
| 27 | |||
| 28 | /* changed the size calculations - should hopefully work better. lbt */ | 26 | /* changed the size calculations - should hopefully work better. lbt */ |
| 29 | dump->magic = CMAGIC; | 27 | dump->magic = CMAGIC; |
| 30 | dump->start_code = 0; | 28 | dump->start_code = 0; |
| @@ -57,7 +55,7 @@ static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump) | |||
| 57 | dump->regs.ds = (u16)regs->ds; | 55 | dump->regs.ds = (u16)regs->ds; |
| 58 | dump->regs.es = (u16)regs->es; | 56 | dump->regs.es = (u16)regs->es; |
| 59 | dump->regs.fs = (u16)regs->fs; | 57 | dump->regs.fs = (u16)regs->fs; |
| 60 | savesegment(gs, gs); | 58 | savesegment(gs, dump->regs.gs); |
| 61 | dump->regs.orig_ax = regs->orig_ax; | 59 | dump->regs.orig_ax = regs->orig_ax; |
| 62 | dump->regs.ip = regs->ip; | 60 | dump->regs.ip = regs->ip; |
| 63 | dump->regs.cs = (u16)regs->cs; | 61 | dump->regs.cs = (u16)regs->cs; |
diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h index ea408dcba513..7301e60dc4a8 100644 --- a/arch/x86/include/asm/cpufeature.h +++ b/arch/x86/include/asm/cpufeature.h | |||
| @@ -93,6 +93,7 @@ | |||
| 93 | #define X86_FEATURE_XTOPOLOGY (3*32+22) /* cpu topology enum extensions */ | 93 | #define X86_FEATURE_XTOPOLOGY (3*32+22) /* cpu topology enum extensions */ |
| 94 | #define X86_FEATURE_TSC_RELIABLE (3*32+23) /* TSC is known to be reliable */ | 94 | #define X86_FEATURE_TSC_RELIABLE (3*32+23) /* TSC is known to be reliable */ |
| 95 | #define X86_FEATURE_NONSTOP_TSC (3*32+24) /* TSC does not stop in C states */ | 95 | #define X86_FEATURE_NONSTOP_TSC (3*32+24) /* TSC does not stop in C states */ |
| 96 | #define X86_FEATURE_CLFLUSH_MONITOR (3*32+25) /* "" clflush reqd with monitor */ | ||
| 96 | 97 | ||
| 97 | /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ | 98 | /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ |
| 98 | #define X86_FEATURE_XMM3 (4*32+ 0) /* "pni" SSE-3 */ | 99 | #define X86_FEATURE_XMM3 (4*32+ 0) /* "pni" SSE-3 */ |
diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h index ca5ffb2856b6..edc90f23e708 100644 --- a/arch/x86/include/asm/efi.h +++ b/arch/x86/include/asm/efi.h | |||
| @@ -37,8 +37,6 @@ extern unsigned long asmlinkage efi_call_phys(void *, ...); | |||
| 37 | 37 | ||
| 38 | #else /* !CONFIG_X86_32 */ | 38 | #else /* !CONFIG_X86_32 */ |
| 39 | 39 | ||
| 40 | #define MAX_EFI_IO_PAGES 100 | ||
| 41 | |||
| 42 | extern u64 efi_call0(void *fp); | 40 | extern u64 efi_call0(void *fp); |
| 43 | extern u64 efi_call1(void *fp, u64 arg1); | 41 | extern u64 efi_call1(void *fp, u64 arg1); |
| 44 | extern u64 efi_call2(void *fp, u64 arg1, u64 arg2); | 42 | extern u64 efi_call2(void *fp, u64 arg1, u64 arg2); |
diff --git a/arch/x86/include/asm/fixmap_64.h b/arch/x86/include/asm/fixmap_64.h index 00a30ab9b1a5..8be740977db8 100644 --- a/arch/x86/include/asm/fixmap_64.h +++ b/arch/x86/include/asm/fixmap_64.h | |||
| @@ -16,7 +16,6 @@ | |||
| 16 | #include <asm/apicdef.h> | 16 | #include <asm/apicdef.h> |
| 17 | #include <asm/page.h> | 17 | #include <asm/page.h> |
| 18 | #include <asm/vsyscall.h> | 18 | #include <asm/vsyscall.h> |
| 19 | #include <asm/efi.h> | ||
| 20 | 19 | ||
| 21 | /* | 20 | /* |
| 22 | * Here we define all the compile-time 'special' virtual | 21 | * Here we define all the compile-time 'special' virtual |
| @@ -43,9 +42,6 @@ enum fixed_addresses { | |||
| 43 | FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */ | 42 | FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */ |
| 44 | FIX_IO_APIC_BASE_0, | 43 | FIX_IO_APIC_BASE_0, |
| 45 | FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS - 1, | 44 | FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS - 1, |
| 46 | FIX_EFI_IO_MAP_LAST_PAGE, | ||
| 47 | FIX_EFI_IO_MAP_FIRST_PAGE = FIX_EFI_IO_MAP_LAST_PAGE | ||
| 48 | + MAX_EFI_IO_PAGES - 1, | ||
| 49 | #ifdef CONFIG_PARAVIRT | 45 | #ifdef CONFIG_PARAVIRT |
| 50 | FIX_PARAVIRT_BOOTMAP, | 46 | FIX_PARAVIRT_BOOTMAP, |
| 51 | #endif | 47 | #endif |
diff --git a/arch/x86/include/asm/i387.h b/arch/x86/include/asm/i387.h index 48f0004db8c9..71c9e5183982 100644 --- a/arch/x86/include/asm/i387.h +++ b/arch/x86/include/asm/i387.h | |||
| @@ -172,7 +172,13 @@ static inline void __save_init_fpu(struct task_struct *tsk) | |||
| 172 | 172 | ||
| 173 | #else /* CONFIG_X86_32 */ | 173 | #else /* CONFIG_X86_32 */ |
| 174 | 174 | ||
| 175 | extern void finit(void); | 175 | #ifdef CONFIG_MATH_EMULATION |
| 176 | extern void finit_task(struct task_struct *tsk); | ||
| 177 | #else | ||
| 178 | static inline void finit_task(struct task_struct *tsk) | ||
| 179 | { | ||
| 180 | } | ||
| 181 | #endif | ||
| 176 | 182 | ||
| 177 | static inline void tolerant_fwait(void) | 183 | static inline void tolerant_fwait(void) |
| 178 | { | 184 | { |
diff --git a/arch/x86/include/asm/iomap.h b/arch/x86/include/asm/iomap.h index c1f06289b14b..86af26091d6c 100644 --- a/arch/x86/include/asm/iomap.h +++ b/arch/x86/include/asm/iomap.h | |||
| @@ -23,6 +23,9 @@ | |||
| 23 | #include <asm/pgtable.h> | 23 | #include <asm/pgtable.h> |
| 24 | #include <asm/tlbflush.h> | 24 | #include <asm/tlbflush.h> |
| 25 | 25 | ||
| 26 | int | ||
| 27 | is_io_mapping_possible(resource_size_t base, unsigned long size); | ||
| 28 | |||
| 26 | void * | 29 | void * |
| 27 | iomap_atomic_prot_pfn(unsigned long pfn, enum km_type type, pgprot_t prot); | 30 | iomap_atomic_prot_pfn(unsigned long pfn, enum km_type type, pgprot_t prot); |
| 28 | 31 | ||
diff --git a/arch/x86/include/asm/kvm.h b/arch/x86/include/asm/kvm.h index d2e3bf3608af..886c9402ec45 100644 --- a/arch/x86/include/asm/kvm.h +++ b/arch/x86/include/asm/kvm.h | |||
| @@ -9,6 +9,13 @@ | |||
| 9 | #include <linux/types.h> | 9 | #include <linux/types.h> |
| 10 | #include <linux/ioctl.h> | 10 | #include <linux/ioctl.h> |
| 11 | 11 | ||
| 12 | /* Select x86 specific features in <linux/kvm.h> */ | ||
| 13 | #define __KVM_HAVE_PIT | ||
| 14 | #define __KVM_HAVE_IOAPIC | ||
| 15 | #define __KVM_HAVE_DEVICE_ASSIGNMENT | ||
| 16 | #define __KVM_HAVE_MSI | ||
| 17 | #define __KVM_HAVE_USER_NMI | ||
| 18 | |||
| 12 | /* Architectural interrupt line count. */ | 19 | /* Architectural interrupt line count. */ |
| 13 | #define KVM_NR_INTERRUPTS 256 | 20 | #define KVM_NR_INTERRUPTS 256 |
| 14 | 21 | ||
diff --git a/arch/x86/include/asm/math_emu.h b/arch/x86/include/asm/math_emu.h index 5a65b107ad58..031f6266f425 100644 --- a/arch/x86/include/asm/math_emu.h +++ b/arch/x86/include/asm/math_emu.h | |||
| @@ -1,31 +1,18 @@ | |||
| 1 | #ifndef _ASM_X86_MATH_EMU_H | 1 | #ifndef _ASM_X86_MATH_EMU_H |
| 2 | #define _ASM_X86_MATH_EMU_H | 2 | #define _ASM_X86_MATH_EMU_H |
| 3 | 3 | ||
| 4 | #include <asm/ptrace.h> | ||
| 5 | #include <asm/vm86.h> | ||
| 6 | |||
| 4 | /* This structure matches the layout of the data saved to the stack | 7 | /* This structure matches the layout of the data saved to the stack |
| 5 | following a device-not-present interrupt, part of it saved | 8 | following a device-not-present interrupt, part of it saved |
| 6 | automatically by the 80386/80486. | 9 | automatically by the 80386/80486. |
| 7 | */ | 10 | */ |
| 8 | struct info { | 11 | struct math_emu_info { |
| 9 | long ___orig_eip; | 12 | long ___orig_eip; |
| 10 | long ___ebx; | 13 | union { |
| 11 | long ___ecx; | 14 | struct pt_regs *regs; |
| 12 | long ___edx; | 15 | struct kernel_vm86_regs *vm86; |
| 13 | long ___esi; | 16 | }; |
| 14 | long ___edi; | ||
| 15 | long ___ebp; | ||
| 16 | long ___eax; | ||
| 17 | long ___ds; | ||
| 18 | long ___es; | ||
| 19 | long ___fs; | ||
| 20 | long ___orig_eax; | ||
| 21 | long ___eip; | ||
| 22 | long ___cs; | ||
| 23 | long ___eflags; | ||
| 24 | long ___esp; | ||
| 25 | long ___ss; | ||
| 26 | long ___vm86_es; /* This and the following only in vm86 mode */ | ||
| 27 | long ___vm86_ds; | ||
| 28 | long ___vm86_fs; | ||
| 29 | long ___vm86_gs; | ||
| 30 | }; | 17 | }; |
| 31 | #endif /* _ASM_X86_MATH_EMU_H */ | 18 | #endif /* _ASM_X86_MATH_EMU_H */ |
diff --git a/arch/x86/include/asm/mmzone_32.h b/arch/x86/include/asm/mmzone_32.h index 07f1af494ca5..105fb90a0635 100644 --- a/arch/x86/include/asm/mmzone_32.h +++ b/arch/x86/include/asm/mmzone_32.h | |||
| @@ -32,8 +32,6 @@ static inline void get_memcfg_numa(void) | |||
| 32 | get_memcfg_numa_flat(); | 32 | get_memcfg_numa_flat(); |
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | extern int early_pfn_to_nid(unsigned long pfn); | ||
| 36 | |||
| 37 | extern void resume_map_numa_kva(pgd_t *pgd); | 35 | extern void resume_map_numa_kva(pgd_t *pgd); |
| 38 | 36 | ||
| 39 | #else /* !CONFIG_NUMA */ | 37 | #else /* !CONFIG_NUMA */ |
diff --git a/arch/x86/include/asm/mmzone_64.h b/arch/x86/include/asm/mmzone_64.h index a5b3817d4b9e..a29f48c2a322 100644 --- a/arch/x86/include/asm/mmzone_64.h +++ b/arch/x86/include/asm/mmzone_64.h | |||
| @@ -40,8 +40,6 @@ static inline __attribute__((pure)) int phys_to_nid(unsigned long addr) | |||
| 40 | #define node_end_pfn(nid) (NODE_DATA(nid)->node_start_pfn + \ | 40 | #define node_end_pfn(nid) (NODE_DATA(nid)->node_start_pfn + \ |
| 41 | NODE_DATA(nid)->node_spanned_pages) | 41 | NODE_DATA(nid)->node_spanned_pages) |
| 42 | 42 | ||
| 43 | extern int early_pfn_to_nid(unsigned long pfn); | ||
| 44 | |||
| 45 | #ifdef CONFIG_NUMA_EMU | 43 | #ifdef CONFIG_NUMA_EMU |
| 46 | #define FAKE_NODE_MIN_SIZE (64 * 1024 * 1024) | 44 | #define FAKE_NODE_MIN_SIZE (64 * 1024 * 1024) |
| 47 | #define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1UL)) | 45 | #define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1UL)) |
diff --git a/arch/x86/include/asm/mpspec.h b/arch/x86/include/asm/mpspec.h index 62d14ce3cd00..bd22f2a3713f 100644 --- a/arch/x86/include/asm/mpspec.h +++ b/arch/x86/include/asm/mpspec.h | |||
| @@ -60,6 +60,7 @@ extern void mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger, | |||
| 60 | u32 gsi); | 60 | u32 gsi); |
| 61 | extern void mp_config_acpi_legacy_irqs(void); | 61 | extern void mp_config_acpi_legacy_irqs(void); |
| 62 | extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low); | 62 | extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low); |
| 63 | extern int acpi_probe_gsi(void); | ||
| 63 | #ifdef CONFIG_X86_IO_APIC | 64 | #ifdef CONFIG_X86_IO_APIC |
| 64 | extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, | 65 | extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, |
| 65 | u32 gsi, int triggering, int polarity); | 66 | u32 gsi, int triggering, int polarity); |
| @@ -71,6 +72,11 @@ mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, | |||
| 71 | return 0; | 72 | return 0; |
| 72 | } | 73 | } |
| 73 | #endif | 74 | #endif |
| 75 | #else /* !CONFIG_ACPI: */ | ||
| 76 | static inline int acpi_probe_gsi(void) | ||
| 77 | { | ||
| 78 | return 0; | ||
| 79 | } | ||
| 74 | #endif /* CONFIG_ACPI */ | 80 | #endif /* CONFIG_ACPI */ |
| 75 | 81 | ||
| 76 | #define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS) | 82 | #define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS) |
diff --git a/arch/x86/include/asm/page.h b/arch/x86/include/asm/page.h index e9873a2e8695..776579119a00 100644 --- a/arch/x86/include/asm/page.h +++ b/arch/x86/include/asm/page.h | |||
| @@ -57,7 +57,6 @@ typedef struct { pgdval_t pgd; } pgd_t; | |||
| 57 | typedef struct { pgprotval_t pgprot; } pgprot_t; | 57 | typedef struct { pgprotval_t pgprot; } pgprot_t; |
| 58 | 58 | ||
| 59 | extern int page_is_ram(unsigned long pagenr); | 59 | extern int page_is_ram(unsigned long pagenr); |
| 60 | extern int pagerange_is_ram(unsigned long start, unsigned long end); | ||
| 61 | extern int devmem_is_allowed(unsigned long pagenr); | 60 | extern int devmem_is_allowed(unsigned long pagenr); |
| 62 | extern void map_devmem(unsigned long pfn, unsigned long size, | 61 | extern void map_devmem(unsigned long pfn, unsigned long size, |
| 63 | pgprot_t vma_prot); | 62 | pgprot_t vma_prot); |
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h index ba3e2ff6aedc..e299287e8e33 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h | |||
| @@ -1352,14 +1352,7 @@ static inline void arch_leave_lazy_cpu_mode(void) | |||
| 1352 | PVOP_VCALL0(pv_cpu_ops.lazy_mode.leave); | 1352 | PVOP_VCALL0(pv_cpu_ops.lazy_mode.leave); |
| 1353 | } | 1353 | } |
| 1354 | 1354 | ||
| 1355 | static inline void arch_flush_lazy_cpu_mode(void) | 1355 | void arch_flush_lazy_cpu_mode(void); |
| 1356 | { | ||
| 1357 | if (unlikely(paravirt_get_lazy_mode() == PARAVIRT_LAZY_CPU)) { | ||
| 1358 | arch_leave_lazy_cpu_mode(); | ||
| 1359 | arch_enter_lazy_cpu_mode(); | ||
| 1360 | } | ||
| 1361 | } | ||
| 1362 | |||
| 1363 | 1356 | ||
| 1364 | #define __HAVE_ARCH_ENTER_LAZY_MMU_MODE | 1357 | #define __HAVE_ARCH_ENTER_LAZY_MMU_MODE |
| 1365 | static inline void arch_enter_lazy_mmu_mode(void) | 1358 | static inline void arch_enter_lazy_mmu_mode(void) |
| @@ -1372,13 +1365,7 @@ static inline void arch_leave_lazy_mmu_mode(void) | |||
| 1372 | PVOP_VCALL0(pv_mmu_ops.lazy_mode.leave); | 1365 | PVOP_VCALL0(pv_mmu_ops.lazy_mode.leave); |
| 1373 | } | 1366 | } |
| 1374 | 1367 | ||
| 1375 | static inline void arch_flush_lazy_mmu_mode(void) | 1368 | void arch_flush_lazy_mmu_mode(void); |
| 1376 | { | ||
| 1377 | if (unlikely(paravirt_get_lazy_mode() == PARAVIRT_LAZY_MMU)) { | ||
| 1378 | arch_leave_lazy_mmu_mode(); | ||
| 1379 | arch_enter_lazy_mmu_mode(); | ||
| 1380 | } | ||
| 1381 | } | ||
| 1382 | 1369 | ||
| 1383 | static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx, | 1370 | static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx, |
| 1384 | unsigned long phys, pgprot_t flags) | 1371 | unsigned long phys, pgprot_t flags) |
| @@ -1402,6 +1389,7 @@ static inline int __raw_spin_is_contended(struct raw_spinlock *lock) | |||
| 1402 | { | 1389 | { |
| 1403 | return PVOP_CALL1(int, pv_lock_ops.spin_is_contended, lock); | 1390 | return PVOP_CALL1(int, pv_lock_ops.spin_is_contended, lock); |
| 1404 | } | 1391 | } |
| 1392 | #define __raw_spin_is_contended __raw_spin_is_contended | ||
| 1405 | 1393 | ||
| 1406 | static __always_inline void __raw_spin_lock(struct raw_spinlock *lock) | 1394 | static __always_inline void __raw_spin_lock(struct raw_spinlock *lock) |
| 1407 | { | 1395 | { |
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index 06bbcbd66e9c..4f5af8447d54 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h | |||
| @@ -302,16 +302,30 @@ static inline pte_t pte_mkspecial(pte_t pte) | |||
| 302 | 302 | ||
| 303 | extern pteval_t __supported_pte_mask; | 303 | extern pteval_t __supported_pte_mask; |
| 304 | 304 | ||
| 305 | /* | ||
| 306 | * Mask out unsupported bits in a present pgprot. Non-present pgprots | ||
| 307 | * can use those bits for other purposes, so leave them be. | ||
| 308 | */ | ||
| 309 | static inline pgprotval_t massage_pgprot(pgprot_t pgprot) | ||
| 310 | { | ||
| 311 | pgprotval_t protval = pgprot_val(pgprot); | ||
| 312 | |||
| 313 | if (protval & _PAGE_PRESENT) | ||
| 314 | protval &= __supported_pte_mask; | ||
| 315 | |||
| 316 | return protval; | ||
| 317 | } | ||
| 318 | |||
| 305 | static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot) | 319 | static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot) |
| 306 | { | 320 | { |
| 307 | return __pte((((phys_addr_t)page_nr << PAGE_SHIFT) | | 321 | return __pte(((phys_addr_t)page_nr << PAGE_SHIFT) | |
| 308 | pgprot_val(pgprot)) & __supported_pte_mask); | 322 | massage_pgprot(pgprot)); |
| 309 | } | 323 | } |
| 310 | 324 | ||
| 311 | static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot) | 325 | static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot) |
| 312 | { | 326 | { |
| 313 | return __pmd((((phys_addr_t)page_nr << PAGE_SHIFT) | | 327 | return __pmd(((phys_addr_t)page_nr << PAGE_SHIFT) | |
| 314 | pgprot_val(pgprot)) & __supported_pte_mask); | 328 | massage_pgprot(pgprot)); |
| 315 | } | 329 | } |
| 316 | 330 | ||
| 317 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | 331 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |
| @@ -323,7 +337,7 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
| 323 | * the newprot (if present): | 337 | * the newprot (if present): |
| 324 | */ | 338 | */ |
| 325 | val &= _PAGE_CHG_MASK; | 339 | val &= _PAGE_CHG_MASK; |
| 326 | val |= pgprot_val(newprot) & (~_PAGE_CHG_MASK) & __supported_pte_mask; | 340 | val |= massage_pgprot(newprot) & ~_PAGE_CHG_MASK; |
| 327 | 341 | ||
| 328 | return __pte(val); | 342 | return __pte(val); |
| 329 | } | 343 | } |
| @@ -339,7 +353,7 @@ static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot) | |||
| 339 | 353 | ||
| 340 | #define pte_pgprot(x) __pgprot(pte_flags(x) & PTE_FLAGS_MASK) | 354 | #define pte_pgprot(x) __pgprot(pte_flags(x) & PTE_FLAGS_MASK) |
| 341 | 355 | ||
| 342 | #define canon_pgprot(p) __pgprot(pgprot_val(p) & __supported_pte_mask) | 356 | #define canon_pgprot(p) __pgprot(massage_pgprot(p)) |
| 343 | 357 | ||
| 344 | static inline int is_new_memtype_allowed(unsigned long flags, | 358 | static inline int is_new_memtype_allowed(unsigned long flags, |
| 345 | unsigned long new_flags) | 359 | unsigned long new_flags) |
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h index 091cd8855f2e..3bfd5235a9eb 100644 --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h | |||
| @@ -353,7 +353,7 @@ struct i387_soft_struct { | |||
| 353 | u8 no_update; | 353 | u8 no_update; |
| 354 | u8 rm; | 354 | u8 rm; |
| 355 | u8 alimit; | 355 | u8 alimit; |
| 356 | struct info *info; | 356 | struct math_emu_info *info; |
| 357 | u32 entry_eip; | 357 | u32 entry_eip; |
| 358 | }; | 358 | }; |
| 359 | 359 | ||
diff --git a/arch/x86/include/asm/seccomp_32.h b/arch/x86/include/asm/seccomp_32.h index a6ad87b352c4..b811d6f5780c 100644 --- a/arch/x86/include/asm/seccomp_32.h +++ b/arch/x86/include/asm/seccomp_32.h | |||
| @@ -1,12 +1,6 @@ | |||
| 1 | #ifndef _ASM_X86_SECCOMP_32_H | 1 | #ifndef _ASM_X86_SECCOMP_32_H |
| 2 | #define _ASM_X86_SECCOMP_32_H | 2 | #define _ASM_X86_SECCOMP_32_H |
| 3 | 3 | ||
| 4 | #include <linux/thread_info.h> | ||
| 5 | |||
| 6 | #ifdef TIF_32BIT | ||
| 7 | #error "unexpected TIF_32BIT on i386" | ||
| 8 | #endif | ||
| 9 | |||
| 10 | #include <linux/unistd.h> | 4 | #include <linux/unistd.h> |
| 11 | 5 | ||
| 12 | #define __NR_seccomp_read __NR_read | 6 | #define __NR_seccomp_read __NR_read |
diff --git a/arch/x86/include/asm/seccomp_64.h b/arch/x86/include/asm/seccomp_64.h index 4171bb794e9e..84ec1bd161a5 100644 --- a/arch/x86/include/asm/seccomp_64.h +++ b/arch/x86/include/asm/seccomp_64.h | |||
| @@ -1,14 +1,6 @@ | |||
| 1 | #ifndef _ASM_X86_SECCOMP_64_H | 1 | #ifndef _ASM_X86_SECCOMP_64_H |
| 2 | #define _ASM_X86_SECCOMP_64_H | 2 | #define _ASM_X86_SECCOMP_64_H |
| 3 | 3 | ||
| 4 | #include <linux/thread_info.h> | ||
| 5 | |||
| 6 | #ifdef TIF_32BIT | ||
| 7 | #error "unexpected TIF_32BIT on x86_64" | ||
| 8 | #else | ||
| 9 | #define TIF_32BIT TIF_IA32 | ||
| 10 | #endif | ||
| 11 | |||
| 12 | #include <linux/unistd.h> | 4 | #include <linux/unistd.h> |
| 13 | #include <asm/ia32_unistd.h> | 5 | #include <asm/ia32_unistd.h> |
| 14 | 6 | ||
diff --git a/arch/x86/include/asm/spinlock.h b/arch/x86/include/asm/spinlock.h index d17c91981da2..8247e94ac6b1 100644 --- a/arch/x86/include/asm/spinlock.h +++ b/arch/x86/include/asm/spinlock.h | |||
| @@ -245,6 +245,7 @@ static inline int __raw_spin_is_contended(raw_spinlock_t *lock) | |||
| 245 | { | 245 | { |
| 246 | return __ticket_spin_is_contended(lock); | 246 | return __ticket_spin_is_contended(lock); |
| 247 | } | 247 | } |
| 248 | #define __raw_spin_is_contended __raw_spin_is_contended | ||
| 248 | 249 | ||
| 249 | static __always_inline void __raw_spin_lock(raw_spinlock_t *lock) | 250 | static __always_inline void __raw_spin_lock(raw_spinlock_t *lock) |
| 250 | { | 251 | { |
diff --git a/arch/x86/include/asm/traps.h b/arch/x86/include/asm/traps.h index 2ee0a3bceedf..cf3bb053da0b 100644 --- a/arch/x86/include/asm/traps.h +++ b/arch/x86/include/asm/traps.h | |||
| @@ -41,7 +41,7 @@ dotraplinkage void do_int3(struct pt_regs *, long); | |||
| 41 | dotraplinkage void do_overflow(struct pt_regs *, long); | 41 | dotraplinkage void do_overflow(struct pt_regs *, long); |
| 42 | dotraplinkage void do_bounds(struct pt_regs *, long); | 42 | dotraplinkage void do_bounds(struct pt_regs *, long); |
| 43 | dotraplinkage void do_invalid_op(struct pt_regs *, long); | 43 | dotraplinkage void do_invalid_op(struct pt_regs *, long); |
| 44 | dotraplinkage void do_device_not_available(struct pt_regs *, long); | 44 | dotraplinkage void do_device_not_available(struct pt_regs); |
| 45 | dotraplinkage void do_coprocessor_segment_overrun(struct pt_regs *, long); | 45 | dotraplinkage void do_coprocessor_segment_overrun(struct pt_regs *, long); |
| 46 | dotraplinkage void do_invalid_TSS(struct pt_regs *, long); | 46 | dotraplinkage void do_invalid_TSS(struct pt_regs *, long); |
| 47 | dotraplinkage void do_segment_not_present(struct pt_regs *, long); | 47 | dotraplinkage void do_segment_not_present(struct pt_regs *, long); |
| @@ -77,7 +77,7 @@ extern int panic_on_unrecovered_nmi; | |||
| 77 | extern int kstack_depth_to_print; | 77 | extern int kstack_depth_to_print; |
| 78 | 78 | ||
| 79 | void math_error(void __user *); | 79 | void math_error(void __user *); |
| 80 | asmlinkage void math_emulate(long); | 80 | void math_emulate(struct math_emu_info *); |
| 81 | #ifdef CONFIG_X86_32 | 81 | #ifdef CONFIG_X86_32 |
| 82 | unsigned long patch_espfix_desc(unsigned long, unsigned long); | 82 | unsigned long patch_espfix_desc(unsigned long, unsigned long); |
| 83 | #else | 83 | #else |
diff --git a/arch/x86/include/asm/xen/page.h b/arch/x86/include/asm/xen/page.h index 7ef617ef1df3..4bd990ee43df 100644 --- a/arch/x86/include/asm/xen/page.h +++ b/arch/x86/include/asm/xen/page.h | |||
| @@ -137,7 +137,7 @@ static inline pte_t mfn_pte(unsigned long page_nr, pgprot_t pgprot) | |||
| 137 | pte_t pte; | 137 | pte_t pte; |
| 138 | 138 | ||
| 139 | pte.pte = ((phys_addr_t)page_nr << PAGE_SHIFT) | | 139 | pte.pte = ((phys_addr_t)page_nr << PAGE_SHIFT) | |
| 140 | (pgprot_val(pgprot) & __supported_pte_mask); | 140 | massage_pgprot(pgprot); |
| 141 | 141 | ||
| 142 | return pte; | 142 | return pte; |
| 143 | } | 143 | } |
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index d37593c2f438..7678f10c4568 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
| @@ -973,6 +973,29 @@ void __init mp_register_ioapic(int id, u32 address, u32 gsi_base) | |||
| 973 | nr_ioapics++; | 973 | nr_ioapics++; |
| 974 | } | 974 | } |
| 975 | 975 | ||
| 976 | int __init acpi_probe_gsi(void) | ||
| 977 | { | ||
| 978 | int idx; | ||
| 979 | int gsi; | ||
| 980 | int max_gsi = 0; | ||
| 981 | |||
| 982 | if (acpi_disabled) | ||
| 983 | return 0; | ||
| 984 | |||
| 985 | if (!acpi_ioapic) | ||
| 986 | return 0; | ||
| 987 | |||
| 988 | max_gsi = 0; | ||
| 989 | for (idx = 0; idx < nr_ioapics; idx++) { | ||
| 990 | gsi = mp_ioapic_routing[idx].gsi_end; | ||
| 991 | |||
| 992 | if (gsi > max_gsi) | ||
| 993 | max_gsi = gsi; | ||
| 994 | } | ||
| 995 | |||
| 996 | return max_gsi + 1; | ||
| 997 | } | ||
| 998 | |||
| 976 | static void assign_to_mp_irq(struct mp_config_intsrc *m, | 999 | static void assign_to_mp_irq(struct mp_config_intsrc *m, |
| 977 | struct mp_config_intsrc *mp_irq) | 1000 | struct mp_config_intsrc *mp_irq) |
| 978 | { | 1001 | { |
diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c index 707c1f6f95fa..a60c1f3bcb87 100644 --- a/arch/x86/kernel/acpi/sleep.c +++ b/arch/x86/kernel/acpi/sleep.c | |||
| @@ -156,11 +156,11 @@ static int __init acpi_sleep_setup(char *str) | |||
| 156 | #ifdef CONFIG_HIBERNATION | 156 | #ifdef CONFIG_HIBERNATION |
| 157 | if (strncmp(str, "s4_nohwsig", 10) == 0) | 157 | if (strncmp(str, "s4_nohwsig", 10) == 0) |
| 158 | acpi_no_s4_hw_signature(); | 158 | acpi_no_s4_hw_signature(); |
| 159 | if (strncmp(str, "s4_nonvs", 8) == 0) | ||
| 160 | acpi_s4_no_nvs(); | ||
| 159 | #endif | 161 | #endif |
| 160 | if (strncmp(str, "old_ordering", 12) == 0) | 162 | if (strncmp(str, "old_ordering", 12) == 0) |
| 161 | acpi_old_suspend_ordering(); | 163 | acpi_old_suspend_ordering(); |
| 162 | if (strncmp(str, "s4_nonvs", 8) == 0) | ||
| 163 | acpi_s4_no_nvs(); | ||
| 164 | str = strchr(str, ','); | 164 | str = strchr(str, ','); |
| 165 | if (str != NULL) | 165 | if (str != NULL) |
| 166 | str += strspn(str, ", \t"); | 166 | str += strspn(str, ", \t"); |
diff --git a/arch/x86/kernel/acpi/wakeup_64.S b/arch/x86/kernel/acpi/wakeup_64.S index bcc293423a70..96258d9dc974 100644 --- a/arch/x86/kernel/acpi/wakeup_64.S +++ b/arch/x86/kernel/acpi/wakeup_64.S | |||
| @@ -13,7 +13,6 @@ | |||
| 13 | * Hooray, we are in Long 64-bit mode (but still running in low memory) | 13 | * Hooray, we are in Long 64-bit mode (but still running in low memory) |
| 14 | */ | 14 | */ |
| 15 | ENTRY(wakeup_long64) | 15 | ENTRY(wakeup_long64) |
| 16 | wakeup_long64: | ||
| 17 | movq saved_magic, %rax | 16 | movq saved_magic, %rax |
| 18 | movq $0x123456789abcdef0, %rdx | 17 | movq $0x123456789abcdef0, %rdx |
| 19 | cmpq %rdx, %rax | 18 | cmpq %rdx, %rax |
| @@ -34,16 +33,12 @@ wakeup_long64: | |||
| 34 | 33 | ||
| 35 | movq saved_rip, %rax | 34 | movq saved_rip, %rax |
| 36 | jmp *%rax | 35 | jmp *%rax |
| 36 | ENDPROC(wakeup_long64) | ||
| 37 | 37 | ||
| 38 | bogus_64_magic: | 38 | bogus_64_magic: |
| 39 | jmp bogus_64_magic | 39 | jmp bogus_64_magic |
| 40 | 40 | ||
| 41 | .align 2 | 41 | ENTRY(do_suspend_lowlevel) |
| 42 | .p2align 4,,15 | ||
| 43 | .globl do_suspend_lowlevel | ||
| 44 | .type do_suspend_lowlevel,@function | ||
| 45 | do_suspend_lowlevel: | ||
| 46 | .LFB5: | ||
| 47 | subq $8, %rsp | 42 | subq $8, %rsp |
| 48 | xorl %eax, %eax | 43 | xorl %eax, %eax |
| 49 | call save_processor_state | 44 | call save_processor_state |
| @@ -67,7 +62,7 @@ do_suspend_lowlevel: | |||
| 67 | pushfq | 62 | pushfq |
| 68 | popq pt_regs_flags(%rax) | 63 | popq pt_regs_flags(%rax) |
| 69 | 64 | ||
| 70 | movq $.L97, saved_rip(%rip) | 65 | movq $resume_point, saved_rip(%rip) |
| 71 | 66 | ||
| 72 | movq %rsp, saved_rsp | 67 | movq %rsp, saved_rsp |
| 73 | movq %rbp, saved_rbp | 68 | movq %rbp, saved_rbp |
| @@ -78,14 +73,12 @@ do_suspend_lowlevel: | |||
| 78 | addq $8, %rsp | 73 | addq $8, %rsp |
| 79 | movl $3, %edi | 74 | movl $3, %edi |
| 80 | xorl %eax, %eax | 75 | xorl %eax, %eax |
| 81 | jmp acpi_enter_sleep_state | 76 | call acpi_enter_sleep_state |
| 82 | .L97: | 77 | /* in case something went wrong, restore the machine status and go on */ |
| 83 | .p2align 4,,7 | 78 | jmp resume_point |
| 84 | .L99: | ||
| 85 | .align 4 | ||
| 86 | movl $24, %eax | ||
| 87 | movw %ax, %ds | ||
| 88 | 79 | ||
| 80 | .align 4 | ||
| 81 | resume_point: | ||
| 89 | /* We don't restore %rax, it must be 0 anyway */ | 82 | /* We don't restore %rax, it must be 0 anyway */ |
| 90 | movq $saved_context, %rax | 83 | movq $saved_context, %rax |
| 91 | movq saved_context_cr4(%rax), %rbx | 84 | movq saved_context_cr4(%rax), %rbx |
| @@ -117,12 +110,9 @@ do_suspend_lowlevel: | |||
| 117 | xorl %eax, %eax | 110 | xorl %eax, %eax |
| 118 | addq $8, %rsp | 111 | addq $8, %rsp |
| 119 | jmp restore_processor_state | 112 | jmp restore_processor_state |
| 120 | .LFE5: | 113 | ENDPROC(do_suspend_lowlevel) |
| 121 | .Lfe5: | 114 | |
| 122 | .size do_suspend_lowlevel, .Lfe5-do_suspend_lowlevel | ||
| 123 | |||
| 124 | .data | 115 | .data |
| 125 | ALIGN | ||
| 126 | ENTRY(saved_rbp) .quad 0 | 116 | ENTRY(saved_rbp) .quad 0 |
| 127 | ENTRY(saved_rsi) .quad 0 | 117 | ENTRY(saved_rsi) .quad 0 |
| 128 | ENTRY(saved_rdi) .quad 0 | 118 | ENTRY(saved_rdi) .quad 0 |
diff --git a/arch/x86/kernel/apic.c b/arch/x86/kernel/apic.c index 115449f869ee..570f36e44e59 100644 --- a/arch/x86/kernel/apic.c +++ b/arch/x86/kernel/apic.c | |||
| @@ -862,7 +862,7 @@ void clear_local_APIC(void) | |||
| 862 | } | 862 | } |
| 863 | 863 | ||
| 864 | /* lets not touch this if we didn't frob it */ | 864 | /* lets not touch this if we didn't frob it */ |
| 865 | #if defined(CONFIG_X86_MCE_P4THERMAL) || defined(X86_MCE_INTEL) | 865 | #if defined(CONFIG_X86_MCE_P4THERMAL) || defined(CONFIG_X86_MCE_INTEL) |
| 866 | if (maxlvt >= 5) { | 866 | if (maxlvt >= 5) { |
| 867 | v = apic_read(APIC_LVTTHMR); | 867 | v = apic_read(APIC_LVTTHMR); |
| 868 | apic_write(APIC_LVTTHMR, v | APIC_LVT_MASKED); | 868 | apic_write(APIC_LVTTHMR, v | APIC_LVT_MASKED); |
diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c index 98807bb095ad..266ec6c18b6c 100644 --- a/arch/x86/kernel/apm_32.c +++ b/arch/x86/kernel/apm_32.c | |||
| @@ -1192,6 +1192,7 @@ static int suspend(int vetoable) | |||
| 1192 | device_suspend(PMSG_SUSPEND); | 1192 | device_suspend(PMSG_SUSPEND); |
| 1193 | local_irq_disable(); | 1193 | local_irq_disable(); |
| 1194 | device_power_down(PMSG_SUSPEND); | 1194 | device_power_down(PMSG_SUSPEND); |
| 1195 | sysdev_suspend(PMSG_SUSPEND); | ||
| 1195 | 1196 | ||
| 1196 | local_irq_enable(); | 1197 | local_irq_enable(); |
| 1197 | 1198 | ||
| @@ -1208,6 +1209,7 @@ static int suspend(int vetoable) | |||
| 1208 | if (err != APM_SUCCESS) | 1209 | if (err != APM_SUCCESS) |
| 1209 | apm_error("suspend", err); | 1210 | apm_error("suspend", err); |
| 1210 | err = (err == APM_SUCCESS) ? 0 : -EIO; | 1211 | err = (err == APM_SUCCESS) ? 0 : -EIO; |
| 1212 | sysdev_resume(); | ||
| 1211 | device_power_up(PMSG_RESUME); | 1213 | device_power_up(PMSG_RESUME); |
| 1212 | local_irq_enable(); | 1214 | local_irq_enable(); |
| 1213 | device_resume(PMSG_RESUME); | 1215 | device_resume(PMSG_RESUME); |
| @@ -1228,6 +1230,7 @@ static void standby(void) | |||
| 1228 | 1230 | ||
| 1229 | local_irq_disable(); | 1231 | local_irq_disable(); |
| 1230 | device_power_down(PMSG_SUSPEND); | 1232 | device_power_down(PMSG_SUSPEND); |
| 1233 | sysdev_suspend(PMSG_SUSPEND); | ||
| 1231 | local_irq_enable(); | 1234 | local_irq_enable(); |
| 1232 | 1235 | ||
| 1233 | err = set_system_power_state(APM_STATE_STANDBY); | 1236 | err = set_system_power_state(APM_STATE_STANDBY); |
| @@ -1235,6 +1238,7 @@ static void standby(void) | |||
| 1235 | apm_error("standby", err); | 1238 | apm_error("standby", err); |
| 1236 | 1239 | ||
| 1237 | local_irq_disable(); | 1240 | local_irq_disable(); |
| 1241 | sysdev_resume(); | ||
| 1238 | device_power_up(PMSG_RESUME); | 1242 | device_power_up(PMSG_RESUME); |
| 1239 | local_irq_enable(); | 1243 | local_irq_enable(); |
| 1240 | } | 1244 | } |
diff --git a/arch/x86/kernel/cpu/cpufreq/Kconfig b/arch/x86/kernel/cpu/cpufreq/Kconfig index efae3b22a0ff..65792c2cc462 100644 --- a/arch/x86/kernel/cpu/cpufreq/Kconfig +++ b/arch/x86/kernel/cpu/cpufreq/Kconfig | |||
| @@ -245,17 +245,6 @@ config X86_E_POWERSAVER | |||
| 245 | 245 | ||
| 246 | comment "shared options" | 246 | comment "shared options" |
| 247 | 247 | ||
| 248 | config X86_ACPI_CPUFREQ_PROC_INTF | ||
| 249 | bool "/proc/acpi/processor/../performance interface (deprecated)" | ||
| 250 | depends on PROC_FS | ||
| 251 | depends on X86_ACPI_CPUFREQ || X86_POWERNOW_K7_ACPI || X86_POWERNOW_K8_ACPI | ||
| 252 | help | ||
| 253 | This enables the deprecated /proc/acpi/processor/../performance | ||
| 254 | interface. While it is helpful for debugging, the generic, | ||
| 255 | cross-architecture cpufreq interfaces should be used. | ||
| 256 | |||
| 257 | If in doubt, say N. | ||
| 258 | |||
| 259 | config X86_SPEEDSTEP_LIB | 248 | config X86_SPEEDSTEP_LIB |
| 260 | tristate | 249 | tristate |
| 261 | default (X86_SPEEDSTEP_ICH || X86_SPEEDSTEP_SMI || X86_P4_CLOCKMOD) | 250 | default (X86_SPEEDSTEP_ICH || X86_SPEEDSTEP_SMI || X86_P4_CLOCKMOD) |
diff --git a/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c b/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c index b585e04cbc9e..3178c3acd97e 100644 --- a/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c +++ b/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c | |||
| @@ -277,7 +277,6 @@ static struct cpufreq_driver p4clockmod_driver = { | |||
| 277 | .name = "p4-clockmod", | 277 | .name = "p4-clockmod", |
| 278 | .owner = THIS_MODULE, | 278 | .owner = THIS_MODULE, |
| 279 | .attr = p4clockmod_attr, | 279 | .attr = p4clockmod_attr, |
| 280 | .hide_interface = 1, | ||
| 281 | }; | 280 | }; |
| 282 | 281 | ||
| 283 | 282 | ||
diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c index 5c28b37dea11..6428aa17b40e 100644 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c | |||
| @@ -939,10 +939,25 @@ static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data) | |||
| 939 | free_cpumask_var(data->acpi_data.shared_cpu_map); | 939 | free_cpumask_var(data->acpi_data.shared_cpu_map); |
| 940 | } | 940 | } |
| 941 | 941 | ||
| 942 | static int get_transition_latency(struct powernow_k8_data *data) | ||
| 943 | { | ||
| 944 | int max_latency = 0; | ||
| 945 | int i; | ||
| 946 | for (i = 0; i < data->acpi_data.state_count; i++) { | ||
| 947 | int cur_latency = data->acpi_data.states[i].transition_latency | ||
| 948 | + data->acpi_data.states[i].bus_master_latency; | ||
| 949 | if (cur_latency > max_latency) | ||
| 950 | max_latency = cur_latency; | ||
| 951 | } | ||
| 952 | /* value in usecs, needs to be in nanoseconds */ | ||
| 953 | return 1000 * max_latency; | ||
| 954 | } | ||
| 955 | |||
| 942 | #else | 956 | #else |
| 943 | static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) { return -ENODEV; } | 957 | static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) { return -ENODEV; } |
| 944 | static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data) { return; } | 958 | static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data) { return; } |
| 945 | static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index) { return; } | 959 | static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index) { return; } |
| 960 | static int get_transition_latency(struct powernow_k8_data *data) { return 0; } | ||
| 946 | #endif /* CONFIG_X86_POWERNOW_K8_ACPI */ | 961 | #endif /* CONFIG_X86_POWERNOW_K8_ACPI */ |
| 947 | 962 | ||
| 948 | /* Take a frequency, and issue the fid/vid transition command */ | 963 | /* Take a frequency, and issue the fid/vid transition command */ |
| @@ -1142,8 +1157,7 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) | |||
| 1142 | data->cpu = pol->cpu; | 1157 | data->cpu = pol->cpu; |
| 1143 | data->currpstate = HW_PSTATE_INVALID; | 1158 | data->currpstate = HW_PSTATE_INVALID; |
| 1144 | 1159 | ||
| 1145 | rc = powernow_k8_cpu_init_acpi(data); | 1160 | if (powernow_k8_cpu_init_acpi(data)) { |
| 1146 | if (rc) { | ||
| 1147 | /* | 1161 | /* |
| 1148 | * Use the PSB BIOS structure. This is only availabe on | 1162 | * Use the PSB BIOS structure. This is only availabe on |
| 1149 | * an UP version, and is deprecated by AMD. | 1163 | * an UP version, and is deprecated by AMD. |
| @@ -1161,19 +1175,28 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) | |||
| 1161 | "ACPI maintainers and complain to your BIOS " | 1175 | "ACPI maintainers and complain to your BIOS " |
| 1162 | "vendor.\n"); | 1176 | "vendor.\n"); |
| 1163 | #endif | 1177 | #endif |
| 1164 | goto err_out; | 1178 | kfree(data); |
| 1179 | return -ENODEV; | ||
| 1165 | } | 1180 | } |
| 1166 | if (pol->cpu != 0) { | 1181 | if (pol->cpu != 0) { |
| 1167 | printk(KERN_ERR FW_BUG PFX "No ACPI _PSS objects for " | 1182 | printk(KERN_ERR FW_BUG PFX "No ACPI _PSS objects for " |
| 1168 | "CPU other than CPU0. Complain to your BIOS " | 1183 | "CPU other than CPU0. Complain to your BIOS " |
| 1169 | "vendor.\n"); | 1184 | "vendor.\n"); |
| 1170 | goto err_out; | 1185 | kfree(data); |
| 1186 | return -ENODEV; | ||
| 1171 | } | 1187 | } |
| 1172 | rc = find_psb_table(data); | 1188 | rc = find_psb_table(data); |
| 1173 | if (rc) { | 1189 | if (rc) { |
| 1174 | goto err_out; | 1190 | kfree(data); |
| 1191 | return -ENODEV; | ||
| 1175 | } | 1192 | } |
| 1176 | } | 1193 | /* Take a crude guess here. |
| 1194 | * That guess was in microseconds, so multiply with 1000 */ | ||
| 1195 | pol->cpuinfo.transition_latency = ( | ||
| 1196 | ((data->rvo + 8) * data->vstable * VST_UNITS_20US) + | ||
| 1197 | ((1 << data->irt) * 30)) * 1000; | ||
| 1198 | } else /* ACPI _PSS objects available */ | ||
| 1199 | pol->cpuinfo.transition_latency = get_transition_latency(data); | ||
| 1177 | 1200 | ||
| 1178 | /* only run on specific CPU from here on */ | 1201 | /* only run on specific CPU from here on */ |
| 1179 | oldmask = current->cpus_allowed; | 1202 | oldmask = current->cpus_allowed; |
| @@ -1204,11 +1227,6 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) | |||
| 1204 | cpumask_copy(pol->cpus, &per_cpu(cpu_core_map, pol->cpu)); | 1227 | cpumask_copy(pol->cpus, &per_cpu(cpu_core_map, pol->cpu)); |
| 1205 | data->available_cores = pol->cpus; | 1228 | data->available_cores = pol->cpus; |
| 1206 | 1229 | ||
| 1207 | /* Take a crude guess here. | ||
| 1208 | * That guess was in microseconds, so multiply with 1000 */ | ||
| 1209 | pol->cpuinfo.transition_latency = (((data->rvo + 8) * data->vstable * VST_UNITS_20US) | ||
| 1210 | + (3 * (1 << data->irt) * 10)) * 1000; | ||
| 1211 | |||
| 1212 | if (cpu_family == CPU_HW_PSTATE) | 1230 | if (cpu_family == CPU_HW_PSTATE) |
| 1213 | pol->cur = find_khz_freq_from_pstate(data->powernow_table, data->currpstate); | 1231 | pol->cur = find_khz_freq_from_pstate(data->powernow_table, data->currpstate); |
| 1214 | else | 1232 | else |
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index 430e5c38a544..24ff26a38ade 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c | |||
| @@ -291,6 +291,9 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c) | |||
| 291 | ds_init_intel(c); | 291 | ds_init_intel(c); |
| 292 | } | 292 | } |
| 293 | 293 | ||
| 294 | if (c->x86 == 6 && c->x86_model == 29 && cpu_has_clflush) | ||
| 295 | set_cpu_cap(c, X86_FEATURE_CLFLUSH_MONITOR); | ||
| 296 | |||
| 294 | #ifdef CONFIG_X86_64 | 297 | #ifdef CONFIG_X86_64 |
| 295 | if (c->x86 == 15) | 298 | if (c->x86 == 15) |
| 296 | c->x86_cache_alignment = c->x86_clflush_size * 2; | 299 | c->x86_cache_alignment = c->x86_clflush_size * 2; |
diff --git a/arch/x86/kernel/cpu/mcheck/mce_64.c b/arch/x86/kernel/cpu/mcheck/mce_64.c index 1c838032fd37..fe79985ce0f2 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_64.c +++ b/arch/x86/kernel/cpu/mcheck/mce_64.c | |||
| @@ -295,11 +295,11 @@ void do_machine_check(struct pt_regs * regs, long error_code) | |||
| 295 | * If we know that the error was in user space, send a | 295 | * If we know that the error was in user space, send a |
| 296 | * SIGBUS. Otherwise, panic if tolerance is low. | 296 | * SIGBUS. Otherwise, panic if tolerance is low. |
| 297 | * | 297 | * |
| 298 | * do_exit() takes an awful lot of locks and has a slight | 298 | * force_sig() takes an awful lot of locks and has a slight |
| 299 | * risk of deadlocking. | 299 | * risk of deadlocking. |
| 300 | */ | 300 | */ |
| 301 | if (user_space) { | 301 | if (user_space) { |
| 302 | do_exit(SIGBUS); | 302 | force_sig(SIGBUS, current); |
| 303 | } else if (panic_on_oops || tolerant < 2) { | 303 | } else if (panic_on_oops || tolerant < 2) { |
| 304 | mce_panic("Uncorrected machine check", | 304 | mce_panic("Uncorrected machine check", |
| 305 | &panicm, mcestart); | 305 | &panicm, mcestart); |
| @@ -490,7 +490,7 @@ static void __cpuinit mce_cpu_quirks(struct cpuinfo_x86 *c) | |||
| 490 | 490 | ||
| 491 | } | 491 | } |
| 492 | 492 | ||
| 493 | static void __cpuinit mce_cpu_features(struct cpuinfo_x86 *c) | 493 | static void mce_cpu_features(struct cpuinfo_x86 *c) |
| 494 | { | 494 | { |
| 495 | switch (c->x86_vendor) { | 495 | switch (c->x86_vendor) { |
| 496 | case X86_VENDOR_INTEL: | 496 | case X86_VENDOR_INTEL: |
| @@ -734,6 +734,7 @@ __setup("mce=", mcheck_enable); | |||
| 734 | static int mce_resume(struct sys_device *dev) | 734 | static int mce_resume(struct sys_device *dev) |
| 735 | { | 735 | { |
| 736 | mce_init(NULL); | 736 | mce_init(NULL); |
| 737 | mce_cpu_features(¤t_cpu_data); | ||
| 737 | return 0; | 738 | return 0; |
| 738 | } | 739 | } |
| 739 | 740 | ||
diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd_64.c b/arch/x86/kernel/cpu/mcheck/mce_amd_64.c index 8ae8c4ff094d..f2ee0ae29bd6 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_amd_64.c +++ b/arch/x86/kernel/cpu/mcheck/mce_amd_64.c | |||
| @@ -121,7 +121,7 @@ static long threshold_restart_bank(void *_tr) | |||
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | /* cpu init entry point, called from mce.c with preempt off */ | 123 | /* cpu init entry point, called from mce.c with preempt off */ |
| 124 | void __cpuinit mce_amd_feature_init(struct cpuinfo_x86 *c) | 124 | void mce_amd_feature_init(struct cpuinfo_x86 *c) |
| 125 | { | 125 | { |
| 126 | unsigned int bank, block; | 126 | unsigned int bank, block; |
| 127 | unsigned int cpu = smp_processor_id(); | 127 | unsigned int cpu = smp_processor_id(); |
diff --git a/arch/x86/kernel/cpu/mcheck/mce_intel_64.c b/arch/x86/kernel/cpu/mcheck/mce_intel_64.c index 4b48f251fd39..f44c36624360 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_intel_64.c +++ b/arch/x86/kernel/cpu/mcheck/mce_intel_64.c | |||
| @@ -30,7 +30,7 @@ asmlinkage void smp_thermal_interrupt(void) | |||
| 30 | irq_exit(); | 30 | irq_exit(); |
| 31 | } | 31 | } |
| 32 | 32 | ||
| 33 | static void __cpuinit intel_init_thermal(struct cpuinfo_x86 *c) | 33 | static void intel_init_thermal(struct cpuinfo_x86 *c) |
| 34 | { | 34 | { |
| 35 | u32 l, h; | 35 | u32 l, h; |
| 36 | int tm2 = 0; | 36 | int tm2 = 0; |
| @@ -84,7 +84,7 @@ static void __cpuinit intel_init_thermal(struct cpuinfo_x86 *c) | |||
| 84 | return; | 84 | return; |
| 85 | } | 85 | } |
| 86 | 86 | ||
| 87 | void __cpuinit mce_intel_feature_init(struct cpuinfo_x86 *c) | 87 | void mce_intel_feature_init(struct cpuinfo_x86 *c) |
| 88 | { | 88 | { |
| 89 | intel_init_thermal(c); | 89 | intel_init_thermal(c); |
| 90 | } | 90 | } |
diff --git a/arch/x86/kernel/ds.c b/arch/x86/kernel/ds.c index 169a120587be..87b67e3a765a 100644 --- a/arch/x86/kernel/ds.c +++ b/arch/x86/kernel/ds.c | |||
| @@ -729,7 +729,7 @@ struct pebs_tracer *ds_request_pebs(struct task_struct *task, | |||
| 729 | 729 | ||
| 730 | spin_unlock_irqrestore(&ds_lock, irq); | 730 | spin_unlock_irqrestore(&ds_lock, irq); |
| 731 | 731 | ||
| 732 | ds_write_config(tracer->ds.context, &tracer->trace.ds, ds_bts); | 732 | ds_write_config(tracer->ds.context, &tracer->trace.ds, ds_pebs); |
| 733 | ds_resume_pebs(tracer); | 733 | ds_resume_pebs(tracer); |
| 734 | 734 | ||
| 735 | return tracer; | 735 | return tracer; |
| @@ -1029,5 +1029,4 @@ void ds_copy_thread(struct task_struct *tsk, struct task_struct *father) | |||
| 1029 | 1029 | ||
| 1030 | void ds_exit_thread(struct task_struct *tsk) | 1030 | void ds_exit_thread(struct task_struct *tsk) |
| 1031 | { | 1031 | { |
| 1032 | WARN_ON(tsk->thread.ds_ctx); | ||
| 1033 | } | 1032 | } |
diff --git a/arch/x86/kernel/efi.c b/arch/x86/kernel/efi.c index 1119d247fe11..eb1ef3b67dd5 100644 --- a/arch/x86/kernel/efi.c +++ b/arch/x86/kernel/efi.c | |||
| @@ -467,7 +467,7 @@ void __init efi_enter_virtual_mode(void) | |||
| 467 | efi_memory_desc_t *md; | 467 | efi_memory_desc_t *md; |
| 468 | efi_status_t status; | 468 | efi_status_t status; |
| 469 | unsigned long size; | 469 | unsigned long size; |
| 470 | u64 end, systab, addr, npages; | 470 | u64 end, systab, addr, npages, end_pfn; |
| 471 | void *p, *va; | 471 | void *p, *va; |
| 472 | 472 | ||
| 473 | efi.systab = NULL; | 473 | efi.systab = NULL; |
| @@ -479,7 +479,10 @@ void __init efi_enter_virtual_mode(void) | |||
| 479 | size = md->num_pages << EFI_PAGE_SHIFT; | 479 | size = md->num_pages << EFI_PAGE_SHIFT; |
| 480 | end = md->phys_addr + size; | 480 | end = md->phys_addr + size; |
| 481 | 481 | ||
| 482 | if (PFN_UP(end) <= max_low_pfn_mapped) | 482 | end_pfn = PFN_UP(end); |
| 483 | if (end_pfn <= max_low_pfn_mapped | ||
| 484 | || (end_pfn > (1UL << (32 - PAGE_SHIFT)) | ||
| 485 | && end_pfn <= max_pfn_mapped)) | ||
| 483 | va = __va(md->phys_addr); | 486 | va = __va(md->phys_addr); |
| 484 | else | 487 | else |
| 485 | va = efi_ioremap(md->phys_addr, size); | 488 | va = efi_ioremap(md->phys_addr, size); |
diff --git a/arch/x86/kernel/efi_64.c b/arch/x86/kernel/efi_64.c index 652c5287215f..cb783b92c50c 100644 --- a/arch/x86/kernel/efi_64.c +++ b/arch/x86/kernel/efi_64.c | |||
| @@ -99,24 +99,11 @@ void __init efi_call_phys_epilog(void) | |||
| 99 | 99 | ||
| 100 | void __iomem *__init efi_ioremap(unsigned long phys_addr, unsigned long size) | 100 | void __iomem *__init efi_ioremap(unsigned long phys_addr, unsigned long size) |
| 101 | { | 101 | { |
| 102 | static unsigned pages_mapped __initdata; | 102 | unsigned long last_map_pfn; |
| 103 | unsigned i, pages; | ||
| 104 | unsigned long offset; | ||
| 105 | 103 | ||
| 106 | pages = PFN_UP(phys_addr + size) - PFN_DOWN(phys_addr); | 104 | last_map_pfn = init_memory_mapping(phys_addr, phys_addr + size); |
| 107 | offset = phys_addr & ~PAGE_MASK; | 105 | if ((last_map_pfn << PAGE_SHIFT) < phys_addr + size) |
| 108 | phys_addr &= PAGE_MASK; | ||
| 109 | |||
| 110 | if (pages_mapped + pages > MAX_EFI_IO_PAGES) | ||
| 111 | return NULL; | 106 | return NULL; |
| 112 | 107 | ||
| 113 | for (i = 0; i < pages; i++) { | 108 | return (void __iomem *)__va(phys_addr); |
| 114 | __set_fixmap(FIX_EFI_IO_MAP_FIRST_PAGE - pages_mapped, | ||
| 115 | phys_addr, PAGE_KERNEL); | ||
| 116 | phys_addr += PAGE_SIZE; | ||
| 117 | pages_mapped++; | ||
| 118 | } | ||
| 119 | |||
| 120 | return (void __iomem *)__fix_to_virt(FIX_EFI_IO_MAP_FIRST_PAGE - \ | ||
| 121 | (pages_mapped - pages)) + offset; | ||
| 122 | } | 109 | } |
diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c index 1b43086b097a..231bdd3c5b1c 100644 --- a/arch/x86/kernel/ftrace.c +++ b/arch/x86/kernel/ftrace.c | |||
| @@ -488,20 +488,21 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr) | |||
| 488 | * ignore such a protection. | 488 | * ignore such a protection. |
| 489 | */ | 489 | */ |
| 490 | asm volatile( | 490 | asm volatile( |
| 491 | "1: " _ASM_MOV " (%[parent_old]), %[old]\n" | 491 | "1: " _ASM_MOV " (%[parent]), %[old]\n" |
| 492 | "2: " _ASM_MOV " %[return_hooker], (%[parent_replaced])\n" | 492 | "2: " _ASM_MOV " %[return_hooker], (%[parent])\n" |
| 493 | " movl $0, %[faulted]\n" | 493 | " movl $0, %[faulted]\n" |
| 494 | "3:\n" | ||
| 494 | 495 | ||
| 495 | ".section .fixup, \"ax\"\n" | 496 | ".section .fixup, \"ax\"\n" |
| 496 | "3: movl $1, %[faulted]\n" | 497 | "4: movl $1, %[faulted]\n" |
| 498 | " jmp 3b\n" | ||
| 497 | ".previous\n" | 499 | ".previous\n" |
| 498 | 500 | ||
| 499 | _ASM_EXTABLE(1b, 3b) | 501 | _ASM_EXTABLE(1b, 4b) |
| 500 | _ASM_EXTABLE(2b, 3b) | 502 | _ASM_EXTABLE(2b, 4b) |
| 501 | 503 | ||
| 502 | : [parent_replaced] "=r" (parent), [old] "=r" (old), | 504 | : [old] "=r" (old), [faulted] "=r" (faulted) |
| 503 | [faulted] "=r" (faulted) | 505 | : [parent] "r" (parent), [return_hooker] "r" (return_hooker) |
| 504 | : [parent_old] "0" (parent), [return_hooker] "r" (return_hooker) | ||
| 505 | : "memory" | 506 | : "memory" |
| 506 | ); | 507 | ); |
| 507 | 508 | ||
diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c index 64d5ad0b8add..a00545fe5cdd 100644 --- a/arch/x86/kernel/hpet.c +++ b/arch/x86/kernel/hpet.c | |||
| @@ -269,6 +269,8 @@ static void hpet_set_mode(enum clock_event_mode mode, | |||
| 269 | now = hpet_readl(HPET_COUNTER); | 269 | now = hpet_readl(HPET_COUNTER); |
| 270 | cmp = now + (unsigned long) delta; | 270 | cmp = now + (unsigned long) delta; |
| 271 | cfg = hpet_readl(HPET_Tn_CFG(timer)); | 271 | cfg = hpet_readl(HPET_Tn_CFG(timer)); |
| 272 | /* Make sure we use edge triggered interrupts */ | ||
| 273 | cfg &= ~HPET_TN_LEVEL; | ||
| 272 | cfg |= HPET_TN_ENABLE | HPET_TN_PERIODIC | | 274 | cfg |= HPET_TN_ENABLE | HPET_TN_PERIODIC | |
| 273 | HPET_TN_SETVAL | HPET_TN_32BIT; | 275 | HPET_TN_SETVAL | HPET_TN_32BIT; |
| 274 | hpet_writel(cfg, HPET_Tn_CFG(timer)); | 276 | hpet_writel(cfg, HPET_Tn_CFG(timer)); |
| @@ -897,7 +899,7 @@ static unsigned long hpet_rtc_flags; | |||
| 897 | static int hpet_prev_update_sec; | 899 | static int hpet_prev_update_sec; |
| 898 | static struct rtc_time hpet_alarm_time; | 900 | static struct rtc_time hpet_alarm_time; |
| 899 | static unsigned long hpet_pie_count; | 901 | static unsigned long hpet_pie_count; |
| 900 | static unsigned long hpet_t1_cmp; | 902 | static u32 hpet_t1_cmp; |
| 901 | static unsigned long hpet_default_delta; | 903 | static unsigned long hpet_default_delta; |
| 902 | static unsigned long hpet_pie_delta; | 904 | static unsigned long hpet_pie_delta; |
| 903 | static unsigned long hpet_pie_limit; | 905 | static unsigned long hpet_pie_limit; |
| @@ -905,6 +907,14 @@ static unsigned long hpet_pie_limit; | |||
| 905 | static rtc_irq_handler irq_handler; | 907 | static rtc_irq_handler irq_handler; |
| 906 | 908 | ||
| 907 | /* | 909 | /* |
| 910 | * Check that the hpet counter c1 is ahead of the c2 | ||
| 911 | */ | ||
| 912 | static inline int hpet_cnt_ahead(u32 c1, u32 c2) | ||
| 913 | { | ||
| 914 | return (s32)(c2 - c1) < 0; | ||
| 915 | } | ||
| 916 | |||
| 917 | /* | ||
| 908 | * Registers a IRQ handler. | 918 | * Registers a IRQ handler. |
| 909 | */ | 919 | */ |
| 910 | int hpet_register_irq_handler(rtc_irq_handler handler) | 920 | int hpet_register_irq_handler(rtc_irq_handler handler) |
| @@ -1075,7 +1085,7 @@ static void hpet_rtc_timer_reinit(void) | |||
| 1075 | hpet_t1_cmp += delta; | 1085 | hpet_t1_cmp += delta; |
| 1076 | hpet_writel(hpet_t1_cmp, HPET_T1_CMP); | 1086 | hpet_writel(hpet_t1_cmp, HPET_T1_CMP); |
| 1077 | lost_ints++; | 1087 | lost_ints++; |
| 1078 | } while ((long)(hpet_readl(HPET_COUNTER) - hpet_t1_cmp) > 0); | 1088 | } while (!hpet_cnt_ahead(hpet_t1_cmp, hpet_readl(HPET_COUNTER))); |
| 1079 | 1089 | ||
| 1080 | if (lost_ints) { | 1090 | if (lost_ints) { |
| 1081 | if (hpet_rtc_flags & RTC_PIE) | 1091 | if (hpet_rtc_flags & RTC_PIE) |
diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c index b0f61f0dcd0a..f2f8540a7f3d 100644 --- a/arch/x86/kernel/i387.c +++ b/arch/x86/kernel/i387.c | |||
| @@ -136,7 +136,7 @@ int init_fpu(struct task_struct *tsk) | |||
| 136 | #ifdef CONFIG_X86_32 | 136 | #ifdef CONFIG_X86_32 |
| 137 | if (!HAVE_HWFP) { | 137 | if (!HAVE_HWFP) { |
| 138 | memset(tsk->thread.xstate, 0, xstate_size); | 138 | memset(tsk->thread.xstate, 0, xstate_size); |
| 139 | finit(); | 139 | finit_task(tsk); |
| 140 | set_stopped_child_used_math(tsk); | 140 | set_stopped_child_used_math(tsk); |
| 141 | return 0; | 141 | return 0; |
| 142 | } | 142 | } |
diff --git a/arch/x86/kernel/i8237.c b/arch/x86/kernel/i8237.c index dbd6c1d1b638..b42ca694dc68 100644 --- a/arch/x86/kernel/i8237.c +++ b/arch/x86/kernel/i8237.c | |||
| @@ -28,10 +28,10 @@ static int i8237A_resume(struct sys_device *dev) | |||
| 28 | 28 | ||
| 29 | flags = claim_dma_lock(); | 29 | flags = claim_dma_lock(); |
| 30 | 30 | ||
| 31 | dma_outb(DMA1_RESET_REG, 0); | 31 | dma_outb(0, DMA1_RESET_REG); |
| 32 | dma_outb(DMA2_RESET_REG, 0); | 32 | dma_outb(0, DMA2_RESET_REG); |
| 33 | 33 | ||
| 34 | for (i = 0;i < 8;i++) { | 34 | for (i = 0; i < 8; i++) { |
| 35 | set_dma_addr(i, 0x000000); | 35 | set_dma_addr(i, 0x000000); |
| 36 | /* DMA count is a bit weird so this is not 0 */ | 36 | /* DMA count is a bit weird so this is not 0 */ |
| 37 | set_dma_count(i, 1); | 37 | set_dma_count(i, 1); |
| @@ -51,14 +51,14 @@ static int i8237A_suspend(struct sys_device *dev, pm_message_t state) | |||
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | static struct sysdev_class i8237_sysdev_class = { | 53 | static struct sysdev_class i8237_sysdev_class = { |
| 54 | .name = "i8237", | 54 | .name = "i8237", |
| 55 | .suspend = i8237A_suspend, | 55 | .suspend = i8237A_suspend, |
| 56 | .resume = i8237A_resume, | 56 | .resume = i8237A_resume, |
| 57 | }; | 57 | }; |
| 58 | 58 | ||
| 59 | static struct sys_device device_i8237A = { | 59 | static struct sys_device device_i8237A = { |
| 60 | .id = 0, | 60 | .id = 0, |
| 61 | .cls = &i8237_sysdev_class, | 61 | .cls = &i8237_sysdev_class, |
| 62 | }; | 62 | }; |
| 63 | 63 | ||
| 64 | static int __init i8237A_init_sysfs(void) | 64 | static int __init i8237A_init_sysfs(void) |
| @@ -68,5 +68,4 @@ static int __init i8237A_init_sysfs(void) | |||
| 68 | error = sysdev_register(&device_i8237A); | 68 | error = sysdev_register(&device_i8237A); |
| 69 | return error; | 69 | return error; |
| 70 | } | 70 | } |
| 71 | |||
| 72 | device_initcall(i8237A_init_sysfs); | 71 | device_initcall(i8237A_init_sysfs); |
diff --git a/arch/x86/kernel/io_apic.c b/arch/x86/kernel/io_apic.c index 9b0c480c383b..bc7ac4da90d7 100644 --- a/arch/x86/kernel/io_apic.c +++ b/arch/x86/kernel/io_apic.c | |||
| @@ -3841,14 +3841,24 @@ int __init io_apic_get_redir_entries (int ioapic) | |||
| 3841 | 3841 | ||
| 3842 | void __init probe_nr_irqs_gsi(void) | 3842 | void __init probe_nr_irqs_gsi(void) |
| 3843 | { | 3843 | { |
| 3844 | int idx; | ||
| 3845 | int nr = 0; | 3844 | int nr = 0; |
| 3846 | 3845 | ||
| 3847 | for (idx = 0; idx < nr_ioapics; idx++) | 3846 | nr = acpi_probe_gsi(); |
| 3848 | nr += io_apic_get_redir_entries(idx) + 1; | 3847 | if (nr > nr_irqs_gsi) { |
| 3849 | |||
| 3850 | if (nr > nr_irqs_gsi) | ||
| 3851 | nr_irqs_gsi = nr; | 3848 | nr_irqs_gsi = nr; |
| 3849 | } else { | ||
| 3850 | /* for acpi=off or acpi is not compiled in */ | ||
| 3851 | int idx; | ||
| 3852 | |||
| 3853 | nr = 0; | ||
| 3854 | for (idx = 0; idx < nr_ioapics; idx++) | ||
| 3855 | nr += io_apic_get_redir_entries(idx) + 1; | ||
| 3856 | |||
| 3857 | if (nr > nr_irqs_gsi) | ||
| 3858 | nr_irqs_gsi = nr; | ||
| 3859 | } | ||
| 3860 | |||
| 3861 | printk(KERN_DEBUG "nr_irqs_gsi: %d\n", nr_irqs_gsi); | ||
| 3852 | } | 3862 | } |
| 3853 | 3863 | ||
| 3854 | /* -------------------------------------------------------------------------- | 3864 | /* -------------------------------------------------------------------------- |
diff --git a/arch/x86/kernel/olpc.c b/arch/x86/kernel/olpc.c index 7a13fac63a1f..4006c522adc7 100644 --- a/arch/x86/kernel/olpc.c +++ b/arch/x86/kernel/olpc.c | |||
| @@ -203,7 +203,7 @@ static void __init platform_detect(void) | |||
| 203 | static void __init platform_detect(void) | 203 | static void __init platform_detect(void) |
| 204 | { | 204 | { |
| 205 | /* stopgap until OFW support is added to the kernel */ | 205 | /* stopgap until OFW support is added to the kernel */ |
| 206 | olpc_platform_info.boardrev = 0xc2; | 206 | olpc_platform_info.boardrev = olpc_board(0xc2); |
| 207 | } | 207 | } |
| 208 | #endif | 208 | #endif |
| 209 | 209 | ||
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c index e4c8fb608873..c6520a4e85d4 100644 --- a/arch/x86/kernel/paravirt.c +++ b/arch/x86/kernel/paravirt.c | |||
| @@ -268,6 +268,32 @@ enum paravirt_lazy_mode paravirt_get_lazy_mode(void) | |||
| 268 | return __get_cpu_var(paravirt_lazy_mode); | 268 | return __get_cpu_var(paravirt_lazy_mode); |
| 269 | } | 269 | } |
| 270 | 270 | ||
| 271 | void arch_flush_lazy_mmu_mode(void) | ||
| 272 | { | ||
| 273 | preempt_disable(); | ||
| 274 | |||
| 275 | if (paravirt_get_lazy_mode() == PARAVIRT_LAZY_MMU) { | ||
| 276 | WARN_ON(preempt_count() == 1); | ||
| 277 | arch_leave_lazy_mmu_mode(); | ||
| 278 | arch_enter_lazy_mmu_mode(); | ||
| 279 | } | ||
| 280 | |||
| 281 | preempt_enable(); | ||
| 282 | } | ||
| 283 | |||
| 284 | void arch_flush_lazy_cpu_mode(void) | ||
| 285 | { | ||
| 286 | preempt_disable(); | ||
| 287 | |||
| 288 | if (paravirt_get_lazy_mode() == PARAVIRT_LAZY_CPU) { | ||
| 289 | WARN_ON(preempt_count() == 1); | ||
| 290 | arch_leave_lazy_cpu_mode(); | ||
| 291 | arch_enter_lazy_cpu_mode(); | ||
| 292 | } | ||
| 293 | |||
| 294 | preempt_enable(); | ||
| 295 | } | ||
| 296 | |||
| 271 | struct pv_info pv_info = { | 297 | struct pv_info pv_info = { |
| 272 | .name = "bare hardware", | 298 | .name = "bare hardware", |
| 273 | .paravirt_enabled = 0, | 299 | .paravirt_enabled = 0, |
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index e68bb9e30864..6d12f7e37f8c 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c | |||
| @@ -180,6 +180,9 @@ void mwait_idle_with_hints(unsigned long ax, unsigned long cx) | |||
| 180 | 180 | ||
| 181 | trace_power_start(&it, POWER_CSTATE, (ax>>4)+1); | 181 | trace_power_start(&it, POWER_CSTATE, (ax>>4)+1); |
| 182 | if (!need_resched()) { | 182 | if (!need_resched()) { |
| 183 | if (cpu_has(¤t_cpu_data, X86_FEATURE_CLFLUSH_MONITOR)) | ||
| 184 | clflush((void *)¤t_thread_info()->flags); | ||
| 185 | |||
| 183 | __monitor((void *)¤t_thread_info()->flags, 0, 0); | 186 | __monitor((void *)¤t_thread_info()->flags, 0, 0); |
| 184 | smp_mb(); | 187 | smp_mb(); |
| 185 | if (!need_resched()) | 188 | if (!need_resched()) |
| @@ -194,6 +197,9 @@ static void mwait_idle(void) | |||
| 194 | struct power_trace it; | 197 | struct power_trace it; |
| 195 | if (!need_resched()) { | 198 | if (!need_resched()) { |
| 196 | trace_power_start(&it, POWER_CSTATE, 1); | 199 | trace_power_start(&it, POWER_CSTATE, 1); |
| 200 | if (cpu_has(¤t_cpu_data, X86_FEATURE_CLFLUSH_MONITOR)) | ||
| 201 | clflush((void *)¤t_thread_info()->flags); | ||
| 202 | |||
| 197 | __monitor((void *)¤t_thread_info()->flags, 0, 0); | 203 | __monitor((void *)¤t_thread_info()->flags, 0, 0); |
| 198 | smp_mb(); | 204 | smp_mb(); |
| 199 | if (!need_resched()) | 205 | if (!need_resched()) |
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index a546f55c77b4..bd4da2af08ae 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c | |||
| @@ -104,9 +104,6 @@ void cpu_idle(void) | |||
| 104 | check_pgt_cache(); | 104 | check_pgt_cache(); |
| 105 | rmb(); | 105 | rmb(); |
| 106 | 106 | ||
| 107 | if (rcu_pending(cpu)) | ||
| 108 | rcu_check_callbacks(cpu, 0); | ||
| 109 | |||
| 110 | if (cpu_is_offline(cpu)) | 107 | if (cpu_is_offline(cpu)) |
| 111 | play_dead(); | 108 | play_dead(); |
| 112 | 109 | ||
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index 416fb9282f4f..85b4cb5c1980 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c | |||
| @@ -40,6 +40,7 @@ | |||
| 40 | #include <linux/uaccess.h> | 40 | #include <linux/uaccess.h> |
| 41 | #include <linux/io.h> | 41 | #include <linux/io.h> |
| 42 | #include <linux/ftrace.h> | 42 | #include <linux/ftrace.h> |
| 43 | #include <linux/dmi.h> | ||
| 43 | 44 | ||
| 44 | #include <asm/pgtable.h> | 45 | #include <asm/pgtable.h> |
| 45 | #include <asm/system.h> | 46 | #include <asm/system.h> |
| @@ -151,14 +152,18 @@ void __show_regs(struct pt_regs *regs, int all) | |||
| 151 | unsigned long d0, d1, d2, d3, d6, d7; | 152 | unsigned long d0, d1, d2, d3, d6, d7; |
| 152 | unsigned int fsindex, gsindex; | 153 | unsigned int fsindex, gsindex; |
| 153 | unsigned int ds, cs, es; | 154 | unsigned int ds, cs, es; |
| 155 | const char *board; | ||
| 154 | 156 | ||
| 155 | printk("\n"); | 157 | printk("\n"); |
| 156 | print_modules(); | 158 | print_modules(); |
| 157 | printk(KERN_INFO "Pid: %d, comm: %.20s %s %s %.*s\n", | 159 | board = dmi_get_system_info(DMI_PRODUCT_NAME); |
| 160 | if (!board) | ||
| 161 | board = ""; | ||
| 162 | printk(KERN_INFO "Pid: %d, comm: %.20s %s %s %.*s %s\n", | ||
| 158 | current->pid, current->comm, print_tainted(), | 163 | current->pid, current->comm, print_tainted(), |
| 159 | init_utsname()->release, | 164 | init_utsname()->release, |
| 160 | (int)strcspn(init_utsname()->version, " "), | 165 | (int)strcspn(init_utsname()->version, " "), |
| 161 | init_utsname()->version); | 166 | init_utsname()->version, board); |
| 162 | printk(KERN_INFO "RIP: %04lx:[<%016lx>] ", regs->cs & 0xffff, regs->ip); | 167 | printk(KERN_INFO "RIP: %04lx:[<%016lx>] ", regs->cs & 0xffff, regs->ip); |
| 163 | printk_address(regs->ip, 1); | 168 | printk_address(regs->ip, 1); |
| 164 | printk(KERN_INFO "RSP: %04lx:%016lx EFLAGS: %08lx\n", regs->ss, | 169 | printk(KERN_INFO "RSP: %04lx:%016lx EFLAGS: %08lx\n", regs->ss, |
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c index 0a5df5f82fb9..06ca07f6ad86 100644 --- a/arch/x86/kernel/ptrace.c +++ b/arch/x86/kernel/ptrace.c | |||
| @@ -810,12 +810,16 @@ static void ptrace_bts_untrace(struct task_struct *child) | |||
| 810 | 810 | ||
| 811 | static void ptrace_bts_detach(struct task_struct *child) | 811 | static void ptrace_bts_detach(struct task_struct *child) |
| 812 | { | 812 | { |
| 813 | if (unlikely(child->bts)) { | 813 | /* |
| 814 | ds_release_bts(child->bts); | 814 | * Ptrace_detach() races with ptrace_untrace() in case |
| 815 | child->bts = NULL; | 815 | * the child dies and is reaped by another thread. |
| 816 | 816 | * | |
| 817 | ptrace_bts_free_buffer(child); | 817 | * We only do the memory accounting at this point and |
| 818 | } | 818 | * leave the buffer deallocation and the bts tracer |
| 819 | * release to ptrace_bts_untrace() which will be called | ||
| 820 | * later on with tasklist_lock held. | ||
| 821 | */ | ||
| 822 | release_locked_buffer(child->bts_buffer, child->bts_size); | ||
| 819 | } | 823 | } |
| 820 | #else | 824 | #else |
| 821 | static inline void ptrace_bts_fork(struct task_struct *tsk) {} | 825 | static inline void ptrace_bts_fork(struct task_struct *tsk) {} |
| @@ -1384,7 +1388,7 @@ void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, | |||
| 1384 | #ifdef CONFIG_X86_32 | 1388 | #ifdef CONFIG_X86_32 |
| 1385 | # define IS_IA32 1 | 1389 | # define IS_IA32 1 |
| 1386 | #elif defined CONFIG_IA32_EMULATION | 1390 | #elif defined CONFIG_IA32_EMULATION |
| 1387 | # define IS_IA32 test_thread_flag(TIF_IA32) | 1391 | # define IS_IA32 is_compat_task() |
| 1388 | #else | 1392 | #else |
| 1389 | # define IS_IA32 0 | 1393 | # define IS_IA32 0 |
| 1390 | #endif | 1394 | #endif |
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index 2b46eb41643b..4526b3a75ed2 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c | |||
| @@ -217,6 +217,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = { | |||
| 217 | DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq"), | 217 | DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq"), |
| 218 | }, | 218 | }, |
| 219 | }, | 219 | }, |
| 220 | { /* Handle problems with rebooting on Dell XPS710 */ | ||
| 221 | .callback = set_bios_reboot, | ||
| 222 | .ident = "Dell XPS710", | ||
| 223 | .matches = { | ||
| 224 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | ||
| 225 | DMI_MATCH(DMI_PRODUCT_NAME, "Dell XPS710"), | ||
| 226 | }, | ||
| 227 | }, | ||
| 220 | { } | 228 | { } |
| 221 | }; | 229 | }; |
| 222 | 230 | ||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index ae0d8042cf69..6a8811a69324 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
| @@ -607,7 +607,7 @@ struct x86_quirks *x86_quirks __initdata = &default_x86_quirks; | |||
| 607 | static int __init dmi_low_memory_corruption(const struct dmi_system_id *d) | 607 | static int __init dmi_low_memory_corruption(const struct dmi_system_id *d) |
| 608 | { | 608 | { |
| 609 | printk(KERN_NOTICE | 609 | printk(KERN_NOTICE |
| 610 | "%s detected: BIOS may corrupt low RAM, working it around.\n", | 610 | "%s detected: BIOS may corrupt low RAM, working around it.\n", |
| 611 | d->ident); | 611 | d->ident); |
| 612 | 612 | ||
| 613 | e820_update_range(0, 0x10000, E820_RAM, E820_RESERVED); | 613 | e820_update_range(0, 0x10000, E820_RAM, E820_RESERVED); |
| @@ -770,6 +770,9 @@ void __init setup_arch(char **cmdline_p) | |||
| 770 | 770 | ||
| 771 | finish_e820_parsing(); | 771 | finish_e820_parsing(); |
| 772 | 772 | ||
| 773 | if (efi_enabled) | ||
| 774 | efi_init(); | ||
| 775 | |||
| 773 | dmi_scan_machine(); | 776 | dmi_scan_machine(); |
| 774 | 777 | ||
| 775 | dmi_check_system(bad_bios_dmi_table); | 778 | dmi_check_system(bad_bios_dmi_table); |
| @@ -789,8 +792,6 @@ void __init setup_arch(char **cmdline_p) | |||
| 789 | insert_resource(&iomem_resource, &data_resource); | 792 | insert_resource(&iomem_resource, &data_resource); |
| 790 | insert_resource(&iomem_resource, &bss_resource); | 793 | insert_resource(&iomem_resource, &bss_resource); |
| 791 | 794 | ||
| 792 | if (efi_enabled) | ||
| 793 | efi_init(); | ||
| 794 | 795 | ||
| 795 | #ifdef CONFIG_X86_32 | 796 | #ifdef CONFIG_X86_32 |
| 796 | if (ppro_with_ram_bug()) { | 797 | if (ppro_with_ram_bug()) { |
diff --git a/arch/x86/kernel/time_64.c b/arch/x86/kernel/time_64.c index e6e695acd725..241ec3923f61 100644 --- a/arch/x86/kernel/time_64.c +++ b/arch/x86/kernel/time_64.c | |||
| @@ -115,7 +115,7 @@ unsigned long __init calibrate_cpu(void) | |||
| 115 | 115 | ||
| 116 | static struct irqaction irq0 = { | 116 | static struct irqaction irq0 = { |
| 117 | .handler = timer_interrupt, | 117 | .handler = timer_interrupt, |
| 118 | .flags = IRQF_DISABLED | IRQF_IRQPOLL | IRQF_NOBALANCING, | 118 | .flags = IRQF_DISABLED | IRQF_IRQPOLL | IRQF_NOBALANCING | IRQF_TIMER, |
| 119 | .mask = CPU_MASK_NONE, | 119 | .mask = CPU_MASK_NONE, |
| 120 | .name = "timer" | 120 | .name = "timer" |
| 121 | }; | 121 | }; |
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index 98c2d055284b..a9e7548e1790 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
| @@ -99,6 +99,12 @@ static inline void preempt_conditional_sti(struct pt_regs *regs) | |||
| 99 | local_irq_enable(); | 99 | local_irq_enable(); |
| 100 | } | 100 | } |
| 101 | 101 | ||
| 102 | static inline void conditional_cli(struct pt_regs *regs) | ||
| 103 | { | ||
| 104 | if (regs->flags & X86_EFLAGS_IF) | ||
| 105 | local_irq_disable(); | ||
| 106 | } | ||
| 107 | |||
| 102 | static inline void preempt_conditional_cli(struct pt_regs *regs) | 108 | static inline void preempt_conditional_cli(struct pt_regs *regs) |
| 103 | { | 109 | { |
| 104 | if (regs->flags & X86_EFLAGS_IF) | 110 | if (regs->flags & X86_EFLAGS_IF) |
| @@ -626,8 +632,10 @@ clear_dr7: | |||
| 626 | 632 | ||
| 627 | #ifdef CONFIG_X86_32 | 633 | #ifdef CONFIG_X86_32 |
| 628 | debug_vm86: | 634 | debug_vm86: |
| 635 | /* reenable preemption: handle_vm86_trap() might sleep */ | ||
| 636 | dec_preempt_count(); | ||
| 629 | handle_vm86_trap((struct kernel_vm86_regs *) regs, error_code, 1); | 637 | handle_vm86_trap((struct kernel_vm86_regs *) regs, error_code, 1); |
| 630 | preempt_conditional_cli(regs); | 638 | conditional_cli(regs); |
| 631 | return; | 639 | return; |
| 632 | #endif | 640 | #endif |
| 633 | 641 | ||
| @@ -896,7 +904,7 @@ asmlinkage void math_state_restore(void) | |||
| 896 | EXPORT_SYMBOL_GPL(math_state_restore); | 904 | EXPORT_SYMBOL_GPL(math_state_restore); |
| 897 | 905 | ||
| 898 | #ifndef CONFIG_MATH_EMULATION | 906 | #ifndef CONFIG_MATH_EMULATION |
| 899 | asmlinkage void math_emulate(long arg) | 907 | void math_emulate(struct math_emu_info *info) |
| 900 | { | 908 | { |
| 901 | printk(KERN_EMERG | 909 | printk(KERN_EMERG |
| 902 | "math-emulation not enabled and no coprocessor found.\n"); | 910 | "math-emulation not enabled and no coprocessor found.\n"); |
| @@ -906,16 +914,19 @@ asmlinkage void math_emulate(long arg) | |||
| 906 | } | 914 | } |
| 907 | #endif /* CONFIG_MATH_EMULATION */ | 915 | #endif /* CONFIG_MATH_EMULATION */ |
| 908 | 916 | ||
| 909 | dotraplinkage void __kprobes | 917 | dotraplinkage void __kprobes do_device_not_available(struct pt_regs regs) |
| 910 | do_device_not_available(struct pt_regs *regs, long error) | ||
| 911 | { | 918 | { |
| 912 | #ifdef CONFIG_X86_32 | 919 | #ifdef CONFIG_X86_32 |
| 913 | if (read_cr0() & X86_CR0_EM) { | 920 | if (read_cr0() & X86_CR0_EM) { |
| 914 | conditional_sti(regs); | 921 | struct math_emu_info info = { }; |
| 915 | math_emulate(0); | 922 | |
| 923 | conditional_sti(®s); | ||
| 924 | |||
| 925 | info.regs = ®s; | ||
| 926 | math_emulate(&info); | ||
| 916 | } else { | 927 | } else { |
| 917 | math_state_restore(); /* interrupts still off */ | 928 | math_state_restore(); /* interrupts still off */ |
| 918 | conditional_sti(regs); | 929 | conditional_sti(®s); |
| 919 | } | 930 | } |
| 920 | #else | 931 | #else |
| 921 | math_state_restore(); | 932 | math_state_restore(); |
diff --git a/arch/x86/kernel/vmi_32.c b/arch/x86/kernel/vmi_32.c index 1d3302cc2ddf..bef58b4982db 100644 --- a/arch/x86/kernel/vmi_32.c +++ b/arch/x86/kernel/vmi_32.c | |||
| @@ -321,6 +321,16 @@ static void vmi_release_pmd(unsigned long pfn) | |||
| 321 | } | 321 | } |
| 322 | 322 | ||
| 323 | /* | 323 | /* |
| 324 | * We use the pgd_free hook for releasing the pgd page: | ||
| 325 | */ | ||
| 326 | static void vmi_pgd_free(struct mm_struct *mm, pgd_t *pgd) | ||
| 327 | { | ||
| 328 | unsigned long pfn = __pa(pgd) >> PAGE_SHIFT; | ||
| 329 | |||
| 330 | vmi_ops.release_page(pfn, VMI_PAGE_L2); | ||
| 331 | } | ||
| 332 | |||
| 333 | /* | ||
| 324 | * Helper macros for MMU update flags. We can defer updates until a flush | 334 | * Helper macros for MMU update flags. We can defer updates until a flush |
| 325 | * or page invalidation only if the update is to the current address space | 335 | * or page invalidation only if the update is to the current address space |
| 326 | * (otherwise, there is no flush). We must check against init_mm, since | 336 | * (otherwise, there is no flush). We must check against init_mm, since |
| @@ -762,6 +772,7 @@ static inline int __init activate_vmi(void) | |||
| 762 | if (vmi_ops.release_page) { | 772 | if (vmi_ops.release_page) { |
| 763 | pv_mmu_ops.release_pte = vmi_release_pte; | 773 | pv_mmu_ops.release_pte = vmi_release_pte; |
| 764 | pv_mmu_ops.release_pmd = vmi_release_pmd; | 774 | pv_mmu_ops.release_pmd = vmi_release_pmd; |
| 775 | pv_mmu_ops.pgd_free = vmi_pgd_free; | ||
| 765 | } | 776 | } |
| 766 | 777 | ||
| 767 | /* Set linear is needed in all cases */ | 778 | /* Set linear is needed in all cases */ |
diff --git a/arch/x86/kernel/vmiclock_32.c b/arch/x86/kernel/vmiclock_32.c index c4c1f9e09402..e5b088fffa40 100644 --- a/arch/x86/kernel/vmiclock_32.c +++ b/arch/x86/kernel/vmiclock_32.c | |||
| @@ -202,7 +202,7 @@ static irqreturn_t vmi_timer_interrupt(int irq, void *dev_id) | |||
| 202 | static struct irqaction vmi_clock_action = { | 202 | static struct irqaction vmi_clock_action = { |
| 203 | .name = "vmi-timer", | 203 | .name = "vmi-timer", |
| 204 | .handler = vmi_timer_interrupt, | 204 | .handler = vmi_timer_interrupt, |
| 205 | .flags = IRQF_DISABLED | IRQF_NOBALANCING, | 205 | .flags = IRQF_DISABLED | IRQF_NOBALANCING | IRQF_TIMER, |
| 206 | .mask = CPU_MASK_ALL, | 206 | .mask = CPU_MASK_ALL, |
| 207 | }; | 207 | }; |
| 208 | 208 | ||
| @@ -283,10 +283,13 @@ void __devinit vmi_time_ap_init(void) | |||
| 283 | #endif | 283 | #endif |
| 284 | 284 | ||
| 285 | /** vmi clocksource */ | 285 | /** vmi clocksource */ |
| 286 | static struct clocksource clocksource_vmi; | ||
| 286 | 287 | ||
| 287 | static cycle_t read_real_cycles(void) | 288 | static cycle_t read_real_cycles(void) |
| 288 | { | 289 | { |
| 289 | return vmi_timer_ops.get_cycle_counter(VMI_CYCLES_REAL); | 290 | cycle_t ret = (cycle_t)vmi_timer_ops.get_cycle_counter(VMI_CYCLES_REAL); |
| 291 | return ret >= clocksource_vmi.cycle_last ? | ||
| 292 | ret : clocksource_vmi.cycle_last; | ||
| 290 | } | 293 | } |
| 291 | 294 | ||
| 292 | static struct clocksource clocksource_vmi = { | 295 | static struct clocksource clocksource_vmi = { |
diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c index e665d1c623ca..72bd275a9b5c 100644 --- a/arch/x86/kvm/i8254.c +++ b/arch/x86/kvm/i8254.c | |||
| @@ -207,7 +207,7 @@ static int __pit_timer_fn(struct kvm_kpit_state *ps) | |||
| 207 | hrtimer_add_expires_ns(&pt->timer, pt->period); | 207 | hrtimer_add_expires_ns(&pt->timer, pt->period); |
| 208 | pt->scheduled = hrtimer_get_expires_ns(&pt->timer); | 208 | pt->scheduled = hrtimer_get_expires_ns(&pt->timer); |
| 209 | if (pt->period) | 209 | if (pt->period) |
| 210 | ps->channels[0].count_load_time = hrtimer_get_expires(&pt->timer); | 210 | ps->channels[0].count_load_time = ktime_get(); |
| 211 | 211 | ||
| 212 | return (pt->period == 0 ? 0 : 1); | 212 | return (pt->period == 0 ? 0 : 1); |
| 213 | } | 213 | } |
diff --git a/arch/x86/kvm/irq.c b/arch/x86/kvm/irq.c index c019b8edcdb7..cf17ed52f6fb 100644 --- a/arch/x86/kvm/irq.c +++ b/arch/x86/kvm/irq.c | |||
| @@ -87,13 +87,6 @@ void kvm_inject_pending_timer_irqs(struct kvm_vcpu *vcpu) | |||
| 87 | } | 87 | } |
| 88 | EXPORT_SYMBOL_GPL(kvm_inject_pending_timer_irqs); | 88 | EXPORT_SYMBOL_GPL(kvm_inject_pending_timer_irqs); |
| 89 | 89 | ||
| 90 | void kvm_timer_intr_post(struct kvm_vcpu *vcpu, int vec) | ||
| 91 | { | ||
| 92 | kvm_apic_timer_intr_post(vcpu, vec); | ||
| 93 | /* TODO: PIT, RTC etc. */ | ||
| 94 | } | ||
| 95 | EXPORT_SYMBOL_GPL(kvm_timer_intr_post); | ||
| 96 | |||
| 97 | void __kvm_migrate_timers(struct kvm_vcpu *vcpu) | 90 | void __kvm_migrate_timers(struct kvm_vcpu *vcpu) |
| 98 | { | 91 | { |
| 99 | __kvm_migrate_apic_timer(vcpu); | 92 | __kvm_migrate_apic_timer(vcpu); |
diff --git a/arch/x86/kvm/irq.h b/arch/x86/kvm/irq.h index 2bf32a03ceec..82579ee538d0 100644 --- a/arch/x86/kvm/irq.h +++ b/arch/x86/kvm/irq.h | |||
| @@ -89,7 +89,6 @@ static inline int irqchip_in_kernel(struct kvm *kvm) | |||
| 89 | 89 | ||
| 90 | void kvm_pic_reset(struct kvm_kpic_state *s); | 90 | void kvm_pic_reset(struct kvm_kpic_state *s); |
| 91 | 91 | ||
| 92 | void kvm_timer_intr_post(struct kvm_vcpu *vcpu, int vec); | ||
| 93 | void kvm_inject_pending_timer_irqs(struct kvm_vcpu *vcpu); | 92 | void kvm_inject_pending_timer_irqs(struct kvm_vcpu *vcpu); |
| 94 | void kvm_inject_apic_timer_irqs(struct kvm_vcpu *vcpu); | 93 | void kvm_inject_apic_timer_irqs(struct kvm_vcpu *vcpu); |
| 95 | void kvm_apic_nmi_wd_deliver(struct kvm_vcpu *vcpu); | 94 | void kvm_apic_nmi_wd_deliver(struct kvm_vcpu *vcpu); |
diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index afac68c0815c..f0b67f2cdd69 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c | |||
| @@ -35,6 +35,12 @@ | |||
| 35 | #include "kvm_cache_regs.h" | 35 | #include "kvm_cache_regs.h" |
| 36 | #include "irq.h" | 36 | #include "irq.h" |
| 37 | 37 | ||
| 38 | #ifndef CONFIG_X86_64 | ||
| 39 | #define mod_64(x, y) ((x) - (y) * div64_u64(x, y)) | ||
| 40 | #else | ||
| 41 | #define mod_64(x, y) ((x) % (y)) | ||
| 42 | #endif | ||
| 43 | |||
| 38 | #define PRId64 "d" | 44 | #define PRId64 "d" |
| 39 | #define PRIx64 "llx" | 45 | #define PRIx64 "llx" |
| 40 | #define PRIu64 "u" | 46 | #define PRIu64 "u" |
| @@ -511,52 +517,22 @@ static void apic_send_ipi(struct kvm_lapic *apic) | |||
| 511 | 517 | ||
| 512 | static u32 apic_get_tmcct(struct kvm_lapic *apic) | 518 | static u32 apic_get_tmcct(struct kvm_lapic *apic) |
| 513 | { | 519 | { |
| 514 | u64 counter_passed; | 520 | ktime_t remaining; |
| 515 | ktime_t passed, now; | 521 | s64 ns; |
| 516 | u32 tmcct; | 522 | u32 tmcct; |
| 517 | 523 | ||
| 518 | ASSERT(apic != NULL); | 524 | ASSERT(apic != NULL); |
| 519 | 525 | ||
| 520 | now = apic->timer.dev.base->get_time(); | ||
| 521 | tmcct = apic_get_reg(apic, APIC_TMICT); | ||
| 522 | |||
| 523 | /* if initial count is 0, current count should also be 0 */ | 526 | /* if initial count is 0, current count should also be 0 */ |
| 524 | if (tmcct == 0) | 527 | if (apic_get_reg(apic, APIC_TMICT) == 0) |
| 525 | return 0; | 528 | return 0; |
| 526 | 529 | ||
| 527 | if (unlikely(ktime_to_ns(now) <= | 530 | remaining = hrtimer_expires_remaining(&apic->timer.dev); |
| 528 | ktime_to_ns(apic->timer.last_update))) { | 531 | if (ktime_to_ns(remaining) < 0) |
| 529 | /* Wrap around */ | 532 | remaining = ktime_set(0, 0); |
| 530 | passed = ktime_add(( { | 533 | |
| 531 | (ktime_t) { | 534 | ns = mod_64(ktime_to_ns(remaining), apic->timer.period); |
| 532 | .tv64 = KTIME_MAX - | 535 | tmcct = div64_u64(ns, (APIC_BUS_CYCLE_NS * apic->timer.divide_count)); |
| 533 | (apic->timer.last_update).tv64}; } | ||
| 534 | ), now); | ||
| 535 | apic_debug("time elapsed\n"); | ||
| 536 | } else | ||
| 537 | passed = ktime_sub(now, apic->timer.last_update); | ||
| 538 | |||
| 539 | counter_passed = div64_u64(ktime_to_ns(passed), | ||
| 540 | (APIC_BUS_CYCLE_NS * apic->timer.divide_count)); | ||
| 541 | |||
| 542 | if (counter_passed > tmcct) { | ||
| 543 | if (unlikely(!apic_lvtt_period(apic))) { | ||
| 544 | /* one-shot timers stick at 0 until reset */ | ||
| 545 | tmcct = 0; | ||
| 546 | } else { | ||
| 547 | /* | ||
| 548 | * periodic timers reset to APIC_TMICT when they | ||
| 549 | * hit 0. The while loop simulates this happening N | ||
| 550 | * times. (counter_passed %= tmcct) would also work, | ||
| 551 | * but might be slower or not work on 32-bit?? | ||
| 552 | */ | ||
| 553 | while (counter_passed > tmcct) | ||
| 554 | counter_passed -= tmcct; | ||
| 555 | tmcct -= counter_passed; | ||
| 556 | } | ||
| 557 | } else { | ||
| 558 | tmcct -= counter_passed; | ||
| 559 | } | ||
| 560 | 536 | ||
| 561 | return tmcct; | 537 | return tmcct; |
| 562 | } | 538 | } |
| @@ -653,8 +629,6 @@ static void start_apic_timer(struct kvm_lapic *apic) | |||
| 653 | { | 629 | { |
| 654 | ktime_t now = apic->timer.dev.base->get_time(); | 630 | ktime_t now = apic->timer.dev.base->get_time(); |
| 655 | 631 | ||
| 656 | apic->timer.last_update = now; | ||
| 657 | |||
| 658 | apic->timer.period = apic_get_reg(apic, APIC_TMICT) * | 632 | apic->timer.period = apic_get_reg(apic, APIC_TMICT) * |
| 659 | APIC_BUS_CYCLE_NS * apic->timer.divide_count; | 633 | APIC_BUS_CYCLE_NS * apic->timer.divide_count; |
| 660 | atomic_set(&apic->timer.pending, 0); | 634 | atomic_set(&apic->timer.pending, 0); |
| @@ -1110,16 +1084,6 @@ void kvm_inject_apic_timer_irqs(struct kvm_vcpu *vcpu) | |||
| 1110 | } | 1084 | } |
| 1111 | } | 1085 | } |
| 1112 | 1086 | ||
| 1113 | void kvm_apic_timer_intr_post(struct kvm_vcpu *vcpu, int vec) | ||
| 1114 | { | ||
| 1115 | struct kvm_lapic *apic = vcpu->arch.apic; | ||
| 1116 | |||
| 1117 | if (apic && apic_lvt_vector(apic, APIC_LVTT) == vec) | ||
| 1118 | apic->timer.last_update = ktime_add_ns( | ||
| 1119 | apic->timer.last_update, | ||
| 1120 | apic->timer.period); | ||
| 1121 | } | ||
| 1122 | |||
| 1123 | int kvm_get_apic_interrupt(struct kvm_vcpu *vcpu) | 1087 | int kvm_get_apic_interrupt(struct kvm_vcpu *vcpu) |
| 1124 | { | 1088 | { |
| 1125 | int vector = kvm_apic_has_interrupt(vcpu); | 1089 | int vector = kvm_apic_has_interrupt(vcpu); |
diff --git a/arch/x86/kvm/lapic.h b/arch/x86/kvm/lapic.h index 81858881287e..45ab6ee71209 100644 --- a/arch/x86/kvm/lapic.h +++ b/arch/x86/kvm/lapic.h | |||
| @@ -12,7 +12,6 @@ struct kvm_lapic { | |||
| 12 | atomic_t pending; | 12 | atomic_t pending; |
| 13 | s64 period; /* unit: ns */ | 13 | s64 period; /* unit: ns */ |
| 14 | u32 divide_count; | 14 | u32 divide_count; |
| 15 | ktime_t last_update; | ||
| 16 | struct hrtimer dev; | 15 | struct hrtimer dev; |
| 17 | } timer; | 16 | } timer; |
| 18 | struct kvm_vcpu *vcpu; | 17 | struct kvm_vcpu *vcpu; |
| @@ -42,7 +41,6 @@ void kvm_set_apic_base(struct kvm_vcpu *vcpu, u64 data); | |||
| 42 | void kvm_apic_post_state_restore(struct kvm_vcpu *vcpu); | 41 | void kvm_apic_post_state_restore(struct kvm_vcpu *vcpu); |
| 43 | int kvm_lapic_enabled(struct kvm_vcpu *vcpu); | 42 | int kvm_lapic_enabled(struct kvm_vcpu *vcpu); |
| 44 | int kvm_lapic_find_highest_irr(struct kvm_vcpu *vcpu); | 43 | int kvm_lapic_find_highest_irr(struct kvm_vcpu *vcpu); |
| 45 | void kvm_apic_timer_intr_post(struct kvm_vcpu *vcpu, int vec); | ||
| 46 | 44 | ||
| 47 | void kvm_lapic_set_vapic_addr(struct kvm_vcpu *vcpu, gpa_t vapic_addr); | 45 | void kvm_lapic_set_vapic_addr(struct kvm_vcpu *vcpu, gpa_t vapic_addr); |
| 48 | void kvm_lapic_sync_from_vapic(struct kvm_vcpu *vcpu); | 46 | void kvm_lapic_sync_from_vapic(struct kvm_vcpu *vcpu); |
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 83f11c7474a1..2d4477c71473 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
| @@ -1698,8 +1698,13 @@ static int set_spte(struct kvm_vcpu *vcpu, u64 *shadow_pte, | |||
| 1698 | if (largepage) | 1698 | if (largepage) |
| 1699 | spte |= PT_PAGE_SIZE_MASK; | 1699 | spte |= PT_PAGE_SIZE_MASK; |
| 1700 | if (mt_mask) { | 1700 | if (mt_mask) { |
| 1701 | mt_mask = get_memory_type(vcpu, gfn) << | 1701 | if (!kvm_is_mmio_pfn(pfn)) { |
| 1702 | kvm_x86_ops->get_mt_mask_shift(); | 1702 | mt_mask = get_memory_type(vcpu, gfn) << |
| 1703 | kvm_x86_ops->get_mt_mask_shift(); | ||
| 1704 | mt_mask |= VMX_EPT_IGMT_BIT; | ||
| 1705 | } else | ||
| 1706 | mt_mask = MTRR_TYPE_UNCACHABLE << | ||
| 1707 | kvm_x86_ops->get_mt_mask_shift(); | ||
| 1703 | spte |= mt_mask; | 1708 | spte |= mt_mask; |
| 1704 | } | 1709 | } |
| 1705 | 1710 | ||
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 1452851ae258..a9e769e4e251 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
| @@ -1600,7 +1600,6 @@ static void svm_intr_assist(struct kvm_vcpu *vcpu) | |||
| 1600 | /* Okay, we can deliver the interrupt: grab it and update PIC state. */ | 1600 | /* Okay, we can deliver the interrupt: grab it and update PIC state. */ |
| 1601 | intr_vector = kvm_cpu_get_interrupt(vcpu); | 1601 | intr_vector = kvm_cpu_get_interrupt(vcpu); |
| 1602 | svm_inject_irq(svm, intr_vector); | 1602 | svm_inject_irq(svm, intr_vector); |
| 1603 | kvm_timer_intr_post(vcpu, intr_vector); | ||
| 1604 | out: | 1603 | out: |
| 1605 | update_cr8_intercept(vcpu); | 1604 | update_cr8_intercept(vcpu); |
| 1606 | } | 1605 | } |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 6259d7467648..7611af576829 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
| @@ -903,6 +903,7 @@ static int vmx_get_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 *pdata) | |||
| 903 | data = vmcs_readl(GUEST_SYSENTER_ESP); | 903 | data = vmcs_readl(GUEST_SYSENTER_ESP); |
| 904 | break; | 904 | break; |
| 905 | default: | 905 | default: |
| 906 | vmx_load_host_state(to_vmx(vcpu)); | ||
| 906 | msr = find_msr_entry(to_vmx(vcpu), msr_index); | 907 | msr = find_msr_entry(to_vmx(vcpu), msr_index); |
| 907 | if (msr) { | 908 | if (msr) { |
| 908 | data = msr->data; | 909 | data = msr->data; |
| @@ -3285,7 +3286,6 @@ static void vmx_intr_assist(struct kvm_vcpu *vcpu) | |||
| 3285 | } | 3286 | } |
| 3286 | if (vcpu->arch.interrupt.pending) { | 3287 | if (vcpu->arch.interrupt.pending) { |
| 3287 | vmx_inject_irq(vcpu, vcpu->arch.interrupt.nr); | 3288 | vmx_inject_irq(vcpu, vcpu->arch.interrupt.nr); |
| 3288 | kvm_timer_intr_post(vcpu, vcpu->arch.interrupt.nr); | ||
| 3289 | if (kvm_cpu_has_interrupt(vcpu)) | 3289 | if (kvm_cpu_has_interrupt(vcpu)) |
| 3290 | enable_irq_window(vcpu); | 3290 | enable_irq_window(vcpu); |
| 3291 | } | 3291 | } |
| @@ -3687,8 +3687,7 @@ static int __init vmx_init(void) | |||
| 3687 | if (vm_need_ept()) { | 3687 | if (vm_need_ept()) { |
| 3688 | bypass_guest_pf = 0; | 3688 | bypass_guest_pf = 0; |
| 3689 | kvm_mmu_set_base_ptes(VMX_EPT_READABLE_MASK | | 3689 | kvm_mmu_set_base_ptes(VMX_EPT_READABLE_MASK | |
| 3690 | VMX_EPT_WRITABLE_MASK | | 3690 | VMX_EPT_WRITABLE_MASK); |
| 3691 | VMX_EPT_IGMT_BIT); | ||
| 3692 | kvm_mmu_set_mask_ptes(0ull, 0ull, 0ull, 0ull, | 3691 | kvm_mmu_set_mask_ptes(0ull, 0ull, 0ull, 0ull, |
| 3693 | VMX_EPT_EXECUTABLE_MASK, | 3692 | VMX_EPT_EXECUTABLE_MASK, |
| 3694 | VMX_EPT_DEFAULT_MT << VMX_EPT_MT_EPTE_SHIFT); | 3693 | VMX_EPT_DEFAULT_MT << VMX_EPT_MT_EPTE_SHIFT); |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index cc17546a2406..758b7a155ae9 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
| @@ -967,7 +967,6 @@ int kvm_dev_ioctl_check_extension(long ext) | |||
| 967 | case KVM_CAP_MMU_SHADOW_CACHE_CONTROL: | 967 | case KVM_CAP_MMU_SHADOW_CACHE_CONTROL: |
| 968 | case KVM_CAP_SET_TSS_ADDR: | 968 | case KVM_CAP_SET_TSS_ADDR: |
| 969 | case KVM_CAP_EXT_CPUID: | 969 | case KVM_CAP_EXT_CPUID: |
| 970 | case KVM_CAP_CLOCKSOURCE: | ||
| 971 | case KVM_CAP_PIT: | 970 | case KVM_CAP_PIT: |
| 972 | case KVM_CAP_NOP_IO_DELAY: | 971 | case KVM_CAP_NOP_IO_DELAY: |
| 973 | case KVM_CAP_MP_STATE: | 972 | case KVM_CAP_MP_STATE: |
| @@ -992,6 +991,9 @@ int kvm_dev_ioctl_check_extension(long ext) | |||
| 992 | case KVM_CAP_IOMMU: | 991 | case KVM_CAP_IOMMU: |
| 993 | r = iommu_found(); | 992 | r = iommu_found(); |
| 994 | break; | 993 | break; |
| 994 | case KVM_CAP_CLOCKSOURCE: | ||
| 995 | r = boot_cpu_has(X86_FEATURE_CONSTANT_TSC); | ||
| 996 | break; | ||
| 995 | default: | 997 | default: |
| 996 | r = 0; | 998 | r = 0; |
| 997 | break; | 999 | break; |
| @@ -4127,9 +4129,13 @@ static void kvm_free_vcpus(struct kvm *kvm) | |||
| 4127 | 4129 | ||
| 4128 | } | 4130 | } |
| 4129 | 4131 | ||
| 4130 | void kvm_arch_destroy_vm(struct kvm *kvm) | 4132 | void kvm_arch_sync_events(struct kvm *kvm) |
| 4131 | { | 4133 | { |
| 4132 | kvm_free_all_assigned_devices(kvm); | 4134 | kvm_free_all_assigned_devices(kvm); |
| 4135 | } | ||
| 4136 | |||
| 4137 | void kvm_arch_destroy_vm(struct kvm *kvm) | ||
| 4138 | { | ||
| 4133 | kvm_iommu_unmap_guest(kvm); | 4139 | kvm_iommu_unmap_guest(kvm); |
| 4134 | kvm_free_pit(kvm); | 4140 | kvm_free_pit(kvm); |
| 4135 | kfree(kvm->arch.vpic); | 4141 | kfree(kvm->arch.vpic); |
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c index 92f1c6f3e19d..960a8d9c049c 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c | |||
| @@ -343,6 +343,11 @@ static void lguest_cpuid(unsigned int *ax, unsigned int *bx, | |||
| 343 | * flush_tlb_user() for both user and kernel mappings unless | 343 | * flush_tlb_user() for both user and kernel mappings unless |
| 344 | * the Page Global Enable (PGE) feature bit is set. */ | 344 | * the Page Global Enable (PGE) feature bit is set. */ |
| 345 | *dx |= 0x00002000; | 345 | *dx |= 0x00002000; |
| 346 | /* We also lie, and say we're family id 5. 6 or greater | ||
| 347 | * leads to a rdmsr in early_init_intel which we can't handle. | ||
| 348 | * Family ID is returned as bits 8-12 in ax. */ | ||
| 349 | *ax &= 0xFFFFF0FF; | ||
| 350 | *ax |= 0x00000500; | ||
| 346 | break; | 351 | break; |
| 347 | case 0x80000000: | 352 | case 0x80000000: |
| 348 | /* Futureproof this a little: if they ask how much extended | 353 | /* Futureproof this a little: if they ask how much extended |
| @@ -589,19 +594,21 @@ static void __init lguest_init_IRQ(void) | |||
| 589 | /* Some systems map "vectors" to interrupts weirdly. Lguest has | 594 | /* Some systems map "vectors" to interrupts weirdly. Lguest has |
| 590 | * a straightforward 1 to 1 mapping, so force that here. */ | 595 | * a straightforward 1 to 1 mapping, so force that here. */ |
| 591 | __get_cpu_var(vector_irq)[vector] = i; | 596 | __get_cpu_var(vector_irq)[vector] = i; |
| 592 | if (vector != SYSCALL_VECTOR) { | 597 | if (vector != SYSCALL_VECTOR) |
| 593 | set_intr_gate(vector, | 598 | set_intr_gate(vector, interrupt[i]); |
| 594 | interrupt[vector-FIRST_EXTERNAL_VECTOR]); | ||
| 595 | set_irq_chip_and_handler_name(i, &lguest_irq_controller, | ||
| 596 | handle_level_irq, | ||
| 597 | "level"); | ||
| 598 | } | ||
| 599 | } | 599 | } |
| 600 | /* This call is required to set up for 4k stacks, where we have | 600 | /* This call is required to set up for 4k stacks, where we have |
| 601 | * separate stacks for hard and soft interrupts. */ | 601 | * separate stacks for hard and soft interrupts. */ |
| 602 | irq_ctx_init(smp_processor_id()); | 602 | irq_ctx_init(smp_processor_id()); |
| 603 | } | 603 | } |
| 604 | 604 | ||
| 605 | void lguest_setup_irq(unsigned int irq) | ||
| 606 | { | ||
| 607 | irq_to_desc_alloc_cpu(irq, 0); | ||
| 608 | set_irq_chip_and_handler_name(irq, &lguest_irq_controller, | ||
| 609 | handle_level_irq, "level"); | ||
| 610 | } | ||
| 611 | |||
| 605 | /* | 612 | /* |
| 606 | * Time. | 613 | * Time. |
| 607 | * | 614 | * |
diff --git a/arch/x86/mach-default/setup.c b/arch/x86/mach-default/setup.c index a265a7c63190..50b591871128 100644 --- a/arch/x86/mach-default/setup.c +++ b/arch/x86/mach-default/setup.c | |||
| @@ -96,7 +96,7 @@ void __init trap_init_hook(void) | |||
| 96 | 96 | ||
| 97 | static struct irqaction irq0 = { | 97 | static struct irqaction irq0 = { |
| 98 | .handler = timer_interrupt, | 98 | .handler = timer_interrupt, |
| 99 | .flags = IRQF_DISABLED | IRQF_NOBALANCING | IRQF_IRQPOLL, | 99 | .flags = IRQF_DISABLED | IRQF_NOBALANCING | IRQF_IRQPOLL | IRQF_TIMER, |
| 100 | .mask = CPU_MASK_NONE, | 100 | .mask = CPU_MASK_NONE, |
| 101 | .name = "timer" | 101 | .name = "timer" |
| 102 | }; | 102 | }; |
diff --git a/arch/x86/mach-voyager/setup.c b/arch/x86/mach-voyager/setup.c index d914a7996a66..8e5118371f0f 100644 --- a/arch/x86/mach-voyager/setup.c +++ b/arch/x86/mach-voyager/setup.c | |||
| @@ -56,7 +56,7 @@ void __init trap_init_hook(void) | |||
| 56 | 56 | ||
| 57 | static struct irqaction irq0 = { | 57 | static struct irqaction irq0 = { |
| 58 | .handler = timer_interrupt, | 58 | .handler = timer_interrupt, |
| 59 | .flags = IRQF_DISABLED | IRQF_NOBALANCING | IRQF_IRQPOLL, | 59 | .flags = IRQF_DISABLED | IRQF_NOBALANCING | IRQF_IRQPOLL | IRQF_TIMER, |
| 60 | .mask = CPU_MASK_NONE, | 60 | .mask = CPU_MASK_NONE, |
| 61 | .name = "timer" | 61 | .name = "timer" |
| 62 | }; | 62 | }; |
diff --git a/arch/x86/mach-voyager/voyager_smp.c b/arch/x86/mach-voyager/voyager_smp.c index 7ffcdeec4631..b9cc84a2a4fc 100644 --- a/arch/x86/mach-voyager/voyager_smp.c +++ b/arch/x86/mach-voyager/voyager_smp.c | |||
| @@ -65,7 +65,7 @@ static volatile unsigned long smp_invalidate_needed; | |||
| 65 | 65 | ||
| 66 | /* Bitmask of CPUs present in the system - exported by i386_syms.c, used | 66 | /* Bitmask of CPUs present in the system - exported by i386_syms.c, used |
| 67 | * by scheduler but indexed physically */ | 67 | * by scheduler but indexed physically */ |
| 68 | cpumask_t phys_cpu_present_map = CPU_MASK_NONE; | 68 | static cpumask_t voyager_phys_cpu_present_map = CPU_MASK_NONE; |
| 69 | 69 | ||
| 70 | /* The internal functions */ | 70 | /* The internal functions */ |
| 71 | static void send_CPI(__u32 cpuset, __u8 cpi); | 71 | static void send_CPI(__u32 cpuset, __u8 cpi); |
| @@ -366,19 +366,19 @@ void __init find_smp_config(void) | |||
| 366 | /* set up everything for just this CPU, we can alter | 366 | /* set up everything for just this CPU, we can alter |
| 367 | * this as we start the other CPUs later */ | 367 | * this as we start the other CPUs later */ |
| 368 | /* now get the CPU disposition from the extended CMOS */ | 368 | /* now get the CPU disposition from the extended CMOS */ |
| 369 | cpus_addr(phys_cpu_present_map)[0] = | 369 | cpus_addr(voyager_phys_cpu_present_map)[0] = |
| 370 | voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK); | 370 | voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK); |
| 371 | cpus_addr(phys_cpu_present_map)[0] |= | 371 | cpus_addr(voyager_phys_cpu_present_map)[0] |= |
| 372 | voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 1) << 8; | 372 | voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 1) << 8; |
| 373 | cpus_addr(phys_cpu_present_map)[0] |= | 373 | cpus_addr(voyager_phys_cpu_present_map)[0] |= |
| 374 | voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + | 374 | voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + |
| 375 | 2) << 16; | 375 | 2) << 16; |
| 376 | cpus_addr(phys_cpu_present_map)[0] |= | 376 | cpus_addr(voyager_phys_cpu_present_map)[0] |= |
| 377 | voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + | 377 | voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + |
| 378 | 3) << 24; | 378 | 3) << 24; |
| 379 | init_cpu_possible(&phys_cpu_present_map); | 379 | init_cpu_possible(&voyager_phys_cpu_present_map); |
| 380 | printk("VOYAGER SMP: phys_cpu_present_map = 0x%lx\n", | 380 | printk("VOYAGER SMP: voyager_phys_cpu_present_map = 0x%lx\n", |
| 381 | cpus_addr(phys_cpu_present_map)[0]); | 381 | cpus_addr(voyager_phys_cpu_present_map)[0]); |
| 382 | /* Here we set up the VIC to enable SMP */ | 382 | /* Here we set up the VIC to enable SMP */ |
| 383 | /* enable the CPIs by writing the base vector to their register */ | 383 | /* enable the CPIs by writing the base vector to their register */ |
| 384 | outb(VIC_DEFAULT_CPI_BASE, VIC_CPI_BASE_REGISTER); | 384 | outb(VIC_DEFAULT_CPI_BASE, VIC_CPI_BASE_REGISTER); |
| @@ -628,15 +628,15 @@ void __init smp_boot_cpus(void) | |||
| 628 | /* now that the cat has probed the Voyager System Bus, sanity | 628 | /* now that the cat has probed the Voyager System Bus, sanity |
| 629 | * check the cpu map */ | 629 | * check the cpu map */ |
| 630 | if (((voyager_quad_processors | voyager_extended_vic_processors) | 630 | if (((voyager_quad_processors | voyager_extended_vic_processors) |
| 631 | & cpus_addr(phys_cpu_present_map)[0]) != | 631 | & cpus_addr(voyager_phys_cpu_present_map)[0]) != |
| 632 | cpus_addr(phys_cpu_present_map)[0]) { | 632 | cpus_addr(voyager_phys_cpu_present_map)[0]) { |
| 633 | /* should panic */ | 633 | /* should panic */ |
| 634 | printk("\n\n***WARNING*** " | 634 | printk("\n\n***WARNING*** " |
| 635 | "Sanity check of CPU present map FAILED\n"); | 635 | "Sanity check of CPU present map FAILED\n"); |
| 636 | } | 636 | } |
| 637 | } else if (voyager_level == 4) | 637 | } else if (voyager_level == 4) |
| 638 | voyager_extended_vic_processors = | 638 | voyager_extended_vic_processors = |
| 639 | cpus_addr(phys_cpu_present_map)[0]; | 639 | cpus_addr(voyager_phys_cpu_present_map)[0]; |
| 640 | 640 | ||
| 641 | /* this sets up the idle task to run on the current cpu */ | 641 | /* this sets up the idle task to run on the current cpu */ |
| 642 | voyager_extended_cpus = 1; | 642 | voyager_extended_cpus = 1; |
| @@ -670,7 +670,7 @@ void __init smp_boot_cpus(void) | |||
| 670 | /* loop over all the extended VIC CPUs and boot them. The | 670 | /* loop over all the extended VIC CPUs and boot them. The |
| 671 | * Quad CPUs must be bootstrapped by their extended VIC cpu */ | 671 | * Quad CPUs must be bootstrapped by their extended VIC cpu */ |
| 672 | for (i = 0; i < nr_cpu_ids; i++) { | 672 | for (i = 0; i < nr_cpu_ids; i++) { |
| 673 | if (i == boot_cpu_id || !cpu_isset(i, phys_cpu_present_map)) | 673 | if (i == boot_cpu_id || !cpu_isset(i, voyager_phys_cpu_present_map)) |
| 674 | continue; | 674 | continue; |
| 675 | do_boot_cpu(i); | 675 | do_boot_cpu(i); |
| 676 | /* This udelay seems to be needed for the Quad boots | 676 | /* This udelay seems to be needed for the Quad boots |
diff --git a/arch/x86/math-emu/fpu_aux.c b/arch/x86/math-emu/fpu_aux.c index 491e737ce547..aa0987088774 100644 --- a/arch/x86/math-emu/fpu_aux.c +++ b/arch/x86/math-emu/fpu_aux.c | |||
| @@ -30,20 +30,29 @@ static void fclex(void) | |||
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | /* Needs to be externally visible */ | 32 | /* Needs to be externally visible */ |
| 33 | void finit(void) | 33 | void finit_task(struct task_struct *tsk) |
| 34 | { | 34 | { |
| 35 | control_word = 0x037f; | 35 | struct i387_soft_struct *soft = &tsk->thread.xstate->soft; |
| 36 | partial_status = 0; | 36 | struct address *oaddr, *iaddr; |
| 37 | top = 0; /* We don't keep top in the status word internally. */ | 37 | soft->cwd = 0x037f; |
| 38 | fpu_tag_word = 0xffff; | 38 | soft->swd = 0; |
| 39 | soft->ftop = 0; /* We don't keep top in the status word internally. */ | ||
| 40 | soft->twd = 0xffff; | ||
| 39 | /* The behaviour is different from that detailed in | 41 | /* The behaviour is different from that detailed in |
| 40 | Section 15.1.6 of the Intel manual */ | 42 | Section 15.1.6 of the Intel manual */ |
| 41 | operand_address.offset = 0; | 43 | oaddr = (struct address *)&soft->foo; |
| 42 | operand_address.selector = 0; | 44 | oaddr->offset = 0; |
| 43 | instruction_address.offset = 0; | 45 | oaddr->selector = 0; |
| 44 | instruction_address.selector = 0; | 46 | iaddr = (struct address *)&soft->fip; |
| 45 | instruction_address.opcode = 0; | 47 | iaddr->offset = 0; |
| 46 | no_ip_update = 1; | 48 | iaddr->selector = 0; |
| 49 | iaddr->opcode = 0; | ||
| 50 | soft->no_update = 1; | ||
| 51 | } | ||
| 52 | |||
| 53 | void finit(void) | ||
| 54 | { | ||
| 55 | finit_task(current); | ||
| 47 | } | 56 | } |
| 48 | 57 | ||
| 49 | /* | 58 | /* |
diff --git a/arch/x86/math-emu/fpu_entry.c b/arch/x86/math-emu/fpu_entry.c index c7b06feb139b..5d87f586f8d7 100644 --- a/arch/x86/math-emu/fpu_entry.c +++ b/arch/x86/math-emu/fpu_entry.c | |||
| @@ -131,7 +131,7 @@ u_char emulating = 0; | |||
| 131 | static int valid_prefix(u_char *Byte, u_char __user ** fpu_eip, | 131 | static int valid_prefix(u_char *Byte, u_char __user ** fpu_eip, |
| 132 | overrides * override); | 132 | overrides * override); |
| 133 | 133 | ||
| 134 | asmlinkage void math_emulate(long arg) | 134 | void math_emulate(struct math_emu_info *info) |
| 135 | { | 135 | { |
| 136 | u_char FPU_modrm, byte1; | 136 | u_char FPU_modrm, byte1; |
| 137 | unsigned short code; | 137 | unsigned short code; |
| @@ -161,7 +161,7 @@ asmlinkage void math_emulate(long arg) | |||
| 161 | RE_ENTRANT_CHECK_ON; | 161 | RE_ENTRANT_CHECK_ON; |
| 162 | #endif /* RE_ENTRANT_CHECKING */ | 162 | #endif /* RE_ENTRANT_CHECKING */ |
| 163 | 163 | ||
| 164 | SETUP_DATA_AREA(arg); | 164 | FPU_info = info; |
| 165 | 165 | ||
| 166 | FPU_ORIG_EIP = FPU_EIP; | 166 | FPU_ORIG_EIP = FPU_EIP; |
| 167 | 167 | ||
| @@ -659,7 +659,7 @@ static int valid_prefix(u_char *Byte, u_char __user **fpu_eip, | |||
| 659 | } | 659 | } |
| 660 | } | 660 | } |
| 661 | 661 | ||
| 662 | void math_abort(struct info *info, unsigned int signal) | 662 | void math_abort(struct math_emu_info *info, unsigned int signal) |
| 663 | { | 663 | { |
| 664 | FPU_EIP = FPU_ORIG_EIP; | 664 | FPU_EIP = FPU_ORIG_EIP; |
| 665 | current->thread.trap_no = 16; | 665 | current->thread.trap_no = 16; |
diff --git a/arch/x86/math-emu/fpu_proto.h b/arch/x86/math-emu/fpu_proto.h index aa49b6a0d850..9779df436b7d 100644 --- a/arch/x86/math-emu/fpu_proto.h +++ b/arch/x86/math-emu/fpu_proto.h | |||
| @@ -51,8 +51,8 @@ extern void ffreep(void); | |||
| 51 | extern void fst_i_(void); | 51 | extern void fst_i_(void); |
| 52 | extern void fstp_i(void); | 52 | extern void fstp_i(void); |
| 53 | /* fpu_entry.c */ | 53 | /* fpu_entry.c */ |
| 54 | asmlinkage extern void math_emulate(long arg); | 54 | extern void math_emulate(struct math_emu_info *info); |
| 55 | extern void math_abort(struct info *info, unsigned int signal); | 55 | extern void math_abort(struct math_emu_info *info, unsigned int signal); |
| 56 | /* fpu_etc.c */ | 56 | /* fpu_etc.c */ |
| 57 | extern void FPU_etc(void); | 57 | extern void FPU_etc(void); |
| 58 | /* fpu_tags.c */ | 58 | /* fpu_tags.c */ |
diff --git a/arch/x86/math-emu/fpu_system.h b/arch/x86/math-emu/fpu_system.h index 13488fa153e0..50fa0ec2c8a5 100644 --- a/arch/x86/math-emu/fpu_system.h +++ b/arch/x86/math-emu/fpu_system.h | |||
| @@ -16,10 +16,6 @@ | |||
| 16 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
| 17 | #include <linux/mm.h> | 17 | #include <linux/mm.h> |
| 18 | 18 | ||
| 19 | /* This sets the pointer FPU_info to point to the argument part | ||
| 20 | of the stack frame of math_emulate() */ | ||
| 21 | #define SETUP_DATA_AREA(arg) FPU_info = (struct info *) &arg | ||
| 22 | |||
| 23 | /* s is always from a cpu register, and the cpu does bounds checking | 19 | /* s is always from a cpu register, and the cpu does bounds checking |
| 24 | * during register load --> no further bounds checks needed */ | 20 | * during register load --> no further bounds checks needed */ |
| 25 | #define LDT_DESCRIPTOR(s) (((struct desc_struct *)current->mm->context.ldt)[(s) >> 3]) | 21 | #define LDT_DESCRIPTOR(s) (((struct desc_struct *)current->mm->context.ldt)[(s) >> 3]) |
| @@ -38,12 +34,12 @@ | |||
| 38 | #define I387 (current->thread.xstate) | 34 | #define I387 (current->thread.xstate) |
| 39 | #define FPU_info (I387->soft.info) | 35 | #define FPU_info (I387->soft.info) |
| 40 | 36 | ||
| 41 | #define FPU_CS (*(unsigned short *) &(FPU_info->___cs)) | 37 | #define FPU_CS (*(unsigned short *) &(FPU_info->regs->cs)) |
| 42 | #define FPU_SS (*(unsigned short *) &(FPU_info->___ss)) | 38 | #define FPU_SS (*(unsigned short *) &(FPU_info->regs->ss)) |
| 43 | #define FPU_DS (*(unsigned short *) &(FPU_info->___ds)) | 39 | #define FPU_DS (*(unsigned short *) &(FPU_info->regs->ds)) |
| 44 | #define FPU_EAX (FPU_info->___eax) | 40 | #define FPU_EAX (FPU_info->regs->ax) |
| 45 | #define FPU_EFLAGS (FPU_info->___eflags) | 41 | #define FPU_EFLAGS (FPU_info->regs->flags) |
| 46 | #define FPU_EIP (FPU_info->___eip) | 42 | #define FPU_EIP (FPU_info->regs->ip) |
| 47 | #define FPU_ORIG_EIP (FPU_info->___orig_eip) | 43 | #define FPU_ORIG_EIP (FPU_info->___orig_eip) |
| 48 | 44 | ||
| 49 | #define FPU_lookahead (I387->soft.lookahead) | 45 | #define FPU_lookahead (I387->soft.lookahead) |
diff --git a/arch/x86/math-emu/get_address.c b/arch/x86/math-emu/get_address.c index d701e2b39e44..420b3b6e3915 100644 --- a/arch/x86/math-emu/get_address.c +++ b/arch/x86/math-emu/get_address.c | |||
| @@ -29,46 +29,43 @@ | |||
| 29 | #define FPU_WRITE_BIT 0x10 | 29 | #define FPU_WRITE_BIT 0x10 |
| 30 | 30 | ||
| 31 | static int reg_offset[] = { | 31 | static int reg_offset[] = { |
| 32 | offsetof(struct info, ___eax), | 32 | offsetof(struct pt_regs, ax), |
| 33 | offsetof(struct info, ___ecx), | 33 | offsetof(struct pt_regs, cx), |
| 34 | offsetof(struct info, ___edx), | 34 | offsetof(struct pt_regs, dx), |
| 35 | offsetof(struct info, ___ebx), | 35 | offsetof(struct pt_regs, bx), |
| 36 | offsetof(struct info, ___esp), | 36 | offsetof(struct pt_regs, sp), |
| 37 | offsetof(struct info, ___ebp), | 37 | offsetof(struct pt_regs, bp), |
| 38 | offsetof(struct info, ___esi), | 38 | offsetof(struct pt_regs, si), |
| 39 | offsetof(struct info, ___edi) | 39 | offsetof(struct pt_regs, di) |
| 40 | }; | 40 | }; |
| 41 | 41 | ||
| 42 | #define REG_(x) (*(long *)(reg_offset[(x)]+(u_char *) FPU_info)) | 42 | #define REG_(x) (*(long *)(reg_offset[(x)] + (u_char *)FPU_info->regs)) |
| 43 | 43 | ||
| 44 | static int reg_offset_vm86[] = { | 44 | static int reg_offset_vm86[] = { |
| 45 | offsetof(struct info, ___cs), | 45 | offsetof(struct pt_regs, cs), |
| 46 | offsetof(struct info, ___vm86_ds), | 46 | offsetof(struct kernel_vm86_regs, ds), |
| 47 | offsetof(struct info, ___vm86_es), | 47 | offsetof(struct kernel_vm86_regs, es), |
| 48 | offsetof(struct info, ___vm86_fs), | 48 | offsetof(struct kernel_vm86_regs, fs), |
| 49 | offsetof(struct info, ___vm86_gs), | 49 | offsetof(struct kernel_vm86_regs, gs), |
| 50 | offsetof(struct info, ___ss), | 50 | offsetof(struct pt_regs, ss), |
| 51 | offsetof(struct info, ___vm86_ds) | 51 | offsetof(struct kernel_vm86_regs, ds) |
| 52 | }; | 52 | }; |
| 53 | 53 | ||
| 54 | #define VM86_REG_(x) (*(unsigned short *) \ | 54 | #define VM86_REG_(x) (*(unsigned short *) \ |
| 55 | (reg_offset_vm86[((unsigned)x)]+(u_char *) FPU_info)) | 55 | (reg_offset_vm86[((unsigned)x)] + (u_char *)FPU_info->regs)) |
| 56 | |||
| 57 | /* This dummy, gs is not saved on the stack. */ | ||
| 58 | #define ___GS ___ds | ||
| 59 | 56 | ||
| 60 | static int reg_offset_pm[] = { | 57 | static int reg_offset_pm[] = { |
| 61 | offsetof(struct info, ___cs), | 58 | offsetof(struct pt_regs, cs), |
| 62 | offsetof(struct info, ___ds), | 59 | offsetof(struct pt_regs, ds), |
| 63 | offsetof(struct info, ___es), | 60 | offsetof(struct pt_regs, es), |
| 64 | offsetof(struct info, ___fs), | 61 | offsetof(struct pt_regs, fs), |
| 65 | offsetof(struct info, ___GS), | 62 | offsetof(struct pt_regs, ds), /* dummy, not saved on stack */ |
| 66 | offsetof(struct info, ___ss), | 63 | offsetof(struct pt_regs, ss), |
| 67 | offsetof(struct info, ___ds) | 64 | offsetof(struct pt_regs, ds) |
| 68 | }; | 65 | }; |
| 69 | 66 | ||
| 70 | #define PM_REG_(x) (*(unsigned short *) \ | 67 | #define PM_REG_(x) (*(unsigned short *) \ |
| 71 | (reg_offset_pm[((unsigned)x)]+(u_char *) FPU_info)) | 68 | (reg_offset_pm[((unsigned)x)] + (u_char *)FPU_info->regs)) |
| 72 | 69 | ||
| 73 | /* Decode the SIB byte. This function assumes mod != 0 */ | 70 | /* Decode the SIB byte. This function assumes mod != 0 */ |
| 74 | static int sib(int mod, unsigned long *fpu_eip) | 71 | static int sib(int mod, unsigned long *fpu_eip) |
| @@ -349,34 +346,34 @@ void __user *FPU_get_address_16(u_char FPU_modrm, unsigned long *fpu_eip, | |||
| 349 | } | 346 | } |
| 350 | switch (rm) { | 347 | switch (rm) { |
| 351 | case 0: | 348 | case 0: |
| 352 | address += FPU_info->___ebx + FPU_info->___esi; | 349 | address += FPU_info->regs->bx + FPU_info->regs->si; |
| 353 | break; | 350 | break; |
| 354 | case 1: | 351 | case 1: |
| 355 | address += FPU_info->___ebx + FPU_info->___edi; | 352 | address += FPU_info->regs->bx + FPU_info->regs->di; |
| 356 | break; | 353 | break; |
| 357 | case 2: | 354 | case 2: |
| 358 | address += FPU_info->___ebp + FPU_info->___esi; | 355 | address += FPU_info->regs->bp + FPU_info->regs->si; |
| 359 | if (addr_modes.override.segment == PREFIX_DEFAULT) | 356 | if (addr_modes.override.segment == PREFIX_DEFAULT) |
| 360 | addr_modes.override.segment = PREFIX_SS_; | 357 | addr_modes.override.segment = PREFIX_SS_; |
| 361 | break; | 358 | break; |
| 362 | case 3: | 359 | case 3: |
| 363 | address += FPU_info->___ebp + FPU_info->___edi; | 360 | address += FPU_info->regs->bp + FPU_info->regs->di; |
| 364 | if (addr_modes.override.segment == PREFIX_DEFAULT) | 361 | if (addr_modes.override.segment == PREFIX_DEFAULT) |
| 365 | addr_modes.override.segment = PREFIX_SS_; | 362 | addr_modes.override.segment = PREFIX_SS_; |
| 366 | break; | 363 | break; |
| 367 | case 4: | 364 | case 4: |
| 368 | address += FPU_info->___esi; | 365 | address += FPU_info->regs->si; |
| 369 | break; | 366 | break; |
| 370 | case 5: | 367 | case 5: |
| 371 | address += FPU_info->___edi; | 368 | address += FPU_info->regs->di; |
| 372 | break; | 369 | break; |
| 373 | case 6: | 370 | case 6: |
| 374 | address += FPU_info->___ebp; | 371 | address += FPU_info->regs->bp; |
| 375 | if (addr_modes.override.segment == PREFIX_DEFAULT) | 372 | if (addr_modes.override.segment == PREFIX_DEFAULT) |
| 376 | addr_modes.override.segment = PREFIX_SS_; | 373 | addr_modes.override.segment = PREFIX_SS_; |
| 377 | break; | 374 | break; |
| 378 | case 7: | 375 | case 7: |
| 379 | address += FPU_info->___ebx; | 376 | address += FPU_info->regs->bx; |
| 380 | break; | 377 | break; |
| 381 | } | 378 | } |
| 382 | 379 | ||
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index e6d36b490250..b1352250096e 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c | |||
| @@ -714,6 +714,8 @@ unsigned long __init_refok init_memory_mapping(unsigned long start, | |||
| 714 | pos = start_pfn << PAGE_SHIFT; | 714 | pos = start_pfn << PAGE_SHIFT; |
| 715 | end_pfn = ((pos + (PMD_SIZE - 1)) >> PMD_SHIFT) | 715 | end_pfn = ((pos + (PMD_SIZE - 1)) >> PMD_SHIFT) |
| 716 | << (PMD_SHIFT - PAGE_SHIFT); | 716 | << (PMD_SHIFT - PAGE_SHIFT); |
| 717 | if (end_pfn > (end >> PAGE_SHIFT)) | ||
| 718 | end_pfn = end >> PAGE_SHIFT; | ||
| 717 | if (start_pfn < end_pfn) { | 719 | if (start_pfn < end_pfn) { |
| 718 | nr_range = save_mr(mr, nr_range, start_pfn, end_pfn, 0); | 720 | nr_range = save_mr(mr, nr_range, start_pfn, end_pfn, 0); |
| 719 | pos = end_pfn << PAGE_SHIFT; | 721 | pos = end_pfn << PAGE_SHIFT; |
diff --git a/arch/x86/mm/iomap_32.c b/arch/x86/mm/iomap_32.c index ca53224fc56c..04102d42ff42 100644 --- a/arch/x86/mm/iomap_32.c +++ b/arch/x86/mm/iomap_32.c | |||
| @@ -20,6 +20,17 @@ | |||
| 20 | #include <asm/pat.h> | 20 | #include <asm/pat.h> |
| 21 | #include <linux/module.h> | 21 | #include <linux/module.h> |
| 22 | 22 | ||
| 23 | int is_io_mapping_possible(resource_size_t base, unsigned long size) | ||
| 24 | { | ||
| 25 | #ifndef CONFIG_X86_PAE | ||
| 26 | /* There is no way to map greater than 1 << 32 address without PAE */ | ||
| 27 | if (base + size > 0x100000000ULL) | ||
| 28 | return 0; | ||
| 29 | #endif | ||
| 30 | return 1; | ||
| 31 | } | ||
| 32 | EXPORT_SYMBOL_GPL(is_io_mapping_possible); | ||
| 33 | |||
| 23 | /* Map 'pfn' using fixed map 'type' and protections 'prot' | 34 | /* Map 'pfn' using fixed map 'type' and protections 'prot' |
| 24 | */ | 35 | */ |
| 25 | void * | 36 | void * |
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index af750ab973b6..f45d5e29a72e 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c | |||
| @@ -134,25 +134,6 @@ int page_is_ram(unsigned long pagenr) | |||
| 134 | return 0; | 134 | return 0; |
| 135 | } | 135 | } |
| 136 | 136 | ||
| 137 | int pagerange_is_ram(unsigned long start, unsigned long end) | ||
| 138 | { | ||
| 139 | int ram_page = 0, not_rampage = 0; | ||
| 140 | unsigned long page_nr; | ||
| 141 | |||
| 142 | for (page_nr = (start >> PAGE_SHIFT); page_nr < (end >> PAGE_SHIFT); | ||
| 143 | ++page_nr) { | ||
| 144 | if (page_is_ram(page_nr)) | ||
| 145 | ram_page = 1; | ||
| 146 | else | ||
| 147 | not_rampage = 1; | ||
| 148 | |||
| 149 | if (ram_page == not_rampage) | ||
| 150 | return -1; | ||
| 151 | } | ||
| 152 | |||
| 153 | return ram_page; | ||
| 154 | } | ||
| 155 | |||
| 156 | /* | 137 | /* |
| 157 | * Fix up the linear direct mapping of the kernel to avoid cache attribute | 138 | * Fix up the linear direct mapping of the kernel to avoid cache attribute |
| 158 | * conflicts. | 139 | * conflicts. |
diff --git a/arch/x86/mm/kmmio.c b/arch/x86/mm/kmmio.c index 93d82038af4b..6a518dd08a36 100644 --- a/arch/x86/mm/kmmio.c +++ b/arch/x86/mm/kmmio.c | |||
| @@ -32,11 +32,14 @@ struct kmmio_fault_page { | |||
| 32 | struct list_head list; | 32 | struct list_head list; |
| 33 | struct kmmio_fault_page *release_next; | 33 | struct kmmio_fault_page *release_next; |
| 34 | unsigned long page; /* location of the fault page */ | 34 | unsigned long page; /* location of the fault page */ |
| 35 | bool old_presence; /* page presence prior to arming */ | ||
| 36 | bool armed; | ||
| 35 | 37 | ||
| 36 | /* | 38 | /* |
| 37 | * Number of times this page has been registered as a part | 39 | * Number of times this page has been registered as a part |
| 38 | * of a probe. If zero, page is disarmed and this may be freed. | 40 | * of a probe. If zero, page is disarmed and this may be freed. |
| 39 | * Used only by writers (RCU). | 41 | * Used only by writers (RCU) and post_kmmio_handler(). |
| 42 | * Protected by kmmio_lock, when linked into kmmio_page_table. | ||
| 40 | */ | 43 | */ |
| 41 | int count; | 44 | int count; |
| 42 | }; | 45 | }; |
| @@ -105,57 +108,85 @@ static struct kmmio_fault_page *get_kmmio_fault_page(unsigned long page) | |||
| 105 | return NULL; | 108 | return NULL; |
| 106 | } | 109 | } |
| 107 | 110 | ||
| 108 | static void set_page_present(unsigned long addr, bool present, | 111 | static void set_pmd_presence(pmd_t *pmd, bool present, bool *old) |
| 109 | unsigned int *pglevel) | 112 | { |
| 113 | pmdval_t v = pmd_val(*pmd); | ||
| 114 | *old = !!(v & _PAGE_PRESENT); | ||
| 115 | v &= ~_PAGE_PRESENT; | ||
| 116 | if (present) | ||
| 117 | v |= _PAGE_PRESENT; | ||
| 118 | set_pmd(pmd, __pmd(v)); | ||
| 119 | } | ||
| 120 | |||
| 121 | static void set_pte_presence(pte_t *pte, bool present, bool *old) | ||
| 122 | { | ||
| 123 | pteval_t v = pte_val(*pte); | ||
| 124 | *old = !!(v & _PAGE_PRESENT); | ||
| 125 | v &= ~_PAGE_PRESENT; | ||
| 126 | if (present) | ||
| 127 | v |= _PAGE_PRESENT; | ||
| 128 | set_pte_atomic(pte, __pte(v)); | ||
| 129 | } | ||
| 130 | |||
| 131 | static int set_page_presence(unsigned long addr, bool present, bool *old) | ||
| 110 | { | 132 | { |
| 111 | pteval_t pteval; | ||
| 112 | pmdval_t pmdval; | ||
| 113 | unsigned int level; | 133 | unsigned int level; |
| 114 | pmd_t *pmd; | ||
| 115 | pte_t *pte = lookup_address(addr, &level); | 134 | pte_t *pte = lookup_address(addr, &level); |
| 116 | 135 | ||
| 117 | if (!pte) { | 136 | if (!pte) { |
| 118 | pr_err("kmmio: no pte for page 0x%08lx\n", addr); | 137 | pr_err("kmmio: no pte for page 0x%08lx\n", addr); |
| 119 | return; | 138 | return -1; |
| 120 | } | 139 | } |
| 121 | 140 | ||
| 122 | if (pglevel) | ||
| 123 | *pglevel = level; | ||
| 124 | |||
| 125 | switch (level) { | 141 | switch (level) { |
| 126 | case PG_LEVEL_2M: | 142 | case PG_LEVEL_2M: |
| 127 | pmd = (pmd_t *)pte; | 143 | set_pmd_presence((pmd_t *)pte, present, old); |
| 128 | pmdval = pmd_val(*pmd) & ~_PAGE_PRESENT; | ||
| 129 | if (present) | ||
| 130 | pmdval |= _PAGE_PRESENT; | ||
| 131 | set_pmd(pmd, __pmd(pmdval)); | ||
| 132 | break; | 144 | break; |
| 133 | |||
| 134 | case PG_LEVEL_4K: | 145 | case PG_LEVEL_4K: |
| 135 | pteval = pte_val(*pte) & ~_PAGE_PRESENT; | 146 | set_pte_presence(pte, present, old); |
| 136 | if (present) | ||
| 137 | pteval |= _PAGE_PRESENT; | ||
| 138 | set_pte_atomic(pte, __pte(pteval)); | ||
| 139 | break; | 147 | break; |
| 140 | |||
| 141 | default: | 148 | default: |
| 142 | pr_err("kmmio: unexpected page level 0x%x.\n", level); | 149 | pr_err("kmmio: unexpected page level 0x%x.\n", level); |
| 143 | return; | 150 | return -1; |
| 144 | } | 151 | } |
| 145 | 152 | ||
| 146 | __flush_tlb_one(addr); | 153 | __flush_tlb_one(addr); |
| 154 | return 0; | ||
| 147 | } | 155 | } |
| 148 | 156 | ||
| 149 | /** Mark the given page as not present. Access to it will trigger a fault. */ | 157 | /* |
| 150 | static void arm_kmmio_fault_page(unsigned long page, unsigned int *pglevel) | 158 | * Mark the given page as not present. Access to it will trigger a fault. |
| 159 | * | ||
| 160 | * Struct kmmio_fault_page is protected by RCU and kmmio_lock, but the | ||
| 161 | * protection is ignored here. RCU read lock is assumed held, so the struct | ||
| 162 | * will not disappear unexpectedly. Furthermore, the caller must guarantee, | ||
| 163 | * that double arming the same virtual address (page) cannot occur. | ||
| 164 | * | ||
| 165 | * Double disarming on the other hand is allowed, and may occur when a fault | ||
| 166 | * and mmiotrace shutdown happen simultaneously. | ||
| 167 | */ | ||
| 168 | static int arm_kmmio_fault_page(struct kmmio_fault_page *f) | ||
| 151 | { | 169 | { |
| 152 | set_page_present(page & PAGE_MASK, false, pglevel); | 170 | int ret; |
| 171 | WARN_ONCE(f->armed, KERN_ERR "kmmio page already armed.\n"); | ||
| 172 | if (f->armed) { | ||
| 173 | pr_warning("kmmio double-arm: page 0x%08lx, ref %d, old %d\n", | ||
| 174 | f->page, f->count, f->old_presence); | ||
| 175 | } | ||
| 176 | ret = set_page_presence(f->page, false, &f->old_presence); | ||
| 177 | WARN_ONCE(ret < 0, KERN_ERR "kmmio arming 0x%08lx failed.\n", f->page); | ||
| 178 | f->armed = true; | ||
| 179 | return ret; | ||
| 153 | } | 180 | } |
| 154 | 181 | ||
| 155 | /** Mark the given page as present. */ | 182 | /** Restore the given page to saved presence state. */ |
| 156 | static void disarm_kmmio_fault_page(unsigned long page, unsigned int *pglevel) | 183 | static void disarm_kmmio_fault_page(struct kmmio_fault_page *f) |
| 157 | { | 184 | { |
| 158 | set_page_present(page & PAGE_MASK, true, pglevel); | 185 | bool tmp; |
| 186 | int ret = set_page_presence(f->page, f->old_presence, &tmp); | ||
| 187 | WARN_ONCE(ret < 0, | ||
| 188 | KERN_ERR "kmmio disarming 0x%08lx failed.\n", f->page); | ||
| 189 | f->armed = false; | ||
| 159 | } | 190 | } |
| 160 | 191 | ||
| 161 | /* | 192 | /* |
| @@ -202,28 +233,32 @@ int kmmio_handler(struct pt_regs *regs, unsigned long addr) | |||
| 202 | 233 | ||
| 203 | ctx = &get_cpu_var(kmmio_ctx); | 234 | ctx = &get_cpu_var(kmmio_ctx); |
| 204 | if (ctx->active) { | 235 | if (ctx->active) { |
| 205 | disarm_kmmio_fault_page(faultpage->page, NULL); | ||
| 206 | if (addr == ctx->addr) { | 236 | if (addr == ctx->addr) { |
| 207 | /* | 237 | /* |
| 208 | * On SMP we sometimes get recursive probe hits on the | 238 | * A second fault on the same page means some other |
| 209 | * same address. Context is already saved, fall out. | 239 | * condition needs handling by do_page_fault(), the |
| 240 | * page really not being present is the most common. | ||
| 210 | */ | 241 | */ |
| 211 | pr_debug("kmmio: duplicate probe hit on CPU %d, for " | 242 | pr_debug("kmmio: secondary hit for 0x%08lx CPU %d.\n", |
| 212 | "address 0x%08lx.\n", | 243 | addr, smp_processor_id()); |
| 213 | smp_processor_id(), addr); | 244 | |
| 214 | ret = 1; | 245 | if (!faultpage->old_presence) |
| 215 | goto no_kmmio_ctx; | 246 | pr_info("kmmio: unexpected secondary hit for " |
| 216 | } | 247 | "address 0x%08lx on CPU %d.\n", addr, |
| 217 | /* | 248 | smp_processor_id()); |
| 218 | * Prevent overwriting already in-flight context. | 249 | } else { |
| 219 | * This should not happen, let's hope disarming at least | 250 | /* |
| 220 | * prevents a panic. | 251 | * Prevent overwriting already in-flight context. |
| 221 | */ | 252 | * This should not happen, let's hope disarming at |
| 222 | pr_emerg("kmmio: recursive probe hit on CPU %d, " | 253 | * least prevents a panic. |
| 254 | */ | ||
| 255 | pr_emerg("kmmio: recursive probe hit on CPU %d, " | ||
| 223 | "for address 0x%08lx. Ignoring.\n", | 256 | "for address 0x%08lx. Ignoring.\n", |
| 224 | smp_processor_id(), addr); | 257 | smp_processor_id(), addr); |
| 225 | pr_emerg("kmmio: previous hit was at 0x%08lx.\n", | 258 | pr_emerg("kmmio: previous hit was at 0x%08lx.\n", |
| 226 | ctx->addr); | 259 | ctx->addr); |
| 260 | disarm_kmmio_fault_page(faultpage); | ||
| 261 | } | ||
| 227 | goto no_kmmio_ctx; | 262 | goto no_kmmio_ctx; |
| 228 | } | 263 | } |
| 229 | ctx->active++; | 264 | ctx->active++; |
| @@ -244,7 +279,7 @@ int kmmio_handler(struct pt_regs *regs, unsigned long addr) | |||
| 244 | regs->flags &= ~X86_EFLAGS_IF; | 279 | regs->flags &= ~X86_EFLAGS_IF; |
| 245 | 280 | ||
| 246 | /* Now we set present bit in PTE and single step. */ | 281 | /* Now we set present bit in PTE and single step. */ |
| 247 | disarm_kmmio_fault_page(ctx->fpage->page, NULL); | 282 | disarm_kmmio_fault_page(ctx->fpage); |
| 248 | 283 | ||
| 249 | /* | 284 | /* |
| 250 | * If another cpu accesses the same page while we are stepping, | 285 | * If another cpu accesses the same page while we are stepping, |
| @@ -275,7 +310,7 @@ static int post_kmmio_handler(unsigned long condition, struct pt_regs *regs) | |||
| 275 | struct kmmio_context *ctx = &get_cpu_var(kmmio_ctx); | 310 | struct kmmio_context *ctx = &get_cpu_var(kmmio_ctx); |
| 276 | 311 | ||
| 277 | if (!ctx->active) { | 312 | if (!ctx->active) { |
| 278 | pr_debug("kmmio: spurious debug trap on CPU %d.\n", | 313 | pr_warning("kmmio: spurious debug trap on CPU %d.\n", |
| 279 | smp_processor_id()); | 314 | smp_processor_id()); |
| 280 | goto out; | 315 | goto out; |
| 281 | } | 316 | } |
| @@ -283,7 +318,11 @@ static int post_kmmio_handler(unsigned long condition, struct pt_regs *regs) | |||
| 283 | if (ctx->probe && ctx->probe->post_handler) | 318 | if (ctx->probe && ctx->probe->post_handler) |
| 284 | ctx->probe->post_handler(ctx->probe, condition, regs); | 319 | ctx->probe->post_handler(ctx->probe, condition, regs); |
| 285 | 320 | ||
| 286 | arm_kmmio_fault_page(ctx->fpage->page, NULL); | 321 | /* Prevent racing against release_kmmio_fault_page(). */ |
| 322 | spin_lock(&kmmio_lock); | ||
| 323 | if (ctx->fpage->count) | ||
| 324 | arm_kmmio_fault_page(ctx->fpage); | ||
| 325 | spin_unlock(&kmmio_lock); | ||
| 287 | 326 | ||
| 288 | regs->flags &= ~X86_EFLAGS_TF; | 327 | regs->flags &= ~X86_EFLAGS_TF; |
| 289 | regs->flags |= ctx->saved_flags; | 328 | regs->flags |= ctx->saved_flags; |
| @@ -315,20 +354,24 @@ static int add_kmmio_fault_page(unsigned long page) | |||
| 315 | f = get_kmmio_fault_page(page); | 354 | f = get_kmmio_fault_page(page); |
| 316 | if (f) { | 355 | if (f) { |
| 317 | if (!f->count) | 356 | if (!f->count) |
| 318 | arm_kmmio_fault_page(f->page, NULL); | 357 | arm_kmmio_fault_page(f); |
| 319 | f->count++; | 358 | f->count++; |
| 320 | return 0; | 359 | return 0; |
| 321 | } | 360 | } |
| 322 | 361 | ||
| 323 | f = kmalloc(sizeof(*f), GFP_ATOMIC); | 362 | f = kzalloc(sizeof(*f), GFP_ATOMIC); |
| 324 | if (!f) | 363 | if (!f) |
| 325 | return -1; | 364 | return -1; |
| 326 | 365 | ||
| 327 | f->count = 1; | 366 | f->count = 1; |
| 328 | f->page = page; | 367 | f->page = page; |
| 329 | list_add_rcu(&f->list, kmmio_page_list(f->page)); | ||
| 330 | 368 | ||
| 331 | arm_kmmio_fault_page(f->page, NULL); | 369 | if (arm_kmmio_fault_page(f)) { |
| 370 | kfree(f); | ||
| 371 | return -1; | ||
| 372 | } | ||
| 373 | |||
| 374 | list_add_rcu(&f->list, kmmio_page_list(f->page)); | ||
| 332 | 375 | ||
| 333 | return 0; | 376 | return 0; |
| 334 | } | 377 | } |
| @@ -347,7 +390,7 @@ static void release_kmmio_fault_page(unsigned long page, | |||
| 347 | f->count--; | 390 | f->count--; |
| 348 | BUG_ON(f->count < 0); | 391 | BUG_ON(f->count < 0); |
| 349 | if (!f->count) { | 392 | if (!f->count) { |
| 350 | disarm_kmmio_fault_page(f->page, NULL); | 393 | disarm_kmmio_fault_page(f); |
| 351 | f->release_next = *release_list; | 394 | f->release_next = *release_list; |
| 352 | *release_list = f; | 395 | *release_list = f; |
| 353 | } | 396 | } |
| @@ -408,23 +451,24 @@ static void rcu_free_kmmio_fault_pages(struct rcu_head *head) | |||
| 408 | 451 | ||
| 409 | static void remove_kmmio_fault_pages(struct rcu_head *head) | 452 | static void remove_kmmio_fault_pages(struct rcu_head *head) |
| 410 | { | 453 | { |
| 411 | struct kmmio_delayed_release *dr = container_of( | 454 | struct kmmio_delayed_release *dr = |
| 412 | head, | 455 | container_of(head, struct kmmio_delayed_release, rcu); |
| 413 | struct kmmio_delayed_release, | ||
| 414 | rcu); | ||
| 415 | struct kmmio_fault_page *p = dr->release_list; | 456 | struct kmmio_fault_page *p = dr->release_list; |
| 416 | struct kmmio_fault_page **prevp = &dr->release_list; | 457 | struct kmmio_fault_page **prevp = &dr->release_list; |
| 417 | unsigned long flags; | 458 | unsigned long flags; |
| 459 | |||
| 418 | spin_lock_irqsave(&kmmio_lock, flags); | 460 | spin_lock_irqsave(&kmmio_lock, flags); |
| 419 | while (p) { | 461 | while (p) { |
| 420 | if (!p->count) | 462 | if (!p->count) { |
| 421 | list_del_rcu(&p->list); | 463 | list_del_rcu(&p->list); |
| 422 | else | 464 | prevp = &p->release_next; |
| 465 | } else { | ||
| 423 | *prevp = p->release_next; | 466 | *prevp = p->release_next; |
| 424 | prevp = &p->release_next; | 467 | } |
| 425 | p = p->release_next; | 468 | p = p->release_next; |
| 426 | } | 469 | } |
| 427 | spin_unlock_irqrestore(&kmmio_lock, flags); | 470 | spin_unlock_irqrestore(&kmmio_lock, flags); |
| 471 | |||
| 428 | /* This is the real RCU destroy call. */ | 472 | /* This is the real RCU destroy call. */ |
| 429 | call_rcu(&dr->rcu, rcu_free_kmmio_fault_pages); | 473 | call_rcu(&dr->rcu, rcu_free_kmmio_fault_pages); |
| 430 | } | 474 | } |
diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c index 71a14f89f89e..f3516da035d1 100644 --- a/arch/x86/mm/numa_64.c +++ b/arch/x86/mm/numa_64.c | |||
| @@ -145,7 +145,7 @@ int __init compute_hash_shift(struct bootnode *nodes, int numnodes, | |||
| 145 | return shift; | 145 | return shift; |
| 146 | } | 146 | } |
| 147 | 147 | ||
| 148 | int early_pfn_to_nid(unsigned long pfn) | 148 | int __meminit __early_pfn_to_nid(unsigned long pfn) |
| 149 | { | 149 | { |
| 150 | return phys_to_nid(pfn << PAGE_SHIFT); | 150 | return phys_to_nid(pfn << PAGE_SHIFT); |
| 151 | } | 151 | } |
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index 84ba74820ad6..7be47d1a97e4 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c | |||
| @@ -508,18 +508,13 @@ static int split_large_page(pte_t *kpte, unsigned long address) | |||
| 508 | #endif | 508 | #endif |
| 509 | 509 | ||
| 510 | /* | 510 | /* |
| 511 | * Install the new, split up pagetable. Important details here: | 511 | * Install the new, split up pagetable. |
| 512 | * | 512 | * |
| 513 | * On Intel the NX bit of all levels must be cleared to make a | 513 | * We use the standard kernel pagetable protections for the new |
| 514 | * page executable. See section 4.13.2 of Intel 64 and IA-32 | 514 | * pagetable protections, the actual ptes set above control the |
| 515 | * Architectures Software Developer's Manual). | 515 | * primary protection behavior: |
| 516 | * | ||
| 517 | * Mark the entry present. The current mapping might be | ||
| 518 | * set to not present, which we preserved above. | ||
| 519 | */ | 516 | */ |
| 520 | ref_prot = pte_pgprot(pte_mkexec(pte_clrhuge(*kpte))); | 517 | __set_pmd_pte(kpte, address, mk_pte(base, __pgprot(_KERNPG_TABLE))); |
| 521 | pgprot_val(ref_prot) |= _PAGE_PRESENT; | ||
| 522 | __set_pmd_pte(kpte, address, mk_pte(base, ref_prot)); | ||
| 523 | base = NULL; | 518 | base = NULL; |
| 524 | 519 | ||
| 525 | out_unlock: | 520 | out_unlock: |
| @@ -575,7 +570,6 @@ static int __change_page_attr(struct cpa_data *cpa, int primary) | |||
| 575 | address = cpa->vaddr[cpa->curpage]; | 570 | address = cpa->vaddr[cpa->curpage]; |
| 576 | else | 571 | else |
| 577 | address = *cpa->vaddr; | 572 | address = *cpa->vaddr; |
| 578 | |||
| 579 | repeat: | 573 | repeat: |
| 580 | kpte = lookup_address(address, &level); | 574 | kpte = lookup_address(address, &level); |
| 581 | if (!kpte) | 575 | if (!kpte) |
| @@ -812,6 +806,13 @@ static int change_page_attr_set_clr(unsigned long *addr, int numpages, | |||
| 812 | 806 | ||
| 813 | vm_unmap_aliases(); | 807 | vm_unmap_aliases(); |
| 814 | 808 | ||
| 809 | /* | ||
| 810 | * If we're called with lazy mmu updates enabled, the | ||
| 811 | * in-memory pte state may be stale. Flush pending updates to | ||
| 812 | * bring them up to date. | ||
| 813 | */ | ||
| 814 | arch_flush_lazy_mmu_mode(); | ||
| 815 | |||
| 815 | cpa.vaddr = addr; | 816 | cpa.vaddr = addr; |
| 816 | cpa.numpages = numpages; | 817 | cpa.numpages = numpages; |
| 817 | cpa.mask_set = mask_set; | 818 | cpa.mask_set = mask_set; |
| @@ -854,6 +855,13 @@ static int change_page_attr_set_clr(unsigned long *addr, int numpages, | |||
| 854 | } else | 855 | } else |
| 855 | cpa_flush_all(cache); | 856 | cpa_flush_all(cache); |
| 856 | 857 | ||
| 858 | /* | ||
| 859 | * If we've been called with lazy mmu updates enabled, then | ||
| 860 | * make sure that everything gets flushed out before we | ||
| 861 | * return. | ||
| 862 | */ | ||
| 863 | arch_flush_lazy_mmu_mode(); | ||
| 864 | |||
| 857 | out: | 865 | out: |
| 858 | return ret; | 866 | return ret; |
| 859 | } | 867 | } |
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c index 7b61036427df..e0ab173b6974 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include <linux/bootmem.h> | 11 | #include <linux/bootmem.h> |
| 12 | #include <linux/debugfs.h> | 12 | #include <linux/debugfs.h> |
| 13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
| 14 | #include <linux/module.h> | ||
| 14 | #include <linux/gfp.h> | 15 | #include <linux/gfp.h> |
| 15 | #include <linux/mm.h> | 16 | #include <linux/mm.h> |
| 16 | #include <linux/fs.h> | 17 | #include <linux/fs.h> |
| @@ -211,6 +212,33 @@ chk_conflict(struct memtype *new, struct memtype *entry, unsigned long *type) | |||
| 211 | static struct memtype *cached_entry; | 212 | static struct memtype *cached_entry; |
| 212 | static u64 cached_start; | 213 | static u64 cached_start; |
| 213 | 214 | ||
| 215 | static int pat_pagerange_is_ram(unsigned long start, unsigned long end) | ||
| 216 | { | ||
| 217 | int ram_page = 0, not_rampage = 0; | ||
| 218 | unsigned long page_nr; | ||
| 219 | |||
| 220 | for (page_nr = (start >> PAGE_SHIFT); page_nr < (end >> PAGE_SHIFT); | ||
| 221 | ++page_nr) { | ||
| 222 | /* | ||
| 223 | * For legacy reasons, physical address range in the legacy ISA | ||
| 224 | * region is tracked as non-RAM. This will allow users of | ||
| 225 | * /dev/mem to map portions of legacy ISA region, even when | ||
| 226 | * some of those portions are listed(or not even listed) with | ||
| 227 | * different e820 types(RAM/reserved/..) | ||
| 228 | */ | ||
| 229 | if (page_nr >= (ISA_END_ADDRESS >> PAGE_SHIFT) && | ||
| 230 | page_is_ram(page_nr)) | ||
| 231 | ram_page = 1; | ||
| 232 | else | ||
| 233 | not_rampage = 1; | ||
| 234 | |||
| 235 | if (ram_page == not_rampage) | ||
| 236 | return -1; | ||
| 237 | } | ||
| 238 | |||
| 239 | return ram_page; | ||
| 240 | } | ||
| 241 | |||
| 214 | /* | 242 | /* |
| 215 | * For RAM pages, mark the pages as non WB memory type using | 243 | * For RAM pages, mark the pages as non WB memory type using |
| 216 | * PageNonWB (PG_arch_1). We allow only one set_memory_uc() or | 244 | * PageNonWB (PG_arch_1). We allow only one set_memory_uc() or |
| @@ -336,20 +364,12 @@ int reserve_memtype(u64 start, u64 end, unsigned long req_type, | |||
| 336 | if (new_type) | 364 | if (new_type) |
| 337 | *new_type = actual_type; | 365 | *new_type = actual_type; |
| 338 | 366 | ||
| 339 | /* | 367 | is_range_ram = pat_pagerange_is_ram(start, end); |
| 340 | * For legacy reasons, some parts of the physical address range in the | 368 | if (is_range_ram == 1) |
| 341 | * legacy 1MB region is treated as non-RAM (even when listed as RAM in | 369 | return reserve_ram_pages_type(start, end, req_type, |
| 342 | * the e820 tables). So we will track the memory attributes of this | 370 | new_type); |
| 343 | * legacy 1MB region using the linear memtype_list always. | 371 | else if (is_range_ram < 0) |
| 344 | */ | 372 | return -EINVAL; |
| 345 | if (end >= ISA_END_ADDRESS) { | ||
| 346 | is_range_ram = pagerange_is_ram(start, end); | ||
| 347 | if (is_range_ram == 1) | ||
| 348 | return reserve_ram_pages_type(start, end, req_type, | ||
| 349 | new_type); | ||
| 350 | else if (is_range_ram < 0) | ||
| 351 | return -EINVAL; | ||
| 352 | } | ||
| 353 | 373 | ||
| 354 | new = kmalloc(sizeof(struct memtype), GFP_KERNEL); | 374 | new = kmalloc(sizeof(struct memtype), GFP_KERNEL); |
| 355 | if (!new) | 375 | if (!new) |
| @@ -446,19 +466,11 @@ int free_memtype(u64 start, u64 end) | |||
| 446 | if (is_ISA_range(start, end - 1)) | 466 | if (is_ISA_range(start, end - 1)) |
| 447 | return 0; | 467 | return 0; |
| 448 | 468 | ||
| 449 | /* | 469 | is_range_ram = pat_pagerange_is_ram(start, end); |
| 450 | * For legacy reasons, some parts of the physical address range in the | 470 | if (is_range_ram == 1) |
| 451 | * legacy 1MB region is treated as non-RAM (even when listed as RAM in | 471 | return free_ram_pages_type(start, end); |
| 452 | * the e820 tables). So we will track the memory attributes of this | 472 | else if (is_range_ram < 0) |
| 453 | * legacy 1MB region using the linear memtype_list always. | 473 | return -EINVAL; |
| 454 | */ | ||
| 455 | if (end >= ISA_END_ADDRESS) { | ||
| 456 | is_range_ram = pagerange_is_ram(start, end); | ||
| 457 | if (is_range_ram == 1) | ||
| 458 | return free_ram_pages_type(start, end); | ||
| 459 | else if (is_range_ram < 0) | ||
| 460 | return -EINVAL; | ||
| 461 | } | ||
| 462 | 474 | ||
| 463 | spin_lock(&memtype_lock); | 475 | spin_lock(&memtype_lock); |
| 464 | list_for_each_entry(entry, &memtype_list, nd) { | 476 | list_for_each_entry(entry, &memtype_list, nd) { |
| @@ -626,17 +638,13 @@ static int reserve_pfn_range(u64 paddr, unsigned long size, pgprot_t *vma_prot, | |||
| 626 | unsigned long flags; | 638 | unsigned long flags; |
| 627 | unsigned long want_flags = (pgprot_val(*vma_prot) & _PAGE_CACHE_MASK); | 639 | unsigned long want_flags = (pgprot_val(*vma_prot) & _PAGE_CACHE_MASK); |
| 628 | 640 | ||
| 629 | is_ram = pagerange_is_ram(paddr, paddr + size); | 641 | is_ram = pat_pagerange_is_ram(paddr, paddr + size); |
| 630 | 642 | ||
| 631 | if (is_ram != 0) { | 643 | /* |
| 632 | /* | 644 | * reserve_pfn_range() doesn't support RAM pages. |
| 633 | * For mapping RAM pages, drivers need to call | 645 | */ |
| 634 | * set_memory_[uc|wc|wb] directly, for reserve and free, before | 646 | if (is_ram != 0) |
| 635 | * setting up the PTE. | 647 | return -EINVAL; |
| 636 | */ | ||
| 637 | WARN_ON_ONCE(1); | ||
| 638 | return 0; | ||
| 639 | } | ||
| 640 | 648 | ||
| 641 | ret = reserve_memtype(paddr, paddr + size, want_flags, &flags); | 649 | ret = reserve_memtype(paddr, paddr + size, want_flags, &flags); |
| 642 | if (ret) | 650 | if (ret) |
| @@ -693,7 +701,7 @@ static void free_pfn_range(u64 paddr, unsigned long size) | |||
| 693 | { | 701 | { |
| 694 | int is_ram; | 702 | int is_ram; |
| 695 | 703 | ||
| 696 | is_ram = pagerange_is_ram(paddr, paddr + size); | 704 | is_ram = pat_pagerange_is_ram(paddr, paddr + size); |
| 697 | if (is_ram == 0) | 705 | if (is_ram == 0) |
| 698 | free_memtype(paddr, paddr + size); | 706 | free_memtype(paddr, paddr + size); |
| 699 | } | 707 | } |
| @@ -861,6 +869,7 @@ pgprot_t pgprot_writecombine(pgprot_t prot) | |||
| 861 | else | 869 | else |
| 862 | return pgprot_noncached(prot); | 870 | return pgprot_noncached(prot); |
| 863 | } | 871 | } |
| 872 | EXPORT_SYMBOL_GPL(pgprot_writecombine); | ||
| 864 | 873 | ||
| 865 | #if defined(CONFIG_DEBUG_FS) && defined(CONFIG_X86_PAT) | 874 | #if defined(CONFIG_DEBUG_FS) && defined(CONFIG_X86_PAT) |
| 866 | 875 | ||
diff --git a/arch/x86/mm/testmmiotrace.c b/arch/x86/mm/testmmiotrace.c index ab50a8d7402c..427fd1b56df5 100644 --- a/arch/x86/mm/testmmiotrace.c +++ b/arch/x86/mm/testmmiotrace.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Written by Pekka Paalanen, 2008 <pq@iki.fi> | 2 | * Written by Pekka Paalanen, 2008-2009 <pq@iki.fi> |
| 3 | */ | 3 | */ |
| 4 | #include <linux/module.h> | 4 | #include <linux/module.h> |
| 5 | #include <linux/io.h> | 5 | #include <linux/io.h> |
| @@ -9,35 +9,74 @@ | |||
| 9 | 9 | ||
| 10 | static unsigned long mmio_address; | 10 | static unsigned long mmio_address; |
| 11 | module_param(mmio_address, ulong, 0); | 11 | module_param(mmio_address, ulong, 0); |
| 12 | MODULE_PARM_DESC(mmio_address, "Start address of the mapping of 16 kB."); | 12 | MODULE_PARM_DESC(mmio_address, " Start address of the mapping of 16 kB " |
| 13 | "(or 8 MB if read_far is non-zero)."); | ||
| 14 | |||
| 15 | static unsigned long read_far = 0x400100; | ||
| 16 | module_param(read_far, ulong, 0); | ||
| 17 | MODULE_PARM_DESC(read_far, " Offset of a 32-bit read within 8 MB " | ||
| 18 | "(default: 0x400100)."); | ||
| 19 | |||
| 20 | static unsigned v16(unsigned i) | ||
| 21 | { | ||
| 22 | return i * 12 + 7; | ||
| 23 | } | ||
| 24 | |||
| 25 | static unsigned v32(unsigned i) | ||
| 26 | { | ||
| 27 | return i * 212371 + 13; | ||
| 28 | } | ||
| 13 | 29 | ||
| 14 | static void do_write_test(void __iomem *p) | 30 | static void do_write_test(void __iomem *p) |
| 15 | { | 31 | { |
| 16 | unsigned int i; | 32 | unsigned int i; |
| 33 | pr_info(MODULE_NAME ": write test.\n"); | ||
| 17 | mmiotrace_printk("Write test.\n"); | 34 | mmiotrace_printk("Write test.\n"); |
| 35 | |||
| 18 | for (i = 0; i < 256; i++) | 36 | for (i = 0; i < 256; i++) |
| 19 | iowrite8(i, p + i); | 37 | iowrite8(i, p + i); |
| 38 | |||
| 20 | for (i = 1024; i < (5 * 1024); i += 2) | 39 | for (i = 1024; i < (5 * 1024); i += 2) |
| 21 | iowrite16(i * 12 + 7, p + i); | 40 | iowrite16(v16(i), p + i); |
| 41 | |||
| 22 | for (i = (5 * 1024); i < (16 * 1024); i += 4) | 42 | for (i = (5 * 1024); i < (16 * 1024); i += 4) |
| 23 | iowrite32(i * 212371 + 13, p + i); | 43 | iowrite32(v32(i), p + i); |
| 24 | } | 44 | } |
| 25 | 45 | ||
| 26 | static void do_read_test(void __iomem *p) | 46 | static void do_read_test(void __iomem *p) |
| 27 | { | 47 | { |
| 28 | unsigned int i; | 48 | unsigned int i; |
| 49 | unsigned errs[3] = { 0 }; | ||
| 50 | pr_info(MODULE_NAME ": read test.\n"); | ||
| 29 | mmiotrace_printk("Read test.\n"); | 51 | mmiotrace_printk("Read test.\n"); |
| 52 | |||
| 30 | for (i = 0; i < 256; i++) | 53 | for (i = 0; i < 256; i++) |
| 31 | ioread8(p + i); | 54 | if (ioread8(p + i) != i) |
| 55 | ++errs[0]; | ||
| 56 | |||
| 32 | for (i = 1024; i < (5 * 1024); i += 2) | 57 | for (i = 1024; i < (5 * 1024); i += 2) |
| 33 | ioread16(p + i); | 58 | if (ioread16(p + i) != v16(i)) |
| 59 | ++errs[1]; | ||
| 60 | |||
| 34 | for (i = (5 * 1024); i < (16 * 1024); i += 4) | 61 | for (i = (5 * 1024); i < (16 * 1024); i += 4) |
| 35 | ioread32(p + i); | 62 | if (ioread32(p + i) != v32(i)) |
| 63 | ++errs[2]; | ||
| 64 | |||
| 65 | mmiotrace_printk("Read errors: 8-bit %d, 16-bit %d, 32-bit %d.\n", | ||
| 66 | errs[0], errs[1], errs[2]); | ||
| 36 | } | 67 | } |
| 37 | 68 | ||
| 38 | static void do_test(void) | 69 | static void do_read_far_test(void __iomem *p) |
| 39 | { | 70 | { |
| 40 | void __iomem *p = ioremap_nocache(mmio_address, 0x4000); | 71 | pr_info(MODULE_NAME ": read far test.\n"); |
| 72 | mmiotrace_printk("Read far test.\n"); | ||
| 73 | |||
| 74 | ioread32(p + read_far); | ||
| 75 | } | ||
| 76 | |||
| 77 | static void do_test(unsigned long size) | ||
| 78 | { | ||
| 79 | void __iomem *p = ioremap_nocache(mmio_address, size); | ||
| 41 | if (!p) { | 80 | if (!p) { |
| 42 | pr_err(MODULE_NAME ": could not ioremap, aborting.\n"); | 81 | pr_err(MODULE_NAME ": could not ioremap, aborting.\n"); |
| 43 | return; | 82 | return; |
| @@ -45,11 +84,15 @@ static void do_test(void) | |||
| 45 | mmiotrace_printk("ioremap returned %p.\n", p); | 84 | mmiotrace_printk("ioremap returned %p.\n", p); |
| 46 | do_write_test(p); | 85 | do_write_test(p); |
| 47 | do_read_test(p); | 86 | do_read_test(p); |
| 87 | if (read_far && read_far < size - 4) | ||
| 88 | do_read_far_test(p); | ||
| 48 | iounmap(p); | 89 | iounmap(p); |
| 49 | } | 90 | } |
| 50 | 91 | ||
| 51 | static int __init init(void) | 92 | static int __init init(void) |
| 52 | { | 93 | { |
| 94 | unsigned long size = (read_far) ? (8 << 20) : (16 << 10); | ||
| 95 | |||
| 53 | if (mmio_address == 0) { | 96 | if (mmio_address == 0) { |
| 54 | pr_err(MODULE_NAME ": you have to use the module argument " | 97 | pr_err(MODULE_NAME ": you have to use the module argument " |
| 55 | "mmio_address.\n"); | 98 | "mmio_address.\n"); |
| @@ -58,10 +101,11 @@ static int __init init(void) | |||
| 58 | return -ENXIO; | 101 | return -ENXIO; |
| 59 | } | 102 | } |
| 60 | 103 | ||
| 61 | pr_warning(MODULE_NAME ": WARNING: mapping 16 kB @ 0x%08lx " | 104 | pr_warning(MODULE_NAME ": WARNING: mapping %lu kB @ 0x%08lx in PCI " |
| 62 | "in PCI address space, and writing " | 105 | "address space, and writing 16 kB of rubbish in there.\n", |
| 63 | "rubbish in there.\n", mmio_address); | 106 | size >> 10, mmio_address); |
| 64 | do_test(); | 107 | do_test(size); |
| 108 | pr_info(MODULE_NAME ": All done.\n"); | ||
| 65 | return 0; | 109 | return 0; |
| 66 | } | 110 | } |
| 67 | 111 | ||
diff --git a/arch/x86/oprofile/op_model_ppro.c b/arch/x86/oprofile/op_model_ppro.c index e9f80c744cf3..10131fbdaada 100644 --- a/arch/x86/oprofile/op_model_ppro.c +++ b/arch/x86/oprofile/op_model_ppro.c | |||
| @@ -78,8 +78,18 @@ static void ppro_setup_ctrs(struct op_msrs const * const msrs) | |||
| 78 | if (cpu_has_arch_perfmon) { | 78 | if (cpu_has_arch_perfmon) { |
| 79 | union cpuid10_eax eax; | 79 | union cpuid10_eax eax; |
| 80 | eax.full = cpuid_eax(0xa); | 80 | eax.full = cpuid_eax(0xa); |
| 81 | if (counter_width < eax.split.bit_width) | 81 | |
| 82 | counter_width = eax.split.bit_width; | 82 | /* |
| 83 | * For Core2 (family 6, model 15), don't reset the | ||
| 84 | * counter width: | ||
| 85 | */ | ||
| 86 | if (!(eax.split.version_id == 0 && | ||
| 87 | current_cpu_data.x86 == 6 && | ||
| 88 | current_cpu_data.x86_model == 15)) { | ||
| 89 | |||
| 90 | if (counter_width < eax.split.bit_width) | ||
| 91 | counter_width = eax.split.bit_width; | ||
| 92 | } | ||
| 83 | } | 93 | } |
| 84 | 94 | ||
| 85 | /* clear all counters */ | 95 | /* clear all counters */ |
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index bea215230b20..b58e96338149 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
| @@ -1672,6 +1672,9 @@ asmlinkage void __init xen_start_kernel(void) | |||
| 1672 | possible map and a non-dummy shared_info. */ | 1672 | possible map and a non-dummy shared_info. */ |
| 1673 | per_cpu(xen_vcpu, 0) = &HYPERVISOR_shared_info->vcpu_info[0]; | 1673 | per_cpu(xen_vcpu, 0) = &HYPERVISOR_shared_info->vcpu_info[0]; |
| 1674 | 1674 | ||
| 1675 | local_irq_disable(); | ||
| 1676 | early_boot_irqs_off(); | ||
| 1677 | |||
| 1675 | xen_raw_console_write("mapping kernel into physical memory\n"); | 1678 | xen_raw_console_write("mapping kernel into physical memory\n"); |
| 1676 | pgd = xen_setup_kernel_pagetable(pgd, xen_start_info->nr_pages); | 1679 | pgd = xen_setup_kernel_pagetable(pgd, xen_start_info->nr_pages); |
| 1677 | 1680 | ||
diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig index 6c873dceb177..981200830432 100644 --- a/arch/xtensa/Kconfig +++ b/arch/xtensa/Kconfig | |||
| @@ -103,9 +103,6 @@ config MATH_EMULATION | |||
| 103 | help | 103 | help |
| 104 | Can we use information of configuration file? | 104 | Can we use information of configuration file? |
| 105 | 105 | ||
| 106 | config HIGHMEM | ||
| 107 | bool "High memory support" | ||
| 108 | |||
| 109 | endmenu | 106 | endmenu |
| 110 | 107 | ||
| 111 | menu "Platform options" | 108 | menu "Platform options" |
diff --git a/arch/xtensa/kernel/setup.c b/arch/xtensa/kernel/setup.c index 9606d2bd1dd9..4ec1633c2941 100644 --- a/arch/xtensa/kernel/setup.c +++ b/arch/xtensa/kernel/setup.c | |||
| @@ -44,6 +44,8 @@ | |||
| 44 | #include <asm/setup.h> | 44 | #include <asm/setup.h> |
| 45 | #include <asm/param.h> | 45 | #include <asm/param.h> |
| 46 | 46 | ||
| 47 | #include <platform/hardware.h> | ||
| 48 | |||
| 47 | #if defined(CONFIG_VGA_CONSOLE) || defined(CONFIG_DUMMY_CONSOLE) | 49 | #if defined(CONFIG_VGA_CONSOLE) || defined(CONFIG_DUMMY_CONSOLE) |
| 48 | struct screen_info screen_info = { 0, 24, 0, 0, 0, 80, 0, 0, 0, 24, 1, 16}; | 50 | struct screen_info screen_info = { 0, 24, 0, 0, 0, 80, 0, 0, 0, 24, 1, 16}; |
| 49 | #endif | 51 | #endif |
diff --git a/arch/xtensa/kernel/traps.c b/arch/xtensa/kernel/traps.c index c7a021d9f696..c44f830b6c7a 100644 --- a/arch/xtensa/kernel/traps.c +++ b/arch/xtensa/kernel/traps.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <linux/stringify.h> | 30 | #include <linux/stringify.h> |
| 31 | #include <linux/kallsyms.h> | 31 | #include <linux/kallsyms.h> |
| 32 | #include <linux/delay.h> | 32 | #include <linux/delay.h> |
| 33 | #include <linux/hardirq.h> | ||
| 33 | 34 | ||
| 34 | #include <asm/ptrace.h> | 35 | #include <asm/ptrace.h> |
| 35 | #include <asm/timex.h> | 36 | #include <asm/timex.h> |
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c index 33f366be323f..bdd860d93f72 100644 --- a/arch/xtensa/mm/fault.c +++ b/arch/xtensa/mm/fault.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | 14 | ||
| 15 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
| 16 | #include <linux/module.h> | 16 | #include <linux/module.h> |
| 17 | #include <linux/hardirq.h> | ||
| 17 | #include <asm/mmu_context.h> | 18 | #include <asm/mmu_context.h> |
| 18 | #include <asm/cacheflush.h> | 19 | #include <asm/cacheflush.h> |
| 19 | #include <asm/hardirq.h> | 20 | #include <asm/hardirq.h> |
diff --git a/arch/xtensa/platforms/iss/console.c b/arch/xtensa/platforms/iss/console.c index efed8897bef3..25d46c84eb08 100644 --- a/arch/xtensa/platforms/iss/console.c +++ b/arch/xtensa/platforms/iss/console.c | |||
| @@ -140,16 +140,14 @@ static void rs_poll(unsigned long priv) | |||
| 140 | } | 140 | } |
| 141 | 141 | ||
| 142 | 142 | ||
| 143 | static void rs_put_char(struct tty_struct *tty, unsigned char ch) | 143 | static int rs_put_char(struct tty_struct *tty, unsigned char ch) |
| 144 | { | 144 | { |
| 145 | char buf[2]; | 145 | char buf[2]; |
| 146 | 146 | ||
| 147 | if (!tty) | ||
| 148 | return; | ||
| 149 | |||
| 150 | buf[0] = ch; | 147 | buf[0] = ch; |
| 151 | buf[1] = '\0'; /* Is this NULL necessary? */ | 148 | buf[1] = '\0'; /* Is this NULL necessary? */ |
| 152 | __simc (SYS_write, 1, (unsigned long) buf, 1, 0, 0); | 149 | __simc (SYS_write, 1, (unsigned long) buf, 1, 0, 0); |
| 150 | return 1; | ||
| 153 | } | 151 | } |
| 154 | 152 | ||
| 155 | static void rs_flush_chars(struct tty_struct *tty) | 153 | static void rs_flush_chars(struct tty_struct *tty) |
diff --git a/block/blk-merge.c b/block/blk-merge.c index b92f5b0866b0..5a244f05360f 100644 --- a/block/blk-merge.c +++ b/block/blk-merge.c | |||
| @@ -38,72 +38,77 @@ void blk_recalc_rq_sectors(struct request *rq, int nsect) | |||
| 38 | } | 38 | } |
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | void blk_recalc_rq_segments(struct request *rq) | 41 | static unsigned int __blk_recalc_rq_segments(struct request_queue *q, |
| 42 | struct bio *bio) | ||
| 42 | { | 43 | { |
| 43 | int nr_phys_segs; | ||
| 44 | unsigned int phys_size; | 44 | unsigned int phys_size; |
| 45 | struct bio_vec *bv, *bvprv = NULL; | 45 | struct bio_vec *bv, *bvprv = NULL; |
| 46 | int seg_size; | 46 | int cluster, i, high, highprv = 1; |
| 47 | int cluster; | 47 | unsigned int seg_size, nr_phys_segs; |
| 48 | struct req_iterator iter; | 48 | struct bio *fbio, *bbio; |
| 49 | int high, highprv = 1; | ||
| 50 | struct request_queue *q = rq->q; | ||
| 51 | 49 | ||
| 52 | if (!rq->bio) | 50 | if (!bio) |
| 53 | return; | 51 | return 0; |
| 54 | 52 | ||
| 53 | fbio = bio; | ||
| 55 | cluster = test_bit(QUEUE_FLAG_CLUSTER, &q->queue_flags); | 54 | cluster = test_bit(QUEUE_FLAG_CLUSTER, &q->queue_flags); |
| 56 | seg_size = 0; | 55 | seg_size = 0; |
| 57 | phys_size = nr_phys_segs = 0; | 56 | phys_size = nr_phys_segs = 0; |
| 58 | rq_for_each_segment(bv, rq, iter) { | 57 | for_each_bio(bio) { |
| 59 | /* | 58 | bio_for_each_segment(bv, bio, i) { |
| 60 | * the trick here is making sure that a high page is never | 59 | /* |
| 61 | * considered part of another segment, since that might | 60 | * the trick here is making sure that a high page is |
| 62 | * change with the bounce page. | 61 | * never considered part of another segment, since that |
| 63 | */ | 62 | * might change with the bounce page. |
| 64 | high = page_to_pfn(bv->bv_page) > q->bounce_pfn; | 63 | */ |
| 65 | if (high || highprv) | 64 | high = page_to_pfn(bv->bv_page) > q->bounce_pfn; |
| 66 | goto new_segment; | 65 | if (high || highprv) |
| 67 | if (cluster) { | ||
| 68 | if (seg_size + bv->bv_len > q->max_segment_size) | ||
| 69 | goto new_segment; | ||
| 70 | if (!BIOVEC_PHYS_MERGEABLE(bvprv, bv)) | ||
| 71 | goto new_segment; | ||
| 72 | if (!BIOVEC_SEG_BOUNDARY(q, bvprv, bv)) | ||
| 73 | goto new_segment; | 66 | goto new_segment; |
| 67 | if (cluster) { | ||
| 68 | if (seg_size + bv->bv_len > q->max_segment_size) | ||
| 69 | goto new_segment; | ||
| 70 | if (!BIOVEC_PHYS_MERGEABLE(bvprv, bv)) | ||
| 71 | goto new_segment; | ||
| 72 | if (!BIOVEC_SEG_BOUNDARY(q, bvprv, bv)) | ||
| 73 | goto new_segment; | ||
| 74 | |||
| 75 | seg_size += bv->bv_len; | ||
| 76 | bvprv = bv; | ||
| 77 | continue; | ||
| 78 | } | ||
| 79 | new_segment: | ||
| 80 | if (nr_phys_segs == 1 && seg_size > | ||
| 81 | fbio->bi_seg_front_size) | ||
| 82 | fbio->bi_seg_front_size = seg_size; | ||
| 74 | 83 | ||
| 75 | seg_size += bv->bv_len; | 84 | nr_phys_segs++; |
| 76 | bvprv = bv; | 85 | bvprv = bv; |
| 77 | continue; | 86 | seg_size = bv->bv_len; |
| 87 | highprv = high; | ||
| 78 | } | 88 | } |
| 79 | new_segment: | 89 | bbio = bio; |
| 80 | if (nr_phys_segs == 1 && seg_size > rq->bio->bi_seg_front_size) | ||
| 81 | rq->bio->bi_seg_front_size = seg_size; | ||
| 82 | |||
| 83 | nr_phys_segs++; | ||
| 84 | bvprv = bv; | ||
| 85 | seg_size = bv->bv_len; | ||
| 86 | highprv = high; | ||
| 87 | } | 90 | } |
| 88 | 91 | ||
| 89 | if (nr_phys_segs == 1 && seg_size > rq->bio->bi_seg_front_size) | 92 | if (nr_phys_segs == 1 && seg_size > fbio->bi_seg_front_size) |
| 90 | rq->bio->bi_seg_front_size = seg_size; | 93 | fbio->bi_seg_front_size = seg_size; |
| 91 | if (seg_size > rq->biotail->bi_seg_back_size) | 94 | if (seg_size > bbio->bi_seg_back_size) |
| 92 | rq->biotail->bi_seg_back_size = seg_size; | 95 | bbio->bi_seg_back_size = seg_size; |
| 96 | |||
| 97 | return nr_phys_segs; | ||
| 98 | } | ||
| 93 | 99 | ||
| 94 | rq->nr_phys_segments = nr_phys_segs; | 100 | void blk_recalc_rq_segments(struct request *rq) |
| 101 | { | ||
| 102 | rq->nr_phys_segments = __blk_recalc_rq_segments(rq->q, rq->bio); | ||
| 95 | } | 103 | } |
| 96 | 104 | ||
| 97 | void blk_recount_segments(struct request_queue *q, struct bio *bio) | 105 | void blk_recount_segments(struct request_queue *q, struct bio *bio) |
| 98 | { | 106 | { |
| 99 | struct request rq; | ||
| 100 | struct bio *nxt = bio->bi_next; | 107 | struct bio *nxt = bio->bi_next; |
| 101 | rq.q = q; | 108 | |
| 102 | rq.bio = rq.biotail = bio; | ||
| 103 | bio->bi_next = NULL; | 109 | bio->bi_next = NULL; |
| 104 | blk_recalc_rq_segments(&rq); | 110 | bio->bi_phys_segments = __blk_recalc_rq_segments(q, bio); |
| 105 | bio->bi_next = nxt; | 111 | bio->bi_next = nxt; |
| 106 | bio->bi_phys_segments = rq.nr_phys_segments; | ||
| 107 | bio->bi_flags |= (1 << BIO_SEG_VALID); | 112 | bio->bi_flags |= (1 << BIO_SEG_VALID); |
| 108 | } | 113 | } |
| 109 | EXPORT_SYMBOL(blk_recount_segments); | 114 | EXPORT_SYMBOL(blk_recount_segments); |
diff --git a/block/blk-timeout.c b/block/blk-timeout.c index a09535377a94..bbbdc4b8ccf2 100644 --- a/block/blk-timeout.c +++ b/block/blk-timeout.c | |||
| @@ -209,12 +209,19 @@ void blk_abort_queue(struct request_queue *q) | |||
| 209 | { | 209 | { |
| 210 | unsigned long flags; | 210 | unsigned long flags; |
| 211 | struct request *rq, *tmp; | 211 | struct request *rq, *tmp; |
| 212 | LIST_HEAD(list); | ||
| 212 | 213 | ||
| 213 | spin_lock_irqsave(q->queue_lock, flags); | 214 | spin_lock_irqsave(q->queue_lock, flags); |
| 214 | 215 | ||
| 215 | elv_abort_queue(q); | 216 | elv_abort_queue(q); |
| 216 | 217 | ||
| 217 | list_for_each_entry_safe(rq, tmp, &q->timeout_list, timeout_list) | 218 | /* |
| 219 | * Splice entries to local list, to avoid deadlocking if entries | ||
| 220 | * get readded to the timeout list by error handling | ||
| 221 | */ | ||
| 222 | list_splice_init(&q->timeout_list, &list); | ||
| 223 | |||
| 224 | list_for_each_entry_safe(rq, tmp, &list, timeout_list) | ||
| 218 | blk_abort_request(rq); | 225 | blk_abort_request(rq); |
| 219 | 226 | ||
| 220 | spin_unlock_irqrestore(q->queue_lock, flags); | 227 | spin_unlock_irqrestore(q->queue_lock, flags); |
diff --git a/block/blktrace.c b/block/blktrace.c index 39cc3bfe56e4..7cf9d1ff45a0 100644 --- a/block/blktrace.c +++ b/block/blktrace.c | |||
| @@ -142,7 +142,7 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes, | |||
| 142 | 142 | ||
| 143 | what |= ddir_act[rw & WRITE]; | 143 | what |= ddir_act[rw & WRITE]; |
| 144 | what |= MASK_TC_BIT(rw, BARRIER); | 144 | what |= MASK_TC_BIT(rw, BARRIER); |
| 145 | what |= MASK_TC_BIT(rw, SYNC); | 145 | what |= MASK_TC_BIT(rw, SYNCIO); |
| 146 | what |= MASK_TC_BIT(rw, AHEAD); | 146 | what |= MASK_TC_BIT(rw, AHEAD); |
| 147 | what |= MASK_TC_BIT(rw, META); | 147 | what |= MASK_TC_BIT(rw, META); |
| 148 | what |= MASK_TC_BIT(rw, DISCARD); | 148 | what |= MASK_TC_BIT(rw, DISCARD); |
diff --git a/block/bsg.c b/block/bsg.c index d414bb5607e8..0ce8806dd0c1 100644 --- a/block/bsg.c +++ b/block/bsg.c | |||
| @@ -244,7 +244,8 @@ bsg_validate_sgv4_hdr(struct request_queue *q, struct sg_io_v4 *hdr, int *rw) | |||
| 244 | * map sg_io_v4 to a request. | 244 | * map sg_io_v4 to a request. |
| 245 | */ | 245 | */ |
| 246 | static struct request * | 246 | static struct request * |
| 247 | bsg_map_hdr(struct bsg_device *bd, struct sg_io_v4 *hdr, fmode_t has_write_perm) | 247 | bsg_map_hdr(struct bsg_device *bd, struct sg_io_v4 *hdr, fmode_t has_write_perm, |
| 248 | u8 *sense) | ||
| 248 | { | 249 | { |
| 249 | struct request_queue *q = bd->queue; | 250 | struct request_queue *q = bd->queue; |
| 250 | struct request *rq, *next_rq = NULL; | 251 | struct request *rq, *next_rq = NULL; |
| @@ -306,6 +307,10 @@ bsg_map_hdr(struct bsg_device *bd, struct sg_io_v4 *hdr, fmode_t has_write_perm) | |||
| 306 | if (ret) | 307 | if (ret) |
| 307 | goto out; | 308 | goto out; |
| 308 | } | 309 | } |
| 310 | |||
| 311 | rq->sense = sense; | ||
| 312 | rq->sense_len = 0; | ||
| 313 | |||
| 309 | return rq; | 314 | return rq; |
| 310 | out: | 315 | out: |
| 311 | if (rq->cmd != rq->__cmd) | 316 | if (rq->cmd != rq->__cmd) |
| @@ -348,9 +353,6 @@ static void bsg_rq_end_io(struct request *rq, int uptodate) | |||
| 348 | static void bsg_add_command(struct bsg_device *bd, struct request_queue *q, | 353 | static void bsg_add_command(struct bsg_device *bd, struct request_queue *q, |
| 349 | struct bsg_command *bc, struct request *rq) | 354 | struct bsg_command *bc, struct request *rq) |
| 350 | { | 355 | { |
| 351 | rq->sense = bc->sense; | ||
| 352 | rq->sense_len = 0; | ||
| 353 | |||
| 354 | /* | 356 | /* |
| 355 | * add bc command to busy queue and submit rq for io | 357 | * add bc command to busy queue and submit rq for io |
| 356 | */ | 358 | */ |
| @@ -419,7 +421,7 @@ static int blk_complete_sgv4_hdr_rq(struct request *rq, struct sg_io_v4 *hdr, | |||
| 419 | { | 421 | { |
| 420 | int ret = 0; | 422 | int ret = 0; |
| 421 | 423 | ||
| 422 | dprintk("rq %p bio %p %u\n", rq, bio, rq->errors); | 424 | dprintk("rq %p bio %p 0x%x\n", rq, bio, rq->errors); |
| 423 | /* | 425 | /* |
| 424 | * fill in all the output members | 426 | * fill in all the output members |
| 425 | */ | 427 | */ |
| @@ -635,7 +637,7 @@ static int __bsg_write(struct bsg_device *bd, const char __user *buf, | |||
| 635 | /* | 637 | /* |
| 636 | * get a request, fill in the blanks, and add to request queue | 638 | * get a request, fill in the blanks, and add to request queue |
| 637 | */ | 639 | */ |
| 638 | rq = bsg_map_hdr(bd, &bc->hdr, has_write_perm); | 640 | rq = bsg_map_hdr(bd, &bc->hdr, has_write_perm, bc->sense); |
| 639 | if (IS_ERR(rq)) { | 641 | if (IS_ERR(rq)) { |
| 640 | ret = PTR_ERR(rq); | 642 | ret = PTR_ERR(rq); |
| 641 | rq = NULL; | 643 | rq = NULL; |
| @@ -922,11 +924,12 @@ static long bsg_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 922 | struct request *rq; | 924 | struct request *rq; |
| 923 | struct bio *bio, *bidi_bio = NULL; | 925 | struct bio *bio, *bidi_bio = NULL; |
| 924 | struct sg_io_v4 hdr; | 926 | struct sg_io_v4 hdr; |
| 927 | u8 sense[SCSI_SENSE_BUFFERSIZE]; | ||
| 925 | 928 | ||
| 926 | if (copy_from_user(&hdr, uarg, sizeof(hdr))) | 929 | if (copy_from_user(&hdr, uarg, sizeof(hdr))) |
| 927 | return -EFAULT; | 930 | return -EFAULT; |
| 928 | 931 | ||
| 929 | rq = bsg_map_hdr(bd, &hdr, file->f_mode & FMODE_WRITE); | 932 | rq = bsg_map_hdr(bd, &hdr, file->f_mode & FMODE_WRITE, sense); |
| 930 | if (IS_ERR(rq)) | 933 | if (IS_ERR(rq)) |
| 931 | return PTR_ERR(rq); | 934 | return PTR_ERR(rq); |
| 932 | 935 | ||
diff --git a/block/genhd.c b/block/genhd.c index 397960cf26af..a9ec910974c1 100644 --- a/block/genhd.c +++ b/block/genhd.c | |||
| @@ -256,6 +256,22 @@ void blkdev_show(struct seq_file *seqf, off_t offset) | |||
| 256 | } | 256 | } |
| 257 | #endif /* CONFIG_PROC_FS */ | 257 | #endif /* CONFIG_PROC_FS */ |
| 258 | 258 | ||
| 259 | /** | ||
| 260 | * register_blkdev - register a new block device | ||
| 261 | * | ||
| 262 | * @major: the requested major device number [1..255]. If @major=0, try to | ||
| 263 | * allocate any unused major number. | ||
| 264 | * @name: the name of the new block device as a zero terminated string | ||
| 265 | * | ||
| 266 | * The @name must be unique within the system. | ||
| 267 | * | ||
| 268 | * The return value depends on the @major input parameter. | ||
| 269 | * - if a major device number was requested in range [1..255] then the | ||
| 270 | * function returns zero on success, or a negative error code | ||
| 271 | * - if any unused major number was requested with @major=0 parameter | ||
| 272 | * then the return value is the allocated major number in range | ||
| 273 | * [1..255] or a negative error code otherwise | ||
| 274 | */ | ||
| 259 | int register_blkdev(unsigned int major, const char *name) | 275 | int register_blkdev(unsigned int major, const char *name) |
| 260 | { | 276 | { |
| 261 | struct blk_major_name **n, *p; | 277 | struct blk_major_name **n, *p; |
| @@ -1087,6 +1103,14 @@ dev_t blk_lookup_devt(const char *name, int partno) | |||
| 1087 | if (strcmp(dev_name(dev), name)) | 1103 | if (strcmp(dev_name(dev), name)) |
| 1088 | continue; | 1104 | continue; |
| 1089 | 1105 | ||
| 1106 | if (partno < disk->minors) { | ||
| 1107 | /* We need to return the right devno, even | ||
| 1108 | * if the partition doesn't exist yet. | ||
| 1109 | */ | ||
| 1110 | devt = MKDEV(MAJOR(dev->devt), | ||
| 1111 | MINOR(dev->devt) + partno); | ||
| 1112 | break; | ||
| 1113 | } | ||
| 1090 | part = disk_get_part(disk, partno); | 1114 | part = disk_get_part(disk, partno); |
| 1091 | if (part) { | 1115 | if (part) { |
| 1092 | devt = part_devt(part); | 1116 | devt = part_devt(part); |
diff --git a/crypto/ahash.c b/crypto/ahash.c index ba5292d69ebd..b2d1ee32cfe8 100644 --- a/crypto/ahash.c +++ b/crypto/ahash.c | |||
| @@ -214,7 +214,7 @@ static void crypto_ahash_show(struct seq_file *m, struct crypto_alg *alg) | |||
| 214 | seq_printf(m, "async : %s\n", alg->cra_flags & CRYPTO_ALG_ASYNC ? | 214 | seq_printf(m, "async : %s\n", alg->cra_flags & CRYPTO_ALG_ASYNC ? |
| 215 | "yes" : "no"); | 215 | "yes" : "no"); |
| 216 | seq_printf(m, "blocksize : %u\n", alg->cra_blocksize); | 216 | seq_printf(m, "blocksize : %u\n", alg->cra_blocksize); |
| 217 | seq_printf(m, "digestsize : %u\n", alg->cra_hash.digestsize); | 217 | seq_printf(m, "digestsize : %u\n", alg->cra_ahash.digestsize); |
| 218 | } | 218 | } |
| 219 | 219 | ||
| 220 | const struct crypto_type crypto_ahash_type = { | 220 | const struct crypto_type crypto_ahash_type = { |
diff --git a/crypto/algapi.c b/crypto/algapi.c index 7c41e7405c41..56c62e2858d5 100644 --- a/crypto/algapi.c +++ b/crypto/algapi.c | |||
| @@ -149,6 +149,9 @@ static struct crypto_larval *__crypto_register_alg(struct crypto_alg *alg) | |||
| 149 | if (q == alg) | 149 | if (q == alg) |
| 150 | goto err; | 150 | goto err; |
| 151 | 151 | ||
| 152 | if (crypto_is_moribund(q)) | ||
| 153 | continue; | ||
| 154 | |||
| 152 | if (crypto_is_larval(q)) { | 155 | if (crypto_is_larval(q)) { |
| 153 | if (!strcmp(alg->cra_driver_name, q->cra_driver_name)) | 156 | if (!strcmp(alg->cra_driver_name, q->cra_driver_name)) |
| 154 | goto err; | 157 | goto err; |
| @@ -197,7 +200,7 @@ void crypto_alg_tested(const char *name, int err) | |||
| 197 | 200 | ||
| 198 | down_write(&crypto_alg_sem); | 201 | down_write(&crypto_alg_sem); |
| 199 | list_for_each_entry(q, &crypto_alg_list, cra_list) { | 202 | list_for_each_entry(q, &crypto_alg_list, cra_list) { |
| 200 | if (!crypto_is_larval(q)) | 203 | if (crypto_is_moribund(q) || !crypto_is_larval(q)) |
| 201 | continue; | 204 | continue; |
| 202 | 205 | ||
| 203 | test = (struct crypto_larval *)q; | 206 | test = (struct crypto_larval *)q; |
| @@ -210,6 +213,7 @@ void crypto_alg_tested(const char *name, int err) | |||
| 210 | goto unlock; | 213 | goto unlock; |
| 211 | 214 | ||
| 212 | found: | 215 | found: |
| 216 | q->cra_flags |= CRYPTO_ALG_DEAD; | ||
| 213 | alg = test->adult; | 217 | alg = test->adult; |
| 214 | if (err || list_empty(&alg->cra_list)) | 218 | if (err || list_empty(&alg->cra_list)) |
| 215 | goto complete; | 219 | goto complete; |
diff --git a/crypto/api.c b/crypto/api.c index 9975a7bd246c..38a2bc02a98c 100644 --- a/crypto/api.c +++ b/crypto/api.c | |||
| @@ -215,8 +215,19 @@ struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask) | |||
| 215 | mask &= ~(CRYPTO_ALG_LARVAL | CRYPTO_ALG_DEAD); | 215 | mask &= ~(CRYPTO_ALG_LARVAL | CRYPTO_ALG_DEAD); |
| 216 | type &= mask; | 216 | type &= mask; |
| 217 | 217 | ||
| 218 | alg = try_then_request_module(crypto_alg_lookup(name, type, mask), | 218 | alg = crypto_alg_lookup(name, type, mask); |
| 219 | name); | 219 | if (!alg) { |
| 220 | char tmp[CRYPTO_MAX_ALG_NAME]; | ||
| 221 | |||
| 222 | request_module(name); | ||
| 223 | |||
| 224 | if (!((type ^ CRYPTO_ALG_NEED_FALLBACK) & mask) && | ||
| 225 | snprintf(tmp, sizeof(tmp), "%s-all", name) < sizeof(tmp)) | ||
| 226 | request_module(tmp); | ||
| 227 | |||
| 228 | alg = crypto_alg_lookup(name, type, mask); | ||
| 229 | } | ||
| 230 | |||
| 220 | if (alg) | 231 | if (alg) |
| 221 | return crypto_is_larval(alg) ? crypto_larval_wait(alg) : alg; | 232 | return crypto_is_larval(alg) ? crypto_larval_wait(alg) : alg; |
| 222 | 233 | ||
| @@ -557,34 +568,34 @@ err: | |||
| 557 | return ERR_PTR(err); | 568 | return ERR_PTR(err); |
| 558 | } | 569 | } |
| 559 | EXPORT_SYMBOL_GPL(crypto_alloc_tfm); | 570 | EXPORT_SYMBOL_GPL(crypto_alloc_tfm); |
| 560 | 571 | ||
| 561 | /* | 572 | /* |
| 562 | * crypto_free_tfm - Free crypto transform | 573 | * crypto_destroy_tfm - Free crypto transform |
| 574 | * @mem: Start of tfm slab | ||
| 563 | * @tfm: Transform to free | 575 | * @tfm: Transform to free |
| 564 | * | 576 | * |
| 565 | * crypto_free_tfm() frees up the transform and any associated resources, | 577 | * This function frees up the transform and any associated resources, |
| 566 | * then drops the refcount on the associated algorithm. | 578 | * then drops the refcount on the associated algorithm. |
| 567 | */ | 579 | */ |
| 568 | void crypto_free_tfm(struct crypto_tfm *tfm) | 580 | void crypto_destroy_tfm(void *mem, struct crypto_tfm *tfm) |
| 569 | { | 581 | { |
| 570 | struct crypto_alg *alg; | 582 | struct crypto_alg *alg; |
| 571 | int size; | 583 | int size; |
| 572 | 584 | ||
| 573 | if (unlikely(!tfm)) | 585 | if (unlikely(!mem)) |
| 574 | return; | 586 | return; |
| 575 | 587 | ||
| 576 | alg = tfm->__crt_alg; | 588 | alg = tfm->__crt_alg; |
| 577 | size = sizeof(*tfm) + alg->cra_ctxsize; | 589 | size = ksize(mem); |
| 578 | 590 | ||
| 579 | if (!tfm->exit && alg->cra_exit) | 591 | if (!tfm->exit && alg->cra_exit) |
| 580 | alg->cra_exit(tfm); | 592 | alg->cra_exit(tfm); |
| 581 | crypto_exit_ops(tfm); | 593 | crypto_exit_ops(tfm); |
| 582 | crypto_mod_put(alg); | 594 | crypto_mod_put(alg); |
| 583 | memset(tfm, 0, size); | 595 | memset(mem, 0, size); |
| 584 | kfree(tfm); | 596 | kfree(mem); |
| 585 | } | 597 | } |
| 586 | 598 | EXPORT_SYMBOL_GPL(crypto_destroy_tfm); | |
| 587 | EXPORT_SYMBOL_GPL(crypto_free_tfm); | ||
| 588 | 599 | ||
| 589 | int crypto_has_alg(const char *name, u32 type, u32 mask) | 600 | int crypto_has_alg(const char *name, u32 type, u32 mask) |
| 590 | { | 601 | { |
diff --git a/crypto/lrw.c b/crypto/lrw.c index 8ef664e3bcd9..358f80be2bf9 100644 --- a/crypto/lrw.c +++ b/crypto/lrw.c | |||
| @@ -45,7 +45,13 @@ struct priv { | |||
| 45 | 45 | ||
| 46 | static inline void setbit128_bbe(void *b, int bit) | 46 | static inline void setbit128_bbe(void *b, int bit) |
| 47 | { | 47 | { |
| 48 | __set_bit(bit ^ 0x78, b); | 48 | __set_bit(bit ^ (0x80 - |
| 49 | #ifdef __BIG_ENDIAN | ||
| 50 | BITS_PER_LONG | ||
| 51 | #else | ||
| 52 | BITS_PER_BYTE | ||
| 53 | #endif | ||
| 54 | ), b); | ||
| 49 | } | 55 | } |
| 50 | 56 | ||
| 51 | static int setkey(struct crypto_tfm *parent, const u8 *key, | 57 | static int setkey(struct crypto_tfm *parent, const u8 *key, |
diff --git a/crypto/scatterwalk.c b/crypto/scatterwalk.c index 9aeeb52004a5..3de89a424401 100644 --- a/crypto/scatterwalk.c +++ b/crypto/scatterwalk.c | |||
| @@ -54,7 +54,8 @@ static void scatterwalk_pagedone(struct scatter_walk *walk, int out, | |||
| 54 | struct page *page; | 54 | struct page *page; |
| 55 | 55 | ||
| 56 | page = sg_page(walk->sg) + ((walk->offset - 1) >> PAGE_SHIFT); | 56 | page = sg_page(walk->sg) + ((walk->offset - 1) >> PAGE_SHIFT); |
| 57 | flush_dcache_page(page); | 57 | if (!PageSlab(page)) |
| 58 | flush_dcache_page(page); | ||
| 58 | } | 59 | } |
| 59 | 60 | ||
| 60 | if (more) { | 61 | if (more) { |
diff --git a/crypto/shash.c b/crypto/shash.c index c9df367332ff..d5a2b619c55f 100644 --- a/crypto/shash.c +++ b/crypto/shash.c | |||
| @@ -388,10 +388,15 @@ static int crypto_init_shash_ops_compat(struct crypto_tfm *tfm) | |||
| 388 | struct shash_desc *desc = crypto_tfm_ctx(tfm); | 388 | struct shash_desc *desc = crypto_tfm_ctx(tfm); |
| 389 | struct crypto_shash *shash; | 389 | struct crypto_shash *shash; |
| 390 | 390 | ||
| 391 | if (!crypto_mod_get(calg)) | ||
| 392 | return -EAGAIN; | ||
| 393 | |||
| 391 | shash = __crypto_shash_cast(crypto_create_tfm( | 394 | shash = __crypto_shash_cast(crypto_create_tfm( |
| 392 | calg, &crypto_shash_type)); | 395 | calg, &crypto_shash_type)); |
| 393 | if (IS_ERR(shash)) | 396 | if (IS_ERR(shash)) { |
| 397 | crypto_mod_put(calg); | ||
| 394 | return PTR_ERR(shash); | 398 | return PTR_ERR(shash); |
| 399 | } | ||
| 395 | 400 | ||
| 396 | desc->tfm = shash; | 401 | desc->tfm = shash; |
| 397 | tfm->exit = crypto_exit_shash_ops_compat; | 402 | tfm->exit = crypto_exit_shash_ops_compat; |
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig index d7f9839ba264..8a851d0f4384 100644 --- a/drivers/acpi/Kconfig +++ b/drivers/acpi/Kconfig | |||
| @@ -9,6 +9,7 @@ menuconfig ACPI | |||
| 9 | depends on PCI | 9 | depends on PCI |
| 10 | depends on PM | 10 | depends on PM |
| 11 | select PNP | 11 | select PNP |
| 12 | select CPU_IDLE | ||
| 12 | default y | 13 | default y |
| 13 | ---help--- | 14 | ---help--- |
| 14 | Advanced Configuration and Power Interface (ACPI) support for | 15 | Advanced Configuration and Power Interface (ACPI) support for |
| @@ -253,13 +254,6 @@ config ACPI_PCI_SLOT | |||
| 253 | help you correlate PCI bus addresses with the physical geography | 254 | help you correlate PCI bus addresses with the physical geography |
| 254 | of your slots. If you are unsure, say N. | 255 | of your slots. If you are unsure, say N. |
| 255 | 256 | ||
| 256 | config ACPI_SYSTEM | ||
| 257 | bool | ||
| 258 | default y | ||
| 259 | help | ||
| 260 | This driver will enable your system to shut down using ACPI, and | ||
| 261 | dump your ACPI DSDT table using /proc/acpi/dsdt. | ||
| 262 | |||
| 263 | config X86_PM_TIMER | 257 | config X86_PM_TIMER |
| 264 | bool "Power Management Timer Support" if EMBEDDED | 258 | bool "Power Management Timer Support" if EMBEDDED |
| 265 | depends on X86 | 259 | depends on X86 |
| @@ -287,7 +281,7 @@ config ACPI_CONTAINER | |||
| 287 | support physical cpu/memory hot-plug. | 281 | support physical cpu/memory hot-plug. |
| 288 | 282 | ||
| 289 | If one selects "m", this driver can be loaded with | 283 | If one selects "m", this driver can be loaded with |
| 290 | "modprobe acpi_container". | 284 | "modprobe container". |
| 291 | 285 | ||
| 292 | config ACPI_HOTPLUG_MEMORY | 286 | config ACPI_HOTPLUG_MEMORY |
| 293 | tristate "Memory Hotplug" | 287 | tristate "Memory Hotplug" |
diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile index 65d90c720b5a..b130ea0d0759 100644 --- a/drivers/acpi/Makefile +++ b/drivers/acpi/Makefile | |||
| @@ -52,7 +52,7 @@ obj-$(CONFIG_ACPI_PROCESSOR) += processor.o | |||
| 52 | obj-$(CONFIG_ACPI_CONTAINER) += container.o | 52 | obj-$(CONFIG_ACPI_CONTAINER) += container.o |
| 53 | obj-$(CONFIG_ACPI_THERMAL) += thermal.o | 53 | obj-$(CONFIG_ACPI_THERMAL) += thermal.o |
| 54 | obj-y += power.o | 54 | obj-y += power.o |
| 55 | obj-$(CONFIG_ACPI_SYSTEM) += system.o event.o | 55 | obj-y += system.o event.o |
| 56 | obj-$(CONFIG_ACPI_DEBUG) += debug.o | 56 | obj-$(CONFIG_ACPI_DEBUG) += debug.o |
| 57 | obj-$(CONFIG_ACPI_NUMA) += numa.o | 57 | obj-$(CONFIG_ACPI_NUMA) += numa.o |
| 58 | obj-$(CONFIG_ACPI_HOTPLUG_MEMORY) += acpi_memhotplug.o | 58 | obj-$(CONFIG_ACPI_HOTPLUG_MEMORY) += acpi_memhotplug.o |
diff --git a/drivers/acpi/acpica/tbutils.c b/drivers/acpi/acpica/tbutils.c index 9684cc827930..22ce48985720 100644 --- a/drivers/acpi/acpica/tbutils.c +++ b/drivers/acpi/acpica/tbutils.c | |||
| @@ -538,10 +538,9 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags) | |||
| 538 | if (ACPI_FAILURE(status)) { | 538 | if (ACPI_FAILURE(status)) { |
| 539 | ACPI_WARNING((AE_INFO, | 539 | ACPI_WARNING((AE_INFO, |
| 540 | "Truncating %u table entries!", | 540 | "Truncating %u table entries!", |
| 541 | (unsigned) | 541 | (unsigned) (table_count - |
| 542 | (acpi_gbl_root_table_list.size - | 542 | (acpi_gbl_root_table_list. |
| 543 | acpi_gbl_root_table_list. | 543 | count - 2)))); |
| 544 | count))); | ||
| 545 | break; | 544 | break; |
| 546 | } | 545 | } |
| 547 | } | 546 | } |
diff --git a/drivers/acpi/acpica/uteval.c b/drivers/acpi/acpica/uteval.c index da9450bc60f7..9c9897dbe907 100644 --- a/drivers/acpi/acpica/uteval.c +++ b/drivers/acpi/acpica/uteval.c | |||
| @@ -116,9 +116,9 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state) | |||
| 116 | return_ACPI_STATUS(AE_NO_MEMORY); | 116 | return_ACPI_STATUS(AE_NO_MEMORY); |
| 117 | } | 117 | } |
| 118 | 118 | ||
| 119 | /* Default return value is SUPPORTED */ | 119 | /* Default return value is 0, NOT-SUPPORTED */ |
| 120 | 120 | ||
| 121 | return_desc->integer.value = ACPI_UINT32_MAX; | 121 | return_desc->integer.value = 0; |
| 122 | walk_state->return_desc = return_desc; | 122 | walk_state->return_desc = return_desc; |
| 123 | 123 | ||
| 124 | /* Compare input string to static table of supported interfaces */ | 124 | /* Compare input string to static table of supported interfaces */ |
| @@ -127,10 +127,8 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state) | |||
| 127 | if (!ACPI_STRCMP | 127 | if (!ACPI_STRCMP |
| 128 | (string_desc->string.pointer, | 128 | (string_desc->string.pointer, |
| 129 | acpi_interfaces_supported[i])) { | 129 | acpi_interfaces_supported[i])) { |
| 130 | 130 | return_desc->integer.value = ACPI_UINT32_MAX; | |
| 131 | /* The interface is supported */ | 131 | goto done; |
| 132 | |||
| 133 | return_ACPI_STATUS(AE_OK); | ||
| 134 | } | 132 | } |
| 135 | } | 133 | } |
| 136 | 134 | ||
| @@ -141,15 +139,14 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state) | |||
| 141 | */ | 139 | */ |
| 142 | status = acpi_os_validate_interface(string_desc->string.pointer); | 140 | status = acpi_os_validate_interface(string_desc->string.pointer); |
| 143 | if (ACPI_SUCCESS(status)) { | 141 | if (ACPI_SUCCESS(status)) { |
| 144 | 142 | return_desc->integer.value = ACPI_UINT32_MAX; | |
| 145 | /* The interface is supported */ | ||
| 146 | |||
| 147 | return_ACPI_STATUS(AE_OK); | ||
| 148 | } | 143 | } |
| 149 | 144 | ||
| 150 | /* The interface is not supported */ | 145 | done: |
| 146 | ACPI_DEBUG_PRINT_RAW((ACPI_DB_INFO, "ACPI: BIOS _OSI(%s) %ssupported\n", | ||
| 147 | string_desc->string.pointer, | ||
| 148 | return_desc->integer.value == 0 ? "not-" : "")); | ||
| 151 | 149 | ||
| 152 | return_desc->integer.value = 0; | ||
| 153 | return_ACPI_STATUS(AE_OK); | 150 | return_ACPI_STATUS(AE_OK); |
| 154 | } | 151 | } |
| 155 | 152 | ||
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c index 65132f920459..69cbc57c2d1c 100644 --- a/drivers/acpi/battery.c +++ b/drivers/acpi/battery.c | |||
| @@ -138,6 +138,29 @@ static int acpi_battery_technology(struct acpi_battery *battery) | |||
| 138 | 138 | ||
| 139 | static int acpi_battery_get_state(struct acpi_battery *battery); | 139 | static int acpi_battery_get_state(struct acpi_battery *battery); |
| 140 | 140 | ||
| 141 | static int acpi_battery_is_charged(struct acpi_battery *battery) | ||
| 142 | { | ||
| 143 | /* either charging or discharging */ | ||
| 144 | if (battery->state != 0) | ||
| 145 | return 0; | ||
| 146 | |||
| 147 | /* battery not reporting charge */ | ||
| 148 | if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN || | ||
| 149 | battery->capacity_now == 0) | ||
| 150 | return 0; | ||
| 151 | |||
| 152 | /* good batteries update full_charge as the batteries degrade */ | ||
| 153 | if (battery->full_charge_capacity == battery->capacity_now) | ||
| 154 | return 1; | ||
| 155 | |||
| 156 | /* fallback to using design values for broken batteries */ | ||
| 157 | if (battery->design_capacity == battery->capacity_now) | ||
| 158 | return 1; | ||
| 159 | |||
| 160 | /* we don't do any sort of metric based on percentages */ | ||
| 161 | return 0; | ||
| 162 | } | ||
| 163 | |||
| 141 | static int acpi_battery_get_property(struct power_supply *psy, | 164 | static int acpi_battery_get_property(struct power_supply *psy, |
| 142 | enum power_supply_property psp, | 165 | enum power_supply_property psp, |
| 143 | union power_supply_propval *val) | 166 | union power_supply_propval *val) |
| @@ -155,7 +178,7 @@ static int acpi_battery_get_property(struct power_supply *psy, | |||
| 155 | val->intval = POWER_SUPPLY_STATUS_DISCHARGING; | 178 | val->intval = POWER_SUPPLY_STATUS_DISCHARGING; |
| 156 | else if (battery->state & 0x02) | 179 | else if (battery->state & 0x02) |
| 157 | val->intval = POWER_SUPPLY_STATUS_CHARGING; | 180 | val->intval = POWER_SUPPLY_STATUS_CHARGING; |
| 158 | else if (battery->state == 0) | 181 | else if (acpi_battery_is_charged(battery)) |
| 159 | val->intval = POWER_SUPPLY_STATUS_FULL; | 182 | val->intval = POWER_SUPPLY_STATUS_FULL; |
| 160 | else | 183 | else |
| 161 | val->intval = POWER_SUPPLY_STATUS_UNKNOWN; | 184 | val->intval = POWER_SUPPLY_STATUS_UNKNOWN; |
diff --git a/drivers/acpi/container.c b/drivers/acpi/container.c index 17020c12623c..fe0cdf83641a 100644 --- a/drivers/acpi/container.c +++ b/drivers/acpi/container.c | |||
| @@ -163,7 +163,7 @@ static void container_notify_cb(acpi_handle handle, u32 type, void *context) | |||
| 163 | case ACPI_NOTIFY_BUS_CHECK: | 163 | case ACPI_NOTIFY_BUS_CHECK: |
| 164 | /* Fall through */ | 164 | /* Fall through */ |
| 165 | case ACPI_NOTIFY_DEVICE_CHECK: | 165 | case ACPI_NOTIFY_DEVICE_CHECK: |
| 166 | printk("Container driver received %s event\n", | 166 | printk(KERN_WARNING "Container driver received %s event\n", |
| 167 | (type == ACPI_NOTIFY_BUS_CHECK) ? | 167 | (type == ACPI_NOTIFY_BUS_CHECK) ? |
| 168 | "ACPI_NOTIFY_BUS_CHECK" : "ACPI_NOTIFY_DEVICE_CHECK"); | 168 | "ACPI_NOTIFY_BUS_CHECK" : "ACPI_NOTIFY_DEVICE_CHECK"); |
| 169 | status = acpi_bus_get_device(handle, &device); | 169 | status = acpi_bus_get_device(handle, &device); |
| @@ -174,7 +174,8 @@ static void container_notify_cb(acpi_handle handle, u32 type, void *context) | |||
| 174 | kobject_uevent(&device->dev.kobj, | 174 | kobject_uevent(&device->dev.kobj, |
| 175 | KOBJ_ONLINE); | 175 | KOBJ_ONLINE); |
| 176 | else | 176 | else |
| 177 | printk("Failed to add container\n"); | 177 | printk(KERN_WARNING |
| 178 | "Failed to add container\n"); | ||
| 178 | } | 179 | } |
| 179 | } else { | 180 | } else { |
| 180 | if (ACPI_SUCCESS(status)) { | 181 | if (ACPI_SUCCESS(status)) { |
diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c index 5b30b8d91d71..35094f230b1e 100644 --- a/drivers/acpi/dock.c +++ b/drivers/acpi/dock.c | |||
| @@ -855,10 +855,14 @@ fdd_out: | |||
| 855 | static ssize_t show_docked(struct device *dev, | 855 | static ssize_t show_docked(struct device *dev, |
| 856 | struct device_attribute *attr, char *buf) | 856 | struct device_attribute *attr, char *buf) |
| 857 | { | 857 | { |
| 858 | struct acpi_device *tmp; | ||
| 859 | |||
| 858 | struct dock_station *dock_station = *((struct dock_station **) | 860 | struct dock_station *dock_station = *((struct dock_station **) |
| 859 | dev->platform_data); | 861 | dev->platform_data); |
| 860 | return snprintf(buf, PAGE_SIZE, "%d\n", dock_present(dock_station)); | ||
| 861 | 862 | ||
| 863 | if (ACPI_SUCCESS(acpi_bus_get_device(dock_station->handle, &tmp))) | ||
| 864 | return snprintf(buf, PAGE_SIZE, "1\n"); | ||
| 865 | return snprintf(buf, PAGE_SIZE, "0\n"); | ||
| 862 | } | 866 | } |
| 863 | static DEVICE_ATTR(docked, S_IRUGO, show_docked, NULL); | 867 | static DEVICE_ATTR(docked, S_IRUGO, show_docked, NULL); |
| 864 | 868 | ||
| @@ -984,7 +988,7 @@ static int dock_add(acpi_handle handle) | |||
| 984 | 988 | ||
| 985 | ret = device_create_file(&dock_device->dev, &dev_attr_docked); | 989 | ret = device_create_file(&dock_device->dev, &dev_attr_docked); |
| 986 | if (ret) { | 990 | if (ret) { |
| 987 | printk("Error %d adding sysfs file\n", ret); | 991 | printk(KERN_ERR "Error %d adding sysfs file\n", ret); |
| 988 | platform_device_unregister(dock_device); | 992 | platform_device_unregister(dock_device); |
| 989 | kfree(dock_station); | 993 | kfree(dock_station); |
| 990 | dock_station = NULL; | 994 | dock_station = NULL; |
| @@ -992,7 +996,7 @@ static int dock_add(acpi_handle handle) | |||
| 992 | } | 996 | } |
| 993 | ret = device_create_file(&dock_device->dev, &dev_attr_undock); | 997 | ret = device_create_file(&dock_device->dev, &dev_attr_undock); |
| 994 | if (ret) { | 998 | if (ret) { |
| 995 | printk("Error %d adding sysfs file\n", ret); | 999 | printk(KERN_ERR "Error %d adding sysfs file\n", ret); |
| 996 | device_remove_file(&dock_device->dev, &dev_attr_docked); | 1000 | device_remove_file(&dock_device->dev, &dev_attr_docked); |
| 997 | platform_device_unregister(dock_device); | 1001 | platform_device_unregister(dock_device); |
| 998 | kfree(dock_station); | 1002 | kfree(dock_station); |
| @@ -1001,7 +1005,7 @@ static int dock_add(acpi_handle handle) | |||
| 1001 | } | 1005 | } |
| 1002 | ret = device_create_file(&dock_device->dev, &dev_attr_uid); | 1006 | ret = device_create_file(&dock_device->dev, &dev_attr_uid); |
| 1003 | if (ret) { | 1007 | if (ret) { |
| 1004 | printk("Error %d adding sysfs file\n", ret); | 1008 | printk(KERN_ERR "Error %d adding sysfs file\n", ret); |
| 1005 | device_remove_file(&dock_device->dev, &dev_attr_docked); | 1009 | device_remove_file(&dock_device->dev, &dev_attr_docked); |
| 1006 | device_remove_file(&dock_device->dev, &dev_attr_undock); | 1010 | device_remove_file(&dock_device->dev, &dev_attr_undock); |
| 1007 | platform_device_unregister(dock_device); | 1011 | platform_device_unregister(dock_device); |
| @@ -1011,7 +1015,7 @@ static int dock_add(acpi_handle handle) | |||
| 1011 | } | 1015 | } |
| 1012 | ret = device_create_file(&dock_device->dev, &dev_attr_flags); | 1016 | ret = device_create_file(&dock_device->dev, &dev_attr_flags); |
| 1013 | if (ret) { | 1017 | if (ret) { |
| 1014 | printk("Error %d adding sysfs file\n", ret); | 1018 | printk(KERN_ERR "Error %d adding sysfs file\n", ret); |
| 1015 | device_remove_file(&dock_device->dev, &dev_attr_docked); | 1019 | device_remove_file(&dock_device->dev, &dev_attr_docked); |
| 1016 | device_remove_file(&dock_device->dev, &dev_attr_undock); | 1020 | device_remove_file(&dock_device->dev, &dev_attr_undock); |
| 1017 | device_remove_file(&dock_device->dev, &dev_attr_uid); | 1021 | device_remove_file(&dock_device->dev, &dev_attr_uid); |
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index a2b82c90a683..2fe15060dcdc 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c | |||
| @@ -120,6 +120,8 @@ static struct acpi_ec { | |||
| 120 | spinlock_t curr_lock; | 120 | spinlock_t curr_lock; |
| 121 | } *boot_ec, *first_ec; | 121 | } *boot_ec, *first_ec; |
| 122 | 122 | ||
| 123 | static int EC_FLAGS_MSI; /* Out-of-spec MSI controller */ | ||
| 124 | |||
| 123 | /* -------------------------------------------------------------------------- | 125 | /* -------------------------------------------------------------------------- |
| 124 | Transaction Management | 126 | Transaction Management |
| 125 | -------------------------------------------------------------------------- */ | 127 | -------------------------------------------------------------------------- */ |
| @@ -259,6 +261,8 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, | |||
| 259 | clear_bit(EC_FLAGS_GPE_MODE, &ec->flags); | 261 | clear_bit(EC_FLAGS_GPE_MODE, &ec->flags); |
| 260 | acpi_disable_gpe(NULL, ec->gpe); | 262 | acpi_disable_gpe(NULL, ec->gpe); |
| 261 | } | 263 | } |
| 264 | if (EC_FLAGS_MSI) | ||
| 265 | udelay(ACPI_EC_DELAY); | ||
| 262 | /* start transaction */ | 266 | /* start transaction */ |
| 263 | spin_lock_irqsave(&ec->curr_lock, tmp); | 267 | spin_lock_irqsave(&ec->curr_lock, tmp); |
| 264 | /* following two actions should be kept atomic */ | 268 | /* following two actions should be kept atomic */ |
| @@ -967,6 +971,11 @@ int __init acpi_ec_ecdt_probe(void) | |||
| 967 | /* | 971 | /* |
| 968 | * Generate a boot ec context | 972 | * Generate a boot ec context |
| 969 | */ | 973 | */ |
| 974 | if (dmi_name_in_vendors("Micro-Star") || | ||
| 975 | dmi_name_in_vendors("Notebook")) { | ||
| 976 | pr_info(PREFIX "Enabling special treatment for EC from MSI.\n"); | ||
| 977 | EC_FLAGS_MSI = 1; | ||
| 978 | } | ||
| 970 | status = acpi_get_table(ACPI_SIG_ECDT, 1, | 979 | status = acpi_get_table(ACPI_SIG_ECDT, 1, |
| 971 | (struct acpi_table_header **)&ecdt_ptr); | 980 | (struct acpi_table_header **)&ecdt_ptr); |
| 972 | if (ACPI_SUCCESS(status)) { | 981 | if (ACPI_SUCCESS(status)) { |
| @@ -982,7 +991,7 @@ int __init acpi_ec_ecdt_probe(void) | |||
| 982 | saved_ec = kmalloc(sizeof(struct acpi_ec), GFP_KERNEL); | 991 | saved_ec = kmalloc(sizeof(struct acpi_ec), GFP_KERNEL); |
| 983 | if (!saved_ec) | 992 | if (!saved_ec) |
| 984 | return -ENOMEM; | 993 | return -ENOMEM; |
| 985 | memcpy(&saved_ec, boot_ec, sizeof(saved_ec)); | 994 | memcpy(saved_ec, boot_ec, sizeof(*saved_ec)); |
| 986 | /* fall through */ | 995 | /* fall through */ |
| 987 | } | 996 | } |
| 988 | /* This workaround is needed only on some broken machines, | 997 | /* This workaround is needed only on some broken machines, |
diff --git a/drivers/acpi/glue.c b/drivers/acpi/glue.c index adec3d15810a..5479b9f42513 100644 --- a/drivers/acpi/glue.c +++ b/drivers/acpi/glue.c | |||
| @@ -255,12 +255,12 @@ static int acpi_platform_notify(struct device *dev) | |||
| 255 | } | 255 | } |
| 256 | type = acpi_get_bus_type(dev->bus); | 256 | type = acpi_get_bus_type(dev->bus); |
| 257 | if (!type) { | 257 | if (!type) { |
| 258 | DBG("No ACPI bus support for %s\n", dev->bus_id); | 258 | DBG("No ACPI bus support for %s\n", dev_name(dev)); |
| 259 | ret = -EINVAL; | 259 | ret = -EINVAL; |
| 260 | goto end; | 260 | goto end; |
| 261 | } | 261 | } |
| 262 | if ((ret = type->find_device(dev, &handle)) != 0) | 262 | if ((ret = type->find_device(dev, &handle)) != 0) |
| 263 | DBG("Can't get handler for %s\n", dev->bus_id); | 263 | DBG("Can't get handler for %s\n", dev_name(dev)); |
| 264 | end: | 264 | end: |
| 265 | if (!ret) | 265 | if (!ret) |
| 266 | acpi_bind_one(dev, handle); | 266 | acpi_bind_one(dev, handle); |
| @@ -271,10 +271,10 @@ static int acpi_platform_notify(struct device *dev) | |||
| 271 | 271 | ||
| 272 | acpi_get_name(dev->archdata.acpi_handle, | 272 | acpi_get_name(dev->archdata.acpi_handle, |
| 273 | ACPI_FULL_PATHNAME, &buffer); | 273 | ACPI_FULL_PATHNAME, &buffer); |
| 274 | DBG("Device %s -> %s\n", dev->bus_id, (char *)buffer.pointer); | 274 | DBG("Device %s -> %s\n", dev_name(dev), (char *)buffer.pointer); |
| 275 | kfree(buffer.pointer); | 275 | kfree(buffer.pointer); |
| 276 | } else | 276 | } else |
| 277 | DBG("Device %s -> No ACPI support\n", dev->bus_id); | 277 | DBG("Device %s -> No ACPI support\n", dev_name(dev)); |
| 278 | #endif | 278 | #endif |
| 279 | 279 | ||
| 280 | return ret; | 280 | return ret; |
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index 6729a4992f2b..b3193ec0a2ef 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c | |||
| @@ -228,10 +228,10 @@ void acpi_os_vprintf(const char *fmt, va_list args) | |||
| 228 | if (acpi_in_debugger) { | 228 | if (acpi_in_debugger) { |
| 229 | kdb_printf("%s", buffer); | 229 | kdb_printf("%s", buffer); |
| 230 | } else { | 230 | } else { |
| 231 | printk("%s", buffer); | 231 | printk(KERN_CONT "%s", buffer); |
| 232 | } | 232 | } |
| 233 | #else | 233 | #else |
| 234 | printk("%s", buffer); | 234 | printk(KERN_CONT "%s", buffer); |
| 235 | #endif | 235 | #endif |
| 236 | } | 236 | } |
| 237 | 237 | ||
| @@ -1317,6 +1317,54 @@ acpi_os_validate_interface (char *interface) | |||
| 1317 | return AE_SUPPORT; | 1317 | return AE_SUPPORT; |
| 1318 | } | 1318 | } |
| 1319 | 1319 | ||
| 1320 | #ifdef CONFIG_X86 | ||
| 1321 | |||
| 1322 | struct aml_port_desc { | ||
| 1323 | uint start; | ||
| 1324 | uint end; | ||
| 1325 | char* name; | ||
| 1326 | char warned; | ||
| 1327 | }; | ||
| 1328 | |||
| 1329 | static struct aml_port_desc aml_invalid_port_list[] = { | ||
| 1330 | {0x20, 0x21, "PIC0", 0}, | ||
| 1331 | {0xA0, 0xA1, "PIC1", 0}, | ||
| 1332 | {0x4D0, 0x4D1, "ELCR", 0} | ||
| 1333 | }; | ||
| 1334 | |||
| 1335 | /* | ||
| 1336 | * valid_aml_io_address() | ||
| 1337 | * | ||
| 1338 | * if valid, return true | ||
| 1339 | * else invalid, warn once, return false | ||
| 1340 | */ | ||
| 1341 | static bool valid_aml_io_address(uint address, uint length) | ||
| 1342 | { | ||
| 1343 | int i; | ||
| 1344 | int entries = sizeof(aml_invalid_port_list) / sizeof(struct aml_port_desc); | ||
| 1345 | |||
| 1346 | for (i = 0; i < entries; ++i) { | ||
| 1347 | if ((address >= aml_invalid_port_list[i].start && | ||
| 1348 | address <= aml_invalid_port_list[i].end) || | ||
| 1349 | (address + length >= aml_invalid_port_list[i].start && | ||
| 1350 | address + length <= aml_invalid_port_list[i].end)) | ||
| 1351 | { | ||
| 1352 | if (!aml_invalid_port_list[i].warned) | ||
| 1353 | { | ||
| 1354 | printk(KERN_ERR "ACPI: Denied BIOS AML access" | ||
| 1355 | " to invalid port 0x%x+0x%x (%s)\n", | ||
| 1356 | address, length, | ||
| 1357 | aml_invalid_port_list[i].name); | ||
| 1358 | aml_invalid_port_list[i].warned = 1; | ||
| 1359 | } | ||
| 1360 | return false; /* invalid */ | ||
| 1361 | } | ||
| 1362 | } | ||
| 1363 | return true; /* valid */ | ||
| 1364 | } | ||
| 1365 | #else | ||
| 1366 | static inline bool valid_aml_io_address(uint address, uint length) { return true; } | ||
| 1367 | #endif | ||
| 1320 | /****************************************************************************** | 1368 | /****************************************************************************** |
| 1321 | * | 1369 | * |
| 1322 | * FUNCTION: acpi_os_validate_address | 1370 | * FUNCTION: acpi_os_validate_address |
| @@ -1346,6 +1394,8 @@ acpi_os_validate_address ( | |||
| 1346 | 1394 | ||
| 1347 | switch (space_id) { | 1395 | switch (space_id) { |
| 1348 | case ACPI_ADR_SPACE_SYSTEM_IO: | 1396 | case ACPI_ADR_SPACE_SYSTEM_IO: |
| 1397 | if (!valid_aml_io_address(address, length)) | ||
| 1398 | return AE_AML_ILLEGAL_ADDRESS; | ||
| 1349 | case ACPI_ADR_SPACE_SYSTEM_MEMORY: | 1399 | case ACPI_ADR_SPACE_SYSTEM_MEMORY: |
| 1350 | /* Only interference checks against SystemIO and SytemMemory | 1400 | /* Only interference checks against SystemIO and SytemMemory |
| 1351 | are needed */ | 1401 | are needed */ |
diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c index 1c6e73c7865e..6c772ca76bd1 100644 --- a/drivers/acpi/pci_link.c +++ b/drivers/acpi/pci_link.c | |||
| @@ -593,7 +593,7 @@ static int acpi_pci_link_allocate(struct acpi_pci_link *link) | |||
| 593 | return -ENODEV; | 593 | return -ENODEV; |
| 594 | } else { | 594 | } else { |
| 595 | acpi_irq_penalty[link->irq.active] += PIRQ_PENALTY_PCI_USING; | 595 | acpi_irq_penalty[link->irq.active] += PIRQ_PENALTY_PCI_USING; |
| 596 | printk(PREFIX "%s [%s] enabled at IRQ %d\n", | 596 | printk(KERN_WARNING PREFIX "%s [%s] enabled at IRQ %d\n", |
| 597 | acpi_device_name(link->device), | 597 | acpi_device_name(link->device), |
| 598 | acpi_device_bid(link->device), link->irq.active); | 598 | acpi_device_bid(link->device), link->irq.active); |
| 599 | } | 599 | } |
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index 66a9d8145562..7bc22a471fe3 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c | |||
| @@ -66,43 +66,17 @@ ACPI_MODULE_NAME("processor_idle"); | |||
| 66 | #define ACPI_PROCESSOR_FILE_POWER "power" | 66 | #define ACPI_PROCESSOR_FILE_POWER "power" |
| 67 | #define US_TO_PM_TIMER_TICKS(t) ((t * (PM_TIMER_FREQUENCY/1000)) / 1000) | 67 | #define US_TO_PM_TIMER_TICKS(t) ((t * (PM_TIMER_FREQUENCY/1000)) / 1000) |
| 68 | #define PM_TIMER_TICK_NS (1000000000ULL/PM_TIMER_FREQUENCY) | 68 | #define PM_TIMER_TICK_NS (1000000000ULL/PM_TIMER_FREQUENCY) |
| 69 | #ifndef CONFIG_CPU_IDLE | ||
| 70 | #define C2_OVERHEAD 4 /* 1us (3.579 ticks per us) */ | ||
| 71 | #define C3_OVERHEAD 4 /* 1us (3.579 ticks per us) */ | ||
| 72 | static void (*pm_idle_save) (void) __read_mostly; | ||
| 73 | #else | ||
| 74 | #define C2_OVERHEAD 1 /* 1us */ | 69 | #define C2_OVERHEAD 1 /* 1us */ |
| 75 | #define C3_OVERHEAD 1 /* 1us */ | 70 | #define C3_OVERHEAD 1 /* 1us */ |
| 76 | #endif | ||
| 77 | #define PM_TIMER_TICKS_TO_US(p) (((p) * 1000)/(PM_TIMER_FREQUENCY/1000)) | 71 | #define PM_TIMER_TICKS_TO_US(p) (((p) * 1000)/(PM_TIMER_FREQUENCY/1000)) |
| 78 | 72 | ||
| 79 | static unsigned int max_cstate __read_mostly = ACPI_PROCESSOR_MAX_POWER; | 73 | static unsigned int max_cstate __read_mostly = ACPI_PROCESSOR_MAX_POWER; |
| 80 | #ifdef CONFIG_CPU_IDLE | ||
| 81 | module_param(max_cstate, uint, 0000); | 74 | module_param(max_cstate, uint, 0000); |
| 82 | #else | ||
| 83 | module_param(max_cstate, uint, 0644); | ||
| 84 | #endif | ||
| 85 | static unsigned int nocst __read_mostly; | 75 | static unsigned int nocst __read_mostly; |
| 86 | module_param(nocst, uint, 0000); | 76 | module_param(nocst, uint, 0000); |
| 87 | 77 | ||
| 88 | #ifndef CONFIG_CPU_IDLE | ||
| 89 | /* | ||
| 90 | * bm_history -- bit-mask with a bit per jiffy of bus-master activity | ||
| 91 | * 1000 HZ: 0xFFFFFFFF: 32 jiffies = 32ms | ||
| 92 | * 800 HZ: 0xFFFFFFFF: 32 jiffies = 40ms | ||
| 93 | * 100 HZ: 0x0000000F: 4 jiffies = 40ms | ||
| 94 | * reduce history for more aggressive entry into C3 | ||
| 95 | */ | ||
| 96 | static unsigned int bm_history __read_mostly = | ||
| 97 | (HZ >= 800 ? 0xFFFFFFFF : ((1U << (HZ / 25)) - 1)); | ||
| 98 | module_param(bm_history, uint, 0644); | ||
| 99 | |||
| 100 | static int acpi_processor_set_power_policy(struct acpi_processor *pr); | ||
| 101 | |||
| 102 | #else /* CONFIG_CPU_IDLE */ | ||
| 103 | static unsigned int latency_factor __read_mostly = 2; | 78 | static unsigned int latency_factor __read_mostly = 2; |
| 104 | module_param(latency_factor, uint, 0644); | 79 | module_param(latency_factor, uint, 0644); |
| 105 | #endif | ||
| 106 | 80 | ||
| 107 | /* | 81 | /* |
| 108 | * IBM ThinkPad R40e crashes mysteriously when going into C2 or C3. | 82 | * IBM ThinkPad R40e crashes mysteriously when going into C2 or C3. |
| @@ -224,71 +198,6 @@ static void acpi_safe_halt(void) | |||
| 224 | current_thread_info()->status |= TS_POLLING; | 198 | current_thread_info()->status |= TS_POLLING; |
| 225 | } | 199 | } |
| 226 | 200 | ||
| 227 | #ifndef CONFIG_CPU_IDLE | ||
| 228 | |||
| 229 | static void | ||
| 230 | acpi_processor_power_activate(struct acpi_processor *pr, | ||
| 231 | struct acpi_processor_cx *new) | ||
| 232 | { | ||
| 233 | struct acpi_processor_cx *old; | ||
| 234 | |||
| 235 | if (!pr || !new) | ||
| 236 | return; | ||
| 237 | |||
| 238 | old = pr->power.state; | ||
| 239 | |||
| 240 | if (old) | ||
| 241 | old->promotion.count = 0; | ||
| 242 | new->demotion.count = 0; | ||
| 243 | |||
| 244 | /* Cleanup from old state. */ | ||
| 245 | if (old) { | ||
| 246 | switch (old->type) { | ||
| 247 | case ACPI_STATE_C3: | ||
| 248 | /* Disable bus master reload */ | ||
| 249 | if (new->type != ACPI_STATE_C3 && pr->flags.bm_check) | ||
| 250 | acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0); | ||
| 251 | break; | ||
| 252 | } | ||
| 253 | } | ||
| 254 | |||
| 255 | /* Prepare to use new state. */ | ||
| 256 | switch (new->type) { | ||
| 257 | case ACPI_STATE_C3: | ||
| 258 | /* Enable bus master reload */ | ||
| 259 | if (old->type != ACPI_STATE_C3 && pr->flags.bm_check) | ||
| 260 | acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 1); | ||
| 261 | break; | ||
| 262 | } | ||
| 263 | |||
| 264 | pr->power.state = new; | ||
| 265 | |||
| 266 | return; | ||
| 267 | } | ||
| 268 | |||
| 269 | static atomic_t c3_cpu_count; | ||
| 270 | |||
| 271 | /* Common C-state entry for C2, C3, .. */ | ||
| 272 | static void acpi_cstate_enter(struct acpi_processor_cx *cstate) | ||
| 273 | { | ||
| 274 | /* Don't trace irqs off for idle */ | ||
| 275 | stop_critical_timings(); | ||
| 276 | if (cstate->entry_method == ACPI_CSTATE_FFH) { | ||
| 277 | /* Call into architectural FFH based C-state */ | ||
| 278 | acpi_processor_ffh_cstate_enter(cstate); | ||
| 279 | } else { | ||
| 280 | int unused; | ||
| 281 | /* IO port based C-state */ | ||
| 282 | inb(cstate->address); | ||
| 283 | /* Dummy wait op - must do something useless after P_LVL2 read | ||
| 284 | because chipsets cannot guarantee that STPCLK# signal | ||
| 285 | gets asserted in time to freeze execution properly. */ | ||
| 286 | unused = inl(acpi_gbl_FADT.xpm_timer_block.address); | ||
| 287 | } | ||
| 288 | start_critical_timings(); | ||
| 289 | } | ||
| 290 | #endif /* !CONFIG_CPU_IDLE */ | ||
| 291 | |||
| 292 | #ifdef ARCH_APICTIMER_STOPS_ON_C3 | 201 | #ifdef ARCH_APICTIMER_STOPS_ON_C3 |
| 293 | 202 | ||
| 294 | /* | 203 | /* |
| @@ -390,421 +299,6 @@ static int tsc_halts_in_c(int state) | |||
| 390 | } | 299 | } |
| 391 | #endif | 300 | #endif |
| 392 | 301 | ||
| 393 | #ifndef CONFIG_CPU_IDLE | ||
| 394 | static void acpi_processor_idle(void) | ||
| 395 | { | ||
| 396 | struct acpi_processor *pr = NULL; | ||
| 397 | struct acpi_processor_cx *cx = NULL; | ||
| 398 | struct acpi_processor_cx *next_state = NULL; | ||
| 399 | int sleep_ticks = 0; | ||
| 400 | u32 t1, t2 = 0; | ||
| 401 | |||
| 402 | /* | ||
| 403 | * Interrupts must be disabled during bus mastering calculations and | ||
| 404 | * for C2/C3 transitions. | ||
| 405 | */ | ||
| 406 | local_irq_disable(); | ||
| 407 | |||
| 408 | pr = __get_cpu_var(processors); | ||
| 409 | if (!pr) { | ||
| 410 | local_irq_enable(); | ||
| 411 | return; | ||
| 412 | } | ||
| 413 | |||
| 414 | /* | ||
| 415 | * Check whether we truly need to go idle, or should | ||
| 416 | * reschedule: | ||
| 417 | */ | ||
| 418 | if (unlikely(need_resched())) { | ||
| 419 | local_irq_enable(); | ||
| 420 | return; | ||
| 421 | } | ||
| 422 | |||
| 423 | cx = pr->power.state; | ||
| 424 | if (!cx || acpi_idle_suspend) { | ||
| 425 | if (pm_idle_save) { | ||
| 426 | pm_idle_save(); /* enables IRQs */ | ||
| 427 | } else { | ||
| 428 | acpi_safe_halt(); | ||
| 429 | local_irq_enable(); | ||
| 430 | } | ||
| 431 | |||
| 432 | return; | ||
| 433 | } | ||
| 434 | |||
| 435 | /* | ||
| 436 | * Check BM Activity | ||
| 437 | * ----------------- | ||
| 438 | * Check for bus mastering activity (if required), record, and check | ||
| 439 | * for demotion. | ||
| 440 | */ | ||
| 441 | if (pr->flags.bm_check) { | ||
| 442 | u32 bm_status = 0; | ||
| 443 | unsigned long diff = jiffies - pr->power.bm_check_timestamp; | ||
| 444 | |||
| 445 | if (diff > 31) | ||
| 446 | diff = 31; | ||
| 447 | |||
| 448 | pr->power.bm_activity <<= diff; | ||
| 449 | |||
| 450 | acpi_get_register(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status); | ||
| 451 | if (bm_status) { | ||
| 452 | pr->power.bm_activity |= 0x1; | ||
| 453 | acpi_set_register(ACPI_BITREG_BUS_MASTER_STATUS, 1); | ||
| 454 | } | ||
| 455 | /* | ||
| 456 | * PIIX4 Erratum #18: Note that BM_STS doesn't always reflect | ||
| 457 | * the true state of bus mastering activity; forcing us to | ||
| 458 | * manually check the BMIDEA bit of each IDE channel. | ||
| 459 | */ | ||
| 460 | else if (errata.piix4.bmisx) { | ||
| 461 | if ((inb_p(errata.piix4.bmisx + 0x02) & 0x01) | ||
| 462 | || (inb_p(errata.piix4.bmisx + 0x0A) & 0x01)) | ||
| 463 | pr->power.bm_activity |= 0x1; | ||
| 464 | } | ||
| 465 | |||
| 466 | pr->power.bm_check_timestamp = jiffies; | ||
| 467 | |||
| 468 | /* | ||
| 469 | * If bus mastering is or was active this jiffy, demote | ||
| 470 | * to avoid a faulty transition. Note that the processor | ||
| 471 | * won't enter a low-power state during this call (to this | ||
| 472 | * function) but should upon the next. | ||
| 473 | * | ||
| 474 | * TBD: A better policy might be to fallback to the demotion | ||
| 475 | * state (use it for this quantum only) istead of | ||
| 476 | * demoting -- and rely on duration as our sole demotion | ||
| 477 | * qualification. This may, however, introduce DMA | ||
| 478 | * issues (e.g. floppy DMA transfer overrun/underrun). | ||
| 479 | */ | ||
| 480 | if ((pr->power.bm_activity & 0x1) && | ||
| 481 | cx->demotion.threshold.bm) { | ||
| 482 | local_irq_enable(); | ||
| 483 | next_state = cx->demotion.state; | ||
| 484 | goto end; | ||
| 485 | } | ||
| 486 | } | ||
| 487 | |||
| 488 | #ifdef CONFIG_HOTPLUG_CPU | ||
| 489 | /* | ||
| 490 | * Check for P_LVL2_UP flag before entering C2 and above on | ||
| 491 | * an SMP system. We do it here instead of doing it at _CST/P_LVL | ||
| 492 | * detection phase, to work cleanly with logical CPU hotplug. | ||
| 493 | */ | ||
| 494 | if ((cx->type != ACPI_STATE_C1) && (num_online_cpus() > 1) && | ||
| 495 | !pr->flags.has_cst && !(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED)) | ||
| 496 | cx = &pr->power.states[ACPI_STATE_C1]; | ||
| 497 | #endif | ||
| 498 | |||
| 499 | /* | ||
| 500 | * Sleep: | ||
| 501 | * ------ | ||
| 502 | * Invoke the current Cx state to put the processor to sleep. | ||
| 503 | */ | ||
| 504 | if (cx->type == ACPI_STATE_C2 || cx->type == ACPI_STATE_C3) { | ||
| 505 | current_thread_info()->status &= ~TS_POLLING; | ||
| 506 | /* | ||
| 507 | * TS_POLLING-cleared state must be visible before we | ||
| 508 | * test NEED_RESCHED: | ||
| 509 | */ | ||
| 510 | smp_mb(); | ||
| 511 | if (need_resched()) { | ||
| 512 | current_thread_info()->status |= TS_POLLING; | ||
| 513 | local_irq_enable(); | ||
| 514 | return; | ||
| 515 | } | ||
| 516 | } | ||
| 517 | |||
| 518 | switch (cx->type) { | ||
| 519 | |||
| 520 | case ACPI_STATE_C1: | ||
| 521 | /* | ||
| 522 | * Invoke C1. | ||
| 523 | * Use the appropriate idle routine, the one that would | ||
| 524 | * be used without acpi C-states. | ||
| 525 | */ | ||
| 526 | if (pm_idle_save) { | ||
| 527 | pm_idle_save(); /* enables IRQs */ | ||
| 528 | } else { | ||
| 529 | acpi_safe_halt(); | ||
| 530 | local_irq_enable(); | ||
| 531 | } | ||
| 532 | |||
| 533 | /* | ||
| 534 | * TBD: Can't get time duration while in C1, as resumes | ||
| 535 | * go to an ISR rather than here. Need to instrument | ||
| 536 | * base interrupt handler. | ||
| 537 | * | ||
| 538 | * Note: the TSC better not stop in C1, sched_clock() will | ||
| 539 | * skew otherwise. | ||
| 540 | */ | ||
| 541 | sleep_ticks = 0xFFFFFFFF; | ||
| 542 | |||
| 543 | break; | ||
| 544 | |||
| 545 | case ACPI_STATE_C2: | ||
| 546 | /* Get start time (ticks) */ | ||
| 547 | t1 = inl(acpi_gbl_FADT.xpm_timer_block.address); | ||
| 548 | /* Tell the scheduler that we are going deep-idle: */ | ||
| 549 | sched_clock_idle_sleep_event(); | ||
| 550 | /* Invoke C2 */ | ||
| 551 | acpi_state_timer_broadcast(pr, cx, 1); | ||
| 552 | acpi_cstate_enter(cx); | ||
| 553 | /* Get end time (ticks) */ | ||
| 554 | t2 = inl(acpi_gbl_FADT.xpm_timer_block.address); | ||
| 555 | |||
| 556 | #if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86) | ||
| 557 | /* TSC halts in C2, so notify users */ | ||
| 558 | if (tsc_halts_in_c(ACPI_STATE_C2)) | ||
| 559 | mark_tsc_unstable("possible TSC halt in C2"); | ||
| 560 | #endif | ||
| 561 | /* Compute time (ticks) that we were actually asleep */ | ||
| 562 | sleep_ticks = ticks_elapsed(t1, t2); | ||
| 563 | |||
| 564 | /* Tell the scheduler how much we idled: */ | ||
| 565 | sched_clock_idle_wakeup_event(sleep_ticks*PM_TIMER_TICK_NS); | ||
| 566 | |||
| 567 | /* Re-enable interrupts */ | ||
| 568 | local_irq_enable(); | ||
| 569 | /* Do not account our idle-switching overhead: */ | ||
| 570 | sleep_ticks -= cx->latency_ticks + C2_OVERHEAD; | ||
| 571 | |||
| 572 | current_thread_info()->status |= TS_POLLING; | ||
| 573 | acpi_state_timer_broadcast(pr, cx, 0); | ||
| 574 | break; | ||
| 575 | |||
| 576 | case ACPI_STATE_C3: | ||
| 577 | acpi_unlazy_tlb(smp_processor_id()); | ||
| 578 | /* | ||
| 579 | * Must be done before busmaster disable as we might | ||
| 580 | * need to access HPET ! | ||
| 581 | */ | ||
| 582 | acpi_state_timer_broadcast(pr, cx, 1); | ||
| 583 | /* | ||
| 584 | * disable bus master | ||
| 585 | * bm_check implies we need ARB_DIS | ||
| 586 | * !bm_check implies we need cache flush | ||
| 587 | * bm_control implies whether we can do ARB_DIS | ||
| 588 | * | ||
| 589 | * That leaves a case where bm_check is set and bm_control is | ||
| 590 | * not set. In that case we cannot do much, we enter C3 | ||
| 591 | * without doing anything. | ||
| 592 | */ | ||
| 593 | if (pr->flags.bm_check && pr->flags.bm_control) { | ||
| 594 | if (atomic_inc_return(&c3_cpu_count) == | ||
| 595 | num_online_cpus()) { | ||
| 596 | /* | ||
| 597 | * All CPUs are trying to go to C3 | ||
| 598 | * Disable bus master arbitration | ||
| 599 | */ | ||
| 600 | acpi_set_register(ACPI_BITREG_ARB_DISABLE, 1); | ||
| 601 | } | ||
| 602 | } else if (!pr->flags.bm_check) { | ||
| 603 | /* SMP with no shared cache... Invalidate cache */ | ||
| 604 | ACPI_FLUSH_CPU_CACHE(); | ||
| 605 | } | ||
| 606 | |||
| 607 | /* Get start time (ticks) */ | ||
| 608 | t1 = inl(acpi_gbl_FADT.xpm_timer_block.address); | ||
| 609 | /* Invoke C3 */ | ||
| 610 | /* Tell the scheduler that we are going deep-idle: */ | ||
| 611 | sched_clock_idle_sleep_event(); | ||
| 612 | acpi_cstate_enter(cx); | ||
| 613 | /* Get end time (ticks) */ | ||
| 614 | t2 = inl(acpi_gbl_FADT.xpm_timer_block.address); | ||
| 615 | if (pr->flags.bm_check && pr->flags.bm_control) { | ||
| 616 | /* Enable bus master arbitration */ | ||
| 617 | atomic_dec(&c3_cpu_count); | ||
| 618 | acpi_set_register(ACPI_BITREG_ARB_DISABLE, 0); | ||
| 619 | } | ||
| 620 | |||
| 621 | #if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86) | ||
| 622 | /* TSC halts in C3, so notify users */ | ||
| 623 | if (tsc_halts_in_c(ACPI_STATE_C3)) | ||
| 624 | mark_tsc_unstable("TSC halts in C3"); | ||
| 625 | #endif | ||
| 626 | /* Compute time (ticks) that we were actually asleep */ | ||
| 627 | sleep_ticks = ticks_elapsed(t1, t2); | ||
| 628 | /* Tell the scheduler how much we idled: */ | ||
| 629 | sched_clock_idle_wakeup_event(sleep_ticks*PM_TIMER_TICK_NS); | ||
| 630 | |||
| 631 | /* Re-enable interrupts */ | ||
| 632 | local_irq_enable(); | ||
| 633 | /* Do not account our idle-switching overhead: */ | ||
| 634 | sleep_ticks -= cx->latency_ticks + C3_OVERHEAD; | ||
| 635 | |||
| 636 | current_thread_info()->status |= TS_POLLING; | ||
| 637 | acpi_state_timer_broadcast(pr, cx, 0); | ||
| 638 | break; | ||
| 639 | |||
| 640 | default: | ||
| 641 | local_irq_enable(); | ||
| 642 | return; | ||
| 643 | } | ||
| 644 | cx->usage++; | ||
| 645 | if ((cx->type != ACPI_STATE_C1) && (sleep_ticks > 0)) | ||
| 646 | cx->time += sleep_ticks; | ||
| 647 | |||
| 648 | next_state = pr->power.state; | ||
| 649 | |||
| 650 | #ifdef CONFIG_HOTPLUG_CPU | ||
| 651 | /* Don't do promotion/demotion */ | ||
| 652 | if ((cx->type == ACPI_STATE_C1) && (num_online_cpus() > 1) && | ||
| 653 | !pr->flags.has_cst && !(acpi_gbl_FADT.flags & ACPI_FADT_C2_MP_SUPPORTED)) { | ||
| 654 | next_state = cx; | ||
| 655 | goto end; | ||
| 656 | } | ||
| 657 | #endif | ||
| 658 | |||
| 659 | /* | ||
| 660 | * Promotion? | ||
| 661 | * ---------- | ||
| 662 | * Track the number of longs (time asleep is greater than threshold) | ||
| 663 | * and promote when the count threshold is reached. Note that bus | ||
| 664 | * mastering activity may prevent promotions. | ||
| 665 | * Do not promote above max_cstate. | ||
| 666 | */ | ||
| 667 | if (cx->promotion.state && | ||
| 668 | ((cx->promotion.state - pr->power.states) <= max_cstate)) { | ||
| 669 | if (sleep_ticks > cx->promotion.threshold.ticks && | ||
| 670 | cx->promotion.state->latency <= | ||
| 671 | pm_qos_requirement(PM_QOS_CPU_DMA_LATENCY)) { | ||
| 672 | cx->promotion.count++; | ||
| 673 | cx->demotion.count = 0; | ||
| 674 | if (cx->promotion.count >= | ||
| 675 | cx->promotion.threshold.count) { | ||
| 676 | if (pr->flags.bm_check) { | ||
| 677 | if (! | ||
| 678 | (pr->power.bm_activity & cx-> | ||
| 679 | promotion.threshold.bm)) { | ||
| 680 | next_state = | ||
| 681 | cx->promotion.state; | ||
| 682 | goto end; | ||
| 683 | } | ||
| 684 | } else { | ||
| 685 | next_state = cx->promotion.state; | ||
| 686 | goto end; | ||
| 687 | } | ||
| 688 | } | ||
| 689 | } | ||
| 690 | } | ||
| 691 | |||
| 692 | /* | ||
| 693 | * Demotion? | ||
| 694 | * --------- | ||
| 695 | * Track the number of shorts (time asleep is less than time threshold) | ||
| 696 | * and demote when the usage threshold is reached. | ||
| 697 | */ | ||
| 698 | if (cx->demotion.state) { | ||
| 699 | if (sleep_ticks < cx->demotion.threshold.ticks) { | ||
| 700 | cx->demotion.count++; | ||
| 701 | cx->promotion.count = 0; | ||
| 702 | if (cx->demotion.count >= cx->demotion.threshold.count) { | ||
| 703 | next_state = cx->demotion.state; | ||
| 704 | goto end; | ||
| 705 | } | ||
| 706 | } | ||
| 707 | } | ||
| 708 | |||
| 709 | end: | ||
| 710 | /* | ||
| 711 | * Demote if current state exceeds max_cstate | ||
| 712 | * or if the latency of the current state is unacceptable | ||
| 713 | */ | ||
| 714 | if ((pr->power.state - pr->power.states) > max_cstate || | ||
| 715 | pr->power.state->latency > | ||
| 716 | pm_qos_requirement(PM_QOS_CPU_DMA_LATENCY)) { | ||
| 717 | if (cx->demotion.state) | ||
| 718 | next_state = cx->demotion.state; | ||
| 719 | } | ||
| 720 | |||
| 721 | /* | ||
| 722 | * New Cx State? | ||
| 723 | * ------------- | ||
| 724 | * If we're going to start using a new Cx state we must clean up | ||
| 725 | * from the previous and prepare to use the new. | ||
| 726 | */ | ||
| 727 | if (next_state != pr->power.state) | ||
| 728 | acpi_processor_power_activate(pr, next_state); | ||
| 729 | } | ||
| 730 | |||
| 731 | static int acpi_processor_set_power_policy(struct acpi_processor *pr) | ||
| 732 | { | ||
| 733 | unsigned int i; | ||
| 734 | unsigned int state_is_set = 0; | ||
| 735 | struct acpi_processor_cx *lower = NULL; | ||
| 736 | struct acpi_processor_cx *higher = NULL; | ||
| 737 | struct acpi_processor_cx *cx; | ||
| 738 | |||
| 739 | |||
| 740 | if (!pr) | ||
| 741 | return -EINVAL; | ||
| 742 | |||
| 743 | /* | ||
| 744 | * This function sets the default Cx state policy (OS idle handler). | ||
| 745 | * Our scheme is to promote quickly to C2 but more conservatively | ||
| 746 | * to C3. We're favoring C2 for its characteristics of low latency | ||
| 747 | * (quick response), good power savings, and ability to allow bus | ||
| 748 | * mastering activity. Note that the Cx state policy is completely | ||
| 749 | * customizable and can be altered dynamically. | ||
| 750 | */ | ||
| 751 | |||
| 752 | /* startup state */ | ||
| 753 | for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) { | ||
| 754 | cx = &pr->power.states[i]; | ||
| 755 | if (!cx->valid) | ||
| 756 | continue; | ||
| 757 | |||
| 758 | if (!state_is_set) | ||
| 759 | pr->power.state = cx; | ||
| 760 | state_is_set++; | ||
| 761 | break; | ||
| 762 | } | ||
| 763 | |||
| 764 | if (!state_is_set) | ||
| 765 | return -ENODEV; | ||
| 766 | |||
| 767 | /* demotion */ | ||
| 768 | for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) { | ||
| 769 | cx = &pr->power.states[i]; | ||
| 770 | if (!cx->valid) | ||
| 771 | continue; | ||
| 772 | |||
| 773 | if (lower) { | ||
| 774 | cx->demotion.state = lower; | ||
| 775 | cx->demotion.threshold.ticks = cx->latency_ticks; | ||
| 776 | cx->demotion.threshold.count = 1; | ||
| 777 | if (cx->type == ACPI_STATE_C3) | ||
| 778 | cx->demotion.threshold.bm = bm_history; | ||
| 779 | } | ||
| 780 | |||
| 781 | lower = cx; | ||
| 782 | } | ||
| 783 | |||
| 784 | /* promotion */ | ||
| 785 | for (i = (ACPI_PROCESSOR_MAX_POWER - 1); i > 0; i--) { | ||
| 786 | cx = &pr->power.states[i]; | ||
| 787 | if (!cx->valid) | ||
| 788 | continue; | ||
| 789 | |||
| 790 | if (higher) { | ||
| 791 | cx->promotion.state = higher; | ||
| 792 | cx->promotion.threshold.ticks = cx->latency_ticks; | ||
| 793 | if (cx->type >= ACPI_STATE_C2) | ||
| 794 | cx->promotion.threshold.count = 4; | ||
| 795 | else | ||
| 796 | cx->promotion.threshold.count = 10; | ||
| 797 | if (higher->type == ACPI_STATE_C3) | ||
| 798 | cx->promotion.threshold.bm = bm_history; | ||
| 799 | } | ||
| 800 | |||
| 801 | higher = cx; | ||
| 802 | } | ||
| 803 | |||
| 804 | return 0; | ||
| 805 | } | ||
| 806 | #endif /* !CONFIG_CPU_IDLE */ | ||
| 807 | |||
| 808 | static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr) | 302 | static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr) |
| 809 | { | 303 | { |
| 810 | 304 | ||
| @@ -1047,11 +541,7 @@ static void acpi_processor_power_verify_c2(struct acpi_processor_cx *cx) | |||
| 1047 | */ | 541 | */ |
| 1048 | cx->valid = 1; | 542 | cx->valid = 1; |
| 1049 | 543 | ||
| 1050 | #ifndef CONFIG_CPU_IDLE | ||
| 1051 | cx->latency_ticks = US_TO_PM_TIMER_TICKS(cx->latency); | ||
| 1052 | #else | ||
| 1053 | cx->latency_ticks = cx->latency; | 544 | cx->latency_ticks = cx->latency; |
| 1054 | #endif | ||
| 1055 | 545 | ||
| 1056 | return; | 546 | return; |
| 1057 | } | 547 | } |
| @@ -1121,7 +611,6 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr, | |||
| 1121 | " for C3 to be enabled on SMP systems\n")); | 611 | " for C3 to be enabled on SMP systems\n")); |
| 1122 | return; | 612 | return; |
| 1123 | } | 613 | } |
| 1124 | acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0); | ||
| 1125 | } | 614 | } |
| 1126 | 615 | ||
| 1127 | /* | 616 | /* |
| @@ -1132,11 +621,16 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr, | |||
| 1132 | */ | 621 | */ |
| 1133 | cx->valid = 1; | 622 | cx->valid = 1; |
| 1134 | 623 | ||
| 1135 | #ifndef CONFIG_CPU_IDLE | ||
| 1136 | cx->latency_ticks = US_TO_PM_TIMER_TICKS(cx->latency); | ||
| 1137 | #else | ||
| 1138 | cx->latency_ticks = cx->latency; | 624 | cx->latency_ticks = cx->latency; |
| 1139 | #endif | 625 | /* |
| 626 | * On older chipsets, BM_RLD needs to be set | ||
| 627 | * in order for Bus Master activity to wake the | ||
| 628 | * system from C3. Newer chipsets handle DMA | ||
| 629 | * during C3 automatically and BM_RLD is a NOP. | ||
| 630 | * In either case, the proper way to | ||
| 631 | * handle BM_RLD is to set it and leave it set. | ||
| 632 | */ | ||
| 633 | acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 1); | ||
| 1140 | 634 | ||
| 1141 | return; | 635 | return; |
| 1142 | } | 636 | } |
| @@ -1201,20 +695,6 @@ static int acpi_processor_get_power_info(struct acpi_processor *pr) | |||
| 1201 | 695 | ||
| 1202 | pr->power.count = acpi_processor_power_verify(pr); | 696 | pr->power.count = acpi_processor_power_verify(pr); |
| 1203 | 697 | ||
| 1204 | #ifndef CONFIG_CPU_IDLE | ||
| 1205 | /* | ||
| 1206 | * Set Default Policy | ||
| 1207 | * ------------------ | ||
| 1208 | * Now that we know which states are supported, set the default | ||
| 1209 | * policy. Note that this policy can be changed dynamically | ||
| 1210 | * (e.g. encourage deeper sleeps to conserve battery life when | ||
| 1211 | * not on AC). | ||
| 1212 | */ | ||
| 1213 | result = acpi_processor_set_power_policy(pr); | ||
| 1214 | if (result) | ||
| 1215 | return result; | ||
| 1216 | #endif | ||
| 1217 | |||
| 1218 | /* | 698 | /* |
| 1219 | * if one state of type C2 or C3 is available, mark this | 699 | * if one state of type C2 or C3 is available, mark this |
| 1220 | * CPU as being "idle manageable" | 700 | * CPU as being "idle manageable" |
| @@ -1312,69 +792,6 @@ static const struct file_operations acpi_processor_power_fops = { | |||
| 1312 | .release = single_release, | 792 | .release = single_release, |
| 1313 | }; | 793 | }; |
| 1314 | 794 | ||
| 1315 | #ifndef CONFIG_CPU_IDLE | ||
| 1316 | |||
| 1317 | int acpi_processor_cst_has_changed(struct acpi_processor *pr) | ||
| 1318 | { | ||
| 1319 | int result = 0; | ||
| 1320 | |||
| 1321 | if (boot_option_idle_override) | ||
| 1322 | return 0; | ||
| 1323 | |||
| 1324 | if (!pr) | ||
| 1325 | return -EINVAL; | ||
| 1326 | |||
| 1327 | if (nocst) { | ||
| 1328 | return -ENODEV; | ||
| 1329 | } | ||
| 1330 | |||
| 1331 | if (!pr->flags.power_setup_done) | ||
| 1332 | return -ENODEV; | ||
| 1333 | |||
| 1334 | /* | ||
| 1335 | * Fall back to the default idle loop, when pm_idle_save had | ||
| 1336 | * been initialized. | ||
| 1337 | */ | ||
| 1338 | if (pm_idle_save) { | ||
| 1339 | pm_idle = pm_idle_save; | ||
| 1340 | /* Relies on interrupts forcing exit from idle. */ | ||
| 1341 | synchronize_sched(); | ||
| 1342 | } | ||
| 1343 | |||
| 1344 | pr->flags.power = 0; | ||
| 1345 | result = acpi_processor_get_power_info(pr); | ||
| 1346 | if ((pr->flags.power == 1) && (pr->flags.power_setup_done)) | ||
| 1347 | pm_idle = acpi_processor_idle; | ||
| 1348 | |||
| 1349 | return result; | ||
| 1350 | } | ||
| 1351 | |||
| 1352 | #ifdef CONFIG_SMP | ||
| 1353 | static void smp_callback(void *v) | ||
| 1354 | { | ||
| 1355 | /* we already woke the CPU up, nothing more to do */ | ||
| 1356 | } | ||
| 1357 | |||
| 1358 | /* | ||
| 1359 | * This function gets called when a part of the kernel has a new latency | ||
| 1360 | * requirement. This means we need to get all processors out of their C-state, | ||
| 1361 | * and then recalculate a new suitable C-state. Just do a cross-cpu IPI; that | ||
| 1362 | * wakes them all right up. | ||
| 1363 | */ | ||
| 1364 | static int acpi_processor_latency_notify(struct notifier_block *b, | ||
| 1365 | unsigned long l, void *v) | ||
| 1366 | { | ||
| 1367 | smp_call_function(smp_callback, NULL, 1); | ||
| 1368 | return NOTIFY_OK; | ||
| 1369 | } | ||
| 1370 | |||
| 1371 | static struct notifier_block acpi_processor_latency_notifier = { | ||
| 1372 | .notifier_call = acpi_processor_latency_notify, | ||
| 1373 | }; | ||
| 1374 | |||
| 1375 | #endif | ||
| 1376 | |||
| 1377 | #else /* CONFIG_CPU_IDLE */ | ||
| 1378 | 795 | ||
| 1379 | /** | 796 | /** |
| 1380 | * acpi_idle_bm_check - checks if bus master activity was detected | 797 | * acpi_idle_bm_check - checks if bus master activity was detected |
| @@ -1383,7 +800,7 @@ static int acpi_idle_bm_check(void) | |||
| 1383 | { | 800 | { |
| 1384 | u32 bm_status = 0; | 801 | u32 bm_status = 0; |
| 1385 | 802 | ||
| 1386 | acpi_get_register(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status); | 803 | acpi_get_register_unlocked(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status); |
| 1387 | if (bm_status) | 804 | if (bm_status) |
| 1388 | acpi_set_register(ACPI_BITREG_BUS_MASTER_STATUS, 1); | 805 | acpi_set_register(ACPI_BITREG_BUS_MASTER_STATUS, 1); |
| 1389 | /* | 806 | /* |
| @@ -1400,25 +817,6 @@ static int acpi_idle_bm_check(void) | |||
| 1400 | } | 817 | } |
| 1401 | 818 | ||
| 1402 | /** | 819 | /** |
| 1403 | * acpi_idle_update_bm_rld - updates the BM_RLD bit depending on target state | ||
| 1404 | * @pr: the processor | ||
| 1405 | * @target: the new target state | ||
| 1406 | */ | ||
| 1407 | static inline void acpi_idle_update_bm_rld(struct acpi_processor *pr, | ||
| 1408 | struct acpi_processor_cx *target) | ||
| 1409 | { | ||
| 1410 | if (pr->flags.bm_rld_set && target->type != ACPI_STATE_C3) { | ||
| 1411 | acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0); | ||
| 1412 | pr->flags.bm_rld_set = 0; | ||
| 1413 | } | ||
| 1414 | |||
| 1415 | if (!pr->flags.bm_rld_set && target->type == ACPI_STATE_C3) { | ||
| 1416 | acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 1); | ||
| 1417 | pr->flags.bm_rld_set = 1; | ||
| 1418 | } | ||
| 1419 | } | ||
| 1420 | |||
| 1421 | /** | ||
| 1422 | * acpi_idle_do_entry - a helper function that does C2 and C3 type entry | 820 | * acpi_idle_do_entry - a helper function that does C2 and C3 type entry |
| 1423 | * @cx: cstate data | 821 | * @cx: cstate data |
| 1424 | * | 822 | * |
| @@ -1473,9 +871,6 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev, | |||
| 1473 | return 0; | 871 | return 0; |
| 1474 | } | 872 | } |
| 1475 | 873 | ||
| 1476 | if (pr->flags.bm_check) | ||
| 1477 | acpi_idle_update_bm_rld(pr, cx); | ||
| 1478 | |||
| 1479 | t1 = inl(acpi_gbl_FADT.xpm_timer_block.address); | 874 | t1 = inl(acpi_gbl_FADT.xpm_timer_block.address); |
| 1480 | acpi_idle_do_entry(cx); | 875 | acpi_idle_do_entry(cx); |
| 1481 | t2 = inl(acpi_gbl_FADT.xpm_timer_block.address); | 876 | t2 = inl(acpi_gbl_FADT.xpm_timer_block.address); |
| @@ -1527,9 +922,6 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev, | |||
| 1527 | */ | 922 | */ |
| 1528 | acpi_state_timer_broadcast(pr, cx, 1); | 923 | acpi_state_timer_broadcast(pr, cx, 1); |
| 1529 | 924 | ||
| 1530 | if (pr->flags.bm_check) | ||
| 1531 | acpi_idle_update_bm_rld(pr, cx); | ||
| 1532 | |||
| 1533 | if (cx->type == ACPI_STATE_C3) | 925 | if (cx->type == ACPI_STATE_C3) |
| 1534 | ACPI_FLUSH_CPU_CACHE(); | 926 | ACPI_FLUSH_CPU_CACHE(); |
| 1535 | 927 | ||
| @@ -1621,8 +1013,6 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev, | |||
| 1621 | */ | 1013 | */ |
| 1622 | acpi_state_timer_broadcast(pr, cx, 1); | 1014 | acpi_state_timer_broadcast(pr, cx, 1); |
| 1623 | 1015 | ||
| 1624 | acpi_idle_update_bm_rld(pr, cx); | ||
| 1625 | |||
| 1626 | /* | 1016 | /* |
| 1627 | * disable bus master | 1017 | * disable bus master |
| 1628 | * bm_check implies we need ARB_DIS | 1018 | * bm_check implies we need ARB_DIS |
| @@ -1795,8 +1185,6 @@ int acpi_processor_cst_has_changed(struct acpi_processor *pr) | |||
| 1795 | return ret; | 1185 | return ret; |
| 1796 | } | 1186 | } |
| 1797 | 1187 | ||
| 1798 | #endif /* CONFIG_CPU_IDLE */ | ||
| 1799 | |||
| 1800 | int __cpuinit acpi_processor_power_init(struct acpi_processor *pr, | 1188 | int __cpuinit acpi_processor_power_init(struct acpi_processor *pr, |
| 1801 | struct acpi_device *device) | 1189 | struct acpi_device *device) |
| 1802 | { | 1190 | { |
| @@ -1825,10 +1213,6 @@ int __cpuinit acpi_processor_power_init(struct acpi_processor *pr, | |||
| 1825 | "ACPI: processor limited to max C-state %d\n", | 1213 | "ACPI: processor limited to max C-state %d\n", |
| 1826 | max_cstate); | 1214 | max_cstate); |
| 1827 | first_run++; | 1215 | first_run++; |
| 1828 | #if !defined(CONFIG_CPU_IDLE) && defined(CONFIG_SMP) | ||
| 1829 | pm_qos_add_notifier(PM_QOS_CPU_DMA_LATENCY, | ||
| 1830 | &acpi_processor_latency_notifier); | ||
| 1831 | #endif | ||
| 1832 | } | 1216 | } |
| 1833 | 1217 | ||
| 1834 | if (!pr) | 1218 | if (!pr) |
| @@ -1852,11 +1236,9 @@ int __cpuinit acpi_processor_power_init(struct acpi_processor *pr, | |||
| 1852 | * platforms that only support C1. | 1236 | * platforms that only support C1. |
| 1853 | */ | 1237 | */ |
| 1854 | if (pr->flags.power) { | 1238 | if (pr->flags.power) { |
| 1855 | #ifdef CONFIG_CPU_IDLE | ||
| 1856 | acpi_processor_setup_cpuidle(pr); | 1239 | acpi_processor_setup_cpuidle(pr); |
| 1857 | if (cpuidle_register_device(&pr->power.dev)) | 1240 | if (cpuidle_register_device(&pr->power.dev)) |
| 1858 | return -EIO; | 1241 | return -EIO; |
| 1859 | #endif | ||
| 1860 | 1242 | ||
| 1861 | printk(KERN_INFO PREFIX "CPU%d (power states:", pr->id); | 1243 | printk(KERN_INFO PREFIX "CPU%d (power states:", pr->id); |
| 1862 | for (i = 1; i <= pr->power.count; i++) | 1244 | for (i = 1; i <= pr->power.count; i++) |
| @@ -1864,13 +1246,6 @@ int __cpuinit acpi_processor_power_init(struct acpi_processor *pr, | |||
| 1864 | printk(" C%d[C%d]", i, | 1246 | printk(" C%d[C%d]", i, |
| 1865 | pr->power.states[i].type); | 1247 | pr->power.states[i].type); |
| 1866 | printk(")\n"); | 1248 | printk(")\n"); |
| 1867 | |||
| 1868 | #ifndef CONFIG_CPU_IDLE | ||
| 1869 | if (pr->id == 0) { | ||
| 1870 | pm_idle_save = pm_idle; | ||
| 1871 | pm_idle = acpi_processor_idle; | ||
| 1872 | } | ||
| 1873 | #endif | ||
| 1874 | } | 1249 | } |
| 1875 | 1250 | ||
| 1876 | /* 'power' [R] */ | 1251 | /* 'power' [R] */ |
| @@ -1889,34 +1264,12 @@ int acpi_processor_power_exit(struct acpi_processor *pr, | |||
| 1889 | if (boot_option_idle_override) | 1264 | if (boot_option_idle_override) |
| 1890 | return 0; | 1265 | return 0; |
| 1891 | 1266 | ||
| 1892 | #ifdef CONFIG_CPU_IDLE | ||
| 1893 | cpuidle_unregister_device(&pr->power.dev); | 1267 | cpuidle_unregister_device(&pr->power.dev); |
| 1894 | #endif | ||
| 1895 | pr->flags.power_setup_done = 0; | 1268 | pr->flags.power_setup_done = 0; |
| 1896 | 1269 | ||
| 1897 | if (acpi_device_dir(device)) | 1270 | if (acpi_device_dir(device)) |
| 1898 | remove_proc_entry(ACPI_PROCESSOR_FILE_POWER, | 1271 | remove_proc_entry(ACPI_PROCESSOR_FILE_POWER, |
| 1899 | acpi_device_dir(device)); | 1272 | acpi_device_dir(device)); |
| 1900 | 1273 | ||
| 1901 | #ifndef CONFIG_CPU_IDLE | ||
| 1902 | |||
| 1903 | /* Unregister the idle handler when processor #0 is removed. */ | ||
| 1904 | if (pr->id == 0) { | ||
| 1905 | if (pm_idle_save) | ||
| 1906 | pm_idle = pm_idle_save; | ||
| 1907 | |||
| 1908 | /* | ||
| 1909 | * We are about to unload the current idle thread pm callback | ||
| 1910 | * (pm_idle), Wait for all processors to update cached/local | ||
| 1911 | * copies of pm_idle before proceeding. | ||
| 1912 | */ | ||
| 1913 | cpu_idle_wait(); | ||
| 1914 | #ifdef CONFIG_SMP | ||
| 1915 | pm_qos_remove_notifier(PM_QOS_CPU_DMA_LATENCY, | ||
| 1916 | &acpi_processor_latency_notifier); | ||
| 1917 | #endif | ||
| 1918 | } | ||
| 1919 | #endif | ||
| 1920 | |||
| 1921 | return 0; | 1274 | return 0; |
| 1922 | } | 1275 | } |
diff --git a/drivers/acpi/processor_perflib.c b/drivers/acpi/processor_perflib.c index 846e227592d4..9cc769b587ff 100644 --- a/drivers/acpi/processor_perflib.c +++ b/drivers/acpi/processor_perflib.c | |||
| @@ -31,14 +31,6 @@ | |||
| 31 | #include <linux/init.h> | 31 | #include <linux/init.h> |
| 32 | #include <linux/cpufreq.h> | 32 | #include <linux/cpufreq.h> |
| 33 | 33 | ||
| 34 | #ifdef CONFIG_X86_ACPI_CPUFREQ_PROC_INTF | ||
| 35 | #include <linux/proc_fs.h> | ||
| 36 | #include <linux/seq_file.h> | ||
| 37 | #include <linux/mutex.h> | ||
| 38 | |||
| 39 | #include <asm/uaccess.h> | ||
| 40 | #endif | ||
| 41 | |||
| 42 | #ifdef CONFIG_X86 | 34 | #ifdef CONFIG_X86 |
| 43 | #include <asm/cpufeature.h> | 35 | #include <asm/cpufeature.h> |
| 44 | #endif | 36 | #endif |
| @@ -434,96 +426,6 @@ int acpi_processor_notify_smm(struct module *calling_module) | |||
| 434 | 426 | ||
| 435 | EXPORT_SYMBOL(acpi_processor_notify_smm); | 427 | EXPORT_SYMBOL(acpi_processor_notify_smm); |
| 436 | 428 | ||
| 437 | #ifdef CONFIG_X86_ACPI_CPUFREQ_PROC_INTF | ||
| 438 | /* /proc/acpi/processor/../performance interface (DEPRECATED) */ | ||
| 439 | |||
| 440 | static int acpi_processor_perf_open_fs(struct inode *inode, struct file *file); | ||
| 441 | static struct file_operations acpi_processor_perf_fops = { | ||
| 442 | .owner = THIS_MODULE, | ||
| 443 | .open = acpi_processor_perf_open_fs, | ||
| 444 | .read = seq_read, | ||
| 445 | .llseek = seq_lseek, | ||
| 446 | .release = single_release, | ||
| 447 | }; | ||
| 448 | |||
| 449 | static int acpi_processor_perf_seq_show(struct seq_file *seq, void *offset) | ||
| 450 | { | ||
| 451 | struct acpi_processor *pr = seq->private; | ||
| 452 | int i; | ||
| 453 | |||
| 454 | |||
| 455 | if (!pr) | ||
| 456 | goto end; | ||
| 457 | |||
| 458 | if (!pr->performance) { | ||
| 459 | seq_puts(seq, "<not supported>\n"); | ||
| 460 | goto end; | ||
| 461 | } | ||
| 462 | |||
| 463 | seq_printf(seq, "state count: %d\n" | ||
| 464 | "active state: P%d\n", | ||
| 465 | pr->performance->state_count, pr->performance->state); | ||
| 466 | |||
| 467 | seq_puts(seq, "states:\n"); | ||
| 468 | for (i = 0; i < pr->performance->state_count; i++) | ||
| 469 | seq_printf(seq, | ||
| 470 | " %cP%d: %d MHz, %d mW, %d uS\n", | ||
| 471 | (i == pr->performance->state ? '*' : ' '), i, | ||
| 472 | (u32) pr->performance->states[i].core_frequency, | ||
| 473 | (u32) pr->performance->states[i].power, | ||
| 474 | (u32) pr->performance->states[i].transition_latency); | ||
| 475 | |||
| 476 | end: | ||
| 477 | return 0; | ||
| 478 | } | ||
| 479 | |||
| 480 | static int acpi_processor_perf_open_fs(struct inode *inode, struct file *file) | ||
| 481 | { | ||
| 482 | return single_open(file, acpi_processor_perf_seq_show, | ||
| 483 | PDE(inode)->data); | ||
| 484 | } | ||
| 485 | |||
| 486 | static void acpi_cpufreq_add_file(struct acpi_processor *pr) | ||
| 487 | { | ||
| 488 | struct acpi_device *device = NULL; | ||
| 489 | |||
| 490 | |||
| 491 | if (acpi_bus_get_device(pr->handle, &device)) | ||
| 492 | return; | ||
| 493 | |||
| 494 | /* add file 'performance' [R/W] */ | ||
| 495 | proc_create_data(ACPI_PROCESSOR_FILE_PERFORMANCE, S_IFREG | S_IRUGO, | ||
| 496 | acpi_device_dir(device), | ||
| 497 | &acpi_processor_perf_fops, acpi_driver_data(device)); | ||
| 498 | return; | ||
| 499 | } | ||
| 500 | |||
| 501 | static void acpi_cpufreq_remove_file(struct acpi_processor *pr) | ||
| 502 | { | ||
| 503 | struct acpi_device *device = NULL; | ||
| 504 | |||
| 505 | |||
| 506 | if (acpi_bus_get_device(pr->handle, &device)) | ||
| 507 | return; | ||
| 508 | |||
| 509 | /* remove file 'performance' */ | ||
| 510 | remove_proc_entry(ACPI_PROCESSOR_FILE_PERFORMANCE, | ||
| 511 | acpi_device_dir(device)); | ||
| 512 | |||
| 513 | return; | ||
| 514 | } | ||
| 515 | |||
| 516 | #else | ||
| 517 | static void acpi_cpufreq_add_file(struct acpi_processor *pr) | ||
| 518 | { | ||
| 519 | return; | ||
| 520 | } | ||
| 521 | static void acpi_cpufreq_remove_file(struct acpi_processor *pr) | ||
| 522 | { | ||
| 523 | return; | ||
| 524 | } | ||
| 525 | #endif /* CONFIG_X86_ACPI_CPUFREQ_PROC_INTF */ | ||
| 526 | |||
| 527 | static int acpi_processor_get_psd(struct acpi_processor *pr) | 429 | static int acpi_processor_get_psd(struct acpi_processor *pr) |
| 528 | { | 430 | { |
| 529 | int result = 0; | 431 | int result = 0; |
| @@ -747,14 +649,12 @@ err_ret: | |||
| 747 | } | 649 | } |
| 748 | EXPORT_SYMBOL(acpi_processor_preregister_performance); | 650 | EXPORT_SYMBOL(acpi_processor_preregister_performance); |
| 749 | 651 | ||
| 750 | |||
| 751 | int | 652 | int |
| 752 | acpi_processor_register_performance(struct acpi_processor_performance | 653 | acpi_processor_register_performance(struct acpi_processor_performance |
| 753 | *performance, unsigned int cpu) | 654 | *performance, unsigned int cpu) |
| 754 | { | 655 | { |
| 755 | struct acpi_processor *pr; | 656 | struct acpi_processor *pr; |
| 756 | 657 | ||
| 757 | |||
| 758 | if (!(acpi_processor_ppc_status & PPC_REGISTERED)) | 658 | if (!(acpi_processor_ppc_status & PPC_REGISTERED)) |
| 759 | return -EINVAL; | 659 | return -EINVAL; |
| 760 | 660 | ||
| @@ -781,8 +681,6 @@ acpi_processor_register_performance(struct acpi_processor_performance | |||
| 781 | return -EIO; | 681 | return -EIO; |
| 782 | } | 682 | } |
| 783 | 683 | ||
| 784 | acpi_cpufreq_add_file(pr); | ||
| 785 | |||
| 786 | mutex_unlock(&performance_mutex); | 684 | mutex_unlock(&performance_mutex); |
| 787 | return 0; | 685 | return 0; |
| 788 | } | 686 | } |
| @@ -795,7 +693,6 @@ acpi_processor_unregister_performance(struct acpi_processor_performance | |||
| 795 | { | 693 | { |
| 796 | struct acpi_processor *pr; | 694 | struct acpi_processor *pr; |
| 797 | 695 | ||
| 798 | |||
| 799 | mutex_lock(&performance_mutex); | 696 | mutex_lock(&performance_mutex); |
| 800 | 697 | ||
| 801 | pr = per_cpu(processors, cpu); | 698 | pr = per_cpu(processors, cpu); |
| @@ -808,8 +705,6 @@ acpi_processor_unregister_performance(struct acpi_processor_performance | |||
| 808 | kfree(pr->performance->states); | 705 | kfree(pr->performance->states); |
| 809 | pr->performance = NULL; | 706 | pr->performance = NULL; |
| 810 | 707 | ||
| 811 | acpi_cpufreq_remove_file(pr); | ||
| 812 | |||
| 813 | mutex_unlock(&performance_mutex); | 708 | mutex_unlock(&performance_mutex); |
| 814 | 709 | ||
| 815 | return; | 710 | return; |
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c index 7e3c609cbef2..519266654f06 100644 --- a/drivers/acpi/sleep.c +++ b/drivers/acpi/sleep.c | |||
| @@ -90,31 +90,6 @@ void __init acpi_old_suspend_ordering(void) | |||
| 90 | old_suspend_ordering = true; | 90 | old_suspend_ordering = true; |
| 91 | } | 91 | } |
| 92 | 92 | ||
| 93 | /* | ||
| 94 | * According to the ACPI specification the BIOS should make sure that ACPI is | ||
| 95 | * enabled and SCI_EN bit is set on wake-up from S1 - S3 sleep states. Still, | ||
| 96 | * some BIOSes don't do that and therefore we use acpi_enable() to enable ACPI | ||
| 97 | * on such systems during resume. Unfortunately that doesn't help in | ||
| 98 | * particularly pathological cases in which SCI_EN has to be set directly on | ||
| 99 | * resume, although the specification states very clearly that this flag is | ||
| 100 | * owned by the hardware. The set_sci_en_on_resume variable will be set in such | ||
| 101 | * cases. | ||
| 102 | */ | ||
| 103 | static bool set_sci_en_on_resume; | ||
| 104 | /* | ||
| 105 | * The ACPI specification wants us to save NVS memory regions during hibernation | ||
| 106 | * and to restore them during the subsequent resume. However, it is not certain | ||
| 107 | * if this mechanism is going to work on all machines, so we allow the user to | ||
| 108 | * disable this mechanism using the 'acpi_sleep=s4_nonvs' kernel command line | ||
| 109 | * option. | ||
| 110 | */ | ||
| 111 | static bool s4_no_nvs; | ||
| 112 | |||
| 113 | void __init acpi_s4_no_nvs(void) | ||
| 114 | { | ||
| 115 | s4_no_nvs = true; | ||
| 116 | } | ||
| 117 | |||
| 118 | /** | 93 | /** |
| 119 | * acpi_pm_disable_gpes - Disable the GPEs. | 94 | * acpi_pm_disable_gpes - Disable the GPEs. |
| 120 | */ | 95 | */ |
| @@ -193,6 +168,18 @@ static void acpi_pm_end(void) | |||
| 193 | #endif /* CONFIG_ACPI_SLEEP */ | 168 | #endif /* CONFIG_ACPI_SLEEP */ |
| 194 | 169 | ||
| 195 | #ifdef CONFIG_SUSPEND | 170 | #ifdef CONFIG_SUSPEND |
| 171 | /* | ||
| 172 | * According to the ACPI specification the BIOS should make sure that ACPI is | ||
| 173 | * enabled and SCI_EN bit is set on wake-up from S1 - S3 sleep states. Still, | ||
| 174 | * some BIOSes don't do that and therefore we use acpi_enable() to enable ACPI | ||
| 175 | * on such systems during resume. Unfortunately that doesn't help in | ||
| 176 | * particularly pathological cases in which SCI_EN has to be set directly on | ||
| 177 | * resume, although the specification states very clearly that this flag is | ||
| 178 | * owned by the hardware. The set_sci_en_on_resume variable will be set in such | ||
| 179 | * cases. | ||
| 180 | */ | ||
| 181 | static bool set_sci_en_on_resume; | ||
| 182 | |||
| 196 | extern void do_suspend_lowlevel(void); | 183 | extern void do_suspend_lowlevel(void); |
| 197 | 184 | ||
| 198 | static u32 acpi_suspend_states[] = { | 185 | static u32 acpi_suspend_states[] = { |
| @@ -396,6 +383,20 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = { | |||
| 396 | #endif /* CONFIG_SUSPEND */ | 383 | #endif /* CONFIG_SUSPEND */ |
| 397 | 384 | ||
| 398 | #ifdef CONFIG_HIBERNATION | 385 | #ifdef CONFIG_HIBERNATION |
| 386 | /* | ||
| 387 | * The ACPI specification wants us to save NVS memory regions during hibernation | ||
| 388 | * and to restore them during the subsequent resume. However, it is not certain | ||
| 389 | * if this mechanism is going to work on all machines, so we allow the user to | ||
| 390 | * disable this mechanism using the 'acpi_sleep=s4_nonvs' kernel command line | ||
| 391 | * option. | ||
| 392 | */ | ||
| 393 | static bool s4_no_nvs; | ||
| 394 | |||
| 395 | void __init acpi_s4_no_nvs(void) | ||
| 396 | { | ||
| 397 | s4_no_nvs = true; | ||
| 398 | } | ||
| 399 | |||
| 399 | static unsigned long s4_hardware_signature; | 400 | static unsigned long s4_hardware_signature; |
| 400 | static struct acpi_table_facs *facs; | 401 | static struct acpi_table_facs *facs; |
| 401 | static bool nosigcheck; | 402 | static bool nosigcheck; |
| @@ -679,7 +680,7 @@ static void acpi_power_off_prepare(void) | |||
| 679 | static void acpi_power_off(void) | 680 | static void acpi_power_off(void) |
| 680 | { | 681 | { |
| 681 | /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */ | 682 | /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */ |
| 682 | printk("%s called\n", __func__); | 683 | printk(KERN_DEBUG "%s called\n", __func__); |
| 683 | local_irq_disable(); | 684 | local_irq_disable(); |
| 684 | acpi_enable_wakeup_device(ACPI_STATE_S5); | 685 | acpi_enable_wakeup_device(ACPI_STATE_S5); |
| 685 | acpi_enter_sleep_state(ACPI_STATE_S5); | 686 | acpi_enter_sleep_state(ACPI_STATE_S5); |
diff --git a/drivers/acpi/tables.c b/drivers/acpi/tables.c index 775c97a282bd..a8852952fac4 100644 --- a/drivers/acpi/tables.c +++ b/drivers/acpi/tables.c | |||
| @@ -293,7 +293,12 @@ static void __init check_multiple_madt(void) | |||
| 293 | 293 | ||
| 294 | int __init acpi_table_init(void) | 294 | int __init acpi_table_init(void) |
| 295 | { | 295 | { |
| 296 | acpi_initialize_tables(initial_tables, ACPI_MAX_TABLES, 0); | 296 | acpi_status status; |
| 297 | |||
| 298 | status = acpi_initialize_tables(initial_tables, ACPI_MAX_TABLES, 0); | ||
| 299 | if (ACPI_FAILURE(status)) | ||
| 300 | return 1; | ||
| 301 | |||
| 297 | check_multiple_madt(); | 302 | check_multiple_madt(); |
| 298 | return 0; | 303 | return 0; |
| 299 | } | 304 | } |
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c index f261737636da..bb5ed059114a 100644 --- a/drivers/acpi/video.c +++ b/drivers/acpi/video.c | |||
| @@ -1020,7 +1020,7 @@ acpi_video_device_brightness_seq_show(struct seq_file *seq, void *offset) | |||
| 1020 | } | 1020 | } |
| 1021 | 1021 | ||
| 1022 | seq_printf(seq, "levels: "); | 1022 | seq_printf(seq, "levels: "); |
| 1023 | for (i = 0; i < dev->brightness->count; i++) | 1023 | for (i = 2; i < dev->brightness->count; i++) |
| 1024 | seq_printf(seq, " %d", dev->brightness->levels[i]); | 1024 | seq_printf(seq, " %d", dev->brightness->levels[i]); |
| 1025 | seq_printf(seq, "\ncurrent: %d\n", dev->brightness->curr); | 1025 | seq_printf(seq, "\ncurrent: %d\n", dev->brightness->curr); |
| 1026 | 1026 | ||
| @@ -1059,7 +1059,7 @@ acpi_video_device_write_brightness(struct file *file, | |||
| 1059 | return -EFAULT; | 1059 | return -EFAULT; |
| 1060 | 1060 | ||
| 1061 | /* validate through the list of available levels */ | 1061 | /* validate through the list of available levels */ |
| 1062 | for (i = 0; i < dev->brightness->count; i++) | 1062 | for (i = 2; i < dev->brightness->count; i++) |
| 1063 | if (level == dev->brightness->levels[i]) { | 1063 | if (level == dev->brightness->levels[i]) { |
| 1064 | if (ACPI_SUCCESS | 1064 | if (ACPI_SUCCESS |
| 1065 | (acpi_video_device_lcd_set_level(dev, level))) | 1065 | (acpi_video_device_lcd_set_level(dev, level))) |
| @@ -1260,7 +1260,7 @@ static int acpi_video_bus_POST_info_seq_show(struct seq_file *seq, void *offset) | |||
| 1260 | printk(KERN_WARNING PREFIX | 1260 | printk(KERN_WARNING PREFIX |
| 1261 | "This indicates a BIOS bug. Please contact the manufacturer.\n"); | 1261 | "This indicates a BIOS bug. Please contact the manufacturer.\n"); |
| 1262 | } | 1262 | } |
| 1263 | printk("%llx\n", options); | 1263 | printk(KERN_WARNING "%llx\n", options); |
| 1264 | seq_printf(seq, "can POST: <integrated video>"); | 1264 | seq_printf(seq, "can POST: <integrated video>"); |
| 1265 | if (options & 2) | 1265 | if (options & 2) |
| 1266 | seq_printf(seq, " <PCI video>"); | 1266 | seq_printf(seq, " <PCI video>"); |
| @@ -1712,7 +1712,7 @@ acpi_video_get_next_level(struct acpi_video_device *device, | |||
| 1712 | max = max_below = 0; | 1712 | max = max_below = 0; |
| 1713 | min = min_above = 255; | 1713 | min = min_above = 255; |
| 1714 | /* Find closest level to level_current */ | 1714 | /* Find closest level to level_current */ |
| 1715 | for (i = 0; i < device->brightness->count; i++) { | 1715 | for (i = 2; i < device->brightness->count; i++) { |
| 1716 | l = device->brightness->levels[i]; | 1716 | l = device->brightness->levels[i]; |
| 1717 | if (abs(l - level_current) < abs(delta)) { | 1717 | if (abs(l - level_current) < abs(delta)) { |
| 1718 | delta = l - level_current; | 1718 | delta = l - level_current; |
| @@ -1722,7 +1722,7 @@ acpi_video_get_next_level(struct acpi_video_device *device, | |||
| 1722 | } | 1722 | } |
| 1723 | /* Ajust level_current to closest available level */ | 1723 | /* Ajust level_current to closest available level */ |
| 1724 | level_current += delta; | 1724 | level_current += delta; |
| 1725 | for (i = 0; i < device->brightness->count; i++) { | 1725 | for (i = 2; i < device->brightness->count; i++) { |
| 1726 | l = device->brightness->levels[i]; | 1726 | l = device->brightness->levels[i]; |
| 1727 | if (l < min) | 1727 | if (l < min) |
| 1728 | min = l; | 1728 | min = l; |
| @@ -2006,6 +2006,12 @@ static int acpi_video_bus_add(struct acpi_device *device) | |||
| 2006 | device->pnp.bus_id[3] = '0' + instance; | 2006 | device->pnp.bus_id[3] = '0' + instance; |
| 2007 | instance ++; | 2007 | instance ++; |
| 2008 | } | 2008 | } |
| 2009 | /* a hack to fix the duplicate name "VGA" problem on Pa 3553 */ | ||
| 2010 | if (!strcmp(device->pnp.bus_id, "VGA")) { | ||
| 2011 | if (instance) | ||
| 2012 | device->pnp.bus_id[3] = '0' + instance; | ||
| 2013 | instance++; | ||
| 2014 | } | ||
| 2009 | 2015 | ||
| 2010 | video->device = device; | 2016 | video->device = device; |
| 2011 | strcpy(acpi_device_name(device), ACPI_VIDEO_BUS_NAME); | 2017 | strcpy(acpi_device_name(device), ACPI_VIDEO_BUS_NAME); |
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index a603bbf9b1b7..66e012cd3271 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
| @@ -582,18 +582,18 @@ static const struct pci_device_id ahci_pci_tbl[] = { | |||
| 582 | { PCI_VDEVICE(NVIDIA, 0x0abd), board_ahci }, /* MCP79 */ | 582 | { PCI_VDEVICE(NVIDIA, 0x0abd), board_ahci }, /* MCP79 */ |
| 583 | { PCI_VDEVICE(NVIDIA, 0x0abe), board_ahci }, /* MCP79 */ | 583 | { PCI_VDEVICE(NVIDIA, 0x0abe), board_ahci }, /* MCP79 */ |
| 584 | { PCI_VDEVICE(NVIDIA, 0x0abf), board_ahci }, /* MCP79 */ | 584 | { PCI_VDEVICE(NVIDIA, 0x0abf), board_ahci }, /* MCP79 */ |
| 585 | { PCI_VDEVICE(NVIDIA, 0x0bc8), board_ahci }, /* MCP7B */ | 585 | { PCI_VDEVICE(NVIDIA, 0x0d84), board_ahci }, /* MCP89 */ |
| 586 | { PCI_VDEVICE(NVIDIA, 0x0bc9), board_ahci }, /* MCP7B */ | 586 | { PCI_VDEVICE(NVIDIA, 0x0d85), board_ahci }, /* MCP89 */ |
| 587 | { PCI_VDEVICE(NVIDIA, 0x0bca), board_ahci }, /* MCP7B */ | 587 | { PCI_VDEVICE(NVIDIA, 0x0d86), board_ahci }, /* MCP89 */ |
| 588 | { PCI_VDEVICE(NVIDIA, 0x0bcb), board_ahci }, /* MCP7B */ | 588 | { PCI_VDEVICE(NVIDIA, 0x0d87), board_ahci }, /* MCP89 */ |
| 589 | { PCI_VDEVICE(NVIDIA, 0x0bcc), board_ahci }, /* MCP7B */ | 589 | { PCI_VDEVICE(NVIDIA, 0x0d88), board_ahci }, /* MCP89 */ |
| 590 | { PCI_VDEVICE(NVIDIA, 0x0bcd), board_ahci }, /* MCP7B */ | 590 | { PCI_VDEVICE(NVIDIA, 0x0d89), board_ahci }, /* MCP89 */ |
| 591 | { PCI_VDEVICE(NVIDIA, 0x0bce), board_ahci }, /* MCP7B */ | 591 | { PCI_VDEVICE(NVIDIA, 0x0d8a), board_ahci }, /* MCP89 */ |
| 592 | { PCI_VDEVICE(NVIDIA, 0x0bcf), board_ahci }, /* MCP7B */ | 592 | { PCI_VDEVICE(NVIDIA, 0x0d8b), board_ahci }, /* MCP89 */ |
| 593 | { PCI_VDEVICE(NVIDIA, 0x0bc4), board_ahci }, /* MCP7B */ | 593 | { PCI_VDEVICE(NVIDIA, 0x0d8c), board_ahci }, /* MCP89 */ |
| 594 | { PCI_VDEVICE(NVIDIA, 0x0bc5), board_ahci }, /* MCP7B */ | 594 | { PCI_VDEVICE(NVIDIA, 0x0d8d), board_ahci }, /* MCP89 */ |
| 595 | { PCI_VDEVICE(NVIDIA, 0x0bc6), board_ahci }, /* MCP7B */ | 595 | { PCI_VDEVICE(NVIDIA, 0x0d8e), board_ahci }, /* MCP89 */ |
| 596 | { PCI_VDEVICE(NVIDIA, 0x0bc7), board_ahci }, /* MCP7B */ | 596 | { PCI_VDEVICE(NVIDIA, 0x0d8f), board_ahci }, /* MCP89 */ |
| 597 | 597 | ||
| 598 | /* SiS */ | 598 | /* SiS */ |
| 599 | { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */ | 599 | { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */ |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 9fbf0595f3d4..060bcd601f57 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
| @@ -1322,14 +1322,16 @@ static u64 ata_id_n_sectors(const u16 *id) | |||
| 1322 | { | 1322 | { |
| 1323 | if (ata_id_has_lba(id)) { | 1323 | if (ata_id_has_lba(id)) { |
| 1324 | if (ata_id_has_lba48(id)) | 1324 | if (ata_id_has_lba48(id)) |
| 1325 | return ata_id_u64(id, 100); | 1325 | return ata_id_u64(id, ATA_ID_LBA_CAPACITY_2); |
| 1326 | else | 1326 | else |
| 1327 | return ata_id_u32(id, 60); | 1327 | return ata_id_u32(id, ATA_ID_LBA_CAPACITY); |
| 1328 | } else { | 1328 | } else { |
| 1329 | if (ata_id_current_chs_valid(id)) | 1329 | if (ata_id_current_chs_valid(id)) |
| 1330 | return ata_id_u32(id, 57); | 1330 | return id[ATA_ID_CUR_CYLS] * id[ATA_ID_CUR_HEADS] * |
| 1331 | id[ATA_ID_CUR_SECTORS]; | ||
| 1331 | else | 1332 | else |
| 1332 | return id[1] * id[3] * id[6]; | 1333 | return id[ATA_ID_CYLS] * id[ATA_ID_HEADS] * |
| 1334 | id[ATA_ID_SECTORS]; | ||
| 1333 | } | 1335 | } |
| 1334 | } | 1336 | } |
| 1335 | 1337 | ||
| @@ -4612,7 +4614,7 @@ void ata_sg_clean(struct ata_queued_cmd *qc) | |||
| 4612 | VPRINTK("unmapping %u sg elements\n", qc->n_elem); | 4614 | VPRINTK("unmapping %u sg elements\n", qc->n_elem); |
| 4613 | 4615 | ||
| 4614 | if (qc->n_elem) | 4616 | if (qc->n_elem) |
| 4615 | dma_unmap_sg(ap->dev, sg, qc->n_elem, dir); | 4617 | dma_unmap_sg(ap->dev, sg, qc->orig_n_elem, dir); |
| 4616 | 4618 | ||
| 4617 | qc->flags &= ~ATA_QCFLAG_DMAMAP; | 4619 | qc->flags &= ~ATA_QCFLAG_DMAMAP; |
| 4618 | qc->sg = NULL; | 4620 | qc->sg = NULL; |
| @@ -4727,7 +4729,7 @@ static int ata_sg_setup(struct ata_queued_cmd *qc) | |||
| 4727 | return -1; | 4729 | return -1; |
| 4728 | 4730 | ||
| 4729 | DPRINTK("%d sg elements mapped\n", n_elem); | 4731 | DPRINTK("%d sg elements mapped\n", n_elem); |
| 4730 | 4732 | qc->orig_n_elem = qc->n_elem; | |
| 4731 | qc->n_elem = n_elem; | 4733 | qc->n_elem = n_elem; |
| 4732 | qc->flags |= ATA_QCFLAG_DMAMAP; | 4734 | qc->flags |= ATA_QCFLAG_DMAMAP; |
| 4733 | 4735 | ||
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index ce2ef0475339..ea890911d4fa 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
| @@ -2423,11 +2423,14 @@ int ata_eh_reset(struct ata_link *link, int classify, | |||
| 2423 | } | 2423 | } |
| 2424 | 2424 | ||
| 2425 | /* prereset() might have cleared ATA_EH_RESET. If so, | 2425 | /* prereset() might have cleared ATA_EH_RESET. If so, |
| 2426 | * bang classes and return. | 2426 | * bang classes, thaw and return. |
| 2427 | */ | 2427 | */ |
| 2428 | if (reset && !(ehc->i.action & ATA_EH_RESET)) { | 2428 | if (reset && !(ehc->i.action & ATA_EH_RESET)) { |
| 2429 | ata_for_each_dev(dev, link, ALL) | 2429 | ata_for_each_dev(dev, link, ALL) |
| 2430 | classes[dev->devno] = ATA_DEV_NONE; | 2430 | classes[dev->devno] = ATA_DEV_NONE; |
| 2431 | if ((ap->pflags & ATA_PFLAG_FROZEN) && | ||
| 2432 | ata_is_host_link(link)) | ||
| 2433 | ata_eh_thaw_port(ap); | ||
| 2431 | rc = 0; | 2434 | rc = 0; |
| 2432 | goto out; | 2435 | goto out; |
| 2433 | } | 2436 | } |
| @@ -2901,7 +2904,7 @@ static int atapi_eh_clear_ua(struct ata_device *dev) | |||
| 2901 | int i; | 2904 | int i; |
| 2902 | 2905 | ||
| 2903 | for (i = 0; i < ATA_EH_UA_TRIES; i++) { | 2906 | for (i = 0; i < ATA_EH_UA_TRIES; i++) { |
| 2904 | u8 sense_buffer[SCSI_SENSE_BUFFERSIZE]; | 2907 | u8 *sense_buffer = dev->link->ap->sector_buf; |
| 2905 | u8 sense_key = 0; | 2908 | u8 sense_key = 0; |
| 2906 | unsigned int err_mask; | 2909 | unsigned int err_mask; |
| 2907 | 2910 | ||
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index 0b299b0f8172..714cb046b594 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c | |||
| @@ -773,18 +773,32 @@ unsigned int ata_sff_data_xfer32(struct ata_device *dev, unsigned char *buf, | |||
| 773 | else | 773 | else |
| 774 | iowrite32_rep(data_addr, buf, words); | 774 | iowrite32_rep(data_addr, buf, words); |
| 775 | 775 | ||
| 776 | /* Transfer trailing bytes, if any */ | ||
| 776 | if (unlikely(slop)) { | 777 | if (unlikely(slop)) { |
| 777 | __le32 pad; | 778 | unsigned char pad[4]; |
| 779 | |||
| 780 | /* Point buf to the tail of buffer */ | ||
| 781 | buf += buflen - slop; | ||
| 782 | |||
| 783 | /* | ||
| 784 | * Use io*_rep() accessors here as well to avoid pointlessly | ||
| 785 | * swapping bytes to and fro on the big endian machines... | ||
| 786 | */ | ||
| 778 | if (rw == READ) { | 787 | if (rw == READ) { |
| 779 | pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr)); | 788 | if (slop < 3) |
| 780 | memcpy(buf + buflen - slop, &pad, slop); | 789 | ioread16_rep(data_addr, pad, 1); |
| 790 | else | ||
| 791 | ioread32_rep(data_addr, pad, 1); | ||
| 792 | memcpy(buf, pad, slop); | ||
| 781 | } else { | 793 | } else { |
| 782 | memcpy(&pad, buf + buflen - slop, slop); | 794 | memcpy(pad, buf, slop); |
| 783 | iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr); | 795 | if (slop < 3) |
| 796 | iowrite16_rep(data_addr, pad, 1); | ||
| 797 | else | ||
| 798 | iowrite32_rep(data_addr, pad, 1); | ||
| 784 | } | 799 | } |
| 785 | words++; | ||
| 786 | } | 800 | } |
| 787 | return words << 2; | 801 | return (buflen + 1) & ~1; |
| 788 | } | 802 | } |
| 789 | EXPORT_SYMBOL_GPL(ata_sff_data_xfer32); | 803 | EXPORT_SYMBOL_GPL(ata_sff_data_xfer32); |
| 790 | 804 | ||
diff --git a/drivers/ata/pata_amd.c b/drivers/ata/pata_amd.c index 63719ab9ea44..115b1cd6dcf5 100644 --- a/drivers/ata/pata_amd.c +++ b/drivers/ata/pata_amd.c | |||
| @@ -24,7 +24,7 @@ | |||
| 24 | #include <linux/libata.h> | 24 | #include <linux/libata.h> |
| 25 | 25 | ||
| 26 | #define DRV_NAME "pata_amd" | 26 | #define DRV_NAME "pata_amd" |
| 27 | #define DRV_VERSION "0.3.11" | 27 | #define DRV_VERSION "0.4.1" |
| 28 | 28 | ||
| 29 | /** | 29 | /** |
| 30 | * timing_setup - shared timing computation and load | 30 | * timing_setup - shared timing computation and load |
| @@ -145,6 +145,13 @@ static int amd_pre_reset(struct ata_link *link, unsigned long deadline) | |||
| 145 | return ata_sff_prereset(link, deadline); | 145 | return ata_sff_prereset(link, deadline); |
| 146 | } | 146 | } |
| 147 | 147 | ||
| 148 | /** | ||
| 149 | * amd_cable_detect - report cable type | ||
| 150 | * @ap: port | ||
| 151 | * | ||
| 152 | * AMD controller/BIOS setups record the cable type in word 0x42 | ||
| 153 | */ | ||
| 154 | |||
| 148 | static int amd_cable_detect(struct ata_port *ap) | 155 | static int amd_cable_detect(struct ata_port *ap) |
| 149 | { | 156 | { |
| 150 | static const u32 bitmask[2] = {0x03, 0x0C}; | 157 | static const u32 bitmask[2] = {0x03, 0x0C}; |
| @@ -158,6 +165,40 @@ static int amd_cable_detect(struct ata_port *ap) | |||
| 158 | } | 165 | } |
| 159 | 166 | ||
| 160 | /** | 167 | /** |
| 168 | * amd_fifo_setup - set the PIO FIFO for ATA/ATAPI | ||
| 169 | * @ap: ATA interface | ||
| 170 | * @adev: ATA device | ||
| 171 | * | ||
| 172 | * Set the PCI fifo for this device according to the devices present | ||
| 173 | * on the bus at this point in time. We need to turn the post write buffer | ||
| 174 | * off for ATAPI devices as we may need to issue a word sized write to the | ||
| 175 | * device as the final I/O | ||
| 176 | */ | ||
| 177 | |||
| 178 | static void amd_fifo_setup(struct ata_port *ap) | ||
| 179 | { | ||
| 180 | struct ata_device *adev; | ||
| 181 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); | ||
| 182 | static const u8 fifobit[2] = { 0xC0, 0x30}; | ||
| 183 | u8 fifo = fifobit[ap->port_no]; | ||
| 184 | u8 r; | ||
| 185 | |||
| 186 | |||
| 187 | ata_for_each_dev(adev, &ap->link, ENABLED) { | ||
| 188 | if (adev->class == ATA_DEV_ATAPI) | ||
| 189 | fifo = 0; | ||
| 190 | } | ||
| 191 | if (pdev->device == PCI_DEVICE_ID_AMD_VIPER_7411) /* FIFO is broken */ | ||
| 192 | fifo = 0; | ||
| 193 | |||
| 194 | /* On the later chips the read prefetch bits become no-op bits */ | ||
| 195 | pci_read_config_byte(pdev, 0x41, &r); | ||
| 196 | r &= ~fifobit[ap->port_no]; | ||
| 197 | r |= fifo; | ||
| 198 | pci_write_config_byte(pdev, 0x41, r); | ||
| 199 | } | ||
| 200 | |||
| 201 | /** | ||
| 161 | * amd33_set_piomode - set initial PIO mode data | 202 | * amd33_set_piomode - set initial PIO mode data |
| 162 | * @ap: ATA interface | 203 | * @ap: ATA interface |
| 163 | * @adev: ATA device | 204 | * @adev: ATA device |
| @@ -167,21 +208,25 @@ static int amd_cable_detect(struct ata_port *ap) | |||
| 167 | 208 | ||
| 168 | static void amd33_set_piomode(struct ata_port *ap, struct ata_device *adev) | 209 | static void amd33_set_piomode(struct ata_port *ap, struct ata_device *adev) |
| 169 | { | 210 | { |
| 211 | amd_fifo_setup(ap); | ||
| 170 | timing_setup(ap, adev, 0x40, adev->pio_mode, 1); | 212 | timing_setup(ap, adev, 0x40, adev->pio_mode, 1); |
| 171 | } | 213 | } |
| 172 | 214 | ||
| 173 | static void amd66_set_piomode(struct ata_port *ap, struct ata_device *adev) | 215 | static void amd66_set_piomode(struct ata_port *ap, struct ata_device *adev) |
| 174 | { | 216 | { |
| 217 | amd_fifo_setup(ap); | ||
| 175 | timing_setup(ap, adev, 0x40, adev->pio_mode, 2); | 218 | timing_setup(ap, adev, 0x40, adev->pio_mode, 2); |
| 176 | } | 219 | } |
| 177 | 220 | ||
| 178 | static void amd100_set_piomode(struct ata_port *ap, struct ata_device *adev) | 221 | static void amd100_set_piomode(struct ata_port *ap, struct ata_device *adev) |
| 179 | { | 222 | { |
| 223 | amd_fifo_setup(ap); | ||
| 180 | timing_setup(ap, adev, 0x40, adev->pio_mode, 3); | 224 | timing_setup(ap, adev, 0x40, adev->pio_mode, 3); |
| 181 | } | 225 | } |
| 182 | 226 | ||
| 183 | static void amd133_set_piomode(struct ata_port *ap, struct ata_device *adev) | 227 | static void amd133_set_piomode(struct ata_port *ap, struct ata_device *adev) |
| 184 | { | 228 | { |
| 229 | amd_fifo_setup(ap); | ||
| 185 | timing_setup(ap, adev, 0x40, adev->pio_mode, 4); | 230 | timing_setup(ap, adev, 0x40, adev->pio_mode, 4); |
| 186 | } | 231 | } |
| 187 | 232 | ||
| @@ -397,6 +442,16 @@ static struct ata_port_operations nv133_port_ops = { | |||
| 397 | .set_dmamode = nv133_set_dmamode, | 442 | .set_dmamode = nv133_set_dmamode, |
| 398 | }; | 443 | }; |
| 399 | 444 | ||
| 445 | static void amd_clear_fifo(struct pci_dev *pdev) | ||
| 446 | { | ||
| 447 | u8 fifo; | ||
| 448 | /* Disable the FIFO, the FIFO logic will re-enable it as | ||
| 449 | appropriate */ | ||
| 450 | pci_read_config_byte(pdev, 0x41, &fifo); | ||
| 451 | fifo &= 0x0F; | ||
| 452 | pci_write_config_byte(pdev, 0x41, fifo); | ||
| 453 | } | ||
| 454 | |||
| 400 | static int amd_init_one(struct pci_dev *pdev, const struct pci_device_id *id) | 455 | static int amd_init_one(struct pci_dev *pdev, const struct pci_device_id *id) |
| 401 | { | 456 | { |
| 402 | static const struct ata_port_info info[10] = { | 457 | static const struct ata_port_info info[10] = { |
| @@ -503,14 +558,8 @@ static int amd_init_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
| 503 | 558 | ||
| 504 | if (type < 3) | 559 | if (type < 3) |
| 505 | ata_pci_bmdma_clear_simplex(pdev); | 560 | ata_pci_bmdma_clear_simplex(pdev); |
| 506 | 561 | if (pdev->vendor == PCI_VENDOR_ID_AMD) | |
| 507 | /* Check for AMD7411 */ | 562 | amd_clear_fifo(pdev); |
| 508 | if (type == 3) | ||
| 509 | /* FIFO is broken */ | ||
| 510 | pci_write_config_byte(pdev, 0x41, fifo & 0x0F); | ||
| 511 | else | ||
| 512 | pci_write_config_byte(pdev, 0x41, fifo | 0xF0); | ||
| 513 | |||
| 514 | /* Cable detection on Nvidia chips doesn't work too well, | 563 | /* Cable detection on Nvidia chips doesn't work too well, |
| 515 | * cache BIOS programmed UDMA mode. | 564 | * cache BIOS programmed UDMA mode. |
| 516 | */ | 565 | */ |
| @@ -536,18 +585,11 @@ static int amd_reinit_one(struct pci_dev *pdev) | |||
| 536 | return rc; | 585 | return rc; |
| 537 | 586 | ||
| 538 | if (pdev->vendor == PCI_VENDOR_ID_AMD) { | 587 | if (pdev->vendor == PCI_VENDOR_ID_AMD) { |
| 539 | u8 fifo; | 588 | amd_clear_fifo(pdev); |
| 540 | pci_read_config_byte(pdev, 0x41, &fifo); | ||
| 541 | if (pdev->device == PCI_DEVICE_ID_AMD_VIPER_7411) | ||
| 542 | /* FIFO is broken */ | ||
| 543 | pci_write_config_byte(pdev, 0x41, fifo & 0x0F); | ||
| 544 | else | ||
| 545 | pci_write_config_byte(pdev, 0x41, fifo | 0xF0); | ||
| 546 | if (pdev->device == PCI_DEVICE_ID_AMD_VIPER_7409 || | 589 | if (pdev->device == PCI_DEVICE_ID_AMD_VIPER_7409 || |
| 547 | pdev->device == PCI_DEVICE_ID_AMD_COBRA_7401) | 590 | pdev->device == PCI_DEVICE_ID_AMD_COBRA_7401) |
| 548 | ata_pci_bmdma_clear_simplex(pdev); | 591 | ata_pci_bmdma_clear_simplex(pdev); |
| 549 | } | 592 | } |
| 550 | |||
| 551 | ata_host_resume(host); | 593 | ata_host_resume(host); |
| 552 | return 0; | 594 | return 0; |
| 553 | } | 595 | } |
diff --git a/drivers/ata/pata_it821x.c b/drivers/ata/pata_it821x.c index f1bb2f9fecbf..b05b86a912c5 100644 --- a/drivers/ata/pata_it821x.c +++ b/drivers/ata/pata_it821x.c | |||
| @@ -557,6 +557,9 @@ static unsigned int it821x_read_id(struct ata_device *adev, | |||
| 557 | id[83] |= 0x4400; /* Word 83 is valid and LBA48 */ | 557 | id[83] |= 0x4400; /* Word 83 is valid and LBA48 */ |
| 558 | id[86] |= 0x0400; /* LBA48 on */ | 558 | id[86] |= 0x0400; /* LBA48 on */ |
| 559 | id[ATA_ID_MAJOR_VER] |= 0x1F; | 559 | id[ATA_ID_MAJOR_VER] |= 0x1F; |
| 560 | /* Clear the serial number because it's different each boot | ||
| 561 | which breaks validation on resume */ | ||
| 562 | memset(&id[ATA_ID_SERNO], 0x20, ATA_ID_SERNO_LEN); | ||
| 560 | } | 563 | } |
| 561 | return err_mask; | 564 | return err_mask; |
| 562 | } | 565 | } |
diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.c index 6c1d778b63a9..e3bc1b436284 100644 --- a/drivers/ata/pata_legacy.c +++ b/drivers/ata/pata_legacy.c | |||
| @@ -283,9 +283,10 @@ static void pdc20230_set_piomode(struct ata_port *ap, struct ata_device *adev) | |||
| 283 | static unsigned int pdc_data_xfer_vlb(struct ata_device *dev, | 283 | static unsigned int pdc_data_xfer_vlb(struct ata_device *dev, |
| 284 | unsigned char *buf, unsigned int buflen, int rw) | 284 | unsigned char *buf, unsigned int buflen, int rw) |
| 285 | { | 285 | { |
| 286 | if (ata_id_has_dword_io(dev->id)) { | 286 | int slop = buflen & 3; |
| 287 | /* 32bit I/O capable *and* we need to write a whole number of dwords */ | ||
| 288 | if (ata_id_has_dword_io(dev->id) && (slop == 0 || slop == 3)) { | ||
| 287 | struct ata_port *ap = dev->link->ap; | 289 | struct ata_port *ap = dev->link->ap; |
| 288 | int slop = buflen & 3; | ||
| 289 | unsigned long flags; | 290 | unsigned long flags; |
| 290 | 291 | ||
| 291 | local_irq_save(flags); | 292 | local_irq_save(flags); |
| @@ -735,7 +736,7 @@ static unsigned int vlb32_data_xfer(struct ata_device *adev, unsigned char *buf, | |||
| 735 | struct ata_port *ap = adev->link->ap; | 736 | struct ata_port *ap = adev->link->ap; |
| 736 | int slop = buflen & 3; | 737 | int slop = buflen & 3; |
| 737 | 738 | ||
| 738 | if (ata_id_has_dword_io(adev->id)) { | 739 | if (ata_id_has_dword_io(adev->id) && (slop == 0 || slop == 3)) { |
| 739 | if (rw == WRITE) | 740 | if (rw == WRITE) |
| 740 | iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2); | 741 | iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2); |
| 741 | else | 742 | else |
diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c index 79a6c9a0b721..ba556d3e6963 100644 --- a/drivers/ata/pata_via.c +++ b/drivers/ata/pata_via.c | |||
| @@ -110,7 +110,8 @@ static const struct via_isa_bridge { | |||
| 110 | { "vt8237s", PCI_DEVICE_ID_VIA_8237S, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, | 110 | { "vt8237s", PCI_DEVICE_ID_VIA_8237S, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, |
| 111 | { "vt8251", PCI_DEVICE_ID_VIA_8251, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, | 111 | { "vt8251", PCI_DEVICE_ID_VIA_8251, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, |
| 112 | { "cx700", PCI_DEVICE_ID_VIA_CX700, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_SATA_PATA }, | 112 | { "cx700", PCI_DEVICE_ID_VIA_CX700, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_SATA_PATA }, |
| 113 | { "vt6410", PCI_DEVICE_ID_VIA_6410, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_NO_ENABLES}, | 113 | { "vt6410", PCI_DEVICE_ID_VIA_6410, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_NO_ENABLES }, |
| 114 | { "vt6415", PCI_DEVICE_ID_VIA_6415, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_NO_ENABLES }, | ||
| 114 | { "vt8237a", PCI_DEVICE_ID_VIA_8237A, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, | 115 | { "vt8237a", PCI_DEVICE_ID_VIA_8237A, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, |
| 115 | { "vt8237", PCI_DEVICE_ID_VIA_8237, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, | 116 | { "vt8237", PCI_DEVICE_ID_VIA_8237, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, |
| 116 | { "vt8235", PCI_DEVICE_ID_VIA_8235, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, | 117 | { "vt8235", PCI_DEVICE_ID_VIA_8235, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, |
| @@ -593,6 +594,7 @@ static int via_reinit_one(struct pci_dev *pdev) | |||
| 593 | #endif | 594 | #endif |
| 594 | 595 | ||
| 595 | static const struct pci_device_id via[] = { | 596 | static const struct pci_device_id via[] = { |
| 597 | { PCI_VDEVICE(VIA, 0x0415), }, | ||
| 596 | { PCI_VDEVICE(VIA, 0x0571), }, | 598 | { PCI_VDEVICE(VIA, 0x0571), }, |
| 597 | { PCI_VDEVICE(VIA, 0x0581), }, | 599 | { PCI_VDEVICE(VIA, 0x0581), }, |
| 598 | { PCI_VDEVICE(VIA, 0x1571), }, | 600 | { PCI_VDEVICE(VIA, 0x1571), }, |
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c index 4ae1a4138b47..7007edd2d451 100644 --- a/drivers/ata/sata_mv.c +++ b/drivers/ata/sata_mv.c | |||
| @@ -3114,19 +3114,17 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx) | |||
| 3114 | writelfl(0, hc_mmio + HC_IRQ_CAUSE_OFS); | 3114 | writelfl(0, hc_mmio + HC_IRQ_CAUSE_OFS); |
| 3115 | } | 3115 | } |
| 3116 | 3116 | ||
| 3117 | if (!IS_SOC(hpriv)) { | 3117 | /* Clear any currently outstanding host interrupt conditions */ |
| 3118 | /* Clear any currently outstanding host interrupt conditions */ | 3118 | writelfl(0, mmio + hpriv->irq_cause_ofs); |
| 3119 | writelfl(0, mmio + hpriv->irq_cause_ofs); | ||
| 3120 | 3119 | ||
| 3121 | /* and unmask interrupt generation for host regs */ | 3120 | /* and unmask interrupt generation for host regs */ |
| 3122 | writelfl(hpriv->unmask_all_irqs, mmio + hpriv->irq_mask_ofs); | 3121 | writelfl(hpriv->unmask_all_irqs, mmio + hpriv->irq_mask_ofs); |
| 3123 | 3122 | ||
| 3124 | /* | 3123 | /* |
| 3125 | * enable only global host interrupts for now. | 3124 | * enable only global host interrupts for now. |
| 3126 | * The per-port interrupts get done later as ports are set up. | 3125 | * The per-port interrupts get done later as ports are set up. |
| 3127 | */ | 3126 | */ |
| 3128 | mv_set_main_irq_mask(host, 0, PCI_ERR); | 3127 | mv_set_main_irq_mask(host, 0, PCI_ERR); |
| 3129 | } | ||
| 3130 | done: | 3128 | done: |
| 3131 | return rc; | 3129 | return rc; |
| 3132 | } | 3130 | } |
diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c index 444af0415ca1..f65b53785a8f 100644 --- a/drivers/ata/sata_nv.c +++ b/drivers/ata/sata_nv.c | |||
| @@ -421,19 +421,21 @@ static struct ata_port_operations nv_generic_ops = { | |||
| 421 | .hardreset = ATA_OP_NULL, | 421 | .hardreset = ATA_OP_NULL, |
| 422 | }; | 422 | }; |
| 423 | 423 | ||
| 424 | /* OSDL bz3352 reports that nf2/3 controllers can't determine device | 424 | /* nf2 is ripe with hardreset related problems. |
| 425 | * signature reliably. Also, the following thread reports detection | 425 | * |
| 426 | * failure on cold boot with the standard debouncing timing. | 426 | * kernel bz#3352 reports nf2/3 controllers can't determine device |
| 427 | * signature reliably. The following thread reports detection failure | ||
| 428 | * on cold boot with the standard debouncing timing. | ||
| 427 | * | 429 | * |
| 428 | * http://thread.gmane.org/gmane.linux.ide/34098 | 430 | * http://thread.gmane.org/gmane.linux.ide/34098 |
| 429 | * | 431 | * |
| 430 | * Debounce with hotplug timing and request follow-up SRST. | 432 | * And bz#12176 reports that hardreset simply doesn't work on nf2. |
| 433 | * Give up on it and just don't do hardreset. | ||
| 431 | */ | 434 | */ |
| 432 | static struct ata_port_operations nv_nf2_ops = { | 435 | static struct ata_port_operations nv_nf2_ops = { |
| 433 | .inherits = &nv_common_ops, | 436 | .inherits = &nv_generic_ops, |
| 434 | .freeze = nv_nf2_freeze, | 437 | .freeze = nv_nf2_freeze, |
| 435 | .thaw = nv_nf2_thaw, | 438 | .thaw = nv_nf2_thaw, |
| 436 | .hardreset = nv_noclassify_hardreset, | ||
| 437 | }; | 439 | }; |
| 438 | 440 | ||
| 439 | /* For initial probing after boot and hot plugging, hardreset mostly | 441 | /* For initial probing after boot and hot plugging, hardreset mostly |
| @@ -2521,7 +2523,7 @@ static void __exit nv_exit(void) | |||
| 2521 | module_init(nv_init); | 2523 | module_init(nv_init); |
| 2522 | module_exit(nv_exit); | 2524 | module_exit(nv_exit); |
| 2523 | module_param_named(adma, adma_enabled, bool, 0444); | 2525 | module_param_named(adma, adma_enabled, bool, 0444); |
| 2524 | MODULE_PARM_DESC(adma, "Enable use of ADMA (Default: true)"); | 2526 | MODULE_PARM_DESC(adma, "Enable use of ADMA (Default: false)"); |
| 2525 | module_param_named(swncq, swncq_enabled, bool, 0444); | 2527 | module_param_named(swncq, swncq_enabled, bool, 0444); |
| 2526 | MODULE_PARM_DESC(swncq, "Enable use of SWNCQ (Default: true)"); | 2528 | MODULE_PARM_DESC(swncq, "Enable use of SWNCQ (Default: true)"); |
| 2527 | 2529 | ||
diff --git a/drivers/atm/fore200e.c b/drivers/atm/fore200e.c index 937c9c0ef4c9..10f000dbe448 100644 --- a/drivers/atm/fore200e.c +++ b/drivers/atm/fore200e.c | |||
| @@ -2519,8 +2519,8 @@ fore200e_load_and_start_fw(struct fore200e* fore200e) | |||
| 2519 | return err; | 2519 | return err; |
| 2520 | 2520 | ||
| 2521 | sprintf(buf, "%s%s", fore200e->bus->proc_name, FW_EXT); | 2521 | sprintf(buf, "%s%s", fore200e->bus->proc_name, FW_EXT); |
| 2522 | if (request_firmware(&firmware, buf, device) == 1) { | 2522 | if ((err = request_firmware(&firmware, buf, device)) < 0) { |
| 2523 | printk(FORE200E "missing %s firmware image\n", fore200e->bus->model_name); | 2523 | printk(FORE200E "problem loading firmware image %s\n", fore200e->bus->model_name); |
| 2524 | return err; | 2524 | return err; |
| 2525 | } | 2525 | } |
| 2526 | 2526 | ||
diff --git a/drivers/atm/lanai.c b/drivers/atm/lanai.c index 144a49f15220..8733a2ea04c2 100644 --- a/drivers/atm/lanai.c +++ b/drivers/atm/lanai.c | |||
| @@ -901,7 +901,7 @@ static int __devinit eeprom_read(struct lanai_dev *lanai) | |||
| 901 | clock_l(); udelay(5); | 901 | clock_l(); udelay(5); |
| 902 | for (i = 128; i != 0; i >>= 1) { /* write command out */ | 902 | for (i = 128; i != 0; i >>= 1) { /* write command out */ |
| 903 | tmp = (lanai->conf1 & ~CONFIG1_PROMDATA) | | 903 | tmp = (lanai->conf1 & ~CONFIG1_PROMDATA) | |
| 904 | (data & i) ? CONFIG1_PROMDATA : 0; | 904 | ((data & i) ? CONFIG1_PROMDATA : 0); |
| 905 | if (lanai->conf1 != tmp) { | 905 | if (lanai->conf1 != tmp) { |
| 906 | set_config1(tmp); | 906 | set_config1(tmp); |
| 907 | udelay(5); /* Let new data settle */ | 907 | udelay(5); /* Let new data settle */ |
diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c index 72fc0f799a64..89d7a6e94c9c 100644 --- a/drivers/atm/solos-pci.c +++ b/drivers/atm/solos-pci.c | |||
| @@ -685,6 +685,7 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
| 685 | out_release_regions: | 685 | out_release_regions: |
| 686 | pci_release_regions(dev); | 686 | pci_release_regions(dev); |
| 687 | out: | 687 | out: |
| 688 | kfree(card); | ||
| 688 | return err; | 689 | return err; |
| 689 | } | 690 | } |
| 690 | 691 | ||
diff --git a/drivers/base/base.h b/drivers/base/base.h index 0a5f055dffba..9f50f1b545dc 100644 --- a/drivers/base/base.h +++ b/drivers/base/base.h | |||
| @@ -88,8 +88,6 @@ extern void driver_detach(struct device_driver *drv); | |||
| 88 | extern int driver_probe_device(struct device_driver *drv, struct device *dev); | 88 | extern int driver_probe_device(struct device_driver *drv, struct device *dev); |
| 89 | 89 | ||
| 90 | extern void sysdev_shutdown(void); | 90 | extern void sysdev_shutdown(void); |
| 91 | extern int sysdev_suspend(pm_message_t state); | ||
| 92 | extern int sysdev_resume(void); | ||
| 93 | 91 | ||
| 94 | extern char *make_class_name(const char *name, struct kobject *kobj); | 92 | extern char *make_class_name(const char *name, struct kobject *kobj); |
| 95 | 93 | ||
diff --git a/drivers/base/dd.c b/drivers/base/dd.c index 315bed8d5e7f..135231239103 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c | |||
| @@ -18,9 +18,11 @@ | |||
| 18 | */ | 18 | */ |
| 19 | 19 | ||
| 20 | #include <linux/device.h> | 20 | #include <linux/device.h> |
| 21 | #include <linux/delay.h> | ||
| 21 | #include <linux/module.h> | 22 | #include <linux/module.h> |
| 22 | #include <linux/kthread.h> | 23 | #include <linux/kthread.h> |
| 23 | #include <linux/wait.h> | 24 | #include <linux/wait.h> |
| 25 | #include <linux/async.h> | ||
| 24 | 26 | ||
| 25 | #include "base.h" | 27 | #include "base.h" |
| 26 | #include "power/power.h" | 28 | #include "power/power.h" |
| @@ -168,6 +170,21 @@ int driver_probe_done(void) | |||
| 168 | } | 170 | } |
| 169 | 171 | ||
| 170 | /** | 172 | /** |
| 173 | * wait_for_device_probe | ||
| 174 | * Wait for device probing to be completed. | ||
| 175 | * | ||
| 176 | * Note: this function polls at 100 msec intervals. | ||
| 177 | */ | ||
| 178 | int wait_for_device_probe(void) | ||
| 179 | { | ||
| 180 | /* wait for the known devices to complete their probing */ | ||
| 181 | while (driver_probe_done() != 0) | ||
| 182 | msleep(100); | ||
| 183 | async_synchronize_full(); | ||
| 184 | return 0; | ||
| 185 | } | ||
| 186 | |||
| 187 | /** | ||
| 171 | * driver_probe_device - attempt to bind device & driver together | 188 | * driver_probe_device - attempt to bind device & driver together |
| 172 | * @drv: driver to bind a device to | 189 | * @drv: driver to bind a device to |
| 173 | * @dev: device to try to bind to the driver | 190 | * @dev: device to try to bind to the driver |
diff --git a/drivers/base/node.c b/drivers/base/node.c index 43fa90b837ee..f8f578a71b25 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c | |||
| @@ -303,7 +303,7 @@ int unregister_mem_sect_under_nodes(struct memory_block *mem_blk) | |||
| 303 | sect_start_pfn = section_nr_to_pfn(mem_blk->phys_index); | 303 | sect_start_pfn = section_nr_to_pfn(mem_blk->phys_index); |
| 304 | sect_end_pfn = sect_start_pfn + PAGES_PER_SECTION - 1; | 304 | sect_end_pfn = sect_start_pfn + PAGES_PER_SECTION - 1; |
| 305 | for (pfn = sect_start_pfn; pfn <= sect_end_pfn; pfn++) { | 305 | for (pfn = sect_start_pfn; pfn <= sect_end_pfn; pfn++) { |
| 306 | unsigned int nid; | 306 | int nid; |
| 307 | 307 | ||
| 308 | nid = get_nid_for_pfn(pfn); | 308 | nid = get_nid_for_pfn(pfn); |
| 309 | if (nid < 0) | 309 | if (nid < 0) |
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index 670c9d6c1407..2d14f4ae6c01 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c | |||
| @@ -333,7 +333,6 @@ static void dpm_power_up(pm_message_t state) | |||
| 333 | */ | 333 | */ |
| 334 | void device_power_up(pm_message_t state) | 334 | void device_power_up(pm_message_t state) |
| 335 | { | 335 | { |
| 336 | sysdev_resume(); | ||
| 337 | dpm_power_up(state); | 336 | dpm_power_up(state); |
| 338 | } | 337 | } |
| 339 | EXPORT_SYMBOL_GPL(device_power_up); | 338 | EXPORT_SYMBOL_GPL(device_power_up); |
| @@ -577,8 +576,6 @@ int device_power_down(pm_message_t state) | |||
| 577 | } | 576 | } |
| 578 | dev->power.status = DPM_OFF_IRQ; | 577 | dev->power.status = DPM_OFF_IRQ; |
| 579 | } | 578 | } |
| 580 | if (!error) | ||
| 581 | error = sysdev_suspend(state); | ||
| 582 | if (error) | 579 | if (error) |
| 583 | dpm_power_up(resume_event(state)); | 580 | dpm_power_up(resume_event(state)); |
| 584 | return error; | 581 | return error; |
diff --git a/drivers/base/sys.c b/drivers/base/sys.c index c98c31ec2f75..b428c8c4bc64 100644 --- a/drivers/base/sys.c +++ b/drivers/base/sys.c | |||
| @@ -303,7 +303,6 @@ void sysdev_unregister(struct sys_device * sysdev) | |||
| 303 | * is guaranteed by virtue of the fact that child devices are registered | 303 | * is guaranteed by virtue of the fact that child devices are registered |
| 304 | * after their parents. | 304 | * after their parents. |
| 305 | */ | 305 | */ |
| 306 | |||
| 307 | void sysdev_shutdown(void) | 306 | void sysdev_shutdown(void) |
| 308 | { | 307 | { |
| 309 | struct sysdev_class * cls; | 308 | struct sysdev_class * cls; |
| @@ -363,7 +362,6 @@ static void __sysdev_resume(struct sys_device *dev) | |||
| 363 | * This is only called by the device PM core, so we let them handle | 362 | * This is only called by the device PM core, so we let them handle |
| 364 | * all synchronization. | 363 | * all synchronization. |
| 365 | */ | 364 | */ |
| 366 | |||
| 367 | int sysdev_suspend(pm_message_t state) | 365 | int sysdev_suspend(pm_message_t state) |
| 368 | { | 366 | { |
| 369 | struct sysdev_class * cls; | 367 | struct sysdev_class * cls; |
| @@ -432,7 +430,7 @@ aux_driver: | |||
| 432 | } | 430 | } |
| 433 | return ret; | 431 | return ret; |
| 434 | } | 432 | } |
| 435 | 433 | EXPORT_SYMBOL_GPL(sysdev_suspend); | |
| 436 | 434 | ||
| 437 | /** | 435 | /** |
| 438 | * sysdev_resume - Bring system devices back to life. | 436 | * sysdev_resume - Bring system devices back to life. |
| @@ -442,7 +440,6 @@ aux_driver: | |||
| 442 | * | 440 | * |
| 443 | * Note: Interrupts are disabled when called. | 441 | * Note: Interrupts are disabled when called. |
| 444 | */ | 442 | */ |
| 445 | |||
| 446 | int sysdev_resume(void) | 443 | int sysdev_resume(void) |
| 447 | { | 444 | { |
| 448 | struct sysdev_class * cls; | 445 | struct sysdev_class * cls; |
| @@ -463,7 +460,7 @@ int sysdev_resume(void) | |||
| 463 | } | 460 | } |
| 464 | return 0; | 461 | return 0; |
| 465 | } | 462 | } |
| 466 | 463 | EXPORT_SYMBOL_GPL(sysdev_resume); | |
| 467 | 464 | ||
| 468 | int __init system_bus_init(void) | 465 | int __init system_bus_init(void) |
| 469 | { | 466 | { |
diff --git a/drivers/block/aoe/aoe.h b/drivers/block/aoe/aoe.h index c237527b1aa5..5e41e6dd657b 100644 --- a/drivers/block/aoe/aoe.h +++ b/drivers/block/aoe/aoe.h | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | enum { | 18 | enum { |
| 19 | AOECMD_ATA, | 19 | AOECMD_ATA, |
| 20 | AOECMD_CFG, | 20 | AOECMD_CFG, |
| 21 | AOECMD_VEND_MIN = 0xf0, | ||
| 21 | 22 | ||
| 22 | AOEFL_RSP = (1<<3), | 23 | AOEFL_RSP = (1<<3), |
| 23 | AOEFL_ERR = (1<<2), | 24 | AOEFL_ERR = (1<<2), |
diff --git a/drivers/block/aoe/aoedev.c b/drivers/block/aoe/aoedev.c index cc250577d405..eeea477d9601 100644 --- a/drivers/block/aoe/aoedev.c +++ b/drivers/block/aoe/aoedev.c | |||
| @@ -173,7 +173,7 @@ skbfree(struct sk_buff *skb) | |||
| 173 | return; | 173 | return; |
| 174 | while (atomic_read(&skb_shinfo(skb)->dataref) != 1 && i-- > 0) | 174 | while (atomic_read(&skb_shinfo(skb)->dataref) != 1 && i-- > 0) |
| 175 | msleep(Sms); | 175 | msleep(Sms); |
| 176 | if (i <= 0) { | 176 | if (i < 0) { |
| 177 | printk(KERN_ERR | 177 | printk(KERN_ERR |
| 178 | "aoe: %s holds ref: %s\n", | 178 | "aoe: %s holds ref: %s\n", |
| 179 | skb->dev ? skb->dev->name : "netif", | 179 | skb->dev ? skb->dev->name : "netif", |
diff --git a/drivers/block/aoe/aoenet.c b/drivers/block/aoe/aoenet.c index 30de5b1c647e..c6099ba9a4b8 100644 --- a/drivers/block/aoe/aoenet.c +++ b/drivers/block/aoe/aoenet.c | |||
| @@ -142,6 +142,8 @@ aoenet_rcv(struct sk_buff *skb, struct net_device *ifp, struct packet_type *pt, | |||
| 142 | aoecmd_cfg_rsp(skb); | 142 | aoecmd_cfg_rsp(skb); |
| 143 | break; | 143 | break; |
| 144 | default: | 144 | default: |
| 145 | if (h->cmd >= AOECMD_VEND_MIN) | ||
| 146 | break; /* don't complain about vendor commands */ | ||
| 145 | printk(KERN_INFO "aoe: unknown cmd %d\n", h->cmd); | 147 | printk(KERN_INFO "aoe: unknown cmd %d\n", h->cmd); |
| 146 | } | 148 | } |
| 147 | exit: | 149 | exit: |
diff --git a/drivers/block/ataflop.c b/drivers/block/ataflop.c index 69e1df7dfa14..4234c11c1e4c 100644 --- a/drivers/block/ataflop.c +++ b/drivers/block/ataflop.c | |||
| @@ -1730,7 +1730,7 @@ static int __init fd_test_drive_present( int drive ) | |||
| 1730 | 1730 | ||
| 1731 | timeout = jiffies + 2*HZ+HZ/2; | 1731 | timeout = jiffies + 2*HZ+HZ/2; |
| 1732 | while (time_before(jiffies, timeout)) | 1732 | while (time_before(jiffies, timeout)) |
| 1733 | if (!(mfp.par_dt_reg & 0x20)) | 1733 | if (!(st_mfp.par_dt_reg & 0x20)) |
| 1734 | break; | 1734 | break; |
| 1735 | 1735 | ||
| 1736 | status = FDC_READ( FDCREG_STATUS ); | 1736 | status = FDC_READ( FDCREG_STATUS ); |
| @@ -1747,7 +1747,7 @@ static int __init fd_test_drive_present( int drive ) | |||
| 1747 | /* dummy seek command to make WP bit accessible */ | 1747 | /* dummy seek command to make WP bit accessible */ |
| 1748 | FDC_WRITE( FDCREG_DATA, 0 ); | 1748 | FDC_WRITE( FDCREG_DATA, 0 ); |
| 1749 | FDC_WRITE( FDCREG_CMD, FDCCMD_SEEK ); | 1749 | FDC_WRITE( FDCREG_CMD, FDCCMD_SEEK ); |
| 1750 | while( mfp.par_dt_reg & 0x20 ) | 1750 | while( st_mfp.par_dt_reg & 0x20 ) |
| 1751 | ; | 1751 | ; |
| 1752 | status = FDC_READ( FDCREG_STATUS ); | 1752 | status = FDC_READ( FDCREG_STATUS ); |
| 1753 | } | 1753 | } |
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index 01e69383d9c0..4f9b6d792017 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c | |||
| @@ -3390,6 +3390,203 @@ static void free_hba(int i) | |||
| 3390 | kfree(p); | 3390 | kfree(p); |
| 3391 | } | 3391 | } |
| 3392 | 3392 | ||
| 3393 | /* Send a message CDB to the firmware. */ | ||
| 3394 | static __devinit int cciss_message(struct pci_dev *pdev, unsigned char opcode, unsigned char type) | ||
| 3395 | { | ||
| 3396 | typedef struct { | ||
| 3397 | CommandListHeader_struct CommandHeader; | ||
| 3398 | RequestBlock_struct Request; | ||
| 3399 | ErrDescriptor_struct ErrorDescriptor; | ||
| 3400 | } Command; | ||
| 3401 | static const size_t cmd_sz = sizeof(Command) + sizeof(ErrorInfo_struct); | ||
| 3402 | Command *cmd; | ||
| 3403 | dma_addr_t paddr64; | ||
| 3404 | uint32_t paddr32, tag; | ||
| 3405 | void __iomem *vaddr; | ||
| 3406 | int i, err; | ||
| 3407 | |||
| 3408 | vaddr = ioremap_nocache(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0)); | ||
| 3409 | if (vaddr == NULL) | ||
| 3410 | return -ENOMEM; | ||
| 3411 | |||
| 3412 | /* The Inbound Post Queue only accepts 32-bit physical addresses for the | ||
| 3413 | CCISS commands, so they must be allocated from the lower 4GiB of | ||
| 3414 | memory. */ | ||
| 3415 | err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); | ||
| 3416 | if (err) { | ||
| 3417 | iounmap(vaddr); | ||
| 3418 | return -ENOMEM; | ||
| 3419 | } | ||
| 3420 | |||
| 3421 | cmd = pci_alloc_consistent(pdev, cmd_sz, &paddr64); | ||
| 3422 | if (cmd == NULL) { | ||
| 3423 | iounmap(vaddr); | ||
| 3424 | return -ENOMEM; | ||
| 3425 | } | ||
| 3426 | |||
| 3427 | /* This must fit, because of the 32-bit consistent DMA mask. Also, | ||
| 3428 | although there's no guarantee, we assume that the address is at | ||
| 3429 | least 4-byte aligned (most likely, it's page-aligned). */ | ||
| 3430 | paddr32 = paddr64; | ||
| 3431 | |||
| 3432 | cmd->CommandHeader.ReplyQueue = 0; | ||
| 3433 | cmd->CommandHeader.SGList = 0; | ||
| 3434 | cmd->CommandHeader.SGTotal = 0; | ||
| 3435 | cmd->CommandHeader.Tag.lower = paddr32; | ||
| 3436 | cmd->CommandHeader.Tag.upper = 0; | ||
| 3437 | memset(&cmd->CommandHeader.LUN.LunAddrBytes, 0, 8); | ||
| 3438 | |||
| 3439 | cmd->Request.CDBLen = 16; | ||
| 3440 | cmd->Request.Type.Type = TYPE_MSG; | ||
| 3441 | cmd->Request.Type.Attribute = ATTR_HEADOFQUEUE; | ||
| 3442 | cmd->Request.Type.Direction = XFER_NONE; | ||
| 3443 | cmd->Request.Timeout = 0; /* Don't time out */ | ||
| 3444 | cmd->Request.CDB[0] = opcode; | ||
| 3445 | cmd->Request.CDB[1] = type; | ||
| 3446 | memset(&cmd->Request.CDB[2], 0, 14); /* the rest of the CDB is reserved */ | ||
| 3447 | |||
| 3448 | cmd->ErrorDescriptor.Addr.lower = paddr32 + sizeof(Command); | ||
| 3449 | cmd->ErrorDescriptor.Addr.upper = 0; | ||
| 3450 | cmd->ErrorDescriptor.Len = sizeof(ErrorInfo_struct); | ||
| 3451 | |||
| 3452 | writel(paddr32, vaddr + SA5_REQUEST_PORT_OFFSET); | ||
| 3453 | |||
| 3454 | for (i = 0; i < 10; i++) { | ||
| 3455 | tag = readl(vaddr + SA5_REPLY_PORT_OFFSET); | ||
| 3456 | if ((tag & ~3) == paddr32) | ||
| 3457 | break; | ||
| 3458 | schedule_timeout_uninterruptible(HZ); | ||
| 3459 | } | ||
| 3460 | |||
| 3461 | iounmap(vaddr); | ||
| 3462 | |||
| 3463 | /* we leak the DMA buffer here ... no choice since the controller could | ||
| 3464 | still complete the command. */ | ||
| 3465 | if (i == 10) { | ||
| 3466 | printk(KERN_ERR "cciss: controller message %02x:%02x timed out\n", | ||
| 3467 | opcode, type); | ||
| 3468 | return -ETIMEDOUT; | ||
| 3469 | } | ||
| 3470 | |||
| 3471 | pci_free_consistent(pdev, cmd_sz, cmd, paddr64); | ||
| 3472 | |||
| 3473 | if (tag & 2) { | ||
| 3474 | printk(KERN_ERR "cciss: controller message %02x:%02x failed\n", | ||
| 3475 | opcode, type); | ||
| 3476 | return -EIO; | ||
| 3477 | } | ||
| 3478 | |||
| 3479 | printk(KERN_INFO "cciss: controller message %02x:%02x succeeded\n", | ||
| 3480 | opcode, type); | ||
| 3481 | return 0; | ||
| 3482 | } | ||
| 3483 | |||
| 3484 | #define cciss_soft_reset_controller(p) cciss_message(p, 1, 0) | ||
| 3485 | #define cciss_noop(p) cciss_message(p, 3, 0) | ||
| 3486 | |||
| 3487 | static __devinit int cciss_reset_msi(struct pci_dev *pdev) | ||
| 3488 | { | ||
| 3489 | /* the #defines are stolen from drivers/pci/msi.h. */ | ||
| 3490 | #define msi_control_reg(base) (base + PCI_MSI_FLAGS) | ||
| 3491 | #define PCI_MSIX_FLAGS_ENABLE (1 << 15) | ||
| 3492 | |||
| 3493 | int pos; | ||
| 3494 | u16 control = 0; | ||
| 3495 | |||
| 3496 | pos = pci_find_capability(pdev, PCI_CAP_ID_MSI); | ||
| 3497 | if (pos) { | ||
| 3498 | pci_read_config_word(pdev, msi_control_reg(pos), &control); | ||
| 3499 | if (control & PCI_MSI_FLAGS_ENABLE) { | ||
| 3500 | printk(KERN_INFO "cciss: resetting MSI\n"); | ||
| 3501 | pci_write_config_word(pdev, msi_control_reg(pos), control & ~PCI_MSI_FLAGS_ENABLE); | ||
| 3502 | } | ||
| 3503 | } | ||
| 3504 | |||
| 3505 | pos = pci_find_capability(pdev, PCI_CAP_ID_MSIX); | ||
| 3506 | if (pos) { | ||
| 3507 | pci_read_config_word(pdev, msi_control_reg(pos), &control); | ||
| 3508 | if (control & PCI_MSIX_FLAGS_ENABLE) { | ||
| 3509 | printk(KERN_INFO "cciss: resetting MSI-X\n"); | ||
| 3510 | pci_write_config_word(pdev, msi_control_reg(pos), control & ~PCI_MSIX_FLAGS_ENABLE); | ||
| 3511 | } | ||
| 3512 | } | ||
| 3513 | |||
| 3514 | return 0; | ||
| 3515 | } | ||
| 3516 | |||
| 3517 | /* This does a hard reset of the controller using PCI power management | ||
| 3518 | * states. */ | ||
| 3519 | static __devinit int cciss_hard_reset_controller(struct pci_dev *pdev) | ||
| 3520 | { | ||
| 3521 | u16 pmcsr, saved_config_space[32]; | ||
| 3522 | int i, pos; | ||
| 3523 | |||
| 3524 | printk(KERN_INFO "cciss: using PCI PM to reset controller\n"); | ||
| 3525 | |||
| 3526 | /* This is very nearly the same thing as | ||
| 3527 | |||
| 3528 | pci_save_state(pci_dev); | ||
| 3529 | pci_set_power_state(pci_dev, PCI_D3hot); | ||
| 3530 | pci_set_power_state(pci_dev, PCI_D0); | ||
| 3531 | pci_restore_state(pci_dev); | ||
| 3532 | |||
| 3533 | but we can't use these nice canned kernel routines on | ||
| 3534 | kexec, because they also check the MSI/MSI-X state in PCI | ||
| 3535 | configuration space and do the wrong thing when it is | ||
| 3536 | set/cleared. Also, the pci_save/restore_state functions | ||
| 3537 | violate the ordering requirements for restoring the | ||
| 3538 | configuration space from the CCISS document (see the | ||
| 3539 | comment below). So we roll our own .... */ | ||
| 3540 | |||
| 3541 | for (i = 0; i < 32; i++) | ||
| 3542 | pci_read_config_word(pdev, 2*i, &saved_config_space[i]); | ||
| 3543 | |||
| 3544 | pos = pci_find_capability(pdev, PCI_CAP_ID_PM); | ||
| 3545 | if (pos == 0) { | ||
| 3546 | printk(KERN_ERR "cciss_reset_controller: PCI PM not supported\n"); | ||
| 3547 | return -ENODEV; | ||
| 3548 | } | ||
| 3549 | |||
| 3550 | /* Quoting from the Open CISS Specification: "The Power | ||
| 3551 | * Management Control/Status Register (CSR) controls the power | ||
| 3552 | * state of the device. The normal operating state is D0, | ||
| 3553 | * CSR=00h. The software off state is D3, CSR=03h. To reset | ||
| 3554 | * the controller, place the interface device in D3 then to | ||
| 3555 | * D0, this causes a secondary PCI reset which will reset the | ||
| 3556 | * controller." */ | ||
| 3557 | |||
| 3558 | /* enter the D3hot power management state */ | ||
| 3559 | pci_read_config_word(pdev, pos + PCI_PM_CTRL, &pmcsr); | ||
| 3560 | pmcsr &= ~PCI_PM_CTRL_STATE_MASK; | ||
| 3561 | pmcsr |= PCI_D3hot; | ||
| 3562 | pci_write_config_word(pdev, pos + PCI_PM_CTRL, pmcsr); | ||
| 3563 | |||
| 3564 | schedule_timeout_uninterruptible(HZ >> 1); | ||
| 3565 | |||
| 3566 | /* enter the D0 power management state */ | ||
| 3567 | pmcsr &= ~PCI_PM_CTRL_STATE_MASK; | ||
| 3568 | pmcsr |= PCI_D0; | ||
| 3569 | pci_write_config_word(pdev, pos + PCI_PM_CTRL, pmcsr); | ||
| 3570 | |||
| 3571 | schedule_timeout_uninterruptible(HZ >> 1); | ||
| 3572 | |||
| 3573 | /* Restore the PCI configuration space. The Open CISS | ||
| 3574 | * Specification says, "Restore the PCI Configuration | ||
| 3575 | * Registers, offsets 00h through 60h. It is important to | ||
| 3576 | * restore the command register, 16-bits at offset 04h, | ||
| 3577 | * last. Do not restore the configuration status register, | ||
| 3578 | * 16-bits at offset 06h." Note that the offset is 2*i. */ | ||
| 3579 | for (i = 0; i < 32; i++) { | ||
| 3580 | if (i == 2 || i == 3) | ||
| 3581 | continue; | ||
| 3582 | pci_write_config_word(pdev, 2*i, saved_config_space[i]); | ||
| 3583 | } | ||
| 3584 | wmb(); | ||
| 3585 | pci_write_config_word(pdev, 4, saved_config_space[2]); | ||
| 3586 | |||
| 3587 | return 0; | ||
| 3588 | } | ||
| 3589 | |||
| 3393 | /* | 3590 | /* |
| 3394 | * This is it. Find all the controllers and register them. I really hate | 3591 | * This is it. Find all the controllers and register them. I really hate |
| 3395 | * stealing all these major device numbers. | 3592 | * stealing all these major device numbers. |
| @@ -3404,6 +3601,26 @@ static int __devinit cciss_init_one(struct pci_dev *pdev, | |||
| 3404 | int dac, return_code; | 3601 | int dac, return_code; |
| 3405 | InquiryData_struct *inq_buff = NULL; | 3602 | InquiryData_struct *inq_buff = NULL; |
| 3406 | 3603 | ||
| 3604 | if (reset_devices) { | ||
| 3605 | /* Reset the controller with a PCI power-cycle */ | ||
| 3606 | if (cciss_hard_reset_controller(pdev) || cciss_reset_msi(pdev)) | ||
| 3607 | return -ENODEV; | ||
| 3608 | |||
| 3609 | /* Now try to get the controller to respond to a no-op. Some | ||
| 3610 | devices (notably the HP Smart Array 5i Controller) need | ||
| 3611 | up to 30 seconds to respond. */ | ||
| 3612 | for (i=0; i<30; i++) { | ||
| 3613 | if (cciss_noop(pdev) == 0) | ||
| 3614 | break; | ||
| 3615 | |||
| 3616 | schedule_timeout_uninterruptible(HZ); | ||
| 3617 | } | ||
| 3618 | if (i == 30) { | ||
| 3619 | printk(KERN_ERR "cciss: controller seems dead\n"); | ||
| 3620 | return -EBUSY; | ||
| 3621 | } | ||
| 3622 | } | ||
| 3623 | |||
| 3407 | i = alloc_cciss_hba(); | 3624 | i = alloc_cciss_hba(); |
| 3408 | if (i < 0) | 3625 | if (i < 0) |
| 3409 | return -1; | 3626 | return -1; |
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c index cf29cc4e6ab7..83d8ed39433d 100644 --- a/drivers/block/floppy.c +++ b/drivers/block/floppy.c | |||
| @@ -558,6 +558,8 @@ static void process_fd_request(void); | |||
| 558 | static void recalibrate_floppy(void); | 558 | static void recalibrate_floppy(void); |
| 559 | static void floppy_shutdown(unsigned long); | 559 | static void floppy_shutdown(unsigned long); |
| 560 | 560 | ||
| 561 | static int floppy_request_regions(int); | ||
| 562 | static void floppy_release_regions(int); | ||
| 561 | static int floppy_grab_irq_and_dma(void); | 563 | static int floppy_grab_irq_and_dma(void); |
| 562 | static void floppy_release_irq_and_dma(void); | 564 | static void floppy_release_irq_and_dma(void); |
| 563 | 565 | ||
| @@ -4274,8 +4276,7 @@ static int __init floppy_init(void) | |||
| 4274 | FDCS->rawcmd = 2; | 4276 | FDCS->rawcmd = 2; |
| 4275 | if (user_reset_fdc(-1, FD_RESET_ALWAYS, 0)) { | 4277 | if (user_reset_fdc(-1, FD_RESET_ALWAYS, 0)) { |
| 4276 | /* free ioports reserved by floppy_grab_irq_and_dma() */ | 4278 | /* free ioports reserved by floppy_grab_irq_and_dma() */ |
| 4277 | release_region(FDCS->address + 2, 4); | 4279 | floppy_release_regions(fdc); |
| 4278 | release_region(FDCS->address + 7, 1); | ||
| 4279 | FDCS->address = -1; | 4280 | FDCS->address = -1; |
| 4280 | FDCS->version = FDC_NONE; | 4281 | FDCS->version = FDC_NONE; |
| 4281 | continue; | 4282 | continue; |
| @@ -4284,8 +4285,7 @@ static int __init floppy_init(void) | |||
| 4284 | FDCS->version = get_fdc_version(); | 4285 | FDCS->version = get_fdc_version(); |
| 4285 | if (FDCS->version == FDC_NONE) { | 4286 | if (FDCS->version == FDC_NONE) { |
| 4286 | /* free ioports reserved by floppy_grab_irq_and_dma() */ | 4287 | /* free ioports reserved by floppy_grab_irq_and_dma() */ |
| 4287 | release_region(FDCS->address + 2, 4); | 4288 | floppy_release_regions(fdc); |
| 4288 | release_region(FDCS->address + 7, 1); | ||
| 4289 | FDCS->address = -1; | 4289 | FDCS->address = -1; |
| 4290 | continue; | 4290 | continue; |
| 4291 | } | 4291 | } |
| @@ -4358,6 +4358,47 @@ out_put_disk: | |||
| 4358 | 4358 | ||
| 4359 | static DEFINE_SPINLOCK(floppy_usage_lock); | 4359 | static DEFINE_SPINLOCK(floppy_usage_lock); |
| 4360 | 4360 | ||
| 4361 | static const struct io_region { | ||
| 4362 | int offset; | ||
| 4363 | int size; | ||
| 4364 | } io_regions[] = { | ||
| 4365 | { 2, 1 }, | ||
| 4366 | /* address + 3 is sometimes reserved by pnp bios for motherboard */ | ||
| 4367 | { 4, 2 }, | ||
| 4368 | /* address + 6 is reserved, and may be taken by IDE. | ||
| 4369 | * Unfortunately, Adaptec doesn't know this :-(, */ | ||
| 4370 | { 7, 1 }, | ||
| 4371 | }; | ||
| 4372 | |||
| 4373 | static void floppy_release_allocated_regions(int fdc, const struct io_region *p) | ||
| 4374 | { | ||
| 4375 | while (p != io_regions) { | ||
| 4376 | p--; | ||
| 4377 | release_region(FDCS->address + p->offset, p->size); | ||
| 4378 | } | ||
| 4379 | } | ||
| 4380 | |||
| 4381 | #define ARRAY_END(X) (&((X)[ARRAY_SIZE(X)])) | ||
| 4382 | |||
| 4383 | static int floppy_request_regions(int fdc) | ||
| 4384 | { | ||
| 4385 | const struct io_region *p; | ||
| 4386 | |||
| 4387 | for (p = io_regions; p < ARRAY_END(io_regions); p++) { | ||
| 4388 | if (!request_region(FDCS->address + p->offset, p->size, "floppy")) { | ||
| 4389 | DPRINT("Floppy io-port 0x%04lx in use\n", FDCS->address + p->offset); | ||
| 4390 | floppy_release_allocated_regions(fdc, p); | ||
| 4391 | return -EBUSY; | ||
| 4392 | } | ||
| 4393 | } | ||
| 4394 | return 0; | ||
| 4395 | } | ||
| 4396 | |||
| 4397 | static void floppy_release_regions(int fdc) | ||
| 4398 | { | ||
| 4399 | floppy_release_allocated_regions(fdc, ARRAY_END(io_regions)); | ||
| 4400 | } | ||
| 4401 | |||
| 4361 | static int floppy_grab_irq_and_dma(void) | 4402 | static int floppy_grab_irq_and_dma(void) |
| 4362 | { | 4403 | { |
| 4363 | unsigned long flags; | 4404 | unsigned long flags; |
| @@ -4399,18 +4440,8 @@ static int floppy_grab_irq_and_dma(void) | |||
| 4399 | 4440 | ||
| 4400 | for (fdc = 0; fdc < N_FDC; fdc++) { | 4441 | for (fdc = 0; fdc < N_FDC; fdc++) { |
| 4401 | if (FDCS->address != -1) { | 4442 | if (FDCS->address != -1) { |
| 4402 | if (!request_region(FDCS->address + 2, 4, "floppy")) { | 4443 | if (floppy_request_regions(fdc)) |
| 4403 | DPRINT("Floppy io-port 0x%04lx in use\n", | 4444 | goto cleanup; |
| 4404 | FDCS->address + 2); | ||
| 4405 | goto cleanup1; | ||
| 4406 | } | ||
| 4407 | if (!request_region(FDCS->address + 7, 1, "floppy DIR")) { | ||
| 4408 | DPRINT("Floppy io-port 0x%04lx in use\n", | ||
| 4409 | FDCS->address + 7); | ||
| 4410 | goto cleanup2; | ||
| 4411 | } | ||
| 4412 | /* address + 6 is reserved, and may be taken by IDE. | ||
| 4413 | * Unfortunately, Adaptec doesn't know this :-(, */ | ||
| 4414 | } | 4445 | } |
| 4415 | } | 4446 | } |
| 4416 | for (fdc = 0; fdc < N_FDC; fdc++) { | 4447 | for (fdc = 0; fdc < N_FDC; fdc++) { |
| @@ -4432,15 +4463,11 @@ static int floppy_grab_irq_and_dma(void) | |||
| 4432 | fdc = 0; | 4463 | fdc = 0; |
| 4433 | irqdma_allocated = 1; | 4464 | irqdma_allocated = 1; |
| 4434 | return 0; | 4465 | return 0; |
| 4435 | cleanup2: | 4466 | cleanup: |
| 4436 | release_region(FDCS->address + 2, 4); | ||
| 4437 | cleanup1: | ||
| 4438 | fd_free_irq(); | 4467 | fd_free_irq(); |
| 4439 | fd_free_dma(); | 4468 | fd_free_dma(); |
| 4440 | while (--fdc >= 0) { | 4469 | while (--fdc >= 0) |
| 4441 | release_region(FDCS->address + 2, 4); | 4470 | floppy_release_regions(fdc); |
| 4442 | release_region(FDCS->address + 7, 1); | ||
| 4443 | } | ||
| 4444 | spin_lock_irqsave(&floppy_usage_lock, flags); | 4471 | spin_lock_irqsave(&floppy_usage_lock, flags); |
| 4445 | usage_count--; | 4472 | usage_count--; |
| 4446 | spin_unlock_irqrestore(&floppy_usage_lock, flags); | 4473 | spin_unlock_irqrestore(&floppy_usage_lock, flags); |
| @@ -4501,10 +4528,8 @@ static void floppy_release_irq_and_dma(void) | |||
| 4501 | #endif | 4528 | #endif |
| 4502 | old_fdc = fdc; | 4529 | old_fdc = fdc; |
| 4503 | for (fdc = 0; fdc < N_FDC; fdc++) | 4530 | for (fdc = 0; fdc < N_FDC; fdc++) |
| 4504 | if (FDCS->address != -1) { | 4531 | if (FDCS->address != -1) |
| 4505 | release_region(FDCS->address + 2, 4); | 4532 | floppy_release_regions(fdc); |
| 4506 | release_region(FDCS->address + 7, 1); | ||
| 4507 | } | ||
| 4508 | fdc = old_fdc; | 4533 | fdc = old_fdc; |
| 4509 | } | 4534 | } |
| 4510 | 4535 | ||
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index edbaac6c0573..bf0345577672 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c | |||
| @@ -392,8 +392,7 @@ lo_splice_actor(struct pipe_inode_info *pipe, struct pipe_buffer *buf, | |||
| 392 | struct loop_device *lo = p->lo; | 392 | struct loop_device *lo = p->lo; |
| 393 | struct page *page = buf->page; | 393 | struct page *page = buf->page; |
| 394 | sector_t IV; | 394 | sector_t IV; |
| 395 | size_t size; | 395 | int size, ret; |
| 396 | int ret; | ||
| 397 | 396 | ||
| 398 | ret = buf->ops->confirm(pipe, buf); | 397 | ret = buf->ops->confirm(pipe, buf); |
| 399 | if (unlikely(ret)) | 398 | if (unlikely(ret)) |
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index 34f80fa6fed1..8299e2d3b611 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c | |||
| @@ -549,6 +549,15 @@ static void do_nbd_request(struct request_queue * q) | |||
| 549 | 549 | ||
| 550 | BUG_ON(lo->magic != LO_MAGIC); | 550 | BUG_ON(lo->magic != LO_MAGIC); |
| 551 | 551 | ||
| 552 | if (unlikely(!lo->sock)) { | ||
| 553 | printk(KERN_ERR "%s: Attempted send on closed socket\n", | ||
| 554 | lo->disk->disk_name); | ||
| 555 | req->errors++; | ||
| 556 | nbd_end_request(req); | ||
| 557 | spin_lock_irq(q->queue_lock); | ||
| 558 | continue; | ||
| 559 | } | ||
| 560 | |||
| 552 | spin_lock_irq(&lo->queue_lock); | 561 | spin_lock_irq(&lo->queue_lock); |
| 553 | list_add_tail(&req->queuelist, &lo->waiting_queue); | 562 | list_add_tail(&req->queuelist, &lo->waiting_queue); |
| 554 | spin_unlock_irq(&lo->queue_lock); | 563 | spin_unlock_irq(&lo->queue_lock); |
diff --git a/drivers/block/paride/pg.c b/drivers/block/paride/pg.c index 9dfa27163001..c397b3ddba9b 100644 --- a/drivers/block/paride/pg.c +++ b/drivers/block/paride/pg.c | |||
| @@ -422,7 +422,7 @@ static void xs(char *buf, char *targ, int len) | |||
| 422 | 422 | ||
| 423 | for (k = 0; k < len; k++) { | 423 | for (k = 0; k < len; k++) { |
| 424 | char c = *buf++; | 424 | char c = *buf++; |
| 425 | if (c != ' ' || c != l) | 425 | if (c != ' ' && c != l) |
| 426 | l = *targ++ = c; | 426 | l = *targ++ = c; |
| 427 | } | 427 | } |
| 428 | if (l == ' ') | 428 | if (l == ' ') |
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c index 918ef725de41..8f905089b72b 100644 --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c | |||
| @@ -40,6 +40,7 @@ | |||
| 40 | #include <linux/hdreg.h> | 40 | #include <linux/hdreg.h> |
| 41 | #include <linux/cdrom.h> | 41 | #include <linux/cdrom.h> |
| 42 | #include <linux/module.h> | 42 | #include <linux/module.h> |
| 43 | #include <linux/scatterlist.h> | ||
| 43 | 44 | ||
| 44 | #include <xen/xenbus.h> | 45 | #include <xen/xenbus.h> |
| 45 | #include <xen/grant_table.h> | 46 | #include <xen/grant_table.h> |
| @@ -82,6 +83,7 @@ struct blkfront_info | |||
| 82 | enum blkif_state connected; | 83 | enum blkif_state connected; |
| 83 | int ring_ref; | 84 | int ring_ref; |
| 84 | struct blkif_front_ring ring; | 85 | struct blkif_front_ring ring; |
| 86 | struct scatterlist sg[BLKIF_MAX_SEGMENTS_PER_REQUEST]; | ||
| 85 | unsigned int evtchn, irq; | 87 | unsigned int evtchn, irq; |
| 86 | struct request_queue *rq; | 88 | struct request_queue *rq; |
| 87 | struct work_struct work; | 89 | struct work_struct work; |
| @@ -204,12 +206,11 @@ static int blkif_queue_request(struct request *req) | |||
| 204 | struct blkfront_info *info = req->rq_disk->private_data; | 206 | struct blkfront_info *info = req->rq_disk->private_data; |
| 205 | unsigned long buffer_mfn; | 207 | unsigned long buffer_mfn; |
| 206 | struct blkif_request *ring_req; | 208 | struct blkif_request *ring_req; |
| 207 | struct req_iterator iter; | ||
| 208 | struct bio_vec *bvec; | ||
| 209 | unsigned long id; | 209 | unsigned long id; |
| 210 | unsigned int fsect, lsect; | 210 | unsigned int fsect, lsect; |
| 211 | int ref; | 211 | int i, ref; |
| 212 | grant_ref_t gref_head; | 212 | grant_ref_t gref_head; |
| 213 | struct scatterlist *sg; | ||
| 213 | 214 | ||
| 214 | if (unlikely(info->connected != BLKIF_STATE_CONNECTED)) | 215 | if (unlikely(info->connected != BLKIF_STATE_CONNECTED)) |
| 215 | return 1; | 216 | return 1; |
| @@ -238,12 +239,13 @@ static int blkif_queue_request(struct request *req) | |||
| 238 | if (blk_barrier_rq(req)) | 239 | if (blk_barrier_rq(req)) |
| 239 | ring_req->operation = BLKIF_OP_WRITE_BARRIER; | 240 | ring_req->operation = BLKIF_OP_WRITE_BARRIER; |
| 240 | 241 | ||
| 241 | ring_req->nr_segments = 0; | 242 | ring_req->nr_segments = blk_rq_map_sg(req->q, req, info->sg); |
| 242 | rq_for_each_segment(bvec, req, iter) { | 243 | BUG_ON(ring_req->nr_segments > BLKIF_MAX_SEGMENTS_PER_REQUEST); |
| 243 | BUG_ON(ring_req->nr_segments == BLKIF_MAX_SEGMENTS_PER_REQUEST); | 244 | |
| 244 | buffer_mfn = pfn_to_mfn(page_to_pfn(bvec->bv_page)); | 245 | for_each_sg(info->sg, sg, ring_req->nr_segments, i) { |
| 245 | fsect = bvec->bv_offset >> 9; | 246 | buffer_mfn = pfn_to_mfn(page_to_pfn(sg_page(sg))); |
| 246 | lsect = fsect + (bvec->bv_len >> 9) - 1; | 247 | fsect = sg->offset >> 9; |
| 248 | lsect = fsect + (sg->length >> 9) - 1; | ||
| 247 | /* install a grant reference. */ | 249 | /* install a grant reference. */ |
| 248 | ref = gnttab_claim_grant_reference(&gref_head); | 250 | ref = gnttab_claim_grant_reference(&gref_head); |
| 249 | BUG_ON(ref == -ENOSPC); | 251 | BUG_ON(ref == -ENOSPC); |
| @@ -254,16 +256,12 @@ static int blkif_queue_request(struct request *req) | |||
| 254 | buffer_mfn, | 256 | buffer_mfn, |
| 255 | rq_data_dir(req) ); | 257 | rq_data_dir(req) ); |
| 256 | 258 | ||
| 257 | info->shadow[id].frame[ring_req->nr_segments] = | 259 | info->shadow[id].frame[i] = mfn_to_pfn(buffer_mfn); |
| 258 | mfn_to_pfn(buffer_mfn); | 260 | ring_req->seg[i] = |
| 259 | |||
| 260 | ring_req->seg[ring_req->nr_segments] = | ||
| 261 | (struct blkif_request_segment) { | 261 | (struct blkif_request_segment) { |
| 262 | .gref = ref, | 262 | .gref = ref, |
| 263 | .first_sect = fsect, | 263 | .first_sect = fsect, |
| 264 | .last_sect = lsect }; | 264 | .last_sect = lsect }; |
| 265 | |||
| 266 | ring_req->nr_segments++; | ||
| 267 | } | 265 | } |
| 268 | 266 | ||
| 269 | info->ring.req_prod_pvt++; | 267 | info->ring.req_prod_pvt++; |
| @@ -622,6 +620,8 @@ static int setup_blkring(struct xenbus_device *dev, | |||
| 622 | SHARED_RING_INIT(sring); | 620 | SHARED_RING_INIT(sring); |
| 623 | FRONT_RING_INIT(&info->ring, sring, PAGE_SIZE); | 621 | FRONT_RING_INIT(&info->ring, sring, PAGE_SIZE); |
| 624 | 622 | ||
| 623 | sg_init_table(info->sg, BLKIF_MAX_SEGMENTS_PER_REQUEST); | ||
| 624 | |||
| 625 | err = xenbus_grant_ring(dev, virt_to_mfn(info->ring.sring)); | 625 | err = xenbus_grant_ring(dev, virt_to_mfn(info->ring.sring)); |
| 626 | if (err < 0) { | 626 | if (err < 0) { |
| 627 | free_page((unsigned long)sring); | 627 | free_page((unsigned long)sring); |
| @@ -977,6 +977,8 @@ static void backend_changed(struct xenbus_device *dev, | |||
| 977 | break; | 977 | break; |
| 978 | 978 | ||
| 979 | case XenbusStateClosing: | 979 | case XenbusStateClosing: |
| 980 | if (info->gd == NULL) | ||
| 981 | xenbus_dev_fatal(dev, -ENODEV, "gd is NULL"); | ||
| 980 | bd = bdget_disk(info->gd, 0); | 982 | bd = bdget_disk(info->gd, 0); |
| 981 | if (bd == NULL) | 983 | if (bd == NULL) |
| 982 | xenbus_dev_fatal(dev, -ENODEV, "bdget failed"); | 984 | xenbus_dev_fatal(dev, -ENODEV, "bdget failed"); |
diff --git a/drivers/char/agp/amd64-agp.c b/drivers/char/agp/amd64-agp.c index 52f4361eb6e4..d765afda9c2a 100644 --- a/drivers/char/agp/amd64-agp.c +++ b/drivers/char/agp/amd64-agp.c | |||
| @@ -271,15 +271,15 @@ static __devinit int fix_northbridge(struct pci_dev *nb, struct pci_dev *agp, | |||
| 271 | nb_order = (nb_order >> 1) & 7; | 271 | nb_order = (nb_order >> 1) & 7; |
| 272 | pci_read_config_dword(nb, AMD64_GARTAPERTUREBASE, &nb_base); | 272 | pci_read_config_dword(nb, AMD64_GARTAPERTUREBASE, &nb_base); |
| 273 | nb_aper = nb_base << 25; | 273 | nb_aper = nb_base << 25; |
| 274 | if (agp_aperture_valid(nb_aper, (32*1024*1024)<<nb_order)) { | ||
| 275 | return 0; | ||
| 276 | } | ||
| 277 | 274 | ||
| 278 | /* Northbridge seems to contain crap. Try the AGP bridge. */ | 275 | /* Northbridge seems to contain crap. Try the AGP bridge. */ |
| 279 | 276 | ||
| 280 | pci_read_config_word(agp, cap+0x14, &apsize); | 277 | pci_read_config_word(agp, cap+0x14, &apsize); |
| 281 | if (apsize == 0xffff) | 278 | if (apsize == 0xffff) { |
| 279 | if (agp_aperture_valid(nb_aper, (32*1024*1024)<<nb_order)) | ||
| 280 | return 0; | ||
| 282 | return -1; | 281 | return -1; |
| 282 | } | ||
| 283 | 283 | ||
| 284 | apsize &= 0xfff; | 284 | apsize &= 0xfff; |
| 285 | /* Some BIOS use weird encodings not in the AGPv3 table. */ | 285 | /* Some BIOS use weird encodings not in the AGPv3 table. */ |
| @@ -301,6 +301,11 @@ static __devinit int fix_northbridge(struct pci_dev *nb, struct pci_dev *agp, | |||
| 301 | order = nb_order; | 301 | order = nb_order; |
| 302 | } | 302 | } |
| 303 | 303 | ||
| 304 | if (nb_order >= order) { | ||
| 305 | if (agp_aperture_valid(nb_aper, (32*1024*1024)<<nb_order)) | ||
| 306 | return 0; | ||
| 307 | } | ||
| 308 | |||
| 304 | dev_info(&agp->dev, "aperture from AGP @ %Lx size %u MB\n", | 309 | dev_info(&agp->dev, "aperture from AGP @ %Lx size %u MB\n", |
| 305 | aper, 32 << order); | 310 | aper, 32 << order); |
| 306 | if (order < 0 || !agp_aperture_valid(aper, (32*1024*1024)<<order)) | 311 | if (order < 0 || !agp_aperture_valid(aper, (32*1024*1024)<<order)) |
diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c index c7714185f831..4373adb2119a 100644 --- a/drivers/char/agp/intel-agp.c +++ b/drivers/char/agp/intel-agp.c | |||
| @@ -633,13 +633,15 @@ static void intel_i830_init_gtt_entries(void) | |||
| 633 | break; | 633 | break; |
| 634 | } | 634 | } |
| 635 | } | 635 | } |
| 636 | if (gtt_entries > 0) | 636 | if (gtt_entries > 0) { |
| 637 | dev_info(&agp_bridge->dev->dev, "detected %dK %s memory\n", | 637 | dev_info(&agp_bridge->dev->dev, "detected %dK %s memory\n", |
| 638 | gtt_entries / KB(1), local ? "local" : "stolen"); | 638 | gtt_entries / KB(1), local ? "local" : "stolen"); |
| 639 | else | 639 | gtt_entries /= KB(4); |
| 640 | } else { | ||
| 640 | dev_info(&agp_bridge->dev->dev, | 641 | dev_info(&agp_bridge->dev->dev, |
| 641 | "no pre-allocated video memory detected\n"); | 642 | "no pre-allocated video memory detected\n"); |
| 642 | gtt_entries /= KB(4); | 643 | gtt_entries = 0; |
| 644 | } | ||
| 643 | 645 | ||
| 644 | intel_private.gtt_entries = gtt_entries; | 646 | intel_private.gtt_entries = gtt_entries; |
| 645 | } | 647 | } |
diff --git a/drivers/char/scc.h b/drivers/char/scc.h index 93998f5baff5..341b1142bea8 100644 --- a/drivers/char/scc.h +++ b/drivers/char/scc.h | |||
| @@ -387,7 +387,7 @@ struct scc_port { | |||
| 387 | /* The SCC needs 3.5 PCLK cycles recovery time between to register | 387 | /* The SCC needs 3.5 PCLK cycles recovery time between to register |
| 388 | * accesses. PCLK runs with 8 MHz on an Atari, so this delay is 3.5 * | 388 | * accesses. PCLK runs with 8 MHz on an Atari, so this delay is 3.5 * |
| 389 | * 125 ns = 437.5 ns. This is too short for udelay(). | 389 | * 125 ns = 437.5 ns. This is too short for udelay(). |
| 390 | * 10/16/95: A tstb mfp.par_dt_reg takes 600ns (sure?) and thus should be | 390 | * 10/16/95: A tstb st_mfp.par_dt_reg takes 600ns (sure?) and thus should be |
| 391 | * quite right | 391 | * quite right |
| 392 | */ | 392 | */ |
| 393 | 393 | ||
diff --git a/drivers/char/sx.c b/drivers/char/sx.c index f146e90404fa..518f2a25d91e 100644 --- a/drivers/char/sx.c +++ b/drivers/char/sx.c | |||
| @@ -1746,9 +1746,10 @@ static long sx_fw_ioctl(struct file *filp, unsigned int cmd, | |||
| 1746 | sx_dprintk(SX_DEBUG_FIRMWARE, "returning type= %ld\n", rc); | 1746 | sx_dprintk(SX_DEBUG_FIRMWARE, "returning type= %ld\n", rc); |
| 1747 | break; | 1747 | break; |
| 1748 | case SXIO_DO_RAMTEST: | 1748 | case SXIO_DO_RAMTEST: |
| 1749 | if (sx_initialized) /* Already initialized: better not ramtest the board. */ | 1749 | if (sx_initialized) { /* Already initialized: better not ramtest the board. */ |
| 1750 | rc = -EPERM; | 1750 | rc = -EPERM; |
| 1751 | break; | 1751 | break; |
| 1752 | } | ||
| 1752 | if (IS_SX_BOARD(board)) { | 1753 | if (IS_SX_BOARD(board)) { |
| 1753 | rc = do_memtest(board, 0, 0x7000); | 1754 | rc = do_memtest(board, 0, 0x7000); |
| 1754 | if (!rc) | 1755 | if (!rc) |
| @@ -1788,7 +1789,7 @@ static long sx_fw_ioctl(struct file *filp, unsigned int cmd, | |||
| 1788 | nbytes - i : SX_CHUNK_SIZE)) { | 1789 | nbytes - i : SX_CHUNK_SIZE)) { |
| 1789 | kfree(tmp); | 1790 | kfree(tmp); |
| 1790 | rc = -EFAULT; | 1791 | rc = -EFAULT; |
| 1791 | break; | 1792 | goto out; |
| 1792 | } | 1793 | } |
| 1793 | memcpy_toio(board->base2 + offset + i, tmp, | 1794 | memcpy_toio(board->base2 + offset + i, tmp, |
| 1794 | (i + SX_CHUNK_SIZE > nbytes) ? | 1795 | (i + SX_CHUNK_SIZE > nbytes) ? |
diff --git a/drivers/char/tpm/tpm_infineon.c b/drivers/char/tpm/tpm_infineon.c index 726ee8a0277f..ecba4942fc8e 100644 --- a/drivers/char/tpm/tpm_infineon.c +++ b/drivers/char/tpm/tpm_infineon.c | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | * SLD 9630 TT 1.1 and SLB 9635 TT 1.2 Trusted Platform Module | 4 | * SLD 9630 TT 1.1 and SLB 9635 TT 1.2 Trusted Platform Module |
| 5 | * Specifications at www.trustedcomputinggroup.org | 5 | * Specifications at www.trustedcomputinggroup.org |
| 6 | * | 6 | * |
| 7 | * Copyright (C) 2005, Marcel Selhorst <selhorst@crypto.rub.de> | 7 | * Copyright (C) 2005, Marcel Selhorst <m.selhorst@sirrix.com> |
| 8 | * Sirrix AG - security technologies, http://www.sirrix.com and | 8 | * Sirrix AG - security technologies, http://www.sirrix.com and |
| 9 | * Applied Data Security Group, Ruhr-University Bochum, Germany | 9 | * Applied Data Security Group, Ruhr-University Bochum, Germany |
| 10 | * Project-Homepage: http://www.prosec.rub.de/tpm | 10 | * Project-Homepage: http://www.prosec.rub.de/tpm |
| @@ -636,7 +636,7 @@ static void __exit cleanup_inf(void) | |||
| 636 | module_init(init_inf); | 636 | module_init(init_inf); |
| 637 | module_exit(cleanup_inf); | 637 | module_exit(cleanup_inf); |
| 638 | 638 | ||
| 639 | MODULE_AUTHOR("Marcel Selhorst <selhorst@crypto.rub.de>"); | 639 | MODULE_AUTHOR("Marcel Selhorst <m.selhorst@sirrix.com>"); |
| 640 | MODULE_DESCRIPTION("Driver for Infineon TPM SLD 9630 TT 1.1 / SLB 9635 TT 1.2"); | 640 | MODULE_DESCRIPTION("Driver for Infineon TPM SLD 9630 TT 1.1 / SLB 9635 TT 1.2"); |
| 641 | MODULE_VERSION("1.9"); | 641 | MODULE_VERSION("1.9"); |
| 642 | MODULE_LICENSE("GPL"); | 642 | MODULE_LICENSE("GPL"); |
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index b55cb67435bd..d6daf3c507d3 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c | |||
| @@ -754,11 +754,6 @@ static struct kobj_type ktype_cpufreq = { | |||
| 754 | .release = cpufreq_sysfs_release, | 754 | .release = cpufreq_sysfs_release, |
| 755 | }; | 755 | }; |
| 756 | 756 | ||
| 757 | static struct kobj_type ktype_empty_cpufreq = { | ||
| 758 | .sysfs_ops = &sysfs_ops, | ||
| 759 | .release = cpufreq_sysfs_release, | ||
| 760 | }; | ||
| 761 | |||
| 762 | 757 | ||
| 763 | /** | 758 | /** |
| 764 | * cpufreq_add_dev - add a CPU device | 759 | * cpufreq_add_dev - add a CPU device |
| @@ -892,36 +887,26 @@ static int cpufreq_add_dev(struct sys_device *sys_dev) | |||
| 892 | memcpy(&new_policy, policy, sizeof(struct cpufreq_policy)); | 887 | memcpy(&new_policy, policy, sizeof(struct cpufreq_policy)); |
| 893 | 888 | ||
| 894 | /* prepare interface data */ | 889 | /* prepare interface data */ |
| 895 | if (!cpufreq_driver->hide_interface) { | 890 | ret = kobject_init_and_add(&policy->kobj, &ktype_cpufreq, &sys_dev->kobj, |
| 896 | ret = kobject_init_and_add(&policy->kobj, &ktype_cpufreq, | 891 | "cpufreq"); |
| 897 | &sys_dev->kobj, "cpufreq"); | 892 | if (ret) |
| 893 | goto err_out_driver_exit; | ||
| 894 | |||
| 895 | /* set up files for this cpu device */ | ||
| 896 | drv_attr = cpufreq_driver->attr; | ||
| 897 | while ((drv_attr) && (*drv_attr)) { | ||
| 898 | ret = sysfs_create_file(&policy->kobj, &((*drv_attr)->attr)); | ||
| 898 | if (ret) | 899 | if (ret) |
| 899 | goto err_out_driver_exit; | 900 | goto err_out_driver_exit; |
| 900 | 901 | drv_attr++; | |
| 901 | /* set up files for this cpu device */ | 902 | } |
| 902 | drv_attr = cpufreq_driver->attr; | 903 | if (cpufreq_driver->get) { |
| 903 | while ((drv_attr) && (*drv_attr)) { | 904 | ret = sysfs_create_file(&policy->kobj, &cpuinfo_cur_freq.attr); |
| 904 | ret = sysfs_create_file(&policy->kobj, | 905 | if (ret) |
| 905 | &((*drv_attr)->attr)); | 906 | goto err_out_driver_exit; |
| 906 | if (ret) | 907 | } |
| 907 | goto err_out_driver_exit; | 908 | if (cpufreq_driver->target) { |
| 908 | drv_attr++; | 909 | ret = sysfs_create_file(&policy->kobj, &scaling_cur_freq.attr); |
| 909 | } | ||
| 910 | if (cpufreq_driver->get) { | ||
| 911 | ret = sysfs_create_file(&policy->kobj, | ||
| 912 | &cpuinfo_cur_freq.attr); | ||
| 913 | if (ret) | ||
| 914 | goto err_out_driver_exit; | ||
| 915 | } | ||
| 916 | if (cpufreq_driver->target) { | ||
| 917 | ret = sysfs_create_file(&policy->kobj, | ||
| 918 | &scaling_cur_freq.attr); | ||
| 919 | if (ret) | ||
| 920 | goto err_out_driver_exit; | ||
| 921 | } | ||
| 922 | } else { | ||
| 923 | ret = kobject_init_and_add(&policy->kobj, &ktype_empty_cpufreq, | ||
| 924 | &sys_dev->kobj, "cpufreq"); | ||
| 925 | if (ret) | 910 | if (ret) |
| 926 | goto err_out_driver_exit; | 911 | goto err_out_driver_exit; |
| 927 | } | 912 | } |
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c index 6a2b036c9389..6f45b1658a67 100644 --- a/drivers/cpufreq/cpufreq_ondemand.c +++ b/drivers/cpufreq/cpufreq_ondemand.c | |||
| @@ -117,11 +117,7 @@ static inline cputime64_t get_cpu_idle_time_jiffy(unsigned int cpu, | |||
| 117 | busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.irq); | 117 | busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.irq); |
| 118 | busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.softirq); | 118 | busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.softirq); |
| 119 | busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.steal); | 119 | busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.steal); |
| 120 | 120 | busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.nice); | |
| 121 | if (!dbs_tuners_ins.ignore_nice) { | ||
| 122 | busy_time = cputime64_add(busy_time, | ||
| 123 | kstat_cpu(cpu).cpustat.nice); | ||
| 124 | } | ||
| 125 | 121 | ||
| 126 | idle_time = cputime64_sub(cur_wall_time, busy_time); | 122 | idle_time = cputime64_sub(cur_wall_time, busy_time); |
| 127 | if (wall) | 123 | if (wall) |
| @@ -137,23 +133,6 @@ static inline cputime64_t get_cpu_idle_time(unsigned int cpu, cputime64_t *wall) | |||
| 137 | if (idle_time == -1ULL) | 133 | if (idle_time == -1ULL) |
| 138 | return get_cpu_idle_time_jiffy(cpu, wall); | 134 | return get_cpu_idle_time_jiffy(cpu, wall); |
| 139 | 135 | ||
| 140 | if (dbs_tuners_ins.ignore_nice) { | ||
| 141 | cputime64_t cur_nice; | ||
| 142 | unsigned long cur_nice_jiffies; | ||
| 143 | struct cpu_dbs_info_s *dbs_info; | ||
| 144 | |||
| 145 | dbs_info = &per_cpu(cpu_dbs_info, cpu); | ||
| 146 | cur_nice = cputime64_sub(kstat_cpu(cpu).cpustat.nice, | ||
| 147 | dbs_info->prev_cpu_nice); | ||
| 148 | /* | ||
| 149 | * Assumption: nice time between sampling periods will be | ||
| 150 | * less than 2^32 jiffies for 32 bit sys | ||
| 151 | */ | ||
| 152 | cur_nice_jiffies = (unsigned long) | ||
| 153 | cputime64_to_jiffies64(cur_nice); | ||
| 154 | dbs_info->prev_cpu_nice = kstat_cpu(cpu).cpustat.nice; | ||
| 155 | return idle_time + jiffies_to_usecs(cur_nice_jiffies); | ||
| 156 | } | ||
| 157 | return idle_time; | 136 | return idle_time; |
| 158 | } | 137 | } |
| 159 | 138 | ||
| @@ -319,6 +298,9 @@ static ssize_t store_ignore_nice_load(struct cpufreq_policy *policy, | |||
| 319 | dbs_info = &per_cpu(cpu_dbs_info, j); | 298 | dbs_info = &per_cpu(cpu_dbs_info, j); |
| 320 | dbs_info->prev_cpu_idle = get_cpu_idle_time(j, | 299 | dbs_info->prev_cpu_idle = get_cpu_idle_time(j, |
| 321 | &dbs_info->prev_cpu_wall); | 300 | &dbs_info->prev_cpu_wall); |
| 301 | if (dbs_tuners_ins.ignore_nice) | ||
| 302 | dbs_info->prev_cpu_nice = kstat_cpu(j).cpustat.nice; | ||
| 303 | |||
| 322 | } | 304 | } |
| 323 | mutex_unlock(&dbs_mutex); | 305 | mutex_unlock(&dbs_mutex); |
| 324 | 306 | ||
| @@ -419,6 +401,23 @@ static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info) | |||
| 419 | j_dbs_info->prev_cpu_idle); | 401 | j_dbs_info->prev_cpu_idle); |
| 420 | j_dbs_info->prev_cpu_idle = cur_idle_time; | 402 | j_dbs_info->prev_cpu_idle = cur_idle_time; |
| 421 | 403 | ||
| 404 | if (dbs_tuners_ins.ignore_nice) { | ||
| 405 | cputime64_t cur_nice; | ||
| 406 | unsigned long cur_nice_jiffies; | ||
| 407 | |||
| 408 | cur_nice = cputime64_sub(kstat_cpu(j).cpustat.nice, | ||
| 409 | j_dbs_info->prev_cpu_nice); | ||
| 410 | /* | ||
| 411 | * Assumption: nice time between sampling periods will | ||
| 412 | * be less than 2^32 jiffies for 32 bit sys | ||
| 413 | */ | ||
| 414 | cur_nice_jiffies = (unsigned long) | ||
| 415 | cputime64_to_jiffies64(cur_nice); | ||
| 416 | |||
| 417 | j_dbs_info->prev_cpu_nice = kstat_cpu(j).cpustat.nice; | ||
| 418 | idle_time += jiffies_to_usecs(cur_nice_jiffies); | ||
| 419 | } | ||
| 420 | |||
| 422 | if (unlikely(!wall_time || wall_time < idle_time)) | 421 | if (unlikely(!wall_time || wall_time < idle_time)) |
| 423 | continue; | 422 | continue; |
| 424 | 423 | ||
| @@ -575,6 +574,10 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy, | |||
| 575 | 574 | ||
| 576 | j_dbs_info->prev_cpu_idle = get_cpu_idle_time(j, | 575 | j_dbs_info->prev_cpu_idle = get_cpu_idle_time(j, |
| 577 | &j_dbs_info->prev_cpu_wall); | 576 | &j_dbs_info->prev_cpu_wall); |
| 577 | if (dbs_tuners_ins.ignore_nice) { | ||
| 578 | j_dbs_info->prev_cpu_nice = | ||
| 579 | kstat_cpu(j).cpustat.nice; | ||
| 580 | } | ||
| 578 | } | 581 | } |
| 579 | this_dbs_info->cpu = cpu; | 582 | this_dbs_info->cpu = cpu; |
| 580 | /* | 583 | /* |
diff --git a/drivers/crypto/ixp4xx_crypto.c b/drivers/crypto/ixp4xx_crypto.c index 2d637e0fbc03..d9e751be8c5f 100644 --- a/drivers/crypto/ixp4xx_crypto.c +++ b/drivers/crypto/ixp4xx_crypto.c | |||
| @@ -457,10 +457,12 @@ static int init_ixp_crypto(void) | |||
| 457 | if (!ctx_pool) { | 457 | if (!ctx_pool) { |
| 458 | goto err; | 458 | goto err; |
| 459 | } | 459 | } |
| 460 | ret = qmgr_request_queue(SEND_QID, NPE_QLEN_TOTAL, 0, 0); | 460 | ret = qmgr_request_queue(SEND_QID, NPE_QLEN_TOTAL, 0, 0, |
| 461 | "ixp_crypto:out", NULL); | ||
| 461 | if (ret) | 462 | if (ret) |
| 462 | goto err; | 463 | goto err; |
| 463 | ret = qmgr_request_queue(RECV_QID, NPE_QLEN, 0, 0); | 464 | ret = qmgr_request_queue(RECV_QID, NPE_QLEN, 0, 0, |
| 465 | "ixp_crypto:in", NULL); | ||
| 464 | if (ret) { | 466 | if (ret) { |
| 465 | qmgr_release_queue(SEND_QID); | 467 | qmgr_release_queue(SEND_QID); |
| 466 | goto err; | 468 | goto err; |
diff --git a/drivers/crypto/padlock-aes.c b/drivers/crypto/padlock-aes.c index 856b3cc25583..3f0fdd18255d 100644 --- a/drivers/crypto/padlock-aes.c +++ b/drivers/crypto/padlock-aes.c | |||
| @@ -489,4 +489,4 @@ MODULE_DESCRIPTION("VIA PadLock AES algorithm support"); | |||
| 489 | MODULE_LICENSE("GPL"); | 489 | MODULE_LICENSE("GPL"); |
| 490 | MODULE_AUTHOR("Michal Ludvig"); | 490 | MODULE_AUTHOR("Michal Ludvig"); |
| 491 | 491 | ||
| 492 | MODULE_ALIAS("aes"); | 492 | MODULE_ALIAS("aes-all"); |
diff --git a/drivers/crypto/padlock-sha.c b/drivers/crypto/padlock-sha.c index a7fbadebf623..a2c8e8514b63 100644 --- a/drivers/crypto/padlock-sha.c +++ b/drivers/crypto/padlock-sha.c | |||
| @@ -304,7 +304,7 @@ MODULE_DESCRIPTION("VIA PadLock SHA1/SHA256 algorithms support."); | |||
| 304 | MODULE_LICENSE("GPL"); | 304 | MODULE_LICENSE("GPL"); |
| 305 | MODULE_AUTHOR("Michal Ludvig"); | 305 | MODULE_AUTHOR("Michal Ludvig"); |
| 306 | 306 | ||
| 307 | MODULE_ALIAS("sha1"); | 307 | MODULE_ALIAS("sha1-all"); |
| 308 | MODULE_ALIAS("sha256"); | 308 | MODULE_ALIAS("sha256-all"); |
| 309 | MODULE_ALIAS("sha1-padlock"); | 309 | MODULE_ALIAS("sha1-padlock"); |
| 310 | MODULE_ALIAS("sha256-padlock"); | 310 | MODULE_ALIAS("sha256-padlock"); |
diff --git a/drivers/dca/dca-core.c b/drivers/dca/dca-core.c index 33bd75347518..25b743abfb59 100644 --- a/drivers/dca/dca-core.c +++ b/drivers/dca/dca-core.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright(c) 2007 Intel Corporation. All rights reserved. | 2 | * Copyright(c) 2007 - 2009 Intel Corporation. All rights reserved. |
| 3 | * | 3 | * |
| 4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | * under the terms of the GNU General Public License as published by the Free | 5 | * under the terms of the GNU General Public License as published by the Free |
diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c index a58993011edb..280a9d263eb3 100644 --- a/drivers/dma/dmaengine.c +++ b/drivers/dma/dmaengine.c | |||
| @@ -518,6 +518,7 @@ struct dma_chan *__dma_request_channel(dma_cap_mask_t *mask, dma_filter_fn fn, v | |||
| 518 | dma_chan_name(chan), err); | 518 | dma_chan_name(chan), err); |
| 519 | else | 519 | else |
| 520 | break; | 520 | break; |
| 521 | chan->private = NULL; | ||
| 521 | chan = NULL; | 522 | chan = NULL; |
| 522 | } | 523 | } |
| 523 | } | 524 | } |
| @@ -536,6 +537,7 @@ void dma_release_channel(struct dma_chan *chan) | |||
| 536 | WARN_ONCE(chan->client_count != 1, | 537 | WARN_ONCE(chan->client_count != 1, |
| 537 | "chan reference count %d != 1\n", chan->client_count); | 538 | "chan reference count %d != 1\n", chan->client_count); |
| 538 | dma_chan_put(chan); | 539 | dma_chan_put(chan); |
| 540 | chan->private = NULL; | ||
| 539 | mutex_unlock(&dma_list_mutex); | 541 | mutex_unlock(&dma_list_mutex); |
| 540 | } | 542 | } |
| 541 | EXPORT_SYMBOL_GPL(dma_release_channel); | 543 | EXPORT_SYMBOL_GPL(dma_release_channel); |
diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c index 732fa1ec36ab..e190d8b30700 100644 --- a/drivers/dma/dmatest.c +++ b/drivers/dma/dmatest.c | |||
| @@ -430,13 +430,15 @@ late_initcall(dmatest_init); | |||
| 430 | static void __exit dmatest_exit(void) | 430 | static void __exit dmatest_exit(void) |
| 431 | { | 431 | { |
| 432 | struct dmatest_chan *dtc, *_dtc; | 432 | struct dmatest_chan *dtc, *_dtc; |
| 433 | struct dma_chan *chan; | ||
| 433 | 434 | ||
| 434 | list_for_each_entry_safe(dtc, _dtc, &dmatest_channels, node) { | 435 | list_for_each_entry_safe(dtc, _dtc, &dmatest_channels, node) { |
| 435 | list_del(&dtc->node); | 436 | list_del(&dtc->node); |
| 437 | chan = dtc->chan; | ||
| 436 | dmatest_cleanup_channel(dtc); | 438 | dmatest_cleanup_channel(dtc); |
| 437 | pr_debug("dmatest: dropped channel %s\n", | 439 | pr_debug("dmatest: dropped channel %s\n", |
| 438 | dma_chan_name(dtc->chan)); | 440 | dma_chan_name(chan)); |
| 439 | dma_release_channel(dtc->chan); | 441 | dma_release_channel(chan); |
| 440 | } | 442 | } |
| 441 | } | 443 | } |
| 442 | module_exit(dmatest_exit); | 444 | module_exit(dmatest_exit); |
diff --git a/drivers/dma/dw_dmac.c b/drivers/dma/dw_dmac.c index 6b702cc46b3d..a97c07eef7ec 100644 --- a/drivers/dma/dw_dmac.c +++ b/drivers/dma/dw_dmac.c | |||
| @@ -560,7 +560,7 @@ dwc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl, | |||
| 560 | unsigned long flags) | 560 | unsigned long flags) |
| 561 | { | 561 | { |
| 562 | struct dw_dma_chan *dwc = to_dw_dma_chan(chan); | 562 | struct dw_dma_chan *dwc = to_dw_dma_chan(chan); |
| 563 | struct dw_dma_slave *dws = dwc->dws; | 563 | struct dw_dma_slave *dws = chan->private; |
| 564 | struct dw_desc *prev; | 564 | struct dw_desc *prev; |
| 565 | struct dw_desc *first; | 565 | struct dw_desc *first; |
| 566 | u32 ctllo; | 566 | u32 ctllo; |
| @@ -790,7 +790,7 @@ static int dwc_alloc_chan_resources(struct dma_chan *chan) | |||
| 790 | cfghi = DWC_CFGH_FIFO_MODE; | 790 | cfghi = DWC_CFGH_FIFO_MODE; |
| 791 | cfglo = 0; | 791 | cfglo = 0; |
| 792 | 792 | ||
| 793 | dws = dwc->dws; | 793 | dws = chan->private; |
| 794 | if (dws) { | 794 | if (dws) { |
| 795 | /* | 795 | /* |
| 796 | * We need controller-specific data to set up slave | 796 | * We need controller-specific data to set up slave |
| @@ -866,7 +866,6 @@ static void dwc_free_chan_resources(struct dma_chan *chan) | |||
| 866 | spin_lock_bh(&dwc->lock); | 866 | spin_lock_bh(&dwc->lock); |
| 867 | list_splice_init(&dwc->free_list, &list); | 867 | list_splice_init(&dwc->free_list, &list); |
| 868 | dwc->descs_allocated = 0; | 868 | dwc->descs_allocated = 0; |
| 869 | dwc->dws = NULL; | ||
| 870 | 869 | ||
| 871 | /* Disable interrupts */ | 870 | /* Disable interrupts */ |
| 872 | channel_clear_bit(dw, MASK.XFER, dwc->mask); | 871 | channel_clear_bit(dw, MASK.XFER, dwc->mask); |
diff --git a/drivers/dma/dw_dmac_regs.h b/drivers/dma/dw_dmac_regs.h index 00fdd187bb0c..b252b202c5cf 100644 --- a/drivers/dma/dw_dmac_regs.h +++ b/drivers/dma/dw_dmac_regs.h | |||
| @@ -139,8 +139,6 @@ struct dw_dma_chan { | |||
| 139 | struct list_head queue; | 139 | struct list_head queue; |
| 140 | struct list_head free_list; | 140 | struct list_head free_list; |
| 141 | 141 | ||
| 142 | struct dw_dma_slave *dws; | ||
| 143 | |||
| 144 | unsigned int descs_allocated; | 142 | unsigned int descs_allocated; |
| 145 | }; | 143 | }; |
| 146 | 144 | ||
diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c index 70126a606239..86d6da47f558 100644 --- a/drivers/dma/fsldma.c +++ b/drivers/dma/fsldma.c | |||
| @@ -158,7 +158,8 @@ static void dma_start(struct fsl_dma_chan *fsl_chan) | |||
| 158 | 158 | ||
| 159 | static void dma_halt(struct fsl_dma_chan *fsl_chan) | 159 | static void dma_halt(struct fsl_dma_chan *fsl_chan) |
| 160 | { | 160 | { |
| 161 | int i = 0; | 161 | int i; |
| 162 | |||
| 162 | DMA_OUT(fsl_chan, &fsl_chan->reg_base->mr, | 163 | DMA_OUT(fsl_chan, &fsl_chan->reg_base->mr, |
| 163 | DMA_IN(fsl_chan, &fsl_chan->reg_base->mr, 32) | FSL_DMA_MR_CA, | 164 | DMA_IN(fsl_chan, &fsl_chan->reg_base->mr, 32) | FSL_DMA_MR_CA, |
| 164 | 32); | 165 | 32); |
| @@ -166,8 +167,11 @@ static void dma_halt(struct fsl_dma_chan *fsl_chan) | |||
| 166 | DMA_IN(fsl_chan, &fsl_chan->reg_base->mr, 32) & ~(FSL_DMA_MR_CS | 167 | DMA_IN(fsl_chan, &fsl_chan->reg_base->mr, 32) & ~(FSL_DMA_MR_CS |
| 167 | | FSL_DMA_MR_EMS_EN | FSL_DMA_MR_CA), 32); | 168 | | FSL_DMA_MR_EMS_EN | FSL_DMA_MR_CA), 32); |
| 168 | 169 | ||
| 169 | while (!dma_is_idle(fsl_chan) && (i++ < 100)) | 170 | for (i = 0; i < 100; i++) { |
| 171 | if (dma_is_idle(fsl_chan)) | ||
| 172 | break; | ||
| 170 | udelay(10); | 173 | udelay(10); |
| 174 | } | ||
| 171 | if (i >= 100 && !dma_is_idle(fsl_chan)) | 175 | if (i >= 100 && !dma_is_idle(fsl_chan)) |
| 172 | dev_err(fsl_chan->dev, "DMA halt timeout!\n"); | 176 | dev_err(fsl_chan->dev, "DMA halt timeout!\n"); |
| 173 | } | 177 | } |
diff --git a/drivers/dma/ioat.c b/drivers/dma/ioat.c index 4105d6575b64..ed83dd9df192 100644 --- a/drivers/dma/ioat.c +++ b/drivers/dma/ioat.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Intel I/OAT DMA Linux driver | 2 | * Intel I/OAT DMA Linux driver |
| 3 | * Copyright(c) 2007 Intel Corporation. | 3 | * Copyright(c) 2007 - 2009 Intel Corporation. |
| 4 | * | 4 | * |
| 5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
| 6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/dma/ioat_dca.c b/drivers/dma/ioat_dca.c index 6cf622da0286..c012a1e15043 100644 --- a/drivers/dma/ioat_dca.c +++ b/drivers/dma/ioat_dca.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Intel I/OAT DMA Linux driver | 2 | * Intel I/OAT DMA Linux driver |
| 3 | * Copyright(c) 2007 Intel Corporation. | 3 | * Copyright(c) 2007 - 2009 Intel Corporation. |
| 4 | * | 4 | * |
| 5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
| 6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
| @@ -49,6 +49,23 @@ | |||
| 49 | 49 | ||
| 50 | #define DCA_TAG_MAP_MASK 0xDF | 50 | #define DCA_TAG_MAP_MASK 0xDF |
| 51 | 51 | ||
| 52 | /* expected tag map bytes for I/OAT ver.2 */ | ||
| 53 | #define DCA2_TAG_MAP_BYTE0 0x80 | ||
| 54 | #define DCA2_TAG_MAP_BYTE1 0x0 | ||
| 55 | #define DCA2_TAG_MAP_BYTE2 0x81 | ||
| 56 | #define DCA2_TAG_MAP_BYTE3 0x82 | ||
| 57 | #define DCA2_TAG_MAP_BYTE4 0x82 | ||
| 58 | |||
| 59 | /* verify if tag map matches expected values */ | ||
| 60 | static inline int dca2_tag_map_valid(u8 *tag_map) | ||
| 61 | { | ||
| 62 | return ((tag_map[0] == DCA2_TAG_MAP_BYTE0) && | ||
| 63 | (tag_map[1] == DCA2_TAG_MAP_BYTE1) && | ||
| 64 | (tag_map[2] == DCA2_TAG_MAP_BYTE2) && | ||
| 65 | (tag_map[3] == DCA2_TAG_MAP_BYTE3) && | ||
| 66 | (tag_map[4] == DCA2_TAG_MAP_BYTE4)); | ||
| 67 | } | ||
| 68 | |||
| 52 | /* | 69 | /* |
| 53 | * "Legacy" DCA systems do not implement the DCA register set in the | 70 | * "Legacy" DCA systems do not implement the DCA register set in the |
| 54 | * I/OAT device. Software needs direct support for their tag mappings. | 71 | * I/OAT device. Software needs direct support for their tag mappings. |
| @@ -452,6 +469,13 @@ struct dca_provider *ioat2_dca_init(struct pci_dev *pdev, void __iomem *iobase) | |||
| 452 | ioatdca->tag_map[i] = 0; | 469 | ioatdca->tag_map[i] = 0; |
| 453 | } | 470 | } |
| 454 | 471 | ||
| 472 | if (!dca2_tag_map_valid(ioatdca->tag_map)) { | ||
| 473 | dev_err(&pdev->dev, "APICID_TAG_MAP set incorrectly by BIOS, " | ||
| 474 | "disabling DCA\n"); | ||
| 475 | free_dca_provider(dca); | ||
| 476 | return NULL; | ||
| 477 | } | ||
| 478 | |||
| 455 | err = register_dca_provider(dca, &pdev->dev); | 479 | err = register_dca_provider(dca, &pdev->dev); |
| 456 | if (err) { | 480 | if (err) { |
| 457 | free_dca_provider(dca); | 481 | free_dca_provider(dca); |
diff --git a/drivers/dma/ioat_dma.c b/drivers/dma/ioat_dma.c index b3759c4b6536..5905cd36bcd2 100644 --- a/drivers/dma/ioat_dma.c +++ b/drivers/dma/ioat_dma.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Intel I/OAT DMA Linux driver | 2 | * Intel I/OAT DMA Linux driver |
| 3 | * Copyright(c) 2004 - 2007 Intel Corporation. | 3 | * Copyright(c) 2004 - 2009 Intel Corporation. |
| 4 | * | 4 | * |
| 5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
| 6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
| @@ -189,11 +189,13 @@ static int ioat_dma_enumerate_channels(struct ioatdma_device *device) | |||
| 189 | ioat_chan->xfercap = xfercap; | 189 | ioat_chan->xfercap = xfercap; |
| 190 | ioat_chan->desccount = 0; | 190 | ioat_chan->desccount = 0; |
| 191 | INIT_DELAYED_WORK(&ioat_chan->work, ioat_dma_chan_reset_part2); | 191 | INIT_DELAYED_WORK(&ioat_chan->work, ioat_dma_chan_reset_part2); |
| 192 | if (ioat_chan->device->version != IOAT_VER_1_2) { | 192 | if (ioat_chan->device->version == IOAT_VER_2_0) |
| 193 | writel(IOAT_DCACTRL_CMPL_WRITE_ENABLE | 193 | writel(IOAT_DCACTRL_CMPL_WRITE_ENABLE | |
| 194 | | IOAT_DMA_DCA_ANY_CPU, | 194 | IOAT_DMA_DCA_ANY_CPU, |
| 195 | ioat_chan->reg_base + IOAT_DCACTRL_OFFSET); | 195 | ioat_chan->reg_base + IOAT_DCACTRL_OFFSET); |
| 196 | } | 196 | else if (ioat_chan->device->version == IOAT_VER_3_0) |
| 197 | writel(IOAT_DMA_DCA_ANY_CPU, | ||
| 198 | ioat_chan->reg_base + IOAT_DCACTRL_OFFSET); | ||
| 197 | spin_lock_init(&ioat_chan->cleanup_lock); | 199 | spin_lock_init(&ioat_chan->cleanup_lock); |
| 198 | spin_lock_init(&ioat_chan->desc_lock); | 200 | spin_lock_init(&ioat_chan->desc_lock); |
| 199 | INIT_LIST_HEAD(&ioat_chan->free_desc); | 201 | INIT_LIST_HEAD(&ioat_chan->free_desc); |
| @@ -1169,9 +1171,8 @@ static void ioat_dma_memcpy_cleanup(struct ioat_dma_chan *ioat_chan) | |||
| 1169 | * up if the client is done with the descriptor | 1171 | * up if the client is done with the descriptor |
| 1170 | */ | 1172 | */ |
| 1171 | if (async_tx_test_ack(&desc->async_tx)) { | 1173 | if (async_tx_test_ack(&desc->async_tx)) { |
| 1172 | list_del(&desc->node); | 1174 | list_move_tail(&desc->node, |
| 1173 | list_add_tail(&desc->node, | 1175 | &ioat_chan->free_desc); |
| 1174 | &ioat_chan->free_desc); | ||
| 1175 | } else | 1176 | } else |
| 1176 | desc->async_tx.cookie = 0; | 1177 | desc->async_tx.cookie = 0; |
| 1177 | } else { | 1178 | } else { |
| @@ -1362,6 +1363,7 @@ static int ioat_dma_self_test(struct ioatdma_device *device) | |||
| 1362 | dma_cookie_t cookie; | 1363 | dma_cookie_t cookie; |
| 1363 | int err = 0; | 1364 | int err = 0; |
| 1364 | struct completion cmp; | 1365 | struct completion cmp; |
| 1366 | unsigned long tmo; | ||
| 1365 | 1367 | ||
| 1366 | src = kzalloc(sizeof(u8) * IOAT_TEST_SIZE, GFP_KERNEL); | 1368 | src = kzalloc(sizeof(u8) * IOAT_TEST_SIZE, GFP_KERNEL); |
| 1367 | if (!src) | 1369 | if (!src) |
| @@ -1413,9 +1415,10 @@ static int ioat_dma_self_test(struct ioatdma_device *device) | |||
| 1413 | } | 1415 | } |
| 1414 | device->common.device_issue_pending(dma_chan); | 1416 | device->common.device_issue_pending(dma_chan); |
| 1415 | 1417 | ||
| 1416 | wait_for_completion_timeout(&cmp, msecs_to_jiffies(3000)); | 1418 | tmo = wait_for_completion_timeout(&cmp, msecs_to_jiffies(3000)); |
| 1417 | 1419 | ||
| 1418 | if (device->common.device_is_tx_complete(dma_chan, cookie, NULL, NULL) | 1420 | if (tmo == 0 || |
| 1421 | device->common.device_is_tx_complete(dma_chan, cookie, NULL, NULL) | ||
| 1419 | != DMA_SUCCESS) { | 1422 | != DMA_SUCCESS) { |
| 1420 | dev_err(&device->pdev->dev, | 1423 | dev_err(&device->pdev->dev, |
| 1421 | "Self-test copy timed out, disabling\n"); | 1424 | "Self-test copy timed out, disabling\n"); |
| @@ -1657,6 +1660,13 @@ struct ioatdma_device *ioat_dma_probe(struct pci_dev *pdev, | |||
| 1657 | " %d channels, device version 0x%02x, driver version %s\n", | 1660 | " %d channels, device version 0x%02x, driver version %s\n", |
| 1658 | device->common.chancnt, device->version, IOAT_DMA_VERSION); | 1661 | device->common.chancnt, device->version, IOAT_DMA_VERSION); |
| 1659 | 1662 | ||
| 1663 | if (!device->common.chancnt) { | ||
| 1664 | dev_err(&device->pdev->dev, | ||
| 1665 | "Intel(R) I/OAT DMA Engine problem found: " | ||
| 1666 | "zero channels detected\n"); | ||
| 1667 | goto err_setup_interrupts; | ||
| 1668 | } | ||
| 1669 | |||
| 1660 | err = ioat_dma_setup_interrupts(device); | 1670 | err = ioat_dma_setup_interrupts(device); |
| 1661 | if (err) | 1671 | if (err) |
| 1662 | goto err_setup_interrupts; | 1672 | goto err_setup_interrupts; |
| @@ -1696,6 +1706,9 @@ void ioat_dma_remove(struct ioatdma_device *device) | |||
| 1696 | struct dma_chan *chan, *_chan; | 1706 | struct dma_chan *chan, *_chan; |
| 1697 | struct ioat_dma_chan *ioat_chan; | 1707 | struct ioat_dma_chan *ioat_chan; |
| 1698 | 1708 | ||
| 1709 | if (device->version != IOAT_VER_3_0) | ||
| 1710 | cancel_delayed_work(&device->work); | ||
| 1711 | |||
| 1699 | ioat_dma_remove_interrupts(device); | 1712 | ioat_dma_remove_interrupts(device); |
| 1700 | 1713 | ||
| 1701 | dma_async_device_unregister(&device->common); | 1714 | dma_async_device_unregister(&device->common); |
| @@ -1707,10 +1720,6 @@ void ioat_dma_remove(struct ioatdma_device *device) | |||
| 1707 | pci_release_regions(device->pdev); | 1720 | pci_release_regions(device->pdev); |
| 1708 | pci_disable_device(device->pdev); | 1721 | pci_disable_device(device->pdev); |
| 1709 | 1722 | ||
| 1710 | if (device->version != IOAT_VER_3_0) { | ||
| 1711 | cancel_delayed_work(&device->work); | ||
| 1712 | } | ||
| 1713 | |||
| 1714 | list_for_each_entry_safe(chan, _chan, | 1723 | list_for_each_entry_safe(chan, _chan, |
| 1715 | &device->common.channels, device_node) { | 1724 | &device->common.channels, device_node) { |
| 1716 | ioat_chan = to_ioat_chan(chan); | 1725 | ioat_chan = to_ioat_chan(chan); |
diff --git a/drivers/dma/ioatdma.h b/drivers/dma/ioatdma.h index a3306d0e1372..a52ff4bd4601 100644 --- a/drivers/dma/ioatdma.h +++ b/drivers/dma/ioatdma.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright(c) 2004 - 2007 Intel Corporation. All rights reserved. | 2 | * Copyright(c) 2004 - 2009 Intel Corporation. All rights reserved. |
| 3 | * | 3 | * |
| 4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | * under the terms of the GNU General Public License as published by the Free | 5 | * under the terms of the GNU General Public License as published by the Free |
| @@ -29,7 +29,7 @@ | |||
| 29 | #include <linux/pci_ids.h> | 29 | #include <linux/pci_ids.h> |
| 30 | #include <net/tcp.h> | 30 | #include <net/tcp.h> |
| 31 | 31 | ||
| 32 | #define IOAT_DMA_VERSION "3.30" | 32 | #define IOAT_DMA_VERSION "3.64" |
| 33 | 33 | ||
| 34 | enum ioat_interrupt { | 34 | enum ioat_interrupt { |
| 35 | none = 0, | 35 | none = 0, |
| @@ -135,12 +135,14 @@ static inline void ioat_set_tcp_copy_break(struct ioatdma_device *dev) | |||
| 135 | #ifdef CONFIG_NET_DMA | 135 | #ifdef CONFIG_NET_DMA |
| 136 | switch (dev->version) { | 136 | switch (dev->version) { |
| 137 | case IOAT_VER_1_2: | 137 | case IOAT_VER_1_2: |
| 138 | case IOAT_VER_3_0: | ||
| 139 | sysctl_tcp_dma_copybreak = 4096; | 138 | sysctl_tcp_dma_copybreak = 4096; |
| 140 | break; | 139 | break; |
| 141 | case IOAT_VER_2_0: | 140 | case IOAT_VER_2_0: |
| 142 | sysctl_tcp_dma_copybreak = 2048; | 141 | sysctl_tcp_dma_copybreak = 2048; |
| 143 | break; | 142 | break; |
| 143 | case IOAT_VER_3_0: | ||
| 144 | sysctl_tcp_dma_copybreak = 262144; | ||
| 145 | break; | ||
| 144 | } | 146 | } |
| 145 | #endif | 147 | #endif |
| 146 | } | 148 | } |
diff --git a/drivers/dma/ioatdma_hw.h b/drivers/dma/ioatdma_hw.h index f1ae2c776f74..afa57eef86c9 100644 --- a/drivers/dma/ioatdma_hw.h +++ b/drivers/dma/ioatdma_hw.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright(c) 2004 - 2007 Intel Corporation. All rights reserved. | 2 | * Copyright(c) 2004 - 2009 Intel Corporation. All rights reserved. |
| 3 | * | 3 | * |
| 4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | * under the terms of the GNU General Public License as published by the Free | 5 | * under the terms of the GNU General Public License as published by the Free |
diff --git a/drivers/dma/ioatdma_registers.h b/drivers/dma/ioatdma_registers.h index 827cb503cac6..49bc277424f8 100644 --- a/drivers/dma/ioatdma_registers.h +++ b/drivers/dma/ioatdma_registers.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright(c) 2004 - 2007 Intel Corporation. All rights reserved. | 2 | * Copyright(c) 2004 - 2009 Intel Corporation. All rights reserved. |
| 3 | * | 3 | * |
| 4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | * under the terms of the GNU General Public License as published by the Free | 5 | * under the terms of the GNU General Public License as published by the Free |
diff --git a/drivers/dma/iop-adma.c b/drivers/dma/iop-adma.c index ea5440dd10dc..16adbe61cfb2 100644 --- a/drivers/dma/iop-adma.c +++ b/drivers/dma/iop-adma.c | |||
| @@ -928,19 +928,19 @@ iop_adma_xor_zero_sum_self_test(struct iop_adma_device *device) | |||
| 928 | 928 | ||
| 929 | for (src_idx = 0; src_idx < IOP_ADMA_NUM_SRC_TEST; src_idx++) { | 929 | for (src_idx = 0; src_idx < IOP_ADMA_NUM_SRC_TEST; src_idx++) { |
| 930 | xor_srcs[src_idx] = alloc_page(GFP_KERNEL); | 930 | xor_srcs[src_idx] = alloc_page(GFP_KERNEL); |
| 931 | if (!xor_srcs[src_idx]) | 931 | if (!xor_srcs[src_idx]) { |
| 932 | while (src_idx--) { | 932 | while (src_idx--) |
| 933 | __free_page(xor_srcs[src_idx]); | 933 | __free_page(xor_srcs[src_idx]); |
| 934 | return -ENOMEM; | 934 | return -ENOMEM; |
| 935 | } | 935 | } |
| 936 | } | 936 | } |
| 937 | 937 | ||
| 938 | dest = alloc_page(GFP_KERNEL); | 938 | dest = alloc_page(GFP_KERNEL); |
| 939 | if (!dest) | 939 | if (!dest) { |
| 940 | while (src_idx--) { | 940 | while (src_idx--) |
| 941 | __free_page(xor_srcs[src_idx]); | 941 | __free_page(xor_srcs[src_idx]); |
| 942 | return -ENOMEM; | 942 | return -ENOMEM; |
| 943 | } | 943 | } |
| 944 | 944 | ||
| 945 | /* Fill in src buffers */ | 945 | /* Fill in src buffers */ |
| 946 | for (src_idx = 0; src_idx < IOP_ADMA_NUM_SRC_TEST; src_idx++) { | 946 | for (src_idx = 0; src_idx < IOP_ADMA_NUM_SRC_TEST; src_idx++) { |
| @@ -1401,7 +1401,7 @@ MODULE_ALIAS("platform:iop-adma"); | |||
| 1401 | 1401 | ||
| 1402 | static struct platform_driver iop_adma_driver = { | 1402 | static struct platform_driver iop_adma_driver = { |
| 1403 | .probe = iop_adma_probe, | 1403 | .probe = iop_adma_probe, |
| 1404 | .remove = iop_adma_remove, | 1404 | .remove = __devexit_p(iop_adma_remove), |
| 1405 | .driver = { | 1405 | .driver = { |
| 1406 | .owner = THIS_MODULE, | 1406 | .owner = THIS_MODULE, |
| 1407 | .name = "iop-adma", | 1407 | .name = "iop-adma", |
diff --git a/drivers/dma/ipu/ipu_idmac.c b/drivers/dma/ipu/ipu_idmac.c index 1f154d08e98f..da781d107895 100644 --- a/drivers/dma/ipu/ipu_idmac.c +++ b/drivers/dma/ipu/ipu_idmac.c | |||
| @@ -729,7 +729,7 @@ static int ipu_init_channel_buffer(struct idmac_channel *ichan, | |||
| 729 | 729 | ||
| 730 | ichan->status = IPU_CHANNEL_READY; | 730 | ichan->status = IPU_CHANNEL_READY; |
| 731 | 731 | ||
| 732 | spin_unlock_irqrestore(ipu->lock, flags); | 732 | spin_unlock_irqrestore(&ipu->lock, flags); |
| 733 | 733 | ||
| 734 | return 0; | 734 | return 0; |
| 735 | } | 735 | } |
| @@ -1649,7 +1649,7 @@ static int ipu_probe(struct platform_device *pdev) | |||
| 1649 | } | 1649 | } |
| 1650 | 1650 | ||
| 1651 | /* Get IPU clock */ | 1651 | /* Get IPU clock */ |
| 1652 | ipu_data.ipu_clk = clk_get(&pdev->dev, "ipu_clk"); | 1652 | ipu_data.ipu_clk = clk_get(&pdev->dev, NULL); |
| 1653 | if (IS_ERR(ipu_data.ipu_clk)) { | 1653 | if (IS_ERR(ipu_data.ipu_clk)) { |
| 1654 | ret = PTR_ERR(ipu_data.ipu_clk); | 1654 | ret = PTR_ERR(ipu_data.ipu_clk); |
| 1655 | goto err_clk_get; | 1655 | goto err_clk_get; |
diff --git a/drivers/dma/mv_xor.c b/drivers/dma/mv_xor.c index d35cbd1ff0b3..cb7f26fb9f18 100644 --- a/drivers/dma/mv_xor.c +++ b/drivers/dma/mv_xor.c | |||
| @@ -1019,19 +1019,19 @@ mv_xor_xor_self_test(struct mv_xor_device *device) | |||
| 1019 | 1019 | ||
| 1020 | for (src_idx = 0; src_idx < MV_XOR_NUM_SRC_TEST; src_idx++) { | 1020 | for (src_idx = 0; src_idx < MV_XOR_NUM_SRC_TEST; src_idx++) { |
| 1021 | xor_srcs[src_idx] = alloc_page(GFP_KERNEL); | 1021 | xor_srcs[src_idx] = alloc_page(GFP_KERNEL); |
| 1022 | if (!xor_srcs[src_idx]) | 1022 | if (!xor_srcs[src_idx]) { |
| 1023 | while (src_idx--) { | 1023 | while (src_idx--) |
| 1024 | __free_page(xor_srcs[src_idx]); | 1024 | __free_page(xor_srcs[src_idx]); |
| 1025 | return -ENOMEM; | 1025 | return -ENOMEM; |
| 1026 | } | 1026 | } |
| 1027 | } | 1027 | } |
| 1028 | 1028 | ||
| 1029 | dest = alloc_page(GFP_KERNEL); | 1029 | dest = alloc_page(GFP_KERNEL); |
| 1030 | if (!dest) | 1030 | if (!dest) { |
| 1031 | while (src_idx--) { | 1031 | while (src_idx--) |
| 1032 | __free_page(xor_srcs[src_idx]); | 1032 | __free_page(xor_srcs[src_idx]); |
| 1033 | return -ENOMEM; | 1033 | return -ENOMEM; |
| 1034 | } | 1034 | } |
| 1035 | 1035 | ||
| 1036 | /* Fill in src buffers */ | 1036 | /* Fill in src buffers */ |
| 1037 | for (src_idx = 0; src_idx < MV_XOR_NUM_SRC_TEST; src_idx++) { | 1037 | for (src_idx = 0; src_idx < MV_XOR_NUM_SRC_TEST; src_idx++) { |
| @@ -1287,7 +1287,7 @@ mv_xor_conf_mbus_windows(struct mv_xor_shared_private *msp, | |||
| 1287 | 1287 | ||
| 1288 | static struct platform_driver mv_xor_driver = { | 1288 | static struct platform_driver mv_xor_driver = { |
| 1289 | .probe = mv_xor_probe, | 1289 | .probe = mv_xor_probe, |
| 1290 | .remove = mv_xor_remove, | 1290 | .remove = __devexit_p(mv_xor_remove), |
| 1291 | .driver = { | 1291 | .driver = { |
| 1292 | .owner = THIS_MODULE, | 1292 | .owner = THIS_MODULE, |
| 1293 | .name = MV_XOR_NAME, | 1293 | .name = MV_XOR_NAME, |
diff --git a/drivers/firmware/memmap.c b/drivers/firmware/memmap.c index 261b9aa3f248..05aa2d406ac6 100644 --- a/drivers/firmware/memmap.c +++ b/drivers/firmware/memmap.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/drivers/firmware/memmap.c | 2 | * linux/drivers/firmware/memmap.c |
| 3 | * Copyright (C) 2008 SUSE LINUX Products GmbH | 3 | * Copyright (C) 2008 SUSE LINUX Products GmbH |
| 4 | * by Bernhard Walle <bwalle@suse.de> | 4 | * by Bernhard Walle <bernhard.walle@gmx.de> |
| 5 | * | 5 | * |
| 6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
| 7 | * it under the terms of the GNU General Public License v2.0 as published by | 7 | * it under the terms of the GNU General Public License v2.0 as published by |
diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig index 5130b72d593c..3a22eb9be378 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig | |||
| @@ -70,7 +70,7 @@ config DRM_I915 | |||
| 70 | select FB_CFB_FILLRECT | 70 | select FB_CFB_FILLRECT |
| 71 | select FB_CFB_COPYAREA | 71 | select FB_CFB_COPYAREA |
| 72 | select FB_CFB_IMAGEBLIT | 72 | select FB_CFB_IMAGEBLIT |
| 73 | depends on FB | 73 | select FB |
| 74 | tristate "i915 driver" | 74 | tristate "i915 driver" |
| 75 | help | 75 | help |
| 76 | Choose this option if you have a system that has Intel 830M, 845G, | 76 | Choose this option if you have a system that has Intel 830M, 845G, |
| @@ -80,18 +80,17 @@ config DRM_I915 | |||
| 80 | XFree86 4.4 and above. If unsure, build this and i830 as modules and | 80 | XFree86 4.4 and above. If unsure, build this and i830 as modules and |
| 81 | the X server will load the correct one. | 81 | the X server will load the correct one. |
| 82 | 82 | ||
| 83 | endchoice | ||
| 84 | |||
| 85 | config DRM_I915_KMS | 83 | config DRM_I915_KMS |
| 86 | bool "Enable modesetting on intel by default" | 84 | bool "Enable modesetting on intel by default" |
| 87 | depends on DRM_I915 | 85 | depends on DRM_I915 |
| 88 | help | 86 | help |
| 89 | Choose this option if you want kernel modesetting enabled by default, | 87 | Choose this option if you want kernel modesetting enabled by default, |
| 90 | and you have a new enough userspace to support this. Running old | 88 | and you have a new enough userspace to support this. Running old |
| 91 | userspaces with this enabled will cause pain. Note that this causes | 89 | userspaces with this enabled will cause pain. Note that this causes |
| 92 | the driver to bind to PCI devices, which precludes loading things | 90 | the driver to bind to PCI devices, which precludes loading things |
| 93 | like intelfb. | 91 | like intelfb. |
| 94 | 92 | ||
| 93 | endchoice | ||
| 95 | 94 | ||
| 96 | config DRM_MGA | 95 | config DRM_MGA |
| 97 | tristate "Matrox g200/g400" | 96 | tristate "Matrox g200/g400" |
diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c index 72c667f9bee1..12715d3c078d 100644 --- a/drivers/gpu/drm/drm_bufs.c +++ b/drivers/gpu/drm/drm_bufs.c | |||
| @@ -420,7 +420,7 @@ int drm_rmmap_locked(struct drm_device *dev, drm_local_map_t *map) | |||
| 420 | dev->sigdata.lock = NULL; | 420 | dev->sigdata.lock = NULL; |
| 421 | master->lock.hw_lock = NULL; /* SHM removed */ | 421 | master->lock.hw_lock = NULL; /* SHM removed */ |
| 422 | master->lock.file_priv = NULL; | 422 | master->lock.file_priv = NULL; |
| 423 | wake_up_interruptible(&master->lock.lock_queue); | 423 | wake_up_interruptible_all(&master->lock.lock_queue); |
| 424 | } | 424 | } |
| 425 | break; | 425 | break; |
| 426 | case _DRM_AGP: | 426 | case _DRM_AGP: |
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index bfce0992fefb..94a768871734 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c | |||
| @@ -1741,9 +1741,8 @@ out: | |||
| 1741 | * RETURNS: | 1741 | * RETURNS: |
| 1742 | * Zero on success, errno on failure. | 1742 | * Zero on success, errno on failure. |
| 1743 | */ | 1743 | */ |
| 1744 | void drm_fb_release(struct file *filp) | 1744 | void drm_fb_release(struct drm_file *priv) |
| 1745 | { | 1745 | { |
| 1746 | struct drm_file *priv = filp->private_data; | ||
| 1747 | struct drm_device *dev = priv->minor->dev; | 1746 | struct drm_device *dev = priv->minor->dev; |
| 1748 | struct drm_framebuffer *fb, *tfb; | 1747 | struct drm_framebuffer *fb, *tfb; |
| 1749 | 1748 | ||
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c index 964c5eb1fada..1c3a8c557140 100644 --- a/drivers/gpu/drm/drm_crtc_helper.c +++ b/drivers/gpu/drm/drm_crtc_helper.c | |||
| @@ -452,6 +452,59 @@ static void drm_setup_crtcs(struct drm_device *dev) | |||
| 452 | kfree(modes); | 452 | kfree(modes); |
| 453 | kfree(enabled); | 453 | kfree(enabled); |
| 454 | } | 454 | } |
| 455 | |||
| 456 | /** | ||
| 457 | * drm_encoder_crtc_ok - can a given crtc drive a given encoder? | ||
| 458 | * @encoder: encoder to test | ||
| 459 | * @crtc: crtc to test | ||
| 460 | * | ||
| 461 | * Return false if @encoder can't be driven by @crtc, true otherwise. | ||
| 462 | */ | ||
| 463 | static bool drm_encoder_crtc_ok(struct drm_encoder *encoder, | ||
| 464 | struct drm_crtc *crtc) | ||
| 465 | { | ||
| 466 | struct drm_device *dev; | ||
| 467 | struct drm_crtc *tmp; | ||
| 468 | int crtc_mask = 1; | ||
| 469 | |||
| 470 | WARN(!crtc, "checking null crtc?"); | ||
| 471 | |||
| 472 | dev = crtc->dev; | ||
| 473 | |||
| 474 | list_for_each_entry(tmp, &dev->mode_config.crtc_list, head) { | ||
| 475 | if (tmp == crtc) | ||
| 476 | break; | ||
| 477 | crtc_mask <<= 1; | ||
| 478 | } | ||
| 479 | |||
| 480 | if (encoder->possible_crtcs & crtc_mask) | ||
| 481 | return true; | ||
| 482 | return false; | ||
| 483 | } | ||
| 484 | |||
| 485 | /* | ||
| 486 | * Check the CRTC we're going to map each output to vs. its current | ||
| 487 | * CRTC. If they don't match, we have to disable the output and the CRTC | ||
| 488 | * since the driver will have to re-route things. | ||
| 489 | */ | ||
| 490 | static void | ||
| 491 | drm_crtc_prepare_encoders(struct drm_device *dev) | ||
| 492 | { | ||
| 493 | struct drm_encoder_helper_funcs *encoder_funcs; | ||
| 494 | struct drm_encoder *encoder; | ||
| 495 | |||
| 496 | list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { | ||
| 497 | encoder_funcs = encoder->helper_private; | ||
| 498 | /* Disable unused encoders */ | ||
| 499 | if (encoder->crtc == NULL) | ||
| 500 | (*encoder_funcs->dpms)(encoder, DRM_MODE_DPMS_OFF); | ||
| 501 | /* Disable encoders whose CRTC is about to change */ | ||
| 502 | if (encoder_funcs->get_crtc && | ||
| 503 | encoder->crtc != (*encoder_funcs->get_crtc)(encoder)) | ||
| 504 | (*encoder_funcs->dpms)(encoder, DRM_MODE_DPMS_OFF); | ||
| 505 | } | ||
| 506 | } | ||
| 507 | |||
| 455 | /** | 508 | /** |
| 456 | * drm_crtc_set_mode - set a mode | 509 | * drm_crtc_set_mode - set a mode |
| 457 | * @crtc: CRTC to program | 510 | * @crtc: CRTC to program |
| @@ -512,8 +565,8 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, | |||
| 512 | if (drm_mode_equal(&saved_mode, &crtc->mode)) { | 565 | if (drm_mode_equal(&saved_mode, &crtc->mode)) { |
| 513 | if (saved_x != crtc->x || saved_y != crtc->y || | 566 | if (saved_x != crtc->x || saved_y != crtc->y || |
| 514 | depth_changed || bpp_changed) { | 567 | depth_changed || bpp_changed) { |
| 515 | crtc_funcs->mode_set_base(crtc, crtc->x, crtc->y, | 568 | ret = !crtc_funcs->mode_set_base(crtc, crtc->x, crtc->y, |
| 516 | old_fb); | 569 | old_fb); |
| 517 | goto done; | 570 | goto done; |
| 518 | } | 571 | } |
| 519 | } | 572 | } |
| @@ -547,12 +600,16 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, | |||
| 547 | encoder_funcs->prepare(encoder); | 600 | encoder_funcs->prepare(encoder); |
| 548 | } | 601 | } |
| 549 | 602 | ||
| 603 | drm_crtc_prepare_encoders(dev); | ||
| 604 | |||
| 550 | crtc_funcs->prepare(crtc); | 605 | crtc_funcs->prepare(crtc); |
| 551 | 606 | ||
| 552 | /* Set up the DPLL and any encoders state that needs to adjust or depend | 607 | /* Set up the DPLL and any encoders state that needs to adjust or depend |
| 553 | * on the DPLL. | 608 | * on the DPLL. |
| 554 | */ | 609 | */ |
| 555 | crtc_funcs->mode_set(crtc, mode, adjusted_mode, x, y, old_fb); | 610 | ret = !crtc_funcs->mode_set(crtc, mode, adjusted_mode, x, y, old_fb); |
| 611 | if (!ret) | ||
| 612 | goto done; | ||
| 556 | 613 | ||
| 557 | list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { | 614 | list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { |
| 558 | 615 | ||
| @@ -615,7 +672,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
| 615 | struct drm_device *dev; | 672 | struct drm_device *dev; |
| 616 | struct drm_crtc **save_crtcs, *new_crtc; | 673 | struct drm_crtc **save_crtcs, *new_crtc; |
| 617 | struct drm_encoder **save_encoders, *new_encoder; | 674 | struct drm_encoder **save_encoders, *new_encoder; |
| 618 | struct drm_framebuffer *old_fb; | 675 | struct drm_framebuffer *old_fb = NULL; |
| 619 | bool save_enabled; | 676 | bool save_enabled; |
| 620 | bool mode_changed = false; | 677 | bool mode_changed = false; |
| 621 | bool fb_changed = false; | 678 | bool fb_changed = false; |
| @@ -666,9 +723,10 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
| 666 | * and then just flip_or_move it */ | 723 | * and then just flip_or_move it */ |
| 667 | if (set->crtc->fb != set->fb) { | 724 | if (set->crtc->fb != set->fb) { |
| 668 | /* If we have no fb then treat it as a full mode set */ | 725 | /* If we have no fb then treat it as a full mode set */ |
| 669 | if (set->crtc->fb == NULL) | 726 | if (set->crtc->fb == NULL) { |
| 727 | DRM_DEBUG("crtc has no fb, full mode set\n"); | ||
| 670 | mode_changed = true; | 728 | mode_changed = true; |
| 671 | else if ((set->fb->bits_per_pixel != | 729 | } else if ((set->fb->bits_per_pixel != |
| 672 | set->crtc->fb->bits_per_pixel) || | 730 | set->crtc->fb->bits_per_pixel) || |
| 673 | set->fb->depth != set->crtc->fb->depth) | 731 | set->fb->depth != set->crtc->fb->depth) |
| 674 | fb_changed = true; | 732 | fb_changed = true; |
| @@ -680,7 +738,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
| 680 | fb_changed = true; | 738 | fb_changed = true; |
| 681 | 739 | ||
| 682 | if (set->mode && !drm_mode_equal(set->mode, &set->crtc->mode)) { | 740 | if (set->mode && !drm_mode_equal(set->mode, &set->crtc->mode)) { |
| 683 | DRM_DEBUG("modes are different\n"); | 741 | DRM_DEBUG("modes are different, full mode set\n"); |
| 684 | drm_mode_debug_printmodeline(&set->crtc->mode); | 742 | drm_mode_debug_printmodeline(&set->crtc->mode); |
| 685 | drm_mode_debug_printmodeline(set->mode); | 743 | drm_mode_debug_printmodeline(set->mode); |
| 686 | mode_changed = true; | 744 | mode_changed = true; |
| @@ -706,6 +764,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
| 706 | } | 764 | } |
| 707 | 765 | ||
| 708 | if (new_encoder != connector->encoder) { | 766 | if (new_encoder != connector->encoder) { |
| 767 | DRM_DEBUG("encoder changed, full mode switch\n"); | ||
| 709 | mode_changed = true; | 768 | mode_changed = true; |
| 710 | connector->encoder = new_encoder; | 769 | connector->encoder = new_encoder; |
| 711 | } | 770 | } |
| @@ -732,10 +791,20 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
| 732 | if (set->connectors[ro] == connector) | 791 | if (set->connectors[ro] == connector) |
| 733 | new_crtc = set->crtc; | 792 | new_crtc = set->crtc; |
| 734 | } | 793 | } |
| 794 | |||
| 795 | /* Make sure the new CRTC will work with the encoder */ | ||
| 796 | if (new_crtc && | ||
| 797 | !drm_encoder_crtc_ok(connector->encoder, new_crtc)) { | ||
| 798 | ret = -EINVAL; | ||
| 799 | goto fail_set_mode; | ||
| 800 | } | ||
| 735 | if (new_crtc != connector->encoder->crtc) { | 801 | if (new_crtc != connector->encoder->crtc) { |
| 802 | DRM_DEBUG("crtc changed, full mode switch\n"); | ||
| 736 | mode_changed = true; | 803 | mode_changed = true; |
| 737 | connector->encoder->crtc = new_crtc; | 804 | connector->encoder->crtc = new_crtc; |
| 738 | } | 805 | } |
| 806 | DRM_DEBUG("setting connector %d crtc to %p\n", | ||
| 807 | connector->base.id, new_crtc); | ||
| 739 | } | 808 | } |
| 740 | 809 | ||
| 741 | /* mode_set_base is not a required function */ | 810 | /* mode_set_base is not a required function */ |
| @@ -752,6 +821,8 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
| 752 | if (!drm_crtc_helper_set_mode(set->crtc, set->mode, | 821 | if (!drm_crtc_helper_set_mode(set->crtc, set->mode, |
| 753 | set->x, set->y, | 822 | set->x, set->y, |
| 754 | old_fb)) { | 823 | old_fb)) { |
| 824 | DRM_ERROR("failed to set mode on crtc %p\n", | ||
| 825 | set->crtc); | ||
| 755 | ret = -EINVAL; | 826 | ret = -EINVAL; |
| 756 | goto fail_set_mode; | 827 | goto fail_set_mode; |
| 757 | } | 828 | } |
| @@ -765,7 +836,10 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
| 765 | old_fb = set->crtc->fb; | 836 | old_fb = set->crtc->fb; |
| 766 | if (set->crtc->fb != set->fb) | 837 | if (set->crtc->fb != set->fb) |
| 767 | set->crtc->fb = set->fb; | 838 | set->crtc->fb = set->fb; |
| 768 | crtc_funcs->mode_set_base(set->crtc, set->x, set->y, old_fb); | 839 | ret = crtc_funcs->mode_set_base(set->crtc, |
| 840 | set->x, set->y, old_fb); | ||
| 841 | if (ret != 0) | ||
| 842 | goto fail_set_mode; | ||
| 769 | } | 843 | } |
| 770 | 844 | ||
| 771 | kfree(save_encoders); | 845 | kfree(save_encoders); |
| @@ -774,9 +848,14 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
| 774 | 848 | ||
| 775 | fail_set_mode: | 849 | fail_set_mode: |
| 776 | set->crtc->enabled = save_enabled; | 850 | set->crtc->enabled = save_enabled; |
| 851 | set->crtc->fb = old_fb; | ||
| 777 | count = 0; | 852 | count = 0; |
| 778 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) | 853 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { |
| 854 | if (!connector->encoder) | ||
| 855 | continue; | ||
| 856 | |||
| 779 | connector->encoder->crtc = save_crtcs[count++]; | 857 | connector->encoder->crtc = save_crtcs[count++]; |
| 858 | } | ||
| 780 | fail_no_encoder: | 859 | fail_no_encoder: |
| 781 | kfree(save_crtcs); | 860 | kfree(save_crtcs); |
| 782 | count = 0; | 861 | count = 0; |
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 5a4d3244758a..a839a28d8ee6 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c | |||
| @@ -125,7 +125,7 @@ static bool edid_is_valid(struct edid *edid) | |||
| 125 | DRM_ERROR("EDID has major version %d, instead of 1\n", edid->version); | 125 | DRM_ERROR("EDID has major version %d, instead of 1\n", edid->version); |
| 126 | goto bad; | 126 | goto bad; |
| 127 | } | 127 | } |
| 128 | if (edid->revision <= 0 || edid->revision > 3) { | 128 | if (edid->revision > 3) { |
| 129 | DRM_ERROR("EDID has minor version %d, which is not between 0-3\n", edid->revision); | 129 | DRM_ERROR("EDID has minor version %d, which is not between 0-3\n", edid->revision); |
| 130 | goto bad; | 130 | goto bad; |
| 131 | } | 131 | } |
| @@ -320,10 +320,10 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev, | |||
| 320 | mode->htotal = mode->hdisplay + ((pt->hblank_hi << 8) | pt->hblank_lo); | 320 | mode->htotal = mode->hdisplay + ((pt->hblank_hi << 8) | pt->hblank_lo); |
| 321 | 321 | ||
| 322 | mode->vdisplay = (pt->vactive_hi << 8) | pt->vactive_lo; | 322 | mode->vdisplay = (pt->vactive_hi << 8) | pt->vactive_lo; |
| 323 | mode->vsync_start = mode->vdisplay + ((pt->vsync_offset_hi << 8) | | 323 | mode->vsync_start = mode->vdisplay + ((pt->vsync_offset_hi << 4) | |
| 324 | pt->vsync_offset_lo); | 324 | pt->vsync_offset_lo); |
| 325 | mode->vsync_end = mode->vsync_start + | 325 | mode->vsync_end = mode->vsync_start + |
| 326 | ((pt->vsync_pulse_width_hi << 8) | | 326 | ((pt->vsync_pulse_width_hi << 4) | |
| 327 | pt->vsync_pulse_width_lo); | 327 | pt->vsync_pulse_width_lo); |
| 328 | mode->vtotal = mode->vdisplay + ((pt->vblank_hi << 8) | pt->vblank_lo); | 328 | mode->vtotal = mode->vdisplay + ((pt->vblank_hi << 8) | pt->vblank_lo); |
| 329 | 329 | ||
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c index b06a53715853..f52663ebe016 100644 --- a/drivers/gpu/drm/drm_fops.c +++ b/drivers/gpu/drm/drm_fops.c | |||
| @@ -457,6 +457,9 @@ int drm_release(struct inode *inode, struct file *filp) | |||
| 457 | if (dev->driver->driver_features & DRIVER_GEM) | 457 | if (dev->driver->driver_features & DRIVER_GEM) |
| 458 | drm_gem_release(dev, file_priv); | 458 | drm_gem_release(dev, file_priv); |
| 459 | 459 | ||
| 460 | if (dev->driver->driver_features & DRIVER_MODESET) | ||
| 461 | drm_fb_release(file_priv); | ||
| 462 | |||
| 460 | mutex_lock(&dev->ctxlist_mutex); | 463 | mutex_lock(&dev->ctxlist_mutex); |
| 461 | if (!list_empty(&dev->ctxlist)) { | 464 | if (!list_empty(&dev->ctxlist)) { |
| 462 | struct drm_ctx_list *pos, *n; | 465 | struct drm_ctx_list *pos, *n; |
| @@ -481,6 +484,7 @@ int drm_release(struct inode *inode, struct file *filp) | |||
| 481 | mutex_lock(&dev->struct_mutex); | 484 | mutex_lock(&dev->struct_mutex); |
| 482 | 485 | ||
| 483 | if (file_priv->is_master) { | 486 | if (file_priv->is_master) { |
| 487 | struct drm_master *master = file_priv->master; | ||
| 484 | struct drm_file *temp; | 488 | struct drm_file *temp; |
| 485 | list_for_each_entry(temp, &dev->filelist, lhead) { | 489 | list_for_each_entry(temp, &dev->filelist, lhead) { |
| 486 | if ((temp->master == file_priv->master) && | 490 | if ((temp->master == file_priv->master) && |
| @@ -488,6 +492,19 @@ int drm_release(struct inode *inode, struct file *filp) | |||
| 488 | temp->authenticated = 0; | 492 | temp->authenticated = 0; |
| 489 | } | 493 | } |
| 490 | 494 | ||
| 495 | /** | ||
| 496 | * Since the master is disappearing, so is the | ||
| 497 | * possibility to lock. | ||
| 498 | */ | ||
| 499 | |||
| 500 | if (master->lock.hw_lock) { | ||
| 501 | if (dev->sigdata.lock == master->lock.hw_lock) | ||
| 502 | dev->sigdata.lock = NULL; | ||
| 503 | master->lock.hw_lock = NULL; | ||
| 504 | master->lock.file_priv = NULL; | ||
| 505 | wake_up_interruptible_all(&master->lock.lock_queue); | ||
| 506 | } | ||
| 507 | |||
| 491 | if (file_priv->minor->master == file_priv->master) { | 508 | if (file_priv->minor->master == file_priv->master) { |
| 492 | /* drop the reference held my the minor */ | 509 | /* drop the reference held my the minor */ |
| 493 | drm_master_put(&file_priv->minor->master); | 510 | drm_master_put(&file_priv->minor->master); |
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index 6915fb82d0b0..88d3368ffddd 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c | |||
| @@ -104,8 +104,8 @@ drm_gem_init(struct drm_device *dev) | |||
| 104 | 104 | ||
| 105 | if (drm_mm_init(&mm->offset_manager, DRM_FILE_PAGE_OFFSET_START, | 105 | if (drm_mm_init(&mm->offset_manager, DRM_FILE_PAGE_OFFSET_START, |
| 106 | DRM_FILE_PAGE_OFFSET_SIZE)) { | 106 | DRM_FILE_PAGE_OFFSET_SIZE)) { |
| 107 | drm_free(mm, sizeof(struct drm_gem_mm), DRM_MEM_MM); | ||
| 108 | drm_ht_remove(&mm->offset_hash); | 107 | drm_ht_remove(&mm->offset_hash); |
| 108 | drm_free(mm, sizeof(struct drm_gem_mm), DRM_MEM_MM); | ||
| 109 | return -ENOMEM; | 109 | return -ENOMEM; |
| 110 | } | 110 | } |
| 111 | 111 | ||
| @@ -295,35 +295,37 @@ drm_gem_flink_ioctl(struct drm_device *dev, void *data, | |||
| 295 | return -EBADF; | 295 | return -EBADF; |
| 296 | 296 | ||
| 297 | again: | 297 | again: |
| 298 | if (idr_pre_get(&dev->object_name_idr, GFP_KERNEL) == 0) | 298 | if (idr_pre_get(&dev->object_name_idr, GFP_KERNEL) == 0) { |
| 299 | return -ENOMEM; | 299 | ret = -ENOMEM; |
| 300 | goto err; | ||
| 301 | } | ||
| 300 | 302 | ||
| 301 | spin_lock(&dev->object_name_lock); | 303 | spin_lock(&dev->object_name_lock); |
| 302 | if (obj->name) { | 304 | if (!obj->name) { |
| 303 | args->name = obj->name; | 305 | ret = idr_get_new_above(&dev->object_name_idr, obj, 1, |
| 306 | &obj->name); | ||
| 307 | args->name = (uint64_t) obj->name; | ||
| 304 | spin_unlock(&dev->object_name_lock); | 308 | spin_unlock(&dev->object_name_lock); |
| 305 | return 0; | ||
| 306 | } | ||
| 307 | ret = idr_get_new_above(&dev->object_name_idr, obj, 1, | ||
| 308 | &obj->name); | ||
| 309 | spin_unlock(&dev->object_name_lock); | ||
| 310 | if (ret == -EAGAIN) | ||
| 311 | goto again; | ||
| 312 | 309 | ||
| 313 | if (ret != 0) { | 310 | if (ret == -EAGAIN) |
| 314 | mutex_lock(&dev->struct_mutex); | 311 | goto again; |
| 315 | drm_gem_object_unreference(obj); | ||
| 316 | mutex_unlock(&dev->struct_mutex); | ||
| 317 | return ret; | ||
| 318 | } | ||
| 319 | 312 | ||
| 320 | /* | 313 | if (ret != 0) |
| 321 | * Leave the reference from the lookup around as the | 314 | goto err; |
| 322 | * name table now holds one | ||
| 323 | */ | ||
| 324 | args->name = (uint64_t) obj->name; | ||
| 325 | 315 | ||
| 326 | return 0; | 316 | /* Allocate a reference for the name table. */ |
| 317 | drm_gem_object_reference(obj); | ||
| 318 | } else { | ||
| 319 | args->name = (uint64_t) obj->name; | ||
| 320 | spin_unlock(&dev->object_name_lock); | ||
| 321 | ret = 0; | ||
| 322 | } | ||
| 323 | |||
| 324 | err: | ||
| 325 | mutex_lock(&dev->struct_mutex); | ||
| 326 | drm_gem_object_unreference(obj); | ||
| 327 | mutex_unlock(&dev->struct_mutex); | ||
| 328 | return ret; | ||
| 327 | } | 329 | } |
| 328 | 330 | ||
| 329 | /** | 331 | /** |
| @@ -448,6 +450,7 @@ drm_gem_object_handle_free(struct kref *kref) | |||
| 448 | spin_lock(&dev->object_name_lock); | 450 | spin_lock(&dev->object_name_lock); |
| 449 | if (obj->name) { | 451 | if (obj->name) { |
| 450 | idr_remove(&dev->object_name_idr, obj->name); | 452 | idr_remove(&dev->object_name_idr, obj->name); |
| 453 | obj->name = 0; | ||
| 451 | spin_unlock(&dev->object_name_lock); | 454 | spin_unlock(&dev->object_name_lock); |
| 452 | /* | 455 | /* |
| 453 | * The object name held a reference to this object, drop | 456 | * The object name held a reference to this object, drop |
| @@ -460,6 +463,26 @@ drm_gem_object_handle_free(struct kref *kref) | |||
| 460 | } | 463 | } |
| 461 | EXPORT_SYMBOL(drm_gem_object_handle_free); | 464 | EXPORT_SYMBOL(drm_gem_object_handle_free); |
| 462 | 465 | ||
| 466 | void drm_gem_vm_open(struct vm_area_struct *vma) | ||
| 467 | { | ||
| 468 | struct drm_gem_object *obj = vma->vm_private_data; | ||
| 469 | |||
| 470 | drm_gem_object_reference(obj); | ||
| 471 | } | ||
| 472 | EXPORT_SYMBOL(drm_gem_vm_open); | ||
| 473 | |||
| 474 | void drm_gem_vm_close(struct vm_area_struct *vma) | ||
| 475 | { | ||
| 476 | struct drm_gem_object *obj = vma->vm_private_data; | ||
| 477 | struct drm_device *dev = obj->dev; | ||
| 478 | |||
| 479 | mutex_lock(&dev->struct_mutex); | ||
| 480 | drm_gem_object_unreference(obj); | ||
| 481 | mutex_unlock(&dev->struct_mutex); | ||
| 482 | } | ||
| 483 | EXPORT_SYMBOL(drm_gem_vm_close); | ||
| 484 | |||
| 485 | |||
| 463 | /** | 486 | /** |
| 464 | * drm_gem_mmap - memory map routine for GEM objects | 487 | * drm_gem_mmap - memory map routine for GEM objects |
| 465 | * @filp: DRM file pointer | 488 | * @filp: DRM file pointer |
| @@ -521,6 +544,14 @@ int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma) | |||
| 521 | #endif | 544 | #endif |
| 522 | vma->vm_page_prot = __pgprot(prot); | 545 | vma->vm_page_prot = __pgprot(prot); |
| 523 | 546 | ||
| 547 | /* Take a ref for this mapping of the object, so that the fault | ||
| 548 | * handler can dereference the mmap offset's pointer to the object. | ||
| 549 | * This reference is cleaned up by the corresponding vm_close | ||
| 550 | * (which should happen whether the vma was created by this call, or | ||
| 551 | * by a vm_open due to mremap or partial unmap or whatever). | ||
| 552 | */ | ||
| 553 | drm_gem_object_reference(obj); | ||
| 554 | |||
| 524 | vma->vm_file = filp; /* Needed for drm_vm_open() */ | 555 | vma->vm_file = filp; /* Needed for drm_vm_open() */ |
| 525 | drm_vm_open_locked(vma); | 556 | drm_vm_open_locked(vma); |
| 526 | 557 | ||
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index 69aa0ab28403..93e677a481f5 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c | |||
| @@ -276,6 +276,7 @@ int drm_irq_uninstall(struct drm_device * dev) | |||
| 276 | for (i = 0; i < dev->num_crtcs; i++) { | 276 | for (i = 0; i < dev->num_crtcs; i++) { |
| 277 | DRM_WAKEUP(&dev->vbl_queue[i]); | 277 | DRM_WAKEUP(&dev->vbl_queue[i]); |
| 278 | dev->vblank_enabled[i] = 0; | 278 | dev->vblank_enabled[i] = 0; |
| 279 | dev->last_vblank[i] = dev->driver->get_vblank_counter(dev, i); | ||
| 279 | } | 280 | } |
| 280 | spin_unlock_irqrestore(&dev->vbl_lock, irqflags); | 281 | spin_unlock_irqrestore(&dev->vbl_lock, irqflags); |
| 281 | 282 | ||
| @@ -434,6 +435,8 @@ EXPORT_SYMBOL(drm_vblank_get); | |||
| 434 | */ | 435 | */ |
| 435 | void drm_vblank_put(struct drm_device *dev, int crtc) | 436 | void drm_vblank_put(struct drm_device *dev, int crtc) |
| 436 | { | 437 | { |
| 438 | BUG_ON (atomic_read (&dev->vblank_refcount[crtc]) == 0); | ||
| 439 | |||
| 437 | /* Last user schedules interrupt disable */ | 440 | /* Last user schedules interrupt disable */ |
| 438 | if (atomic_dec_and_test(&dev->vblank_refcount[crtc])) | 441 | if (atomic_dec_and_test(&dev->vblank_refcount[crtc])) |
| 439 | mod_timer(&dev->vblank_disable_timer, jiffies + 5*DRM_HZ); | 442 | mod_timer(&dev->vblank_disable_timer, jiffies + 5*DRM_HZ); |
| @@ -459,8 +462,9 @@ void drm_vblank_pre_modeset(struct drm_device *dev, int crtc) | |||
| 459 | * so that interrupts remain enabled in the interim. | 462 | * so that interrupts remain enabled in the interim. |
| 460 | */ | 463 | */ |
| 461 | if (!dev->vblank_inmodeset[crtc]) { | 464 | if (!dev->vblank_inmodeset[crtc]) { |
| 462 | dev->vblank_inmodeset[crtc] = 1; | 465 | dev->vblank_inmodeset[crtc] = 0x1; |
| 463 | drm_vblank_get(dev, crtc); | 466 | if (drm_vblank_get(dev, crtc) == 0) |
| 467 | dev->vblank_inmodeset[crtc] |= 0x2; | ||
| 464 | } | 468 | } |
| 465 | } | 469 | } |
| 466 | EXPORT_SYMBOL(drm_vblank_pre_modeset); | 470 | EXPORT_SYMBOL(drm_vblank_pre_modeset); |
| @@ -472,9 +476,12 @@ void drm_vblank_post_modeset(struct drm_device *dev, int crtc) | |||
| 472 | if (dev->vblank_inmodeset[crtc]) { | 476 | if (dev->vblank_inmodeset[crtc]) { |
| 473 | spin_lock_irqsave(&dev->vbl_lock, irqflags); | 477 | spin_lock_irqsave(&dev->vbl_lock, irqflags); |
| 474 | dev->vblank_disable_allowed = 1; | 478 | dev->vblank_disable_allowed = 1; |
| 475 | dev->vblank_inmodeset[crtc] = 0; | ||
| 476 | spin_unlock_irqrestore(&dev->vbl_lock, irqflags); | 479 | spin_unlock_irqrestore(&dev->vbl_lock, irqflags); |
| 477 | drm_vblank_put(dev, crtc); | 480 | |
| 481 | if (dev->vblank_inmodeset[crtc] & 0x2) | ||
| 482 | drm_vblank_put(dev, crtc); | ||
| 483 | |||
| 484 | dev->vblank_inmodeset[crtc] = 0; | ||
| 478 | } | 485 | } |
| 479 | } | 486 | } |
| 480 | EXPORT_SYMBOL(drm_vblank_post_modeset); | 487 | EXPORT_SYMBOL(drm_vblank_post_modeset); |
diff --git a/drivers/gpu/drm/drm_lock.c b/drivers/gpu/drm/drm_lock.c index 46e7b28f0707..e2f70a516c34 100644 --- a/drivers/gpu/drm/drm_lock.c +++ b/drivers/gpu/drm/drm_lock.c | |||
| @@ -80,6 +80,7 @@ int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv) | |||
| 80 | __set_current_state(TASK_INTERRUPTIBLE); | 80 | __set_current_state(TASK_INTERRUPTIBLE); |
| 81 | if (!master->lock.hw_lock) { | 81 | if (!master->lock.hw_lock) { |
| 82 | /* Device has been unregistered */ | 82 | /* Device has been unregistered */ |
| 83 | send_sig(SIGTERM, current, 0); | ||
| 83 | ret = -EINTR; | 84 | ret = -EINTR; |
| 84 | break; | 85 | break; |
| 85 | } | 86 | } |
| @@ -93,7 +94,7 @@ int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv) | |||
| 93 | /* Contention */ | 94 | /* Contention */ |
| 94 | schedule(); | 95 | schedule(); |
| 95 | if (signal_pending(current)) { | 96 | if (signal_pending(current)) { |
| 96 | ret = -ERESTARTSYS; | 97 | ret = -EINTR; |
| 97 | break; | 98 | break; |
| 98 | } | 99 | } |
| 99 | } | 100 | } |
diff --git a/drivers/gpu/drm/drm_memory.c b/drivers/gpu/drm/drm_memory.c index 803bc9e7ce3c..bcc869bc4092 100644 --- a/drivers/gpu/drm/drm_memory.c +++ b/drivers/gpu/drm/drm_memory.c | |||
| @@ -171,9 +171,14 @@ EXPORT_SYMBOL(drm_core_ioremap); | |||
| 171 | 171 | ||
| 172 | void drm_core_ioremap_wc(struct drm_map *map, struct drm_device *dev) | 172 | void drm_core_ioremap_wc(struct drm_map *map, struct drm_device *dev) |
| 173 | { | 173 | { |
| 174 | map->handle = ioremap_wc(map->offset, map->size); | 174 | if (drm_core_has_AGP(dev) && |
| 175 | dev->agp && dev->agp->cant_use_aperture && map->type == _DRM_AGP) | ||
| 176 | map->handle = agp_remap(map->offset, map->size, dev); | ||
| 177 | else | ||
| 178 | map->handle = ioremap_wc(map->offset, map->size); | ||
| 175 | } | 179 | } |
| 176 | EXPORT_SYMBOL(drm_core_ioremap_wc); | 180 | EXPORT_SYMBOL(drm_core_ioremap_wc); |
| 181 | |||
| 177 | void drm_core_ioremapfree(struct drm_map *map, struct drm_device *dev) | 182 | void drm_core_ioremapfree(struct drm_map *map, struct drm_device *dev) |
| 178 | { | 183 | { |
| 179 | if (!map->handle || !map->size) | 184 | if (!map->handle || !map->size) |
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index 46bb923b097c..7c8b15b22bf2 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c | |||
| @@ -146,14 +146,6 @@ static void drm_master_destroy(struct kref *kref) | |||
| 146 | 146 | ||
| 147 | drm_ht_remove(&master->magiclist); | 147 | drm_ht_remove(&master->magiclist); |
| 148 | 148 | ||
| 149 | if (master->lock.hw_lock) { | ||
| 150 | if (dev->sigdata.lock == master->lock.hw_lock) | ||
| 151 | dev->sigdata.lock = NULL; | ||
| 152 | master->lock.hw_lock = NULL; | ||
| 153 | master->lock.file_priv = NULL; | ||
| 154 | wake_up_interruptible(&master->lock.lock_queue); | ||
| 155 | } | ||
| 156 | |||
| 157 | drm_free(master, sizeof(*master), DRM_MEM_DRIVER); | 149 | drm_free(master, sizeof(*master), DRM_MEM_DRIVER); |
| 158 | } | 150 | } |
| 159 | 151 | ||
| @@ -176,7 +168,7 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data, | |||
| 176 | file_priv->minor->master != file_priv->master) { | 168 | file_priv->minor->master != file_priv->master) { |
| 177 | mutex_lock(&dev->struct_mutex); | 169 | mutex_lock(&dev->struct_mutex); |
| 178 | file_priv->minor->master = drm_master_get(file_priv->master); | 170 | file_priv->minor->master = drm_master_get(file_priv->master); |
| 179 | mutex_lock(&dev->struct_mutex); | 171 | mutex_unlock(&dev->struct_mutex); |
| 180 | } | 172 | } |
| 181 | 173 | ||
| 182 | return 0; | 174 | return 0; |
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index ee64b7301f67..6dab63bdc4c1 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c | |||
| @@ -202,7 +202,7 @@ static int i915_initialize(struct drm_device * dev, drm_i915_init_t * init) | |||
| 202 | dev_priv->ring.map.flags = 0; | 202 | dev_priv->ring.map.flags = 0; |
| 203 | dev_priv->ring.map.mtrr = 0; | 203 | dev_priv->ring.map.mtrr = 0; |
| 204 | 204 | ||
| 205 | drm_core_ioremap(&dev_priv->ring.map, dev); | 205 | drm_core_ioremap_wc(&dev_priv->ring.map, dev); |
| 206 | 206 | ||
| 207 | if (dev_priv->ring.map.handle == NULL) { | 207 | if (dev_priv->ring.map.handle == NULL) { |
| 208 | i915_dma_cleanup(dev); | 208 | i915_dma_cleanup(dev); |
| @@ -731,8 +731,11 @@ static int i915_getparam(struct drm_device *dev, void *data, | |||
| 731 | case I915_PARAM_HAS_GEM: | 731 | case I915_PARAM_HAS_GEM: |
| 732 | value = dev_priv->has_gem; | 732 | value = dev_priv->has_gem; |
| 733 | break; | 733 | break; |
| 734 | case I915_PARAM_NUM_FENCES_AVAIL: | ||
| 735 | value = dev_priv->num_fence_regs - dev_priv->fence_reg_start; | ||
| 736 | break; | ||
| 734 | default: | 737 | default: |
| 735 | DRM_ERROR("Unknown parameter %d\n", param->param); | 738 | DRM_DEBUG("Unknown parameter %d\n", param->param); |
| 736 | return -EINVAL; | 739 | return -EINVAL; |
| 737 | } | 740 | } |
| 738 | 741 | ||
| @@ -764,8 +767,15 @@ static int i915_setparam(struct drm_device *dev, void *data, | |||
| 764 | case I915_SETPARAM_ALLOW_BATCHBUFFER: | 767 | case I915_SETPARAM_ALLOW_BATCHBUFFER: |
| 765 | dev_priv->allow_batchbuffer = param->value; | 768 | dev_priv->allow_batchbuffer = param->value; |
| 766 | break; | 769 | break; |
| 770 | case I915_SETPARAM_NUM_USED_FENCES: | ||
| 771 | if (param->value > dev_priv->num_fence_regs || | ||
| 772 | param->value < 0) | ||
| 773 | return -EINVAL; | ||
| 774 | /* Userspace can use first N regs */ | ||
| 775 | dev_priv->fence_reg_start = param->value; | ||
| 776 | break; | ||
| 767 | default: | 777 | default: |
| 768 | DRM_ERROR("unknown parameter %d\n", param->param); | 778 | DRM_DEBUG("unknown parameter %d\n", param->param); |
| 769 | return -EINVAL; | 779 | return -EINVAL; |
| 770 | } | 780 | } |
| 771 | 781 | ||
| @@ -801,7 +811,7 @@ static int i915_set_status_page(struct drm_device *dev, void *data, | |||
| 801 | dev_priv->hws_map.flags = 0; | 811 | dev_priv->hws_map.flags = 0; |
| 802 | dev_priv->hws_map.mtrr = 0; | 812 | dev_priv->hws_map.mtrr = 0; |
| 803 | 813 | ||
| 804 | drm_core_ioremap(&dev_priv->hws_map, dev); | 814 | drm_core_ioremap_wc(&dev_priv->hws_map, dev); |
| 805 | if (dev_priv->hws_map.handle == NULL) { | 815 | if (dev_priv->hws_map.handle == NULL) { |
| 806 | i915_dma_cleanup(dev); | 816 | i915_dma_cleanup(dev); |
| 807 | dev_priv->status_gfx_addr = 0; | 817 | dev_priv->status_gfx_addr = 0; |
| @@ -966,10 +976,6 @@ static int i915_load_modeset_init(struct drm_device *dev) | |||
| 966 | if (ret) | 976 | if (ret) |
| 967 | goto kfree_devname; | 977 | goto kfree_devname; |
| 968 | 978 | ||
| 969 | dev_priv->mm.gtt_mapping = | ||
| 970 | io_mapping_create_wc(dev->agp->base, | ||
| 971 | dev->agp->agp_info.aper_size * 1024*1024); | ||
| 972 | |||
| 973 | /* Allow hardware batchbuffers unless told otherwise. | 979 | /* Allow hardware batchbuffers unless told otherwise. |
| 974 | */ | 980 | */ |
| 975 | dev_priv->allow_batchbuffer = 1; | 981 | dev_priv->allow_batchbuffer = 1; |
| @@ -1081,6 +1087,28 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags) | |||
| 1081 | goto free_priv; | 1087 | goto free_priv; |
| 1082 | } | 1088 | } |
| 1083 | 1089 | ||
| 1090 | dev_priv->mm.gtt_mapping = | ||
| 1091 | io_mapping_create_wc(dev->agp->base, | ||
| 1092 | dev->agp->agp_info.aper_size * 1024*1024); | ||
| 1093 | if (dev_priv->mm.gtt_mapping == NULL) { | ||
| 1094 | ret = -EIO; | ||
| 1095 | goto out_rmmap; | ||
| 1096 | } | ||
| 1097 | |||
| 1098 | /* Set up a WC MTRR for non-PAT systems. This is more common than | ||
| 1099 | * one would think, because the kernel disables PAT on first | ||
| 1100 | * generation Core chips because WC PAT gets overridden by a UC | ||
| 1101 | * MTRR if present. Even if a UC MTRR isn't present. | ||
| 1102 | */ | ||
| 1103 | dev_priv->mm.gtt_mtrr = mtrr_add(dev->agp->base, | ||
| 1104 | dev->agp->agp_info.aper_size * | ||
| 1105 | 1024 * 1024, | ||
| 1106 | MTRR_TYPE_WRCOMB, 1); | ||
| 1107 | if (dev_priv->mm.gtt_mtrr < 0) { | ||
| 1108 | DRM_INFO("MTRR allocation failed\n. Graphics " | ||
| 1109 | "performance may suffer.\n"); | ||
| 1110 | } | ||
| 1111 | |||
| 1084 | #ifdef CONFIG_HIGHMEM64G | 1112 | #ifdef CONFIG_HIGHMEM64G |
| 1085 | /* don't enable GEM on PAE - needs agp + set_memory_* interface fixes */ | 1113 | /* don't enable GEM on PAE - needs agp + set_memory_* interface fixes */ |
| 1086 | dev_priv->has_gem = 0; | 1114 | dev_priv->has_gem = 0; |
| @@ -1089,13 +1117,17 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags) | |||
| 1089 | dev_priv->has_gem = 1; | 1117 | dev_priv->has_gem = 1; |
| 1090 | #endif | 1118 | #endif |
| 1091 | 1119 | ||
| 1120 | dev->driver->get_vblank_counter = i915_get_vblank_counter; | ||
| 1121 | if (IS_GM45(dev)) | ||
| 1122 | dev->driver->get_vblank_counter = gm45_get_vblank_counter; | ||
| 1123 | |||
| 1092 | i915_gem_load(dev); | 1124 | i915_gem_load(dev); |
| 1093 | 1125 | ||
| 1094 | /* Init HWS */ | 1126 | /* Init HWS */ |
| 1095 | if (!I915_NEED_GFX_HWS(dev)) { | 1127 | if (!I915_NEED_GFX_HWS(dev)) { |
| 1096 | ret = i915_init_phys_hws(dev); | 1128 | ret = i915_init_phys_hws(dev); |
| 1097 | if (ret != 0) | 1129 | if (ret != 0) |
| 1098 | goto out_rmmap; | 1130 | goto out_iomapfree; |
| 1099 | } | 1131 | } |
| 1100 | 1132 | ||
| 1101 | /* On the 945G/GM, the chipset reports the MSI capability on the | 1133 | /* On the 945G/GM, the chipset reports the MSI capability on the |
| @@ -1134,6 +1166,8 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags) | |||
| 1134 | 1166 | ||
| 1135 | return 0; | 1167 | return 0; |
| 1136 | 1168 | ||
| 1169 | out_iomapfree: | ||
| 1170 | io_mapping_free(dev_priv->mm.gtt_mapping); | ||
| 1137 | out_rmmap: | 1171 | out_rmmap: |
| 1138 | iounmap(dev_priv->regs); | 1172 | iounmap(dev_priv->regs); |
| 1139 | free_priv: | 1173 | free_priv: |
| @@ -1145,8 +1179,14 @@ int i915_driver_unload(struct drm_device *dev) | |||
| 1145 | { | 1179 | { |
| 1146 | struct drm_i915_private *dev_priv = dev->dev_private; | 1180 | struct drm_i915_private *dev_priv = dev->dev_private; |
| 1147 | 1181 | ||
| 1182 | io_mapping_free(dev_priv->mm.gtt_mapping); | ||
| 1183 | if (dev_priv->mm.gtt_mtrr >= 0) { | ||
| 1184 | mtrr_del(dev_priv->mm.gtt_mtrr, dev->agp->base, | ||
| 1185 | dev->agp->agp_info.aper_size * 1024 * 1024); | ||
| 1186 | dev_priv->mm.gtt_mtrr = -1; | ||
| 1187 | } | ||
| 1188 | |||
| 1148 | if (drm_core_check_feature(dev, DRIVER_MODESET)) { | 1189 | if (drm_core_check_feature(dev, DRIVER_MODESET)) { |
| 1149 | io_mapping_free(dev_priv->mm.gtt_mapping); | ||
| 1150 | drm_irq_uninstall(dev); | 1190 | drm_irq_uninstall(dev); |
| 1151 | } | 1191 | } |
| 1152 | 1192 | ||
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index f8b3df0926c0..b293ef0bae71 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | * | 27 | * |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
| 30 | #include <linux/device.h> | ||
| 30 | #include "drmP.h" | 31 | #include "drmP.h" |
| 31 | #include "drm.h" | 32 | #include "drm.h" |
| 32 | #include "i915_drm.h" | 33 | #include "i915_drm.h" |
| @@ -66,6 +67,14 @@ static int i915_suspend(struct drm_device *dev, pm_message_t state) | |||
| 66 | 67 | ||
| 67 | i915_save_state(dev); | 68 | i915_save_state(dev); |
| 68 | 69 | ||
| 70 | /* If KMS is active, we do the leavevt stuff here */ | ||
| 71 | if (drm_core_check_feature(dev, DRIVER_MODESET)) { | ||
| 72 | if (i915_gem_idle(dev)) | ||
| 73 | dev_err(&dev->pdev->dev, | ||
| 74 | "GEM idle failed, resume may fail\n"); | ||
| 75 | drm_irq_uninstall(dev); | ||
| 76 | } | ||
| 77 | |||
| 69 | intel_opregion_free(dev); | 78 | intel_opregion_free(dev); |
| 70 | 79 | ||
| 71 | if (state.event == PM_EVENT_SUSPEND) { | 80 | if (state.event == PM_EVENT_SUSPEND) { |
| @@ -79,6 +88,9 @@ static int i915_suspend(struct drm_device *dev, pm_message_t state) | |||
| 79 | 88 | ||
| 80 | static int i915_resume(struct drm_device *dev) | 89 | static int i915_resume(struct drm_device *dev) |
| 81 | { | 90 | { |
| 91 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
| 92 | int ret = 0; | ||
| 93 | |||
| 82 | pci_set_power_state(dev->pdev, PCI_D0); | 94 | pci_set_power_state(dev->pdev, PCI_D0); |
| 83 | pci_restore_state(dev->pdev); | 95 | pci_restore_state(dev->pdev); |
| 84 | if (pci_enable_device(dev->pdev)) | 96 | if (pci_enable_device(dev->pdev)) |
| @@ -89,11 +101,26 @@ static int i915_resume(struct drm_device *dev) | |||
| 89 | 101 | ||
| 90 | intel_opregion_init(dev); | 102 | intel_opregion_init(dev); |
| 91 | 103 | ||
| 92 | return 0; | 104 | /* KMS EnterVT equivalent */ |
| 105 | if (drm_core_check_feature(dev, DRIVER_MODESET)) { | ||
| 106 | mutex_lock(&dev->struct_mutex); | ||
| 107 | dev_priv->mm.suspended = 0; | ||
| 108 | |||
| 109 | ret = i915_gem_init_ringbuffer(dev); | ||
| 110 | if (ret != 0) | ||
| 111 | ret = -1; | ||
| 112 | mutex_unlock(&dev->struct_mutex); | ||
| 113 | |||
| 114 | drm_irq_install(dev); | ||
| 115 | } | ||
| 116 | |||
| 117 | return ret; | ||
| 93 | } | 118 | } |
| 94 | 119 | ||
| 95 | static struct vm_operations_struct i915_gem_vm_ops = { | 120 | static struct vm_operations_struct i915_gem_vm_ops = { |
| 96 | .fault = i915_gem_fault, | 121 | .fault = i915_gem_fault, |
| 122 | .open = drm_gem_vm_open, | ||
| 123 | .close = drm_gem_vm_close, | ||
| 97 | }; | 124 | }; |
| 98 | 125 | ||
| 99 | static struct drm_driver driver = { | 126 | static struct drm_driver driver = { |
| @@ -112,7 +139,6 @@ static struct drm_driver driver = { | |||
| 112 | .suspend = i915_suspend, | 139 | .suspend = i915_suspend, |
| 113 | .resume = i915_resume, | 140 | .resume = i915_resume, |
| 114 | .device_is_agp = i915_driver_device_is_agp, | 141 | .device_is_agp = i915_driver_device_is_agp, |
| 115 | .get_vblank_counter = i915_get_vblank_counter, | ||
| 116 | .enable_vblank = i915_enable_vblank, | 142 | .enable_vblank = i915_enable_vblank, |
| 117 | .disable_vblank = i915_disable_vblank, | 143 | .disable_vblank = i915_disable_vblank, |
| 118 | .irq_preinstall = i915_driver_irq_preinstall, | 144 | .irq_preinstall = i915_driver_irq_preinstall, |
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index e13518252007..17fa40858d26 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
| @@ -184,6 +184,8 @@ typedef struct drm_i915_private { | |||
| 184 | unsigned int lvds_dither:1; | 184 | unsigned int lvds_dither:1; |
| 185 | unsigned int lvds_vbt:1; | 185 | unsigned int lvds_vbt:1; |
| 186 | unsigned int int_crt_support:1; | 186 | unsigned int int_crt_support:1; |
| 187 | unsigned int lvds_use_ssc:1; | ||
| 188 | int lvds_ssc_freq; | ||
| 187 | 189 | ||
| 188 | struct drm_i915_fence_reg fence_regs[16]; /* assume 965 */ | 190 | struct drm_i915_fence_reg fence_regs[16]; /* assume 965 */ |
| 189 | int fence_reg_start; /* 4 if userland hasn't ioctl'd us yet */ | 191 | int fence_reg_start; /* 4 if userland hasn't ioctl'd us yet */ |
| @@ -284,6 +286,7 @@ typedef struct drm_i915_private { | |||
| 284 | struct drm_mm gtt_space; | 286 | struct drm_mm gtt_space; |
| 285 | 287 | ||
| 286 | struct io_mapping *gtt_mapping; | 288 | struct io_mapping *gtt_mapping; |
| 289 | int gtt_mtrr; | ||
| 287 | 290 | ||
| 288 | /** | 291 | /** |
| 289 | * List of objects currently involved in rendering from the | 292 | * List of objects currently involved in rendering from the |
| @@ -534,6 +537,7 @@ extern int i915_vblank_pipe_get(struct drm_device *dev, void *data, | |||
| 534 | extern int i915_enable_vblank(struct drm_device *dev, int crtc); | 537 | extern int i915_enable_vblank(struct drm_device *dev, int crtc); |
| 535 | extern void i915_disable_vblank(struct drm_device *dev, int crtc); | 538 | extern void i915_disable_vblank(struct drm_device *dev, int crtc); |
| 536 | extern u32 i915_get_vblank_counter(struct drm_device *dev, int crtc); | 539 | extern u32 i915_get_vblank_counter(struct drm_device *dev, int crtc); |
| 540 | extern u32 gm45_get_vblank_counter(struct drm_device *dev, int crtc); | ||
| 537 | extern int i915_vblank_swap(struct drm_device *dev, void *data, | 541 | extern int i915_vblank_swap(struct drm_device *dev, void *data, |
| 538 | struct drm_file *file_priv); | 542 | struct drm_file *file_priv); |
| 539 | extern void i915_enable_irq(drm_i915_private_t *dev_priv, u32 mask); | 543 | extern void i915_enable_irq(drm_i915_private_t *dev_priv, u32 mask); |
| @@ -601,6 +605,7 @@ int i915_gem_init_object(struct drm_gem_object *obj); | |||
| 601 | void i915_gem_free_object(struct drm_gem_object *obj); | 605 | void i915_gem_free_object(struct drm_gem_object *obj); |
| 602 | int i915_gem_object_pin(struct drm_gem_object *obj, uint32_t alignment); | 606 | int i915_gem_object_pin(struct drm_gem_object *obj, uint32_t alignment); |
| 603 | void i915_gem_object_unpin(struct drm_gem_object *obj); | 607 | void i915_gem_object_unpin(struct drm_gem_object *obj); |
| 608 | int i915_gem_object_unbind(struct drm_gem_object *obj); | ||
| 604 | void i915_gem_lastclose(struct drm_device *dev); | 609 | void i915_gem_lastclose(struct drm_device *dev); |
| 605 | uint32_t i915_get_gem_seqno(struct drm_device *dev); | 610 | uint32_t i915_get_gem_seqno(struct drm_device *dev); |
| 606 | void i915_gem_retire_requests(struct drm_device *dev); | 611 | void i915_gem_retire_requests(struct drm_device *dev); |
| @@ -613,6 +618,7 @@ int i915_gem_init_ringbuffer(struct drm_device *dev); | |||
| 613 | void i915_gem_cleanup_ringbuffer(struct drm_device *dev); | 618 | void i915_gem_cleanup_ringbuffer(struct drm_device *dev); |
| 614 | int i915_gem_do_init(struct drm_device *dev, unsigned long start, | 619 | int i915_gem_do_init(struct drm_device *dev, unsigned long start, |
| 615 | unsigned long end); | 620 | unsigned long end); |
| 621 | int i915_gem_idle(struct drm_device *dev); | ||
| 616 | int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf); | 622 | int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf); |
| 617 | int i915_gem_object_set_to_gtt_domain(struct drm_gem_object *obj, | 623 | int i915_gem_object_set_to_gtt_domain(struct drm_gem_object *obj, |
| 618 | int write); | 624 | int write); |
| @@ -784,6 +790,11 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller); | |||
| 784 | IS_I945GM(dev) || IS_I965GM(dev) || IS_GM45(dev)) | 790 | IS_I945GM(dev) || IS_I965GM(dev) || IS_GM45(dev)) |
| 785 | 791 | ||
| 786 | #define I915_NEED_GFX_HWS(dev) (IS_G33(dev) || IS_GM45(dev) || IS_G4X(dev)) | 792 | #define I915_NEED_GFX_HWS(dev) (IS_G33(dev) || IS_GM45(dev) || IS_G4X(dev)) |
| 793 | /* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte | ||
| 794 | * rows, which changed the alignment requirements and fence programming. | ||
| 795 | */ | ||
| 796 | #define HAS_128_BYTE_Y_TILING(dev) (IS_I9XX(dev) && !(IS_I915G(dev) || \ | ||
| 797 | IS_I915GM(dev))) | ||
| 787 | #define SUPPORTS_INTEGRATED_HDMI(dev) (IS_G4X(dev)) | 798 | #define SUPPORTS_INTEGRATED_HDMI(dev) (IS_G4X(dev)) |
| 788 | 799 | ||
| 789 | #define PRIMARY_RINGBUFFER_SIZE (128*1024) | 800 | #define PRIMARY_RINGBUFFER_SIZE (128*1024) |
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index debad5c04cc0..85685bfd12da 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
| @@ -34,10 +34,6 @@ | |||
| 34 | 34 | ||
| 35 | #define I915_GEM_GPU_DOMAINS (~(I915_GEM_DOMAIN_CPU | I915_GEM_DOMAIN_GTT)) | 35 | #define I915_GEM_GPU_DOMAINS (~(I915_GEM_DOMAIN_CPU | I915_GEM_DOMAIN_GTT)) |
| 36 | 36 | ||
| 37 | static void | ||
| 38 | i915_gem_object_set_to_gpu_domain(struct drm_gem_object *obj, | ||
| 39 | uint32_t read_domains, | ||
| 40 | uint32_t write_domain); | ||
| 41 | static void i915_gem_object_flush_gpu_write_domain(struct drm_gem_object *obj); | 37 | static void i915_gem_object_flush_gpu_write_domain(struct drm_gem_object *obj); |
| 42 | static void i915_gem_object_flush_gtt_write_domain(struct drm_gem_object *obj); | 38 | static void i915_gem_object_flush_gtt_write_domain(struct drm_gem_object *obj); |
| 43 | static void i915_gem_object_flush_cpu_write_domain(struct drm_gem_object *obj); | 39 | static void i915_gem_object_flush_cpu_write_domain(struct drm_gem_object *obj); |
| @@ -52,7 +48,7 @@ static void i915_gem_object_free_page_list(struct drm_gem_object *obj); | |||
| 52 | static int i915_gem_object_wait_rendering(struct drm_gem_object *obj); | 48 | static int i915_gem_object_wait_rendering(struct drm_gem_object *obj); |
| 53 | static int i915_gem_object_bind_to_gtt(struct drm_gem_object *obj, | 49 | static int i915_gem_object_bind_to_gtt(struct drm_gem_object *obj, |
| 54 | unsigned alignment); | 50 | unsigned alignment); |
| 55 | static void i915_gem_object_get_fence_reg(struct drm_gem_object *obj); | 51 | static int i915_gem_object_get_fence_reg(struct drm_gem_object *obj, bool write); |
| 56 | static void i915_gem_clear_fence_reg(struct drm_gem_object *obj); | 52 | static void i915_gem_clear_fence_reg(struct drm_gem_object *obj); |
| 57 | static int i915_gem_evict_something(struct drm_device *dev); | 53 | static int i915_gem_evict_something(struct drm_device *dev); |
| 58 | static int i915_gem_phys_pwrite(struct drm_device *dev, struct drm_gem_object *obj, | 54 | static int i915_gem_phys_pwrite(struct drm_device *dev, struct drm_gem_object *obj, |
| @@ -567,6 +563,7 @@ int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
| 567 | pgoff_t page_offset; | 563 | pgoff_t page_offset; |
| 568 | unsigned long pfn; | 564 | unsigned long pfn; |
| 569 | int ret = 0; | 565 | int ret = 0; |
| 566 | bool write = !!(vmf->flags & FAULT_FLAG_WRITE); | ||
| 570 | 567 | ||
| 571 | /* We don't use vmf->pgoff since that has the fake offset */ | 568 | /* We don't use vmf->pgoff since that has the fake offset */ |
| 572 | page_offset = ((unsigned long)vmf->virtual_address - vma->vm_start) >> | 569 | page_offset = ((unsigned long)vmf->virtual_address - vma->vm_start) >> |
| @@ -585,8 +582,13 @@ int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
| 585 | 582 | ||
| 586 | /* Need a new fence register? */ | 583 | /* Need a new fence register? */ |
| 587 | if (obj_priv->fence_reg == I915_FENCE_REG_NONE && | 584 | if (obj_priv->fence_reg == I915_FENCE_REG_NONE && |
| 588 | obj_priv->tiling_mode != I915_TILING_NONE) | 585 | obj_priv->tiling_mode != I915_TILING_NONE) { |
| 589 | i915_gem_object_get_fence_reg(obj); | 586 | ret = i915_gem_object_get_fence_reg(obj, write); |
| 587 | if (ret) { | ||
| 588 | mutex_unlock(&dev->struct_mutex); | ||
| 589 | return VM_FAULT_SIGBUS; | ||
| 590 | } | ||
| 591 | } | ||
| 590 | 592 | ||
| 591 | pfn = ((dev->agp->base + obj_priv->gtt_offset) >> PAGE_SHIFT) + | 593 | pfn = ((dev->agp->base + obj_priv->gtt_offset) >> PAGE_SHIFT) + |
| 592 | page_offset; | 594 | page_offset; |
| @@ -601,8 +603,6 @@ int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
| 601 | case -EAGAIN: | 603 | case -EAGAIN: |
| 602 | return VM_FAULT_OOM; | 604 | return VM_FAULT_OOM; |
| 603 | case -EFAULT: | 605 | case -EFAULT: |
| 604 | case -EBUSY: | ||
| 605 | DRM_ERROR("can't insert pfn?? fault or busy...\n"); | ||
| 606 | return VM_FAULT_SIGBUS; | 606 | return VM_FAULT_SIGBUS; |
| 607 | default: | 607 | default: |
| 608 | return VM_FAULT_NOPAGE; | 608 | return VM_FAULT_NOPAGE; |
| @@ -678,6 +678,30 @@ out_free_list: | |||
| 678 | return ret; | 678 | return ret; |
| 679 | } | 679 | } |
| 680 | 680 | ||
| 681 | static void | ||
| 682 | i915_gem_free_mmap_offset(struct drm_gem_object *obj) | ||
| 683 | { | ||
| 684 | struct drm_device *dev = obj->dev; | ||
| 685 | struct drm_i915_gem_object *obj_priv = obj->driver_private; | ||
| 686 | struct drm_gem_mm *mm = dev->mm_private; | ||
| 687 | struct drm_map_list *list; | ||
| 688 | |||
| 689 | list = &obj->map_list; | ||
| 690 | drm_ht_remove_item(&mm->offset_hash, &list->hash); | ||
| 691 | |||
| 692 | if (list->file_offset_node) { | ||
| 693 | drm_mm_put_block(list->file_offset_node); | ||
| 694 | list->file_offset_node = NULL; | ||
| 695 | } | ||
| 696 | |||
| 697 | if (list->map) { | ||
| 698 | drm_free(list->map, sizeof(struct drm_map), DRM_MEM_DRIVER); | ||
| 699 | list->map = NULL; | ||
| 700 | } | ||
| 701 | |||
| 702 | obj_priv->mmap_offset = 0; | ||
| 703 | } | ||
| 704 | |||
| 681 | /** | 705 | /** |
| 682 | * i915_gem_get_gtt_alignment - return required GTT alignment for an object | 706 | * i915_gem_get_gtt_alignment - return required GTT alignment for an object |
| 683 | * @obj: object to check | 707 | * @obj: object to check |
| @@ -752,8 +776,11 @@ i915_gem_mmap_gtt_ioctl(struct drm_device *dev, void *data, | |||
| 752 | 776 | ||
| 753 | if (!obj_priv->mmap_offset) { | 777 | if (!obj_priv->mmap_offset) { |
| 754 | ret = i915_gem_create_mmap_offset(obj); | 778 | ret = i915_gem_create_mmap_offset(obj); |
| 755 | if (ret) | 779 | if (ret) { |
| 780 | drm_gem_object_unreference(obj); | ||
| 781 | mutex_unlock(&dev->struct_mutex); | ||
| 756 | return ret; | 782 | return ret; |
| 783 | } | ||
| 757 | } | 784 | } |
| 758 | 785 | ||
| 759 | args->offset = obj_priv->mmap_offset; | 786 | args->offset = obj_priv->mmap_offset; |
| @@ -1024,6 +1051,9 @@ i915_gem_retire_requests(struct drm_device *dev) | |||
| 1024 | drm_i915_private_t *dev_priv = dev->dev_private; | 1051 | drm_i915_private_t *dev_priv = dev->dev_private; |
| 1025 | uint32_t seqno; | 1052 | uint32_t seqno; |
| 1026 | 1053 | ||
| 1054 | if (!dev_priv->hw_status_page) | ||
| 1055 | return; | ||
| 1056 | |||
| 1027 | seqno = i915_get_gem_seqno(dev); | 1057 | seqno = i915_get_gem_seqno(dev); |
| 1028 | 1058 | ||
| 1029 | while (!list_empty(&dev_priv->mm.request_list)) { | 1059 | while (!list_empty(&dev_priv->mm.request_list)) { |
| @@ -1211,7 +1241,7 @@ i915_gem_object_wait_rendering(struct drm_gem_object *obj) | |||
| 1211 | /** | 1241 | /** |
| 1212 | * Unbinds an object from the GTT aperture. | 1242 | * Unbinds an object from the GTT aperture. |
| 1213 | */ | 1243 | */ |
| 1214 | static int | 1244 | int |
| 1215 | i915_gem_object_unbind(struct drm_gem_object *obj) | 1245 | i915_gem_object_unbind(struct drm_gem_object *obj) |
| 1216 | { | 1246 | { |
| 1217 | struct drm_device *dev = obj->dev; | 1247 | struct drm_device *dev = obj->dev; |
| @@ -1445,21 +1475,26 @@ static void i915_write_fence_reg(struct drm_i915_fence_reg *reg) | |||
| 1445 | drm_i915_private_t *dev_priv = dev->dev_private; | 1475 | drm_i915_private_t *dev_priv = dev->dev_private; |
| 1446 | struct drm_i915_gem_object *obj_priv = obj->driver_private; | 1476 | struct drm_i915_gem_object *obj_priv = obj->driver_private; |
| 1447 | int regnum = obj_priv->fence_reg; | 1477 | int regnum = obj_priv->fence_reg; |
| 1478 | int tile_width; | ||
| 1448 | uint32_t val; | 1479 | uint32_t val; |
| 1449 | uint32_t pitch_val; | 1480 | uint32_t pitch_val; |
| 1450 | 1481 | ||
| 1451 | if ((obj_priv->gtt_offset & ~I915_FENCE_START_MASK) || | 1482 | if ((obj_priv->gtt_offset & ~I915_FENCE_START_MASK) || |
| 1452 | (obj_priv->gtt_offset & (obj->size - 1))) { | 1483 | (obj_priv->gtt_offset & (obj->size - 1))) { |
| 1453 | WARN(1, "%s: object not 1M or size aligned\n", __func__); | 1484 | WARN(1, "%s: object 0x%08x not 1M or size (0x%zx) aligned\n", |
| 1485 | __func__, obj_priv->gtt_offset, obj->size); | ||
| 1454 | return; | 1486 | return; |
| 1455 | } | 1487 | } |
| 1456 | 1488 | ||
| 1457 | if (obj_priv->tiling_mode == I915_TILING_Y && (IS_I945G(dev) || | 1489 | if (obj_priv->tiling_mode == I915_TILING_Y && |
| 1458 | IS_I945GM(dev) || | 1490 | HAS_128_BYTE_Y_TILING(dev)) |
| 1459 | IS_G33(dev))) | 1491 | tile_width = 128; |
| 1460 | pitch_val = (obj_priv->stride / 128) - 1; | ||
| 1461 | else | 1492 | else |
| 1462 | pitch_val = (obj_priv->stride / 512) - 1; | 1493 | tile_width = 512; |
| 1494 | |||
| 1495 | /* Note: pitch better be a power of two tile widths */ | ||
| 1496 | pitch_val = obj_priv->stride / tile_width; | ||
| 1497 | pitch_val = ffs(pitch_val) - 1; | ||
| 1463 | 1498 | ||
| 1464 | val = obj_priv->gtt_offset; | 1499 | val = obj_priv->gtt_offset; |
| 1465 | if (obj_priv->tiling_mode == I915_TILING_Y) | 1500 | if (obj_priv->tiling_mode == I915_TILING_Y) |
| @@ -1483,7 +1518,8 @@ static void i830_write_fence_reg(struct drm_i915_fence_reg *reg) | |||
| 1483 | 1518 | ||
| 1484 | if ((obj_priv->gtt_offset & ~I915_FENCE_START_MASK) || | 1519 | if ((obj_priv->gtt_offset & ~I915_FENCE_START_MASK) || |
| 1485 | (obj_priv->gtt_offset & (obj->size - 1))) { | 1520 | (obj_priv->gtt_offset & (obj->size - 1))) { |
| 1486 | WARN(1, "%s: object not 1M or size aligned\n", __func__); | 1521 | WARN(1, "%s: object 0x%08x not 1M or size aligned\n", |
| 1522 | __func__, obj_priv->gtt_offset); | ||
| 1487 | return; | 1523 | return; |
| 1488 | } | 1524 | } |
| 1489 | 1525 | ||
| @@ -1503,6 +1539,7 @@ static void i830_write_fence_reg(struct drm_i915_fence_reg *reg) | |||
| 1503 | /** | 1539 | /** |
| 1504 | * i915_gem_object_get_fence_reg - set up a fence reg for an object | 1540 | * i915_gem_object_get_fence_reg - set up a fence reg for an object |
| 1505 | * @obj: object to map through a fence reg | 1541 | * @obj: object to map through a fence reg |
| 1542 | * @write: object is about to be written | ||
| 1506 | * | 1543 | * |
| 1507 | * When mapping objects through the GTT, userspace wants to be able to write | 1544 | * When mapping objects through the GTT, userspace wants to be able to write |
| 1508 | * to them without having to worry about swizzling if the object is tiled. | 1545 | * to them without having to worry about swizzling if the object is tiled. |
| @@ -1513,8 +1550,8 @@ static void i830_write_fence_reg(struct drm_i915_fence_reg *reg) | |||
| 1513 | * It then sets up the reg based on the object's properties: address, pitch | 1550 | * It then sets up the reg based on the object's properties: address, pitch |
| 1514 | * and tiling format. | 1551 | * and tiling format. |
| 1515 | */ | 1552 | */ |
| 1516 | static void | 1553 | static int |
| 1517 | i915_gem_object_get_fence_reg(struct drm_gem_object *obj) | 1554 | i915_gem_object_get_fence_reg(struct drm_gem_object *obj, bool write) |
| 1518 | { | 1555 | { |
| 1519 | struct drm_device *dev = obj->dev; | 1556 | struct drm_device *dev = obj->dev; |
| 1520 | struct drm_i915_private *dev_priv = dev->dev_private; | 1557 | struct drm_i915_private *dev_priv = dev->dev_private; |
| @@ -1527,12 +1564,18 @@ i915_gem_object_get_fence_reg(struct drm_gem_object *obj) | |||
| 1527 | WARN(1, "allocating a fence for non-tiled object?\n"); | 1564 | WARN(1, "allocating a fence for non-tiled object?\n"); |
| 1528 | break; | 1565 | break; |
| 1529 | case I915_TILING_X: | 1566 | case I915_TILING_X: |
| 1530 | WARN(obj_priv->stride & (512 - 1), | 1567 | if (!obj_priv->stride) |
| 1531 | "object is X tiled but has non-512B pitch\n"); | 1568 | return -EINVAL; |
| 1569 | WARN((obj_priv->stride & (512 - 1)), | ||
| 1570 | "object 0x%08x is X tiled but has non-512B pitch\n", | ||
| 1571 | obj_priv->gtt_offset); | ||
| 1532 | break; | 1572 | break; |
| 1533 | case I915_TILING_Y: | 1573 | case I915_TILING_Y: |
| 1534 | WARN(obj_priv->stride & (128 - 1), | 1574 | if (!obj_priv->stride) |
| 1535 | "object is Y tiled but has non-128B pitch\n"); | 1575 | return -EINVAL; |
| 1576 | WARN((obj_priv->stride & (128 - 1)), | ||
| 1577 | "object 0x%08x is Y tiled but has non-128B pitch\n", | ||
| 1578 | obj_priv->gtt_offset); | ||
| 1536 | break; | 1579 | break; |
| 1537 | } | 1580 | } |
| 1538 | 1581 | ||
| @@ -1563,10 +1606,11 @@ try_again: | |||
| 1563 | * objects to finish before trying again. | 1606 | * objects to finish before trying again. |
| 1564 | */ | 1607 | */ |
| 1565 | if (i == dev_priv->num_fence_regs) { | 1608 | if (i == dev_priv->num_fence_regs) { |
| 1566 | ret = i915_gem_object_wait_rendering(reg->obj); | 1609 | ret = i915_gem_object_set_to_gtt_domain(reg->obj, 0); |
| 1567 | if (ret) { | 1610 | if (ret) { |
| 1568 | WARN(ret, "wait_rendering failed: %d\n", ret); | 1611 | WARN(ret != -ERESTARTSYS, |
| 1569 | return; | 1612 | "switch to GTT domain failed: %d\n", ret); |
| 1613 | return ret; | ||
| 1570 | } | 1614 | } |
| 1571 | goto try_again; | 1615 | goto try_again; |
| 1572 | } | 1616 | } |
| @@ -1591,6 +1635,8 @@ try_again: | |||
| 1591 | i915_write_fence_reg(reg); | 1635 | i915_write_fence_reg(reg); |
| 1592 | else | 1636 | else |
| 1593 | i830_write_fence_reg(reg); | 1637 | i830_write_fence_reg(reg); |
| 1638 | |||
| 1639 | return 0; | ||
| 1594 | } | 1640 | } |
| 1595 | 1641 | ||
| 1596 | /** | 1642 | /** |
| @@ -1631,7 +1677,7 @@ i915_gem_object_bind_to_gtt(struct drm_gem_object *obj, unsigned alignment) | |||
| 1631 | if (dev_priv->mm.suspended) | 1677 | if (dev_priv->mm.suspended) |
| 1632 | return -EBUSY; | 1678 | return -EBUSY; |
| 1633 | if (alignment == 0) | 1679 | if (alignment == 0) |
| 1634 | alignment = PAGE_SIZE; | 1680 | alignment = i915_gem_get_gtt_alignment(obj); |
| 1635 | if (alignment & (PAGE_SIZE - 1)) { | 1681 | if (alignment & (PAGE_SIZE - 1)) { |
| 1636 | DRM_ERROR("Invalid object alignment requested %u\n", alignment); | 1682 | DRM_ERROR("Invalid object alignment requested %u\n", alignment); |
| 1637 | return -EINVAL; | 1683 | return -EINVAL; |
| @@ -1974,30 +2020,28 @@ i915_gem_object_set_to_cpu_domain(struct drm_gem_object *obj, int write) | |||
| 1974 | * drm_agp_chipset_flush | 2020 | * drm_agp_chipset_flush |
| 1975 | */ | 2021 | */ |
| 1976 | static void | 2022 | static void |
| 1977 | i915_gem_object_set_to_gpu_domain(struct drm_gem_object *obj, | 2023 | i915_gem_object_set_to_gpu_domain(struct drm_gem_object *obj) |
| 1978 | uint32_t read_domains, | ||
| 1979 | uint32_t write_domain) | ||
| 1980 | { | 2024 | { |
| 1981 | struct drm_device *dev = obj->dev; | 2025 | struct drm_device *dev = obj->dev; |
| 1982 | struct drm_i915_gem_object *obj_priv = obj->driver_private; | 2026 | struct drm_i915_gem_object *obj_priv = obj->driver_private; |
| 1983 | uint32_t invalidate_domains = 0; | 2027 | uint32_t invalidate_domains = 0; |
| 1984 | uint32_t flush_domains = 0; | 2028 | uint32_t flush_domains = 0; |
| 1985 | 2029 | ||
| 1986 | BUG_ON(read_domains & I915_GEM_DOMAIN_CPU); | 2030 | BUG_ON(obj->pending_read_domains & I915_GEM_DOMAIN_CPU); |
| 1987 | BUG_ON(write_domain == I915_GEM_DOMAIN_CPU); | 2031 | BUG_ON(obj->pending_write_domain == I915_GEM_DOMAIN_CPU); |
| 1988 | 2032 | ||
| 1989 | #if WATCH_BUF | 2033 | #if WATCH_BUF |
| 1990 | DRM_INFO("%s: object %p read %08x -> %08x write %08x -> %08x\n", | 2034 | DRM_INFO("%s: object %p read %08x -> %08x write %08x -> %08x\n", |
| 1991 | __func__, obj, | 2035 | __func__, obj, |
| 1992 | obj->read_domains, read_domains, | 2036 | obj->read_domains, obj->pending_read_domains, |
| 1993 | obj->write_domain, write_domain); | 2037 | obj->write_domain, obj->pending_write_domain); |
| 1994 | #endif | 2038 | #endif |
| 1995 | /* | 2039 | /* |
| 1996 | * If the object isn't moving to a new write domain, | 2040 | * If the object isn't moving to a new write domain, |
| 1997 | * let the object stay in multiple read domains | 2041 | * let the object stay in multiple read domains |
| 1998 | */ | 2042 | */ |
| 1999 | if (write_domain == 0) | 2043 | if (obj->pending_write_domain == 0) |
| 2000 | read_domains |= obj->read_domains; | 2044 | obj->pending_read_domains |= obj->read_domains; |
| 2001 | else | 2045 | else |
| 2002 | obj_priv->dirty = 1; | 2046 | obj_priv->dirty = 1; |
| 2003 | 2047 | ||
| @@ -2007,15 +2051,17 @@ i915_gem_object_set_to_gpu_domain(struct drm_gem_object *obj, | |||
| 2007 | * any read domains which differ from the old | 2051 | * any read domains which differ from the old |
| 2008 | * write domain | 2052 | * write domain |
| 2009 | */ | 2053 | */ |
| 2010 | if (obj->write_domain && obj->write_domain != read_domains) { | 2054 | if (obj->write_domain && |
| 2055 | obj->write_domain != obj->pending_read_domains) { | ||
| 2011 | flush_domains |= obj->write_domain; | 2056 | flush_domains |= obj->write_domain; |
| 2012 | invalidate_domains |= read_domains & ~obj->write_domain; | 2057 | invalidate_domains |= |
| 2058 | obj->pending_read_domains & ~obj->write_domain; | ||
| 2013 | } | 2059 | } |
| 2014 | /* | 2060 | /* |
| 2015 | * Invalidate any read caches which may have | 2061 | * Invalidate any read caches which may have |
| 2016 | * stale data. That is, any new read domains. | 2062 | * stale data. That is, any new read domains. |
| 2017 | */ | 2063 | */ |
| 2018 | invalidate_domains |= read_domains & ~obj->read_domains; | 2064 | invalidate_domains |= obj->pending_read_domains & ~obj->read_domains; |
| 2019 | if ((flush_domains | invalidate_domains) & I915_GEM_DOMAIN_CPU) { | 2065 | if ((flush_domains | invalidate_domains) & I915_GEM_DOMAIN_CPU) { |
| 2020 | #if WATCH_BUF | 2066 | #if WATCH_BUF |
| 2021 | DRM_INFO("%s: CPU domain flush %08x invalidate %08x\n", | 2067 | DRM_INFO("%s: CPU domain flush %08x invalidate %08x\n", |
| @@ -2024,9 +2070,15 @@ i915_gem_object_set_to_gpu_domain(struct drm_gem_object *obj, | |||
| 2024 | i915_gem_clflush_object(obj); | 2070 | i915_gem_clflush_object(obj); |
| 2025 | } | 2071 | } |
| 2026 | 2072 | ||
| 2027 | if ((write_domain | flush_domains) != 0) | 2073 | /* The actual obj->write_domain will be updated with |
| 2028 | obj->write_domain = write_domain; | 2074 | * pending_write_domain after we emit the accumulated flush for all |
| 2029 | obj->read_domains = read_domains; | 2075 | * of our domain changes in execbuffers (which clears objects' |
| 2076 | * write_domains). So if we have a current write domain that we | ||
| 2077 | * aren't changing, set pending_write_domain to that. | ||
| 2078 | */ | ||
| 2079 | if (flush_domains == 0 && obj->pending_write_domain == 0) | ||
| 2080 | obj->pending_write_domain = obj->write_domain; | ||
| 2081 | obj->read_domains = obj->pending_read_domains; | ||
| 2030 | 2082 | ||
| 2031 | dev->invalidate_domains |= invalidate_domains; | 2083 | dev->invalidate_domains |= invalidate_domains; |
| 2032 | dev->flush_domains |= flush_domains; | 2084 | dev->flush_domains |= flush_domains; |
| @@ -2229,6 +2281,8 @@ i915_gem_object_pin_and_relocate(struct drm_gem_object *obj, | |||
| 2229 | (int) reloc.offset, | 2281 | (int) reloc.offset, |
| 2230 | reloc.read_domains, | 2282 | reloc.read_domains, |
| 2231 | reloc.write_domain); | 2283 | reloc.write_domain); |
| 2284 | drm_gem_object_unreference(target_obj); | ||
| 2285 | i915_gem_object_unpin(obj); | ||
| 2232 | return -EINVAL; | 2286 | return -EINVAL; |
| 2233 | } | 2287 | } |
| 2234 | 2288 | ||
| @@ -2458,13 +2512,15 @@ i915_gem_execbuffer(struct drm_device *dev, void *data, | |||
| 2458 | if (dev_priv->mm.wedged) { | 2512 | if (dev_priv->mm.wedged) { |
| 2459 | DRM_ERROR("Execbuf while wedged\n"); | 2513 | DRM_ERROR("Execbuf while wedged\n"); |
| 2460 | mutex_unlock(&dev->struct_mutex); | 2514 | mutex_unlock(&dev->struct_mutex); |
| 2461 | return -EIO; | 2515 | ret = -EIO; |
| 2516 | goto pre_mutex_err; | ||
| 2462 | } | 2517 | } |
| 2463 | 2518 | ||
| 2464 | if (dev_priv->mm.suspended) { | 2519 | if (dev_priv->mm.suspended) { |
| 2465 | DRM_ERROR("Execbuf while VT-switched.\n"); | 2520 | DRM_ERROR("Execbuf while VT-switched.\n"); |
| 2466 | mutex_unlock(&dev->struct_mutex); | 2521 | mutex_unlock(&dev->struct_mutex); |
| 2467 | return -EBUSY; | 2522 | ret = -EBUSY; |
| 2523 | goto pre_mutex_err; | ||
| 2468 | } | 2524 | } |
| 2469 | 2525 | ||
| 2470 | /* Look up object handles */ | 2526 | /* Look up object handles */ |
| @@ -2532,9 +2588,7 @@ i915_gem_execbuffer(struct drm_device *dev, void *data, | |||
| 2532 | struct drm_gem_object *obj = object_list[i]; | 2588 | struct drm_gem_object *obj = object_list[i]; |
| 2533 | 2589 | ||
| 2534 | /* Compute new gpu domains and update invalidate/flush */ | 2590 | /* Compute new gpu domains and update invalidate/flush */ |
| 2535 | i915_gem_object_set_to_gpu_domain(obj, | 2591 | i915_gem_object_set_to_gpu_domain(obj); |
| 2536 | obj->pending_read_domains, | ||
| 2537 | obj->pending_write_domain); | ||
| 2538 | } | 2592 | } |
| 2539 | 2593 | ||
| 2540 | i915_verify_inactive(dev, __FILE__, __LINE__); | 2594 | i915_verify_inactive(dev, __FILE__, __LINE__); |
| @@ -2553,6 +2607,12 @@ i915_gem_execbuffer(struct drm_device *dev, void *data, | |||
| 2553 | (void)i915_add_request(dev, dev->flush_domains); | 2607 | (void)i915_add_request(dev, dev->flush_domains); |
| 2554 | } | 2608 | } |
| 2555 | 2609 | ||
| 2610 | for (i = 0; i < args->buffer_count; i++) { | ||
| 2611 | struct drm_gem_object *obj = object_list[i]; | ||
| 2612 | |||
| 2613 | obj->write_domain = obj->pending_write_domain; | ||
| 2614 | } | ||
| 2615 | |||
| 2556 | i915_verify_inactive(dev, __FILE__, __LINE__); | 2616 | i915_verify_inactive(dev, __FILE__, __LINE__); |
| 2557 | 2617 | ||
| 2558 | #if WATCH_COHERENCY | 2618 | #if WATCH_COHERENCY |
| @@ -2610,15 +2670,6 @@ i915_gem_execbuffer(struct drm_device *dev, void *data, | |||
| 2610 | 2670 | ||
| 2611 | i915_verify_inactive(dev, __FILE__, __LINE__); | 2671 | i915_verify_inactive(dev, __FILE__, __LINE__); |
| 2612 | 2672 | ||
| 2613 | /* Copy the new buffer offsets back to the user's exec list. */ | ||
| 2614 | ret = copy_to_user((struct drm_i915_relocation_entry __user *) | ||
| 2615 | (uintptr_t) args->buffers_ptr, | ||
| 2616 | exec_list, | ||
| 2617 | sizeof(*exec_list) * args->buffer_count); | ||
| 2618 | if (ret) | ||
| 2619 | DRM_ERROR("failed to copy %d exec entries " | ||
| 2620 | "back to user (%d)\n", | ||
| 2621 | args->buffer_count, ret); | ||
| 2622 | err: | 2673 | err: |
| 2623 | for (i = 0; i < pinned; i++) | 2674 | for (i = 0; i < pinned; i++) |
| 2624 | i915_gem_object_unpin(object_list[i]); | 2675 | i915_gem_object_unpin(object_list[i]); |
| @@ -2628,6 +2679,18 @@ err: | |||
| 2628 | 2679 | ||
| 2629 | mutex_unlock(&dev->struct_mutex); | 2680 | mutex_unlock(&dev->struct_mutex); |
| 2630 | 2681 | ||
| 2682 | if (!ret) { | ||
| 2683 | /* Copy the new buffer offsets back to the user's exec list. */ | ||
| 2684 | ret = copy_to_user((struct drm_i915_relocation_entry __user *) | ||
| 2685 | (uintptr_t) args->buffers_ptr, | ||
| 2686 | exec_list, | ||
| 2687 | sizeof(*exec_list) * args->buffer_count); | ||
| 2688 | if (ret) | ||
| 2689 | DRM_ERROR("failed to copy %d exec entries " | ||
| 2690 | "back to user (%d)\n", | ||
| 2691 | args->buffer_count, ret); | ||
| 2692 | } | ||
| 2693 | |||
| 2631 | pre_mutex_err: | 2694 | pre_mutex_err: |
| 2632 | drm_free(object_list, sizeof(*object_list) * args->buffer_count, | 2695 | drm_free(object_list, sizeof(*object_list) * args->buffer_count, |
| 2633 | DRM_MEM_DRIVER); | 2696 | DRM_MEM_DRIVER); |
| @@ -2652,6 +2715,14 @@ i915_gem_object_pin(struct drm_gem_object *obj, uint32_t alignment) | |||
| 2652 | DRM_ERROR("Failure to bind: %d", ret); | 2715 | DRM_ERROR("Failure to bind: %d", ret); |
| 2653 | return ret; | 2716 | return ret; |
| 2654 | } | 2717 | } |
| 2718 | /* | ||
| 2719 | * Pre-965 chips need a fence register set up in order to | ||
| 2720 | * properly handle tiled surfaces. | ||
| 2721 | */ | ||
| 2722 | if (!IS_I965G(dev) && | ||
| 2723 | obj_priv->fence_reg == I915_FENCE_REG_NONE && | ||
| 2724 | obj_priv->tiling_mode != I915_TILING_NONE) | ||
| 2725 | i915_gem_object_get_fence_reg(obj, true); | ||
| 2655 | } | 2726 | } |
| 2656 | obj_priv->pin_count++; | 2727 | obj_priv->pin_count++; |
| 2657 | 2728 | ||
| @@ -2723,6 +2794,7 @@ i915_gem_pin_ioctl(struct drm_device *dev, void *data, | |||
| 2723 | if (obj_priv->pin_filp != NULL && obj_priv->pin_filp != file_priv) { | 2794 | if (obj_priv->pin_filp != NULL && obj_priv->pin_filp != file_priv) { |
| 2724 | DRM_ERROR("Already pinned in i915_gem_pin_ioctl(): %d\n", | 2795 | DRM_ERROR("Already pinned in i915_gem_pin_ioctl(): %d\n", |
| 2725 | args->handle); | 2796 | args->handle); |
| 2797 | drm_gem_object_unreference(obj); | ||
| 2726 | mutex_unlock(&dev->struct_mutex); | 2798 | mutex_unlock(&dev->struct_mutex); |
| 2727 | return -EINVAL; | 2799 | return -EINVAL; |
| 2728 | } | 2800 | } |
| @@ -2803,6 +2875,13 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data, | |||
| 2803 | return -EBADF; | 2875 | return -EBADF; |
| 2804 | } | 2876 | } |
| 2805 | 2877 | ||
| 2878 | /* Update the active list for the hardware's current position. | ||
| 2879 | * Otherwise this only updates on a delayed timer or when irqs are | ||
| 2880 | * actually unmasked, and our working set ends up being larger than | ||
| 2881 | * required. | ||
| 2882 | */ | ||
| 2883 | i915_gem_retire_requests(dev); | ||
| 2884 | |||
| 2806 | obj_priv = obj->driver_private; | 2885 | obj_priv = obj->driver_private; |
| 2807 | /* Don't count being on the flushing list against the object being | 2886 | /* Don't count being on the flushing list against the object being |
| 2808 | * done. Otherwise, a buffer left on the flushing list but not getting | 2887 | * done. Otherwise, a buffer left on the flushing list but not getting |
| @@ -2855,9 +2934,6 @@ int i915_gem_init_object(struct drm_gem_object *obj) | |||
| 2855 | void i915_gem_free_object(struct drm_gem_object *obj) | 2934 | void i915_gem_free_object(struct drm_gem_object *obj) |
| 2856 | { | 2935 | { |
| 2857 | struct drm_device *dev = obj->dev; | 2936 | struct drm_device *dev = obj->dev; |
| 2858 | struct drm_gem_mm *mm = dev->mm_private; | ||
| 2859 | struct drm_map_list *list; | ||
| 2860 | struct drm_map *map; | ||
| 2861 | struct drm_i915_gem_object *obj_priv = obj->driver_private; | 2937 | struct drm_i915_gem_object *obj_priv = obj->driver_private; |
| 2862 | 2938 | ||
| 2863 | while (obj_priv->pin_count > 0) | 2939 | while (obj_priv->pin_count > 0) |
| @@ -2868,19 +2944,7 @@ void i915_gem_free_object(struct drm_gem_object *obj) | |||
| 2868 | 2944 | ||
| 2869 | i915_gem_object_unbind(obj); | 2945 | i915_gem_object_unbind(obj); |
| 2870 | 2946 | ||
| 2871 | list = &obj->map_list; | 2947 | i915_gem_free_mmap_offset(obj); |
| 2872 | drm_ht_remove_item(&mm->offset_hash, &list->hash); | ||
| 2873 | |||
| 2874 | if (list->file_offset_node) { | ||
| 2875 | drm_mm_put_block(list->file_offset_node); | ||
| 2876 | list->file_offset_node = NULL; | ||
| 2877 | } | ||
| 2878 | |||
| 2879 | map = list->map; | ||
| 2880 | if (map) { | ||
| 2881 | drm_free(map, sizeof(*map), DRM_MEM_DRIVER); | ||
| 2882 | list->map = NULL; | ||
| 2883 | } | ||
| 2884 | 2948 | ||
| 2885 | drm_free(obj_priv->page_cpu_valid, 1, DRM_MEM_DRIVER); | 2949 | drm_free(obj_priv->page_cpu_valid, 1, DRM_MEM_DRIVER); |
| 2886 | drm_free(obj->driver_private, 1, DRM_MEM_DRIVER); | 2950 | drm_free(obj->driver_private, 1, DRM_MEM_DRIVER); |
| @@ -2919,7 +2983,7 @@ i915_gem_evict_from_list(struct drm_device *dev, struct list_head *head) | |||
| 2919 | return 0; | 2983 | return 0; |
| 2920 | } | 2984 | } |
| 2921 | 2985 | ||
| 2922 | static int | 2986 | int |
| 2923 | i915_gem_idle(struct drm_device *dev) | 2987 | i915_gem_idle(struct drm_device *dev) |
| 2924 | { | 2988 | { |
| 2925 | drm_i915_private_t *dev_priv = dev->dev_private; | 2989 | drm_i915_private_t *dev_priv = dev->dev_private; |
| @@ -3065,6 +3129,7 @@ i915_gem_init_hws(struct drm_device *dev) | |||
| 3065 | if (dev_priv->hw_status_page == NULL) { | 3129 | if (dev_priv->hw_status_page == NULL) { |
| 3066 | DRM_ERROR("Failed to map status page.\n"); | 3130 | DRM_ERROR("Failed to map status page.\n"); |
| 3067 | memset(&dev_priv->hws_map, 0, sizeof(dev_priv->hws_map)); | 3131 | memset(&dev_priv->hws_map, 0, sizeof(dev_priv->hws_map)); |
| 3132 | i915_gem_object_unpin(obj); | ||
| 3068 | drm_gem_object_unreference(obj); | 3133 | drm_gem_object_unreference(obj); |
| 3069 | return -EINVAL; | 3134 | return -EINVAL; |
| 3070 | } | 3135 | } |
| @@ -3077,6 +3142,31 @@ i915_gem_init_hws(struct drm_device *dev) | |||
| 3077 | return 0; | 3142 | return 0; |
| 3078 | } | 3143 | } |
| 3079 | 3144 | ||
| 3145 | static void | ||
| 3146 | i915_gem_cleanup_hws(struct drm_device *dev) | ||
| 3147 | { | ||
| 3148 | drm_i915_private_t *dev_priv = dev->dev_private; | ||
| 3149 | struct drm_gem_object *obj; | ||
| 3150 | struct drm_i915_gem_object *obj_priv; | ||
| 3151 | |||
| 3152 | if (dev_priv->hws_obj == NULL) | ||
| 3153 | return; | ||
| 3154 | |||
| 3155 | obj = dev_priv->hws_obj; | ||
| 3156 | obj_priv = obj->driver_private; | ||
| 3157 | |||
| 3158 | kunmap(obj_priv->page_list[0]); | ||
| 3159 | i915_gem_object_unpin(obj); | ||
| 3160 | drm_gem_object_unreference(obj); | ||
| 3161 | dev_priv->hws_obj = NULL; | ||
| 3162 | |||
| 3163 | memset(&dev_priv->hws_map, 0, sizeof(dev_priv->hws_map)); | ||
| 3164 | dev_priv->hw_status_page = NULL; | ||
| 3165 | |||
| 3166 | /* Write high address into HWS_PGA when disabling. */ | ||
| 3167 | I915_WRITE(HWS_PGA, 0x1ffff000); | ||
| 3168 | } | ||
| 3169 | |||
| 3080 | int | 3170 | int |
| 3081 | i915_gem_init_ringbuffer(struct drm_device *dev) | 3171 | i915_gem_init_ringbuffer(struct drm_device *dev) |
| 3082 | { | 3172 | { |
| @@ -3094,6 +3184,7 @@ i915_gem_init_ringbuffer(struct drm_device *dev) | |||
| 3094 | obj = drm_gem_object_alloc(dev, 128 * 1024); | 3184 | obj = drm_gem_object_alloc(dev, 128 * 1024); |
| 3095 | if (obj == NULL) { | 3185 | if (obj == NULL) { |
| 3096 | DRM_ERROR("Failed to allocate ringbuffer\n"); | 3186 | DRM_ERROR("Failed to allocate ringbuffer\n"); |
| 3187 | i915_gem_cleanup_hws(dev); | ||
| 3097 | return -ENOMEM; | 3188 | return -ENOMEM; |
| 3098 | } | 3189 | } |
| 3099 | obj_priv = obj->driver_private; | 3190 | obj_priv = obj->driver_private; |
| @@ -3101,6 +3192,7 @@ i915_gem_init_ringbuffer(struct drm_device *dev) | |||
| 3101 | ret = i915_gem_object_pin(obj, 4096); | 3192 | ret = i915_gem_object_pin(obj, 4096); |
| 3102 | if (ret != 0) { | 3193 | if (ret != 0) { |
| 3103 | drm_gem_object_unreference(obj); | 3194 | drm_gem_object_unreference(obj); |
| 3195 | i915_gem_cleanup_hws(dev); | ||
| 3104 | return ret; | 3196 | return ret; |
| 3105 | } | 3197 | } |
| 3106 | 3198 | ||
| @@ -3118,7 +3210,9 @@ i915_gem_init_ringbuffer(struct drm_device *dev) | |||
| 3118 | if (ring->map.handle == NULL) { | 3210 | if (ring->map.handle == NULL) { |
| 3119 | DRM_ERROR("Failed to map ringbuffer.\n"); | 3211 | DRM_ERROR("Failed to map ringbuffer.\n"); |
| 3120 | memset(&dev_priv->ring, 0, sizeof(dev_priv->ring)); | 3212 | memset(&dev_priv->ring, 0, sizeof(dev_priv->ring)); |
| 3213 | i915_gem_object_unpin(obj); | ||
| 3121 | drm_gem_object_unreference(obj); | 3214 | drm_gem_object_unreference(obj); |
| 3215 | i915_gem_cleanup_hws(dev); | ||
| 3122 | return -EINVAL; | 3216 | return -EINVAL; |
| 3123 | } | 3217 | } |
| 3124 | ring->ring_obj = obj; | 3218 | ring->ring_obj = obj; |
| @@ -3198,20 +3292,7 @@ i915_gem_cleanup_ringbuffer(struct drm_device *dev) | |||
| 3198 | dev_priv->ring.ring_obj = NULL; | 3292 | dev_priv->ring.ring_obj = NULL; |
| 3199 | memset(&dev_priv->ring, 0, sizeof(dev_priv->ring)); | 3293 | memset(&dev_priv->ring, 0, sizeof(dev_priv->ring)); |
| 3200 | 3294 | ||
| 3201 | if (dev_priv->hws_obj != NULL) { | 3295 | i915_gem_cleanup_hws(dev); |
| 3202 | struct drm_gem_object *obj = dev_priv->hws_obj; | ||
| 3203 | struct drm_i915_gem_object *obj_priv = obj->driver_private; | ||
| 3204 | |||
| 3205 | kunmap(obj_priv->page_list[0]); | ||
| 3206 | i915_gem_object_unpin(obj); | ||
| 3207 | drm_gem_object_unreference(obj); | ||
| 3208 | dev_priv->hws_obj = NULL; | ||
| 3209 | memset(&dev_priv->hws_map, 0, sizeof(dev_priv->hws_map)); | ||
| 3210 | dev_priv->hw_status_page = NULL; | ||
| 3211 | |||
| 3212 | /* Write high address into HWS_PGA when disabling. */ | ||
| 3213 | I915_WRITE(HWS_PGA, 0x1ffff000); | ||
| 3214 | } | ||
| 3215 | } | 3296 | } |
| 3216 | 3297 | ||
| 3217 | int | 3298 | int |
| @@ -3229,10 +3310,6 @@ i915_gem_entervt_ioctl(struct drm_device *dev, void *data, | |||
| 3229 | dev_priv->mm.wedged = 0; | 3310 | dev_priv->mm.wedged = 0; |
| 3230 | } | 3311 | } |
| 3231 | 3312 | ||
| 3232 | dev_priv->mm.gtt_mapping = io_mapping_create_wc(dev->agp->base, | ||
| 3233 | dev->agp->agp_info.aper_size | ||
| 3234 | * 1024 * 1024); | ||
| 3235 | |||
| 3236 | mutex_lock(&dev->struct_mutex); | 3313 | mutex_lock(&dev->struct_mutex); |
| 3237 | dev_priv->mm.suspended = 0; | 3314 | dev_priv->mm.suspended = 0; |
| 3238 | 3315 | ||
| @@ -3255,7 +3332,6 @@ int | |||
| 3255 | i915_gem_leavevt_ioctl(struct drm_device *dev, void *data, | 3332 | i915_gem_leavevt_ioctl(struct drm_device *dev, void *data, |
| 3256 | struct drm_file *file_priv) | 3333 | struct drm_file *file_priv) |
| 3257 | { | 3334 | { |
| 3258 | drm_i915_private_t *dev_priv = dev->dev_private; | ||
| 3259 | int ret; | 3335 | int ret; |
| 3260 | 3336 | ||
| 3261 | if (drm_core_check_feature(dev, DRIVER_MODESET)) | 3337 | if (drm_core_check_feature(dev, DRIVER_MODESET)) |
| @@ -3264,7 +3340,6 @@ i915_gem_leavevt_ioctl(struct drm_device *dev, void *data, | |||
| 3264 | ret = i915_gem_idle(dev); | 3340 | ret = i915_gem_idle(dev); |
| 3265 | drm_irq_uninstall(dev); | 3341 | drm_irq_uninstall(dev); |
| 3266 | 3342 | ||
| 3267 | io_mapping_free(dev_priv->mm.gtt_mapping); | ||
| 3268 | return ret; | 3343 | return ret; |
| 3269 | } | 3344 | } |
| 3270 | 3345 | ||
| @@ -3273,6 +3348,9 @@ i915_gem_lastclose(struct drm_device *dev) | |||
| 3273 | { | 3348 | { |
| 3274 | int ret; | 3349 | int ret; |
| 3275 | 3350 | ||
| 3351 | if (drm_core_check_feature(dev, DRIVER_MODESET)) | ||
| 3352 | return; | ||
| 3353 | |||
| 3276 | ret = i915_gem_idle(dev); | 3354 | ret = i915_gem_idle(dev); |
| 3277 | if (ret) | 3355 | if (ret) |
| 3278 | DRM_ERROR("failed to idle hardware: %d\n", ret); | 3356 | DRM_ERROR("failed to idle hardware: %d\n", ret); |
| @@ -3294,7 +3372,7 @@ i915_gem_load(struct drm_device *dev) | |||
| 3294 | /* Old X drivers will take 0-2 for front, back, depth buffers */ | 3372 | /* Old X drivers will take 0-2 for front, back, depth buffers */ |
| 3295 | dev_priv->fence_reg_start = 3; | 3373 | dev_priv->fence_reg_start = 3; |
| 3296 | 3374 | ||
| 3297 | if (IS_I965G(dev)) | 3375 | if (IS_I965G(dev) || IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) |
| 3298 | dev_priv->num_fence_regs = 16; | 3376 | dev_priv->num_fence_regs = 16; |
| 3299 | else | 3377 | else |
| 3300 | dev_priv->num_fence_regs = 8; | 3378 | dev_priv->num_fence_regs = 8; |
| @@ -3470,7 +3548,7 @@ i915_gem_phys_pwrite(struct drm_device *dev, struct drm_gem_object *obj, | |||
| 3470 | user_data = (char __user *) (uintptr_t) args->data_ptr; | 3548 | user_data = (char __user *) (uintptr_t) args->data_ptr; |
| 3471 | obj_addr = obj_priv->phys_obj->handle->vaddr + args->offset; | 3549 | obj_addr = obj_priv->phys_obj->handle->vaddr + args->offset; |
| 3472 | 3550 | ||
| 3473 | DRM_ERROR("obj_addr %p, %lld\n", obj_addr, args->size); | 3551 | DRM_DEBUG("obj_addr %p, %lld\n", obj_addr, args->size); |
| 3474 | ret = copy_from_user(obj_addr, user_data, args->size); | 3552 | ret = copy_from_user(obj_addr, user_data, args->size); |
| 3475 | if (ret) | 3553 | if (ret) |
| 3476 | return -EFAULT; | 3554 | return -EFAULT; |
diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c index 241f39b7f460..7fb4191ef934 100644 --- a/drivers/gpu/drm/i915/i915_gem_tiling.c +++ b/drivers/gpu/drm/i915/i915_gem_tiling.c | |||
| @@ -173,6 +173,73 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev) | |||
| 173 | dev_priv->mm.bit_6_swizzle_y = swizzle_y; | 173 | dev_priv->mm.bit_6_swizzle_y = swizzle_y; |
| 174 | } | 174 | } |
| 175 | 175 | ||
| 176 | |||
| 177 | /** | ||
| 178 | * Returns the size of the fence for a tiled object of the given size. | ||
| 179 | */ | ||
| 180 | static int | ||
| 181 | i915_get_fence_size(struct drm_device *dev, int size) | ||
| 182 | { | ||
| 183 | int i; | ||
| 184 | int start; | ||
| 185 | |||
| 186 | if (IS_I965G(dev)) { | ||
| 187 | /* The 965 can have fences at any page boundary. */ | ||
| 188 | return ALIGN(size, 4096); | ||
| 189 | } else { | ||
| 190 | /* Align the size to a power of two greater than the smallest | ||
| 191 | * fence size. | ||
| 192 | */ | ||
| 193 | if (IS_I9XX(dev)) | ||
| 194 | start = 1024 * 1024; | ||
| 195 | else | ||
| 196 | start = 512 * 1024; | ||
| 197 | |||
| 198 | for (i = start; i < size; i <<= 1) | ||
| 199 | ; | ||
| 200 | |||
| 201 | return i; | ||
| 202 | } | ||
| 203 | } | ||
| 204 | |||
| 205 | /* Check pitch constriants for all chips & tiling formats */ | ||
| 206 | static bool | ||
| 207 | i915_tiling_ok(struct drm_device *dev, int stride, int size, int tiling_mode) | ||
| 208 | { | ||
| 209 | int tile_width; | ||
| 210 | |||
| 211 | /* Linear is always fine */ | ||
| 212 | if (tiling_mode == I915_TILING_NONE) | ||
| 213 | return true; | ||
| 214 | |||
| 215 | if (tiling_mode == I915_TILING_Y && HAS_128_BYTE_Y_TILING(dev)) | ||
| 216 | tile_width = 128; | ||
| 217 | else | ||
| 218 | tile_width = 512; | ||
| 219 | |||
| 220 | /* 965+ just needs multiples of tile width */ | ||
| 221 | if (IS_I965G(dev)) { | ||
| 222 | if (stride & (tile_width - 1)) | ||
| 223 | return false; | ||
| 224 | return true; | ||
| 225 | } | ||
| 226 | |||
| 227 | /* Pre-965 needs power of two tile widths */ | ||
| 228 | if (stride < tile_width) | ||
| 229 | return false; | ||
| 230 | |||
| 231 | if (stride & (stride - 1)) | ||
| 232 | return false; | ||
| 233 | |||
| 234 | /* We don't handle the aperture area covered by the fence being bigger | ||
| 235 | * than the object size. | ||
| 236 | */ | ||
| 237 | if (i915_get_fence_size(dev, size) != size) | ||
| 238 | return false; | ||
| 239 | |||
| 240 | return true; | ||
| 241 | } | ||
| 242 | |||
| 176 | /** | 243 | /** |
| 177 | * Sets the tiling mode of an object, returning the required swizzling of | 244 | * Sets the tiling mode of an object, returning the required swizzling of |
| 178 | * bit 6 of addresses in the object. | 245 | * bit 6 of addresses in the object. |
| @@ -191,6 +258,11 @@ i915_gem_set_tiling(struct drm_device *dev, void *data, | |||
| 191 | return -EINVAL; | 258 | return -EINVAL; |
| 192 | obj_priv = obj->driver_private; | 259 | obj_priv = obj->driver_private; |
| 193 | 260 | ||
| 261 | if (!i915_tiling_ok(dev, args->stride, obj->size, args->tiling_mode)) { | ||
| 262 | drm_gem_object_unreference(obj); | ||
| 263 | return -EINVAL; | ||
| 264 | } | ||
| 265 | |||
| 194 | mutex_lock(&dev->struct_mutex); | 266 | mutex_lock(&dev->struct_mutex); |
| 195 | 267 | ||
| 196 | if (args->tiling_mode == I915_TILING_NONE) { | 268 | if (args->tiling_mode == I915_TILING_NONE) { |
| @@ -207,12 +279,28 @@ i915_gem_set_tiling(struct drm_device *dev, void *data, | |||
| 207 | args->swizzle_mode = I915_BIT_6_SWIZZLE_NONE; | 279 | args->swizzle_mode = I915_BIT_6_SWIZZLE_NONE; |
| 208 | } | 280 | } |
| 209 | } | 281 | } |
| 210 | obj_priv->tiling_mode = args->tiling_mode; | 282 | if (args->tiling_mode != obj_priv->tiling_mode) { |
| 211 | obj_priv->stride = args->stride; | 283 | int ret; |
| 212 | 284 | ||
| 213 | mutex_unlock(&dev->struct_mutex); | 285 | /* Unbind the object, as switching tiling means we're |
| 286 | * switching the cache organization due to fencing, probably. | ||
| 287 | */ | ||
| 288 | ret = i915_gem_object_unbind(obj); | ||
| 289 | if (ret != 0) { | ||
| 290 | WARN(ret != -ERESTARTSYS, | ||
| 291 | "failed to unbind object for tiling switch"); | ||
| 292 | args->tiling_mode = obj_priv->tiling_mode; | ||
| 293 | mutex_unlock(&dev->struct_mutex); | ||
| 294 | drm_gem_object_unreference(obj); | ||
| 295 | |||
| 296 | return ret; | ||
| 297 | } | ||
| 298 | obj_priv->tiling_mode = args->tiling_mode; | ||
| 299 | } | ||
| 300 | obj_priv->stride = args->stride; | ||
| 214 | 301 | ||
| 215 | drm_gem_object_unreference(obj); | 302 | drm_gem_object_unreference(obj); |
| 303 | mutex_unlock(&dev->struct_mutex); | ||
| 216 | 304 | ||
| 217 | return 0; | 305 | return 0; |
| 218 | } | 306 | } |
| @@ -251,9 +339,8 @@ i915_gem_get_tiling(struct drm_device *dev, void *data, | |||
| 251 | DRM_ERROR("unknown tiling mode\n"); | 339 | DRM_ERROR("unknown tiling mode\n"); |
| 252 | } | 340 | } |
| 253 | 341 | ||
| 254 | mutex_unlock(&dev->struct_mutex); | ||
| 255 | |||
| 256 | drm_gem_object_unreference(obj); | 342 | drm_gem_object_unreference(obj); |
| 343 | mutex_unlock(&dev->struct_mutex); | ||
| 257 | 344 | ||
| 258 | return 0; | 345 | return 0; |
| 259 | } | 346 | } |
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 6290219de6c8..87b6b603469e 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
| @@ -174,6 +174,19 @@ u32 i915_get_vblank_counter(struct drm_device *dev, int pipe) | |||
| 174 | return count; | 174 | return count; |
| 175 | } | 175 | } |
| 176 | 176 | ||
| 177 | u32 gm45_get_vblank_counter(struct drm_device *dev, int pipe) | ||
| 178 | { | ||
| 179 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | ||
| 180 | int reg = pipe ? PIPEB_FRMCOUNT_GM45 : PIPEA_FRMCOUNT_GM45; | ||
| 181 | |||
| 182 | if (!i915_pipe_enabled(dev, pipe)) { | ||
| 183 | DRM_ERROR("trying to get vblank count for disabled pipe %d\n", pipe); | ||
| 184 | return 0; | ||
| 185 | } | ||
| 186 | |||
| 187 | return I915_READ(reg); | ||
| 188 | } | ||
| 189 | |||
| 177 | irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS) | 190 | irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS) |
| 178 | { | 191 | { |
| 179 | struct drm_device *dev = (struct drm_device *) arg; | 192 | struct drm_device *dev = (struct drm_device *) arg; |
| @@ -370,12 +383,13 @@ int i915_irq_emit(struct drm_device *dev, void *data, | |||
| 370 | drm_i915_irq_emit_t *emit = data; | 383 | drm_i915_irq_emit_t *emit = data; |
| 371 | int result; | 384 | int result; |
| 372 | 385 | ||
| 373 | RING_LOCK_TEST_WITH_RETURN(dev, file_priv); | ||
| 374 | |||
| 375 | if (!dev_priv) { | 386 | if (!dev_priv) { |
| 376 | DRM_ERROR("called with no initialization\n"); | 387 | DRM_ERROR("called with no initialization\n"); |
| 377 | return -EINVAL; | 388 | return -EINVAL; |
| 378 | } | 389 | } |
| 390 | |||
| 391 | RING_LOCK_TEST_WITH_RETURN(dev, file_priv); | ||
| 392 | |||
| 379 | mutex_lock(&dev->struct_mutex); | 393 | mutex_lock(&dev->struct_mutex); |
| 380 | result = i915_emit_irq(dev); | 394 | result = i915_emit_irq(dev); |
| 381 | mutex_unlock(&dev->struct_mutex); | 395 | mutex_unlock(&dev->struct_mutex); |
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 273162579e1b..9d6539a868b3 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
| @@ -186,12 +186,12 @@ | |||
| 186 | #define FENCE_REG_830_0 0x2000 | 186 | #define FENCE_REG_830_0 0x2000 |
| 187 | #define I830_FENCE_START_MASK 0x07f80000 | 187 | #define I830_FENCE_START_MASK 0x07f80000 |
| 188 | #define I830_FENCE_TILING_Y_SHIFT 12 | 188 | #define I830_FENCE_TILING_Y_SHIFT 12 |
| 189 | #define I830_FENCE_SIZE_BITS(size) ((get_order(size >> 19) - 1) << 8) | 189 | #define I830_FENCE_SIZE_BITS(size) ((ffs((size) >> 19) - 1) << 8) |
| 190 | #define I830_FENCE_PITCH_SHIFT 4 | 190 | #define I830_FENCE_PITCH_SHIFT 4 |
| 191 | #define I830_FENCE_REG_VALID (1<<0) | 191 | #define I830_FENCE_REG_VALID (1<<0) |
| 192 | 192 | ||
| 193 | #define I915_FENCE_START_MASK 0x0ff00000 | 193 | #define I915_FENCE_START_MASK 0x0ff00000 |
| 194 | #define I915_FENCE_SIZE_BITS(size) ((get_order(size >> 20) - 1) << 8) | 194 | #define I915_FENCE_SIZE_BITS(size) ((ffs((size) >> 20) - 1) << 8) |
| 195 | 195 | ||
| 196 | #define FENCE_REG_965_0 0x03000 | 196 | #define FENCE_REG_965_0 0x03000 |
| 197 | #define I965_FENCE_PITCH_SHIFT 2 | 197 | #define I965_FENCE_PITCH_SHIFT 2 |
| @@ -1371,6 +1371,9 @@ | |||
| 1371 | #define PIPE_FRAME_LOW_SHIFT 24 | 1371 | #define PIPE_FRAME_LOW_SHIFT 24 |
| 1372 | #define PIPE_PIXEL_MASK 0x00ffffff | 1372 | #define PIPE_PIXEL_MASK 0x00ffffff |
| 1373 | #define PIPE_PIXEL_SHIFT 0 | 1373 | #define PIPE_PIXEL_SHIFT 0 |
| 1374 | /* GM45+ just has to be different */ | ||
| 1375 | #define PIPEA_FRMCOUNT_GM45 0x70040 | ||
| 1376 | #define PIPEA_FLIPCOUNT_GM45 0x70044 | ||
| 1374 | 1377 | ||
| 1375 | /* Cursor A & B regs */ | 1378 | /* Cursor A & B regs */ |
| 1376 | #define CURACNTR 0x70080 | 1379 | #define CURACNTR 0x70080 |
| @@ -1439,6 +1442,9 @@ | |||
| 1439 | #define PIPEBSTAT 0x71024 | 1442 | #define PIPEBSTAT 0x71024 |
| 1440 | #define PIPEBFRAMEHIGH 0x71040 | 1443 | #define PIPEBFRAMEHIGH 0x71040 |
| 1441 | #define PIPEBFRAMEPIXEL 0x71044 | 1444 | #define PIPEBFRAMEPIXEL 0x71044 |
| 1445 | #define PIPEB_FRMCOUNT_GM45 0x71040 | ||
| 1446 | #define PIPEB_FLIPCOUNT_GM45 0x71044 | ||
| 1447 | |||
| 1442 | 1448 | ||
| 1443 | /* Display B control */ | 1449 | /* Display B control */ |
| 1444 | #define DSPBCNTR 0x71180 | 1450 | #define DSPBCNTR 0x71180 |
diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c index 4ca82a025525..fc28e2bbd542 100644 --- a/drivers/gpu/drm/i915/intel_bios.c +++ b/drivers/gpu/drm/i915/intel_bios.c | |||
| @@ -111,6 +111,12 @@ parse_panel_data(struct drm_i915_private *dev_priv, struct bdb_header *bdb) | |||
| 111 | panel_fixed_mode->clock = dvo_timing->clock * 10; | 111 | panel_fixed_mode->clock = dvo_timing->clock * 10; |
| 112 | panel_fixed_mode->type = DRM_MODE_TYPE_PREFERRED; | 112 | panel_fixed_mode->type = DRM_MODE_TYPE_PREFERRED; |
| 113 | 113 | ||
| 114 | /* Some VBTs have bogus h/vtotal values */ | ||
| 115 | if (panel_fixed_mode->hsync_end > panel_fixed_mode->htotal) | ||
| 116 | panel_fixed_mode->htotal = panel_fixed_mode->hsync_end + 1; | ||
| 117 | if (panel_fixed_mode->vsync_end > panel_fixed_mode->vtotal) | ||
| 118 | panel_fixed_mode->vtotal = panel_fixed_mode->vsync_end + 1; | ||
| 119 | |||
| 114 | drm_mode_set_name(panel_fixed_mode); | 120 | drm_mode_set_name(panel_fixed_mode); |
| 115 | 121 | ||
| 116 | dev_priv->vbt_mode = panel_fixed_mode; | 122 | dev_priv->vbt_mode = panel_fixed_mode; |
| @@ -135,6 +141,14 @@ parse_general_features(struct drm_i915_private *dev_priv, | |||
| 135 | if (general) { | 141 | if (general) { |
| 136 | dev_priv->int_tv_support = general->int_tv_support; | 142 | dev_priv->int_tv_support = general->int_tv_support; |
| 137 | dev_priv->int_crt_support = general->int_crt_support; | 143 | dev_priv->int_crt_support = general->int_crt_support; |
| 144 | dev_priv->lvds_use_ssc = general->enable_ssc; | ||
| 145 | |||
| 146 | if (dev_priv->lvds_use_ssc) { | ||
| 147 | if (IS_I855(dev_priv->dev)) | ||
| 148 | dev_priv->lvds_ssc_freq = general->ssc_freq ? 66 : 48; | ||
| 149 | else | ||
| 150 | dev_priv->lvds_ssc_freq = general->ssc_freq ? 100 : 96; | ||
| 151 | } | ||
| 138 | } | 152 | } |
| 139 | } | 153 | } |
| 140 | 154 | ||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 31c3732b7a69..a2834276cb38 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -90,12 +90,12 @@ typedef struct { | |||
| 90 | #define I9XX_DOT_MAX 400000 | 90 | #define I9XX_DOT_MAX 400000 |
| 91 | #define I9XX_VCO_MIN 1400000 | 91 | #define I9XX_VCO_MIN 1400000 |
| 92 | #define I9XX_VCO_MAX 2800000 | 92 | #define I9XX_VCO_MAX 2800000 |
| 93 | #define I9XX_N_MIN 3 | 93 | #define I9XX_N_MIN 1 |
| 94 | #define I9XX_N_MAX 8 | 94 | #define I9XX_N_MAX 6 |
| 95 | #define I9XX_M_MIN 70 | 95 | #define I9XX_M_MIN 70 |
| 96 | #define I9XX_M_MAX 120 | 96 | #define I9XX_M_MAX 120 |
| 97 | #define I9XX_M1_MIN 10 | 97 | #define I9XX_M1_MIN 10 |
| 98 | #define I9XX_M1_MAX 20 | 98 | #define I9XX_M1_MAX 22 |
| 99 | #define I9XX_M2_MIN 5 | 99 | #define I9XX_M2_MIN 5 |
| 100 | #define I9XX_M2_MAX 9 | 100 | #define I9XX_M2_MAX 9 |
| 101 | #define I9XX_P_SDVO_DAC_MIN 5 | 101 | #define I9XX_P_SDVO_DAC_MIN 5 |
| @@ -189,9 +189,7 @@ static const intel_limit_t *intel_limit(struct drm_crtc *crtc) | |||
| 189 | return limit; | 189 | return limit; |
| 190 | } | 190 | } |
| 191 | 191 | ||
| 192 | /** Derive the pixel clock for the given refclk and divisors for 8xx chips. */ | 192 | static void intel_clock(int refclk, intel_clock_t *clock) |
| 193 | |||
| 194 | static void i8xx_clock(int refclk, intel_clock_t *clock) | ||
| 195 | { | 193 | { |
| 196 | clock->m = 5 * (clock->m1 + 2) + (clock->m2 + 2); | 194 | clock->m = 5 * (clock->m1 + 2) + (clock->m2 + 2); |
| 197 | clock->p = clock->p1 * clock->p2; | 195 | clock->p = clock->p1 * clock->p2; |
| @@ -199,25 +197,6 @@ static void i8xx_clock(int refclk, intel_clock_t *clock) | |||
| 199 | clock->dot = clock->vco / clock->p; | 197 | clock->dot = clock->vco / clock->p; |
| 200 | } | 198 | } |
| 201 | 199 | ||
| 202 | /** Derive the pixel clock for the given refclk and divisors for 9xx chips. */ | ||
| 203 | |||
| 204 | static void i9xx_clock(int refclk, intel_clock_t *clock) | ||
| 205 | { | ||
| 206 | clock->m = 5 * (clock->m1 + 2) + (clock->m2 + 2); | ||
| 207 | clock->p = clock->p1 * clock->p2; | ||
| 208 | clock->vco = refclk * clock->m / (clock->n + 2); | ||
| 209 | clock->dot = clock->vco / clock->p; | ||
| 210 | } | ||
| 211 | |||
| 212 | static void intel_clock(struct drm_device *dev, int refclk, | ||
| 213 | intel_clock_t *clock) | ||
| 214 | { | ||
| 215 | if (IS_I9XX(dev)) | ||
| 216 | i9xx_clock (refclk, clock); | ||
| 217 | else | ||
| 218 | i8xx_clock (refclk, clock); | ||
| 219 | } | ||
| 220 | |||
| 221 | /** | 200 | /** |
| 222 | * Returns whether any output on the specified pipe is of the specified type | 201 | * Returns whether any output on the specified pipe is of the specified type |
| 223 | */ | 202 | */ |
| @@ -238,7 +217,7 @@ bool intel_pipe_has_type (struct drm_crtc *crtc, int type) | |||
| 238 | return false; | 217 | return false; |
| 239 | } | 218 | } |
| 240 | 219 | ||
| 241 | #define INTELPllInvalid(s) { /* ErrorF (s) */; return false; } | 220 | #define INTELPllInvalid(s) do { /* DRM_DEBUG(s); */ return false; } while (0) |
| 242 | /** | 221 | /** |
| 243 | * Returns whether the given set of divisors are valid for a given refclk with | 222 | * Returns whether the given set of divisors are valid for a given refclk with |
| 244 | * the given connectors. | 223 | * the given connectors. |
| @@ -318,7 +297,7 @@ static bool intel_find_best_PLL(struct drm_crtc *crtc, int target, | |||
| 318 | clock.p1 <= limit->p1.max; clock.p1++) { | 297 | clock.p1 <= limit->p1.max; clock.p1++) { |
| 319 | int this_err; | 298 | int this_err; |
| 320 | 299 | ||
| 321 | intel_clock(dev, refclk, &clock); | 300 | intel_clock(refclk, &clock); |
| 322 | 301 | ||
| 323 | if (!intel_PLL_is_valid(crtc, &clock)) | 302 | if (!intel_PLL_is_valid(crtc, &clock)) |
| 324 | continue; | 303 | continue; |
| @@ -343,7 +322,7 @@ intel_wait_for_vblank(struct drm_device *dev) | |||
| 343 | udelay(20000); | 322 | udelay(20000); |
| 344 | } | 323 | } |
| 345 | 324 | ||
| 346 | static void | 325 | static int |
| 347 | intel_pipe_set_base(struct drm_crtc *crtc, int x, int y, | 326 | intel_pipe_set_base(struct drm_crtc *crtc, int x, int y, |
| 348 | struct drm_framebuffer *old_fb) | 327 | struct drm_framebuffer *old_fb) |
| 349 | { | 328 | { |
| @@ -361,11 +340,21 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y, | |||
| 361 | int dspstride = (pipe == 0) ? DSPASTRIDE : DSPBSTRIDE; | 340 | int dspstride = (pipe == 0) ? DSPASTRIDE : DSPBSTRIDE; |
| 362 | int dspcntr_reg = (pipe == 0) ? DSPACNTR : DSPBCNTR; | 341 | int dspcntr_reg = (pipe == 0) ? DSPACNTR : DSPBCNTR; |
| 363 | u32 dspcntr, alignment; | 342 | u32 dspcntr, alignment; |
| 343 | int ret; | ||
| 364 | 344 | ||
| 365 | /* no fb bound */ | 345 | /* no fb bound */ |
| 366 | if (!crtc->fb) { | 346 | if (!crtc->fb) { |
| 367 | DRM_DEBUG("No FB bound\n"); | 347 | DRM_DEBUG("No FB bound\n"); |
| 368 | return; | 348 | return 0; |
| 349 | } | ||
| 350 | |||
| 351 | switch (pipe) { | ||
| 352 | case 0: | ||
| 353 | case 1: | ||
| 354 | break; | ||
| 355 | default: | ||
| 356 | DRM_ERROR("Can't update pipe %d in SAREA\n", pipe); | ||
| 357 | return -EINVAL; | ||
| 369 | } | 358 | } |
| 370 | 359 | ||
| 371 | intel_fb = to_intel_framebuffer(crtc->fb); | 360 | intel_fb = to_intel_framebuffer(crtc->fb); |
| @@ -377,28 +366,30 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y, | |||
| 377 | alignment = 64 * 1024; | 366 | alignment = 64 * 1024; |
| 378 | break; | 367 | break; |
| 379 | case I915_TILING_X: | 368 | case I915_TILING_X: |
| 380 | if (IS_I9XX(dev)) | 369 | /* pin() will align the object as required by fence */ |
| 381 | alignment = 1024 * 1024; | 370 | alignment = 0; |
| 382 | else | ||
| 383 | alignment = 512 * 1024; | ||
| 384 | break; | 371 | break; |
| 385 | case I915_TILING_Y: | 372 | case I915_TILING_Y: |
| 386 | /* FIXME: Is this true? */ | 373 | /* FIXME: Is this true? */ |
| 387 | DRM_ERROR("Y tiled not allowed for scan out buffers\n"); | 374 | DRM_ERROR("Y tiled not allowed for scan out buffers\n"); |
| 388 | return; | 375 | return -EINVAL; |
| 389 | default: | 376 | default: |
| 390 | BUG(); | 377 | BUG(); |
| 391 | } | 378 | } |
| 392 | 379 | ||
| 393 | if (i915_gem_object_pin(intel_fb->obj, alignment)) | 380 | mutex_lock(&dev->struct_mutex); |
| 394 | return; | 381 | ret = i915_gem_object_pin(intel_fb->obj, alignment); |
| 395 | 382 | if (ret != 0) { | |
| 396 | i915_gem_object_set_to_gtt_domain(intel_fb->obj, 1); | 383 | mutex_unlock(&dev->struct_mutex); |
| 397 | 384 | return ret; | |
| 398 | Start = obj_priv->gtt_offset; | 385 | } |
| 399 | Offset = y * crtc->fb->pitch + x * (crtc->fb->bits_per_pixel / 8); | ||
| 400 | 386 | ||
| 401 | I915_WRITE(dspstride, crtc->fb->pitch); | 387 | ret = i915_gem_object_set_to_gtt_domain(intel_fb->obj, 1); |
| 388 | if (ret != 0) { | ||
| 389 | i915_gem_object_unpin(intel_fb->obj); | ||
| 390 | mutex_unlock(&dev->struct_mutex); | ||
| 391 | return ret; | ||
| 392 | } | ||
| 402 | 393 | ||
| 403 | dspcntr = I915_READ(dspcntr_reg); | 394 | dspcntr = I915_READ(dspcntr_reg); |
| 404 | /* Mask out pixel format bits in case we change it */ | 395 | /* Mask out pixel format bits in case we change it */ |
| @@ -419,11 +410,17 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y, | |||
| 419 | break; | 410 | break; |
| 420 | default: | 411 | default: |
| 421 | DRM_ERROR("Unknown color depth\n"); | 412 | DRM_ERROR("Unknown color depth\n"); |
| 422 | return; | 413 | i915_gem_object_unpin(intel_fb->obj); |
| 414 | mutex_unlock(&dev->struct_mutex); | ||
| 415 | return -EINVAL; | ||
| 423 | } | 416 | } |
| 424 | I915_WRITE(dspcntr_reg, dspcntr); | 417 | I915_WRITE(dspcntr_reg, dspcntr); |
| 425 | 418 | ||
| 419 | Start = obj_priv->gtt_offset; | ||
| 420 | Offset = y * crtc->fb->pitch + x * (crtc->fb->bits_per_pixel / 8); | ||
| 421 | |||
| 426 | DRM_DEBUG("Writing base %08lX %08lX %d %d\n", Start, Offset, x, y); | 422 | DRM_DEBUG("Writing base %08lX %08lX %d %d\n", Start, Offset, x, y); |
| 423 | I915_WRITE(dspstride, crtc->fb->pitch); | ||
| 427 | if (IS_I965G(dev)) { | 424 | if (IS_I965G(dev)) { |
| 428 | I915_WRITE(dspbase, Offset); | 425 | I915_WRITE(dspbase, Offset); |
| 429 | I915_READ(dspbase); | 426 | I915_READ(dspbase); |
| @@ -440,27 +437,24 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y, | |||
| 440 | intel_fb = to_intel_framebuffer(old_fb); | 437 | intel_fb = to_intel_framebuffer(old_fb); |
| 441 | i915_gem_object_unpin(intel_fb->obj); | 438 | i915_gem_object_unpin(intel_fb->obj); |
| 442 | } | 439 | } |
| 440 | mutex_unlock(&dev->struct_mutex); | ||
| 443 | 441 | ||
| 444 | if (!dev->primary->master) | 442 | if (!dev->primary->master) |
| 445 | return; | 443 | return 0; |
| 446 | 444 | ||
| 447 | master_priv = dev->primary->master->driver_priv; | 445 | master_priv = dev->primary->master->driver_priv; |
| 448 | if (!master_priv->sarea_priv) | 446 | if (!master_priv->sarea_priv) |
| 449 | return; | 447 | return 0; |
| 450 | 448 | ||
| 451 | switch (pipe) { | 449 | if (pipe) { |
| 452 | case 0: | ||
| 453 | master_priv->sarea_priv->pipeA_x = x; | ||
| 454 | master_priv->sarea_priv->pipeA_y = y; | ||
| 455 | break; | ||
| 456 | case 1: | ||
| 457 | master_priv->sarea_priv->pipeB_x = x; | 450 | master_priv->sarea_priv->pipeB_x = x; |
| 458 | master_priv->sarea_priv->pipeB_y = y; | 451 | master_priv->sarea_priv->pipeB_y = y; |
| 459 | break; | 452 | } else { |
| 460 | default: | 453 | master_priv->sarea_priv->pipeA_x = x; |
| 461 | DRM_ERROR("Can't update pipe %d in SAREA\n", pipe); | 454 | master_priv->sarea_priv->pipeA_y = y; |
| 462 | break; | ||
| 463 | } | 455 | } |
| 456 | |||
| 457 | return 0; | ||
| 464 | } | 458 | } |
| 465 | 459 | ||
| 466 | 460 | ||
| @@ -708,11 +702,11 @@ static int intel_panel_fitter_pipe (struct drm_device *dev) | |||
| 708 | return 1; | 702 | return 1; |
| 709 | } | 703 | } |
| 710 | 704 | ||
| 711 | static void intel_crtc_mode_set(struct drm_crtc *crtc, | 705 | static int intel_crtc_mode_set(struct drm_crtc *crtc, |
| 712 | struct drm_display_mode *mode, | 706 | struct drm_display_mode *mode, |
| 713 | struct drm_display_mode *adjusted_mode, | 707 | struct drm_display_mode *adjusted_mode, |
| 714 | int x, int y, | 708 | int x, int y, |
| 715 | struct drm_framebuffer *old_fb) | 709 | struct drm_framebuffer *old_fb) |
| 716 | { | 710 | { |
| 717 | struct drm_device *dev = crtc->dev; | 711 | struct drm_device *dev = crtc->dev; |
| 718 | struct drm_i915_private *dev_priv = dev->dev_private; | 712 | struct drm_i915_private *dev_priv = dev->dev_private; |
| @@ -732,13 +726,14 @@ static void intel_crtc_mode_set(struct drm_crtc *crtc, | |||
| 732 | int dspsize_reg = (pipe == 0) ? DSPASIZE : DSPBSIZE; | 726 | int dspsize_reg = (pipe == 0) ? DSPASIZE : DSPBSIZE; |
| 733 | int dsppos_reg = (pipe == 0) ? DSPAPOS : DSPBPOS; | 727 | int dsppos_reg = (pipe == 0) ? DSPAPOS : DSPBPOS; |
| 734 | int pipesrc_reg = (pipe == 0) ? PIPEASRC : PIPEBSRC; | 728 | int pipesrc_reg = (pipe == 0) ? PIPEASRC : PIPEBSRC; |
| 735 | int refclk; | 729 | int refclk, num_outputs = 0; |
| 736 | intel_clock_t clock; | 730 | intel_clock_t clock; |
| 737 | u32 dpll = 0, fp = 0, dspcntr, pipeconf; | 731 | u32 dpll = 0, fp = 0, dspcntr, pipeconf; |
| 738 | bool ok, is_sdvo = false, is_dvo = false; | 732 | bool ok, is_sdvo = false, is_dvo = false; |
| 739 | bool is_crt = false, is_lvds = false, is_tv = false; | 733 | bool is_crt = false, is_lvds = false, is_tv = false; |
| 740 | struct drm_mode_config *mode_config = &dev->mode_config; | 734 | struct drm_mode_config *mode_config = &dev->mode_config; |
| 741 | struct drm_connector *connector; | 735 | struct drm_connector *connector; |
| 736 | int ret; | ||
| 742 | 737 | ||
| 743 | drm_vblank_pre_modeset(dev, pipe); | 738 | drm_vblank_pre_modeset(dev, pipe); |
| 744 | 739 | ||
| @@ -755,6 +750,8 @@ static void intel_crtc_mode_set(struct drm_crtc *crtc, | |||
| 755 | case INTEL_OUTPUT_SDVO: | 750 | case INTEL_OUTPUT_SDVO: |
| 756 | case INTEL_OUTPUT_HDMI: | 751 | case INTEL_OUTPUT_HDMI: |
| 757 | is_sdvo = true; | 752 | is_sdvo = true; |
| 753 | if (intel_output->needs_tv_clock) | ||
| 754 | is_tv = true; | ||
| 758 | break; | 755 | break; |
| 759 | case INTEL_OUTPUT_DVO: | 756 | case INTEL_OUTPUT_DVO: |
| 760 | is_dvo = true; | 757 | is_dvo = true; |
| @@ -766,9 +763,14 @@ static void intel_crtc_mode_set(struct drm_crtc *crtc, | |||
| 766 | is_crt = true; | 763 | is_crt = true; |
| 767 | break; | 764 | break; |
| 768 | } | 765 | } |
| 766 | |||
| 767 | num_outputs++; | ||
| 769 | } | 768 | } |
| 770 | 769 | ||
| 771 | if (IS_I9XX(dev)) { | 770 | if (is_lvds && dev_priv->lvds_use_ssc && num_outputs < 2) { |
| 771 | refclk = dev_priv->lvds_ssc_freq * 1000; | ||
| 772 | DRM_DEBUG("using SSC reference clock of %d MHz\n", refclk / 1000); | ||
| 773 | } else if (IS_I9XX(dev)) { | ||
| 772 | refclk = 96000; | 774 | refclk = 96000; |
| 773 | } else { | 775 | } else { |
| 774 | refclk = 48000; | 776 | refclk = 48000; |
| @@ -777,7 +779,7 @@ static void intel_crtc_mode_set(struct drm_crtc *crtc, | |||
| 777 | ok = intel_find_best_PLL(crtc, adjusted_mode->clock, refclk, &clock); | 779 | ok = intel_find_best_PLL(crtc, adjusted_mode->clock, refclk, &clock); |
| 778 | if (!ok) { | 780 | if (!ok) { |
| 779 | DRM_ERROR("Couldn't find PLL settings for mode!\n"); | 781 | DRM_ERROR("Couldn't find PLL settings for mode!\n"); |
| 780 | return; | 782 | return -EINVAL; |
| 781 | } | 783 | } |
| 782 | 784 | ||
| 783 | fp = clock.n << 16 | clock.m1 << 8 | clock.m2; | 785 | fp = clock.n << 16 | clock.m1 << 8 | clock.m2; |
| @@ -827,11 +829,14 @@ static void intel_crtc_mode_set(struct drm_crtc *crtc, | |||
| 827 | } | 829 | } |
| 828 | } | 830 | } |
| 829 | 831 | ||
| 830 | if (is_tv) { | 832 | if (is_sdvo && is_tv) |
| 833 | dpll |= PLL_REF_INPUT_TVCLKINBC; | ||
| 834 | else if (is_tv) | ||
| 831 | /* XXX: just matching BIOS for now */ | 835 | /* XXX: just matching BIOS for now */ |
| 832 | /* dpll |= PLL_REF_INPUT_TVCLKINBC; */ | 836 | /* dpll |= PLL_REF_INPUT_TVCLKINBC; */ |
| 833 | dpll |= 3; | 837 | dpll |= 3; |
| 834 | } | 838 | else if (is_lvds && dev_priv->lvds_use_ssc && num_outputs < 2) |
| 839 | dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN; | ||
| 835 | else | 840 | else |
| 836 | dpll |= PLL_REF_INPUT_DREFCLK; | 841 | dpll |= PLL_REF_INPUT_DREFCLK; |
| 837 | 842 | ||
| @@ -948,9 +953,13 @@ static void intel_crtc_mode_set(struct drm_crtc *crtc, | |||
| 948 | I915_WRITE(dspcntr_reg, dspcntr); | 953 | I915_WRITE(dspcntr_reg, dspcntr); |
| 949 | 954 | ||
| 950 | /* Flush the plane changes */ | 955 | /* Flush the plane changes */ |
| 951 | intel_pipe_set_base(crtc, x, y, old_fb); | 956 | ret = intel_pipe_set_base(crtc, x, y, old_fb); |
| 957 | if (ret != 0) | ||
| 958 | return ret; | ||
| 952 | 959 | ||
| 953 | drm_vblank_post_modeset(dev, pipe); | 960 | drm_vblank_post_modeset(dev, pipe); |
| 961 | |||
| 962 | return 0; | ||
| 954 | } | 963 | } |
| 955 | 964 | ||
| 956 | /** Loads the palette/gamma unit for the CRTC with the prepared values */ | 965 | /** Loads the palette/gamma unit for the CRTC with the prepared values */ |
| @@ -999,6 +1008,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc, | |||
| 999 | temp = CURSOR_MODE_DISABLE; | 1008 | temp = CURSOR_MODE_DISABLE; |
| 1000 | addr = 0; | 1009 | addr = 0; |
| 1001 | bo = NULL; | 1010 | bo = NULL; |
| 1011 | mutex_lock(&dev->struct_mutex); | ||
| 1002 | goto finish; | 1012 | goto finish; |
| 1003 | } | 1013 | } |
| 1004 | 1014 | ||
| @@ -1021,18 +1031,19 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc, | |||
| 1021 | } | 1031 | } |
| 1022 | 1032 | ||
| 1023 | /* we only need to pin inside GTT if cursor is non-phy */ | 1033 | /* we only need to pin inside GTT if cursor is non-phy */ |
| 1034 | mutex_lock(&dev->struct_mutex); | ||
| 1024 | if (!dev_priv->cursor_needs_physical) { | 1035 | if (!dev_priv->cursor_needs_physical) { |
| 1025 | ret = i915_gem_object_pin(bo, PAGE_SIZE); | 1036 | ret = i915_gem_object_pin(bo, PAGE_SIZE); |
| 1026 | if (ret) { | 1037 | if (ret) { |
| 1027 | DRM_ERROR("failed to pin cursor bo\n"); | 1038 | DRM_ERROR("failed to pin cursor bo\n"); |
| 1028 | goto fail; | 1039 | goto fail_locked; |
| 1029 | } | 1040 | } |
| 1030 | addr = obj_priv->gtt_offset; | 1041 | addr = obj_priv->gtt_offset; |
| 1031 | } else { | 1042 | } else { |
| 1032 | ret = i915_gem_attach_phys_object(dev, bo, (pipe == 0) ? I915_GEM_PHYS_CURSOR_0 : I915_GEM_PHYS_CURSOR_1); | 1043 | ret = i915_gem_attach_phys_object(dev, bo, (pipe == 0) ? I915_GEM_PHYS_CURSOR_0 : I915_GEM_PHYS_CURSOR_1); |
| 1033 | if (ret) { | 1044 | if (ret) { |
| 1034 | DRM_ERROR("failed to attach phys object\n"); | 1045 | DRM_ERROR("failed to attach phys object\n"); |
| 1035 | goto fail; | 1046 | goto fail_locked; |
| 1036 | } | 1047 | } |
| 1037 | addr = obj_priv->phys_obj->handle->busaddr; | 1048 | addr = obj_priv->phys_obj->handle->busaddr; |
| 1038 | } | 1049 | } |
| @@ -1052,10 +1063,9 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc, | |||
| 1052 | i915_gem_detach_phys_object(dev, intel_crtc->cursor_bo); | 1063 | i915_gem_detach_phys_object(dev, intel_crtc->cursor_bo); |
| 1053 | } else | 1064 | } else |
| 1054 | i915_gem_object_unpin(intel_crtc->cursor_bo); | 1065 | i915_gem_object_unpin(intel_crtc->cursor_bo); |
| 1055 | mutex_lock(&dev->struct_mutex); | ||
| 1056 | drm_gem_object_unreference(intel_crtc->cursor_bo); | 1066 | drm_gem_object_unreference(intel_crtc->cursor_bo); |
| 1057 | mutex_unlock(&dev->struct_mutex); | ||
| 1058 | } | 1067 | } |
| 1068 | mutex_unlock(&dev->struct_mutex); | ||
| 1059 | 1069 | ||
| 1060 | intel_crtc->cursor_addr = addr; | 1070 | intel_crtc->cursor_addr = addr; |
| 1061 | intel_crtc->cursor_bo = bo; | 1071 | intel_crtc->cursor_bo = bo; |
| @@ -1063,6 +1073,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc, | |||
| 1063 | return 0; | 1073 | return 0; |
| 1064 | fail: | 1074 | fail: |
| 1065 | mutex_lock(&dev->struct_mutex); | 1075 | mutex_lock(&dev->struct_mutex); |
| 1076 | fail_locked: | ||
| 1066 | drm_gem_object_unreference(bo); | 1077 | drm_gem_object_unreference(bo); |
| 1067 | mutex_unlock(&dev->struct_mutex); | 1078 | mutex_unlock(&dev->struct_mutex); |
| 1068 | return ret; | 1079 | return ret; |
| @@ -1290,7 +1301,7 @@ static int intel_crtc_clock_get(struct drm_device *dev, struct drm_crtc *crtc) | |||
| 1290 | } | 1301 | } |
| 1291 | 1302 | ||
| 1292 | /* XXX: Handle the 100Mhz refclk */ | 1303 | /* XXX: Handle the 100Mhz refclk */ |
| 1293 | i9xx_clock(96000, &clock); | 1304 | intel_clock(96000, &clock); |
| 1294 | } else { | 1305 | } else { |
| 1295 | bool is_lvds = (pipe == 1) && (I915_READ(LVDS) & LVDS_PORT_EN); | 1306 | bool is_lvds = (pipe == 1) && (I915_READ(LVDS) & LVDS_PORT_EN); |
| 1296 | 1307 | ||
| @@ -1302,9 +1313,9 @@ static int intel_crtc_clock_get(struct drm_device *dev, struct drm_crtc *crtc) | |||
| 1302 | if ((dpll & PLL_REF_INPUT_MASK) == | 1313 | if ((dpll & PLL_REF_INPUT_MASK) == |
| 1303 | PLLB_REF_INPUT_SPREADSPECTRUMIN) { | 1314 | PLLB_REF_INPUT_SPREADSPECTRUMIN) { |
| 1304 | /* XXX: might not be 66MHz */ | 1315 | /* XXX: might not be 66MHz */ |
| 1305 | i8xx_clock(66000, &clock); | 1316 | intel_clock(66000, &clock); |
| 1306 | } else | 1317 | } else |
| 1307 | i8xx_clock(48000, &clock); | 1318 | intel_clock(48000, &clock); |
| 1308 | } else { | 1319 | } else { |
| 1309 | if (dpll & PLL_P1_DIVIDE_BY_TWO) | 1320 | if (dpll & PLL_P1_DIVIDE_BY_TWO) |
| 1310 | clock.p1 = 2; | 1321 | clock.p1 = 2; |
| @@ -1317,7 +1328,7 @@ static int intel_crtc_clock_get(struct drm_device *dev, struct drm_crtc *crtc) | |||
| 1317 | else | 1328 | else |
| 1318 | clock.p2 = 2; | 1329 | clock.p2 = 2; |
| 1319 | 1330 | ||
| 1320 | i8xx_clock(48000, &clock); | 1331 | intel_clock(48000, &clock); |
| 1321 | } | 1332 | } |
| 1322 | } | 1333 | } |
| 1323 | 1334 | ||
| @@ -1452,6 +1463,7 @@ static int intel_connector_clones(struct drm_device *dev, int type_mask) | |||
| 1452 | 1463 | ||
| 1453 | static void intel_setup_outputs(struct drm_device *dev) | 1464 | static void intel_setup_outputs(struct drm_device *dev) |
| 1454 | { | 1465 | { |
| 1466 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
| 1455 | struct drm_connector *connector; | 1467 | struct drm_connector *connector; |
| 1456 | 1468 | ||
| 1457 | intel_crt_init(dev); | 1469 | intel_crt_init(dev); |
| @@ -1463,13 +1475,16 @@ static void intel_setup_outputs(struct drm_device *dev) | |||
| 1463 | if (IS_I9XX(dev)) { | 1475 | if (IS_I9XX(dev)) { |
| 1464 | int found; | 1476 | int found; |
| 1465 | 1477 | ||
| 1466 | found = intel_sdvo_init(dev, SDVOB); | 1478 | if (I915_READ(SDVOB) & SDVO_DETECTED) { |
| 1467 | if (!found && SUPPORTS_INTEGRATED_HDMI(dev)) | 1479 | found = intel_sdvo_init(dev, SDVOB); |
| 1468 | intel_hdmi_init(dev, SDVOB); | 1480 | if (!found && SUPPORTS_INTEGRATED_HDMI(dev)) |
| 1469 | 1481 | intel_hdmi_init(dev, SDVOB); | |
| 1470 | found = intel_sdvo_init(dev, SDVOC); | 1482 | } |
| 1471 | if (!found && SUPPORTS_INTEGRATED_HDMI(dev)) | 1483 | if (!IS_G4X(dev) || (I915_READ(SDVOB) & SDVO_DETECTED)) { |
| 1472 | intel_hdmi_init(dev, SDVOC); | 1484 | found = intel_sdvo_init(dev, SDVOC); |
| 1485 | if (!found && SUPPORTS_INTEGRATED_HDMI(dev)) | ||
| 1486 | intel_hdmi_init(dev, SDVOC); | ||
| 1487 | } | ||
| 1473 | } else | 1488 | } else |
| 1474 | intel_dvo_init(dev); | 1489 | intel_dvo_init(dev); |
| 1475 | 1490 | ||
| @@ -1592,7 +1607,9 @@ intel_user_framebuffer_create(struct drm_device *dev, | |||
| 1592 | 1607 | ||
| 1593 | ret = intel_framebuffer_create(dev, mode_cmd, &fb, obj); | 1608 | ret = intel_framebuffer_create(dev, mode_cmd, &fb, obj); |
| 1594 | if (ret) { | 1609 | if (ret) { |
| 1610 | mutex_lock(&dev->struct_mutex); | ||
| 1595 | drm_gem_object_unreference(obj); | 1611 | drm_gem_object_unreference(obj); |
| 1612 | mutex_unlock(&dev->struct_mutex); | ||
| 1596 | return NULL; | 1613 | return NULL; |
| 1597 | } | 1614 | } |
| 1598 | 1615 | ||
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 8a4cc50c5b4e..957daef8edff 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
| @@ -82,6 +82,7 @@ struct intel_output { | |||
| 82 | struct intel_i2c_chan *i2c_bus; /* for control functions */ | 82 | struct intel_i2c_chan *i2c_bus; /* for control functions */ |
| 83 | struct intel_i2c_chan *ddc_bus; /* for DDC only stuff */ | 83 | struct intel_i2c_chan *ddc_bus; /* for DDC only stuff */ |
| 84 | bool load_detect_temp; | 84 | bool load_detect_temp; |
| 85 | bool needs_tv_clock; | ||
| 85 | void *dev_priv; | 86 | void *dev_priv; |
| 86 | }; | 87 | }; |
| 87 | 88 | ||
diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c index afd1217b8a02..b7f0ebe9f810 100644 --- a/drivers/gpu/drm/i915/intel_fb.c +++ b/drivers/gpu/drm/i915/intel_fb.c | |||
| @@ -473,7 +473,7 @@ static int intelfb_create(struct drm_device *dev, uint32_t fb_width, | |||
| 473 | ret = intel_framebuffer_create(dev, &mode_cmd, &fb, fbo); | 473 | ret = intel_framebuffer_create(dev, &mode_cmd, &fb, fbo); |
| 474 | if (ret) { | 474 | if (ret) { |
| 475 | DRM_ERROR("failed to allocate fb.\n"); | 475 | DRM_ERROR("failed to allocate fb.\n"); |
| 476 | goto out_unref; | 476 | goto out_unpin; |
| 477 | } | 477 | } |
| 478 | 478 | ||
| 479 | list_add(&fb->filp_head, &dev->mode_config.fb_kernel_list); | 479 | list_add(&fb->filp_head, &dev->mode_config.fb_kernel_list); |
| @@ -484,7 +484,7 @@ static int intelfb_create(struct drm_device *dev, uint32_t fb_width, | |||
| 484 | info = framebuffer_alloc(sizeof(struct intelfb_par), device); | 484 | info = framebuffer_alloc(sizeof(struct intelfb_par), device); |
| 485 | if (!info) { | 485 | if (!info) { |
| 486 | ret = -ENOMEM; | 486 | ret = -ENOMEM; |
| 487 | goto out_unref; | 487 | goto out_unpin; |
| 488 | } | 488 | } |
| 489 | 489 | ||
| 490 | par = info->par; | 490 | par = info->par; |
| @@ -513,7 +513,7 @@ static int intelfb_create(struct drm_device *dev, uint32_t fb_width, | |||
| 513 | size); | 513 | size); |
| 514 | if (!info->screen_base) { | 514 | if (!info->screen_base) { |
| 515 | ret = -ENOSPC; | 515 | ret = -ENOSPC; |
| 516 | goto out_unref; | 516 | goto out_unpin; |
| 517 | } | 517 | } |
| 518 | info->screen_size = size; | 518 | info->screen_size = size; |
| 519 | 519 | ||
| @@ -608,6 +608,8 @@ static int intelfb_create(struct drm_device *dev, uint32_t fb_width, | |||
| 608 | mutex_unlock(&dev->struct_mutex); | 608 | mutex_unlock(&dev->struct_mutex); |
| 609 | return 0; | 609 | return 0; |
| 610 | 610 | ||
| 611 | out_unpin: | ||
| 612 | i915_gem_object_unpin(fbo); | ||
| 611 | out_unref: | 613 | out_unref: |
| 612 | drm_gem_object_unreference(fbo); | 614 | drm_gem_object_unreference(fbo); |
| 613 | mutex_unlock(&dev->struct_mutex); | 615 | mutex_unlock(&dev->struct_mutex); |
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c index b36a5214d8df..0d211af98854 100644 --- a/drivers/gpu/drm/i915/intel_lvds.c +++ b/drivers/gpu/drm/i915/intel_lvds.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | * Jesse Barnes <jesse.barnes@intel.com> | 27 | * Jesse Barnes <jesse.barnes@intel.com> |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
| 30 | #include <linux/dmi.h> | ||
| 30 | #include <linux/i2c.h> | 31 | #include <linux/i2c.h> |
| 31 | #include "drmP.h" | 32 | #include "drmP.h" |
| 32 | #include "drm.h" | 33 | #include "drm.h" |
| @@ -311,10 +312,8 @@ static int intel_lvds_get_modes(struct drm_connector *connector) | |||
| 311 | if (dev_priv->panel_fixed_mode != NULL) { | 312 | if (dev_priv->panel_fixed_mode != NULL) { |
| 312 | struct drm_display_mode *mode; | 313 | struct drm_display_mode *mode; |
| 313 | 314 | ||
| 314 | mutex_lock(&dev->mode_config.mutex); | ||
| 315 | mode = drm_mode_duplicate(dev, dev_priv->panel_fixed_mode); | 315 | mode = drm_mode_duplicate(dev, dev_priv->panel_fixed_mode); |
| 316 | drm_mode_probed_add(connector, mode); | 316 | drm_mode_probed_add(connector, mode); |
| 317 | mutex_unlock(&dev->mode_config.mutex); | ||
| 318 | 317 | ||
| 319 | return 1; | 318 | return 1; |
| 320 | } | 319 | } |
| @@ -405,6 +404,16 @@ void intel_lvds_init(struct drm_device *dev) | |||
| 405 | u32 lvds; | 404 | u32 lvds; |
| 406 | int pipe; | 405 | int pipe; |
| 407 | 406 | ||
| 407 | /* Blacklist machines that we know falsely report LVDS. */ | ||
| 408 | /* FIXME: add a check for the Aopen Mini PC */ | ||
| 409 | |||
| 410 | /* Apple Mac Mini Core Duo and Mac Mini Core 2 Duo */ | ||
| 411 | if(dmi_match(DMI_PRODUCT_NAME, "Macmini1,1") || | ||
| 412 | dmi_match(DMI_PRODUCT_NAME, "Macmini2,1")) { | ||
| 413 | DRM_DEBUG("Skipping LVDS initialization for Apple Mac Mini\n"); | ||
| 414 | return; | ||
| 415 | } | ||
| 416 | |||
| 408 | intel_output = kzalloc(sizeof(struct intel_output), GFP_KERNEL); | 417 | intel_output = kzalloc(sizeof(struct intel_output), GFP_KERNEL); |
| 409 | if (!intel_output) { | 418 | if (!intel_output) { |
| 410 | return; | 419 | return; |
| @@ -458,7 +467,7 @@ void intel_lvds_init(struct drm_device *dev) | |||
| 458 | dev_priv->panel_fixed_mode = | 467 | dev_priv->panel_fixed_mode = |
| 459 | drm_mode_duplicate(dev, scan); | 468 | drm_mode_duplicate(dev, scan); |
| 460 | mutex_unlock(&dev->mode_config.mutex); | 469 | mutex_unlock(&dev->mode_config.mutex); |
| 461 | goto out; /* FIXME: check for quirks */ | 470 | goto out; |
| 462 | } | 471 | } |
| 463 | mutex_unlock(&dev->mode_config.mutex); | 472 | mutex_unlock(&dev->mode_config.mutex); |
| 464 | } | 473 | } |
| @@ -472,8 +481,6 @@ void intel_lvds_init(struct drm_device *dev) | |||
| 472 | if (dev_priv->panel_fixed_mode) { | 481 | if (dev_priv->panel_fixed_mode) { |
| 473 | dev_priv->panel_fixed_mode->type |= | 482 | dev_priv->panel_fixed_mode->type |= |
| 474 | DRM_MODE_TYPE_PREFERRED; | 483 | DRM_MODE_TYPE_PREFERRED; |
| 475 | drm_mode_probed_add(connector, | ||
| 476 | dev_priv->panel_fixed_mode); | ||
| 477 | goto out; | 484 | goto out; |
| 478 | } | 485 | } |
| 479 | } | 486 | } |
| @@ -492,7 +499,7 @@ void intel_lvds_init(struct drm_device *dev) | |||
| 492 | if (dev_priv->panel_fixed_mode) { | 499 | if (dev_priv->panel_fixed_mode) { |
| 493 | dev_priv->panel_fixed_mode->type |= | 500 | dev_priv->panel_fixed_mode->type |= |
| 494 | DRM_MODE_TYPE_PREFERRED; | 501 | DRM_MODE_TYPE_PREFERRED; |
| 495 | goto out; /* FIXME: check for quirks */ | 502 | goto out; |
| 496 | } | 503 | } |
| 497 | } | 504 | } |
| 498 | 505 | ||
| @@ -500,38 +507,6 @@ void intel_lvds_init(struct drm_device *dev) | |||
| 500 | if (!dev_priv->panel_fixed_mode) | 507 | if (!dev_priv->panel_fixed_mode) |
| 501 | goto failed; | 508 | goto failed; |
| 502 | 509 | ||
| 503 | /* FIXME: detect aopen & mac mini type stuff automatically? */ | ||
| 504 | /* | ||
| 505 | * Blacklist machines with BIOSes that list an LVDS panel without | ||
| 506 | * actually having one. | ||
| 507 | */ | ||
| 508 | if (IS_I945GM(dev)) { | ||
| 509 | /* aopen mini pc */ | ||
| 510 | if (dev->pdev->subsystem_vendor == 0xa0a0) | ||
| 511 | goto failed; | ||
| 512 | |||
| 513 | if ((dev->pdev->subsystem_vendor == 0x8086) && | ||
| 514 | (dev->pdev->subsystem_device == 0x7270)) { | ||
| 515 | /* It's a Mac Mini or Macbook Pro. | ||
| 516 | * | ||
| 517 | * Apple hardware is out to get us. The macbook pro | ||
| 518 | * has a real LVDS panel, but the mac mini does not, | ||
| 519 | * and they have the same device IDs. We'll | ||
| 520 | * distinguish by panel size, on the assumption | ||
| 521 | * that Apple isn't about to make any machines with an | ||
| 522 | * 800x600 display. | ||
| 523 | */ | ||
| 524 | |||
| 525 | if (dev_priv->panel_fixed_mode != NULL && | ||
| 526 | dev_priv->panel_fixed_mode->hdisplay == 800 && | ||
| 527 | dev_priv->panel_fixed_mode->vdisplay == 600) { | ||
| 528 | DRM_DEBUG("Suspected Mac Mini, ignoring the LVDS\n"); | ||
| 529 | goto failed; | ||
| 530 | } | ||
| 531 | } | ||
| 532 | } | ||
| 533 | |||
| 534 | |||
| 535 | out: | 510 | out: |
| 536 | drm_sysfs_connector_add(connector); | 511 | drm_sysfs_connector_add(connector); |
| 537 | return; | 512 | return; |
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index 407215469102..fbe6f3931b1b 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c | |||
| @@ -40,13 +40,59 @@ | |||
| 40 | struct intel_sdvo_priv { | 40 | struct intel_sdvo_priv { |
| 41 | struct intel_i2c_chan *i2c_bus; | 41 | struct intel_i2c_chan *i2c_bus; |
| 42 | int slaveaddr; | 42 | int slaveaddr; |
| 43 | |||
| 44 | /* Register for the SDVO device: SDVOB or SDVOC */ | ||
| 43 | int output_device; | 45 | int output_device; |
| 44 | 46 | ||
| 45 | u16 active_outputs; | 47 | /* Active outputs controlled by this SDVO output */ |
| 48 | uint16_t controlled_output; | ||
| 46 | 49 | ||
| 50 | /* | ||
| 51 | * Capabilities of the SDVO device returned by | ||
| 52 | * i830_sdvo_get_capabilities() | ||
| 53 | */ | ||
| 47 | struct intel_sdvo_caps caps; | 54 | struct intel_sdvo_caps caps; |
| 55 | |||
| 56 | /* Pixel clock limitations reported by the SDVO device, in kHz */ | ||
| 48 | int pixel_clock_min, pixel_clock_max; | 57 | int pixel_clock_min, pixel_clock_max; |
| 49 | 58 | ||
| 59 | /** | ||
| 60 | * This is set if we're going to treat the device as TV-out. | ||
| 61 | * | ||
| 62 | * While we have these nice friendly flags for output types that ought | ||
| 63 | * to decide this for us, the S-Video output on our HDMI+S-Video card | ||
| 64 | * shows up as RGB1 (VGA). | ||
| 65 | */ | ||
| 66 | bool is_tv; | ||
| 67 | |||
| 68 | /** | ||
| 69 | * This is set if we treat the device as HDMI, instead of DVI. | ||
| 70 | */ | ||
| 71 | bool is_hdmi; | ||
| 72 | |||
| 73 | /** | ||
| 74 | * Returned SDTV resolutions allowed for the current format, if the | ||
| 75 | * device reported it. | ||
| 76 | */ | ||
| 77 | struct intel_sdvo_sdtv_resolution_reply sdtv_resolutions; | ||
| 78 | |||
| 79 | /** | ||
| 80 | * Current selected TV format. | ||
| 81 | * | ||
| 82 | * This is stored in the same structure that's passed to the device, for | ||
| 83 | * convenience. | ||
| 84 | */ | ||
| 85 | struct intel_sdvo_tv_format tv_format; | ||
| 86 | |||
| 87 | /* | ||
| 88 | * supported encoding mode, used to determine whether HDMI is | ||
| 89 | * supported | ||
| 90 | */ | ||
| 91 | struct intel_sdvo_encode encode; | ||
| 92 | |||
| 93 | /* DDC bus used by this SDVO output */ | ||
| 94 | uint8_t ddc_bus; | ||
| 95 | |||
| 50 | int save_sdvo_mult; | 96 | int save_sdvo_mult; |
| 51 | u16 save_active_outputs; | 97 | u16 save_active_outputs; |
| 52 | struct intel_sdvo_dtd save_input_dtd_1, save_input_dtd_2; | 98 | struct intel_sdvo_dtd save_input_dtd_1, save_input_dtd_2; |
| @@ -147,9 +193,9 @@ static bool intel_sdvo_write_byte(struct intel_output *intel_output, int addr, | |||
| 147 | 193 | ||
| 148 | #define SDVO_CMD_NAME_ENTRY(cmd) {cmd, #cmd} | 194 | #define SDVO_CMD_NAME_ENTRY(cmd) {cmd, #cmd} |
| 149 | /** Mapping of command numbers to names, for debug output */ | 195 | /** Mapping of command numbers to names, for debug output */ |
| 150 | const static struct _sdvo_cmd_name { | 196 | static const struct _sdvo_cmd_name { |
| 151 | u8 cmd; | 197 | u8 cmd; |
| 152 | char *name; | 198 | char *name; |
| 153 | } sdvo_cmd_names[] = { | 199 | } sdvo_cmd_names[] = { |
| 154 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_RESET), | 200 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_RESET), |
| 155 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_DEVICE_CAPS), | 201 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_DEVICE_CAPS), |
| @@ -186,8 +232,35 @@ const static struct _sdvo_cmd_name { | |||
| 186 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SUPPORTED_TV_FORMATS), | 232 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SUPPORTED_TV_FORMATS), |
| 187 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_TV_FORMAT), | 233 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_TV_FORMAT), |
| 188 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_TV_FORMAT), | 234 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_TV_FORMAT), |
| 189 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_TV_RESOLUTION_SUPPORT), | 235 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SUPPORTED_POWER_STATES), |
| 236 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_POWER_STATE), | ||
| 237 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_ENCODER_POWER_STATE), | ||
| 238 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_DISPLAY_POWER_STATE), | ||
| 190 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_CONTROL_BUS_SWITCH), | 239 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_CONTROL_BUS_SWITCH), |
| 240 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SDTV_RESOLUTION_SUPPORT), | ||
| 241 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SCALED_HDTV_RESOLUTION_SUPPORT), | ||
| 242 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SUPPORTED_ENHANCEMENTS), | ||
| 243 | /* HDMI op code */ | ||
| 244 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SUPP_ENCODE), | ||
| 245 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_ENCODE), | ||
| 246 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_ENCODE), | ||
| 247 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_PIXEL_REPLI), | ||
| 248 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_PIXEL_REPLI), | ||
| 249 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_COLORIMETRY_CAP), | ||
| 250 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_COLORIMETRY), | ||
| 251 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_COLORIMETRY), | ||
| 252 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_AUDIO_ENCRYPT_PREFER), | ||
| 253 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_AUDIO_STAT), | ||
| 254 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_AUDIO_STAT), | ||
| 255 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_HBUF_INDEX), | ||
| 256 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_HBUF_INDEX), | ||
| 257 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_HBUF_INFO), | ||
| 258 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_HBUF_AV_SPLIT), | ||
| 259 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_HBUF_AV_SPLIT), | ||
| 260 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_HBUF_TXRATE), | ||
| 261 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_HBUF_TXRATE), | ||
| 262 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_HBUF_DATA), | ||
| 263 | SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_HBUF_DATA), | ||
| 191 | }; | 264 | }; |
| 192 | 265 | ||
| 193 | #define SDVO_NAME(dev_priv) ((dev_priv)->output_device == SDVOB ? "SDVOB" : "SDVOC") | 266 | #define SDVO_NAME(dev_priv) ((dev_priv)->output_device == SDVOB ? "SDVOB" : "SDVOC") |
| @@ -506,6 +579,50 @@ static bool intel_sdvo_set_output_timing(struct intel_output *intel_output, | |||
| 506 | SDVO_CMD_SET_OUTPUT_TIMINGS_PART1, dtd); | 579 | SDVO_CMD_SET_OUTPUT_TIMINGS_PART1, dtd); |
| 507 | } | 580 | } |
| 508 | 581 | ||
| 582 | static bool | ||
| 583 | intel_sdvo_create_preferred_input_timing(struct intel_output *output, | ||
| 584 | uint16_t clock, | ||
| 585 | uint16_t width, | ||
| 586 | uint16_t height) | ||
| 587 | { | ||
| 588 | struct intel_sdvo_preferred_input_timing_args args; | ||
| 589 | uint8_t status; | ||
| 590 | |||
| 591 | args.clock = clock; | ||
| 592 | args.width = width; | ||
| 593 | args.height = height; | ||
| 594 | intel_sdvo_write_cmd(output, SDVO_CMD_CREATE_PREFERRED_INPUT_TIMING, | ||
| 595 | &args, sizeof(args)); | ||
| 596 | status = intel_sdvo_read_response(output, NULL, 0); | ||
| 597 | if (status != SDVO_CMD_STATUS_SUCCESS) | ||
| 598 | return false; | ||
| 599 | |||
| 600 | return true; | ||
| 601 | } | ||
| 602 | |||
| 603 | static bool intel_sdvo_get_preferred_input_timing(struct intel_output *output, | ||
| 604 | struct intel_sdvo_dtd *dtd) | ||
| 605 | { | ||
| 606 | bool status; | ||
| 607 | |||
| 608 | intel_sdvo_write_cmd(output, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART1, | ||
| 609 | NULL, 0); | ||
| 610 | |||
| 611 | status = intel_sdvo_read_response(output, &dtd->part1, | ||
| 612 | sizeof(dtd->part1)); | ||
| 613 | if (status != SDVO_CMD_STATUS_SUCCESS) | ||
| 614 | return false; | ||
| 615 | |||
| 616 | intel_sdvo_write_cmd(output, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART2, | ||
| 617 | NULL, 0); | ||
| 618 | |||
| 619 | status = intel_sdvo_read_response(output, &dtd->part2, | ||
| 620 | sizeof(dtd->part2)); | ||
| 621 | if (status != SDVO_CMD_STATUS_SUCCESS) | ||
| 622 | return false; | ||
| 623 | |||
| 624 | return false; | ||
| 625 | } | ||
| 509 | 626 | ||
| 510 | static int intel_sdvo_get_clock_rate_mult(struct intel_output *intel_output) | 627 | static int intel_sdvo_get_clock_rate_mult(struct intel_output *intel_output) |
| 511 | { | 628 | { |
| @@ -536,36 +653,12 @@ static bool intel_sdvo_set_clock_rate_mult(struct intel_output *intel_output, u8 | |||
| 536 | return true; | 653 | return true; |
| 537 | } | 654 | } |
| 538 | 655 | ||
| 539 | static bool intel_sdvo_mode_fixup(struct drm_encoder *encoder, | 656 | static void intel_sdvo_get_dtd_from_mode(struct intel_sdvo_dtd *dtd, |
| 540 | struct drm_display_mode *mode, | 657 | struct drm_display_mode *mode) |
| 541 | struct drm_display_mode *adjusted_mode) | ||
| 542 | { | ||
| 543 | /* Make the CRTC code factor in the SDVO pixel multiplier. The SDVO | ||
| 544 | * device will be told of the multiplier during mode_set. | ||
| 545 | */ | ||
| 546 | adjusted_mode->clock *= intel_sdvo_get_pixel_multiplier(mode); | ||
| 547 | return true; | ||
| 548 | } | ||
| 549 | |||
| 550 | static void intel_sdvo_mode_set(struct drm_encoder *encoder, | ||
| 551 | struct drm_display_mode *mode, | ||
| 552 | struct drm_display_mode *adjusted_mode) | ||
| 553 | { | 658 | { |
| 554 | struct drm_device *dev = encoder->dev; | 659 | uint16_t width, height; |
| 555 | struct drm_i915_private *dev_priv = dev->dev_private; | 660 | uint16_t h_blank_len, h_sync_len, v_blank_len, v_sync_len; |
| 556 | struct drm_crtc *crtc = encoder->crtc; | 661 | uint16_t h_sync_offset, v_sync_offset; |
| 557 | struct intel_crtc *intel_crtc = to_intel_crtc(crtc); | ||
| 558 | struct intel_output *intel_output = enc_to_intel_output(encoder); | ||
| 559 | struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; | ||
| 560 | u16 width, height; | ||
| 561 | u16 h_blank_len, h_sync_len, v_blank_len, v_sync_len; | ||
| 562 | u16 h_sync_offset, v_sync_offset; | ||
| 563 | u32 sdvox; | ||
| 564 | struct intel_sdvo_dtd output_dtd; | ||
| 565 | int sdvo_pixel_multiply; | ||
| 566 | |||
| 567 | if (!mode) | ||
| 568 | return; | ||
| 569 | 662 | ||
| 570 | width = mode->crtc_hdisplay; | 663 | width = mode->crtc_hdisplay; |
| 571 | height = mode->crtc_vdisplay; | 664 | height = mode->crtc_vdisplay; |
| @@ -580,93 +673,423 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder, | |||
| 580 | h_sync_offset = mode->crtc_hsync_start - mode->crtc_hblank_start; | 673 | h_sync_offset = mode->crtc_hsync_start - mode->crtc_hblank_start; |
| 581 | v_sync_offset = mode->crtc_vsync_start - mode->crtc_vblank_start; | 674 | v_sync_offset = mode->crtc_vsync_start - mode->crtc_vblank_start; |
| 582 | 675 | ||
| 583 | output_dtd.part1.clock = mode->clock / 10; | 676 | dtd->part1.clock = mode->clock / 10; |
| 584 | output_dtd.part1.h_active = width & 0xff; | 677 | dtd->part1.h_active = width & 0xff; |
| 585 | output_dtd.part1.h_blank = h_blank_len & 0xff; | 678 | dtd->part1.h_blank = h_blank_len & 0xff; |
| 586 | output_dtd.part1.h_high = (((width >> 8) & 0xf) << 4) | | 679 | dtd->part1.h_high = (((width >> 8) & 0xf) << 4) | |
| 587 | ((h_blank_len >> 8) & 0xf); | 680 | ((h_blank_len >> 8) & 0xf); |
| 588 | output_dtd.part1.v_active = height & 0xff; | 681 | dtd->part1.v_active = height & 0xff; |
| 589 | output_dtd.part1.v_blank = v_blank_len & 0xff; | 682 | dtd->part1.v_blank = v_blank_len & 0xff; |
| 590 | output_dtd.part1.v_high = (((height >> 8) & 0xf) << 4) | | 683 | dtd->part1.v_high = (((height >> 8) & 0xf) << 4) | |
| 591 | ((v_blank_len >> 8) & 0xf); | 684 | ((v_blank_len >> 8) & 0xf); |
| 592 | 685 | ||
| 593 | output_dtd.part2.h_sync_off = h_sync_offset; | 686 | dtd->part2.h_sync_off = h_sync_offset; |
| 594 | output_dtd.part2.h_sync_width = h_sync_len & 0xff; | 687 | dtd->part2.h_sync_width = h_sync_len & 0xff; |
| 595 | output_dtd.part2.v_sync_off_width = (v_sync_offset & 0xf) << 4 | | 688 | dtd->part2.v_sync_off_width = (v_sync_offset & 0xf) << 4 | |
| 596 | (v_sync_len & 0xf); | 689 | (v_sync_len & 0xf); |
| 597 | output_dtd.part2.sync_off_width_high = ((h_sync_offset & 0x300) >> 2) | | 690 | dtd->part2.sync_off_width_high = ((h_sync_offset & 0x300) >> 2) | |
| 598 | ((h_sync_len & 0x300) >> 4) | ((v_sync_offset & 0x30) >> 2) | | 691 | ((h_sync_len & 0x300) >> 4) | ((v_sync_offset & 0x30) >> 2) | |
| 599 | ((v_sync_len & 0x30) >> 4); | 692 | ((v_sync_len & 0x30) >> 4); |
| 600 | 693 | ||
| 601 | output_dtd.part2.dtd_flags = 0x18; | 694 | dtd->part2.dtd_flags = 0x18; |
| 602 | if (mode->flags & DRM_MODE_FLAG_PHSYNC) | 695 | if (mode->flags & DRM_MODE_FLAG_PHSYNC) |
| 603 | output_dtd.part2.dtd_flags |= 0x2; | 696 | dtd->part2.dtd_flags |= 0x2; |
| 604 | if (mode->flags & DRM_MODE_FLAG_PVSYNC) | 697 | if (mode->flags & DRM_MODE_FLAG_PVSYNC) |
| 605 | output_dtd.part2.dtd_flags |= 0x4; | 698 | dtd->part2.dtd_flags |= 0x4; |
| 699 | |||
| 700 | dtd->part2.sdvo_flags = 0; | ||
| 701 | dtd->part2.v_sync_off_high = v_sync_offset & 0xc0; | ||
| 702 | dtd->part2.reserved = 0; | ||
| 703 | } | ||
| 704 | |||
| 705 | static void intel_sdvo_get_mode_from_dtd(struct drm_display_mode * mode, | ||
| 706 | struct intel_sdvo_dtd *dtd) | ||
| 707 | { | ||
| 708 | uint16_t width, height; | ||
| 709 | uint16_t h_blank_len, h_sync_len, v_blank_len, v_sync_len; | ||
| 710 | uint16_t h_sync_offset, v_sync_offset; | ||
| 711 | |||
| 712 | width = mode->crtc_hdisplay; | ||
| 713 | height = mode->crtc_vdisplay; | ||
| 714 | |||
| 715 | /* do some mode translations */ | ||
| 716 | h_blank_len = mode->crtc_hblank_end - mode->crtc_hblank_start; | ||
| 717 | h_sync_len = mode->crtc_hsync_end - mode->crtc_hsync_start; | ||
| 718 | |||
| 719 | v_blank_len = mode->crtc_vblank_end - mode->crtc_vblank_start; | ||
| 720 | v_sync_len = mode->crtc_vsync_end - mode->crtc_vsync_start; | ||
| 721 | |||
| 722 | h_sync_offset = mode->crtc_hsync_start - mode->crtc_hblank_start; | ||
| 723 | v_sync_offset = mode->crtc_vsync_start - mode->crtc_vblank_start; | ||
| 724 | |||
| 725 | mode->hdisplay = dtd->part1.h_active; | ||
| 726 | mode->hdisplay += ((dtd->part1.h_high >> 4) & 0x0f) << 8; | ||
| 727 | mode->hsync_start = mode->hdisplay + dtd->part2.h_sync_off; | ||
| 728 | mode->hsync_start += (dtd->part2.sync_off_width_high & 0xa0) << 2; | ||
| 729 | mode->hsync_end = mode->hsync_start + dtd->part2.h_sync_width; | ||
| 730 | mode->hsync_end += (dtd->part2.sync_off_width_high & 0x30) << 4; | ||
| 731 | mode->htotal = mode->hdisplay + dtd->part1.h_blank; | ||
| 732 | mode->htotal += (dtd->part1.h_high & 0xf) << 8; | ||
| 733 | |||
| 734 | mode->vdisplay = dtd->part1.v_active; | ||
| 735 | mode->vdisplay += ((dtd->part1.v_high >> 4) & 0x0f) << 8; | ||
| 736 | mode->vsync_start = mode->vdisplay; | ||
| 737 | mode->vsync_start += (dtd->part2.v_sync_off_width >> 4) & 0xf; | ||
| 738 | mode->vsync_start += (dtd->part2.sync_off_width_high & 0x0a) << 2; | ||
| 739 | mode->vsync_start += dtd->part2.v_sync_off_high & 0xc0; | ||
| 740 | mode->vsync_end = mode->vsync_start + | ||
| 741 | (dtd->part2.v_sync_off_width & 0xf); | ||
| 742 | mode->vsync_end += (dtd->part2.sync_off_width_high & 0x3) << 4; | ||
| 743 | mode->vtotal = mode->vdisplay + dtd->part1.v_blank; | ||
| 744 | mode->vtotal += (dtd->part1.v_high & 0xf) << 8; | ||
| 745 | |||
| 746 | mode->clock = dtd->part1.clock * 10; | ||
| 747 | |||
| 748 | mode->flags &= (DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC); | ||
| 749 | if (dtd->part2.dtd_flags & 0x2) | ||
| 750 | mode->flags |= DRM_MODE_FLAG_PHSYNC; | ||
| 751 | if (dtd->part2.dtd_flags & 0x4) | ||
| 752 | mode->flags |= DRM_MODE_FLAG_PVSYNC; | ||
| 753 | } | ||
| 754 | |||
| 755 | static bool intel_sdvo_get_supp_encode(struct intel_output *output, | ||
| 756 | struct intel_sdvo_encode *encode) | ||
| 757 | { | ||
| 758 | uint8_t status; | ||
| 759 | |||
| 760 | intel_sdvo_write_cmd(output, SDVO_CMD_GET_SUPP_ENCODE, NULL, 0); | ||
| 761 | status = intel_sdvo_read_response(output, encode, sizeof(*encode)); | ||
| 762 | if (status != SDVO_CMD_STATUS_SUCCESS) { /* non-support means DVI */ | ||
| 763 | memset(encode, 0, sizeof(*encode)); | ||
| 764 | return false; | ||
| 765 | } | ||
| 766 | |||
| 767 | return true; | ||
| 768 | } | ||
| 769 | |||
| 770 | static bool intel_sdvo_set_encode(struct intel_output *output, uint8_t mode) | ||
| 771 | { | ||
| 772 | uint8_t status; | ||
| 773 | |||
| 774 | intel_sdvo_write_cmd(output, SDVO_CMD_SET_ENCODE, &mode, 1); | ||
| 775 | status = intel_sdvo_read_response(output, NULL, 0); | ||
| 776 | |||
| 777 | return (status == SDVO_CMD_STATUS_SUCCESS); | ||
| 778 | } | ||
| 779 | |||
| 780 | static bool intel_sdvo_set_colorimetry(struct intel_output *output, | ||
| 781 | uint8_t mode) | ||
| 782 | { | ||
| 783 | uint8_t status; | ||
| 784 | |||
| 785 | intel_sdvo_write_cmd(output, SDVO_CMD_SET_COLORIMETRY, &mode, 1); | ||
| 786 | status = intel_sdvo_read_response(output, NULL, 0); | ||
| 787 | |||
| 788 | return (status == SDVO_CMD_STATUS_SUCCESS); | ||
| 789 | } | ||
| 790 | |||
| 791 | #if 0 | ||
| 792 | static void intel_sdvo_dump_hdmi_buf(struct intel_output *output) | ||
| 793 | { | ||
| 794 | int i, j; | ||
| 795 | uint8_t set_buf_index[2]; | ||
| 796 | uint8_t av_split; | ||
| 797 | uint8_t buf_size; | ||
| 798 | uint8_t buf[48]; | ||
| 799 | uint8_t *pos; | ||
| 800 | |||
| 801 | intel_sdvo_write_cmd(output, SDVO_CMD_GET_HBUF_AV_SPLIT, NULL, 0); | ||
| 802 | intel_sdvo_read_response(output, &av_split, 1); | ||
| 803 | |||
| 804 | for (i = 0; i <= av_split; i++) { | ||
| 805 | set_buf_index[0] = i; set_buf_index[1] = 0; | ||
| 806 | intel_sdvo_write_cmd(output, SDVO_CMD_SET_HBUF_INDEX, | ||
| 807 | set_buf_index, 2); | ||
| 808 | intel_sdvo_write_cmd(output, SDVO_CMD_GET_HBUF_INFO, NULL, 0); | ||
| 809 | intel_sdvo_read_response(output, &buf_size, 1); | ||
| 810 | |||
| 811 | pos = buf; | ||
| 812 | for (j = 0; j <= buf_size; j += 8) { | ||
| 813 | intel_sdvo_write_cmd(output, SDVO_CMD_GET_HBUF_DATA, | ||
| 814 | NULL, 0); | ||
| 815 | intel_sdvo_read_response(output, pos, 8); | ||
| 816 | pos += 8; | ||
| 817 | } | ||
| 818 | } | ||
| 819 | } | ||
| 820 | #endif | ||
| 821 | |||
| 822 | static void intel_sdvo_set_hdmi_buf(struct intel_output *output, int index, | ||
| 823 | uint8_t *data, int8_t size, uint8_t tx_rate) | ||
| 824 | { | ||
| 825 | uint8_t set_buf_index[2]; | ||
| 826 | |||
| 827 | set_buf_index[0] = index; | ||
| 828 | set_buf_index[1] = 0; | ||
| 829 | |||
| 830 | intel_sdvo_write_cmd(output, SDVO_CMD_SET_HBUF_INDEX, set_buf_index, 2); | ||
| 831 | |||
| 832 | for (; size > 0; size -= 8) { | ||
| 833 | intel_sdvo_write_cmd(output, SDVO_CMD_SET_HBUF_DATA, data, 8); | ||
| 834 | data += 8; | ||
| 835 | } | ||
| 836 | |||
| 837 | intel_sdvo_write_cmd(output, SDVO_CMD_SET_HBUF_TXRATE, &tx_rate, 1); | ||
| 838 | } | ||
| 839 | |||
| 840 | static uint8_t intel_sdvo_calc_hbuf_csum(uint8_t *data, uint8_t size) | ||
| 841 | { | ||
| 842 | uint8_t csum = 0; | ||
| 843 | int i; | ||
| 844 | |||
| 845 | for (i = 0; i < size; i++) | ||
| 846 | csum += data[i]; | ||
| 847 | |||
| 848 | return 0x100 - csum; | ||
| 849 | } | ||
| 850 | |||
| 851 | #define DIP_TYPE_AVI 0x82 | ||
| 852 | #define DIP_VERSION_AVI 0x2 | ||
| 853 | #define DIP_LEN_AVI 13 | ||
| 854 | |||
| 855 | struct dip_infoframe { | ||
| 856 | uint8_t type; | ||
| 857 | uint8_t version; | ||
| 858 | uint8_t len; | ||
| 859 | uint8_t checksum; | ||
| 860 | union { | ||
| 861 | struct { | ||
| 862 | /* Packet Byte #1 */ | ||
| 863 | uint8_t S:2; | ||
| 864 | uint8_t B:2; | ||
| 865 | uint8_t A:1; | ||
| 866 | uint8_t Y:2; | ||
| 867 | uint8_t rsvd1:1; | ||
| 868 | /* Packet Byte #2 */ | ||
| 869 | uint8_t R:4; | ||
| 870 | uint8_t M:2; | ||
| 871 | uint8_t C:2; | ||
| 872 | /* Packet Byte #3 */ | ||
| 873 | uint8_t SC:2; | ||
| 874 | uint8_t Q:2; | ||
| 875 | uint8_t EC:3; | ||
| 876 | uint8_t ITC:1; | ||
| 877 | /* Packet Byte #4 */ | ||
| 878 | uint8_t VIC:7; | ||
| 879 | uint8_t rsvd2:1; | ||
| 880 | /* Packet Byte #5 */ | ||
| 881 | uint8_t PR:4; | ||
| 882 | uint8_t rsvd3:4; | ||
| 883 | /* Packet Byte #6~13 */ | ||
| 884 | uint16_t top_bar_end; | ||
| 885 | uint16_t bottom_bar_start; | ||
| 886 | uint16_t left_bar_end; | ||
| 887 | uint16_t right_bar_start; | ||
| 888 | } avi; | ||
| 889 | struct { | ||
| 890 | /* Packet Byte #1 */ | ||
| 891 | uint8_t channel_count:3; | ||
| 892 | uint8_t rsvd1:1; | ||
| 893 | uint8_t coding_type:4; | ||
| 894 | /* Packet Byte #2 */ | ||
| 895 | uint8_t sample_size:2; /* SS0, SS1 */ | ||
| 896 | uint8_t sample_frequency:3; | ||
| 897 | uint8_t rsvd2:3; | ||
| 898 | /* Packet Byte #3 */ | ||
| 899 | uint8_t coding_type_private:5; | ||
| 900 | uint8_t rsvd3:3; | ||
| 901 | /* Packet Byte #4 */ | ||
| 902 | uint8_t channel_allocation; | ||
| 903 | /* Packet Byte #5 */ | ||
| 904 | uint8_t rsvd4:3; | ||
| 905 | uint8_t level_shift:4; | ||
| 906 | uint8_t downmix_inhibit:1; | ||
| 907 | } audio; | ||
| 908 | uint8_t payload[28]; | ||
| 909 | } __attribute__ ((packed)) u; | ||
| 910 | } __attribute__((packed)); | ||
| 911 | |||
| 912 | static void intel_sdvo_set_avi_infoframe(struct intel_output *output, | ||
| 913 | struct drm_display_mode * mode) | ||
| 914 | { | ||
| 915 | struct dip_infoframe avi_if = { | ||
| 916 | .type = DIP_TYPE_AVI, | ||
| 917 | .version = DIP_VERSION_AVI, | ||
| 918 | .len = DIP_LEN_AVI, | ||
| 919 | }; | ||
| 920 | |||
| 921 | avi_if.checksum = intel_sdvo_calc_hbuf_csum((uint8_t *)&avi_if, | ||
| 922 | 4 + avi_if.len); | ||
| 923 | intel_sdvo_set_hdmi_buf(output, 1, (uint8_t *)&avi_if, 4 + avi_if.len, | ||
| 924 | SDVO_HBUF_TX_VSYNC); | ||
| 925 | } | ||
| 926 | |||
| 927 | static bool intel_sdvo_mode_fixup(struct drm_encoder *encoder, | ||
| 928 | struct drm_display_mode *mode, | ||
| 929 | struct drm_display_mode *adjusted_mode) | ||
| 930 | { | ||
| 931 | struct intel_output *output = enc_to_intel_output(encoder); | ||
| 932 | struct intel_sdvo_priv *dev_priv = output->dev_priv; | ||
| 606 | 933 | ||
| 607 | output_dtd.part2.sdvo_flags = 0; | 934 | if (!dev_priv->is_tv) { |
| 608 | output_dtd.part2.v_sync_off_high = v_sync_offset & 0xc0; | 935 | /* Make the CRTC code factor in the SDVO pixel multiplier. The |
| 609 | output_dtd.part2.reserved = 0; | 936 | * SDVO device will be told of the multiplier during mode_set. |
| 937 | */ | ||
| 938 | adjusted_mode->clock *= intel_sdvo_get_pixel_multiplier(mode); | ||
| 939 | } else { | ||
| 940 | struct intel_sdvo_dtd output_dtd; | ||
| 941 | bool success; | ||
| 942 | |||
| 943 | /* We need to construct preferred input timings based on our | ||
| 944 | * output timings. To do that, we have to set the output | ||
| 945 | * timings, even though this isn't really the right place in | ||
| 946 | * the sequence to do it. Oh well. | ||
| 947 | */ | ||
| 948 | |||
| 949 | |||
| 950 | /* Set output timings */ | ||
| 951 | intel_sdvo_get_dtd_from_mode(&output_dtd, mode); | ||
| 952 | intel_sdvo_set_target_output(output, | ||
| 953 | dev_priv->controlled_output); | ||
| 954 | intel_sdvo_set_output_timing(output, &output_dtd); | ||
| 955 | |||
| 956 | /* Set the input timing to the screen. Assume always input 0. */ | ||
| 957 | intel_sdvo_set_target_input(output, true, false); | ||
| 958 | |||
| 959 | |||
| 960 | success = intel_sdvo_create_preferred_input_timing(output, | ||
| 961 | mode->clock / 10, | ||
| 962 | mode->hdisplay, | ||
| 963 | mode->vdisplay); | ||
| 964 | if (success) { | ||
| 965 | struct intel_sdvo_dtd input_dtd; | ||
| 610 | 966 | ||
| 611 | /* Set the output timing to the screen */ | 967 | intel_sdvo_get_preferred_input_timing(output, |
| 612 | intel_sdvo_set_target_output(intel_output, sdvo_priv->active_outputs); | 968 | &input_dtd); |
| 613 | intel_sdvo_set_output_timing(intel_output, &output_dtd); | 969 | intel_sdvo_get_mode_from_dtd(adjusted_mode, &input_dtd); |
| 970 | |||
| 971 | } else { | ||
| 972 | return false; | ||
| 973 | } | ||
| 974 | } | ||
| 975 | return true; | ||
| 976 | } | ||
| 977 | |||
| 978 | static void intel_sdvo_mode_set(struct drm_encoder *encoder, | ||
| 979 | struct drm_display_mode *mode, | ||
| 980 | struct drm_display_mode *adjusted_mode) | ||
| 981 | { | ||
| 982 | struct drm_device *dev = encoder->dev; | ||
| 983 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
| 984 | struct drm_crtc *crtc = encoder->crtc; | ||
| 985 | struct intel_crtc *intel_crtc = to_intel_crtc(crtc); | ||
| 986 | struct intel_output *output = enc_to_intel_output(encoder); | ||
| 987 | struct intel_sdvo_priv *sdvo_priv = output->dev_priv; | ||
| 988 | u32 sdvox = 0; | ||
| 989 | int sdvo_pixel_multiply; | ||
| 990 | struct intel_sdvo_in_out_map in_out; | ||
| 991 | struct intel_sdvo_dtd input_dtd; | ||
| 992 | u8 status; | ||
| 993 | |||
| 994 | if (!mode) | ||
| 995 | return; | ||
| 996 | |||
| 997 | /* First, set the input mapping for the first input to our controlled | ||
| 998 | * output. This is only correct if we're a single-input device, in | ||
| 999 | * which case the first input is the output from the appropriate SDVO | ||
| 1000 | * channel on the motherboard. In a two-input device, the first input | ||
| 1001 | * will be SDVOB and the second SDVOC. | ||
| 1002 | */ | ||
| 1003 | in_out.in0 = sdvo_priv->controlled_output; | ||
| 1004 | in_out.in1 = 0; | ||
| 1005 | |||
| 1006 | intel_sdvo_write_cmd(output, SDVO_CMD_SET_IN_OUT_MAP, | ||
| 1007 | &in_out, sizeof(in_out)); | ||
| 1008 | status = intel_sdvo_read_response(output, NULL, 0); | ||
| 1009 | |||
| 1010 | if (sdvo_priv->is_hdmi) { | ||
| 1011 | intel_sdvo_set_avi_infoframe(output, mode); | ||
| 1012 | sdvox |= SDVO_AUDIO_ENABLE; | ||
| 1013 | } | ||
| 1014 | |||
| 1015 | intel_sdvo_get_dtd_from_mode(&input_dtd, mode); | ||
| 1016 | |||
| 1017 | /* If it's a TV, we already set the output timing in mode_fixup. | ||
| 1018 | * Otherwise, the output timing is equal to the input timing. | ||
| 1019 | */ | ||
| 1020 | if (!sdvo_priv->is_tv) { | ||
| 1021 | /* Set the output timing to the screen */ | ||
| 1022 | intel_sdvo_set_target_output(output, | ||
| 1023 | sdvo_priv->controlled_output); | ||
| 1024 | intel_sdvo_set_output_timing(output, &input_dtd); | ||
| 1025 | } | ||
| 614 | 1026 | ||
| 615 | /* Set the input timing to the screen. Assume always input 0. */ | 1027 | /* Set the input timing to the screen. Assume always input 0. */ |
| 616 | intel_sdvo_set_target_input(intel_output, true, false); | 1028 | intel_sdvo_set_target_input(output, true, false); |
| 617 | 1029 | ||
| 618 | /* We would like to use i830_sdvo_create_preferred_input_timing() to | 1030 | /* We would like to use intel_sdvo_create_preferred_input_timing() to |
| 619 | * provide the device with a timing it can support, if it supports that | 1031 | * provide the device with a timing it can support, if it supports that |
| 620 | * feature. However, presumably we would need to adjust the CRTC to | 1032 | * feature. However, presumably we would need to adjust the CRTC to |
| 621 | * output the preferred timing, and we don't support that currently. | 1033 | * output the preferred timing, and we don't support that currently. |
| 622 | */ | 1034 | */ |
| 623 | intel_sdvo_set_input_timing(intel_output, &output_dtd); | 1035 | #if 0 |
| 1036 | success = intel_sdvo_create_preferred_input_timing(output, clock, | ||
| 1037 | width, height); | ||
| 1038 | if (success) { | ||
| 1039 | struct intel_sdvo_dtd *input_dtd; | ||
| 1040 | |||
| 1041 | intel_sdvo_get_preferred_input_timing(output, &input_dtd); | ||
| 1042 | intel_sdvo_set_input_timing(output, &input_dtd); | ||
| 1043 | } | ||
| 1044 | #else | ||
| 1045 | intel_sdvo_set_input_timing(output, &input_dtd); | ||
| 1046 | #endif | ||
| 624 | 1047 | ||
| 625 | switch (intel_sdvo_get_pixel_multiplier(mode)) { | 1048 | switch (intel_sdvo_get_pixel_multiplier(mode)) { |
| 626 | case 1: | 1049 | case 1: |
| 627 | intel_sdvo_set_clock_rate_mult(intel_output, | 1050 | intel_sdvo_set_clock_rate_mult(output, |
| 628 | SDVO_CLOCK_RATE_MULT_1X); | 1051 | SDVO_CLOCK_RATE_MULT_1X); |
| 629 | break; | 1052 | break; |
| 630 | case 2: | 1053 | case 2: |
| 631 | intel_sdvo_set_clock_rate_mult(intel_output, | 1054 | intel_sdvo_set_clock_rate_mult(output, |
| 632 | SDVO_CLOCK_RATE_MULT_2X); | 1055 | SDVO_CLOCK_RATE_MULT_2X); |
| 633 | break; | 1056 | break; |
| 634 | case 4: | 1057 | case 4: |
| 635 | intel_sdvo_set_clock_rate_mult(intel_output, | 1058 | intel_sdvo_set_clock_rate_mult(output, |
| 636 | SDVO_CLOCK_RATE_MULT_4X); | 1059 | SDVO_CLOCK_RATE_MULT_4X); |
| 637 | break; | 1060 | break; |
| 638 | } | 1061 | } |
| 639 | 1062 | ||
| 640 | /* Set the SDVO control regs. */ | 1063 | /* Set the SDVO control regs. */ |
| 641 | if (0/*IS_I965GM(dev)*/) { | 1064 | if (IS_I965G(dev)) { |
| 642 | sdvox = SDVO_BORDER_ENABLE; | 1065 | sdvox |= SDVO_BORDER_ENABLE | |
| 643 | } else { | 1066 | SDVO_VSYNC_ACTIVE_HIGH | |
| 644 | sdvox = I915_READ(sdvo_priv->output_device); | 1067 | SDVO_HSYNC_ACTIVE_HIGH; |
| 645 | switch (sdvo_priv->output_device) { | 1068 | } else { |
| 646 | case SDVOB: | 1069 | sdvox |= I915_READ(sdvo_priv->output_device); |
| 647 | sdvox &= SDVOB_PRESERVE_MASK; | 1070 | switch (sdvo_priv->output_device) { |
| 648 | break; | 1071 | case SDVOB: |
| 649 | case SDVOC: | 1072 | sdvox &= SDVOB_PRESERVE_MASK; |
| 650 | sdvox &= SDVOC_PRESERVE_MASK; | 1073 | break; |
| 651 | break; | 1074 | case SDVOC: |
| 652 | } | 1075 | sdvox &= SDVOC_PRESERVE_MASK; |
| 653 | sdvox |= (9 << 19) | SDVO_BORDER_ENABLE; | 1076 | break; |
| 654 | } | 1077 | } |
| 1078 | sdvox |= (9 << 19) | SDVO_BORDER_ENABLE; | ||
| 1079 | } | ||
| 655 | if (intel_crtc->pipe == 1) | 1080 | if (intel_crtc->pipe == 1) |
| 656 | sdvox |= SDVO_PIPE_B_SELECT; | 1081 | sdvox |= SDVO_PIPE_B_SELECT; |
| 657 | 1082 | ||
| 658 | sdvo_pixel_multiply = intel_sdvo_get_pixel_multiplier(mode); | 1083 | sdvo_pixel_multiply = intel_sdvo_get_pixel_multiplier(mode); |
| 659 | if (IS_I965G(dev)) { | 1084 | if (IS_I965G(dev)) { |
| 660 | /* done in crtc_mode_set as the dpll_md reg must be written | 1085 | /* done in crtc_mode_set as the dpll_md reg must be written early */ |
| 661 | early */ | 1086 | } else if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) { |
| 662 | } else if (IS_I945G(dev) || IS_I945GM(dev)) { | 1087 | /* done in crtc_mode_set as it lives inside the dpll register */ |
| 663 | /* done in crtc_mode_set as it lives inside the | ||
| 664 | dpll register */ | ||
| 665 | } else { | 1088 | } else { |
| 666 | sdvox |= (sdvo_pixel_multiply - 1) << SDVO_PORT_MULTIPLY_SHIFT; | 1089 | sdvox |= (sdvo_pixel_multiply - 1) << SDVO_PORT_MULTIPLY_SHIFT; |
| 667 | } | 1090 | } |
| 668 | 1091 | ||
| 669 | intel_sdvo_write_sdvox(intel_output, sdvox); | 1092 | intel_sdvo_write_sdvox(output, sdvox); |
| 670 | } | 1093 | } |
| 671 | 1094 | ||
| 672 | static void intel_sdvo_dpms(struct drm_encoder *encoder, int mode) | 1095 | static void intel_sdvo_dpms(struct drm_encoder *encoder, int mode) |
| @@ -714,7 +1137,7 @@ static void intel_sdvo_dpms(struct drm_encoder *encoder, int mode) | |||
| 714 | 1137 | ||
| 715 | if (0) | 1138 | if (0) |
| 716 | intel_sdvo_set_encoder_power_state(intel_output, mode); | 1139 | intel_sdvo_set_encoder_power_state(intel_output, mode); |
| 717 | intel_sdvo_set_active_outputs(intel_output, sdvo_priv->active_outputs); | 1140 | intel_sdvo_set_active_outputs(intel_output, sdvo_priv->controlled_output); |
| 718 | } | 1141 | } |
| 719 | return; | 1142 | return; |
| 720 | } | 1143 | } |
| @@ -752,6 +1175,9 @@ static void intel_sdvo_save(struct drm_connector *connector) | |||
| 752 | &sdvo_priv->save_output_dtd[o]); | 1175 | &sdvo_priv->save_output_dtd[o]); |
| 753 | } | 1176 | } |
| 754 | } | 1177 | } |
| 1178 | if (sdvo_priv->is_tv) { | ||
| 1179 | /* XXX: Save TV format/enhancements. */ | ||
| 1180 | } | ||
| 755 | 1181 | ||
| 756 | sdvo_priv->save_SDVOX = I915_READ(sdvo_priv->output_device); | 1182 | sdvo_priv->save_SDVOX = I915_READ(sdvo_priv->output_device); |
| 757 | } | 1183 | } |
| @@ -759,7 +1185,6 @@ static void intel_sdvo_save(struct drm_connector *connector) | |||
| 759 | static void intel_sdvo_restore(struct drm_connector *connector) | 1185 | static void intel_sdvo_restore(struct drm_connector *connector) |
| 760 | { | 1186 | { |
| 761 | struct drm_device *dev = connector->dev; | 1187 | struct drm_device *dev = connector->dev; |
| 762 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
| 763 | struct intel_output *intel_output = to_intel_output(connector); | 1188 | struct intel_output *intel_output = to_intel_output(connector); |
| 764 | struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; | 1189 | struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; |
| 765 | int o; | 1190 | int o; |
| @@ -790,7 +1215,11 @@ static void intel_sdvo_restore(struct drm_connector *connector) | |||
| 790 | 1215 | ||
| 791 | intel_sdvo_set_clock_rate_mult(intel_output, sdvo_priv->save_sdvo_mult); | 1216 | intel_sdvo_set_clock_rate_mult(intel_output, sdvo_priv->save_sdvo_mult); |
| 792 | 1217 | ||
| 793 | I915_WRITE(sdvo_priv->output_device, sdvo_priv->save_SDVOX); | 1218 | if (sdvo_priv->is_tv) { |
| 1219 | /* XXX: Restore TV format/enhancements. */ | ||
| 1220 | } | ||
| 1221 | |||
| 1222 | intel_sdvo_write_sdvox(intel_output, sdvo_priv->save_SDVOX); | ||
| 794 | 1223 | ||
| 795 | if (sdvo_priv->save_SDVOX & SDVO_ENABLE) | 1224 | if (sdvo_priv->save_SDVOX & SDVO_ENABLE) |
| 796 | { | 1225 | { |
| @@ -916,20 +1345,173 @@ static enum drm_connector_status intel_sdvo_detect(struct drm_connector *connect | |||
| 916 | status = intel_sdvo_read_response(intel_output, &response, 2); | 1345 | status = intel_sdvo_read_response(intel_output, &response, 2); |
| 917 | 1346 | ||
| 918 | DRM_DEBUG("SDVO response %d %d\n", response[0], response[1]); | 1347 | DRM_DEBUG("SDVO response %d %d\n", response[0], response[1]); |
| 1348 | |||
| 1349 | if (status != SDVO_CMD_STATUS_SUCCESS) | ||
| 1350 | return connector_status_unknown; | ||
| 1351 | |||
| 919 | if ((response[0] != 0) || (response[1] != 0)) | 1352 | if ((response[0] != 0) || (response[1] != 0)) |
| 920 | return connector_status_connected; | 1353 | return connector_status_connected; |
| 921 | else | 1354 | else |
| 922 | return connector_status_disconnected; | 1355 | return connector_status_disconnected; |
| 923 | } | 1356 | } |
| 924 | 1357 | ||
| 925 | static int intel_sdvo_get_modes(struct drm_connector *connector) | 1358 | static void intel_sdvo_get_ddc_modes(struct drm_connector *connector) |
| 926 | { | 1359 | { |
| 927 | struct intel_output *intel_output = to_intel_output(connector); | 1360 | struct intel_output *intel_output = to_intel_output(connector); |
| 1361 | struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; | ||
| 928 | 1362 | ||
| 929 | /* set the bus switch and get the modes */ | 1363 | /* set the bus switch and get the modes */ |
| 930 | intel_sdvo_set_control_bus_switch(intel_output, SDVO_CONTROL_BUS_DDC2); | 1364 | intel_sdvo_set_control_bus_switch(intel_output, sdvo_priv->ddc_bus); |
| 931 | intel_ddc_get_modes(intel_output); | 1365 | intel_ddc_get_modes(intel_output); |
| 932 | 1366 | ||
| 1367 | #if 0 | ||
| 1368 | struct drm_device *dev = encoder->dev; | ||
| 1369 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
| 1370 | /* Mac mini hack. On this device, I get DDC through the analog, which | ||
| 1371 | * load-detects as disconnected. I fail to DDC through the SDVO DDC, | ||
| 1372 | * but it does load-detect as connected. So, just steal the DDC bits | ||
| 1373 | * from analog when we fail at finding it the right way. | ||
| 1374 | */ | ||
| 1375 | crt = xf86_config->output[0]; | ||
| 1376 | intel_output = crt->driver_private; | ||
| 1377 | if (intel_output->type == I830_OUTPUT_ANALOG && | ||
| 1378 | crt->funcs->detect(crt) == XF86OutputStatusDisconnected) { | ||
| 1379 | I830I2CInit(pScrn, &intel_output->pDDCBus, GPIOA, "CRTDDC_A"); | ||
| 1380 | edid_mon = xf86OutputGetEDID(crt, intel_output->pDDCBus); | ||
| 1381 | xf86DestroyI2CBusRec(intel_output->pDDCBus, true, true); | ||
| 1382 | } | ||
| 1383 | if (edid_mon) { | ||
| 1384 | xf86OutputSetEDID(output, edid_mon); | ||
| 1385 | modes = xf86OutputGetEDIDModes(output); | ||
| 1386 | } | ||
| 1387 | #endif | ||
| 1388 | } | ||
| 1389 | |||
| 1390 | /** | ||
| 1391 | * This function checks the current TV format, and chooses a default if | ||
| 1392 | * it hasn't been set. | ||
| 1393 | */ | ||
| 1394 | static void | ||
| 1395 | intel_sdvo_check_tv_format(struct intel_output *output) | ||
| 1396 | { | ||
| 1397 | struct intel_sdvo_priv *dev_priv = output->dev_priv; | ||
| 1398 | struct intel_sdvo_tv_format format, unset; | ||
| 1399 | uint8_t status; | ||
| 1400 | |||
| 1401 | intel_sdvo_write_cmd(output, SDVO_CMD_GET_TV_FORMAT, NULL, 0); | ||
| 1402 | status = intel_sdvo_read_response(output, &format, sizeof(format)); | ||
| 1403 | if (status != SDVO_CMD_STATUS_SUCCESS) | ||
| 1404 | return; | ||
| 1405 | |||
| 1406 | memset(&unset, 0, sizeof(unset)); | ||
| 1407 | if (memcmp(&format, &unset, sizeof(format))) { | ||
| 1408 | DRM_DEBUG("%s: Choosing default TV format of NTSC-M\n", | ||
| 1409 | SDVO_NAME(dev_priv)); | ||
| 1410 | |||
| 1411 | format.ntsc_m = true; | ||
| 1412 | intel_sdvo_write_cmd(output, SDVO_CMD_SET_TV_FORMAT, NULL, 0); | ||
| 1413 | status = intel_sdvo_read_response(output, NULL, 0); | ||
| 1414 | } | ||
| 1415 | } | ||
| 1416 | |||
| 1417 | /* | ||
| 1418 | * Set of SDVO TV modes. | ||
| 1419 | * Note! This is in reply order (see loop in get_tv_modes). | ||
| 1420 | * XXX: all 60Hz refresh? | ||
| 1421 | */ | ||
| 1422 | struct drm_display_mode sdvo_tv_modes[] = { | ||
| 1423 | { DRM_MODE("320x200", DRM_MODE_TYPE_DRIVER, 5815680, 321, 384, 416, | ||
| 1424 | 200, 0, 232, 201, 233, 4196112, 0, | ||
| 1425 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1426 | { DRM_MODE("320x240", DRM_MODE_TYPE_DRIVER, 6814080, 321, 384, 416, | ||
| 1427 | 240, 0, 272, 241, 273, 4196112, 0, | ||
| 1428 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1429 | { DRM_MODE("400x300", DRM_MODE_TYPE_DRIVER, 9910080, 401, 464, 496, | ||
| 1430 | 300, 0, 332, 301, 333, 4196112, 0, | ||
| 1431 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1432 | { DRM_MODE("640x350", DRM_MODE_TYPE_DRIVER, 16913280, 641, 704, 736, | ||
| 1433 | 350, 0, 382, 351, 383, 4196112, 0, | ||
| 1434 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1435 | { DRM_MODE("640x400", DRM_MODE_TYPE_DRIVER, 19121280, 641, 704, 736, | ||
| 1436 | 400, 0, 432, 401, 433, 4196112, 0, | ||
| 1437 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1438 | { DRM_MODE("640x400", DRM_MODE_TYPE_DRIVER, 19121280, 641, 704, 736, | ||
| 1439 | 400, 0, 432, 401, 433, 4196112, 0, | ||
| 1440 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1441 | { DRM_MODE("704x480", DRM_MODE_TYPE_DRIVER, 24624000, 705, 768, 800, | ||
| 1442 | 480, 0, 512, 481, 513, 4196112, 0, | ||
| 1443 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1444 | { DRM_MODE("704x576", DRM_MODE_TYPE_DRIVER, 29232000, 705, 768, 800, | ||
| 1445 | 576, 0, 608, 577, 609, 4196112, 0, | ||
| 1446 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1447 | { DRM_MODE("720x350", DRM_MODE_TYPE_DRIVER, 18751680, 721, 784, 816, | ||
| 1448 | 350, 0, 382, 351, 383, 4196112, 0, | ||
| 1449 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1450 | { DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 21199680, 721, 784, 816, | ||
| 1451 | 400, 0, 432, 401, 433, 4196112, 0, | ||
| 1452 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1453 | { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 25116480, 721, 784, 816, | ||
| 1454 | 480, 0, 512, 481, 513, 4196112, 0, | ||
| 1455 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1456 | { DRM_MODE("720x540", DRM_MODE_TYPE_DRIVER, 28054080, 721, 784, 816, | ||
| 1457 | 540, 0, 572, 541, 573, 4196112, 0, | ||
| 1458 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1459 | { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 29816640, 721, 784, 816, | ||
| 1460 | 576, 0, 608, 577, 609, 4196112, 0, | ||
| 1461 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1462 | { DRM_MODE("768x576", DRM_MODE_TYPE_DRIVER, 31570560, 769, 832, 864, | ||
| 1463 | 576, 0, 608, 577, 609, 4196112, 0, | ||
| 1464 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1465 | { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 34030080, 801, 864, 896, | ||
| 1466 | 600, 0, 632, 601, 633, 4196112, 0, | ||
| 1467 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1468 | { DRM_MODE("832x624", DRM_MODE_TYPE_DRIVER, 36581760, 833, 896, 928, | ||
| 1469 | 624, 0, 656, 625, 657, 4196112, 0, | ||
| 1470 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1471 | { DRM_MODE("920x766", DRM_MODE_TYPE_DRIVER, 48707040, 921, 984, 1016, | ||
| 1472 | 766, 0, 798, 767, 799, 4196112, 0, | ||
| 1473 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1474 | { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 53827200, 1025, 1088, 1120, | ||
| 1475 | 768, 0, 800, 769, 801, 4196112, 0, | ||
| 1476 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1477 | { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 87265920, 1281, 1344, 1376, | ||
| 1478 | 1024, 0, 1056, 1025, 1057, 4196112, 0, | ||
| 1479 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | ||
| 1480 | }; | ||
| 1481 | |||
| 1482 | static void intel_sdvo_get_tv_modes(struct drm_connector *connector) | ||
| 1483 | { | ||
| 1484 | struct intel_output *output = to_intel_output(connector); | ||
| 1485 | uint32_t reply = 0; | ||
| 1486 | uint8_t status; | ||
| 1487 | int i = 0; | ||
| 1488 | |||
| 1489 | intel_sdvo_check_tv_format(output); | ||
| 1490 | |||
| 1491 | /* Read the list of supported input resolutions for the selected TV | ||
| 1492 | * format. | ||
| 1493 | */ | ||
| 1494 | intel_sdvo_write_cmd(output, SDVO_CMD_GET_SDTV_RESOLUTION_SUPPORT, | ||
| 1495 | NULL, 0); | ||
| 1496 | status = intel_sdvo_read_response(output, &reply, 3); | ||
| 1497 | if (status != SDVO_CMD_STATUS_SUCCESS) | ||
| 1498 | return; | ||
| 1499 | |||
| 1500 | for (i = 0; i < ARRAY_SIZE(sdvo_tv_modes); i++) | ||
| 1501 | if (reply & (1 << i)) | ||
| 1502 | drm_mode_probed_add(connector, &sdvo_tv_modes[i]); | ||
| 1503 | } | ||
| 1504 | |||
| 1505 | static int intel_sdvo_get_modes(struct drm_connector *connector) | ||
| 1506 | { | ||
| 1507 | struct intel_output *output = to_intel_output(connector); | ||
| 1508 | struct intel_sdvo_priv *sdvo_priv = output->dev_priv; | ||
| 1509 | |||
| 1510 | if (sdvo_priv->is_tv) | ||
| 1511 | intel_sdvo_get_tv_modes(connector); | ||
| 1512 | else | ||
| 1513 | intel_sdvo_get_ddc_modes(connector); | ||
| 1514 | |||
| 933 | if (list_empty(&connector->probed_modes)) | 1515 | if (list_empty(&connector->probed_modes)) |
| 934 | return 0; | 1516 | return 0; |
| 935 | return 1; | 1517 | return 1; |
| @@ -978,6 +1560,65 @@ static const struct drm_encoder_funcs intel_sdvo_enc_funcs = { | |||
| 978 | }; | 1560 | }; |
| 979 | 1561 | ||
| 980 | 1562 | ||
| 1563 | /** | ||
| 1564 | * Choose the appropriate DDC bus for control bus switch command for this | ||
| 1565 | * SDVO output based on the controlled output. | ||
| 1566 | * | ||
| 1567 | * DDC bus number assignment is in a priority order of RGB outputs, then TMDS | ||
| 1568 | * outputs, then LVDS outputs. | ||
| 1569 | */ | ||
| 1570 | static void | ||
| 1571 | intel_sdvo_select_ddc_bus(struct intel_sdvo_priv *dev_priv) | ||
| 1572 | { | ||
| 1573 | uint16_t mask = 0; | ||
| 1574 | unsigned int num_bits; | ||
| 1575 | |||
| 1576 | /* Make a mask of outputs less than or equal to our own priority in the | ||
| 1577 | * list. | ||
| 1578 | */ | ||
| 1579 | switch (dev_priv->controlled_output) { | ||
| 1580 | case SDVO_OUTPUT_LVDS1: | ||
| 1581 | mask |= SDVO_OUTPUT_LVDS1; | ||
| 1582 | case SDVO_OUTPUT_LVDS0: | ||
| 1583 | mask |= SDVO_OUTPUT_LVDS0; | ||
| 1584 | case SDVO_OUTPUT_TMDS1: | ||
| 1585 | mask |= SDVO_OUTPUT_TMDS1; | ||
| 1586 | case SDVO_OUTPUT_TMDS0: | ||
| 1587 | mask |= SDVO_OUTPUT_TMDS0; | ||
| 1588 | case SDVO_OUTPUT_RGB1: | ||
| 1589 | mask |= SDVO_OUTPUT_RGB1; | ||
| 1590 | case SDVO_OUTPUT_RGB0: | ||
| 1591 | mask |= SDVO_OUTPUT_RGB0; | ||
| 1592 | break; | ||
| 1593 | } | ||
| 1594 | |||
| 1595 | /* Count bits to find what number we are in the priority list. */ | ||
| 1596 | mask &= dev_priv->caps.output_flags; | ||
| 1597 | num_bits = hweight16(mask); | ||
| 1598 | if (num_bits > 3) { | ||
| 1599 | /* if more than 3 outputs, default to DDC bus 3 for now */ | ||
| 1600 | num_bits = 3; | ||
| 1601 | } | ||
| 1602 | |||
| 1603 | /* Corresponds to SDVO_CONTROL_BUS_DDCx */ | ||
| 1604 | dev_priv->ddc_bus = 1 << num_bits; | ||
| 1605 | } | ||
| 1606 | |||
| 1607 | static bool | ||
| 1608 | intel_sdvo_get_digital_encoding_mode(struct intel_output *output) | ||
| 1609 | { | ||
| 1610 | struct intel_sdvo_priv *sdvo_priv = output->dev_priv; | ||
| 1611 | uint8_t status; | ||
| 1612 | |||
| 1613 | intel_sdvo_set_target_output(output, sdvo_priv->controlled_output); | ||
| 1614 | |||
| 1615 | intel_sdvo_write_cmd(output, SDVO_CMD_GET_ENCODE, NULL, 0); | ||
| 1616 | status = intel_sdvo_read_response(output, &sdvo_priv->is_hdmi, 1); | ||
| 1617 | if (status != SDVO_CMD_STATUS_SUCCESS) | ||
| 1618 | return false; | ||
| 1619 | return true; | ||
| 1620 | } | ||
| 1621 | |||
| 981 | bool intel_sdvo_init(struct drm_device *dev, int output_device) | 1622 | bool intel_sdvo_init(struct drm_device *dev, int output_device) |
| 982 | { | 1623 | { |
| 983 | struct drm_connector *connector; | 1624 | struct drm_connector *connector; |
| @@ -1040,45 +1681,76 @@ bool intel_sdvo_init(struct drm_device *dev, int output_device) | |||
| 1040 | 1681 | ||
| 1041 | intel_sdvo_get_capabilities(intel_output, &sdvo_priv->caps); | 1682 | intel_sdvo_get_capabilities(intel_output, &sdvo_priv->caps); |
| 1042 | 1683 | ||
| 1043 | memset(&sdvo_priv->active_outputs, 0, sizeof(sdvo_priv->active_outputs)); | 1684 | if (sdvo_priv->caps.output_flags & |
| 1685 | (SDVO_OUTPUT_TMDS0 | SDVO_OUTPUT_TMDS1)) { | ||
| 1686 | if (sdvo_priv->caps.output_flags & SDVO_OUTPUT_TMDS0) | ||
| 1687 | sdvo_priv->controlled_output = SDVO_OUTPUT_TMDS0; | ||
| 1688 | else | ||
| 1689 | sdvo_priv->controlled_output = SDVO_OUTPUT_TMDS1; | ||
| 1690 | |||
| 1691 | connector->display_info.subpixel_order = SubPixelHorizontalRGB; | ||
| 1692 | encoder_type = DRM_MODE_ENCODER_TMDS; | ||
| 1693 | connector_type = DRM_MODE_CONNECTOR_DVID; | ||
| 1044 | 1694 | ||
| 1045 | /* TODO, CVBS, SVID, YPRPB & SCART outputs. */ | 1695 | if (intel_sdvo_get_supp_encode(intel_output, |
| 1046 | if (sdvo_priv->caps.output_flags & SDVO_OUTPUT_RGB0) | 1696 | &sdvo_priv->encode) && |
| 1697 | intel_sdvo_get_digital_encoding_mode(intel_output) && | ||
| 1698 | sdvo_priv->is_hdmi) { | ||
| 1699 | /* enable hdmi encoding mode if supported */ | ||
| 1700 | intel_sdvo_set_encode(intel_output, SDVO_ENCODE_HDMI); | ||
| 1701 | intel_sdvo_set_colorimetry(intel_output, | ||
| 1702 | SDVO_COLORIMETRY_RGB256); | ||
| 1703 | connector_type = DRM_MODE_CONNECTOR_HDMIA; | ||
| 1704 | } | ||
| 1705 | } | ||
| 1706 | else if (sdvo_priv->caps.output_flags & SDVO_OUTPUT_SVID0) | ||
| 1047 | { | 1707 | { |
| 1048 | sdvo_priv->active_outputs = SDVO_OUTPUT_RGB0; | 1708 | sdvo_priv->controlled_output = SDVO_OUTPUT_SVID0; |
| 1709 | connector->display_info.subpixel_order = SubPixelHorizontalRGB; | ||
| 1710 | encoder_type = DRM_MODE_ENCODER_TVDAC; | ||
| 1711 | connector_type = DRM_MODE_CONNECTOR_SVIDEO; | ||
| 1712 | sdvo_priv->is_tv = true; | ||
| 1713 | intel_output->needs_tv_clock = true; | ||
| 1714 | } | ||
| 1715 | else if (sdvo_priv->caps.output_flags & SDVO_OUTPUT_RGB0) | ||
| 1716 | { | ||
| 1717 | sdvo_priv->controlled_output = SDVO_OUTPUT_RGB0; | ||
| 1049 | connector->display_info.subpixel_order = SubPixelHorizontalRGB; | 1718 | connector->display_info.subpixel_order = SubPixelHorizontalRGB; |
| 1050 | encoder_type = DRM_MODE_ENCODER_DAC; | 1719 | encoder_type = DRM_MODE_ENCODER_DAC; |
| 1051 | connector_type = DRM_MODE_CONNECTOR_VGA; | 1720 | connector_type = DRM_MODE_CONNECTOR_VGA; |
| 1052 | } | 1721 | } |
| 1053 | else if (sdvo_priv->caps.output_flags & SDVO_OUTPUT_RGB1) | 1722 | else if (sdvo_priv->caps.output_flags & SDVO_OUTPUT_RGB1) |
| 1054 | { | 1723 | { |
| 1055 | sdvo_priv->active_outputs = SDVO_OUTPUT_RGB1; | 1724 | sdvo_priv->controlled_output = SDVO_OUTPUT_RGB1; |
| 1056 | connector->display_info.subpixel_order = SubPixelHorizontalRGB; | 1725 | connector->display_info.subpixel_order = SubPixelHorizontalRGB; |
| 1057 | encoder_type = DRM_MODE_ENCODER_DAC; | 1726 | encoder_type = DRM_MODE_ENCODER_DAC; |
| 1058 | connector_type = DRM_MODE_CONNECTOR_VGA; | 1727 | connector_type = DRM_MODE_CONNECTOR_VGA; |
| 1059 | } | 1728 | } |
| 1060 | else if (sdvo_priv->caps.output_flags & SDVO_OUTPUT_TMDS0) | 1729 | else if (sdvo_priv->caps.output_flags & SDVO_OUTPUT_LVDS0) |
| 1061 | { | 1730 | { |
| 1062 | sdvo_priv->active_outputs = SDVO_OUTPUT_TMDS0; | 1731 | sdvo_priv->controlled_output = SDVO_OUTPUT_LVDS0; |
| 1063 | connector->display_info.subpixel_order = SubPixelHorizontalRGB; | 1732 | connector->display_info.subpixel_order = SubPixelHorizontalRGB; |
| 1064 | encoder_type = DRM_MODE_ENCODER_TMDS; | 1733 | encoder_type = DRM_MODE_ENCODER_LVDS; |
| 1065 | connector_type = DRM_MODE_CONNECTOR_DVID; | 1734 | connector_type = DRM_MODE_CONNECTOR_LVDS; |
| 1066 | } | 1735 | } |
| 1067 | else if (sdvo_priv->caps.output_flags & SDVO_OUTPUT_TMDS1) | 1736 | else if (sdvo_priv->caps.output_flags & SDVO_OUTPUT_LVDS1) |
| 1068 | { | 1737 | { |
| 1069 | sdvo_priv->active_outputs = SDVO_OUTPUT_TMDS1; | 1738 | sdvo_priv->controlled_output = SDVO_OUTPUT_LVDS1; |
| 1070 | connector->display_info.subpixel_order = SubPixelHorizontalRGB; | 1739 | connector->display_info.subpixel_order = SubPixelHorizontalRGB; |
| 1071 | encoder_type = DRM_MODE_ENCODER_TMDS; | 1740 | encoder_type = DRM_MODE_ENCODER_LVDS; |
| 1072 | connector_type = DRM_MODE_CONNECTOR_DVID; | 1741 | connector_type = DRM_MODE_CONNECTOR_LVDS; |
| 1073 | } | 1742 | } |
| 1074 | else | 1743 | else |
| 1075 | { | 1744 | { |
| 1076 | unsigned char bytes[2]; | 1745 | unsigned char bytes[2]; |
| 1077 | 1746 | ||
| 1747 | sdvo_priv->controlled_output = 0; | ||
| 1078 | memcpy (bytes, &sdvo_priv->caps.output_flags, 2); | 1748 | memcpy (bytes, &sdvo_priv->caps.output_flags, 2); |
| 1079 | DRM_DEBUG("%s: No active RGB or TMDS outputs (0x%02x%02x)\n", | 1749 | DRM_DEBUG("%s: Unknown SDVO output type (0x%02x%02x)\n", |
| 1080 | SDVO_NAME(sdvo_priv), | 1750 | SDVO_NAME(sdvo_priv), |
| 1081 | bytes[0], bytes[1]); | 1751 | bytes[0], bytes[1]); |
| 1752 | encoder_type = DRM_MODE_ENCODER_NONE; | ||
| 1753 | connector_type = DRM_MODE_CONNECTOR_Unknown; | ||
| 1082 | goto err_i2c; | 1754 | goto err_i2c; |
| 1083 | } | 1755 | } |
| 1084 | 1756 | ||
| @@ -1089,6 +1761,8 @@ bool intel_sdvo_init(struct drm_device *dev, int output_device) | |||
| 1089 | drm_mode_connector_attach_encoder(&intel_output->base, &intel_output->enc); | 1761 | drm_mode_connector_attach_encoder(&intel_output->base, &intel_output->enc); |
| 1090 | drm_sysfs_connector_add(connector); | 1762 | drm_sysfs_connector_add(connector); |
| 1091 | 1763 | ||
| 1764 | intel_sdvo_select_ddc_bus(sdvo_priv); | ||
| 1765 | |||
| 1092 | /* Set the input timing to the screen. Assume always input 0. */ | 1766 | /* Set the input timing to the screen. Assume always input 0. */ |
| 1093 | intel_sdvo_set_target_input(intel_output, true, false); | 1767 | intel_sdvo_set_target_input(intel_output, true, false); |
| 1094 | 1768 | ||
diff --git a/drivers/gpu/drm/i915/intel_sdvo_regs.h b/drivers/gpu/drm/i915/intel_sdvo_regs.h index 861a43f8693c..1117b9c151a6 100644 --- a/drivers/gpu/drm/i915/intel_sdvo_regs.h +++ b/drivers/gpu/drm/i915/intel_sdvo_regs.h | |||
| @@ -173,6 +173,9 @@ struct intel_sdvo_get_trained_inputs_response { | |||
| 173 | * Returns two struct intel_sdvo_output_flags structures. | 173 | * Returns two struct intel_sdvo_output_flags structures. |
| 174 | */ | 174 | */ |
| 175 | #define SDVO_CMD_GET_IN_OUT_MAP 0x06 | 175 | #define SDVO_CMD_GET_IN_OUT_MAP 0x06 |
| 176 | struct intel_sdvo_in_out_map { | ||
| 177 | u16 in0, in1; | ||
| 178 | }; | ||
| 176 | 179 | ||
| 177 | /** | 180 | /** |
| 178 | * Sets the current mapping of SDVO inputs to outputs on the device. | 181 | * Sets the current mapping of SDVO inputs to outputs on the device. |
| @@ -206,7 +209,8 @@ struct intel_sdvo_get_trained_inputs_response { | |||
| 206 | struct intel_sdvo_get_interrupt_event_source_response { | 209 | struct intel_sdvo_get_interrupt_event_source_response { |
| 207 | u16 interrupt_status; | 210 | u16 interrupt_status; |
| 208 | unsigned int ambient_light_interrupt:1; | 211 | unsigned int ambient_light_interrupt:1; |
| 209 | unsigned int pad:7; | 212 | unsigned int hdmi_audio_encrypt_change:1; |
| 213 | unsigned int pad:6; | ||
| 210 | } __attribute__((packed)); | 214 | } __attribute__((packed)); |
| 211 | 215 | ||
| 212 | /** | 216 | /** |
| @@ -305,23 +309,411 @@ struct intel_sdvo_set_target_input_args { | |||
| 305 | # define SDVO_CLOCK_RATE_MULT_4X (1 << 3) | 309 | # define SDVO_CLOCK_RATE_MULT_4X (1 << 3) |
| 306 | 310 | ||
| 307 | #define SDVO_CMD_GET_SUPPORTED_TV_FORMATS 0x27 | 311 | #define SDVO_CMD_GET_SUPPORTED_TV_FORMATS 0x27 |
| 312 | /** 5 bytes of bit flags for TV formats shared by all TV format functions */ | ||
| 313 | struct intel_sdvo_tv_format { | ||
| 314 | unsigned int ntsc_m:1; | ||
| 315 | unsigned int ntsc_j:1; | ||
| 316 | unsigned int ntsc_443:1; | ||
| 317 | unsigned int pal_b:1; | ||
| 318 | unsigned int pal_d:1; | ||
| 319 | unsigned int pal_g:1; | ||
| 320 | unsigned int pal_h:1; | ||
| 321 | unsigned int pal_i:1; | ||
| 322 | |||
| 323 | unsigned int pal_m:1; | ||
| 324 | unsigned int pal_n:1; | ||
| 325 | unsigned int pal_nc:1; | ||
| 326 | unsigned int pal_60:1; | ||
| 327 | unsigned int secam_b:1; | ||
| 328 | unsigned int secam_d:1; | ||
| 329 | unsigned int secam_g:1; | ||
| 330 | unsigned int secam_k:1; | ||
| 331 | |||
| 332 | unsigned int secam_k1:1; | ||
| 333 | unsigned int secam_l:1; | ||
| 334 | unsigned int secam_60:1; | ||
| 335 | unsigned int hdtv_std_smpte_240m_1080i_59:1; | ||
| 336 | unsigned int hdtv_std_smpte_240m_1080i_60:1; | ||
| 337 | unsigned int hdtv_std_smpte_260m_1080i_59:1; | ||
| 338 | unsigned int hdtv_std_smpte_260m_1080i_60:1; | ||
| 339 | unsigned int hdtv_std_smpte_274m_1080i_50:1; | ||
| 340 | |||
| 341 | unsigned int hdtv_std_smpte_274m_1080i_59:1; | ||
| 342 | unsigned int hdtv_std_smpte_274m_1080i_60:1; | ||
| 343 | unsigned int hdtv_std_smpte_274m_1080p_23:1; | ||
| 344 | unsigned int hdtv_std_smpte_274m_1080p_24:1; | ||
| 345 | unsigned int hdtv_std_smpte_274m_1080p_25:1; | ||
| 346 | unsigned int hdtv_std_smpte_274m_1080p_29:1; | ||
| 347 | unsigned int hdtv_std_smpte_274m_1080p_30:1; | ||
| 348 | unsigned int hdtv_std_smpte_274m_1080p_50:1; | ||
| 349 | |||
| 350 | unsigned int hdtv_std_smpte_274m_1080p_59:1; | ||
| 351 | unsigned int hdtv_std_smpte_274m_1080p_60:1; | ||
| 352 | unsigned int hdtv_std_smpte_295m_1080i_50:1; | ||
| 353 | unsigned int hdtv_std_smpte_295m_1080p_50:1; | ||
| 354 | unsigned int hdtv_std_smpte_296m_720p_59:1; | ||
| 355 | unsigned int hdtv_std_smpte_296m_720p_60:1; | ||
| 356 | unsigned int hdtv_std_smpte_296m_720p_50:1; | ||
| 357 | unsigned int hdtv_std_smpte_293m_480p_59:1; | ||
| 358 | |||
| 359 | unsigned int hdtv_std_smpte_170m_480i_59:1; | ||
| 360 | unsigned int hdtv_std_iturbt601_576i_50:1; | ||
| 361 | unsigned int hdtv_std_iturbt601_576p_50:1; | ||
| 362 | unsigned int hdtv_std_eia_7702a_480i_60:1; | ||
| 363 | unsigned int hdtv_std_eia_7702a_480p_60:1; | ||
| 364 | unsigned int pad:3; | ||
| 365 | } __attribute__((packed)); | ||
| 308 | 366 | ||
| 309 | #define SDVO_CMD_GET_TV_FORMAT 0x28 | 367 | #define SDVO_CMD_GET_TV_FORMAT 0x28 |
| 310 | 368 | ||
| 311 | #define SDVO_CMD_SET_TV_FORMAT 0x29 | 369 | #define SDVO_CMD_SET_TV_FORMAT 0x29 |
| 312 | 370 | ||
| 371 | /** Returns the resolutiosn that can be used with the given TV format */ | ||
| 372 | #define SDVO_CMD_GET_SDTV_RESOLUTION_SUPPORT 0x83 | ||
| 373 | struct intel_sdvo_sdtv_resolution_request { | ||
| 374 | unsigned int ntsc_m:1; | ||
| 375 | unsigned int ntsc_j:1; | ||
| 376 | unsigned int ntsc_443:1; | ||
| 377 | unsigned int pal_b:1; | ||
| 378 | unsigned int pal_d:1; | ||
| 379 | unsigned int pal_g:1; | ||
| 380 | unsigned int pal_h:1; | ||
| 381 | unsigned int pal_i:1; | ||
| 382 | |||
| 383 | unsigned int pal_m:1; | ||
| 384 | unsigned int pal_n:1; | ||
| 385 | unsigned int pal_nc:1; | ||
| 386 | unsigned int pal_60:1; | ||
| 387 | unsigned int secam_b:1; | ||
| 388 | unsigned int secam_d:1; | ||
| 389 | unsigned int secam_g:1; | ||
| 390 | unsigned int secam_k:1; | ||
| 391 | |||
| 392 | unsigned int secam_k1:1; | ||
| 393 | unsigned int secam_l:1; | ||
| 394 | unsigned int secam_60:1; | ||
| 395 | unsigned int pad:5; | ||
| 396 | } __attribute__((packed)); | ||
| 397 | |||
| 398 | struct intel_sdvo_sdtv_resolution_reply { | ||
| 399 | unsigned int res_320x200:1; | ||
| 400 | unsigned int res_320x240:1; | ||
| 401 | unsigned int res_400x300:1; | ||
| 402 | unsigned int res_640x350:1; | ||
| 403 | unsigned int res_640x400:1; | ||
| 404 | unsigned int res_640x480:1; | ||
| 405 | unsigned int res_704x480:1; | ||
| 406 | unsigned int res_704x576:1; | ||
| 407 | |||
| 408 | unsigned int res_720x350:1; | ||
| 409 | unsigned int res_720x400:1; | ||
| 410 | unsigned int res_720x480:1; | ||
| 411 | unsigned int res_720x540:1; | ||
| 412 | unsigned int res_720x576:1; | ||
| 413 | unsigned int res_768x576:1; | ||
| 414 | unsigned int res_800x600:1; | ||
| 415 | unsigned int res_832x624:1; | ||
| 416 | |||
| 417 | unsigned int res_920x766:1; | ||
| 418 | unsigned int res_1024x768:1; | ||
| 419 | unsigned int res_1280x1024:1; | ||
| 420 | unsigned int pad:5; | ||
| 421 | } __attribute__((packed)); | ||
| 422 | |||
| 423 | /* Get supported resolution with squire pixel aspect ratio that can be | ||
| 424 | scaled for the requested HDTV format */ | ||
| 425 | #define SDVO_CMD_GET_SCALED_HDTV_RESOLUTION_SUPPORT 0x85 | ||
| 426 | |||
| 427 | struct intel_sdvo_hdtv_resolution_request { | ||
| 428 | unsigned int hdtv_std_smpte_240m_1080i_59:1; | ||
| 429 | unsigned int hdtv_std_smpte_240m_1080i_60:1; | ||
| 430 | unsigned int hdtv_std_smpte_260m_1080i_59:1; | ||
| 431 | unsigned int hdtv_std_smpte_260m_1080i_60:1; | ||
| 432 | unsigned int hdtv_std_smpte_274m_1080i_50:1; | ||
| 433 | unsigned int hdtv_std_smpte_274m_1080i_59:1; | ||
| 434 | unsigned int hdtv_std_smpte_274m_1080i_60:1; | ||
| 435 | unsigned int hdtv_std_smpte_274m_1080p_23:1; | ||
| 436 | |||
| 437 | unsigned int hdtv_std_smpte_274m_1080p_24:1; | ||
| 438 | unsigned int hdtv_std_smpte_274m_1080p_25:1; | ||
| 439 | unsigned int hdtv_std_smpte_274m_1080p_29:1; | ||
| 440 | unsigned int hdtv_std_smpte_274m_1080p_30:1; | ||
| 441 | unsigned int hdtv_std_smpte_274m_1080p_50:1; | ||
| 442 | unsigned int hdtv_std_smpte_274m_1080p_59:1; | ||
| 443 | unsigned int hdtv_std_smpte_274m_1080p_60:1; | ||
| 444 | unsigned int hdtv_std_smpte_295m_1080i_50:1; | ||
| 445 | |||
| 446 | unsigned int hdtv_std_smpte_295m_1080p_50:1; | ||
| 447 | unsigned int hdtv_std_smpte_296m_720p_59:1; | ||
| 448 | unsigned int hdtv_std_smpte_296m_720p_60:1; | ||
| 449 | unsigned int hdtv_std_smpte_296m_720p_50:1; | ||
| 450 | unsigned int hdtv_std_smpte_293m_480p_59:1; | ||
| 451 | unsigned int hdtv_std_smpte_170m_480i_59:1; | ||
| 452 | unsigned int hdtv_std_iturbt601_576i_50:1; | ||
| 453 | unsigned int hdtv_std_iturbt601_576p_50:1; | ||
| 454 | |||
| 455 | unsigned int hdtv_std_eia_7702a_480i_60:1; | ||
| 456 | unsigned int hdtv_std_eia_7702a_480p_60:1; | ||
| 457 | unsigned int pad:6; | ||
| 458 | } __attribute__((packed)); | ||
| 459 | |||
| 460 | struct intel_sdvo_hdtv_resolution_reply { | ||
| 461 | unsigned int res_640x480:1; | ||
| 462 | unsigned int res_800x600:1; | ||
| 463 | unsigned int res_1024x768:1; | ||
| 464 | unsigned int res_1280x960:1; | ||
| 465 | unsigned int res_1400x1050:1; | ||
| 466 | unsigned int res_1600x1200:1; | ||
| 467 | unsigned int res_1920x1440:1; | ||
| 468 | unsigned int res_2048x1536:1; | ||
| 469 | |||
| 470 | unsigned int res_2560x1920:1; | ||
| 471 | unsigned int res_3200x2400:1; | ||
| 472 | unsigned int res_3840x2880:1; | ||
| 473 | unsigned int pad1:5; | ||
| 474 | |||
| 475 | unsigned int res_848x480:1; | ||
| 476 | unsigned int res_1064x600:1; | ||
| 477 | unsigned int res_1280x720:1; | ||
| 478 | unsigned int res_1360x768:1; | ||
| 479 | unsigned int res_1704x960:1; | ||
| 480 | unsigned int res_1864x1050:1; | ||
| 481 | unsigned int res_1920x1080:1; | ||
| 482 | unsigned int res_2128x1200:1; | ||
| 483 | |||
| 484 | unsigned int res_2560x1400:1; | ||
| 485 | unsigned int res_2728x1536:1; | ||
| 486 | unsigned int res_3408x1920:1; | ||
| 487 | unsigned int res_4264x2400:1; | ||
| 488 | unsigned int res_5120x2880:1; | ||
| 489 | unsigned int pad2:3; | ||
| 490 | |||
| 491 | unsigned int res_768x480:1; | ||
| 492 | unsigned int res_960x600:1; | ||
| 493 | unsigned int res_1152x720:1; | ||
| 494 | unsigned int res_1124x768:1; | ||
| 495 | unsigned int res_1536x960:1; | ||
| 496 | unsigned int res_1680x1050:1; | ||
| 497 | unsigned int res_1728x1080:1; | ||
| 498 | unsigned int res_1920x1200:1; | ||
| 499 | |||
| 500 | unsigned int res_2304x1440:1; | ||
| 501 | unsigned int res_2456x1536:1; | ||
| 502 | unsigned int res_3072x1920:1; | ||
| 503 | unsigned int res_3840x2400:1; | ||
| 504 | unsigned int res_4608x2880:1; | ||
| 505 | unsigned int pad3:3; | ||
| 506 | |||
| 507 | unsigned int res_1280x1024:1; | ||
| 508 | unsigned int pad4:7; | ||
| 509 | |||
| 510 | unsigned int res_1280x768:1; | ||
| 511 | unsigned int pad5:7; | ||
| 512 | } __attribute__((packed)); | ||
| 513 | |||
| 514 | /* Get supported power state returns info for encoder and monitor, rely on | ||
| 515 | last SetTargetInput and SetTargetOutput calls */ | ||
| 313 | #define SDVO_CMD_GET_SUPPORTED_POWER_STATES 0x2a | 516 | #define SDVO_CMD_GET_SUPPORTED_POWER_STATES 0x2a |
| 517 | /* Get power state returns info for encoder and monitor, rely on last | ||
| 518 | SetTargetInput and SetTargetOutput calls */ | ||
| 519 | #define SDVO_CMD_GET_POWER_STATE 0x2b | ||
| 314 | #define SDVO_CMD_GET_ENCODER_POWER_STATE 0x2b | 520 | #define SDVO_CMD_GET_ENCODER_POWER_STATE 0x2b |
| 315 | #define SDVO_CMD_SET_ENCODER_POWER_STATE 0x2c | 521 | #define SDVO_CMD_SET_ENCODER_POWER_STATE 0x2c |
| 316 | # define SDVO_ENCODER_STATE_ON (1 << 0) | 522 | # define SDVO_ENCODER_STATE_ON (1 << 0) |
| 317 | # define SDVO_ENCODER_STATE_STANDBY (1 << 1) | 523 | # define SDVO_ENCODER_STATE_STANDBY (1 << 1) |
| 318 | # define SDVO_ENCODER_STATE_SUSPEND (1 << 2) | 524 | # define SDVO_ENCODER_STATE_SUSPEND (1 << 2) |
| 319 | # define SDVO_ENCODER_STATE_OFF (1 << 3) | 525 | # define SDVO_ENCODER_STATE_OFF (1 << 3) |
| 526 | # define SDVO_MONITOR_STATE_ON (1 << 4) | ||
| 527 | # define SDVO_MONITOR_STATE_STANDBY (1 << 5) | ||
| 528 | # define SDVO_MONITOR_STATE_SUSPEND (1 << 6) | ||
| 529 | # define SDVO_MONITOR_STATE_OFF (1 << 7) | ||
| 530 | |||
| 531 | #define SDVO_CMD_GET_MAX_PANEL_POWER_SEQUENCING 0x2d | ||
| 532 | #define SDVO_CMD_GET_PANEL_POWER_SEQUENCING 0x2e | ||
| 533 | #define SDVO_CMD_SET_PANEL_POWER_SEQUENCING 0x2f | ||
| 534 | /** | ||
| 535 | * The panel power sequencing parameters are in units of milliseconds. | ||
| 536 | * The high fields are bits 8:9 of the 10-bit values. | ||
| 537 | */ | ||
| 538 | struct sdvo_panel_power_sequencing { | ||
| 539 | u8 t0; | ||
| 540 | u8 t1; | ||
| 541 | u8 t2; | ||
| 542 | u8 t3; | ||
| 543 | u8 t4; | ||
| 544 | |||
| 545 | unsigned int t0_high:2; | ||
| 546 | unsigned int t1_high:2; | ||
| 547 | unsigned int t2_high:2; | ||
| 548 | unsigned int t3_high:2; | ||
| 549 | |||
| 550 | unsigned int t4_high:2; | ||
| 551 | unsigned int pad:6; | ||
| 552 | } __attribute__((packed)); | ||
| 553 | |||
| 554 | #define SDVO_CMD_GET_MAX_BACKLIGHT_LEVEL 0x30 | ||
| 555 | struct sdvo_max_backlight_reply { | ||
| 556 | u8 max_value; | ||
| 557 | u8 default_value; | ||
| 558 | } __attribute__((packed)); | ||
| 559 | |||
| 560 | #define SDVO_CMD_GET_BACKLIGHT_LEVEL 0x31 | ||
| 561 | #define SDVO_CMD_SET_BACKLIGHT_LEVEL 0x32 | ||
| 562 | |||
| 563 | #define SDVO_CMD_GET_AMBIENT_LIGHT 0x33 | ||
| 564 | struct sdvo_get_ambient_light_reply { | ||
| 565 | u16 trip_low; | ||
| 566 | u16 trip_high; | ||
| 567 | u16 value; | ||
| 568 | } __attribute__((packed)); | ||
| 569 | #define SDVO_CMD_SET_AMBIENT_LIGHT 0x34 | ||
| 570 | struct sdvo_set_ambient_light_reply { | ||
| 571 | u16 trip_low; | ||
| 572 | u16 trip_high; | ||
| 573 | unsigned int enable:1; | ||
| 574 | unsigned int pad:7; | ||
| 575 | } __attribute__((packed)); | ||
| 576 | |||
| 577 | /* Set display power state */ | ||
| 578 | #define SDVO_CMD_SET_DISPLAY_POWER_STATE 0x7d | ||
| 579 | # define SDVO_DISPLAY_STATE_ON (1 << 0) | ||
| 580 | # define SDVO_DISPLAY_STATE_STANDBY (1 << 1) | ||
| 581 | # define SDVO_DISPLAY_STATE_SUSPEND (1 << 2) | ||
| 582 | # define SDVO_DISPLAY_STATE_OFF (1 << 3) | ||
| 583 | |||
| 584 | #define SDVO_CMD_GET_SUPPORTED_ENHANCEMENTS 0x84 | ||
| 585 | struct intel_sdvo_enhancements_reply { | ||
| 586 | unsigned int flicker_filter:1; | ||
| 587 | unsigned int flicker_filter_adaptive:1; | ||
| 588 | unsigned int flicker_filter_2d:1; | ||
| 589 | unsigned int saturation:1; | ||
| 590 | unsigned int hue:1; | ||
| 591 | unsigned int brightness:1; | ||
| 592 | unsigned int contrast:1; | ||
| 593 | unsigned int overscan_h:1; | ||
| 594 | |||
| 595 | unsigned int overscan_v:1; | ||
| 596 | unsigned int position_h:1; | ||
| 597 | unsigned int position_v:1; | ||
| 598 | unsigned int sharpness:1; | ||
| 599 | unsigned int dot_crawl:1; | ||
| 600 | unsigned int dither:1; | ||
| 601 | unsigned int max_tv_chroma_filter:1; | ||
| 602 | unsigned int max_tv_luma_filter:1; | ||
| 603 | } __attribute__((packed)); | ||
| 604 | |||
| 605 | /* Picture enhancement limits below are dependent on the current TV format, | ||
| 606 | * and thus need to be queried and set after it. | ||
| 607 | */ | ||
| 608 | #define SDVO_CMD_GET_MAX_FLICKER_FITER 0x4d | ||
| 609 | #define SDVO_CMD_GET_MAX_ADAPTIVE_FLICKER_FITER 0x7b | ||
| 610 | #define SDVO_CMD_GET_MAX_2D_FLICKER_FITER 0x52 | ||
| 611 | #define SDVO_CMD_GET_MAX_SATURATION 0x55 | ||
| 612 | #define SDVO_CMD_GET_MAX_HUE 0x58 | ||
| 613 | #define SDVO_CMD_GET_MAX_BRIGHTNESS 0x5b | ||
| 614 | #define SDVO_CMD_GET_MAX_CONTRAST 0x5e | ||
| 615 | #define SDVO_CMD_GET_MAX_OVERSCAN_H 0x61 | ||
| 616 | #define SDVO_CMD_GET_MAX_OVERSCAN_V 0x64 | ||
| 617 | #define SDVO_CMD_GET_MAX_POSITION_H 0x67 | ||
| 618 | #define SDVO_CMD_GET_MAX_POSITION_V 0x6a | ||
| 619 | #define SDVO_CMD_GET_MAX_SHARPNESS_V 0x6d | ||
| 620 | #define SDVO_CMD_GET_MAX_TV_CHROMA 0x74 | ||
| 621 | #define SDVO_CMD_GET_MAX_TV_LUMA 0x77 | ||
| 622 | struct intel_sdvo_enhancement_limits_reply { | ||
| 623 | u16 max_value; | ||
| 624 | u16 default_value; | ||
| 625 | } __attribute__((packed)); | ||
| 320 | 626 | ||
| 321 | #define SDVO_CMD_SET_TV_RESOLUTION_SUPPORT 0x93 | 627 | #define SDVO_CMD_GET_LVDS_PANEL_INFORMATION 0x7f |
| 628 | #define SDVO_CMD_SET_LVDS_PANEL_INFORMATION 0x80 | ||
| 629 | # define SDVO_LVDS_COLOR_DEPTH_18 (0 << 0) | ||
| 630 | # define SDVO_LVDS_COLOR_DEPTH_24 (1 << 0) | ||
| 631 | # define SDVO_LVDS_CONNECTOR_SPWG (0 << 2) | ||
| 632 | # define SDVO_LVDS_CONNECTOR_OPENLDI (1 << 2) | ||
| 633 | # define SDVO_LVDS_SINGLE_CHANNEL (0 << 4) | ||
| 634 | # define SDVO_LVDS_DUAL_CHANNEL (1 << 4) | ||
| 635 | |||
| 636 | #define SDVO_CMD_GET_FLICKER_FILTER 0x4e | ||
| 637 | #define SDVO_CMD_SET_FLICKER_FILTER 0x4f | ||
| 638 | #define SDVO_CMD_GET_ADAPTIVE_FLICKER_FITER 0x50 | ||
| 639 | #define SDVO_CMD_SET_ADAPTIVE_FLICKER_FITER 0x51 | ||
| 640 | #define SDVO_CMD_GET_2D_FLICKER_FITER 0x53 | ||
| 641 | #define SDVO_CMD_SET_2D_FLICKER_FITER 0x54 | ||
| 642 | #define SDVO_CMD_GET_SATURATION 0x56 | ||
| 643 | #define SDVO_CMD_SET_SATURATION 0x57 | ||
| 644 | #define SDVO_CMD_GET_HUE 0x59 | ||
| 645 | #define SDVO_CMD_SET_HUE 0x5a | ||
| 646 | #define SDVO_CMD_GET_BRIGHTNESS 0x5c | ||
| 647 | #define SDVO_CMD_SET_BRIGHTNESS 0x5d | ||
| 648 | #define SDVO_CMD_GET_CONTRAST 0x5f | ||
| 649 | #define SDVO_CMD_SET_CONTRAST 0x60 | ||
| 650 | #define SDVO_CMD_GET_OVERSCAN_H 0x62 | ||
| 651 | #define SDVO_CMD_SET_OVERSCAN_H 0x63 | ||
| 652 | #define SDVO_CMD_GET_OVERSCAN_V 0x65 | ||
| 653 | #define SDVO_CMD_SET_OVERSCAN_V 0x66 | ||
| 654 | #define SDVO_CMD_GET_POSITION_H 0x68 | ||
| 655 | #define SDVO_CMD_SET_POSITION_H 0x69 | ||
| 656 | #define SDVO_CMD_GET_POSITION_V 0x6b | ||
| 657 | #define SDVO_CMD_SET_POSITION_V 0x6c | ||
| 658 | #define SDVO_CMD_GET_SHARPNESS 0x6e | ||
| 659 | #define SDVO_CMD_SET_SHARPNESS 0x6f | ||
| 660 | #define SDVO_CMD_GET_TV_CHROMA 0x75 | ||
| 661 | #define SDVO_CMD_SET_TV_CHROMA 0x76 | ||
| 662 | #define SDVO_CMD_GET_TV_LUMA 0x78 | ||
| 663 | #define SDVO_CMD_SET_TV_LUMA 0x79 | ||
| 664 | struct intel_sdvo_enhancements_arg { | ||
| 665 | u16 value; | ||
| 666 | }__attribute__((packed)); | ||
| 667 | |||
| 668 | #define SDVO_CMD_GET_DOT_CRAWL 0x70 | ||
| 669 | #define SDVO_CMD_SET_DOT_CRAWL 0x71 | ||
| 670 | # define SDVO_DOT_CRAWL_ON (1 << 0) | ||
| 671 | # define SDVO_DOT_CRAWL_DEFAULT_ON (1 << 1) | ||
| 672 | |||
| 673 | #define SDVO_CMD_GET_DITHER 0x72 | ||
| 674 | #define SDVO_CMD_SET_DITHER 0x73 | ||
| 675 | # define SDVO_DITHER_ON (1 << 0) | ||
| 676 | # define SDVO_DITHER_DEFAULT_ON (1 << 1) | ||
| 322 | 677 | ||
| 323 | #define SDVO_CMD_SET_CONTROL_BUS_SWITCH 0x7a | 678 | #define SDVO_CMD_SET_CONTROL_BUS_SWITCH 0x7a |
| 324 | # define SDVO_CONTROL_BUS_PROM 0x0 | 679 | # define SDVO_CONTROL_BUS_PROM (1 << 0) |
| 325 | # define SDVO_CONTROL_BUS_DDC1 0x1 | 680 | # define SDVO_CONTROL_BUS_DDC1 (1 << 1) |
| 326 | # define SDVO_CONTROL_BUS_DDC2 0x2 | 681 | # define SDVO_CONTROL_BUS_DDC2 (1 << 2) |
| 327 | # define SDVO_CONTROL_BUS_DDC3 0x3 | 682 | # define SDVO_CONTROL_BUS_DDC3 (1 << 3) |
| 683 | |||
| 684 | /* HDMI op codes */ | ||
| 685 | #define SDVO_CMD_GET_SUPP_ENCODE 0x9d | ||
| 686 | #define SDVO_CMD_GET_ENCODE 0x9e | ||
| 687 | #define SDVO_CMD_SET_ENCODE 0x9f | ||
| 688 | #define SDVO_ENCODE_DVI 0x0 | ||
| 689 | #define SDVO_ENCODE_HDMI 0x1 | ||
| 690 | #define SDVO_CMD_SET_PIXEL_REPLI 0x8b | ||
| 691 | #define SDVO_CMD_GET_PIXEL_REPLI 0x8c | ||
| 692 | #define SDVO_CMD_GET_COLORIMETRY_CAP 0x8d | ||
| 693 | #define SDVO_CMD_SET_COLORIMETRY 0x8e | ||
| 694 | #define SDVO_COLORIMETRY_RGB256 0x0 | ||
| 695 | #define SDVO_COLORIMETRY_RGB220 0x1 | ||
| 696 | #define SDVO_COLORIMETRY_YCrCb422 0x3 | ||
| 697 | #define SDVO_COLORIMETRY_YCrCb444 0x4 | ||
| 698 | #define SDVO_CMD_GET_COLORIMETRY 0x8f | ||
| 699 | #define SDVO_CMD_GET_AUDIO_ENCRYPT_PREFER 0x90 | ||
| 700 | #define SDVO_CMD_SET_AUDIO_STAT 0x91 | ||
| 701 | #define SDVO_CMD_GET_AUDIO_STAT 0x92 | ||
| 702 | #define SDVO_CMD_SET_HBUF_INDEX 0x93 | ||
| 703 | #define SDVO_CMD_GET_HBUF_INDEX 0x94 | ||
| 704 | #define SDVO_CMD_GET_HBUF_INFO 0x95 | ||
| 705 | #define SDVO_CMD_SET_HBUF_AV_SPLIT 0x96 | ||
| 706 | #define SDVO_CMD_GET_HBUF_AV_SPLIT 0x97 | ||
| 707 | #define SDVO_CMD_SET_HBUF_DATA 0x98 | ||
| 708 | #define SDVO_CMD_GET_HBUF_DATA 0x99 | ||
| 709 | #define SDVO_CMD_SET_HBUF_TXRATE 0x9a | ||
| 710 | #define SDVO_CMD_GET_HBUF_TXRATE 0x9b | ||
| 711 | #define SDVO_HBUF_TX_DISABLED (0 << 6) | ||
| 712 | #define SDVO_HBUF_TX_ONCE (2 << 6) | ||
| 713 | #define SDVO_HBUF_TX_VSYNC (3 << 6) | ||
| 714 | #define SDVO_CMD_GET_AUDIO_TX_INFO 0x9c | ||
| 715 | |||
| 716 | struct intel_sdvo_encode{ | ||
| 717 | u8 dvi_rev; | ||
| 718 | u8 hdmi_rev; | ||
| 719 | } __attribute__ ((packed)); | ||
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c index fbb35dc56f5c..56485d67369b 100644 --- a/drivers/gpu/drm/i915/intel_tv.c +++ b/drivers/gpu/drm/i915/intel_tv.c | |||
| @@ -411,7 +411,7 @@ struct tv_mode { | |||
| 411 | * These values account for -1s required. | 411 | * These values account for -1s required. |
| 412 | */ | 412 | */ |
| 413 | 413 | ||
| 414 | const static struct tv_mode tv_modes[] = { | 414 | static const struct tv_mode tv_modes[] = { |
| 415 | { | 415 | { |
| 416 | .name = "NTSC-M", | 416 | .name = "NTSC-M", |
| 417 | .clock = 107520, | 417 | .clock = 107520, |
diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c index 63212d7bbc28..92965dbb3c14 100644 --- a/drivers/gpu/drm/radeon/radeon_cp.c +++ b/drivers/gpu/drm/radeon/radeon_cp.c | |||
| @@ -557,8 +557,10 @@ static int radeon_do_engine_reset(struct drm_device * dev) | |||
| 557 | } | 557 | } |
| 558 | 558 | ||
| 559 | static void radeon_cp_init_ring_buffer(struct drm_device * dev, | 559 | static void radeon_cp_init_ring_buffer(struct drm_device * dev, |
| 560 | drm_radeon_private_t * dev_priv) | 560 | drm_radeon_private_t *dev_priv, |
| 561 | struct drm_file *file_priv) | ||
| 561 | { | 562 | { |
| 563 | struct drm_radeon_master_private *master_priv; | ||
| 562 | u32 ring_start, cur_read_ptr; | 564 | u32 ring_start, cur_read_ptr; |
| 563 | u32 tmp; | 565 | u32 tmp; |
| 564 | 566 | ||
| @@ -677,6 +679,14 @@ static void radeon_cp_init_ring_buffer(struct drm_device * dev, | |||
| 677 | dev_priv->scratch[2] = 0; | 679 | dev_priv->scratch[2] = 0; |
| 678 | RADEON_WRITE(RADEON_LAST_CLEAR_REG, 0); | 680 | RADEON_WRITE(RADEON_LAST_CLEAR_REG, 0); |
| 679 | 681 | ||
| 682 | /* reset sarea copies of these */ | ||
| 683 | master_priv = file_priv->master->driver_priv; | ||
| 684 | if (master_priv->sarea_priv) { | ||
| 685 | master_priv->sarea_priv->last_frame = 0; | ||
| 686 | master_priv->sarea_priv->last_dispatch = 0; | ||
| 687 | master_priv->sarea_priv->last_clear = 0; | ||
| 688 | } | ||
| 689 | |||
| 680 | radeon_do_wait_for_idle(dev_priv); | 690 | radeon_do_wait_for_idle(dev_priv); |
| 681 | 691 | ||
| 682 | /* Sync everything up */ | 692 | /* Sync everything up */ |
| @@ -1039,9 +1049,9 @@ static int radeon_do_init_cp(struct drm_device *dev, drm_radeon_init_t *init, | |||
| 1039 | 1049 | ||
| 1040 | #if __OS_HAS_AGP | 1050 | #if __OS_HAS_AGP |
| 1041 | if (dev_priv->flags & RADEON_IS_AGP) { | 1051 | if (dev_priv->flags & RADEON_IS_AGP) { |
| 1042 | drm_core_ioremap(dev_priv->cp_ring, dev); | 1052 | drm_core_ioremap_wc(dev_priv->cp_ring, dev); |
| 1043 | drm_core_ioremap(dev_priv->ring_rptr, dev); | 1053 | drm_core_ioremap_wc(dev_priv->ring_rptr, dev); |
| 1044 | drm_core_ioremap(dev->agp_buffer_map, dev); | 1054 | drm_core_ioremap_wc(dev->agp_buffer_map, dev); |
| 1045 | if (!dev_priv->cp_ring->handle || | 1055 | if (!dev_priv->cp_ring->handle || |
| 1046 | !dev_priv->ring_rptr->handle || | 1056 | !dev_priv->ring_rptr->handle || |
| 1047 | !dev->agp_buffer_map->handle) { | 1057 | !dev->agp_buffer_map->handle) { |
| @@ -1215,7 +1225,7 @@ static int radeon_do_init_cp(struct drm_device *dev, drm_radeon_init_t *init, | |||
| 1215 | } | 1225 | } |
| 1216 | 1226 | ||
| 1217 | radeon_cp_load_microcode(dev_priv); | 1227 | radeon_cp_load_microcode(dev_priv); |
| 1218 | radeon_cp_init_ring_buffer(dev, dev_priv); | 1228 | radeon_cp_init_ring_buffer(dev, dev_priv, file_priv); |
| 1219 | 1229 | ||
| 1220 | dev_priv->last_buf = 0; | 1230 | dev_priv->last_buf = 0; |
| 1221 | 1231 | ||
| @@ -1281,7 +1291,7 @@ static int radeon_do_cleanup_cp(struct drm_device * dev) | |||
| 1281 | * | 1291 | * |
| 1282 | * Charl P. Botha <http://cpbotha.net> | 1292 | * Charl P. Botha <http://cpbotha.net> |
| 1283 | */ | 1293 | */ |
| 1284 | static int radeon_do_resume_cp(struct drm_device * dev) | 1294 | static int radeon_do_resume_cp(struct drm_device *dev, struct drm_file *file_priv) |
| 1285 | { | 1295 | { |
| 1286 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1296 | drm_radeon_private_t *dev_priv = dev->dev_private; |
| 1287 | 1297 | ||
| @@ -1304,7 +1314,7 @@ static int radeon_do_resume_cp(struct drm_device * dev) | |||
| 1304 | } | 1314 | } |
| 1305 | 1315 | ||
| 1306 | radeon_cp_load_microcode(dev_priv); | 1316 | radeon_cp_load_microcode(dev_priv); |
| 1307 | radeon_cp_init_ring_buffer(dev, dev_priv); | 1317 | radeon_cp_init_ring_buffer(dev, dev_priv, file_priv); |
| 1308 | 1318 | ||
| 1309 | radeon_do_engine_reset(dev); | 1319 | radeon_do_engine_reset(dev); |
| 1310 | radeon_irq_set_state(dev, RADEON_SW_INT_ENABLE, 1); | 1320 | radeon_irq_set_state(dev, RADEON_SW_INT_ENABLE, 1); |
| @@ -1479,8 +1489,7 @@ int radeon_cp_idle(struct drm_device *dev, void *data, struct drm_file *file_pri | |||
| 1479 | */ | 1489 | */ |
| 1480 | int radeon_cp_resume(struct drm_device *dev, void *data, struct drm_file *file_priv) | 1490 | int radeon_cp_resume(struct drm_device *dev, void *data, struct drm_file *file_priv) |
| 1481 | { | 1491 | { |
| 1482 | 1492 | return radeon_do_resume_cp(dev, file_priv); | |
| 1483 | return radeon_do_resume_cp(dev); | ||
| 1484 | } | 1493 | } |
| 1485 | 1494 | ||
| 1486 | int radeon_engine_reset(struct drm_device *dev, void *data, struct drm_file *file_priv) | 1495 | int radeon_engine_reset(struct drm_device *dev, void *data, struct drm_file *file_priv) |
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 6cad69ed21c5..1cc967448f4d 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c | |||
| @@ -1300,7 +1300,13 @@ static const struct hid_device_id hid_blacklist[] = { | |||
| 1300 | { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) }, | 1300 | { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) }, |
| 1301 | { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) }, | 1301 | { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) }, |
| 1302 | { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) }, | 1302 | { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) }, |
| 1303 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) }, | ||
| 1304 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) }, | ||
| 1305 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb651) }, | ||
| 1306 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654) }, | ||
| 1303 | { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) }, | 1307 | { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) }, |
| 1308 | { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) }, | ||
| 1309 | { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) }, | ||
| 1304 | 1310 | ||
| 1305 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, 0x030c) }, | 1311 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, 0x030c) }, |
| 1306 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) }, | 1312 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) }, |
| @@ -1605,6 +1611,7 @@ static const struct hid_device_id hid_ignore_list[] = { | |||
| 1605 | { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0002) }, | 1611 | { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0002) }, |
| 1606 | { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0003) }, | 1612 | { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0003) }, |
| 1607 | { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0004) }, | 1613 | { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0004) }, |
| 1614 | { HID_USB_DEVICE(USB_VENDOR_ID_POWERCOM, USB_DEVICE_ID_POWERCOM_UPS) }, | ||
| 1608 | { HID_USB_DEVICE(USB_VENDOR_ID_SOUNDGRAPH, USB_DEVICE_ID_SOUNDGRAPH_IMON_LCD) }, | 1615 | { HID_USB_DEVICE(USB_VENDOR_ID_SOUNDGRAPH, USB_DEVICE_ID_SOUNDGRAPH_IMON_LCD) }, |
| 1609 | { HID_USB_DEVICE(USB_VENDOR_ID_SOUNDGRAPH, USB_DEVICE_ID_SOUNDGRAPH_IMON_LCD2) }, | 1616 | { HID_USB_DEVICE(USB_VENDOR_ID_SOUNDGRAPH, USB_DEVICE_ID_SOUNDGRAPH_IMON_LCD2) }, |
| 1610 | { HID_USB_DEVICE(USB_VENDOR_ID_SOUNDGRAPH, USB_DEVICE_ID_SOUNDGRAPH_IMON_LCD3) }, | 1617 | { HID_USB_DEVICE(USB_VENDOR_ID_SOUNDGRAPH, USB_DEVICE_ID_SOUNDGRAPH_IMON_LCD3) }, |
| @@ -1612,10 +1619,6 @@ static const struct hid_device_id hid_ignore_list[] = { | |||
| 1612 | { HID_USB_DEVICE(USB_VENDOR_ID_SOUNDGRAPH, USB_DEVICE_ID_SOUNDGRAPH_IMON_LCD5) }, | 1619 | { HID_USB_DEVICE(USB_VENDOR_ID_SOUNDGRAPH, USB_DEVICE_ID_SOUNDGRAPH_IMON_LCD5) }, |
| 1613 | { HID_USB_DEVICE(USB_VENDOR_ID_TENX, USB_DEVICE_ID_TENX_IBUDDY1) }, | 1620 | { HID_USB_DEVICE(USB_VENDOR_ID_TENX, USB_DEVICE_ID_TENX_IBUDDY1) }, |
| 1614 | { HID_USB_DEVICE(USB_VENDOR_ID_TENX, USB_DEVICE_ID_TENX_IBUDDY2) }, | 1621 | { HID_USB_DEVICE(USB_VENDOR_ID_TENX, USB_DEVICE_ID_TENX_IBUDDY2) }, |
| 1615 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) }, | ||
| 1616 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) }, | ||
| 1617 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb651) }, | ||
| 1618 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654) }, | ||
| 1619 | { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LABPRO) }, | 1622 | { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LABPRO) }, |
| 1620 | { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP) }, | 1623 | { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP) }, |
| 1621 | { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP) }, | 1624 | { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP) }, |
| @@ -1626,8 +1629,6 @@ static const struct hid_device_id hid_ignore_list[] = { | |||
| 1626 | { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20) }, | 1629 | { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20) }, |
| 1627 | { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_8_8_4_IF_KIT) }, | 1630 | { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_8_8_4_IF_KIT) }, |
| 1628 | { HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) }, | 1631 | { HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) }, |
| 1629 | { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) }, | ||
| 1630 | { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) }, | ||
| 1631 | { } | 1632 | { } |
| 1632 | }; | 1633 | }; |
| 1633 | 1634 | ||
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index e899f510ebeb..88511970508d 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h | |||
| @@ -348,6 +348,9 @@ | |||
| 348 | #define USB_VENDOR_ID_PLAYDOTCOM 0x0b43 | 348 | #define USB_VENDOR_ID_PLAYDOTCOM 0x0b43 |
| 349 | #define USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII 0x0003 | 349 | #define USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII 0x0003 |
| 350 | 350 | ||
| 351 | #define USB_VENDOR_ID_POWERCOM 0x0d9f | ||
| 352 | #define USB_DEVICE_ID_POWERCOM_UPS 0x0002 | ||
| 353 | |||
| 351 | #define USB_VENDOR_ID_SAITEK 0x06a3 | 354 | #define USB_VENDOR_ID_SAITEK 0x06a3 |
| 352 | #define USB_DEVICE_ID_SAITEK_RUMBLEPAD 0xff17 | 355 | #define USB_DEVICE_ID_SAITEK_RUMBLEPAD 0xff17 |
| 353 | 356 | ||
diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c index 732449628971..02b19db5442e 100644 --- a/drivers/hid/hidraw.c +++ b/drivers/hid/hidraw.c | |||
| @@ -267,8 +267,10 @@ static long hidraw_ioctl(struct file *file, unsigned int cmd, | |||
| 267 | default: | 267 | default: |
| 268 | { | 268 | { |
| 269 | struct hid_device *hid = dev->hid; | 269 | struct hid_device *hid = dev->hid; |
| 270 | if (_IOC_TYPE(cmd) != 'H' || _IOC_DIR(cmd) != _IOC_READ) | 270 | if (_IOC_TYPE(cmd) != 'H' || _IOC_DIR(cmd) != _IOC_READ) { |
| 271 | return -EINVAL; | 271 | ret = -EINVAL; |
| 272 | break; | ||
| 273 | } | ||
| 272 | 274 | ||
| 273 | if (_IOC_NR(cmd) == _IOC_NR(HIDIOCGRAWNAME(0))) { | 275 | if (_IOC_NR(cmd) == _IOC_NR(HIDIOCGRAWNAME(0))) { |
| 274 | int len; | 276 | int len; |
| @@ -277,8 +279,9 @@ static long hidraw_ioctl(struct file *file, unsigned int cmd, | |||
| 277 | len = strlen(hid->name) + 1; | 279 | len = strlen(hid->name) + 1; |
| 278 | if (len > _IOC_SIZE(cmd)) | 280 | if (len > _IOC_SIZE(cmd)) |
| 279 | len = _IOC_SIZE(cmd); | 281 | len = _IOC_SIZE(cmd); |
| 280 | return copy_to_user(user_arg, hid->name, len) ? | 282 | ret = copy_to_user(user_arg, hid->name, len) ? |
| 281 | -EFAULT : len; | 283 | -EFAULT : len; |
| 284 | break; | ||
| 282 | } | 285 | } |
| 283 | 286 | ||
| 284 | if (_IOC_NR(cmd) == _IOC_NR(HIDIOCGRAWPHYS(0))) { | 287 | if (_IOC_NR(cmd) == _IOC_NR(HIDIOCGRAWPHYS(0))) { |
| @@ -288,12 +291,13 @@ static long hidraw_ioctl(struct file *file, unsigned int cmd, | |||
| 288 | len = strlen(hid->phys) + 1; | 291 | len = strlen(hid->phys) + 1; |
| 289 | if (len > _IOC_SIZE(cmd)) | 292 | if (len > _IOC_SIZE(cmd)) |
| 290 | len = _IOC_SIZE(cmd); | 293 | len = _IOC_SIZE(cmd); |
| 291 | return copy_to_user(user_arg, hid->phys, len) ? | 294 | ret = copy_to_user(user_arg, hid->phys, len) ? |
| 292 | -EFAULT : len; | 295 | -EFAULT : len; |
| 296 | break; | ||
| 293 | } | 297 | } |
| 294 | } | 298 | } |
| 295 | 299 | ||
| 296 | ret = -ENOTTY; | 300 | ret = -ENOTTY; |
| 297 | } | 301 | } |
| 298 | unlock_kernel(); | 302 | unlock_kernel(); |
| 299 | return ret; | 303 | return ret; |
diff --git a/drivers/hwmon/f71882fg.c b/drivers/hwmon/f71882fg.c index 609cafff86bc..5f81ddf71508 100644 --- a/drivers/hwmon/f71882fg.c +++ b/drivers/hwmon/f71882fg.c | |||
| @@ -1872,7 +1872,7 @@ static int __init f71882fg_find(int sioaddr, unsigned short *address, | |||
| 1872 | 1872 | ||
| 1873 | devid = superio_inw(sioaddr, SIO_REG_MANID); | 1873 | devid = superio_inw(sioaddr, SIO_REG_MANID); |
| 1874 | if (devid != SIO_FINTEK_ID) { | 1874 | if (devid != SIO_FINTEK_ID) { |
| 1875 | printk(KERN_INFO DRVNAME ": Not a Fintek device\n"); | 1875 | pr_debug(DRVNAME ": Not a Fintek device\n"); |
| 1876 | goto exit; | 1876 | goto exit; |
| 1877 | } | 1877 | } |
| 1878 | 1878 | ||
| @@ -1932,7 +1932,7 @@ static int __init f71882fg_device_add(unsigned short address, | |||
| 1932 | res.name = f71882fg_pdev->name; | 1932 | res.name = f71882fg_pdev->name; |
| 1933 | err = acpi_check_resource_conflict(&res); | 1933 | err = acpi_check_resource_conflict(&res); |
| 1934 | if (err) | 1934 | if (err) |
| 1935 | return err; | 1935 | goto exit_device_put; |
| 1936 | 1936 | ||
| 1937 | err = platform_device_add_resources(f71882fg_pdev, &res, 1); | 1937 | err = platform_device_add_resources(f71882fg_pdev, &res, 1); |
| 1938 | if (err) { | 1938 | if (err) { |
diff --git a/drivers/hwmon/hp_accel.c b/drivers/hwmon/hp_accel.c index abf4dfc8ec22..29c83b5b9697 100644 --- a/drivers/hwmon/hp_accel.c +++ b/drivers/hwmon/hp_accel.c | |||
| @@ -166,6 +166,18 @@ static struct axis_conversion lis3lv02d_axis_xy_swap_yz_inverted = {2, -1, -3}; | |||
| 166 | }, \ | 166 | }, \ |
| 167 | .driver_data = &lis3lv02d_axis_##_axis \ | 167 | .driver_data = &lis3lv02d_axis_##_axis \ |
| 168 | } | 168 | } |
| 169 | |||
| 170 | #define AXIS_DMI_MATCH2(_ident, _class1, _name1, \ | ||
| 171 | _class2, _name2, \ | ||
| 172 | _axis) { \ | ||
| 173 | .ident = _ident, \ | ||
| 174 | .callback = lis3lv02d_dmi_matched, \ | ||
| 175 | .matches = { \ | ||
| 176 | DMI_MATCH(DMI_##_class1, _name1), \ | ||
| 177 | DMI_MATCH(DMI_##_class2, _name2), \ | ||
| 178 | }, \ | ||
| 179 | .driver_data = &lis3lv02d_axis_##_axis \ | ||
| 180 | } | ||
| 169 | static struct dmi_system_id lis3lv02d_dmi_ids[] = { | 181 | static struct dmi_system_id lis3lv02d_dmi_ids[] = { |
| 170 | /* product names are truncated to match all kinds of a same model */ | 182 | /* product names are truncated to match all kinds of a same model */ |
| 171 | AXIS_DMI_MATCH("NC64x0", "HP Compaq nc64", x_inverted), | 183 | AXIS_DMI_MATCH("NC64x0", "HP Compaq nc64", x_inverted), |
| @@ -179,6 +191,16 @@ static struct dmi_system_id lis3lv02d_dmi_ids[] = { | |||
| 179 | AXIS_DMI_MATCH("NC673x", "HP Compaq 673", xy_rotated_left_usd), | 191 | AXIS_DMI_MATCH("NC673x", "HP Compaq 673", xy_rotated_left_usd), |
| 180 | AXIS_DMI_MATCH("NC651xx", "HP Compaq 651", xy_rotated_right), | 192 | AXIS_DMI_MATCH("NC651xx", "HP Compaq 651", xy_rotated_right), |
| 181 | AXIS_DMI_MATCH("NC671xx", "HP Compaq 671", xy_swap_yz_inverted), | 193 | AXIS_DMI_MATCH("NC671xx", "HP Compaq 671", xy_swap_yz_inverted), |
| 194 | /* Intel-based HP Pavilion dv5 */ | ||
| 195 | AXIS_DMI_MATCH2("HPDV5_I", | ||
| 196 | PRODUCT_NAME, "HP Pavilion dv5", | ||
| 197 | BOARD_NAME, "3603", | ||
| 198 | x_inverted), | ||
| 199 | /* AMD-based HP Pavilion dv5 */ | ||
| 200 | AXIS_DMI_MATCH2("HPDV5_A", | ||
| 201 | PRODUCT_NAME, "HP Pavilion dv5", | ||
| 202 | BOARD_NAME, "3600", | ||
| 203 | y_inverted), | ||
| 182 | { NULL, } | 204 | { NULL, } |
| 183 | /* Laptop models without axis info (yet): | 205 | /* Laptop models without axis info (yet): |
| 184 | * "NC6910" "HP Compaq 6910" | 206 | * "NC6910" "HP Compaq 6910" |
| @@ -213,9 +235,49 @@ static struct delayed_led_classdev hpled_led = { | |||
| 213 | .set_brightness = hpled_set, | 235 | .set_brightness = hpled_set, |
| 214 | }; | 236 | }; |
| 215 | 237 | ||
| 238 | static acpi_status | ||
| 239 | lis3lv02d_get_resource(struct acpi_resource *resource, void *context) | ||
| 240 | { | ||
| 241 | if (resource->type == ACPI_RESOURCE_TYPE_EXTENDED_IRQ) { | ||
| 242 | struct acpi_resource_extended_irq *irq; | ||
| 243 | u32 *device_irq = context; | ||
| 244 | |||
| 245 | irq = &resource->data.extended_irq; | ||
| 246 | *device_irq = irq->interrupts[0]; | ||
| 247 | } | ||
| 248 | |||
| 249 | return AE_OK; | ||
| 250 | } | ||
| 251 | |||
| 252 | static void lis3lv02d_enum_resources(struct acpi_device *device) | ||
| 253 | { | ||
| 254 | acpi_status status; | ||
| 255 | |||
| 256 | status = acpi_walk_resources(device->handle, METHOD_NAME__CRS, | ||
| 257 | lis3lv02d_get_resource, &adev.irq); | ||
| 258 | if (ACPI_FAILURE(status)) | ||
| 259 | printk(KERN_DEBUG DRIVER_NAME ": Error getting resources\n"); | ||
| 260 | } | ||
| 261 | |||
| 262 | static s16 lis3lv02d_read_16(acpi_handle handle, int reg) | ||
| 263 | { | ||
| 264 | u8 lo, hi; | ||
| 265 | |||
| 266 | adev.read(handle, reg - 1, &lo); | ||
| 267 | adev.read(handle, reg, &hi); | ||
| 268 | /* In "12 bit right justified" mode, bit 6, bit 7, bit 8 = bit 5 */ | ||
| 269 | return (s16)((hi << 8) | lo); | ||
| 270 | } | ||
| 271 | |||
| 272 | static s16 lis3lv02d_read_8(acpi_handle handle, int reg) | ||
| 273 | { | ||
| 274 | s8 lo; | ||
| 275 | adev.read(handle, reg, &lo); | ||
| 276 | return lo; | ||
| 277 | } | ||
| 278 | |||
| 216 | static int lis3lv02d_add(struct acpi_device *device) | 279 | static int lis3lv02d_add(struct acpi_device *device) |
| 217 | { | 280 | { |
| 218 | u8 val; | ||
| 219 | int ret; | 281 | int ret; |
| 220 | 282 | ||
| 221 | if (!device) | 283 | if (!device) |
| @@ -229,10 +291,22 @@ static int lis3lv02d_add(struct acpi_device *device) | |||
| 229 | strcpy(acpi_device_class(device), ACPI_MDPS_CLASS); | 291 | strcpy(acpi_device_class(device), ACPI_MDPS_CLASS); |
| 230 | device->driver_data = &adev; | 292 | device->driver_data = &adev; |
| 231 | 293 | ||
| 232 | lis3lv02d_acpi_read(device->handle, WHO_AM_I, &val); | 294 | lis3lv02d_acpi_read(device->handle, WHO_AM_I, &adev.whoami); |
| 233 | if ((val != LIS3LV02DL_ID) && (val != LIS302DL_ID)) { | 295 | switch (adev.whoami) { |
| 296 | case LIS_DOUBLE_ID: | ||
| 297 | printk(KERN_INFO DRIVER_NAME ": 2-byte sensor found\n"); | ||
| 298 | adev.read_data = lis3lv02d_read_16; | ||
| 299 | adev.mdps_max_val = 2048; | ||
| 300 | break; | ||
| 301 | case LIS_SINGLE_ID: | ||
| 302 | printk(KERN_INFO DRIVER_NAME ": 1-byte sensor found\n"); | ||
| 303 | adev.read_data = lis3lv02d_read_8; | ||
| 304 | adev.mdps_max_val = 128; | ||
| 305 | break; | ||
| 306 | default: | ||
| 234 | printk(KERN_ERR DRIVER_NAME | 307 | printk(KERN_ERR DRIVER_NAME |
| 235 | ": Accelerometer chip not LIS3LV02D{L,Q}\n"); | 308 | ": unknown sensor type 0x%X\n", adev.whoami); |
| 309 | return -EINVAL; | ||
| 236 | } | 310 | } |
| 237 | 311 | ||
| 238 | /* If possible use a "standard" axes order */ | 312 | /* If possible use a "standard" axes order */ |
| @@ -247,6 +321,9 @@ static int lis3lv02d_add(struct acpi_device *device) | |||
| 247 | if (ret) | 321 | if (ret) |
| 248 | return ret; | 322 | return ret; |
| 249 | 323 | ||
| 324 | /* obtain IRQ number of our device from ACPI */ | ||
| 325 | lis3lv02d_enum_resources(adev.device); | ||
| 326 | |||
| 250 | ret = lis3lv02d_init_device(&adev); | 327 | ret = lis3lv02d_init_device(&adev); |
| 251 | if (ret) { | 328 | if (ret) { |
| 252 | flush_work(&hpled_led.work); | 329 | flush_work(&hpled_led.work); |
diff --git a/drivers/hwmon/lis3lv02d.c b/drivers/hwmon/lis3lv02d.c index 219d2d0d5a62..8bb2158f0453 100644 --- a/drivers/hwmon/lis3lv02d.c +++ b/drivers/hwmon/lis3lv02d.c | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2007-2008 Yan Burman | 4 | * Copyright (C) 2007-2008 Yan Burman |
| 5 | * Copyright (C) 2008 Eric Piel | 5 | * Copyright (C) 2008 Eric Piel |
| 6 | * Copyright (C) 2008 Pavel Machek | 6 | * Copyright (C) 2008-2009 Pavel Machek |
| 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 as published by | 9 | * it under the terms of the GNU General Public License as published by |
| @@ -35,6 +35,7 @@ | |||
| 35 | #include <linux/poll.h> | 35 | #include <linux/poll.h> |
| 36 | #include <linux/freezer.h> | 36 | #include <linux/freezer.h> |
| 37 | #include <linux/uaccess.h> | 37 | #include <linux/uaccess.h> |
| 38 | #include <linux/miscdevice.h> | ||
| 38 | #include <acpi/acpi_drivers.h> | 39 | #include <acpi/acpi_drivers.h> |
| 39 | #include <asm/atomic.h> | 40 | #include <asm/atomic.h> |
| 40 | #include "lis3lv02d.h" | 41 | #include "lis3lv02d.h" |
| @@ -52,24 +53,14 @@ | |||
| 52 | * joystick. | 53 | * joystick. |
| 53 | */ | 54 | */ |
| 54 | 55 | ||
| 55 | /* Maximum value our axis may get for the input device (signed 12 bits) */ | 56 | struct acpi_lis3lv02d adev = { |
| 56 | #define MDPS_MAX_VAL 2048 | 57 | .misc_wait = __WAIT_QUEUE_HEAD_INITIALIZER(adev.misc_wait), |
| 58 | }; | ||
| 57 | 59 | ||
| 58 | struct acpi_lis3lv02d adev; | ||
| 59 | EXPORT_SYMBOL_GPL(adev); | 60 | EXPORT_SYMBOL_GPL(adev); |
| 60 | 61 | ||
| 61 | static int lis3lv02d_add_fs(struct acpi_device *device); | 62 | static int lis3lv02d_add_fs(struct acpi_device *device); |
| 62 | 63 | ||
| 63 | static s16 lis3lv02d_read_16(acpi_handle handle, int reg) | ||
| 64 | { | ||
| 65 | u8 lo, hi; | ||
| 66 | |||
| 67 | adev.read(handle, reg, &lo); | ||
| 68 | adev.read(handle, reg + 1, &hi); | ||
| 69 | /* In "12 bit right justified" mode, bit 6, bit 7, bit 8 = bit 5 */ | ||
| 70 | return (s16)((hi << 8) | lo); | ||
| 71 | } | ||
| 72 | |||
| 73 | /** | 64 | /** |
| 74 | * lis3lv02d_get_axis - For the given axis, give the value converted | 65 | * lis3lv02d_get_axis - For the given axis, give the value converted |
| 75 | * @axis: 1,2,3 - can also be negative | 66 | * @axis: 1,2,3 - can also be negative |
| @@ -98,9 +89,9 @@ static void lis3lv02d_get_xyz(acpi_handle handle, int *x, int *y, int *z) | |||
| 98 | { | 89 | { |
| 99 | int position[3]; | 90 | int position[3]; |
| 100 | 91 | ||
| 101 | position[0] = lis3lv02d_read_16(handle, OUTX_L); | 92 | position[0] = adev.read_data(handle, OUTX); |
| 102 | position[1] = lis3lv02d_read_16(handle, OUTY_L); | 93 | position[1] = adev.read_data(handle, OUTY); |
| 103 | position[2] = lis3lv02d_read_16(handle, OUTZ_L); | 94 | position[2] = adev.read_data(handle, OUTZ); |
| 104 | 95 | ||
| 105 | *x = lis3lv02d_get_axis(adev.ac.x, position); | 96 | *x = lis3lv02d_get_axis(adev.ac.x, position); |
| 106 | *y = lis3lv02d_get_axis(adev.ac.y, position); | 97 | *y = lis3lv02d_get_axis(adev.ac.y, position); |
| @@ -110,26 +101,13 @@ static void lis3lv02d_get_xyz(acpi_handle handle, int *x, int *y, int *z) | |||
| 110 | void lis3lv02d_poweroff(acpi_handle handle) | 101 | void lis3lv02d_poweroff(acpi_handle handle) |
| 111 | { | 102 | { |
| 112 | adev.is_on = 0; | 103 | adev.is_on = 0; |
| 113 | /* disable X,Y,Z axis and power down */ | ||
| 114 | adev.write(handle, CTRL_REG1, 0x00); | ||
| 115 | } | 104 | } |
| 116 | EXPORT_SYMBOL_GPL(lis3lv02d_poweroff); | 105 | EXPORT_SYMBOL_GPL(lis3lv02d_poweroff); |
| 117 | 106 | ||
| 118 | void lis3lv02d_poweron(acpi_handle handle) | 107 | void lis3lv02d_poweron(acpi_handle handle) |
| 119 | { | 108 | { |
| 120 | u8 val; | ||
| 121 | |||
| 122 | adev.is_on = 1; | 109 | adev.is_on = 1; |
| 123 | adev.init(handle); | 110 | adev.init(handle); |
| 124 | adev.write(handle, FF_WU_CFG, 0); | ||
| 125 | /* | ||
| 126 | * BDU: LSB and MSB values are not updated until both have been read. | ||
| 127 | * So the value read will always be correct. | ||
| 128 | * IEN: Interrupt for free-fall and DD, not for data-ready. | ||
| 129 | */ | ||
| 130 | adev.read(handle, CTRL_REG2, &val); | ||
| 131 | val |= CTRL2_BDU | CTRL2_IEN; | ||
| 132 | adev.write(handle, CTRL_REG2, val); | ||
| 133 | } | 111 | } |
| 134 | EXPORT_SYMBOL_GPL(lis3lv02d_poweron); | 112 | EXPORT_SYMBOL_GPL(lis3lv02d_poweron); |
| 135 | 113 | ||
| @@ -162,6 +140,140 @@ static void lis3lv02d_decrease_use(struct acpi_lis3lv02d *dev) | |||
| 162 | mutex_unlock(&dev->lock); | 140 | mutex_unlock(&dev->lock); |
| 163 | } | 141 | } |
| 164 | 142 | ||
| 143 | static irqreturn_t lis302dl_interrupt(int irq, void *dummy) | ||
| 144 | { | ||
| 145 | /* | ||
| 146 | * Be careful: on some HP laptops the bios force DD when on battery and | ||
| 147 | * the lid is closed. This leads to interrupts as soon as a little move | ||
| 148 | * is done. | ||
| 149 | */ | ||
| 150 | atomic_inc(&adev.count); | ||
| 151 | |||
| 152 | wake_up_interruptible(&adev.misc_wait); | ||
| 153 | kill_fasync(&adev.async_queue, SIGIO, POLL_IN); | ||
| 154 | return IRQ_HANDLED; | ||
| 155 | } | ||
| 156 | |||
| 157 | static int lis3lv02d_misc_open(struct inode *inode, struct file *file) | ||
| 158 | { | ||
| 159 | int ret; | ||
| 160 | |||
| 161 | if (test_and_set_bit(0, &adev.misc_opened)) | ||
| 162 | return -EBUSY; /* already open */ | ||
| 163 | |||
| 164 | atomic_set(&adev.count, 0); | ||
| 165 | |||
| 166 | /* | ||
| 167 | * The sensor can generate interrupts for free-fall and direction | ||
| 168 | * detection (distinguishable with FF_WU_SRC and DD_SRC) but to keep | ||
| 169 | * the things simple and _fast_ we activate it only for free-fall, so | ||
| 170 | * no need to read register (very slow with ACPI). For the same reason, | ||
| 171 | * we forbid shared interrupts. | ||
| 172 | * | ||
| 173 | * IRQF_TRIGGER_RISING seems pointless on HP laptops because the | ||
| 174 | * io-apic is not configurable (and generates a warning) but I keep it | ||
| 175 | * in case of support for other hardware. | ||
| 176 | */ | ||
| 177 | ret = request_irq(adev.irq, lis302dl_interrupt, IRQF_TRIGGER_RISING, | ||
| 178 | DRIVER_NAME, &adev); | ||
| 179 | |||
| 180 | if (ret) { | ||
| 181 | clear_bit(0, &adev.misc_opened); | ||
| 182 | printk(KERN_ERR DRIVER_NAME ": IRQ%d allocation failed\n", adev.irq); | ||
| 183 | return -EBUSY; | ||
| 184 | } | ||
| 185 | lis3lv02d_increase_use(&adev); | ||
| 186 | printk("lis3: registered interrupt %d\n", adev.irq); | ||
| 187 | return 0; | ||
| 188 | } | ||
| 189 | |||
| 190 | static int lis3lv02d_misc_release(struct inode *inode, struct file *file) | ||
| 191 | { | ||
| 192 | fasync_helper(-1, file, 0, &adev.async_queue); | ||
| 193 | lis3lv02d_decrease_use(&adev); | ||
| 194 | free_irq(adev.irq, &adev); | ||
| 195 | clear_bit(0, &adev.misc_opened); /* release the device */ | ||
| 196 | return 0; | ||
| 197 | } | ||
| 198 | |||
| 199 | static ssize_t lis3lv02d_misc_read(struct file *file, char __user *buf, | ||
| 200 | size_t count, loff_t *pos) | ||
| 201 | { | ||
| 202 | DECLARE_WAITQUEUE(wait, current); | ||
| 203 | u32 data; | ||
| 204 | unsigned char byte_data; | ||
| 205 | ssize_t retval = 1; | ||
| 206 | |||
| 207 | if (count < 1) | ||
| 208 | return -EINVAL; | ||
| 209 | |||
| 210 | add_wait_queue(&adev.misc_wait, &wait); | ||
| 211 | while (true) { | ||
| 212 | set_current_state(TASK_INTERRUPTIBLE); | ||
| 213 | data = atomic_xchg(&adev.count, 0); | ||
| 214 | if (data) | ||
| 215 | break; | ||
| 216 | |||
| 217 | if (file->f_flags & O_NONBLOCK) { | ||
| 218 | retval = -EAGAIN; | ||
| 219 | goto out; | ||
| 220 | } | ||
| 221 | |||
| 222 | if (signal_pending(current)) { | ||
| 223 | retval = -ERESTARTSYS; | ||
| 224 | goto out; | ||
| 225 | } | ||
| 226 | |||
| 227 | schedule(); | ||
| 228 | } | ||
| 229 | |||
| 230 | if (data < 255) | ||
| 231 | byte_data = data; | ||
| 232 | else | ||
| 233 | byte_data = 255; | ||
| 234 | |||
| 235 | /* make sure we are not going into copy_to_user() with | ||
| 236 | * TASK_INTERRUPTIBLE state */ | ||
| 237 | set_current_state(TASK_RUNNING); | ||
| 238 | if (copy_to_user(buf, &byte_data, sizeof(byte_data))) | ||
| 239 | retval = -EFAULT; | ||
| 240 | |||
| 241 | out: | ||
| 242 | __set_current_state(TASK_RUNNING); | ||
| 243 | remove_wait_queue(&adev.misc_wait, &wait); | ||
| 244 | |||
| 245 | return retval; | ||
| 246 | } | ||
| 247 | |||
| 248 | static unsigned int lis3lv02d_misc_poll(struct file *file, poll_table *wait) | ||
| 249 | { | ||
| 250 | poll_wait(file, &adev.misc_wait, wait); | ||
| 251 | if (atomic_read(&adev.count)) | ||
| 252 | return POLLIN | POLLRDNORM; | ||
| 253 | return 0; | ||
| 254 | } | ||
| 255 | |||
| 256 | static int lis3lv02d_misc_fasync(int fd, struct file *file, int on) | ||
| 257 | { | ||
| 258 | return fasync_helper(fd, file, on, &adev.async_queue); | ||
| 259 | } | ||
| 260 | |||
| 261 | static const struct file_operations lis3lv02d_misc_fops = { | ||
| 262 | .owner = THIS_MODULE, | ||
| 263 | .llseek = no_llseek, | ||
| 264 | .read = lis3lv02d_misc_read, | ||
| 265 | .open = lis3lv02d_misc_open, | ||
| 266 | .release = lis3lv02d_misc_release, | ||
| 267 | .poll = lis3lv02d_misc_poll, | ||
| 268 | .fasync = lis3lv02d_misc_fasync, | ||
| 269 | }; | ||
| 270 | |||
| 271 | static struct miscdevice lis3lv02d_misc_device = { | ||
| 272 | .minor = MISC_DYNAMIC_MINOR, | ||
| 273 | .name = "freefall", | ||
| 274 | .fops = &lis3lv02d_misc_fops, | ||
| 275 | }; | ||
| 276 | |||
| 165 | /** | 277 | /** |
| 166 | * lis3lv02d_joystick_kthread - Kthread polling function | 278 | * lis3lv02d_joystick_kthread - Kthread polling function |
| 167 | * @data: unused - here to conform to threadfn prototype | 279 | * @data: unused - here to conform to threadfn prototype |
| @@ -203,7 +315,6 @@ static void lis3lv02d_joystick_close(struct input_dev *input) | |||
| 203 | lis3lv02d_decrease_use(&adev); | 315 | lis3lv02d_decrease_use(&adev); |
| 204 | } | 316 | } |
| 205 | 317 | ||
| 206 | |||
| 207 | static inline void lis3lv02d_calibrate_joystick(void) | 318 | static inline void lis3lv02d_calibrate_joystick(void) |
| 208 | { | 319 | { |
| 209 | lis3lv02d_get_xyz(adev.device->handle, &adev.xcalib, &adev.ycalib, &adev.zcalib); | 320 | lis3lv02d_get_xyz(adev.device->handle, &adev.xcalib, &adev.ycalib, &adev.zcalib); |
| @@ -231,9 +342,9 @@ int lis3lv02d_joystick_enable(void) | |||
| 231 | adev.idev->close = lis3lv02d_joystick_close; | 342 | adev.idev->close = lis3lv02d_joystick_close; |
| 232 | 343 | ||
| 233 | set_bit(EV_ABS, adev.idev->evbit); | 344 | set_bit(EV_ABS, adev.idev->evbit); |
| 234 | input_set_abs_params(adev.idev, ABS_X, -MDPS_MAX_VAL, MDPS_MAX_VAL, 3, 3); | 345 | input_set_abs_params(adev.idev, ABS_X, -adev.mdps_max_val, adev.mdps_max_val, 3, 3); |
| 235 | input_set_abs_params(adev.idev, ABS_Y, -MDPS_MAX_VAL, MDPS_MAX_VAL, 3, 3); | 346 | input_set_abs_params(adev.idev, ABS_Y, -adev.mdps_max_val, adev.mdps_max_val, 3, 3); |
| 236 | input_set_abs_params(adev.idev, ABS_Z, -MDPS_MAX_VAL, MDPS_MAX_VAL, 3, 3); | 347 | input_set_abs_params(adev.idev, ABS_Z, -adev.mdps_max_val, adev.mdps_max_val, 3, 3); |
| 237 | 348 | ||
| 238 | err = input_register_device(adev.idev); | 349 | err = input_register_device(adev.idev); |
| 239 | if (err) { | 350 | if (err) { |
| @@ -250,6 +361,7 @@ void lis3lv02d_joystick_disable(void) | |||
| 250 | if (!adev.idev) | 361 | if (!adev.idev) |
| 251 | return; | 362 | return; |
| 252 | 363 | ||
| 364 | misc_deregister(&lis3lv02d_misc_device); | ||
| 253 | input_unregister_device(adev.idev); | 365 | input_unregister_device(adev.idev); |
| 254 | adev.idev = NULL; | 366 | adev.idev = NULL; |
| 255 | } | 367 | } |
| @@ -268,6 +380,19 @@ int lis3lv02d_init_device(struct acpi_lis3lv02d *dev) | |||
| 268 | if (lis3lv02d_joystick_enable()) | 380 | if (lis3lv02d_joystick_enable()) |
| 269 | printk(KERN_ERR DRIVER_NAME ": joystick initialization failed\n"); | 381 | printk(KERN_ERR DRIVER_NAME ": joystick initialization failed\n"); |
| 270 | 382 | ||
| 383 | printk("lis3_init_device: irq %d\n", dev->irq); | ||
| 384 | |||
| 385 | /* if we did not get an IRQ from ACPI - we have nothing more to do */ | ||
| 386 | if (!dev->irq) { | ||
| 387 | printk(KERN_ERR DRIVER_NAME | ||
| 388 | ": No IRQ in ACPI. Disabling /dev/freefall\n"); | ||
| 389 | goto out; | ||
| 390 | } | ||
| 391 | |||
| 392 | printk("lis3: registering device\n"); | ||
| 393 | if (misc_register(&lis3lv02d_misc_device)) | ||
| 394 | printk(KERN_ERR DRIVER_NAME ": misc_register failed\n"); | ||
| 395 | out: | ||
| 271 | lis3lv02d_decrease_use(dev); | 396 | lis3lv02d_decrease_use(dev); |
| 272 | return 0; | 397 | return 0; |
| 273 | } | 398 | } |
| @@ -351,6 +476,6 @@ int lis3lv02d_remove_fs(void) | |||
| 351 | EXPORT_SYMBOL_GPL(lis3lv02d_remove_fs); | 476 | EXPORT_SYMBOL_GPL(lis3lv02d_remove_fs); |
| 352 | 477 | ||
| 353 | MODULE_DESCRIPTION("ST LIS3LV02Dx three-axis digital accelerometer driver"); | 478 | MODULE_DESCRIPTION("ST LIS3LV02Dx three-axis digital accelerometer driver"); |
| 354 | MODULE_AUTHOR("Yan Burman and Eric Piel"); | 479 | MODULE_AUTHOR("Yan Burman, Eric Piel, Pavel Machek"); |
| 355 | MODULE_LICENSE("GPL"); | 480 | MODULE_LICENSE("GPL"); |
| 356 | 481 | ||
diff --git a/drivers/hwmon/lis3lv02d.h b/drivers/hwmon/lis3lv02d.h index 223f1c0763bb..75972bf372ff 100644 --- a/drivers/hwmon/lis3lv02d.h +++ b/drivers/hwmon/lis3lv02d.h | |||
| @@ -22,12 +22,15 @@ | |||
| 22 | /* | 22 | /* |
| 23 | * The actual chip is STMicroelectronics LIS3LV02DL or LIS3LV02DQ that seems to | 23 | * The actual chip is STMicroelectronics LIS3LV02DL or LIS3LV02DQ that seems to |
| 24 | * be connected via SPI. There exists also several similar chips (such as LIS302DL or | 24 | * be connected via SPI. There exists also several similar chips (such as LIS302DL or |
| 25 | * LIS3L02DQ) but not in the HP laptops and they have slightly different registers. | 25 | * LIS3L02DQ) and they have slightly different registers, but we can provide a |
| 26 | * common interface for all of them. | ||
| 26 | * They can also be connected via I²C. | 27 | * They can also be connected via I²C. |
| 27 | */ | 28 | */ |
| 28 | 29 | ||
| 29 | #define LIS3LV02DL_ID 0x3A /* Also the LIS3LV02DQ */ | 30 | /* 2-byte registers */ |
| 30 | #define LIS302DL_ID 0x3B /* Also the LIS202DL! */ | 31 | #define LIS_DOUBLE_ID 0x3A /* LIS3LV02D[LQ] */ |
| 32 | /* 1-byte registers */ | ||
| 33 | #define LIS_SINGLE_ID 0x3B /* LIS[32]02DL and others */ | ||
| 31 | 34 | ||
| 32 | enum lis3lv02d_reg { | 35 | enum lis3lv02d_reg { |
| 33 | WHO_AM_I = 0x0F, | 36 | WHO_AM_I = 0x0F, |
| @@ -44,10 +47,13 @@ enum lis3lv02d_reg { | |||
| 44 | STATUS_REG = 0x27, | 47 | STATUS_REG = 0x27, |
| 45 | OUTX_L = 0x28, | 48 | OUTX_L = 0x28, |
| 46 | OUTX_H = 0x29, | 49 | OUTX_H = 0x29, |
| 50 | OUTX = 0x29, | ||
| 47 | OUTY_L = 0x2A, | 51 | OUTY_L = 0x2A, |
| 48 | OUTY_H = 0x2B, | 52 | OUTY_H = 0x2B, |
| 53 | OUTY = 0x2B, | ||
| 49 | OUTZ_L = 0x2C, | 54 | OUTZ_L = 0x2C, |
| 50 | OUTZ_H = 0x2D, | 55 | OUTZ_H = 0x2D, |
| 56 | OUTZ = 0x2D, | ||
| 51 | FF_WU_CFG = 0x30, | 57 | FF_WU_CFG = 0x30, |
| 52 | FF_WU_SRC = 0x31, | 58 | FF_WU_SRC = 0x31, |
| 53 | FF_WU_ACK = 0x32, | 59 | FF_WU_ACK = 0x32, |
| @@ -159,6 +165,10 @@ struct acpi_lis3lv02d { | |||
| 159 | acpi_status (*write) (acpi_handle handle, int reg, u8 val); | 165 | acpi_status (*write) (acpi_handle handle, int reg, u8 val); |
| 160 | acpi_status (*read) (acpi_handle handle, int reg, u8 *ret); | 166 | acpi_status (*read) (acpi_handle handle, int reg, u8 *ret); |
| 161 | 167 | ||
| 168 | u8 whoami; /* 3Ah: 2-byte registries, 3Bh: 1-byte registries */ | ||
| 169 | s16 (*read_data) (acpi_handle handle, int reg); | ||
| 170 | int mdps_max_val; | ||
| 171 | |||
| 162 | struct input_dev *idev; /* input device */ | 172 | struct input_dev *idev; /* input device */ |
| 163 | struct task_struct *kthread; /* kthread for input */ | 173 | struct task_struct *kthread; /* kthread for input */ |
| 164 | struct mutex lock; | 174 | struct mutex lock; |
| @@ -170,6 +180,11 @@ struct acpi_lis3lv02d { | |||
| 170 | unsigned char is_on; /* whether the device is on or off */ | 180 | unsigned char is_on; /* whether the device is on or off */ |
| 171 | unsigned char usage; /* usage counter */ | 181 | unsigned char usage; /* usage counter */ |
| 172 | struct axis_conversion ac; /* hw -> logical axis */ | 182 | struct axis_conversion ac; /* hw -> logical axis */ |
| 183 | |||
| 184 | u32 irq; /* IRQ number */ | ||
| 185 | struct fasync_struct *async_queue; /* queue for the misc device */ | ||
| 186 | wait_queue_head_t misc_wait; /* Wait queue for the misc device */ | ||
| 187 | unsigned long misc_opened; /* bit0: whether the device is open */ | ||
| 173 | }; | 188 | }; |
| 174 | 189 | ||
| 175 | int lis3lv02d_init_device(struct acpi_lis3lv02d *dev); | 190 | int lis3lv02d_init_device(struct acpi_lis3lv02d *dev); |
diff --git a/drivers/hwmon/lm85.c b/drivers/hwmon/lm85.c index cfc1ee90f5a3..b251d8674b41 100644 --- a/drivers/hwmon/lm85.c +++ b/drivers/hwmon/lm85.c | |||
| @@ -72,6 +72,7 @@ I2C_CLIENT_INSMOD_7(lm85b, lm85c, adm1027, adt7463, adt7468, emc6d100, | |||
| 72 | #define LM85_COMPANY_SMSC 0x5c | 72 | #define LM85_COMPANY_SMSC 0x5c |
| 73 | #define LM85_VERSTEP_VMASK 0xf0 | 73 | #define LM85_VERSTEP_VMASK 0xf0 |
| 74 | #define LM85_VERSTEP_GENERIC 0x60 | 74 | #define LM85_VERSTEP_GENERIC 0x60 |
| 75 | #define LM85_VERSTEP_GENERIC2 0x70 | ||
| 75 | #define LM85_VERSTEP_LM85C 0x60 | 76 | #define LM85_VERSTEP_LM85C 0x60 |
| 76 | #define LM85_VERSTEP_LM85B 0x62 | 77 | #define LM85_VERSTEP_LM85B 0x62 |
| 77 | #define LM85_VERSTEP_ADM1027 0x60 | 78 | #define LM85_VERSTEP_ADM1027 0x60 |
| @@ -334,6 +335,7 @@ static struct lm85_data *lm85_update_device(struct device *dev); | |||
| 334 | static const struct i2c_device_id lm85_id[] = { | 335 | static const struct i2c_device_id lm85_id[] = { |
| 335 | { "adm1027", adm1027 }, | 336 | { "adm1027", adm1027 }, |
| 336 | { "adt7463", adt7463 }, | 337 | { "adt7463", adt7463 }, |
| 338 | { "adt7468", adt7468 }, | ||
| 337 | { "lm85", any_chip }, | 339 | { "lm85", any_chip }, |
| 338 | { "lm85b", lm85b }, | 340 | { "lm85b", lm85b }, |
| 339 | { "lm85c", lm85c }, | 341 | { "lm85c", lm85c }, |
| @@ -408,7 +410,8 @@ static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr, | |||
| 408 | struct lm85_data *data = lm85_update_device(dev); | 410 | struct lm85_data *data = lm85_update_device(dev); |
| 409 | int vid; | 411 | int vid; |
| 410 | 412 | ||
| 411 | if (data->type == adt7463 && (data->vid & 0x80)) { | 413 | if ((data->type == adt7463 || data->type == adt7468) && |
| 414 | (data->vid & 0x80)) { | ||
| 412 | /* 6-pin VID (VRM 10) */ | 415 | /* 6-pin VID (VRM 10) */ |
| 413 | vid = vid_from_reg(data->vid & 0x3f, data->vrm); | 416 | vid = vid_from_reg(data->vid & 0x3f, data->vrm); |
| 414 | } else { | 417 | } else { |
| @@ -1153,7 +1156,8 @@ static int lm85_detect(struct i2c_client *client, int kind, | |||
| 1153 | address, company, verstep); | 1156 | address, company, verstep); |
| 1154 | 1157 | ||
| 1155 | /* All supported chips have the version in common */ | 1158 | /* All supported chips have the version in common */ |
| 1156 | if ((verstep & LM85_VERSTEP_VMASK) != LM85_VERSTEP_GENERIC) { | 1159 | if ((verstep & LM85_VERSTEP_VMASK) != LM85_VERSTEP_GENERIC && |
| 1160 | (verstep & LM85_VERSTEP_VMASK) != LM85_VERSTEP_GENERIC2) { | ||
| 1157 | dev_dbg(&adapter->dev, "Autodetection failed: " | 1161 | dev_dbg(&adapter->dev, "Autodetection failed: " |
| 1158 | "unsupported version\n"); | 1162 | "unsupported version\n"); |
| 1159 | return -ENODEV; | 1163 | return -ENODEV; |
diff --git a/drivers/hwmon/vt1211.c b/drivers/hwmon/vt1211.c index b0ce37852281..73f77a9b8b18 100644 --- a/drivers/hwmon/vt1211.c +++ b/drivers/hwmon/vt1211.c | |||
| @@ -1262,7 +1262,7 @@ static int __init vt1211_device_add(unsigned short address) | |||
| 1262 | res.name = pdev->name; | 1262 | res.name = pdev->name; |
| 1263 | err = acpi_check_resource_conflict(&res); | 1263 | err = acpi_check_resource_conflict(&res); |
| 1264 | if (err) | 1264 | if (err) |
| 1265 | goto EXIT; | 1265 | goto EXIT_DEV_PUT; |
| 1266 | 1266 | ||
| 1267 | err = platform_device_add_resources(pdev, &res, 1); | 1267 | err = platform_device_add_resources(pdev, &res, 1); |
| 1268 | if (err) { | 1268 | if (err) { |
diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c index cb808d015361..feae743ba991 100644 --- a/drivers/hwmon/w83627ehf.c +++ b/drivers/hwmon/w83627ehf.c | |||
| @@ -1548,7 +1548,7 @@ static int __init sensors_w83627ehf_init(void) | |||
| 1548 | 1548 | ||
| 1549 | err = acpi_check_resource_conflict(&res); | 1549 | err = acpi_check_resource_conflict(&res); |
| 1550 | if (err) | 1550 | if (err) |
| 1551 | goto exit; | 1551 | goto exit_device_put; |
| 1552 | 1552 | ||
| 1553 | err = platform_device_add_resources(pdev, &res, 1); | 1553 | err = platform_device_add_resources(pdev, &res, 1); |
| 1554 | if (err) { | 1554 | if (err) { |
diff --git a/drivers/i2c/busses/i2c-acorn.c b/drivers/i2c/busses/i2c-acorn.c index 9fee3ca17344..9aefb5e5864d 100644 --- a/drivers/i2c/busses/i2c-acorn.c +++ b/drivers/i2c/busses/i2c-acorn.c | |||
| @@ -79,10 +79,11 @@ static struct i2c_algo_bit_data ioc_data = { | |||
| 79 | .getsda = ioc_getsda, | 79 | .getsda = ioc_getsda, |
| 80 | .getscl = ioc_getscl, | 80 | .getscl = ioc_getscl, |
| 81 | .udelay = 80, | 81 | .udelay = 80, |
| 82 | .timeout = 100 | 82 | .timeout = HZ, |
| 83 | }; | 83 | }; |
| 84 | 84 | ||
| 85 | static struct i2c_adapter ioc_ops = { | 85 | static struct i2c_adapter ioc_ops = { |
| 86 | .nr = 0, | ||
| 86 | .algo_data = &ioc_data, | 87 | .algo_data = &ioc_data, |
| 87 | }; | 88 | }; |
| 88 | 89 | ||
| @@ -90,7 +91,7 @@ static int __init i2c_ioc_init(void) | |||
| 90 | { | 91 | { |
| 91 | force_ones = FORCE_ONES | SCL | SDA; | 92 | force_ones = FORCE_ONES | SCL | SDA; |
| 92 | 93 | ||
| 93 | return i2c_bit_add_bus(&ioc_ops); | 94 | return i2c_bit_add_numbered_bus(&ioc_ops); |
| 94 | } | 95 | } |
| 95 | 96 | ||
| 96 | module_init(i2c_ioc_init); | 97 | module_init(i2c_ioc_init); |
diff --git a/drivers/i2c/busses/i2c-amd8111.c b/drivers/i2c/busses/i2c-amd8111.c index edab51973bf5..a7c59908c457 100644 --- a/drivers/i2c/busses/i2c-amd8111.c +++ b/drivers/i2c/busses/i2c-amd8111.c | |||
| @@ -72,7 +72,7 @@ static unsigned int amd_ec_wait_write(struct amd_smbus *smbus) | |||
| 72 | { | 72 | { |
| 73 | int timeout = 500; | 73 | int timeout = 500; |
| 74 | 74 | ||
| 75 | while (timeout-- && (inb(smbus->base + AMD_EC_SC) & AMD_EC_SC_IBF)) | 75 | while ((inb(smbus->base + AMD_EC_SC) & AMD_EC_SC_IBF) && --timeout) |
| 76 | udelay(1); | 76 | udelay(1); |
| 77 | 77 | ||
| 78 | if (!timeout) { | 78 | if (!timeout) { |
| @@ -88,7 +88,7 @@ static unsigned int amd_ec_wait_read(struct amd_smbus *smbus) | |||
| 88 | { | 88 | { |
| 89 | int timeout = 500; | 89 | int timeout = 500; |
| 90 | 90 | ||
| 91 | while (timeout-- && (~inb(smbus->base + AMD_EC_SC) & AMD_EC_SC_OBF)) | 91 | while ((~inb(smbus->base + AMD_EC_SC) & AMD_EC_SC_OBF) && --timeout) |
| 92 | udelay(1); | 92 | udelay(1); |
| 93 | 93 | ||
| 94 | if (!timeout) { | 94 | if (!timeout) { |
diff --git a/drivers/i2c/busses/i2c-ixp2000.c b/drivers/i2c/busses/i2c-ixp2000.c index 8e8467970481..c016f7a2c5fc 100644 --- a/drivers/i2c/busses/i2c-ixp2000.c +++ b/drivers/i2c/busses/i2c-ixp2000.c | |||
| @@ -114,7 +114,7 @@ static int ixp2000_i2c_probe(struct platform_device *plat_dev) | |||
| 114 | drv_data->algo_data.getsda = ixp2000_bit_getsda; | 114 | drv_data->algo_data.getsda = ixp2000_bit_getsda; |
| 115 | drv_data->algo_data.getscl = ixp2000_bit_getscl; | 115 | drv_data->algo_data.getscl = ixp2000_bit_getscl; |
| 116 | drv_data->algo_data.udelay = 6; | 116 | drv_data->algo_data.udelay = 6; |
| 117 | drv_data->algo_data.timeout = 100; | 117 | drv_data->algo_data.timeout = HZ; |
| 118 | 118 | ||
| 119 | strlcpy(drv_data->adapter.name, plat_dev->dev.driver->name, | 119 | strlcpy(drv_data->adapter.name, plat_dev->dev.driver->name, |
| 120 | sizeof(drv_data->adapter.name)); | 120 | sizeof(drv_data->adapter.name)); |
diff --git a/drivers/i2c/busses/i2c-mv64xxx.c b/drivers/i2c/busses/i2c-mv64xxx.c index eeda276f8f16..7f186bbcb99d 100644 --- a/drivers/i2c/busses/i2c-mv64xxx.c +++ b/drivers/i2c/busses/i2c-mv64xxx.c | |||
| @@ -482,7 +482,7 @@ mv64xxx_i2c_map_regs(struct platform_device *pd, | |||
| 482 | return 0; | 482 | return 0; |
| 483 | } | 483 | } |
| 484 | 484 | ||
| 485 | static void __devexit | 485 | static void |
| 486 | mv64xxx_i2c_unmap_regs(struct mv64xxx_i2c_data *drv_data) | 486 | mv64xxx_i2c_unmap_regs(struct mv64xxx_i2c_data *drv_data) |
| 487 | { | 487 | { |
| 488 | if (drv_data->reg_base) { | 488 | if (drv_data->reg_base) { |
| @@ -577,7 +577,7 @@ mv64xxx_i2c_remove(struct platform_device *dev) | |||
| 577 | 577 | ||
| 578 | static struct platform_driver mv64xxx_i2c_driver = { | 578 | static struct platform_driver mv64xxx_i2c_driver = { |
| 579 | .probe = mv64xxx_i2c_probe, | 579 | .probe = mv64xxx_i2c_probe, |
| 580 | .remove = mv64xxx_i2c_remove, | 580 | .remove = __devexit_p(mv64xxx_i2c_remove), |
| 581 | .driver = { | 581 | .driver = { |
| 582 | .owner = THIS_MODULE, | 582 | .owner = THIS_MODULE, |
| 583 | .name = MV64XXX_I2C_CTLR_NAME, | 583 | .name = MV64XXX_I2C_CTLR_NAME, |
diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c index 6af68146c342..bdb1f7510e91 100644 --- a/drivers/i2c/busses/i2c-pxa.c +++ b/drivers/i2c/busses/i2c-pxa.c | |||
| @@ -644,7 +644,7 @@ static int i2c_pxa_do_pio_xfer(struct pxa_i2c *i2c, | |||
| 644 | 644 | ||
| 645 | i2c_pxa_start_message(i2c); | 645 | i2c_pxa_start_message(i2c); |
| 646 | 646 | ||
| 647 | while (timeout-- && i2c->msg_num > 0) { | 647 | while (i2c->msg_num > 0 && --timeout) { |
| 648 | i2c_pxa_handler(0, i2c); | 648 | i2c_pxa_handler(0, i2c); |
| 649 | udelay(10); | 649 | udelay(10); |
| 650 | } | 650 | } |
diff --git a/drivers/i2c/busses/scx200_i2c.c b/drivers/i2c/busses/scx200_i2c.c index 162b74a04886..42df0eca43d5 100644 --- a/drivers/i2c/busses/scx200_i2c.c +++ b/drivers/i2c/busses/scx200_i2c.c | |||
| @@ -76,7 +76,7 @@ static struct i2c_algo_bit_data scx200_i2c_data = { | |||
| 76 | .getsda = scx200_i2c_getsda, | 76 | .getsda = scx200_i2c_getsda, |
| 77 | .getscl = scx200_i2c_getscl, | 77 | .getscl = scx200_i2c_getscl, |
| 78 | .udelay = 10, | 78 | .udelay = 10, |
| 79 | .timeout = 100, | 79 | .timeout = HZ, |
| 80 | }; | 80 | }; |
| 81 | 81 | ||
| 82 | static struct i2c_adapter scx200_i2c_ops = { | 82 | static struct i2c_adapter scx200_i2c_ops = { |
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index b1c9abe24c7b..e7d984866de0 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c | |||
| @@ -1831,7 +1831,8 @@ static s32 i2c_smbus_xfer_emulated(struct i2c_adapter * adapter, u16 addr, | |||
| 1831 | case I2C_SMBUS_QUICK: | 1831 | case I2C_SMBUS_QUICK: |
| 1832 | msg[0].len = 0; | 1832 | msg[0].len = 0; |
| 1833 | /* Special case: The read/write field is used as data */ | 1833 | /* Special case: The read/write field is used as data */ |
| 1834 | msg[0].flags = flags | (read_write==I2C_SMBUS_READ)?I2C_M_RD:0; | 1834 | msg[0].flags = flags | (read_write == I2C_SMBUS_READ ? |
| 1835 | I2C_M_RD : 0); | ||
| 1835 | num = 1; | 1836 | num = 1; |
| 1836 | break; | 1837 | break; |
| 1837 | case I2C_SMBUS_BYTE: | 1838 | case I2C_SMBUS_BYTE: |
diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c index c171988a9f51..7e13d2df9af3 100644 --- a/drivers/i2c/i2c-dev.c +++ b/drivers/i2c/i2c-dev.c | |||
| @@ -35,6 +35,7 @@ | |||
| 35 | #include <linux/i2c.h> | 35 | #include <linux/i2c.h> |
| 36 | #include <linux/i2c-dev.h> | 36 | #include <linux/i2c-dev.h> |
| 37 | #include <linux/smp_lock.h> | 37 | #include <linux/smp_lock.h> |
| 38 | #include <linux/jiffies.h> | ||
| 38 | #include <asm/uaccess.h> | 39 | #include <asm/uaccess.h> |
| 39 | 40 | ||
| 40 | static struct i2c_driver i2cdev_driver; | 41 | static struct i2c_driver i2cdev_driver; |
| @@ -422,7 +423,10 @@ static long i2cdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 422 | client->adapter->retries = arg; | 423 | client->adapter->retries = arg; |
| 423 | break; | 424 | break; |
| 424 | case I2C_TIMEOUT: | 425 | case I2C_TIMEOUT: |
| 425 | client->adapter->timeout = arg; | 426 | /* For historical reasons, user-space sets the timeout |
| 427 | * value in units of 10 ms. | ||
| 428 | */ | ||
| 429 | client->adapter->timeout = msecs_to_jiffies(arg * 10); | ||
| 426 | break; | 430 | break; |
| 427 | default: | 431 | default: |
| 428 | /* NOTE: returning a fault code here could cause trouble | 432 | /* NOTE: returning a fault code here could cause trouble |
diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig index 3dad2299d9c5..5ea3bfad172a 100644 --- a/drivers/ide/Kconfig +++ b/drivers/ide/Kconfig | |||
| @@ -46,7 +46,7 @@ menuconfig IDE | |||
| 46 | SMART parameters from disk drives. | 46 | SMART parameters from disk drives. |
| 47 | 47 | ||
| 48 | To compile this driver as a module, choose M here: the | 48 | To compile this driver as a module, choose M here: the |
| 49 | module will be called ide. | 49 | module will be called ide-core.ko. |
| 50 | 50 | ||
| 51 | For further information, please read <file:Documentation/ide/ide.txt>. | 51 | For further information, please read <file:Documentation/ide/ide.txt>. |
| 52 | 52 | ||
| @@ -721,6 +721,11 @@ config BLK_DEV_IDE_TX4939 | |||
| 721 | depends on SOC_TX4939 | 721 | depends on SOC_TX4939 |
| 722 | select BLK_DEV_IDEDMA_SFF | 722 | select BLK_DEV_IDEDMA_SFF |
| 723 | 723 | ||
| 724 | config BLK_DEV_IDE_AT91 | ||
| 725 | tristate "Atmel AT91 (SAM9, CAP9, AT572D940HF) IDE support" | ||
| 726 | depends on ARM && ARCH_AT91 && !ARCH_AT91RM9200 && !ARCH_AT91X40 | ||
| 727 | select IDE_TIMINGS | ||
| 728 | |||
| 724 | config IDE_ARM | 729 | config IDE_ARM |
| 725 | tristate "ARM IDE support" | 730 | tristate "ARM IDE support" |
| 726 | depends on ARM && (ARCH_RPC || ARCH_SHARK) | 731 | depends on ARM && (ARCH_RPC || ARCH_SHARK) |
diff --git a/drivers/ide/Makefile b/drivers/ide/Makefile index d0e3d7d5b467..1c326d94aa6d 100644 --- a/drivers/ide/Makefile +++ b/drivers/ide/Makefile | |||
| @@ -116,3 +116,4 @@ obj-$(CONFIG_BLK_DEV_IDE_AU1XXX) += au1xxx-ide.o | |||
| 116 | 116 | ||
| 117 | obj-$(CONFIG_BLK_DEV_IDE_TX4938) += tx4938ide.o | 117 | obj-$(CONFIG_BLK_DEV_IDE_TX4938) += tx4938ide.o |
| 118 | obj-$(CONFIG_BLK_DEV_IDE_TX4939) += tx4939ide.o | 118 | obj-$(CONFIG_BLK_DEV_IDE_TX4939) += tx4939ide.o |
| 119 | obj-$(CONFIG_BLK_DEV_IDE_AT91) += at91_ide.o | ||
diff --git a/drivers/ide/amd74xx.c b/drivers/ide/amd74xx.c index 69660a431cd9..77267c859965 100644 --- a/drivers/ide/amd74xx.c +++ b/drivers/ide/amd74xx.c | |||
| @@ -166,7 +166,7 @@ static unsigned int init_chipset_amd74xx(struct pci_dev *dev) | |||
| 166 | * Check for broken FIFO support. | 166 | * Check for broken FIFO support. |
| 167 | */ | 167 | */ |
| 168 | if (dev->vendor == PCI_VENDOR_ID_AMD && | 168 | if (dev->vendor == PCI_VENDOR_ID_AMD && |
| 169 | dev->vendor == PCI_DEVICE_ID_AMD_VIPER_7411) | 169 | dev->device == PCI_DEVICE_ID_AMD_VIPER_7411) |
| 170 | t &= 0x0f; | 170 | t &= 0x0f; |
| 171 | else | 171 | else |
| 172 | t |= 0xf0; | 172 | t |= 0xf0; |
diff --git a/drivers/ide/at91_ide.c b/drivers/ide/at91_ide.c new file mode 100644 index 000000000000..1bb50f46388d --- /dev/null +++ b/drivers/ide/at91_ide.c | |||
| @@ -0,0 +1,467 @@ | |||
| 1 | /* | ||
| 2 | * IDE host driver for AT91 (SAM9, CAP9, AT572D940HF) Static Memory Controller | ||
| 3 | * with Compact Flash True IDE logic | ||
| 4 | * | ||
| 5 | * Copyright (c) 2008, 2009 Kelvatek Ltd. | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License as published by | ||
| 9 | * the Free Software Foundation; either version 2 of the License, or | ||
| 10 | * (at your option) any later version. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, | ||
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | * GNU General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License | ||
| 18 | * along with this program; if not, write to the Free Software | ||
| 19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 20 | * | ||
| 21 | */ | ||
| 22 | |||
| 23 | #include <linux/version.h> | ||
| 24 | #include <linux/kernel.h> | ||
| 25 | #include <linux/module.h> | ||
| 26 | #include <linux/clk.h> | ||
| 27 | #include <linux/err.h> | ||
| 28 | #include <linux/ide.h> | ||
| 29 | #include <linux/platform_device.h> | ||
| 30 | |||
| 31 | #include <mach/board.h> | ||
| 32 | #include <mach/gpio.h> | ||
| 33 | #include <mach/at91sam9263.h> | ||
| 34 | #include <mach/at91sam9_smc.h> | ||
| 35 | #include <mach/at91sam9263_matrix.h> | ||
| 36 | |||
| 37 | #define DRV_NAME "at91_ide" | ||
| 38 | |||
| 39 | #define perr(fmt, args...) pr_err(DRV_NAME ": " fmt, ##args) | ||
| 40 | #define pdbg(fmt, args...) pr_debug("%s " fmt, __func__, ##args) | ||
| 41 | |||
| 42 | /* | ||
| 43 | * Access to IDE device is possible through EBI Static Memory Controller | ||
| 44 | * with Compact Flash logic. For details see EBI and SMC datasheet sections | ||
| 45 | * of any microcontroller from AT91SAM9 family. | ||
| 46 | * | ||
| 47 | * Within SMC chip select address space, lines A[23:21] distinguish Compact | ||
| 48 | * Flash modes (I/O, common memory, attribute memory, True IDE). IDE modes are: | ||
| 49 | * 0x00c0000 - True IDE | ||
| 50 | * 0x00e0000 - Alternate True IDE (Alt Status Register) | ||
| 51 | * | ||
| 52 | * On True IDE mode Task File and Data Register are mapped at the same address. | ||
| 53 | * To distinguish access between these two different bus data width is used: | ||
| 54 | * 8Bit for Task File, 16Bit for Data I/O. | ||
| 55 | * | ||
| 56 | * After initialization we do 8/16 bit flipping (changes in SMC MODE register) | ||
| 57 | * only inside IDE callback routines which are serialized by IDE layer, | ||
| 58 | * so no additional locking needed. | ||
| 59 | */ | ||
| 60 | |||
| 61 | #define TASK_FILE 0x00c00000 | ||
| 62 | #define ALT_MODE 0x00e00000 | ||
| 63 | #define REGS_SIZE 8 | ||
| 64 | |||
| 65 | #define enter_16bit(cs, mode) do { \ | ||
| 66 | mode = at91_sys_read(AT91_SMC_MODE(cs)); \ | ||
| 67 | at91_sys_write(AT91_SMC_MODE(cs), mode | AT91_SMC_DBW_16); \ | ||
| 68 | } while (0) | ||
| 69 | |||
| 70 | #define leave_16bit(cs, mode) at91_sys_write(AT91_SMC_MODE(cs), mode); | ||
| 71 | |||
| 72 | static void set_smc_timings(const u8 chipselect, const u16 cycle, | ||
| 73 | const u16 setup, const u16 pulse, | ||
| 74 | const u16 data_float, int use_iordy) | ||
| 75 | { | ||
| 76 | unsigned long mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | | ||
| 77 | AT91_SMC_BAT_SELECT; | ||
| 78 | |||
| 79 | /* disable or enable waiting for IORDY signal */ | ||
| 80 | if (use_iordy) | ||
| 81 | mode |= AT91_SMC_EXNWMODE_READY; | ||
| 82 | |||
| 83 | /* add data float cycles if needed */ | ||
| 84 | if (data_float) | ||
| 85 | mode |= AT91_SMC_TDF_(data_float); | ||
| 86 | |||
| 87 | at91_sys_write(AT91_SMC_MODE(chipselect), mode); | ||
| 88 | |||
| 89 | /* setup timings in SMC */ | ||
| 90 | at91_sys_write(AT91_SMC_SETUP(chipselect), AT91_SMC_NWESETUP_(setup) | | ||
| 91 | AT91_SMC_NCS_WRSETUP_(0) | | ||
| 92 | AT91_SMC_NRDSETUP_(setup) | | ||
| 93 | AT91_SMC_NCS_RDSETUP_(0)); | ||
| 94 | at91_sys_write(AT91_SMC_PULSE(chipselect), AT91_SMC_NWEPULSE_(pulse) | | ||
| 95 | AT91_SMC_NCS_WRPULSE_(cycle) | | ||
| 96 | AT91_SMC_NRDPULSE_(pulse) | | ||
| 97 | AT91_SMC_NCS_RDPULSE_(cycle)); | ||
| 98 | at91_sys_write(AT91_SMC_CYCLE(chipselect), AT91_SMC_NWECYCLE_(cycle) | | ||
| 99 | AT91_SMC_NRDCYCLE_(cycle)); | ||
| 100 | } | ||
| 101 | |||
| 102 | static unsigned int calc_mck_cycles(unsigned int ns, unsigned int mck_hz) | ||
| 103 | { | ||
| 104 | u64 tmp = ns; | ||
| 105 | |||
| 106 | tmp *= mck_hz; | ||
| 107 | tmp += 1000*1000*1000 - 1; /* round up */ | ||
| 108 | do_div(tmp, 1000*1000*1000); | ||
| 109 | return (unsigned int) tmp; | ||
| 110 | } | ||
| 111 | |||
| 112 | static void apply_timings(const u8 chipselect, const u8 pio, | ||
| 113 | const struct ide_timing *timing, int use_iordy) | ||
| 114 | { | ||
| 115 | unsigned int t0, t1, t2, t6z; | ||
| 116 | unsigned int cycle, setup, pulse, data_float; | ||
| 117 | unsigned int mck_hz; | ||
| 118 | struct clk *mck; | ||
| 119 | |||
| 120 | /* see table 22 of Compact Flash standard 4.1 for the meaning, | ||
| 121 | * we do not stretch active (t2) time, so setup (t1) + hold time (th) | ||
| 122 | * assure at least minimal recovery (t2i) time */ | ||
| 123 | t0 = timing->cyc8b; | ||
| 124 | t1 = timing->setup; | ||
| 125 | t2 = timing->act8b; | ||
| 126 | t6z = (pio < 5) ? 30 : 20; | ||
| 127 | |||
| 128 | pdbg("t0=%u t1=%u t2=%u t6z=%u\n", t0, t1, t2, t6z); | ||
| 129 | |||
| 130 | mck = clk_get(NULL, "mck"); | ||
| 131 | BUG_ON(IS_ERR(mck)); | ||
| 132 | mck_hz = clk_get_rate(mck); | ||
| 133 | pdbg("mck_hz=%u\n", mck_hz); | ||
| 134 | |||
| 135 | cycle = calc_mck_cycles(t0, mck_hz); | ||
| 136 | setup = calc_mck_cycles(t1, mck_hz); | ||
| 137 | pulse = calc_mck_cycles(t2, mck_hz); | ||
| 138 | data_float = calc_mck_cycles(t6z, mck_hz); | ||
| 139 | |||
| 140 | pdbg("cycle=%u setup=%u pulse=%u data_float=%u\n", | ||
| 141 | cycle, setup, pulse, data_float); | ||
| 142 | |||
| 143 | set_smc_timings(chipselect, cycle, setup, pulse, data_float, use_iordy); | ||
| 144 | } | ||
| 145 | |||
| 146 | static void at91_ide_input_data(ide_drive_t *drive, struct request *rq, | ||
| 147 | void *buf, unsigned int len) | ||
| 148 | { | ||
| 149 | ide_hwif_t *hwif = drive->hwif; | ||
| 150 | struct ide_io_ports *io_ports = &hwif->io_ports; | ||
| 151 | u8 chipselect = hwif->select_data; | ||
| 152 | unsigned long mode; | ||
| 153 | |||
| 154 | pdbg("cs %u buf %p len %d\n", chipselect, buf, len); | ||
| 155 | |||
| 156 | len++; | ||
| 157 | |||
| 158 | enter_16bit(chipselect, mode); | ||
| 159 | __ide_mm_insw((void __iomem *) io_ports->data_addr, buf, len / 2); | ||
| 160 | leave_16bit(chipselect, mode); | ||
| 161 | } | ||
| 162 | |||
| 163 | static void at91_ide_output_data(ide_drive_t *drive, struct request *rq, | ||
| 164 | void *buf, unsigned int len) | ||
| 165 | { | ||
| 166 | ide_hwif_t *hwif = drive->hwif; | ||
| 167 | struct ide_io_ports *io_ports = &hwif->io_ports; | ||
| 168 | u8 chipselect = hwif->select_data; | ||
| 169 | unsigned long mode; | ||
| 170 | |||
| 171 | pdbg("cs %u buf %p len %d\n", chipselect, buf, len); | ||
| 172 | |||
| 173 | enter_16bit(chipselect, mode); | ||
| 174 | __ide_mm_outsw((void __iomem *) io_ports->data_addr, buf, len / 2); | ||
| 175 | leave_16bit(chipselect, mode); | ||
| 176 | } | ||
| 177 | |||
| 178 | static u8 ide_mm_inb(unsigned long port) | ||
| 179 | { | ||
| 180 | return readb((void __iomem *) port); | ||
| 181 | } | ||
| 182 | |||
| 183 | static void ide_mm_outb(u8 value, unsigned long port) | ||
| 184 | { | ||
| 185 | writeb(value, (void __iomem *) port); | ||
| 186 | } | ||
| 187 | |||
| 188 | static void at91_ide_tf_load(ide_drive_t *drive, ide_task_t *task) | ||
| 189 | { | ||
| 190 | ide_hwif_t *hwif = drive->hwif; | ||
| 191 | struct ide_io_ports *io_ports = &hwif->io_ports; | ||
| 192 | struct ide_taskfile *tf = &task->tf; | ||
| 193 | u8 HIHI = (task->tf_flags & IDE_TFLAG_LBA48) ? 0xE0 : 0xEF; | ||
| 194 | |||
| 195 | if (task->tf_flags & IDE_TFLAG_FLAGGED) | ||
| 196 | HIHI = 0xFF; | ||
| 197 | |||
| 198 | if (task->tf_flags & IDE_TFLAG_OUT_DATA) { | ||
| 199 | u16 data = (tf->hob_data << 8) | tf->data; | ||
| 200 | |||
| 201 | at91_ide_output_data(drive, NULL, &data, 2); | ||
| 202 | } | ||
| 203 | |||
| 204 | if (task->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) | ||
| 205 | ide_mm_outb(tf->hob_feature, io_ports->feature_addr); | ||
| 206 | if (task->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) | ||
| 207 | ide_mm_outb(tf->hob_nsect, io_ports->nsect_addr); | ||
| 208 | if (task->tf_flags & IDE_TFLAG_OUT_HOB_LBAL) | ||
| 209 | ide_mm_outb(tf->hob_lbal, io_ports->lbal_addr); | ||
| 210 | if (task->tf_flags & IDE_TFLAG_OUT_HOB_LBAM) | ||
| 211 | ide_mm_outb(tf->hob_lbam, io_ports->lbam_addr); | ||
| 212 | if (task->tf_flags & IDE_TFLAG_OUT_HOB_LBAH) | ||
| 213 | ide_mm_outb(tf->hob_lbah, io_ports->lbah_addr); | ||
| 214 | |||
| 215 | if (task->tf_flags & IDE_TFLAG_OUT_FEATURE) | ||
| 216 | ide_mm_outb(tf->feature, io_ports->feature_addr); | ||
| 217 | if (task->tf_flags & IDE_TFLAG_OUT_NSECT) | ||
| 218 | ide_mm_outb(tf->nsect, io_ports->nsect_addr); | ||
| 219 | if (task->tf_flags & IDE_TFLAG_OUT_LBAL) | ||
| 220 | ide_mm_outb(tf->lbal, io_ports->lbal_addr); | ||
| 221 | if (task->tf_flags & IDE_TFLAG_OUT_LBAM) | ||
| 222 | ide_mm_outb(tf->lbam, io_ports->lbam_addr); | ||
| 223 | if (task->tf_flags & IDE_TFLAG_OUT_LBAH) | ||
| 224 | ide_mm_outb(tf->lbah, io_ports->lbah_addr); | ||
| 225 | |||
| 226 | if (task->tf_flags & IDE_TFLAG_OUT_DEVICE) | ||
| 227 | ide_mm_outb((tf->device & HIHI) | drive->select, io_ports->device_addr); | ||
| 228 | } | ||
| 229 | |||
| 230 | static void at91_ide_tf_read(ide_drive_t *drive, ide_task_t *task) | ||
| 231 | { | ||
| 232 | ide_hwif_t *hwif = drive->hwif; | ||
| 233 | struct ide_io_ports *io_ports = &hwif->io_ports; | ||
| 234 | struct ide_taskfile *tf = &task->tf; | ||
| 235 | |||
| 236 | if (task->tf_flags & IDE_TFLAG_IN_DATA) { | ||
| 237 | u16 data; | ||
| 238 | |||
| 239 | at91_ide_input_data(drive, NULL, &data, 2); | ||
| 240 | tf->data = data & 0xff; | ||
| 241 | tf->hob_data = (data >> 8) & 0xff; | ||
| 242 | } | ||
| 243 | |||
| 244 | /* be sure we're looking at the low order bits */ | ||
| 245 | ide_mm_outb(ATA_DEVCTL_OBS & ~0x80, io_ports->ctl_addr); | ||
| 246 | |||
| 247 | if (task->tf_flags & IDE_TFLAG_IN_FEATURE) | ||
| 248 | tf->feature = ide_mm_inb(io_ports->feature_addr); | ||
| 249 | if (task->tf_flags & IDE_TFLAG_IN_NSECT) | ||
| 250 | tf->nsect = ide_mm_inb(io_ports->nsect_addr); | ||
| 251 | if (task->tf_flags & IDE_TFLAG_IN_LBAL) | ||
| 252 | tf->lbal = ide_mm_inb(io_ports->lbal_addr); | ||
| 253 | if (task->tf_flags & IDE_TFLAG_IN_LBAM) | ||
| 254 | tf->lbam = ide_mm_inb(io_ports->lbam_addr); | ||
| 255 | if (task->tf_flags & IDE_TFLAG_IN_LBAH) | ||
| 256 | tf->lbah = ide_mm_inb(io_ports->lbah_addr); | ||
| 257 | if (task->tf_flags & IDE_TFLAG_IN_DEVICE) | ||
| 258 | tf->device = ide_mm_inb(io_ports->device_addr); | ||
| 259 | |||
| 260 | if (task->tf_flags & IDE_TFLAG_LBA48) { | ||
| 261 | ide_mm_outb(ATA_DEVCTL_OBS | 0x80, io_ports->ctl_addr); | ||
| 262 | |||
| 263 | if (task->tf_flags & IDE_TFLAG_IN_HOB_FEATURE) | ||
| 264 | tf->hob_feature = ide_mm_inb(io_ports->feature_addr); | ||
| 265 | if (task->tf_flags & IDE_TFLAG_IN_HOB_NSECT) | ||
| 266 | tf->hob_nsect = ide_mm_inb(io_ports->nsect_addr); | ||
| 267 | if (task->tf_flags & IDE_TFLAG_IN_HOB_LBAL) | ||
| 268 | tf->hob_lbal = ide_mm_inb(io_ports->lbal_addr); | ||
| 269 | if (task->tf_flags & IDE_TFLAG_IN_HOB_LBAM) | ||
| 270 | tf->hob_lbam = ide_mm_inb(io_ports->lbam_addr); | ||
| 271 | if (task->tf_flags & IDE_TFLAG_IN_HOB_LBAH) | ||
| 272 | tf->hob_lbah = ide_mm_inb(io_ports->lbah_addr); | ||
| 273 | } | ||
| 274 | } | ||
| 275 | |||
| 276 | static void at91_ide_set_pio_mode(ide_drive_t *drive, const u8 pio) | ||
| 277 | { | ||
| 278 | struct ide_timing *timing; | ||
| 279 | u8 chipselect = drive->hwif->select_data; | ||
| 280 | int use_iordy = 0; | ||
| 281 | |||
| 282 | pdbg("chipselect %u pio %u\n", chipselect, pio); | ||
| 283 | |||
| 284 | timing = ide_timing_find_mode(XFER_PIO_0 + pio); | ||
| 285 | BUG_ON(!timing); | ||
| 286 | |||
| 287 | if ((pio > 2 || ata_id_has_iordy(drive->id)) && | ||
| 288 | !(ata_id_is_cfa(drive->id) && pio > 4)) | ||
| 289 | use_iordy = 1; | ||
| 290 | |||
| 291 | apply_timings(chipselect, pio, timing, use_iordy); | ||
| 292 | } | ||
| 293 | |||
| 294 | static const struct ide_tp_ops at91_ide_tp_ops = { | ||
| 295 | .exec_command = ide_exec_command, | ||
| 296 | .read_status = ide_read_status, | ||
| 297 | .read_altstatus = ide_read_altstatus, | ||
| 298 | .set_irq = ide_set_irq, | ||
| 299 | |||
| 300 | .tf_load = at91_ide_tf_load, | ||
| 301 | .tf_read = at91_ide_tf_read, | ||
| 302 | |||
| 303 | .input_data = at91_ide_input_data, | ||
| 304 | .output_data = at91_ide_output_data, | ||
| 305 | }; | ||
| 306 | |||
| 307 | static const struct ide_port_ops at91_ide_port_ops = { | ||
| 308 | .set_pio_mode = at91_ide_set_pio_mode, | ||
| 309 | }; | ||
| 310 | |||
| 311 | static const struct ide_port_info at91_ide_port_info __initdata = { | ||
| 312 | .port_ops = &at91_ide_port_ops, | ||
| 313 | .tp_ops = &at91_ide_tp_ops, | ||
| 314 | .host_flags = IDE_HFLAG_MMIO | IDE_HFLAG_NO_DMA | IDE_HFLAG_SINGLE | | ||
| 315 | IDE_HFLAG_NO_IO_32BIT | IDE_HFLAG_UNMASK_IRQS, | ||
| 316 | .pio_mask = ATA_PIO5, | ||
| 317 | }; | ||
| 318 | |||
| 319 | /* | ||
| 320 | * If interrupt is delivered through GPIO, IRQ are triggered on falling | ||
| 321 | * and rising edge of signal. Whereas IDE device request interrupt on high | ||
| 322 | * level (rising edge in our case). This mean we have fake interrupts, so | ||
| 323 | * we need to check interrupt pin and exit instantly from ISR when line | ||
| 324 | * is on low level. | ||
| 325 | */ | ||
| 326 | |||
| 327 | irqreturn_t at91_irq_handler(int irq, void *dev_id) | ||
| 328 | { | ||
| 329 | int ntries = 8; | ||
| 330 | int pin_val1, pin_val2; | ||
| 331 | |||
| 332 | /* additional deglitch, line can be noisy in badly designed PCB */ | ||
| 333 | do { | ||
| 334 | pin_val1 = at91_get_gpio_value(irq); | ||
| 335 | pin_val2 = at91_get_gpio_value(irq); | ||
| 336 | } while (pin_val1 != pin_val2 && --ntries > 0); | ||
| 337 | |||
| 338 | if (pin_val1 == 0 || ntries <= 0) | ||
| 339 | return IRQ_HANDLED; | ||
| 340 | |||
| 341 | return ide_intr(irq, dev_id); | ||
| 342 | } | ||
| 343 | |||
| 344 | static int __init at91_ide_probe(struct platform_device *pdev) | ||
| 345 | { | ||
| 346 | int ret; | ||
| 347 | hw_regs_t hw; | ||
| 348 | hw_regs_t *hws[] = { &hw, NULL, NULL, NULL }; | ||
| 349 | struct ide_host *host; | ||
| 350 | struct resource *res; | ||
| 351 | unsigned long tf_base = 0, ctl_base = 0; | ||
| 352 | struct at91_cf_data *board = pdev->dev.platform_data; | ||
| 353 | |||
| 354 | if (!board) | ||
| 355 | return -ENODEV; | ||
| 356 | |||
| 357 | if (board->det_pin && at91_get_gpio_value(board->det_pin) != 0) { | ||
| 358 | perr("no device detected\n"); | ||
| 359 | return -ENODEV; | ||
| 360 | } | ||
| 361 | |||
| 362 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
| 363 | if (!res) { | ||
| 364 | perr("can't get memory resource\n"); | ||
| 365 | return -ENODEV; | ||
| 366 | } | ||
| 367 | |||
| 368 | if (!devm_request_mem_region(&pdev->dev, res->start + TASK_FILE, | ||
| 369 | REGS_SIZE, "ide") || | ||
| 370 | !devm_request_mem_region(&pdev->dev, res->start + ALT_MODE, | ||
| 371 | REGS_SIZE, "alt")) { | ||
| 372 | perr("memory resources in use\n"); | ||
| 373 | return -EBUSY; | ||
| 374 | } | ||
| 375 | |||
| 376 | pdbg("chipselect %u irq %u res %08lx\n", board->chipselect, | ||
| 377 | board->irq_pin, (unsigned long) res->start); | ||
| 378 | |||
| 379 | tf_base = (unsigned long) devm_ioremap(&pdev->dev, res->start + TASK_FILE, | ||
| 380 | REGS_SIZE); | ||
| 381 | ctl_base = (unsigned long) devm_ioremap(&pdev->dev, res->start + ALT_MODE, | ||
| 382 | REGS_SIZE); | ||
| 383 | if (!tf_base || !ctl_base) { | ||
| 384 | perr("can't map memory regions\n"); | ||
| 385 | return -EBUSY; | ||
| 386 | } | ||
| 387 | |||
| 388 | memset(&hw, 0, sizeof(hw)); | ||
| 389 | |||
| 390 | if (board->flags & AT91_IDE_SWAP_A0_A2) { | ||
| 391 | /* workaround for stupid hardware bug */ | ||
| 392 | hw.io_ports.data_addr = tf_base + 0; | ||
| 393 | hw.io_ports.error_addr = tf_base + 4; | ||
| 394 | hw.io_ports.nsect_addr = tf_base + 2; | ||
| 395 | hw.io_ports.lbal_addr = tf_base + 6; | ||
| 396 | hw.io_ports.lbam_addr = tf_base + 1; | ||
| 397 | hw.io_ports.lbah_addr = tf_base + 5; | ||
| 398 | hw.io_ports.device_addr = tf_base + 3; | ||
| 399 | hw.io_ports.command_addr = tf_base + 7; | ||
| 400 | hw.io_ports.ctl_addr = ctl_base + 3; | ||
| 401 | } else | ||
| 402 | ide_std_init_ports(&hw, tf_base, ctl_base + 6); | ||
| 403 | |||
| 404 | hw.irq = board->irq_pin; | ||
| 405 | hw.chipset = ide_generic; | ||
| 406 | hw.dev = &pdev->dev; | ||
| 407 | |||
| 408 | host = ide_host_alloc(&at91_ide_port_info, hws); | ||
| 409 | if (!host) { | ||
| 410 | perr("failed to allocate ide host\n"); | ||
| 411 | return -ENOMEM; | ||
| 412 | } | ||
| 413 | |||
| 414 | /* setup Static Memory Controller - PIO 0 as default */ | ||
| 415 | apply_timings(board->chipselect, 0, ide_timing_find_mode(XFER_PIO_0), 0); | ||
| 416 | |||
| 417 | /* with GPIO interrupt we have to do quirks in handler */ | ||
| 418 | if (board->irq_pin >= PIN_BASE) | ||
| 419 | host->irq_handler = at91_irq_handler; | ||
| 420 | |||
| 421 | host->ports[0]->select_data = board->chipselect; | ||
| 422 | |||
| 423 | ret = ide_host_register(host, &at91_ide_port_info, hws); | ||
| 424 | if (ret) { | ||
| 425 | perr("failed to register ide host\n"); | ||
| 426 | goto err_free_host; | ||
| 427 | } | ||
| 428 | platform_set_drvdata(pdev, host); | ||
| 429 | return 0; | ||
| 430 | |||
| 431 | err_free_host: | ||
| 432 | ide_host_free(host); | ||
| 433 | return ret; | ||
| 434 | } | ||
| 435 | |||
| 436 | static int __exit at91_ide_remove(struct platform_device *pdev) | ||
| 437 | { | ||
| 438 | struct ide_host *host = platform_get_drvdata(pdev); | ||
| 439 | |||
| 440 | ide_host_remove(host); | ||
| 441 | return 0; | ||
| 442 | } | ||
| 443 | |||
| 444 | static struct platform_driver at91_ide_driver = { | ||
| 445 | .driver = { | ||
| 446 | .name = DRV_NAME, | ||
| 447 | .owner = THIS_MODULE, | ||
| 448 | }, | ||
| 449 | .remove = __exit_p(at91_ide_remove), | ||
| 450 | }; | ||
| 451 | |||
| 452 | static int __init at91_ide_init(void) | ||
| 453 | { | ||
| 454 | return platform_driver_probe(&at91_ide_driver, at91_ide_probe); | ||
| 455 | } | ||
| 456 | |||
| 457 | static void __exit at91_ide_exit(void) | ||
| 458 | { | ||
| 459 | platform_driver_unregister(&at91_ide_driver); | ||
| 460 | } | ||
| 461 | |||
| 462 | module_init(at91_ide_init); | ||
| 463 | module_exit(at91_ide_exit); | ||
| 464 | |||
| 465 | MODULE_LICENSE("GPL"); | ||
| 466 | MODULE_AUTHOR("Stanislaw Gruszka <stf_xl@wp.pl>"); | ||
| 467 | |||
diff --git a/drivers/ide/atiixp.c b/drivers/ide/atiixp.c index b2735d28f5cc..ecd1e62ca91a 100644 --- a/drivers/ide/atiixp.c +++ b/drivers/ide/atiixp.c | |||
| @@ -52,7 +52,7 @@ static void atiixp_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
| 52 | { | 52 | { |
| 53 | struct pci_dev *dev = to_pci_dev(drive->hwif->dev); | 53 | struct pci_dev *dev = to_pci_dev(drive->hwif->dev); |
| 54 | unsigned long flags; | 54 | unsigned long flags; |
| 55 | int timing_shift = (drive->dn & 2) ? 16 : 0 + (drive->dn & 1) ? 0 : 8; | 55 | int timing_shift = (drive->dn ^ 1) * 8; |
| 56 | u32 pio_timing_data; | 56 | u32 pio_timing_data; |
| 57 | u16 pio_mode_data; | 57 | u16 pio_mode_data; |
| 58 | 58 | ||
| @@ -85,7 +85,7 @@ static void atiixp_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 85 | { | 85 | { |
| 86 | struct pci_dev *dev = to_pci_dev(drive->hwif->dev); | 86 | struct pci_dev *dev = to_pci_dev(drive->hwif->dev); |
| 87 | unsigned long flags; | 87 | unsigned long flags; |
| 88 | int timing_shift = (drive->dn & 2) ? 16 : 0 + (drive->dn & 1) ? 0 : 8; | 88 | int timing_shift = (drive->dn ^ 1) * 8; |
| 89 | u32 tmp32; | 89 | u32 tmp32; |
| 90 | u16 tmp16; | 90 | u16 tmp16; |
| 91 | u16 udma_ctl = 0; | 91 | u16 udma_ctl = 0; |
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index 0bfeb0c79d6e..ddfbea41d296 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c | |||
| @@ -55,7 +55,7 @@ | |||
| 55 | 55 | ||
| 56 | static DEFINE_MUTEX(idecd_ref_mutex); | 56 | static DEFINE_MUTEX(idecd_ref_mutex); |
| 57 | 57 | ||
| 58 | static void ide_cd_release(struct kref *); | 58 | static void ide_cd_release(struct device *); |
| 59 | 59 | ||
| 60 | static struct cdrom_info *ide_cd_get(struct gendisk *disk) | 60 | static struct cdrom_info *ide_cd_get(struct gendisk *disk) |
| 61 | { | 61 | { |
| @@ -67,7 +67,7 @@ static struct cdrom_info *ide_cd_get(struct gendisk *disk) | |||
| 67 | if (ide_device_get(cd->drive)) | 67 | if (ide_device_get(cd->drive)) |
| 68 | cd = NULL; | 68 | cd = NULL; |
| 69 | else | 69 | else |
| 70 | kref_get(&cd->kref); | 70 | get_device(&cd->dev); |
| 71 | 71 | ||
| 72 | } | 72 | } |
| 73 | mutex_unlock(&idecd_ref_mutex); | 73 | mutex_unlock(&idecd_ref_mutex); |
| @@ -79,7 +79,7 @@ static void ide_cd_put(struct cdrom_info *cd) | |||
| 79 | ide_drive_t *drive = cd->drive; | 79 | ide_drive_t *drive = cd->drive; |
| 80 | 80 | ||
| 81 | mutex_lock(&idecd_ref_mutex); | 81 | mutex_lock(&idecd_ref_mutex); |
| 82 | kref_put(&cd->kref, ide_cd_release); | 82 | put_device(&cd->dev); |
| 83 | ide_device_put(drive); | 83 | ide_device_put(drive); |
| 84 | mutex_unlock(&idecd_ref_mutex); | 84 | mutex_unlock(&idecd_ref_mutex); |
| 85 | } | 85 | } |
| @@ -194,6 +194,14 @@ static void cdrom_analyze_sense_data(ide_drive_t *drive, | |||
| 194 | bio_sectors = max(bio_sectors(failed_command->bio), 4U); | 194 | bio_sectors = max(bio_sectors(failed_command->bio), 4U); |
| 195 | sector &= ~(bio_sectors - 1); | 195 | sector &= ~(bio_sectors - 1); |
| 196 | 196 | ||
| 197 | /* | ||
| 198 | * The SCSI specification allows for the value | ||
| 199 | * returned by READ CAPACITY to be up to 75 2K | ||
| 200 | * sectors past the last readable block. | ||
| 201 | * Therefore, if we hit a medium error within the | ||
| 202 | * last 75 2K sectors, we decrease the saved size | ||
| 203 | * value. | ||
| 204 | */ | ||
| 197 | if (sector < get_capacity(info->disk) && | 205 | if (sector < get_capacity(info->disk) && |
| 198 | drive->probed_capacity - sector < 4 * 75) | 206 | drive->probed_capacity - sector < 4 * 75) |
| 199 | set_capacity(info->disk, sector); | 207 | set_capacity(info->disk, sector); |
| @@ -1790,15 +1798,17 @@ static void ide_cd_remove(ide_drive_t *drive) | |||
| 1790 | ide_debug_log(IDE_DBG_FUNC, "Call %s\n", __func__); | 1798 | ide_debug_log(IDE_DBG_FUNC, "Call %s\n", __func__); |
| 1791 | 1799 | ||
| 1792 | ide_proc_unregister_driver(drive, info->driver); | 1800 | ide_proc_unregister_driver(drive, info->driver); |
| 1793 | 1801 | device_del(&info->dev); | |
| 1794 | del_gendisk(info->disk); | 1802 | del_gendisk(info->disk); |
| 1795 | 1803 | ||
| 1796 | ide_cd_put(info); | 1804 | mutex_lock(&idecd_ref_mutex); |
| 1805 | put_device(&info->dev); | ||
| 1806 | mutex_unlock(&idecd_ref_mutex); | ||
| 1797 | } | 1807 | } |
| 1798 | 1808 | ||
| 1799 | static void ide_cd_release(struct kref *kref) | 1809 | static void ide_cd_release(struct device *dev) |
| 1800 | { | 1810 | { |
| 1801 | struct cdrom_info *info = to_ide_drv(kref, cdrom_info); | 1811 | struct cdrom_info *info = to_ide_drv(dev, cdrom_info); |
| 1802 | struct cdrom_device_info *devinfo = &info->devinfo; | 1812 | struct cdrom_device_info *devinfo = &info->devinfo; |
| 1803 | ide_drive_t *drive = info->drive; | 1813 | ide_drive_t *drive = info->drive; |
| 1804 | struct gendisk *g = info->disk; | 1814 | struct gendisk *g = info->disk; |
| @@ -1997,7 +2007,12 @@ static int ide_cd_probe(ide_drive_t *drive) | |||
| 1997 | 2007 | ||
| 1998 | ide_init_disk(g, drive); | 2008 | ide_init_disk(g, drive); |
| 1999 | 2009 | ||
| 2000 | kref_init(&info->kref); | 2010 | info->dev.parent = &drive->gendev; |
| 2011 | info->dev.release = ide_cd_release; | ||
| 2012 | dev_set_name(&info->dev, dev_name(&drive->gendev)); | ||
| 2013 | |||
| 2014 | if (device_register(&info->dev)) | ||
| 2015 | goto out_free_disk; | ||
| 2001 | 2016 | ||
| 2002 | info->drive = drive; | 2017 | info->drive = drive; |
| 2003 | info->driver = &ide_cdrom_driver; | 2018 | info->driver = &ide_cdrom_driver; |
| @@ -2011,7 +2026,7 @@ static int ide_cd_probe(ide_drive_t *drive) | |||
| 2011 | g->driverfs_dev = &drive->gendev; | 2026 | g->driverfs_dev = &drive->gendev; |
| 2012 | g->flags = GENHD_FL_CD | GENHD_FL_REMOVABLE; | 2027 | g->flags = GENHD_FL_CD | GENHD_FL_REMOVABLE; |
| 2013 | if (ide_cdrom_setup(drive)) { | 2028 | if (ide_cdrom_setup(drive)) { |
| 2014 | ide_cd_release(&info->kref); | 2029 | put_device(&info->dev); |
| 2015 | goto failed; | 2030 | goto failed; |
| 2016 | } | 2031 | } |
| 2017 | 2032 | ||
| @@ -2021,6 +2036,8 @@ static int ide_cd_probe(ide_drive_t *drive) | |||
| 2021 | add_disk(g); | 2036 | add_disk(g); |
| 2022 | return 0; | 2037 | return 0; |
| 2023 | 2038 | ||
| 2039 | out_free_disk: | ||
| 2040 | put_disk(g); | ||
| 2024 | out_free_cd: | 2041 | out_free_cd: |
| 2025 | kfree(info); | 2042 | kfree(info); |
| 2026 | failed: | 2043 | failed: |
diff --git a/drivers/ide/ide-cd.h b/drivers/ide/ide-cd.h index ac40d6cb90a2..c878bfcf1116 100644 --- a/drivers/ide/ide-cd.h +++ b/drivers/ide/ide-cd.h | |||
| @@ -80,7 +80,7 @@ struct cdrom_info { | |||
| 80 | ide_drive_t *drive; | 80 | ide_drive_t *drive; |
| 81 | struct ide_driver *driver; | 81 | struct ide_driver *driver; |
| 82 | struct gendisk *disk; | 82 | struct gendisk *disk; |
| 83 | struct kref kref; | 83 | struct device dev; |
| 84 | 84 | ||
| 85 | /* Buffer for table of contents. NULL if we haven't allocated | 85 | /* Buffer for table of contents. NULL if we haven't allocated |
| 86 | a TOC buffer for this device yet. */ | 86 | a TOC buffer for this device yet. */ |
diff --git a/drivers/ide/ide-disk_proc.c b/drivers/ide/ide-disk_proc.c index 1146f4204c6e..1f86dcbd2b1c 100644 --- a/drivers/ide/ide-disk_proc.c +++ b/drivers/ide/ide-disk_proc.c | |||
| @@ -125,5 +125,5 @@ const struct ide_proc_devset ide_disk_settings[] = { | |||
| 125 | IDE_PROC_DEVSET(multcount, 0, 16), | 125 | IDE_PROC_DEVSET(multcount, 0, 16), |
| 126 | IDE_PROC_DEVSET(nowerr, 0, 1), | 126 | IDE_PROC_DEVSET(nowerr, 0, 1), |
| 127 | IDE_PROC_DEVSET(wcache, 0, 1), | 127 | IDE_PROC_DEVSET(wcache, 0, 1), |
| 128 | { 0 }, | 128 | { NULL }, |
| 129 | }; | 129 | }; |
diff --git a/drivers/ide/ide-floppy_proc.c b/drivers/ide/ide-floppy_proc.c index 3ec762cb60ab..fcd4d8153df5 100644 --- a/drivers/ide/ide-floppy_proc.c +++ b/drivers/ide/ide-floppy_proc.c | |||
| @@ -29,5 +29,5 @@ const struct ide_proc_devset ide_floppy_settings[] = { | |||
| 29 | IDE_PROC_DEVSET(bios_head, 0, 255), | 29 | IDE_PROC_DEVSET(bios_head, 0, 255), |
| 30 | IDE_PROC_DEVSET(bios_sect, 0, 63), | 30 | IDE_PROC_DEVSET(bios_sect, 0, 63), |
| 31 | IDE_PROC_DEVSET(ticks, 0, 255), | 31 | IDE_PROC_DEVSET(ticks, 0, 255), |
| 32 | { 0 }, | 32 | { NULL }, |
| 33 | }; | 33 | }; |
diff --git a/drivers/ide/ide-gd.c b/drivers/ide/ide-gd.c index 7857b209c6df..047109419902 100644 --- a/drivers/ide/ide-gd.c +++ b/drivers/ide/ide-gd.c | |||
| @@ -25,7 +25,7 @@ module_param(debug_mask, ulong, 0644); | |||
| 25 | 25 | ||
| 26 | static DEFINE_MUTEX(ide_disk_ref_mutex); | 26 | static DEFINE_MUTEX(ide_disk_ref_mutex); |
| 27 | 27 | ||
| 28 | static void ide_disk_release(struct kref *); | 28 | static void ide_disk_release(struct device *); |
| 29 | 29 | ||
| 30 | static struct ide_disk_obj *ide_disk_get(struct gendisk *disk) | 30 | static struct ide_disk_obj *ide_disk_get(struct gendisk *disk) |
| 31 | { | 31 | { |
| @@ -37,7 +37,7 @@ static struct ide_disk_obj *ide_disk_get(struct gendisk *disk) | |||
| 37 | if (ide_device_get(idkp->drive)) | 37 | if (ide_device_get(idkp->drive)) |
| 38 | idkp = NULL; | 38 | idkp = NULL; |
| 39 | else | 39 | else |
| 40 | kref_get(&idkp->kref); | 40 | get_device(&idkp->dev); |
| 41 | } | 41 | } |
| 42 | mutex_unlock(&ide_disk_ref_mutex); | 42 | mutex_unlock(&ide_disk_ref_mutex); |
| 43 | return idkp; | 43 | return idkp; |
| @@ -48,7 +48,7 @@ static void ide_disk_put(struct ide_disk_obj *idkp) | |||
| 48 | ide_drive_t *drive = idkp->drive; | 48 | ide_drive_t *drive = idkp->drive; |
| 49 | 49 | ||
| 50 | mutex_lock(&ide_disk_ref_mutex); | 50 | mutex_lock(&ide_disk_ref_mutex); |
| 51 | kref_put(&idkp->kref, ide_disk_release); | 51 | put_device(&idkp->dev); |
| 52 | ide_device_put(drive); | 52 | ide_device_put(drive); |
| 53 | mutex_unlock(&ide_disk_ref_mutex); | 53 | mutex_unlock(&ide_disk_ref_mutex); |
| 54 | } | 54 | } |
| @@ -66,17 +66,18 @@ static void ide_gd_remove(ide_drive_t *drive) | |||
| 66 | struct gendisk *g = idkp->disk; | 66 | struct gendisk *g = idkp->disk; |
| 67 | 67 | ||
| 68 | ide_proc_unregister_driver(drive, idkp->driver); | 68 | ide_proc_unregister_driver(drive, idkp->driver); |
| 69 | 69 | device_del(&idkp->dev); | |
| 70 | del_gendisk(g); | 70 | del_gendisk(g); |
| 71 | |||
| 72 | drive->disk_ops->flush(drive); | 71 | drive->disk_ops->flush(drive); |
| 73 | 72 | ||
| 74 | ide_disk_put(idkp); | 73 | mutex_lock(&ide_disk_ref_mutex); |
| 74 | put_device(&idkp->dev); | ||
| 75 | mutex_unlock(&ide_disk_ref_mutex); | ||
| 75 | } | 76 | } |
| 76 | 77 | ||
| 77 | static void ide_disk_release(struct kref *kref) | 78 | static void ide_disk_release(struct device *dev) |
| 78 | { | 79 | { |
| 79 | struct ide_disk_obj *idkp = to_ide_drv(kref, ide_disk_obj); | 80 | struct ide_disk_obj *idkp = to_ide_drv(dev, ide_disk_obj); |
| 80 | ide_drive_t *drive = idkp->drive; | 81 | ide_drive_t *drive = idkp->drive; |
| 81 | struct gendisk *g = idkp->disk; | 82 | struct gendisk *g = idkp->disk; |
| 82 | 83 | ||
| @@ -348,7 +349,12 @@ static int ide_gd_probe(ide_drive_t *drive) | |||
| 348 | 349 | ||
| 349 | ide_init_disk(g, drive); | 350 | ide_init_disk(g, drive); |
| 350 | 351 | ||
| 351 | kref_init(&idkp->kref); | 352 | idkp->dev.parent = &drive->gendev; |
| 353 | idkp->dev.release = ide_disk_release; | ||
| 354 | dev_set_name(&idkp->dev, dev_name(&drive->gendev)); | ||
| 355 | |||
| 356 | if (device_register(&idkp->dev)) | ||
| 357 | goto out_free_disk; | ||
| 352 | 358 | ||
| 353 | idkp->drive = drive; | 359 | idkp->drive = drive; |
| 354 | idkp->driver = &ide_gd_driver; | 360 | idkp->driver = &ide_gd_driver; |
| @@ -373,6 +379,8 @@ static int ide_gd_probe(ide_drive_t *drive) | |||
| 373 | add_disk(g); | 379 | add_disk(g); |
| 374 | return 0; | 380 | return 0; |
| 375 | 381 | ||
| 382 | out_free_disk: | ||
| 383 | put_disk(g); | ||
| 376 | out_free_idkp: | 384 | out_free_idkp: |
| 377 | kfree(idkp); | 385 | kfree(idkp); |
| 378 | failed: | 386 | failed: |
diff --git a/drivers/ide/ide-gd.h b/drivers/ide/ide-gd.h index a86779f0756b..b604bdd318a1 100644 --- a/drivers/ide/ide-gd.h +++ b/drivers/ide/ide-gd.h | |||
| @@ -17,7 +17,7 @@ struct ide_disk_obj { | |||
| 17 | ide_drive_t *drive; | 17 | ide_drive_t *drive; |
| 18 | struct ide_driver *driver; | 18 | struct ide_driver *driver; |
| 19 | struct gendisk *disk; | 19 | struct gendisk *disk; |
| 20 | struct kref kref; | 20 | struct device dev; |
| 21 | unsigned int openers; /* protected by BKL for now */ | 21 | unsigned int openers; /* protected by BKL for now */ |
| 22 | 22 | ||
| 23 | /* Last failed packet command */ | 23 | /* Last failed packet command */ |
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index 9ee51adf567f..a9a6c208288a 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c | |||
| @@ -908,7 +908,7 @@ void ide_timer_expiry (unsigned long data) | |||
| 908 | ide_drive_t *uninitialized_var(drive); | 908 | ide_drive_t *uninitialized_var(drive); |
| 909 | ide_handler_t *handler; | 909 | ide_handler_t *handler; |
| 910 | unsigned long flags; | 910 | unsigned long flags; |
| 911 | unsigned long wait = -1; | 911 | int wait = -1; |
| 912 | int plug_device = 0; | 912 | int plug_device = 0; |
| 913 | 913 | ||
| 914 | spin_lock_irqsave(&hwif->lock, flags); | 914 | spin_lock_irqsave(&hwif->lock, flags); |
| @@ -1162,6 +1162,7 @@ out_early: | |||
| 1162 | 1162 | ||
| 1163 | return irq_ret; | 1163 | return irq_ret; |
| 1164 | } | 1164 | } |
| 1165 | EXPORT_SYMBOL_GPL(ide_intr); | ||
| 1165 | 1166 | ||
| 1166 | /** | 1167 | /** |
| 1167 | * ide_do_drive_cmd - issue IDE special command | 1168 | * ide_do_drive_cmd - issue IDE special command |
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c index 753b92ebe0ae..b1892bd95c6f 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c | |||
| @@ -315,6 +315,8 @@ void ide_output_data(ide_drive_t *drive, struct request *rq, void *buf, | |||
| 315 | u8 io_32bit = drive->io_32bit; | 315 | u8 io_32bit = drive->io_32bit; |
| 316 | u8 mmio = (hwif->host_flags & IDE_HFLAG_MMIO) ? 1 : 0; | 316 | u8 mmio = (hwif->host_flags & IDE_HFLAG_MMIO) ? 1 : 0; |
| 317 | 317 | ||
| 318 | len++; | ||
| 319 | |||
| 318 | if (io_32bit) { | 320 | if (io_32bit) { |
| 319 | unsigned long uninitialized_var(flags); | 321 | unsigned long uninitialized_var(flags); |
| 320 | 322 | ||
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index ce0818a993f6..ee8e3e7cad51 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c | |||
| @@ -950,6 +950,7 @@ static int ide_port_setup_devices(ide_hwif_t *hwif) | |||
| 950 | static int init_irq (ide_hwif_t *hwif) | 950 | static int init_irq (ide_hwif_t *hwif) |
| 951 | { | 951 | { |
| 952 | struct ide_io_ports *io_ports = &hwif->io_ports; | 952 | struct ide_io_ports *io_ports = &hwif->io_ports; |
| 953 | irq_handler_t irq_handler; | ||
| 953 | int sa = 0; | 954 | int sa = 0; |
| 954 | 955 | ||
| 955 | mutex_lock(&ide_cfg_mtx); | 956 | mutex_lock(&ide_cfg_mtx); |
| @@ -959,6 +960,10 @@ static int init_irq (ide_hwif_t *hwif) | |||
| 959 | hwif->timer.function = &ide_timer_expiry; | 960 | hwif->timer.function = &ide_timer_expiry; |
| 960 | hwif->timer.data = (unsigned long)hwif; | 961 | hwif->timer.data = (unsigned long)hwif; |
| 961 | 962 | ||
| 963 | irq_handler = hwif->host->irq_handler; | ||
| 964 | if (irq_handler == NULL) | ||
| 965 | irq_handler = ide_intr; | ||
| 966 | |||
| 962 | #if defined(__mc68000__) | 967 | #if defined(__mc68000__) |
| 963 | sa = IRQF_SHARED; | 968 | sa = IRQF_SHARED; |
| 964 | #endif /* __mc68000__ */ | 969 | #endif /* __mc68000__ */ |
| @@ -969,7 +974,7 @@ static int init_irq (ide_hwif_t *hwif) | |||
| 969 | if (io_ports->ctl_addr) | 974 | if (io_ports->ctl_addr) |
| 970 | hwif->tp_ops->set_irq(hwif, 1); | 975 | hwif->tp_ops->set_irq(hwif, 1); |
| 971 | 976 | ||
| 972 | if (request_irq(hwif->irq, &ide_intr, sa, hwif->name, hwif)) | 977 | if (request_irq(hwif->irq, irq_handler, sa, hwif->name, hwif)) |
| 973 | goto out_up; | 978 | goto out_up; |
| 974 | 979 | ||
| 975 | if (!hwif->rqsize) { | 980 | if (!hwif->rqsize) { |
diff --git a/drivers/ide/ide-proc.c b/drivers/ide/ide-proc.c index 1d8978b3314a..a7b9287ee0d4 100644 --- a/drivers/ide/ide-proc.c +++ b/drivers/ide/ide-proc.c | |||
| @@ -231,7 +231,7 @@ static const struct ide_proc_devset ide_generic_settings[] = { | |||
| 231 | IDE_PROC_DEVSET(pio_mode, 0, 255), | 231 | IDE_PROC_DEVSET(pio_mode, 0, 255), |
| 232 | IDE_PROC_DEVSET(unmaskirq, 0, 1), | 232 | IDE_PROC_DEVSET(unmaskirq, 0, 1), |
| 233 | IDE_PROC_DEVSET(using_dma, 0, 1), | 233 | IDE_PROC_DEVSET(using_dma, 0, 1), |
| 234 | { 0 }, | 234 | { NULL }, |
| 235 | }; | 235 | }; |
| 236 | 236 | ||
| 237 | static void proc_ide_settings_warn(void) | 237 | static void proc_ide_settings_warn(void) |
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c index d7ecd3c79757..4e6181c7bbda 100644 --- a/drivers/ide/ide-tape.c +++ b/drivers/ide/ide-tape.c | |||
| @@ -169,7 +169,7 @@ typedef struct ide_tape_obj { | |||
| 169 | ide_drive_t *drive; | 169 | ide_drive_t *drive; |
| 170 | struct ide_driver *driver; | 170 | struct ide_driver *driver; |
| 171 | struct gendisk *disk; | 171 | struct gendisk *disk; |
| 172 | struct kref kref; | 172 | struct device dev; |
| 173 | 173 | ||
| 174 | /* | 174 | /* |
| 175 | * failed_pc points to the last failed packet command, or contains | 175 | * failed_pc points to the last failed packet command, or contains |
| @@ -267,7 +267,7 @@ static DEFINE_MUTEX(idetape_ref_mutex); | |||
| 267 | 267 | ||
| 268 | static struct class *idetape_sysfs_class; | 268 | static struct class *idetape_sysfs_class; |
| 269 | 269 | ||
| 270 | static void ide_tape_release(struct kref *); | 270 | static void ide_tape_release(struct device *); |
| 271 | 271 | ||
| 272 | static struct ide_tape_obj *ide_tape_get(struct gendisk *disk) | 272 | static struct ide_tape_obj *ide_tape_get(struct gendisk *disk) |
| 273 | { | 273 | { |
| @@ -279,7 +279,7 @@ static struct ide_tape_obj *ide_tape_get(struct gendisk *disk) | |||
| 279 | if (ide_device_get(tape->drive)) | 279 | if (ide_device_get(tape->drive)) |
| 280 | tape = NULL; | 280 | tape = NULL; |
| 281 | else | 281 | else |
| 282 | kref_get(&tape->kref); | 282 | get_device(&tape->dev); |
| 283 | } | 283 | } |
| 284 | mutex_unlock(&idetape_ref_mutex); | 284 | mutex_unlock(&idetape_ref_mutex); |
| 285 | return tape; | 285 | return tape; |
| @@ -290,7 +290,7 @@ static void ide_tape_put(struct ide_tape_obj *tape) | |||
| 290 | ide_drive_t *drive = tape->drive; | 290 | ide_drive_t *drive = tape->drive; |
| 291 | 291 | ||
| 292 | mutex_lock(&idetape_ref_mutex); | 292 | mutex_lock(&idetape_ref_mutex); |
| 293 | kref_put(&tape->kref, ide_tape_release); | 293 | put_device(&tape->dev); |
| 294 | ide_device_put(drive); | 294 | ide_device_put(drive); |
| 295 | mutex_unlock(&idetape_ref_mutex); | 295 | mutex_unlock(&idetape_ref_mutex); |
| 296 | } | 296 | } |
| @@ -308,7 +308,7 @@ static struct ide_tape_obj *ide_tape_chrdev_get(unsigned int i) | |||
| 308 | mutex_lock(&idetape_ref_mutex); | 308 | mutex_lock(&idetape_ref_mutex); |
| 309 | tape = idetape_devs[i]; | 309 | tape = idetape_devs[i]; |
| 310 | if (tape) | 310 | if (tape) |
| 311 | kref_get(&tape->kref); | 311 | get_device(&tape->dev); |
| 312 | mutex_unlock(&idetape_ref_mutex); | 312 | mutex_unlock(&idetape_ref_mutex); |
| 313 | return tape; | 313 | return tape; |
| 314 | } | 314 | } |
| @@ -2166,7 +2166,7 @@ static const struct ide_proc_devset idetape_settings[] = { | |||
| 2166 | __IDE_PROC_DEVSET(speed, 0, 0xffff, NULL, NULL), | 2166 | __IDE_PROC_DEVSET(speed, 0, 0xffff, NULL, NULL), |
| 2167 | __IDE_PROC_DEVSET(tdsc, IDETAPE_DSC_RW_MIN, IDETAPE_DSC_RW_MAX, | 2167 | __IDE_PROC_DEVSET(tdsc, IDETAPE_DSC_RW_MIN, IDETAPE_DSC_RW_MAX, |
| 2168 | mulf_tdsc, divf_tdsc), | 2168 | mulf_tdsc, divf_tdsc), |
| 2169 | { 0 }, | 2169 | { NULL }, |
| 2170 | }; | 2170 | }; |
| 2171 | #endif | 2171 | #endif |
| 2172 | 2172 | ||
| @@ -2256,15 +2256,17 @@ static void ide_tape_remove(ide_drive_t *drive) | |||
| 2256 | idetape_tape_t *tape = drive->driver_data; | 2256 | idetape_tape_t *tape = drive->driver_data; |
| 2257 | 2257 | ||
| 2258 | ide_proc_unregister_driver(drive, tape->driver); | 2258 | ide_proc_unregister_driver(drive, tape->driver); |
| 2259 | 2259 | device_del(&tape->dev); | |
| 2260 | ide_unregister_region(tape->disk); | 2260 | ide_unregister_region(tape->disk); |
| 2261 | 2261 | ||
| 2262 | ide_tape_put(tape); | 2262 | mutex_lock(&idetape_ref_mutex); |
| 2263 | put_device(&tape->dev); | ||
| 2264 | mutex_unlock(&idetape_ref_mutex); | ||
| 2263 | } | 2265 | } |
| 2264 | 2266 | ||
| 2265 | static void ide_tape_release(struct kref *kref) | 2267 | static void ide_tape_release(struct device *dev) |
| 2266 | { | 2268 | { |
| 2267 | struct ide_tape_obj *tape = to_ide_drv(kref, ide_tape_obj); | 2269 | struct ide_tape_obj *tape = to_ide_drv(dev, ide_tape_obj); |
| 2268 | ide_drive_t *drive = tape->drive; | 2270 | ide_drive_t *drive = tape->drive; |
| 2269 | struct gendisk *g = tape->disk; | 2271 | struct gendisk *g = tape->disk; |
| 2270 | 2272 | ||
| @@ -2407,7 +2409,12 @@ static int ide_tape_probe(ide_drive_t *drive) | |||
| 2407 | 2409 | ||
| 2408 | ide_init_disk(g, drive); | 2410 | ide_init_disk(g, drive); |
| 2409 | 2411 | ||
| 2410 | kref_init(&tape->kref); | 2412 | tape->dev.parent = &drive->gendev; |
| 2413 | tape->dev.release = ide_tape_release; | ||
| 2414 | dev_set_name(&tape->dev, dev_name(&drive->gendev)); | ||
| 2415 | |||
| 2416 | if (device_register(&tape->dev)) | ||
| 2417 | goto out_free_disk; | ||
| 2411 | 2418 | ||
| 2412 | tape->drive = drive; | 2419 | tape->drive = drive; |
| 2413 | tape->driver = &idetape_driver; | 2420 | tape->driver = &idetape_driver; |
| @@ -2436,6 +2443,8 @@ static int ide_tape_probe(ide_drive_t *drive) | |||
| 2436 | 2443 | ||
| 2437 | return 0; | 2444 | return 0; |
| 2438 | 2445 | ||
| 2446 | out_free_disk: | ||
| 2447 | put_disk(g); | ||
| 2439 | out_free_tape: | 2448 | out_free_tape: |
| 2440 | kfree(tape); | 2449 | kfree(tape); |
| 2441 | failed: | 2450 | failed: |
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index 258805da15c3..0920e3b0c962 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c | |||
| @@ -337,6 +337,7 @@ static int ide_set_dev_param_mask(const char *s, struct kernel_param *kp) | |||
| 337 | int a, b, i, j = 1; | 337 | int a, b, i, j = 1; |
| 338 | unsigned int *dev_param_mask = (unsigned int *)kp->arg; | 338 | unsigned int *dev_param_mask = (unsigned int *)kp->arg; |
| 339 | 339 | ||
| 340 | /* controller . device (0 or 1) [ : 1 (set) | 0 (clear) ] */ | ||
| 340 | if (sscanf(s, "%d.%d:%d", &a, &b, &j) != 3 && | 341 | if (sscanf(s, "%d.%d:%d", &a, &b, &j) != 3 && |
| 341 | sscanf(s, "%d.%d", &a, &b) != 2) | 342 | sscanf(s, "%d.%d", &a, &b) != 2) |
| 342 | return -EINVAL; | 343 | return -EINVAL; |
| @@ -349,7 +350,7 @@ static int ide_set_dev_param_mask(const char *s, struct kernel_param *kp) | |||
| 349 | if (j) | 350 | if (j) |
| 350 | *dev_param_mask |= (1 << i); | 351 | *dev_param_mask |= (1 << i); |
| 351 | else | 352 | else |
| 352 | *dev_param_mask &= (1 << i); | 353 | *dev_param_mask &= ~(1 << i); |
| 353 | 354 | ||
| 354 | return 0; | 355 | return 0; |
| 355 | } | 356 | } |
| @@ -392,6 +393,8 @@ static int ide_set_disk_chs(const char *str, struct kernel_param *kp) | |||
| 392 | { | 393 | { |
| 393 | int a, b, c = 0, h = 0, s = 0, i, j = 1; | 394 | int a, b, c = 0, h = 0, s = 0, i, j = 1; |
| 394 | 395 | ||
| 396 | /* controller . device (0 or 1) : Cylinders , Heads , Sectors */ | ||
| 397 | /* controller . device (0 or 1) : 1 (use CHS) | 0 (ignore CHS) */ | ||
| 395 | if (sscanf(str, "%d.%d:%d,%d,%d", &a, &b, &c, &h, &s) != 5 && | 398 | if (sscanf(str, "%d.%d:%d,%d,%d", &a, &b, &c, &h, &s) != 5 && |
| 396 | sscanf(str, "%d.%d:%d", &a, &b, &j) != 3) | 399 | sscanf(str, "%d.%d:%d", &a, &b, &j) != 3) |
| 397 | return -EINVAL; | 400 | return -EINVAL; |
| @@ -407,7 +410,7 @@ static int ide_set_disk_chs(const char *str, struct kernel_param *kp) | |||
| 407 | if (j) | 410 | if (j) |
| 408 | ide_disks |= (1 << i); | 411 | ide_disks |= (1 << i); |
| 409 | else | 412 | else |
| 410 | ide_disks &= (1 << i); | 413 | ide_disks &= ~(1 << i); |
| 411 | 414 | ||
| 412 | ide_disks_chs[i].cyl = c; | 415 | ide_disks_chs[i].cyl = c; |
| 413 | ide_disks_chs[i].head = h; | 416 | ide_disks_chs[i].head = h; |
| @@ -469,6 +472,8 @@ static int ide_set_ignore_cable(const char *s, struct kernel_param *kp) | |||
| 469 | { | 472 | { |
| 470 | int i, j = 1; | 473 | int i, j = 1; |
| 471 | 474 | ||
| 475 | /* controller (ignore) */ | ||
| 476 | /* controller : 1 (ignore) | 0 (use) */ | ||
| 472 | if (sscanf(s, "%d:%d", &i, &j) != 2 && sscanf(s, "%d", &i) != 1) | 477 | if (sscanf(s, "%d:%d", &i, &j) != 2 && sscanf(s, "%d", &i) != 1) |
| 473 | return -EINVAL; | 478 | return -EINVAL; |
| 474 | 479 | ||
| @@ -478,7 +483,7 @@ static int ide_set_ignore_cable(const char *s, struct kernel_param *kp) | |||
| 478 | if (j) | 483 | if (j) |
| 479 | ide_ignore_cable |= (1 << i); | 484 | ide_ignore_cable |= (1 << i); |
| 480 | else | 485 | else |
| 481 | ide_ignore_cable &= (1 << i); | 486 | ide_ignore_cable &= ~(1 << i); |
| 482 | 487 | ||
| 483 | return 0; | 488 | return 0; |
| 484 | } | 489 | } |
diff --git a/drivers/ide/it821x.c b/drivers/ide/it821x.c index e1c4f5437396..13b8153112ed 100644 --- a/drivers/ide/it821x.c +++ b/drivers/ide/it821x.c | |||
| @@ -5,9 +5,8 @@ | |||
| 5 | * May be copied or modified under the terms of the GNU General Public License | 5 | * May be copied or modified under the terms of the GNU General Public License |
| 6 | * Based in part on the ITE vendor provided SCSI driver. | 6 | * Based in part on the ITE vendor provided SCSI driver. |
| 7 | * | 7 | * |
| 8 | * Documentation available from | 8 | * Documentation: |
| 9 | * http://www.ite.com.tw/pc/IT8212F_V04.pdf | 9 | * Datasheet is freely available, some other documents under NDA. |
| 10 | * Some other documents are NDA. | ||
| 11 | * | 10 | * |
| 12 | * The ITE8212 isn't exactly a standard IDE controller. It has two | 11 | * The ITE8212 isn't exactly a standard IDE controller. It has two |
| 13 | * modes. In pass through mode then it is an IDE controller. In its smart | 12 | * modes. In pass through mode then it is an IDE controller. In its smart |
diff --git a/drivers/ieee1394/dma.h b/drivers/ieee1394/dma.h index 2727bcd24194..467373cab8e5 100644 --- a/drivers/ieee1394/dma.h +++ b/drivers/ieee1394/dma.h | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | 12 | ||
| 13 | #include <asm/types.h> | 13 | #include <asm/types.h> |
| 14 | 14 | ||
| 15 | struct file; | ||
| 15 | struct pci_dev; | 16 | struct pci_dev; |
| 16 | struct scatterlist; | 17 | struct scatterlist; |
| 17 | struct vm_area_struct; | 18 | struct vm_area_struct; |
diff --git a/drivers/ieee1394/ieee1394_core.c b/drivers/ieee1394/ieee1394_core.c index 2beb8d94f7bd..872338003721 100644 --- a/drivers/ieee1394/ieee1394_core.c +++ b/drivers/ieee1394/ieee1394_core.c | |||
| @@ -1275,7 +1275,7 @@ static void __exit ieee1394_cleanup(void) | |||
| 1275 | unregister_chrdev_region(IEEE1394_CORE_DEV, 256); | 1275 | unregister_chrdev_region(IEEE1394_CORE_DEV, 256); |
| 1276 | } | 1276 | } |
| 1277 | 1277 | ||
| 1278 | module_init(ieee1394_init); | 1278 | fs_initcall(ieee1394_init); |
| 1279 | module_exit(ieee1394_cleanup); | 1279 | module_exit(ieee1394_cleanup); |
| 1280 | 1280 | ||
| 1281 | /* Exported symbols */ | 1281 | /* Exported symbols */ |
| @@ -1314,6 +1314,7 @@ EXPORT_SYMBOL(hpsb_make_lock64packet); | |||
| 1314 | EXPORT_SYMBOL(hpsb_make_phypacket); | 1314 | EXPORT_SYMBOL(hpsb_make_phypacket); |
| 1315 | EXPORT_SYMBOL(hpsb_read); | 1315 | EXPORT_SYMBOL(hpsb_read); |
| 1316 | EXPORT_SYMBOL(hpsb_write); | 1316 | EXPORT_SYMBOL(hpsb_write); |
| 1317 | EXPORT_SYMBOL(hpsb_lock); | ||
| 1317 | EXPORT_SYMBOL(hpsb_packet_success); | 1318 | EXPORT_SYMBOL(hpsb_packet_success); |
| 1318 | 1319 | ||
| 1319 | /** highlevel.c **/ | 1320 | /** highlevel.c **/ |
diff --git a/drivers/ieee1394/ieee1394_transactions.c b/drivers/ieee1394/ieee1394_transactions.c index 10c3d9f8c038..675b3135d5f1 100644 --- a/drivers/ieee1394/ieee1394_transactions.c +++ b/drivers/ieee1394/ieee1394_transactions.c | |||
| @@ -501,8 +501,6 @@ int hpsb_read(struct hpsb_host *host, nodeid_t node, unsigned int generation, | |||
| 501 | if (length == 0) | 501 | if (length == 0) |
| 502 | return -EINVAL; | 502 | return -EINVAL; |
| 503 | 503 | ||
| 504 | BUG_ON(in_interrupt()); // We can't be called in an interrupt, yet | ||
| 505 | |||
| 506 | packet = hpsb_make_readpacket(host, node, addr, length); | 504 | packet = hpsb_make_readpacket(host, node, addr, length); |
| 507 | 505 | ||
| 508 | if (!packet) { | 506 | if (!packet) { |
| @@ -550,8 +548,6 @@ int hpsb_write(struct hpsb_host *host, nodeid_t node, unsigned int generation, | |||
| 550 | if (length == 0) | 548 | if (length == 0) |
| 551 | return -EINVAL; | 549 | return -EINVAL; |
| 552 | 550 | ||
| 553 | BUG_ON(in_interrupt()); // We can't be called in an interrupt, yet | ||
| 554 | |||
| 555 | packet = hpsb_make_writepacket(host, node, addr, buffer, length); | 551 | packet = hpsb_make_writepacket(host, node, addr, buffer, length); |
| 556 | 552 | ||
| 557 | if (!packet) | 553 | if (!packet) |
| @@ -570,3 +566,30 @@ int hpsb_write(struct hpsb_host *host, nodeid_t node, unsigned int generation, | |||
| 570 | 566 | ||
| 571 | return retval; | 567 | return retval; |
| 572 | } | 568 | } |
| 569 | |||
| 570 | int hpsb_lock(struct hpsb_host *host, nodeid_t node, unsigned int generation, | ||
| 571 | u64 addr, int extcode, quadlet_t *data, quadlet_t arg) | ||
| 572 | { | ||
| 573 | struct hpsb_packet *packet; | ||
| 574 | int retval = 0; | ||
| 575 | |||
| 576 | packet = hpsb_make_lockpacket(host, node, addr, extcode, data, arg); | ||
| 577 | if (!packet) | ||
| 578 | return -ENOMEM; | ||
| 579 | |||
| 580 | packet->generation = generation; | ||
| 581 | retval = hpsb_send_packet_and_wait(packet); | ||
| 582 | if (retval < 0) | ||
| 583 | goto hpsb_lock_fail; | ||
| 584 | |||
| 585 | retval = hpsb_packet_success(packet); | ||
| 586 | |||
| 587 | if (retval == 0) | ||
| 588 | *data = packet->data[0]; | ||
| 589 | |||
| 590 | hpsb_lock_fail: | ||
| 591 | hpsb_free_tlabel(packet); | ||
| 592 | hpsb_free_packet(packet); | ||
| 593 | |||
| 594 | return retval; | ||
| 595 | } | ||
diff --git a/drivers/ieee1394/ieee1394_transactions.h b/drivers/ieee1394/ieee1394_transactions.h index d2d5bc3546d7..20b693be14b2 100644 --- a/drivers/ieee1394/ieee1394_transactions.h +++ b/drivers/ieee1394/ieee1394_transactions.h | |||
| @@ -30,6 +30,8 @@ int hpsb_read(struct hpsb_host *host, nodeid_t node, unsigned int generation, | |||
| 30 | u64 addr, quadlet_t *buffer, size_t length); | 30 | u64 addr, quadlet_t *buffer, size_t length); |
| 31 | int hpsb_write(struct hpsb_host *host, nodeid_t node, unsigned int generation, | 31 | int hpsb_write(struct hpsb_host *host, nodeid_t node, unsigned int generation, |
| 32 | u64 addr, quadlet_t *buffer, size_t length); | 32 | u64 addr, quadlet_t *buffer, size_t length); |
| 33 | int hpsb_lock(struct hpsb_host *host, nodeid_t node, unsigned int generation, | ||
| 34 | u64 addr, int extcode, quadlet_t *data, quadlet_t arg); | ||
| 33 | 35 | ||
| 34 | #ifdef HPSB_DEBUG_TLABELS | 36 | #ifdef HPSB_DEBUG_TLABELS |
| 35 | extern spinlock_t hpsb_tlabel_lock; | 37 | extern spinlock_t hpsb_tlabel_lock; |
diff --git a/drivers/ieee1394/iso.h b/drivers/ieee1394/iso.h index b5de5f21ef78..c2089c093aa7 100644 --- a/drivers/ieee1394/iso.h +++ b/drivers/ieee1394/iso.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #define IEEE1394_ISO_H | 13 | #define IEEE1394_ISO_H |
| 14 | 14 | ||
| 15 | #include <linux/spinlock_types.h> | 15 | #include <linux/spinlock_types.h> |
| 16 | #include <linux/wait.h> | ||
| 16 | #include <asm/atomic.h> | 17 | #include <asm/atomic.h> |
| 17 | #include <asm/types.h> | 18 | #include <asm/types.h> |
| 18 | 19 | ||
diff --git a/drivers/ieee1394/nodemgr.c b/drivers/ieee1394/nodemgr.c index 906c5a98d814..53aada5bbe1e 100644 --- a/drivers/ieee1394/nodemgr.c +++ b/drivers/ieee1394/nodemgr.c | |||
| @@ -971,6 +971,9 @@ static struct unit_directory *nodemgr_process_unit_directory | |||
| 971 | ud->ud_kv = ud_kv; | 971 | ud->ud_kv = ud_kv; |
| 972 | ud->id = (*id)++; | 972 | ud->id = (*id)++; |
| 973 | 973 | ||
| 974 | /* inherit vendor_id from root directory if none exists in unit dir */ | ||
| 975 | ud->vendor_id = ne->vendor_id; | ||
| 976 | |||
| 974 | csr1212_for_each_dir_entry(ne->csr, kv, ud_kv, dentry) { | 977 | csr1212_for_each_dir_entry(ne->csr, kv, ud_kv, dentry) { |
| 975 | switch (kv->key.id) { | 978 | switch (kv->key.id) { |
| 976 | case CSR1212_KV_ID_VENDOR: | 979 | case CSR1212_KV_ID_VENDOR: |
| @@ -1265,7 +1268,8 @@ static void nodemgr_update_node(struct node_entry *ne, struct csr1212_csr *csr, | |||
| 1265 | csr1212_destroy_csr(csr); | 1268 | csr1212_destroy_csr(csr); |
| 1266 | } | 1269 | } |
| 1267 | 1270 | ||
| 1268 | /* Mark the node current */ | 1271 | /* Finally, mark the node current */ |
| 1272 | smp_wmb(); | ||
| 1269 | ne->generation = generation; | 1273 | ne->generation = generation; |
| 1270 | 1274 | ||
| 1271 | if (ne->in_limbo) { | 1275 | if (ne->in_limbo) { |
| @@ -1798,7 +1802,7 @@ void hpsb_node_fill_packet(struct node_entry *ne, struct hpsb_packet *packet) | |||
| 1798 | { | 1802 | { |
| 1799 | packet->host = ne->host; | 1803 | packet->host = ne->host; |
| 1800 | packet->generation = ne->generation; | 1804 | packet->generation = ne->generation; |
| 1801 | barrier(); | 1805 | smp_rmb(); |
| 1802 | packet->node_id = ne->nodeid; | 1806 | packet->node_id = ne->nodeid; |
| 1803 | } | 1807 | } |
| 1804 | 1808 | ||
| @@ -1807,7 +1811,7 @@ int hpsb_node_write(struct node_entry *ne, u64 addr, | |||
| 1807 | { | 1811 | { |
| 1808 | unsigned int generation = ne->generation; | 1812 | unsigned int generation = ne->generation; |
| 1809 | 1813 | ||
| 1810 | barrier(); | 1814 | smp_rmb(); |
| 1811 | return hpsb_write(ne->host, ne->nodeid, generation, | 1815 | return hpsb_write(ne->host, ne->nodeid, generation, |
| 1812 | addr, buffer, length); | 1816 | addr, buffer, length); |
| 1813 | } | 1817 | } |
diff --git a/drivers/ieee1394/nodemgr.h b/drivers/ieee1394/nodemgr.h index 15ea09733e84..ee5acdbd114a 100644 --- a/drivers/ieee1394/nodemgr.h +++ b/drivers/ieee1394/nodemgr.h | |||
| @@ -21,9 +21,11 @@ | |||
| 21 | #define _IEEE1394_NODEMGR_H | 21 | #define _IEEE1394_NODEMGR_H |
| 22 | 22 | ||
| 23 | #include <linux/device.h> | 23 | #include <linux/device.h> |
| 24 | #include <asm/system.h> | ||
| 24 | #include <asm/types.h> | 25 | #include <asm/types.h> |
| 25 | 26 | ||
| 26 | #include "ieee1394_core.h" | 27 | #include "ieee1394_core.h" |
| 28 | #include "ieee1394_transactions.h" | ||
| 27 | #include "ieee1394_types.h" | 29 | #include "ieee1394_types.h" |
| 28 | 30 | ||
| 29 | struct csr1212_csr; | 31 | struct csr1212_csr; |
| @@ -154,6 +156,22 @@ static inline int hpsb_node_entry_valid(struct node_entry *ne) | |||
| 154 | void hpsb_node_fill_packet(struct node_entry *ne, struct hpsb_packet *packet); | 156 | void hpsb_node_fill_packet(struct node_entry *ne, struct hpsb_packet *packet); |
| 155 | int hpsb_node_write(struct node_entry *ne, u64 addr, | 157 | int hpsb_node_write(struct node_entry *ne, u64 addr, |
| 156 | quadlet_t *buffer, size_t length); | 158 | quadlet_t *buffer, size_t length); |
| 159 | static inline int hpsb_node_read(struct node_entry *ne, u64 addr, | ||
| 160 | quadlet_t *buffer, size_t length) | ||
| 161 | { | ||
| 162 | unsigned int g = ne->generation; | ||
| 163 | |||
| 164 | smp_rmb(); | ||
| 165 | return hpsb_read(ne->host, ne->nodeid, g, addr, buffer, length); | ||
| 166 | } | ||
| 167 | static inline int hpsb_node_lock(struct node_entry *ne, u64 addr, int extcode, | ||
| 168 | quadlet_t *buffer, quadlet_t arg) | ||
| 169 | { | ||
| 170 | unsigned int g = ne->generation; | ||
| 171 | |||
| 172 | smp_rmb(); | ||
| 173 | return hpsb_lock(ne->host, ne->nodeid, g, addr, extcode, buffer, arg); | ||
| 174 | } | ||
| 157 | int nodemgr_for_each_host(void *data, int (*cb)(struct hpsb_host *, void *)); | 175 | int nodemgr_for_each_host(void *data, int (*cb)(struct hpsb_host *, void *)); |
| 158 | 176 | ||
| 159 | int init_ieee1394_nodemgr(void); | 177 | int init_ieee1394_nodemgr(void); |
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c index c3c8b9bc40ae..45470f18d7e9 100644 --- a/drivers/input/keyboard/atkbd.c +++ b/drivers/input/keyboard/atkbd.c | |||
| @@ -839,7 +839,7 @@ static void atkbd_disconnect(struct serio *serio) | |||
| 839 | */ | 839 | */ |
| 840 | static void atkbd_dell_laptop_keymap_fixup(struct atkbd *atkbd) | 840 | static void atkbd_dell_laptop_keymap_fixup(struct atkbd *atkbd) |
| 841 | { | 841 | { |
| 842 | const unsigned int forced_release_keys[] = { | 842 | static const unsigned int forced_release_keys[] = { |
| 843 | 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8f, 0x93, | 843 | 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8f, 0x93, |
| 844 | }; | 844 | }; |
| 845 | int i; | 845 | int i; |
| @@ -856,7 +856,7 @@ static void atkbd_dell_laptop_keymap_fixup(struct atkbd *atkbd) | |||
| 856 | */ | 856 | */ |
| 857 | static void atkbd_hp_keymap_fixup(struct atkbd *atkbd) | 857 | static void atkbd_hp_keymap_fixup(struct atkbd *atkbd) |
| 858 | { | 858 | { |
| 859 | const unsigned int forced_release_keys[] = { | 859 | static const unsigned int forced_release_keys[] = { |
| 860 | 0x94, | 860 | 0x94, |
| 861 | }; | 861 | }; |
| 862 | int i; | 862 | int i; |
diff --git a/drivers/input/keyboard/bf54x-keys.c b/drivers/input/keyboard/bf54x-keys.c index 19284016e0f4..ee855c5202e8 100644 --- a/drivers/input/keyboard/bf54x-keys.c +++ b/drivers/input/keyboard/bf54x-keys.c | |||
| @@ -209,8 +209,8 @@ static int __devinit bfin_kpad_probe(struct platform_device *pdev) | |||
| 209 | goto out; | 209 | goto out; |
| 210 | } | 210 | } |
| 211 | 211 | ||
| 212 | if (!pdata->debounce_time || !pdata->debounce_time > MAX_MULT || | 212 | if (!pdata->debounce_time || pdata->debounce_time > MAX_MULT || |
| 213 | !pdata->coldrive_time || !pdata->coldrive_time > MAX_MULT) { | 213 | !pdata->coldrive_time || pdata->coldrive_time > MAX_MULT) { |
| 214 | printk(KERN_ERR DRV_NAME | 214 | printk(KERN_ERR DRV_NAME |
| 215 | ": Invalid Debounce/Columdrive Time from pdata\n"); | 215 | ": Invalid Debounce/Columdrive Time from pdata\n"); |
| 216 | bfin_write_KPAD_MSEL(0xFF0); /* Default MSEL */ | 216 | bfin_write_KPAD_MSEL(0xFF0); /* Default MSEL */ |
diff --git a/drivers/input/keyboard/corgikbd.c b/drivers/input/keyboard/corgikbd.c index 529121be8a98..634af6a8e6b3 100644 --- a/drivers/input/keyboard/corgikbd.c +++ b/drivers/input/keyboard/corgikbd.c | |||
| @@ -286,7 +286,7 @@ static int corgikbd_resume(struct platform_device *dev) | |||
| 286 | #define corgikbd_resume NULL | 286 | #define corgikbd_resume NULL |
| 287 | #endif | 287 | #endif |
| 288 | 288 | ||
| 289 | static int __init corgikbd_probe(struct platform_device *pdev) | 289 | static int __devinit corgikbd_probe(struct platform_device *pdev) |
| 290 | { | 290 | { |
| 291 | struct corgikbd *corgikbd; | 291 | struct corgikbd *corgikbd; |
| 292 | struct input_dev *input_dev; | 292 | struct input_dev *input_dev; |
| @@ -366,7 +366,7 @@ static int __init corgikbd_probe(struct platform_device *pdev) | |||
| 366 | return err; | 366 | return err; |
| 367 | } | 367 | } |
| 368 | 368 | ||
| 369 | static int corgikbd_remove(struct platform_device *pdev) | 369 | static int __devexit corgikbd_remove(struct platform_device *pdev) |
| 370 | { | 370 | { |
| 371 | int i; | 371 | int i; |
| 372 | struct corgikbd *corgikbd = platform_get_drvdata(pdev); | 372 | struct corgikbd *corgikbd = platform_get_drvdata(pdev); |
| @@ -386,7 +386,7 @@ static int corgikbd_remove(struct platform_device *pdev) | |||
| 386 | 386 | ||
| 387 | static struct platform_driver corgikbd_driver = { | 387 | static struct platform_driver corgikbd_driver = { |
| 388 | .probe = corgikbd_probe, | 388 | .probe = corgikbd_probe, |
| 389 | .remove = corgikbd_remove, | 389 | .remove = __devexit_p(corgikbd_remove), |
| 390 | .suspend = corgikbd_suspend, | 390 | .suspend = corgikbd_suspend, |
| 391 | .resume = corgikbd_resume, | 391 | .resume = corgikbd_resume, |
| 392 | .driver = { | 392 | .driver = { |
| @@ -395,7 +395,7 @@ static struct platform_driver corgikbd_driver = { | |||
| 395 | }, | 395 | }, |
| 396 | }; | 396 | }; |
| 397 | 397 | ||
| 398 | static int __devinit corgikbd_init(void) | 398 | static int __init corgikbd_init(void) |
| 399 | { | 399 | { |
| 400 | return platform_driver_register(&corgikbd_driver); | 400 | return platform_driver_register(&corgikbd_driver); |
| 401 | } | 401 | } |
diff --git a/drivers/input/keyboard/omap-keypad.c b/drivers/input/keyboard/omap-keypad.c index 3f3d1198cdb1..058fa8b02c21 100644 --- a/drivers/input/keyboard/omap-keypad.c +++ b/drivers/input/keyboard/omap-keypad.c | |||
| @@ -279,7 +279,7 @@ static int omap_kp_resume(struct platform_device *dev) | |||
| 279 | #define omap_kp_resume NULL | 279 | #define omap_kp_resume NULL |
| 280 | #endif | 280 | #endif |
| 281 | 281 | ||
| 282 | static int __init omap_kp_probe(struct platform_device *pdev) | 282 | static int __devinit omap_kp_probe(struct platform_device *pdev) |
| 283 | { | 283 | { |
| 284 | struct omap_kp *omap_kp; | 284 | struct omap_kp *omap_kp; |
| 285 | struct input_dev *input_dev; | 285 | struct input_dev *input_dev; |
| @@ -422,7 +422,7 @@ err1: | |||
| 422 | return -EINVAL; | 422 | return -EINVAL; |
| 423 | } | 423 | } |
| 424 | 424 | ||
| 425 | static int omap_kp_remove(struct platform_device *pdev) | 425 | static int __devexit omap_kp_remove(struct platform_device *pdev) |
| 426 | { | 426 | { |
| 427 | struct omap_kp *omap_kp = platform_get_drvdata(pdev); | 427 | struct omap_kp *omap_kp = platform_get_drvdata(pdev); |
| 428 | 428 | ||
| @@ -454,7 +454,7 @@ static int omap_kp_remove(struct platform_device *pdev) | |||
| 454 | 454 | ||
| 455 | static struct platform_driver omap_kp_driver = { | 455 | static struct platform_driver omap_kp_driver = { |
| 456 | .probe = omap_kp_probe, | 456 | .probe = omap_kp_probe, |
| 457 | .remove = omap_kp_remove, | 457 | .remove = __devexit_p(omap_kp_remove), |
| 458 | .suspend = omap_kp_suspend, | 458 | .suspend = omap_kp_suspend, |
| 459 | .resume = omap_kp_resume, | 459 | .resume = omap_kp_resume, |
| 460 | .driver = { | 460 | .driver = { |
| @@ -463,7 +463,7 @@ static struct platform_driver omap_kp_driver = { | |||
| 463 | }, | 463 | }, |
| 464 | }; | 464 | }; |
| 465 | 465 | ||
| 466 | static int __devinit omap_kp_init(void) | 466 | static int __init omap_kp_init(void) |
| 467 | { | 467 | { |
| 468 | printk(KERN_INFO "OMAP Keypad Driver\n"); | 468 | printk(KERN_INFO "OMAP Keypad Driver\n"); |
| 469 | return platform_driver_register(&omap_kp_driver); | 469 | return platform_driver_register(&omap_kp_driver); |
diff --git a/drivers/input/keyboard/spitzkbd.c b/drivers/input/keyboard/spitzkbd.c index 9a7371c93b3f..13967422658c 100644 --- a/drivers/input/keyboard/spitzkbd.c +++ b/drivers/input/keyboard/spitzkbd.c | |||
| @@ -341,7 +341,7 @@ static int spitzkbd_resume(struct platform_device *dev) | |||
| 341 | #define spitzkbd_resume NULL | 341 | #define spitzkbd_resume NULL |
| 342 | #endif | 342 | #endif |
| 343 | 343 | ||
| 344 | static int __init spitzkbd_probe(struct platform_device *dev) | 344 | static int __devinit spitzkbd_probe(struct platform_device *dev) |
| 345 | { | 345 | { |
| 346 | struct spitzkbd *spitzkbd; | 346 | struct spitzkbd *spitzkbd; |
| 347 | struct input_dev *input_dev; | 347 | struct input_dev *input_dev; |
| @@ -442,7 +442,7 @@ static int __init spitzkbd_probe(struct platform_device *dev) | |||
| 442 | return err; | 442 | return err; |
| 443 | } | 443 | } |
| 444 | 444 | ||
| 445 | static int spitzkbd_remove(struct platform_device *dev) | 445 | static int __devexit spitzkbd_remove(struct platform_device *dev) |
| 446 | { | 446 | { |
| 447 | int i; | 447 | int i; |
| 448 | struct spitzkbd *spitzkbd = platform_get_drvdata(dev); | 448 | struct spitzkbd *spitzkbd = platform_get_drvdata(dev); |
| @@ -468,7 +468,7 @@ static int spitzkbd_remove(struct platform_device *dev) | |||
| 468 | 468 | ||
| 469 | static struct platform_driver spitzkbd_driver = { | 469 | static struct platform_driver spitzkbd_driver = { |
| 470 | .probe = spitzkbd_probe, | 470 | .probe = spitzkbd_probe, |
| 471 | .remove = spitzkbd_remove, | 471 | .remove = __devexit_p(spitzkbd_remove), |
| 472 | .suspend = spitzkbd_suspend, | 472 | .suspend = spitzkbd_suspend, |
| 473 | .resume = spitzkbd_resume, | 473 | .resume = spitzkbd_resume, |
| 474 | .driver = { | 474 | .driver = { |
| @@ -477,7 +477,7 @@ static struct platform_driver spitzkbd_driver = { | |||
| 477 | }, | 477 | }, |
| 478 | }; | 478 | }; |
| 479 | 479 | ||
| 480 | static int __devinit spitzkbd_init(void) | 480 | static int __init spitzkbd_init(void) |
| 481 | { | 481 | { |
| 482 | return platform_driver_register(&spitzkbd_driver); | 482 | return platform_driver_register(&spitzkbd_driver); |
| 483 | } | 483 | } |
diff --git a/drivers/input/mouse/Kconfig b/drivers/input/mouse/Kconfig index 093c8c1bca74..9705f3a00a3d 100644 --- a/drivers/input/mouse/Kconfig +++ b/drivers/input/mouse/Kconfig | |||
| @@ -70,7 +70,7 @@ config MOUSE_PS2_SYNAPTICS | |||
| 70 | config MOUSE_PS2_LIFEBOOK | 70 | config MOUSE_PS2_LIFEBOOK |
| 71 | bool "Fujitsu Lifebook PS/2 mouse protocol extension" if EMBEDDED | 71 | bool "Fujitsu Lifebook PS/2 mouse protocol extension" if EMBEDDED |
| 72 | default y | 72 | default y |
| 73 | depends on MOUSE_PS2 | 73 | depends on MOUSE_PS2 && X86 |
| 74 | help | 74 | help |
| 75 | Say Y here if you have a Fujitsu B-series Lifebook PS/2 | 75 | Say Y here if you have a Fujitsu B-series Lifebook PS/2 |
| 76 | TouchScreen connected to your system. | 76 | TouchScreen connected to your system. |
diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c index b9a25d57bc5e..6ab0eb1ada1c 100644 --- a/drivers/input/mouse/elantech.c +++ b/drivers/input/mouse/elantech.c | |||
| @@ -542,7 +542,7 @@ int elantech_detect(struct psmouse *psmouse, int set_properties) | |||
| 542 | ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || | 542 | ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || |
| 543 | ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || | 543 | ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || |
| 544 | ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) { | 544 | ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) { |
| 545 | pr_err("elantech.c: sending Elantech magic knock failed.\n"); | 545 | pr_debug("elantech.c: sending Elantech magic knock failed.\n"); |
| 546 | return -1; | 546 | return -1; |
| 547 | } | 547 | } |
| 548 | 548 | ||
| @@ -551,8 +551,27 @@ int elantech_detect(struct psmouse *psmouse, int set_properties) | |||
| 551 | * set of magic numbers | 551 | * set of magic numbers |
| 552 | */ | 552 | */ |
| 553 | if (param[0] != 0x3c || param[1] != 0x03 || param[2] != 0xc8) { | 553 | if (param[0] != 0x3c || param[1] != 0x03 || param[2] != 0xc8) { |
| 554 | pr_info("elantech.c: unexpected magic knock result 0x%02x, 0x%02x, 0x%02x.\n", | 554 | pr_debug("elantech.c: " |
| 555 | param[0], param[1], param[2]); | 555 | "unexpected magic knock result 0x%02x, 0x%02x, 0x%02x.\n", |
| 556 | param[0], param[1], param[2]); | ||
| 557 | return -1; | ||
| 558 | } | ||
| 559 | |||
| 560 | /* | ||
| 561 | * Query touchpad's firmware version and see if it reports known | ||
| 562 | * value to avoid mis-detection. Logitech mice are known to respond | ||
| 563 | * to Elantech magic knock and there might be more. | ||
| 564 | */ | ||
| 565 | if (synaptics_send_cmd(psmouse, ETP_FW_VERSION_QUERY, param)) { | ||
| 566 | pr_debug("elantech.c: failed to query firmware version.\n"); | ||
| 567 | return -1; | ||
| 568 | } | ||
| 569 | |||
| 570 | pr_debug("elantech.c: Elantech version query result 0x%02x, 0x%02x, 0x%02x.\n", | ||
| 571 | param[0], param[1], param[2]); | ||
| 572 | |||
| 573 | if (param[0] == 0 || param[1] != 0) { | ||
| 574 | pr_debug("elantech.c: Probably not a real Elantech touchpad. Aborting.\n"); | ||
| 556 | return -1; | 575 | return -1; |
| 557 | } | 576 | } |
| 558 | 577 | ||
| @@ -600,8 +619,7 @@ int elantech_init(struct psmouse *psmouse) | |||
| 600 | int i, error; | 619 | int i, error; |
| 601 | unsigned char param[3]; | 620 | unsigned char param[3]; |
| 602 | 621 | ||
| 603 | etd = kzalloc(sizeof(struct elantech_data), GFP_KERNEL); | 622 | psmouse->private = etd = kzalloc(sizeof(struct elantech_data), GFP_KERNEL); |
| 604 | psmouse->private = etd; | ||
| 605 | if (!etd) | 623 | if (!etd) |
| 606 | return -1; | 624 | return -1; |
| 607 | 625 | ||
| @@ -610,14 +628,12 @@ int elantech_init(struct psmouse *psmouse) | |||
| 610 | etd->parity[i] = etd->parity[i & (i - 1)] ^ 1; | 628 | etd->parity[i] = etd->parity[i & (i - 1)] ^ 1; |
| 611 | 629 | ||
| 612 | /* | 630 | /* |
| 613 | * Find out what version hardware this is | 631 | * Do the version query again so we can store the result |
| 614 | */ | 632 | */ |
| 615 | if (synaptics_send_cmd(psmouse, ETP_FW_VERSION_QUERY, param)) { | 633 | if (synaptics_send_cmd(psmouse, ETP_FW_VERSION_QUERY, param)) { |
| 616 | pr_err("elantech.c: failed to query firmware version.\n"); | 634 | pr_err("elantech.c: failed to query firmware version.\n"); |
| 617 | goto init_fail; | 635 | goto init_fail; |
| 618 | } | 636 | } |
| 619 | pr_info("elantech.c: Elantech version query result 0x%02x, 0x%02x, 0x%02x.\n", | ||
| 620 | param[0], param[1], param[2]); | ||
| 621 | etd->fw_version_maj = param[0]; | 637 | etd->fw_version_maj = param[0]; |
| 622 | etd->fw_version_min = param[2]; | 638 | etd->fw_version_min = param[2]; |
| 623 | 639 | ||
diff --git a/drivers/input/mouse/pxa930_trkball.c b/drivers/input/mouse/pxa930_trkball.c index d297accf9a7f..1e827ad0afbe 100644 --- a/drivers/input/mouse/pxa930_trkball.c +++ b/drivers/input/mouse/pxa930_trkball.c | |||
| @@ -83,7 +83,7 @@ static int write_tbcr(struct pxa930_trkball *trkball, int v) | |||
| 83 | 83 | ||
| 84 | __raw_writel(v, trkball->mmio_base + TBCR); | 84 | __raw_writel(v, trkball->mmio_base + TBCR); |
| 85 | 85 | ||
| 86 | while (i--) { | 86 | while (--i) { |
| 87 | if (__raw_readl(trkball->mmio_base + TBCR) == v) | 87 | if (__raw_readl(trkball->mmio_base + TBCR) == v) |
| 88 | break; | 88 | break; |
| 89 | msleep(1); | 89 | msleep(1); |
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index 865fc69e9bc3..f3e4f7b0240d 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c | |||
| @@ -182,11 +182,6 @@ static int synaptics_identify(struct psmouse *psmouse) | |||
| 182 | 182 | ||
| 183 | static int synaptics_query_hardware(struct psmouse *psmouse) | 183 | static int synaptics_query_hardware(struct psmouse *psmouse) |
| 184 | { | 184 | { |
| 185 | int retries = 0; | ||
| 186 | |||
| 187 | while ((retries++ < 3) && psmouse_reset(psmouse)) | ||
| 188 | /* empty */; | ||
| 189 | |||
| 190 | if (synaptics_identify(psmouse)) | 185 | if (synaptics_identify(psmouse)) |
| 191 | return -1; | 186 | return -1; |
| 192 | if (synaptics_model_id(psmouse)) | 187 | if (synaptics_model_id(psmouse)) |
| @@ -582,6 +577,8 @@ static int synaptics_reconnect(struct psmouse *psmouse) | |||
| 582 | struct synaptics_data *priv = psmouse->private; | 577 | struct synaptics_data *priv = psmouse->private; |
| 583 | struct synaptics_data old_priv = *priv; | 578 | struct synaptics_data old_priv = *priv; |
| 584 | 579 | ||
| 580 | psmouse_reset(psmouse); | ||
| 581 | |||
| 585 | if (synaptics_detect(psmouse, 0)) | 582 | if (synaptics_detect(psmouse, 0)) |
| 586 | return -1; | 583 | return -1; |
| 587 | 584 | ||
| @@ -640,6 +637,8 @@ int synaptics_init(struct psmouse *psmouse) | |||
| 640 | if (!priv) | 637 | if (!priv) |
| 641 | return -1; | 638 | return -1; |
| 642 | 639 | ||
| 640 | psmouse_reset(psmouse); | ||
| 641 | |||
| 643 | if (synaptics_query_hardware(psmouse)) { | 642 | if (synaptics_query_hardware(psmouse)) { |
| 644 | printk(KERN_ERR "Unable to query Synaptics hardware.\n"); | 643 | printk(KERN_ERR "Unable to query Synaptics hardware.\n"); |
| 645 | goto init_fail; | 644 | goto init_fail; |
diff --git a/drivers/input/serio/ambakmi.c b/drivers/input/serio/ambakmi.c index b10ffae7c39b..e29cdc13a199 100644 --- a/drivers/input/serio/ambakmi.c +++ b/drivers/input/serio/ambakmi.c | |||
| @@ -57,7 +57,7 @@ static int amba_kmi_write(struct serio *io, unsigned char val) | |||
| 57 | struct amba_kmi_port *kmi = io->port_data; | 57 | struct amba_kmi_port *kmi = io->port_data; |
| 58 | unsigned int timeleft = 10000; /* timeout in 100ms */ | 58 | unsigned int timeleft = 10000; /* timeout in 100ms */ |
| 59 | 59 | ||
| 60 | while ((readb(KMISTAT) & KMISTAT_TXEMPTY) == 0 && timeleft--) | 60 | while ((readb(KMISTAT) & KMISTAT_TXEMPTY) == 0 && --timeleft) |
| 61 | udelay(10); | 61 | udelay(10); |
| 62 | 62 | ||
| 63 | if (timeleft) | 63 | if (timeleft) |
| @@ -129,8 +129,8 @@ static int amba_kmi_probe(struct amba_device *dev, void *id) | |||
| 129 | io->write = amba_kmi_write; | 129 | io->write = amba_kmi_write; |
| 130 | io->open = amba_kmi_open; | 130 | io->open = amba_kmi_open; |
| 131 | io->close = amba_kmi_close; | 131 | io->close = amba_kmi_close; |
| 132 | strlcpy(io->name, dev->dev.bus_id, sizeof(io->name)); | 132 | strlcpy(io->name, dev_name(&dev->dev), sizeof(io->name)); |
| 133 | strlcpy(io->phys, dev->dev.bus_id, sizeof(io->phys)); | 133 | strlcpy(io->phys, dev_name(&dev->dev), sizeof(io->phys)); |
| 134 | io->port_data = kmi; | 134 | io->port_data = kmi; |
| 135 | io->dev.parent = &dev->dev; | 135 | io->dev.parent = &dev->dev; |
| 136 | 136 | ||
diff --git a/drivers/input/serio/gscps2.c b/drivers/input/serio/gscps2.c index adc3bd6e7f7b..bd0f92d9f40f 100644 --- a/drivers/input/serio/gscps2.c +++ b/drivers/input/serio/gscps2.c | |||
| @@ -359,7 +359,7 @@ static int __init gscps2_probe(struct parisc_device *dev) | |||
| 359 | 359 | ||
| 360 | snprintf(serio->name, sizeof(serio->name), "GSC PS/2 %s", | 360 | snprintf(serio->name, sizeof(serio->name), "GSC PS/2 %s", |
| 361 | (ps2port->id == GSC_ID_KEYBOARD) ? "keyboard" : "mouse"); | 361 | (ps2port->id == GSC_ID_KEYBOARD) ? "keyboard" : "mouse"); |
| 362 | strlcpy(serio->phys, dev->dev.bus_id, sizeof(serio->phys)); | 362 | strlcpy(serio->phys, dev_name(&dev->dev), sizeof(serio->phys)); |
| 363 | serio->id.type = SERIO_8042; | 363 | serio->id.type = SERIO_8042; |
| 364 | serio->write = gscps2_write; | 364 | serio->write = gscps2_write; |
| 365 | serio->open = gscps2_open; | 365 | serio->open = gscps2_open; |
diff --git a/drivers/input/serio/sa1111ps2.c b/drivers/input/serio/sa1111ps2.c index 2ad88780a170..57953c0eb82f 100644 --- a/drivers/input/serio/sa1111ps2.c +++ b/drivers/input/serio/sa1111ps2.c | |||
| @@ -246,8 +246,8 @@ static int __devinit ps2_probe(struct sa1111_dev *dev) | |||
| 246 | serio->write = ps2_write; | 246 | serio->write = ps2_write; |
| 247 | serio->open = ps2_open; | 247 | serio->open = ps2_open; |
| 248 | serio->close = ps2_close; | 248 | serio->close = ps2_close; |
| 249 | strlcpy(serio->name, dev->dev.bus_id, sizeof(serio->name)); | 249 | strlcpy(serio->name, dev_name(&dev->dev), sizeof(serio->name)); |
| 250 | strlcpy(serio->phys, dev->dev.bus_id, sizeof(serio->phys)); | 250 | strlcpy(serio->phys, dev_name(&dev->dev), sizeof(serio->phys)); |
| 251 | serio->port_data = ps2if; | 251 | serio->port_data = ps2if; |
| 252 | serio->dev.parent = &dev->dev; | 252 | serio->dev.parent = &dev->dev; |
| 253 | ps2if->io = serio; | 253 | ps2if->io = serio; |
diff --git a/drivers/input/touchscreen/atmel_tsadcc.c b/drivers/input/touchscreen/atmel_tsadcc.c index a89a6a8f05e6..055969e8be13 100644 --- a/drivers/input/touchscreen/atmel_tsadcc.c +++ b/drivers/input/touchscreen/atmel_tsadcc.c | |||
| @@ -236,7 +236,7 @@ static int __devinit atmel_tsadcc_probe(struct platform_device *pdev) | |||
| 236 | ts_dev->bufferedmeasure = 0; | 236 | ts_dev->bufferedmeasure = 0; |
| 237 | 237 | ||
| 238 | snprintf(ts_dev->phys, sizeof(ts_dev->phys), | 238 | snprintf(ts_dev->phys, sizeof(ts_dev->phys), |
| 239 | "%s/input0", pdev->dev.bus_id); | 239 | "%s/input0", dev_name(&pdev->dev)); |
| 240 | 240 | ||
| 241 | input_dev->name = "atmel touch screen controller"; | 241 | input_dev->name = "atmel touch screen controller"; |
| 242 | input_dev->phys = ts_dev->phys; | 242 | input_dev->phys = ts_dev->phys; |
diff --git a/drivers/input/touchscreen/corgi_ts.c b/drivers/input/touchscreen/corgi_ts.c index e7292853d2bf..94a1919d439d 100644 --- a/drivers/input/touchscreen/corgi_ts.c +++ b/drivers/input/touchscreen/corgi_ts.c | |||
| @@ -267,7 +267,7 @@ static int corgits_resume(struct platform_device *dev) | |||
| 267 | #define corgits_resume NULL | 267 | #define corgits_resume NULL |
| 268 | #endif | 268 | #endif |
| 269 | 269 | ||
| 270 | static int __init corgits_probe(struct platform_device *pdev) | 270 | static int __devinit corgits_probe(struct platform_device *pdev) |
| 271 | { | 271 | { |
| 272 | struct corgi_ts *corgi_ts; | 272 | struct corgi_ts *corgi_ts; |
| 273 | struct input_dev *input_dev; | 273 | struct input_dev *input_dev; |
| @@ -342,7 +342,7 @@ static int __init corgits_probe(struct platform_device *pdev) | |||
| 342 | return err; | 342 | return err; |
| 343 | } | 343 | } |
| 344 | 344 | ||
| 345 | static int corgits_remove(struct platform_device *pdev) | 345 | static int __devexit corgits_remove(struct platform_device *pdev) |
| 346 | { | 346 | { |
| 347 | struct corgi_ts *corgi_ts = platform_get_drvdata(pdev); | 347 | struct corgi_ts *corgi_ts = platform_get_drvdata(pdev); |
| 348 | 348 | ||
| @@ -351,12 +351,13 @@ static int corgits_remove(struct platform_device *pdev) | |||
| 351 | corgi_ts->machinfo->put_hsync(); | 351 | corgi_ts->machinfo->put_hsync(); |
| 352 | input_unregister_device(corgi_ts->input); | 352 | input_unregister_device(corgi_ts->input); |
| 353 | kfree(corgi_ts); | 353 | kfree(corgi_ts); |
| 354 | |||
| 354 | return 0; | 355 | return 0; |
| 355 | } | 356 | } |
| 356 | 357 | ||
| 357 | static struct platform_driver corgits_driver = { | 358 | static struct platform_driver corgits_driver = { |
| 358 | .probe = corgits_probe, | 359 | .probe = corgits_probe, |
| 359 | .remove = corgits_remove, | 360 | .remove = __devexit_p(corgits_remove), |
| 360 | .suspend = corgits_suspend, | 361 | .suspend = corgits_suspend, |
| 361 | .resume = corgits_resume, | 362 | .resume = corgits_resume, |
| 362 | .driver = { | 363 | .driver = { |
| @@ -365,7 +366,7 @@ static struct platform_driver corgits_driver = { | |||
| 365 | }, | 366 | }, |
| 366 | }; | 367 | }; |
| 367 | 368 | ||
| 368 | static int __devinit corgits_init(void) | 369 | static int __init corgits_init(void) |
| 369 | { | 370 | { |
| 370 | return platform_driver_register(&corgits_driver); | 371 | return platform_driver_register(&corgits_driver); |
| 371 | } | 372 | } |
diff --git a/drivers/input/touchscreen/tsc2007.c b/drivers/input/touchscreen/tsc2007.c index b75dc2990574..4ab070246892 100644 --- a/drivers/input/touchscreen/tsc2007.c +++ b/drivers/input/touchscreen/tsc2007.c | |||
| @@ -289,7 +289,8 @@ static int tsc2007_probe(struct i2c_client *client, | |||
| 289 | 289 | ||
| 290 | pdata->init_platform_hw(); | 290 | pdata->init_platform_hw(); |
| 291 | 291 | ||
| 292 | snprintf(ts->phys, sizeof(ts->phys), "%s/input0", client->dev.bus_id); | 292 | snprintf(ts->phys, sizeof(ts->phys), |
| 293 | "%s/input0", dev_name(&client->dev)); | ||
| 293 | 294 | ||
| 294 | input_dev->name = "TSC2007 Touchscreen"; | 295 | input_dev->name = "TSC2007 Touchscreen"; |
| 295 | input_dev->phys = ts->phys; | 296 | input_dev->phys = ts->phys; |
diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c index 5080b26ba160..fb7cb9bdfbd5 100644 --- a/drivers/input/touchscreen/usbtouchscreen.c +++ b/drivers/input/touchscreen/usbtouchscreen.c | |||
| @@ -60,6 +60,10 @@ static int swap_xy; | |||
| 60 | module_param(swap_xy, bool, 0644); | 60 | module_param(swap_xy, bool, 0644); |
| 61 | MODULE_PARM_DESC(swap_xy, "If set X and Y axes are swapped."); | 61 | MODULE_PARM_DESC(swap_xy, "If set X and Y axes are swapped."); |
| 62 | 62 | ||
| 63 | static int hwcalib_xy; | ||
| 64 | module_param(hwcalib_xy, bool, 0644); | ||
| 65 | MODULE_PARM_DESC(hwcalib_xy, "If set hw-calibrated X/Y are used if available"); | ||
| 66 | |||
| 63 | /* device specifc data/functions */ | 67 | /* device specifc data/functions */ |
| 64 | struct usbtouch_usb; | 68 | struct usbtouch_usb; |
| 65 | struct usbtouch_device_info { | 69 | struct usbtouch_device_info { |
| @@ -118,6 +122,7 @@ enum { | |||
| 118 | 122 | ||
| 119 | #define USB_DEVICE_HID_CLASS(vend, prod) \ | 123 | #define USB_DEVICE_HID_CLASS(vend, prod) \ |
| 120 | .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS \ | 124 | .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS \ |
| 125 | | USB_DEVICE_ID_MATCH_INT_PROTOCOL \ | ||
| 121 | | USB_DEVICE_ID_MATCH_DEVICE, \ | 126 | | USB_DEVICE_ID_MATCH_DEVICE, \ |
| 122 | .idVendor = (vend), \ | 127 | .idVendor = (vend), \ |
| 123 | .idProduct = (prod), \ | 128 | .idProduct = (prod), \ |
| @@ -260,8 +265,13 @@ static int panjit_read_data(struct usbtouch_usb *dev, unsigned char *pkt) | |||
| 260 | 265 | ||
| 261 | static int mtouch_read_data(struct usbtouch_usb *dev, unsigned char *pkt) | 266 | static int mtouch_read_data(struct usbtouch_usb *dev, unsigned char *pkt) |
| 262 | { | 267 | { |
| 263 | dev->x = (pkt[8] << 8) | pkt[7]; | 268 | if (hwcalib_xy) { |
| 264 | dev->y = (pkt[10] << 8) | pkt[9]; | 269 | dev->x = (pkt[4] << 8) | pkt[3]; |
| 270 | dev->y = 0xffff - ((pkt[6] << 8) | pkt[5]); | ||
| 271 | } else { | ||
| 272 | dev->x = (pkt[8] << 8) | pkt[7]; | ||
| 273 | dev->y = (pkt[10] << 8) | pkt[9]; | ||
| 274 | } | ||
| 265 | dev->touch = (pkt[2] & 0x40) ? 1 : 0; | 275 | dev->touch = (pkt[2] & 0x40) ? 1 : 0; |
| 266 | 276 | ||
| 267 | return 1; | 277 | return 1; |
| @@ -294,6 +304,12 @@ static int mtouch_init(struct usbtouch_usb *usbtouch) | |||
| 294 | return ret; | 304 | return ret; |
| 295 | } | 305 | } |
| 296 | 306 | ||
| 307 | /* Default min/max xy are the raw values, override if using hw-calib */ | ||
| 308 | if (hwcalib_xy) { | ||
| 309 | input_set_abs_params(usbtouch->input, ABS_X, 0, 0xffff, 0, 0); | ||
| 310 | input_set_abs_params(usbtouch->input, ABS_Y, 0, 0xffff, 0, 0); | ||
| 311 | } | ||
| 312 | |||
| 297 | return 0; | 313 | return 0; |
| 298 | } | 314 | } |
| 299 | #endif | 315 | #endif |
diff --git a/drivers/isdn/hardware/mISDN/hfcmulti.c b/drivers/isdn/hardware/mISDN/hfcmulti.c index 595ba8eb4a07..0b28141e43bf 100644 --- a/drivers/isdn/hardware/mISDN/hfcmulti.c +++ b/drivers/isdn/hardware/mISDN/hfcmulti.c | |||
| @@ -4599,6 +4599,7 @@ init_e1_port(struct hfc_multi *hc, struct hm_map *m) | |||
| 4599 | printk(KERN_ERR "%s: no memory for coeffs\n", | 4599 | printk(KERN_ERR "%s: no memory for coeffs\n", |
| 4600 | __func__); | 4600 | __func__); |
| 4601 | ret = -ENOMEM; | 4601 | ret = -ENOMEM; |
| 4602 | kfree(bch); | ||
| 4602 | goto free_chan; | 4603 | goto free_chan; |
| 4603 | } | 4604 | } |
| 4604 | bch->nr = ch; | 4605 | bch->nr = ch; |
| @@ -4767,6 +4768,7 @@ init_multi_port(struct hfc_multi *hc, int pt) | |||
| 4767 | printk(KERN_ERR "%s: no memory for coeffs\n", | 4768 | printk(KERN_ERR "%s: no memory for coeffs\n", |
| 4768 | __func__); | 4769 | __func__); |
| 4769 | ret = -ENOMEM; | 4770 | ret = -ENOMEM; |
| 4771 | kfree(bch); | ||
| 4770 | goto free_chan; | 4772 | goto free_chan; |
| 4771 | } | 4773 | } |
| 4772 | bch->nr = ch + 1; | 4774 | bch->nr = ch + 1; |
diff --git a/drivers/isdn/sc/shmem.c b/drivers/isdn/sc/shmem.c index 712220cef139..7f16d75d2d89 100644 --- a/drivers/isdn/sc/shmem.c +++ b/drivers/isdn/sc/shmem.c | |||
| @@ -54,7 +54,7 @@ void memcpy_toshmem(int card, void *dest, const void *src, size_t n) | |||
| 54 | spin_unlock_irqrestore(&sc_adapter[card]->lock, flags); | 54 | spin_unlock_irqrestore(&sc_adapter[card]->lock, flags); |
| 55 | pr_debug("%s: set page to %#x\n",sc_adapter[card]->devicename, | 55 | pr_debug("%s: set page to %#x\n",sc_adapter[card]->devicename, |
| 56 | ((sc_adapter[card]->shmem_magic + ch * SRAM_PAGESIZE)>>14)|0x80); | 56 | ((sc_adapter[card]->shmem_magic + ch * SRAM_PAGESIZE)>>14)|0x80); |
| 57 | pr_debug("%s: copying %d bytes from %#lx to %#lx\n", | 57 | pr_debug("%s: copying %zu bytes from %#lx to %#lx\n", |
| 58 | sc_adapter[card]->devicename, n, | 58 | sc_adapter[card]->devicename, n, |
| 59 | (unsigned long) src, | 59 | (unsigned long) src, |
| 60 | sc_adapter[card]->rambase + ((unsigned long) dest %0x4000)); | 60 | sc_adapter[card]->rambase + ((unsigned long) dest %0x4000)); |
diff --git a/drivers/lguest/lguest_device.c b/drivers/lguest/lguest_device.c index b4d44e571d76..8132533d71f9 100644 --- a/drivers/lguest/lguest_device.c +++ b/drivers/lguest/lguest_device.c | |||
| @@ -212,6 +212,9 @@ static void lg_notify(struct virtqueue *vq) | |||
| 212 | hcall(LHCALL_NOTIFY, lvq->config.pfn << PAGE_SHIFT, 0, 0); | 212 | hcall(LHCALL_NOTIFY, lvq->config.pfn << PAGE_SHIFT, 0, 0); |
| 213 | } | 213 | } |
| 214 | 214 | ||
| 215 | /* An extern declaration inside a C file is bad form. Don't do it. */ | ||
| 216 | extern void lguest_setup_irq(unsigned int irq); | ||
| 217 | |||
| 215 | /* This routine finds the first virtqueue described in the configuration of | 218 | /* This routine finds the first virtqueue described in the configuration of |
| 216 | * this device and sets it up. | 219 | * this device and sets it up. |
| 217 | * | 220 | * |
| @@ -266,6 +269,9 @@ static struct virtqueue *lg_find_vq(struct virtio_device *vdev, | |||
| 266 | goto unmap; | 269 | goto unmap; |
| 267 | } | 270 | } |
| 268 | 271 | ||
| 272 | /* Make sure the interrupt is allocated. */ | ||
| 273 | lguest_setup_irq(lvq->config.irq); | ||
| 274 | |||
| 269 | /* Tell the interrupt for this virtqueue to go to the virtio_ring | 275 | /* Tell the interrupt for this virtqueue to go to the virtio_ring |
| 270 | * interrupt handler. */ | 276 | * interrupt handler. */ |
| 271 | /* FIXME: We used to have a flag for the Host to tell us we could use | 277 | /* FIXME: We used to have a flag for the Host to tell us we could use |
diff --git a/drivers/md/dm-io.c b/drivers/md/dm-io.c index a34338567a2a..f14813be4eff 100644 --- a/drivers/md/dm-io.c +++ b/drivers/md/dm-io.c | |||
| @@ -328,7 +328,7 @@ static void dispatch_io(int rw, unsigned int num_regions, | |||
| 328 | struct dpages old_pages = *dp; | 328 | struct dpages old_pages = *dp; |
| 329 | 329 | ||
| 330 | if (sync) | 330 | if (sync) |
| 331 | rw |= (1 << BIO_RW_SYNC); | 331 | rw |= (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG); |
| 332 | 332 | ||
| 333 | /* | 333 | /* |
| 334 | * For multiple regions we need to be careful to rewind | 334 | * For multiple regions we need to be careful to rewind |
diff --git a/drivers/md/dm-kcopyd.c b/drivers/md/dm-kcopyd.c index 3073618269ea..0a225da21272 100644 --- a/drivers/md/dm-kcopyd.c +++ b/drivers/md/dm-kcopyd.c | |||
| @@ -344,7 +344,7 @@ static int run_io_job(struct kcopyd_job *job) | |||
| 344 | { | 344 | { |
| 345 | int r; | 345 | int r; |
| 346 | struct dm_io_request io_req = { | 346 | struct dm_io_request io_req = { |
| 347 | .bi_rw = job->rw | (1 << BIO_RW_SYNC), | 347 | .bi_rw = job->rw | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG), |
| 348 | .mem.type = DM_IO_PAGE_LIST, | 348 | .mem.type = DM_IO_PAGE_LIST, |
| 349 | .mem.ptr.pl = job->pages, | 349 | .mem.ptr.pl = job->pages, |
| 350 | .mem.offset = job->offset, | 350 | .mem.offset = job->offset, |
diff --git a/drivers/md/md.c b/drivers/md/md.c index 4495104f6c9f..a307f87eb90e 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
| @@ -214,12 +214,7 @@ static inline mddev_t *mddev_get(mddev_t *mddev) | |||
| 214 | return mddev; | 214 | return mddev; |
| 215 | } | 215 | } |
| 216 | 216 | ||
| 217 | static void mddev_delayed_delete(struct work_struct *ws) | 217 | static void mddev_delayed_delete(struct work_struct *ws); |
| 218 | { | ||
| 219 | mddev_t *mddev = container_of(ws, mddev_t, del_work); | ||
| 220 | kobject_del(&mddev->kobj); | ||
| 221 | kobject_put(&mddev->kobj); | ||
| 222 | } | ||
| 223 | 218 | ||
| 224 | static void mddev_put(mddev_t *mddev) | 219 | static void mddev_put(mddev_t *mddev) |
| 225 | { | 220 | { |
| @@ -474,7 +469,7 @@ void md_super_write(mddev_t *mddev, mdk_rdev_t *rdev, | |||
| 474 | * causes ENOTSUPP, we allocate a spare bio... | 469 | * causes ENOTSUPP, we allocate a spare bio... |
| 475 | */ | 470 | */ |
| 476 | struct bio *bio = bio_alloc(GFP_NOIO, 1); | 471 | struct bio *bio = bio_alloc(GFP_NOIO, 1); |
| 477 | int rw = (1<<BIO_RW) | (1<<BIO_RW_SYNC); | 472 | int rw = (1<<BIO_RW) | (1<<BIO_RW_SYNCIO) | (1<<BIO_RW_UNPLUG); |
| 478 | 473 | ||
| 479 | bio->bi_bdev = rdev->bdev; | 474 | bio->bi_bdev = rdev->bdev; |
| 480 | bio->bi_sector = sector; | 475 | bio->bi_sector = sector; |
| @@ -531,7 +526,7 @@ int sync_page_io(struct block_device *bdev, sector_t sector, int size, | |||
| 531 | struct completion event; | 526 | struct completion event; |
| 532 | int ret; | 527 | int ret; |
| 533 | 528 | ||
| 534 | rw |= (1 << BIO_RW_SYNC); | 529 | rw |= (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG); |
| 535 | 530 | ||
| 536 | bio->bi_bdev = bdev; | 531 | bio->bi_bdev = bdev; |
| 537 | bio->bi_sector = sector; | 532 | bio->bi_sector = sector; |
| @@ -3542,6 +3537,21 @@ static struct kobj_type md_ktype = { | |||
| 3542 | 3537 | ||
| 3543 | int mdp_major = 0; | 3538 | int mdp_major = 0; |
| 3544 | 3539 | ||
| 3540 | static void mddev_delayed_delete(struct work_struct *ws) | ||
| 3541 | { | ||
| 3542 | mddev_t *mddev = container_of(ws, mddev_t, del_work); | ||
| 3543 | |||
| 3544 | if (mddev->private == &md_redundancy_group) { | ||
| 3545 | sysfs_remove_group(&mddev->kobj, &md_redundancy_group); | ||
| 3546 | if (mddev->sysfs_action) | ||
| 3547 | sysfs_put(mddev->sysfs_action); | ||
| 3548 | mddev->sysfs_action = NULL; | ||
| 3549 | mddev->private = NULL; | ||
| 3550 | } | ||
| 3551 | kobject_del(&mddev->kobj); | ||
| 3552 | kobject_put(&mddev->kobj); | ||
| 3553 | } | ||
| 3554 | |||
| 3545 | static int md_alloc(dev_t dev, char *name) | 3555 | static int md_alloc(dev_t dev, char *name) |
| 3546 | { | 3556 | { |
| 3547 | static DEFINE_MUTEX(disks_mutex); | 3557 | static DEFINE_MUTEX(disks_mutex); |
| @@ -4033,13 +4043,9 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open) | |||
| 4033 | mddev->queue->merge_bvec_fn = NULL; | 4043 | mddev->queue->merge_bvec_fn = NULL; |
| 4034 | mddev->queue->unplug_fn = NULL; | 4044 | mddev->queue->unplug_fn = NULL; |
| 4035 | mddev->queue->backing_dev_info.congested_fn = NULL; | 4045 | mddev->queue->backing_dev_info.congested_fn = NULL; |
| 4036 | if (mddev->pers->sync_request) { | ||
| 4037 | sysfs_remove_group(&mddev->kobj, &md_redundancy_group); | ||
| 4038 | if (mddev->sysfs_action) | ||
| 4039 | sysfs_put(mddev->sysfs_action); | ||
| 4040 | mddev->sysfs_action = NULL; | ||
| 4041 | } | ||
| 4042 | module_put(mddev->pers->owner); | 4046 | module_put(mddev->pers->owner); |
| 4047 | if (mddev->pers->sync_request) | ||
| 4048 | mddev->private = &md_redundancy_group; | ||
| 4043 | mddev->pers = NULL; | 4049 | mddev->pers = NULL; |
| 4044 | /* tell userspace to handle 'inactive' */ | 4050 | /* tell userspace to handle 'inactive' */ |
| 4045 | sysfs_notify_dirent(mddev->sysfs_state); | 4051 | sysfs_notify_dirent(mddev->sysfs_state); |
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 01e3cffd03b8..e2466425d9ca 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
| @@ -1237,8 +1237,9 @@ static void end_sync_write(struct bio *bio, int error) | |||
| 1237 | update_head_pos(mirror, r1_bio); | 1237 | update_head_pos(mirror, r1_bio); |
| 1238 | 1238 | ||
| 1239 | if (atomic_dec_and_test(&r1_bio->remaining)) { | 1239 | if (atomic_dec_and_test(&r1_bio->remaining)) { |
| 1240 | md_done_sync(mddev, r1_bio->sectors, uptodate); | 1240 | sector_t s = r1_bio->sectors; |
| 1241 | put_buf(r1_bio); | 1241 | put_buf(r1_bio); |
| 1242 | md_done_sync(mddev, s, uptodate); | ||
| 1242 | } | 1243 | } |
| 1243 | } | 1244 | } |
| 1244 | 1245 | ||
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 6736d6dff981..7301631abe04 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c | |||
| @@ -1236,6 +1236,7 @@ static void end_sync_read(struct bio *bio, int error) | |||
| 1236 | /* for reconstruct, we always reschedule after a read. | 1236 | /* for reconstruct, we always reschedule after a read. |
| 1237 | * for resync, only after all reads | 1237 | * for resync, only after all reads |
| 1238 | */ | 1238 | */ |
| 1239 | rdev_dec_pending(conf->mirrors[d].rdev, conf->mddev); | ||
| 1239 | if (test_bit(R10BIO_IsRecover, &r10_bio->state) || | 1240 | if (test_bit(R10BIO_IsRecover, &r10_bio->state) || |
| 1240 | atomic_dec_and_test(&r10_bio->remaining)) { | 1241 | atomic_dec_and_test(&r10_bio->remaining)) { |
| 1241 | /* we have read all the blocks, | 1242 | /* we have read all the blocks, |
| @@ -1243,7 +1244,6 @@ static void end_sync_read(struct bio *bio, int error) | |||
| 1243 | */ | 1244 | */ |
| 1244 | reschedule_retry(r10_bio); | 1245 | reschedule_retry(r10_bio); |
| 1245 | } | 1246 | } |
| 1246 | rdev_dec_pending(conf->mirrors[d].rdev, conf->mddev); | ||
| 1247 | } | 1247 | } |
| 1248 | 1248 | ||
| 1249 | static void end_sync_write(struct bio *bio, int error) | 1249 | static void end_sync_write(struct bio *bio, int error) |
| @@ -1264,11 +1264,13 @@ static void end_sync_write(struct bio *bio, int error) | |||
| 1264 | 1264 | ||
| 1265 | update_head_pos(i, r10_bio); | 1265 | update_head_pos(i, r10_bio); |
| 1266 | 1266 | ||
| 1267 | rdev_dec_pending(conf->mirrors[d].rdev, mddev); | ||
| 1267 | while (atomic_dec_and_test(&r10_bio->remaining)) { | 1268 | while (atomic_dec_and_test(&r10_bio->remaining)) { |
| 1268 | if (r10_bio->master_bio == NULL) { | 1269 | if (r10_bio->master_bio == NULL) { |
| 1269 | /* the primary of several recovery bios */ | 1270 | /* the primary of several recovery bios */ |
| 1270 | md_done_sync(mddev, r10_bio->sectors, 1); | 1271 | sector_t s = r10_bio->sectors; |
| 1271 | put_buf(r10_bio); | 1272 | put_buf(r10_bio); |
| 1273 | md_done_sync(mddev, s, 1); | ||
| 1272 | break; | 1274 | break; |
| 1273 | } else { | 1275 | } else { |
| 1274 | r10bio_t *r10_bio2 = (r10bio_t *)r10_bio->master_bio; | 1276 | r10bio_t *r10_bio2 = (r10bio_t *)r10_bio->master_bio; |
| @@ -1276,7 +1278,6 @@ static void end_sync_write(struct bio *bio, int error) | |||
| 1276 | r10_bio = r10_bio2; | 1278 | r10_bio = r10_bio2; |
| 1277 | } | 1279 | } |
| 1278 | } | 1280 | } |
| 1279 | rdev_dec_pending(conf->mirrors[d].rdev, mddev); | ||
| 1280 | } | 1281 | } |
| 1281 | 1282 | ||
| 1282 | /* | 1283 | /* |
| @@ -1749,8 +1750,6 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, i | |||
| 1749 | if (!go_faster && conf->nr_waiting) | 1750 | if (!go_faster && conf->nr_waiting) |
| 1750 | msleep_interruptible(1000); | 1751 | msleep_interruptible(1000); |
| 1751 | 1752 | ||
| 1752 | bitmap_cond_end_sync(mddev->bitmap, sector_nr); | ||
| 1753 | |||
| 1754 | /* Again, very different code for resync and recovery. | 1753 | /* Again, very different code for resync and recovery. |
| 1755 | * Both must result in an r10bio with a list of bios that | 1754 | * Both must result in an r10bio with a list of bios that |
| 1756 | * have bi_end_io, bi_sector, bi_bdev set, | 1755 | * have bi_end_io, bi_sector, bi_bdev set, |
| @@ -1886,6 +1885,8 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, i | |||
| 1886 | /* resync. Schedule a read for every block at this virt offset */ | 1885 | /* resync. Schedule a read for every block at this virt offset */ |
| 1887 | int count = 0; | 1886 | int count = 0; |
| 1888 | 1887 | ||
| 1888 | bitmap_cond_end_sync(mddev->bitmap, sector_nr); | ||
| 1889 | |||
| 1889 | if (!bitmap_start_sync(mddev->bitmap, sector_nr, | 1890 | if (!bitmap_start_sync(mddev->bitmap, sector_nr, |
| 1890 | &sync_blocks, mddev->degraded) && | 1891 | &sync_blocks, mddev->degraded) && |
| 1891 | !conf->fullsync && !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) { | 1892 | !conf->fullsync && !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) { |
| @@ -2010,13 +2011,13 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, i | |||
| 2010 | /* There is nowhere to write, so all non-sync | 2011 | /* There is nowhere to write, so all non-sync |
| 2011 | * drives must be failed, so try the next chunk... | 2012 | * drives must be failed, so try the next chunk... |
| 2012 | */ | 2013 | */ |
| 2013 | { | 2014 | if (sector_nr + max_sync < max_sector) |
| 2014 | sector_t sec = max_sector - sector_nr; | 2015 | max_sector = sector_nr + max_sync; |
| 2015 | sectors_skipped += sec; | 2016 | |
| 2017 | sectors_skipped += (max_sector - sector_nr); | ||
| 2016 | chunks_skipped ++; | 2018 | chunks_skipped ++; |
| 2017 | sector_nr = max_sector; | 2019 | sector_nr = max_sector; |
| 2018 | goto skipped; | 2020 | goto skipped; |
| 2019 | } | ||
| 2020 | } | 2021 | } |
| 2021 | 2022 | ||
| 2022 | static int run(mddev_t *mddev) | 2023 | static int run(mddev_t *mddev) |
diff --git a/drivers/media/common/tuners/tuner-simple.c b/drivers/media/common/tuners/tuner-simple.c index de7adaf5fa5b..78412c9c424a 100644 --- a/drivers/media/common/tuners/tuner-simple.c +++ b/drivers/media/common/tuners/tuner-simple.c | |||
| @@ -318,7 +318,6 @@ static int simple_std_setup(struct dvb_frontend *fe, | |||
| 318 | u8 *config, u8 *cb) | 318 | u8 *config, u8 *cb) |
| 319 | { | 319 | { |
| 320 | struct tuner_simple_priv *priv = fe->tuner_priv; | 320 | struct tuner_simple_priv *priv = fe->tuner_priv; |
| 321 | u8 tuneraddr; | ||
| 322 | int rc; | 321 | int rc; |
| 323 | 322 | ||
| 324 | /* tv norm specific stuff for multi-norm tuners */ | 323 | /* tv norm specific stuff for multi-norm tuners */ |
| @@ -387,6 +386,7 @@ static int simple_std_setup(struct dvb_frontend *fe, | |||
| 387 | 386 | ||
| 388 | case TUNER_PHILIPS_TUV1236D: | 387 | case TUNER_PHILIPS_TUV1236D: |
| 389 | { | 388 | { |
| 389 | struct tuner_i2c_props i2c = priv->i2c_props; | ||
| 390 | /* 0x40 -> ATSC antenna input 1 */ | 390 | /* 0x40 -> ATSC antenna input 1 */ |
| 391 | /* 0x48 -> ATSC antenna input 2 */ | 391 | /* 0x48 -> ATSC antenna input 2 */ |
| 392 | /* 0x00 -> NTSC antenna input 1 */ | 392 | /* 0x00 -> NTSC antenna input 1 */ |
| @@ -398,17 +398,15 @@ static int simple_std_setup(struct dvb_frontend *fe, | |||
| 398 | buffer[1] = 0x04; | 398 | buffer[1] = 0x04; |
| 399 | } | 399 | } |
| 400 | /* set to the correct mode (analog or digital) */ | 400 | /* set to the correct mode (analog or digital) */ |
| 401 | tuneraddr = priv->i2c_props.addr; | 401 | i2c.addr = 0x0a; |
| 402 | priv->i2c_props.addr = 0x0a; | 402 | rc = tuner_i2c_xfer_send(&i2c, &buffer[0], 2); |
| 403 | rc = tuner_i2c_xfer_send(&priv->i2c_props, &buffer[0], 2); | ||
| 404 | if (2 != rc) | 403 | if (2 != rc) |
| 405 | tuner_warn("i2c i/o error: rc == %d " | 404 | tuner_warn("i2c i/o error: rc == %d " |
| 406 | "(should be 2)\n", rc); | 405 | "(should be 2)\n", rc); |
| 407 | rc = tuner_i2c_xfer_send(&priv->i2c_props, &buffer[2], 2); | 406 | rc = tuner_i2c_xfer_send(&i2c, &buffer[2], 2); |
| 408 | if (2 != rc) | 407 | if (2 != rc) |
| 409 | tuner_warn("i2c i/o error: rc == %d " | 408 | tuner_warn("i2c i/o error: rc == %d " |
| 410 | "(should be 2)\n", rc); | 409 | "(should be 2)\n", rc); |
| 411 | priv->i2c_props.addr = tuneraddr; | ||
| 412 | break; | 410 | break; |
| 413 | } | 411 | } |
| 414 | } | 412 | } |
diff --git a/drivers/media/dvb/Kconfig b/drivers/media/dvb/Kconfig index 40ebde53b3ce..b0198691892a 100644 --- a/drivers/media/dvb/Kconfig +++ b/drivers/media/dvb/Kconfig | |||
| @@ -51,6 +51,10 @@ comment "Supported SDMC DM1105 Adapters" | |||
| 51 | depends on DVB_CORE && PCI && I2C | 51 | depends on DVB_CORE && PCI && I2C |
| 52 | source "drivers/media/dvb/dm1105/Kconfig" | 52 | source "drivers/media/dvb/dm1105/Kconfig" |
| 53 | 53 | ||
| 54 | comment "Supported FireWire (IEEE 1394) Adapters" | ||
| 55 | depends on DVB_CORE && IEEE1394 | ||
| 56 | source "drivers/media/dvb/firewire/Kconfig" | ||
| 57 | |||
| 54 | comment "Supported DVB Frontends" | 58 | comment "Supported DVB Frontends" |
| 55 | depends on DVB_CORE | 59 | depends on DVB_CORE |
| 56 | source "drivers/media/dvb/frontends/Kconfig" | 60 | source "drivers/media/dvb/frontends/Kconfig" |
diff --git a/drivers/media/dvb/Makefile b/drivers/media/dvb/Makefile index f91e9eb15e52..6092a5bb5a7d 100644 --- a/drivers/media/dvb/Makefile +++ b/drivers/media/dvb/Makefile | |||
| @@ -3,3 +3,5 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-y := dvb-core/ frontends/ ttpci/ ttusb-dec/ ttusb-budget/ b2c2/ bt8xx/ dvb-usb/ pluto2/ siano/ dm1105/ | 5 | obj-y := dvb-core/ frontends/ ttpci/ ttusb-dec/ ttusb-budget/ b2c2/ bt8xx/ dvb-usb/ pluto2/ siano/ dm1105/ |
| 6 | |||
| 7 | obj-$(CONFIG_DVB_FIREDTV) += firewire/ | ||
diff --git a/drivers/media/dvb/b2c2/flexcop-hw-filter.c b/drivers/media/dvb/b2c2/flexcop-hw-filter.c index b386cc66c6b3..451974ba32f3 100644 --- a/drivers/media/dvb/b2c2/flexcop-hw-filter.c +++ b/drivers/media/dvb/b2c2/flexcop-hw-filter.c | |||
| @@ -192,6 +192,7 @@ int flexcop_pid_feed_control(struct flexcop_device *fc, struct dvb_demux_feed *d | |||
| 192 | 192 | ||
| 193 | return 0; | 193 | return 0; |
| 194 | } | 194 | } |
| 195 | EXPORT_SYMBOL(flexcop_pid_feed_control); | ||
| 195 | 196 | ||
| 196 | void flexcop_hw_filter_init(struct flexcop_device *fc) | 197 | void flexcop_hw_filter_init(struct flexcop_device *fc) |
| 197 | { | 198 | { |
diff --git a/drivers/media/dvb/b2c2/flexcop-pci.c b/drivers/media/dvb/b2c2/flexcop-pci.c index 5b30dfc7846b..76e37fd96bb6 100644 --- a/drivers/media/dvb/b2c2/flexcop-pci.c +++ b/drivers/media/dvb/b2c2/flexcop-pci.c | |||
| @@ -13,9 +13,9 @@ static int enable_pid_filtering = 1; | |||
| 13 | module_param(enable_pid_filtering, int, 0444); | 13 | module_param(enable_pid_filtering, int, 0444); |
| 14 | MODULE_PARM_DESC(enable_pid_filtering, "enable hardware pid filtering: supported values: 0 (fullts), 1"); | 14 | MODULE_PARM_DESC(enable_pid_filtering, "enable hardware pid filtering: supported values: 0 (fullts), 1"); |
| 15 | 15 | ||
| 16 | static int irq_chk_intv; | 16 | static int irq_chk_intv = 100; |
| 17 | module_param(irq_chk_intv, int, 0644); | 17 | module_param(irq_chk_intv, int, 0644); |
| 18 | MODULE_PARM_DESC(irq_chk_intv, "set the interval for IRQ watchdog (currently just debugging)."); | 18 | MODULE_PARM_DESC(irq_chk_intv, "set the interval for IRQ streaming watchdog."); |
| 19 | 19 | ||
| 20 | #ifdef CONFIG_DVB_B2C2_FLEXCOP_DEBUG | 20 | #ifdef CONFIG_DVB_B2C2_FLEXCOP_DEBUG |
| 21 | #define dprintk(level,args...) \ | 21 | #define dprintk(level,args...) \ |
| @@ -34,7 +34,9 @@ MODULE_PARM_DESC(irq_chk_intv, "set the interval for IRQ watchdog (currently jus | |||
| 34 | 34 | ||
| 35 | static int debug; | 35 | static int debug; |
| 36 | module_param(debug, int, 0644); | 36 | module_param(debug, int, 0644); |
| 37 | MODULE_PARM_DESC(debug, "set debug level (1=info,2=regs,4=TS,8=irqdma (|-able))." DEBSTATUS); | 37 | MODULE_PARM_DESC(debug, |
| 38 | "set debug level (1=info,2=regs,4=TS,8=irqdma,16=check (|-able))." | ||
| 39 | DEBSTATUS); | ||
| 38 | 40 | ||
| 39 | #define DRIVER_VERSION "0.1" | 41 | #define DRIVER_VERSION "0.1" |
| 40 | #define DRIVER_NAME "Technisat/B2C2 FlexCop II/IIb/III Digital TV PCI Driver" | 42 | #define DRIVER_NAME "Technisat/B2C2 FlexCop II/IIb/III Digital TV PCI Driver" |
| @@ -58,6 +60,8 @@ struct flexcop_pci { | |||
| 58 | int active_dma1_addr; /* 0 = addr0 of dma1; 1 = addr1 of dma1 */ | 60 | int active_dma1_addr; /* 0 = addr0 of dma1; 1 = addr1 of dma1 */ |
| 59 | u32 last_dma1_cur_pos; /* position of the pointer last time the timer/packet irq occured */ | 61 | u32 last_dma1_cur_pos; /* position of the pointer last time the timer/packet irq occured */ |
| 60 | int count; | 62 | int count; |
| 63 | int count_prev; | ||
| 64 | int stream_problem; | ||
| 61 | 65 | ||
| 62 | spinlock_t irq_lock; | 66 | spinlock_t irq_lock; |
| 63 | 67 | ||
| @@ -103,18 +107,32 @@ static void flexcop_pci_irq_check_work(struct work_struct *work) | |||
| 103 | container_of(work, struct flexcop_pci, irq_check_work.work); | 107 | container_of(work, struct flexcop_pci, irq_check_work.work); |
| 104 | struct flexcop_device *fc = fc_pci->fc_dev; | 108 | struct flexcop_device *fc = fc_pci->fc_dev; |
| 105 | 109 | ||
| 106 | flexcop_ibi_value v = fc->read_ibi_reg(fc,sram_dest_reg_714); | 110 | if (fc->feedcount) { |
| 107 | 111 | ||
| 108 | flexcop_dump_reg(fc_pci->fc_dev,dma1_000,4); | 112 | if (fc_pci->count == fc_pci->count_prev) { |
| 109 | 113 | deb_chk("no IRQ since the last check\n"); | |
| 110 | if (v.sram_dest_reg_714.net_ovflow_error) | 114 | if (fc_pci->stream_problem++ == 3) { |
| 111 | deb_chk("sram net_ovflow_error\n"); | 115 | struct dvb_demux_feed *feed; |
| 112 | if (v.sram_dest_reg_714.media_ovflow_error) | 116 | |
| 113 | deb_chk("sram media_ovflow_error\n"); | 117 | spin_lock_irq(&fc->demux.lock); |
| 114 | if (v.sram_dest_reg_714.cai_ovflow_error) | 118 | list_for_each_entry(feed, &fc->demux.feed_list, |
| 115 | deb_chk("sram cai_ovflow_error\n"); | 119 | list_head) { |
| 116 | if (v.sram_dest_reg_714.cai_ovflow_error) | 120 | flexcop_pid_feed_control(fc, feed, 0); |
| 117 | deb_chk("sram cai_ovflow_error\n"); | 121 | } |
| 122 | |||
| 123 | list_for_each_entry(feed, &fc->demux.feed_list, | ||
| 124 | list_head) { | ||
| 125 | flexcop_pid_feed_control(fc, feed, 1); | ||
| 126 | } | ||
| 127 | spin_unlock_irq(&fc->demux.lock); | ||
| 128 | |||
| 129 | fc_pci->stream_problem = 0; | ||
| 130 | } | ||
| 131 | } else { | ||
| 132 | fc_pci->stream_problem = 0; | ||
| 133 | fc_pci->count_prev = fc_pci->count; | ||
| 134 | } | ||
| 135 | } | ||
| 118 | 136 | ||
| 119 | schedule_delayed_work(&fc_pci->irq_check_work, | 137 | schedule_delayed_work(&fc_pci->irq_check_work, |
| 120 | msecs_to_jiffies(irq_chk_intv < 100 ? 100 : irq_chk_intv)); | 138 | msecs_to_jiffies(irq_chk_intv < 100 ? 100 : irq_chk_intv)); |
| @@ -216,16 +234,12 @@ static int flexcop_pci_stream_control(struct flexcop_device *fc, int onoff) | |||
| 216 | flexcop_dma_control_timer_irq(fc,FC_DMA_1,1); | 234 | flexcop_dma_control_timer_irq(fc,FC_DMA_1,1); |
| 217 | deb_irq("IRQ enabled\n"); | 235 | deb_irq("IRQ enabled\n"); |
| 218 | 236 | ||
| 237 | fc_pci->count_prev = fc_pci->count; | ||
| 238 | |||
| 219 | // fc_pci->active_dma1_addr = 0; | 239 | // fc_pci->active_dma1_addr = 0; |
| 220 | // flexcop_dma_control_size_irq(fc,FC_DMA_1,1); | 240 | // flexcop_dma_control_size_irq(fc,FC_DMA_1,1); |
| 221 | 241 | ||
| 222 | if (irq_chk_intv > 0) | ||
| 223 | schedule_delayed_work(&fc_pci->irq_check_work, | ||
| 224 | msecs_to_jiffies(irq_chk_intv < 100 ? 100 : irq_chk_intv)); | ||
| 225 | } else { | 242 | } else { |
| 226 | if (irq_chk_intv > 0) | ||
| 227 | cancel_delayed_work(&fc_pci->irq_check_work); | ||
| 228 | |||
| 229 | flexcop_dma_control_timer_irq(fc,FC_DMA_1,0); | 243 | flexcop_dma_control_timer_irq(fc,FC_DMA_1,0); |
| 230 | deb_irq("IRQ disabled\n"); | 244 | deb_irq("IRQ disabled\n"); |
| 231 | 245 | ||
| @@ -299,8 +313,6 @@ static int flexcop_pci_init(struct flexcop_pci *fc_pci) | |||
| 299 | IRQF_SHARED, DRIVER_NAME, fc_pci)) != 0) | 313 | IRQF_SHARED, DRIVER_NAME, fc_pci)) != 0) |
| 300 | goto err_pci_iounmap; | 314 | goto err_pci_iounmap; |
| 301 | 315 | ||
| 302 | |||
| 303 | |||
| 304 | fc_pci->init_state |= FC_PCI_INIT; | 316 | fc_pci->init_state |= FC_PCI_INIT; |
| 305 | return ret; | 317 | return ret; |
| 306 | 318 | ||
| @@ -375,6 +387,10 @@ static int flexcop_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e | |||
| 375 | 387 | ||
| 376 | INIT_DELAYED_WORK(&fc_pci->irq_check_work, flexcop_pci_irq_check_work); | 388 | INIT_DELAYED_WORK(&fc_pci->irq_check_work, flexcop_pci_irq_check_work); |
| 377 | 389 | ||
| 390 | if (irq_chk_intv > 0) | ||
| 391 | schedule_delayed_work(&fc_pci->irq_check_work, | ||
| 392 | msecs_to_jiffies(irq_chk_intv < 100 ? 100 : irq_chk_intv)); | ||
| 393 | |||
| 378 | return ret; | 394 | return ret; |
| 379 | 395 | ||
| 380 | err_fc_exit: | 396 | err_fc_exit: |
| @@ -393,6 +409,9 @@ static void flexcop_pci_remove(struct pci_dev *pdev) | |||
| 393 | { | 409 | { |
| 394 | struct flexcop_pci *fc_pci = pci_get_drvdata(pdev); | 410 | struct flexcop_pci *fc_pci = pci_get_drvdata(pdev); |
| 395 | 411 | ||
| 412 | if (irq_chk_intv > 0) | ||
| 413 | cancel_delayed_work(&fc_pci->irq_check_work); | ||
| 414 | |||
| 396 | flexcop_pci_dma_exit(fc_pci); | 415 | flexcop_pci_dma_exit(fc_pci); |
| 397 | flexcop_device_exit(fc_pci->fc_dev); | 416 | flexcop_device_exit(fc_pci->fc_dev); |
| 398 | flexcop_pci_exit(fc_pci); | 417 | flexcop_pci_exit(fc_pci); |
diff --git a/drivers/media/dvb/b2c2/flexcop.c b/drivers/media/dvb/b2c2/flexcop.c index 676413a915b4..91068952b502 100644 --- a/drivers/media/dvb/b2c2/flexcop.c +++ b/drivers/media/dvb/b2c2/flexcop.c | |||
| @@ -212,8 +212,7 @@ void flexcop_reset_block_300(struct flexcop_device *fc) | |||
| 212 | v210.sw_reset_210.Block_reset_enable = 0xb2; | 212 | v210.sw_reset_210.Block_reset_enable = 0xb2; |
| 213 | 213 | ||
| 214 | fc->write_ibi_reg(fc,sw_reset_210,v210); | 214 | fc->write_ibi_reg(fc,sw_reset_210,v210); |
| 215 | msleep(1); | 215 | udelay(1000); |
| 216 | |||
| 217 | fc->write_ibi_reg(fc,ctrl_208,v208_save); | 216 | fc->write_ibi_reg(fc,ctrl_208,v208_save); |
| 218 | } | 217 | } |
| 219 | 218 | ||
diff --git a/drivers/media/dvb/dvb-core/dmxdev.c b/drivers/media/dvb/dvb-core/dmxdev.c index 0c733c66a441..069d847ba887 100644 --- a/drivers/media/dvb/dvb-core/dmxdev.c +++ b/drivers/media/dvb/dvb-core/dmxdev.c | |||
| @@ -364,16 +364,15 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len, | |||
| 364 | enum dmx_success success) | 364 | enum dmx_success success) |
| 365 | { | 365 | { |
| 366 | struct dmxdev_filter *dmxdevfilter = filter->priv; | 366 | struct dmxdev_filter *dmxdevfilter = filter->priv; |
| 367 | unsigned long flags; | ||
| 368 | int ret; | 367 | int ret; |
| 369 | 368 | ||
| 370 | if (dmxdevfilter->buffer.error) { | 369 | if (dmxdevfilter->buffer.error) { |
| 371 | wake_up(&dmxdevfilter->buffer.queue); | 370 | wake_up(&dmxdevfilter->buffer.queue); |
| 372 | return 0; | 371 | return 0; |
| 373 | } | 372 | } |
| 374 | spin_lock_irqsave(&dmxdevfilter->dev->lock, flags); | 373 | spin_lock(&dmxdevfilter->dev->lock); |
| 375 | if (dmxdevfilter->state != DMXDEV_STATE_GO) { | 374 | if (dmxdevfilter->state != DMXDEV_STATE_GO) { |
| 376 | spin_unlock_irqrestore(&dmxdevfilter->dev->lock, flags); | 375 | spin_unlock(&dmxdevfilter->dev->lock); |
| 377 | return 0; | 376 | return 0; |
| 378 | } | 377 | } |
| 379 | del_timer(&dmxdevfilter->timer); | 378 | del_timer(&dmxdevfilter->timer); |
| @@ -392,7 +391,7 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len, | |||
| 392 | } | 391 | } |
| 393 | if (dmxdevfilter->params.sec.flags & DMX_ONESHOT) | 392 | if (dmxdevfilter->params.sec.flags & DMX_ONESHOT) |
| 394 | dmxdevfilter->state = DMXDEV_STATE_DONE; | 393 | dmxdevfilter->state = DMXDEV_STATE_DONE; |
| 395 | spin_unlock_irqrestore(&dmxdevfilter->dev->lock, flags); | 394 | spin_unlock(&dmxdevfilter->dev->lock); |
| 396 | wake_up(&dmxdevfilter->buffer.queue); | 395 | wake_up(&dmxdevfilter->buffer.queue); |
| 397 | return 0; | 396 | return 0; |
| 398 | } | 397 | } |
| @@ -404,12 +403,11 @@ static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len, | |||
| 404 | { | 403 | { |
| 405 | struct dmxdev_filter *dmxdevfilter = feed->priv; | 404 | struct dmxdev_filter *dmxdevfilter = feed->priv; |
| 406 | struct dvb_ringbuffer *buffer; | 405 | struct dvb_ringbuffer *buffer; |
| 407 | unsigned long flags; | ||
| 408 | int ret; | 406 | int ret; |
| 409 | 407 | ||
| 410 | spin_lock_irqsave(&dmxdevfilter->dev->lock, flags); | 408 | spin_lock(&dmxdevfilter->dev->lock); |
| 411 | if (dmxdevfilter->params.pes.output == DMX_OUT_DECODER) { | 409 | if (dmxdevfilter->params.pes.output == DMX_OUT_DECODER) { |
| 412 | spin_unlock_irqrestore(&dmxdevfilter->dev->lock, flags); | 410 | spin_unlock(&dmxdevfilter->dev->lock); |
| 413 | return 0; | 411 | return 0; |
| 414 | } | 412 | } |
| 415 | 413 | ||
| @@ -419,7 +417,7 @@ static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len, | |||
| 419 | else | 417 | else |
| 420 | buffer = &dmxdevfilter->dev->dvr_buffer; | 418 | buffer = &dmxdevfilter->dev->dvr_buffer; |
| 421 | if (buffer->error) { | 419 | if (buffer->error) { |
| 422 | spin_unlock_irqrestore(&dmxdevfilter->dev->lock, flags); | 420 | spin_unlock(&dmxdevfilter->dev->lock); |
| 423 | wake_up(&buffer->queue); | 421 | wake_up(&buffer->queue); |
| 424 | return 0; | 422 | return 0; |
| 425 | } | 423 | } |
| @@ -430,7 +428,7 @@ static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len, | |||
| 430 | dvb_ringbuffer_flush(buffer); | 428 | dvb_ringbuffer_flush(buffer); |
| 431 | buffer->error = ret; | 429 | buffer->error = ret; |
| 432 | } | 430 | } |
| 433 | spin_unlock_irqrestore(&dmxdevfilter->dev->lock, flags); | 431 | spin_unlock(&dmxdevfilter->dev->lock); |
| 434 | wake_up(&buffer->queue); | 432 | wake_up(&buffer->queue); |
| 435 | return 0; | 433 | return 0; |
| 436 | } | 434 | } |
diff --git a/drivers/media/dvb/dvb-core/dvb_demux.c b/drivers/media/dvb/dvb-core/dvb_demux.c index a2c1fd5d2f67..e2eca0b1fe7c 100644 --- a/drivers/media/dvb/dvb-core/dvb_demux.c +++ b/drivers/media/dvb/dvb-core/dvb_demux.c | |||
| @@ -399,9 +399,7 @@ static void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf) | |||
| 399 | void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, | 399 | void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, |
| 400 | size_t count) | 400 | size_t count) |
| 401 | { | 401 | { |
| 402 | unsigned long flags; | 402 | spin_lock(&demux->lock); |
| 403 | |||
| 404 | spin_lock_irqsave(&demux->lock, flags); | ||
| 405 | 403 | ||
| 406 | while (count--) { | 404 | while (count--) { |
| 407 | if (buf[0] == 0x47) | 405 | if (buf[0] == 0x47) |
| @@ -409,17 +407,16 @@ void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, | |||
| 409 | buf += 188; | 407 | buf += 188; |
| 410 | } | 408 | } |
| 411 | 409 | ||
| 412 | spin_unlock_irqrestore(&demux->lock, flags); | 410 | spin_unlock(&demux->lock); |
| 413 | } | 411 | } |
| 414 | 412 | ||
| 415 | EXPORT_SYMBOL(dvb_dmx_swfilter_packets); | 413 | EXPORT_SYMBOL(dvb_dmx_swfilter_packets); |
| 416 | 414 | ||
| 417 | void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count) | 415 | void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count) |
| 418 | { | 416 | { |
| 419 | unsigned long flags; | ||
| 420 | int p = 0, i, j; | 417 | int p = 0, i, j; |
| 421 | 418 | ||
| 422 | spin_lock_irqsave(&demux->lock, flags); | 419 | spin_lock(&demux->lock); |
| 423 | 420 | ||
| 424 | if (demux->tsbufp) { | 421 | if (demux->tsbufp) { |
| 425 | i = demux->tsbufp; | 422 | i = demux->tsbufp; |
| @@ -452,18 +449,17 @@ void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count) | |||
| 452 | } | 449 | } |
| 453 | 450 | ||
| 454 | bailout: | 451 | bailout: |
| 455 | spin_unlock_irqrestore(&demux->lock, flags); | 452 | spin_unlock(&demux->lock); |
| 456 | } | 453 | } |
| 457 | 454 | ||
| 458 | EXPORT_SYMBOL(dvb_dmx_swfilter); | 455 | EXPORT_SYMBOL(dvb_dmx_swfilter); |
| 459 | 456 | ||
| 460 | void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf, size_t count) | 457 | void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf, size_t count) |
| 461 | { | 458 | { |
| 462 | unsigned long flags; | ||
| 463 | int p = 0, i, j; | 459 | int p = 0, i, j; |
| 464 | u8 tmppack[188]; | 460 | u8 tmppack[188]; |
| 465 | 461 | ||
| 466 | spin_lock_irqsave(&demux->lock, flags); | 462 | spin_lock(&demux->lock); |
| 467 | 463 | ||
| 468 | if (demux->tsbufp) { | 464 | if (demux->tsbufp) { |
| 469 | i = demux->tsbufp; | 465 | i = demux->tsbufp; |
| @@ -504,7 +500,7 @@ void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf, size_t count) | |||
| 504 | } | 500 | } |
| 505 | 501 | ||
| 506 | bailout: | 502 | bailout: |
| 507 | spin_unlock_irqrestore(&demux->lock, flags); | 503 | spin_unlock(&demux->lock); |
| 508 | } | 504 | } |
| 509 | 505 | ||
| 510 | EXPORT_SYMBOL(dvb_dmx_swfilter_204); | 506 | EXPORT_SYMBOL(dvb_dmx_swfilter_204); |
diff --git a/drivers/media/dvb/firewire/Kconfig b/drivers/media/dvb/firewire/Kconfig new file mode 100644 index 000000000000..69028253e984 --- /dev/null +++ b/drivers/media/dvb/firewire/Kconfig | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | config DVB_FIREDTV | ||
| 2 | tristate "FireDTV and FloppyDTV" | ||
| 3 | depends on DVB_CORE && IEEE1394 | ||
| 4 | help | ||
| 5 | Support for DVB receivers from Digital Everywhere | ||
| 6 | which are connected via IEEE 1394 (FireWire). | ||
| 7 | |||
| 8 | These devices don't have an MPEG decoder built in, | ||
| 9 | so you need an external software decoder to watch TV. | ||
| 10 | |||
| 11 | To compile this driver as a module, say M here: | ||
| 12 | the module will be called firedtv. | ||
| 13 | |||
| 14 | if DVB_FIREDTV | ||
| 15 | |||
| 16 | config DVB_FIREDTV_IEEE1394 | ||
| 17 | def_bool IEEE1394 | ||
| 18 | |||
| 19 | config DVB_FIREDTV_INPUT | ||
| 20 | def_bool INPUT = y || (INPUT = m && DVB_FIREDTV = m) | ||
| 21 | |||
| 22 | endif # DVB_FIREDTV | ||
diff --git a/drivers/media/dvb/firewire/Makefile b/drivers/media/dvb/firewire/Makefile new file mode 100644 index 000000000000..2034695ba194 --- /dev/null +++ b/drivers/media/dvb/firewire/Makefile | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | obj-$(CONFIG_DVB_FIREDTV) += firedtv.o | ||
| 2 | |||
| 3 | firedtv-y := firedtv-avc.o firedtv-ci.o firedtv-dvb.o firedtv-fe.o | ||
| 4 | firedtv-$(CONFIG_DVB_FIREDTV_IEEE1394) += firedtv-1394.o | ||
| 5 | firedtv-$(CONFIG_DVB_FIREDTV_INPUT) += firedtv-rc.o | ||
| 6 | |||
| 7 | ccflags-y += -Idrivers/media/dvb/dvb-core | ||
| 8 | ccflags-$(CONFIG_DVB_FIREDTV_IEEE1394) += -Idrivers/ieee1394 | ||
diff --git a/drivers/media/dvb/firewire/firedtv-1394.c b/drivers/media/dvb/firewire/firedtv-1394.c new file mode 100644 index 000000000000..4e207658c5d9 --- /dev/null +++ b/drivers/media/dvb/firewire/firedtv-1394.c | |||
| @@ -0,0 +1,285 @@ | |||
| 1 | /* | ||
| 2 | * FireDTV driver (formerly known as FireSAT) | ||
| 3 | * | ||
| 4 | * Copyright (C) 2004 Andreas Monitzer <andy@monitzer.com> | ||
| 5 | * Copyright (C) 2007-2008 Ben Backx <ben@bbackx.com> | ||
| 6 | * Copyright (C) 2008 Henrik Kurelid <henrik@kurelid.se> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or | ||
| 9 | * modify it under the terms of the GNU General Public License as | ||
| 10 | * published by the Free Software Foundation; either version 2 of | ||
| 11 | * the License, or (at your option) any later version. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #include <linux/device.h> | ||
| 15 | #include <linux/errno.h> | ||
| 16 | #include <linux/kernel.h> | ||
| 17 | #include <linux/list.h> | ||
| 18 | #include <linux/spinlock.h> | ||
| 19 | #include <linux/types.h> | ||
| 20 | |||
| 21 | #include <dma.h> | ||
| 22 | #include <csr1212.h> | ||
| 23 | #include <highlevel.h> | ||
| 24 | #include <hosts.h> | ||
| 25 | #include <ieee1394.h> | ||
| 26 | #include <iso.h> | ||
| 27 | #include <nodemgr.h> | ||
| 28 | |||
| 29 | #include "firedtv.h" | ||
| 30 | |||
| 31 | static LIST_HEAD(node_list); | ||
| 32 | static DEFINE_SPINLOCK(node_list_lock); | ||
| 33 | |||
| 34 | #define FIREWIRE_HEADER_SIZE 4 | ||
| 35 | #define CIP_HEADER_SIZE 8 | ||
| 36 | |||
| 37 | static void rawiso_activity_cb(struct hpsb_iso *iso) | ||
| 38 | { | ||
| 39 | struct firedtv *f, *fdtv = NULL; | ||
| 40 | unsigned int i, num, packet; | ||
| 41 | unsigned char *buf; | ||
| 42 | unsigned long flags; | ||
| 43 | int count; | ||
| 44 | |||
| 45 | spin_lock_irqsave(&node_list_lock, flags); | ||
| 46 | list_for_each_entry(f, &node_list, list) | ||
| 47 | if (f->backend_data == iso) { | ||
| 48 | fdtv = f; | ||
| 49 | break; | ||
| 50 | } | ||
| 51 | spin_unlock_irqrestore(&node_list_lock, flags); | ||
| 52 | |||
| 53 | packet = iso->first_packet; | ||
| 54 | num = hpsb_iso_n_ready(iso); | ||
| 55 | |||
| 56 | if (!fdtv) { | ||
| 57 | dev_err(fdtv->device, "received at unknown iso channel\n"); | ||
| 58 | goto out; | ||
| 59 | } | ||
| 60 | |||
| 61 | for (i = 0; i < num; i++, packet = (packet + 1) % iso->buf_packets) { | ||
| 62 | buf = dma_region_i(&iso->data_buf, unsigned char, | ||
| 63 | iso->infos[packet].offset + CIP_HEADER_SIZE); | ||
| 64 | count = (iso->infos[packet].len - CIP_HEADER_SIZE) / | ||
| 65 | (188 + FIREWIRE_HEADER_SIZE); | ||
| 66 | |||
| 67 | /* ignore empty packet */ | ||
| 68 | if (iso->infos[packet].len <= CIP_HEADER_SIZE) | ||
| 69 | continue; | ||
| 70 | |||
| 71 | while (count--) { | ||
| 72 | if (buf[FIREWIRE_HEADER_SIZE] == 0x47) | ||
| 73 | dvb_dmx_swfilter_packets(&fdtv->demux, | ||
| 74 | &buf[FIREWIRE_HEADER_SIZE], 1); | ||
| 75 | else | ||
| 76 | dev_err(fdtv->device, | ||
| 77 | "skipping invalid packet\n"); | ||
| 78 | buf += 188 + FIREWIRE_HEADER_SIZE; | ||
| 79 | } | ||
| 80 | } | ||
| 81 | out: | ||
| 82 | hpsb_iso_recv_release_packets(iso, num); | ||
| 83 | } | ||
| 84 | |||
| 85 | static inline struct node_entry *node_of(struct firedtv *fdtv) | ||
| 86 | { | ||
| 87 | return container_of(fdtv->device, struct unit_directory, device)->ne; | ||
| 88 | } | ||
| 89 | |||
| 90 | static int node_lock(struct firedtv *fdtv, u64 addr, void *data, __be32 arg) | ||
| 91 | { | ||
| 92 | return hpsb_node_lock(node_of(fdtv), addr, EXTCODE_COMPARE_SWAP, data, | ||
| 93 | (__force quadlet_t)arg); | ||
| 94 | } | ||
| 95 | |||
| 96 | static int node_read(struct firedtv *fdtv, u64 addr, void *data, size_t len) | ||
| 97 | { | ||
| 98 | return hpsb_node_read(node_of(fdtv), addr, data, len); | ||
| 99 | } | ||
| 100 | |||
| 101 | static int node_write(struct firedtv *fdtv, u64 addr, void *data, size_t len) | ||
| 102 | { | ||
| 103 | return hpsb_node_write(node_of(fdtv), addr, data, len); | ||
| 104 | } | ||
| 105 | |||
| 106 | #define FDTV_ISO_BUFFER_PACKETS 256 | ||
| 107 | #define FDTV_ISO_BUFFER_SIZE (FDTV_ISO_BUFFER_PACKETS * 200) | ||
| 108 | |||
| 109 | static int start_iso(struct firedtv *fdtv) | ||
| 110 | { | ||
| 111 | struct hpsb_iso *iso_handle; | ||
| 112 | int ret; | ||
| 113 | |||
| 114 | iso_handle = hpsb_iso_recv_init(node_of(fdtv)->host, | ||
| 115 | FDTV_ISO_BUFFER_SIZE, FDTV_ISO_BUFFER_PACKETS, | ||
| 116 | fdtv->isochannel, HPSB_ISO_DMA_DEFAULT, | ||
| 117 | -1, /* stat.config.irq_interval */ | ||
| 118 | rawiso_activity_cb); | ||
| 119 | if (iso_handle == NULL) { | ||
| 120 | dev_err(fdtv->device, "cannot initialize iso receive\n"); | ||
| 121 | return -ENOMEM; | ||
| 122 | } | ||
| 123 | fdtv->backend_data = iso_handle; | ||
| 124 | |||
| 125 | ret = hpsb_iso_recv_start(iso_handle, -1, -1, 0); | ||
| 126 | if (ret != 0) { | ||
| 127 | dev_err(fdtv->device, "cannot start iso receive\n"); | ||
| 128 | hpsb_iso_shutdown(iso_handle); | ||
| 129 | fdtv->backend_data = NULL; | ||
| 130 | } | ||
| 131 | return ret; | ||
| 132 | } | ||
| 133 | |||
| 134 | static void stop_iso(struct firedtv *fdtv) | ||
| 135 | { | ||
| 136 | struct hpsb_iso *iso_handle = fdtv->backend_data; | ||
| 137 | |||
| 138 | if (iso_handle != NULL) { | ||
| 139 | hpsb_iso_stop(iso_handle); | ||
| 140 | hpsb_iso_shutdown(iso_handle); | ||
| 141 | } | ||
| 142 | fdtv->backend_data = NULL; | ||
| 143 | } | ||
| 144 | |||
| 145 | static const struct firedtv_backend fdtv_1394_backend = { | ||
| 146 | .lock = node_lock, | ||
| 147 | .read = node_read, | ||
| 148 | .write = node_write, | ||
| 149 | .start_iso = start_iso, | ||
| 150 | .stop_iso = stop_iso, | ||
| 151 | }; | ||
| 152 | |||
| 153 | static void fcp_request(struct hpsb_host *host, int nodeid, int direction, | ||
| 154 | int cts, u8 *data, size_t length) | ||
| 155 | { | ||
| 156 | struct firedtv *f, *fdtv = NULL; | ||
| 157 | unsigned long flags; | ||
| 158 | int su; | ||
| 159 | |||
| 160 | if (length == 0 || (data[0] & 0xf0) != 0) | ||
| 161 | return; | ||
| 162 | |||
| 163 | su = data[1] & 0x7; | ||
| 164 | |||
| 165 | spin_lock_irqsave(&node_list_lock, flags); | ||
| 166 | list_for_each_entry(f, &node_list, list) | ||
| 167 | if (node_of(f)->host == host && | ||
| 168 | node_of(f)->nodeid == nodeid && | ||
| 169 | (f->subunit == su || (f->subunit == 0 && su == 0x7))) { | ||
| 170 | fdtv = f; | ||
| 171 | break; | ||
| 172 | } | ||
| 173 | spin_unlock_irqrestore(&node_list_lock, flags); | ||
| 174 | |||
| 175 | if (fdtv) | ||
| 176 | avc_recv(fdtv, data, length); | ||
| 177 | } | ||
| 178 | |||
| 179 | static int node_probe(struct device *dev) | ||
| 180 | { | ||
| 181 | struct unit_directory *ud = | ||
| 182 | container_of(dev, struct unit_directory, device); | ||
| 183 | struct firedtv *fdtv; | ||
| 184 | int kv_len, err; | ||
| 185 | void *kv_str; | ||
| 186 | |||
| 187 | kv_len = (ud->model_name_kv->value.leaf.len - 2) * sizeof(quadlet_t); | ||
| 188 | kv_str = CSR1212_TEXTUAL_DESCRIPTOR_LEAF_DATA(ud->model_name_kv); | ||
| 189 | |||
| 190 | fdtv = fdtv_alloc(dev, &fdtv_1394_backend, kv_str, kv_len); | ||
| 191 | if (!fdtv) | ||
| 192 | return -ENOMEM; | ||
| 193 | |||
| 194 | /* | ||
| 195 | * Work around a bug in udev's path_id script: Use the fw-host's dev | ||
| 196 | * instead of the unit directory's dev as parent of the input device. | ||
| 197 | */ | ||
| 198 | err = fdtv_register_rc(fdtv, dev->parent->parent); | ||
| 199 | if (err) | ||
| 200 | goto fail_free; | ||
| 201 | |||
| 202 | spin_lock_irq(&node_list_lock); | ||
| 203 | list_add_tail(&fdtv->list, &node_list); | ||
| 204 | spin_unlock_irq(&node_list_lock); | ||
| 205 | |||
| 206 | err = avc_identify_subunit(fdtv); | ||
| 207 | if (err) | ||
| 208 | goto fail; | ||
| 209 | |||
| 210 | err = fdtv_dvb_register(fdtv); | ||
| 211 | if (err) | ||
| 212 | goto fail; | ||
| 213 | |||
| 214 | avc_register_remote_control(fdtv); | ||
| 215 | return 0; | ||
| 216 | fail: | ||
| 217 | spin_lock_irq(&node_list_lock); | ||
| 218 | list_del(&fdtv->list); | ||
| 219 | spin_unlock_irq(&node_list_lock); | ||
| 220 | fdtv_unregister_rc(fdtv); | ||
| 221 | fail_free: | ||
| 222 | kfree(fdtv); | ||
| 223 | return err; | ||
| 224 | } | ||
| 225 | |||
| 226 | static int node_remove(struct device *dev) | ||
| 227 | { | ||
| 228 | struct firedtv *fdtv = dev->driver_data; | ||
| 229 | |||
| 230 | fdtv_dvb_unregister(fdtv); | ||
| 231 | |||
| 232 | spin_lock_irq(&node_list_lock); | ||
| 233 | list_del(&fdtv->list); | ||
| 234 | spin_unlock_irq(&node_list_lock); | ||
| 235 | |||
| 236 | cancel_work_sync(&fdtv->remote_ctrl_work); | ||
| 237 | fdtv_unregister_rc(fdtv); | ||
| 238 | |||
| 239 | kfree(fdtv); | ||
| 240 | return 0; | ||
| 241 | } | ||
| 242 | |||
| 243 | static int node_update(struct unit_directory *ud) | ||
| 244 | { | ||
| 245 | struct firedtv *fdtv = ud->device.driver_data; | ||
| 246 | |||
| 247 | if (fdtv->isochannel >= 0) | ||
| 248 | cmp_establish_pp_connection(fdtv, fdtv->subunit, | ||
| 249 | fdtv->isochannel); | ||
| 250 | return 0; | ||
| 251 | } | ||
| 252 | |||
| 253 | static struct hpsb_protocol_driver fdtv_driver = { | ||
| 254 | .name = "firedtv", | ||
| 255 | .update = node_update, | ||
| 256 | .driver = { | ||
| 257 | .probe = node_probe, | ||
| 258 | .remove = node_remove, | ||
| 259 | }, | ||
| 260 | }; | ||
| 261 | |||
| 262 | static struct hpsb_highlevel fdtv_highlevel = { | ||
| 263 | .name = "firedtv", | ||
| 264 | .fcp_request = fcp_request, | ||
| 265 | }; | ||
| 266 | |||
| 267 | int __init fdtv_1394_init(struct ieee1394_device_id id_table[]) | ||
| 268 | { | ||
| 269 | int ret; | ||
| 270 | |||
| 271 | hpsb_register_highlevel(&fdtv_highlevel); | ||
| 272 | fdtv_driver.id_table = id_table; | ||
| 273 | ret = hpsb_register_protocol(&fdtv_driver); | ||
| 274 | if (ret) { | ||
| 275 | printk(KERN_ERR "firedtv: failed to register protocol\n"); | ||
| 276 | hpsb_unregister_highlevel(&fdtv_highlevel); | ||
| 277 | } | ||
| 278 | return ret; | ||
| 279 | } | ||
| 280 | |||
| 281 | void __exit fdtv_1394_exit(void) | ||
| 282 | { | ||
| 283 | hpsb_unregister_protocol(&fdtv_driver); | ||
| 284 | hpsb_unregister_highlevel(&fdtv_highlevel); | ||
| 285 | } | ||
diff --git a/drivers/media/dvb/firewire/firedtv-avc.c b/drivers/media/dvb/firewire/firedtv-avc.c new file mode 100644 index 000000000000..b55d9ccaf33e --- /dev/null +++ b/drivers/media/dvb/firewire/firedtv-avc.c | |||
| @@ -0,0 +1,1315 @@ | |||
| 1 | /* | ||
| 2 | * FireDTV driver (formerly known as FireSAT) | ||
| 3 | * | ||
| 4 | * Copyright (C) 2004 Andreas Monitzer <andy@monitzer.com> | ||
| 5 | * Copyright (C) 2008 Ben Backx <ben@bbackx.com> | ||
| 6 | * Copyright (C) 2008 Henrik Kurelid <henrik@kurelid.se> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or | ||
| 9 | * modify it under the terms of the GNU General Public License as | ||
| 10 | * published by the Free Software Foundation; either version 2 of | ||
| 11 | * the License, or (at your option) any later version. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #include <linux/bug.h> | ||
| 15 | #include <linux/crc32.h> | ||
| 16 | #include <linux/delay.h> | ||
| 17 | #include <linux/device.h> | ||
| 18 | #include <linux/jiffies.h> | ||
| 19 | #include <linux/kernel.h> | ||
| 20 | #include <linux/moduleparam.h> | ||
| 21 | #include <linux/mutex.h> | ||
| 22 | #include <linux/string.h> | ||
| 23 | #include <linux/stringify.h> | ||
| 24 | #include <linux/wait.h> | ||
| 25 | #include <linux/workqueue.h> | ||
| 26 | |||
| 27 | #include "firedtv.h" | ||
| 28 | |||
| 29 | #define FCP_COMMAND_REGISTER 0xfffff0000b00ULL | ||
| 30 | |||
| 31 | #define AVC_CTYPE_CONTROL 0x0 | ||
| 32 | #define AVC_CTYPE_STATUS 0x1 | ||
| 33 | #define AVC_CTYPE_NOTIFY 0x3 | ||
| 34 | |||
| 35 | #define AVC_RESPONSE_ACCEPTED 0x9 | ||
| 36 | #define AVC_RESPONSE_STABLE 0xc | ||
| 37 | #define AVC_RESPONSE_CHANGED 0xd | ||
| 38 | #define AVC_RESPONSE_INTERIM 0xf | ||
| 39 | |||
| 40 | #define AVC_SUBUNIT_TYPE_TUNER (0x05 << 3) | ||
| 41 | #define AVC_SUBUNIT_TYPE_UNIT (0x1f << 3) | ||
| 42 | |||
| 43 | #define AVC_OPCODE_VENDOR 0x00 | ||
| 44 | #define AVC_OPCODE_READ_DESCRIPTOR 0x09 | ||
| 45 | #define AVC_OPCODE_DSIT 0xc8 | ||
| 46 | #define AVC_OPCODE_DSD 0xcb | ||
| 47 | |||
| 48 | #define DESCRIPTOR_TUNER_STATUS 0x80 | ||
| 49 | #define DESCRIPTOR_SUBUNIT_IDENTIFIER 0x00 | ||
| 50 | |||
| 51 | #define SFE_VENDOR_DE_COMPANYID_0 0x00 /* OUI of Digital Everywhere */ | ||
| 52 | #define SFE_VENDOR_DE_COMPANYID_1 0x12 | ||
| 53 | #define SFE_VENDOR_DE_COMPANYID_2 0x87 | ||
| 54 | |||
| 55 | #define SFE_VENDOR_OPCODE_REGISTER_REMOTE_CONTROL 0x0a | ||
| 56 | #define SFE_VENDOR_OPCODE_LNB_CONTROL 0x52 | ||
| 57 | #define SFE_VENDOR_OPCODE_TUNE_QPSK 0x58 /* for DVB-S */ | ||
| 58 | |||
| 59 | #define SFE_VENDOR_OPCODE_GET_FIRMWARE_VERSION 0x00 | ||
| 60 | #define SFE_VENDOR_OPCODE_HOST2CA 0x56 | ||
| 61 | #define SFE_VENDOR_OPCODE_CA2HOST 0x57 | ||
| 62 | #define SFE_VENDOR_OPCODE_CISTATUS 0x59 | ||
| 63 | #define SFE_VENDOR_OPCODE_TUNE_QPSK2 0x60 /* for DVB-S2 */ | ||
| 64 | |||
| 65 | #define SFE_VENDOR_TAG_CA_RESET 0x00 | ||
| 66 | #define SFE_VENDOR_TAG_CA_APPLICATION_INFO 0x01 | ||
| 67 | #define SFE_VENDOR_TAG_CA_PMT 0x02 | ||
| 68 | #define SFE_VENDOR_TAG_CA_DATE_TIME 0x04 | ||
| 69 | #define SFE_VENDOR_TAG_CA_MMI 0x05 | ||
| 70 | #define SFE_VENDOR_TAG_CA_ENTER_MENU 0x07 | ||
| 71 | |||
| 72 | #define EN50221_LIST_MANAGEMENT_ONLY 0x03 | ||
| 73 | #define EN50221_TAG_APP_INFO 0x9f8021 | ||
| 74 | #define EN50221_TAG_CA_INFO 0x9f8031 | ||
| 75 | |||
| 76 | struct avc_command_frame { | ||
| 77 | int length; | ||
| 78 | u8 ctype; | ||
| 79 | u8 subunit; | ||
| 80 | u8 opcode; | ||
| 81 | u8 operand[509]; | ||
| 82 | }; | ||
| 83 | |||
| 84 | struct avc_response_frame { | ||
| 85 | int length; | ||
| 86 | u8 response; | ||
| 87 | u8 subunit; | ||
| 88 | u8 opcode; | ||
| 89 | u8 operand[509]; | ||
| 90 | }; | ||
| 91 | |||
| 92 | #define AVC_DEBUG_FCP_SUBACTIONS 1 | ||
| 93 | #define AVC_DEBUG_FCP_PAYLOADS 2 | ||
| 94 | |||
| 95 | static int avc_debug; | ||
| 96 | module_param_named(debug, avc_debug, int, 0644); | ||
| 97 | MODULE_PARM_DESC(debug, "Verbose logging (default = 0" | ||
| 98 | ", FCP subactions = " __stringify(AVC_DEBUG_FCP_SUBACTIONS) | ||
| 99 | ", FCP payloads = " __stringify(AVC_DEBUG_FCP_PAYLOADS) | ||
| 100 | ", or all = -1)"); | ||
| 101 | |||
| 102 | static const char *debug_fcp_ctype(unsigned int ctype) | ||
| 103 | { | ||
| 104 | static const char *ctypes[] = { | ||
| 105 | [0x0] = "CONTROL", [0x1] = "STATUS", | ||
| 106 | [0x2] = "SPECIFIC INQUIRY", [0x3] = "NOTIFY", | ||
| 107 | [0x4] = "GENERAL INQUIRY", [0x8] = "NOT IMPLEMENTED", | ||
| 108 | [0x9] = "ACCEPTED", [0xa] = "REJECTED", | ||
| 109 | [0xb] = "IN TRANSITION", [0xc] = "IMPLEMENTED/STABLE", | ||
| 110 | [0xd] = "CHANGED", [0xf] = "INTERIM", | ||
| 111 | }; | ||
| 112 | const char *ret = ctype < ARRAY_SIZE(ctypes) ? ctypes[ctype] : NULL; | ||
| 113 | |||
| 114 | return ret ? ret : "?"; | ||
| 115 | } | ||
| 116 | |||
| 117 | static const char *debug_fcp_opcode(unsigned int opcode, | ||
| 118 | const u8 *data, size_t length) | ||
| 119 | { | ||
| 120 | switch (opcode) { | ||
| 121 | case AVC_OPCODE_VENDOR: break; | ||
| 122 | case AVC_OPCODE_READ_DESCRIPTOR: return "ReadDescriptor"; | ||
| 123 | case AVC_OPCODE_DSIT: return "DirectSelectInfo.Type"; | ||
| 124 | case AVC_OPCODE_DSD: return "DirectSelectData"; | ||
| 125 | default: return "?"; | ||
| 126 | } | ||
| 127 | |||
| 128 | if (length < 7 || | ||
| 129 | data[3] != SFE_VENDOR_DE_COMPANYID_0 || | ||
| 130 | data[4] != SFE_VENDOR_DE_COMPANYID_1 || | ||
| 131 | data[5] != SFE_VENDOR_DE_COMPANYID_2) | ||
| 132 | return "Vendor"; | ||
| 133 | |||
| 134 | switch (data[6]) { | ||
| 135 | case SFE_VENDOR_OPCODE_REGISTER_REMOTE_CONTROL: return "RegisterRC"; | ||
| 136 | case SFE_VENDOR_OPCODE_LNB_CONTROL: return "LNBControl"; | ||
| 137 | case SFE_VENDOR_OPCODE_TUNE_QPSK: return "TuneQPSK"; | ||
| 138 | case SFE_VENDOR_OPCODE_HOST2CA: return "Host2CA"; | ||
| 139 | case SFE_VENDOR_OPCODE_CA2HOST: return "CA2Host"; | ||
| 140 | } | ||
| 141 | return "Vendor"; | ||
| 142 | } | ||
| 143 | |||
| 144 | static void debug_fcp(const u8 *data, size_t length) | ||
| 145 | { | ||
| 146 | unsigned int subunit_type, subunit_id, op; | ||
| 147 | const char *prefix = data[0] > 7 ? "FCP <- " : "FCP -> "; | ||
| 148 | |||
| 149 | if (avc_debug & AVC_DEBUG_FCP_SUBACTIONS) { | ||
| 150 | subunit_type = data[1] >> 3; | ||
| 151 | subunit_id = data[1] & 7; | ||
| 152 | op = subunit_type == 0x1e || subunit_id == 5 ? ~0 : data[2]; | ||
| 153 | printk(KERN_INFO "%ssu=%x.%x l=%d: %-8s - %s\n", | ||
| 154 | prefix, subunit_type, subunit_id, length, | ||
| 155 | debug_fcp_ctype(data[0]), | ||
| 156 | debug_fcp_opcode(op, data, length)); | ||
| 157 | } | ||
| 158 | |||
| 159 | if (avc_debug & AVC_DEBUG_FCP_PAYLOADS) | ||
| 160 | print_hex_dump(KERN_INFO, prefix, DUMP_PREFIX_NONE, 16, 1, | ||
| 161 | data, length, false); | ||
| 162 | } | ||
| 163 | |||
| 164 | static int __avc_write(struct firedtv *fdtv, | ||
| 165 | const struct avc_command_frame *c, struct avc_response_frame *r) | ||
| 166 | { | ||
| 167 | int err, retry; | ||
| 168 | |||
| 169 | if (r) | ||
| 170 | fdtv->avc_reply_received = false; | ||
| 171 | |||
| 172 | for (retry = 0; retry < 6; retry++) { | ||
| 173 | if (unlikely(avc_debug)) | ||
| 174 | debug_fcp(&c->ctype, c->length); | ||
| 175 | |||
| 176 | err = fdtv->backend->write(fdtv, FCP_COMMAND_REGISTER, | ||
| 177 | (void *)&c->ctype, c->length); | ||
| 178 | if (err) { | ||
| 179 | fdtv->avc_reply_received = true; | ||
| 180 | dev_err(fdtv->device, "FCP command write failed\n"); | ||
| 181 | return err; | ||
| 182 | } | ||
| 183 | |||
| 184 | if (!r) | ||
| 185 | return 0; | ||
| 186 | |||
| 187 | /* | ||
| 188 | * AV/C specs say that answers should be sent within 150 ms. | ||
| 189 | * Time out after 200 ms. | ||
| 190 | */ | ||
| 191 | if (wait_event_timeout(fdtv->avc_wait, | ||
| 192 | fdtv->avc_reply_received, | ||
| 193 | msecs_to_jiffies(200)) != 0) { | ||
| 194 | r->length = fdtv->response_length; | ||
| 195 | memcpy(&r->response, fdtv->response, r->length); | ||
| 196 | |||
| 197 | return 0; | ||
| 198 | } | ||
| 199 | } | ||
| 200 | dev_err(fdtv->device, "FCP response timed out\n"); | ||
| 201 | return -ETIMEDOUT; | ||
| 202 | } | ||
| 203 | |||
| 204 | static int avc_write(struct firedtv *fdtv, | ||
| 205 | const struct avc_command_frame *c, struct avc_response_frame *r) | ||
| 206 | { | ||
| 207 | int ret; | ||
| 208 | |||
| 209 | if (mutex_lock_interruptible(&fdtv->avc_mutex)) | ||
| 210 | return -EINTR; | ||
| 211 | |||
| 212 | ret = __avc_write(fdtv, c, r); | ||
| 213 | |||
| 214 | mutex_unlock(&fdtv->avc_mutex); | ||
| 215 | return ret; | ||
| 216 | } | ||
| 217 | |||
| 218 | int avc_recv(struct firedtv *fdtv, void *data, size_t length) | ||
| 219 | { | ||
| 220 | struct avc_response_frame *r = | ||
| 221 | data - offsetof(struct avc_response_frame, response); | ||
| 222 | |||
| 223 | if (unlikely(avc_debug)) | ||
| 224 | debug_fcp(data, length); | ||
| 225 | |||
| 226 | if (length >= 8 && | ||
| 227 | r->operand[0] == SFE_VENDOR_DE_COMPANYID_0 && | ||
| 228 | r->operand[1] == SFE_VENDOR_DE_COMPANYID_1 && | ||
| 229 | r->operand[2] == SFE_VENDOR_DE_COMPANYID_2 && | ||
| 230 | r->operand[3] == SFE_VENDOR_OPCODE_REGISTER_REMOTE_CONTROL) { | ||
| 231 | if (r->response == AVC_RESPONSE_CHANGED) { | ||
| 232 | fdtv_handle_rc(fdtv, | ||
| 233 | r->operand[4] << 8 | r->operand[5]); | ||
| 234 | schedule_work(&fdtv->remote_ctrl_work); | ||
| 235 | } else if (r->response != AVC_RESPONSE_INTERIM) { | ||
| 236 | dev_info(fdtv->device, | ||
| 237 | "remote control result = %d\n", r->response); | ||
| 238 | } | ||
| 239 | return 0; | ||
| 240 | } | ||
| 241 | |||
| 242 | if (fdtv->avc_reply_received) { | ||
| 243 | dev_err(fdtv->device, "out-of-order AVC response, ignored\n"); | ||
| 244 | return -EIO; | ||
| 245 | } | ||
| 246 | |||
| 247 | memcpy(fdtv->response, data, length); | ||
| 248 | fdtv->response_length = length; | ||
| 249 | |||
| 250 | fdtv->avc_reply_received = true; | ||
| 251 | wake_up(&fdtv->avc_wait); | ||
| 252 | |||
| 253 | return 0; | ||
| 254 | } | ||
| 255 | |||
| 256 | /* | ||
| 257 | * tuning command for setting the relative LNB frequency | ||
| 258 | * (not supported by the AVC standard) | ||
| 259 | */ | ||
| 260 | static void avc_tuner_tuneqpsk(struct firedtv *fdtv, | ||
| 261 | struct dvb_frontend_parameters *params, | ||
| 262 | struct avc_command_frame *c) | ||
| 263 | { | ||
| 264 | c->opcode = AVC_OPCODE_VENDOR; | ||
| 265 | |||
| 266 | c->operand[0] = SFE_VENDOR_DE_COMPANYID_0; | ||
| 267 | c->operand[1] = SFE_VENDOR_DE_COMPANYID_1; | ||
| 268 | c->operand[2] = SFE_VENDOR_DE_COMPANYID_2; | ||
| 269 | c->operand[3] = SFE_VENDOR_OPCODE_TUNE_QPSK; | ||
| 270 | |||
| 271 | c->operand[4] = (params->frequency >> 24) & 0xff; | ||
| 272 | c->operand[5] = (params->frequency >> 16) & 0xff; | ||
| 273 | c->operand[6] = (params->frequency >> 8) & 0xff; | ||
| 274 | c->operand[7] = params->frequency & 0xff; | ||
| 275 | |||
| 276 | c->operand[8] = ((params->u.qpsk.symbol_rate / 1000) >> 8) & 0xff; | ||
| 277 | c->operand[9] = (params->u.qpsk.symbol_rate / 1000) & 0xff; | ||
| 278 | |||
| 279 | switch (params->u.qpsk.fec_inner) { | ||
| 280 | case FEC_1_2: c->operand[10] = 0x1; break; | ||
| 281 | case FEC_2_3: c->operand[10] = 0x2; break; | ||
| 282 | case FEC_3_4: c->operand[10] = 0x3; break; | ||
| 283 | case FEC_5_6: c->operand[10] = 0x4; break; | ||
| 284 | case FEC_7_8: c->operand[10] = 0x5; break; | ||
| 285 | case FEC_4_5: | ||
| 286 | case FEC_8_9: | ||
| 287 | case FEC_AUTO: | ||
| 288 | default: c->operand[10] = 0x0; | ||
| 289 | } | ||
| 290 | |||
| 291 | if (fdtv->voltage == 0xff) | ||
| 292 | c->operand[11] = 0xff; | ||
| 293 | else if (fdtv->voltage == SEC_VOLTAGE_18) /* polarisation */ | ||
| 294 | c->operand[11] = 0; | ||
| 295 | else | ||
| 296 | c->operand[11] = 1; | ||
| 297 | |||
| 298 | if (fdtv->tone == 0xff) | ||
| 299 | c->operand[12] = 0xff; | ||
| 300 | else if (fdtv->tone == SEC_TONE_ON) /* band */ | ||
| 301 | c->operand[12] = 1; | ||
| 302 | else | ||
| 303 | c->operand[12] = 0; | ||
| 304 | |||
| 305 | if (fdtv->type == FIREDTV_DVB_S2) { | ||
| 306 | c->operand[13] = 0x1; | ||
| 307 | c->operand[14] = 0xff; | ||
| 308 | c->operand[15] = 0xff; | ||
| 309 | c->length = 20; | ||
| 310 | } else { | ||
| 311 | c->length = 16; | ||
| 312 | } | ||
| 313 | } | ||
| 314 | |||
| 315 | static void avc_tuner_dsd_dvb_c(struct dvb_frontend_parameters *params, | ||
| 316 | struct avc_command_frame *c) | ||
| 317 | { | ||
| 318 | c->opcode = AVC_OPCODE_DSD; | ||
| 319 | |||
| 320 | c->operand[0] = 0; /* source plug */ | ||
| 321 | c->operand[1] = 0xd2; /* subfunction replace */ | ||
| 322 | c->operand[2] = 0x20; /* system id = DVB */ | ||
| 323 | c->operand[3] = 0x00; /* antenna number */ | ||
| 324 | c->operand[4] = 0x11; /* system_specific_multiplex selection_length */ | ||
| 325 | |||
| 326 | /* multiplex_valid_flags, high byte */ | ||
| 327 | c->operand[5] = 0 << 7 /* reserved */ | ||
| 328 | | 0 << 6 /* Polarisation */ | ||
| 329 | | 0 << 5 /* Orbital_Pos */ | ||
| 330 | | 1 << 4 /* Frequency */ | ||
| 331 | | 1 << 3 /* Symbol_Rate */ | ||
| 332 | | 0 << 2 /* FEC_outer */ | ||
| 333 | | (params->u.qam.fec_inner != FEC_AUTO ? 1 << 1 : 0) | ||
| 334 | | (params->u.qam.modulation != QAM_AUTO ? 1 << 0 : 0); | ||
| 335 | |||
| 336 | /* multiplex_valid_flags, low byte */ | ||
| 337 | c->operand[6] = 0 << 7 /* NetworkID */ | ||
| 338 | | 0 << 0 /* reserved */ ; | ||
| 339 | |||
| 340 | c->operand[7] = 0x00; | ||
| 341 | c->operand[8] = 0x00; | ||
| 342 | c->operand[9] = 0x00; | ||
| 343 | c->operand[10] = 0x00; | ||
| 344 | |||
| 345 | c->operand[11] = (((params->frequency / 4000) >> 16) & 0xff) | (2 << 6); | ||
| 346 | c->operand[12] = ((params->frequency / 4000) >> 8) & 0xff; | ||
| 347 | c->operand[13] = (params->frequency / 4000) & 0xff; | ||
| 348 | c->operand[14] = ((params->u.qpsk.symbol_rate / 1000) >> 12) & 0xff; | ||
| 349 | c->operand[15] = ((params->u.qpsk.symbol_rate / 1000) >> 4) & 0xff; | ||
| 350 | c->operand[16] = ((params->u.qpsk.symbol_rate / 1000) << 4) & 0xf0; | ||
| 351 | c->operand[17] = 0x00; | ||
| 352 | |||
| 353 | switch (params->u.qpsk.fec_inner) { | ||
| 354 | case FEC_1_2: c->operand[18] = 0x1; break; | ||
| 355 | case FEC_2_3: c->operand[18] = 0x2; break; | ||
| 356 | case FEC_3_4: c->operand[18] = 0x3; break; | ||
| 357 | case FEC_5_6: c->operand[18] = 0x4; break; | ||
| 358 | case FEC_7_8: c->operand[18] = 0x5; break; | ||
| 359 | case FEC_8_9: c->operand[18] = 0x6; break; | ||
| 360 | case FEC_4_5: c->operand[18] = 0x8; break; | ||
| 361 | case FEC_AUTO: | ||
| 362 | default: c->operand[18] = 0x0; | ||
| 363 | } | ||
| 364 | |||
| 365 | switch (params->u.qam.modulation) { | ||
| 366 | case QAM_16: c->operand[19] = 0x08; break; | ||
| 367 | case QAM_32: c->operand[19] = 0x10; break; | ||
| 368 | case QAM_64: c->operand[19] = 0x18; break; | ||
| 369 | case QAM_128: c->operand[19] = 0x20; break; | ||
| 370 | case QAM_256: c->operand[19] = 0x28; break; | ||
| 371 | case QAM_AUTO: | ||
| 372 | default: c->operand[19] = 0x00; | ||
| 373 | } | ||
| 374 | |||
| 375 | c->operand[20] = 0x00; | ||
| 376 | c->operand[21] = 0x00; | ||
| 377 | /* Nr_of_dsd_sel_specs = 0 -> no PIDs are transmitted */ | ||
| 378 | c->operand[22] = 0x00; | ||
| 379 | |||
| 380 | c->length = 28; | ||
| 381 | } | ||
| 382 | |||
| 383 | static void avc_tuner_dsd_dvb_t(struct dvb_frontend_parameters *params, | ||
| 384 | struct avc_command_frame *c) | ||
| 385 | { | ||
| 386 | struct dvb_ofdm_parameters *ofdm = ¶ms->u.ofdm; | ||
| 387 | |||
| 388 | c->opcode = AVC_OPCODE_DSD; | ||
| 389 | |||
| 390 | c->operand[0] = 0; /* source plug */ | ||
| 391 | c->operand[1] = 0xd2; /* subfunction replace */ | ||
| 392 | c->operand[2] = 0x20; /* system id = DVB */ | ||
| 393 | c->operand[3] = 0x00; /* antenna number */ | ||
| 394 | c->operand[4] = 0x0c; /* system_specific_multiplex selection_length */ | ||
| 395 | |||
| 396 | /* multiplex_valid_flags, high byte */ | ||
| 397 | c->operand[5] = | ||
| 398 | 0 << 7 /* reserved */ | ||
| 399 | | 1 << 6 /* CenterFrequency */ | ||
| 400 | | (ofdm->bandwidth != BANDWIDTH_AUTO ? 1 << 5 : 0) | ||
| 401 | | (ofdm->constellation != QAM_AUTO ? 1 << 4 : 0) | ||
| 402 | | (ofdm->hierarchy_information != HIERARCHY_AUTO ? 1 << 3 : 0) | ||
| 403 | | (ofdm->code_rate_HP != FEC_AUTO ? 1 << 2 : 0) | ||
| 404 | | (ofdm->code_rate_LP != FEC_AUTO ? 1 << 1 : 0) | ||
| 405 | | (ofdm->guard_interval != GUARD_INTERVAL_AUTO ? 1 << 0 : 0); | ||
| 406 | |||
| 407 | /* multiplex_valid_flags, low byte */ | ||
| 408 | c->operand[6] = | ||
| 409 | 0 << 7 /* NetworkID */ | ||
| 410 | | (ofdm->transmission_mode != TRANSMISSION_MODE_AUTO ? 1 << 6 : 0) | ||
| 411 | | 0 << 5 /* OtherFrequencyFlag */ | ||
| 412 | | 0 << 0 /* reserved */ ; | ||
| 413 | |||
| 414 | c->operand[7] = 0x0; | ||
| 415 | c->operand[8] = (params->frequency / 10) >> 24; | ||
| 416 | c->operand[9] = ((params->frequency / 10) >> 16) & 0xff; | ||
| 417 | c->operand[10] = ((params->frequency / 10) >> 8) & 0xff; | ||
| 418 | c->operand[11] = (params->frequency / 10) & 0xff; | ||
| 419 | |||
| 420 | switch (ofdm->bandwidth) { | ||
| 421 | case BANDWIDTH_7_MHZ: c->operand[12] = 0x20; break; | ||
| 422 | case BANDWIDTH_8_MHZ: | ||
| 423 | case BANDWIDTH_6_MHZ: /* not defined by AVC spec */ | ||
| 424 | case BANDWIDTH_AUTO: | ||
| 425 | default: c->operand[12] = 0x00; | ||
| 426 | } | ||
| 427 | |||
| 428 | switch (ofdm->constellation) { | ||
| 429 | case QAM_16: c->operand[13] = 1 << 6; break; | ||
| 430 | case QAM_64: c->operand[13] = 2 << 6; break; | ||
| 431 | case QPSK: | ||
| 432 | default: c->operand[13] = 0x00; | ||
| 433 | } | ||
| 434 | |||
| 435 | switch (ofdm->hierarchy_information) { | ||
| 436 | case HIERARCHY_1: c->operand[13] |= 1 << 3; break; | ||
| 437 | case HIERARCHY_2: c->operand[13] |= 2 << 3; break; | ||
| 438 | case HIERARCHY_4: c->operand[13] |= 3 << 3; break; | ||
| 439 | case HIERARCHY_AUTO: | ||
| 440 | case HIERARCHY_NONE: | ||
| 441 | default: break; | ||
| 442 | } | ||
| 443 | |||
| 444 | switch (ofdm->code_rate_HP) { | ||
| 445 | case FEC_2_3: c->operand[13] |= 1; break; | ||
| 446 | case FEC_3_4: c->operand[13] |= 2; break; | ||
| 447 | case FEC_5_6: c->operand[13] |= 3; break; | ||
| 448 | case FEC_7_8: c->operand[13] |= 4; break; | ||
| 449 | case FEC_1_2: | ||
| 450 | default: break; | ||
| 451 | } | ||
| 452 | |||
| 453 | switch (ofdm->code_rate_LP) { | ||
| 454 | case FEC_2_3: c->operand[14] = 1 << 5; break; | ||
| 455 | case FEC_3_4: c->operand[14] = 2 << 5; break; | ||
| 456 | case FEC_5_6: c->operand[14] = 3 << 5; break; | ||
| 457 | case FEC_7_8: c->operand[14] = 4 << 5; break; | ||
| 458 | case FEC_1_2: | ||
| 459 | default: c->operand[14] = 0x00; break; | ||
| 460 | } | ||
| 461 | |||
| 462 | switch (ofdm->guard_interval) { | ||
| 463 | case GUARD_INTERVAL_1_16: c->operand[14] |= 1 << 3; break; | ||
| 464 | case GUARD_INTERVAL_1_8: c->operand[14] |= 2 << 3; break; | ||
| 465 | case GUARD_INTERVAL_1_4: c->operand[14] |= 3 << 3; break; | ||
| 466 | case GUARD_INTERVAL_1_32: | ||
| 467 | case GUARD_INTERVAL_AUTO: | ||
| 468 | default: break; | ||
| 469 | } | ||
| 470 | |||
| 471 | switch (ofdm->transmission_mode) { | ||
| 472 | case TRANSMISSION_MODE_8K: c->operand[14] |= 1 << 1; break; | ||
| 473 | case TRANSMISSION_MODE_2K: | ||
| 474 | case TRANSMISSION_MODE_AUTO: | ||
| 475 | default: break; | ||
| 476 | } | ||
| 477 | |||
| 478 | c->operand[15] = 0x00; /* network_ID[0] */ | ||
| 479 | c->operand[16] = 0x00; /* network_ID[1] */ | ||
| 480 | /* Nr_of_dsd_sel_specs = 0 -> no PIDs are transmitted */ | ||
| 481 | c->operand[17] = 0x00; | ||
| 482 | |||
| 483 | c->length = 24; | ||
| 484 | } | ||
| 485 | |||
| 486 | int avc_tuner_dsd(struct firedtv *fdtv, | ||
| 487 | struct dvb_frontend_parameters *params) | ||
| 488 | { | ||
| 489 | char buffer[sizeof(struct avc_command_frame)]; | ||
| 490 | struct avc_command_frame *c = (void *)buffer; | ||
| 491 | struct avc_response_frame *r = (void *)buffer; /* FIXME: unused */ | ||
| 492 | |||
| 493 | memset(c, 0, sizeof(*c)); | ||
| 494 | |||
| 495 | c->ctype = AVC_CTYPE_CONTROL; | ||
| 496 | c->subunit = AVC_SUBUNIT_TYPE_TUNER | fdtv->subunit; | ||
| 497 | |||
| 498 | switch (fdtv->type) { | ||
| 499 | case FIREDTV_DVB_S: | ||
| 500 | case FIREDTV_DVB_S2: avc_tuner_tuneqpsk(fdtv, params, c); break; | ||
| 501 | case FIREDTV_DVB_C: avc_tuner_dsd_dvb_c(params, c); break; | ||
| 502 | case FIREDTV_DVB_T: avc_tuner_dsd_dvb_t(params, c); break; | ||
| 503 | default: | ||
| 504 | BUG(); | ||
| 505 | } | ||
| 506 | |||
| 507 | if (avc_write(fdtv, c, r) < 0) | ||
| 508 | return -EIO; | ||
| 509 | |||
| 510 | msleep(500); | ||
| 511 | #if 0 | ||
| 512 | /* FIXME: */ | ||
| 513 | /* u8 *status was an out-parameter of avc_tuner_dsd, unused by caller */ | ||
| 514 | if (status) | ||
| 515 | *status = r->operand[2]; | ||
| 516 | #endif | ||
| 517 | return 0; | ||
| 518 | } | ||
| 519 | |||
| 520 | int avc_tuner_set_pids(struct firedtv *fdtv, unsigned char pidc, u16 pid[]) | ||
| 521 | { | ||
| 522 | char buffer[sizeof(struct avc_command_frame)]; | ||
| 523 | struct avc_command_frame *c = (void *)buffer; | ||
| 524 | struct avc_response_frame *r = (void *)buffer; /* FIXME: unused */ | ||
| 525 | int pos, k; | ||
| 526 | |||
| 527 | if (pidc > 16 && pidc != 0xff) | ||
| 528 | return -EINVAL; | ||
| 529 | |||
| 530 | memset(c, 0, sizeof(*c)); | ||
| 531 | |||
| 532 | c->ctype = AVC_CTYPE_CONTROL; | ||
| 533 | c->subunit = AVC_SUBUNIT_TYPE_TUNER | fdtv->subunit; | ||
| 534 | c->opcode = AVC_OPCODE_DSD; | ||
| 535 | |||
| 536 | c->operand[0] = 0; /* source plug */ | ||
| 537 | c->operand[1] = 0xd2; /* subfunction replace */ | ||
| 538 | c->operand[2] = 0x20; /* system id = DVB */ | ||
| 539 | c->operand[3] = 0x00; /* antenna number */ | ||
| 540 | c->operand[4] = 0x00; /* system_specific_multiplex selection_length */ | ||
| 541 | c->operand[5] = pidc; /* Nr_of_dsd_sel_specs */ | ||
| 542 | |||
| 543 | pos = 6; | ||
| 544 | if (pidc != 0xff) | ||
| 545 | for (k = 0; k < pidc; k++) { | ||
| 546 | c->operand[pos++] = 0x13; /* flowfunction relay */ | ||
| 547 | c->operand[pos++] = 0x80; /* dsd_sel_spec_valid_flags -> PID */ | ||
| 548 | c->operand[pos++] = (pid[k] >> 8) & 0x1f; | ||
| 549 | c->operand[pos++] = pid[k] & 0xff; | ||
| 550 | c->operand[pos++] = 0x00; /* tableID */ | ||
| 551 | c->operand[pos++] = 0x00; /* filter_length */ | ||
| 552 | } | ||
| 553 | |||
| 554 | c->length = ALIGN(3 + pos, 4); | ||
| 555 | |||
| 556 | if (avc_write(fdtv, c, r) < 0) | ||
| 557 | return -EIO; | ||
| 558 | |||
| 559 | msleep(50); | ||
| 560 | return 0; | ||
| 561 | } | ||
| 562 | |||
| 563 | int avc_tuner_get_ts(struct firedtv *fdtv) | ||
| 564 | { | ||
| 565 | char buffer[sizeof(struct avc_command_frame)]; | ||
| 566 | struct avc_command_frame *c = (void *)buffer; | ||
| 567 | struct avc_response_frame *r = (void *)buffer; /* FIXME: unused */ | ||
| 568 | int sl; | ||
| 569 | |||
| 570 | memset(c, 0, sizeof(*c)); | ||
| 571 | |||
| 572 | c->ctype = AVC_CTYPE_CONTROL; | ||
| 573 | c->subunit = AVC_SUBUNIT_TYPE_TUNER | fdtv->subunit; | ||
| 574 | c->opcode = AVC_OPCODE_DSIT; | ||
| 575 | |||
| 576 | sl = fdtv->type == FIREDTV_DVB_T ? 0x0c : 0x11; | ||
| 577 | |||
| 578 | c->operand[0] = 0; /* source plug */ | ||
| 579 | c->operand[1] = 0xd2; /* subfunction replace */ | ||
| 580 | c->operand[2] = 0xff; /* status */ | ||
| 581 | c->operand[3] = 0x20; /* system id = DVB */ | ||
| 582 | c->operand[4] = 0x00; /* antenna number */ | ||
| 583 | c->operand[5] = 0x0; /* system_specific_search_flags */ | ||
| 584 | c->operand[6] = sl; /* system_specific_multiplex selection_length */ | ||
| 585 | c->operand[7] = 0x00; /* valid_flags [0] */ | ||
| 586 | c->operand[8] = 0x00; /* valid_flags [1] */ | ||
| 587 | c->operand[7 + sl] = 0x00; /* nr_of_dsit_sel_specs (always 0) */ | ||
| 588 | |||
| 589 | c->length = fdtv->type == FIREDTV_DVB_T ? 24 : 28; | ||
| 590 | |||
| 591 | if (avc_write(fdtv, c, r) < 0) | ||
| 592 | return -EIO; | ||
| 593 | |||
| 594 | msleep(250); | ||
| 595 | return 0; | ||
| 596 | } | ||
| 597 | |||
| 598 | int avc_identify_subunit(struct firedtv *fdtv) | ||
| 599 | { | ||
| 600 | char buffer[sizeof(struct avc_command_frame)]; | ||
| 601 | struct avc_command_frame *c = (void *)buffer; | ||
| 602 | struct avc_response_frame *r = (void *)buffer; | ||
| 603 | |||
| 604 | memset(c, 0, sizeof(*c)); | ||
| 605 | |||
| 606 | c->ctype = AVC_CTYPE_CONTROL; | ||
| 607 | c->subunit = AVC_SUBUNIT_TYPE_TUNER | fdtv->subunit; | ||
| 608 | c->opcode = AVC_OPCODE_READ_DESCRIPTOR; | ||
| 609 | |||
| 610 | c->operand[0] = DESCRIPTOR_SUBUNIT_IDENTIFIER; | ||
| 611 | c->operand[1] = 0xff; | ||
| 612 | c->operand[2] = 0x00; | ||
| 613 | c->operand[3] = 0x00; /* length highbyte */ | ||
| 614 | c->operand[4] = 0x08; /* length lowbyte */ | ||
| 615 | c->operand[5] = 0x00; /* offset highbyte */ | ||
| 616 | c->operand[6] = 0x0d; /* offset lowbyte */ | ||
| 617 | |||
| 618 | c->length = 12; | ||
| 619 | |||
| 620 | if (avc_write(fdtv, c, r) < 0) | ||
| 621 | return -EIO; | ||
| 622 | |||
| 623 | if ((r->response != AVC_RESPONSE_STABLE && | ||
| 624 | r->response != AVC_RESPONSE_ACCEPTED) || | ||
| 625 | (r->operand[3] << 8) + r->operand[4] != 8) { | ||
| 626 | dev_err(fdtv->device, "cannot read subunit identifier\n"); | ||
| 627 | return -EINVAL; | ||
| 628 | } | ||
| 629 | return 0; | ||
| 630 | } | ||
| 631 | |||
| 632 | #define SIZEOF_ANTENNA_INPUT_INFO 22 | ||
| 633 | |||
| 634 | int avc_tuner_status(struct firedtv *fdtv, struct firedtv_tuner_status *stat) | ||
| 635 | { | ||
| 636 | char buffer[sizeof(struct avc_command_frame)]; | ||
| 637 | struct avc_command_frame *c = (void *)buffer; | ||
| 638 | struct avc_response_frame *r = (void *)buffer; | ||
| 639 | int length; | ||
| 640 | |||
| 641 | memset(c, 0, sizeof(*c)); | ||
| 642 | |||
| 643 | c->ctype = AVC_CTYPE_CONTROL; | ||
| 644 | c->subunit = AVC_SUBUNIT_TYPE_TUNER | fdtv->subunit; | ||
| 645 | c->opcode = AVC_OPCODE_READ_DESCRIPTOR; | ||
| 646 | |||
| 647 | c->operand[0] = DESCRIPTOR_TUNER_STATUS; | ||
| 648 | c->operand[1] = 0xff; /* read_result_status */ | ||
| 649 | c->operand[2] = 0x00; /* reserved */ | ||
| 650 | c->operand[3] = 0; /* SIZEOF_ANTENNA_INPUT_INFO >> 8; */ | ||
| 651 | c->operand[4] = 0; /* SIZEOF_ANTENNA_INPUT_INFO & 0xff; */ | ||
| 652 | c->operand[5] = 0x00; | ||
| 653 | c->operand[6] = 0x00; | ||
| 654 | |||
| 655 | c->length = 12; | ||
| 656 | |||
| 657 | if (avc_write(fdtv, c, r) < 0) | ||
| 658 | return -EIO; | ||
| 659 | |||
| 660 | if (r->response != AVC_RESPONSE_STABLE && | ||
| 661 | r->response != AVC_RESPONSE_ACCEPTED) { | ||
| 662 | dev_err(fdtv->device, "cannot read tuner status\n"); | ||
| 663 | return -EINVAL; | ||
| 664 | } | ||
| 665 | |||
| 666 | length = r->operand[9]; | ||
| 667 | if (r->operand[1] != 0x10 || length != SIZEOF_ANTENNA_INPUT_INFO) { | ||
| 668 | dev_err(fdtv->device, "got invalid tuner status\n"); | ||
| 669 | return -EINVAL; | ||
| 670 | } | ||
| 671 | |||
| 672 | stat->active_system = r->operand[10]; | ||
| 673 | stat->searching = r->operand[11] >> 7 & 1; | ||
| 674 | stat->moving = r->operand[11] >> 6 & 1; | ||
| 675 | stat->no_rf = r->operand[11] >> 5 & 1; | ||
| 676 | stat->input = r->operand[12] >> 7 & 1; | ||
| 677 | stat->selected_antenna = r->operand[12] & 0x7f; | ||
| 678 | stat->ber = r->operand[13] << 24 | | ||
| 679 | r->operand[14] << 16 | | ||
| 680 | r->operand[15] << 8 | | ||
| 681 | r->operand[16]; | ||
| 682 | stat->signal_strength = r->operand[17]; | ||
| 683 | stat->raster_frequency = r->operand[18] >> 6 & 2; | ||
| 684 | stat->rf_frequency = (r->operand[18] & 0x3f) << 16 | | ||
| 685 | r->operand[19] << 8 | | ||
| 686 | r->operand[20]; | ||
| 687 | stat->man_dep_info_length = r->operand[21]; | ||
| 688 | stat->front_end_error = r->operand[22] >> 4 & 1; | ||
| 689 | stat->antenna_error = r->operand[22] >> 3 & 1; | ||
| 690 | stat->front_end_power_status = r->operand[22] >> 1 & 1; | ||
| 691 | stat->power_supply = r->operand[22] & 1; | ||
| 692 | stat->carrier_noise_ratio = r->operand[23] << 8 | | ||
| 693 | r->operand[24]; | ||
| 694 | stat->power_supply_voltage = r->operand[27]; | ||
| 695 | stat->antenna_voltage = r->operand[28]; | ||
| 696 | stat->firewire_bus_voltage = r->operand[29]; | ||
| 697 | stat->ca_mmi = r->operand[30] & 1; | ||
| 698 | stat->ca_pmt_reply = r->operand[31] >> 7 & 1; | ||
| 699 | stat->ca_date_time_request = r->operand[31] >> 6 & 1; | ||
| 700 | stat->ca_application_info = r->operand[31] >> 5 & 1; | ||
| 701 | stat->ca_module_present_status = r->operand[31] >> 4 & 1; | ||
| 702 | stat->ca_dvb_flag = r->operand[31] >> 3 & 1; | ||
| 703 | stat->ca_error_flag = r->operand[31] >> 2 & 1; | ||
| 704 | stat->ca_initialization_status = r->operand[31] >> 1 & 1; | ||
| 705 | |||
| 706 | return 0; | ||
| 707 | } | ||
| 708 | |||
| 709 | int avc_lnb_control(struct firedtv *fdtv, char voltage, char burst, | ||
| 710 | char conttone, char nrdiseq, | ||
| 711 | struct dvb_diseqc_master_cmd *diseqcmd) | ||
| 712 | { | ||
| 713 | char buffer[sizeof(struct avc_command_frame)]; | ||
| 714 | struct avc_command_frame *c = (void *)buffer; | ||
| 715 | struct avc_response_frame *r = (void *)buffer; | ||
| 716 | int i, j, k; | ||
| 717 | |||
| 718 | memset(c, 0, sizeof(*c)); | ||
| 719 | |||
| 720 | c->ctype = AVC_CTYPE_CONTROL; | ||
| 721 | c->subunit = AVC_SUBUNIT_TYPE_TUNER | fdtv->subunit; | ||
| 722 | c->opcode = AVC_OPCODE_VENDOR; | ||
| 723 | |||
| 724 | c->operand[0] = SFE_VENDOR_DE_COMPANYID_0; | ||
| 725 | c->operand[1] = SFE_VENDOR_DE_COMPANYID_1; | ||
| 726 | c->operand[2] = SFE_VENDOR_DE_COMPANYID_2; | ||
| 727 | c->operand[3] = SFE_VENDOR_OPCODE_LNB_CONTROL; | ||
| 728 | |||
| 729 | c->operand[4] = voltage; | ||
| 730 | c->operand[5] = nrdiseq; | ||
| 731 | |||
| 732 | i = 6; | ||
| 733 | |||
| 734 | for (j = 0; j < nrdiseq; j++) { | ||
| 735 | c->operand[i++] = diseqcmd[j].msg_len; | ||
| 736 | |||
| 737 | for (k = 0; k < diseqcmd[j].msg_len; k++) | ||
| 738 | c->operand[i++] = diseqcmd[j].msg[k]; | ||
| 739 | } | ||
| 740 | |||
| 741 | c->operand[i++] = burst; | ||
| 742 | c->operand[i++] = conttone; | ||
| 743 | |||
| 744 | c->length = ALIGN(3 + i, 4); | ||
| 745 | |||
| 746 | if (avc_write(fdtv, c, r) < 0) | ||
| 747 | return -EIO; | ||
| 748 | |||
| 749 | if (r->response != AVC_RESPONSE_ACCEPTED) { | ||
| 750 | dev_err(fdtv->device, "LNB control failed\n"); | ||
| 751 | return -EINVAL; | ||
| 752 | } | ||
| 753 | |||
| 754 | return 0; | ||
| 755 | } | ||
| 756 | |||
| 757 | int avc_register_remote_control(struct firedtv *fdtv) | ||
| 758 | { | ||
| 759 | char buffer[sizeof(struct avc_command_frame)]; | ||
| 760 | struct avc_command_frame *c = (void *)buffer; | ||
| 761 | |||
| 762 | memset(c, 0, sizeof(*c)); | ||
| 763 | |||
| 764 | c->ctype = AVC_CTYPE_NOTIFY; | ||
| 765 | c->subunit = AVC_SUBUNIT_TYPE_UNIT | 7; | ||
| 766 | c->opcode = AVC_OPCODE_VENDOR; | ||
| 767 | |||
| 768 | c->operand[0] = SFE_VENDOR_DE_COMPANYID_0; | ||
| 769 | c->operand[1] = SFE_VENDOR_DE_COMPANYID_1; | ||
| 770 | c->operand[2] = SFE_VENDOR_DE_COMPANYID_2; | ||
| 771 | c->operand[3] = SFE_VENDOR_OPCODE_REGISTER_REMOTE_CONTROL; | ||
| 772 | |||
| 773 | c->length = 8; | ||
| 774 | |||
| 775 | return avc_write(fdtv, c, NULL); | ||
| 776 | } | ||
| 777 | |||
| 778 | void avc_remote_ctrl_work(struct work_struct *work) | ||
| 779 | { | ||
| 780 | struct firedtv *fdtv = | ||
| 781 | container_of(work, struct firedtv, remote_ctrl_work); | ||
| 782 | |||
| 783 | /* Should it be rescheduled in failure cases? */ | ||
| 784 | avc_register_remote_control(fdtv); | ||
| 785 | } | ||
| 786 | |||
| 787 | #if 0 /* FIXME: unused */ | ||
| 788 | int avc_tuner_host2ca(struct firedtv *fdtv) | ||
| 789 | { | ||
| 790 | char buffer[sizeof(struct avc_command_frame)]; | ||
| 791 | struct avc_command_frame *c = (void *)buffer; | ||
| 792 | struct avc_response_frame *r = (void *)buffer; /* FIXME: unused */ | ||
| 793 | |||
| 794 | memset(c, 0, sizeof(*c)); | ||
| 795 | |||
| 796 | c->ctype = AVC_CTYPE_CONTROL; | ||
| 797 | c->subunit = AVC_SUBUNIT_TYPE_TUNER | fdtv->subunit; | ||
| 798 | c->opcode = AVC_OPCODE_VENDOR; | ||
| 799 | |||
| 800 | c->operand[0] = SFE_VENDOR_DE_COMPANYID_0; | ||
| 801 | c->operand[1] = SFE_VENDOR_DE_COMPANYID_1; | ||
| 802 | c->operand[2] = SFE_VENDOR_DE_COMPANYID_2; | ||
| 803 | c->operand[3] = SFE_VENDOR_OPCODE_HOST2CA; | ||
| 804 | c->operand[4] = 0; /* slot */ | ||
| 805 | c->operand[5] = SFE_VENDOR_TAG_CA_APPLICATION_INFO; /* ca tag */ | ||
| 806 | c->operand[6] = 0; /* more/last */ | ||
| 807 | c->operand[7] = 0; /* length */ | ||
| 808 | |||
| 809 | c->length = 12; | ||
| 810 | |||
| 811 | if (avc_write(fdtv, c, r) < 0) | ||
| 812 | return -EIO; | ||
| 813 | |||
| 814 | return 0; | ||
| 815 | } | ||
| 816 | #endif | ||
| 817 | |||
| 818 | static int get_ca_object_pos(struct avc_response_frame *r) | ||
| 819 | { | ||
| 820 | int length = 1; | ||
| 821 | |||
| 822 | /* Check length of length field */ | ||
| 823 | if (r->operand[7] & 0x80) | ||
| 824 | length = (r->operand[7] & 0x7f) + 1; | ||
| 825 | return length + 7; | ||
| 826 | } | ||
| 827 | |||
| 828 | static int get_ca_object_length(struct avc_response_frame *r) | ||
| 829 | { | ||
| 830 | #if 0 /* FIXME: unused */ | ||
| 831 | int size = 0; | ||
| 832 | int i; | ||
| 833 | |||
| 834 | if (r->operand[7] & 0x80) | ||
| 835 | for (i = 0; i < (r->operand[7] & 0x7f); i++) { | ||
| 836 | size <<= 8; | ||
| 837 | size += r->operand[8 + i]; | ||
| 838 | } | ||
| 839 | #endif | ||
| 840 | return r->operand[7]; | ||
| 841 | } | ||
| 842 | |||
| 843 | int avc_ca_app_info(struct firedtv *fdtv, char *app_info, unsigned int *len) | ||
| 844 | { | ||
| 845 | char buffer[sizeof(struct avc_command_frame)]; | ||
| 846 | struct avc_command_frame *c = (void *)buffer; | ||
| 847 | struct avc_response_frame *r = (void *)buffer; | ||
| 848 | int pos; | ||
| 849 | |||
| 850 | memset(c, 0, sizeof(*c)); | ||
| 851 | |||
| 852 | c->ctype = AVC_CTYPE_STATUS; | ||
| 853 | c->subunit = AVC_SUBUNIT_TYPE_TUNER | fdtv->subunit; | ||
| 854 | c->opcode = AVC_OPCODE_VENDOR; | ||
| 855 | |||
| 856 | c->operand[0] = SFE_VENDOR_DE_COMPANYID_0; | ||
| 857 | c->operand[1] = SFE_VENDOR_DE_COMPANYID_1; | ||
| 858 | c->operand[2] = SFE_VENDOR_DE_COMPANYID_2; | ||
| 859 | c->operand[3] = SFE_VENDOR_OPCODE_CA2HOST; | ||
| 860 | c->operand[4] = 0; /* slot */ | ||
| 861 | c->operand[5] = SFE_VENDOR_TAG_CA_APPLICATION_INFO; /* ca tag */ | ||
| 862 | |||
| 863 | c->length = 12; | ||
| 864 | |||
| 865 | if (avc_write(fdtv, c, r) < 0) | ||
| 866 | return -EIO; | ||
| 867 | |||
| 868 | /* FIXME: check response code and validate response data */ | ||
| 869 | |||
| 870 | pos = get_ca_object_pos(r); | ||
| 871 | app_info[0] = (EN50221_TAG_APP_INFO >> 16) & 0xff; | ||
| 872 | app_info[1] = (EN50221_TAG_APP_INFO >> 8) & 0xff; | ||
| 873 | app_info[2] = (EN50221_TAG_APP_INFO >> 0) & 0xff; | ||
| 874 | app_info[3] = 6 + r->operand[pos + 4]; | ||
| 875 | app_info[4] = 0x01; | ||
| 876 | memcpy(&app_info[5], &r->operand[pos], 5 + r->operand[pos + 4]); | ||
| 877 | *len = app_info[3] + 4; | ||
| 878 | |||
| 879 | return 0; | ||
| 880 | } | ||
| 881 | |||
| 882 | int avc_ca_info(struct firedtv *fdtv, char *app_info, unsigned int *len) | ||
| 883 | { | ||
| 884 | char buffer[sizeof(struct avc_command_frame)]; | ||
| 885 | struct avc_command_frame *c = (void *)buffer; | ||
| 886 | struct avc_response_frame *r = (void *)buffer; | ||
| 887 | int pos; | ||
| 888 | |||
| 889 | memset(c, 0, sizeof(*c)); | ||
| 890 | |||
| 891 | c->ctype = AVC_CTYPE_STATUS; | ||
| 892 | c->subunit = AVC_SUBUNIT_TYPE_TUNER | fdtv->subunit; | ||
| 893 | c->opcode = AVC_OPCODE_VENDOR; | ||
| 894 | |||
| 895 | c->operand[0] = SFE_VENDOR_DE_COMPANYID_0; | ||
| 896 | c->operand[1] = SFE_VENDOR_DE_COMPANYID_1; | ||
| 897 | c->operand[2] = SFE_VENDOR_DE_COMPANYID_2; | ||
| 898 | c->operand[3] = SFE_VENDOR_OPCODE_CA2HOST; | ||
| 899 | c->operand[4] = 0; /* slot */ | ||
| 900 | c->operand[5] = SFE_VENDOR_TAG_CA_APPLICATION_INFO; /* ca tag */ | ||
| 901 | |||
| 902 | c->length = 12; | ||
| 903 | |||
| 904 | if (avc_write(fdtv, c, r) < 0) | ||
| 905 | return -EIO; | ||
| 906 | |||
| 907 | pos = get_ca_object_pos(r); | ||
| 908 | app_info[0] = (EN50221_TAG_CA_INFO >> 16) & 0xff; | ||
| 909 | app_info[1] = (EN50221_TAG_CA_INFO >> 8) & 0xff; | ||
| 910 | app_info[2] = (EN50221_TAG_CA_INFO >> 0) & 0xff; | ||
| 911 | app_info[3] = 2; | ||
| 912 | app_info[4] = r->operand[pos + 0]; | ||
| 913 | app_info[5] = r->operand[pos + 1]; | ||
| 914 | *len = app_info[3] + 4; | ||
| 915 | |||
| 916 | return 0; | ||
| 917 | } | ||
| 918 | |||
| 919 | int avc_ca_reset(struct firedtv *fdtv) | ||
| 920 | { | ||
| 921 | char buffer[sizeof(struct avc_command_frame)]; | ||
| 922 | struct avc_command_frame *c = (void *)buffer; | ||
| 923 | struct avc_response_frame *r = (void *)buffer; /* FIXME: unused */ | ||
| 924 | |||
| 925 | memset(c, 0, sizeof(*c)); | ||
| 926 | |||
| 927 | c->ctype = AVC_CTYPE_CONTROL; | ||
| 928 | c->subunit = AVC_SUBUNIT_TYPE_TUNER | fdtv->subunit; | ||
| 929 | c->opcode = AVC_OPCODE_VENDOR; | ||
| 930 | |||
| 931 | c->operand[0] = SFE_VENDOR_DE_COMPANYID_0; | ||
| 932 | c->operand[1] = SFE_VENDOR_DE_COMPANYID_1; | ||
| 933 | c->operand[2] = SFE_VENDOR_DE_COMPANYID_2; | ||
| 934 | c->operand[3] = SFE_VENDOR_OPCODE_HOST2CA; | ||
| 935 | c->operand[4] = 0; /* slot */ | ||
| 936 | c->operand[5] = SFE_VENDOR_TAG_CA_RESET; /* ca tag */ | ||
| 937 | c->operand[6] = 0; /* more/last */ | ||
| 938 | c->operand[7] = 1; /* length */ | ||
| 939 | c->operand[8] = 0; /* force hardware reset */ | ||
| 940 | |||
| 941 | c->length = 12; | ||
| 942 | |||
| 943 | if (avc_write(fdtv, c, r) < 0) | ||
| 944 | return -EIO; | ||
| 945 | |||
| 946 | return 0; | ||
| 947 | } | ||
| 948 | |||
| 949 | int avc_ca_pmt(struct firedtv *fdtv, char *msg, int length) | ||
| 950 | { | ||
| 951 | char buffer[sizeof(struct avc_command_frame)]; | ||
| 952 | struct avc_command_frame *c = (void *)buffer; | ||
| 953 | struct avc_response_frame *r = (void *)buffer; | ||
| 954 | int list_management; | ||
| 955 | int program_info_length; | ||
| 956 | int pmt_cmd_id; | ||
| 957 | int read_pos; | ||
| 958 | int write_pos; | ||
| 959 | int es_info_length; | ||
| 960 | int crc32_csum; | ||
| 961 | |||
| 962 | memset(c, 0, sizeof(*c)); | ||
| 963 | |||
| 964 | c->ctype = AVC_CTYPE_CONTROL; | ||
| 965 | c->subunit = AVC_SUBUNIT_TYPE_TUNER | fdtv->subunit; | ||
| 966 | c->opcode = AVC_OPCODE_VENDOR; | ||
| 967 | |||
| 968 | if (msg[0] != EN50221_LIST_MANAGEMENT_ONLY) { | ||
| 969 | dev_info(fdtv->device, "forcing list_management to ONLY\n"); | ||
| 970 | msg[0] = EN50221_LIST_MANAGEMENT_ONLY; | ||
| 971 | } | ||
| 972 | /* We take the cmd_id from the programme level only! */ | ||
| 973 | list_management = msg[0]; | ||
| 974 | program_info_length = ((msg[4] & 0x0f) << 8) + msg[5]; | ||
| 975 | if (program_info_length > 0) | ||
| 976 | program_info_length--; /* Remove pmt_cmd_id */ | ||
| 977 | pmt_cmd_id = msg[6]; | ||
| 978 | |||
| 979 | c->operand[0] = SFE_VENDOR_DE_COMPANYID_0; | ||
| 980 | c->operand[1] = SFE_VENDOR_DE_COMPANYID_1; | ||
| 981 | c->operand[2] = SFE_VENDOR_DE_COMPANYID_2; | ||
| 982 | c->operand[3] = SFE_VENDOR_OPCODE_HOST2CA; | ||
| 983 | c->operand[4] = 0; /* slot */ | ||
| 984 | c->operand[5] = SFE_VENDOR_TAG_CA_PMT; /* ca tag */ | ||
| 985 | c->operand[6] = 0; /* more/last */ | ||
| 986 | /* c->operand[7] = XXXprogram_info_length + 17; */ /* length */ | ||
| 987 | c->operand[8] = list_management; | ||
| 988 | c->operand[9] = 0x01; /* pmt_cmd=OK_descramble */ | ||
| 989 | |||
| 990 | /* TS program map table */ | ||
| 991 | |||
| 992 | c->operand[10] = 0x02; /* Table id=2 */ | ||
| 993 | c->operand[11] = 0x80; /* Section syntax + length */ | ||
| 994 | /* c->operand[12] = XXXprogram_info_length + 12; */ | ||
| 995 | c->operand[13] = msg[1]; /* Program number */ | ||
| 996 | c->operand[14] = msg[2]; | ||
| 997 | c->operand[15] = 0x01; /* Version number=0 + current/next=1 */ | ||
| 998 | c->operand[16] = 0x00; /* Section number=0 */ | ||
| 999 | c->operand[17] = 0x00; /* Last section number=0 */ | ||
| 1000 | c->operand[18] = 0x1f; /* PCR_PID=1FFF */ | ||
| 1001 | c->operand[19] = 0xff; | ||
| 1002 | c->operand[20] = (program_info_length >> 8); /* Program info length */ | ||
| 1003 | c->operand[21] = (program_info_length & 0xff); | ||
| 1004 | |||
| 1005 | /* CA descriptors at programme level */ | ||
| 1006 | read_pos = 6; | ||
| 1007 | write_pos = 22; | ||
| 1008 | if (program_info_length > 0) { | ||
| 1009 | pmt_cmd_id = msg[read_pos++]; | ||
| 1010 | if (pmt_cmd_id != 1 && pmt_cmd_id != 4) | ||
| 1011 | dev_err(fdtv->device, | ||
| 1012 | "invalid pmt_cmd_id %d\n", pmt_cmd_id); | ||
| 1013 | |||
| 1014 | memcpy(&c->operand[write_pos], &msg[read_pos], | ||
| 1015 | program_info_length); | ||
| 1016 | read_pos += program_info_length; | ||
| 1017 | write_pos += program_info_length; | ||
| 1018 | } | ||
| 1019 | while (read_pos < length) { | ||
| 1020 | c->operand[write_pos++] = msg[read_pos++]; | ||
| 1021 | c->operand[write_pos++] = msg[read_pos++]; | ||
| 1022 | c->operand[write_pos++] = msg[read_pos++]; | ||
| 1023 | es_info_length = | ||
| 1024 | ((msg[read_pos] & 0x0f) << 8) + msg[read_pos + 1]; | ||
| 1025 | read_pos += 2; | ||
| 1026 | if (es_info_length > 0) | ||
| 1027 | es_info_length--; /* Remove pmt_cmd_id */ | ||
| 1028 | c->operand[write_pos++] = es_info_length >> 8; | ||
| 1029 | c->operand[write_pos++] = es_info_length & 0xff; | ||
| 1030 | if (es_info_length > 0) { | ||
| 1031 | pmt_cmd_id = msg[read_pos++]; | ||
| 1032 | if (pmt_cmd_id != 1 && pmt_cmd_id != 4) | ||
| 1033 | dev_err(fdtv->device, "invalid pmt_cmd_id %d " | ||
| 1034 | "at stream level\n", pmt_cmd_id); | ||
| 1035 | |||
| 1036 | memcpy(&c->operand[write_pos], &msg[read_pos], | ||
| 1037 | es_info_length); | ||
| 1038 | read_pos += es_info_length; | ||
| 1039 | write_pos += es_info_length; | ||
| 1040 | } | ||
| 1041 | } | ||
| 1042 | |||
| 1043 | /* CRC */ | ||
| 1044 | c->operand[write_pos++] = 0x00; | ||
| 1045 | c->operand[write_pos++] = 0x00; | ||
| 1046 | c->operand[write_pos++] = 0x00; | ||
| 1047 | c->operand[write_pos++] = 0x00; | ||
| 1048 | |||
| 1049 | c->operand[7] = write_pos - 8; | ||
| 1050 | c->operand[12] = write_pos - 13; | ||
| 1051 | |||
| 1052 | crc32_csum = crc32_be(0, &c->operand[10], c->operand[12] - 1); | ||
| 1053 | c->operand[write_pos - 4] = (crc32_csum >> 24) & 0xff; | ||
| 1054 | c->operand[write_pos - 3] = (crc32_csum >> 16) & 0xff; | ||
| 1055 | c->operand[write_pos - 2] = (crc32_csum >> 8) & 0xff; | ||
| 1056 | c->operand[write_pos - 1] = (crc32_csum >> 0) & 0xff; | ||
| 1057 | |||
| 1058 | c->length = ALIGN(3 + write_pos, 4); | ||
| 1059 | |||
| 1060 | if (avc_write(fdtv, c, r) < 0) | ||
| 1061 | return -EIO; | ||
| 1062 | |||
| 1063 | if (r->response != AVC_RESPONSE_ACCEPTED) { | ||
| 1064 | dev_err(fdtv->device, | ||
| 1065 | "CA PMT failed with response 0x%x\n", r->response); | ||
| 1066 | return -EFAULT; | ||
| 1067 | } | ||
| 1068 | |||
| 1069 | return 0; | ||
| 1070 | } | ||
| 1071 | |||
| 1072 | int avc_ca_get_time_date(struct firedtv *fdtv, int *interval) | ||
| 1073 | { | ||
| 1074 | char buffer[sizeof(struct avc_command_frame)]; | ||
| 1075 | struct avc_command_frame *c = (void *)buffer; | ||
| 1076 | struct avc_response_frame *r = (void *)buffer; | ||
| 1077 | |||
| 1078 | memset(c, 0, sizeof(*c)); | ||
| 1079 | |||
| 1080 | c->ctype = AVC_CTYPE_STATUS; | ||
| 1081 | c->subunit = AVC_SUBUNIT_TYPE_TUNER | fdtv->subunit; | ||
| 1082 | c->opcode = AVC_OPCODE_VENDOR; | ||
| 1083 | |||
| 1084 | c->operand[0] = SFE_VENDOR_DE_COMPANYID_0; | ||
| 1085 | c->operand[1] = SFE_VENDOR_DE_COMPANYID_1; | ||
| 1086 | c->operand[2] = SFE_VENDOR_DE_COMPANYID_2; | ||
| 1087 | c->operand[3] = SFE_VENDOR_OPCODE_CA2HOST; | ||
| 1088 | c->operand[4] = 0; /* slot */ | ||
| 1089 | c->operand[5] = SFE_VENDOR_TAG_CA_DATE_TIME; /* ca tag */ | ||
| 1090 | c->operand[6] = 0; /* more/last */ | ||
| 1091 | c->operand[7] = 0; /* length */ | ||
| 1092 | |||
| 1093 | c->length = 12; | ||
| 1094 | |||
| 1095 | if (avc_write(fdtv, c, r) < 0) | ||
| 1096 | return -EIO; | ||
| 1097 | |||
| 1098 | /* FIXME: check response code and validate response data */ | ||
| 1099 | |||
| 1100 | *interval = r->operand[get_ca_object_pos(r)]; | ||
| 1101 | |||
| 1102 | return 0; | ||
| 1103 | } | ||
| 1104 | |||
| 1105 | int avc_ca_enter_menu(struct firedtv *fdtv) | ||
| 1106 | { | ||
| 1107 | char buffer[sizeof(struct avc_command_frame)]; | ||
| 1108 | struct avc_command_frame *c = (void *)buffer; | ||
| 1109 | struct avc_response_frame *r = (void *)buffer; /* FIXME: unused */ | ||
| 1110 | |||
| 1111 | memset(c, 0, sizeof(*c)); | ||
| 1112 | |||
| 1113 | c->ctype = AVC_CTYPE_STATUS; | ||
| 1114 | c->subunit = AVC_SUBUNIT_TYPE_TUNER | fdtv->subunit; | ||
| 1115 | c->opcode = AVC_OPCODE_VENDOR; | ||
| 1116 | |||
| 1117 | c->operand[0] = SFE_VENDOR_DE_COMPANYID_0; | ||
| 1118 | c->operand[1] = SFE_VENDOR_DE_COMPANYID_1; | ||
| 1119 | c->operand[2] = SFE_VENDOR_DE_COMPANYID_2; | ||
| 1120 | c->operand[3] = SFE_VENDOR_OPCODE_HOST2CA; | ||
| 1121 | c->operand[4] = 0; /* slot */ | ||
| 1122 | c->operand[5] = SFE_VENDOR_TAG_CA_ENTER_MENU; | ||
| 1123 | c->operand[6] = 0; /* more/last */ | ||
| 1124 | c->operand[7] = 0; /* length */ | ||
| 1125 | |||
| 1126 | c->length = 12; | ||
| 1127 | |||
| 1128 | if (avc_write(fdtv, c, r) < 0) | ||
| 1129 | return -EIO; | ||
| 1130 | |||
| 1131 | return 0; | ||
| 1132 | } | ||
| 1133 | |||
| 1134 | int avc_ca_get_mmi(struct firedtv *fdtv, char *mmi_object, unsigned int *len) | ||
| 1135 | { | ||
| 1136 | char buffer[sizeof(struct avc_command_frame)]; | ||
| 1137 | struct avc_command_frame *c = (void *)buffer; | ||
| 1138 | struct avc_response_frame *r = (void *)buffer; | ||
| 1139 | |||
| 1140 | memset(c, 0, sizeof(*c)); | ||
| 1141 | |||
| 1142 | c->ctype = AVC_CTYPE_STATUS; | ||
| 1143 | c->subunit = AVC_SUBUNIT_TYPE_TUNER | fdtv->subunit; | ||
| 1144 | c->opcode = AVC_OPCODE_VENDOR; | ||
| 1145 | |||
| 1146 | c->operand[0] = SFE_VENDOR_DE_COMPANYID_0; | ||
| 1147 | c->operand[1] = SFE_VENDOR_DE_COMPANYID_1; | ||
| 1148 | c->operand[2] = SFE_VENDOR_DE_COMPANYID_2; | ||
| 1149 | c->operand[3] = SFE_VENDOR_OPCODE_CA2HOST; | ||
| 1150 | c->operand[4] = 0; /* slot */ | ||
| 1151 | c->operand[5] = SFE_VENDOR_TAG_CA_MMI; | ||
| 1152 | c->operand[6] = 0; /* more/last */ | ||
| 1153 | c->operand[7] = 0; /* length */ | ||
| 1154 | |||
| 1155 | c->length = 12; | ||
| 1156 | |||
| 1157 | if (avc_write(fdtv, c, r) < 0) | ||
| 1158 | return -EIO; | ||
| 1159 | |||
| 1160 | /* FIXME: check response code and validate response data */ | ||
| 1161 | |||
| 1162 | *len = get_ca_object_length(r); | ||
| 1163 | memcpy(mmi_object, &r->operand[get_ca_object_pos(r)], *len); | ||
| 1164 | |||
| 1165 | return 0; | ||
| 1166 | } | ||
| 1167 | |||
| 1168 | #define CMP_OUTPUT_PLUG_CONTROL_REG_0 0xfffff0000904ULL | ||
| 1169 | |||
| 1170 | static int cmp_read(struct firedtv *fdtv, void *buf, u64 addr, size_t len) | ||
| 1171 | { | ||
| 1172 | int ret; | ||
| 1173 | |||
| 1174 | if (mutex_lock_interruptible(&fdtv->avc_mutex)) | ||
| 1175 | return -EINTR; | ||
| 1176 | |||
| 1177 | ret = fdtv->backend->read(fdtv, addr, buf, len); | ||
| 1178 | if (ret < 0) | ||
| 1179 | dev_err(fdtv->device, "CMP: read I/O error\n"); | ||
| 1180 | |||
| 1181 | mutex_unlock(&fdtv->avc_mutex); | ||
| 1182 | return ret; | ||
| 1183 | } | ||
| 1184 | |||
| 1185 | static int cmp_lock(struct firedtv *fdtv, void *data, u64 addr, __be32 arg) | ||
| 1186 | { | ||
| 1187 | int ret; | ||
| 1188 | |||
| 1189 | if (mutex_lock_interruptible(&fdtv->avc_mutex)) | ||
| 1190 | return -EINTR; | ||
| 1191 | |||
| 1192 | ret = fdtv->backend->lock(fdtv, addr, data, arg); | ||
| 1193 | if (ret < 0) | ||
| 1194 | dev_err(fdtv->device, "CMP: lock I/O error\n"); | ||
| 1195 | |||
| 1196 | mutex_unlock(&fdtv->avc_mutex); | ||
| 1197 | return ret; | ||
| 1198 | } | ||
| 1199 | |||
| 1200 | static inline u32 get_opcr(__be32 opcr, u32 mask, u32 shift) | ||
| 1201 | { | ||
| 1202 | return (be32_to_cpu(opcr) >> shift) & mask; | ||
| 1203 | } | ||
| 1204 | |||
| 1205 | static inline void set_opcr(__be32 *opcr, u32 value, u32 mask, u32 shift) | ||
| 1206 | { | ||
| 1207 | *opcr &= ~cpu_to_be32(mask << shift); | ||
| 1208 | *opcr |= cpu_to_be32((value & mask) << shift); | ||
| 1209 | } | ||
| 1210 | |||
| 1211 | #define get_opcr_online(v) get_opcr((v), 0x1, 31) | ||
| 1212 | #define get_opcr_p2p_connections(v) get_opcr((v), 0x3f, 24) | ||
| 1213 | #define get_opcr_channel(v) get_opcr((v), 0x3f, 16) | ||
| 1214 | |||
| 1215 | #define set_opcr_p2p_connections(p, v) set_opcr((p), (v), 0x3f, 24) | ||
| 1216 | #define set_opcr_channel(p, v) set_opcr((p), (v), 0x3f, 16) | ||
| 1217 | #define set_opcr_data_rate(p, v) set_opcr((p), (v), 0x3, 14) | ||
| 1218 | #define set_opcr_overhead_id(p, v) set_opcr((p), (v), 0xf, 10) | ||
| 1219 | |||
| 1220 | int cmp_establish_pp_connection(struct firedtv *fdtv, int plug, int channel) | ||
| 1221 | { | ||
| 1222 | __be32 old_opcr, opcr; | ||
| 1223 | u64 opcr_address = CMP_OUTPUT_PLUG_CONTROL_REG_0 + (plug << 2); | ||
| 1224 | int attempts = 0; | ||
| 1225 | int ret; | ||
| 1226 | |||
| 1227 | ret = cmp_read(fdtv, &opcr, opcr_address, 4); | ||
| 1228 | if (ret < 0) | ||
| 1229 | return ret; | ||
| 1230 | |||
| 1231 | repeat: | ||
| 1232 | if (!get_opcr_online(opcr)) { | ||
| 1233 | dev_err(fdtv->device, "CMP: output offline\n"); | ||
| 1234 | return -EBUSY; | ||
| 1235 | } | ||
| 1236 | |||
| 1237 | old_opcr = opcr; | ||
| 1238 | |||
| 1239 | if (get_opcr_p2p_connections(opcr)) { | ||
| 1240 | if (get_opcr_channel(opcr) != channel) { | ||
| 1241 | dev_err(fdtv->device, "CMP: cannot change channel\n"); | ||
| 1242 | return -EBUSY; | ||
| 1243 | } | ||
| 1244 | dev_info(fdtv->device, "CMP: overlaying connection\n"); | ||
| 1245 | |||
| 1246 | /* We don't allocate isochronous resources. */ | ||
| 1247 | } else { | ||
| 1248 | set_opcr_channel(&opcr, channel); | ||
| 1249 | set_opcr_data_rate(&opcr, 2); /* S400 */ | ||
| 1250 | |||
| 1251 | /* FIXME: this is for the worst case - optimize */ | ||
| 1252 | set_opcr_overhead_id(&opcr, 0); | ||
| 1253 | |||
| 1254 | /* | ||
| 1255 | * FIXME: allocate isochronous channel and bandwidth at IRM | ||
| 1256 | * fdtv->backend->alloc_resources(fdtv, channels_mask, bw); | ||
| 1257 | */ | ||
| 1258 | } | ||
| 1259 | |||
| 1260 | set_opcr_p2p_connections(&opcr, get_opcr_p2p_connections(opcr) + 1); | ||
| 1261 | |||
| 1262 | ret = cmp_lock(fdtv, &opcr, opcr_address, old_opcr); | ||
| 1263 | if (ret < 0) | ||
| 1264 | return ret; | ||
| 1265 | |||
| 1266 | if (old_opcr != opcr) { | ||
| 1267 | /* | ||
| 1268 | * FIXME: if old_opcr.P2P_Connections > 0, | ||
| 1269 | * deallocate isochronous channel and bandwidth at IRM | ||
| 1270 | * if (...) | ||
| 1271 | * fdtv->backend->dealloc_resources(fdtv, channel, bw); | ||
| 1272 | */ | ||
| 1273 | |||
| 1274 | if (++attempts < 6) /* arbitrary limit */ | ||
| 1275 | goto repeat; | ||
| 1276 | return -EBUSY; | ||
| 1277 | } | ||
| 1278 | |||
| 1279 | return 0; | ||
| 1280 | } | ||
| 1281 | |||
| 1282 | void cmp_break_pp_connection(struct firedtv *fdtv, int plug, int channel) | ||
| 1283 | { | ||
| 1284 | __be32 old_opcr, opcr; | ||
| 1285 | u64 opcr_address = CMP_OUTPUT_PLUG_CONTROL_REG_0 + (plug << 2); | ||
| 1286 | int attempts = 0; | ||
| 1287 | |||
| 1288 | if (cmp_read(fdtv, &opcr, opcr_address, 4) < 0) | ||
| 1289 | return; | ||
| 1290 | |||
| 1291 | repeat: | ||
| 1292 | if (!get_opcr_online(opcr) || !get_opcr_p2p_connections(opcr) || | ||
| 1293 | get_opcr_channel(opcr) != channel) { | ||
| 1294 | dev_err(fdtv->device, "CMP: no connection to break\n"); | ||
| 1295 | return; | ||
| 1296 | } | ||
| 1297 | |||
| 1298 | old_opcr = opcr; | ||
| 1299 | set_opcr_p2p_connections(&opcr, get_opcr_p2p_connections(opcr) - 1); | ||
| 1300 | |||
| 1301 | if (cmp_lock(fdtv, &opcr, opcr_address, old_opcr) < 0) | ||
| 1302 | return; | ||
| 1303 | |||
| 1304 | if (old_opcr != opcr) { | ||
| 1305 | /* | ||
| 1306 | * FIXME: if old_opcr.P2P_Connections == 1, i.e. we were last | ||
| 1307 | * owner, deallocate isochronous channel and bandwidth at IRM | ||
| 1308 | * if (...) | ||
| 1309 | * fdtv->backend->dealloc_resources(fdtv, channel, bw); | ||
| 1310 | */ | ||
| 1311 | |||
| 1312 | if (++attempts < 6) /* arbitrary limit */ | ||
| 1313 | goto repeat; | ||
| 1314 | } | ||
| 1315 | } | ||
diff --git a/drivers/media/dvb/firewire/firedtv-ci.c b/drivers/media/dvb/firewire/firedtv-ci.c new file mode 100644 index 000000000000..eeb80d0ea3ff --- /dev/null +++ b/drivers/media/dvb/firewire/firedtv-ci.c | |||
| @@ -0,0 +1,260 @@ | |||
| 1 | /* | ||
| 2 | * FireDTV driver (formerly known as FireSAT) | ||
| 3 | * | ||
| 4 | * Copyright (C) 2004 Andreas Monitzer <andy@monitzer.com> | ||
| 5 | * Copyright (C) 2008 Henrik Kurelid <henrik@kurelid.se> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or | ||
| 8 | * modify it under the terms of the GNU General Public License as | ||
| 9 | * published by the Free Software Foundation; either version 2 of | ||
| 10 | * the License, or (at your option) any later version. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #include <linux/device.h> | ||
| 14 | #include <linux/dvb/ca.h> | ||
| 15 | #include <linux/fs.h> | ||
| 16 | #include <linux/module.h> | ||
| 17 | |||
| 18 | #include <dvbdev.h> | ||
| 19 | |||
| 20 | #include "firedtv.h" | ||
| 21 | |||
| 22 | #define EN50221_TAG_APP_INFO_ENQUIRY 0x9f8020 | ||
| 23 | #define EN50221_TAG_CA_INFO_ENQUIRY 0x9f8030 | ||
| 24 | #define EN50221_TAG_CA_PMT 0x9f8032 | ||
| 25 | #define EN50221_TAG_ENTER_MENU 0x9f8022 | ||
| 26 | |||
| 27 | static int fdtv_ca_ready(struct firedtv_tuner_status *stat) | ||
| 28 | { | ||
| 29 | return stat->ca_initialization_status == 1 && | ||
| 30 | stat->ca_error_flag == 0 && | ||
| 31 | stat->ca_dvb_flag == 1 && | ||
| 32 | stat->ca_module_present_status == 1; | ||
| 33 | } | ||
| 34 | |||
| 35 | static int fdtv_get_ca_flags(struct firedtv_tuner_status *stat) | ||
| 36 | { | ||
| 37 | int flags = 0; | ||
| 38 | |||
| 39 | if (stat->ca_module_present_status == 1) | ||
| 40 | flags |= CA_CI_MODULE_PRESENT; | ||
| 41 | if (stat->ca_initialization_status == 1 && | ||
| 42 | stat->ca_error_flag == 0 && | ||
| 43 | stat->ca_dvb_flag == 1) | ||
| 44 | flags |= CA_CI_MODULE_READY; | ||
| 45 | return flags; | ||
| 46 | } | ||
| 47 | |||
| 48 | static int fdtv_ca_reset(struct firedtv *fdtv) | ||
| 49 | { | ||
| 50 | return avc_ca_reset(fdtv) ? -EFAULT : 0; | ||
| 51 | } | ||
| 52 | |||
| 53 | static int fdtv_ca_get_caps(void *arg) | ||
| 54 | { | ||
| 55 | struct ca_caps *cap = arg; | ||
| 56 | |||
| 57 | cap->slot_num = 1; | ||
| 58 | cap->slot_type = CA_CI; | ||
| 59 | cap->descr_num = 1; | ||
| 60 | cap->descr_type = CA_ECD; | ||
| 61 | return 0; | ||
| 62 | } | ||
| 63 | |||
| 64 | static int fdtv_ca_get_slot_info(struct firedtv *fdtv, void *arg) | ||
| 65 | { | ||
| 66 | struct firedtv_tuner_status stat; | ||
| 67 | struct ca_slot_info *slot = arg; | ||
| 68 | |||
| 69 | if (avc_tuner_status(fdtv, &stat)) | ||
| 70 | return -EFAULT; | ||
| 71 | |||
| 72 | if (slot->num != 0) | ||
| 73 | return -EFAULT; | ||
| 74 | |||
| 75 | slot->type = CA_CI; | ||
| 76 | slot->flags = fdtv_get_ca_flags(&stat); | ||
| 77 | return 0; | ||
| 78 | } | ||
| 79 | |||
| 80 | static int fdtv_ca_app_info(struct firedtv *fdtv, void *arg) | ||
| 81 | { | ||
| 82 | struct ca_msg *reply = arg; | ||
| 83 | |||
| 84 | return avc_ca_app_info(fdtv, reply->msg, &reply->length) ? -EFAULT : 0; | ||
| 85 | } | ||
| 86 | |||
| 87 | static int fdtv_ca_info(struct firedtv *fdtv, void *arg) | ||
| 88 | { | ||
| 89 | struct ca_msg *reply = arg; | ||
| 90 | |||
| 91 | return avc_ca_info(fdtv, reply->msg, &reply->length) ? -EFAULT : 0; | ||
| 92 | } | ||
| 93 | |||
| 94 | static int fdtv_ca_get_mmi(struct firedtv *fdtv, void *arg) | ||
| 95 | { | ||
| 96 | struct ca_msg *reply = arg; | ||
| 97 | |||
| 98 | return avc_ca_get_mmi(fdtv, reply->msg, &reply->length) ? -EFAULT : 0; | ||
| 99 | } | ||
| 100 | |||
| 101 | static int fdtv_ca_get_msg(struct firedtv *fdtv, void *arg) | ||
| 102 | { | ||
| 103 | struct firedtv_tuner_status stat; | ||
| 104 | int err; | ||
| 105 | |||
| 106 | switch (fdtv->ca_last_command) { | ||
| 107 | case EN50221_TAG_APP_INFO_ENQUIRY: | ||
| 108 | err = fdtv_ca_app_info(fdtv, arg); | ||
| 109 | break; | ||
| 110 | case EN50221_TAG_CA_INFO_ENQUIRY: | ||
| 111 | err = fdtv_ca_info(fdtv, arg); | ||
| 112 | break; | ||
| 113 | default: | ||
| 114 | if (avc_tuner_status(fdtv, &stat)) | ||
| 115 | err = -EFAULT; | ||
| 116 | else if (stat.ca_mmi == 1) | ||
| 117 | err = fdtv_ca_get_mmi(fdtv, arg); | ||
| 118 | else { | ||
| 119 | dev_info(fdtv->device, "unhandled CA message 0x%08x\n", | ||
| 120 | fdtv->ca_last_command); | ||
| 121 | err = -EFAULT; | ||
| 122 | } | ||
| 123 | } | ||
| 124 | fdtv->ca_last_command = 0; | ||
| 125 | return err; | ||
| 126 | } | ||
| 127 | |||
| 128 | static int fdtv_ca_pmt(struct firedtv *fdtv, void *arg) | ||
| 129 | { | ||
| 130 | struct ca_msg *msg = arg; | ||
| 131 | int data_pos; | ||
| 132 | int data_length; | ||
| 133 | int i; | ||
| 134 | |||
| 135 | data_pos = 4; | ||
| 136 | if (msg->msg[3] & 0x80) { | ||
| 137 | data_length = 0; | ||
| 138 | for (i = 0; i < (msg->msg[3] & 0x7f); i++) | ||
| 139 | data_length = (data_length << 8) + msg->msg[data_pos++]; | ||
| 140 | } else { | ||
| 141 | data_length = msg->msg[3]; | ||
| 142 | } | ||
| 143 | |||
| 144 | return avc_ca_pmt(fdtv, &msg->msg[data_pos], data_length) ? -EFAULT : 0; | ||
| 145 | } | ||
| 146 | |||
| 147 | static int fdtv_ca_send_msg(struct firedtv *fdtv, void *arg) | ||
| 148 | { | ||
| 149 | struct ca_msg *msg = arg; | ||
| 150 | int err; | ||
| 151 | |||
| 152 | /* Do we need a semaphore for this? */ | ||
| 153 | fdtv->ca_last_command = | ||
| 154 | (msg->msg[0] << 16) + (msg->msg[1] << 8) + msg->msg[2]; | ||
| 155 | switch (fdtv->ca_last_command) { | ||
| 156 | case EN50221_TAG_CA_PMT: | ||
| 157 | err = fdtv_ca_pmt(fdtv, arg); | ||
| 158 | break; | ||
| 159 | case EN50221_TAG_APP_INFO_ENQUIRY: | ||
| 160 | /* handled in ca_get_msg */ | ||
| 161 | err = 0; | ||
| 162 | break; | ||
| 163 | case EN50221_TAG_CA_INFO_ENQUIRY: | ||
| 164 | /* handled in ca_get_msg */ | ||
| 165 | err = 0; | ||
| 166 | break; | ||
| 167 | case EN50221_TAG_ENTER_MENU: | ||
| 168 | err = avc_ca_enter_menu(fdtv); | ||
| 169 | break; | ||
| 170 | default: | ||
| 171 | dev_err(fdtv->device, "unhandled CA message 0x%08x\n", | ||
| 172 | fdtv->ca_last_command); | ||
| 173 | err = -EFAULT; | ||
| 174 | } | ||
| 175 | return err; | ||
| 176 | } | ||
| 177 | |||
| 178 | static int fdtv_ca_ioctl(struct inode *inode, struct file *file, | ||
| 179 | unsigned int cmd, void *arg) | ||
| 180 | { | ||
| 181 | struct dvb_device *dvbdev = file->private_data; | ||
| 182 | struct firedtv *fdtv = dvbdev->priv; | ||
| 183 | struct firedtv_tuner_status stat; | ||
| 184 | int err; | ||
| 185 | |||
| 186 | switch (cmd) { | ||
| 187 | case CA_RESET: | ||
| 188 | err = fdtv_ca_reset(fdtv); | ||
| 189 | break; | ||
| 190 | case CA_GET_CAP: | ||
| 191 | err = fdtv_ca_get_caps(arg); | ||
| 192 | break; | ||
| 193 | case CA_GET_SLOT_INFO: | ||
| 194 | err = fdtv_ca_get_slot_info(fdtv, arg); | ||
| 195 | break; | ||
| 196 | case CA_GET_MSG: | ||
| 197 | err = fdtv_ca_get_msg(fdtv, arg); | ||
| 198 | break; | ||
| 199 | case CA_SEND_MSG: | ||
| 200 | err = fdtv_ca_send_msg(fdtv, arg); | ||
| 201 | break; | ||
| 202 | default: | ||
| 203 | dev_info(fdtv->device, "unhandled CA ioctl %u\n", cmd); | ||
| 204 | err = -EOPNOTSUPP; | ||
| 205 | } | ||
| 206 | |||
| 207 | /* FIXME Is this necessary? */ | ||
| 208 | avc_tuner_status(fdtv, &stat); | ||
| 209 | |||
| 210 | return err; | ||
| 211 | } | ||
| 212 | |||
| 213 | static unsigned int fdtv_ca_io_poll(struct file *file, poll_table *wait) | ||
| 214 | { | ||
| 215 | return POLLIN; | ||
| 216 | } | ||
| 217 | |||
| 218 | static struct file_operations fdtv_ca_fops = { | ||
| 219 | .owner = THIS_MODULE, | ||
| 220 | .ioctl = dvb_generic_ioctl, | ||
| 221 | .open = dvb_generic_open, | ||
| 222 | .release = dvb_generic_release, | ||
| 223 | .poll = fdtv_ca_io_poll, | ||
| 224 | }; | ||
| 225 | |||
| 226 | static struct dvb_device fdtv_ca = { | ||
| 227 | .users = 1, | ||
| 228 | .readers = 1, | ||
| 229 | .writers = 1, | ||
| 230 | .fops = &fdtv_ca_fops, | ||
| 231 | .kernel_ioctl = fdtv_ca_ioctl, | ||
| 232 | }; | ||
| 233 | |||
| 234 | int fdtv_ca_register(struct firedtv *fdtv) | ||
| 235 | { | ||
| 236 | struct firedtv_tuner_status stat; | ||
| 237 | int err; | ||
| 238 | |||
| 239 | if (avc_tuner_status(fdtv, &stat)) | ||
| 240 | return -EINVAL; | ||
| 241 | |||
| 242 | if (!fdtv_ca_ready(&stat)) | ||
| 243 | return -EFAULT; | ||
| 244 | |||
| 245 | err = dvb_register_device(&fdtv->adapter, &fdtv->cadev, | ||
| 246 | &fdtv_ca, fdtv, DVB_DEVICE_CA); | ||
| 247 | |||
| 248 | if (stat.ca_application_info == 0) | ||
| 249 | dev_err(fdtv->device, "CaApplicationInfo is not set\n"); | ||
| 250 | if (stat.ca_date_time_request == 1) | ||
| 251 | avc_ca_get_time_date(fdtv, &fdtv->ca_time_interval); | ||
| 252 | |||
| 253 | return err; | ||
| 254 | } | ||
| 255 | |||
| 256 | void fdtv_ca_release(struct firedtv *fdtv) | ||
| 257 | { | ||
| 258 | if (fdtv->cadev) | ||
| 259 | dvb_unregister_device(fdtv->cadev); | ||
| 260 | } | ||
diff --git a/drivers/media/dvb/firewire/firedtv-dvb.c b/drivers/media/dvb/firewire/firedtv-dvb.c new file mode 100644 index 000000000000..9d308dd32a5c --- /dev/null +++ b/drivers/media/dvb/firewire/firedtv-dvb.c | |||
| @@ -0,0 +1,364 @@ | |||
| 1 | /* | ||
| 2 | * FireDTV driver (formerly known as FireSAT) | ||
| 3 | * | ||
| 4 | * Copyright (C) 2004 Andreas Monitzer <andy@monitzer.com> | ||
| 5 | * Copyright (C) 2008 Henrik Kurelid <henrik@kurelid.se> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or | ||
| 8 | * modify it under the terms of the GNU General Public License as | ||
| 9 | * published by the Free Software Foundation; either version 2 of | ||
| 10 | * the License, or (at your option) any later version. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #include <linux/bitops.h> | ||
| 14 | #include <linux/device.h> | ||
| 15 | #include <linux/errno.h> | ||
| 16 | #include <linux/kernel.h> | ||
| 17 | #include <linux/mod_devicetable.h> | ||
| 18 | #include <linux/module.h> | ||
| 19 | #include <linux/mutex.h> | ||
| 20 | #include <linux/slab.h> | ||
| 21 | #include <linux/string.h> | ||
| 22 | #include <linux/types.h> | ||
| 23 | #include <linux/wait.h> | ||
| 24 | #include <linux/workqueue.h> | ||
| 25 | |||
| 26 | #include <dmxdev.h> | ||
| 27 | #include <dvb_demux.h> | ||
| 28 | #include <dvbdev.h> | ||
| 29 | #include <dvb_frontend.h> | ||
| 30 | |||
| 31 | #include "firedtv.h" | ||
| 32 | |||
| 33 | static int alloc_channel(struct firedtv *fdtv) | ||
| 34 | { | ||
| 35 | int i; | ||
| 36 | |||
| 37 | for (i = 0; i < 16; i++) | ||
| 38 | if (!__test_and_set_bit(i, &fdtv->channel_active)) | ||
| 39 | break; | ||
| 40 | return i; | ||
| 41 | } | ||
| 42 | |||
| 43 | static void collect_channels(struct firedtv *fdtv, int *pidc, u16 pid[]) | ||
| 44 | { | ||
| 45 | int i, n; | ||
| 46 | |||
| 47 | for (i = 0, n = 0; i < 16; i++) | ||
| 48 | if (test_bit(i, &fdtv->channel_active)) | ||
| 49 | pid[n++] = fdtv->channel_pid[i]; | ||
| 50 | *pidc = n; | ||
| 51 | } | ||
| 52 | |||
| 53 | static inline void dealloc_channel(struct firedtv *fdtv, int i) | ||
| 54 | { | ||
| 55 | __clear_bit(i, &fdtv->channel_active); | ||
| 56 | } | ||
| 57 | |||
| 58 | int fdtv_start_feed(struct dvb_demux_feed *dvbdmxfeed) | ||
| 59 | { | ||
| 60 | struct firedtv *fdtv = dvbdmxfeed->demux->priv; | ||
| 61 | int pidc, c, ret; | ||
| 62 | u16 pids[16]; | ||
| 63 | |||
| 64 | switch (dvbdmxfeed->type) { | ||
| 65 | case DMX_TYPE_TS: | ||
| 66 | case DMX_TYPE_SEC: | ||
| 67 | break; | ||
| 68 | default: | ||
| 69 | dev_err(fdtv->device, "can't start dmx feed: invalid type %u\n", | ||
| 70 | dvbdmxfeed->type); | ||
| 71 | return -EINVAL; | ||
| 72 | } | ||
| 73 | |||
| 74 | if (mutex_lock_interruptible(&fdtv->demux_mutex)) | ||
| 75 | return -EINTR; | ||
| 76 | |||
| 77 | if (dvbdmxfeed->type == DMX_TYPE_TS) { | ||
| 78 | switch (dvbdmxfeed->pes_type) { | ||
| 79 | case DMX_TS_PES_VIDEO: | ||
| 80 | case DMX_TS_PES_AUDIO: | ||
| 81 | case DMX_TS_PES_TELETEXT: | ||
| 82 | case DMX_TS_PES_PCR: | ||
| 83 | case DMX_TS_PES_OTHER: | ||
| 84 | c = alloc_channel(fdtv); | ||
| 85 | break; | ||
| 86 | default: | ||
| 87 | dev_err(fdtv->device, | ||
| 88 | "can't start dmx feed: invalid pes type %u\n", | ||
| 89 | dvbdmxfeed->pes_type); | ||
| 90 | ret = -EINVAL; | ||
| 91 | goto out; | ||
| 92 | } | ||
| 93 | } else { | ||
| 94 | c = alloc_channel(fdtv); | ||
| 95 | } | ||
| 96 | |||
| 97 | if (c > 15) { | ||
| 98 | dev_err(fdtv->device, "can't start dmx feed: busy\n"); | ||
| 99 | ret = -EBUSY; | ||
| 100 | goto out; | ||
| 101 | } | ||
| 102 | |||
| 103 | dvbdmxfeed->priv = (typeof(dvbdmxfeed->priv))(unsigned long)c; | ||
| 104 | fdtv->channel_pid[c] = dvbdmxfeed->pid; | ||
| 105 | collect_channels(fdtv, &pidc, pids); | ||
| 106 | |||
| 107 | if (dvbdmxfeed->pid == 8192) { | ||
| 108 | ret = avc_tuner_get_ts(fdtv); | ||
| 109 | if (ret) { | ||
| 110 | dealloc_channel(fdtv, c); | ||
| 111 | dev_err(fdtv->device, "can't get TS\n"); | ||
| 112 | goto out; | ||
| 113 | } | ||
| 114 | } else { | ||
| 115 | ret = avc_tuner_set_pids(fdtv, pidc, pids); | ||
| 116 | if (ret) { | ||
| 117 | dealloc_channel(fdtv, c); | ||
| 118 | dev_err(fdtv->device, "can't set PIDs\n"); | ||
| 119 | goto out; | ||
| 120 | } | ||
| 121 | } | ||
| 122 | out: | ||
| 123 | mutex_unlock(&fdtv->demux_mutex); | ||
| 124 | |||
| 125 | return ret; | ||
| 126 | } | ||
| 127 | |||
| 128 | int fdtv_stop_feed(struct dvb_demux_feed *dvbdmxfeed) | ||
| 129 | { | ||
| 130 | struct dvb_demux *demux = dvbdmxfeed->demux; | ||
| 131 | struct firedtv *fdtv = demux->priv; | ||
| 132 | int pidc, c, ret; | ||
| 133 | u16 pids[16]; | ||
| 134 | |||
| 135 | if (dvbdmxfeed->type == DMX_TYPE_TS && | ||
| 136 | !((dvbdmxfeed->ts_type & TS_PACKET) && | ||
| 137 | (demux->dmx.frontend->source != DMX_MEMORY_FE))) { | ||
| 138 | |||
| 139 | if (dvbdmxfeed->ts_type & TS_DECODER) { | ||
| 140 | if (dvbdmxfeed->pes_type >= DMX_TS_PES_OTHER || | ||
| 141 | !demux->pesfilter[dvbdmxfeed->pes_type]) | ||
| 142 | return -EINVAL; | ||
| 143 | |||
| 144 | demux->pids[dvbdmxfeed->pes_type] |= 0x8000; | ||
| 145 | demux->pesfilter[dvbdmxfeed->pes_type] = NULL; | ||
| 146 | } | ||
| 147 | |||
| 148 | if (!(dvbdmxfeed->ts_type & TS_DECODER && | ||
| 149 | dvbdmxfeed->pes_type < DMX_TS_PES_OTHER)) | ||
| 150 | return 0; | ||
| 151 | } | ||
| 152 | |||
| 153 | if (mutex_lock_interruptible(&fdtv->demux_mutex)) | ||
| 154 | return -EINTR; | ||
| 155 | |||
| 156 | c = (unsigned long)dvbdmxfeed->priv; | ||
| 157 | dealloc_channel(fdtv, c); | ||
| 158 | collect_channels(fdtv, &pidc, pids); | ||
| 159 | |||
| 160 | ret = avc_tuner_set_pids(fdtv, pidc, pids); | ||
| 161 | |||
| 162 | mutex_unlock(&fdtv->demux_mutex); | ||
| 163 | |||
| 164 | return ret; | ||
| 165 | } | ||
| 166 | |||
| 167 | DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); | ||
| 168 | |||
| 169 | int fdtv_dvb_register(struct firedtv *fdtv) | ||
| 170 | { | ||
| 171 | int err; | ||
| 172 | |||
| 173 | err = dvb_register_adapter(&fdtv->adapter, fdtv_model_names[fdtv->type], | ||
| 174 | THIS_MODULE, fdtv->device, adapter_nr); | ||
| 175 | if (err < 0) | ||
| 176 | goto fail_log; | ||
| 177 | |||
| 178 | /*DMX_TS_FILTERING | DMX_SECTION_FILTERING*/ | ||
| 179 | fdtv->demux.dmx.capabilities = 0; | ||
| 180 | |||
| 181 | fdtv->demux.priv = fdtv; | ||
| 182 | fdtv->demux.filternum = 16; | ||
| 183 | fdtv->demux.feednum = 16; | ||
| 184 | fdtv->demux.start_feed = fdtv_start_feed; | ||
| 185 | fdtv->demux.stop_feed = fdtv_stop_feed; | ||
| 186 | fdtv->demux.write_to_decoder = NULL; | ||
| 187 | |||
| 188 | err = dvb_dmx_init(&fdtv->demux); | ||
| 189 | if (err) | ||
| 190 | goto fail_unreg_adapter; | ||
| 191 | |||
| 192 | fdtv->dmxdev.filternum = 16; | ||
| 193 | fdtv->dmxdev.demux = &fdtv->demux.dmx; | ||
| 194 | fdtv->dmxdev.capabilities = 0; | ||
| 195 | |||
| 196 | err = dvb_dmxdev_init(&fdtv->dmxdev, &fdtv->adapter); | ||
| 197 | if (err) | ||
| 198 | goto fail_dmx_release; | ||
| 199 | |||
| 200 | fdtv->frontend.source = DMX_FRONTEND_0; | ||
| 201 | |||
| 202 | err = fdtv->demux.dmx.add_frontend(&fdtv->demux.dmx, &fdtv->frontend); | ||
| 203 | if (err) | ||
| 204 | goto fail_dmxdev_release; | ||
| 205 | |||
| 206 | err = fdtv->demux.dmx.connect_frontend(&fdtv->demux.dmx, | ||
| 207 | &fdtv->frontend); | ||
| 208 | if (err) | ||
| 209 | goto fail_rem_frontend; | ||
| 210 | |||
| 211 | dvb_net_init(&fdtv->adapter, &fdtv->dvbnet, &fdtv->demux.dmx); | ||
| 212 | |||
| 213 | fdtv_frontend_init(fdtv); | ||
| 214 | err = dvb_register_frontend(&fdtv->adapter, &fdtv->fe); | ||
| 215 | if (err) | ||
| 216 | goto fail_net_release; | ||
| 217 | |||
| 218 | err = fdtv_ca_register(fdtv); | ||
| 219 | if (err) | ||
| 220 | dev_info(fdtv->device, | ||
| 221 | "Conditional Access Module not enabled\n"); | ||
| 222 | return 0; | ||
| 223 | |||
| 224 | fail_net_release: | ||
| 225 | dvb_net_release(&fdtv->dvbnet); | ||
| 226 | fdtv->demux.dmx.close(&fdtv->demux.dmx); | ||
| 227 | fail_rem_frontend: | ||
| 228 | fdtv->demux.dmx.remove_frontend(&fdtv->demux.dmx, &fdtv->frontend); | ||
| 229 | fail_dmxdev_release: | ||
| 230 | dvb_dmxdev_release(&fdtv->dmxdev); | ||
| 231 | fail_dmx_release: | ||
| 232 | dvb_dmx_release(&fdtv->demux); | ||
| 233 | fail_unreg_adapter: | ||
| 234 | dvb_unregister_adapter(&fdtv->adapter); | ||
| 235 | fail_log: | ||
| 236 | dev_err(fdtv->device, "DVB initialization failed\n"); | ||
| 237 | return err; | ||
| 238 | } | ||
| 239 | |||
| 240 | void fdtv_dvb_unregister(struct firedtv *fdtv) | ||
| 241 | { | ||
| 242 | fdtv_ca_release(fdtv); | ||
| 243 | dvb_unregister_frontend(&fdtv->fe); | ||
| 244 | dvb_net_release(&fdtv->dvbnet); | ||
| 245 | fdtv->demux.dmx.close(&fdtv->demux.dmx); | ||
| 246 | fdtv->demux.dmx.remove_frontend(&fdtv->demux.dmx, &fdtv->frontend); | ||
| 247 | dvb_dmxdev_release(&fdtv->dmxdev); | ||
| 248 | dvb_dmx_release(&fdtv->demux); | ||
| 249 | dvb_unregister_adapter(&fdtv->adapter); | ||
| 250 | } | ||
| 251 | |||
| 252 | const char *fdtv_model_names[] = { | ||
| 253 | [FIREDTV_UNKNOWN] = "unknown type", | ||
| 254 | [FIREDTV_DVB_S] = "FireDTV S/CI", | ||
| 255 | [FIREDTV_DVB_C] = "FireDTV C/CI", | ||
| 256 | [FIREDTV_DVB_T] = "FireDTV T/CI", | ||
| 257 | [FIREDTV_DVB_S2] = "FireDTV S2 ", | ||
| 258 | }; | ||
| 259 | |||
| 260 | struct firedtv *fdtv_alloc(struct device *dev, | ||
| 261 | const struct firedtv_backend *backend, | ||
| 262 | const char *name, size_t name_len) | ||
| 263 | { | ||
| 264 | struct firedtv *fdtv; | ||
| 265 | int i; | ||
| 266 | |||
| 267 | fdtv = kzalloc(sizeof(*fdtv), GFP_KERNEL); | ||
| 268 | if (!fdtv) | ||
| 269 | return NULL; | ||
| 270 | |||
| 271 | dev->driver_data = fdtv; | ||
| 272 | fdtv->device = dev; | ||
| 273 | fdtv->isochannel = -1; | ||
| 274 | fdtv->voltage = 0xff; | ||
| 275 | fdtv->tone = 0xff; | ||
| 276 | fdtv->backend = backend; | ||
| 277 | |||
| 278 | mutex_init(&fdtv->avc_mutex); | ||
| 279 | init_waitqueue_head(&fdtv->avc_wait); | ||
| 280 | fdtv->avc_reply_received = true; | ||
| 281 | mutex_init(&fdtv->demux_mutex); | ||
| 282 | INIT_WORK(&fdtv->remote_ctrl_work, avc_remote_ctrl_work); | ||
| 283 | |||
| 284 | for (i = ARRAY_SIZE(fdtv_model_names); --i; ) | ||
| 285 | if (strlen(fdtv_model_names[i]) <= name_len && | ||
| 286 | strncmp(name, fdtv_model_names[i], name_len) == 0) | ||
| 287 | break; | ||
| 288 | fdtv->type = i; | ||
| 289 | |||
| 290 | return fdtv; | ||
| 291 | } | ||
| 292 | |||
| 293 | #define MATCH_FLAGS (IEEE1394_MATCH_VENDOR_ID | IEEE1394_MATCH_MODEL_ID | \ | ||
| 294 | IEEE1394_MATCH_SPECIFIER_ID | IEEE1394_MATCH_VERSION) | ||
| 295 | |||
| 296 | #define DIGITAL_EVERYWHERE_OUI 0x001287 | ||
| 297 | #define AVC_UNIT_SPEC_ID_ENTRY 0x00a02d | ||
| 298 | #define AVC_SW_VERSION_ENTRY 0x010001 | ||
| 299 | |||
| 300 | static struct ieee1394_device_id fdtv_id_table[] = { | ||
| 301 | { | ||
| 302 | /* FloppyDTV S/CI and FloppyDTV S2 */ | ||
| 303 | .match_flags = MATCH_FLAGS, | ||
| 304 | .vendor_id = DIGITAL_EVERYWHERE_OUI, | ||
| 305 | .model_id = 0x000024, | ||
| 306 | .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, | ||
| 307 | .version = AVC_SW_VERSION_ENTRY, | ||
| 308 | }, { | ||
| 309 | /* FloppyDTV T/CI */ | ||
| 310 | .match_flags = MATCH_FLAGS, | ||
| 311 | .vendor_id = DIGITAL_EVERYWHERE_OUI, | ||
| 312 | .model_id = 0x000025, | ||
| 313 | .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, | ||
| 314 | .version = AVC_SW_VERSION_ENTRY, | ||
| 315 | }, { | ||
| 316 | /* FloppyDTV C/CI */ | ||
| 317 | .match_flags = MATCH_FLAGS, | ||
| 318 | .vendor_id = DIGITAL_EVERYWHERE_OUI, | ||
| 319 | .model_id = 0x000026, | ||
| 320 | .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, | ||
| 321 | .version = AVC_SW_VERSION_ENTRY, | ||
| 322 | }, { | ||
| 323 | /* FireDTV S/CI and FloppyDTV S2 */ | ||
| 324 | .match_flags = MATCH_FLAGS, | ||
| 325 | .vendor_id = DIGITAL_EVERYWHERE_OUI, | ||
| 326 | .model_id = 0x000034, | ||
| 327 | .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, | ||
| 328 | .version = AVC_SW_VERSION_ENTRY, | ||
| 329 | }, { | ||
| 330 | /* FireDTV T/CI */ | ||
| 331 | .match_flags = MATCH_FLAGS, | ||
| 332 | .vendor_id = DIGITAL_EVERYWHERE_OUI, | ||
| 333 | .model_id = 0x000035, | ||
| 334 | .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, | ||
| 335 | .version = AVC_SW_VERSION_ENTRY, | ||
| 336 | }, { | ||
| 337 | /* FireDTV C/CI */ | ||
| 338 | .match_flags = MATCH_FLAGS, | ||
| 339 | .vendor_id = DIGITAL_EVERYWHERE_OUI, | ||
| 340 | .model_id = 0x000036, | ||
| 341 | .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, | ||
| 342 | .version = AVC_SW_VERSION_ENTRY, | ||
| 343 | }, {} | ||
| 344 | }; | ||
| 345 | MODULE_DEVICE_TABLE(ieee1394, fdtv_id_table); | ||
| 346 | |||
| 347 | static int __init fdtv_init(void) | ||
| 348 | { | ||
| 349 | return fdtv_1394_init(fdtv_id_table); | ||
| 350 | } | ||
| 351 | |||
| 352 | static void __exit fdtv_exit(void) | ||
| 353 | { | ||
| 354 | fdtv_1394_exit(); | ||
| 355 | } | ||
| 356 | |||
| 357 | module_init(fdtv_init); | ||
| 358 | module_exit(fdtv_exit); | ||
| 359 | |||
| 360 | MODULE_AUTHOR("Andreas Monitzer <andy@monitzer.com>"); | ||
| 361 | MODULE_AUTHOR("Ben Backx <ben@bbackx.com>"); | ||
| 362 | MODULE_DESCRIPTION("FireDTV DVB Driver"); | ||
| 363 | MODULE_LICENSE("GPL"); | ||
| 364 | MODULE_SUPPORTED_DEVICE("FireDTV DVB"); | ||
diff --git a/drivers/media/dvb/firewire/firedtv-fe.c b/drivers/media/dvb/firewire/firedtv-fe.c new file mode 100644 index 000000000000..7ba43630a25d --- /dev/null +++ b/drivers/media/dvb/firewire/firedtv-fe.c | |||
| @@ -0,0 +1,247 @@ | |||
| 1 | /* | ||
| 2 | * FireDTV driver (formerly known as FireSAT) | ||
| 3 | * | ||
| 4 | * Copyright (C) 2004 Andreas Monitzer <andy@monitzer.com> | ||
| 5 | * Copyright (C) 2008 Henrik Kurelid <henrik@kurelid.se> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or | ||
| 8 | * modify it under the terms of the GNU General Public License as | ||
| 9 | * published by the Free Software Foundation; either version 2 of | ||
| 10 | * the License, or (at your option) any later version. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #include <linux/device.h> | ||
| 14 | #include <linux/errno.h> | ||
| 15 | #include <linux/kernel.h> | ||
| 16 | #include <linux/string.h> | ||
| 17 | #include <linux/types.h> | ||
| 18 | |||
| 19 | #include <dvb_frontend.h> | ||
| 20 | |||
| 21 | #include "firedtv.h" | ||
| 22 | |||
| 23 | static int fdtv_dvb_init(struct dvb_frontend *fe) | ||
| 24 | { | ||
| 25 | struct firedtv *fdtv = fe->sec_priv; | ||
| 26 | int err; | ||
| 27 | |||
| 28 | /* FIXME - allocate free channel at IRM */ | ||
| 29 | fdtv->isochannel = fdtv->adapter.num; | ||
| 30 | |||
| 31 | err = cmp_establish_pp_connection(fdtv, fdtv->subunit, | ||
| 32 | fdtv->isochannel); | ||
| 33 | if (err) { | ||
| 34 | dev_err(fdtv->device, | ||
| 35 | "could not establish point to point connection\n"); | ||
| 36 | return err; | ||
| 37 | } | ||
| 38 | |||
| 39 | return fdtv->backend->start_iso(fdtv); | ||
| 40 | } | ||
| 41 | |||
| 42 | static int fdtv_sleep(struct dvb_frontend *fe) | ||
| 43 | { | ||
| 44 | struct firedtv *fdtv = fe->sec_priv; | ||
| 45 | |||
| 46 | fdtv->backend->stop_iso(fdtv); | ||
| 47 | cmp_break_pp_connection(fdtv, fdtv->subunit, fdtv->isochannel); | ||
| 48 | fdtv->isochannel = -1; | ||
| 49 | return 0; | ||
| 50 | } | ||
| 51 | |||
| 52 | #define LNBCONTROL_DONTCARE 0xff | ||
| 53 | |||
| 54 | static int fdtv_diseqc_send_master_cmd(struct dvb_frontend *fe, | ||
| 55 | struct dvb_diseqc_master_cmd *cmd) | ||
| 56 | { | ||
| 57 | struct firedtv *fdtv = fe->sec_priv; | ||
| 58 | |||
| 59 | return avc_lnb_control(fdtv, LNBCONTROL_DONTCARE, LNBCONTROL_DONTCARE, | ||
| 60 | LNBCONTROL_DONTCARE, 1, cmd); | ||
| 61 | } | ||
| 62 | |||
| 63 | static int fdtv_diseqc_send_burst(struct dvb_frontend *fe, | ||
| 64 | fe_sec_mini_cmd_t minicmd) | ||
| 65 | { | ||
| 66 | return 0; | ||
| 67 | } | ||
| 68 | |||
| 69 | static int fdtv_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone) | ||
| 70 | { | ||
| 71 | struct firedtv *fdtv = fe->sec_priv; | ||
| 72 | |||
| 73 | fdtv->tone = tone; | ||
| 74 | return 0; | ||
| 75 | } | ||
| 76 | |||
| 77 | static int fdtv_set_voltage(struct dvb_frontend *fe, | ||
| 78 | fe_sec_voltage_t voltage) | ||
| 79 | { | ||
| 80 | struct firedtv *fdtv = fe->sec_priv; | ||
| 81 | |||
| 82 | fdtv->voltage = voltage; | ||
| 83 | return 0; | ||
| 84 | } | ||
| 85 | |||
| 86 | static int fdtv_read_status(struct dvb_frontend *fe, fe_status_t *status) | ||
| 87 | { | ||
| 88 | struct firedtv *fdtv = fe->sec_priv; | ||
| 89 | struct firedtv_tuner_status stat; | ||
| 90 | |||
| 91 | if (avc_tuner_status(fdtv, &stat)) | ||
| 92 | return -EINVAL; | ||
| 93 | |||
| 94 | if (stat.no_rf) | ||
| 95 | *status = 0; | ||
| 96 | else | ||
| 97 | *status = FE_HAS_SIGNAL | FE_HAS_VITERBI | FE_HAS_SYNC | | ||
| 98 | FE_HAS_CARRIER | FE_HAS_LOCK; | ||
| 99 | return 0; | ||
| 100 | } | ||
| 101 | |||
| 102 | static int fdtv_read_ber(struct dvb_frontend *fe, u32 *ber) | ||
| 103 | { | ||
| 104 | struct firedtv *fdtv = fe->sec_priv; | ||
| 105 | struct firedtv_tuner_status stat; | ||
| 106 | |||
| 107 | if (avc_tuner_status(fdtv, &stat)) | ||
| 108 | return -EINVAL; | ||
| 109 | |||
| 110 | *ber = stat.ber; | ||
| 111 | return 0; | ||
| 112 | } | ||
| 113 | |||
| 114 | static int fdtv_read_signal_strength(struct dvb_frontend *fe, u16 *strength) | ||
| 115 | { | ||
| 116 | struct firedtv *fdtv = fe->sec_priv; | ||
| 117 | struct firedtv_tuner_status stat; | ||
| 118 | |||
| 119 | if (avc_tuner_status(fdtv, &stat)) | ||
| 120 | return -EINVAL; | ||
| 121 | |||
| 122 | *strength = stat.signal_strength << 8; | ||
| 123 | return 0; | ||
| 124 | } | ||
| 125 | |||
| 126 | static int fdtv_read_snr(struct dvb_frontend *fe, u16 *snr) | ||
| 127 | { | ||
| 128 | struct firedtv *fdtv = fe->sec_priv; | ||
| 129 | struct firedtv_tuner_status stat; | ||
| 130 | |||
| 131 | if (avc_tuner_status(fdtv, &stat)) | ||
| 132 | return -EINVAL; | ||
| 133 | |||
| 134 | /* C/N[dB] = -10 * log10(snr / 65535) */ | ||
| 135 | *snr = stat.carrier_noise_ratio * 257; | ||
| 136 | return 0; | ||
| 137 | } | ||
| 138 | |||
| 139 | static int fdtv_read_uncorrected_blocks(struct dvb_frontend *fe, u32 *ucblocks) | ||
| 140 | { | ||
| 141 | return -EOPNOTSUPP; | ||
| 142 | } | ||
| 143 | |||
| 144 | #define ACCEPTED 0x9 | ||
| 145 | |||
| 146 | static int fdtv_set_frontend(struct dvb_frontend *fe, | ||
| 147 | struct dvb_frontend_parameters *params) | ||
| 148 | { | ||
| 149 | struct firedtv *fdtv = fe->sec_priv; | ||
| 150 | |||
| 151 | /* FIXME: avc_tuner_dsd never returns ACCEPTED. Check status? */ | ||
| 152 | if (avc_tuner_dsd(fdtv, params) != ACCEPTED) | ||
| 153 | return -EINVAL; | ||
| 154 | else | ||
| 155 | return 0; /* not sure of this... */ | ||
| 156 | } | ||
| 157 | |||
| 158 | static int fdtv_get_frontend(struct dvb_frontend *fe, | ||
| 159 | struct dvb_frontend_parameters *params) | ||
| 160 | { | ||
| 161 | return -EOPNOTSUPP; | ||
| 162 | } | ||
| 163 | |||
| 164 | void fdtv_frontend_init(struct firedtv *fdtv) | ||
| 165 | { | ||
| 166 | struct dvb_frontend_ops *ops = &fdtv->fe.ops; | ||
| 167 | struct dvb_frontend_info *fi = &ops->info; | ||
| 168 | |||
| 169 | ops->init = fdtv_dvb_init; | ||
| 170 | ops->sleep = fdtv_sleep; | ||
| 171 | |||
| 172 | ops->set_frontend = fdtv_set_frontend; | ||
| 173 | ops->get_frontend = fdtv_get_frontend; | ||
| 174 | |||
| 175 | ops->read_status = fdtv_read_status; | ||
| 176 | ops->read_ber = fdtv_read_ber; | ||
| 177 | ops->read_signal_strength = fdtv_read_signal_strength; | ||
| 178 | ops->read_snr = fdtv_read_snr; | ||
| 179 | ops->read_ucblocks = fdtv_read_uncorrected_blocks; | ||
| 180 | |||
| 181 | ops->diseqc_send_master_cmd = fdtv_diseqc_send_master_cmd; | ||
| 182 | ops->diseqc_send_burst = fdtv_diseqc_send_burst; | ||
| 183 | ops->set_tone = fdtv_set_tone; | ||
| 184 | ops->set_voltage = fdtv_set_voltage; | ||
| 185 | |||
| 186 | switch (fdtv->type) { | ||
| 187 | case FIREDTV_DVB_S: | ||
| 188 | case FIREDTV_DVB_S2: | ||
| 189 | fi->type = FE_QPSK; | ||
| 190 | |||
| 191 | fi->frequency_min = 950000; | ||
| 192 | fi->frequency_max = 2150000; | ||
| 193 | fi->frequency_stepsize = 125; | ||
| 194 | fi->symbol_rate_min = 1000000; | ||
| 195 | fi->symbol_rate_max = 40000000; | ||
| 196 | |||
| 197 | fi->caps = FE_CAN_INVERSION_AUTO | | ||
| 198 | FE_CAN_FEC_1_2 | | ||
| 199 | FE_CAN_FEC_2_3 | | ||
| 200 | FE_CAN_FEC_3_4 | | ||
| 201 | FE_CAN_FEC_5_6 | | ||
| 202 | FE_CAN_FEC_7_8 | | ||
| 203 | FE_CAN_FEC_AUTO | | ||
| 204 | FE_CAN_QPSK; | ||
| 205 | break; | ||
| 206 | |||
| 207 | case FIREDTV_DVB_C: | ||
| 208 | fi->type = FE_QAM; | ||
| 209 | |||
| 210 | fi->frequency_min = 47000000; | ||
| 211 | fi->frequency_max = 866000000; | ||
| 212 | fi->frequency_stepsize = 62500; | ||
| 213 | fi->symbol_rate_min = 870000; | ||
| 214 | fi->symbol_rate_max = 6900000; | ||
| 215 | |||
| 216 | fi->caps = FE_CAN_INVERSION_AUTO | | ||
| 217 | FE_CAN_QAM_16 | | ||
| 218 | FE_CAN_QAM_32 | | ||
| 219 | FE_CAN_QAM_64 | | ||
| 220 | FE_CAN_QAM_128 | | ||
| 221 | FE_CAN_QAM_256 | | ||
| 222 | FE_CAN_QAM_AUTO; | ||
| 223 | break; | ||
| 224 | |||
| 225 | case FIREDTV_DVB_T: | ||
| 226 | fi->type = FE_OFDM; | ||
| 227 | |||
| 228 | fi->frequency_min = 49000000; | ||
| 229 | fi->frequency_max = 861000000; | ||
| 230 | fi->frequency_stepsize = 62500; | ||
| 231 | |||
| 232 | fi->caps = FE_CAN_INVERSION_AUTO | | ||
| 233 | FE_CAN_FEC_2_3 | | ||
| 234 | FE_CAN_TRANSMISSION_MODE_AUTO | | ||
| 235 | FE_CAN_GUARD_INTERVAL_AUTO | | ||
| 236 | FE_CAN_HIERARCHY_AUTO; | ||
| 237 | break; | ||
| 238 | |||
| 239 | default: | ||
| 240 | dev_err(fdtv->device, "no frontend for model type %d\n", | ||
| 241 | fdtv->type); | ||
| 242 | } | ||
| 243 | strcpy(fi->name, fdtv_model_names[fdtv->type]); | ||
| 244 | |||
| 245 | fdtv->fe.dvb = &fdtv->adapter; | ||
| 246 | fdtv->fe.sec_priv = fdtv; | ||
| 247 | } | ||
diff --git a/drivers/media/dvb/firewire/firedtv-rc.c b/drivers/media/dvb/firewire/firedtv-rc.c new file mode 100644 index 000000000000..46a6324d7b73 --- /dev/null +++ b/drivers/media/dvb/firewire/firedtv-rc.c | |||
| @@ -0,0 +1,190 @@ | |||
| 1 | /* | ||
| 2 | * FireDTV driver (formerly known as FireSAT) | ||
| 3 | * | ||
| 4 | * Copyright (C) 2004 Andreas Monitzer <andy@monitzer.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 as | ||
| 8 | * published by the Free Software Foundation; either version 2 of | ||
| 9 | * the License, or (at your option) any later version. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #include <linux/bitops.h> | ||
| 13 | #include <linux/input.h> | ||
| 14 | #include <linux/kernel.h> | ||
| 15 | #include <linux/string.h> | ||
| 16 | #include <linux/types.h> | ||
| 17 | |||
| 18 | #include "firedtv.h" | ||
| 19 | |||
| 20 | /* fixed table with older keycodes, geared towards MythTV */ | ||
| 21 | const static u16 oldtable[] = { | ||
| 22 | |||
| 23 | /* code from device: 0x4501...0x451f */ | ||
| 24 | |||
| 25 | KEY_ESC, | ||
| 26 | KEY_F9, | ||
| 27 | KEY_1, | ||
| 28 | KEY_2, | ||
| 29 | KEY_3, | ||
| 30 | KEY_4, | ||
| 31 | KEY_5, | ||
| 32 | KEY_6, | ||
| 33 | KEY_7, | ||
| 34 | KEY_8, | ||
| 35 | KEY_9, | ||
| 36 | KEY_I, | ||
| 37 | KEY_0, | ||
| 38 | KEY_ENTER, | ||
| 39 | KEY_RED, | ||
| 40 | KEY_UP, | ||
| 41 | KEY_GREEN, | ||
| 42 | KEY_F10, | ||
| 43 | KEY_SPACE, | ||
| 44 | KEY_F11, | ||
| 45 | KEY_YELLOW, | ||
| 46 | KEY_DOWN, | ||
| 47 | KEY_BLUE, | ||
| 48 | KEY_Z, | ||
| 49 | KEY_P, | ||
| 50 | KEY_PAGEDOWN, | ||
| 51 | KEY_LEFT, | ||
| 52 | KEY_W, | ||
| 53 | KEY_RIGHT, | ||
| 54 | KEY_P, | ||
| 55 | KEY_M, | ||
| 56 | |||
| 57 | /* code from device: 0x4540...0x4542 */ | ||
| 58 | |||
| 59 | KEY_R, | ||
| 60 | KEY_V, | ||
| 61 | KEY_C, | ||
| 62 | }; | ||
| 63 | |||
| 64 | /* user-modifiable table for a remote as sold in 2008 */ | ||
| 65 | const static u16 keytable[] = { | ||
| 66 | |||
| 67 | /* code from device: 0x0300...0x031f */ | ||
| 68 | |||
| 69 | [0x00] = KEY_POWER, | ||
| 70 | [0x01] = KEY_SLEEP, | ||
| 71 | [0x02] = KEY_STOP, | ||
| 72 | [0x03] = KEY_OK, | ||
| 73 | [0x04] = KEY_RIGHT, | ||
| 74 | [0x05] = KEY_1, | ||
| 75 | [0x06] = KEY_2, | ||
| 76 | [0x07] = KEY_3, | ||
| 77 | [0x08] = KEY_LEFT, | ||
| 78 | [0x09] = KEY_4, | ||
| 79 | [0x0a] = KEY_5, | ||
| 80 | [0x0b] = KEY_6, | ||
| 81 | [0x0c] = KEY_UP, | ||
| 82 | [0x0d] = KEY_7, | ||
| 83 | [0x0e] = KEY_8, | ||
| 84 | [0x0f] = KEY_9, | ||
| 85 | [0x10] = KEY_DOWN, | ||
| 86 | [0x11] = KEY_TITLE, /* "OSD" - fixme */ | ||
| 87 | [0x12] = KEY_0, | ||
| 88 | [0x13] = KEY_F20, /* "16:9" - fixme */ | ||
| 89 | [0x14] = KEY_SCREEN, /* "FULL" - fixme */ | ||
| 90 | [0x15] = KEY_MUTE, | ||
| 91 | [0x16] = KEY_SUBTITLE, | ||
| 92 | [0x17] = KEY_RECORD, | ||
| 93 | [0x18] = KEY_TEXT, | ||
| 94 | [0x19] = KEY_AUDIO, | ||
| 95 | [0x1a] = KEY_RED, | ||
| 96 | [0x1b] = KEY_PREVIOUS, | ||
| 97 | [0x1c] = KEY_REWIND, | ||
| 98 | [0x1d] = KEY_PLAYPAUSE, | ||
| 99 | [0x1e] = KEY_NEXT, | ||
| 100 | [0x1f] = KEY_VOLUMEUP, | ||
| 101 | |||
| 102 | /* code from device: 0x0340...0x0354 */ | ||
| 103 | |||
| 104 | [0x20] = KEY_CHANNELUP, | ||
| 105 | [0x21] = KEY_F21, /* "4:3" - fixme */ | ||
| 106 | [0x22] = KEY_TV, | ||
| 107 | [0x23] = KEY_DVD, | ||
| 108 | [0x24] = KEY_VCR, | ||
| 109 | [0x25] = KEY_AUX, | ||
| 110 | [0x26] = KEY_GREEN, | ||
| 111 | [0x27] = KEY_YELLOW, | ||
| 112 | [0x28] = KEY_BLUE, | ||
| 113 | [0x29] = KEY_CHANNEL, /* "CH.LIST" */ | ||
| 114 | [0x2a] = KEY_VENDOR, /* "CI" - fixme */ | ||
| 115 | [0x2b] = KEY_VOLUMEDOWN, | ||
| 116 | [0x2c] = KEY_CHANNELDOWN, | ||
| 117 | [0x2d] = KEY_LAST, | ||
| 118 | [0x2e] = KEY_INFO, | ||
| 119 | [0x2f] = KEY_FORWARD, | ||
| 120 | [0x30] = KEY_LIST, | ||
| 121 | [0x31] = KEY_FAVORITES, | ||
| 122 | [0x32] = KEY_MENU, | ||
| 123 | [0x33] = KEY_EPG, | ||
| 124 | [0x34] = KEY_EXIT, | ||
| 125 | }; | ||
| 126 | |||
| 127 | int fdtv_register_rc(struct firedtv *fdtv, struct device *dev) | ||
| 128 | { | ||
| 129 | struct input_dev *idev; | ||
| 130 | int i, err; | ||
| 131 | |||
| 132 | idev = input_allocate_device(); | ||
| 133 | if (!idev) | ||
| 134 | return -ENOMEM; | ||
| 135 | |||
| 136 | fdtv->remote_ctrl_dev = idev; | ||
| 137 | idev->name = "FireDTV remote control"; | ||
| 138 | idev->dev.parent = dev; | ||
| 139 | idev->evbit[0] = BIT_MASK(EV_KEY); | ||
| 140 | idev->keycode = kmemdup(keytable, sizeof(keytable), GFP_KERNEL); | ||
| 141 | if (!idev->keycode) { | ||
| 142 | err = -ENOMEM; | ||
| 143 | goto fail; | ||
| 144 | } | ||
| 145 | idev->keycodesize = sizeof(keytable[0]); | ||
| 146 | idev->keycodemax = ARRAY_SIZE(keytable); | ||
| 147 | |||
| 148 | for (i = 0; i < ARRAY_SIZE(keytable); i++) | ||
| 149 | set_bit(keytable[i], idev->keybit); | ||
| 150 | |||
| 151 | err = input_register_device(idev); | ||
| 152 | if (err) | ||
| 153 | goto fail_free_keymap; | ||
| 154 | |||
| 155 | return 0; | ||
| 156 | |||
| 157 | fail_free_keymap: | ||
| 158 | kfree(idev->keycode); | ||
| 159 | fail: | ||
| 160 | input_free_device(idev); | ||
| 161 | return err; | ||
| 162 | } | ||
| 163 | |||
| 164 | void fdtv_unregister_rc(struct firedtv *fdtv) | ||
| 165 | { | ||
| 166 | kfree(fdtv->remote_ctrl_dev->keycode); | ||
| 167 | input_unregister_device(fdtv->remote_ctrl_dev); | ||
| 168 | } | ||
| 169 | |||
| 170 | void fdtv_handle_rc(struct firedtv *fdtv, unsigned int code) | ||
| 171 | { | ||
| 172 | u16 *keycode = fdtv->remote_ctrl_dev->keycode; | ||
| 173 | |||
| 174 | if (code >= 0x0300 && code <= 0x031f) | ||
| 175 | code = keycode[code - 0x0300]; | ||
| 176 | else if (code >= 0x0340 && code <= 0x0354) | ||
| 177 | code = keycode[code - 0x0320]; | ||
| 178 | else if (code >= 0x4501 && code <= 0x451f) | ||
| 179 | code = oldtable[code - 0x4501]; | ||
| 180 | else if (code >= 0x4540 && code <= 0x4542) | ||
| 181 | code = oldtable[code - 0x4521]; | ||
| 182 | else { | ||
| 183 | printk(KERN_DEBUG "firedtv: invalid key code 0x%04x " | ||
| 184 | "from remote control\n", code); | ||
| 185 | return; | ||
| 186 | } | ||
| 187 | |||
| 188 | input_report_key(fdtv->remote_ctrl_dev, code, 1); | ||
| 189 | input_report_key(fdtv->remote_ctrl_dev, code, 0); | ||
| 190 | } | ||
diff --git a/drivers/media/dvb/firewire/firedtv.h b/drivers/media/dvb/firewire/firedtv.h new file mode 100644 index 000000000000..d48530b81e61 --- /dev/null +++ b/drivers/media/dvb/firewire/firedtv.h | |||
| @@ -0,0 +1,182 @@ | |||
| 1 | /* | ||
| 2 | * FireDTV driver (formerly known as FireSAT) | ||
| 3 | * | ||
| 4 | * Copyright (C) 2004 Andreas Monitzer <andy@monitzer.com> | ||
| 5 | * Copyright (C) 2008 Henrik Kurelid <henrik@kurelid.se> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or | ||
| 8 | * modify it under the terms of the GNU General Public License as | ||
| 9 | * published by the Free Software Foundation; either version 2 of | ||
| 10 | * the License, or (at your option) any later version. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #ifndef _FIREDTV_H | ||
| 14 | #define _FIREDTV_H | ||
| 15 | |||
| 16 | #include <linux/dvb/dmx.h> | ||
| 17 | #include <linux/dvb/frontend.h> | ||
| 18 | #include <linux/list.h> | ||
| 19 | #include <linux/mutex.h> | ||
| 20 | #include <linux/spinlock_types.h> | ||
| 21 | #include <linux/types.h> | ||
| 22 | #include <linux/wait.h> | ||
| 23 | #include <linux/workqueue.h> | ||
| 24 | |||
| 25 | #include <demux.h> | ||
| 26 | #include <dmxdev.h> | ||
| 27 | #include <dvb_demux.h> | ||
| 28 | #include <dvb_frontend.h> | ||
| 29 | #include <dvb_net.h> | ||
| 30 | #include <dvbdev.h> | ||
| 31 | |||
| 32 | struct firedtv_tuner_status { | ||
| 33 | unsigned active_system:8; | ||
| 34 | unsigned searching:1; | ||
| 35 | unsigned moving:1; | ||
| 36 | unsigned no_rf:1; | ||
| 37 | unsigned input:1; | ||
| 38 | unsigned selected_antenna:7; | ||
| 39 | unsigned ber:32; | ||
| 40 | unsigned signal_strength:8; | ||
| 41 | unsigned raster_frequency:2; | ||
| 42 | unsigned rf_frequency:22; | ||
| 43 | unsigned man_dep_info_length:8; | ||
| 44 | unsigned front_end_error:1; | ||
| 45 | unsigned antenna_error:1; | ||
| 46 | unsigned front_end_power_status:1; | ||
| 47 | unsigned power_supply:1; | ||
| 48 | unsigned carrier_noise_ratio:16; | ||
| 49 | unsigned power_supply_voltage:8; | ||
| 50 | unsigned antenna_voltage:8; | ||
| 51 | unsigned firewire_bus_voltage:8; | ||
| 52 | unsigned ca_mmi:1; | ||
| 53 | unsigned ca_pmt_reply:1; | ||
| 54 | unsigned ca_date_time_request:1; | ||
| 55 | unsigned ca_application_info:1; | ||
| 56 | unsigned ca_module_present_status:1; | ||
| 57 | unsigned ca_dvb_flag:1; | ||
| 58 | unsigned ca_error_flag:1; | ||
| 59 | unsigned ca_initialization_status:1; | ||
| 60 | }; | ||
| 61 | |||
| 62 | enum model_type { | ||
| 63 | FIREDTV_UNKNOWN = 0, | ||
| 64 | FIREDTV_DVB_S = 1, | ||
| 65 | FIREDTV_DVB_C = 2, | ||
| 66 | FIREDTV_DVB_T = 3, | ||
| 67 | FIREDTV_DVB_S2 = 4, | ||
| 68 | }; | ||
| 69 | |||
| 70 | struct device; | ||
| 71 | struct input_dev; | ||
| 72 | struct firedtv; | ||
| 73 | |||
| 74 | struct firedtv_backend { | ||
| 75 | int (*lock)(struct firedtv *fdtv, u64 addr, void *data, __be32 arg); | ||
| 76 | int (*read)(struct firedtv *fdtv, u64 addr, void *data, size_t len); | ||
| 77 | int (*write)(struct firedtv *fdtv, u64 addr, void *data, size_t len); | ||
| 78 | int (*start_iso)(struct firedtv *fdtv); | ||
| 79 | void (*stop_iso)(struct firedtv *fdtv); | ||
| 80 | }; | ||
| 81 | |||
| 82 | struct firedtv { | ||
| 83 | struct device *device; | ||
| 84 | struct list_head list; | ||
| 85 | |||
| 86 | struct dvb_adapter adapter; | ||
| 87 | struct dmxdev dmxdev; | ||
| 88 | struct dvb_demux demux; | ||
| 89 | struct dmx_frontend frontend; | ||
| 90 | struct dvb_net dvbnet; | ||
| 91 | struct dvb_frontend fe; | ||
| 92 | |||
| 93 | struct dvb_device *cadev; | ||
| 94 | int ca_last_command; | ||
| 95 | int ca_time_interval; | ||
| 96 | |||
| 97 | struct mutex avc_mutex; | ||
| 98 | wait_queue_head_t avc_wait; | ||
| 99 | bool avc_reply_received; | ||
| 100 | struct work_struct remote_ctrl_work; | ||
| 101 | struct input_dev *remote_ctrl_dev; | ||
| 102 | |||
| 103 | enum model_type type; | ||
| 104 | char subunit; | ||
| 105 | char isochannel; | ||
| 106 | fe_sec_voltage_t voltage; | ||
| 107 | fe_sec_tone_mode_t tone; | ||
| 108 | |||
| 109 | const struct firedtv_backend *backend; | ||
| 110 | void *backend_data; | ||
| 111 | |||
| 112 | struct mutex demux_mutex; | ||
| 113 | unsigned long channel_active; | ||
| 114 | u16 channel_pid[16]; | ||
| 115 | |||
| 116 | size_t response_length; | ||
| 117 | u8 response[512]; | ||
| 118 | }; | ||
| 119 | |||
| 120 | /* firedtv-1394.c */ | ||
| 121 | #ifdef CONFIG_DVB_FIREDTV_IEEE1394 | ||
| 122 | int fdtv_1394_init(struct ieee1394_device_id id_table[]); | ||
| 123 | void fdtv_1394_exit(void); | ||
| 124 | #else | ||
| 125 | static inline int fdtv_1394_init(struct ieee1394_device_id it[]) { return 0; } | ||
| 126 | static inline void fdtv_1394_exit(void) {} | ||
| 127 | #endif | ||
| 128 | |||
| 129 | /* firedtv-avc.c */ | ||
| 130 | int avc_recv(struct firedtv *fdtv, void *data, size_t length); | ||
| 131 | int avc_tuner_status(struct firedtv *fdtv, struct firedtv_tuner_status *stat); | ||
| 132 | struct dvb_frontend_parameters; | ||
| 133 | int avc_tuner_dsd(struct firedtv *fdtv, struct dvb_frontend_parameters *params); | ||
| 134 | int avc_tuner_set_pids(struct firedtv *fdtv, unsigned char pidc, u16 pid[]); | ||
| 135 | int avc_tuner_get_ts(struct firedtv *fdtv); | ||
| 136 | int avc_identify_subunit(struct firedtv *fdtv); | ||
| 137 | struct dvb_diseqc_master_cmd; | ||
| 138 | int avc_lnb_control(struct firedtv *fdtv, char voltage, char burst, | ||
| 139 | char conttone, char nrdiseq, | ||
| 140 | struct dvb_diseqc_master_cmd *diseqcmd); | ||
| 141 | void avc_remote_ctrl_work(struct work_struct *work); | ||
| 142 | int avc_register_remote_control(struct firedtv *fdtv); | ||
| 143 | int avc_ca_app_info(struct firedtv *fdtv, char *app_info, unsigned int *len); | ||
| 144 | int avc_ca_info(struct firedtv *fdtv, char *app_info, unsigned int *len); | ||
| 145 | int avc_ca_reset(struct firedtv *fdtv); | ||
| 146 | int avc_ca_pmt(struct firedtv *fdtv, char *app_info, int length); | ||
| 147 | int avc_ca_get_time_date(struct firedtv *fdtv, int *interval); | ||
| 148 | int avc_ca_enter_menu(struct firedtv *fdtv); | ||
| 149 | int avc_ca_get_mmi(struct firedtv *fdtv, char *mmi_object, unsigned int *len); | ||
| 150 | int cmp_establish_pp_connection(struct firedtv *fdtv, int plug, int channel); | ||
| 151 | void cmp_break_pp_connection(struct firedtv *fdtv, int plug, int channel); | ||
| 152 | |||
| 153 | /* firedtv-ci.c */ | ||
| 154 | int fdtv_ca_register(struct firedtv *fdtv); | ||
| 155 | void fdtv_ca_release(struct firedtv *fdtv); | ||
| 156 | |||
| 157 | /* firedtv-dvb.c */ | ||
| 158 | int fdtv_start_feed(struct dvb_demux_feed *dvbdmxfeed); | ||
| 159 | int fdtv_stop_feed(struct dvb_demux_feed *dvbdmxfeed); | ||
| 160 | int fdtv_dvb_register(struct firedtv *fdtv); | ||
| 161 | void fdtv_dvb_unregister(struct firedtv *fdtv); | ||
| 162 | struct firedtv *fdtv_alloc(struct device *dev, | ||
| 163 | const struct firedtv_backend *backend, | ||
| 164 | const char *name, size_t name_len); | ||
| 165 | extern const char *fdtv_model_names[]; | ||
| 166 | |||
| 167 | /* firedtv-fe.c */ | ||
| 168 | void fdtv_frontend_init(struct firedtv *fdtv); | ||
| 169 | |||
| 170 | /* firedtv-rc.c */ | ||
| 171 | #ifdef CONFIG_DVB_FIREDTV_INPUT | ||
| 172 | int fdtv_register_rc(struct firedtv *fdtv, struct device *dev); | ||
| 173 | void fdtv_unregister_rc(struct firedtv *fdtv); | ||
| 174 | void fdtv_handle_rc(struct firedtv *fdtv, unsigned int code); | ||
| 175 | #else | ||
| 176 | static inline int fdtv_register_rc(struct firedtv *fdtv, | ||
| 177 | struct device *dev) { return 0; } | ||
| 178 | static inline void fdtv_unregister_rc(struct firedtv *fdtv) {} | ||
| 179 | static inline void fdtv_handle_rc(struct firedtv *fdtv, unsigned int code) {} | ||
| 180 | #endif | ||
| 181 | |||
| 182 | #endif /* _FIREDTV_H */ | ||
diff --git a/drivers/media/radio/radio-si470x.c b/drivers/media/radio/radio-si470x.c index 67cbce82cb91..4dfed6aa2dbc 100644 --- a/drivers/media/radio/radio-si470x.c +++ b/drivers/media/radio/radio-si470x.c | |||
| @@ -98,11 +98,16 @@ | |||
| 98 | * - blacklisted KWorld radio in hid-core.c and hid-ids.h | 98 | * - blacklisted KWorld radio in hid-core.c and hid-ids.h |
| 99 | * 2008-12-03 Mark Lord <mlord@pobox.com> | 99 | * 2008-12-03 Mark Lord <mlord@pobox.com> |
| 100 | * - add support for DealExtreme USB Radio | 100 | * - add support for DealExtreme USB Radio |
| 101 | * 2009-01-31 Bob Ross <pigiron@gmx.com> | ||
| 102 | * - correction of stereo detection/setting | ||
| 103 | * - correction of signal strength indicator scaling | ||
| 104 | * 2009-01-31 Rick Bronson <rick@efn.org> | ||
| 105 | * Tobias Lorenz <tobias.lorenz@gmx.net> | ||
| 106 | * - add LED status output | ||
| 101 | * | 107 | * |
| 102 | * ToDo: | 108 | * ToDo: |
| 103 | * - add firmware download/update support | 109 | * - add firmware download/update support |
| 104 | * - RDS support: interrupt mode, instead of polling | 110 | * - RDS support: interrupt mode, instead of polling |
| 105 | * - add LED status output (check if that's not already done in firmware) | ||
| 106 | */ | 111 | */ |
| 107 | 112 | ||
| 108 | 113 | ||
| @@ -882,6 +887,30 @@ static int si470x_rds_on(struct si470x_device *radio) | |||
| 882 | 887 | ||
| 883 | 888 | ||
| 884 | /************************************************************************** | 889 | /************************************************************************** |
| 890 | * General Driver Functions - LED_REPORT | ||
| 891 | **************************************************************************/ | ||
| 892 | |||
| 893 | /* | ||
| 894 | * si470x_set_led_state - sets the led state | ||
| 895 | */ | ||
| 896 | static int si470x_set_led_state(struct si470x_device *radio, | ||
| 897 | unsigned char led_state) | ||
| 898 | { | ||
| 899 | unsigned char buf[LED_REPORT_SIZE]; | ||
| 900 | int retval; | ||
| 901 | |||
| 902 | buf[0] = LED_REPORT; | ||
| 903 | buf[1] = LED_COMMAND; | ||
| 904 | buf[2] = led_state; | ||
| 905 | |||
| 906 | retval = si470x_set_report(radio, (void *) &buf, sizeof(buf)); | ||
| 907 | |||
| 908 | return (retval < 0) ? -EINVAL : 0; | ||
| 909 | } | ||
| 910 | |||
| 911 | |||
| 912 | |||
| 913 | /************************************************************************** | ||
| 885 | * RDS Driver Functions | 914 | * RDS Driver Functions |
| 886 | **************************************************************************/ | 915 | **************************************************************************/ |
| 887 | 916 | ||
| @@ -1385,20 +1414,22 @@ static int si470x_vidioc_g_tuner(struct file *file, void *priv, | |||
| 1385 | }; | 1414 | }; |
| 1386 | 1415 | ||
| 1387 | /* stereo indicator == stereo (instead of mono) */ | 1416 | /* stereo indicator == stereo (instead of mono) */ |
| 1388 | if ((radio->registers[STATUSRSSI] & STATUSRSSI_ST) == 1) | 1417 | if ((radio->registers[STATUSRSSI] & STATUSRSSI_ST) == 0) |
| 1389 | tuner->rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO; | ||
| 1390 | else | ||
| 1391 | tuner->rxsubchans = V4L2_TUNER_SUB_MONO; | 1418 | tuner->rxsubchans = V4L2_TUNER_SUB_MONO; |
| 1419 | else | ||
| 1420 | tuner->rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO; | ||
| 1392 | 1421 | ||
| 1393 | /* mono/stereo selector */ | 1422 | /* mono/stereo selector */ |
| 1394 | if ((radio->registers[POWERCFG] & POWERCFG_MONO) == 1) | 1423 | if ((radio->registers[POWERCFG] & POWERCFG_MONO) == 0) |
| 1395 | tuner->audmode = V4L2_TUNER_MODE_MONO; | ||
| 1396 | else | ||
| 1397 | tuner->audmode = V4L2_TUNER_MODE_STEREO; | 1424 | tuner->audmode = V4L2_TUNER_MODE_STEREO; |
| 1425 | else | ||
| 1426 | tuner->audmode = V4L2_TUNER_MODE_MONO; | ||
| 1398 | 1427 | ||
| 1399 | /* min is worst, max is best; signal:0..0xffff; rssi: 0..0xff */ | 1428 | /* min is worst, max is best; signal:0..0xffff; rssi: 0..0xff */ |
| 1400 | tuner->signal = (radio->registers[STATUSRSSI] & STATUSRSSI_RSSI) | 1429 | /* measured in units of dbµV in 1 db increments (max at ~75 dbµV) */ |
| 1401 | * 0x0101; | 1430 | tuner->signal = (radio->registers[STATUSRSSI] & STATUSRSSI_RSSI); |
| 1431 | /* the ideal factor is 0xffff/75 = 873,8 */ | ||
| 1432 | tuner->signal = (tuner->signal * 873) + (8 * tuner->signal / 10); | ||
| 1402 | 1433 | ||
| 1403 | /* automatic frequency control: -1: freq to low, 1 freq to high */ | 1434 | /* automatic frequency control: -1: freq to low, 1 freq to high */ |
| 1404 | /* AFCRL does only indicate that freq. differs, not if too low/high */ | 1435 | /* AFCRL does only indicate that freq. differs, not if too low/high */ |
| @@ -1632,6 +1663,9 @@ static int si470x_usb_driver_probe(struct usb_interface *intf, | |||
| 1632 | /* set initial frequency */ | 1663 | /* set initial frequency */ |
| 1633 | si470x_set_freq(radio, 87.5 * FREQ_MUL); /* available in all regions */ | 1664 | si470x_set_freq(radio, 87.5 * FREQ_MUL); /* available in all regions */ |
| 1634 | 1665 | ||
| 1666 | /* set led to connect state */ | ||
| 1667 | si470x_set_led_state(radio, BLINK_GREEN_LED); | ||
| 1668 | |||
| 1635 | /* rds buffer allocation */ | 1669 | /* rds buffer allocation */ |
| 1636 | radio->buf_size = rds_buf * 3; | 1670 | radio->buf_size = rds_buf * 3; |
| 1637 | radio->buffer = kmalloc(radio->buf_size, GFP_KERNEL); | 1671 | radio->buffer = kmalloc(radio->buf_size, GFP_KERNEL); |
| @@ -1715,6 +1749,9 @@ static void si470x_usb_driver_disconnect(struct usb_interface *intf) | |||
| 1715 | cancel_delayed_work_sync(&radio->work); | 1749 | cancel_delayed_work_sync(&radio->work); |
| 1716 | usb_set_intfdata(intf, NULL); | 1750 | usb_set_intfdata(intf, NULL); |
| 1717 | if (radio->users == 0) { | 1751 | if (radio->users == 0) { |
| 1752 | /* set led to disconnect state */ | ||
| 1753 | si470x_set_led_state(radio, BLINK_ORANGE_LED); | ||
| 1754 | |||
| 1718 | video_unregister_device(radio->videodev); | 1755 | video_unregister_device(radio->videodev); |
| 1719 | kfree(radio->buffer); | 1756 | kfree(radio->buffer); |
| 1720 | kfree(radio); | 1757 | kfree(radio); |
diff --git a/drivers/media/video/em28xx/em28xx-audio.c b/drivers/media/video/em28xx/em28xx-audio.c index 5d882a44e3ee..2ac738fa6a07 100644 --- a/drivers/media/video/em28xx/em28xx-audio.c +++ b/drivers/media/video/em28xx/em28xx-audio.c | |||
| @@ -463,6 +463,8 @@ static int em28xx_audio_init(struct em28xx *dev) | |||
| 463 | pcm->info_flags = 0; | 463 | pcm->info_flags = 0; |
| 464 | pcm->private_data = dev; | 464 | pcm->private_data = dev; |
| 465 | strcpy(pcm->name, "Empia 28xx Capture"); | 465 | strcpy(pcm->name, "Empia 28xx Capture"); |
| 466 | |||
| 467 | snd_card_set_dev(card, &dev->udev->dev); | ||
| 466 | strcpy(card->driver, "Empia Em28xx Audio"); | 468 | strcpy(card->driver, "Empia Em28xx Audio"); |
| 467 | strcpy(card->shortname, "Em28xx Audio"); | 469 | strcpy(card->shortname, "Em28xx Audio"); |
| 468 | strcpy(card->longname, "Empia Em28xx Audio"); | 470 | strcpy(card->longname, "Empia Em28xx Audio"); |
diff --git a/drivers/media/video/gspca/gspca.c b/drivers/media/video/gspca/gspca.c index 2ed24527ecd6..65e4901f4db7 100644 --- a/drivers/media/video/gspca/gspca.c +++ b/drivers/media/video/gspca/gspca.c | |||
| @@ -422,6 +422,7 @@ static void destroy_urbs(struct gspca_dev *gspca_dev) | |||
| 422 | if (urb == NULL) | 422 | if (urb == NULL) |
| 423 | break; | 423 | break; |
| 424 | 424 | ||
| 425 | BUG_ON(!gspca_dev->dev); | ||
| 425 | gspca_dev->urb[i] = NULL; | 426 | gspca_dev->urb[i] = NULL; |
| 426 | if (!gspca_dev->present) | 427 | if (!gspca_dev->present) |
| 427 | usb_kill_urb(urb); | 428 | usb_kill_urb(urb); |
| @@ -1950,8 +1951,12 @@ void gspca_disconnect(struct usb_interface *intf) | |||
| 1950 | { | 1951 | { |
| 1951 | struct gspca_dev *gspca_dev = usb_get_intfdata(intf); | 1952 | struct gspca_dev *gspca_dev = usb_get_intfdata(intf); |
| 1952 | 1953 | ||
| 1954 | mutex_lock(&gspca_dev->usb_lock); | ||
| 1953 | gspca_dev->present = 0; | 1955 | gspca_dev->present = 0; |
| 1956 | mutex_unlock(&gspca_dev->usb_lock); | ||
| 1954 | 1957 | ||
| 1958 | destroy_urbs(gspca_dev); | ||
| 1959 | gspca_dev->dev = NULL; | ||
| 1955 | usb_set_intfdata(intf, NULL); | 1960 | usb_set_intfdata(intf, NULL); |
| 1956 | 1961 | ||
| 1957 | /* release the device */ | 1962 | /* release the device */ |
diff --git a/drivers/media/video/ivtv/ivtv-ioctl.c b/drivers/media/video/ivtv/ivtv-ioctl.c index f6b3ef6e691b..c13bd2aa0bea 100644 --- a/drivers/media/video/ivtv/ivtv-ioctl.c +++ b/drivers/media/video/ivtv/ivtv-ioctl.c | |||
| @@ -393,7 +393,7 @@ static int ivtv_g_fmt_sliced_vbi_cap(struct file *file, void *fh, struct v4l2_fo | |||
| 393 | return 0; | 393 | return 0; |
| 394 | } | 394 | } |
| 395 | 395 | ||
| 396 | v4l2_subdev_call(itv->sd_video, video, s_fmt, fmt); | 396 | v4l2_subdev_call(itv->sd_video, video, g_fmt, fmt); |
| 397 | vbifmt->service_set = ivtv_get_service_set(vbifmt); | 397 | vbifmt->service_set = ivtv_get_service_set(vbifmt); |
| 398 | return 0; | 398 | return 0; |
| 399 | } | 399 | } |
| @@ -1748,6 +1748,18 @@ static long ivtv_default(struct file *file, void *fh, int cmd, void *arg) | |||
| 1748 | break; | 1748 | break; |
| 1749 | } | 1749 | } |
| 1750 | 1750 | ||
| 1751 | case IVTV_IOC_DMA_FRAME: | ||
| 1752 | case VIDEO_GET_PTS: | ||
| 1753 | case VIDEO_GET_FRAME_COUNT: | ||
| 1754 | case VIDEO_GET_EVENT: | ||
| 1755 | case VIDEO_PLAY: | ||
| 1756 | case VIDEO_STOP: | ||
| 1757 | case VIDEO_FREEZE: | ||
| 1758 | case VIDEO_CONTINUE: | ||
| 1759 | case VIDEO_COMMAND: | ||
| 1760 | case VIDEO_TRY_COMMAND: | ||
| 1761 | return ivtv_decoder_ioctls(file, cmd, (void *)arg); | ||
| 1762 | |||
| 1751 | default: | 1763 | default: |
| 1752 | return -EINVAL; | 1764 | return -EINVAL; |
| 1753 | } | 1765 | } |
| @@ -1790,18 +1802,6 @@ static long ivtv_serialized_ioctl(struct ivtv *itv, struct file *filp, | |||
| 1790 | ivtv_vapi(itv, CX2341X_DEC_SET_AUDIO_MODE, 2, itv->audio_bilingual_mode, itv->audio_stereo_mode); | 1802 | ivtv_vapi(itv, CX2341X_DEC_SET_AUDIO_MODE, 2, itv->audio_bilingual_mode, itv->audio_stereo_mode); |
| 1791 | return 0; | 1803 | return 0; |
| 1792 | 1804 | ||
| 1793 | case IVTV_IOC_DMA_FRAME: | ||
| 1794 | case VIDEO_GET_PTS: | ||
| 1795 | case VIDEO_GET_FRAME_COUNT: | ||
| 1796 | case VIDEO_GET_EVENT: | ||
| 1797 | case VIDEO_PLAY: | ||
| 1798 | case VIDEO_STOP: | ||
| 1799 | case VIDEO_FREEZE: | ||
| 1800 | case VIDEO_CONTINUE: | ||
| 1801 | case VIDEO_COMMAND: | ||
| 1802 | case VIDEO_TRY_COMMAND: | ||
| 1803 | return ivtv_decoder_ioctls(filp, cmd, (void *)arg); | ||
| 1804 | |||
| 1805 | default: | 1805 | default: |
| 1806 | break; | 1806 | break; |
| 1807 | } | 1807 | } |
diff --git a/drivers/media/video/pxa_camera.c b/drivers/media/video/pxa_camera.c index e3e6b29ea6d2..0c4ce58c53d5 100644 --- a/drivers/media/video/pxa_camera.c +++ b/drivers/media/video/pxa_camera.c | |||
| @@ -1154,23 +1154,23 @@ static int pxa_camera_set_fmt(struct soc_camera_device *icd, | |||
| 1154 | { | 1154 | { |
| 1155 | struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); | 1155 | struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); |
| 1156 | struct pxa_camera_dev *pcdev = ici->priv; | 1156 | struct pxa_camera_dev *pcdev = ici->priv; |
| 1157 | const struct soc_camera_data_format *host_fmt, *cam_fmt = NULL; | 1157 | const struct soc_camera_data_format *cam_fmt = NULL; |
| 1158 | const struct soc_camera_format_xlate *xlate; | 1158 | const struct soc_camera_format_xlate *xlate = NULL; |
| 1159 | struct soc_camera_sense sense = { | 1159 | struct soc_camera_sense sense = { |
| 1160 | .master_clock = pcdev->mclk, | 1160 | .master_clock = pcdev->mclk, |
| 1161 | .pixel_clock_max = pcdev->ciclk / 4, | 1161 | .pixel_clock_max = pcdev->ciclk / 4, |
| 1162 | }; | 1162 | }; |
| 1163 | int ret, buswidth; | 1163 | int ret; |
| 1164 | 1164 | ||
| 1165 | xlate = soc_camera_xlate_by_fourcc(icd, pixfmt); | 1165 | if (pixfmt) { |
| 1166 | if (!xlate) { | 1166 | xlate = soc_camera_xlate_by_fourcc(icd, pixfmt); |
| 1167 | dev_warn(&ici->dev, "Format %x not found\n", pixfmt); | 1167 | if (!xlate) { |
| 1168 | return -EINVAL; | 1168 | dev_warn(&ici->dev, "Format %x not found\n", pixfmt); |
| 1169 | } | 1169 | return -EINVAL; |
| 1170 | } | ||
| 1170 | 1171 | ||
| 1171 | buswidth = xlate->buswidth; | 1172 | cam_fmt = xlate->cam_fmt; |
| 1172 | host_fmt = xlate->host_fmt; | 1173 | } |
| 1173 | cam_fmt = xlate->cam_fmt; | ||
| 1174 | 1174 | ||
| 1175 | /* If PCLK is used to latch data from the sensor, check sense */ | 1175 | /* If PCLK is used to latch data from the sensor, check sense */ |
| 1176 | if (pcdev->platform_flags & PXA_CAMERA_PCLK_EN) | 1176 | if (pcdev->platform_flags & PXA_CAMERA_PCLK_EN) |
| @@ -1200,8 +1200,8 @@ static int pxa_camera_set_fmt(struct soc_camera_device *icd, | |||
| 1200 | } | 1200 | } |
| 1201 | 1201 | ||
| 1202 | if (pixfmt && !ret) { | 1202 | if (pixfmt && !ret) { |
| 1203 | icd->buswidth = buswidth; | 1203 | icd->buswidth = xlate->buswidth; |
| 1204 | icd->current_fmt = host_fmt; | 1204 | icd->current_fmt = xlate->host_fmt; |
| 1205 | } | 1205 | } |
| 1206 | 1206 | ||
| 1207 | return ret; | 1207 | return ret; |
diff --git a/drivers/media/video/sh_mobile_ceu_camera.c b/drivers/media/video/sh_mobile_ceu_camera.c index 9a2586b07a05..ddcb81d0b81a 100644 --- a/drivers/media/video/sh_mobile_ceu_camera.c +++ b/drivers/media/video/sh_mobile_ceu_camera.c | |||
| @@ -603,21 +603,18 @@ static int sh_mobile_ceu_set_fmt(struct soc_camera_device *icd, | |||
| 603 | const struct soc_camera_format_xlate *xlate; | 603 | const struct soc_camera_format_xlate *xlate; |
| 604 | int ret; | 604 | int ret; |
| 605 | 605 | ||
| 606 | if (!pixfmt) | ||
| 607 | return icd->ops->set_fmt(icd, pixfmt, rect); | ||
| 608 | |||
| 606 | xlate = soc_camera_xlate_by_fourcc(icd, pixfmt); | 609 | xlate = soc_camera_xlate_by_fourcc(icd, pixfmt); |
| 607 | if (!xlate) { | 610 | if (!xlate) { |
| 608 | dev_warn(&ici->dev, "Format %x not found\n", pixfmt); | 611 | dev_warn(&ici->dev, "Format %x not found\n", pixfmt); |
| 609 | return -EINVAL; | 612 | return -EINVAL; |
| 610 | } | 613 | } |
| 611 | 614 | ||
| 612 | switch (pixfmt) { | 615 | ret = icd->ops->set_fmt(icd, xlate->cam_fmt->fourcc, rect); |
| 613 | case 0: /* Only geometry change */ | ||
| 614 | ret = icd->ops->set_fmt(icd, pixfmt, rect); | ||
| 615 | break; | ||
| 616 | default: | ||
| 617 | ret = icd->ops->set_fmt(icd, xlate->cam_fmt->fourcc, rect); | ||
| 618 | } | ||
| 619 | 616 | ||
| 620 | if (pixfmt && !ret) { | 617 | if (!ret) { |
| 621 | icd->buswidth = xlate->buswidth; | 618 | icd->buswidth = xlate->buswidth; |
| 622 | icd->current_fmt = xlate->host_fmt; | 619 | icd->current_fmt = xlate->host_fmt; |
| 623 | pcdev->camera_fmt = xlate->cam_fmt; | 620 | pcdev->camera_fmt = xlate->cam_fmt; |
diff --git a/drivers/media/video/uvc/uvc_status.c b/drivers/media/video/uvc/uvc_status.c index c1e4ae27c613..c705f248da88 100644 --- a/drivers/media/video/uvc/uvc_status.c +++ b/drivers/media/video/uvc/uvc_status.c | |||
| @@ -46,8 +46,8 @@ static int uvc_input_init(struct uvc_device *dev) | |||
| 46 | usb_to_input_id(udev, &input->id); | 46 | usb_to_input_id(udev, &input->id); |
| 47 | input->dev.parent = &dev->intf->dev; | 47 | input->dev.parent = &dev->intf->dev; |
| 48 | 48 | ||
| 49 | set_bit(EV_KEY, input->evbit); | 49 | __set_bit(EV_KEY, input->evbit); |
| 50 | set_bit(BTN_0, input->keybit); | 50 | __set_bit(KEY_CAMERA, input->keybit); |
| 51 | 51 | ||
| 52 | if ((ret = input_register_device(input)) < 0) | 52 | if ((ret = input_register_device(input)) < 0) |
| 53 | goto error; | 53 | goto error; |
| @@ -70,8 +70,10 @@ static void uvc_input_cleanup(struct uvc_device *dev) | |||
| 70 | static void uvc_input_report_key(struct uvc_device *dev, unsigned int code, | 70 | static void uvc_input_report_key(struct uvc_device *dev, unsigned int code, |
| 71 | int value) | 71 | int value) |
| 72 | { | 72 | { |
| 73 | if (dev->input) | 73 | if (dev->input) { |
| 74 | input_report_key(dev->input, code, value); | 74 | input_report_key(dev->input, code, value); |
| 75 | input_sync(dev->input); | ||
| 76 | } | ||
| 75 | } | 77 | } |
| 76 | 78 | ||
| 77 | #else | 79 | #else |
| @@ -96,7 +98,7 @@ static void uvc_event_streaming(struct uvc_device *dev, __u8 *data, int len) | |||
| 96 | return; | 98 | return; |
| 97 | uvc_trace(UVC_TRACE_STATUS, "Button (intf %u) %s len %d\n", | 99 | uvc_trace(UVC_TRACE_STATUS, "Button (intf %u) %s len %d\n", |
| 98 | data[1], data[3] ? "pressed" : "released", len); | 100 | data[1], data[3] ? "pressed" : "released", len); |
| 99 | uvc_input_report_key(dev, BTN_0, data[3]); | 101 | uvc_input_report_key(dev, KEY_CAMERA, data[3]); |
| 100 | } else { | 102 | } else { |
| 101 | uvc_trace(UVC_TRACE_STATUS, "Stream %u error event %02x %02x " | 103 | uvc_trace(UVC_TRACE_STATUS, "Stream %u error event %02x %02x " |
| 102 | "len %d.\n", data[1], data[2], data[3], len); | 104 | "len %d.\n", data[1], data[2], data[3], len); |
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c index 96ac88317b8e..ea3aafbbda44 100644 --- a/drivers/message/fusion/mptbase.c +++ b/drivers/message/fusion/mptbase.c | |||
| @@ -91,9 +91,9 @@ MODULE_PARM_DESC(mpt_msi_enable_fc, " Enable MSI Support for FC \ | |||
| 91 | controllers (default=0)"); | 91 | controllers (default=0)"); |
| 92 | 92 | ||
| 93 | static int mpt_msi_enable_sas; | 93 | static int mpt_msi_enable_sas; |
| 94 | module_param(mpt_msi_enable_sas, int, 1); | 94 | module_param(mpt_msi_enable_sas, int, 0); |
| 95 | MODULE_PARM_DESC(mpt_msi_enable_sas, " Enable MSI Support for SAS \ | 95 | MODULE_PARM_DESC(mpt_msi_enable_sas, " Enable MSI Support for SAS \ |
| 96 | controllers (default=1)"); | 96 | controllers (default=0)"); |
| 97 | 97 | ||
| 98 | 98 | ||
| 99 | static int mpt_channel_mapping; | 99 | static int mpt_channel_mapping; |
diff --git a/drivers/mfd/htc-egpio.c b/drivers/mfd/htc-egpio.c index 1a4d04664d6d..aa266e1f69b2 100644 --- a/drivers/mfd/htc-egpio.c +++ b/drivers/mfd/htc-egpio.c | |||
| @@ -286,7 +286,7 @@ static int __init egpio_probe(struct platform_device *pdev) | |||
| 286 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 286 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| 287 | if (!res) | 287 | if (!res) |
| 288 | goto fail; | 288 | goto fail; |
| 289 | ei->base_addr = ioremap_nocache(res->start, res->end - res->start); | 289 | ei->base_addr = ioremap_nocache(res->start, resource_size(res)); |
| 290 | if (!ei->base_addr) | 290 | if (!ei->base_addr) |
| 291 | goto fail; | 291 | goto fail; |
| 292 | pr_debug("EGPIO phys=%08x virt=%p\n", (u32)res->start, ei->base_addr); | 292 | pr_debug("EGPIO phys=%08x virt=%p\n", (u32)res->start, ei->base_addr); |
| @@ -307,7 +307,7 @@ static int __init egpio_probe(struct platform_device *pdev) | |||
| 307 | 307 | ||
| 308 | ei->nchips = pdata->num_chips; | 308 | ei->nchips = pdata->num_chips; |
| 309 | ei->chip = kzalloc(sizeof(struct egpio_chip) * ei->nchips, GFP_KERNEL); | 309 | ei->chip = kzalloc(sizeof(struct egpio_chip) * ei->nchips, GFP_KERNEL); |
| 310 | if (!ei) { | 310 | if (!ei->chip) { |
| 311 | ret = -ENOMEM; | 311 | ret = -ENOMEM; |
| 312 | goto fail; | 312 | goto fail; |
| 313 | } | 313 | } |
diff --git a/drivers/mfd/pcf50633-core.c b/drivers/mfd/pcf50633-core.c index ea9488e7ad6d..2e36057659e1 100644 --- a/drivers/mfd/pcf50633-core.c +++ b/drivers/mfd/pcf50633-core.c | |||
| @@ -678,6 +678,7 @@ static int __devexit pcf50633_remove(struct i2c_client *client) | |||
| 678 | 678 | ||
| 679 | static struct i2c_device_id pcf50633_id_table[] = { | 679 | static struct i2c_device_id pcf50633_id_table[] = { |
| 680 | {"pcf50633", 0x73}, | 680 | {"pcf50633", 0x73}, |
| 681 | {/* end of list */} | ||
| 681 | }; | 682 | }; |
| 682 | 683 | ||
| 683 | static struct i2c_driver pcf50633_driver = { | 684 | static struct i2c_driver pcf50633_driver = { |
diff --git a/drivers/mfd/sm501.c b/drivers/mfd/sm501.c index 0e5761f12634..4c7b7962f6b8 100644 --- a/drivers/mfd/sm501.c +++ b/drivers/mfd/sm501.c | |||
| @@ -1050,7 +1050,7 @@ static int __devinit sm501_gpio_register_chip(struct sm501_devdata *sm, | |||
| 1050 | return gpiochip_add(gchip); | 1050 | return gpiochip_add(gchip); |
| 1051 | } | 1051 | } |
| 1052 | 1052 | ||
| 1053 | static int sm501_register_gpio(struct sm501_devdata *sm) | 1053 | static int __devinit sm501_register_gpio(struct sm501_devdata *sm) |
| 1054 | { | 1054 | { |
| 1055 | struct sm501_gpio *gpio = &sm->gpio; | 1055 | struct sm501_gpio *gpio = &sm->gpio; |
| 1056 | resource_size_t iobase = sm->io_res->start + SM501_GPIO; | 1056 | resource_size_t iobase = sm->io_res->start + SM501_GPIO; |
| @@ -1321,7 +1321,7 @@ static unsigned int sm501_mem_local[] = { | |||
| 1321 | * Common init code for an SM501 | 1321 | * Common init code for an SM501 |
| 1322 | */ | 1322 | */ |
| 1323 | 1323 | ||
| 1324 | static int sm501_init_dev(struct sm501_devdata *sm) | 1324 | static int __devinit sm501_init_dev(struct sm501_devdata *sm) |
| 1325 | { | 1325 | { |
| 1326 | struct sm501_initdata *idata; | 1326 | struct sm501_initdata *idata; |
| 1327 | struct sm501_platdata *pdata; | 1327 | struct sm501_platdata *pdata; |
| @@ -1397,7 +1397,7 @@ static int sm501_init_dev(struct sm501_devdata *sm) | |||
| 1397 | return 0; | 1397 | return 0; |
| 1398 | } | 1398 | } |
| 1399 | 1399 | ||
| 1400 | static int sm501_plat_probe(struct platform_device *dev) | 1400 | static int __devinit sm501_plat_probe(struct platform_device *dev) |
| 1401 | { | 1401 | { |
| 1402 | struct sm501_devdata *sm; | 1402 | struct sm501_devdata *sm; |
| 1403 | int ret; | 1403 | int ret; |
| @@ -1586,8 +1586,8 @@ static struct sm501_platdata sm501_pci_platdata = { | |||
| 1586 | .gpio_base = -1, | 1586 | .gpio_base = -1, |
| 1587 | }; | 1587 | }; |
| 1588 | 1588 | ||
| 1589 | static int sm501_pci_probe(struct pci_dev *dev, | 1589 | static int __devinit sm501_pci_probe(struct pci_dev *dev, |
| 1590 | const struct pci_device_id *id) | 1590 | const struct pci_device_id *id) |
| 1591 | { | 1591 | { |
| 1592 | struct sm501_devdata *sm; | 1592 | struct sm501_devdata *sm; |
| 1593 | int err; | 1593 | int err; |
| @@ -1693,7 +1693,7 @@ static void sm501_dev_remove(struct sm501_devdata *sm) | |||
| 1693 | sm501_gpio_remove(sm); | 1693 | sm501_gpio_remove(sm); |
| 1694 | } | 1694 | } |
| 1695 | 1695 | ||
| 1696 | static void sm501_pci_remove(struct pci_dev *dev) | 1696 | static void __devexit sm501_pci_remove(struct pci_dev *dev) |
| 1697 | { | 1697 | { |
| 1698 | struct sm501_devdata *sm = pci_get_drvdata(dev); | 1698 | struct sm501_devdata *sm = pci_get_drvdata(dev); |
| 1699 | 1699 | ||
| @@ -1727,16 +1727,16 @@ static struct pci_device_id sm501_pci_tbl[] = { | |||
| 1727 | 1727 | ||
| 1728 | MODULE_DEVICE_TABLE(pci, sm501_pci_tbl); | 1728 | MODULE_DEVICE_TABLE(pci, sm501_pci_tbl); |
| 1729 | 1729 | ||
| 1730 | static struct pci_driver sm501_pci_drv = { | 1730 | static struct pci_driver sm501_pci_driver = { |
| 1731 | .name = "sm501", | 1731 | .name = "sm501", |
| 1732 | .id_table = sm501_pci_tbl, | 1732 | .id_table = sm501_pci_tbl, |
| 1733 | .probe = sm501_pci_probe, | 1733 | .probe = sm501_pci_probe, |
| 1734 | .remove = sm501_pci_remove, | 1734 | .remove = __devexit_p(sm501_pci_remove), |
| 1735 | }; | 1735 | }; |
| 1736 | 1736 | ||
| 1737 | MODULE_ALIAS("platform:sm501"); | 1737 | MODULE_ALIAS("platform:sm501"); |
| 1738 | 1738 | ||
| 1739 | static struct platform_driver sm501_plat_drv = { | 1739 | static struct platform_driver sm501_plat_driver = { |
| 1740 | .driver = { | 1740 | .driver = { |
| 1741 | .name = "sm501", | 1741 | .name = "sm501", |
| 1742 | .owner = THIS_MODULE, | 1742 | .owner = THIS_MODULE, |
| @@ -1749,14 +1749,14 @@ static struct platform_driver sm501_plat_drv = { | |||
| 1749 | 1749 | ||
| 1750 | static int __init sm501_base_init(void) | 1750 | static int __init sm501_base_init(void) |
| 1751 | { | 1751 | { |
| 1752 | platform_driver_register(&sm501_plat_drv); | 1752 | platform_driver_register(&sm501_plat_driver); |
| 1753 | return pci_register_driver(&sm501_pci_drv); | 1753 | return pci_register_driver(&sm501_pci_driver); |
| 1754 | } | 1754 | } |
| 1755 | 1755 | ||
| 1756 | static void __exit sm501_base_exit(void) | 1756 | static void __exit sm501_base_exit(void) |
| 1757 | { | 1757 | { |
| 1758 | platform_driver_unregister(&sm501_plat_drv); | 1758 | platform_driver_unregister(&sm501_plat_driver); |
| 1759 | pci_unregister_driver(&sm501_pci_drv); | 1759 | pci_unregister_driver(&sm501_pci_driver); |
| 1760 | } | 1760 | } |
| 1761 | 1761 | ||
| 1762 | module_init(sm501_base_init); | 1762 | module_init(sm501_base_init); |
diff --git a/drivers/mfd/twl4030-core.c b/drivers/mfd/twl4030-core.c index e7ab0035d305..68826f1e36bc 100644 --- a/drivers/mfd/twl4030-core.c +++ b/drivers/mfd/twl4030-core.c | |||
| @@ -38,7 +38,7 @@ | |||
| 38 | #include <linux/i2c.h> | 38 | #include <linux/i2c.h> |
| 39 | #include <linux/i2c/twl4030.h> | 39 | #include <linux/i2c/twl4030.h> |
| 40 | 40 | ||
| 41 | #ifdef CONFIG_ARM | 41 | #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) |
| 42 | #include <mach/cpu.h> | 42 | #include <mach/cpu.h> |
| 43 | #endif | 43 | #endif |
| 44 | 44 | ||
diff --git a/drivers/mfd/wm8350-core.c b/drivers/mfd/wm8350-core.c index f92595c8f165..84d5ea1ec171 100644 --- a/drivers/mfd/wm8350-core.c +++ b/drivers/mfd/wm8350-core.c | |||
| @@ -1111,7 +1111,7 @@ int wm8350_read_auxadc(struct wm8350 *wm8350, int channel, int scale, int vref) | |||
| 1111 | do { | 1111 | do { |
| 1112 | schedule_timeout_interruptible(1); | 1112 | schedule_timeout_interruptible(1); |
| 1113 | reg = wm8350_reg_read(wm8350, WM8350_DIGITISER_CONTROL_1); | 1113 | reg = wm8350_reg_read(wm8350, WM8350_DIGITISER_CONTROL_1); |
| 1114 | } while (tries-- && (reg & WM8350_AUXADC_POLL)); | 1114 | } while (--tries && (reg & WM8350_AUXADC_POLL)); |
| 1115 | 1115 | ||
| 1116 | if (!tries) | 1116 | if (!tries) |
| 1117 | dev_err(wm8350->dev, "adc chn %d read timeout\n", channel); | 1117 | dev_err(wm8350->dev, "adc chn %d read timeout\n", channel); |
| @@ -1297,14 +1297,29 @@ static void wm8350_client_dev_register(struct wm8350 *wm8350, | |||
| 1297 | int wm8350_device_init(struct wm8350 *wm8350, int irq, | 1297 | int wm8350_device_init(struct wm8350 *wm8350, int irq, |
| 1298 | struct wm8350_platform_data *pdata) | 1298 | struct wm8350_platform_data *pdata) |
| 1299 | { | 1299 | { |
| 1300 | int ret = -EINVAL; | 1300 | int ret; |
| 1301 | u16 id1, id2, mask_rev; | 1301 | u16 id1, id2, mask_rev; |
| 1302 | u16 cust_id, mode, chip_rev; | 1302 | u16 cust_id, mode, chip_rev; |
| 1303 | 1303 | ||
| 1304 | /* get WM8350 revision and config mode */ | 1304 | /* get WM8350 revision and config mode */ |
| 1305 | wm8350->read_dev(wm8350, WM8350_RESET_ID, sizeof(id1), &id1); | 1305 | ret = wm8350->read_dev(wm8350, WM8350_RESET_ID, sizeof(id1), &id1); |
| 1306 | wm8350->read_dev(wm8350, WM8350_ID, sizeof(id2), &id2); | 1306 | if (ret != 0) { |
| 1307 | wm8350->read_dev(wm8350, WM8350_REVISION, sizeof(mask_rev), &mask_rev); | 1307 | dev_err(wm8350->dev, "Failed to read ID: %d\n", ret); |
| 1308 | goto err; | ||
| 1309 | } | ||
| 1310 | |||
| 1311 | ret = wm8350->read_dev(wm8350, WM8350_ID, sizeof(id2), &id2); | ||
| 1312 | if (ret != 0) { | ||
| 1313 | dev_err(wm8350->dev, "Failed to read ID: %d\n", ret); | ||
| 1314 | goto err; | ||
| 1315 | } | ||
| 1316 | |||
| 1317 | ret = wm8350->read_dev(wm8350, WM8350_REVISION, sizeof(mask_rev), | ||
| 1318 | &mask_rev); | ||
| 1319 | if (ret != 0) { | ||
| 1320 | dev_err(wm8350->dev, "Failed to read revision: %d\n", ret); | ||
| 1321 | goto err; | ||
| 1322 | } | ||
| 1308 | 1323 | ||
| 1309 | id1 = be16_to_cpu(id1); | 1324 | id1 = be16_to_cpu(id1); |
| 1310 | id2 = be16_to_cpu(id2); | 1325 | id2 = be16_to_cpu(id2); |
| @@ -1404,14 +1419,12 @@ int wm8350_device_init(struct wm8350 *wm8350, int irq, | |||
| 1404 | return ret; | 1419 | return ret; |
| 1405 | } | 1420 | } |
| 1406 | 1421 | ||
| 1407 | if (pdata && pdata->init) { | 1422 | wm8350_reg_write(wm8350, WM8350_SYSTEM_INTERRUPTS_MASK, 0xFFFF); |
| 1408 | ret = pdata->init(wm8350); | 1423 | wm8350_reg_write(wm8350, WM8350_INT_STATUS_1_MASK, 0xFFFF); |
| 1409 | if (ret != 0) { | 1424 | wm8350_reg_write(wm8350, WM8350_INT_STATUS_2_MASK, 0xFFFF); |
| 1410 | dev_err(wm8350->dev, "Platform init() failed: %d\n", | 1425 | wm8350_reg_write(wm8350, WM8350_UNDER_VOLTAGE_INT_STATUS_MASK, 0xFFFF); |
| 1411 | ret); | 1426 | wm8350_reg_write(wm8350, WM8350_GPIO_INT_STATUS_MASK, 0xFFFF); |
| 1412 | goto err; | 1427 | wm8350_reg_write(wm8350, WM8350_COMPARATOR_INT_STATUS_MASK, 0xFFFF); |
| 1413 | } | ||
| 1414 | } | ||
| 1415 | 1428 | ||
| 1416 | mutex_init(&wm8350->auxadc_mutex); | 1429 | mutex_init(&wm8350->auxadc_mutex); |
| 1417 | mutex_init(&wm8350->irq_mutex); | 1430 | mutex_init(&wm8350->irq_mutex); |
| @@ -1430,6 +1443,15 @@ int wm8350_device_init(struct wm8350 *wm8350, int irq, | |||
| 1430 | } | 1443 | } |
| 1431 | wm8350->chip_irq = irq; | 1444 | wm8350->chip_irq = irq; |
| 1432 | 1445 | ||
| 1446 | if (pdata && pdata->init) { | ||
| 1447 | ret = pdata->init(wm8350); | ||
| 1448 | if (ret != 0) { | ||
| 1449 | dev_err(wm8350->dev, "Platform init() failed: %d\n", | ||
| 1450 | ret); | ||
| 1451 | goto err; | ||
| 1452 | } | ||
| 1453 | } | ||
| 1454 | |||
| 1433 | wm8350_reg_write(wm8350, WM8350_SYSTEM_INTERRUPTS_MASK, 0x0); | 1455 | wm8350_reg_write(wm8350, WM8350_SYSTEM_INTERRUPTS_MASK, 0x0); |
| 1434 | 1456 | ||
| 1435 | wm8350_client_dev_register(wm8350, "wm8350-codec", | 1457 | wm8350_client_dev_register(wm8350, "wm8350-codec", |
diff --git a/drivers/mfd/wm8350-regmap.c b/drivers/mfd/wm8350-regmap.c index 68887b817d17..9a4cc954cb7c 100644 --- a/drivers/mfd/wm8350-regmap.c +++ b/drivers/mfd/wm8350-regmap.c | |||
| @@ -3188,7 +3188,7 @@ const struct wm8350_reg_access wm8350_reg_io_map[] = { | |||
| 3188 | { 0x7CFF, 0x0C00, 0x7FFF }, /* R1 - ID */ | 3188 | { 0x7CFF, 0x0C00, 0x7FFF }, /* R1 - ID */ |
| 3189 | { 0x0000, 0x0000, 0x0000 }, /* R2 */ | 3189 | { 0x0000, 0x0000, 0x0000 }, /* R2 */ |
| 3190 | { 0xBE3B, 0xBE3B, 0x8000 }, /* R3 - System Control 1 */ | 3190 | { 0xBE3B, 0xBE3B, 0x8000 }, /* R3 - System Control 1 */ |
| 3191 | { 0xFCF7, 0xFCF7, 0xF800 }, /* R4 - System Control 2 */ | 3191 | { 0xFEF7, 0xFEF7, 0xF800 }, /* R4 - System Control 2 */ |
| 3192 | { 0x80FF, 0x80FF, 0x8000 }, /* R5 - System Hibernate */ | 3192 | { 0x80FF, 0x80FF, 0x8000 }, /* R5 - System Hibernate */ |
| 3193 | { 0xFB0E, 0xFB0E, 0x0000 }, /* R6 - Interface Control */ | 3193 | { 0xFB0E, 0xFB0E, 0x0000 }, /* R6 - Interface Control */ |
| 3194 | { 0x0000, 0x0000, 0x0000 }, /* R7 */ | 3194 | { 0x0000, 0x0000, 0x0000 }, /* R7 */ |
diff --git a/drivers/misc/hpilo.c b/drivers/misc/hpilo.c index f26667a7abf7..cf991850f01b 100644 --- a/drivers/misc/hpilo.c +++ b/drivers/misc/hpilo.c | |||
| @@ -710,6 +710,7 @@ out: | |||
| 710 | 710 | ||
| 711 | static struct pci_device_id ilo_devices[] = { | 711 | static struct pci_device_id ilo_devices[] = { |
| 712 | { PCI_DEVICE(PCI_VENDOR_ID_COMPAQ, 0xB204) }, | 712 | { PCI_DEVICE(PCI_VENDOR_ID_COMPAQ, 0xB204) }, |
| 713 | { PCI_DEVICE(PCI_VENDOR_ID_HP, 0x3307) }, | ||
| 713 | { } | 714 | { } |
| 714 | }; | 715 | }; |
| 715 | MODULE_DEVICE_TABLE(pci, ilo_devices); | 716 | MODULE_DEVICE_TABLE(pci, ilo_devices); |
| @@ -758,7 +759,7 @@ static void __exit ilo_exit(void) | |||
| 758 | class_destroy(ilo_class); | 759 | class_destroy(ilo_class); |
| 759 | } | 760 | } |
| 760 | 761 | ||
| 761 | MODULE_VERSION("0.06"); | 762 | MODULE_VERSION("1.0"); |
| 762 | MODULE_ALIAS(ILO_NAME); | 763 | MODULE_ALIAS(ILO_NAME); |
| 763 | MODULE_DESCRIPTION(ILO_NAME); | 764 | MODULE_DESCRIPTION(ILO_NAME); |
| 764 | MODULE_AUTHOR("David Altobelli <david.altobelli@hp.com>"); | 765 | MODULE_AUTHOR("David Altobelli <david.altobelli@hp.com>"); |
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index 45b1f430685f..513eb09a638f 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c | |||
| @@ -584,7 +584,7 @@ static int mmc_blk_probe(struct mmc_card *card) | |||
| 584 | if (err) | 584 | if (err) |
| 585 | goto out; | 585 | goto out; |
| 586 | 586 | ||
| 587 | string_get_size(get_capacity(md->disk) << 9, STRING_UNITS_2, | 587 | string_get_size((u64)get_capacity(md->disk) << 9, STRING_UNITS_2, |
| 588 | cap_str, sizeof(cap_str)); | 588 | cap_str, sizeof(cap_str)); |
| 589 | printk(KERN_INFO "%s: %s %s %s %s\n", | 589 | printk(KERN_INFO "%s: %s %s %s %s\n", |
| 590 | md->disk->disk_name, mmc_card_id(card), mmc_card_name(card), | 590 | md->disk->disk_name, mmc_card_id(card), mmc_card_name(card), |
diff --git a/drivers/mmc/card/mmc_test.c b/drivers/mmc/card/mmc_test.c index b92b172074ee..b9f1e84897cc 100644 --- a/drivers/mmc/card/mmc_test.c +++ b/drivers/mmc/card/mmc_test.c | |||
| @@ -494,7 +494,7 @@ static int mmc_test_basic_read(struct mmc_test_card *test) | |||
| 494 | 494 | ||
| 495 | sg_init_one(&sg, test->buffer, 512); | 495 | sg_init_one(&sg, test->buffer, 512); |
| 496 | 496 | ||
| 497 | ret = mmc_test_simple_transfer(test, &sg, 1, 0, 1, 512, 1); | 497 | ret = mmc_test_simple_transfer(test, &sg, 1, 0, 1, 512, 0); |
| 498 | if (ret) | 498 | if (ret) |
| 499 | return ret; | 499 | return ret; |
| 500 | 500 | ||
diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c index 9c50e6f1c236..34ce2703d29a 100644 --- a/drivers/mmc/core/mmc_ops.c +++ b/drivers/mmc/core/mmc_ops.c | |||
| @@ -248,12 +248,15 @@ mmc_send_cxd_data(struct mmc_card *card, struct mmc_host *host, | |||
| 248 | 248 | ||
| 249 | sg_init_one(&sg, data_buf, len); | 249 | sg_init_one(&sg, data_buf, len); |
| 250 | 250 | ||
| 251 | /* | 251 | if (opcode == MMC_SEND_CSD || opcode == MMC_SEND_CID) { |
| 252 | * The spec states that CSR and CID accesses have a timeout | 252 | /* |
| 253 | * of 64 clock cycles. | 253 | * The spec states that CSR and CID accesses have a timeout |
| 254 | */ | 254 | * of 64 clock cycles. |
| 255 | data.timeout_ns = 0; | 255 | */ |
| 256 | data.timeout_clks = 64; | 256 | data.timeout_ns = 0; |
| 257 | data.timeout_clks = 64; | ||
| 258 | } else | ||
| 259 | mmc_set_data_timeout(&data, card); | ||
| 257 | 260 | ||
| 258 | mmc_wait_for_req(host, &mrq); | 261 | mmc_wait_for_req(host, &mrq); |
| 259 | 262 | ||
diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c index 76bfe16c09b1..2b1196e6142c 100644 --- a/drivers/mmc/host/atmel-mci.c +++ b/drivers/mmc/host/atmel-mci.c | |||
| @@ -1548,9 +1548,10 @@ static bool filter(struct dma_chan *chan, void *slave) | |||
| 1548 | { | 1548 | { |
| 1549 | struct dw_dma_slave *dws = slave; | 1549 | struct dw_dma_slave *dws = slave; |
| 1550 | 1550 | ||
| 1551 | if (dws->dma_dev == chan->device->dev) | 1551 | if (dws->dma_dev == chan->device->dev) { |
| 1552 | chan->private = dws; | ||
| 1552 | return true; | 1553 | return true; |
| 1553 | else | 1554 | } else |
| 1554 | return false; | 1555 | return false; |
| 1555 | } | 1556 | } |
| 1556 | #endif | 1557 | #endif |
diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c index dda0be4e25dc..b4a615c55f28 100644 --- a/drivers/mmc/host/mxcmmc.c +++ b/drivers/mmc/host/mxcmmc.c | |||
| @@ -42,7 +42,7 @@ | |||
| 42 | #define HAS_DMA | 42 | #define HAS_DMA |
| 43 | #endif | 43 | #endif |
| 44 | 44 | ||
| 45 | #define DRIVER_NAME "imx-mmc" | 45 | #define DRIVER_NAME "mxc-mmc" |
| 46 | 46 | ||
| 47 | #define MMC_REG_STR_STP_CLK 0x00 | 47 | #define MMC_REG_STR_STP_CLK 0x00 |
| 48 | #define MMC_REG_STATUS 0x04 | 48 | #define MMC_REG_STATUS 0x04 |
| @@ -707,7 +707,7 @@ static int mxcmci_probe(struct platform_device *pdev) | |||
| 707 | host->res = r; | 707 | host->res = r; |
| 708 | host->irq = irq; | 708 | host->irq = irq; |
| 709 | 709 | ||
| 710 | host->clk = clk_get(&pdev->dev, "sdhc_clk"); | 710 | host->clk = clk_get(&pdev->dev, NULL); |
| 711 | if (IS_ERR(host->clk)) { | 711 | if (IS_ERR(host->clk)) { |
| 712 | ret = PTR_ERR(host->clk); | 712 | ret = PTR_ERR(host->clk); |
| 713 | goto out_iounmap; | 713 | goto out_iounmap; |
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index db37490f67ec..a631c81dce12 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c | |||
| @@ -55,6 +55,7 @@ | |||
| 55 | #define VS30 (1 << 25) | 55 | #define VS30 (1 << 25) |
| 56 | #define SDVS18 (0x5 << 9) | 56 | #define SDVS18 (0x5 << 9) |
| 57 | #define SDVS30 (0x6 << 9) | 57 | #define SDVS30 (0x6 << 9) |
| 58 | #define SDVS33 (0x7 << 9) | ||
| 58 | #define SDVSCLR 0xFFFFF1FF | 59 | #define SDVSCLR 0xFFFFF1FF |
| 59 | #define SDVSDET 0x00000400 | 60 | #define SDVSDET 0x00000400 |
| 60 | #define AUTOIDLE 0x1 | 61 | #define AUTOIDLE 0x1 |
| @@ -375,6 +376,32 @@ static void mmc_omap_report_irq(struct mmc_omap_host *host, u32 status) | |||
| 375 | } | 376 | } |
| 376 | #endif /* CONFIG_MMC_DEBUG */ | 377 | #endif /* CONFIG_MMC_DEBUG */ |
| 377 | 378 | ||
| 379 | /* | ||
| 380 | * MMC controller internal state machines reset | ||
| 381 | * | ||
| 382 | * Used to reset command or data internal state machines, using respectively | ||
| 383 | * SRC or SRD bit of SYSCTL register | ||
| 384 | * Can be called from interrupt context | ||
| 385 | */ | ||
| 386 | static inline void mmc_omap_reset_controller_fsm(struct mmc_omap_host *host, | ||
| 387 | unsigned long bit) | ||
| 388 | { | ||
| 389 | unsigned long i = 0; | ||
| 390 | unsigned long limit = (loops_per_jiffy * | ||
| 391 | msecs_to_jiffies(MMC_TIMEOUT_MS)); | ||
| 392 | |||
| 393 | OMAP_HSMMC_WRITE(host->base, SYSCTL, | ||
| 394 | OMAP_HSMMC_READ(host->base, SYSCTL) | bit); | ||
| 395 | |||
| 396 | while ((OMAP_HSMMC_READ(host->base, SYSCTL) & bit) && | ||
| 397 | (i++ < limit)) | ||
| 398 | cpu_relax(); | ||
| 399 | |||
| 400 | if (OMAP_HSMMC_READ(host->base, SYSCTL) & bit) | ||
| 401 | dev_err(mmc_dev(host->mmc), | ||
| 402 | "Timeout waiting on controller reset in %s\n", | ||
| 403 | __func__); | ||
| 404 | } | ||
| 378 | 405 | ||
| 379 | /* | 406 | /* |
| 380 | * MMC controller IRQ handler | 407 | * MMC controller IRQ handler |
| @@ -403,21 +430,17 @@ static irqreturn_t mmc_omap_irq(int irq, void *dev_id) | |||
| 403 | (status & CMD_CRC)) { | 430 | (status & CMD_CRC)) { |
| 404 | if (host->cmd) { | 431 | if (host->cmd) { |
| 405 | if (status & CMD_TIMEOUT) { | 432 | if (status & CMD_TIMEOUT) { |
| 406 | OMAP_HSMMC_WRITE(host->base, SYSCTL, | 433 | mmc_omap_reset_controller_fsm(host, SRC); |
| 407 | OMAP_HSMMC_READ(host->base, | ||
| 408 | SYSCTL) | SRC); | ||
| 409 | while (OMAP_HSMMC_READ(host->base, | ||
| 410 | SYSCTL) & SRC) | ||
| 411 | ; | ||
| 412 | |||
| 413 | host->cmd->error = -ETIMEDOUT; | 434 | host->cmd->error = -ETIMEDOUT; |
| 414 | } else { | 435 | } else { |
| 415 | host->cmd->error = -EILSEQ; | 436 | host->cmd->error = -EILSEQ; |
| 416 | } | 437 | } |
| 417 | end_cmd = 1; | 438 | end_cmd = 1; |
| 418 | } | 439 | } |
| 419 | if (host->data) | 440 | if (host->data) { |
| 420 | mmc_dma_cleanup(host); | 441 | mmc_dma_cleanup(host); |
| 442 | mmc_omap_reset_controller_fsm(host, SRD); | ||
| 443 | } | ||
| 421 | } | 444 | } |
| 422 | if ((status & DATA_TIMEOUT) || | 445 | if ((status & DATA_TIMEOUT) || |
| 423 | (status & DATA_CRC)) { | 446 | (status & DATA_CRC)) { |
| @@ -426,12 +449,7 @@ static irqreturn_t mmc_omap_irq(int irq, void *dev_id) | |||
| 426 | mmc_dma_cleanup(host); | 449 | mmc_dma_cleanup(host); |
| 427 | else | 450 | else |
| 428 | host->data->error = -EILSEQ; | 451 | host->data->error = -EILSEQ; |
| 429 | OMAP_HSMMC_WRITE(host->base, SYSCTL, | 452 | mmc_omap_reset_controller_fsm(host, SRD); |
| 430 | OMAP_HSMMC_READ(host->base, | ||
| 431 | SYSCTL) | SRD); | ||
| 432 | while (OMAP_HSMMC_READ(host->base, | ||
| 433 | SYSCTL) & SRD) | ||
| 434 | ; | ||
| 435 | end_trans = 1; | 453 | end_trans = 1; |
| 436 | } | 454 | } |
| 437 | } | 455 | } |
| @@ -456,13 +474,20 @@ static irqreturn_t mmc_omap_irq(int irq, void *dev_id) | |||
| 456 | } | 474 | } |
| 457 | 475 | ||
| 458 | /* | 476 | /* |
| 459 | * Switch MMC operating voltage | 477 | * Switch MMC interface voltage ... only relevant for MMC1. |
| 478 | * | ||
| 479 | * MMC2 and MMC3 use fixed 1.8V levels, and maybe a transceiver. | ||
| 480 | * The MMC2 transceiver controls are used instead of DAT4..DAT7. | ||
| 481 | * Some chips, like eMMC ones, use internal transceivers. | ||
| 460 | */ | 482 | */ |
| 461 | static int omap_mmc_switch_opcond(struct mmc_omap_host *host, int vdd) | 483 | static int omap_mmc_switch_opcond(struct mmc_omap_host *host, int vdd) |
| 462 | { | 484 | { |
| 463 | u32 reg_val = 0; | 485 | u32 reg_val = 0; |
| 464 | int ret; | 486 | int ret; |
| 465 | 487 | ||
| 488 | if (host->id != OMAP_MMC1_DEVID) | ||
| 489 | return 0; | ||
| 490 | |||
| 466 | /* Disable the clocks */ | 491 | /* Disable the clocks */ |
| 467 | clk_disable(host->fclk); | 492 | clk_disable(host->fclk); |
| 468 | clk_disable(host->iclk); | 493 | clk_disable(host->iclk); |
| @@ -485,19 +510,26 @@ static int omap_mmc_switch_opcond(struct mmc_omap_host *host, int vdd) | |||
| 485 | OMAP_HSMMC_WRITE(host->base, HCTL, | 510 | OMAP_HSMMC_WRITE(host->base, HCTL, |
| 486 | OMAP_HSMMC_READ(host->base, HCTL) & SDVSCLR); | 511 | OMAP_HSMMC_READ(host->base, HCTL) & SDVSCLR); |
| 487 | reg_val = OMAP_HSMMC_READ(host->base, HCTL); | 512 | reg_val = OMAP_HSMMC_READ(host->base, HCTL); |
| 513 | |||
| 488 | /* | 514 | /* |
| 489 | * If a MMC dual voltage card is detected, the set_ios fn calls | 515 | * If a MMC dual voltage card is detected, the set_ios fn calls |
| 490 | * this fn with VDD bit set for 1.8V. Upon card removal from the | 516 | * this fn with VDD bit set for 1.8V. Upon card removal from the |
| 491 | * slot, omap_mmc_set_ios sets the VDD back to 3V on MMC_POWER_OFF. | 517 | * slot, omap_mmc_set_ios sets the VDD back to 3V on MMC_POWER_OFF. |
| 492 | * | 518 | * |
| 493 | * Only MMC1 supports 3.0V. MMC2 will not function if SDVS30 is | 519 | * Cope with a bit of slop in the range ... per data sheets: |
| 494 | * set in HCTL. | 520 | * - "1.8V" for vdds_mmc1/vdds_mmc1a can be up to 2.45V max, |
| 521 | * but recommended values are 1.71V to 1.89V | ||
| 522 | * - "3.0V" for vdds_mmc1/vdds_mmc1a can be up to 3.5V max, | ||
| 523 | * but recommended values are 2.7V to 3.3V | ||
| 524 | * | ||
| 525 | * Board setup code shouldn't permit anything very out-of-range. | ||
| 526 | * TWL4030-family VMMC1 and VSIM regulators are fine (avoiding the | ||
| 527 | * middle range) but VSIM can't power DAT4..DAT7 at more than 3V. | ||
| 495 | */ | 528 | */ |
| 496 | if (host->id == OMAP_MMC1_DEVID && (((1 << vdd) == MMC_VDD_32_33) || | 529 | if ((1 << vdd) <= MMC_VDD_23_24) |
| 497 | ((1 << vdd) == MMC_VDD_33_34))) | ||
| 498 | reg_val |= SDVS30; | ||
| 499 | if ((1 << vdd) == MMC_VDD_165_195) | ||
| 500 | reg_val |= SDVS18; | 530 | reg_val |= SDVS18; |
| 531 | else | ||
| 532 | reg_val |= SDVS30; | ||
| 501 | 533 | ||
| 502 | OMAP_HSMMC_WRITE(host->base, HCTL, reg_val); | 534 | OMAP_HSMMC_WRITE(host->base, HCTL, reg_val); |
| 503 | 535 | ||
| @@ -517,16 +549,15 @@ static void mmc_omap_detect(struct work_struct *work) | |||
| 517 | { | 549 | { |
| 518 | struct mmc_omap_host *host = container_of(work, struct mmc_omap_host, | 550 | struct mmc_omap_host *host = container_of(work, struct mmc_omap_host, |
| 519 | mmc_carddetect_work); | 551 | mmc_carddetect_work); |
| 552 | struct omap_mmc_slot_data *slot = &mmc_slot(host); | ||
| 553 | |||
| 554 | host->carddetect = slot->card_detect(slot->card_detect_irq); | ||
| 520 | 555 | ||
| 521 | sysfs_notify(&host->mmc->class_dev.kobj, NULL, "cover_switch"); | 556 | sysfs_notify(&host->mmc->class_dev.kobj, NULL, "cover_switch"); |
| 522 | if (host->carddetect) { | 557 | if (host->carddetect) { |
| 523 | mmc_detect_change(host->mmc, (HZ * 200) / 1000); | 558 | mmc_detect_change(host->mmc, (HZ * 200) / 1000); |
| 524 | } else { | 559 | } else { |
| 525 | OMAP_HSMMC_WRITE(host->base, SYSCTL, | 560 | mmc_omap_reset_controller_fsm(host, SRD); |
| 526 | OMAP_HSMMC_READ(host->base, SYSCTL) | SRD); | ||
| 527 | while (OMAP_HSMMC_READ(host->base, SYSCTL) & SRD) | ||
| 528 | ; | ||
| 529 | |||
| 530 | mmc_detect_change(host->mmc, (HZ * 50) / 1000); | 561 | mmc_detect_change(host->mmc, (HZ * 50) / 1000); |
| 531 | } | 562 | } |
| 532 | } | 563 | } |
| @@ -538,7 +569,6 @@ static irqreturn_t omap_mmc_cd_handler(int irq, void *dev_id) | |||
| 538 | { | 569 | { |
| 539 | struct mmc_omap_host *host = (struct mmc_omap_host *)dev_id; | 570 | struct mmc_omap_host *host = (struct mmc_omap_host *)dev_id; |
| 540 | 571 | ||
| 541 | host->carddetect = mmc_slot(host).card_detect(irq); | ||
| 542 | schedule_work(&host->mmc_carddetect_work); | 572 | schedule_work(&host->mmc_carddetect_work); |
| 543 | 573 | ||
| 544 | return IRQ_HANDLED; | 574 | return IRQ_HANDLED; |
| @@ -757,10 +787,14 @@ static void omap_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) | |||
| 757 | case MMC_POWER_OFF: | 787 | case MMC_POWER_OFF: |
| 758 | mmc_slot(host).set_power(host->dev, host->slot_id, 0, 0); | 788 | mmc_slot(host).set_power(host->dev, host->slot_id, 0, 0); |
| 759 | /* | 789 | /* |
| 760 | * Reset bus voltage to 3V if it got set to 1.8V earlier. | 790 | * Reset interface voltage to 3V if it's 1.8V now; |
| 791 | * only relevant on MMC-1, the others always use 1.8V. | ||
| 792 | * | ||
| 761 | * REVISIT: If we are able to detect cards after unplugging | 793 | * REVISIT: If we are able to detect cards after unplugging |
| 762 | * a 1.8V card, this code should not be needed. | 794 | * a 1.8V card, this code should not be needed. |
| 763 | */ | 795 | */ |
| 796 | if (host->id != OMAP_MMC1_DEVID) | ||
| 797 | break; | ||
| 764 | if (!(OMAP_HSMMC_READ(host->base, HCTL) & SDVSDET)) { | 798 | if (!(OMAP_HSMMC_READ(host->base, HCTL) & SDVSDET)) { |
| 765 | int vdd = fls(host->mmc->ocr_avail) - 1; | 799 | int vdd = fls(host->mmc->ocr_avail) - 1; |
| 766 | if (omap_mmc_switch_opcond(host, vdd) != 0) | 800 | if (omap_mmc_switch_opcond(host, vdd) != 0) |
| @@ -784,7 +818,9 @@ static void omap_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) | |||
| 784 | } | 818 | } |
| 785 | 819 | ||
| 786 | if (host->id == OMAP_MMC1_DEVID) { | 820 | if (host->id == OMAP_MMC1_DEVID) { |
| 787 | /* Only MMC1 can operate at 3V/1.8V */ | 821 | /* Only MMC1 can interface at 3V without some flavor |
| 822 | * of external transceiver; but they all handle 1.8V. | ||
| 823 | */ | ||
| 788 | if ((OMAP_HSMMC_READ(host->base, HCTL) & SDVSDET) && | 824 | if ((OMAP_HSMMC_READ(host->base, HCTL) & SDVSDET) && |
| 789 | (ios->vdd == DUAL_VOLT_OCR_BIT)) { | 825 | (ios->vdd == DUAL_VOLT_OCR_BIT)) { |
| 790 | /* | 826 | /* |
| @@ -1137,7 +1173,9 @@ static int omap_mmc_suspend(struct platform_device *pdev, pm_message_t state) | |||
| 1137 | " level suspend\n"); | 1173 | " level suspend\n"); |
| 1138 | } | 1174 | } |
| 1139 | 1175 | ||
| 1140 | if (!(OMAP_HSMMC_READ(host->base, HCTL) & SDVSDET)) { | 1176 | if (host->id == OMAP_MMC1_DEVID |
| 1177 | && !(OMAP_HSMMC_READ(host->base, HCTL) | ||
| 1178 | & SDVSDET)) { | ||
| 1141 | OMAP_HSMMC_WRITE(host->base, HCTL, | 1179 | OMAP_HSMMC_WRITE(host->base, HCTL, |
| 1142 | OMAP_HSMMC_READ(host->base, HCTL) | 1180 | OMAP_HSMMC_READ(host->base, HCTL) |
| 1143 | & SDVSCLR); | 1181 | & SDVSCLR); |
diff --git a/drivers/mmc/host/s3cmci.c b/drivers/mmc/host/s3cmci.c index 35a98eec7414..f4a67c65d301 100644 --- a/drivers/mmc/host/s3cmci.c +++ b/drivers/mmc/host/s3cmci.c | |||
| @@ -329,7 +329,7 @@ static void do_pio_write(struct s3cmci_host *host) | |||
| 329 | 329 | ||
| 330 | to_ptr = host->base + host->sdidata; | 330 | to_ptr = host->base + host->sdidata; |
| 331 | 331 | ||
| 332 | while ((fifo = fifo_free(host))) { | 332 | while ((fifo = fifo_free(host)) > 3) { |
| 333 | if (!host->pio_bytes) { | 333 | if (!host->pio_bytes) { |
| 334 | res = get_data_buffer(host, &host->pio_bytes, | 334 | res = get_data_buffer(host, &host->pio_bytes, |
| 335 | &host->pio_ptr); | 335 | &host->pio_ptr); |
diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c index f07255cb17ee..406da9a8d453 100644 --- a/drivers/mmc/host/sdhci-pci.c +++ b/drivers/mmc/host/sdhci-pci.c | |||
| @@ -107,6 +107,7 @@ static const struct sdhci_pci_fixes sdhci_ene_714 = { | |||
| 107 | 107 | ||
| 108 | static const struct sdhci_pci_fixes sdhci_cafe = { | 108 | static const struct sdhci_pci_fixes sdhci_cafe = { |
| 109 | .quirks = SDHCI_QUIRK_NO_SIMULT_VDD_AND_POWER | | 109 | .quirks = SDHCI_QUIRK_NO_SIMULT_VDD_AND_POWER | |
| 110 | SDHCI_QUIRK_NO_BUSY_IRQ | | ||
| 110 | SDHCI_QUIRK_BROKEN_TIMEOUT_VAL, | 111 | SDHCI_QUIRK_BROKEN_TIMEOUT_VAL, |
| 111 | }; | 112 | }; |
| 112 | 113 | ||
| @@ -144,8 +145,7 @@ static int jmicron_probe(struct sdhci_pci_chip *chip) | |||
| 144 | SDHCI_QUIRK_32BIT_DMA_SIZE | | 145 | SDHCI_QUIRK_32BIT_DMA_SIZE | |
| 145 | SDHCI_QUIRK_32BIT_ADMA_SIZE | | 146 | SDHCI_QUIRK_32BIT_ADMA_SIZE | |
| 146 | SDHCI_QUIRK_RESET_AFTER_REQUEST | | 147 | SDHCI_QUIRK_RESET_AFTER_REQUEST | |
| 147 | SDHCI_QUIRK_BROKEN_SMALL_PIO | | 148 | SDHCI_QUIRK_BROKEN_SMALL_PIO; |
| 148 | SDHCI_QUIRK_FORCE_HIGHSPEED; | ||
| 149 | } | 149 | } |
| 150 | 150 | ||
| 151 | /* | 151 | /* |
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 6b2d1f99af67..accb592764ed 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c | |||
| @@ -1291,8 +1291,11 @@ static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask) | |||
| 1291 | if (host->cmd->data) | 1291 | if (host->cmd->data) |
| 1292 | DBG("Cannot wait for busy signal when also " | 1292 | DBG("Cannot wait for busy signal when also " |
| 1293 | "doing a data transfer"); | 1293 | "doing a data transfer"); |
| 1294 | else | 1294 | else if (!(host->quirks & SDHCI_QUIRK_NO_BUSY_IRQ)) |
| 1295 | return; | 1295 | return; |
| 1296 | |||
| 1297 | /* The controller does not support the end-of-busy IRQ, | ||
| 1298 | * fall through and take the SDHCI_INT_RESPONSE */ | ||
| 1296 | } | 1299 | } |
| 1297 | 1300 | ||
| 1298 | if (intmask & SDHCI_INT_RESPONSE) | 1301 | if (intmask & SDHCI_INT_RESPONSE) |
| @@ -1636,8 +1639,7 @@ int sdhci_add_host(struct sdhci_host *host) | |||
| 1636 | mmc->f_max = host->max_clk; | 1639 | mmc->f_max = host->max_clk; |
| 1637 | mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_SDIO_IRQ; | 1640 | mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_SDIO_IRQ; |
| 1638 | 1641 | ||
| 1639 | if ((caps & SDHCI_CAN_DO_HISPD) || | 1642 | if (caps & SDHCI_CAN_DO_HISPD) |
| 1640 | (host->quirks & SDHCI_QUIRK_FORCE_HIGHSPEED)) | ||
| 1641 | mmc->caps |= MMC_CAP_SD_HIGHSPEED; | 1643 | mmc->caps |= MMC_CAP_SD_HIGHSPEED; |
| 1642 | 1644 | ||
| 1643 | mmc->ocr_avail = 0; | 1645 | mmc->ocr_avail = 0; |
| @@ -1723,7 +1725,9 @@ int sdhci_add_host(struct sdhci_host *host) | |||
| 1723 | #endif | 1725 | #endif |
| 1724 | 1726 | ||
| 1725 | #ifdef SDHCI_USE_LEDS_CLASS | 1727 | #ifdef SDHCI_USE_LEDS_CLASS |
| 1726 | host->led.name = mmc_hostname(mmc); | 1728 | snprintf(host->led_name, sizeof(host->led_name), |
| 1729 | "%s::", mmc_hostname(mmc)); | ||
| 1730 | host->led.name = host->led_name; | ||
| 1727 | host->led.brightness = LED_OFF; | 1731 | host->led.brightness = LED_OFF; |
| 1728 | host->led.default_trigger = mmc_hostname(mmc); | 1732 | host->led.default_trigger = mmc_hostname(mmc); |
| 1729 | host->led.brightness_set = sdhci_led_control; | 1733 | host->led.brightness_set = sdhci_led_control; |
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index 3efba2363941..43c37c68d07a 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h | |||
| @@ -208,8 +208,8 @@ struct sdhci_host { | |||
| 208 | #define SDHCI_QUIRK_BROKEN_TIMEOUT_VAL (1<<12) | 208 | #define SDHCI_QUIRK_BROKEN_TIMEOUT_VAL (1<<12) |
| 209 | /* Controller has an issue with buffer bits for small transfers */ | 209 | /* Controller has an issue with buffer bits for small transfers */ |
| 210 | #define SDHCI_QUIRK_BROKEN_SMALL_PIO (1<<13) | 210 | #define SDHCI_QUIRK_BROKEN_SMALL_PIO (1<<13) |
| 211 | /* Controller supports high speed but doesn't have the caps bit set */ | 211 | /* Controller does not provide transfer-complete interrupt when not busy */ |
| 212 | #define SDHCI_QUIRK_FORCE_HIGHSPEED (1<<14) | 212 | #define SDHCI_QUIRK_NO_BUSY_IRQ (1<<14) |
| 213 | 213 | ||
| 214 | int irq; /* Device IRQ */ | 214 | int irq; /* Device IRQ */ |
| 215 | void __iomem * ioaddr; /* Mapped address */ | 215 | void __iomem * ioaddr; /* Mapped address */ |
| @@ -222,6 +222,7 @@ struct sdhci_host { | |||
| 222 | 222 | ||
| 223 | #if defined(CONFIG_LEDS_CLASS) || defined(CONFIG_LEDS_CLASS_MODULE) | 223 | #if defined(CONFIG_LEDS_CLASS) || defined(CONFIG_LEDS_CLASS_MODULE) |
| 224 | struct led_classdev led; /* LED control */ | 224 | struct led_classdev led; /* LED control */ |
| 225 | char led_name[32]; | ||
| 225 | #endif | 226 | #endif |
| 226 | 227 | ||
| 227 | spinlock_t lock; /* Mutex */ | 228 | spinlock_t lock; /* Mutex */ |
diff --git a/drivers/mtd/chips/map_rom.c b/drivers/mtd/chips/map_rom.c index 821d0ed6bae3..c76d6e5f47ee 100644 --- a/drivers/mtd/chips/map_rom.c +++ b/drivers/mtd/chips/map_rom.c | |||
| @@ -19,6 +19,7 @@ static int maprom_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *); | |||
| 19 | static int maprom_write (struct mtd_info *, loff_t, size_t, size_t *, const u_char *); | 19 | static int maprom_write (struct mtd_info *, loff_t, size_t, size_t *, const u_char *); |
| 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 | 23 | ||
| 23 | static struct mtd_chip_driver maprom_chipdrv = { | 24 | static struct mtd_chip_driver maprom_chipdrv = { |
| 24 | .probe = map_rom_probe, | 25 | .probe = map_rom_probe, |
| @@ -42,6 +43,7 @@ static struct mtd_info *map_rom_probe(struct map_info *map) | |||
| 42 | mtd->read = maprom_read; | 43 | mtd->read = maprom_read; |
| 43 | mtd->write = maprom_write; | 44 | mtd->write = maprom_write; |
| 44 | mtd->sync = maprom_nop; | 45 | mtd->sync = maprom_nop; |
| 46 | mtd->erase = maprom_erase; | ||
| 45 | mtd->flags = MTD_CAP_ROM; | 47 | mtd->flags = MTD_CAP_ROM; |
| 46 | mtd->erasesize = map->size; | 48 | mtd->erasesize = map->size; |
| 47 | mtd->writesize = 1; | 49 | mtd->writesize = 1; |
| @@ -71,6 +73,12 @@ static int maprom_write (struct mtd_info *mtd, loff_t to, size_t len, size_t *re | |||
| 71 | return -EIO; | 73 | return -EIO; |
| 72 | } | 74 | } |
| 73 | 75 | ||
| 76 | static int maprom_erase (struct mtd_info *mtd, struct erase_info *info) | ||
| 77 | { | ||
| 78 | /* We do our best 8) */ | ||
| 79 | return -EROFS; | ||
| 80 | } | ||
| 81 | |||
| 74 | static int __init map_rom_init(void) | 82 | static int __init map_rom_init(void) |
| 75 | { | 83 | { |
| 76 | register_mtd_chip_driver(&maprom_chipdrv); | 84 | register_mtd_chip_driver(&maprom_chipdrv); |
diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c index d44f741ae229..6d9f810565c8 100644 --- a/drivers/mtd/devices/mtd_dataflash.c +++ b/drivers/mtd/devices/mtd_dataflash.c | |||
| @@ -821,7 +821,8 @@ static struct flash_info *__devinit jedec_probe(struct spi_device *spi) | |||
| 821 | if (!(info->flags & IS_POW2PS)) | 821 | if (!(info->flags & IS_POW2PS)) |
| 822 | return info; | 822 | return info; |
| 823 | } | 823 | } |
| 824 | } | 824 | } else |
| 825 | return info; | ||
| 825 | } | 826 | } |
| 826 | } | 827 | } |
| 827 | 828 | ||
diff --git a/drivers/mtd/devices/slram.c b/drivers/mtd/devices/slram.c index a425d09f35a0..00248e81ecd5 100644 --- a/drivers/mtd/devices/slram.c +++ b/drivers/mtd/devices/slram.c | |||
| @@ -267,22 +267,28 @@ static int parse_cmdline(char *devname, char *szstart, char *szlength) | |||
| 267 | if (*(szlength) != '+') { | 267 | if (*(szlength) != '+') { |
| 268 | devlength = simple_strtoul(szlength, &buffer, 0); | 268 | devlength = simple_strtoul(szlength, &buffer, 0); |
| 269 | devlength = handle_unit(devlength, buffer) - devstart; | 269 | devlength = handle_unit(devlength, buffer) - devstart; |
| 270 | if (devlength < devstart) | ||
| 271 | goto err_out; | ||
| 272 | |||
| 273 | devlength -= devstart; | ||
| 270 | } else { | 274 | } else { |
| 271 | devlength = simple_strtoul(szlength + 1, &buffer, 0); | 275 | devlength = simple_strtoul(szlength + 1, &buffer, 0); |
| 272 | devlength = handle_unit(devlength, buffer); | 276 | devlength = handle_unit(devlength, buffer); |
| 273 | } | 277 | } |
| 274 | T("slram: devname=%s, devstart=0x%lx, devlength=0x%lx\n", | 278 | T("slram: devname=%s, devstart=0x%lx, devlength=0x%lx\n", |
| 275 | devname, devstart, devlength); | 279 | devname, devstart, devlength); |
| 276 | if ((devstart < 0) || (devlength < 0) || (devlength % SLRAM_BLK_SZ != 0)) { | 280 | if (devlength % SLRAM_BLK_SZ != 0) |
| 277 | E("slram: Illegal start / length parameter.\n"); | 281 | goto err_out; |
| 278 | return(-EINVAL); | ||
| 279 | } | ||
| 280 | 282 | ||
| 281 | if ((devstart = register_device(devname, devstart, devlength))){ | 283 | if ((devstart = register_device(devname, devstart, devlength))){ |
| 282 | unregister_devices(); | 284 | unregister_devices(); |
| 283 | return((int)devstart); | 285 | return((int)devstart); |
| 284 | } | 286 | } |
| 285 | return(0); | 287 | return(0); |
| 288 | |||
| 289 | err_out: | ||
| 290 | E("slram: Illegal length parameter.\n"); | ||
| 291 | return(-EINVAL); | ||
| 286 | } | 292 | } |
| 287 | 293 | ||
| 288 | #ifndef MODULE | 294 | #ifndef MODULE |
diff --git a/drivers/mtd/lpddr/Kconfig b/drivers/mtd/lpddr/Kconfig index acd4ea9b2278..5a401d8047ab 100644 --- a/drivers/mtd/lpddr/Kconfig +++ b/drivers/mtd/lpddr/Kconfig | |||
| @@ -12,6 +12,7 @@ config MTD_LPDDR | |||
| 12 | DDR memories, intended for battery-operated systems. | 12 | DDR memories, intended for battery-operated systems. |
| 13 | 13 | ||
| 14 | config MTD_QINFO_PROBE | 14 | config MTD_QINFO_PROBE |
| 15 | depends on MTD_LPDDR | ||
| 15 | tristate "Detect flash chips by QINFO probe" | 16 | tristate "Detect flash chips by QINFO probe" |
| 16 | help | 17 | help |
| 17 | Device Information for LPDDR chips is offered through the Overlay | 18 | Device Information for LPDDR chips is offered through the Overlay |
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig index 0225cbbf22de..043d50fb6ef6 100644 --- a/drivers/mtd/maps/Kconfig +++ b/drivers/mtd/maps/Kconfig | |||
| @@ -491,7 +491,7 @@ config MTD_PCMCIA_ANONYMOUS | |||
| 491 | 491 | ||
| 492 | config MTD_BFIN_ASYNC | 492 | config MTD_BFIN_ASYNC |
| 493 | tristate "Blackfin BF533-STAMP Flash Chip Support" | 493 | tristate "Blackfin BF533-STAMP Flash Chip Support" |
| 494 | depends on BFIN533_STAMP && MTD_CFI | 494 | depends on BFIN533_STAMP && MTD_CFI && MTD_COMPLEX_MAPPINGS |
| 495 | select MTD_PARTITIONS | 495 | select MTD_PARTITIONS |
| 496 | default y | 496 | default y |
| 497 | help | 497 | help |
diff --git a/drivers/mtd/maps/bfin-async-flash.c b/drivers/mtd/maps/bfin-async-flash.c index 6fec86aaed7e..576611f605db 100644 --- a/drivers/mtd/maps/bfin-async-flash.c +++ b/drivers/mtd/maps/bfin-async-flash.c | |||
| @@ -152,14 +152,18 @@ static int __devinit bfin_flash_probe(struct platform_device *pdev) | |||
| 152 | 152 | ||
| 153 | if (gpio_request(state->enet_flash_pin, DRIVER_NAME)) { | 153 | if (gpio_request(state->enet_flash_pin, DRIVER_NAME)) { |
| 154 | pr_devinit(KERN_ERR DRIVER_NAME ": Failed to request gpio %d\n", state->enet_flash_pin); | 154 | pr_devinit(KERN_ERR DRIVER_NAME ": Failed to request gpio %d\n", state->enet_flash_pin); |
| 155 | kfree(state); | ||
| 155 | return -EBUSY; | 156 | return -EBUSY; |
| 156 | } | 157 | } |
| 157 | gpio_direction_output(state->enet_flash_pin, 1); | 158 | gpio_direction_output(state->enet_flash_pin, 1); |
| 158 | 159 | ||
| 159 | pr_devinit(KERN_NOTICE DRIVER_NAME ": probing %d-bit flash bus\n", state->map.bankwidth * 8); | 160 | pr_devinit(KERN_NOTICE DRIVER_NAME ": probing %d-bit flash bus\n", state->map.bankwidth * 8); |
| 160 | state->mtd = do_map_probe(memory->name, &state->map); | 161 | state->mtd = do_map_probe(memory->name, &state->map); |
| 161 | if (!state->mtd) | 162 | if (!state->mtd) { |
| 163 | gpio_free(state->enet_flash_pin); | ||
| 164 | kfree(state); | ||
| 162 | return -ENXIO; | 165 | return -ENXIO; |
| 166 | } | ||
| 163 | 167 | ||
| 164 | #ifdef CONFIG_MTD_PARTITIONS | 168 | #ifdef CONFIG_MTD_PARTITIONS |
| 165 | ret = parse_mtd_partitions(state->mtd, part_probe_types, &pdata->parts, 0); | 169 | ret = parse_mtd_partitions(state->mtd, part_probe_types, &pdata->parts, 0); |
diff --git a/drivers/mtd/maps/ck804xrom.c b/drivers/mtd/maps/ck804xrom.c index 5f7a245ed132..424f17d6ffd1 100644 --- a/drivers/mtd/maps/ck804xrom.c +++ b/drivers/mtd/maps/ck804xrom.c | |||
| @@ -342,9 +342,9 @@ static struct pci_device_id ck804xrom_pci_tbl[] = { | |||
| 342 | { 0, } | 342 | { 0, } |
| 343 | }; | 343 | }; |
| 344 | 344 | ||
| 345 | #if 0 | ||
| 345 | MODULE_DEVICE_TABLE(pci, ck804xrom_pci_tbl); | 346 | MODULE_DEVICE_TABLE(pci, ck804xrom_pci_tbl); |
| 346 | 347 | ||
| 347 | #if 0 | ||
| 348 | static struct pci_driver ck804xrom_driver = { | 348 | static struct pci_driver ck804xrom_driver = { |
| 349 | .name = MOD_NAME, | 349 | .name = MOD_NAME, |
| 350 | .id_table = ck804xrom_pci_tbl, | 350 | .id_table = ck804xrom_pci_tbl, |
diff --git a/drivers/mtd/maps/physmap.c b/drivers/mtd/maps/physmap.c index 87743661d48e..229718222db7 100644 --- a/drivers/mtd/maps/physmap.c +++ b/drivers/mtd/maps/physmap.c | |||
| @@ -29,6 +29,7 @@ struct physmap_flash_info { | |||
| 29 | struct map_info map[MAX_RESOURCES]; | 29 | struct map_info map[MAX_RESOURCES]; |
| 30 | #ifdef CONFIG_MTD_PARTITIONS | 30 | #ifdef CONFIG_MTD_PARTITIONS |
| 31 | int nr_parts; | 31 | int nr_parts; |
| 32 | struct mtd_partition *parts; | ||
| 32 | #endif | 33 | #endif |
| 33 | }; | 34 | }; |
| 34 | 35 | ||
| @@ -45,25 +46,29 @@ static int physmap_flash_remove(struct platform_device *dev) | |||
| 45 | 46 | ||
| 46 | physmap_data = dev->dev.platform_data; | 47 | physmap_data = dev->dev.platform_data; |
| 47 | 48 | ||
| 48 | #ifdef CONFIG_MTD_CONCAT | 49 | if (info->cmtd) { |
| 49 | if (info->cmtd != info->mtd[0]) { | 50 | #ifdef CONFIG_MTD_PARTITIONS |
| 51 | if (info->nr_parts || physmap_data->nr_parts) | ||
| 52 | del_mtd_partitions(info->cmtd); | ||
| 53 | else | ||
| 54 | del_mtd_device(info->cmtd); | ||
| 55 | #else | ||
| 50 | del_mtd_device(info->cmtd); | 56 | del_mtd_device(info->cmtd); |
| 51 | mtd_concat_destroy(info->cmtd); | 57 | #endif |
| 52 | } | 58 | } |
| 59 | #ifdef CONFIG_MTD_PARTITIONS | ||
| 60 | if (info->nr_parts) | ||
| 61 | kfree(info->parts); | ||
| 53 | #endif | 62 | #endif |
| 54 | 63 | ||
| 55 | for (i = 0; i < MAX_RESOURCES; i++) { | 64 | #ifdef CONFIG_MTD_CONCAT |
| 56 | if (info->mtd[i] != NULL) { | 65 | if (info->cmtd != info->mtd[0]) |
| 57 | #ifdef CONFIG_MTD_PARTITIONS | 66 | mtd_concat_destroy(info->cmtd); |
| 58 | if (info->nr_parts || physmap_data->nr_parts) | ||
| 59 | del_mtd_partitions(info->mtd[i]); | ||
| 60 | else | ||
| 61 | del_mtd_device(info->mtd[i]); | ||
| 62 | #else | ||
| 63 | del_mtd_device(info->mtd[i]); | ||
| 64 | #endif | 67 | #endif |
| 68 | |||
| 69 | for (i = 0; i < MAX_RESOURCES; i++) { | ||
| 70 | if (info->mtd[i] != NULL) | ||
| 65 | map_destroy(info->mtd[i]); | 71 | map_destroy(info->mtd[i]); |
| 66 | } | ||
| 67 | } | 72 | } |
| 68 | return 0; | 73 | return 0; |
| 69 | } | 74 | } |
| @@ -86,9 +91,6 @@ static int physmap_flash_probe(struct platform_device *dev) | |||
| 86 | int err = 0; | 91 | int err = 0; |
| 87 | int i; | 92 | int i; |
| 88 | int devices_found = 0; | 93 | int devices_found = 0; |
| 89 | #ifdef CONFIG_MTD_PARTITIONS | ||
| 90 | struct mtd_partition *parts; | ||
| 91 | #endif | ||
| 92 | 94 | ||
| 93 | physmap_data = dev->dev.platform_data; | 95 | physmap_data = dev->dev.platform_data; |
| 94 | if (physmap_data == NULL) | 96 | if (physmap_data == NULL) |
| @@ -167,10 +169,11 @@ static int physmap_flash_probe(struct platform_device *dev) | |||
| 167 | goto err_out; | 169 | goto err_out; |
| 168 | 170 | ||
| 169 | #ifdef CONFIG_MTD_PARTITIONS | 171 | #ifdef CONFIG_MTD_PARTITIONS |
| 170 | err = parse_mtd_partitions(info->cmtd, part_probe_types, &parts, 0); | 172 | err = parse_mtd_partitions(info->cmtd, part_probe_types, |
| 173 | &info->parts, 0); | ||
| 171 | if (err > 0) { | 174 | if (err > 0) { |
| 172 | add_mtd_partitions(info->cmtd, parts, err); | 175 | add_mtd_partitions(info->cmtd, info->parts, err); |
| 173 | kfree(parts); | 176 | info->nr_parts = err; |
| 174 | return 0; | 177 | return 0; |
| 175 | } | 178 | } |
| 176 | 179 | ||
diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c index c98c1570a40b..47a33cec3793 100644 --- a/drivers/mtd/nand/atmel_nand.c +++ b/drivers/mtd/nand/atmel_nand.c | |||
| @@ -139,7 +139,8 @@ static int atmel_nand_device_ready(struct mtd_info *mtd) | |||
| 139 | struct nand_chip *nand_chip = mtd->priv; | 139 | struct nand_chip *nand_chip = mtd->priv; |
| 140 | struct atmel_nand_host *host = nand_chip->priv; | 140 | struct atmel_nand_host *host = nand_chip->priv; |
| 141 | 141 | ||
| 142 | return gpio_get_value(host->board->rdy_pin); | 142 | return gpio_get_value(host->board->rdy_pin) ^ |
| 143 | !!host->board->rdy_pin_active_low; | ||
| 143 | } | 144 | } |
| 144 | 145 | ||
| 145 | /* | 146 | /* |
diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c index 21fd4f1c4806..bad048aca89a 100644 --- a/drivers/mtd/nand/mxc_nand.c +++ b/drivers/mtd/nand/mxc_nand.c | |||
| @@ -880,7 +880,7 @@ static int __init mxcnd_probe(struct platform_device *pdev) | |||
| 880 | this->read_buf = mxc_nand_read_buf; | 880 | this->read_buf = mxc_nand_read_buf; |
| 881 | this->verify_buf = mxc_nand_verify_buf; | 881 | this->verify_buf = mxc_nand_verify_buf; |
| 882 | 882 | ||
| 883 | host->clk = clk_get(&pdev->dev, "nfc_clk"); | 883 | host->clk = clk_get(&pdev->dev, "nfc"); |
| 884 | if (IS_ERR(host->clk)) | 884 | if (IS_ERR(host->clk)) |
| 885 | goto eclk; | 885 | goto eclk; |
| 886 | 886 | ||
diff --git a/drivers/mtd/nand/orion_nand.c b/drivers/mtd/nand/orion_nand.c index 917cf8d3ae95..c2dfd3ea353d 100644 --- a/drivers/mtd/nand/orion_nand.c +++ b/drivers/mtd/nand/orion_nand.c | |||
| @@ -149,7 +149,7 @@ static int __devexit orion_nand_remove(struct platform_device *pdev) | |||
| 149 | 149 | ||
| 150 | static struct platform_driver orion_nand_driver = { | 150 | static struct platform_driver orion_nand_driver = { |
| 151 | .probe = orion_nand_probe, | 151 | .probe = orion_nand_probe, |
| 152 | .remove = orion_nand_remove, | 152 | .remove = __devexit_p(orion_nand_remove), |
| 153 | .driver = { | 153 | .driver = { |
| 154 | .name = "orion_nand", | 154 | .name = "orion_nand", |
| 155 | .owner = THIS_MODULE, | 155 | .owner = THIS_MODULE, |
diff --git a/drivers/net/3c505.c b/drivers/net/3c505.c index 6124605bef05..a8107f992fb4 100644 --- a/drivers/net/3c505.c +++ b/drivers/net/3c505.c | |||
| @@ -493,21 +493,27 @@ static bool receive_pcb(struct net_device *dev, pcb_struct * pcb) | |||
| 493 | } | 493 | } |
| 494 | /* read the data */ | 494 | /* read the data */ |
| 495 | spin_lock_irqsave(&adapter->lock, flags); | 495 | spin_lock_irqsave(&adapter->lock, flags); |
| 496 | i = 0; | 496 | for (i = 0; i < MAX_PCB_DATA; i++) { |
| 497 | do { | 497 | for (j = 0; j < 20000; j++) { |
| 498 | j = 0; | 498 | stat = get_status(dev->base_addr); |
| 499 | while (((stat = get_status(dev->base_addr)) & ACRF) == 0 && j++ < 20000); | 499 | if (stat & ACRF) |
| 500 | pcb->data.raw[i++] = inb_command(dev->base_addr); | 500 | break; |
| 501 | if (i > MAX_PCB_DATA) | 501 | } |
| 502 | INVALID_PCB_MSG(i); | 502 | pcb->data.raw[i] = inb_command(dev->base_addr); |
| 503 | } while ((stat & ASF_PCB_MASK) != ASF_PCB_END && j < 20000); | 503 | if ((stat & ASF_PCB_MASK) == ASF_PCB_END || j >= 20000) |
| 504 | break; | ||
| 505 | } | ||
| 504 | spin_unlock_irqrestore(&adapter->lock, flags); | 506 | spin_unlock_irqrestore(&adapter->lock, flags); |
| 507 | if (i >= MAX_PCB_DATA) { | ||
| 508 | INVALID_PCB_MSG(i); | ||
| 509 | return false; | ||
| 510 | } | ||
| 505 | if (j >= 20000) { | 511 | if (j >= 20000) { |
| 506 | TIMEOUT_MSG(__LINE__); | 512 | TIMEOUT_MSG(__LINE__); |
| 507 | return false; | 513 | return false; |
| 508 | } | 514 | } |
| 509 | /* woops, the last "data" byte was really the length! */ | 515 | /* the last "data" byte was really the length! */ |
| 510 | total_length = pcb->data.raw[--i]; | 516 | total_length = pcb->data.raw[i]; |
| 511 | 517 | ||
| 512 | /* safety check total length vs data length */ | 518 | /* safety check total length vs data length */ |
| 513 | if (total_length != (pcb->length + 2)) { | 519 | if (total_length != (pcb->length + 2)) { |
diff --git a/drivers/net/3c509.c b/drivers/net/3c509.c index 535c234286ea..8c694213035b 100644 --- a/drivers/net/3c509.c +++ b/drivers/net/3c509.c | |||
| @@ -1475,6 +1475,7 @@ el3_resume(struct device *pdev) | |||
| 1475 | spin_lock_irqsave(&lp->lock, flags); | 1475 | spin_lock_irqsave(&lp->lock, flags); |
| 1476 | 1476 | ||
| 1477 | outw(PowerUp, ioaddr + EL3_CMD); | 1477 | outw(PowerUp, ioaddr + EL3_CMD); |
| 1478 | EL3WINDOW(0); | ||
| 1478 | el3_up(dev); | 1479 | el3_up(dev); |
| 1479 | 1480 | ||
| 1480 | if (netif_running(dev)) | 1481 | if (netif_running(dev)) |
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 6bdfd47d679d..a2f185fd7072 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
| @@ -2342,6 +2342,17 @@ config ATL1E | |||
| 2342 | To compile this driver as a module, choose M here. The module | 2342 | To compile this driver as a module, choose M here. The module |
| 2343 | will be called atl1e. | 2343 | will be called atl1e. |
| 2344 | 2344 | ||
| 2345 | config ATL1C | ||
| 2346 | tristate "Atheros L1C Gigabit Ethernet support (EXPERIMENTAL)" | ||
| 2347 | depends on PCI && EXPERIMENTAL | ||
| 2348 | select CRC32 | ||
| 2349 | select MII | ||
| 2350 | help | ||
| 2351 | This driver supports the Atheros L1C gigabit ethernet adapter. | ||
| 2352 | |||
| 2353 | To compile this driver as a module, choose M here. The module | ||
| 2354 | will be called atl1c. | ||
| 2355 | |||
| 2345 | config JME | 2356 | config JME |
| 2346 | tristate "JMicron(R) PCI-Express Gigabit Ethernet support" | 2357 | tristate "JMicron(R) PCI-Express Gigabit Ethernet support" |
| 2347 | depends on PCI | 2358 | depends on PCI |
diff --git a/drivers/net/Makefile b/drivers/net/Makefile index a3c5c002f224..aca8492db654 100644 --- a/drivers/net/Makefile +++ b/drivers/net/Makefile | |||
| @@ -17,6 +17,7 @@ obj-$(CONFIG_BONDING) += bonding/ | |||
| 17 | obj-$(CONFIG_ATL1) += atlx/ | 17 | obj-$(CONFIG_ATL1) += atlx/ |
| 18 | obj-$(CONFIG_ATL2) += atlx/ | 18 | obj-$(CONFIG_ATL2) += atlx/ |
| 19 | obj-$(CONFIG_ATL1E) += atl1e/ | 19 | obj-$(CONFIG_ATL1E) += atl1e/ |
| 20 | obj-$(CONFIG_ATL1C) += atl1c/ | ||
| 20 | obj-$(CONFIG_GIANFAR) += gianfar_driver.o | 21 | obj-$(CONFIG_GIANFAR) += gianfar_driver.o |
| 21 | obj-$(CONFIG_TEHUTI) += tehuti.o | 22 | obj-$(CONFIG_TEHUTI) += tehuti.o |
| 22 | obj-$(CONFIG_ENIC) += enic/ | 23 | obj-$(CONFIG_ENIC) += enic/ |
diff --git a/drivers/net/arm/Makefile b/drivers/net/arm/Makefile index c69c0cdba4a2..811a3ccd14c1 100644 --- a/drivers/net/arm/Makefile +++ b/drivers/net/arm/Makefile | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | # | 4 | # |
| 5 | 5 | ||
| 6 | obj-$(CONFIG_ARM_AM79C961A) += am79c961a.o | 6 | obj-$(CONFIG_ARM_AM79C961A) += am79c961a.o |
| 7 | obj-$(CONFIG_ARM_ETHERH) += etherh.o ../8390.o | 7 | obj-$(CONFIG_ARM_ETHERH) += etherh.o |
| 8 | obj-$(CONFIG_ARM_ETHER3) += ether3.o | 8 | obj-$(CONFIG_ARM_ETHER3) += ether3.o |
| 9 | obj-$(CONFIG_ARM_ETHER1) += ether1.o | 9 | obj-$(CONFIG_ARM_ETHER1) += ether1.o |
| 10 | obj-$(CONFIG_ARM_AT91_ETHER) += at91_ether.o | 10 | obj-$(CONFIG_ARM_AT91_ETHER) += at91_ether.o |
diff --git a/drivers/net/arm/etherh.c b/drivers/net/arm/etherh.c index 54b52e5b1821..f52f668c49bf 100644 --- a/drivers/net/arm/etherh.c +++ b/drivers/net/arm/etherh.c | |||
| @@ -641,15 +641,15 @@ static const struct net_device_ops etherh_netdev_ops = { | |||
| 641 | .ndo_open = etherh_open, | 641 | .ndo_open = etherh_open, |
| 642 | .ndo_stop = etherh_close, | 642 | .ndo_stop = etherh_close, |
| 643 | .ndo_set_config = etherh_set_config, | 643 | .ndo_set_config = etherh_set_config, |
| 644 | .ndo_start_xmit = ei_start_xmit, | 644 | .ndo_start_xmit = __ei_start_xmit, |
| 645 | .ndo_tx_timeout = ei_tx_timeout, | 645 | .ndo_tx_timeout = __ei_tx_timeout, |
| 646 | .ndo_get_stats = ei_get_stats, | 646 | .ndo_get_stats = __ei_get_stats, |
| 647 | .ndo_set_multicast_list = ei_set_multicast_list, | 647 | .ndo_set_multicast_list = __ei_set_multicast_list, |
| 648 | .ndo_validate_addr = eth_validate_addr, | 648 | .ndo_validate_addr = eth_validate_addr, |
| 649 | .ndo_set_mac_address = eth_mac_addr, | 649 | .ndo_set_mac_address = eth_mac_addr, |
| 650 | .ndo_change_mtu = eth_change_mtu, | 650 | .ndo_change_mtu = eth_change_mtu, |
| 651 | #ifdef CONFIG_NET_POLL_CONTROLLER | 651 | #ifdef CONFIG_NET_POLL_CONTROLLER |
| 652 | .ndo_poll_controller = ei_poll, | 652 | .ndo_poll_controller = __ei_poll, |
| 653 | #endif | 653 | #endif |
| 654 | }; | 654 | }; |
| 655 | 655 | ||
diff --git a/drivers/net/arm/ks8695net.c b/drivers/net/arm/ks8695net.c index 1cf2f949c0b4..f3a127434897 100644 --- a/drivers/net/arm/ks8695net.c +++ b/drivers/net/arm/ks8695net.c | |||
| @@ -560,7 +560,7 @@ ks8695_reset(struct ks8695_priv *ksp) | |||
| 560 | msleep(1); | 560 | msleep(1); |
| 561 | } | 561 | } |
| 562 | 562 | ||
| 563 | if (reset_timeout == 0) { | 563 | if (reset_timeout < 0) { |
| 564 | dev_crit(ksp->dev, | 564 | dev_crit(ksp->dev, |
| 565 | "Timeout waiting for DMA engines to reset\n"); | 565 | "Timeout waiting for DMA engines to reset\n"); |
| 566 | /* And blithely carry on */ | 566 | /* And blithely carry on */ |
diff --git a/drivers/net/atl1c/Makefile b/drivers/net/atl1c/Makefile new file mode 100644 index 000000000000..c37d966952ee --- /dev/null +++ b/drivers/net/atl1c/Makefile | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | obj-$(CONFIG_ATL1C) += atl1c.o | ||
| 2 | atl1c-objs := atl1c_main.o atl1c_hw.o atl1c_ethtool.o | ||
diff --git a/drivers/net/atl1c/atl1c.h b/drivers/net/atl1c/atl1c.h new file mode 100644 index 000000000000..ac11b84b8377 --- /dev/null +++ b/drivers/net/atl1c/atl1c.h | |||
| @@ -0,0 +1,606 @@ | |||
| 1 | /* | ||
| 2 | * Copyright(c) 2008 - 2009 Atheros Corporation. All rights reserved. | ||
| 3 | * | ||
| 4 | * Derived from Intel e1000 driver | ||
| 5 | * Copyright(c) 1999 - 2005 Intel Corporation. All rights reserved. | ||
| 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 Free | ||
| 9 | * Software Foundation; either version 2 of the License, or (at your option) | ||
| 10 | * any later version. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
| 13 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 14 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 15 | * more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License along with | ||
| 18 | * this program; if not, write to the Free Software Foundation, Inc., 59 | ||
| 19 | * Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef _ATL1C_H_ | ||
| 23 | #define _ATL1C_H_ | ||
| 24 | |||
| 25 | #include <linux/version.h> | ||
| 26 | #include <linux/init.h> | ||
| 27 | #include <linux/types.h> | ||
| 28 | #include <linux/errno.h> | ||
| 29 | #include <linux/module.h> | ||
| 30 | #include <linux/pci.h> | ||
| 31 | #include <linux/netdevice.h> | ||
| 32 | #include <linux/etherdevice.h> | ||
| 33 | #include <linux/skbuff.h> | ||
| 34 | #include <linux/ioport.h> | ||
| 35 | #include <linux/slab.h> | ||
| 36 | #include <linux/list.h> | ||
| 37 | #include <linux/delay.h> | ||
| 38 | #include <linux/sched.h> | ||
| 39 | #include <linux/in.h> | ||
| 40 | #include <linux/ip.h> | ||
| 41 | #include <linux/ipv6.h> | ||
| 42 | #include <linux/udp.h> | ||
| 43 | #include <linux/mii.h> | ||
| 44 | #include <linux/io.h> | ||
| 45 | #include <linux/vmalloc.h> | ||
| 46 | #include <linux/pagemap.h> | ||
| 47 | #include <linux/tcp.h> | ||
| 48 | #include <linux/mii.h> | ||
| 49 | #include <linux/ethtool.h> | ||
| 50 | #include <linux/if_vlan.h> | ||
| 51 | #include <linux/workqueue.h> | ||
| 52 | #include <net/checksum.h> | ||
| 53 | #include <net/ip6_checksum.h> | ||
| 54 | |||
| 55 | #include "atl1c_hw.h" | ||
| 56 | |||
| 57 | /* Wake Up Filter Control */ | ||
| 58 | #define AT_WUFC_LNKC 0x00000001 /* Link Status Change Wakeup Enable */ | ||
| 59 | #define AT_WUFC_MAG 0x00000002 /* Magic Packet Wakeup Enable */ | ||
| 60 | #define AT_WUFC_EX 0x00000004 /* Directed Exact Wakeup Enable */ | ||
| 61 | #define AT_WUFC_MC 0x00000008 /* Multicast Wakeup Enable */ | ||
| 62 | #define AT_WUFC_BC 0x00000010 /* Broadcast Wakeup Enable */ | ||
| 63 | |||
| 64 | #define AT_VLAN_TO_TAG(_vlan, _tag) \ | ||
| 65 | _tag = ((((_vlan) >> 8) & 0xFF) |\ | ||
| 66 | (((_vlan) & 0xFF) << 8)) | ||
| 67 | |||
| 68 | #define AT_TAG_TO_VLAN(_tag, _vlan) \ | ||
| 69 | _vlan = ((((_tag) >> 8) & 0xFF) |\ | ||
| 70 | (((_tag) & 0xFF) << 8)) | ||
| 71 | |||
| 72 | #define SPEED_0 0xffff | ||
| 73 | #define HALF_DUPLEX 1 | ||
| 74 | #define FULL_DUPLEX 2 | ||
| 75 | |||
| 76 | #define AT_RX_BUF_SIZE (ETH_FRAME_LEN + VLAN_HLEN + ETH_FCS_LEN) | ||
| 77 | #define MAX_JUMBO_FRAME_SIZE (9*1024) | ||
| 78 | #define MAX_TX_OFFLOAD_THRESH (9*1024) | ||
| 79 | |||
| 80 | #define AT_MAX_RECEIVE_QUEUE 4 | ||
| 81 | #define AT_DEF_RECEIVE_QUEUE 1 | ||
| 82 | #define AT_MAX_TRANSMIT_QUEUE 2 | ||
| 83 | |||
| 84 | #define AT_DMA_HI_ADDR_MASK 0xffffffff00000000ULL | ||
| 85 | #define AT_DMA_LO_ADDR_MASK 0x00000000ffffffffULL | ||
| 86 | |||
| 87 | #define AT_TX_WATCHDOG (5 * HZ) | ||
| 88 | #define AT_MAX_INT_WORK 5 | ||
| 89 | #define AT_TWSI_EEPROM_TIMEOUT 100 | ||
| 90 | #define AT_HW_MAX_IDLE_DELAY 10 | ||
| 91 | #define AT_SUSPEND_LINK_TIMEOUT 28 | ||
| 92 | |||
| 93 | #define AT_ASPM_L0S_TIMER 6 | ||
| 94 | #define AT_ASPM_L1_TIMER 12 | ||
| 95 | |||
| 96 | #define ATL1C_PCIE_L0S_L1_DISABLE 0x01 | ||
| 97 | #define ATL1C_PCIE_PHY_RESET 0x02 | ||
| 98 | |||
| 99 | #define ATL1C_ASPM_L0s_ENABLE 0x0001 | ||
| 100 | #define ATL1C_ASPM_L1_ENABLE 0x0002 | ||
| 101 | |||
| 102 | #define AT_REGS_LEN (75 * sizeof(u32)) | ||
| 103 | #define AT_EEPROM_LEN 512 | ||
| 104 | |||
| 105 | #define ATL1C_GET_DESC(R, i, type) (&(((type *)((R)->desc))[i])) | ||
| 106 | #define ATL1C_RFD_DESC(R, i) ATL1C_GET_DESC(R, i, struct atl1c_rx_free_desc) | ||
| 107 | #define ATL1C_TPD_DESC(R, i) ATL1C_GET_DESC(R, i, struct atl1c_tpd_desc) | ||
| 108 | #define ATL1C_RRD_DESC(R, i) ATL1C_GET_DESC(R, i, struct atl1c_recv_ret_status) | ||
| 109 | |||
| 110 | /* tpd word 1 bit 0:7 General Checksum task offload */ | ||
| 111 | #define TPD_L4HDR_OFFSET_MASK 0x00FF | ||
| 112 | #define TPD_L4HDR_OFFSET_SHIFT 0 | ||
| 113 | |||
| 114 | /* tpd word 1 bit 0:7 Large Send task offload (IPv4/IPV6) */ | ||
| 115 | #define TPD_TCPHDR_OFFSET_MASK 0x00FF | ||
| 116 | #define TPD_TCPHDR_OFFSET_SHIFT 0 | ||
| 117 | |||
| 118 | /* tpd word 1 bit 0:7 Custom Checksum task offload */ | ||
| 119 | #define TPD_PLOADOFFSET_MASK 0x00FF | ||
| 120 | #define TPD_PLOADOFFSET_SHIFT 0 | ||
| 121 | |||
| 122 | /* tpd word 1 bit 8:17 */ | ||
| 123 | #define TPD_CCSUM_EN_MASK 0x0001 | ||
| 124 | #define TPD_CCSUM_EN_SHIFT 8 | ||
| 125 | #define TPD_IP_CSUM_MASK 0x0001 | ||
| 126 | #define TPD_IP_CSUM_SHIFT 9 | ||
| 127 | #define TPD_TCP_CSUM_MASK 0x0001 | ||
| 128 | #define TPD_TCP_CSUM_SHIFT 10 | ||
| 129 | #define TPD_UDP_CSUM_MASK 0x0001 | ||
| 130 | #define TPD_UDP_CSUM_SHIFT 11 | ||
| 131 | #define TPD_LSO_EN_MASK 0x0001 /* TCP Large Send Offload */ | ||
| 132 | #define TPD_LSO_EN_SHIFT 12 | ||
| 133 | #define TPD_LSO_VER_MASK 0x0001 | ||
| 134 | #define TPD_LSO_VER_SHIFT 13 /* 0 : ipv4; 1 : ipv4/ipv6 */ | ||
| 135 | #define TPD_CON_VTAG_MASK 0x0001 | ||
| 136 | #define TPD_CON_VTAG_SHIFT 14 | ||
| 137 | #define TPD_INS_VTAG_MASK 0x0001 | ||
| 138 | #define TPD_INS_VTAG_SHIFT 15 | ||
| 139 | #define TPD_IPV4_PACKET_MASK 0x0001 /* valid when LSO VER is 1 */ | ||
| 140 | #define TPD_IPV4_PACKET_SHIFT 16 | ||
| 141 | #define TPD_ETH_TYPE_MASK 0x0001 | ||
| 142 | #define TPD_ETH_TYPE_SHIFT 17 /* 0 : 802.3 frame; 1 : Ethernet */ | ||
| 143 | |||
| 144 | /* tpd word 18:25 Custom Checksum task offload */ | ||
| 145 | #define TPD_CCSUM_OFFSET_MASK 0x00FF | ||
| 146 | #define TPD_CCSUM_OFFSET_SHIFT 18 | ||
| 147 | #define TPD_CCSUM_EPAD_MASK 0x0001 | ||
| 148 | #define TPD_CCSUM_EPAD_SHIFT 30 | ||
| 149 | |||
| 150 | /* tpd word 18:30 Large Send task offload (IPv4/IPV6) */ | ||
| 151 | #define TPD_MSS_MASK 0x1FFF | ||
| 152 | #define TPD_MSS_SHIFT 18 | ||
| 153 | |||
| 154 | #define TPD_EOP_MASK 0x0001 | ||
| 155 | #define TPD_EOP_SHIFT 31 | ||
| 156 | |||
| 157 | struct atl1c_tpd_desc { | ||
| 158 | __le16 buffer_len; /* include 4-byte CRC */ | ||
| 159 | __le16 vlan_tag; | ||
| 160 | __le32 word1; | ||
| 161 | __le64 buffer_addr; | ||
| 162 | }; | ||
| 163 | |||
| 164 | struct atl1c_tpd_ext_desc { | ||
| 165 | u32 reservd_0; | ||
| 166 | __le32 word1; | ||
| 167 | __le32 pkt_len; | ||
| 168 | u32 reservd_1; | ||
| 169 | }; | ||
| 170 | /* rrs word 0 bit 0:31 */ | ||
| 171 | #define RRS_RX_CSUM_MASK 0xFFFF | ||
| 172 | #define RRS_RX_CSUM_SHIFT 0 | ||
| 173 | #define RRS_RX_RFD_CNT_MASK 0x000F | ||
| 174 | #define RRS_RX_RFD_CNT_SHIFT 16 | ||
| 175 | #define RRS_RX_RFD_INDEX_MASK 0x0FFF | ||
| 176 | #define RRS_RX_RFD_INDEX_SHIFT 20 | ||
| 177 | |||
| 178 | /* rrs flag bit 0:16 */ | ||
| 179 | #define RRS_HEAD_LEN_MASK 0x00FF | ||
| 180 | #define RRS_HEAD_LEN_SHIFT 0 | ||
| 181 | #define RRS_HDS_TYPE_MASK 0x0003 | ||
| 182 | #define RRS_HDS_TYPE_SHIFT 8 | ||
| 183 | #define RRS_CPU_NUM_MASK 0x0003 | ||
| 184 | #define RRS_CPU_NUM_SHIFT 10 | ||
| 185 | #define RRS_HASH_FLG_MASK 0x000F | ||
| 186 | #define RRS_HASH_FLG_SHIFT 12 | ||
| 187 | |||
| 188 | #define RRS_HDS_TYPE_HEAD 1 | ||
| 189 | #define RRS_HDS_TYPE_DATA 2 | ||
| 190 | |||
| 191 | #define RRS_IS_NO_HDS_TYPE(flag) \ | ||
| 192 | (((flag) >> (RRS_HDS_TYPE_SHIFT)) & RRS_HDS_TYPE_MASK == 0) | ||
| 193 | |||
| 194 | #define RRS_IS_HDS_HEAD(flag) \ | ||
| 195 | (((flag) >> (RRS_HDS_TYPE_SHIFT)) & RRS_HDS_TYPE_MASK == \ | ||
| 196 | RRS_HDS_TYPE_HEAD) | ||
| 197 | |||
| 198 | #define RRS_IS_HDS_DATA(flag) \ | ||
| 199 | (((flag) >> (RRS_HDS_TYPE_SHIFT)) & RRS_HDS_TYPE_MASK == \ | ||
| 200 | RRS_HDS_TYPE_DATA) | ||
| 201 | |||
| 202 | /* rrs word 3 bit 0:31 */ | ||
| 203 | #define RRS_PKT_SIZE_MASK 0x3FFF | ||
| 204 | #define RRS_PKT_SIZE_SHIFT 0 | ||
| 205 | #define RRS_ERR_L4_CSUM_MASK 0x0001 | ||
| 206 | #define RRS_ERR_L4_CSUM_SHIFT 14 | ||
| 207 | #define RRS_ERR_IP_CSUM_MASK 0x0001 | ||
| 208 | #define RRS_ERR_IP_CSUM_SHIFT 15 | ||
| 209 | #define RRS_VLAN_INS_MASK 0x0001 | ||
| 210 | #define RRS_VLAN_INS_SHIFT 16 | ||
| 211 | #define RRS_PROT_ID_MASK 0x0007 | ||
| 212 | #define RRS_PROT_ID_SHIFT 17 | ||
| 213 | #define RRS_RX_ERR_SUM_MASK 0x0001 | ||
| 214 | #define RRS_RX_ERR_SUM_SHIFT 20 | ||
| 215 | #define RRS_RX_ERR_CRC_MASK 0x0001 | ||
| 216 | #define RRS_RX_ERR_CRC_SHIFT 21 | ||
| 217 | #define RRS_RX_ERR_FAE_MASK 0x0001 | ||
| 218 | #define RRS_RX_ERR_FAE_SHIFT 22 | ||
| 219 | #define RRS_RX_ERR_TRUNC_MASK 0x0001 | ||
| 220 | #define RRS_RX_ERR_TRUNC_SHIFT 23 | ||
| 221 | #define RRS_RX_ERR_RUNC_MASK 0x0001 | ||
| 222 | #define RRS_RX_ERR_RUNC_SHIFT 24 | ||
| 223 | #define RRS_RX_ERR_ICMP_MASK 0x0001 | ||
| 224 | #define RRS_RX_ERR_ICMP_SHIFT 25 | ||
| 225 | #define RRS_PACKET_BCAST_MASK 0x0001 | ||
| 226 | #define RRS_PACKET_BCAST_SHIFT 26 | ||
| 227 | #define RRS_PACKET_MCAST_MASK 0x0001 | ||
| 228 | #define RRS_PACKET_MCAST_SHIFT 27 | ||
| 229 | #define RRS_PACKET_TYPE_MASK 0x0001 | ||
| 230 | #define RRS_PACKET_TYPE_SHIFT 28 | ||
| 231 | #define RRS_FIFO_FULL_MASK 0x0001 | ||
| 232 | #define RRS_FIFO_FULL_SHIFT 29 | ||
| 233 | #define RRS_802_3_LEN_ERR_MASK 0x0001 | ||
| 234 | #define RRS_802_3_LEN_ERR_SHIFT 30 | ||
| 235 | #define RRS_RXD_UPDATED_MASK 0x0001 | ||
| 236 | #define RRS_RXD_UPDATED_SHIFT 31 | ||
| 237 | |||
| 238 | #define RRS_ERR_L4_CSUM 0x00004000 | ||
| 239 | #define RRS_ERR_IP_CSUM 0x00008000 | ||
| 240 | #define RRS_VLAN_INS 0x00010000 | ||
| 241 | #define RRS_RX_ERR_SUM 0x00100000 | ||
| 242 | #define RRS_RX_ERR_CRC 0x00200000 | ||
| 243 | #define RRS_802_3_LEN_ERR 0x40000000 | ||
| 244 | #define RRS_RXD_UPDATED 0x80000000 | ||
| 245 | |||
| 246 | #define RRS_PACKET_TYPE_802_3 1 | ||
| 247 | #define RRS_PACKET_TYPE_ETH 0 | ||
| 248 | #define RRS_PACKET_IS_ETH(word) \ | ||
| 249 | (((word) >> RRS_PACKET_TYPE_SHIFT) & RRS_PACKET_TYPE_MASK == \ | ||
| 250 | RRS_PACKET_TYPE_ETH) | ||
| 251 | #define RRS_RXD_IS_VALID(word) \ | ||
| 252 | ((((word) >> RRS_RXD_UPDATED_SHIFT) & RRS_RXD_UPDATED_MASK) == 1) | ||
| 253 | |||
| 254 | #define RRS_PACKET_PROT_IS_IPV4_ONLY(word) \ | ||
| 255 | ((((word) >> RRS_PROT_ID_SHIFT) & RRS_PROT_ID_MASK) == 1) | ||
| 256 | #define RRS_PACKET_PROT_IS_IPV6_ONLY(word) \ | ||
| 257 | ((((word) >> RRS_PROT_ID_SHIFT) & RRS_PROT_ID_MASK) == 6) | ||
| 258 | |||
| 259 | struct atl1c_recv_ret_status { | ||
| 260 | __le32 word0; | ||
| 261 | __le32 rss_hash; | ||
| 262 | __le16 vlan_tag; | ||
| 263 | __le16 flag; | ||
| 264 | __le32 word3; | ||
| 265 | }; | ||
| 266 | |||
| 267 | /* RFD desciptor */ | ||
| 268 | struct atl1c_rx_free_desc { | ||
| 269 | __le64 buffer_addr; | ||
| 270 | }; | ||
| 271 | |||
| 272 | /* DMA Order Settings */ | ||
| 273 | enum atl1c_dma_order { | ||
| 274 | atl1c_dma_ord_in = 1, | ||
| 275 | atl1c_dma_ord_enh = 2, | ||
| 276 | atl1c_dma_ord_out = 4 | ||
| 277 | }; | ||
| 278 | |||
| 279 | enum atl1c_dma_rcb { | ||
| 280 | atl1c_rcb_64 = 0, | ||
| 281 | atl1c_rcb_128 = 1 | ||
| 282 | }; | ||
| 283 | |||
| 284 | enum atl1c_mac_speed { | ||
| 285 | atl1c_mac_speed_0 = 0, | ||
| 286 | atl1c_mac_speed_10_100 = 1, | ||
| 287 | atl1c_mac_speed_1000 = 2 | ||
| 288 | }; | ||
| 289 | |||
| 290 | enum atl1c_dma_req_block { | ||
| 291 | atl1c_dma_req_128 = 0, | ||
| 292 | atl1c_dma_req_256 = 1, | ||
| 293 | atl1c_dma_req_512 = 2, | ||
| 294 | atl1c_dma_req_1024 = 3, | ||
| 295 | atl1c_dma_req_2048 = 4, | ||
| 296 | atl1c_dma_req_4096 = 5 | ||
| 297 | }; | ||
| 298 | |||
| 299 | enum atl1c_rss_mode { | ||
| 300 | atl1c_rss_mode_disable = 0, | ||
| 301 | atl1c_rss_sig_que = 1, | ||
| 302 | atl1c_rss_mul_que_sig_int = 2, | ||
| 303 | atl1c_rss_mul_que_mul_int = 4, | ||
| 304 | }; | ||
| 305 | |||
| 306 | enum atl1c_rss_type { | ||
| 307 | atl1c_rss_disable = 0, | ||
| 308 | atl1c_rss_ipv4 = 1, | ||
| 309 | atl1c_rss_ipv4_tcp = 2, | ||
| 310 | atl1c_rss_ipv6 = 4, | ||
| 311 | atl1c_rss_ipv6_tcp = 8 | ||
| 312 | }; | ||
| 313 | |||
| 314 | enum atl1c_nic_type { | ||
| 315 | athr_l1c = 0, | ||
| 316 | athr_l2c = 1, | ||
| 317 | }; | ||
| 318 | |||
| 319 | enum atl1c_trans_queue { | ||
| 320 | atl1c_trans_normal = 0, | ||
| 321 | atl1c_trans_high = 1 | ||
| 322 | }; | ||
| 323 | |||
| 324 | struct atl1c_hw_stats { | ||
| 325 | /* rx */ | ||
| 326 | unsigned long rx_ok; /* The number of good packet received. */ | ||
| 327 | unsigned long rx_bcast; /* The number of good broadcast packet received. */ | ||
| 328 | unsigned long rx_mcast; /* The number of good multicast packet received. */ | ||
| 329 | unsigned long rx_pause; /* The number of Pause packet received. */ | ||
| 330 | unsigned long rx_ctrl; /* The number of Control packet received other than Pause frame. */ | ||
| 331 | unsigned long rx_fcs_err; /* The number of packets with bad FCS. */ | ||
| 332 | unsigned long rx_len_err; /* The number of packets with mismatch of length field and actual size. */ | ||
| 333 | unsigned long rx_byte_cnt; /* The number of bytes of good packet received. FCS is NOT included. */ | ||
| 334 | unsigned long rx_runt; /* The number of packets received that are less than 64 byte long and with good FCS. */ | ||
| 335 | unsigned long rx_frag; /* The number of packets received that are less than 64 byte long and with bad FCS. */ | ||
| 336 | unsigned long rx_sz_64; /* The number of good and bad packets received that are 64 byte long. */ | ||
| 337 | unsigned long rx_sz_65_127; /* The number of good and bad packets received that are between 65 and 127-byte long. */ | ||
| 338 | unsigned long rx_sz_128_255; /* The number of good and bad packets received that are between 128 and 255-byte long. */ | ||
| 339 | unsigned long rx_sz_256_511; /* The number of good and bad packets received that are between 256 and 511-byte long. */ | ||
| 340 | unsigned long rx_sz_512_1023; /* The number of good and bad packets received that are between 512 and 1023-byte long. */ | ||
| 341 | unsigned long rx_sz_1024_1518; /* The number of good and bad packets received that are between 1024 and 1518-byte long. */ | ||
| 342 | unsigned long rx_sz_1519_max; /* The number of good and bad packets received that are between 1519-byte and MTU. */ | ||
| 343 | unsigned long rx_sz_ov; /* The number of good and bad packets received that are more than MTU size truncated by Selene. */ | ||
| 344 | unsigned long rx_rxf_ov; /* The number of frame dropped due to occurrence of RX FIFO overflow. */ | ||
| 345 | unsigned long rx_rrd_ov; /* The number of frame dropped due to occurrence of RRD overflow. */ | ||
| 346 | unsigned long rx_align_err; /* Alignment Error */ | ||
| 347 | unsigned long rx_bcast_byte_cnt; /* The byte count of broadcast packet received, excluding FCS. */ | ||
| 348 | unsigned long rx_mcast_byte_cnt; /* The byte count of multicast packet received, excluding FCS. */ | ||
| 349 | unsigned long rx_err_addr; /* The number of packets dropped due to address filtering. */ | ||
| 350 | |||
| 351 | /* tx */ | ||
| 352 | unsigned long tx_ok; /* The number of good packet transmitted. */ | ||
| 353 | unsigned long tx_bcast; /* The number of good broadcast packet transmitted. */ | ||
| 354 | unsigned long tx_mcast; /* The number of good multicast packet transmitted. */ | ||
| 355 | unsigned long tx_pause; /* The number of Pause packet transmitted. */ | ||
| 356 | unsigned long tx_exc_defer; /* The number of packets transmitted with excessive deferral. */ | ||
| 357 | unsigned long tx_ctrl; /* The number of packets transmitted is a control frame, excluding Pause frame. */ | ||
| 358 | unsigned long tx_defer; /* The number of packets transmitted that is deferred. */ | ||
| 359 | unsigned long tx_byte_cnt; /* The number of bytes of data transmitted. FCS is NOT included. */ | ||
| 360 | unsigned long tx_sz_64; /* The number of good and bad packets transmitted that are 64 byte long. */ | ||
| 361 | unsigned long tx_sz_65_127; /* The number of good and bad packets transmitted that are between 65 and 127-byte long. */ | ||
| 362 | unsigned long tx_sz_128_255; /* The number of good and bad packets transmitted that are between 128 and 255-byte long. */ | ||
| 363 | unsigned long tx_sz_256_511; /* The number of good and bad packets transmitted that are between 256 and 511-byte long. */ | ||
| 364 | unsigned long tx_sz_512_1023; /* The number of good and bad packets transmitted that are between 512 and 1023-byte long. */ | ||
| 365 | unsigned long tx_sz_1024_1518; /* The number of good and bad packets transmitted that are between 1024 and 1518-byte long. */ | ||
| 366 | unsigned long tx_sz_1519_max; /* The number of good and bad packets transmitted that are between 1519-byte and MTU. */ | ||
| 367 | unsigned long tx_1_col; /* The number of packets subsequently transmitted successfully with a single prior collision. */ | ||
| 368 | unsigned long tx_2_col; /* The number of packets subsequently transmitted successfully with multiple prior collisions. */ | ||
| 369 | unsigned long tx_late_col; /* The number of packets transmitted with late collisions. */ | ||
| 370 | unsigned long tx_abort_col; /* The number of transmit packets aborted due to excessive collisions. */ | ||
| 371 | unsigned long tx_underrun; /* The number of transmit packets aborted due to transmit FIFO underrun, or TRD FIFO underrun */ | ||
| 372 | unsigned long tx_rd_eop; /* The number of times that read beyond the EOP into the next frame area when TRD was not written timely */ | ||
| 373 | unsigned long tx_len_err; /* The number of transmit packets with length field does NOT match the actual frame size. */ | ||
| 374 | unsigned long tx_trunc; /* The number of transmit packets truncated due to size exceeding MTU. */ | ||
| 375 | unsigned long tx_bcast_byte; /* The byte count of broadcast packet transmitted, excluding FCS. */ | ||
| 376 | unsigned long tx_mcast_byte; /* The byte count of multicast packet transmitted, excluding FCS. */ | ||
| 377 | }; | ||
| 378 | |||
| 379 | struct atl1c_hw { | ||
| 380 | u8 __iomem *hw_addr; /* inner register address */ | ||
| 381 | struct atl1c_adapter *adapter; | ||
| 382 | enum atl1c_nic_type nic_type; | ||
| 383 | enum atl1c_dma_order dma_order; | ||
| 384 | enum atl1c_dma_rcb rcb_value; | ||
| 385 | enum atl1c_dma_req_block dmar_block; | ||
| 386 | enum atl1c_dma_req_block dmaw_block; | ||
| 387 | |||
| 388 | u16 device_id; | ||
| 389 | u16 vendor_id; | ||
| 390 | u16 subsystem_id; | ||
| 391 | u16 subsystem_vendor_id; | ||
| 392 | u8 revision_id; | ||
| 393 | |||
| 394 | u32 intr_mask; | ||
| 395 | u8 dmaw_dly_cnt; | ||
| 396 | u8 dmar_dly_cnt; | ||
| 397 | |||
| 398 | u8 preamble_len; | ||
| 399 | u16 max_frame_size; | ||
| 400 | u16 min_frame_size; | ||
| 401 | |||
| 402 | enum atl1c_mac_speed mac_speed; | ||
| 403 | bool mac_duplex; | ||
| 404 | bool hibernate; | ||
| 405 | u16 media_type; | ||
| 406 | #define MEDIA_TYPE_AUTO_SENSOR 0 | ||
| 407 | #define MEDIA_TYPE_100M_FULL 1 | ||
| 408 | #define MEDIA_TYPE_100M_HALF 2 | ||
| 409 | #define MEDIA_TYPE_10M_FULL 3 | ||
| 410 | #define MEDIA_TYPE_10M_HALF 4 | ||
| 411 | |||
| 412 | u16 autoneg_advertised; | ||
| 413 | u16 mii_autoneg_adv_reg; | ||
| 414 | u16 mii_1000t_ctrl_reg; | ||
| 415 | |||
| 416 | u16 tx_imt; /* TX Interrupt Moderator timer ( 2us resolution) */ | ||
| 417 | u16 rx_imt; /* RX Interrupt Moderator timer ( 2us resolution) */ | ||
| 418 | u16 ict; /* Interrupt Clear timer (2us resolution) */ | ||
| 419 | u16 ctrl_flags; | ||
| 420 | #define ATL1C_INTR_CLEAR_ON_READ 0x0001 | ||
| 421 | #define ATL1C_INTR_MODRT_ENABLE 0x0002 | ||
| 422 | #define ATL1C_CMB_ENABLE 0x0004 | ||
| 423 | #define ATL1C_SMB_ENABLE 0x0010 | ||
| 424 | #define ATL1C_TXQ_MODE_ENHANCE 0x0020 | ||
| 425 | #define ATL1C_RX_IPV6_CHKSUM 0x0040 | ||
| 426 | #define ATL1C_ASPM_L0S_SUPPORT 0x0080 | ||
| 427 | #define ATL1C_ASPM_L1_SUPPORT 0x0100 | ||
| 428 | #define ATL1C_ASPM_CTRL_MON 0x0200 | ||
| 429 | #define ATL1C_HIB_DISABLE 0x0400 | ||
| 430 | #define ATL1C_LINK_CAP_1000M 0x0800 | ||
| 431 | #define ATL1C_FPGA_VERSION 0x8000 | ||
| 432 | u16 cmb_tpd; | ||
| 433 | u16 cmb_rrd; | ||
| 434 | u16 cmb_rx_timer; /* 2us resolution */ | ||
| 435 | u16 cmb_tx_timer; | ||
| 436 | u32 smb_timer; | ||
| 437 | |||
| 438 | u16 rrd_thresh; /* Threshold of number of RRD produced to trigger | ||
| 439 | interrupt request */ | ||
| 440 | u16 tpd_thresh; | ||
| 441 | u8 tpd_burst; /* Number of TPD to prefetch in cache-aligned burst. */ | ||
| 442 | u8 rfd_burst; | ||
| 443 | enum atl1c_rss_type rss_type; | ||
| 444 | enum atl1c_rss_mode rss_mode; | ||
| 445 | u8 rss_hash_bits; | ||
| 446 | u32 base_cpu; | ||
| 447 | u32 indirect_tab; | ||
| 448 | u8 mac_addr[ETH_ALEN]; | ||
| 449 | u8 perm_mac_addr[ETH_ALEN]; | ||
| 450 | |||
| 451 | bool phy_configured; | ||
| 452 | bool re_autoneg; | ||
| 453 | bool emi_ca; | ||
| 454 | }; | ||
| 455 | |||
| 456 | /* | ||
| 457 | * atl1c_ring_header represents a single, contiguous block of DMA space | ||
| 458 | * mapped for the three descriptor rings (tpd, rfd, rrd) and the two | ||
| 459 | * message blocks (cmb, smb) described below | ||
| 460 | */ | ||
| 461 | struct atl1c_ring_header { | ||
| 462 | void *desc; /* virtual address */ | ||
| 463 | dma_addr_t dma; /* physical address*/ | ||
| 464 | unsigned int size; /* length in bytes */ | ||
| 465 | }; | ||
| 466 | |||
| 467 | /* | ||
| 468 | * atl1c_buffer is wrapper around a pointer to a socket buffer | ||
| 469 | * so a DMA handle can be stored along with the skb | ||
| 470 | */ | ||
| 471 | struct atl1c_buffer { | ||
| 472 | struct sk_buff *skb; /* socket buffer */ | ||
| 473 | u16 length; /* rx buffer length */ | ||
| 474 | u16 state; /* state of buffer */ | ||
| 475 | #define ATL1_BUFFER_FREE 0 | ||
| 476 | #define ATL1_BUFFER_BUSY 1 | ||
| 477 | dma_addr_t dma; | ||
| 478 | }; | ||
| 479 | |||
| 480 | /* transimit packet descriptor (tpd) ring */ | ||
| 481 | struct atl1c_tpd_ring { | ||
| 482 | void *desc; /* descriptor ring virtual address */ | ||
| 483 | dma_addr_t dma; /* descriptor ring physical address */ | ||
| 484 | u16 size; /* descriptor ring length in bytes */ | ||
| 485 | u16 count; /* number of descriptors in the ring */ | ||
| 486 | u16 next_to_use; /* this is protectd by adapter->tx_lock */ | ||
| 487 | atomic_t next_to_clean; | ||
| 488 | struct atl1c_buffer *buffer_info; | ||
| 489 | }; | ||
| 490 | |||
| 491 | /* receive free descriptor (rfd) ring */ | ||
| 492 | struct atl1c_rfd_ring { | ||
| 493 | void *desc; /* descriptor ring virtual address */ | ||
| 494 | dma_addr_t dma; /* descriptor ring physical address */ | ||
| 495 | u16 size; /* descriptor ring length in bytes */ | ||
| 496 | u16 count; /* number of descriptors in the ring */ | ||
| 497 | u16 next_to_use; | ||
| 498 | u16 next_to_clean; | ||
| 499 | struct atl1c_buffer *buffer_info; | ||
| 500 | }; | ||
| 501 | |||
| 502 | /* receive return desciptor (rrd) ring */ | ||
| 503 | struct atl1c_rrd_ring { | ||
| 504 | void *desc; /* descriptor ring virtual address */ | ||
| 505 | dma_addr_t dma; /* descriptor ring physical address */ | ||
| 506 | u16 size; /* descriptor ring length in bytes */ | ||
| 507 | u16 count; /* number of descriptors in the ring */ | ||
| 508 | u16 next_to_use; | ||
| 509 | u16 next_to_clean; | ||
| 510 | }; | ||
| 511 | |||
| 512 | struct atl1c_cmb { | ||
| 513 | void *cmb; | ||
| 514 | dma_addr_t dma; | ||
| 515 | }; | ||
| 516 | |||
| 517 | struct atl1c_smb { | ||
| 518 | void *smb; | ||
| 519 | dma_addr_t dma; | ||
| 520 | }; | ||
| 521 | |||
| 522 | /* board specific private data structure */ | ||
| 523 | struct atl1c_adapter { | ||
| 524 | struct net_device *netdev; | ||
| 525 | struct pci_dev *pdev; | ||
| 526 | struct vlan_group *vlgrp; | ||
| 527 | struct napi_struct napi; | ||
| 528 | struct atl1c_hw hw; | ||
| 529 | struct atl1c_hw_stats hw_stats; | ||
| 530 | struct net_device_stats net_stats; | ||
| 531 | struct mii_if_info mii; /* MII interface info */ | ||
| 532 | u16 rx_buffer_len; | ||
| 533 | |||
| 534 | unsigned long flags; | ||
| 535 | #define __AT_TESTING 0x0001 | ||
| 536 | #define __AT_RESETTING 0x0002 | ||
| 537 | #define __AT_DOWN 0x0003 | ||
| 538 | u32 msg_enable; | ||
| 539 | |||
| 540 | bool have_msi; | ||
| 541 | u32 wol; | ||
| 542 | u16 link_speed; | ||
| 543 | u16 link_duplex; | ||
| 544 | |||
| 545 | spinlock_t mdio_lock; | ||
| 546 | spinlock_t tx_lock; | ||
| 547 | atomic_t irq_sem; | ||
| 548 | |||
| 549 | struct work_struct reset_task; | ||
| 550 | struct work_struct link_chg_task; | ||
| 551 | struct timer_list watchdog_timer; | ||
| 552 | struct timer_list phy_config_timer; | ||
| 553 | |||
| 554 | /* All Descriptor memory */ | ||
| 555 | struct atl1c_ring_header ring_header; | ||
| 556 | struct atl1c_tpd_ring tpd_ring[AT_MAX_TRANSMIT_QUEUE]; | ||
| 557 | struct atl1c_rfd_ring rfd_ring[AT_MAX_RECEIVE_QUEUE]; | ||
| 558 | struct atl1c_rrd_ring rrd_ring[AT_MAX_RECEIVE_QUEUE]; | ||
| 559 | struct atl1c_cmb cmb; | ||
| 560 | struct atl1c_smb smb; | ||
| 561 | int num_rx_queues; | ||
| 562 | u32 bd_number; /* board number;*/ | ||
| 563 | }; | ||
| 564 | |||
| 565 | #define AT_WRITE_REG(a, reg, value) ( \ | ||
| 566 | writel((value), ((a)->hw_addr + reg))) | ||
| 567 | |||
| 568 | #define AT_WRITE_FLUSH(a) (\ | ||
| 569 | readl((a)->hw_addr)) | ||
| 570 | |||
| 571 | #define AT_READ_REG(a, reg, pdata) do { \ | ||
| 572 | if (unlikely((a)->hibernate)) { \ | ||
| 573 | readl((a)->hw_addr + reg); \ | ||
| 574 | *(u32 *)pdata = readl((a)->hw_addr + reg); \ | ||
| 575 | } else { \ | ||
| 576 | *(u32 *)pdata = readl((a)->hw_addr + reg); \ | ||
| 577 | } \ | ||
| 578 | } while (0) | ||
| 579 | |||
| 580 | #define AT_WRITE_REGB(a, reg, value) (\ | ||
| 581 | writeb((value), ((a)->hw_addr + reg))) | ||
| 582 | |||
| 583 | #define AT_READ_REGB(a, reg) (\ | ||
| 584 | readb((a)->hw_addr + reg)) | ||
| 585 | |||
| 586 | #define AT_WRITE_REGW(a, reg, value) (\ | ||
| 587 | writew((value), ((a)->hw_addr + reg))) | ||
| 588 | |||
| 589 | #define AT_READ_REGW(a, reg) (\ | ||
| 590 | readw((a)->hw_addr + reg)) | ||
| 591 | |||
| 592 | #define AT_WRITE_REG_ARRAY(a, reg, offset, value) ( \ | ||
| 593 | writel((value), (((a)->hw_addr + reg) + ((offset) << 2)))) | ||
| 594 | |||
| 595 | #define AT_READ_REG_ARRAY(a, reg, offset) ( \ | ||
| 596 | readl(((a)->hw_addr + reg) + ((offset) << 2))) | ||
| 597 | |||
| 598 | extern char atl1c_driver_name[]; | ||
| 599 | extern char atl1c_driver_version[]; | ||
| 600 | |||
| 601 | extern int atl1c_up(struct atl1c_adapter *adapter); | ||
| 602 | extern void atl1c_down(struct atl1c_adapter *adapter); | ||
| 603 | extern void atl1c_reinit_locked(struct atl1c_adapter *adapter); | ||
| 604 | extern s32 atl1c_reset_hw(struct atl1c_hw *hw); | ||
| 605 | extern void atl1c_set_ethtool_ops(struct net_device *netdev); | ||
| 606 | #endif /* _ATL1C_H_ */ | ||
diff --git a/drivers/net/atl1c/atl1c_ethtool.c b/drivers/net/atl1c/atl1c_ethtool.c new file mode 100644 index 000000000000..45c5b7332cd3 --- /dev/null +++ b/drivers/net/atl1c/atl1c_ethtool.c | |||
| @@ -0,0 +1,317 @@ | |||
| 1 | /* | ||
| 2 | * Copyright(c) 2009 - 2009 Atheros Corporation. All rights reserved. | ||
| 3 | * | ||
| 4 | * Derived from Intel e1000 driver | ||
| 5 | * Copyright(c) 1999 - 2005 Intel Corporation. All rights reserved. | ||
| 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 Free | ||
| 9 | * Software Foundation; either version 2 of the License, or (at your option) | ||
| 10 | * any later version. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
| 13 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 14 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 15 | * more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License along with | ||
| 18 | * this program; if not, write to the Free Software Foundation, Inc., 59 | ||
| 19 | * Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
| 20 | * | ||
| 21 | */ | ||
| 22 | |||
| 23 | #include <linux/netdevice.h> | ||
| 24 | #include <linux/ethtool.h> | ||
| 25 | |||
| 26 | #include "atl1c.h" | ||
| 27 | |||
| 28 | static int atl1c_get_settings(struct net_device *netdev, | ||
| 29 | struct ethtool_cmd *ecmd) | ||
| 30 | { | ||
| 31 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 32 | struct atl1c_hw *hw = &adapter->hw; | ||
| 33 | |||
| 34 | ecmd->supported = (SUPPORTED_10baseT_Half | | ||
| 35 | SUPPORTED_10baseT_Full | | ||
| 36 | SUPPORTED_100baseT_Half | | ||
| 37 | SUPPORTED_100baseT_Full | | ||
| 38 | SUPPORTED_Autoneg | | ||
| 39 | SUPPORTED_TP); | ||
| 40 | if (hw->ctrl_flags & ATL1C_LINK_CAP_1000M) | ||
| 41 | ecmd->supported |= SUPPORTED_1000baseT_Full; | ||
| 42 | |||
| 43 | ecmd->advertising = ADVERTISED_TP; | ||
| 44 | |||
| 45 | ecmd->advertising |= hw->autoneg_advertised; | ||
| 46 | |||
| 47 | ecmd->port = PORT_TP; | ||
| 48 | ecmd->phy_address = 0; | ||
| 49 | ecmd->transceiver = XCVR_INTERNAL; | ||
| 50 | |||
| 51 | if (adapter->link_speed != SPEED_0) { | ||
| 52 | ecmd->speed = adapter->link_speed; | ||
| 53 | if (adapter->link_duplex == FULL_DUPLEX) | ||
| 54 | ecmd->duplex = DUPLEX_FULL; | ||
| 55 | else | ||
| 56 | ecmd->duplex = DUPLEX_HALF; | ||
| 57 | } else { | ||
| 58 | ecmd->speed = -1; | ||
| 59 | ecmd->duplex = -1; | ||
| 60 | } | ||
| 61 | |||
| 62 | ecmd->autoneg = AUTONEG_ENABLE; | ||
| 63 | return 0; | ||
| 64 | } | ||
| 65 | |||
| 66 | static int atl1c_set_settings(struct net_device *netdev, | ||
| 67 | struct ethtool_cmd *ecmd) | ||
| 68 | { | ||
| 69 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 70 | struct atl1c_hw *hw = &adapter->hw; | ||
| 71 | u16 autoneg_advertised; | ||
| 72 | |||
| 73 | while (test_and_set_bit(__AT_RESETTING, &adapter->flags)) | ||
| 74 | msleep(1); | ||
| 75 | |||
| 76 | if (ecmd->autoneg == AUTONEG_ENABLE) { | ||
| 77 | autoneg_advertised = ADVERTISED_Autoneg; | ||
| 78 | } else { | ||
| 79 | if (ecmd->speed == SPEED_1000) { | ||
| 80 | if (ecmd->duplex != DUPLEX_FULL) { | ||
| 81 | if (netif_msg_link(adapter)) | ||
| 82 | dev_warn(&adapter->pdev->dev, | ||
| 83 | "1000M half is invalid\n"); | ||
| 84 | clear_bit(__AT_RESETTING, &adapter->flags); | ||
| 85 | return -EINVAL; | ||
| 86 | } | ||
| 87 | autoneg_advertised = ADVERTISED_1000baseT_Full; | ||
| 88 | } else if (ecmd->speed == SPEED_100) { | ||
| 89 | if (ecmd->duplex == DUPLEX_FULL) | ||
| 90 | autoneg_advertised = ADVERTISED_100baseT_Full; | ||
| 91 | else | ||
| 92 | autoneg_advertised = ADVERTISED_100baseT_Half; | ||
| 93 | } else { | ||
| 94 | if (ecmd->duplex == DUPLEX_FULL) | ||
| 95 | autoneg_advertised = ADVERTISED_10baseT_Full; | ||
| 96 | else | ||
| 97 | autoneg_advertised = ADVERTISED_10baseT_Half; | ||
| 98 | } | ||
| 99 | } | ||
| 100 | |||
| 101 | if (hw->autoneg_advertised != autoneg_advertised) { | ||
| 102 | hw->autoneg_advertised = autoneg_advertised; | ||
| 103 | if (atl1c_restart_autoneg(hw) != 0) { | ||
| 104 | if (netif_msg_link(adapter)) | ||
| 105 | dev_warn(&adapter->pdev->dev, | ||
| 106 | "ethtool speed/duplex setting failed\n"); | ||
| 107 | clear_bit(__AT_RESETTING, &adapter->flags); | ||
| 108 | return -EINVAL; | ||
| 109 | } | ||
| 110 | } | ||
| 111 | clear_bit(__AT_RESETTING, &adapter->flags); | ||
| 112 | return 0; | ||
| 113 | } | ||
| 114 | |||
| 115 | static u32 atl1c_get_tx_csum(struct net_device *netdev) | ||
| 116 | { | ||
| 117 | return (netdev->features & NETIF_F_HW_CSUM) != 0; | ||
| 118 | } | ||
| 119 | |||
| 120 | static u32 atl1c_get_msglevel(struct net_device *netdev) | ||
| 121 | { | ||
| 122 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 123 | return adapter->msg_enable; | ||
| 124 | } | ||
| 125 | |||
| 126 | static void atl1c_set_msglevel(struct net_device *netdev, u32 data) | ||
| 127 | { | ||
| 128 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 129 | adapter->msg_enable = data; | ||
| 130 | } | ||
| 131 | |||
| 132 | static int atl1c_get_regs_len(struct net_device *netdev) | ||
| 133 | { | ||
| 134 | return AT_REGS_LEN; | ||
| 135 | } | ||
| 136 | |||
| 137 | static void atl1c_get_regs(struct net_device *netdev, | ||
| 138 | struct ethtool_regs *regs, void *p) | ||
| 139 | { | ||
| 140 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 141 | struct atl1c_hw *hw = &adapter->hw; | ||
| 142 | u32 *regs_buff = p; | ||
| 143 | u16 phy_data; | ||
| 144 | |||
| 145 | memset(p, 0, AT_REGS_LEN); | ||
| 146 | |||
| 147 | regs->version = 0; | ||
| 148 | AT_READ_REG(hw, REG_VPD_CAP, p++); | ||
| 149 | AT_READ_REG(hw, REG_PM_CTRL, p++); | ||
| 150 | AT_READ_REG(hw, REG_MAC_HALF_DUPLX_CTRL, p++); | ||
| 151 | AT_READ_REG(hw, REG_TWSI_CTRL, p++); | ||
| 152 | AT_READ_REG(hw, REG_PCIE_DEV_MISC_CTRL, p++); | ||
| 153 | AT_READ_REG(hw, REG_MASTER_CTRL, p++); | ||
| 154 | AT_READ_REG(hw, REG_MANUAL_TIMER_INIT, p++); | ||
| 155 | AT_READ_REG(hw, REG_IRQ_MODRT_TIMER_INIT, p++); | ||
| 156 | AT_READ_REG(hw, REG_GPHY_CTRL, p++); | ||
| 157 | AT_READ_REG(hw, REG_LINK_CTRL, p++); | ||
| 158 | AT_READ_REG(hw, REG_IDLE_STATUS, p++); | ||
| 159 | AT_READ_REG(hw, REG_MDIO_CTRL, p++); | ||
| 160 | AT_READ_REG(hw, REG_SERDES_LOCK, p++); | ||
| 161 | AT_READ_REG(hw, REG_MAC_CTRL, p++); | ||
| 162 | AT_READ_REG(hw, REG_MAC_IPG_IFG, p++); | ||
| 163 | AT_READ_REG(hw, REG_MAC_STA_ADDR, p++); | ||
| 164 | AT_READ_REG(hw, REG_MAC_STA_ADDR+4, p++); | ||
| 165 | AT_READ_REG(hw, REG_RX_HASH_TABLE, p++); | ||
| 166 | AT_READ_REG(hw, REG_RX_HASH_TABLE+4, p++); | ||
| 167 | AT_READ_REG(hw, REG_RXQ_CTRL, p++); | ||
| 168 | AT_READ_REG(hw, REG_TXQ_CTRL, p++); | ||
| 169 | AT_READ_REG(hw, REG_MTU, p++); | ||
| 170 | AT_READ_REG(hw, REG_WOL_CTRL, p++); | ||
| 171 | |||
| 172 | atl1c_read_phy_reg(hw, MII_BMCR, &phy_data); | ||
| 173 | regs_buff[73] = (u32) phy_data; | ||
| 174 | atl1c_read_phy_reg(hw, MII_BMSR, &phy_data); | ||
| 175 | regs_buff[74] = (u32) phy_data; | ||
| 176 | } | ||
| 177 | |||
| 178 | static int atl1c_get_eeprom_len(struct net_device *netdev) | ||
| 179 | { | ||
| 180 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 181 | |||
| 182 | if (atl1c_check_eeprom_exist(&adapter->hw)) | ||
| 183 | return AT_EEPROM_LEN; | ||
| 184 | else | ||
| 185 | return 0; | ||
| 186 | } | ||
| 187 | |||
| 188 | static int atl1c_get_eeprom(struct net_device *netdev, | ||
| 189 | struct ethtool_eeprom *eeprom, u8 *bytes) | ||
| 190 | { | ||
| 191 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 192 | struct atl1c_hw *hw = &adapter->hw; | ||
| 193 | u32 *eeprom_buff; | ||
| 194 | int first_dword, last_dword; | ||
| 195 | int ret_val = 0; | ||
| 196 | int i; | ||
| 197 | |||
| 198 | if (eeprom->len == 0) | ||
| 199 | return -EINVAL; | ||
| 200 | |||
| 201 | if (!atl1c_check_eeprom_exist(hw)) /* not exist */ | ||
| 202 | return -EINVAL; | ||
| 203 | |||
| 204 | eeprom->magic = adapter->pdev->vendor | | ||
| 205 | (adapter->pdev->device << 16); | ||
| 206 | |||
| 207 | first_dword = eeprom->offset >> 2; | ||
| 208 | last_dword = (eeprom->offset + eeprom->len - 1) >> 2; | ||
| 209 | |||
| 210 | eeprom_buff = kmalloc(sizeof(u32) * | ||
| 211 | (last_dword - first_dword + 1), GFP_KERNEL); | ||
| 212 | if (eeprom_buff == NULL) | ||
| 213 | return -ENOMEM; | ||
| 214 | |||
| 215 | for (i = first_dword; i < last_dword; i++) { | ||
| 216 | if (!atl1c_read_eeprom(hw, i * 4, &(eeprom_buff[i-first_dword]))) { | ||
| 217 | kfree(eeprom_buff); | ||
| 218 | return -EIO; | ||
| 219 | } | ||
| 220 | } | ||
| 221 | |||
| 222 | memcpy(bytes, (u8 *)eeprom_buff + (eeprom->offset & 3), | ||
| 223 | eeprom->len); | ||
| 224 | kfree(eeprom_buff); | ||
| 225 | |||
| 226 | return ret_val; | ||
| 227 | return 0; | ||
| 228 | } | ||
| 229 | |||
| 230 | static void atl1c_get_drvinfo(struct net_device *netdev, | ||
| 231 | struct ethtool_drvinfo *drvinfo) | ||
| 232 | { | ||
| 233 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 234 | |||
| 235 | strncpy(drvinfo->driver, atl1c_driver_name, sizeof(drvinfo->driver)); | ||
| 236 | strncpy(drvinfo->version, atl1c_driver_version, | ||
| 237 | sizeof(drvinfo->version)); | ||
| 238 | strncpy(drvinfo->fw_version, "N/A", sizeof(drvinfo->fw_version)); | ||
| 239 | strncpy(drvinfo->bus_info, pci_name(adapter->pdev), | ||
| 240 | sizeof(drvinfo->bus_info)); | ||
| 241 | drvinfo->n_stats = 0; | ||
| 242 | drvinfo->testinfo_len = 0; | ||
| 243 | drvinfo->regdump_len = atl1c_get_regs_len(netdev); | ||
| 244 | drvinfo->eedump_len = atl1c_get_eeprom_len(netdev); | ||
| 245 | } | ||
| 246 | |||
| 247 | static void atl1c_get_wol(struct net_device *netdev, | ||
| 248 | struct ethtool_wolinfo *wol) | ||
| 249 | { | ||
| 250 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 251 | |||
| 252 | wol->supported = WAKE_MAGIC | WAKE_PHY; | ||
| 253 | wol->wolopts = 0; | ||
| 254 | |||
| 255 | if (adapter->wol & AT_WUFC_EX) | ||
| 256 | wol->wolopts |= WAKE_UCAST; | ||
| 257 | if (adapter->wol & AT_WUFC_MC) | ||
| 258 | wol->wolopts |= WAKE_MCAST; | ||
| 259 | if (adapter->wol & AT_WUFC_BC) | ||
| 260 | wol->wolopts |= WAKE_BCAST; | ||
| 261 | if (adapter->wol & AT_WUFC_MAG) | ||
| 262 | wol->wolopts |= WAKE_MAGIC; | ||
| 263 | if (adapter->wol & AT_WUFC_LNKC) | ||
| 264 | wol->wolopts |= WAKE_PHY; | ||
| 265 | |||
| 266 | return; | ||
| 267 | } | ||
| 268 | |||
| 269 | static int atl1c_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol) | ||
| 270 | { | ||
| 271 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 272 | |||
| 273 | if (wol->wolopts & (WAKE_ARP | WAKE_MAGICSECURE | | ||
| 274 | WAKE_MCAST | WAKE_BCAST | WAKE_MCAST)) | ||
| 275 | return -EOPNOTSUPP; | ||
| 276 | /* these settings will always override what we currently have */ | ||
| 277 | adapter->wol = 0; | ||
| 278 | |||
| 279 | if (wol->wolopts & WAKE_MAGIC) | ||
| 280 | adapter->wol |= AT_WUFC_MAG; | ||
| 281 | if (wol->wolopts & WAKE_PHY) | ||
| 282 | adapter->wol |= AT_WUFC_LNKC; | ||
| 283 | |||
| 284 | return 0; | ||
| 285 | } | ||
| 286 | |||
| 287 | static int atl1c_nway_reset(struct net_device *netdev) | ||
| 288 | { | ||
| 289 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 290 | if (netif_running(netdev)) | ||
| 291 | atl1c_reinit_locked(adapter); | ||
| 292 | return 0; | ||
| 293 | } | ||
| 294 | |||
| 295 | static struct ethtool_ops atl1c_ethtool_ops = { | ||
| 296 | .get_settings = atl1c_get_settings, | ||
| 297 | .set_settings = atl1c_set_settings, | ||
| 298 | .get_drvinfo = atl1c_get_drvinfo, | ||
| 299 | .get_regs_len = atl1c_get_regs_len, | ||
| 300 | .get_regs = atl1c_get_regs, | ||
| 301 | .get_wol = atl1c_get_wol, | ||
| 302 | .set_wol = atl1c_set_wol, | ||
| 303 | .get_msglevel = atl1c_get_msglevel, | ||
| 304 | .set_msglevel = atl1c_set_msglevel, | ||
| 305 | .nway_reset = atl1c_nway_reset, | ||
| 306 | .get_link = ethtool_op_get_link, | ||
| 307 | .get_eeprom_len = atl1c_get_eeprom_len, | ||
| 308 | .get_eeprom = atl1c_get_eeprom, | ||
| 309 | .get_tx_csum = atl1c_get_tx_csum, | ||
| 310 | .get_sg = ethtool_op_get_sg, | ||
| 311 | .set_sg = ethtool_op_set_sg, | ||
| 312 | }; | ||
| 313 | |||
| 314 | void atl1c_set_ethtool_ops(struct net_device *netdev) | ||
| 315 | { | ||
| 316 | SET_ETHTOOL_OPS(netdev, &atl1c_ethtool_ops); | ||
| 317 | } | ||
diff --git a/drivers/net/atl1c/atl1c_hw.c b/drivers/net/atl1c/atl1c_hw.c new file mode 100644 index 000000000000..3e69b940b8f7 --- /dev/null +++ b/drivers/net/atl1c/atl1c_hw.c | |||
| @@ -0,0 +1,527 @@ | |||
| 1 | /* | ||
| 2 | * Copyright(c) 2007 Atheros Corporation. All rights reserved. | ||
| 3 | * | ||
| 4 | * Derived from Intel e1000 driver | ||
| 5 | * Copyright(c) 1999 - 2005 Intel Corporation. All rights reserved. | ||
| 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 Free | ||
| 9 | * Software Foundation; either version 2 of the License, or (at your option) | ||
| 10 | * any later version. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
| 13 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 14 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 15 | * more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License along with | ||
| 18 | * this program; if not, write to the Free Software Foundation, Inc., 59 | ||
| 19 | * Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
| 20 | */ | ||
| 21 | #include <linux/pci.h> | ||
| 22 | #include <linux/delay.h> | ||
| 23 | #include <linux/mii.h> | ||
| 24 | #include <linux/crc32.h> | ||
| 25 | |||
| 26 | #include "atl1c.h" | ||
| 27 | |||
| 28 | /* | ||
| 29 | * check_eeprom_exist | ||
| 30 | * return 1 if eeprom exist | ||
| 31 | */ | ||
| 32 | int atl1c_check_eeprom_exist(struct atl1c_hw *hw) | ||
| 33 | { | ||
| 34 | u32 data; | ||
| 35 | |||
| 36 | AT_READ_REG(hw, REG_TWSI_DEBUG, &data); | ||
| 37 | if (data & TWSI_DEBUG_DEV_EXIST) | ||
| 38 | return 1; | ||
| 39 | |||
| 40 | return 0; | ||
| 41 | } | ||
| 42 | |||
| 43 | void atl1c_hw_set_mac_addr(struct atl1c_hw *hw) | ||
| 44 | { | ||
| 45 | u32 value; | ||
| 46 | /* | ||
| 47 | * 00-0B-6A-F6-00-DC | ||
| 48 | * 0: 6AF600DC 1: 000B | ||
| 49 | * low dword | ||
| 50 | */ | ||
| 51 | value = (((u32)hw->mac_addr[2]) << 24) | | ||
| 52 | (((u32)hw->mac_addr[3]) << 16) | | ||
| 53 | (((u32)hw->mac_addr[4]) << 8) | | ||
| 54 | (((u32)hw->mac_addr[5])) ; | ||
| 55 | AT_WRITE_REG_ARRAY(hw, REG_MAC_STA_ADDR, 0, value); | ||
| 56 | /* hight dword */ | ||
| 57 | value = (((u32)hw->mac_addr[0]) << 8) | | ||
| 58 | (((u32)hw->mac_addr[1])) ; | ||
| 59 | AT_WRITE_REG_ARRAY(hw, REG_MAC_STA_ADDR, 1, value); | ||
| 60 | } | ||
| 61 | |||
| 62 | /* | ||
| 63 | * atl1c_get_permanent_address | ||
| 64 | * return 0 if get valid mac address, | ||
| 65 | */ | ||
| 66 | static int atl1c_get_permanent_address(struct atl1c_hw *hw) | ||
| 67 | { | ||
| 68 | u32 addr[2]; | ||
| 69 | u32 i; | ||
| 70 | u32 otp_ctrl_data; | ||
| 71 | u32 twsi_ctrl_data; | ||
| 72 | u8 eth_addr[ETH_ALEN]; | ||
| 73 | |||
| 74 | /* init */ | ||
| 75 | addr[0] = addr[1] = 0; | ||
| 76 | AT_READ_REG(hw, REG_OTP_CTRL, &otp_ctrl_data); | ||
| 77 | if (atl1c_check_eeprom_exist(hw)) { | ||
| 78 | /* Enable OTP CLK */ | ||
| 79 | if (!(otp_ctrl_data & OTP_CTRL_CLK_EN)) { | ||
| 80 | otp_ctrl_data |= OTP_CTRL_CLK_EN; | ||
| 81 | AT_WRITE_REG(hw, REG_OTP_CTRL, otp_ctrl_data); | ||
| 82 | AT_WRITE_FLUSH(hw); | ||
| 83 | msleep(1); | ||
| 84 | } | ||
| 85 | |||
| 86 | AT_READ_REG(hw, REG_TWSI_CTRL, &twsi_ctrl_data); | ||
| 87 | twsi_ctrl_data |= TWSI_CTRL_SW_LDSTART; | ||
| 88 | AT_WRITE_REG(hw, REG_TWSI_CTRL, twsi_ctrl_data); | ||
| 89 | for (i = 0; i < AT_TWSI_EEPROM_TIMEOUT; i++) { | ||
| 90 | msleep(10); | ||
| 91 | AT_READ_REG(hw, REG_TWSI_CTRL, &twsi_ctrl_data); | ||
| 92 | if ((twsi_ctrl_data & TWSI_CTRL_SW_LDSTART) == 0) | ||
| 93 | break; | ||
| 94 | } | ||
| 95 | if (i >= AT_TWSI_EEPROM_TIMEOUT) | ||
| 96 | return -1; | ||
| 97 | } | ||
| 98 | /* Disable OTP_CLK */ | ||
| 99 | if (otp_ctrl_data & OTP_CTRL_CLK_EN) { | ||
| 100 | otp_ctrl_data &= ~OTP_CTRL_CLK_EN; | ||
| 101 | AT_WRITE_REG(hw, REG_OTP_CTRL, otp_ctrl_data); | ||
| 102 | AT_WRITE_FLUSH(hw); | ||
| 103 | msleep(1); | ||
| 104 | } | ||
| 105 | |||
| 106 | /* maybe MAC-address is from BIOS */ | ||
| 107 | AT_READ_REG(hw, REG_MAC_STA_ADDR, &addr[0]); | ||
| 108 | AT_READ_REG(hw, REG_MAC_STA_ADDR + 4, &addr[1]); | ||
| 109 | *(u32 *) ð_addr[2] = swab32(addr[0]); | ||
| 110 | *(u16 *) ð_addr[0] = swab16(*(u16 *)&addr[1]); | ||
| 111 | |||
| 112 | if (is_valid_ether_addr(eth_addr)) { | ||
| 113 | memcpy(hw->perm_mac_addr, eth_addr, ETH_ALEN); | ||
| 114 | return 0; | ||
| 115 | } | ||
| 116 | |||
| 117 | return -1; | ||
| 118 | } | ||
| 119 | |||
| 120 | bool atl1c_read_eeprom(struct atl1c_hw *hw, u32 offset, u32 *p_value) | ||
| 121 | { | ||
| 122 | int i; | ||
| 123 | int ret = false; | ||
| 124 | u32 otp_ctrl_data; | ||
| 125 | u32 control; | ||
| 126 | u32 data; | ||
| 127 | |||
| 128 | if (offset & 3) | ||
| 129 | return ret; /* address do not align */ | ||
| 130 | |||
| 131 | AT_READ_REG(hw, REG_OTP_CTRL, &otp_ctrl_data); | ||
| 132 | if (!(otp_ctrl_data & OTP_CTRL_CLK_EN)) | ||
| 133 | AT_WRITE_REG(hw, REG_OTP_CTRL, | ||
| 134 | (otp_ctrl_data | OTP_CTRL_CLK_EN)); | ||
| 135 | |||
| 136 | AT_WRITE_REG(hw, REG_EEPROM_DATA_LO, 0); | ||
| 137 | control = (offset & EEPROM_CTRL_ADDR_MASK) << EEPROM_CTRL_ADDR_SHIFT; | ||
| 138 | AT_WRITE_REG(hw, REG_EEPROM_CTRL, control); | ||
| 139 | |||
| 140 | for (i = 0; i < 10; i++) { | ||
| 141 | udelay(100); | ||
| 142 | AT_READ_REG(hw, REG_EEPROM_CTRL, &control); | ||
| 143 | if (control & EEPROM_CTRL_RW) | ||
| 144 | break; | ||
| 145 | } | ||
| 146 | if (control & EEPROM_CTRL_RW) { | ||
| 147 | AT_READ_REG(hw, REG_EEPROM_CTRL, &data); | ||
| 148 | AT_READ_REG(hw, REG_EEPROM_DATA_LO, p_value); | ||
| 149 | data = data & 0xFFFF; | ||
| 150 | *p_value = swab32((data << 16) | (*p_value >> 16)); | ||
| 151 | ret = true; | ||
| 152 | } | ||
| 153 | if (!(otp_ctrl_data & OTP_CTRL_CLK_EN)) | ||
| 154 | AT_WRITE_REG(hw, REG_OTP_CTRL, otp_ctrl_data); | ||
| 155 | |||
| 156 | return ret; | ||
| 157 | } | ||
| 158 | /* | ||
| 159 | * Reads the adapter's MAC address from the EEPROM | ||
| 160 | * | ||
| 161 | * hw - Struct containing variables accessed by shared code | ||
| 162 | */ | ||
| 163 | int atl1c_read_mac_addr(struct atl1c_hw *hw) | ||
| 164 | { | ||
| 165 | int err = 0; | ||
| 166 | |||
| 167 | err = atl1c_get_permanent_address(hw); | ||
| 168 | if (err) | ||
| 169 | random_ether_addr(hw->perm_mac_addr); | ||
| 170 | |||
| 171 | memcpy(hw->mac_addr, hw->perm_mac_addr, sizeof(hw->perm_mac_addr)); | ||
| 172 | return 0; | ||
| 173 | } | ||
| 174 | |||
| 175 | /* | ||
| 176 | * atl1c_hash_mc_addr | ||
| 177 | * purpose | ||
| 178 | * set hash value for a multicast address | ||
| 179 | * hash calcu processing : | ||
| 180 | * 1. calcu 32bit CRC for multicast address | ||
| 181 | * 2. reverse crc with MSB to LSB | ||
| 182 | */ | ||
| 183 | u32 atl1c_hash_mc_addr(struct atl1c_hw *hw, u8 *mc_addr) | ||
| 184 | { | ||
| 185 | u32 crc32; | ||
| 186 | u32 value = 0; | ||
| 187 | int i; | ||
| 188 | |||
| 189 | crc32 = ether_crc_le(6, mc_addr); | ||
| 190 | for (i = 0; i < 32; i++) | ||
| 191 | value |= (((crc32 >> i) & 1) << (31 - i)); | ||
| 192 | |||
| 193 | return value; | ||
| 194 | } | ||
| 195 | |||
| 196 | /* | ||
| 197 | * Sets the bit in the multicast table corresponding to the hash value. | ||
| 198 | * hw - Struct containing variables accessed by shared code | ||
| 199 | * hash_value - Multicast address hash value | ||
| 200 | */ | ||
| 201 | void atl1c_hash_set(struct atl1c_hw *hw, u32 hash_value) | ||
| 202 | { | ||
| 203 | u32 hash_bit, hash_reg; | ||
| 204 | u32 mta; | ||
| 205 | |||
| 206 | /* | ||
| 207 | * The HASH Table is a register array of 2 32-bit registers. | ||
| 208 | * It is treated like an array of 64 bits. We want to set | ||
| 209 | * bit BitArray[hash_value]. So we figure out what register | ||
| 210 | * the bit is in, read it, OR in the new bit, then write | ||
| 211 | * back the new value. The register is determined by the | ||
| 212 | * upper bit of the hash value and the bit within that | ||
| 213 | * register are determined by the lower 5 bits of the value. | ||
| 214 | */ | ||
| 215 | hash_reg = (hash_value >> 31) & 0x1; | ||
| 216 | hash_bit = (hash_value >> 26) & 0x1F; | ||
| 217 | |||
| 218 | mta = AT_READ_REG_ARRAY(hw, REG_RX_HASH_TABLE, hash_reg); | ||
| 219 | |||
| 220 | mta |= (1 << hash_bit); | ||
| 221 | |||
| 222 | AT_WRITE_REG_ARRAY(hw, REG_RX_HASH_TABLE, hash_reg, mta); | ||
| 223 | } | ||
| 224 | |||
| 225 | /* | ||
| 226 | * Reads the value from a PHY register | ||
| 227 | * hw - Struct containing variables accessed by shared code | ||
| 228 | * reg_addr - address of the PHY register to read | ||
| 229 | */ | ||
| 230 | int atl1c_read_phy_reg(struct atl1c_hw *hw, u16 reg_addr, u16 *phy_data) | ||
| 231 | { | ||
| 232 | u32 val; | ||
| 233 | int i; | ||
| 234 | |||
| 235 | val = ((u32)(reg_addr & MDIO_REG_ADDR_MASK)) << MDIO_REG_ADDR_SHIFT | | ||
| 236 | MDIO_START | MDIO_SUP_PREAMBLE | MDIO_RW | | ||
| 237 | MDIO_CLK_25_4 << MDIO_CLK_SEL_SHIFT; | ||
| 238 | |||
| 239 | AT_WRITE_REG(hw, REG_MDIO_CTRL, val); | ||
| 240 | |||
| 241 | for (i = 0; i < MDIO_WAIT_TIMES; i++) { | ||
| 242 | udelay(2); | ||
| 243 | AT_READ_REG(hw, REG_MDIO_CTRL, &val); | ||
| 244 | if (!(val & (MDIO_START | MDIO_BUSY))) | ||
| 245 | break; | ||
| 246 | } | ||
| 247 | if (!(val & (MDIO_START | MDIO_BUSY))) { | ||
| 248 | *phy_data = (u16)val; | ||
| 249 | return 0; | ||
| 250 | } | ||
| 251 | |||
| 252 | return -1; | ||
| 253 | } | ||
| 254 | |||
| 255 | /* | ||
| 256 | * Writes a value to a PHY register | ||
| 257 | * hw - Struct containing variables accessed by shared code | ||
| 258 | * reg_addr - address of the PHY register to write | ||
| 259 | * data - data to write to the PHY | ||
| 260 | */ | ||
| 261 | int atl1c_write_phy_reg(struct atl1c_hw *hw, u32 reg_addr, u16 phy_data) | ||
| 262 | { | ||
| 263 | int i; | ||
| 264 | u32 val; | ||
| 265 | |||
| 266 | val = ((u32)(phy_data & MDIO_DATA_MASK)) << MDIO_DATA_SHIFT | | ||
| 267 | (reg_addr & MDIO_REG_ADDR_MASK) << MDIO_REG_ADDR_SHIFT | | ||
| 268 | MDIO_SUP_PREAMBLE | MDIO_START | | ||
| 269 | MDIO_CLK_25_4 << MDIO_CLK_SEL_SHIFT; | ||
| 270 | |||
| 271 | AT_WRITE_REG(hw, REG_MDIO_CTRL, val); | ||
| 272 | |||
| 273 | for (i = 0; i < MDIO_WAIT_TIMES; i++) { | ||
| 274 | udelay(2); | ||
| 275 | AT_READ_REG(hw, REG_MDIO_CTRL, &val); | ||
| 276 | if (!(val & (MDIO_START | MDIO_BUSY))) | ||
| 277 | break; | ||
| 278 | } | ||
| 279 | |||
| 280 | if (!(val & (MDIO_START | MDIO_BUSY))) | ||
| 281 | return 0; | ||
| 282 | |||
| 283 | return -1; | ||
| 284 | } | ||
| 285 | |||
| 286 | /* | ||
| 287 | * Configures PHY autoneg and flow control advertisement settings | ||
| 288 | * | ||
| 289 | * hw - Struct containing variables accessed by shared code | ||
| 290 | */ | ||
| 291 | static int atl1c_phy_setup_adv(struct atl1c_hw *hw) | ||
| 292 | { | ||
| 293 | u16 mii_adv_data = ADVERTISE_DEFAULT_CAP & ~ADVERTISE_SPEED_MASK; | ||
| 294 | u16 mii_giga_ctrl_data = GIGA_CR_1000T_DEFAULT_CAP & | ||
| 295 | ~GIGA_CR_1000T_SPEED_MASK; | ||
| 296 | |||
| 297 | if (hw->autoneg_advertised & ADVERTISED_10baseT_Half) | ||
| 298 | mii_adv_data |= ADVERTISE_10HALF; | ||
| 299 | if (hw->autoneg_advertised & ADVERTISED_10baseT_Full) | ||
| 300 | mii_adv_data |= ADVERTISE_10FULL; | ||
| 301 | if (hw->autoneg_advertised & ADVERTISED_100baseT_Half) | ||
| 302 | mii_adv_data |= ADVERTISE_100HALF; | ||
| 303 | if (hw->autoneg_advertised & ADVERTISED_100baseT_Full) | ||
| 304 | mii_adv_data |= ADVERTISE_100FULL; | ||
| 305 | |||
| 306 | if (hw->autoneg_advertised & ADVERTISED_Autoneg) | ||
| 307 | mii_adv_data |= ADVERTISE_10HALF | ADVERTISE_10FULL | | ||
| 308 | ADVERTISE_100HALF | ADVERTISE_100FULL; | ||
| 309 | |||
| 310 | if (hw->ctrl_flags & ATL1C_LINK_CAP_1000M) { | ||
| 311 | if (hw->autoneg_advertised & ADVERTISED_1000baseT_Half) | ||
| 312 | mii_giga_ctrl_data |= ADVERTISE_1000HALF; | ||
| 313 | if (hw->autoneg_advertised & ADVERTISED_1000baseT_Full) | ||
| 314 | mii_giga_ctrl_data |= ADVERTISE_1000FULL; | ||
| 315 | if (hw->autoneg_advertised & ADVERTISED_Autoneg) | ||
| 316 | mii_giga_ctrl_data |= ADVERTISE_1000HALF | | ||
| 317 | ADVERTISE_1000FULL; | ||
| 318 | } | ||
| 319 | |||
| 320 | if (atl1c_write_phy_reg(hw, MII_ADVERTISE, mii_adv_data) != 0 || | ||
| 321 | atl1c_write_phy_reg(hw, MII_GIGA_CR, mii_giga_ctrl_data) != 0) | ||
| 322 | return -1; | ||
| 323 | return 0; | ||
| 324 | } | ||
| 325 | |||
| 326 | void atl1c_phy_disable(struct atl1c_hw *hw) | ||
| 327 | { | ||
| 328 | AT_WRITE_REGW(hw, REG_GPHY_CTRL, | ||
| 329 | GPHY_CTRL_PW_WOL_DIS | GPHY_CTRL_EXT_RESET); | ||
| 330 | } | ||
| 331 | |||
| 332 | static void atl1c_phy_magic_data(struct atl1c_hw *hw) | ||
| 333 | { | ||
| 334 | u16 data; | ||
| 335 | |||
| 336 | data = ANA_LOOP_SEL_10BT | ANA_EN_MASK_TB | ANA_EN_10BT_IDLE | | ||
| 337 | ((1 & ANA_INTERVAL_SEL_TIMER_MASK) << | ||
| 338 | ANA_INTERVAL_SEL_TIMER_SHIFT); | ||
| 339 | |||
| 340 | atl1c_write_phy_reg(hw, MII_DBG_ADDR, MII_ANA_CTRL_18); | ||
| 341 | atl1c_write_phy_reg(hw, MII_DBG_DATA, data); | ||
| 342 | |||
| 343 | data = (2 & ANA_SERDES_CDR_BW_MASK) | ANA_MS_PAD_DBG | | ||
| 344 | ANA_SERDES_EN_DEEM | ANA_SERDES_SEL_HSP | ANA_SERDES_EN_PLL | | ||
| 345 | ANA_SERDES_EN_LCKDT; | ||
| 346 | |||
| 347 | atl1c_write_phy_reg(hw, MII_DBG_ADDR, MII_ANA_CTRL_5); | ||
| 348 | atl1c_write_phy_reg(hw, MII_DBG_DATA, data); | ||
| 349 | |||
| 350 | data = (44 & ANA_LONG_CABLE_TH_100_MASK) | | ||
| 351 | ((33 & ANA_SHORT_CABLE_TH_100_MASK) << | ||
| 352 | ANA_SHORT_CABLE_TH_100_SHIFT) | ANA_BP_BAD_LINK_ACCUM | | ||
| 353 | ANA_BP_SMALL_BW; | ||
| 354 | |||
| 355 | atl1c_write_phy_reg(hw, MII_DBG_ADDR, MII_ANA_CTRL_54); | ||
| 356 | atl1c_write_phy_reg(hw, MII_DBG_DATA, data); | ||
| 357 | |||
| 358 | data = (11 & ANA_IECHO_ADJ_MASK) | ((11 & ANA_IECHO_ADJ_MASK) << | ||
| 359 | ANA_IECHO_ADJ_2_SHIFT) | ((8 & ANA_IECHO_ADJ_MASK) << | ||
| 360 | ANA_IECHO_ADJ_1_SHIFT) | ((8 & ANA_IECHO_ADJ_MASK) << | ||
| 361 | ANA_IECHO_ADJ_0_SHIFT); | ||
| 362 | |||
| 363 | atl1c_write_phy_reg(hw, MII_DBG_ADDR, MII_ANA_CTRL_4); | ||
| 364 | atl1c_write_phy_reg(hw, MII_DBG_DATA, data); | ||
| 365 | |||
| 366 | data = ANA_RESTART_CAL | ((7 & ANA_MANUL_SWICH_ON_MASK) << | ||
| 367 | ANA_MANUL_SWICH_ON_SHIFT) | ANA_MAN_ENABLE | | ||
| 368 | ANA_SEL_HSP | ANA_EN_HB | ANA_OEN_125M; | ||
| 369 | |||
| 370 | atl1c_write_phy_reg(hw, MII_DBG_ADDR, MII_ANA_CTRL_0); | ||
| 371 | atl1c_write_phy_reg(hw, MII_DBG_DATA, data); | ||
| 372 | |||
| 373 | if (hw->ctrl_flags & ATL1C_HIB_DISABLE) { | ||
| 374 | atl1c_write_phy_reg(hw, MII_DBG_ADDR, MII_ANA_CTRL_41); | ||
| 375 | if (atl1c_read_phy_reg(hw, MII_DBG_DATA, &data) != 0) | ||
| 376 | return; | ||
| 377 | data &= ~ANA_TOP_PS_EN; | ||
| 378 | atl1c_write_phy_reg(hw, MII_DBG_DATA, data); | ||
| 379 | |||
| 380 | atl1c_write_phy_reg(hw, MII_DBG_ADDR, MII_ANA_CTRL_11); | ||
| 381 | if (atl1c_read_phy_reg(hw, MII_DBG_DATA, &data) != 0) | ||
| 382 | return; | ||
| 383 | data &= ~ANA_PS_HIB_EN; | ||
| 384 | atl1c_write_phy_reg(hw, MII_DBG_DATA, data); | ||
| 385 | } | ||
| 386 | } | ||
| 387 | |||
| 388 | int atl1c_phy_reset(struct atl1c_hw *hw) | ||
| 389 | { | ||
| 390 | struct atl1c_adapter *adapter = hw->adapter; | ||
| 391 | struct pci_dev *pdev = adapter->pdev; | ||
| 392 | u32 phy_ctrl_data = GPHY_CTRL_DEFAULT; | ||
| 393 | u32 mii_ier_data = IER_LINK_UP | IER_LINK_DOWN; | ||
| 394 | int err; | ||
| 395 | |||
| 396 | if (hw->ctrl_flags & ATL1C_HIB_DISABLE) | ||
| 397 | phy_ctrl_data &= ~GPHY_CTRL_HIB_EN; | ||
| 398 | |||
| 399 | AT_WRITE_REG(hw, REG_GPHY_CTRL, phy_ctrl_data); | ||
| 400 | AT_WRITE_FLUSH(hw); | ||
| 401 | msleep(40); | ||
| 402 | phy_ctrl_data |= GPHY_CTRL_EXT_RESET; | ||
| 403 | AT_WRITE_REG(hw, REG_GPHY_CTRL, phy_ctrl_data); | ||
| 404 | AT_WRITE_FLUSH(hw); | ||
| 405 | msleep(10); | ||
| 406 | |||
| 407 | /*Enable PHY LinkChange Interrupt */ | ||
| 408 | err = atl1c_write_phy_reg(hw, MII_IER, mii_ier_data); | ||
| 409 | if (err) { | ||
| 410 | if (netif_msg_hw(adapter)) | ||
| 411 | dev_err(&pdev->dev, | ||
| 412 | "Error enable PHY linkChange Interrupt\n"); | ||
| 413 | return err; | ||
| 414 | } | ||
| 415 | if (!(hw->ctrl_flags & ATL1C_FPGA_VERSION)) | ||
| 416 | atl1c_phy_magic_data(hw); | ||
| 417 | return 0; | ||
| 418 | } | ||
| 419 | |||
| 420 | int atl1c_phy_init(struct atl1c_hw *hw) | ||
| 421 | { | ||
| 422 | struct atl1c_adapter *adapter = (struct atl1c_adapter *)hw->adapter; | ||
| 423 | struct pci_dev *pdev = adapter->pdev; | ||
| 424 | int ret_val; | ||
| 425 | u16 mii_bmcr_data = BMCR_RESET; | ||
| 426 | u16 phy_id1, phy_id2; | ||
| 427 | |||
| 428 | if ((atl1c_read_phy_reg(hw, MII_PHYSID1, &phy_id1) != 0) || | ||
| 429 | (atl1c_read_phy_reg(hw, MII_PHYSID2, &phy_id2) != 0)) { | ||
| 430 | if (netif_msg_link(adapter)) | ||
| 431 | dev_err(&pdev->dev, "Error get phy ID\n"); | ||
| 432 | return -1; | ||
| 433 | } | ||
| 434 | switch (hw->media_type) { | ||
| 435 | case MEDIA_TYPE_AUTO_SENSOR: | ||
| 436 | ret_val = atl1c_phy_setup_adv(hw); | ||
| 437 | if (ret_val) { | ||
| 438 | if (netif_msg_link(adapter)) | ||
| 439 | dev_err(&pdev->dev, | ||
| 440 | "Error Setting up Auto-Negotiation\n"); | ||
| 441 | return ret_val; | ||
| 442 | } | ||
| 443 | mii_bmcr_data |= BMCR_AUTO_NEG_EN | BMCR_RESTART_AUTO_NEG; | ||
| 444 | break; | ||
| 445 | case MEDIA_TYPE_100M_FULL: | ||
| 446 | mii_bmcr_data |= BMCR_SPEED_100 | BMCR_FULL_DUPLEX; | ||
| 447 | break; | ||
| 448 | case MEDIA_TYPE_100M_HALF: | ||
| 449 | mii_bmcr_data |= BMCR_SPEED_100; | ||
| 450 | break; | ||
| 451 | case MEDIA_TYPE_10M_FULL: | ||
| 452 | mii_bmcr_data |= BMCR_SPEED_10 | BMCR_FULL_DUPLEX; | ||
| 453 | break; | ||
| 454 | case MEDIA_TYPE_10M_HALF: | ||
| 455 | mii_bmcr_data |= BMCR_SPEED_10; | ||
| 456 | break; | ||
| 457 | default: | ||
| 458 | if (netif_msg_link(adapter)) | ||
| 459 | dev_err(&pdev->dev, "Wrong Media type %d\n", | ||
| 460 | hw->media_type); | ||
| 461 | return -1; | ||
| 462 | break; | ||
| 463 | } | ||
| 464 | |||
| 465 | ret_val = atl1c_write_phy_reg(hw, MII_BMCR, mii_bmcr_data); | ||
| 466 | if (ret_val) | ||
| 467 | return ret_val; | ||
| 468 | hw->phy_configured = true; | ||
| 469 | |||
| 470 | return 0; | ||
| 471 | } | ||
| 472 | |||
| 473 | /* | ||
| 474 | * Detects the current speed and duplex settings of the hardware. | ||
| 475 | * | ||
| 476 | * hw - Struct containing variables accessed by shared code | ||
| 477 | * speed - Speed of the connection | ||
| 478 | * duplex - Duplex setting of the connection | ||
| 479 | */ | ||
| 480 | int atl1c_get_speed_and_duplex(struct atl1c_hw *hw, u16 *speed, u16 *duplex) | ||
| 481 | { | ||
| 482 | int err; | ||
| 483 | u16 phy_data; | ||
| 484 | |||
| 485 | /* Read PHY Specific Status Register (17) */ | ||
| 486 | err = atl1c_read_phy_reg(hw, MII_GIGA_PSSR, &phy_data); | ||
| 487 | if (err) | ||
| 488 | return err; | ||
| 489 | |||
| 490 | if (!(phy_data & GIGA_PSSR_SPD_DPLX_RESOLVED)) | ||
| 491 | return -1; | ||
| 492 | |||
| 493 | switch (phy_data & GIGA_PSSR_SPEED) { | ||
| 494 | case GIGA_PSSR_1000MBS: | ||
| 495 | *speed = SPEED_1000; | ||
| 496 | break; | ||
| 497 | case GIGA_PSSR_100MBS: | ||
| 498 | *speed = SPEED_100; | ||
| 499 | break; | ||
| 500 | case GIGA_PSSR_10MBS: | ||
| 501 | *speed = SPEED_10; | ||
| 502 | break; | ||
| 503 | default: | ||
| 504 | return -1; | ||
| 505 | break; | ||
| 506 | } | ||
| 507 | |||
| 508 | if (phy_data & GIGA_PSSR_DPLX) | ||
| 509 | *duplex = FULL_DUPLEX; | ||
| 510 | else | ||
| 511 | *duplex = HALF_DUPLEX; | ||
| 512 | |||
| 513 | return 0; | ||
| 514 | } | ||
| 515 | |||
| 516 | int atl1c_restart_autoneg(struct atl1c_hw *hw) | ||
| 517 | { | ||
| 518 | int err = 0; | ||
| 519 | u16 mii_bmcr_data = BMCR_RESET; | ||
| 520 | |||
| 521 | err = atl1c_phy_setup_adv(hw); | ||
| 522 | if (err) | ||
| 523 | return err; | ||
| 524 | mii_bmcr_data |= BMCR_AUTO_NEG_EN | BMCR_RESTART_AUTO_NEG; | ||
| 525 | |||
| 526 | return atl1c_write_phy_reg(hw, MII_BMCR, mii_bmcr_data); | ||
| 527 | } | ||
diff --git a/drivers/net/atl1c/atl1c_hw.h b/drivers/net/atl1c/atl1c_hw.h new file mode 100644 index 000000000000..c2c738df5c63 --- /dev/null +++ b/drivers/net/atl1c/atl1c_hw.h | |||
| @@ -0,0 +1,859 @@ | |||
| 1 | /* | ||
| 2 | * Copyright(c) 2008 - 2009 Atheros Corporation. All rights reserved. | ||
| 3 | * | ||
| 4 | * Derived from Intel e1000 driver | ||
| 5 | * Copyright(c) 1999 - 2005 Intel Corporation. All rights reserved. | ||
| 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 Free | ||
| 9 | * Software Foundation; either version 2 of the License, or (at your option) | ||
| 10 | * any later version. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
| 13 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 14 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 15 | * more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License along with | ||
| 18 | * this program; if not, write to the Free Software Foundation, Inc., 59 | ||
| 19 | * Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef _ATL1C_HW_H_ | ||
| 23 | #define _ATL1C_HW_H_ | ||
| 24 | |||
| 25 | #include <linux/types.h> | ||
| 26 | #include <linux/mii.h> | ||
| 27 | |||
| 28 | struct atl1c_adapter; | ||
| 29 | struct atl1c_hw; | ||
| 30 | |||
| 31 | /* function prototype */ | ||
| 32 | void atl1c_phy_disable(struct atl1c_hw *hw); | ||
| 33 | void atl1c_hw_set_mac_addr(struct atl1c_hw *hw); | ||
| 34 | int atl1c_phy_reset(struct atl1c_hw *hw); | ||
| 35 | int atl1c_read_mac_addr(struct atl1c_hw *hw); | ||
| 36 | int atl1c_get_speed_and_duplex(struct atl1c_hw *hw, u16 *speed, u16 *duplex); | ||
| 37 | u32 atl1c_hash_mc_addr(struct atl1c_hw *hw, u8 *mc_addr); | ||
| 38 | void atl1c_hash_set(struct atl1c_hw *hw, u32 hash_value); | ||
| 39 | int atl1c_read_phy_reg(struct atl1c_hw *hw, u16 reg_addr, u16 *phy_data); | ||
| 40 | int atl1c_write_phy_reg(struct atl1c_hw *hw, u32 reg_addr, u16 phy_data); | ||
| 41 | bool atl1c_read_eeprom(struct atl1c_hw *hw, u32 offset, u32 *p_value); | ||
| 42 | int atl1c_phy_init(struct atl1c_hw *hw); | ||
| 43 | int atl1c_check_eeprom_exist(struct atl1c_hw *hw); | ||
| 44 | int atl1c_restart_autoneg(struct atl1c_hw *hw); | ||
| 45 | |||
| 46 | /* register definition */ | ||
| 47 | #define REG_DEVICE_CAP 0x5C | ||
| 48 | #define DEVICE_CAP_MAX_PAYLOAD_MASK 0x7 | ||
| 49 | #define DEVICE_CAP_MAX_PAYLOAD_SHIFT 0 | ||
| 50 | |||
| 51 | #define REG_DEVICE_CTRL 0x60 | ||
| 52 | #define DEVICE_CTRL_MAX_PAYLOAD_MASK 0x7 | ||
| 53 | #define DEVICE_CTRL_MAX_PAYLOAD_SHIFT 5 | ||
| 54 | #define DEVICE_CTRL_MAX_RREQ_SZ_MASK 0x7 | ||
| 55 | #define DEVICE_CTRL_MAX_RREQ_SZ_SHIFT 12 | ||
| 56 | |||
| 57 | #define REG_LINK_CTRL 0x68 | ||
| 58 | #define LINK_CTRL_L0S_EN 0x01 | ||
| 59 | #define LINK_CTRL_L1_EN 0x02 | ||
| 60 | |||
| 61 | #define REG_VPD_CAP 0x6C | ||
| 62 | #define VPD_CAP_ID_MASK 0xff | ||
| 63 | #define VPD_CAP_ID_SHIFT 0 | ||
| 64 | #define VPD_CAP_NEXT_PTR_MASK 0xFF | ||
| 65 | #define VPD_CAP_NEXT_PTR_SHIFT 8 | ||
| 66 | #define VPD_CAP_VPD_ADDR_MASK 0x7FFF | ||
| 67 | #define VPD_CAP_VPD_ADDR_SHIFT 16 | ||
| 68 | #define VPD_CAP_VPD_FLAG 0x80000000 | ||
| 69 | |||
| 70 | #define REG_VPD_DATA 0x70 | ||
| 71 | |||
| 72 | #define REG_PCIE_UC_SEVERITY 0x10C | ||
| 73 | #define PCIE_UC_SERVRITY_TRN 0x00000001 | ||
| 74 | #define PCIE_UC_SERVRITY_DLP 0x00000010 | ||
| 75 | #define PCIE_UC_SERVRITY_PSN_TLP 0x00001000 | ||
| 76 | #define PCIE_UC_SERVRITY_FCP 0x00002000 | ||
| 77 | #define PCIE_UC_SERVRITY_CPL_TO 0x00004000 | ||
| 78 | #define PCIE_UC_SERVRITY_CA 0x00008000 | ||
| 79 | #define PCIE_UC_SERVRITY_UC 0x00010000 | ||
| 80 | #define PCIE_UC_SERVRITY_ROV 0x00020000 | ||
| 81 | #define PCIE_UC_SERVRITY_MLFP 0x00040000 | ||
| 82 | #define PCIE_UC_SERVRITY_ECRC 0x00080000 | ||
| 83 | #define PCIE_UC_SERVRITY_UR 0x00100000 | ||
| 84 | |||
| 85 | #define REG_DEV_SERIALNUM_CTRL 0x200 | ||
| 86 | #define REG_DEV_MAC_SEL_MASK 0x0 /* 0:EUI; 1:MAC */ | ||
| 87 | #define REG_DEV_MAC_SEL_SHIFT 0 | ||
| 88 | #define REG_DEV_SERIAL_NUM_EN_MASK 0x1 | ||
| 89 | #define REG_DEV_SERIAL_NUM_EN_SHIFT 1 | ||
| 90 | |||
| 91 | #define REG_TWSI_CTRL 0x218 | ||
| 92 | #define TWSI_CTRL_LD_OFFSET_MASK 0xFF | ||
| 93 | #define TWSI_CTRL_LD_OFFSET_SHIFT 0 | ||
| 94 | #define TWSI_CTRL_LD_SLV_ADDR_MASK 0x7 | ||
| 95 | #define TWSI_CTRL_LD_SLV_ADDR_SHIFT 8 | ||
| 96 | #define TWSI_CTRL_SW_LDSTART 0x800 | ||
| 97 | #define TWSI_CTRL_HW_LDSTART 0x1000 | ||
| 98 | #define TWSI_CTRL_SMB_SLV_ADDR_MASK 0x7F | ||
| 99 | #define TWSI_CTRL_SMB_SLV_ADDR_SHIFT 15 | ||
| 100 | #define TWSI_CTRL_LD_EXIST 0x400000 | ||
| 101 | #define TWSI_CTRL_READ_FREQ_SEL_MASK 0x3 | ||
| 102 | #define TWSI_CTRL_READ_FREQ_SEL_SHIFT 23 | ||
| 103 | #define TWSI_CTRL_FREQ_SEL_100K 0 | ||
| 104 | #define TWSI_CTRL_FREQ_SEL_200K 1 | ||
| 105 | #define TWSI_CTRL_FREQ_SEL_300K 2 | ||
| 106 | #define TWSI_CTRL_FREQ_SEL_400K 3 | ||
| 107 | #define TWSI_CTRL_SMB_SLV_ADDR | ||
| 108 | #define TWSI_CTRL_WRITE_FREQ_SEL_MASK 0x3 | ||
| 109 | #define TWSI_CTRL_WRITE_FREQ_SEL_SHIFT 24 | ||
| 110 | |||
| 111 | |||
| 112 | #define REG_PCIE_DEV_MISC_CTRL 0x21C | ||
| 113 | #define PCIE_DEV_MISC_EXT_PIPE 0x2 | ||
| 114 | #define PCIE_DEV_MISC_RETRY_BUFDIS 0x1 | ||
| 115 | #define PCIE_DEV_MISC_SPIROM_EXIST 0x4 | ||
| 116 | #define PCIE_DEV_MISC_SERDES_ENDIAN 0x8 | ||
| 117 | #define PCIE_DEV_MISC_SERDES_SEL_DIN 0x10 | ||
| 118 | |||
| 119 | #define REG_PCIE_PHYMISC 0x1000 | ||
| 120 | #define PCIE_PHYMISC_FORCE_RCV_DET 0x4 | ||
| 121 | |||
| 122 | #define REG_TWSI_DEBUG 0x1108 | ||
| 123 | #define TWSI_DEBUG_DEV_EXIST 0x20000000 | ||
| 124 | |||
| 125 | #define REG_EEPROM_CTRL 0x12C0 | ||
| 126 | #define EEPROM_CTRL_DATA_HI_MASK 0xFFFF | ||
| 127 | #define EEPROM_CTRL_DATA_HI_SHIFT 0 | ||
| 128 | #define EEPROM_CTRL_ADDR_MASK 0x3FF | ||
| 129 | #define EEPROM_CTRL_ADDR_SHIFT 16 | ||
| 130 | #define EEPROM_CTRL_ACK 0x40000000 | ||
| 131 | #define EEPROM_CTRL_RW 0x80000000 | ||
| 132 | |||
| 133 | #define REG_EEPROM_DATA_LO 0x12C4 | ||
| 134 | |||
| 135 | #define REG_OTP_CTRL 0x12F0 | ||
| 136 | #define OTP_CTRL_CLK_EN 0x0002 | ||
| 137 | |||
| 138 | #define REG_PM_CTRL 0x12F8 | ||
| 139 | #define PM_CTRL_SDES_EN 0x00000001 | ||
| 140 | #define PM_CTRL_RBER_EN 0x00000002 | ||
| 141 | #define PM_CTRL_CLK_REQ_EN 0x00000004 | ||
| 142 | #define PM_CTRL_ASPM_L1_EN 0x00000008 | ||
| 143 | #define PM_CTRL_SERDES_L1_EN 0x00000010 | ||
| 144 | #define PM_CTRL_SERDES_PLL_L1_EN 0x00000020 | ||
| 145 | #define PM_CTRL_SERDES_PD_EX_L1 0x00000040 | ||
| 146 | #define PM_CTRL_SERDES_BUDS_RX_L1_EN 0x00000080 | ||
| 147 | #define PM_CTRL_L0S_ENTRY_TIMER_MASK 0xF | ||
| 148 | #define PM_CTRL_L0S_ENTRY_TIMER_SHIFT 8 | ||
| 149 | #define PM_CTRL_ASPM_L0S_EN 0x00001000 | ||
| 150 | #define PM_CTRL_CLK_SWH_L1 0x00002000 | ||
| 151 | #define PM_CTRL_CLK_PWM_VER1_1 0x00004000 | ||
| 152 | #define PM_CTRL_PCIE_RECV 0x00008000 | ||
| 153 | #define PM_CTRL_L1_ENTRY_TIMER_MASK 0xF | ||
| 154 | #define PM_CTRL_L1_ENTRY_TIMER_SHIFT 16 | ||
| 155 | #define PM_CTRL_PM_REQ_TIMER_MASK 0xF | ||
| 156 | #define PM_CTRL_PM_REQ_TIMER_SHIFT 20 | ||
| 157 | #define PM_CTRL_LCKDET_TIMER_MASK 0x3F | ||
| 158 | #define PM_CTRL_LCKDET_TIMER_SHIFT 24 | ||
| 159 | #define PM_CTRL_MAC_ASPM_CHK 0x40000000 | ||
| 160 | #define PM_CTRL_HOTRST 0x80000000 | ||
| 161 | |||
| 162 | /* Selene Master Control Register */ | ||
| 163 | #define REG_MASTER_CTRL 0x1400 | ||
| 164 | #define MASTER_CTRL_SOFT_RST 0x1 | ||
| 165 | #define MASTER_CTRL_TEST_MODE_MASK 0x3 | ||
| 166 | #define MASTER_CTRL_TEST_MODE_SHIFT 2 | ||
| 167 | #define MASTER_CTRL_BERT_START 0x10 | ||
| 168 | #define MASTER_CTRL_MTIMER_EN 0x100 | ||
| 169 | #define MASTER_CTRL_MANUAL_INT 0x200 | ||
| 170 | #define MASTER_CTRL_TX_ITIMER_EN 0x400 | ||
| 171 | #define MASTER_CTRL_RX_ITIMER_EN 0x800 | ||
| 172 | #define MASTER_CTRL_CLK_SEL_DIS 0x1000 | ||
| 173 | #define MASTER_CTRL_CLK_SWH_MODE 0x2000 | ||
| 174 | #define MASTER_CTRL_INT_RDCLR 0x4000 | ||
| 175 | #define MASTER_CTRL_REV_NUM_SHIFT 16 | ||
| 176 | #define MASTER_CTRL_REV_NUM_MASK 0xff | ||
| 177 | #define MASTER_CTRL_DEV_ID_SHIFT 24 | ||
| 178 | #define MASTER_CTRL_DEV_ID_MASK 0x7f | ||
| 179 | #define MASTER_CTRL_OTP_SEL 0x80000000 | ||
| 180 | |||
| 181 | /* Timer Initial Value Register */ | ||
| 182 | #define REG_MANUAL_TIMER_INIT 0x1404 | ||
| 183 | |||
| 184 | /* IRQ ModeratorTimer Initial Value Register */ | ||
| 185 | #define REG_IRQ_MODRT_TIMER_INIT 0x1408 | ||
| 186 | #define IRQ_MODRT_TIMER_MASK 0xffff | ||
| 187 | #define IRQ_MODRT_TX_TIMER_SHIFT 0 | ||
| 188 | #define IRQ_MODRT_RX_TIMER_SHIFT 16 | ||
| 189 | |||
| 190 | #define REG_GPHY_CTRL 0x140C | ||
| 191 | #define GPHY_CTRL_EXT_RESET 0x1 | ||
| 192 | #define GPHY_CTRL_RTL_MODE 0x2 | ||
| 193 | #define GPHY_CTRL_LED_MODE 0x4 | ||
| 194 | #define GPHY_CTRL_ANEG_NOW 0x8 | ||
| 195 | #define GPHY_CTRL_REV_ANEG 0x10 | ||
| 196 | #define GPHY_CTRL_GATE_25M_EN 0x20 | ||
| 197 | #define GPHY_CTRL_LPW_EXIT 0x40 | ||
| 198 | #define GPHY_CTRL_PHY_IDDQ 0x80 | ||
| 199 | #define GPHY_CTRL_PHY_IDDQ_DIS 0x100 | ||
| 200 | #define GPHY_CTRL_GIGA_DIS 0x200 | ||
| 201 | #define GPHY_CTRL_HIB_EN 0x400 | ||
| 202 | #define GPHY_CTRL_HIB_PULSE 0x800 | ||
| 203 | #define GPHY_CTRL_SEL_ANA_RST 0x1000 | ||
| 204 | #define GPHY_CTRL_PHY_PLL_ON 0x2000 | ||
| 205 | #define GPHY_CTRL_PWDOWN_HW 0x4000 | ||
| 206 | #define GPHY_CTRL_PHY_PLL_BYPASS 0x8000 | ||
| 207 | |||
| 208 | #define GPHY_CTRL_DEFAULT ( \ | ||
| 209 | GPHY_CTRL_SEL_ANA_RST |\ | ||
| 210 | GPHY_CTRL_HIB_PULSE |\ | ||
| 211 | GPHY_CTRL_HIB_EN) | ||
| 212 | |||
| 213 | #define GPHY_CTRL_PW_WOL_DIS ( \ | ||
| 214 | GPHY_CTRL_SEL_ANA_RST |\ | ||
| 215 | GPHY_CTRL_HIB_PULSE |\ | ||
| 216 | GPHY_CTRL_HIB_EN |\ | ||
| 217 | GPHY_CTRL_PWDOWN_HW |\ | ||
| 218 | GPHY_CTRL_PHY_IDDQ) | ||
| 219 | |||
| 220 | /* Block IDLE Status Register */ | ||
| 221 | #define REG_IDLE_STATUS 0x1410 | ||
| 222 | #define IDLE_STATUS_MASK 0x00FF | ||
| 223 | #define IDLE_STATUS_RXMAC_NO_IDLE 0x1 | ||
| 224 | #define IDLE_STATUS_TXMAC_NO_IDLE 0x2 | ||
| 225 | #define IDLE_STATUS_RXQ_NO_IDLE 0x4 | ||
| 226 | #define IDLE_STATUS_TXQ_NO_IDLE 0x8 | ||
| 227 | #define IDLE_STATUS_DMAR_NO_IDLE 0x10 | ||
| 228 | #define IDLE_STATUS_DMAW_NO_IDLE 0x20 | ||
| 229 | #define IDLE_STATUS_SMB_NO_IDLE 0x40 | ||
| 230 | #define IDLE_STATUS_CMB_NO_IDLE 0x80 | ||
| 231 | |||
| 232 | /* MDIO Control Register */ | ||
| 233 | #define REG_MDIO_CTRL 0x1414 | ||
| 234 | #define MDIO_DATA_MASK 0xffff /* On MDIO write, the 16-bit | ||
| 235 | * control data to write to PHY | ||
| 236 | * MII management register */ | ||
| 237 | #define MDIO_DATA_SHIFT 0 /* On MDIO read, the 16-bit | ||
| 238 | * status data that was read | ||
| 239 | * from the PHY MII management register */ | ||
| 240 | #define MDIO_REG_ADDR_MASK 0x1f /* MDIO register address */ | ||
| 241 | #define MDIO_REG_ADDR_SHIFT 16 | ||
| 242 | #define MDIO_RW 0x200000 /* 1: read, 0: write */ | ||
| 243 | #define MDIO_SUP_PREAMBLE 0x400000 /* Suppress preamble */ | ||
| 244 | #define MDIO_START 0x800000 /* Write 1 to initiate the MDIO | ||
| 245 | * master. And this bit is self | ||
| 246 | * cleared after one cycle */ | ||
| 247 | #define MDIO_CLK_SEL_SHIFT 24 | ||
| 248 | #define MDIO_CLK_25_4 0 | ||
| 249 | #define MDIO_CLK_25_6 2 | ||
| 250 | #define MDIO_CLK_25_8 3 | ||
| 251 | #define MDIO_CLK_25_10 4 | ||
| 252 | #define MDIO_CLK_25_14 5 | ||
| 253 | #define MDIO_CLK_25_20 6 | ||
| 254 | #define MDIO_CLK_25_28 7 | ||
| 255 | #define MDIO_BUSY 0x8000000 | ||
| 256 | #define MDIO_AP_EN 0x10000000 | ||
| 257 | #define MDIO_WAIT_TIMES 10 | ||
| 258 | |||
| 259 | /* MII PHY Status Register */ | ||
| 260 | #define REG_PHY_STATUS 0x1418 | ||
| 261 | #define PHY_GENERAL_STATUS_MASK 0xFFFF | ||
| 262 | #define PHY_STATUS_RECV_ENABLE 0x0001 | ||
| 263 | #define PHY_OE_PWSP_STATUS_MASK 0x07FF | ||
| 264 | #define PHY_OE_PWSP_STATUS_SHIFT 16 | ||
| 265 | #define PHY_STATUS_LPW_STATE 0x80000000 | ||
| 266 | /* BIST Control and Status Register0 (for the Packet Memory) */ | ||
| 267 | #define REG_BIST0_CTRL 0x141c | ||
| 268 | #define BIST0_NOW 0x1 | ||
| 269 | #define BIST0_SRAM_FAIL 0x2 /* 1: The SRAM failure is | ||
| 270 | * un-repairable because | ||
| 271 | * it has address decoder | ||
| 272 | * failure or more than 1 cell | ||
| 273 | * stuck-to-x failure */ | ||
| 274 | #define BIST0_FUSE_FLAG 0x4 | ||
| 275 | |||
| 276 | /* BIST Control and Status Register1(for the retry buffer of PCI Express) */ | ||
| 277 | #define REG_BIST1_CTRL 0x1420 | ||
| 278 | #define BIST1_NOW 0x1 | ||
| 279 | #define BIST1_SRAM_FAIL 0x2 | ||
| 280 | #define BIST1_FUSE_FLAG 0x4 | ||
| 281 | |||
| 282 | /* SerDes Lock Detect Control and Status Register */ | ||
| 283 | #define REG_SERDES_LOCK 0x1424 | ||
| 284 | #define SERDES_LOCK_DETECT 0x1 /* SerDes lock detected. This signal | ||
| 285 | * comes from Analog SerDes */ | ||
| 286 | #define SERDES_LOCK_DETECT_EN 0x2 /* 1: Enable SerDes Lock detect function */ | ||
| 287 | |||
| 288 | /* MAC Control Register */ | ||
| 289 | #define REG_MAC_CTRL 0x1480 | ||
| 290 | #define MAC_CTRL_TX_EN 0x1 | ||
| 291 | #define MAC_CTRL_RX_EN 0x2 | ||
| 292 | #define MAC_CTRL_TX_FLOW 0x4 | ||
| 293 | #define MAC_CTRL_RX_FLOW 0x8 | ||
| 294 | #define MAC_CTRL_LOOPBACK 0x10 | ||
| 295 | #define MAC_CTRL_DUPLX 0x20 | ||
| 296 | #define MAC_CTRL_ADD_CRC 0x40 | ||
| 297 | #define MAC_CTRL_PAD 0x80 | ||
| 298 | #define MAC_CTRL_LENCHK 0x100 | ||
| 299 | #define MAC_CTRL_HUGE_EN 0x200 | ||
| 300 | #define MAC_CTRL_PRMLEN_SHIFT 10 | ||
| 301 | #define MAC_CTRL_PRMLEN_MASK 0xf | ||
| 302 | #define MAC_CTRL_RMV_VLAN 0x4000 | ||
| 303 | #define MAC_CTRL_PROMIS_EN 0x8000 | ||
| 304 | #define MAC_CTRL_TX_PAUSE 0x10000 | ||
| 305 | #define MAC_CTRL_SCNT 0x20000 | ||
| 306 | #define MAC_CTRL_SRST_TX 0x40000 | ||
| 307 | #define MAC_CTRL_TX_SIMURST 0x80000 | ||
| 308 | #define MAC_CTRL_SPEED_SHIFT 20 | ||
| 309 | #define MAC_CTRL_SPEED_MASK 0x3 | ||
| 310 | #define MAC_CTRL_DBG_TX_BKPRESURE 0x400000 | ||
| 311 | #define MAC_CTRL_TX_HUGE 0x800000 | ||
| 312 | #define MAC_CTRL_RX_CHKSUM_EN 0x1000000 | ||
| 313 | #define MAC_CTRL_MC_ALL_EN 0x2000000 | ||
| 314 | #define MAC_CTRL_BC_EN 0x4000000 | ||
| 315 | #define MAC_CTRL_DBG 0x8000000 | ||
| 316 | #define MAC_CTRL_SINGLE_PAUSE_EN 0x10000000 | ||
| 317 | |||
| 318 | /* MAC IPG/IFG Control Register */ | ||
| 319 | #define REG_MAC_IPG_IFG 0x1484 | ||
| 320 | #define MAC_IPG_IFG_IPGT_SHIFT 0 /* Desired back to back | ||
| 321 | * inter-packet gap. The | ||
| 322 | * default is 96-bit time */ | ||
| 323 | #define MAC_IPG_IFG_IPGT_MASK 0x7f | ||
| 324 | #define MAC_IPG_IFG_MIFG_SHIFT 8 /* Minimum number of IFG to | ||
| 325 | * enforce in between RX frames */ | ||
| 326 | #define MAC_IPG_IFG_MIFG_MASK 0xff /* Frame gap below such IFP is dropped */ | ||
| 327 | #define MAC_IPG_IFG_IPGR1_SHIFT 16 /* 64bit Carrier-Sense window */ | ||
| 328 | #define MAC_IPG_IFG_IPGR1_MASK 0x7f | ||
| 329 | #define MAC_IPG_IFG_IPGR2_SHIFT 24 /* 96-bit IPG window */ | ||
| 330 | #define MAC_IPG_IFG_IPGR2_MASK 0x7f | ||
| 331 | |||
| 332 | /* MAC STATION ADDRESS */ | ||
| 333 | #define REG_MAC_STA_ADDR 0x1488 | ||
| 334 | |||
| 335 | /* Hash table for multicast address */ | ||
| 336 | #define REG_RX_HASH_TABLE 0x1490 | ||
| 337 | |||
| 338 | /* MAC Half-Duplex Control Register */ | ||
| 339 | #define REG_MAC_HALF_DUPLX_CTRL 0x1498 | ||
| 340 | #define MAC_HALF_DUPLX_CTRL_LCOL_SHIFT 0 /* Collision Window */ | ||
| 341 | #define MAC_HALF_DUPLX_CTRL_LCOL_MASK 0x3ff | ||
| 342 | #define MAC_HALF_DUPLX_CTRL_RETRY_SHIFT 12 | ||
| 343 | #define MAC_HALF_DUPLX_CTRL_RETRY_MASK 0xf | ||
| 344 | #define MAC_HALF_DUPLX_CTRL_EXC_DEF_EN 0x10000 | ||
| 345 | #define MAC_HALF_DUPLX_CTRL_NO_BACK_C 0x20000 | ||
| 346 | #define MAC_HALF_DUPLX_CTRL_NO_BACK_P 0x40000 /* No back-off on backpressure, | ||
| 347 | * immediately start the | ||
| 348 | * transmission after back pressure */ | ||
| 349 | #define MAC_HALF_DUPLX_CTRL_ABEBE 0x80000 /* 1: Alternative Binary Exponential Back-off Enabled */ | ||
| 350 | #define MAC_HALF_DUPLX_CTRL_ABEBT_SHIFT 20 /* Maximum binary exponential number */ | ||
| 351 | #define MAC_HALF_DUPLX_CTRL_ABEBT_MASK 0xf | ||
| 352 | #define MAC_HALF_DUPLX_CTRL_JAMIPG_SHIFT 24 /* IPG to start JAM for collision based flow control in half-duplex */ | ||
| 353 | #define MAC_HALF_DUPLX_CTRL_JAMIPG_MASK 0xf /* mode. In unit of 8-bit time */ | ||
| 354 | |||
| 355 | /* Maximum Frame Length Control Register */ | ||
| 356 | #define REG_MTU 0x149c | ||
| 357 | |||
| 358 | /* Wake-On-Lan control register */ | ||
| 359 | #define REG_WOL_CTRL 0x14a0 | ||
| 360 | #define WOL_PATTERN_EN 0x00000001 | ||
| 361 | #define WOL_PATTERN_PME_EN 0x00000002 | ||
| 362 | #define WOL_MAGIC_EN 0x00000004 | ||
| 363 | #define WOL_MAGIC_PME_EN 0x00000008 | ||
| 364 | #define WOL_LINK_CHG_EN 0x00000010 | ||
| 365 | #define WOL_LINK_CHG_PME_EN 0x00000020 | ||
| 366 | #define WOL_PATTERN_ST 0x00000100 | ||
| 367 | #define WOL_MAGIC_ST 0x00000200 | ||
| 368 | #define WOL_LINKCHG_ST 0x00000400 | ||
| 369 | #define WOL_CLK_SWITCH_EN 0x00008000 | ||
| 370 | #define WOL_PT0_EN 0x00010000 | ||
| 371 | #define WOL_PT1_EN 0x00020000 | ||
| 372 | #define WOL_PT2_EN 0x00040000 | ||
| 373 | #define WOL_PT3_EN 0x00080000 | ||
| 374 | #define WOL_PT4_EN 0x00100000 | ||
| 375 | #define WOL_PT5_EN 0x00200000 | ||
| 376 | #define WOL_PT6_EN 0x00400000 | ||
| 377 | |||
| 378 | /* WOL Length ( 2 DWORD ) */ | ||
| 379 | #define REG_WOL_PATTERN_LEN 0x14a4 | ||
| 380 | #define WOL_PT_LEN_MASK 0x7f | ||
| 381 | #define WOL_PT0_LEN_SHIFT 0 | ||
| 382 | #define WOL_PT1_LEN_SHIFT 8 | ||
| 383 | #define WOL_PT2_LEN_SHIFT 16 | ||
| 384 | #define WOL_PT3_LEN_SHIFT 24 | ||
| 385 | #define WOL_PT4_LEN_SHIFT 0 | ||
| 386 | #define WOL_PT5_LEN_SHIFT 8 | ||
| 387 | #define WOL_PT6_LEN_SHIFT 16 | ||
| 388 | |||
| 389 | /* Internal SRAM Partition Register */ | ||
| 390 | #define RFDX_HEAD_ADDR_MASK 0x03FF | ||
| 391 | #define RFDX_HARD_ADDR_SHIFT 0 | ||
| 392 | #define RFDX_TAIL_ADDR_MASK 0x03FF | ||
| 393 | #define RFDX_TAIL_ADDR_SHIFT 16 | ||
| 394 | |||
| 395 | #define REG_SRAM_RFD0_INFO 0x1500 | ||
| 396 | #define REG_SRAM_RFD1_INFO 0x1504 | ||
| 397 | #define REG_SRAM_RFD2_INFO 0x1508 | ||
| 398 | #define REG_SRAM_RFD3_INFO 0x150C | ||
| 399 | |||
| 400 | #define REG_RFD_NIC_LEN 0x1510 /* In 8-bytes */ | ||
| 401 | #define RFD_NIC_LEN_MASK 0x03FF | ||
| 402 | |||
| 403 | #define REG_SRAM_TRD_ADDR 0x1518 | ||
| 404 | #define TPD_HEAD_ADDR_MASK 0x03FF | ||
| 405 | #define TPD_HEAD_ADDR_SHIFT 0 | ||
| 406 | #define TPD_TAIL_ADDR_MASK 0x03FF | ||
| 407 | #define TPD_TAIL_ADDR_SHIFT 16 | ||
| 408 | |||
| 409 | #define REG_SRAM_TRD_LEN 0x151C /* In 8-bytes */ | ||
| 410 | #define TPD_NIC_LEN_MASK 0x03FF | ||
| 411 | |||
| 412 | #define REG_SRAM_RXF_ADDR 0x1520 | ||
| 413 | #define REG_SRAM_RXF_LEN 0x1524 | ||
| 414 | #define REG_SRAM_TXF_ADDR 0x1528 | ||
| 415 | #define REG_SRAM_TXF_LEN 0x152C | ||
| 416 | #define REG_SRAM_TCPH_ADDR 0x1530 | ||
| 417 | #define REG_SRAM_PKTH_ADDR 0x1532 | ||
| 418 | |||
| 419 | /* | ||
| 420 | * Load Ptr Register | ||
| 421 | * Software sets this bit after the initialization of the head and tail */ | ||
| 422 | #define REG_LOAD_PTR 0x1534 | ||
| 423 | |||
| 424 | /* | ||
| 425 | * addresses of all descriptors, as well as the following descriptor | ||
| 426 | * control register, which triggers each function block to load the head | ||
| 427 | * pointer to prepare for the operation. This bit is then self-cleared | ||
| 428 | * after one cycle. | ||
| 429 | */ | ||
| 430 | #define REG_RX_BASE_ADDR_HI 0x1540 | ||
| 431 | #define REG_TX_BASE_ADDR_HI 0x1544 | ||
| 432 | #define REG_SMB_BASE_ADDR_HI 0x1548 | ||
| 433 | #define REG_SMB_BASE_ADDR_LO 0x154C | ||
| 434 | #define REG_RFD0_HEAD_ADDR_LO 0x1550 | ||
| 435 | #define REG_RFD1_HEAD_ADDR_LO 0x1554 | ||
| 436 | #define REG_RFD2_HEAD_ADDR_LO 0x1558 | ||
| 437 | #define REG_RFD3_HEAD_ADDR_LO 0x155C | ||
| 438 | #define REG_RFD_RING_SIZE 0x1560 | ||
| 439 | #define RFD_RING_SIZE_MASK 0x0FFF | ||
| 440 | #define REG_RX_BUF_SIZE 0x1564 | ||
| 441 | #define RX_BUF_SIZE_MASK 0xFFFF | ||
| 442 | #define REG_RRD0_HEAD_ADDR_LO 0x1568 | ||
| 443 | #define REG_RRD1_HEAD_ADDR_LO 0x156C | ||
| 444 | #define REG_RRD2_HEAD_ADDR_LO 0x1570 | ||
| 445 | #define REG_RRD3_HEAD_ADDR_LO 0x1574 | ||
| 446 | #define REG_RRD_RING_SIZE 0x1578 | ||
| 447 | #define RRD_RING_SIZE_MASK 0x0FFF | ||
| 448 | #define REG_HTPD_HEAD_ADDR_LO 0x157C | ||
| 449 | #define REG_NTPD_HEAD_ADDR_LO 0x1580 | ||
| 450 | #define REG_TPD_RING_SIZE 0x1584 | ||
| 451 | #define TPD_RING_SIZE_MASK 0xFFFF | ||
| 452 | #define REG_CMB_BASE_ADDR_LO 0x1588 | ||
| 453 | |||
| 454 | /* RSS about */ | ||
| 455 | #define REG_RSS_KEY0 0x14B0 | ||
| 456 | #define REG_RSS_KEY1 0x14B4 | ||
| 457 | #define REG_RSS_KEY2 0x14B8 | ||
| 458 | #define REG_RSS_KEY3 0x14BC | ||
| 459 | #define REG_RSS_KEY4 0x14C0 | ||
| 460 | #define REG_RSS_KEY5 0x14C4 | ||
| 461 | #define REG_RSS_KEY6 0x14C8 | ||
| 462 | #define REG_RSS_KEY7 0x14CC | ||
| 463 | #define REG_RSS_KEY8 0x14D0 | ||
| 464 | #define REG_RSS_KEY9 0x14D4 | ||
| 465 | #define REG_IDT_TABLE0 0x14E0 | ||
| 466 | #define REG_IDT_TABLE1 0x14E4 | ||
| 467 | #define REG_IDT_TABLE2 0x14E8 | ||
| 468 | #define REG_IDT_TABLE3 0x14EC | ||
| 469 | #define REG_IDT_TABLE4 0x14F0 | ||
| 470 | #define REG_IDT_TABLE5 0x14F4 | ||
| 471 | #define REG_IDT_TABLE6 0x14F8 | ||
| 472 | #define REG_IDT_TABLE7 0x14FC | ||
| 473 | #define REG_IDT_TABLE REG_IDT_TABLE0 | ||
| 474 | #define REG_RSS_HASH_VALUE 0x15B0 | ||
| 475 | #define REG_RSS_HASH_FLAG 0x15B4 | ||
| 476 | #define REG_BASE_CPU_NUMBER 0x15B8 | ||
| 477 | |||
| 478 | /* TXQ Control Register */ | ||
| 479 | #define REG_TXQ_CTRL 0x1590 | ||
| 480 | #define TXQ_NUM_TPD_BURST_MASK 0xF | ||
| 481 | #define TXQ_NUM_TPD_BURST_SHIFT 0 | ||
| 482 | #define TXQ_CTRL_IP_OPTION_EN 0x10 | ||
| 483 | #define TXQ_CTRL_EN 0x20 | ||
| 484 | #define TXQ_CTRL_ENH_MODE 0x40 | ||
| 485 | #define TXQ_CTRL_LS_8023_EN 0x80 | ||
| 486 | #define TXQ_TXF_BURST_NUM_SHIFT 16 | ||
| 487 | #define TXQ_TXF_BURST_NUM_MASK 0xFFFF | ||
| 488 | |||
| 489 | /* Jumbo packet Threshold for task offload */ | ||
| 490 | #define REG_TX_TSO_OFFLOAD_THRESH 0x1594 /* In 8-bytes */ | ||
| 491 | #define TX_TSO_OFFLOAD_THRESH_MASK 0x07FF | ||
| 492 | |||
| 493 | #define REG_TXF_WATER_MARK 0x1598 /* In 8-bytes */ | ||
| 494 | #define TXF_WATER_MARK_MASK 0x0FFF | ||
| 495 | #define TXF_LOW_WATER_MARK_SHIFT 0 | ||
| 496 | #define TXF_HIGH_WATER_MARK_SHIFT 16 | ||
| 497 | #define TXQ_CTRL_BURST_MODE_EN 0x80000000 | ||
| 498 | |||
| 499 | #define REG_THRUPUT_MON_CTRL 0x159C | ||
| 500 | #define THRUPUT_MON_RATE_MASK 0x3 | ||
| 501 | #define THRUPUT_MON_RATE_SHIFT 0 | ||
| 502 | #define THRUPUT_MON_EN 0x80 | ||
| 503 | |||
| 504 | /* RXQ Control Register */ | ||
| 505 | #define REG_RXQ_CTRL 0x15A0 | ||
| 506 | #define ASPM_THRUPUT_LIMIT_MASK 0x3 | ||
| 507 | #define ASPM_THRUPUT_LIMIT_SHIFT 0 | ||
| 508 | #define ASPM_THRUPUT_LIMIT_NO 0x00 | ||
| 509 | #define ASPM_THRUPUT_LIMIT_1M 0x01 | ||
| 510 | #define ASPM_THRUPUT_LIMIT_10M 0x02 | ||
| 511 | #define ASPM_THRUPUT_LIMIT_100M 0x04 | ||
| 512 | #define RXQ1_CTRL_EN 0x10 | ||
| 513 | #define RXQ2_CTRL_EN 0x20 | ||
| 514 | #define RXQ3_CTRL_EN 0x40 | ||
| 515 | #define IPV6_CHKSUM_CTRL_EN 0x80 | ||
| 516 | #define RSS_HASH_BITS_MASK 0x00FF | ||
| 517 | #define RSS_HASH_BITS_SHIFT 8 | ||
| 518 | #define RSS_HASH_IPV4 0x10000 | ||
| 519 | #define RSS_HASH_IPV4_TCP 0x20000 | ||
| 520 | #define RSS_HASH_IPV6 0x40000 | ||
| 521 | #define RSS_HASH_IPV6_TCP 0x80000 | ||
| 522 | #define RXQ_RFD_BURST_NUM_MASK 0x003F | ||
| 523 | #define RXQ_RFD_BURST_NUM_SHIFT 20 | ||
| 524 | #define RSS_MODE_MASK 0x0003 | ||
| 525 | #define RSS_MODE_SHIFT 26 | ||
| 526 | #define RSS_NIP_QUEUE_SEL_MASK 0x1 | ||
| 527 | #define RSS_NIP_QUEUE_SEL_SHIFT 28 | ||
| 528 | #define RRS_HASH_CTRL_EN 0x20000000 | ||
| 529 | #define RX_CUT_THRU_EN 0x40000000 | ||
| 530 | #define RXQ_CTRL_EN 0x80000000 | ||
| 531 | |||
| 532 | #define REG_RFD_FREE_THRESH 0x15A4 | ||
| 533 | #define RFD_FREE_THRESH_MASK 0x003F | ||
| 534 | #define RFD_FREE_HI_THRESH_SHIFT 0 | ||
| 535 | #define RFD_FREE_LO_THRESH_SHIFT 6 | ||
| 536 | |||
| 537 | /* RXF flow control register */ | ||
| 538 | #define REG_RXQ_RXF_PAUSE_THRESH 0x15A8 | ||
| 539 | #define RXQ_RXF_PAUSE_TH_HI_SHIFT 0 | ||
| 540 | #define RXQ_RXF_PAUSE_TH_HI_MASK 0x0FFF | ||
| 541 | #define RXQ_RXF_PAUSE_TH_LO_SHIFT 16 | ||
| 542 | #define RXQ_RXF_PAUSE_TH_LO_MASK 0x0FFF | ||
| 543 | |||
| 544 | #define REG_RXD_DMA_CTRL 0x15AC | ||
| 545 | #define RXD_DMA_THRESH_MASK 0x0FFF /* In 8-bytes */ | ||
| 546 | #define RXD_DMA_THRESH_SHIFT 0 | ||
| 547 | #define RXD_DMA_DOWN_TIMER_MASK 0xFFFF | ||
| 548 | #define RXD_DMA_DOWN_TIMER_SHIFT 16 | ||
| 549 | |||
| 550 | /* DMA Engine Control Register */ | ||
| 551 | #define REG_DMA_CTRL 0x15C0 | ||
| 552 | #define DMA_CTRL_DMAR_IN_ORDER 0x1 | ||
| 553 | #define DMA_CTRL_DMAR_ENH_ORDER 0x2 | ||
| 554 | #define DMA_CTRL_DMAR_OUT_ORDER 0x4 | ||
| 555 | #define DMA_CTRL_RCB_VALUE 0x8 | ||
| 556 | #define DMA_CTRL_DMAR_BURST_LEN_MASK 0x0007 | ||
| 557 | #define DMA_CTRL_DMAR_BURST_LEN_SHIFT 4 | ||
| 558 | #define DMA_CTRL_DMAW_BURST_LEN_MASK 0x0007 | ||
| 559 | #define DMA_CTRL_DMAW_BURST_LEN_SHIFT 7 | ||
| 560 | #define DMA_CTRL_DMAR_REQ_PRI 0x400 | ||
| 561 | #define DMA_CTRL_DMAR_DLY_CNT_MASK 0x001F | ||
| 562 | #define DMA_CTRL_DMAR_DLY_CNT_SHIFT 11 | ||
| 563 | #define DMA_CTRL_DMAW_DLY_CNT_MASK 0x000F | ||
| 564 | #define DMA_CTRL_DMAW_DLY_CNT_SHIFT 16 | ||
| 565 | #define DMA_CTRL_CMB_EN 0x100000 | ||
| 566 | #define DMA_CTRL_SMB_EN 0x200000 | ||
| 567 | #define DMA_CTRL_CMB_NOW 0x400000 | ||
| 568 | #define MAC_CTRL_SMB_DIS 0x1000000 | ||
| 569 | #define DMA_CTRL_SMB_NOW 0x80000000 | ||
| 570 | |||
| 571 | /* CMB/SMB Control Register */ | ||
| 572 | #define REG_SMB_STAT_TIMER 0x15C4 /* 2us resolution */ | ||
| 573 | #define SMB_STAT_TIMER_MASK 0xFFFFFF | ||
| 574 | #define REG_CMB_TPD_THRESH 0x15C8 | ||
| 575 | #define CMB_TPD_THRESH_MASK 0xFFFF | ||
| 576 | #define REG_CMB_TX_TIMER 0x15CC /* 2us resolution */ | ||
| 577 | #define CMB_TX_TIMER_MASK 0xFFFF | ||
| 578 | |||
| 579 | /* Mail box */ | ||
| 580 | #define MB_RFDX_PROD_IDX_MASK 0xFFFF | ||
| 581 | #define REG_MB_RFD0_PROD_IDX 0x15E0 | ||
| 582 | #define REG_MB_RFD1_PROD_IDX 0x15E4 | ||
| 583 | #define REG_MB_RFD2_PROD_IDX 0x15E8 | ||
| 584 | #define REG_MB_RFD3_PROD_IDX 0x15EC | ||
| 585 | |||
| 586 | #define MB_PRIO_PROD_IDX_MASK 0xFFFF | ||
| 587 | #define REG_MB_PRIO_PROD_IDX 0x15F0 | ||
| 588 | #define MB_HTPD_PROD_IDX_SHIFT 0 | ||
| 589 | #define MB_NTPD_PROD_IDX_SHIFT 16 | ||
| 590 | |||
| 591 | #define MB_PRIO_CONS_IDX_MASK 0xFFFF | ||
| 592 | #define REG_MB_PRIO_CONS_IDX 0x15F4 | ||
| 593 | #define MB_HTPD_CONS_IDX_SHIFT 0 | ||
| 594 | #define MB_NTPD_CONS_IDX_SHIFT 16 | ||
| 595 | |||
| 596 | #define REG_MB_RFD01_CONS_IDX 0x15F8 | ||
| 597 | #define MB_RFD0_CONS_IDX_MASK 0x0000FFFF | ||
| 598 | #define MB_RFD1_CONS_IDX_MASK 0xFFFF0000 | ||
| 599 | #define REG_MB_RFD23_CONS_IDX 0x15FC | ||
| 600 | #define MB_RFD2_CONS_IDX_MASK 0x0000FFFF | ||
| 601 | #define MB_RFD3_CONS_IDX_MASK 0xFFFF0000 | ||
| 602 | |||
| 603 | /* Interrupt Status Register */ | ||
| 604 | #define REG_ISR 0x1600 | ||
| 605 | #define ISR_SMB 0x00000001 | ||
| 606 | #define ISR_TIMER 0x00000002 | ||
| 607 | /* | ||
| 608 | * Software manual interrupt, for debug. Set when SW_MAN_INT_EN is set | ||
| 609 | * in Table 51 Selene Master Control Register (Offset 0x1400). | ||
| 610 | */ | ||
| 611 | #define ISR_MANUAL 0x00000004 | ||
| 612 | #define ISR_HW_RXF_OV 0x00000008 /* RXF overflow interrupt */ | ||
| 613 | #define ISR_RFD0_UR 0x00000010 /* RFD0 under run */ | ||
| 614 | #define ISR_RFD1_UR 0x00000020 | ||
| 615 | #define ISR_RFD2_UR 0x00000040 | ||
| 616 | #define ISR_RFD3_UR 0x00000080 | ||
| 617 | #define ISR_TXF_UR 0x00000100 | ||
| 618 | #define ISR_DMAR_TO_RST 0x00000200 | ||
| 619 | #define ISR_DMAW_TO_RST 0x00000400 | ||
| 620 | #define ISR_TX_CREDIT 0x00000800 | ||
| 621 | #define ISR_GPHY 0x00001000 | ||
| 622 | /* GPHY low power state interrupt */ | ||
| 623 | #define ISR_GPHY_LPW 0x00002000 | ||
| 624 | #define ISR_TXQ_TO_RST 0x00004000 | ||
| 625 | #define ISR_TX_PKT 0x00008000 | ||
| 626 | #define ISR_RX_PKT_0 0x00010000 | ||
| 627 | #define ISR_RX_PKT_1 0x00020000 | ||
| 628 | #define ISR_RX_PKT_2 0x00040000 | ||
| 629 | #define ISR_RX_PKT_3 0x00080000 | ||
| 630 | #define ISR_MAC_RX 0x00100000 | ||
| 631 | #define ISR_MAC_TX 0x00200000 | ||
| 632 | #define ISR_UR_DETECTED 0x00400000 | ||
| 633 | #define ISR_FERR_DETECTED 0x00800000 | ||
| 634 | #define ISR_NFERR_DETECTED 0x01000000 | ||
| 635 | #define ISR_CERR_DETECTED 0x02000000 | ||
| 636 | #define ISR_PHY_LINKDOWN 0x04000000 | ||
| 637 | #define ISR_DIS_INT 0x80000000 | ||
| 638 | |||
| 639 | /* Interrupt Mask Register */ | ||
| 640 | #define REG_IMR 0x1604 | ||
| 641 | |||
| 642 | #define IMR_NORMAL_MASK (\ | ||
| 643 | ISR_MANUAL |\ | ||
| 644 | ISR_HW_RXF_OV |\ | ||
| 645 | ISR_RFD0_UR |\ | ||
| 646 | ISR_TXF_UR |\ | ||
| 647 | ISR_DMAR_TO_RST |\ | ||
| 648 | ISR_TXQ_TO_RST |\ | ||
| 649 | ISR_DMAW_TO_RST |\ | ||
| 650 | ISR_GPHY |\ | ||
| 651 | ISR_TX_PKT |\ | ||
| 652 | ISR_RX_PKT_0 |\ | ||
| 653 | ISR_GPHY_LPW |\ | ||
| 654 | ISR_PHY_LINKDOWN) | ||
| 655 | |||
| 656 | #define ISR_RX_PKT (\ | ||
| 657 | ISR_RX_PKT_0 |\ | ||
| 658 | ISR_RX_PKT_1 |\ | ||
| 659 | ISR_RX_PKT_2 |\ | ||
| 660 | ISR_RX_PKT_3) | ||
| 661 | |||
| 662 | #define ISR_OVER (\ | ||
| 663 | ISR_RFD0_UR |\ | ||
| 664 | ISR_RFD1_UR |\ | ||
| 665 | ISR_RFD2_UR |\ | ||
| 666 | ISR_RFD3_UR |\ | ||
| 667 | ISR_HW_RXF_OV |\ | ||
| 668 | ISR_TXF_UR) | ||
| 669 | |||
| 670 | #define ISR_ERROR (\ | ||
| 671 | ISR_DMAR_TO_RST |\ | ||
| 672 | ISR_TXQ_TO_RST |\ | ||
| 673 | ISR_DMAW_TO_RST |\ | ||
| 674 | ISR_PHY_LINKDOWN) | ||
| 675 | |||
| 676 | #define REG_INT_RETRIG_TIMER 0x1608 | ||
| 677 | #define INT_RETRIG_TIMER_MASK 0xFFFF | ||
| 678 | |||
| 679 | #define REG_HDS_CTRL 0x160C | ||
| 680 | #define HDS_CTRL_EN 0x0001 | ||
| 681 | #define HDS_CTRL_BACKFILLSIZE_SHIFT 8 | ||
| 682 | #define HDS_CTRL_BACKFILLSIZE_MASK 0x0FFF | ||
| 683 | #define HDS_CTRL_MAX_HDRSIZE_SHIFT 20 | ||
| 684 | #define HDS_CTRL_MAC_HDRSIZE_MASK 0x0FFF | ||
| 685 | |||
| 686 | #define REG_MAC_RX_STATUS_BIN 0x1700 | ||
| 687 | #define REG_MAC_RX_STATUS_END 0x175c | ||
| 688 | #define REG_MAC_TX_STATUS_BIN 0x1760 | ||
| 689 | #define REG_MAC_TX_STATUS_END 0x17c0 | ||
| 690 | |||
| 691 | /* DEBUG ADDR */ | ||
| 692 | #define REG_DEBUG_DATA0 0x1900 | ||
| 693 | #define REG_DEBUG_DATA1 0x1904 | ||
| 694 | |||
| 695 | /* PHY Control Register */ | ||
| 696 | #define MII_BMCR 0x00 | ||
| 697 | #define BMCR_SPEED_SELECT_MSB 0x0040 /* bits 6,13: 10=1000, 01=100, 00=10 */ | ||
| 698 | #define BMCR_COLL_TEST_ENABLE 0x0080 /* Collision test enable */ | ||
| 699 | #define BMCR_FULL_DUPLEX 0x0100 /* FDX =1, half duplex =0 */ | ||
| 700 | #define BMCR_RESTART_AUTO_NEG 0x0200 /* Restart auto negotiation */ | ||
| 701 | #define BMCR_ISOLATE 0x0400 /* Isolate PHY from MII */ | ||
| 702 | #define BMCR_POWER_DOWN 0x0800 /* Power down */ | ||
| 703 | #define BMCR_AUTO_NEG_EN 0x1000 /* Auto Neg Enable */ | ||
| 704 | #define BMCR_SPEED_SELECT_LSB 0x2000 /* bits 6,13: 10=1000, 01=100, 00=10 */ | ||
| 705 | #define BMCR_LOOPBACK 0x4000 /* 0 = normal, 1 = loopback */ | ||
| 706 | #define BMCR_RESET 0x8000 /* 0 = normal, 1 = PHY reset */ | ||
| 707 | #define BMCR_SPEED_MASK 0x2040 | ||
| 708 | #define BMCR_SPEED_1000 0x0040 | ||
| 709 | #define BMCR_SPEED_100 0x2000 | ||
| 710 | #define BMCR_SPEED_10 0x0000 | ||
| 711 | |||
| 712 | /* PHY Status Register */ | ||
| 713 | #define MII_BMSR 0x01 | ||
| 714 | #define BMMSR_EXTENDED_CAPS 0x0001 /* Extended register capabilities */ | ||
| 715 | #define BMSR_JABBER_DETECT 0x0002 /* Jabber Detected */ | ||
| 716 | #define BMSR_LINK_STATUS 0x0004 /* Link Status 1 = link */ | ||
| 717 | #define BMSR_AUTONEG_CAPS 0x0008 /* Auto Neg Capable */ | ||
| 718 | #define BMSR_REMOTE_FAULT 0x0010 /* Remote Fault Detect */ | ||
| 719 | #define BMSR_AUTONEG_COMPLETE 0x0020 /* Auto Neg Complete */ | ||
| 720 | #define BMSR_PREAMBLE_SUPPRESS 0x0040 /* Preamble may be suppressed */ | ||
| 721 | #define BMSR_EXTENDED_STATUS 0x0100 /* Ext. status info in Reg 0x0F */ | ||
| 722 | #define BMSR_100T2_HD_CAPS 0x0200 /* 100T2 Half Duplex Capable */ | ||
| 723 | #define BMSR_100T2_FD_CAPS 0x0400 /* 100T2 Full Duplex Capable */ | ||
| 724 | #define BMSR_10T_HD_CAPS 0x0800 /* 10T Half Duplex Capable */ | ||
| 725 | #define BMSR_10T_FD_CAPS 0x1000 /* 10T Full Duplex Capable */ | ||
| 726 | #define BMSR_100X_HD_CAPS 0x2000 /* 100X Half Duplex Capable */ | ||
| 727 | #define BMMII_SR_100X_FD_CAPS 0x4000 /* 100X Full Duplex Capable */ | ||
| 728 | #define BMMII_SR_100T4_CAPS 0x8000 /* 100T4 Capable */ | ||
| 729 | |||
| 730 | #define MII_PHYSID1 0x02 | ||
| 731 | #define MII_PHYSID2 0x03 | ||
| 732 | |||
| 733 | /* Autoneg Advertisement Register */ | ||
| 734 | #define MII_ADVERTISE 0x04 | ||
| 735 | #define ADVERTISE_SPEED_MASK 0x01E0 | ||
| 736 | #define ADVERTISE_DEFAULT_CAP 0x0DE0 | ||
| 737 | |||
| 738 | /* 1000BASE-T Control Register */ | ||
| 739 | #define MII_GIGA_CR 0x09 | ||
| 740 | #define GIGA_CR_1000T_REPEATER_DTE 0x0400 /* 1=Repeater/switch device port 0=DTE device */ | ||
| 741 | |||
| 742 | #define GIGA_CR_1000T_MS_VALUE 0x0800 /* 1=Configure PHY as Master 0=Configure PHY as Slave */ | ||
| 743 | #define GIGA_CR_1000T_MS_ENABLE 0x1000 /* 1=Master/Slave manual config value 0=Automatic Master/Slave config */ | ||
| 744 | #define GIGA_CR_1000T_TEST_MODE_NORMAL 0x0000 /* Normal Operation */ | ||
| 745 | #define GIGA_CR_1000T_TEST_MODE_1 0x2000 /* Transmit Waveform test */ | ||
| 746 | #define GIGA_CR_1000T_TEST_MODE_2 0x4000 /* Master Transmit Jitter test */ | ||
| 747 | #define GIGA_CR_1000T_TEST_MODE_3 0x6000 /* Slave Transmit Jitter test */ | ||
| 748 | #define GIGA_CR_1000T_TEST_MODE_4 0x8000 /* Transmitter Distortion test */ | ||
| 749 | #define GIGA_CR_1000T_SPEED_MASK 0x0300 | ||
| 750 | #define GIGA_CR_1000T_DEFAULT_CAP 0x0300 | ||
| 751 | |||
| 752 | /* PHY Specific Status Register */ | ||
| 753 | #define MII_GIGA_PSSR 0x11 | ||
| 754 | #define GIGA_PSSR_SPD_DPLX_RESOLVED 0x0800 /* 1=Speed & Duplex resolved */ | ||
| 755 | #define GIGA_PSSR_DPLX 0x2000 /* 1=Duplex 0=Half Duplex */ | ||
| 756 | #define GIGA_PSSR_SPEED 0xC000 /* Speed, bits 14:15 */ | ||
| 757 | #define GIGA_PSSR_10MBS 0x0000 /* 00=10Mbs */ | ||
| 758 | #define GIGA_PSSR_100MBS 0x4000 /* 01=100Mbs */ | ||
| 759 | #define GIGA_PSSR_1000MBS 0x8000 /* 10=1000Mbs */ | ||
| 760 | |||
| 761 | /* PHY Interrupt Enable Register */ | ||
| 762 | #define MII_IER 0x12 | ||
| 763 | #define IER_LINK_UP 0x0400 | ||
| 764 | #define IER_LINK_DOWN 0x0800 | ||
| 765 | |||
| 766 | /* PHY Interrupt Status Register */ | ||
| 767 | #define MII_ISR 0x13 | ||
| 768 | #define ISR_LINK_UP 0x0400 | ||
| 769 | #define ISR_LINK_DOWN 0x0800 | ||
| 770 | |||
| 771 | /* Cable-Detect-Test Control Register */ | ||
| 772 | #define MII_CDTC 0x16 | ||
| 773 | #define CDTC_EN_OFF 0 /* sc */ | ||
| 774 | #define CDTC_EN_BITS 1 | ||
| 775 | #define CDTC_PAIR_OFF 8 | ||
| 776 | #define CDTC_PAIR_BIT 2 | ||
| 777 | |||
| 778 | /* Cable-Detect-Test Status Register */ | ||
| 779 | #define MII_CDTS 0x1C | ||
| 780 | #define CDTS_STATUS_OFF 8 | ||
| 781 | #define CDTS_STATUS_BITS 2 | ||
| 782 | #define CDTS_STATUS_NORMAL 0 | ||
| 783 | #define CDTS_STATUS_SHORT 1 | ||
| 784 | #define CDTS_STATUS_OPEN 2 | ||
| 785 | #define CDTS_STATUS_INVALID 3 | ||
| 786 | |||
| 787 | #define MII_DBG_ADDR 0x1D | ||
| 788 | #define MII_DBG_DATA 0x1E | ||
| 789 | |||
| 790 | #define MII_ANA_CTRL_0 0x0 | ||
| 791 | #define ANA_RESTART_CAL 0x0001 | ||
| 792 | #define ANA_MANUL_SWICH_ON_SHIFT 0x1 | ||
| 793 | #define ANA_MANUL_SWICH_ON_MASK 0xF | ||
| 794 | #define ANA_MAN_ENABLE 0x0020 | ||
| 795 | #define ANA_SEL_HSP 0x0040 | ||
| 796 | #define ANA_EN_HB 0x0080 | ||
| 797 | #define ANA_EN_HBIAS 0x0100 | ||
| 798 | #define ANA_OEN_125M 0x0200 | ||
| 799 | #define ANA_EN_LCKDT 0x0400 | ||
| 800 | #define ANA_LCKDT_PHY 0x0800 | ||
| 801 | #define ANA_AFE_MODE 0x1000 | ||
| 802 | #define ANA_VCO_SLOW 0x2000 | ||
| 803 | #define ANA_VCO_FAST 0x4000 | ||
| 804 | #define ANA_SEL_CLK125M_DSP 0x8000 | ||
| 805 | |||
| 806 | #define MII_ANA_CTRL_4 0x4 | ||
| 807 | #define ANA_IECHO_ADJ_MASK 0xF | ||
| 808 | #define ANA_IECHO_ADJ_3_SHIFT 0 | ||
| 809 | #define ANA_IECHO_ADJ_2_SHIFT 4 | ||
| 810 | #define ANA_IECHO_ADJ_1_SHIFT 8 | ||
| 811 | #define ANA_IECHO_ADJ_0_SHIFT 12 | ||
| 812 | |||
| 813 | #define MII_ANA_CTRL_5 0x5 | ||
| 814 | #define ANA_SERDES_CDR_BW_SHIFT 0 | ||
| 815 | #define ANA_SERDES_CDR_BW_MASK 0x3 | ||
| 816 | #define ANA_MS_PAD_DBG 0x0004 | ||
| 817 | #define ANA_SPEEDUP_DBG 0x0008 | ||
| 818 | #define ANA_SERDES_TH_LOS_SHIFT 4 | ||
| 819 | #define ANA_SERDES_TH_LOS_MASK 0x3 | ||
| 820 | #define ANA_SERDES_EN_DEEM 0x0040 | ||
| 821 | #define ANA_SERDES_TXELECIDLE 0x0080 | ||
| 822 | #define ANA_SERDES_BEACON 0x0100 | ||
| 823 | #define ANA_SERDES_HALFTXDR 0x0200 | ||
| 824 | #define ANA_SERDES_SEL_HSP 0x0400 | ||
| 825 | #define ANA_SERDES_EN_PLL 0x0800 | ||
| 826 | #define ANA_SERDES_EN 0x1000 | ||
| 827 | #define ANA_SERDES_EN_LCKDT 0x2000 | ||
| 828 | |||
| 829 | #define MII_ANA_CTRL_11 0xB | ||
| 830 | #define ANA_PS_HIB_EN 0x8000 | ||
| 831 | |||
| 832 | #define MII_ANA_CTRL_18 0x12 | ||
| 833 | #define ANA_TEST_MODE_10BT_01SHIFT 0 | ||
| 834 | #define ANA_TEST_MODE_10BT_01MASK 0x3 | ||
| 835 | #define ANA_LOOP_SEL_10BT 0x0004 | ||
| 836 | #define ANA_RGMII_MODE_SW 0x0008 | ||
| 837 | #define ANA_EN_LONGECABLE 0x0010 | ||
| 838 | #define ANA_TEST_MODE_10BT_2 0x0020 | ||
| 839 | #define ANA_EN_10BT_IDLE 0x0400 | ||
| 840 | #define ANA_EN_MASK_TB 0x0800 | ||
| 841 | #define ANA_TRIGGER_SEL_TIMER_SHIFT 12 | ||
| 842 | #define ANA_TRIGGER_SEL_TIMER_MASK 0x3 | ||
| 843 | #define ANA_INTERVAL_SEL_TIMER_SHIFT 14 | ||
| 844 | #define ANA_INTERVAL_SEL_TIMER_MASK 0x3 | ||
| 845 | |||
| 846 | #define MII_ANA_CTRL_41 0x29 | ||
| 847 | #define ANA_TOP_PS_EN 0x8000 | ||
| 848 | |||
| 849 | #define MII_ANA_CTRL_54 0x36 | ||
| 850 | #define ANA_LONG_CABLE_TH_100_SHIFT 0 | ||
| 851 | #define ANA_LONG_CABLE_TH_100_MASK 0x3F | ||
| 852 | #define ANA_DESERVED 0x0040 | ||
| 853 | #define ANA_EN_LIT_CH 0x0080 | ||
| 854 | #define ANA_SHORT_CABLE_TH_100_SHIFT 8 | ||
| 855 | #define ANA_SHORT_CABLE_TH_100_MASK 0x3F | ||
| 856 | #define ANA_BP_BAD_LINK_ACCUM 0x4000 | ||
| 857 | #define ANA_BP_SMALL_BW 0x8000 | ||
| 858 | |||
| 859 | #endif /*_ATL1C_HW_H_*/ | ||
diff --git a/drivers/net/atl1c/atl1c_main.c b/drivers/net/atl1c/atl1c_main.c new file mode 100644 index 000000000000..deb7b53167ee --- /dev/null +++ b/drivers/net/atl1c/atl1c_main.c | |||
| @@ -0,0 +1,2797 @@ | |||
| 1 | /* | ||
| 2 | * Copyright(c) 2008 - 2009 Atheros Corporation. All rights reserved. | ||
| 3 | * | ||
| 4 | * Derived from Intel e1000 driver | ||
| 5 | * Copyright(c) 1999 - 2005 Intel Corporation. All rights reserved. | ||
| 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 Free | ||
| 9 | * Software Foundation; either version 2 of the License, or (at your option) | ||
| 10 | * any later version. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
| 13 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 14 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 15 | * more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License along with | ||
| 18 | * this program; if not, write to the Free Software Foundation, Inc., 59 | ||
| 19 | * Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #include "atl1c.h" | ||
| 23 | |||
| 24 | #define ATL1C_DRV_VERSION "1.0.0.1-NAPI" | ||
| 25 | char atl1c_driver_name[] = "atl1c"; | ||
| 26 | char atl1c_driver_version[] = ATL1C_DRV_VERSION; | ||
| 27 | #define PCI_DEVICE_ID_ATTANSIC_L2C 0x1062 | ||
| 28 | #define PCI_DEVICE_ID_ATTANSIC_L1C 0x1063 | ||
| 29 | /* | ||
| 30 | * atl1c_pci_tbl - PCI Device ID Table | ||
| 31 | * | ||
| 32 | * Wildcard entries (PCI_ANY_ID) should come last | ||
| 33 | * Last entry must be all 0s | ||
| 34 | * | ||
| 35 | * { Vendor ID, Device ID, SubVendor ID, SubDevice ID, | ||
| 36 | * Class, Class Mask, private data (not used) } | ||
| 37 | */ | ||
| 38 | static struct pci_device_id atl1c_pci_tbl[] = { | ||
| 39 | {PCI_DEVICE(PCI_VENDOR_ID_ATTANSIC, PCI_DEVICE_ID_ATTANSIC_L1C)}, | ||
| 40 | {PCI_DEVICE(PCI_VENDOR_ID_ATTANSIC, PCI_DEVICE_ID_ATTANSIC_L2C)}, | ||
| 41 | /* required last entry */ | ||
| 42 | { 0 } | ||
| 43 | }; | ||
| 44 | MODULE_DEVICE_TABLE(pci, atl1c_pci_tbl); | ||
| 45 | |||
| 46 | MODULE_AUTHOR("Jie Yang <jie.yang@atheros.com>"); | ||
| 47 | MODULE_DESCRIPTION("Atheros 1000M Ethernet Network Driver"); | ||
| 48 | MODULE_LICENSE("GPL"); | ||
| 49 | MODULE_VERSION(ATL1C_DRV_VERSION); | ||
| 50 | |||
| 51 | static int atl1c_stop_mac(struct atl1c_hw *hw); | ||
| 52 | static void atl1c_enable_rx_ctrl(struct atl1c_hw *hw); | ||
| 53 | static void atl1c_enable_tx_ctrl(struct atl1c_hw *hw); | ||
| 54 | static void atl1c_disable_l0s_l1(struct atl1c_hw *hw); | ||
| 55 | static void atl1c_set_aspm(struct atl1c_hw *hw, bool linkup); | ||
| 56 | static void atl1c_setup_mac_ctrl(struct atl1c_adapter *adapter); | ||
| 57 | static void atl1c_clean_rx_irq(struct atl1c_adapter *adapter, u8 que, | ||
| 58 | int *work_done, int work_to_do); | ||
| 59 | |||
| 60 | static const u16 atl1c_pay_load_size[] = { | ||
| 61 | 128, 256, 512, 1024, 2048, 4096, | ||
| 62 | }; | ||
| 63 | |||
| 64 | static const u16 atl1c_rfd_prod_idx_regs[AT_MAX_RECEIVE_QUEUE] = | ||
| 65 | { | ||
| 66 | REG_MB_RFD0_PROD_IDX, | ||
| 67 | REG_MB_RFD1_PROD_IDX, | ||
| 68 | REG_MB_RFD2_PROD_IDX, | ||
| 69 | REG_MB_RFD3_PROD_IDX | ||
| 70 | }; | ||
| 71 | |||
| 72 | static const u16 atl1c_rfd_addr_lo_regs[AT_MAX_RECEIVE_QUEUE] = | ||
| 73 | { | ||
| 74 | REG_RFD0_HEAD_ADDR_LO, | ||
| 75 | REG_RFD1_HEAD_ADDR_LO, | ||
| 76 | REG_RFD2_HEAD_ADDR_LO, | ||
| 77 | REG_RFD3_HEAD_ADDR_LO | ||
| 78 | }; | ||
| 79 | |||
| 80 | static const u16 atl1c_rrd_addr_lo_regs[AT_MAX_RECEIVE_QUEUE] = | ||
| 81 | { | ||
| 82 | REG_RRD0_HEAD_ADDR_LO, | ||
| 83 | REG_RRD1_HEAD_ADDR_LO, | ||
| 84 | REG_RRD2_HEAD_ADDR_LO, | ||
| 85 | REG_RRD3_HEAD_ADDR_LO | ||
| 86 | }; | ||
| 87 | |||
| 88 | static const u32 atl1c_default_msg = NETIF_MSG_DRV | NETIF_MSG_PROBE | | ||
| 89 | NETIF_MSG_LINK | NETIF_MSG_TIMER | NETIF_MSG_IFDOWN | NETIF_MSG_IFUP; | ||
| 90 | |||
| 91 | /* | ||
| 92 | * atl1c_init_pcie - init PCIE module | ||
| 93 | */ | ||
| 94 | static void atl1c_reset_pcie(struct atl1c_hw *hw, u32 flag) | ||
| 95 | { | ||
| 96 | u32 data; | ||
| 97 | u32 pci_cmd; | ||
| 98 | struct pci_dev *pdev = hw->adapter->pdev; | ||
| 99 | |||
| 100 | AT_READ_REG(hw, PCI_COMMAND, &pci_cmd); | ||
| 101 | pci_cmd &= ~PCI_COMMAND_INTX_DISABLE; | ||
| 102 | pci_cmd |= (PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | | ||
| 103 | PCI_COMMAND_IO); | ||
| 104 | AT_WRITE_REG(hw, PCI_COMMAND, pci_cmd); | ||
| 105 | |||
| 106 | /* | ||
| 107 | * Clear any PowerSaveing Settings | ||
| 108 | */ | ||
| 109 | pci_enable_wake(pdev, PCI_D3hot, 0); | ||
| 110 | pci_enable_wake(pdev, PCI_D3cold, 0); | ||
| 111 | |||
| 112 | /* | ||
| 113 | * Mask some pcie error bits | ||
| 114 | */ | ||
| 115 | AT_READ_REG(hw, REG_PCIE_UC_SEVERITY, &data); | ||
| 116 | data &= ~PCIE_UC_SERVRITY_DLP; | ||
| 117 | data &= ~PCIE_UC_SERVRITY_FCP; | ||
| 118 | AT_WRITE_REG(hw, REG_PCIE_UC_SEVERITY, data); | ||
| 119 | |||
| 120 | if (flag & ATL1C_PCIE_L0S_L1_DISABLE) | ||
| 121 | atl1c_disable_l0s_l1(hw); | ||
| 122 | if (flag & ATL1C_PCIE_PHY_RESET) | ||
| 123 | AT_WRITE_REG(hw, REG_GPHY_CTRL, GPHY_CTRL_DEFAULT); | ||
| 124 | else | ||
| 125 | AT_WRITE_REG(hw, REG_GPHY_CTRL, | ||
| 126 | GPHY_CTRL_DEFAULT | GPHY_CTRL_EXT_RESET); | ||
| 127 | |||
| 128 | msleep(1); | ||
| 129 | } | ||
| 130 | |||
| 131 | /* | ||
| 132 | * atl1c_irq_enable - Enable default interrupt generation settings | ||
| 133 | * @adapter: board private structure | ||
| 134 | */ | ||
| 135 | static inline void atl1c_irq_enable(struct atl1c_adapter *adapter) | ||
| 136 | { | ||
| 137 | if (likely(atomic_dec_and_test(&adapter->irq_sem))) { | ||
| 138 | AT_WRITE_REG(&adapter->hw, REG_ISR, 0x7FFFFFFF); | ||
| 139 | AT_WRITE_REG(&adapter->hw, REG_IMR, adapter->hw.intr_mask); | ||
| 140 | AT_WRITE_FLUSH(&adapter->hw); | ||
| 141 | } | ||
| 142 | } | ||
| 143 | |||
| 144 | /* | ||
| 145 | * atl1c_irq_disable - Mask off interrupt generation on the NIC | ||
| 146 | * @adapter: board private structure | ||
| 147 | */ | ||
| 148 | static inline void atl1c_irq_disable(struct atl1c_adapter *adapter) | ||
| 149 | { | ||
| 150 | atomic_inc(&adapter->irq_sem); | ||
| 151 | AT_WRITE_REG(&adapter->hw, REG_IMR, 0); | ||
| 152 | AT_WRITE_FLUSH(&adapter->hw); | ||
| 153 | synchronize_irq(adapter->pdev->irq); | ||
| 154 | } | ||
| 155 | |||
| 156 | /* | ||
| 157 | * atl1c_irq_reset - reset interrupt confiure on the NIC | ||
| 158 | * @adapter: board private structure | ||
| 159 | */ | ||
| 160 | static inline void atl1c_irq_reset(struct atl1c_adapter *adapter) | ||
| 161 | { | ||
| 162 | atomic_set(&adapter->irq_sem, 1); | ||
| 163 | atl1c_irq_enable(adapter); | ||
| 164 | } | ||
| 165 | |||
| 166 | /* | ||
| 167 | * atl1c_phy_config - Timer Call-back | ||
| 168 | * @data: pointer to netdev cast into an unsigned long | ||
| 169 | */ | ||
| 170 | static void atl1c_phy_config(unsigned long data) | ||
| 171 | { | ||
| 172 | struct atl1c_adapter *adapter = (struct atl1c_adapter *) data; | ||
| 173 | struct atl1c_hw *hw = &adapter->hw; | ||
| 174 | unsigned long flags; | ||
| 175 | |||
| 176 | spin_lock_irqsave(&adapter->mdio_lock, flags); | ||
| 177 | atl1c_restart_autoneg(hw); | ||
| 178 | spin_unlock_irqrestore(&adapter->mdio_lock, flags); | ||
| 179 | } | ||
| 180 | |||
| 181 | void atl1c_reinit_locked(struct atl1c_adapter *adapter) | ||
| 182 | { | ||
| 183 | |||
| 184 | WARN_ON(in_interrupt()); | ||
| 185 | atl1c_down(adapter); | ||
| 186 | atl1c_up(adapter); | ||
| 187 | clear_bit(__AT_RESETTING, &adapter->flags); | ||
| 188 | } | ||
| 189 | |||
| 190 | static void atl1c_reset_task(struct work_struct *work) | ||
| 191 | { | ||
| 192 | struct atl1c_adapter *adapter; | ||
| 193 | struct net_device *netdev; | ||
| 194 | |||
| 195 | adapter = container_of(work, struct atl1c_adapter, reset_task); | ||
| 196 | netdev = adapter->netdev; | ||
| 197 | |||
| 198 | netif_device_detach(netdev); | ||
| 199 | atl1c_down(adapter); | ||
| 200 | atl1c_up(adapter); | ||
| 201 | netif_device_attach(netdev); | ||
| 202 | } | ||
| 203 | |||
| 204 | static void atl1c_check_link_status(struct atl1c_adapter *adapter) | ||
| 205 | { | ||
| 206 | struct atl1c_hw *hw = &adapter->hw; | ||
| 207 | struct net_device *netdev = adapter->netdev; | ||
| 208 | struct pci_dev *pdev = adapter->pdev; | ||
| 209 | int err; | ||
| 210 | unsigned long flags; | ||
| 211 | u16 speed, duplex, phy_data; | ||
| 212 | |||
| 213 | spin_lock_irqsave(&adapter->mdio_lock, flags); | ||
| 214 | /* MII_BMSR must read twise */ | ||
| 215 | atl1c_read_phy_reg(hw, MII_BMSR, &phy_data); | ||
| 216 | atl1c_read_phy_reg(hw, MII_BMSR, &phy_data); | ||
| 217 | spin_unlock_irqrestore(&adapter->mdio_lock, flags); | ||
| 218 | |||
| 219 | if ((phy_data & BMSR_LSTATUS) == 0) { | ||
| 220 | /* link down */ | ||
| 221 | if (netif_carrier_ok(netdev)) { | ||
| 222 | hw->hibernate = true; | ||
| 223 | atl1c_set_aspm(hw, false); | ||
| 224 | if (atl1c_stop_mac(hw) != 0) | ||
| 225 | if (netif_msg_hw(adapter)) | ||
| 226 | dev_warn(&pdev->dev, | ||
| 227 | "stop mac failed\n"); | ||
| 228 | } | ||
| 229 | netif_carrier_off(netdev); | ||
| 230 | } else { | ||
| 231 | /* Link Up */ | ||
| 232 | hw->hibernate = false; | ||
| 233 | spin_lock_irqsave(&adapter->mdio_lock, flags); | ||
| 234 | err = atl1c_get_speed_and_duplex(hw, &speed, &duplex); | ||
| 235 | spin_unlock_irqrestore(&adapter->mdio_lock, flags); | ||
| 236 | if (unlikely(err)) | ||
| 237 | return; | ||
| 238 | /* link result is our setting */ | ||
| 239 | if (adapter->link_speed != speed || | ||
| 240 | adapter->link_duplex != duplex) { | ||
| 241 | adapter->link_speed = speed; | ||
| 242 | adapter->link_duplex = duplex; | ||
| 243 | atl1c_enable_tx_ctrl(hw); | ||
| 244 | atl1c_enable_rx_ctrl(hw); | ||
| 245 | atl1c_setup_mac_ctrl(adapter); | ||
| 246 | atl1c_set_aspm(hw, true); | ||
| 247 | if (netif_msg_link(adapter)) | ||
| 248 | dev_info(&pdev->dev, | ||
| 249 | "%s: %s NIC Link is Up<%d Mbps %s>\n", | ||
| 250 | atl1c_driver_name, netdev->name, | ||
| 251 | adapter->link_speed, | ||
| 252 | adapter->link_duplex == FULL_DUPLEX ? | ||
| 253 | "Full Duplex" : "Half Duplex"); | ||
| 254 | } | ||
| 255 | if (!netif_carrier_ok(netdev)) | ||
| 256 | netif_carrier_on(netdev); | ||
| 257 | } | ||
| 258 | } | ||
| 259 | |||
| 260 | /* | ||
| 261 | * atl1c_link_chg_task - deal with link change event Out of interrupt context | ||
| 262 | * @netdev: network interface device structure | ||
| 263 | */ | ||
| 264 | static void atl1c_link_chg_task(struct work_struct *work) | ||
| 265 | { | ||
| 266 | struct atl1c_adapter *adapter; | ||
| 267 | |||
| 268 | adapter = container_of(work, struct atl1c_adapter, link_chg_task); | ||
| 269 | atl1c_check_link_status(adapter); | ||
| 270 | } | ||
| 271 | |||
| 272 | static void atl1c_link_chg_event(struct atl1c_adapter *adapter) | ||
| 273 | { | ||
| 274 | struct net_device *netdev = adapter->netdev; | ||
| 275 | struct pci_dev *pdev = adapter->pdev; | ||
| 276 | u16 phy_data; | ||
| 277 | u16 link_up; | ||
| 278 | |||
| 279 | spin_lock(&adapter->mdio_lock); | ||
| 280 | atl1c_read_phy_reg(&adapter->hw, MII_BMSR, &phy_data); | ||
| 281 | atl1c_read_phy_reg(&adapter->hw, MII_BMSR, &phy_data); | ||
| 282 | spin_unlock(&adapter->mdio_lock); | ||
| 283 | link_up = phy_data & BMSR_LSTATUS; | ||
| 284 | /* notify upper layer link down ASAP */ | ||
| 285 | if (!link_up) { | ||
| 286 | if (netif_carrier_ok(netdev)) { | ||
| 287 | /* old link state: Up */ | ||
| 288 | netif_carrier_off(netdev); | ||
| 289 | if (netif_msg_link(adapter)) | ||
| 290 | dev_info(&pdev->dev, | ||
| 291 | "%s: %s NIC Link is Down\n", | ||
| 292 | atl1c_driver_name, netdev->name); | ||
| 293 | adapter->link_speed = SPEED_0; | ||
| 294 | } | ||
| 295 | } | ||
| 296 | schedule_work(&adapter->link_chg_task); | ||
| 297 | } | ||
| 298 | |||
| 299 | static void atl1c_del_timer(struct atl1c_adapter *adapter) | ||
| 300 | { | ||
| 301 | del_timer_sync(&adapter->phy_config_timer); | ||
| 302 | } | ||
| 303 | |||
| 304 | static void atl1c_cancel_work(struct atl1c_adapter *adapter) | ||
| 305 | { | ||
| 306 | cancel_work_sync(&adapter->reset_task); | ||
| 307 | cancel_work_sync(&adapter->link_chg_task); | ||
| 308 | } | ||
| 309 | |||
| 310 | /* | ||
| 311 | * atl1c_tx_timeout - Respond to a Tx Hang | ||
| 312 | * @netdev: network interface device structure | ||
| 313 | */ | ||
| 314 | static void atl1c_tx_timeout(struct net_device *netdev) | ||
| 315 | { | ||
| 316 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 317 | |||
| 318 | /* Do the reset outside of interrupt context */ | ||
| 319 | schedule_work(&adapter->reset_task); | ||
| 320 | } | ||
| 321 | |||
| 322 | /* | ||
| 323 | * atl1c_set_multi - Multicast and Promiscuous mode set | ||
| 324 | * @netdev: network interface device structure | ||
| 325 | * | ||
| 326 | * The set_multi entry point is called whenever the multicast address | ||
| 327 | * list or the network interface flags are updated. This routine is | ||
| 328 | * responsible for configuring the hardware for proper multicast, | ||
| 329 | * promiscuous mode, and all-multi behavior. | ||
| 330 | */ | ||
| 331 | static void atl1c_set_multi(struct net_device *netdev) | ||
| 332 | { | ||
| 333 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 334 | struct atl1c_hw *hw = &adapter->hw; | ||
| 335 | struct dev_mc_list *mc_ptr; | ||
| 336 | u32 mac_ctrl_data; | ||
| 337 | u32 hash_value; | ||
| 338 | |||
| 339 | /* Check for Promiscuous and All Multicast modes */ | ||
| 340 | AT_READ_REG(hw, REG_MAC_CTRL, &mac_ctrl_data); | ||
| 341 | |||
| 342 | if (netdev->flags & IFF_PROMISC) { | ||
| 343 | mac_ctrl_data |= MAC_CTRL_PROMIS_EN; | ||
| 344 | } else if (netdev->flags & IFF_ALLMULTI) { | ||
| 345 | mac_ctrl_data |= MAC_CTRL_MC_ALL_EN; | ||
| 346 | mac_ctrl_data &= ~MAC_CTRL_PROMIS_EN; | ||
| 347 | } else { | ||
| 348 | mac_ctrl_data &= ~(MAC_CTRL_PROMIS_EN | MAC_CTRL_MC_ALL_EN); | ||
| 349 | } | ||
| 350 | |||
| 351 | AT_WRITE_REG(hw, REG_MAC_CTRL, mac_ctrl_data); | ||
| 352 | |||
| 353 | /* clear the old settings from the multicast hash table */ | ||
| 354 | AT_WRITE_REG(hw, REG_RX_HASH_TABLE, 0); | ||
| 355 | AT_WRITE_REG_ARRAY(hw, REG_RX_HASH_TABLE, 1, 0); | ||
| 356 | |||
| 357 | /* comoute mc addresses' hash value ,and put it into hash table */ | ||
| 358 | for (mc_ptr = netdev->mc_list; mc_ptr; mc_ptr = mc_ptr->next) { | ||
| 359 | hash_value = atl1c_hash_mc_addr(hw, mc_ptr->dmi_addr); | ||
| 360 | atl1c_hash_set(hw, hash_value); | ||
| 361 | } | ||
| 362 | } | ||
| 363 | |||
| 364 | static void atl1c_vlan_rx_register(struct net_device *netdev, | ||
| 365 | struct vlan_group *grp) | ||
| 366 | { | ||
| 367 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 368 | struct pci_dev *pdev = adapter->pdev; | ||
| 369 | u32 mac_ctrl_data = 0; | ||
| 370 | |||
| 371 | if (netif_msg_pktdata(adapter)) | ||
| 372 | dev_dbg(&pdev->dev, "atl1c_vlan_rx_register\n"); | ||
| 373 | |||
| 374 | atl1c_irq_disable(adapter); | ||
| 375 | |||
| 376 | adapter->vlgrp = grp; | ||
| 377 | AT_READ_REG(&adapter->hw, REG_MAC_CTRL, &mac_ctrl_data); | ||
| 378 | |||
| 379 | if (grp) { | ||
| 380 | /* enable VLAN tag insert/strip */ | ||
| 381 | mac_ctrl_data |= MAC_CTRL_RMV_VLAN; | ||
| 382 | } else { | ||
| 383 | /* disable VLAN tag insert/strip */ | ||
| 384 | mac_ctrl_data &= ~MAC_CTRL_RMV_VLAN; | ||
| 385 | } | ||
| 386 | |||
| 387 | AT_WRITE_REG(&adapter->hw, REG_MAC_CTRL, mac_ctrl_data); | ||
| 388 | atl1c_irq_enable(adapter); | ||
| 389 | } | ||
| 390 | |||
| 391 | static void atl1c_restore_vlan(struct atl1c_adapter *adapter) | ||
| 392 | { | ||
| 393 | struct pci_dev *pdev = adapter->pdev; | ||
| 394 | |||
| 395 | if (netif_msg_pktdata(adapter)) | ||
| 396 | dev_dbg(&pdev->dev, "atl1c_restore_vlan !"); | ||
| 397 | atl1c_vlan_rx_register(adapter->netdev, adapter->vlgrp); | ||
| 398 | } | ||
| 399 | /* | ||
| 400 | * atl1c_set_mac - Change the Ethernet Address of the NIC | ||
| 401 | * @netdev: network interface device structure | ||
| 402 | * @p: pointer to an address structure | ||
| 403 | * | ||
| 404 | * Returns 0 on success, negative on failure | ||
| 405 | */ | ||
| 406 | static int atl1c_set_mac_addr(struct net_device *netdev, void *p) | ||
| 407 | { | ||
| 408 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 409 | struct sockaddr *addr = p; | ||
| 410 | |||
| 411 | if (!is_valid_ether_addr(addr->sa_data)) | ||
| 412 | return -EADDRNOTAVAIL; | ||
| 413 | |||
| 414 | if (netif_running(netdev)) | ||
| 415 | return -EBUSY; | ||
| 416 | |||
| 417 | memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); | ||
| 418 | memcpy(adapter->hw.mac_addr, addr->sa_data, netdev->addr_len); | ||
| 419 | |||
| 420 | atl1c_hw_set_mac_addr(&adapter->hw); | ||
| 421 | |||
| 422 | return 0; | ||
| 423 | } | ||
| 424 | |||
| 425 | static void atl1c_set_rxbufsize(struct atl1c_adapter *adapter, | ||
| 426 | struct net_device *dev) | ||
| 427 | { | ||
| 428 | int mtu = dev->mtu; | ||
| 429 | |||
| 430 | adapter->rx_buffer_len = mtu > AT_RX_BUF_SIZE ? | ||
| 431 | roundup(mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN, 8) : AT_RX_BUF_SIZE; | ||
| 432 | } | ||
| 433 | /* | ||
| 434 | * atl1c_change_mtu - Change the Maximum Transfer Unit | ||
| 435 | * @netdev: network interface device structure | ||
| 436 | * @new_mtu: new value for maximum frame size | ||
| 437 | * | ||
| 438 | * Returns 0 on success, negative on failure | ||
| 439 | */ | ||
| 440 | static int atl1c_change_mtu(struct net_device *netdev, int new_mtu) | ||
| 441 | { | ||
| 442 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 443 | int old_mtu = netdev->mtu; | ||
| 444 | int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN; | ||
| 445 | |||
| 446 | if ((max_frame < ETH_ZLEN + ETH_FCS_LEN) || | ||
| 447 | (max_frame > MAX_JUMBO_FRAME_SIZE)) { | ||
| 448 | if (netif_msg_link(adapter)) | ||
| 449 | dev_warn(&adapter->pdev->dev, "invalid MTU setting\n"); | ||
| 450 | return -EINVAL; | ||
| 451 | } | ||
| 452 | /* set MTU */ | ||
| 453 | if (old_mtu != new_mtu && netif_running(netdev)) { | ||
| 454 | while (test_and_set_bit(__AT_RESETTING, &adapter->flags)) | ||
| 455 | msleep(1); | ||
| 456 | netdev->mtu = new_mtu; | ||
| 457 | adapter->hw.max_frame_size = new_mtu; | ||
| 458 | atl1c_set_rxbufsize(adapter, netdev); | ||
| 459 | atl1c_down(adapter); | ||
| 460 | atl1c_up(adapter); | ||
| 461 | clear_bit(__AT_RESETTING, &adapter->flags); | ||
| 462 | if (adapter->hw.ctrl_flags & ATL1C_FPGA_VERSION) { | ||
| 463 | u32 phy_data; | ||
| 464 | |||
| 465 | AT_READ_REG(&adapter->hw, 0x1414, &phy_data); | ||
| 466 | phy_data |= 0x10000000; | ||
| 467 | AT_WRITE_REG(&adapter->hw, 0x1414, phy_data); | ||
| 468 | } | ||
| 469 | |||
| 470 | } | ||
| 471 | return 0; | ||
| 472 | } | ||
| 473 | |||
| 474 | /* | ||
| 475 | * caller should hold mdio_lock | ||
| 476 | */ | ||
| 477 | static int atl1c_mdio_read(struct net_device *netdev, int phy_id, int reg_num) | ||
| 478 | { | ||
| 479 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 480 | u16 result; | ||
| 481 | |||
| 482 | atl1c_read_phy_reg(&adapter->hw, reg_num & MDIO_REG_ADDR_MASK, &result); | ||
| 483 | return result; | ||
| 484 | } | ||
| 485 | |||
| 486 | static void atl1c_mdio_write(struct net_device *netdev, int phy_id, | ||
| 487 | int reg_num, int val) | ||
| 488 | { | ||
| 489 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 490 | |||
| 491 | atl1c_write_phy_reg(&adapter->hw, reg_num & MDIO_REG_ADDR_MASK, val); | ||
| 492 | } | ||
| 493 | |||
| 494 | /* | ||
| 495 | * atl1c_mii_ioctl - | ||
| 496 | * @netdev: | ||
| 497 | * @ifreq: | ||
| 498 | * @cmd: | ||
| 499 | */ | ||
| 500 | static int atl1c_mii_ioctl(struct net_device *netdev, | ||
| 501 | struct ifreq *ifr, int cmd) | ||
| 502 | { | ||
| 503 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 504 | struct pci_dev *pdev = adapter->pdev; | ||
| 505 | struct mii_ioctl_data *data = if_mii(ifr); | ||
| 506 | unsigned long flags; | ||
| 507 | int retval = 0; | ||
| 508 | |||
| 509 | if (!netif_running(netdev)) | ||
| 510 | return -EINVAL; | ||
| 511 | |||
| 512 | spin_lock_irqsave(&adapter->mdio_lock, flags); | ||
| 513 | switch (cmd) { | ||
| 514 | case SIOCGMIIPHY: | ||
| 515 | data->phy_id = 0; | ||
| 516 | break; | ||
| 517 | |||
| 518 | case SIOCGMIIREG: | ||
| 519 | if (!capable(CAP_NET_ADMIN)) { | ||
| 520 | retval = -EPERM; | ||
| 521 | goto out; | ||
| 522 | } | ||
| 523 | if (atl1c_read_phy_reg(&adapter->hw, data->reg_num & 0x1F, | ||
| 524 | &data->val_out)) { | ||
| 525 | retval = -EIO; | ||
| 526 | goto out; | ||
| 527 | } | ||
| 528 | break; | ||
| 529 | |||
| 530 | case SIOCSMIIREG: | ||
| 531 | if (!capable(CAP_NET_ADMIN)) { | ||
| 532 | retval = -EPERM; | ||
| 533 | goto out; | ||
| 534 | } | ||
| 535 | if (data->reg_num & ~(0x1F)) { | ||
| 536 | retval = -EFAULT; | ||
| 537 | goto out; | ||
| 538 | } | ||
| 539 | |||
| 540 | dev_dbg(&pdev->dev, "<atl1c_mii_ioctl> write %x %x", | ||
| 541 | data->reg_num, data->val_in); | ||
| 542 | if (atl1c_write_phy_reg(&adapter->hw, | ||
| 543 | data->reg_num, data->val_in)) { | ||
| 544 | retval = -EIO; | ||
| 545 | goto out; | ||
| 546 | } | ||
| 547 | break; | ||
| 548 | |||
| 549 | default: | ||
| 550 | retval = -EOPNOTSUPP; | ||
| 551 | break; | ||
| 552 | } | ||
| 553 | out: | ||
| 554 | spin_unlock_irqrestore(&adapter->mdio_lock, flags); | ||
| 555 | return retval; | ||
| 556 | } | ||
| 557 | |||
| 558 | /* | ||
| 559 | * atl1c_ioctl - | ||
| 560 | * @netdev: | ||
| 561 | * @ifreq: | ||
| 562 | * @cmd: | ||
| 563 | */ | ||
| 564 | static int atl1c_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) | ||
| 565 | { | ||
| 566 | switch (cmd) { | ||
| 567 | case SIOCGMIIPHY: | ||
| 568 | case SIOCGMIIREG: | ||
| 569 | case SIOCSMIIREG: | ||
| 570 | return atl1c_mii_ioctl(netdev, ifr, cmd); | ||
| 571 | default: | ||
| 572 | return -EOPNOTSUPP; | ||
| 573 | } | ||
| 574 | } | ||
| 575 | |||
| 576 | /* | ||
| 577 | * atl1c_alloc_queues - Allocate memory for all rings | ||
| 578 | * @adapter: board private structure to initialize | ||
| 579 | * | ||
| 580 | */ | ||
| 581 | static int __devinit atl1c_alloc_queues(struct atl1c_adapter *adapter) | ||
| 582 | { | ||
| 583 | return 0; | ||
| 584 | } | ||
| 585 | |||
| 586 | static void atl1c_set_mac_type(struct atl1c_hw *hw) | ||
| 587 | { | ||
| 588 | switch (hw->device_id) { | ||
| 589 | case PCI_DEVICE_ID_ATTANSIC_L2C: | ||
| 590 | hw->nic_type = athr_l2c; | ||
| 591 | break; | ||
| 592 | |||
| 593 | case PCI_DEVICE_ID_ATTANSIC_L1C: | ||
| 594 | hw->nic_type = athr_l1c; | ||
| 595 | break; | ||
| 596 | |||
| 597 | default: | ||
| 598 | break; | ||
| 599 | } | ||
| 600 | } | ||
| 601 | |||
| 602 | static int atl1c_setup_mac_funcs(struct atl1c_hw *hw) | ||
| 603 | { | ||
| 604 | u32 phy_status_data; | ||
| 605 | u32 link_ctrl_data; | ||
| 606 | |||
| 607 | atl1c_set_mac_type(hw); | ||
| 608 | AT_READ_REG(hw, REG_PHY_STATUS, &phy_status_data); | ||
| 609 | AT_READ_REG(hw, REG_LINK_CTRL, &link_ctrl_data); | ||
| 610 | |||
| 611 | hw->ctrl_flags = ATL1C_INTR_CLEAR_ON_READ | | ||
| 612 | ATL1C_INTR_MODRT_ENABLE | | ||
| 613 | ATL1C_RX_IPV6_CHKSUM | | ||
| 614 | ATL1C_TXQ_MODE_ENHANCE; | ||
| 615 | if (link_ctrl_data & LINK_CTRL_L0S_EN) | ||
| 616 | hw->ctrl_flags |= ATL1C_ASPM_L0S_SUPPORT; | ||
| 617 | if (link_ctrl_data & LINK_CTRL_L1_EN) | ||
| 618 | hw->ctrl_flags |= ATL1C_ASPM_L1_SUPPORT; | ||
| 619 | |||
| 620 | if (hw->nic_type == athr_l1c) { | ||
| 621 | hw->ctrl_flags |= ATL1C_ASPM_CTRL_MON; | ||
| 622 | hw->ctrl_flags |= ATL1C_LINK_CAP_1000M; | ||
| 623 | } | ||
| 624 | return 0; | ||
| 625 | } | ||
| 626 | /* | ||
| 627 | * atl1c_sw_init - Initialize general software structures (struct atl1c_adapter) | ||
| 628 | * @adapter: board private structure to initialize | ||
| 629 | * | ||
| 630 | * atl1c_sw_init initializes the Adapter private data structure. | ||
| 631 | * Fields are initialized based on PCI device information and | ||
| 632 | * OS network device settings (MTU size). | ||
| 633 | */ | ||
| 634 | static int __devinit atl1c_sw_init(struct atl1c_adapter *adapter) | ||
| 635 | { | ||
| 636 | struct atl1c_hw *hw = &adapter->hw; | ||
| 637 | struct pci_dev *pdev = adapter->pdev; | ||
| 638 | |||
| 639 | adapter->wol = 0; | ||
| 640 | adapter->link_speed = SPEED_0; | ||
| 641 | adapter->link_duplex = FULL_DUPLEX; | ||
| 642 | adapter->num_rx_queues = AT_DEF_RECEIVE_QUEUE; | ||
| 643 | adapter->tpd_ring[0].count = 1024; | ||
| 644 | adapter->rfd_ring[0].count = 512; | ||
| 645 | |||
| 646 | hw->vendor_id = pdev->vendor; | ||
| 647 | hw->device_id = pdev->device; | ||
| 648 | hw->subsystem_vendor_id = pdev->subsystem_vendor; | ||
| 649 | hw->subsystem_id = pdev->subsystem_device; | ||
| 650 | |||
| 651 | /* before link up, we assume hibernate is true */ | ||
| 652 | hw->hibernate = true; | ||
| 653 | hw->media_type = MEDIA_TYPE_AUTO_SENSOR; | ||
| 654 | if (atl1c_setup_mac_funcs(hw) != 0) { | ||
| 655 | dev_err(&pdev->dev, "set mac function pointers failed\n"); | ||
| 656 | return -1; | ||
| 657 | } | ||
| 658 | hw->intr_mask = IMR_NORMAL_MASK; | ||
| 659 | hw->phy_configured = false; | ||
| 660 | hw->preamble_len = 7; | ||
| 661 | hw->max_frame_size = adapter->netdev->mtu; | ||
| 662 | if (adapter->num_rx_queues < 2) { | ||
| 663 | hw->rss_type = atl1c_rss_disable; | ||
| 664 | hw->rss_mode = atl1c_rss_mode_disable; | ||
| 665 | } else { | ||
| 666 | hw->rss_type = atl1c_rss_ipv4; | ||
| 667 | hw->rss_mode = atl1c_rss_mul_que_mul_int; | ||
| 668 | hw->rss_hash_bits = 16; | ||
| 669 | } | ||
| 670 | hw->autoneg_advertised = ADVERTISED_Autoneg; | ||
| 671 | hw->indirect_tab = 0xE4E4E4E4; | ||
| 672 | hw->base_cpu = 0; | ||
| 673 | |||
| 674 | hw->ict = 50000; /* 100ms */ | ||
| 675 | hw->smb_timer = 200000; /* 400ms */ | ||
| 676 | hw->cmb_tpd = 4; | ||
| 677 | hw->cmb_tx_timer = 1; /* 2 us */ | ||
| 678 | hw->rx_imt = 200; | ||
| 679 | hw->tx_imt = 1000; | ||
| 680 | |||
| 681 | hw->tpd_burst = 5; | ||
| 682 | hw->rfd_burst = 8; | ||
| 683 | hw->dma_order = atl1c_dma_ord_out; | ||
| 684 | hw->dmar_block = atl1c_dma_req_1024; | ||
| 685 | hw->dmaw_block = atl1c_dma_req_1024; | ||
| 686 | hw->dmar_dly_cnt = 15; | ||
| 687 | hw->dmaw_dly_cnt = 4; | ||
| 688 | |||
| 689 | if (atl1c_alloc_queues(adapter)) { | ||
| 690 | dev_err(&pdev->dev, "Unable to allocate memory for queues\n"); | ||
| 691 | return -ENOMEM; | ||
| 692 | } | ||
| 693 | /* TODO */ | ||
| 694 | atl1c_set_rxbufsize(adapter, adapter->netdev); | ||
| 695 | atomic_set(&adapter->irq_sem, 1); | ||
| 696 | spin_lock_init(&adapter->mdio_lock); | ||
| 697 | spin_lock_init(&adapter->tx_lock); | ||
| 698 | set_bit(__AT_DOWN, &adapter->flags); | ||
| 699 | |||
| 700 | return 0; | ||
| 701 | } | ||
| 702 | |||
| 703 | /* | ||
| 704 | * atl1c_clean_tx_ring - Free Tx-skb | ||
| 705 | * @adapter: board private structure | ||
| 706 | */ | ||
| 707 | static void atl1c_clean_tx_ring(struct atl1c_adapter *adapter, | ||
| 708 | enum atl1c_trans_queue type) | ||
| 709 | { | ||
| 710 | struct atl1c_tpd_ring *tpd_ring = &adapter->tpd_ring[type]; | ||
| 711 | struct atl1c_buffer *buffer_info; | ||
| 712 | struct pci_dev *pdev = adapter->pdev; | ||
| 713 | u16 index, ring_count; | ||
| 714 | |||
| 715 | ring_count = tpd_ring->count; | ||
| 716 | for (index = 0; index < ring_count; index++) { | ||
| 717 | buffer_info = &tpd_ring->buffer_info[index]; | ||
| 718 | if (buffer_info->state == ATL1_BUFFER_FREE) | ||
| 719 | continue; | ||
| 720 | if (buffer_info->dma) | ||
| 721 | pci_unmap_single(pdev, buffer_info->dma, | ||
| 722 | buffer_info->length, | ||
| 723 | PCI_DMA_TODEVICE); | ||
| 724 | if (buffer_info->skb) | ||
| 725 | dev_kfree_skb(buffer_info->skb); | ||
| 726 | buffer_info->dma = 0; | ||
| 727 | buffer_info->skb = NULL; | ||
| 728 | buffer_info->state = ATL1_BUFFER_FREE; | ||
| 729 | } | ||
| 730 | |||
| 731 | /* Zero out Tx-buffers */ | ||
| 732 | memset(tpd_ring->desc, 0, sizeof(struct atl1c_tpd_desc) * | ||
| 733 | ring_count); | ||
| 734 | atomic_set(&tpd_ring->next_to_clean, 0); | ||
| 735 | tpd_ring->next_to_use = 0; | ||
| 736 | } | ||
| 737 | |||
| 738 | /* | ||
| 739 | * atl1c_clean_rx_ring - Free rx-reservation skbs | ||
| 740 | * @adapter: board private structure | ||
| 741 | */ | ||
| 742 | static void atl1c_clean_rx_ring(struct atl1c_adapter *adapter) | ||
| 743 | { | ||
| 744 | struct atl1c_rfd_ring *rfd_ring = adapter->rfd_ring; | ||
| 745 | struct atl1c_rrd_ring *rrd_ring = adapter->rrd_ring; | ||
| 746 | struct atl1c_buffer *buffer_info; | ||
| 747 | struct pci_dev *pdev = adapter->pdev; | ||
| 748 | int i, j; | ||
| 749 | |||
| 750 | for (i = 0; i < adapter->num_rx_queues; i++) { | ||
| 751 | for (j = 0; j < rfd_ring[i].count; j++) { | ||
| 752 | buffer_info = &rfd_ring[i].buffer_info[j]; | ||
| 753 | if (buffer_info->state == ATL1_BUFFER_FREE) | ||
| 754 | continue; | ||
| 755 | if (buffer_info->dma) | ||
| 756 | pci_unmap_single(pdev, buffer_info->dma, | ||
| 757 | buffer_info->length, | ||
| 758 | PCI_DMA_FROMDEVICE); | ||
| 759 | if (buffer_info->skb) | ||
| 760 | dev_kfree_skb(buffer_info->skb); | ||
| 761 | buffer_info->state = ATL1_BUFFER_FREE; | ||
| 762 | buffer_info->skb = NULL; | ||
| 763 | } | ||
| 764 | /* zero out the descriptor ring */ | ||
| 765 | memset(rfd_ring[i].desc, 0, rfd_ring[i].size); | ||
| 766 | rfd_ring[i].next_to_clean = 0; | ||
| 767 | rfd_ring[i].next_to_use = 0; | ||
| 768 | rrd_ring[i].next_to_use = 0; | ||
| 769 | rrd_ring[i].next_to_clean = 0; | ||
| 770 | } | ||
| 771 | } | ||
| 772 | |||
| 773 | /* | ||
| 774 | * Read / Write Ptr Initialize: | ||
| 775 | */ | ||
| 776 | static void atl1c_init_ring_ptrs(struct atl1c_adapter *adapter) | ||
| 777 | { | ||
| 778 | struct atl1c_tpd_ring *tpd_ring = adapter->tpd_ring; | ||
| 779 | struct atl1c_rfd_ring *rfd_ring = adapter->rfd_ring; | ||
| 780 | struct atl1c_rrd_ring *rrd_ring = adapter->rrd_ring; | ||
| 781 | struct atl1c_buffer *buffer_info; | ||
| 782 | int i, j; | ||
| 783 | |||
| 784 | for (i = 0; i < AT_MAX_TRANSMIT_QUEUE; i++) { | ||
| 785 | tpd_ring[i].next_to_use = 0; | ||
| 786 | atomic_set(&tpd_ring[i].next_to_clean, 0); | ||
| 787 | buffer_info = tpd_ring[i].buffer_info; | ||
| 788 | for (j = 0; j < tpd_ring->count; j++) | ||
| 789 | buffer_info[i].state = ATL1_BUFFER_FREE; | ||
| 790 | } | ||
| 791 | for (i = 0; i < adapter->num_rx_queues; i++) { | ||
| 792 | rfd_ring[i].next_to_use = 0; | ||
| 793 | rfd_ring[i].next_to_clean = 0; | ||
| 794 | rrd_ring[i].next_to_use = 0; | ||
| 795 | rrd_ring[i].next_to_clean = 0; | ||
| 796 | for (j = 0; j < rfd_ring[i].count; j++) { | ||
| 797 | buffer_info = &rfd_ring[i].buffer_info[j]; | ||
| 798 | buffer_info->state = ATL1_BUFFER_FREE; | ||
| 799 | } | ||
| 800 | } | ||
| 801 | } | ||
| 802 | |||
| 803 | /* | ||
| 804 | * atl1c_free_ring_resources - Free Tx / RX descriptor Resources | ||
| 805 | * @adapter: board private structure | ||
| 806 | * | ||
| 807 | * Free all transmit software resources | ||
| 808 | */ | ||
| 809 | static void atl1c_free_ring_resources(struct atl1c_adapter *adapter) | ||
| 810 | { | ||
| 811 | struct pci_dev *pdev = adapter->pdev; | ||
| 812 | |||
| 813 | pci_free_consistent(pdev, adapter->ring_header.size, | ||
| 814 | adapter->ring_header.desc, | ||
| 815 | adapter->ring_header.dma); | ||
| 816 | adapter->ring_header.desc = NULL; | ||
| 817 | |||
| 818 | /* Note: just free tdp_ring.buffer_info, | ||
| 819 | * it contain rfd_ring.buffer_info, do not double free */ | ||
| 820 | if (adapter->tpd_ring[0].buffer_info) { | ||
| 821 | kfree(adapter->tpd_ring[0].buffer_info); | ||
| 822 | adapter->tpd_ring[0].buffer_info = NULL; | ||
| 823 | } | ||
| 824 | } | ||
| 825 | |||
| 826 | /* | ||
| 827 | * atl1c_setup_mem_resources - allocate Tx / RX descriptor resources | ||
| 828 | * @adapter: board private structure | ||
| 829 | * | ||
| 830 | * Return 0 on success, negative on failure | ||
| 831 | */ | ||
| 832 | static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter) | ||
| 833 | { | ||
| 834 | struct pci_dev *pdev = adapter->pdev; | ||
| 835 | struct atl1c_tpd_ring *tpd_ring = adapter->tpd_ring; | ||
| 836 | struct atl1c_rfd_ring *rfd_ring = adapter->rfd_ring; | ||
| 837 | struct atl1c_rrd_ring *rrd_ring = adapter->rrd_ring; | ||
| 838 | struct atl1c_ring_header *ring_header = &adapter->ring_header; | ||
| 839 | int num_rx_queues = adapter->num_rx_queues; | ||
| 840 | int size; | ||
| 841 | int i; | ||
| 842 | int count = 0; | ||
| 843 | int rx_desc_count = 0; | ||
| 844 | u32 offset = 0; | ||
| 845 | |||
| 846 | rrd_ring[0].count = rfd_ring[0].count; | ||
| 847 | for (i = 1; i < AT_MAX_TRANSMIT_QUEUE; i++) | ||
| 848 | tpd_ring[i].count = tpd_ring[0].count; | ||
| 849 | |||
| 850 | for (i = 1; i < adapter->num_rx_queues; i++) | ||
| 851 | rfd_ring[i].count = rrd_ring[i].count = rfd_ring[0].count; | ||
| 852 | |||
| 853 | /* 2 tpd queue, one high priority queue, | ||
| 854 | * another normal priority queue */ | ||
| 855 | size = sizeof(struct atl1c_buffer) * (tpd_ring->count * 2 + | ||
| 856 | rfd_ring->count * num_rx_queues); | ||
| 857 | tpd_ring->buffer_info = kzalloc(size, GFP_KERNEL); | ||
| 858 | if (unlikely(!tpd_ring->buffer_info)) { | ||
| 859 | dev_err(&pdev->dev, "kzalloc failed, size = %d\n", | ||
| 860 | size); | ||
| 861 | goto err_nomem; | ||
| 862 | } | ||
| 863 | for (i = 0; i < AT_MAX_TRANSMIT_QUEUE; i++) { | ||
| 864 | tpd_ring[i].buffer_info = | ||
| 865 | (struct atl1c_buffer *) (tpd_ring->buffer_info + count); | ||
| 866 | count += tpd_ring[i].count; | ||
| 867 | } | ||
| 868 | |||
| 869 | for (i = 0; i < num_rx_queues; i++) { | ||
| 870 | rfd_ring[i].buffer_info = | ||
| 871 | (struct atl1c_buffer *) (tpd_ring->buffer_info + count); | ||
| 872 | count += rfd_ring[i].count; | ||
| 873 | rx_desc_count += rfd_ring[i].count; | ||
| 874 | } | ||
| 875 | /* | ||
| 876 | * real ring DMA buffer | ||
| 877 | * each ring/block may need up to 8 bytes for alignment, hence the | ||
| 878 | * additional bytes tacked onto the end. | ||
| 879 | */ | ||
| 880 | ring_header->size = size = | ||
| 881 | sizeof(struct atl1c_tpd_desc) * tpd_ring->count * 2 + | ||
| 882 | sizeof(struct atl1c_rx_free_desc) * rx_desc_count + | ||
| 883 | sizeof(struct atl1c_recv_ret_status) * rx_desc_count + | ||
| 884 | sizeof(struct atl1c_hw_stats) + | ||
| 885 | 8 * 4 + 8 * 2 * num_rx_queues; | ||
| 886 | |||
| 887 | ring_header->desc = pci_alloc_consistent(pdev, ring_header->size, | ||
| 888 | &ring_header->dma); | ||
| 889 | if (unlikely(!ring_header->desc)) { | ||
| 890 | dev_err(&pdev->dev, "pci_alloc_consistend failed\n"); | ||
| 891 | goto err_nomem; | ||
| 892 | } | ||
| 893 | memset(ring_header->desc, 0, ring_header->size); | ||
| 894 | /* init TPD ring */ | ||
| 895 | |||
| 896 | tpd_ring[0].dma = roundup(ring_header->dma, 8); | ||
| 897 | offset = tpd_ring[0].dma - ring_header->dma; | ||
| 898 | for (i = 0; i < AT_MAX_TRANSMIT_QUEUE; i++) { | ||
| 899 | tpd_ring[i].dma = ring_header->dma + offset; | ||
| 900 | tpd_ring[i].desc = (u8 *) ring_header->desc + offset; | ||
| 901 | tpd_ring[i].size = | ||
| 902 | sizeof(struct atl1c_tpd_desc) * tpd_ring[i].count; | ||
| 903 | offset += roundup(tpd_ring[i].size, 8); | ||
| 904 | } | ||
| 905 | /* init RFD ring */ | ||
| 906 | for (i = 0; i < num_rx_queues; i++) { | ||
| 907 | rfd_ring[i].dma = ring_header->dma + offset; | ||
| 908 | rfd_ring[i].desc = (u8 *) ring_header->desc + offset; | ||
| 909 | rfd_ring[i].size = sizeof(struct atl1c_rx_free_desc) * | ||
| 910 | rfd_ring[i].count; | ||
| 911 | offset += roundup(rfd_ring[i].size, 8); | ||
| 912 | } | ||
| 913 | |||
| 914 | /* init RRD ring */ | ||
| 915 | for (i = 0; i < num_rx_queues; i++) { | ||
| 916 | rrd_ring[i].dma = ring_header->dma + offset; | ||
| 917 | rrd_ring[i].desc = (u8 *) ring_header->desc + offset; | ||
| 918 | rrd_ring[i].size = sizeof(struct atl1c_recv_ret_status) * | ||
| 919 | rrd_ring[i].count; | ||
| 920 | offset += roundup(rrd_ring[i].size, 8); | ||
| 921 | } | ||
| 922 | |||
| 923 | adapter->smb.dma = ring_header->dma + offset; | ||
| 924 | adapter->smb.smb = (u8 *)ring_header->desc + offset; | ||
| 925 | return 0; | ||
| 926 | |||
| 927 | err_nomem: | ||
| 928 | kfree(tpd_ring->buffer_info); | ||
| 929 | return -ENOMEM; | ||
| 930 | } | ||
| 931 | |||
| 932 | static void atl1c_configure_des_ring(struct atl1c_adapter *adapter) | ||
| 933 | { | ||
| 934 | struct atl1c_hw *hw = &adapter->hw; | ||
| 935 | struct atl1c_rfd_ring *rfd_ring = (struct atl1c_rfd_ring *) | ||
| 936 | adapter->rfd_ring; | ||
| 937 | struct atl1c_rrd_ring *rrd_ring = (struct atl1c_rrd_ring *) | ||
| 938 | adapter->rrd_ring; | ||
| 939 | struct atl1c_tpd_ring *tpd_ring = (struct atl1c_tpd_ring *) | ||
| 940 | adapter->tpd_ring; | ||
| 941 | struct atl1c_cmb *cmb = (struct atl1c_cmb *) &adapter->cmb; | ||
| 942 | struct atl1c_smb *smb = (struct atl1c_smb *) &adapter->smb; | ||
| 943 | int i; | ||
| 944 | |||
| 945 | /* TPD */ | ||
| 946 | AT_WRITE_REG(hw, REG_TX_BASE_ADDR_HI, | ||
| 947 | (u32)((tpd_ring[atl1c_trans_normal].dma & | ||
| 948 | AT_DMA_HI_ADDR_MASK) >> 32)); | ||
| 949 | /* just enable normal priority TX queue */ | ||
| 950 | AT_WRITE_REG(hw, REG_NTPD_HEAD_ADDR_LO, | ||
| 951 | (u32)(tpd_ring[atl1c_trans_normal].dma & | ||
| 952 | AT_DMA_LO_ADDR_MASK)); | ||
| 953 | AT_WRITE_REG(hw, REG_HTPD_HEAD_ADDR_LO, | ||
| 954 | (u32)(tpd_ring[atl1c_trans_high].dma & | ||
| 955 | AT_DMA_LO_ADDR_MASK)); | ||
| 956 | AT_WRITE_REG(hw, REG_TPD_RING_SIZE, | ||
| 957 | (u32)(tpd_ring[0].count & TPD_RING_SIZE_MASK)); | ||
| 958 | |||
| 959 | |||
| 960 | /* RFD */ | ||
| 961 | AT_WRITE_REG(hw, REG_RX_BASE_ADDR_HI, | ||
| 962 | (u32)((rfd_ring[0].dma & AT_DMA_HI_ADDR_MASK) >> 32)); | ||
| 963 | for (i = 0; i < adapter->num_rx_queues; i++) | ||
| 964 | AT_WRITE_REG(hw, atl1c_rfd_addr_lo_regs[i], | ||
| 965 | (u32)(rfd_ring[i].dma & AT_DMA_LO_ADDR_MASK)); | ||
| 966 | |||
| 967 | AT_WRITE_REG(hw, REG_RFD_RING_SIZE, | ||
| 968 | rfd_ring[0].count & RFD_RING_SIZE_MASK); | ||
| 969 | AT_WRITE_REG(hw, REG_RX_BUF_SIZE, | ||
| 970 | adapter->rx_buffer_len & RX_BUF_SIZE_MASK); | ||
| 971 | |||
| 972 | /* RRD */ | ||
| 973 | for (i = 0; i < adapter->num_rx_queues; i++) | ||
| 974 | AT_WRITE_REG(hw, atl1c_rrd_addr_lo_regs[i], | ||
| 975 | (u32)(rrd_ring[i].dma & AT_DMA_LO_ADDR_MASK)); | ||
| 976 | AT_WRITE_REG(hw, REG_RRD_RING_SIZE, | ||
| 977 | (rrd_ring[0].count & RRD_RING_SIZE_MASK)); | ||
| 978 | |||
| 979 | /* CMB */ | ||
| 980 | AT_WRITE_REG(hw, REG_CMB_BASE_ADDR_LO, cmb->dma & AT_DMA_LO_ADDR_MASK); | ||
| 981 | |||
| 982 | /* SMB */ | ||
| 983 | AT_WRITE_REG(hw, REG_SMB_BASE_ADDR_HI, | ||
| 984 | (u32)((smb->dma & AT_DMA_HI_ADDR_MASK) >> 32)); | ||
| 985 | AT_WRITE_REG(hw, REG_SMB_BASE_ADDR_LO, | ||
| 986 | (u32)(smb->dma & AT_DMA_LO_ADDR_MASK)); | ||
| 987 | /* Load all of base address above */ | ||
| 988 | AT_WRITE_REG(hw, REG_LOAD_PTR, 1); | ||
| 989 | } | ||
| 990 | |||
| 991 | static void atl1c_configure_tx(struct atl1c_adapter *adapter) | ||
| 992 | { | ||
| 993 | struct atl1c_hw *hw = &adapter->hw; | ||
| 994 | u32 dev_ctrl_data; | ||
| 995 | u32 max_pay_load; | ||
| 996 | u16 tx_offload_thresh; | ||
| 997 | u32 txq_ctrl_data; | ||
| 998 | u32 extra_size = 0; /* Jumbo frame threshold in QWORD unit */ | ||
| 999 | |||
| 1000 | extra_size = ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN; | ||
| 1001 | tx_offload_thresh = MAX_TX_OFFLOAD_THRESH; | ||
| 1002 | AT_WRITE_REG(hw, REG_TX_TSO_OFFLOAD_THRESH, | ||
| 1003 | (tx_offload_thresh >> 3) & TX_TSO_OFFLOAD_THRESH_MASK); | ||
| 1004 | AT_READ_REG(hw, REG_DEVICE_CTRL, &dev_ctrl_data); | ||
| 1005 | max_pay_load = (dev_ctrl_data >> DEVICE_CTRL_MAX_PAYLOAD_SHIFT) & | ||
| 1006 | DEVICE_CTRL_MAX_PAYLOAD_MASK; | ||
| 1007 | hw->dmaw_block = min(max_pay_load, hw->dmaw_block); | ||
| 1008 | max_pay_load = (dev_ctrl_data >> DEVICE_CTRL_MAX_RREQ_SZ_SHIFT) & | ||
| 1009 | DEVICE_CTRL_MAX_RREQ_SZ_MASK; | ||
| 1010 | hw->dmar_block = min(max_pay_load, hw->dmar_block); | ||
| 1011 | |||
| 1012 | txq_ctrl_data = (hw->tpd_burst & TXQ_NUM_TPD_BURST_MASK) << | ||
| 1013 | TXQ_NUM_TPD_BURST_SHIFT; | ||
| 1014 | if (hw->ctrl_flags & ATL1C_TXQ_MODE_ENHANCE) | ||
| 1015 | txq_ctrl_data |= TXQ_CTRL_ENH_MODE; | ||
| 1016 | txq_ctrl_data |= (atl1c_pay_load_size[hw->dmar_block] & | ||
| 1017 | TXQ_TXF_BURST_NUM_MASK) << TXQ_TXF_BURST_NUM_SHIFT; | ||
| 1018 | |||
| 1019 | AT_WRITE_REG(hw, REG_TXQ_CTRL, txq_ctrl_data); | ||
| 1020 | } | ||
| 1021 | |||
| 1022 | static void atl1c_configure_rx(struct atl1c_adapter *adapter) | ||
| 1023 | { | ||
| 1024 | struct atl1c_hw *hw = &adapter->hw; | ||
| 1025 | u32 rxq_ctrl_data; | ||
| 1026 | |||
| 1027 | rxq_ctrl_data = (hw->rfd_burst & RXQ_RFD_BURST_NUM_MASK) << | ||
| 1028 | RXQ_RFD_BURST_NUM_SHIFT; | ||
| 1029 | |||
| 1030 | if (hw->ctrl_flags & ATL1C_RX_IPV6_CHKSUM) | ||
| 1031 | rxq_ctrl_data |= IPV6_CHKSUM_CTRL_EN; | ||
| 1032 | if (hw->rss_type == atl1c_rss_ipv4) | ||
| 1033 | rxq_ctrl_data |= RSS_HASH_IPV4; | ||
| 1034 | if (hw->rss_type == atl1c_rss_ipv4_tcp) | ||
| 1035 | rxq_ctrl_data |= RSS_HASH_IPV4_TCP; | ||
| 1036 | if (hw->rss_type == atl1c_rss_ipv6) | ||
| 1037 | rxq_ctrl_data |= RSS_HASH_IPV6; | ||
| 1038 | if (hw->rss_type == atl1c_rss_ipv6_tcp) | ||
| 1039 | rxq_ctrl_data |= RSS_HASH_IPV6_TCP; | ||
| 1040 | if (hw->rss_type != atl1c_rss_disable) | ||
| 1041 | rxq_ctrl_data |= RRS_HASH_CTRL_EN; | ||
| 1042 | |||
| 1043 | rxq_ctrl_data |= (hw->rss_mode & RSS_MODE_MASK) << | ||
| 1044 | RSS_MODE_SHIFT; | ||
| 1045 | rxq_ctrl_data |= (hw->rss_hash_bits & RSS_HASH_BITS_MASK) << | ||
| 1046 | RSS_HASH_BITS_SHIFT; | ||
| 1047 | if (hw->ctrl_flags & ATL1C_ASPM_CTRL_MON) | ||
| 1048 | rxq_ctrl_data |= (ASPM_THRUPUT_LIMIT_100M & | ||
| 1049 | ASPM_THRUPUT_LIMIT_MASK) << ASPM_THRUPUT_LIMIT_SHIFT; | ||
| 1050 | |||
| 1051 | AT_WRITE_REG(hw, REG_RXQ_CTRL, rxq_ctrl_data); | ||
| 1052 | } | ||
| 1053 | |||
| 1054 | static void atl1c_configure_rss(struct atl1c_adapter *adapter) | ||
| 1055 | { | ||
| 1056 | struct atl1c_hw *hw = &adapter->hw; | ||
| 1057 | |||
| 1058 | AT_WRITE_REG(hw, REG_IDT_TABLE, hw->indirect_tab); | ||
| 1059 | AT_WRITE_REG(hw, REG_BASE_CPU_NUMBER, hw->base_cpu); | ||
| 1060 | } | ||
| 1061 | |||
| 1062 | static void atl1c_configure_dma(struct atl1c_adapter *adapter) | ||
| 1063 | { | ||
| 1064 | struct atl1c_hw *hw = &adapter->hw; | ||
| 1065 | u32 dma_ctrl_data; | ||
| 1066 | |||
| 1067 | dma_ctrl_data = DMA_CTRL_DMAR_REQ_PRI; | ||
| 1068 | if (hw->ctrl_flags & ATL1C_CMB_ENABLE) | ||
| 1069 | dma_ctrl_data |= DMA_CTRL_CMB_EN; | ||
| 1070 | if (hw->ctrl_flags & ATL1C_SMB_ENABLE) | ||
| 1071 | dma_ctrl_data |= DMA_CTRL_SMB_EN; | ||
| 1072 | else | ||
| 1073 | dma_ctrl_data |= MAC_CTRL_SMB_DIS; | ||
| 1074 | |||
| 1075 | switch (hw->dma_order) { | ||
| 1076 | case atl1c_dma_ord_in: | ||
| 1077 | dma_ctrl_data |= DMA_CTRL_DMAR_IN_ORDER; | ||
| 1078 | break; | ||
| 1079 | case atl1c_dma_ord_enh: | ||
| 1080 | dma_ctrl_data |= DMA_CTRL_DMAR_ENH_ORDER; | ||
| 1081 | break; | ||
| 1082 | case atl1c_dma_ord_out: | ||
| 1083 | dma_ctrl_data |= DMA_CTRL_DMAR_OUT_ORDER; | ||
| 1084 | break; | ||
| 1085 | default: | ||
| 1086 | break; | ||
| 1087 | } | ||
| 1088 | |||
| 1089 | dma_ctrl_data |= (((u32)hw->dmar_block) & DMA_CTRL_DMAR_BURST_LEN_MASK) | ||
| 1090 | << DMA_CTRL_DMAR_BURST_LEN_SHIFT; | ||
| 1091 | dma_ctrl_data |= (((u32)hw->dmaw_block) & DMA_CTRL_DMAW_BURST_LEN_MASK) | ||
| 1092 | << DMA_CTRL_DMAW_BURST_LEN_SHIFT; | ||
| 1093 | dma_ctrl_data |= (((u32)hw->dmar_dly_cnt) & DMA_CTRL_DMAR_DLY_CNT_MASK) | ||
| 1094 | << DMA_CTRL_DMAR_DLY_CNT_SHIFT; | ||
| 1095 | dma_ctrl_data |= (((u32)hw->dmaw_dly_cnt) & DMA_CTRL_DMAW_DLY_CNT_MASK) | ||
| 1096 | << DMA_CTRL_DMAW_DLY_CNT_SHIFT; | ||
| 1097 | |||
| 1098 | AT_WRITE_REG(hw, REG_DMA_CTRL, dma_ctrl_data); | ||
| 1099 | } | ||
| 1100 | |||
| 1101 | /* | ||
| 1102 | * Stop the mac, transmit and receive units | ||
| 1103 | * hw - Struct containing variables accessed by shared code | ||
| 1104 | * return : 0 or idle status (if error) | ||
| 1105 | */ | ||
| 1106 | static int atl1c_stop_mac(struct atl1c_hw *hw) | ||
| 1107 | { | ||
| 1108 | u32 data; | ||
| 1109 | int timeout; | ||
| 1110 | |||
| 1111 | AT_READ_REG(hw, REG_RXQ_CTRL, &data); | ||
| 1112 | data &= ~(RXQ1_CTRL_EN | RXQ2_CTRL_EN | | ||
| 1113 | RXQ3_CTRL_EN | RXQ_CTRL_EN); | ||
| 1114 | AT_WRITE_REG(hw, REG_RXQ_CTRL, data); | ||
| 1115 | |||
| 1116 | AT_READ_REG(hw, REG_TXQ_CTRL, &data); | ||
| 1117 | data &= ~TXQ_CTRL_EN; | ||
| 1118 | AT_WRITE_REG(hw, REG_TWSI_CTRL, data); | ||
| 1119 | |||
| 1120 | for (timeout = 0; timeout < AT_HW_MAX_IDLE_DELAY; timeout++) { | ||
| 1121 | AT_READ_REG(hw, REG_IDLE_STATUS, &data); | ||
| 1122 | if ((data & (IDLE_STATUS_RXQ_NO_IDLE | | ||
| 1123 | IDLE_STATUS_TXQ_NO_IDLE)) == 0) | ||
| 1124 | break; | ||
| 1125 | msleep(1); | ||
| 1126 | } | ||
| 1127 | |||
| 1128 | AT_READ_REG(hw, REG_MAC_CTRL, &data); | ||
| 1129 | data &= ~(MAC_CTRL_TX_EN | MAC_CTRL_RX_EN); | ||
| 1130 | AT_WRITE_REG(hw, REG_MAC_CTRL, data); | ||
| 1131 | |||
| 1132 | for (timeout = 0; timeout < AT_HW_MAX_IDLE_DELAY; timeout++) { | ||
| 1133 | AT_READ_REG(hw, REG_IDLE_STATUS, &data); | ||
| 1134 | if ((data & IDLE_STATUS_MASK) == 0) | ||
| 1135 | return 0; | ||
| 1136 | msleep(1); | ||
| 1137 | } | ||
| 1138 | return data; | ||
| 1139 | } | ||
| 1140 | |||
| 1141 | static void atl1c_enable_rx_ctrl(struct atl1c_hw *hw) | ||
| 1142 | { | ||
| 1143 | u32 data; | ||
| 1144 | |||
| 1145 | AT_READ_REG(hw, REG_RXQ_CTRL, &data); | ||
| 1146 | switch (hw->adapter->num_rx_queues) { | ||
| 1147 | case 4: | ||
| 1148 | data |= (RXQ3_CTRL_EN | RXQ2_CTRL_EN | RXQ1_CTRL_EN); | ||
| 1149 | break; | ||
| 1150 | case 3: | ||
| 1151 | data |= (RXQ2_CTRL_EN | RXQ1_CTRL_EN); | ||
| 1152 | break; | ||
| 1153 | case 2: | ||
| 1154 | data |= RXQ1_CTRL_EN; | ||
| 1155 | break; | ||
| 1156 | default: | ||
| 1157 | break; | ||
| 1158 | } | ||
| 1159 | data |= RXQ_CTRL_EN; | ||
| 1160 | AT_WRITE_REG(hw, REG_RXQ_CTRL, data); | ||
| 1161 | } | ||
| 1162 | |||
| 1163 | static void atl1c_enable_tx_ctrl(struct atl1c_hw *hw) | ||
| 1164 | { | ||
| 1165 | u32 data; | ||
| 1166 | |||
| 1167 | AT_READ_REG(hw, REG_TXQ_CTRL, &data); | ||
| 1168 | data |= TXQ_CTRL_EN; | ||
| 1169 | AT_WRITE_REG(hw, REG_TXQ_CTRL, data); | ||
| 1170 | } | ||
| 1171 | |||
| 1172 | /* | ||
| 1173 | * Reset the transmit and receive units; mask and clear all interrupts. | ||
| 1174 | * hw - Struct containing variables accessed by shared code | ||
| 1175 | * return : 0 or idle status (if error) | ||
| 1176 | */ | ||
| 1177 | static int atl1c_reset_mac(struct atl1c_hw *hw) | ||
| 1178 | { | ||
| 1179 | struct atl1c_adapter *adapter = (struct atl1c_adapter *)hw->adapter; | ||
| 1180 | struct pci_dev *pdev = adapter->pdev; | ||
| 1181 | u32 idle_status_data = 0; | ||
| 1182 | int timeout = 0; | ||
| 1183 | int ret; | ||
| 1184 | |||
| 1185 | AT_WRITE_REG(hw, REG_IMR, 0); | ||
| 1186 | AT_WRITE_REG(hw, REG_ISR, ISR_DIS_INT); | ||
| 1187 | |||
| 1188 | ret = atl1c_stop_mac(hw); | ||
| 1189 | if (ret) | ||
| 1190 | return ret; | ||
| 1191 | /* | ||
| 1192 | * Issue Soft Reset to the MAC. This will reset the chip's | ||
| 1193 | * transmit, receive, DMA. It will not effect | ||
| 1194 | * the current PCI configuration. The global reset bit is self- | ||
| 1195 | * clearing, and should clear within a microsecond. | ||
| 1196 | */ | ||
| 1197 | AT_WRITE_REGW(hw, REG_MASTER_CTRL, MASTER_CTRL_SOFT_RST); | ||
| 1198 | AT_WRITE_FLUSH(hw); | ||
| 1199 | msleep(10); | ||
| 1200 | /* Wait at least 10ms for All module to be Idle */ | ||
| 1201 | for (timeout = 0; timeout < AT_HW_MAX_IDLE_DELAY; timeout++) { | ||
| 1202 | AT_READ_REG(hw, REG_IDLE_STATUS, &idle_status_data); | ||
| 1203 | if ((idle_status_data & IDLE_STATUS_MASK) == 0) | ||
| 1204 | break; | ||
| 1205 | msleep(1); | ||
| 1206 | } | ||
| 1207 | if (timeout >= AT_HW_MAX_IDLE_DELAY) { | ||
| 1208 | dev_err(&pdev->dev, | ||
| 1209 | "MAC state machine cann't be idle since" | ||
| 1210 | " disabled for 10ms second\n"); | ||
| 1211 | return -1; | ||
| 1212 | } | ||
| 1213 | return 0; | ||
| 1214 | } | ||
| 1215 | |||
| 1216 | static void atl1c_disable_l0s_l1(struct atl1c_hw *hw) | ||
| 1217 | { | ||
| 1218 | u32 pm_ctrl_data; | ||
| 1219 | |||
| 1220 | AT_READ_REG(hw, REG_PM_CTRL, &pm_ctrl_data); | ||
| 1221 | pm_ctrl_data &= ~(PM_CTRL_L1_ENTRY_TIMER_MASK << | ||
| 1222 | PM_CTRL_L1_ENTRY_TIMER_SHIFT); | ||
| 1223 | pm_ctrl_data &= ~PM_CTRL_CLK_SWH_L1; | ||
| 1224 | pm_ctrl_data &= ~PM_CTRL_ASPM_L0S_EN; | ||
| 1225 | pm_ctrl_data &= ~PM_CTRL_ASPM_L1_EN; | ||
| 1226 | pm_ctrl_data &= ~PM_CTRL_MAC_ASPM_CHK; | ||
| 1227 | pm_ctrl_data &= ~PM_CTRL_SERDES_PD_EX_L1; | ||
| 1228 | |||
| 1229 | pm_ctrl_data |= PM_CTRL_SERDES_BUDS_RX_L1_EN; | ||
| 1230 | pm_ctrl_data |= PM_CTRL_SERDES_PLL_L1_EN; | ||
| 1231 | pm_ctrl_data |= PM_CTRL_SERDES_L1_EN; | ||
| 1232 | AT_WRITE_REG(hw, REG_PM_CTRL, pm_ctrl_data); | ||
| 1233 | } | ||
| 1234 | |||
| 1235 | /* | ||
| 1236 | * Set ASPM state. | ||
| 1237 | * Enable/disable L0s/L1 depend on link state. | ||
| 1238 | */ | ||
| 1239 | static void atl1c_set_aspm(struct atl1c_hw *hw, bool linkup) | ||
| 1240 | { | ||
| 1241 | u32 pm_ctrl_data; | ||
| 1242 | |||
| 1243 | AT_READ_REG(hw, REG_PM_CTRL, &pm_ctrl_data); | ||
| 1244 | |||
| 1245 | pm_ctrl_data &= PM_CTRL_SERDES_PD_EX_L1; | ||
| 1246 | pm_ctrl_data |= ~PM_CTRL_SERDES_BUDS_RX_L1_EN; | ||
| 1247 | pm_ctrl_data |= ~PM_CTRL_SERDES_L1_EN; | ||
| 1248 | pm_ctrl_data &= ~(PM_CTRL_L1_ENTRY_TIMER_MASK << | ||
| 1249 | PM_CTRL_L1_ENTRY_TIMER_SHIFT); | ||
| 1250 | |||
| 1251 | pm_ctrl_data |= PM_CTRL_MAC_ASPM_CHK; | ||
| 1252 | |||
| 1253 | if (linkup) { | ||
| 1254 | pm_ctrl_data |= PM_CTRL_SERDES_PLL_L1_EN; | ||
| 1255 | pm_ctrl_data &= ~PM_CTRL_CLK_SWH_L1; | ||
| 1256 | |||
| 1257 | if (hw->ctrl_flags & ATL1C_ASPM_L1_SUPPORT) { | ||
| 1258 | pm_ctrl_data |= AT_ASPM_L1_TIMER << | ||
| 1259 | PM_CTRL_L1_ENTRY_TIMER_SHIFT; | ||
| 1260 | pm_ctrl_data |= PM_CTRL_ASPM_L1_EN; | ||
| 1261 | } else | ||
| 1262 | pm_ctrl_data &= ~PM_CTRL_ASPM_L1_EN; | ||
| 1263 | |||
| 1264 | if (hw->ctrl_flags & ATL1C_ASPM_L0S_SUPPORT) | ||
| 1265 | pm_ctrl_data |= PM_CTRL_ASPM_L0S_EN; | ||
| 1266 | else | ||
| 1267 | pm_ctrl_data &= ~PM_CTRL_ASPM_L0S_EN; | ||
| 1268 | |||
| 1269 | } else { | ||
| 1270 | pm_ctrl_data &= ~PM_CTRL_ASPM_L0S_EN; | ||
| 1271 | pm_ctrl_data &= ~PM_CTRL_SERDES_PLL_L1_EN; | ||
| 1272 | |||
| 1273 | pm_ctrl_data |= PM_CTRL_CLK_SWH_L1; | ||
| 1274 | |||
| 1275 | if (hw->ctrl_flags & ATL1C_ASPM_L1_SUPPORT) | ||
| 1276 | pm_ctrl_data |= PM_CTRL_ASPM_L1_EN; | ||
| 1277 | else | ||
| 1278 | pm_ctrl_data &= ~PM_CTRL_ASPM_L1_EN; | ||
| 1279 | } | ||
| 1280 | |||
| 1281 | AT_WRITE_REG(hw, REG_PM_CTRL, pm_ctrl_data); | ||
| 1282 | } | ||
| 1283 | |||
| 1284 | static void atl1c_setup_mac_ctrl(struct atl1c_adapter *adapter) | ||
| 1285 | { | ||
| 1286 | struct atl1c_hw *hw = &adapter->hw; | ||
| 1287 | struct net_device *netdev = adapter->netdev; | ||
| 1288 | u32 mac_ctrl_data; | ||
| 1289 | |||
| 1290 | mac_ctrl_data = MAC_CTRL_TX_EN | MAC_CTRL_RX_EN; | ||
| 1291 | mac_ctrl_data |= (MAC_CTRL_TX_FLOW | MAC_CTRL_RX_FLOW); | ||
| 1292 | |||
| 1293 | if (adapter->link_duplex == FULL_DUPLEX) { | ||
| 1294 | hw->mac_duplex = true; | ||
| 1295 | mac_ctrl_data |= MAC_CTRL_DUPLX; | ||
| 1296 | } | ||
| 1297 | |||
| 1298 | if (adapter->link_speed == SPEED_1000) | ||
| 1299 | hw->mac_speed = atl1c_mac_speed_1000; | ||
| 1300 | else | ||
| 1301 | hw->mac_speed = atl1c_mac_speed_10_100; | ||
| 1302 | |||
| 1303 | mac_ctrl_data |= (hw->mac_speed & MAC_CTRL_SPEED_MASK) << | ||
| 1304 | MAC_CTRL_SPEED_SHIFT; | ||
| 1305 | |||
| 1306 | mac_ctrl_data |= (MAC_CTRL_ADD_CRC | MAC_CTRL_PAD); | ||
| 1307 | mac_ctrl_data |= ((hw->preamble_len & MAC_CTRL_PRMLEN_MASK) << | ||
| 1308 | MAC_CTRL_PRMLEN_SHIFT); | ||
| 1309 | |||
| 1310 | if (adapter->vlgrp) | ||
| 1311 | mac_ctrl_data |= MAC_CTRL_RMV_VLAN; | ||
| 1312 | |||
| 1313 | mac_ctrl_data |= MAC_CTRL_BC_EN; | ||
| 1314 | if (netdev->flags & IFF_PROMISC) | ||
| 1315 | mac_ctrl_data |= MAC_CTRL_PROMIS_EN; | ||
| 1316 | if (netdev->flags & IFF_ALLMULTI) | ||
| 1317 | mac_ctrl_data |= MAC_CTRL_MC_ALL_EN; | ||
| 1318 | |||
| 1319 | mac_ctrl_data |= MAC_CTRL_SINGLE_PAUSE_EN; | ||
| 1320 | AT_WRITE_REG(hw, REG_MAC_CTRL, mac_ctrl_data); | ||
| 1321 | } | ||
| 1322 | |||
| 1323 | /* | ||
| 1324 | * atl1c_configure - Configure Transmit&Receive Unit after Reset | ||
| 1325 | * @adapter: board private structure | ||
| 1326 | * | ||
| 1327 | * Configure the Tx /Rx unit of the MAC after a reset. | ||
| 1328 | */ | ||
| 1329 | static int atl1c_configure(struct atl1c_adapter *adapter) | ||
| 1330 | { | ||
| 1331 | struct atl1c_hw *hw = &adapter->hw; | ||
| 1332 | u32 master_ctrl_data = 0; | ||
| 1333 | u32 intr_modrt_data; | ||
| 1334 | |||
| 1335 | /* clear interrupt status */ | ||
| 1336 | AT_WRITE_REG(hw, REG_ISR, 0xFFFFFFFF); | ||
| 1337 | /* Clear any WOL status */ | ||
| 1338 | AT_WRITE_REG(hw, REG_WOL_CTRL, 0); | ||
| 1339 | /* set Interrupt Clear Timer | ||
| 1340 | * HW will enable self to assert interrupt event to system after | ||
| 1341 | * waiting x-time for software to notify it accept interrupt. | ||
| 1342 | */ | ||
| 1343 | AT_WRITE_REG(hw, REG_INT_RETRIG_TIMER, | ||
| 1344 | hw->ict & INT_RETRIG_TIMER_MASK); | ||
| 1345 | |||
| 1346 | atl1c_configure_des_ring(adapter); | ||
| 1347 | |||
| 1348 | if (hw->ctrl_flags & ATL1C_INTR_MODRT_ENABLE) { | ||
| 1349 | intr_modrt_data = (hw->tx_imt & IRQ_MODRT_TIMER_MASK) << | ||
| 1350 | IRQ_MODRT_TX_TIMER_SHIFT; | ||
| 1351 | intr_modrt_data |= (hw->rx_imt & IRQ_MODRT_TIMER_MASK) << | ||
| 1352 | IRQ_MODRT_RX_TIMER_SHIFT; | ||
| 1353 | AT_WRITE_REG(hw, REG_IRQ_MODRT_TIMER_INIT, intr_modrt_data); | ||
| 1354 | master_ctrl_data |= | ||
| 1355 | MASTER_CTRL_TX_ITIMER_EN | MASTER_CTRL_RX_ITIMER_EN; | ||
| 1356 | } | ||
| 1357 | |||
| 1358 | if (hw->ctrl_flags & ATL1C_INTR_CLEAR_ON_READ) | ||
| 1359 | master_ctrl_data |= MASTER_CTRL_INT_RDCLR; | ||
| 1360 | |||
| 1361 | AT_WRITE_REG(hw, REG_MASTER_CTRL, master_ctrl_data); | ||
| 1362 | |||
| 1363 | if (hw->ctrl_flags & ATL1C_CMB_ENABLE) { | ||
| 1364 | AT_WRITE_REG(hw, REG_CMB_TPD_THRESH, | ||
| 1365 | hw->cmb_tpd & CMB_TPD_THRESH_MASK); | ||
| 1366 | AT_WRITE_REG(hw, REG_CMB_TX_TIMER, | ||
| 1367 | hw->cmb_tx_timer & CMB_TX_TIMER_MASK); | ||
| 1368 | } | ||
| 1369 | |||
| 1370 | if (hw->ctrl_flags & ATL1C_SMB_ENABLE) | ||
| 1371 | AT_WRITE_REG(hw, REG_SMB_STAT_TIMER, | ||
| 1372 | hw->smb_timer & SMB_STAT_TIMER_MASK); | ||
| 1373 | /* set MTU */ | ||
| 1374 | AT_WRITE_REG(hw, REG_MTU, hw->max_frame_size + ETH_HLEN + | ||
| 1375 | VLAN_HLEN + ETH_FCS_LEN); | ||
| 1376 | /* HDS, disable */ | ||
| 1377 | AT_WRITE_REG(hw, REG_HDS_CTRL, 0); | ||
| 1378 | |||
| 1379 | atl1c_configure_tx(adapter); | ||
| 1380 | atl1c_configure_rx(adapter); | ||
| 1381 | atl1c_configure_rss(adapter); | ||
| 1382 | atl1c_configure_dma(adapter); | ||
| 1383 | |||
| 1384 | return 0; | ||
| 1385 | } | ||
| 1386 | |||
| 1387 | static void atl1c_update_hw_stats(struct atl1c_adapter *adapter) | ||
| 1388 | { | ||
| 1389 | u16 hw_reg_addr = 0; | ||
| 1390 | unsigned long *stats_item = NULL; | ||
| 1391 | u32 data; | ||
| 1392 | |||
| 1393 | /* update rx status */ | ||
| 1394 | hw_reg_addr = REG_MAC_RX_STATUS_BIN; | ||
| 1395 | stats_item = &adapter->hw_stats.rx_ok; | ||
| 1396 | while (hw_reg_addr <= REG_MAC_RX_STATUS_END) { | ||
| 1397 | AT_READ_REG(&adapter->hw, hw_reg_addr, &data); | ||
| 1398 | *stats_item += data; | ||
| 1399 | stats_item++; | ||
| 1400 | hw_reg_addr += 4; | ||
| 1401 | } | ||
| 1402 | /* update tx status */ | ||
| 1403 | hw_reg_addr = REG_MAC_TX_STATUS_BIN; | ||
| 1404 | stats_item = &adapter->hw_stats.tx_ok; | ||
| 1405 | while (hw_reg_addr <= REG_MAC_TX_STATUS_END) { | ||
| 1406 | AT_READ_REG(&adapter->hw, hw_reg_addr, &data); | ||
| 1407 | *stats_item += data; | ||
| 1408 | stats_item++; | ||
| 1409 | hw_reg_addr += 4; | ||
| 1410 | } | ||
| 1411 | } | ||
| 1412 | |||
| 1413 | /* | ||
| 1414 | * atl1c_get_stats - Get System Network Statistics | ||
| 1415 | * @netdev: network interface device structure | ||
| 1416 | * | ||
| 1417 | * Returns the address of the device statistics structure. | ||
| 1418 | * The statistics are actually updated from the timer callback. | ||
| 1419 | */ | ||
| 1420 | static struct net_device_stats *atl1c_get_stats(struct net_device *netdev) | ||
| 1421 | { | ||
| 1422 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 1423 | struct atl1c_hw_stats *hw_stats = &adapter->hw_stats; | ||
| 1424 | struct net_device_stats *net_stats = &adapter->net_stats; | ||
| 1425 | |||
| 1426 | atl1c_update_hw_stats(adapter); | ||
| 1427 | net_stats->rx_packets = hw_stats->rx_ok; | ||
| 1428 | net_stats->tx_packets = hw_stats->tx_ok; | ||
| 1429 | net_stats->rx_bytes = hw_stats->rx_byte_cnt; | ||
| 1430 | net_stats->tx_bytes = hw_stats->tx_byte_cnt; | ||
| 1431 | net_stats->multicast = hw_stats->rx_mcast; | ||
| 1432 | net_stats->collisions = hw_stats->tx_1_col + | ||
| 1433 | hw_stats->tx_2_col * 2 + | ||
| 1434 | hw_stats->tx_late_col + hw_stats->tx_abort_col; | ||
| 1435 | net_stats->rx_errors = hw_stats->rx_frag + hw_stats->rx_fcs_err + | ||
| 1436 | hw_stats->rx_len_err + hw_stats->rx_sz_ov + | ||
| 1437 | hw_stats->rx_rrd_ov + hw_stats->rx_align_err; | ||
| 1438 | net_stats->rx_fifo_errors = hw_stats->rx_rxf_ov; | ||
| 1439 | net_stats->rx_length_errors = hw_stats->rx_len_err; | ||
| 1440 | net_stats->rx_crc_errors = hw_stats->rx_fcs_err; | ||
| 1441 | net_stats->rx_frame_errors = hw_stats->rx_align_err; | ||
| 1442 | net_stats->rx_over_errors = hw_stats->rx_rrd_ov + hw_stats->rx_rxf_ov; | ||
| 1443 | |||
| 1444 | net_stats->rx_missed_errors = hw_stats->rx_rrd_ov + hw_stats->rx_rxf_ov; | ||
| 1445 | |||
| 1446 | net_stats->tx_errors = hw_stats->tx_late_col + hw_stats->tx_abort_col + | ||
| 1447 | hw_stats->tx_underrun + hw_stats->tx_trunc; | ||
| 1448 | net_stats->tx_fifo_errors = hw_stats->tx_underrun; | ||
| 1449 | net_stats->tx_aborted_errors = hw_stats->tx_abort_col; | ||
| 1450 | net_stats->tx_window_errors = hw_stats->tx_late_col; | ||
| 1451 | |||
| 1452 | return &adapter->net_stats; | ||
| 1453 | } | ||
| 1454 | |||
| 1455 | static inline void atl1c_clear_phy_int(struct atl1c_adapter *adapter) | ||
| 1456 | { | ||
| 1457 | u16 phy_data; | ||
| 1458 | |||
| 1459 | spin_lock(&adapter->mdio_lock); | ||
| 1460 | atl1c_read_phy_reg(&adapter->hw, MII_ISR, &phy_data); | ||
| 1461 | spin_unlock(&adapter->mdio_lock); | ||
| 1462 | } | ||
| 1463 | |||
| 1464 | static bool atl1c_clean_tx_irq(struct atl1c_adapter *adapter, | ||
| 1465 | enum atl1c_trans_queue type) | ||
| 1466 | { | ||
| 1467 | struct atl1c_tpd_ring *tpd_ring = (struct atl1c_tpd_ring *) | ||
| 1468 | &adapter->tpd_ring[type]; | ||
| 1469 | struct atl1c_buffer *buffer_info; | ||
| 1470 | u16 next_to_clean = atomic_read(&tpd_ring->next_to_clean); | ||
| 1471 | u16 hw_next_to_clean; | ||
| 1472 | u16 shift; | ||
| 1473 | u32 data; | ||
| 1474 | |||
| 1475 | if (type == atl1c_trans_high) | ||
| 1476 | shift = MB_HTPD_CONS_IDX_SHIFT; | ||
| 1477 | else | ||
| 1478 | shift = MB_NTPD_CONS_IDX_SHIFT; | ||
| 1479 | |||
| 1480 | AT_READ_REG(&adapter->hw, REG_MB_PRIO_CONS_IDX, &data); | ||
| 1481 | hw_next_to_clean = (data >> shift) & MB_PRIO_PROD_IDX_MASK; | ||
| 1482 | |||
| 1483 | while (next_to_clean != hw_next_to_clean) { | ||
| 1484 | buffer_info = &tpd_ring->buffer_info[next_to_clean]; | ||
| 1485 | if (buffer_info->state == ATL1_BUFFER_BUSY) { | ||
| 1486 | pci_unmap_page(adapter->pdev, buffer_info->dma, | ||
| 1487 | buffer_info->length, PCI_DMA_TODEVICE); | ||
| 1488 | buffer_info->dma = 0; | ||
| 1489 | if (buffer_info->skb) { | ||
| 1490 | dev_kfree_skb_irq(buffer_info->skb); | ||
| 1491 | buffer_info->skb = NULL; | ||
| 1492 | } | ||
| 1493 | buffer_info->state = ATL1_BUFFER_FREE; | ||
| 1494 | } | ||
| 1495 | if (++next_to_clean == tpd_ring->count) | ||
| 1496 | next_to_clean = 0; | ||
| 1497 | atomic_set(&tpd_ring->next_to_clean, next_to_clean); | ||
| 1498 | } | ||
| 1499 | |||
| 1500 | if (netif_queue_stopped(adapter->netdev) && | ||
| 1501 | netif_carrier_ok(adapter->netdev)) { | ||
| 1502 | netif_wake_queue(adapter->netdev); | ||
| 1503 | } | ||
| 1504 | |||
| 1505 | return true; | ||
| 1506 | } | ||
| 1507 | |||
| 1508 | /* | ||
| 1509 | * atl1c_intr - Interrupt Handler | ||
| 1510 | * @irq: interrupt number | ||
| 1511 | * @data: pointer to a network interface device structure | ||
| 1512 | * @pt_regs: CPU registers structure | ||
| 1513 | */ | ||
| 1514 | static irqreturn_t atl1c_intr(int irq, void *data) | ||
| 1515 | { | ||
| 1516 | struct net_device *netdev = data; | ||
| 1517 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 1518 | struct pci_dev *pdev = adapter->pdev; | ||
| 1519 | struct atl1c_hw *hw = &adapter->hw; | ||
| 1520 | int max_ints = AT_MAX_INT_WORK; | ||
| 1521 | int handled = IRQ_NONE; | ||
| 1522 | u32 status; | ||
| 1523 | u32 reg_data; | ||
| 1524 | |||
| 1525 | do { | ||
| 1526 | AT_READ_REG(hw, REG_ISR, ®_data); | ||
| 1527 | status = reg_data & hw->intr_mask; | ||
| 1528 | |||
| 1529 | if (status == 0 || (status & ISR_DIS_INT) != 0) { | ||
| 1530 | if (max_ints != AT_MAX_INT_WORK) | ||
| 1531 | handled = IRQ_HANDLED; | ||
| 1532 | break; | ||
| 1533 | } | ||
| 1534 | /* link event */ | ||
| 1535 | if (status & ISR_GPHY) | ||
| 1536 | atl1c_clear_phy_int(adapter); | ||
| 1537 | /* Ack ISR */ | ||
| 1538 | AT_WRITE_REG(hw, REG_ISR, status | ISR_DIS_INT); | ||
| 1539 | if (status & ISR_RX_PKT) { | ||
| 1540 | if (likely(napi_schedule_prep(&adapter->napi))) { | ||
| 1541 | hw->intr_mask &= ~ISR_RX_PKT; | ||
| 1542 | AT_WRITE_REG(hw, REG_IMR, hw->intr_mask); | ||
| 1543 | __napi_schedule(&adapter->napi); | ||
| 1544 | } | ||
| 1545 | } | ||
| 1546 | if (status & ISR_TX_PKT) | ||
| 1547 | atl1c_clean_tx_irq(adapter, atl1c_trans_normal); | ||
| 1548 | |||
| 1549 | handled = IRQ_HANDLED; | ||
| 1550 | /* check if PCIE PHY Link down */ | ||
| 1551 | if (status & ISR_ERROR) { | ||
| 1552 | if (netif_msg_hw(adapter)) | ||
| 1553 | dev_err(&pdev->dev, | ||
| 1554 | "atl1c hardware error (status = 0x%x)\n", | ||
| 1555 | status & ISR_ERROR); | ||
| 1556 | /* reset MAC */ | ||
| 1557 | hw->intr_mask &= ~ISR_ERROR; | ||
| 1558 | AT_WRITE_REG(hw, REG_IMR, hw->intr_mask); | ||
| 1559 | schedule_work(&adapter->reset_task); | ||
| 1560 | break; | ||
| 1561 | } | ||
| 1562 | |||
| 1563 | if (status & ISR_OVER) | ||
| 1564 | if (netif_msg_intr(adapter)) | ||
| 1565 | dev_warn(&pdev->dev, | ||
| 1566 | "TX/RX over flow (status = 0x%x)\n", | ||
| 1567 | status & ISR_OVER); | ||
| 1568 | |||
| 1569 | /* link event */ | ||
| 1570 | if (status & (ISR_GPHY | ISR_MANUAL)) { | ||
| 1571 | adapter->net_stats.tx_carrier_errors++; | ||
| 1572 | atl1c_link_chg_event(adapter); | ||
| 1573 | break; | ||
| 1574 | } | ||
| 1575 | |||
| 1576 | } while (--max_ints > 0); | ||
| 1577 | /* re-enable Interrupt*/ | ||
| 1578 | AT_WRITE_REG(&adapter->hw, REG_ISR, 0); | ||
| 1579 | return handled; | ||
| 1580 | } | ||
| 1581 | |||
| 1582 | static inline void atl1c_rx_checksum(struct atl1c_adapter *adapter, | ||
| 1583 | struct sk_buff *skb, struct atl1c_recv_ret_status *prrs) | ||
| 1584 | { | ||
| 1585 | /* | ||
| 1586 | * The pid field in RRS in not correct sometimes, so we | ||
| 1587 | * cannot figure out if the packet is fragmented or not, | ||
| 1588 | * so we tell the KERNEL CHECKSUM_NONE | ||
| 1589 | */ | ||
| 1590 | skb->ip_summed = CHECKSUM_NONE; | ||
| 1591 | } | ||
| 1592 | |||
| 1593 | static int atl1c_alloc_rx_buffer(struct atl1c_adapter *adapter, const int ringid) | ||
| 1594 | { | ||
| 1595 | struct atl1c_rfd_ring *rfd_ring = &adapter->rfd_ring[ringid]; | ||
| 1596 | struct pci_dev *pdev = adapter->pdev; | ||
| 1597 | struct atl1c_buffer *buffer_info, *next_info; | ||
| 1598 | struct sk_buff *skb; | ||
| 1599 | void *vir_addr = NULL; | ||
| 1600 | u16 num_alloc = 0; | ||
| 1601 | u16 rfd_next_to_use, next_next; | ||
| 1602 | struct atl1c_rx_free_desc *rfd_desc; | ||
| 1603 | |||
| 1604 | next_next = rfd_next_to_use = rfd_ring->next_to_use; | ||
| 1605 | if (++next_next == rfd_ring->count) | ||
| 1606 | next_next = 0; | ||
| 1607 | buffer_info = &rfd_ring->buffer_info[rfd_next_to_use]; | ||
| 1608 | next_info = &rfd_ring->buffer_info[next_next]; | ||
| 1609 | |||
| 1610 | while (next_info->state == ATL1_BUFFER_FREE) { | ||
| 1611 | rfd_desc = ATL1C_RFD_DESC(rfd_ring, rfd_next_to_use); | ||
| 1612 | |||
| 1613 | skb = dev_alloc_skb(adapter->rx_buffer_len); | ||
| 1614 | if (unlikely(!skb)) { | ||
| 1615 | if (netif_msg_rx_err(adapter)) | ||
| 1616 | dev_warn(&pdev->dev, "alloc rx buffer failed\n"); | ||
| 1617 | break; | ||
| 1618 | } | ||
| 1619 | |||
| 1620 | /* | ||
| 1621 | * Make buffer alignment 2 beyond a 16 byte boundary | ||
| 1622 | * this will result in a 16 byte aligned IP header after | ||
| 1623 | * the 14 byte MAC header is removed | ||
| 1624 | */ | ||
| 1625 | vir_addr = skb->data; | ||
| 1626 | buffer_info->state = ATL1_BUFFER_BUSY; | ||
| 1627 | buffer_info->skb = skb; | ||
| 1628 | buffer_info->length = adapter->rx_buffer_len; | ||
| 1629 | buffer_info->dma = pci_map_single(pdev, vir_addr, | ||
| 1630 | buffer_info->length, | ||
| 1631 | PCI_DMA_FROMDEVICE); | ||
| 1632 | rfd_desc->buffer_addr = cpu_to_le64(buffer_info->dma); | ||
| 1633 | rfd_next_to_use = next_next; | ||
| 1634 | if (++next_next == rfd_ring->count) | ||
| 1635 | next_next = 0; | ||
| 1636 | buffer_info = &rfd_ring->buffer_info[rfd_next_to_use]; | ||
| 1637 | next_info = &rfd_ring->buffer_info[next_next]; | ||
| 1638 | num_alloc++; | ||
| 1639 | } | ||
| 1640 | |||
| 1641 | if (num_alloc) { | ||
| 1642 | /* TODO: update mailbox here */ | ||
| 1643 | wmb(); | ||
| 1644 | rfd_ring->next_to_use = rfd_next_to_use; | ||
| 1645 | AT_WRITE_REG(&adapter->hw, atl1c_rfd_prod_idx_regs[ringid], | ||
| 1646 | rfd_ring->next_to_use & MB_RFDX_PROD_IDX_MASK); | ||
| 1647 | } | ||
| 1648 | |||
| 1649 | return num_alloc; | ||
| 1650 | } | ||
| 1651 | |||
| 1652 | static void atl1c_clean_rrd(struct atl1c_rrd_ring *rrd_ring, | ||
| 1653 | struct atl1c_recv_ret_status *rrs, u16 num) | ||
| 1654 | { | ||
| 1655 | u16 i; | ||
| 1656 | /* the relationship between rrd and rfd is one map one */ | ||
| 1657 | for (i = 0; i < num; i++, rrs = ATL1C_RRD_DESC(rrd_ring, | ||
| 1658 | rrd_ring->next_to_clean)) { | ||
| 1659 | rrs->word3 &= ~RRS_RXD_UPDATED; | ||
| 1660 | if (++rrd_ring->next_to_clean == rrd_ring->count) | ||
| 1661 | rrd_ring->next_to_clean = 0; | ||
| 1662 | } | ||
| 1663 | } | ||
| 1664 | |||
| 1665 | static void atl1c_clean_rfd(struct atl1c_rfd_ring *rfd_ring, | ||
| 1666 | struct atl1c_recv_ret_status *rrs, u16 num) | ||
| 1667 | { | ||
| 1668 | u16 i; | ||
| 1669 | u16 rfd_index; | ||
| 1670 | struct atl1c_buffer *buffer_info = rfd_ring->buffer_info; | ||
| 1671 | |||
| 1672 | rfd_index = (rrs->word0 >> RRS_RX_RFD_INDEX_SHIFT) & | ||
| 1673 | RRS_RX_RFD_INDEX_MASK; | ||
| 1674 | for (i = 0; i < num; i++) { | ||
| 1675 | buffer_info[rfd_index].skb = NULL; | ||
| 1676 | buffer_info[rfd_index].state = ATL1_BUFFER_FREE; | ||
| 1677 | if (++rfd_index == rfd_ring->count) | ||
| 1678 | rfd_index = 0; | ||
| 1679 | } | ||
| 1680 | rfd_ring->next_to_clean = rfd_index; | ||
| 1681 | } | ||
| 1682 | |||
| 1683 | static void atl1c_clean_rx_irq(struct atl1c_adapter *adapter, u8 que, | ||
| 1684 | int *work_done, int work_to_do) | ||
| 1685 | { | ||
| 1686 | u16 rfd_num, rfd_index; | ||
| 1687 | u16 count = 0; | ||
| 1688 | u16 length; | ||
| 1689 | struct pci_dev *pdev = adapter->pdev; | ||
| 1690 | struct net_device *netdev = adapter->netdev; | ||
| 1691 | struct atl1c_rfd_ring *rfd_ring = &adapter->rfd_ring[que]; | ||
| 1692 | struct atl1c_rrd_ring *rrd_ring = &adapter->rrd_ring[que]; | ||
| 1693 | struct sk_buff *skb; | ||
| 1694 | struct atl1c_recv_ret_status *rrs; | ||
| 1695 | struct atl1c_buffer *buffer_info; | ||
| 1696 | |||
| 1697 | while (1) { | ||
| 1698 | if (*work_done >= work_to_do) | ||
| 1699 | break; | ||
| 1700 | rrs = ATL1C_RRD_DESC(rrd_ring, rrd_ring->next_to_clean); | ||
| 1701 | if (likely(RRS_RXD_IS_VALID(rrs->word3))) { | ||
| 1702 | rfd_num = (rrs->word0 >> RRS_RX_RFD_CNT_SHIFT) & | ||
| 1703 | RRS_RX_RFD_CNT_MASK; | ||
| 1704 | if (unlikely(rfd_num) != 1) | ||
| 1705 | /* TODO support mul rfd*/ | ||
| 1706 | if (netif_msg_rx_err(adapter)) | ||
| 1707 | dev_warn(&pdev->dev, | ||
| 1708 | "Multi rfd not support yet!\n"); | ||
| 1709 | goto rrs_checked; | ||
| 1710 | } else { | ||
| 1711 | break; | ||
| 1712 | } | ||
| 1713 | rrs_checked: | ||
| 1714 | atl1c_clean_rrd(rrd_ring, rrs, rfd_num); | ||
| 1715 | if (rrs->word3 & (RRS_RX_ERR_SUM | RRS_802_3_LEN_ERR)) { | ||
| 1716 | atl1c_clean_rfd(rfd_ring, rrs, rfd_num); | ||
| 1717 | if (netif_msg_rx_err(adapter)) | ||
| 1718 | dev_warn(&pdev->dev, | ||
| 1719 | "wrong packet! rrs word3 is %x\n", | ||
| 1720 | rrs->word3); | ||
| 1721 | continue; | ||
| 1722 | } | ||
| 1723 | |||
| 1724 | length = le16_to_cpu((rrs->word3 >> RRS_PKT_SIZE_SHIFT) & | ||
| 1725 | RRS_PKT_SIZE_MASK); | ||
| 1726 | /* Good Receive */ | ||
| 1727 | if (likely(rfd_num == 1)) { | ||
| 1728 | rfd_index = (rrs->word0 >> RRS_RX_RFD_INDEX_SHIFT) & | ||
| 1729 | RRS_RX_RFD_INDEX_MASK; | ||
| 1730 | buffer_info = &rfd_ring->buffer_info[rfd_index]; | ||
| 1731 | pci_unmap_single(pdev, buffer_info->dma, | ||
| 1732 | buffer_info->length, PCI_DMA_FROMDEVICE); | ||
| 1733 | skb = buffer_info->skb; | ||
| 1734 | } else { | ||
| 1735 | /* TODO */ | ||
| 1736 | if (netif_msg_rx_err(adapter)) | ||
| 1737 | dev_warn(&pdev->dev, | ||
| 1738 | "Multi rfd not support yet!\n"); | ||
| 1739 | break; | ||
| 1740 | } | ||
| 1741 | atl1c_clean_rfd(rfd_ring, rrs, rfd_num); | ||
| 1742 | skb_put(skb, length - ETH_FCS_LEN); | ||
| 1743 | skb->protocol = eth_type_trans(skb, netdev); | ||
| 1744 | skb->dev = netdev; | ||
| 1745 | atl1c_rx_checksum(adapter, skb, rrs); | ||
| 1746 | if (unlikely(adapter->vlgrp) && rrs->word3 & RRS_VLAN_INS) { | ||
| 1747 | u16 vlan; | ||
| 1748 | |||
| 1749 | AT_TAG_TO_VLAN(rrs->vlan_tag, vlan); | ||
| 1750 | vlan = le16_to_cpu(vlan); | ||
| 1751 | vlan_hwaccel_receive_skb(skb, adapter->vlgrp, vlan); | ||
| 1752 | } else | ||
| 1753 | netif_receive_skb(skb); | ||
| 1754 | |||
| 1755 | netdev->last_rx = jiffies; | ||
| 1756 | (*work_done)++; | ||
| 1757 | count++; | ||
| 1758 | } | ||
| 1759 | if (count) | ||
| 1760 | atl1c_alloc_rx_buffer(adapter, que); | ||
| 1761 | } | ||
| 1762 | |||
| 1763 | /* | ||
| 1764 | * atl1c_clean - NAPI Rx polling callback | ||
| 1765 | * @adapter: board private structure | ||
| 1766 | */ | ||
| 1767 | static int atl1c_clean(struct napi_struct *napi, int budget) | ||
| 1768 | { | ||
| 1769 | struct atl1c_adapter *adapter = | ||
| 1770 | container_of(napi, struct atl1c_adapter, napi); | ||
| 1771 | int work_done = 0; | ||
| 1772 | |||
| 1773 | /* Keep link state information with original netdev */ | ||
| 1774 | if (!netif_carrier_ok(adapter->netdev)) | ||
| 1775 | goto quit_polling; | ||
| 1776 | /* just enable one RXQ */ | ||
| 1777 | atl1c_clean_rx_irq(adapter, 0, &work_done, budget); | ||
| 1778 | |||
| 1779 | if (work_done < budget) { | ||
| 1780 | quit_polling: | ||
| 1781 | napi_complete(napi); | ||
| 1782 | adapter->hw.intr_mask |= ISR_RX_PKT; | ||
| 1783 | AT_WRITE_REG(&adapter->hw, REG_IMR, adapter->hw.intr_mask); | ||
| 1784 | } | ||
| 1785 | return work_done; | ||
| 1786 | } | ||
| 1787 | |||
| 1788 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 1789 | |||
| 1790 | /* | ||
| 1791 | * Polling 'interrupt' - used by things like netconsole to send skbs | ||
| 1792 | * without having to re-enable interrupts. It's not called while | ||
| 1793 | * the interrupt routine is executing. | ||
| 1794 | */ | ||
| 1795 | static void atl1c_netpoll(struct net_device *netdev) | ||
| 1796 | { | ||
| 1797 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 1798 | |||
| 1799 | disable_irq(adapter->pdev->irq); | ||
| 1800 | atl1c_intr(adapter->pdev->irq, netdev); | ||
| 1801 | enable_irq(adapter->pdev->irq); | ||
| 1802 | } | ||
| 1803 | #endif | ||
| 1804 | |||
| 1805 | static inline u16 atl1c_tpd_avail(struct atl1c_adapter *adapter, enum atl1c_trans_queue type) | ||
| 1806 | { | ||
| 1807 | struct atl1c_tpd_ring *tpd_ring = &adapter->tpd_ring[type]; | ||
| 1808 | u16 next_to_use = 0; | ||
| 1809 | u16 next_to_clean = 0; | ||
| 1810 | |||
| 1811 | next_to_clean = atomic_read(&tpd_ring->next_to_clean); | ||
| 1812 | next_to_use = tpd_ring->next_to_use; | ||
| 1813 | |||
| 1814 | return (u16)(next_to_clean > next_to_use) ? | ||
| 1815 | (next_to_clean - next_to_use - 1) : | ||
| 1816 | (tpd_ring->count + next_to_clean - next_to_use - 1); | ||
| 1817 | } | ||
| 1818 | |||
| 1819 | /* | ||
| 1820 | * get next usable tpd | ||
| 1821 | * Note: should call atl1c_tdp_avail to make sure | ||
| 1822 | * there is enough tpd to use | ||
| 1823 | */ | ||
| 1824 | static struct atl1c_tpd_desc *atl1c_get_tpd(struct atl1c_adapter *adapter, | ||
| 1825 | enum atl1c_trans_queue type) | ||
| 1826 | { | ||
| 1827 | struct atl1c_tpd_ring *tpd_ring = &adapter->tpd_ring[type]; | ||
| 1828 | struct atl1c_tpd_desc *tpd_desc; | ||
| 1829 | u16 next_to_use = 0; | ||
| 1830 | |||
| 1831 | next_to_use = tpd_ring->next_to_use; | ||
| 1832 | if (++tpd_ring->next_to_use == tpd_ring->count) | ||
| 1833 | tpd_ring->next_to_use = 0; | ||
| 1834 | tpd_desc = ATL1C_TPD_DESC(tpd_ring, next_to_use); | ||
| 1835 | memset(tpd_desc, 0, sizeof(struct atl1c_tpd_desc)); | ||
| 1836 | return tpd_desc; | ||
| 1837 | } | ||
| 1838 | |||
| 1839 | static struct atl1c_buffer * | ||
| 1840 | atl1c_get_tx_buffer(struct atl1c_adapter *adapter, struct atl1c_tpd_desc *tpd) | ||
| 1841 | { | ||
| 1842 | struct atl1c_tpd_ring *tpd_ring = adapter->tpd_ring; | ||
| 1843 | |||
| 1844 | return &tpd_ring->buffer_info[tpd - | ||
| 1845 | (struct atl1c_tpd_desc *)tpd_ring->desc]; | ||
| 1846 | } | ||
| 1847 | |||
| 1848 | /* Calculate the transmit packet descript needed*/ | ||
| 1849 | static u16 atl1c_cal_tpd_req(const struct sk_buff *skb) | ||
| 1850 | { | ||
| 1851 | u16 tpd_req; | ||
| 1852 | u16 proto_hdr_len = 0; | ||
| 1853 | |||
| 1854 | tpd_req = skb_shinfo(skb)->nr_frags + 1; | ||
| 1855 | |||
| 1856 | if (skb_is_gso(skb)) { | ||
| 1857 | proto_hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb); | ||
| 1858 | if (proto_hdr_len < skb_headlen(skb)) | ||
| 1859 | tpd_req++; | ||
| 1860 | if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6) | ||
| 1861 | tpd_req++; | ||
| 1862 | } | ||
| 1863 | return tpd_req; | ||
| 1864 | } | ||
| 1865 | |||
| 1866 | static int atl1c_tso_csum(struct atl1c_adapter *adapter, | ||
| 1867 | struct sk_buff *skb, | ||
| 1868 | struct atl1c_tpd_desc **tpd, | ||
| 1869 | enum atl1c_trans_queue type) | ||
| 1870 | { | ||
| 1871 | struct pci_dev *pdev = adapter->pdev; | ||
| 1872 | u8 hdr_len; | ||
| 1873 | u32 real_len; | ||
| 1874 | unsigned short offload_type; | ||
| 1875 | int err; | ||
| 1876 | |||
| 1877 | if (skb_is_gso(skb)) { | ||
| 1878 | if (skb_header_cloned(skb)) { | ||
| 1879 | err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); | ||
| 1880 | if (unlikely(err)) | ||
| 1881 | return -1; | ||
| 1882 | } | ||
| 1883 | offload_type = skb_shinfo(skb)->gso_type; | ||
| 1884 | |||
| 1885 | if (offload_type & SKB_GSO_TCPV4) { | ||
| 1886 | real_len = (((unsigned char *)ip_hdr(skb) - skb->data) | ||
| 1887 | + ntohs(ip_hdr(skb)->tot_len)); | ||
| 1888 | |||
| 1889 | if (real_len < skb->len) | ||
| 1890 | pskb_trim(skb, real_len); | ||
| 1891 | |||
| 1892 | hdr_len = (skb_transport_offset(skb) + tcp_hdrlen(skb)); | ||
| 1893 | if (unlikely(skb->len == hdr_len)) { | ||
| 1894 | /* only xsum need */ | ||
| 1895 | if (netif_msg_tx_queued(adapter)) | ||
| 1896 | dev_warn(&pdev->dev, | ||
| 1897 | "IPV4 tso with zero data??\n"); | ||
| 1898 | goto check_sum; | ||
| 1899 | } else { | ||
| 1900 | ip_hdr(skb)->check = 0; | ||
| 1901 | tcp_hdr(skb)->check = ~csum_tcpudp_magic( | ||
| 1902 | ip_hdr(skb)->saddr, | ||
| 1903 | ip_hdr(skb)->daddr, | ||
| 1904 | 0, IPPROTO_TCP, 0); | ||
| 1905 | (*tpd)->word1 |= 1 << TPD_IPV4_PACKET_SHIFT; | ||
| 1906 | } | ||
| 1907 | } | ||
| 1908 | |||
| 1909 | if (offload_type & SKB_GSO_TCPV6) { | ||
| 1910 | struct atl1c_tpd_ext_desc *etpd = | ||
| 1911 | *(struct atl1c_tpd_ext_desc **)(tpd); | ||
| 1912 | |||
| 1913 | memset(etpd, 0, sizeof(struct atl1c_tpd_ext_desc)); | ||
| 1914 | *tpd = atl1c_get_tpd(adapter, type); | ||
| 1915 | ipv6_hdr(skb)->payload_len = 0; | ||
| 1916 | /* check payload == 0 byte ? */ | ||
| 1917 | hdr_len = (skb_transport_offset(skb) + tcp_hdrlen(skb)); | ||
| 1918 | if (unlikely(skb->len == hdr_len)) { | ||
| 1919 | /* only xsum need */ | ||
| 1920 | if (netif_msg_tx_queued(adapter)) | ||
| 1921 | dev_warn(&pdev->dev, | ||
| 1922 | "IPV6 tso with zero data??\n"); | ||
| 1923 | goto check_sum; | ||
| 1924 | } else | ||
| 1925 | tcp_hdr(skb)->check = ~csum_ipv6_magic( | ||
| 1926 | &ipv6_hdr(skb)->saddr, | ||
| 1927 | &ipv6_hdr(skb)->daddr, | ||
| 1928 | 0, IPPROTO_TCP, 0); | ||
| 1929 | etpd->word1 |= 1 << TPD_LSO_EN_SHIFT; | ||
| 1930 | etpd->word1 |= 1 << TPD_LSO_VER_SHIFT; | ||
| 1931 | etpd->pkt_len = cpu_to_le32(skb->len); | ||
| 1932 | (*tpd)->word1 |= 1 << TPD_LSO_VER_SHIFT; | ||
| 1933 | } | ||
| 1934 | |||
| 1935 | (*tpd)->word1 |= 1 << TPD_LSO_EN_SHIFT; | ||
| 1936 | (*tpd)->word1 |= (skb_transport_offset(skb) & TPD_TCPHDR_OFFSET_MASK) << | ||
| 1937 | TPD_TCPHDR_OFFSET_SHIFT; | ||
| 1938 | (*tpd)->word1 |= (skb_shinfo(skb)->gso_size & TPD_MSS_MASK) << | ||
| 1939 | TPD_MSS_SHIFT; | ||
| 1940 | return 0; | ||
| 1941 | } | ||
| 1942 | |||
| 1943 | check_sum: | ||
| 1944 | if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) { | ||
| 1945 | u8 css, cso; | ||
| 1946 | cso = skb_transport_offset(skb); | ||
| 1947 | |||
| 1948 | if (unlikely(cso & 0x1)) { | ||
| 1949 | if (netif_msg_tx_err(adapter)) | ||
| 1950 | dev_err(&adapter->pdev->dev, | ||
| 1951 | "payload offset should not an event number\n"); | ||
| 1952 | return -1; | ||
| 1953 | } else { | ||
| 1954 | css = cso + skb->csum_offset; | ||
| 1955 | |||
| 1956 | (*tpd)->word1 |= ((cso >> 1) & TPD_PLOADOFFSET_MASK) << | ||
| 1957 | TPD_PLOADOFFSET_SHIFT; | ||
| 1958 | (*tpd)->word1 |= ((css >> 1) & TPD_CCSUM_OFFSET_MASK) << | ||
| 1959 | TPD_CCSUM_OFFSET_SHIFT; | ||
| 1960 | (*tpd)->word1 |= 1 << TPD_CCSUM_EN_SHIFT; | ||
| 1961 | } | ||
| 1962 | } | ||
| 1963 | return 0; | ||
| 1964 | } | ||
| 1965 | |||
| 1966 | static void atl1c_tx_map(struct atl1c_adapter *adapter, | ||
| 1967 | struct sk_buff *skb, struct atl1c_tpd_desc *tpd, | ||
| 1968 | enum atl1c_trans_queue type) | ||
| 1969 | { | ||
| 1970 | struct atl1c_tpd_desc *use_tpd = NULL; | ||
| 1971 | struct atl1c_buffer *buffer_info = NULL; | ||
| 1972 | u16 buf_len = skb_headlen(skb); | ||
| 1973 | u16 map_len = 0; | ||
| 1974 | u16 mapped_len = 0; | ||
| 1975 | u16 hdr_len = 0; | ||
| 1976 | u16 nr_frags; | ||
| 1977 | u16 f; | ||
| 1978 | int tso; | ||
| 1979 | |||
| 1980 | nr_frags = skb_shinfo(skb)->nr_frags; | ||
| 1981 | tso = (tpd->word1 >> TPD_LSO_EN_SHIFT) & TPD_LSO_EN_MASK; | ||
| 1982 | if (tso) { | ||
| 1983 | /* TSO */ | ||
| 1984 | map_len = hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb); | ||
| 1985 | use_tpd = tpd; | ||
| 1986 | |||
| 1987 | buffer_info = atl1c_get_tx_buffer(adapter, use_tpd); | ||
| 1988 | buffer_info->length = map_len; | ||
| 1989 | buffer_info->dma = pci_map_single(adapter->pdev, | ||
| 1990 | skb->data, hdr_len, PCI_DMA_TODEVICE); | ||
| 1991 | buffer_info->state = ATL1_BUFFER_BUSY; | ||
| 1992 | mapped_len += map_len; | ||
| 1993 | use_tpd->buffer_addr = cpu_to_le64(buffer_info->dma); | ||
| 1994 | use_tpd->buffer_len = cpu_to_le16(buffer_info->length); | ||
| 1995 | } | ||
| 1996 | |||
| 1997 | if (mapped_len < buf_len) { | ||
| 1998 | /* mapped_len == 0, means we should use the first tpd, | ||
| 1999 | which is given by caller */ | ||
| 2000 | if (mapped_len == 0) | ||
| 2001 | use_tpd = tpd; | ||
| 2002 | else { | ||
| 2003 | use_tpd = atl1c_get_tpd(adapter, type); | ||
| 2004 | memcpy(use_tpd, tpd, sizeof(struct atl1c_tpd_desc)); | ||
| 2005 | use_tpd = atl1c_get_tpd(adapter, type); | ||
| 2006 | memcpy(use_tpd, tpd, sizeof(struct atl1c_tpd_desc)); | ||
| 2007 | } | ||
| 2008 | buffer_info = atl1c_get_tx_buffer(adapter, use_tpd); | ||
| 2009 | buffer_info->length = buf_len - mapped_len; | ||
| 2010 | buffer_info->dma = | ||
| 2011 | pci_map_single(adapter->pdev, skb->data + mapped_len, | ||
| 2012 | buffer_info->length, PCI_DMA_TODEVICE); | ||
| 2013 | buffer_info->state = ATL1_BUFFER_BUSY; | ||
| 2014 | |||
| 2015 | use_tpd->buffer_addr = cpu_to_le64(buffer_info->dma); | ||
| 2016 | use_tpd->buffer_len = cpu_to_le16(buffer_info->length); | ||
| 2017 | } | ||
| 2018 | |||
| 2019 | for (f = 0; f < nr_frags; f++) { | ||
| 2020 | struct skb_frag_struct *frag; | ||
| 2021 | |||
| 2022 | frag = &skb_shinfo(skb)->frags[f]; | ||
| 2023 | |||
| 2024 | use_tpd = atl1c_get_tpd(adapter, type); | ||
| 2025 | memcpy(use_tpd, tpd, sizeof(struct atl1c_tpd_desc)); | ||
| 2026 | |||
| 2027 | buffer_info = atl1c_get_tx_buffer(adapter, use_tpd); | ||
| 2028 | buffer_info->length = frag->size; | ||
| 2029 | buffer_info->dma = | ||
| 2030 | pci_map_page(adapter->pdev, frag->page, | ||
| 2031 | frag->page_offset, | ||
| 2032 | buffer_info->length, | ||
| 2033 | PCI_DMA_TODEVICE); | ||
| 2034 | buffer_info->state = ATL1_BUFFER_BUSY; | ||
| 2035 | |||
| 2036 | use_tpd->buffer_addr = cpu_to_le64(buffer_info->dma); | ||
| 2037 | use_tpd->buffer_len = cpu_to_le16(buffer_info->length); | ||
| 2038 | } | ||
| 2039 | |||
| 2040 | /* The last tpd */ | ||
| 2041 | use_tpd->word1 |= 1 << TPD_EOP_SHIFT; | ||
| 2042 | /* The last buffer info contain the skb address, | ||
| 2043 | so it will be free after unmap */ | ||
| 2044 | buffer_info->skb = skb; | ||
| 2045 | } | ||
| 2046 | |||
| 2047 | static void atl1c_tx_queue(struct atl1c_adapter *adapter, struct sk_buff *skb, | ||
| 2048 | struct atl1c_tpd_desc *tpd, enum atl1c_trans_queue type) | ||
| 2049 | { | ||
| 2050 | struct atl1c_tpd_ring *tpd_ring = &adapter->tpd_ring[type]; | ||
| 2051 | u32 prod_data; | ||
| 2052 | |||
| 2053 | AT_READ_REG(&adapter->hw, REG_MB_PRIO_PROD_IDX, &prod_data); | ||
| 2054 | switch (type) { | ||
| 2055 | case atl1c_trans_high: | ||
| 2056 | prod_data &= 0xFFFF0000; | ||
| 2057 | prod_data |= tpd_ring->next_to_use & 0xFFFF; | ||
| 2058 | break; | ||
| 2059 | case atl1c_trans_normal: | ||
| 2060 | prod_data &= 0x0000FFFF; | ||
| 2061 | prod_data |= (tpd_ring->next_to_use & 0xFFFF) << 16; | ||
| 2062 | break; | ||
| 2063 | default: | ||
| 2064 | break; | ||
| 2065 | } | ||
| 2066 | wmb(); | ||
| 2067 | AT_WRITE_REG(&adapter->hw, REG_MB_PRIO_PROD_IDX, prod_data); | ||
| 2068 | } | ||
| 2069 | |||
| 2070 | static int atl1c_xmit_frame(struct sk_buff *skb, struct net_device *netdev) | ||
| 2071 | { | ||
| 2072 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 2073 | unsigned long flags; | ||
| 2074 | u16 tpd_req = 1; | ||
| 2075 | struct atl1c_tpd_desc *tpd; | ||
| 2076 | enum atl1c_trans_queue type = atl1c_trans_normal; | ||
| 2077 | |||
| 2078 | if (test_bit(__AT_DOWN, &adapter->flags)) { | ||
| 2079 | dev_kfree_skb_any(skb); | ||
| 2080 | return NETDEV_TX_OK; | ||
| 2081 | } | ||
| 2082 | |||
| 2083 | tpd_req = atl1c_cal_tpd_req(skb); | ||
| 2084 | if (!spin_trylock_irqsave(&adapter->tx_lock, flags)) { | ||
| 2085 | if (netif_msg_pktdata(adapter)) | ||
| 2086 | dev_info(&adapter->pdev->dev, "tx locked\n"); | ||
| 2087 | return NETDEV_TX_LOCKED; | ||
| 2088 | } | ||
| 2089 | if (skb->mark == 0x01) | ||
| 2090 | type = atl1c_trans_high; | ||
| 2091 | else | ||
| 2092 | type = atl1c_trans_normal; | ||
| 2093 | |||
| 2094 | if (atl1c_tpd_avail(adapter, type) < tpd_req) { | ||
| 2095 | /* no enough descriptor, just stop queue */ | ||
| 2096 | netif_stop_queue(netdev); | ||
| 2097 | spin_unlock_irqrestore(&adapter->tx_lock, flags); | ||
| 2098 | return NETDEV_TX_BUSY; | ||
| 2099 | } | ||
| 2100 | |||
| 2101 | tpd = atl1c_get_tpd(adapter, type); | ||
| 2102 | |||
| 2103 | /* do TSO and check sum */ | ||
| 2104 | if (atl1c_tso_csum(adapter, skb, &tpd, type) != 0) { | ||
| 2105 | spin_unlock_irqrestore(&adapter->tx_lock, flags); | ||
| 2106 | dev_kfree_skb_any(skb); | ||
| 2107 | return NETDEV_TX_OK; | ||
| 2108 | } | ||
| 2109 | |||
| 2110 | if (unlikely(adapter->vlgrp && vlan_tx_tag_present(skb))) { | ||
| 2111 | u16 vlan = vlan_tx_tag_get(skb); | ||
| 2112 | __le16 tag; | ||
| 2113 | |||
| 2114 | vlan = cpu_to_le16(vlan); | ||
| 2115 | AT_VLAN_TO_TAG(vlan, tag); | ||
| 2116 | tpd->word1 |= 1 << TPD_INS_VTAG_SHIFT; | ||
| 2117 | tpd->vlan_tag = tag; | ||
| 2118 | } | ||
| 2119 | |||
| 2120 | if (skb_network_offset(skb) != ETH_HLEN) | ||
| 2121 | tpd->word1 |= 1 << TPD_ETH_TYPE_SHIFT; /* Ethernet frame */ | ||
| 2122 | |||
| 2123 | atl1c_tx_map(adapter, skb, tpd, type); | ||
| 2124 | atl1c_tx_queue(adapter, skb, tpd, type); | ||
| 2125 | |||
| 2126 | netdev->trans_start = jiffies; | ||
| 2127 | spin_unlock_irqrestore(&adapter->tx_lock, flags); | ||
| 2128 | return NETDEV_TX_OK; | ||
| 2129 | } | ||
| 2130 | |||
| 2131 | static void atl1c_free_irq(struct atl1c_adapter *adapter) | ||
| 2132 | { | ||
| 2133 | struct net_device *netdev = adapter->netdev; | ||
| 2134 | |||
| 2135 | free_irq(adapter->pdev->irq, netdev); | ||
| 2136 | |||
| 2137 | if (adapter->have_msi) | ||
| 2138 | pci_disable_msi(adapter->pdev); | ||
| 2139 | } | ||
| 2140 | |||
| 2141 | static int atl1c_request_irq(struct atl1c_adapter *adapter) | ||
| 2142 | { | ||
| 2143 | struct pci_dev *pdev = adapter->pdev; | ||
| 2144 | struct net_device *netdev = adapter->netdev; | ||
| 2145 | int flags = 0; | ||
| 2146 | int err = 0; | ||
| 2147 | |||
| 2148 | adapter->have_msi = true; | ||
| 2149 | err = pci_enable_msi(adapter->pdev); | ||
| 2150 | if (err) { | ||
| 2151 | if (netif_msg_ifup(adapter)) | ||
| 2152 | dev_err(&pdev->dev, | ||
| 2153 | "Unable to allocate MSI interrupt Error: %d\n", | ||
| 2154 | err); | ||
| 2155 | adapter->have_msi = false; | ||
| 2156 | } else | ||
| 2157 | netdev->irq = pdev->irq; | ||
| 2158 | |||
| 2159 | if (!adapter->have_msi) | ||
| 2160 | flags |= IRQF_SHARED; | ||
| 2161 | err = request_irq(adapter->pdev->irq, &atl1c_intr, flags, | ||
| 2162 | netdev->name, netdev); | ||
| 2163 | if (err) { | ||
| 2164 | if (netif_msg_ifup(adapter)) | ||
| 2165 | dev_err(&pdev->dev, | ||
| 2166 | "Unable to allocate interrupt Error: %d\n", | ||
| 2167 | err); | ||
| 2168 | if (adapter->have_msi) | ||
| 2169 | pci_disable_msi(adapter->pdev); | ||
| 2170 | return err; | ||
| 2171 | } | ||
| 2172 | if (netif_msg_ifup(adapter)) | ||
| 2173 | dev_dbg(&pdev->dev, "atl1c_request_irq OK\n"); | ||
| 2174 | return err; | ||
| 2175 | } | ||
| 2176 | |||
| 2177 | int atl1c_up(struct atl1c_adapter *adapter) | ||
| 2178 | { | ||
| 2179 | struct net_device *netdev = adapter->netdev; | ||
| 2180 | int num; | ||
| 2181 | int err; | ||
| 2182 | int i; | ||
| 2183 | |||
| 2184 | netif_carrier_off(netdev); | ||
| 2185 | atl1c_init_ring_ptrs(adapter); | ||
| 2186 | atl1c_set_multi(netdev); | ||
| 2187 | atl1c_restore_vlan(adapter); | ||
| 2188 | |||
| 2189 | for (i = 0; i < adapter->num_rx_queues; i++) { | ||
| 2190 | num = atl1c_alloc_rx_buffer(adapter, i); | ||
| 2191 | if (unlikely(num == 0)) { | ||
| 2192 | err = -ENOMEM; | ||
| 2193 | goto err_alloc_rx; | ||
| 2194 | } | ||
| 2195 | } | ||
| 2196 | |||
| 2197 | if (atl1c_configure(adapter)) { | ||
| 2198 | err = -EIO; | ||
| 2199 | goto err_up; | ||
| 2200 | } | ||
| 2201 | |||
| 2202 | err = atl1c_request_irq(adapter); | ||
| 2203 | if (unlikely(err)) | ||
| 2204 | goto err_up; | ||
| 2205 | |||
| 2206 | clear_bit(__AT_DOWN, &adapter->flags); | ||
| 2207 | napi_enable(&adapter->napi); | ||
| 2208 | atl1c_irq_enable(adapter); | ||
| 2209 | atl1c_check_link_status(adapter); | ||
| 2210 | netif_start_queue(netdev); | ||
| 2211 | return err; | ||
| 2212 | |||
| 2213 | err_up: | ||
| 2214 | err_alloc_rx: | ||
| 2215 | atl1c_clean_rx_ring(adapter); | ||
| 2216 | return err; | ||
| 2217 | } | ||
| 2218 | |||
| 2219 | void atl1c_down(struct atl1c_adapter *adapter) | ||
| 2220 | { | ||
| 2221 | struct net_device *netdev = adapter->netdev; | ||
| 2222 | |||
| 2223 | atl1c_del_timer(adapter); | ||
| 2224 | atl1c_cancel_work(adapter); | ||
| 2225 | |||
| 2226 | /* signal that we're down so the interrupt handler does not | ||
| 2227 | * reschedule our watchdog timer */ | ||
| 2228 | set_bit(__AT_DOWN, &adapter->flags); | ||
| 2229 | netif_carrier_off(netdev); | ||
| 2230 | napi_disable(&adapter->napi); | ||
| 2231 | atl1c_irq_disable(adapter); | ||
| 2232 | atl1c_free_irq(adapter); | ||
| 2233 | AT_WRITE_REG(&adapter->hw, REG_ISR, ISR_DIS_INT); | ||
| 2234 | /* reset MAC to disable all RX/TX */ | ||
| 2235 | atl1c_reset_mac(&adapter->hw); | ||
| 2236 | msleep(1); | ||
| 2237 | |||
| 2238 | adapter->link_speed = SPEED_0; | ||
| 2239 | adapter->link_duplex = -1; | ||
| 2240 | atl1c_clean_tx_ring(adapter, atl1c_trans_normal); | ||
| 2241 | atl1c_clean_tx_ring(adapter, atl1c_trans_high); | ||
| 2242 | atl1c_clean_rx_ring(adapter); | ||
| 2243 | } | ||
| 2244 | |||
| 2245 | /* | ||
| 2246 | * atl1c_open - Called when a network interface is made active | ||
| 2247 | * @netdev: network interface device structure | ||
| 2248 | * | ||
| 2249 | * Returns 0 on success, negative value on failure | ||
| 2250 | * | ||
| 2251 | * The open entry point is called when a network interface is made | ||
| 2252 | * active by the system (IFF_UP). At this point all resources needed | ||
| 2253 | * for transmit and receive operations are allocated, the interrupt | ||
| 2254 | * handler is registered with the OS, the watchdog timer is started, | ||
| 2255 | * and the stack is notified that the interface is ready. | ||
| 2256 | */ | ||
| 2257 | static int atl1c_open(struct net_device *netdev) | ||
| 2258 | { | ||
| 2259 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 2260 | int err; | ||
| 2261 | |||
| 2262 | /* disallow open during test */ | ||
| 2263 | if (test_bit(__AT_TESTING, &adapter->flags)) | ||
| 2264 | return -EBUSY; | ||
| 2265 | |||
| 2266 | /* allocate rx/tx dma buffer & descriptors */ | ||
| 2267 | err = atl1c_setup_ring_resources(adapter); | ||
| 2268 | if (unlikely(err)) | ||
| 2269 | return err; | ||
| 2270 | |||
| 2271 | err = atl1c_up(adapter); | ||
| 2272 | if (unlikely(err)) | ||
| 2273 | goto err_up; | ||
| 2274 | |||
| 2275 | if (adapter->hw.ctrl_flags & ATL1C_FPGA_VERSION) { | ||
| 2276 | u32 phy_data; | ||
| 2277 | |||
| 2278 | AT_READ_REG(&adapter->hw, REG_MDIO_CTRL, &phy_data); | ||
| 2279 | phy_data |= MDIO_AP_EN; | ||
| 2280 | AT_WRITE_REG(&adapter->hw, REG_MDIO_CTRL, phy_data); | ||
| 2281 | } | ||
| 2282 | return 0; | ||
| 2283 | |||
| 2284 | err_up: | ||
| 2285 | atl1c_free_irq(adapter); | ||
| 2286 | atl1c_free_ring_resources(adapter); | ||
| 2287 | atl1c_reset_mac(&adapter->hw); | ||
| 2288 | return err; | ||
| 2289 | } | ||
| 2290 | |||
| 2291 | /* | ||
| 2292 | * atl1c_close - Disables a network interface | ||
| 2293 | * @netdev: network interface device structure | ||
| 2294 | * | ||
| 2295 | * Returns 0, this is not allowed to fail | ||
| 2296 | * | ||
| 2297 | * The close entry point is called when an interface is de-activated | ||
| 2298 | * by the OS. The hardware is still under the drivers control, but | ||
| 2299 | * needs to be disabled. A global MAC reset is issued to stop the | ||
| 2300 | * hardware, and all transmit and receive resources are freed. | ||
| 2301 | */ | ||
| 2302 | static int atl1c_close(struct net_device *netdev) | ||
| 2303 | { | ||
| 2304 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 2305 | |||
| 2306 | WARN_ON(test_bit(__AT_RESETTING, &adapter->flags)); | ||
| 2307 | atl1c_down(adapter); | ||
| 2308 | atl1c_free_ring_resources(adapter); | ||
| 2309 | return 0; | ||
| 2310 | } | ||
| 2311 | |||
| 2312 | static int atl1c_suspend(struct pci_dev *pdev, pm_message_t state) | ||
| 2313 | { | ||
| 2314 | struct net_device *netdev = pci_get_drvdata(pdev); | ||
| 2315 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 2316 | struct atl1c_hw *hw = &adapter->hw; | ||
| 2317 | u32 ctrl; | ||
| 2318 | u32 mac_ctrl_data; | ||
| 2319 | u32 master_ctrl_data; | ||
| 2320 | u32 wol_ctrl_data; | ||
| 2321 | u16 mii_bmsr_data; | ||
| 2322 | u16 save_autoneg_advertised; | ||
| 2323 | u16 mii_intr_status_data; | ||
| 2324 | u32 wufc = adapter->wol; | ||
| 2325 | u32 i; | ||
| 2326 | int retval = 0; | ||
| 2327 | |||
| 2328 | if (netif_running(netdev)) { | ||
| 2329 | WARN_ON(test_bit(__AT_RESETTING, &adapter->flags)); | ||
| 2330 | atl1c_down(adapter); | ||
| 2331 | } | ||
| 2332 | netif_device_detach(netdev); | ||
| 2333 | atl1c_disable_l0s_l1(hw); | ||
| 2334 | retval = pci_save_state(pdev); | ||
| 2335 | if (retval) | ||
| 2336 | return retval; | ||
| 2337 | if (wufc) { | ||
| 2338 | AT_READ_REG(hw, REG_MASTER_CTRL, &master_ctrl_data); | ||
| 2339 | master_ctrl_data &= ~MASTER_CTRL_CLK_SEL_DIS; | ||
| 2340 | |||
| 2341 | /* get link status */ | ||
| 2342 | atl1c_read_phy_reg(hw, MII_BMSR, (u16 *)&mii_bmsr_data); | ||
| 2343 | atl1c_read_phy_reg(hw, MII_BMSR, (u16 *)&mii_bmsr_data); | ||
| 2344 | save_autoneg_advertised = hw->autoneg_advertised; | ||
| 2345 | hw->autoneg_advertised = ADVERTISED_10baseT_Half; | ||
| 2346 | if (atl1c_restart_autoneg(hw) != 0) | ||
| 2347 | if (netif_msg_link(adapter)) | ||
| 2348 | dev_warn(&pdev->dev, "phy autoneg failed\n"); | ||
| 2349 | hw->phy_configured = false; /* re-init PHY when resume */ | ||
| 2350 | hw->autoneg_advertised = save_autoneg_advertised; | ||
| 2351 | /* turn on magic packet wol */ | ||
| 2352 | if (wufc & AT_WUFC_MAG) | ||
| 2353 | wol_ctrl_data = WOL_MAGIC_EN | WOL_MAGIC_PME_EN; | ||
| 2354 | |||
| 2355 | if (wufc & AT_WUFC_LNKC) { | ||
| 2356 | for (i = 0; i < AT_SUSPEND_LINK_TIMEOUT; i++) { | ||
| 2357 | msleep(100); | ||
| 2358 | atl1c_read_phy_reg(hw, MII_BMSR, | ||
| 2359 | (u16 *)&mii_bmsr_data); | ||
| 2360 | if (mii_bmsr_data & BMSR_LSTATUS) | ||
| 2361 | break; | ||
| 2362 | } | ||
| 2363 | if ((mii_bmsr_data & BMSR_LSTATUS) == 0) | ||
| 2364 | if (netif_msg_link(adapter)) | ||
| 2365 | dev_warn(&pdev->dev, | ||
| 2366 | "%s: Link may change" | ||
| 2367 | "when suspend\n", | ||
| 2368 | atl1c_driver_name); | ||
| 2369 | wol_ctrl_data |= WOL_LINK_CHG_EN | WOL_LINK_CHG_PME_EN; | ||
| 2370 | /* only link up can wake up */ | ||
| 2371 | if (atl1c_write_phy_reg(hw, MII_IER, IER_LINK_UP) != 0) { | ||
| 2372 | if (netif_msg_link(adapter)) | ||
| 2373 | dev_err(&pdev->dev, | ||
| 2374 | "%s: read write phy " | ||
| 2375 | "register failed.\n", | ||
| 2376 | atl1c_driver_name); | ||
| 2377 | goto wol_dis; | ||
| 2378 | } | ||
| 2379 | } | ||
| 2380 | /* clear phy interrupt */ | ||
| 2381 | atl1c_read_phy_reg(hw, MII_ISR, &mii_intr_status_data); | ||
| 2382 | /* Config MAC Ctrl register */ | ||
| 2383 | mac_ctrl_data = MAC_CTRL_RX_EN; | ||
| 2384 | /* set to 10/100M halt duplex */ | ||
| 2385 | mac_ctrl_data |= atl1c_mac_speed_10_100 << MAC_CTRL_SPEED_SHIFT; | ||
| 2386 | mac_ctrl_data |= (((u32)adapter->hw.preamble_len & | ||
| 2387 | MAC_CTRL_PRMLEN_MASK) << | ||
| 2388 | MAC_CTRL_PRMLEN_SHIFT); | ||
| 2389 | |||
| 2390 | if (adapter->vlgrp) | ||
| 2391 | mac_ctrl_data |= MAC_CTRL_RMV_VLAN; | ||
| 2392 | |||
| 2393 | /* magic packet maybe Broadcast&multicast&Unicast frame */ | ||
| 2394 | if (wufc & AT_WUFC_MAG) | ||
| 2395 | mac_ctrl_data |= MAC_CTRL_BC_EN; | ||
| 2396 | |||
| 2397 | if (netif_msg_hw(adapter)) | ||
| 2398 | dev_dbg(&pdev->dev, | ||
| 2399 | "%s: suspend MAC=0x%x\n", | ||
| 2400 | atl1c_driver_name, mac_ctrl_data); | ||
| 2401 | AT_WRITE_REG(hw, REG_MASTER_CTRL, master_ctrl_data); | ||
| 2402 | AT_WRITE_REG(hw, REG_WOL_CTRL, wol_ctrl_data); | ||
| 2403 | AT_WRITE_REG(hw, REG_MAC_CTRL, mac_ctrl_data); | ||
| 2404 | |||
| 2405 | /* pcie patch */ | ||
| 2406 | AT_READ_REG(hw, REG_PCIE_PHYMISC, &ctrl); | ||
| 2407 | ctrl |= PCIE_PHYMISC_FORCE_RCV_DET; | ||
| 2408 | AT_WRITE_REG(hw, REG_PCIE_PHYMISC, ctrl); | ||
| 2409 | |||
| 2410 | pci_enable_wake(pdev, pci_choose_state(pdev, state), 1); | ||
| 2411 | goto suspend_exit; | ||
| 2412 | } | ||
| 2413 | wol_dis: | ||
| 2414 | |||
| 2415 | /* WOL disabled */ | ||
| 2416 | AT_WRITE_REG(hw, REG_WOL_CTRL, 0); | ||
| 2417 | |||
| 2418 | /* pcie patch */ | ||
| 2419 | AT_READ_REG(hw, REG_PCIE_PHYMISC, &ctrl); | ||
| 2420 | ctrl |= PCIE_PHYMISC_FORCE_RCV_DET; | ||
| 2421 | AT_WRITE_REG(hw, REG_PCIE_PHYMISC, ctrl); | ||
| 2422 | |||
| 2423 | atl1c_phy_disable(hw); | ||
| 2424 | hw->phy_configured = false; /* re-init PHY when resume */ | ||
| 2425 | |||
| 2426 | pci_enable_wake(pdev, pci_choose_state(pdev, state), 0); | ||
| 2427 | suspend_exit: | ||
| 2428 | |||
| 2429 | pci_disable_device(pdev); | ||
| 2430 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); | ||
| 2431 | |||
| 2432 | return 0; | ||
| 2433 | } | ||
| 2434 | |||
| 2435 | static int atl1c_resume(struct pci_dev *pdev) | ||
| 2436 | { | ||
| 2437 | struct net_device *netdev = pci_get_drvdata(pdev); | ||
| 2438 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 2439 | |||
| 2440 | pci_set_power_state(pdev, PCI_D0); | ||
| 2441 | pci_restore_state(pdev); | ||
| 2442 | pci_enable_wake(pdev, PCI_D3hot, 0); | ||
| 2443 | pci_enable_wake(pdev, PCI_D3cold, 0); | ||
| 2444 | |||
| 2445 | AT_WRITE_REG(&adapter->hw, REG_WOL_CTRL, 0); | ||
| 2446 | |||
| 2447 | atl1c_phy_reset(&adapter->hw); | ||
| 2448 | atl1c_reset_mac(&adapter->hw); | ||
| 2449 | netif_device_attach(netdev); | ||
| 2450 | if (netif_running(netdev)) | ||
| 2451 | atl1c_up(adapter); | ||
| 2452 | |||
| 2453 | return 0; | ||
| 2454 | } | ||
| 2455 | |||
| 2456 | static void atl1c_shutdown(struct pci_dev *pdev) | ||
| 2457 | { | ||
| 2458 | atl1c_suspend(pdev, PMSG_SUSPEND); | ||
| 2459 | } | ||
| 2460 | |||
| 2461 | static const struct net_device_ops atl1c_netdev_ops = { | ||
| 2462 | .ndo_open = atl1c_open, | ||
| 2463 | .ndo_stop = atl1c_close, | ||
| 2464 | .ndo_validate_addr = eth_validate_addr, | ||
| 2465 | .ndo_start_xmit = atl1c_xmit_frame, | ||
| 2466 | .ndo_set_mac_address = atl1c_set_mac_addr, | ||
| 2467 | .ndo_set_multicast_list = atl1c_set_multi, | ||
| 2468 | .ndo_change_mtu = atl1c_change_mtu, | ||
| 2469 | .ndo_do_ioctl = atl1c_ioctl, | ||
| 2470 | .ndo_tx_timeout = atl1c_tx_timeout, | ||
| 2471 | .ndo_get_stats = atl1c_get_stats, | ||
| 2472 | .ndo_vlan_rx_register = atl1c_vlan_rx_register, | ||
| 2473 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 2474 | .ndo_poll_controller = atl1c_netpoll, | ||
| 2475 | #endif | ||
| 2476 | }; | ||
| 2477 | |||
| 2478 | static int atl1c_init_netdev(struct net_device *netdev, struct pci_dev *pdev) | ||
| 2479 | { | ||
| 2480 | SET_NETDEV_DEV(netdev, &pdev->dev); | ||
| 2481 | pci_set_drvdata(pdev, netdev); | ||
| 2482 | |||
| 2483 | netdev->irq = pdev->irq; | ||
| 2484 | netdev->netdev_ops = &atl1c_netdev_ops; | ||
| 2485 | netdev->watchdog_timeo = AT_TX_WATCHDOG; | ||
| 2486 | atl1c_set_ethtool_ops(netdev); | ||
| 2487 | |||
| 2488 | /* TODO: add when ready */ | ||
| 2489 | netdev->features = NETIF_F_SG | | ||
| 2490 | NETIF_F_HW_CSUM | | ||
| 2491 | NETIF_F_HW_VLAN_TX | | ||
| 2492 | NETIF_F_HW_VLAN_RX | | ||
| 2493 | NETIF_F_TSO | | ||
| 2494 | NETIF_F_TSO6; | ||
| 2495 | return 0; | ||
| 2496 | } | ||
| 2497 | |||
| 2498 | /* | ||
| 2499 | * atl1c_probe - Device Initialization Routine | ||
| 2500 | * @pdev: PCI device information struct | ||
| 2501 | * @ent: entry in atl1c_pci_tbl | ||
| 2502 | * | ||
| 2503 | * Returns 0 on success, negative on failure | ||
| 2504 | * | ||
| 2505 | * atl1c_probe initializes an adapter identified by a pci_dev structure. | ||
| 2506 | * The OS initialization, configuring of the adapter private structure, | ||
| 2507 | * and a hardware reset occur. | ||
| 2508 | */ | ||
| 2509 | static int __devinit atl1c_probe(struct pci_dev *pdev, | ||
| 2510 | const struct pci_device_id *ent) | ||
| 2511 | { | ||
| 2512 | struct net_device *netdev; | ||
| 2513 | struct atl1c_adapter *adapter; | ||
| 2514 | static int cards_found; | ||
| 2515 | |||
| 2516 | int err = 0; | ||
| 2517 | |||
| 2518 | /* enable device (incl. PCI PM wakeup and hotplug setup) */ | ||
| 2519 | err = pci_enable_device_mem(pdev); | ||
| 2520 | if (err) { | ||
| 2521 | dev_err(&pdev->dev, "cannot enable PCI device\n"); | ||
| 2522 | return err; | ||
| 2523 | } | ||
| 2524 | |||
| 2525 | /* | ||
| 2526 | * The atl1c chip can DMA to 64-bit addresses, but it uses a single | ||
| 2527 | * shared register for the high 32 bits, so only a single, aligned, | ||
| 2528 | * 4 GB physical address range can be used at a time. | ||
| 2529 | * | ||
| 2530 | * Supporting 64-bit DMA on this hardware is more trouble than it's | ||
| 2531 | * worth. It is far easier to limit to 32-bit DMA than update | ||
| 2532 | * various kernel subsystems to support the mechanics required by a | ||
| 2533 | * fixed-high-32-bit system. | ||
| 2534 | */ | ||
| 2535 | if ((pci_set_dma_mask(pdev, DMA_32BIT_MASK) != 0) || | ||
| 2536 | (pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK) != 0)) { | ||
| 2537 | dev_err(&pdev->dev, "No usable DMA configuration,aborting\n"); | ||
| 2538 | goto err_dma; | ||
| 2539 | } | ||
| 2540 | |||
| 2541 | err = pci_request_regions(pdev, atl1c_driver_name); | ||
| 2542 | if (err) { | ||
| 2543 | dev_err(&pdev->dev, "cannot obtain PCI resources\n"); | ||
| 2544 | goto err_pci_reg; | ||
| 2545 | } | ||
| 2546 | |||
| 2547 | pci_set_master(pdev); | ||
| 2548 | |||
| 2549 | netdev = alloc_etherdev(sizeof(struct atl1c_adapter)); | ||
| 2550 | if (netdev == NULL) { | ||
| 2551 | err = -ENOMEM; | ||
| 2552 | dev_err(&pdev->dev, "etherdev alloc failed\n"); | ||
| 2553 | goto err_alloc_etherdev; | ||
| 2554 | } | ||
| 2555 | |||
| 2556 | err = atl1c_init_netdev(netdev, pdev); | ||
| 2557 | if (err) { | ||
| 2558 | dev_err(&pdev->dev, "init netdevice failed\n"); | ||
| 2559 | goto err_init_netdev; | ||
| 2560 | } | ||
| 2561 | adapter = netdev_priv(netdev); | ||
| 2562 | adapter->bd_number = cards_found; | ||
| 2563 | adapter->netdev = netdev; | ||
| 2564 | adapter->pdev = pdev; | ||
| 2565 | adapter->hw.adapter = adapter; | ||
| 2566 | adapter->msg_enable = netif_msg_init(-1, atl1c_default_msg); | ||
| 2567 | adapter->hw.hw_addr = ioremap(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0)); | ||
| 2568 | if (!adapter->hw.hw_addr) { | ||
| 2569 | err = -EIO; | ||
| 2570 | dev_err(&pdev->dev, "cannot map device registers\n"); | ||
| 2571 | goto err_ioremap; | ||
| 2572 | } | ||
| 2573 | netdev->base_addr = (unsigned long)adapter->hw.hw_addr; | ||
| 2574 | |||
| 2575 | /* init mii data */ | ||
| 2576 | adapter->mii.dev = netdev; | ||
| 2577 | adapter->mii.mdio_read = atl1c_mdio_read; | ||
| 2578 | adapter->mii.mdio_write = atl1c_mdio_write; | ||
| 2579 | adapter->mii.phy_id_mask = 0x1f; | ||
| 2580 | adapter->mii.reg_num_mask = MDIO_REG_ADDR_MASK; | ||
| 2581 | netif_napi_add(netdev, &adapter->napi, atl1c_clean, 64); | ||
| 2582 | setup_timer(&adapter->phy_config_timer, atl1c_phy_config, | ||
| 2583 | (unsigned long)adapter); | ||
| 2584 | /* setup the private structure */ | ||
| 2585 | err = atl1c_sw_init(adapter); | ||
| 2586 | if (err) { | ||
| 2587 | dev_err(&pdev->dev, "net device private data init failed\n"); | ||
| 2588 | goto err_sw_init; | ||
| 2589 | } | ||
| 2590 | atl1c_reset_pcie(&adapter->hw, ATL1C_PCIE_L0S_L1_DISABLE | | ||
| 2591 | ATL1C_PCIE_PHY_RESET); | ||
| 2592 | |||
| 2593 | /* Init GPHY as early as possible due to power saving issue */ | ||
| 2594 | atl1c_phy_reset(&adapter->hw); | ||
| 2595 | |||
| 2596 | err = atl1c_reset_mac(&adapter->hw); | ||
| 2597 | if (err) { | ||
| 2598 | err = -EIO; | ||
| 2599 | goto err_reset; | ||
| 2600 | } | ||
| 2601 | |||
| 2602 | device_init_wakeup(&pdev->dev, 1); | ||
| 2603 | /* reset the controller to | ||
| 2604 | * put the device in a known good starting state */ | ||
| 2605 | err = atl1c_phy_init(&adapter->hw); | ||
| 2606 | if (err) { | ||
| 2607 | err = -EIO; | ||
| 2608 | goto err_reset; | ||
| 2609 | } | ||
| 2610 | if (atl1c_read_mac_addr(&adapter->hw) != 0) { | ||
| 2611 | err = -EIO; | ||
| 2612 | dev_err(&pdev->dev, "get mac address failed\n"); | ||
| 2613 | goto err_eeprom; | ||
| 2614 | } | ||
| 2615 | memcpy(netdev->dev_addr, adapter->hw.mac_addr, netdev->addr_len); | ||
| 2616 | memcpy(netdev->perm_addr, adapter->hw.mac_addr, netdev->addr_len); | ||
| 2617 | if (netif_msg_probe(adapter)) | ||
| 2618 | dev_dbg(&pdev->dev, | ||
| 2619 | "mac address : %02x-%02x-%02x-%02x-%02x-%02x\n", | ||
| 2620 | adapter->hw.mac_addr[0], adapter->hw.mac_addr[1], | ||
| 2621 | adapter->hw.mac_addr[2], adapter->hw.mac_addr[3], | ||
| 2622 | adapter->hw.mac_addr[4], adapter->hw.mac_addr[5]); | ||
| 2623 | |||
| 2624 | atl1c_hw_set_mac_addr(&adapter->hw); | ||
| 2625 | INIT_WORK(&adapter->reset_task, atl1c_reset_task); | ||
| 2626 | INIT_WORK(&adapter->link_chg_task, atl1c_link_chg_task); | ||
| 2627 | err = register_netdev(netdev); | ||
| 2628 | if (err) { | ||
| 2629 | dev_err(&pdev->dev, "register netdevice failed\n"); | ||
| 2630 | goto err_register; | ||
| 2631 | } | ||
| 2632 | |||
| 2633 | if (netif_msg_probe(adapter)) | ||
| 2634 | dev_info(&pdev->dev, "version %s\n", ATL1C_DRV_VERSION); | ||
| 2635 | cards_found++; | ||
| 2636 | return 0; | ||
| 2637 | |||
| 2638 | err_reset: | ||
| 2639 | err_register: | ||
| 2640 | err_sw_init: | ||
| 2641 | err_eeprom: | ||
| 2642 | iounmap(adapter->hw.hw_addr); | ||
| 2643 | err_init_netdev: | ||
| 2644 | err_ioremap: | ||
| 2645 | free_netdev(netdev); | ||
| 2646 | err_alloc_etherdev: | ||
| 2647 | pci_release_regions(pdev); | ||
| 2648 | err_pci_reg: | ||
| 2649 | err_dma: | ||
| 2650 | pci_disable_device(pdev); | ||
| 2651 | return err; | ||
| 2652 | } | ||
| 2653 | |||
| 2654 | /* | ||
| 2655 | * atl1c_remove - Device Removal Routine | ||
| 2656 | * @pdev: PCI device information struct | ||
| 2657 | * | ||
| 2658 | * atl1c_remove is called by the PCI subsystem to alert the driver | ||
| 2659 | * that it should release a PCI device. The could be caused by a | ||
| 2660 | * Hot-Plug event, or because the driver is going to be removed from | ||
| 2661 | * memory. | ||
| 2662 | */ | ||
| 2663 | static void __devexit atl1c_remove(struct pci_dev *pdev) | ||
| 2664 | { | ||
| 2665 | struct net_device *netdev = pci_get_drvdata(pdev); | ||
| 2666 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 2667 | |||
| 2668 | unregister_netdev(netdev); | ||
| 2669 | atl1c_phy_disable(&adapter->hw); | ||
| 2670 | |||
| 2671 | iounmap(adapter->hw.hw_addr); | ||
| 2672 | |||
| 2673 | pci_release_regions(pdev); | ||
| 2674 | pci_disable_device(pdev); | ||
| 2675 | free_netdev(netdev); | ||
| 2676 | } | ||
| 2677 | |||
| 2678 | /* | ||
| 2679 | * atl1c_io_error_detected - called when PCI error is detected | ||
| 2680 | * @pdev: Pointer to PCI device | ||
| 2681 | * @state: The current pci connection state | ||
| 2682 | * | ||
| 2683 | * This function is called after a PCI bus error affecting | ||
| 2684 | * this device has been detected. | ||
| 2685 | */ | ||
| 2686 | static pci_ers_result_t atl1c_io_error_detected(struct pci_dev *pdev, | ||
| 2687 | pci_channel_state_t state) | ||
| 2688 | { | ||
| 2689 | struct net_device *netdev = pci_get_drvdata(pdev); | ||
| 2690 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 2691 | |||
| 2692 | netif_device_detach(netdev); | ||
| 2693 | |||
| 2694 | if (netif_running(netdev)) | ||
| 2695 | atl1c_down(adapter); | ||
| 2696 | |||
| 2697 | pci_disable_device(pdev); | ||
| 2698 | |||
| 2699 | /* Request a slot slot reset. */ | ||
| 2700 | return PCI_ERS_RESULT_NEED_RESET; | ||
| 2701 | } | ||
| 2702 | |||
| 2703 | /* | ||
| 2704 | * atl1c_io_slot_reset - called after the pci bus has been reset. | ||
| 2705 | * @pdev: Pointer to PCI device | ||
| 2706 | * | ||
| 2707 | * Restart the card from scratch, as if from a cold-boot. Implementation | ||
| 2708 | * resembles the first-half of the e1000_resume routine. | ||
| 2709 | */ | ||
| 2710 | static pci_ers_result_t atl1c_io_slot_reset(struct pci_dev *pdev) | ||
| 2711 | { | ||
| 2712 | struct net_device *netdev = pci_get_drvdata(pdev); | ||
| 2713 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 2714 | |||
| 2715 | if (pci_enable_device(pdev)) { | ||
| 2716 | if (netif_msg_hw(adapter)) | ||
| 2717 | dev_err(&pdev->dev, | ||
| 2718 | "Cannot re-enable PCI device after reset\n"); | ||
| 2719 | return PCI_ERS_RESULT_DISCONNECT; | ||
| 2720 | } | ||
| 2721 | pci_set_master(pdev); | ||
| 2722 | |||
| 2723 | pci_enable_wake(pdev, PCI_D3hot, 0); | ||
| 2724 | pci_enable_wake(pdev, PCI_D3cold, 0); | ||
| 2725 | |||
| 2726 | atl1c_reset_mac(&adapter->hw); | ||
| 2727 | |||
| 2728 | return PCI_ERS_RESULT_RECOVERED; | ||
| 2729 | } | ||
| 2730 | |||
| 2731 | /* | ||
| 2732 | * atl1c_io_resume - called when traffic can start flowing again. | ||
| 2733 | * @pdev: Pointer to PCI device | ||
| 2734 | * | ||
| 2735 | * This callback is called when the error recovery driver tells us that | ||
| 2736 | * its OK to resume normal operation. Implementation resembles the | ||
| 2737 | * second-half of the atl1c_resume routine. | ||
| 2738 | */ | ||
| 2739 | static void atl1c_io_resume(struct pci_dev *pdev) | ||
| 2740 | { | ||
| 2741 | struct net_device *netdev = pci_get_drvdata(pdev); | ||
| 2742 | struct atl1c_adapter *adapter = netdev_priv(netdev); | ||
| 2743 | |||
| 2744 | if (netif_running(netdev)) { | ||
| 2745 | if (atl1c_up(adapter)) { | ||
| 2746 | if (netif_msg_hw(adapter)) | ||
| 2747 | dev_err(&pdev->dev, | ||
| 2748 | "Cannot bring device back up after reset\n"); | ||
| 2749 | return; | ||
| 2750 | } | ||
| 2751 | } | ||
| 2752 | |||
| 2753 | netif_device_attach(netdev); | ||
| 2754 | } | ||
| 2755 | |||
| 2756 | static struct pci_error_handlers atl1c_err_handler = { | ||
| 2757 | .error_detected = atl1c_io_error_detected, | ||
| 2758 | .slot_reset = atl1c_io_slot_reset, | ||
| 2759 | .resume = atl1c_io_resume, | ||
| 2760 | }; | ||
| 2761 | |||
| 2762 | static struct pci_driver atl1c_driver = { | ||
| 2763 | .name = atl1c_driver_name, | ||
| 2764 | .id_table = atl1c_pci_tbl, | ||
| 2765 | .probe = atl1c_probe, | ||
| 2766 | .remove = __devexit_p(atl1c_remove), | ||
| 2767 | /* Power Managment Hooks */ | ||
| 2768 | .suspend = atl1c_suspend, | ||
| 2769 | .resume = atl1c_resume, | ||
| 2770 | .shutdown = atl1c_shutdown, | ||
| 2771 | .err_handler = &atl1c_err_handler | ||
| 2772 | }; | ||
| 2773 | |||
| 2774 | /* | ||
| 2775 | * atl1c_init_module - Driver Registration Routine | ||
| 2776 | * | ||
| 2777 | * atl1c_init_module is the first routine called when the driver is | ||
| 2778 | * loaded. All it does is register with the PCI subsystem. | ||
| 2779 | */ | ||
| 2780 | static int __init atl1c_init_module(void) | ||
| 2781 | { | ||
| 2782 | return pci_register_driver(&atl1c_driver); | ||
| 2783 | } | ||
| 2784 | |||
| 2785 | /* | ||
| 2786 | * atl1c_exit_module - Driver Exit Cleanup Routine | ||
| 2787 | * | ||
| 2788 | * atl1c_exit_module is called just before the driver is removed | ||
| 2789 | * from memory. | ||
| 2790 | */ | ||
| 2791 | static void __exit atl1c_exit_module(void) | ||
| 2792 | { | ||
| 2793 | pci_unregister_driver(&atl1c_driver); | ||
| 2794 | } | ||
| 2795 | |||
| 2796 | module_init(atl1c_init_module); | ||
| 2797 | module_exit(atl1c_exit_module); | ||
diff --git a/drivers/net/b44.c b/drivers/net/b44.c index c38512ebcea6..dc5f051005fa 100644 --- a/drivers/net/b44.c +++ b/drivers/net/b44.c | |||
| @@ -1264,8 +1264,14 @@ static void b44_clear_stats(struct b44 *bp) | |||
| 1264 | static void b44_chip_reset(struct b44 *bp, int reset_kind) | 1264 | static void b44_chip_reset(struct b44 *bp, int reset_kind) |
| 1265 | { | 1265 | { |
| 1266 | struct ssb_device *sdev = bp->sdev; | 1266 | struct ssb_device *sdev = bp->sdev; |
| 1267 | bool was_enabled; | ||
| 1267 | 1268 | ||
| 1268 | if (ssb_device_is_enabled(bp->sdev)) { | 1269 | was_enabled = ssb_device_is_enabled(bp->sdev); |
| 1270 | |||
| 1271 | ssb_device_enable(bp->sdev, 0); | ||
| 1272 | ssb_pcicore_dev_irqvecs_enable(&sdev->bus->pcicore, sdev); | ||
| 1273 | |||
| 1274 | if (was_enabled) { | ||
| 1269 | bw32(bp, B44_RCV_LAZY, 0); | 1275 | bw32(bp, B44_RCV_LAZY, 0); |
| 1270 | bw32(bp, B44_ENET_CTRL, ENET_CTRL_DISABLE); | 1276 | bw32(bp, B44_ENET_CTRL, ENET_CTRL_DISABLE); |
| 1271 | b44_wait_bit(bp, B44_ENET_CTRL, ENET_CTRL_DISABLE, 200, 1); | 1277 | b44_wait_bit(bp, B44_ENET_CTRL, ENET_CTRL_DISABLE, 200, 1); |
| @@ -1277,10 +1283,8 @@ static void b44_chip_reset(struct b44 *bp, int reset_kind) | |||
| 1277 | } | 1283 | } |
| 1278 | bw32(bp, B44_DMARX_CTRL, 0); | 1284 | bw32(bp, B44_DMARX_CTRL, 0); |
| 1279 | bp->rx_prod = bp->rx_cons = 0; | 1285 | bp->rx_prod = bp->rx_cons = 0; |
| 1280 | } else | 1286 | } |
| 1281 | ssb_pcicore_dev_irqvecs_enable(&sdev->bus->pcicore, sdev); | ||
| 1282 | 1287 | ||
| 1283 | ssb_device_enable(bp->sdev, 0); | ||
| 1284 | b44_clear_stats(bp); | 1288 | b44_clear_stats(bp); |
| 1285 | 1289 | ||
| 1286 | /* | 1290 | /* |
| @@ -2236,6 +2240,7 @@ static void __devexit b44_remove_one(struct ssb_device *sdev) | |||
| 2236 | struct net_device *dev = ssb_get_drvdata(sdev); | 2240 | struct net_device *dev = ssb_get_drvdata(sdev); |
| 2237 | 2241 | ||
| 2238 | unregister_netdev(dev); | 2242 | unregister_netdev(dev); |
| 2243 | ssb_device_disable(sdev, 0); | ||
| 2239 | ssb_bus_may_powerdown(sdev->bus); | 2244 | ssb_bus_may_powerdown(sdev->bus); |
| 2240 | free_netdev(dev); | 2245 | free_netdev(dev); |
| 2241 | ssb_pcihost_set_power_state(sdev, PCI_D3hot); | 2246 | ssb_pcihost_set_power_state(sdev, PCI_D3hot); |
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index d4a3dac21dcf..6500b7c4739f 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* bnx2.c: Broadcom NX2 network driver. | 1 | /* bnx2.c: Broadcom NX2 network driver. |
| 2 | * | 2 | * |
| 3 | * Copyright (c) 2004-2008 Broadcom Corporation | 3 | * Copyright (c) 2004-2009 Broadcom Corporation |
| 4 | * | 4 | * |
| 5 | * This program is free software; you can redistribute it and/or modify | 5 | * This program is free software; you can redistribute it and/or modify |
| 6 | * it under the terms of the GNU General Public License as published by | 6 | * it under the terms of the GNU General Public License as published by |
| @@ -57,8 +57,8 @@ | |||
| 57 | 57 | ||
| 58 | #define DRV_MODULE_NAME "bnx2" | 58 | #define DRV_MODULE_NAME "bnx2" |
| 59 | #define PFX DRV_MODULE_NAME ": " | 59 | #define PFX DRV_MODULE_NAME ": " |
| 60 | #define DRV_MODULE_VERSION "1.9.0" | 60 | #define DRV_MODULE_VERSION "1.9.2" |
| 61 | #define DRV_MODULE_RELDATE "Dec 16, 2008" | 61 | #define DRV_MODULE_RELDATE "Feb 11, 2009" |
| 62 | 62 | ||
| 63 | #define RUN_AT(x) (jiffies + (x)) | 63 | #define RUN_AT(x) (jiffies + (x)) |
| 64 | 64 | ||
| @@ -2910,18 +2910,8 @@ bnx2_rx_int(struct bnx2 *bp, struct bnx2_napi *bnapi, int budget) | |||
| 2910 | 2910 | ||
| 2911 | rx_hdr = (struct l2_fhdr *) skb->data; | 2911 | rx_hdr = (struct l2_fhdr *) skb->data; |
| 2912 | len = rx_hdr->l2_fhdr_pkt_len; | 2912 | len = rx_hdr->l2_fhdr_pkt_len; |
| 2913 | status = rx_hdr->l2_fhdr_status; | ||
| 2913 | 2914 | ||
| 2914 | if ((status = rx_hdr->l2_fhdr_status) & | ||
| 2915 | (L2_FHDR_ERRORS_BAD_CRC | | ||
| 2916 | L2_FHDR_ERRORS_PHY_DECODE | | ||
| 2917 | L2_FHDR_ERRORS_ALIGNMENT | | ||
| 2918 | L2_FHDR_ERRORS_TOO_SHORT | | ||
| 2919 | L2_FHDR_ERRORS_GIANT_FRAME)) { | ||
| 2920 | |||
| 2921 | bnx2_reuse_rx_skb(bp, rxr, skb, sw_ring_cons, | ||
| 2922 | sw_ring_prod); | ||
| 2923 | goto next_rx; | ||
| 2924 | } | ||
| 2925 | hdr_len = 0; | 2915 | hdr_len = 0; |
| 2926 | if (status & L2_FHDR_STATUS_SPLIT) { | 2916 | if (status & L2_FHDR_STATUS_SPLIT) { |
| 2927 | hdr_len = rx_hdr->l2_fhdr_ip_xsum; | 2917 | hdr_len = rx_hdr->l2_fhdr_ip_xsum; |
| @@ -2931,6 +2921,24 @@ bnx2_rx_int(struct bnx2 *bp, struct bnx2_napi *bnapi, int budget) | |||
| 2931 | pg_ring_used = 1; | 2921 | pg_ring_used = 1; |
| 2932 | } | 2922 | } |
| 2933 | 2923 | ||
| 2924 | if (unlikely(status & (L2_FHDR_ERRORS_BAD_CRC | | ||
| 2925 | L2_FHDR_ERRORS_PHY_DECODE | | ||
| 2926 | L2_FHDR_ERRORS_ALIGNMENT | | ||
| 2927 | L2_FHDR_ERRORS_TOO_SHORT | | ||
| 2928 | L2_FHDR_ERRORS_GIANT_FRAME))) { | ||
| 2929 | |||
| 2930 | bnx2_reuse_rx_skb(bp, rxr, skb, sw_ring_cons, | ||
| 2931 | sw_ring_prod); | ||
| 2932 | if (pg_ring_used) { | ||
| 2933 | int pages; | ||
| 2934 | |||
| 2935 | pages = PAGE_ALIGN(len - hdr_len) >> PAGE_SHIFT; | ||
| 2936 | |||
| 2937 | bnx2_reuse_rx_skb_pages(bp, rxr, NULL, pages); | ||
| 2938 | } | ||
| 2939 | goto next_rx; | ||
| 2940 | } | ||
| 2941 | |||
| 2934 | len -= 4; | 2942 | len -= 4; |
| 2935 | 2943 | ||
| 2936 | if (len <= bp->rx_copy_thresh) { | 2944 | if (len <= bp->rx_copy_thresh) { |
diff --git a/drivers/net/bnx2.h b/drivers/net/bnx2.h index 900641ac63e0..704cbbcbf97a 100644 --- a/drivers/net/bnx2.h +++ b/drivers/net/bnx2.h | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* bnx2.h: Broadcom NX2 network driver. | 1 | /* bnx2.h: Broadcom NX2 network driver. |
| 2 | * | 2 | * |
| 3 | * Copyright (c) 2004-2007 Broadcom Corporation | 3 | * Copyright (c) 2004-2009 Broadcom Corporation |
| 4 | * | 4 | * |
| 5 | * This program is free software; you can redistribute it and/or modify | 5 | * This program is free software; you can redistribute it and/or modify |
| 6 | * it under the terms of the GNU General Public License as published by | 6 | * it under the terms of the GNU General Public License as published by |
diff --git a/drivers/net/bnx2_fw.h b/drivers/net/bnx2_fw.h index 24c3cc40c23d..6a4f1d695de7 100644 --- a/drivers/net/bnx2_fw.h +++ b/drivers/net/bnx2_fw.h | |||
| @@ -15,854 +15,849 @@ | |||
| 15 | */ | 15 | */ |
| 16 | 16 | ||
| 17 | static u8 bnx2_COM_b06FwText[] = { | 17 | static u8 bnx2_COM_b06FwText[] = { |
| 18 | 0xcd, 0x7c, 0x0d, 0x70, 0x5b, 0xd7, 0x95, 0xde, 0xc1, 0x03, 0x40, 0x82, | 18 | 0xcd, 0x7c, 0x0d, 0x70, 0x5c, 0xd7, 0x75, 0xde, 0xd9, 0xb7, 0xbb, 0xc0, |
| 19 | 0x10, 0x45, 0x3d, 0x52, 0x30, 0x0d, 0x3b, 0x4c, 0x82, 0x47, 0x3c, 0x92, | 19 | 0x12, 0x04, 0xc1, 0x07, 0x68, 0x05, 0xad, 0x24, 0x24, 0xde, 0x87, 0x7d, |
| 20 | 0xb0, 0xc9, 0x64, 0x9f, 0x64, 0x46, 0x66, 0x12, 0xac, 0x05, 0x03, 0xa4, | 20 | 0x00, 0x56, 0x22, 0xe4, 0x3c, 0x32, 0x10, 0x0d, 0xb9, 0x5b, 0x72, 0xbd, |
| 21 | 0x4c, 0x27, 0xea, 0x92, 0xb6, 0x19, 0x47, 0x6d, 0x35, 0x09, 0x17, 0x92, | 21 | 0x0b, 0x50, 0x90, 0x43, 0x23, 0x90, 0x84, 0x28, 0x6a, 0x86, 0xe3, 0x41, |
| 22 | 0x12, 0xdb, 0x4d, 0xa7, 0x9a, 0xc6, 0xe9, 0x2a, 0x1b, 0xc7, 0x82, 0x41, | 22 | 0x97, 0xa0, 0x62, 0x69, 0xdc, 0x86, 0x1e, 0x2b, 0x29, 0xe5, 0x2a, 0xe6, |
| 23 | 0xca, 0x51, 0x52, 0x8a, 0x60, 0x24, 0x4a, 0xf2, 0x74, 0xb3, 0xbb, 0x0c, | 23 | 0x6a, 0x01, 0xca, 0x94, 0x02, 0x72, 0x61, 0x12, 0x04, 0xd5, 0x54, 0x6d, |
| 24 | 0x48, 0x4a, 0x8e, 0x03, 0x09, 0x96, 0xec, 0x75, 0xdc, 0xad, 0xb3, 0x62, | 24 | 0xd7, 0x0b, 0x80, 0x54, 0xd4, 0x25, 0x97, 0x94, 0xfc, 0xa3, 0x99, 0xd8, |
| 25 | 0x68, 0xad, 0xec, 0x4d, 0xb3, 0xad, 0x9d, 0x49, 0x3a, 0x9a, 0xa9, 0xb7, | 25 | 0x21, 0x4a, 0xd1, 0x92, 0xed, 0x71, 0xa7, 0x92, 0xc7, 0x9d, 0xaa, 0x33, |
| 26 | 0x55, 0x95, 0xa4, 0xf9, 0x99, 0xfe, 0xb8, 0x49, 0xa6, 0x75, 0xbb, 0xf1, | 26 | 0x9a, 0x94, 0xa5, 0xe4, 0xda, 0xf1, 0x34, 0x8d, 0x6a, 0x7b, 0x1a, 0x25, |
| 27 | 0xbe, 0x7e, 0xdf, 0x7d, 0xf7, 0x11, 0x20, 0xc5, 0x28, 0xde, 0xec, 0x64, | 27 | 0xb1, 0xf3, 0xfa, 0x7d, 0xf7, 0xdd, 0x0b, 0x2c, 0x20, 0x48, 0x56, 0x92, |
| 28 | 0x66, 0x39, 0x83, 0xb9, 0xef, 0xde, 0x77, 0x7f, 0xce, 0x3d, 0xf7, 0xfc, | 28 | 0xf1, 0x4c, 0x30, 0xb3, 0xbc, 0xef, 0xde, 0x77, 0x7f, 0xcf, 0x39, 0xf7, |
| 29 | 0x7c, 0xe7, 0xde, 0xfb, 0x78, 0x87, 0x48, 0x54, 0xf4, 0xdf, 0x46, 0xfc, | 29 | 0x9c, 0xef, 0x9c, 0x7b, 0x1f, 0x77, 0x89, 0xb4, 0x88, 0xfe, 0xdb, 0x82, |
| 30 | 0xfa, 0xff, 0xe9, 0x3f, 0xdb, 0xb3, 0xf5, 0xdd, 0xfd, 0xef, 0x66, 0xde, | 30 | 0xdf, 0xc0, 0xbf, 0xf8, 0x9d, 0xfd, 0xdb, 0x3f, 0xb8, 0xf3, 0x83, 0x78, |
| 31 | 0x30, 0x42, 0x21, 0xa6, 0x41, 0xfc, 0x62, 0xf8, 0x6d, 0xd5, 0xcf, 0xeb, | 31 | 0xdc, 0x69, 0xd9, 0x4d, 0x11, 0x96, 0x87, 0xf1, 0x8b, 0xe3, 0xb7, 0x43, |
| 32 | 0xfd, 0x99, 0xf8, 0x6d, 0x0b, 0x88, 0x8c, 0xff, 0x44, 0x24, 0xb0, 0xe6, | 32 | 0x3f, 0x6f, 0xf4, 0x67, 0xb3, 0x41, 0x48, 0x64, 0xe2, 0x87, 0x22, 0xa1, |
| 33 | 0x5d, 0x64, 0x9d, 0xfa, 0xae, 0xfb, 0x4b, 0x3a, 0xd2, 0x7f, 0x06, 0x7e, | 33 | 0x75, 0xef, 0x62, 0xef, 0xd2, 0xe6, 0xbd, 0xfe, 0xac, 0xf7, 0x59, 0xcf, |
| 34 | 0x89, 0xeb, 0x57, 0x59, 0x19, 0xf7, 0xd7, 0xfd, 0x0b, 0xea, 0xe6, 0x1b, | 34 | 0xfe, 0x7b, 0xf4, 0x6d, 0xfe, 0xc2, 0xba, 0xf9, 0x16, 0xfd, 0x93, 0x98, |
| 35 | 0xf5, 0x4f, 0x22, 0x46, 0x5a, 0x46, 0xb2, 0xb6, 0x44, 0x82, 0xe9, 0x9f, | 35 | 0x95, 0xb9, 0xfa, 0xb1, 0x9c, 0x2b, 0xb1, 0x70, 0xe6, 0xbb, 0xa3, 0xfb, |
| 36 | 0x8f, 0xec, 0xb1, 0x45, 0x32, 0x95, 0xde, 0x44, 0x4e, 0xde, 0x74, 0x0b, | 36 | 0x5d, 0x91, 0x6c, 0x6d, 0x5b, 0x32, 0x2f, 0x3f, 0xf3, 0x8b, 0xf1, 0x88, |
| 37 | 0xb1, 0x90, 0xb0, 0xfc, 0xed, 0xe9, 0x5f, 0x1c, 0xfc, 0xfa, 0xed, 0xd6, | 37 | 0xb0, 0xfc, 0x97, 0x32, 0x3f, 0x3d, 0xfc, 0xb5, 0x0f, 0x39, 0x6f, 0x55, |
| 38 | 0xeb, 0x73, 0x41, 0x89, 0x98, 0xe9, 0x37, 0xc4, 0xec, 0x96, 0x48, 0x07, | 38 | 0xc2, 0x12, 0xb3, 0x33, 0x6f, 0x8b, 0xdd, 0x2b, 0xb1, 0x2e, 0xb4, 0x79, |
| 39 | 0xda, 0x7c, 0xa9, 0xe7, 0x49, 0x43, 0x5a, 0xfc, 0xbe, 0xcc, 0xf1, 0x60, | 39 | 0xba, 0xef, 0x59, 0x4b, 0xda, 0x4c, 0x5f, 0xf6, 0x44, 0x38, 0x23, 0x63, |
| 40 | 0x5a, 0x46, 0xf7, 0x4e, 0x1d, 0x74, 0x0d, 0x5b, 0x0a, 0x37, 0xa7, 0xed, | 40 | 0x93, 0x33, 0x87, 0x7d, 0xcb, 0x95, 0xe2, 0x4d, 0x19, 0x37, 0x59, 0x92, |
| 41 | 0x44, 0x51, 0x9a, 0x07, 0x26, 0xfb, 0x6f, 0x17, 0xe4, 0x47, 0xf7, 0x56, | 41 | 0xd6, 0xc1, 0xe9, 0x81, 0x0f, 0x09, 0xf2, 0x63, 0x93, 0xb5, 0x98, 0xe4, |
| 42 | 0x22, 0x92, 0xad, 0x16, 0x9a, 0x0d, 0xdb, 0x46, 0x1a, 0x29, 0xbc, 0x2d, | 42 | 0xea, 0xc5, 0x56, 0xcb, 0x75, 0x91, 0xc6, 0x8a, 0x37, 0x67, 0x24, 0xd6, |
| 43 | 0x2d, 0x91, 0x86, 0xf4, 0x6c, 0xe3, 0x25, 0x9b, 0xe3, 0x0f, 0x60, 0xfc, | 43 | 0x94, 0x79, 0xba, 0xf9, 0x25, 0x97, 0xe3, 0x27, 0x46, 0x73, 0xee, 0xcd, |
| 44 | 0xb7, 0x49, 0xc8, 0x76, 0xdd, 0x49, 0x8c, 0xbf, 0xa3, 0xf2, 0xa6, 0xfb, | 44 | 0x12, 0x71, 0x7d, 0x7f, 0x1a, 0xe3, 0xef, 0xa9, 0xfd, 0xcc, 0x7f, 0x2c, |
| 45 | 0x58, 0xc8, 0x1b, 0xdb, 0x48, 0x1f, 0x08, 0x32, 0x0d, 0xa4, 0x33, 0x23, | 45 | 0x12, 0x8c, 0x6d, 0x65, 0x8a, 0x61, 0xa6, 0xa1, 0x4c, 0x72, 0xb4, 0xbb, |
| 46 | 0x9d, 0x15, 0x95, 0x6f, 0xf0, 0xf2, 0x83, 0x3a, 0x1f, 0x89, 0x7a, 0xb4, | 46 | 0xa6, 0xf2, 0x4d, 0x41, 0xde, 0x35, 0xf9, 0x2d, 0x41, 0x7e, 0x42, 0xe7, |
| 47 | 0x4b, 0x13, 0x68, 0x8f, 0x84, 0xd2, 0xe9, 0x26, 0xf4, 0x11, 0x09, 0xa7, | 47 | 0xed, 0x96, 0x60, 0x2d, 0xb1, 0x4d, 0x58, 0x4b, 0x2c, 0x92, 0x19, 0xda, |
| 48 | 0x97, 0x7e, 0x7b, 0x51, 0xd5, 0x3b, 0xac, 0xeb, 0x3d, 0x10, 0xf6, 0xda, | 48 | 0x84, 0x3e, 0x63, 0xd1, 0x8c, 0x9b, 0x59, 0x52, 0xf5, 0x3e, 0xa1, 0xeb, |
| 49 | 0x4d, 0x8e, 0x74, 0x57, 0x98, 0xce, 0x8e, 0x74, 0xa9, 0xf4, 0x4b, 0x23, | 49 | 0x1d, 0x8c, 0x06, 0xed, 0x26, 0x47, 0x7b, 0x6b, 0x4c, 0x1f, 0x1e, 0xed, |
| 50 | 0x49, 0x95, 0xce, 0xa9, 0x7a, 0x81, 0xf4, 0xc2, 0x88, 0xad, 0xd2, 0xb4, | 50 | 0x51, 0xe9, 0xa3, 0xa3, 0x29, 0x95, 0x16, 0x55, 0xbd, 0x50, 0x66, 0x7a, |
| 51 | 0x2e, 0x1f, 0x1e, 0x49, 0xa8, 0x74, 0xa7, 0x4e, 0x47, 0x75, 0x3a, 0xa6, | 51 | 0xd4, 0x55, 0x69, 0x97, 0x2e, 0x4f, 0x8f, 0x26, 0x55, 0xda, 0xaf, 0x53, |
| 52 | 0xd3, 0x5d, 0x3a, 0xdd, 0xad, 0xd3, 0x71, 0x9d, 0xee, 0xd5, 0xfd, 0x3c, | 52 | 0x4f, 0xa7, 0x03, 0x3a, 0x1d, 0xd4, 0x69, 0x46, 0xa7, 0x59, 0x9d, 0x0e, |
| 53 | 0xa0, 0xf3, 0x9f, 0xd0, 0xe9, 0x7e, 0x9d, 0x3e, 0xac, 0xd3, 0x03, 0x3a, | 53 | 0xe9, 0x7e, 0x46, 0x74, 0x7e, 0xaf, 0x4e, 0xc7, 0x74, 0x3a, 0xae, 0xd3, |
| 54 | 0x7d, 0x44, 0xd3, 0x55, 0xd0, 0xe9, 0x94, 0x2e, 0x9f, 0xd1, 0x74, 0x3e, | 54 | 0xfb, 0x75, 0xba, 0x4f, 0xcf, 0xeb, 0x93, 0x3a, 0x7f, 0x50, 0xcf, 0xef, |
| 55 | 0x01, 0x7a, 0xfe, 0x71, 0xa3, 0x96, 0x5b, 0xcc, 0x37, 0x21, 0x7b, 0xa6, | 55 | 0x10, 0xe6, 0xf1, 0x93, 0x26, 0x2d, 0xbf, 0x58, 0x67, 0x52, 0xf6, 0xcf, |
| 56 | 0x22, 0x52, 0x2c, 0x05, 0x25, 0xa7, 0xd6, 0xf3, 0xe3, 0x61, 0x89, 0x46, | 56 | 0xc4, 0xa4, 0x54, 0x0e, 0x4b, 0x5e, 0xf1, 0xb5, 0x3f, 0x2a, 0x2d, 0x31, |
| 57 | 0x64, 0xa2, 0x1a, 0x91, 0x2b, 0x4a, 0x5c, 0x7f, 0xe4, 0x7e, 0xbd, 0xc7, | 57 | 0x99, 0xaa, 0xc7, 0xe4, 0xaa, 0x12, 0xdb, 0x1f, 0xf8, 0x5f, 0xeb, 0xb3, |
| 58 | 0x94, 0xa7, 0xab, 0x31, 0xb9, 0x50, 0x95, 0xc0, 0x68, 0x4f, 0x93, 0x18, | 58 | 0xe5, 0x42, 0x3d, 0x2e, 0x97, 0xea, 0x12, 0x1a, 0xeb, 0xdb, 0x24, 0xd6, |
| 59 | 0x47, 0x6f, 0x96, 0x8c, 0x19, 0x90, 0xa0, 0xe2, 0x6b, 0x42, 0xb2, 0x53, | 59 | 0x89, 0x9b, 0x24, 0x6b, 0x87, 0x24, 0xac, 0xe8, 0x9b, 0x94, 0xdc, 0x4c, |
| 60 | 0xed, 0xc8, 0x5b, 0x71, 0x91, 0xc5, 0xb0, 0xb7, 0x8e, 0x11, 0x09, 0x9e, | 60 | 0x27, 0xf2, 0x4e, 0x42, 0x64, 0x32, 0x1a, 0xf0, 0x33, 0x26, 0xe1, 0x79, |
| 61 | 0xe0, 0xba, 0x3c, 0x37, 0x72, 0x69, 0x36, 0x2e, 0xa1, 0xe9, 0x04, 0xfa, | 61 | 0xf2, 0x67, 0x7e, 0xf4, 0xa5, 0xb9, 0x84, 0x44, 0x8e, 0x27, 0xd1, 0x7f, |
| 62 | 0x6f, 0x96, 0xf0, 0x09, 0xe9, 0x08, 0x4a, 0x57, 0xfc, 0x63, 0xa8, 0x31, | 62 | 0xab, 0x44, 0xe7, 0xa5, 0x2b, 0x2c, 0x3d, 0x89, 0x07, 0x50, 0x63, 0xa8, |
| 63 | 0x58, 0x09, 0xc9, 0x50, 0x25, 0x80, 0xb5, 0x8a, 0x40, 0x4e, 0x9a, 0xf1, | 63 | 0x16, 0x91, 0xe1, 0x5a, 0x08, 0x3c, 0x8b, 0x41, 0x5e, 0x5a, 0xf1, 0xb3, |
| 64 | 0x33, 0xf1, 0x8b, 0xe1, 0x17, 0xc7, 0xef, 0xaf, 0xd0, 0x4f, 0x87, 0xe4, | 64 | 0xf1, 0x8b, 0xe3, 0x97, 0xc0, 0xef, 0x09, 0xf4, 0xd3, 0x25, 0xf9, 0x1a, |
| 65 | 0x2a, 0xec, 0x13, 0xe3, 0x96, 0x30, 0x7e, 0xc9, 0x32, 0xc7, 0x85, 0x34, | 65 | 0xfb, 0xc4, 0xb8, 0x65, 0x8c, 0x5f, 0x76, 0xec, 0x09, 0xe1, 0x9c, 0x12, |
| 66 | 0xc5, 0xe5, 0xeb, 0x3d, 0x1e, 0x4d, 0x17, 0xaa, 0x91, 0x40, 0xf6, 0xa4, | 66 | 0xf2, 0xb5, 0xbe, 0x60, 0x4e, 0x97, 0xea, 0xb1, 0x50, 0xee, 0xb4, 0x1c, |
| 67 | 0xec, 0xcf, 0x39, 0x92, 0x30, 0xec, 0xa8, 0xe4, 0xcd, 0x40, 0x62, 0x6f, | 67 | 0xcc, 0x7b, 0x92, 0xb4, 0xdc, 0x16, 0x29, 0xd8, 0xa1, 0xe4, 0x64, 0xba, |
| 68 | 0xaa, 0x4d, 0x0a, 0x63, 0x78, 0x57, 0x92, 0x8c, 0x81, 0xbe, 0xf3, 0xa6, | 68 | 0x43, 0x8a, 0xe3, 0x78, 0x57, 0x96, 0xac, 0x85, 0xbe, 0x0b, 0xb6, 0x4c, |
| 69 | 0x8c, 0x7b, 0xef, 0x58, 0xf6, 0x7f, 0xa1, 0xaf, 0x96, 0x49, 0xc1, 0xbd, | 69 | 0x04, 0xef, 0x58, 0xf6, 0x37, 0xd8, 0xb7, 0x8e, 0x4d, 0x01, 0xbe, 0x54, |
| 70 | 0x50, 0xfa, 0xd7, 0x78, 0x66, 0x5f, 0x2f, 0x86, 0x3c, 0x9a, 0xdf, 0x40, | 70 | 0xfe, 0x63, 0x3c, 0xb3, 0xaf, 0xff, 0x17, 0x0e, 0xe6, 0xfc, 0xd7, 0xc8, |
| 71 | 0x9e, 0xe5, 0xee, 0x26, 0x2f, 0xcf, 0x67, 0xd6, 0xf5, 0xc7, 0xf4, 0xe7, | 71 | 0xb3, 0xfc, 0xcb, 0x5b, 0x83, 0x3c, 0x9f, 0x59, 0xd7, 0x8c, 0x69, 0xd6, |
| 72 | 0xca, 0xb1, 0x7b, 0x30, 0x5f, 0x8e, 0xbf, 0x32, 0x5f, 0xd0, 0xd1, 0x1c, | 72 | 0xca, 0xb1, 0xfb, 0xb0, 0x5e, 0x8e, 0xbf, 0xb2, 0x5e, 0xcc, 0xa3, 0x35, |
| 73 | 0xc8, 0x9d, 0x4c, 0xc8, 0xa1, 0xd2, 0x1d, 0x92, 0x75, 0x5c, 0x77, 0x8f, | 73 | 0x94, 0x3f, 0x9d, 0x94, 0x23, 0xe5, 0x5d, 0x92, 0xf3, 0x7c, 0x7f, 0xbf, |
| 74 | 0x23, 0x31, 0x43, 0xba, 0xcc, 0x1c, 0xde, 0x96, 0x2b, 0x12, 0xc8, 0x96, | 74 | 0x27, 0x71, 0x4b, 0x7a, 0xec, 0x3c, 0xde, 0x56, 0x6b, 0x12, 0xca, 0x95, |
| 75 | 0x7c, 0x7e, 0xb0, 0xdf, 0x10, 0xca, 0xda, 0x51, 0xbf, 0x25, 0x30, 0x78, | 75 | 0x0d, 0x3d, 0xd8, 0x6f, 0x04, 0x65, 0x9d, 0xa8, 0xdf, 0x16, 0x1a, 0x3a, |
| 76 | 0x12, 0xb4, 0xa7, 0xc9, 0x17, 0xc8, 0xac, 0xd3, 0x15, 0xdf, 0x8b, 0xf1, | 76 | 0x8d, 0xb9, 0x67, 0x48, 0x17, 0xc8, 0xae, 0xd7, 0x93, 0x98, 0xc4, 0x78, |
| 77 | 0xe6, 0x2b, 0x5d, 0xce, 0xb2, 0x98, 0xe8, 0xb3, 0x0d, 0x75, 0xc8, 0x23, | 77 | 0x0b, 0xb5, 0x1e, 0xef, 0xb2, 0xd8, 0xe8, 0xb3, 0x03, 0x75, 0x48, 0x23, |
| 78 | 0xf6, 0xc5, 0x3e, 0xd9, 0x5f, 0x33, 0xda, 0xc6, 0xf0, 0x8e, 0x34, 0xb9, | 78 | 0xf6, 0xc5, 0x3e, 0xd9, 0x5f, 0x2b, 0xda, 0xc6, 0xf1, 0x8e, 0x73, 0xf2, |
| 79 | 0x6e, 0xd6, 0x31, 0x99, 0x97, 0x39, 0xf0, 0x6d, 0x8e, 0x7c, 0x8b, 0x76, | 79 | 0xfd, 0x9c, 0x67, 0x33, 0x2f, 0x15, 0xd0, 0xad, 0x42, 0xba, 0xb5, 0x74, |
| 80 | 0xc8, 0xa9, 0x0a, 0xc7, 0x58, 0x8f, 0xee, 0x5b, 0xff, 0x9e, 0xd1, 0x1d, | 80 | 0xc9, 0x99, 0x1a, 0xc7, 0xd8, 0x68, 0xde, 0xb7, 0xfe, 0x23, 0x9b, 0x77, |
| 81 | 0x47, 0xff, 0x31, 0xa4, 0x1b, 0x02, 0xd9, 0x63, 0x2e, 0xc6, 0x8f, 0xe3, | 81 | 0x02, 0xfd, 0xc7, 0x91, 0x6e, 0x0e, 0xe5, 0x4e, 0xfa, 0x18, 0x3f, 0x81, |
| 82 | 0x79, 0xbd, 0x39, 0x5c, 0xd1, 0x32, 0x18, 0x07, 0xed, 0x31, 0x39, 0xa7, | 82 | 0xe7, 0x8d, 0xd6, 0x70, 0x55, 0xcb, 0x60, 0x02, 0x73, 0x8f, 0xcb, 0x45, |
| 83 | 0xe4, 0x70, 0x83, 0x04, 0x21, 0x87, 0x5c, 0xe3, 0xd6, 0x13, 0xef, 0x91, | 83 | 0x25, 0x87, 0x9b, 0x25, 0x0c, 0x39, 0x24, 0x8f, 0xdb, 0xe7, 0x6f, 0x97, |
| 84 | 0x7c, 0xcc, 0x4a, 0xd0, 0x76, 0x76, 0x6e, 0x6d, 0xc2, 0x1c, 0xb5, 0x15, | 84 | 0x42, 0xdc, 0x49, 0x52, 0x87, 0x76, 0xef, 0xd8, 0x84, 0x35, 0x6a, 0x6d, |
| 85 | 0x9c, 0x8e, 0x41, 0x0e, 0x97, 0x5b, 0x0d, 0x94, 0x18, 0x62, 0x99, 0xff, | 85 | 0x78, 0x3c, 0x0e, 0x39, 0xbc, 0xdc, 0x6e, 0xa1, 0xc4, 0x12, 0xc7, 0xfe, |
| 86 | 0x48, 0x0a, 0x92, 0x5b, 0xf8, 0xbd, 0x80, 0x44, 0x0d, 0xd4, 0xbb, 0x25, | 86 | 0x2d, 0x29, 0x4a, 0x7e, 0xf1, 0x91, 0x90, 0xb4, 0x58, 0xa8, 0xb7, 0x2d, |
| 87 | 0xe0, 0xf1, 0x80, 0xfc, 0xc9, 0x80, 0x3f, 0x01, 0xd1, 0xf6, 0x41, 0x3a, | 87 | 0x14, 0xd0, 0x80, 0xf4, 0xc9, 0x82, 0x3e, 0x21, 0x09, 0xf6, 0x73, 0x56, |
| 88 | 0x2b, 0x7c, 0xdf, 0x9b, 0x30, 0xd4, 0xbb, 0x41, 0xbc, 0x0b, 0x49, 0x72, | 88 | 0xba, 0x6b, 0xea, 0x7d, 0xd2, 0x52, 0xef, 0x86, 0xf0, 0x2e, 0x22, 0xa9, |
| 89 | 0xab, 0xff, 0x7e, 0x10, 0xef, 0x6f, 0x96, 0x71, 0x13, 0xb4, 0x94, 0x9e, | 89 | 0x1d, 0xe6, 0xfd, 0x10, 0xde, 0xdf, 0x24, 0x13, 0x36, 0xe6, 0x52, 0x7e, |
| 90 | 0x37, 0xb2, 0xa0, 0xf1, 0xce, 0x90, 0x9a, 0x2b, 0xea, 0x8e, 0xd7, 0xf5, | 90 | 0xc1, 0xca, 0x61, 0x8e, 0x1f, 0x89, 0xa8, 0xb5, 0xa2, 0xee, 0x44, 0x43, |
| 91 | 0x33, 0x8e, 0x7a, 0xff, 0x0a, 0x63, 0x81, 0xde, 0x52, 0x02, 0xb4, 0xb4, | 91 | 0x3f, 0x13, 0xa8, 0xf7, 0x34, 0xc6, 0xc2, 0x7c, 0xcb, 0x49, 0xcc, 0xa5, |
| 92 | 0x83, 0x16, 0xd2, 0x58, 0x30, 0xb2, 0xd5, 0x10, 0xf2, 0x93, 0x46, 0xee, | 92 | 0x13, 0x73, 0xe1, 0x1c, 0x8b, 0x56, 0xae, 0x1e, 0x41, 0x7e, 0xda, 0xca, |
| 93 | 0xf4, 0x61, 0x3c, 0x8b, 0x69, 0xa4, 0x9f, 0x67, 0x8a, 0xf6, 0xbb, 0xeb, | 93 | 0x9f, 0x3d, 0x8a, 0x67, 0xb1, 0xad, 0xcc, 0x0b, 0x4c, 0xd1, 0x7e, 0x5f, |
| 94 | 0xda, 0xef, 0x46, 0x7b, 0x8e, 0xc1, 0xf6, 0x9e, 0xfc, 0x17, 0x94, 0x2c, | 94 | 0x43, 0xfb, 0x7d, 0x68, 0xcf, 0x31, 0xd8, 0x3e, 0x90, 0xff, 0xa2, 0x92, |
| 95 | 0x26, 0xae, 0xc3, 0x8f, 0xe0, 0xaf, 0xc1, 0x8f, 0x7f, 0xa3, 0xf9, 0xf1, | 95 | 0xc5, 0xe4, 0x7b, 0xd0, 0x23, 0xfc, 0xf7, 0xa0, 0xc7, 0xd7, 0x34, 0x3d, |
| 96 | 0xd7, 0xf2, 0x9b, 0xe7, 0xc7, 0x7f, 0xfa, 0x0d, 0xf1, 0x43, 0x24, 0x7f, | 96 | 0x7e, 0x26, 0xbf, 0x78, 0x7a, 0x5c, 0xfd, 0x05, 0xd1, 0x43, 0xa4, 0x70, |
| 97 | 0x8c, 0xcf, 0x21, 0x29, 0x28, 0xbb, 0x45, 0xbd, 0xa5, 0xbc, 0xd3, 0x66, | 97 | 0x92, 0xcf, 0x11, 0x29, 0x2a, 0xbd, 0xc5, 0x7d, 0x4b, 0x79, 0xa7, 0xce, |
| 98 | 0x91, 0x4f, 0x94, 0x63, 0xe8, 0x40, 0x35, 0x84, 0xf4, 0x49, 0xa4, 0x1b, | 98 | 0x22, 0x9d, 0x28, 0xc7, 0xd8, 0x03, 0xf5, 0x08, 0xd2, 0x67, 0x90, 0x6e, |
| 99 | 0x02, 0xa3, 0xc7, 0xae, 0x62, 0xfd, 0x5d, 0x31, 0xb7, 0xfa, 0x7e, 0xa3, | 99 | 0x0e, 0x8d, 0x9d, 0x7c, 0x13, 0xfc, 0xf7, 0xc5, 0xde, 0x61, 0xec, 0x47, |
| 100 | 0x10, 0x37, 0xa5, 0x43, 0xcc, 0x77, 0xc3, 0x69, 0xb7, 0x5b, 0x66, 0x5e, | 100 | 0x31, 0x61, 0x4b, 0x97, 0xd8, 0x1f, 0x84, 0xf1, 0xee, 0x74, 0xec, 0x82, |
| 101 | 0x7e, 0x80, 0xf7, 0x6f, 0x06, 0x7c, 0xff, 0x9e, 0x9d, 0x6a, 0x7a, 0x23, | 101 | 0x7c, 0x9f, 0xef, 0x43, 0xc6, 0xce, 0xe7, 0x66, 0x36, 0xbd, 0x9d, 0x55, |
| 102 | 0xa3, 0x9e, 0xc2, 0xe4, 0x67, 0xc6, 0x48, 0x87, 0x02, 0xb9, 0x52, 0x62, | 102 | 0x4f, 0x51, 0xd2, 0x33, 0x6b, 0x65, 0x22, 0xa1, 0x7c, 0x39, 0x39, 0x61, |
| 103 | 0xdc, 0x48, 0xc7, 0x60, 0xa7, 0x98, 0x1f, 0x08, 0x78, 0x34, 0xf7, 0xa3, | 103 | 0x65, 0xe2, 0xd0, 0x53, 0xcc, 0x0f, 0x86, 0x82, 0x39, 0x0f, 0xa0, 0xae, |
| 104 | 0xae, 0x6f, 0xb3, 0x7c, 0xda, 0xfb, 0x41, 0xfb, 0x5a, 0xdb, 0x95, 0x01, | 104 | 0xd1, 0x59, 0x66, 0xee, 0x03, 0x98, 0xfb, 0x7a, 0xdd, 0x95, 0xc5, 0x5c, |
| 105 | 0x2d, 0xa4, 0x81, 0x74, 0x15, 0x82, 0x9a, 0xf7, 0xe8, 0xe7, 0x80, 0xea, | 105 | 0x38, 0x07, 0xce, 0xab, 0xa8, 0x75, 0x10, 0xfb, 0x39, 0xa4, 0xfa, 0x09, |
| 106 | 0x27, 0x98, 0x1e, 0x10, 0xfa, 0xd0, 0xfc, 0x14, 0xf5, 0x80, 0xed, 0xd8, | 106 | 0x67, 0x06, 0x85, 0xb6, 0xb4, 0x30, 0xc3, 0x7d, 0xc0, 0x76, 0xec, 0x2b, |
| 107 | 0x97, 0x67, 0x93, 0xf3, 0x15, 0xbf, 0x8f, 0x42, 0x7d, 0x1f, 0xa0, 0x47, | 107 | 0xd0, 0xc9, 0x85, 0x9a, 0xe9, 0xa3, 0xd8, 0xd8, 0x07, 0xe6, 0x23, 0x5b, |
| 108 | 0x36, 0x19, 0x76, 0x18, 0x6b, 0xcf, 0xae, 0x0e, 0xe3, 0xdd, 0x97, 0x24, | 108 | 0x2d, 0x37, 0x0a, 0xde, 0xb3, 0xab, 0xa3, 0x78, 0xf7, 0xb4, 0xe4, 0xce, |
| 109 | 0x7b, 0xfa, 0x76, 0x03, 0x73, 0x40, 0xbf, 0xe4, 0xd1, 0x28, 0x6c, 0x36, | 109 | 0xde, 0x61, 0x61, 0x0d, 0xe8, 0x97, 0x34, 0x1a, 0x83, 0xce, 0xe6, 0x3e, |
| 110 | 0xf5, 0x2c, 0x22, 0xb9, 0x18, 0xcb, 0x3e, 0xa2, 0xc7, 0x0d, 0x49, 0x46, | 110 | 0x8b, 0x49, 0x3e, 0xce, 0xb2, 0x49, 0x3d, 0x6e, 0x44, 0xb2, 0x2a, 0x9f, |
| 111 | 0xe5, 0xbf, 0xd2, 0x52, 0xa3, 0xe3, 0x79, 0x3d, 0x9f, 0x34, 0xe6, 0x43, | 111 | 0x6b, 0x5b, 0x9d, 0xc7, 0x0b, 0x7a, 0x3d, 0x19, 0xac, 0x87, 0x73, 0x30, |
| 112 | 0x1a, 0xfc, 0xb9, 0xa4, 0xeb, 0xe6, 0xe2, 0xf3, 0x9a, 0xbc, 0x30, 0x61, | 112 | 0x6b, 0xc9, 0x34, 0xac, 0xc5, 0xd0, 0x9a, 0xb4, 0xb0, 0xa1, 0xe3, 0x63, |
| 113 | 0xe3, 0x23, 0xda, 0x87, 0xb0, 0xdd, 0x64, 0xdd, 0xda, 0x4d, 0xa2, 0x0d, | 113 | 0xda, 0x86, 0xb0, 0xdd, 0x74, 0x03, 0xef, 0xa6, 0xd1, 0x86, 0xb4, 0x47, |
| 114 | 0x79, 0x8f, 0x3a, 0x6b, 0xfc, 0x0a, 0x7d, 0xca, 0x20, 0xfa, 0x29, 0xce, | 114 | 0x9d, 0x75, 0x76, 0x85, 0x36, 0x65, 0x08, 0xfd, 0x94, 0xe6, 0x2c, 0xc9, |
| 115 | 0x1a, 0x92, 0x73, 0xe0, 0xab, 0x9d, 0xb7, 0x69, 0x79, 0xad, 0xc9, 0x52, | 115 | 0x7b, 0xb0, 0xd9, 0xde, 0xcd, 0x5a, 0x5e, 0x57, 0x65, 0x29, 0xba, 0xa1, |
| 116 | 0x78, 0x5d, 0x59, 0x3a, 0x68, 0x78, 0xf6, 0x1a, 0xbe, 0x05, 0xfe, 0x67, | 116 | 0x2c, 0x3d, 0x66, 0x05, 0xfa, 0x1a, 0xb6, 0x05, 0xf6, 0x67, 0x6a, 0xce, |
| 117 | 0x62, 0xd6, 0x4a, 0xf9, 0xb2, 0x54, 0x9c, 0x7a, 0x2b, 0xb2, 0xe4, 0xb7, | 117 | 0x49, 0x1b, 0x59, 0x2a, 0xcd, 0xbc, 0x1f, 0x59, 0x32, 0xed, 0x63, 0x90, |
| 118 | 0x8f, 0x40, 0x76, 0xfd, 0x31, 0xd6, 0xd2, 0xec, 0xd7, 0x01, 0x8d, 0xa5, | 118 | 0x5d, 0x33, 0xc6, 0xfa, 0x39, 0x9b, 0x3a, 0x98, 0x63, 0x79, 0x48, 0x63, |
| 119 | 0xac, 0xc6, 0x28, 0x1c, 0xc7, 0xf3, 0x0d, 0x73, 0xab, 0x7c, 0xc3, 0x61, | 119 | 0x15, 0x8e, 0x13, 0xd8, 0x86, 0xca, 0x1a, 0xdb, 0x70, 0x14, 0x6d, 0x25, |
| 120 | 0xb4, 0x95, 0x40, 0xae, 0xa7, 0x59, 0xf6, 0xcd, 0xfa, 0x7d, 0x1c, 0x56, | 120 | 0x94, 0xef, 0x6b, 0x95, 0x03, 0x73, 0xa6, 0x8f, 0xa3, 0x4a, 0x66, 0x27, |
| 121 | 0x32, 0xbb, 0x77, 0xca, 0x32, 0x87, 0x82, 0x92, 0x19, 0x9a, 0x19, 0x90, | 121 | 0x67, 0x1c, 0x7b, 0x38, 0x2c, 0xd9, 0xe1, 0xd9, 0x41, 0x19, 0xaa, 0x77, |
| 122 | 0xc1, 0x6a, 0x07, 0xd6, 0xf4, 0x0d, 0x17, 0xbe, 0xf3, 0xdd, 0x61, 0xb1, | 122 | 0x81, 0xa7, 0x6f, 0xfb, 0xb0, 0x9d, 0x1f, 0x8c, 0x8a, 0x0b, 0xbd, 0x88, |
| 123 | 0x61, 0x17, 0x31, 0xe7, 0x7e, 0xf0, 0xb8, 0x1a, 0x16, 0x23, 0xed, 0x20, | 123 | 0x35, 0x0f, 0x80, 0xc6, 0xf5, 0xa8, 0x58, 0x19, 0x0f, 0x69, 0x23, 0xd6, |
| 124 | 0xad, 0xc7, 0x58, 0xa1, 0xd0, 0xd0, 0xaa, 0x7c, 0x03, 0xea, 0xa0, 0xef, | 124 | 0x8a, 0x44, 0x86, 0xd7, 0xe4, 0x9b, 0x50, 0x07, 0x7d, 0x0f, 0xac, 0xaf, |
| 125 | 0xfe, 0xb5, 0xf5, 0x20, 0x9f, 0xe0, 0x6d, 0xd6, 0x79, 0xd3, 0x85, 0x1f, | 125 | 0x07, 0xf9, 0x04, 0x6d, 0x73, 0xde, 0xcf, 0x7c, 0xd8, 0x61, 0x6d, 0xb3, |
| 126 | 0xd6, 0x3e, 0x8b, 0xa5, 0xb4, 0x13, 0xbe, 0x8d, 0xf8, 0x10, 0xf4, 0x5b, | 126 | 0x58, 0x4a, 0x3d, 0x61, 0x74, 0xc4, 0x6f, 0x60, 0x7f, 0xab, 0xbd, 0x50, |
| 127 | 0xe9, 0x42, 0xc1, 0x48, 0xef, 0x47, 0x1f, 0xa2, 0xe4, 0xb4, 0x58, 0x7d, | 127 | 0x04, 0x76, 0x41, 0x1f, 0xa2, 0xe4, 0xb4, 0x54, 0x7f, 0xce, 0xec, 0x7b, |
| 128 | 0xda, 0xd7, 0x7b, 0x55, 0xbe, 0xa3, 0x9f, 0xb2, 0x37, 0x07, 0x4c, 0xc0, | 128 | 0x55, 0xbe, 0x67, 0x80, 0xb2, 0x57, 0x01, 0x26, 0xe0, 0x9a, 0x16, 0xd5, |
| 129 | 0x39, 0x2d, 0x28, 0x5d, 0xcf, 0x99, 0x31, 0x99, 0x2c, 0x29, 0x4c, 0x23, | 129 | 0x5e, 0xcf, 0xdb, 0x71, 0x99, 0x2e, 0x73, 0x3d, 0x8b, 0x92, 0xaa, 0xfd, |
| 130 | 0xc9, 0xca, 0x1f, 0x49, 0xee, 0xb4, 0xc8, 0x37, 0xa7, 0x58, 0xef, 0x05, | 130 | 0x7b, 0xc9, 0x9f, 0x15, 0xf9, 0xd6, 0x0c, 0xeb, 0x7d, 0x55, 0xd7, 0x7b, |
| 131 | 0x5d, 0xef, 0x79, 0xd4, 0x4b, 0x26, 0x06, 0x03, 0x16, 0xfc, 0x80, 0x05, | 131 | 0x01, 0xf5, 0x52, 0xc9, 0xa1, 0x90, 0x03, 0x3b, 0xe0, 0x60, 0x9b, 0x6c, |
| 132 | 0x35, 0xe9, 0x4d, 0x20, 0x35, 0x87, 0xf1, 0x1b, 0xa4, 0x93, 0x41, 0x3d, | 132 | 0x4b, 0x22, 0xb5, 0x47, 0xf0, 0x1b, 0xa2, 0x91, 0x41, 0xbd, 0x00, 0xfb, |
| 133 | 0x0f, 0x03, 0x3d, 0x0f, 0x7e, 0x88, 0xdc, 0x53, 0x6a, 0x84, 0x3d, 0xf9, | 133 | 0xbc, 0x00, 0x7a, 0x88, 0xdc, 0x5d, 0x6e, 0x86, 0x3e, 0xf9, 0x9f, 0x98, |
| 134 | 0x2f, 0xa0, 0x35, 0x26, 0x5f, 0xc0, 0x3c, 0x2e, 0x4d, 0x11, 0x67, 0xbd, | 134 | 0x6b, 0x5c, 0x9e, 0xc4, 0x3a, 0x5e, 0x9a, 0x21, 0xbe, 0xfa, 0xaa, 0x2c, |
| 135 | 0x20, 0x8b, 0x53, 0xc4, 0x5d, 0xcf, 0xcb, 0xe4, 0x54, 0xd2, 0xf9, 0x26, | 135 | 0xcd, 0x10, 0x6f, 0xbd, 0x20, 0xd3, 0x33, 0x29, 0xef, 0x5b, 0xa0, 0xf3, |
| 136 | 0xf8, 0x7c, 0x4a, 0x38, 0x97, 0x5e, 0x07, 0x29, 0x30, 0xa0, 0x95, 0x78, | 136 | 0x19, 0xe1, 0x5a, 0xb6, 0x79, 0x48, 0x81, 0x05, 0x9d, 0xe4, 0xe3, 0xd0, |
| 137 | 0x1c, 0xf6, 0xac, 0x67, 0xab, 0xd7, 0x5f, 0x97, 0xee, 0xcf, 0xae, 0x58, | 137 | 0x67, 0x7d, 0x3b, 0x82, 0xfe, 0x7a, 0x74, 0x7f, 0x6e, 0xcd, 0x91, 0xab, |
| 138 | 0x72, 0xc5, 0xa4, 0x7d, 0xba, 0x56, 0xc7, 0xb3, 0x5a, 0xc7, 0x47, 0x9d, | 138 | 0x36, 0xf5, 0xd3, 0x3b, 0xf7, 0x78, 0x4e, 0xef, 0xf1, 0x31, 0xaf, 0x4b, |
| 139 | 0x0e, 0x31, 0xa0, 0xd7, 0x99, 0xb1, 0x02, 0xbc, 0x1f, 0xf5, 0xfa, 0x7f, | 139 | 0x2c, 0xec, 0xeb, 0xec, 0x78, 0x11, 0xd6, 0x8f, 0xfb, 0xfa, 0x6d, 0x6b, |
| 140 | 0x1b, 0x35, 0xfc, 0x33, 0x00, 0xac, 0x6a, 0x29, 0x7f, 0xf7, 0xb7, 0xd3, | 140 | 0x15, 0xff, 0x24, 0x80, 0x59, 0x1d, 0x65, 0xef, 0xfe, 0x6e, 0x7b, 0xbc, |
| 141 | 0xf1, 0x7a, 0xdd, 0xe6, 0xf8, 0x2d, 0x68, 0x13, 0x42, 0x7a, 0x7d, 0xbd, | 141 | 0x71, 0x6f, 0x73, 0xfc, 0x36, 0xb4, 0x89, 0x20, 0x7d, 0xef, 0x7d, 0x8d, |
| 142 | 0x46, 0x1f, 0x75, 0x6d, 0x07, 0xa8, 0x17, 0x68, 0xf3, 0x07, 0xe0, 0x05, | 142 | 0x3e, 0x1a, 0xda, 0x0e, 0x72, 0x5f, 0xa0, 0xcd, 0xbf, 0x05, 0x2d, 0x48, |
| 143 | 0xf9, 0xff, 0x56, 0xf4, 0xb9, 0x37, 0xf8, 0x96, 0xf4, 0x79, 0xec, 0x7a, | 143 | 0xff, 0xf7, 0xb3, 0x9f, 0x6f, 0x0b, 0xbf, 0xaf, 0xfd, 0x3c, 0xfe, 0x5e, |
| 144 | 0xfa, 0x5c, 0xaf, 0xcb, 0x67, 0xc9, 0x0b, 0x8c, 0x2d, 0x33, 0x9e, 0x6c, | 144 | 0xfb, 0xb9, 0x71, 0x2f, 0x5f, 0x20, 0x2d, 0x30, 0xb6, 0xcc, 0x06, 0xb2, |
| 145 | 0x75, 0x81, 0xd7, 0x09, 0xc8, 0x29, 0x68, 0x28, 0xfd, 0x8d, 0x9b, 0x09, | 145 | 0xd5, 0x03, 0x5a, 0x27, 0x21, 0xa7, 0x98, 0x43, 0xf9, 0x6f, 0xfd, 0x6c, |
| 146 | 0x79, 0x78, 0xce, 0x93, 0x27, 0xd6, 0xf3, 0xeb, 0x78, 0xb6, 0x77, 0xb0, | 146 | 0x24, 0xc0, 0x73, 0x81, 0x3c, 0xb1, 0x9e, 0xa9, 0x13, 0xe8, 0xde, 0xa1, |
| 147 | 0x7a, 0x45, 0xd9, 0xd9, 0x73, 0xca, 0xce, 0x5a, 0x87, 0x0b, 0x42, 0x79, | 147 | 0xfa, 0x55, 0xa5, 0x67, 0x2f, 0x2a, 0x3d, 0xeb, 0x1c, 0x2d, 0x0a, 0xe5, |
| 148 | 0xbb, 0x2d, 0x48, 0xbe, 0x3f, 0xed, 0x7c, 0x16, 0x34, 0x5a, 0x89, 0x84, | 148 | 0xed, 0xf6, 0x30, 0xe9, 0x7e, 0xc1, 0xfb, 0x7d, 0xcc, 0xd1, 0x49, 0x26, |
| 149 | 0xd1, 0x55, 0x30, 0x8c, 0xcf, 0xca, 0xfe, 0xf9, 0x87, 0x65, 0x7f, 0x89, | 149 | 0xad, 0x9e, 0xa2, 0x65, 0xfd, 0xbe, 0x1c, 0x5c, 0x78, 0x58, 0x0e, 0x96, |
| 150 | 0x7d, 0xa4, 0xf1, 0xde, 0x46, 0x59, 0x13, 0x6c, 0x2d, 0x6d, 0xfa, 0x1b, | 150 | 0xd9, 0xc7, 0x2e, 0xbc, 0x77, 0x51, 0xb6, 0x09, 0xba, 0x96, 0x3a, 0xfd, |
| 151 | 0x01, 0x6f, 0x2c, 0x03, 0xfe, 0x6b, 0x29, 0x70, 0x4f, 0xf5, 0x62, 0x20, | 151 | 0xed, 0x50, 0x30, 0x96, 0x05, 0xfb, 0xb5, 0x1c, 0xba, 0xbb, 0x7e, 0x25, |
| 152 | 0x3b, 0x4f, 0xdd, 0x45, 0x79, 0xb5, 0xde, 0xe6, 0xfb, 0xf6, 0xbe, 0x66, | 152 | 0x94, 0x5b, 0xe0, 0xde, 0x45, 0x79, 0xbd, 0x51, 0xe7, 0x1b, 0x7d, 0xff, |
| 153 | 0xff, 0x06, 0x4b, 0x93, 0xc4, 0x80, 0x46, 0xd6, 0xe1, 0x9a, 0x51, 0x37, | 153 | 0x0a, 0xc6, 0x34, 0x72, 0xee, 0x35, 0xe8, 0xd4, 0x69, 0xe2, 0x41, 0x2b, |
| 154 | 0x2f, 0x98, 0xde, 0x9c, 0x3f, 0x09, 0x3e, 0x51, 0xaf, 0xc9, 0x37, 0xf8, | 154 | 0xe7, 0x91, 0x7f, 0xb4, 0x2d, 0x8f, 0xd8, 0xc1, 0xfa, 0x0f, 0x81, 0x66, |
| 155 | 0xc0, 0x10, 0x75, 0x96, 0xcf, 0xe2, 0x06, 0xd3, 0xd4, 0x3b, 0x09, 0x05, | 155 | 0xb4, 0x49, 0xa4, 0x21, 0xec, 0x61, 0x84, 0xfb, 0x97, 0xcf, 0xe2, 0x87, |
| 156 | 0x41, 0x46, 0x2e, 0xc6, 0x3a, 0x77, 0x80, 0xce, 0xb5, 0x3a, 0xcd, 0x75, | 156 | 0x33, 0xdc, 0x83, 0x12, 0x09, 0x67, 0x80, 0x7f, 0xe3, 0xac, 0xb3, 0x0b, |
| 157 | 0x14, 0x6d, 0x43, 0x58, 0x36, 0x80, 0xe7, 0x4e, 0x19, 0x9f, 0xcf, 0x60, | 157 | 0x73, 0x0e, 0xf6, 0x77, 0x71, 0x65, 0x7f, 0x77, 0xcb, 0xc4, 0x42, 0x16, |
| 158 | 0xcc, 0x3b, 0x75, 0xdf, 0xab, 0x7c, 0x0c, 0xfa, 0x48, 0xe8, 0xf5, 0xd8, | 158 | 0x3a, 0x20, 0xaf, 0xfa, 0x89, 0xba, 0x6b, 0x6c, 0x0b, 0xea, 0x27, 0x35, |
| 159 | 0xe0, 0xdb, 0x41, 0x94, 0x39, 0xba, 0xac, 0xa1, 0xae, 0xcc, 0x5f, 0xb7, | 159 | 0x1f, 0x36, 0x1b, 0xfd, 0x87, 0x32, 0x4f, 0x97, 0x35, 0x35, 0x94, 0x19, |
| 160 | 0x8f, 0x62, 0x7c, 0xfa, 0x8a, 0x61, 0x8d, 0x7f, 0x5c, 0x37, 0xc7, 0xf5, | 160 | 0x7e, 0x15, 0x30, 0x16, 0x6d, 0xc4, 0x88, 0xc6, 0x3d, 0xbe, 0x9f, 0x27, |
| 161 | 0xee, 0xfb, 0x87, 0x42, 0xdd, 0xb8, 0x50, 0x2a, 0x98, 0x41, 0x25, 0xa3, | 161 | 0x9f, 0xfb, 0xf7, 0x09, 0xf7, 0xc4, 0xa5, 0x72, 0xd1, 0x0e, 0x2b, 0xd9, |
| 162 | 0x2f, 0xfc, 0x4e, 0x4d, 0x46, 0x81, 0x97, 0x55, 0x2f, 0xe4, 0x31, 0x69, | 162 | 0x5c, 0xfc, 0xd8, 0xaa, 0x6c, 0x02, 0x27, 0xab, 0x5e, 0x48, 0x5b, 0xce, |
| 163 | 0x69, 0x06, 0x4f, 0x07, 0x41, 0x2b, 0x78, 0xd7, 0x1e, 0x00, 0xff, 0x9a, | 163 | 0xa5, 0x15, 0xb4, 0x1c, 0xc2, 0x1a, 0x40, 0xb3, 0xce, 0x10, 0xe8, 0xd6, |
| 164 | 0x25, 0x5f, 0x4d, 0xeb, 0x77, 0x2c, 0x0f, 0xc9, 0x68, 0xcc, 0xf7, 0x47, | 164 | 0x2a, 0x85, 0xfa, 0x2e, 0xfd, 0x8e, 0xe5, 0x11, 0x19, 0x8b, 0x1b, 0x3b, |
| 165 | 0xb7, 0x99, 0x1e, 0xe6, 0x45, 0x9d, 0xd2, 0x8f, 0x83, 0x9e, 0x0e, 0x98, | 165 | 0xf4, 0xe7, 0x5b, 0x03, 0xac, 0x8b, 0x3a, 0xe5, 0xff, 0x1d, 0x0e, 0x64, |
| 166 | 0x92, 0x3f, 0x39, 0x08, 0x59, 0x23, 0x26, 0x6b, 0x80, 0xac, 0xc5, 0x94, | 166 | 0xdf, 0x96, 0xc2, 0xe9, 0x21, 0xc8, 0x18, 0xb1, 0xd8, 0x26, 0x2d, 0x63, |
| 167 | 0xad, 0x37, 0x6c, 0xd6, 0xc7, 0xbb, 0xd3, 0xbf, 0x17, 0xf4, 0xda, 0xb0, | 167 | 0xec, 0x07, 0xe5, 0x67, 0x29, 0xc3, 0xa2, 0xf5, 0xe7, 0x20, 0xd2, 0x1f, |
| 168 | 0x9e, 0xdf, 0xc6, 0x1f, 0xbb, 0x6d, 0xa5, 0xed, 0xa8, 0x63, 0x48, 0x50, | 168 | 0x87, 0x69, 0xb7, 0xd9, 0x57, 0xe1, 0xb4, 0x69, 0x6f, 0xe6, 0xd1, 0xb1, |
| 169 | 0x8d, 0x8f, 0xb2, 0xd3, 0xab, 0xc7, 0x37, 0xda, 0xfd, 0xf1, 0x1f, 0xd1, | 169 | 0xd2, 0xcf, 0x98, 0x67, 0x49, 0x58, 0xcd, 0x05, 0x65, 0x67, 0xd7, 0xce, |
| 170 | 0x7d, 0xb5, 0xd5, 0xf5, 0x15, 0xbb, 0xce, 0xf8, 0x78, 0x77, 0xfa, 0xa3, | 170 | 0xc5, 0xea, 0x34, 0x73, 0x79, 0x34, 0x1c, 0xcc, 0xa5, 0xa3, 0xa1, 0xaf, |
| 171 | 0x9b, 0xbd, 0x36, 0xb1, 0xba, 0x36, 0xed, 0x6b, 0xda, 0xb0, 0xbe, 0x3f, | 171 | 0x78, 0xc3, 0x5c, 0x9a, 0x30, 0x97, 0xb8, 0xb2, 0x37, 0x9c, 0xcb, 0x05, |
| 172 | 0x06, 0xde, 0x9d, 0xbe, 0xab, 0xd9, 0x6b, 0xc3, 0x7a, 0x0d, 0xf0, 0x6d, | 172 | 0xf0, 0xbe, 0x70, 0xf6, 0xc6, 0xeb, 0x82, 0x36, 0xf1, 0x86, 0x36, 0x9d, |
| 173 | 0x7c, 0x47, 0xd9, 0xdf, 0x5f, 0x27, 0xfb, 0xfb, 0x21, 0xfb, 0xbe, 0x4c, | 173 | 0xeb, 0xda, 0xb0, 0xbe, 0x19, 0x03, 0xef, 0xce, 0x5e, 0xdd, 0x1c, 0xb4, |
| 174 | 0xad, 0xc5, 0xc9, 0x7e, 0xbc, 0xc3, 0x38, 0x87, 0xd8, 0xaa, 0x16, 0xd7, | 174 | 0x61, 0xbd, 0x26, 0xd8, 0x37, 0xbe, 0x53, 0x7e, 0x5b, 0x83, 0xfc, 0x1f, |
| 175 | 0x84, 0x4e, 0x34, 0x03, 0xb7, 0xb4, 0x30, 0x96, 0xd1, 0xb8, 0x98, 0xb1, | 175 | 0x84, 0xfc, 0x1b, 0xb9, 0x32, 0xb6, 0xd9, 0xf0, 0x75, 0x53, 0x28, 0x7f, |
| 176 | 0x0d, 0x71, 0xb0, 0xd8, 0x21, 0xe9, 0x82, 0x8d, 0xea, 0x8a, 0xef, 0xa3, | 176 | 0xf2, 0x03, 0xf4, 0x3d, 0x43, 0x63, 0xe5, 0x25, 0xf8, 0x0f, 0x49, 0x29, |
| 177 | 0xc2, 0x55, 0x62, 0x0a, 0x2f, 0x67, 0xf4, 0x18, 0x8c, 0x6b, 0xc8, 0x77, | 177 | 0xa4, 0xe1, 0x9b, 0xd8, 0x83, 0xa2, 0xfc, 0x89, 0x34, 0x7c, 0x16, 0x7b, |
| 178 | 0xe6, 0x73, 0x2b, 0x71, 0x4e, 0x07, 0xe2, 0x20, 0xe2, 0x5d, 0xe2, 0x25, | 178 | 0xb3, 0xc2, 0x5b, 0x85, 0x74, 0xbf, 0xb6, 0x59, 0xdf, 0x97, 0x09, 0xc8, |
| 179 | 0x9f, 0x7e, 0x9f, 0x9e, 0x03, 0x46, 0x4d, 0x27, 0x32, 0xc6, 0x60, 0x75, | 179 | 0x70, 0x21, 0x9d, 0xc6, 0x78, 0xd0, 0xd5, 0x6e, 0x2f, 0xda, 0x71, 0xdc, |
| 180 | 0xd0, 0xf0, 0x74, 0x82, 0xef, 0x0f, 0x68, 0x9f, 0xb6, 0x96, 0xde, 0xb7, | 180 | 0xb7, 0x22, 0xb4, 0x23, 0x17, 0xca, 0x1f, 0x47, 0x7e, 0x33, 0xde, 0xff, |
| 181 | 0xaf, 0xa1, 0x97, 0xb8, 0x2a, 0x21, 0x13, 0x90, 0x91, 0xd0, 0x09, 0xda, | 181 | 0xa9, 0x9e, 0x4f, 0x1b, 0xea, 0x7c, 0x5a, 0xf9, 0x26, 0x17, 0x54, 0x1d, |
| 182 | 0xd8, 0xe7, 0x46, 0x16, 0x67, 0x89, 0x1f, 0xfa, 0xc0, 0x17, 0xd2, 0x4b, | 182 | 0xf6, 0x71, 0x19, 0xf9, 0x3b, 0x50, 0x07, 0x9b, 0x1c, 0x12, 0x68, 0xb9, |
| 183 | 0xfe, 0x51, 0x97, 0x5b, 0x60, 0x1f, 0xba, 0x52, 0x65, 0xd4, 0x67, 0x7c, | 183 | 0x3b, 0xf1, 0xfb, 0x36, 0xca, 0x3e, 0x84, 0xb2, 0x2f, 0xa3, 0xec, 0x76, |
| 184 | 0x3d, 0xae, 0xe2, 0xb2, 0x66, 0xa4, 0x08, 0x9e, 0x40, 0xeb, 0x38, 0x68, | 184 | 0xe4, 0x5f, 0x5c, 0xd7, 0xef, 0x36, 0xe4, 0x1f, 0xc3, 0x7b, 0xac, 0xd3, |
| 185 | 0x1d, 0xd7, 0x31, 0xd9, 0x3e, 0xd8, 0xef, 0xd0, 0xb4, 0x4f, 0xeb, 0x8d, | 185 | 0xfe, 0x06, 0xde, 0xdf, 0x81, 0xdf, 0x97, 0xd7, 0xd5, 0xf9, 0x37, 0xeb, |
| 186 | 0x21, 0x7f, 0x6d, 0x56, 0xd3, 0x5e, 0xef, 0x77, 0x3c, 0xfc, 0x75, 0x4f, | 186 | 0xf2, 0xc6, 0x2f, 0xf8, 0x63, 0x2d, 0x73, 0xc6, 0x27, 0x08, 0xf4, 0xe8, |
| 187 | 0x0f, 0x65, 0xc6, 0x2a, 0x10, 0xb3, 0x8d, 0x2b, 0xf9, 0x00, 0xf6, 0x33, | 187 | 0x54, 0xb9, 0x35, 0x34, 0x7c, 0x3a, 0x16, 0xda, 0x73, 0x9a, 0x78, 0x23, |
| 188 | 0xc4, 0xd3, 0xa5, 0x16, 0xdf, 0xff, 0x72, 0x3e, 0xf4, 0xff, 0xd4, 0x79, | 188 | 0xa2, 0xfc, 0x80, 0x08, 0xfc, 0x80, 0xe9, 0x39, 0x3a, 0x88, 0x11, 0x94, |
| 189 | 0x7f, 0x0e, 0xcd, 0xd2, 0x79, 0x82, 0x73, 0x58, 0xa1, 0x3f, 0xc6, 0xdd, | 189 | 0x11, 0xbb, 0xcb, 0x40, 0x93, 0xf4, 0x78, 0x57, 0xb0, 0x4f, 0x0a, 0xb5, |
| 190 | 0x8d, 0xfd, 0xb0, 0x9b, 0x79, 0x45, 0xeb, 0x4e, 0xd9, 0x5b, 0x7a, 0xa7, | 190 | 0x2e, 0xe4, 0xb9, 0x7f, 0x20, 0x63, 0xb5, 0x16, 0xc8, 0x75, 0x4f, 0xba, |
| 191 | 0xa6, 0xbf, 0x19, 0xf4, 0x8f, 0x42, 0xb6, 0x6b, 0x36, 0x23, 0x5f, 0x19, | 191 | 0x0a, 0x19, 0x3b, 0x00, 0xdf, 0x64, 0x02, 0x36, 0x70, 0xa2, 0xd6, 0x25, |
| 192 | 0x43, 0xde, 0xc3, 0x62, 0xe4, 0x71, 0xbe, 0x42, 0xfb, 0xa1, 0xe7, 0x13, | 192 | 0x0f, 0xd4, 0xae, 0x44, 0x02, 0x39, 0x32, 0x63, 0x3f, 0xbd, 0x6e, 0xec, |
| 193 | 0xe5, 0x7c, 0xd6, 0xda, 0x96, 0xf5, 0xf8, 0xfa, 0x8e, 0x35, 0x7c, 0x15, | 193 | 0x18, 0xfd, 0x0a, 0xc8, 0xfd, 0xfc, 0xe8, 0xfe, 0x39, 0x8e, 0x6f, 0x75, |
| 194 | 0xcd, 0xd7, 0x88, 0x34, 0x9c, 0x50, 0x71, 0x2d, 0xfa, 0x25, 0xaf, 0xe9, | 194 | 0x47, 0xa4, 0x0d, 0x73, 0xa0, 0xff, 0x28, 0xbd, 0x11, 0xe9, 0x49, 0x4e, |
| 195 | 0xbf, 0x9e, 0x1b, 0x99, 0x9c, 0x95, 0xbe, 0xb0, 0x90, 0xbe, 0x38, 0xcb, | 195 | 0x29, 0x07, 0xb5, 0x28, 0xe1, 0x4c, 0x0f, 0xec, 0x83, 0xca, 0xc3, 0x5f, |
| 196 | 0xfa, 0x1b, 0xa4, 0xcb, 0xb9, 0x88, 0x79, 0xe7, 0xb1, 0xde, 0xc6, 0xb4, | 196 | 0x84, 0xbe, 0xab, 0xad, 0xfa, 0x91, 0xc3, 0x2b, 0x7e, 0x64, 0x17, 0xfc, |
| 197 | 0x27, 0xdf, 0xe4, 0x6f, 0xbe, 0x12, 0x45, 0x2c, 0xcd, 0xb1, 0xc9, 0x33, | 197 | 0xcc, 0x17, 0x23, 0xc1, 0xde, 0x6f, 0x85, 0x6e, 0xb8, 0x9e, 0x38, 0x47, |
| 198 | 0xd2, 0x6f, 0x2a, 0x7a, 0x56, 0xf8, 0x0d, 0xfa, 0x3e, 0x56, 0x59, 0xcb, | 198 | 0xe9, 0x77, 0xee, 0xf1, 0x9c, 0xd7, 0xae, 0xf3, 0x94, 0x65, 0xe8, 0x0b, |
| 199 | 0xdb, 0x7a, 0x3b, 0xe3, 0xc7, 0xec, 0xdf, 0x35, 0x3d, 0xbd, 0x58, 0x2f, | 199 | 0x2b, 0xaa, 0xf4, 0x95, 0x58, 0x78, 0x37, 0x40, 0xf9, 0x45, 0x7e, 0xa1, |
| 200 | 0x66, 0x6f, 0x86, 0x7d, 0x0c, 0xd1, 0x36, 0x82, 0xf7, 0xdc, 0x5f, 0x59, | 200 | 0x71, 0x7f, 0xff, 0x0e, 0xf6, 0x32, 0xdf, 0x1b, 0x39, 0xc3, 0x3f, 0x4a, |
| 201 | 0x0a, 0x11, 0x83, 0x5f, 0x28, 0x85, 0x95, 0xcd, 0xcb, 0x3a, 0x2d, 0x5a, | 201 | 0xc6, 0x18, 0xbf, 0xf8, 0x8b, 0x75, 0x6b, 0x3b, 0xb0, 0x6e, 0x6d, 0x91, |
| 202 | 0x3f, 0x6e, 0xd3, 0xbe, 0x23, 0xac, 0x6c, 0xb6, 0x18, 0x26, 0x71, 0x09, | 202 | 0x15, 0xba, 0x72, 0x8d, 0x51, 0xac, 0x71, 0x69, 0x8e, 0xb4, 0xed, 0x87, |
| 203 | 0xca, 0x90, 0x9f, 0x67, 0xde, 0xa7, 0xe3, 0xde, 0x5d, 0x61, 0xfb, 0x0f, | 203 | 0x7c, 0x8a, 0x1b, 0x11, 0xca, 0x31, 0xf5, 0x6a, 0x1b, 0x74, 0x35, 0x69, |
| 204 | 0x43, 0xbe, 0x4d, 0xa8, 0xd1, 0x55, 0x1f, 0x93, 0xbb, 0xc0, 0x72, 0xef, | 204 | 0x17, 0x11, 0xc6, 0x3c, 0x26, 0xb0, 0xa6, 0x09, 0xac, 0x69, 0xa2, 0x81, |
| 205 | 0x84, 0xdc, 0xde, 0x89, 0xb8, 0x3b, 0x21, 0xf9, 0x14, 0xf5, 0x68, 0x40, | 205 | 0x8e, 0x07, 0x56, 0xd6, 0x64, 0xe6, 0x8d, 0x7a, 0x6a, 0xbf, 0xf1, 0x99, |
| 206 | 0xc5, 0x26, 0x86, 0xbd, 0x0f, 0x65, 0x4d, 0x28, 0x83, 0x13, 0x33, 0x31, | 206 | 0x3f, 0xe8, 0xa9, 0x36, 0x83, 0x69, 0x38, 0x97, 0xdc, 0xba, 0xb9, 0x90, |
| 207 | 0x7f, 0xfb, 0x77, 0x65, 0x1c, 0x32, 0x9e, 0x4f, 0xf5, 0x82, 0x0e, 0xda, | 207 | 0x16, 0x9c, 0xcb, 0xca, 0x3c, 0xe2, 0x8c, 0x1c, 0x1d, 0xac, 0x91, 0xaf, |
| 208 | 0x60, 0x60, 0x1c, 0x3b, 0xc5, 0xb8, 0x1d, 0x7f, 0xfd, 0x61, 0x6f, 0x5e, | 208 | 0x1c, 0x73, 0xaf, 0x4c, 0x96, 0x3f, 0xa0, 0xe7, 0xd1, 0x8a, 0x79, 0x8c, |
| 209 | 0xbb, 0x90, 0x47, 0x0c, 0x9f, 0xea, 0xd4, 0x75, 0x36, 0x08, 0xf7, 0x7f, | 209 | 0x41, 0x6f, 0x70, 0x3c, 0xec, 0xff, 0xda, 0x38, 0x9e, 0xe3, 0xe4, 0xbf, |
| 210 | 0xf2, 0x66, 0x0b, 0xd2, 0xee, 0x35, 0x75, 0xdf, 0x8f, 0xfc, 0x7b, 0x75, | 210 | 0x9e, 0x8b, 0xa1, 0x05, 0xfd, 0xb6, 0x84, 0xc6, 0xe2, 0x86, 0x5e, 0xae, |
| 211 | 0xff, 0x05, 0xbc, 0xdf, 0x86, 0xdf, 0x20, 0xca, 0x6e, 0x47, 0x99, 0x83, | 211 | 0xc2, 0x0e, 0x97, 0xca, 0xff, 0x6d, 0x6b, 0x30, 0xb7, 0xa4, 0x9e, 0x47, |
| 212 | 0xb2, 0xf7, 0x20, 0xff, 0x7e, 0xbd, 0x1f, 0xe0, 0xb7, 0x69, 0x41, 0xfe, | 212 | 0x40, 0x63, 0x60, 0x78, 0x60, 0xa9, 0xbc, 0xd6, 0x07, 0x8d, 0x74, 0xbd, |
| 213 | 0x31, 0xbc, 0x87, 0xad, 0x30, 0x5f, 0xc6, 0xfb, 0xf7, 0xe2, 0xf7, 0xee, | 213 | 0xbb, 0x49, 0xeb, 0x2b, 0xc8, 0x40, 0x63, 0xf9, 0xa7, 0x9a, 0x56, 0xeb, |
| 214 | 0x35, 0x75, 0xda, 0xd6, 0xe4, 0x3f, 0xb5, 0xc2, 0x83, 0x0b, 0xa5, 0x9f, | 214 | 0x32, 0x3f, 0xaf, 0xf3, 0x5b, 0x42, 0xc3, 0x27, 0x4d, 0xd9, 0xd5, 0xa6, |
| 215 | 0x69, 0xbb, 0x46, 0x79, 0x66, 0xfe, 0x94, 0x7e, 0xf7, 0xce, 0xd0, 0xea, | 215 | 0x77, 0xf6, 0xf7, 0xd5, 0x26, 0xa3, 0x3f, 0x2e, 0x95, 0x1b, 0xf7, 0xfb, |
| 216 | 0xf2, 0x1d, 0x7e, 0xbe, 0x6e, 0x0d, 0x3b, 0xb1, 0x86, 0x3e, 0xc6, 0x7c, | 216 | 0x21, 0x2b, 0xb0, 0x3b, 0x45, 0x29, 0x0d, 0x64, 0xa1, 0xe7, 0x68, 0x7f, |
| 217 | 0xbb, 0xf6, 0x5d, 0x6f, 0xf7, 0xe2, 0xf4, 0x92, 0xdf, 0x8e, 0x7e, 0xed, | 217 | 0x86, 0xac, 0xc0, 0xf6, 0xb0, 0xce, 0x21, 0x85, 0x1d, 0x23, 0x99, 0x2a, |
| 218 | 0xce, 0x35, 0x63, 0x3c, 0xdf, 0x50, 0xcb, 0x37, 0x07, 0x86, 0x4e, 0xb2, | 218 | 0xe5, 0x1e, 0xb4, 0xac, 0x8d, 0xe6, 0x66, 0x7c, 0x7f, 0xca, 0x5b, 0x4e, |
| 219 | 0xec, 0x72, 0xc3, 0xea, 0x3a, 0x6f, 0xd6, 0xe5, 0x37, 0x06, 0x86, 0x94, | 219 | 0x84, 0x85, 0x7a, 0x99, 0xb8, 0x8d, 0xe5, 0xcf, 0xa0, 0x1c, 0x76, 0xbd, |
| 220 | 0x8f, 0xbb, 0xab, 0x71, 0x75, 0x9d, 0x64, 0x63, 0x6d, 0x1e, 0x35, 0x5b, | 220 | 0x3e, 0x26, 0x6c, 0xb7, 0x31, 0x3e, 0x4b, 0x6a, 0x7c, 0x16, 0x00, 0xbb, |
| 221 | 0x18, 0x4a, 0x2f, 0x53, 0x8e, 0xa1, 0x0b, 0xdf, 0x1a, 0xc9, 0x4e, 0xb9, | 221 | 0x9c, 0xc2, 0x53, 0x4f, 0x8d, 0xc2, 0xfe, 0xeb, 0xe7, 0xa7, 0xf1, 0x9c, |
| 222 | 0xee, 0x84, 0xb3, 0x14, 0x0f, 0x0a, 0x7d, 0x10, 0xb1, 0x2a, 0xcb, 0x5f, | 222 | 0x6c, 0xc4, 0x80, 0xe8, 0xb7, 0x32, 0x9a, 0x9b, 0x53, 0x76, 0x00, 0xfb, |
| 223 | 0x46, 0x39, 0xb0, 0x4c, 0x75, 0x54, 0x68, 0x93, 0xd6, 0xc7, 0xa4, 0x09, | 223 | 0x81, 0xbc, 0x3a, 0x03, 0x5e, 0x85, 0x64, 0x5a, 0xd9, 0x04, 0xce, 0x83, |
| 224 | 0x8d, 0x49, 0x55, 0x36, 0x94, 0x55, 0x18, 0xf2, 0xf9, 0x11, 0x60, 0x1e, | 224 | 0xed, 0x2a, 0xa3, 0xdd, 0x8b, 0x4c, 0xab, 0xa3, 0xee, 0x62, 0x58, 0x0e, |
| 225 | 0xfd, 0xfc, 0x02, 0x9e, 0x13, 0xf5, 0xb8, 0x17, 0xfd, 0x2e, 0x8d, 0x64, | 225 | 0xc4, 0x83, 0xb6, 0xcc, 0x27, 0x17, 0x8d, 0xdd, 0x6e, 0x91, 0x68, 0x86, |
| 226 | 0x67, 0xe9, 0xf3, 0x2e, 0x8e, 0xec, 0x99, 0xa5, 0xce, 0x5f, 0x82, 0xce, | 226 | 0xba, 0xcd, 0x49, 0x03, 0x87, 0x62, 0x3d, 0x47, 0x47, 0xa7, 0x5d, 0xda, |
| 227 | 0x07, 0x64, 0x52, 0xf9, 0x3f, 0xd2, 0xc1, 0x76, 0x4b, 0x23, 0x9d, 0x0b, | 227 | 0xcb, 0xff, 0x03, 0x79, 0x68, 0x91, 0x26, 0x25, 0x27, 0x4f, 0xea, 0xb1, |
| 228 | 0x4c, 0x97, 0x47, 0xec, 0x85, 0xa0, 0xec, 0x8b, 0x79, 0x6d, 0x99, 0x4f, | 228 | 0xce, 0x60, 0xac, 0xad, 0x98, 0x6b, 0x18, 0x3a, 0x32, 0x92, 0xc0, 0x38, |
| 229 | 0x2c, 0xf8, 0x3a, 0x10, 0x95, 0x70, 0x9a, 0x32, 0x69, 0xa5, 0x80, 0xbd, | 229 | 0x87, 0x2d, 0x77, 0x1b, 0xc6, 0xa3, 0xd7, 0xd8, 0x25, 0x53, 0x75, 0xca, |
| 230 | 0x31, 0x9f, 0x27, 0x47, 0x26, 0x6d, 0xca, 0xe7, 0x87, 0x1a, 0xa4, 0x25, | 230 | 0xfa, 0xdf, 0x44, 0x56, 0x7d, 0xc5, 0x13, 0x68, 0x67, 0x7c, 0x14, 0x8e, |
| 231 | 0x2a, 0x0d, 0xca, 0xde, 0x3c, 0xa5, 0xc7, 0xba, 0x84, 0xb1, 0x36, 0x29, | 231 | 0x57, 0x05, 0x46, 0x69, 0xc1, 0x3a, 0x1c, 0x3b, 0x17, 0x86, 0xed, 0x9b, |
| 232 | 0x7d, 0xca, 0xda, 0xa1, 0x38, 0xc6, 0x39, 0x68, 0xd8, 0xbd, 0x18, 0x8f, | 232 | 0x33, 0x75, 0x38, 0xa7, 0xe3, 0xa3, 0xa9, 0xc5, 0x14, 0xfa, 0xea, 0xa2, |
| 233 | 0x91, 0x72, 0x87, 0x4c, 0x54, 0xa9, 0x37, 0xdb, 0xc2, 0xb5, 0xf8, 0xf8, | 233 | 0xec, 0x41, 0xe6, 0xc2, 0xf8, 0xb1, 0x6f, 0xb6, 0x83, 0x4e, 0x1e, 0x34, |
| 234 | 0x3c, 0xda, 0xf9, 0x71, 0x19, 0xc7, 0x2b, 0x03, 0x97, 0x41, 0x96, 0xd3, | 234 | 0x76, 0x7c, 0xb5, 0xbd, 0x69, 0xd7, 0xbd, 0x38, 0xa2, 0x65, 0xf7, 0xaf, |
| 235 | 0x96, 0x99, 0x0d, 0xc2, 0xcf, 0xcf, 0xfa, 0x75, 0x48, 0xd3, 0xd9, 0x91, | 235 | 0xfc, 0xec, 0x38, 0xdf, 0x37, 0xc6, 0x07, 0x4c, 0x3b, 0x53, 0x27, 0xac, |
| 236 | 0xe4, 0x42, 0x12, 0x7d, 0x75, 0xd0, 0x86, 0xc1, 0x76, 0x05, 0xf1, 0x63, | 236 | 0xf5, 0xf1, 0x7d, 0xd1, 0xd5, 0x79, 0x3e, 0x35, 0x1a, 0xf8, 0x31, 0x12, |
| 237 | 0xdf, 0x6c, 0x07, 0x5f, 0x34, 0x40, 0x3f, 0x72, 0x1e, 0x7e, 0xa4, 0x43, | 237 | 0xc9, 0xf7, 0x0d, 0x6a, 0xbe, 0x3d, 0x8d, 0x32, 0xb6, 0xc7, 0x5e, 0xa8, |
| 238 | 0x0e, 0x95, 0x54, 0x1f, 0x09, 0xf6, 0x51, 0xd4, 0x6d, 0x3b, 0x17, 0x1a, | 238 | 0x37, 0x62, 0xf0, 0xa0, 0xdf, 0x22, 0xb0, 0x47, 0xa9, 0xdc, 0x04, 0x5d, |
| 239 | 0x10, 0xdb, 0x24, 0xcd, 0x17, 0xa5, 0xd6, 0x76, 0x48, 0xbc, 0x76, 0x5e, | 239 | 0x93, 0x6d, 0x0f, 0x62, 0x22, 0xef, 0x85, 0xbb, 0xc1, 0x53, 0xf4, 0x53, |
| 240 | 0xdf, 0x3f, 0x77, 0x33, 0xb1, 0x7a, 0xdd, 0x8f, 0x4a, 0x10, 0x74, 0xe4, | 240 | 0x5a, 0x69, 0xab, 0xe2, 0x93, 0xa3, 0x2f, 0xa1, 0xff, 0x23, 0xe5, 0x60, |
| 241 | 0xd0, 0x07, 0xc7, 0xaf, 0xf5, 0xed, 0xf7, 0x97, 0x34, 0x97, 0xaf, 0xe9, | 241 | 0xaf, 0x05, 0x74, 0x20, 0x5e, 0x0a, 0xc9, 0x92, 0x9b, 0x84, 0x7f, 0x47, |
| 242 | 0x6b, 0x93, 0x8e, 0xb9, 0xac, 0x44, 0xee, 0xd7, 0x1a, 0x5b, 0xc5, 0x00, | 242 | 0x3b, 0x94, 0x94, 0x97, 0x5d, 0x83, 0x9f, 0x88, 0x9d, 0x50, 0xbf, 0xce, |
| 243 | 0x90, 0x07, 0x09, 0xe5, 0x7a, 0x60, 0x17, 0xab, 0x03, 0x5a, 0x46, 0x5e, | 243 | 0xf9, 0x70, 0xdd, 0x27, 0xb0, 0x6e, 0x5f, 0x66, 0xbd, 0x40, 0x3e, 0xfa, |
| 244 | 0x40, 0x59, 0x7d, 0x6c, 0xe3, 0xc9, 0x57, 0x01, 0x98, 0xae, 0x08, 0x3d, | 244 | 0xb0, 0x37, 0xff, 0x53, 0xc4, 0x39, 0x4a, 0x3f, 0xe0, 0x6a, 0xa4, 0x71, |
| 245 | 0x0f, 0xa6, 0x33, 0xad, 0xde, 0x5e, 0xd3, 0xf5, 0xe2, 0x19, 0xc8, 0x0d, | 245 | 0x5d, 0xc6, 0x9e, 0x3d, 0xa5, 0x63, 0x93, 0x27, 0x34, 0x2f, 0x2b, 0xe0, |
| 246 | 0xfa, 0x2c, 0xae, 0xb4, 0xe5, 0x9c, 0x5e, 0x18, 0xb9, 0x34, 0x15, 0xc7, | 246 | 0xe5, 0xb6, 0xa4, 0x2d, 0xbd, 0x98, 0x3b, 0xea, 0xf4, 0xf7, 0x00, 0x8f, |
| 247 | 0x9c, 0x3c, 0xbf, 0xe0, 0xf1, 0x9a, 0x3e, 0x27, 0x20, 0x8b, 0x76, 0x02, | 247 | 0xd3, 0xd7, 0x4b, 0x60, 0x3e, 0x36, 0x64, 0x7d, 0xab, 0xb6, 0xfb, 0x9f, |
| 248 | 0x71, 0x33, 0x7d, 0x7c, 0x42, 0x5e, 0xb2, 0x7d, 0xff, 0x43, 0x5f, 0x84, | 248 | 0x89, 0x52, 0x5f, 0xb4, 0xab, 0xb8, 0xe7, 0x09, 0x25, 0x6b, 0x81, 0xec, |
| 249 | 0xfa, 0x55, 0xd2, 0x46, 0xda, 0xcf, 0x63, 0x6e, 0xae, 0xcc, 0x38, 0x9e, | 249 | 0x85, 0xf5, 0x7b, 0xc3, 0xef, 0x30, 0xcd, 0xae, 0xac, 0xc6, 0xf9, 0x8c, |
| 250 | 0x0c, 0xf6, 0xc0, 0x8f, 0x7c, 0x23, 0x64, 0x1d, 0x66, 0x7c, 0x75, 0x25, | 250 | 0xae, 0x66, 0xfd, 0x39, 0xd4, 0x0f, 0x61, 0x4d, 0xbe, 0x3f, 0xa9, 0xe6, |
| 251 | 0x54, 0x3f, 0x1f, 0x1f, 0x2b, 0x3c, 0xaf, 0xf7, 0x7e, 0xcf, 0x6b, 0x79, | 251 | 0x3b, 0x0f, 0x5e, 0x87, 0xa5, 0xb4, 0x22, 0x8f, 0xf3, 0x90, 0xc7, 0x26, |
| 252 | 0x59, 0x82, 0xbc, 0xf4, 0x26, 0x4c, 0xe9, 0x06, 0xed, 0xa8, 0xd3, 0xd7, | 252 | 0x91, 0x8e, 0x46, 0xb9, 0xa1, 0xac, 0xbc, 0x1e, 0x65, 0x4c, 0x2e, 0x69, |
| 253 | 0x85, 0x38, 0x87, 0x31, 0x74, 0x1c, 0xf4, 0x98, 0xb0, 0x1d, 0x9b, 0x34, | 253 | 0x19, 0xde, 0x45, 0x88, 0xdd, 0x90, 0x37, 0xbc, 0xe3, 0xf3, 0x46, 0x18, |
| 254 | 0x66, 0xff, 0x77, 0x61, 0xfa, 0xb6, 0x56, 0xb5, 0xaf, 0x7c, 0x5e, 0xc9, | 254 | 0x90, 0x71, 0x27, 0xdf, 0x5f, 0xf2, 0x18, 0x23, 0x6c, 0x96, 0xa2, 0x1d, |
| 255 | 0xb3, 0x27, 0xdf, 0x41, 0xfd, 0xde, 0x97, 0xa9, 0x20, 0x21, 0x8d, 0xd4, | 255 | 0xe0, 0x97, 0x92, 0x47, 0x39, 0xcd, 0x25, 0x23, 0xe2, 0x24, 0x0e, 0xc8, |
| 256 | 0xf6, 0x4f, 0x59, 0xff, 0x39, 0x5d, 0xff, 0x59, 0xd4, 0x0f, 0x60, 0x4e, | 256 | 0x9b, 0xe8, 0x3b, 0x9b, 0x8e, 0x4a, 0xe0, 0xa7, 0x4e, 0x80, 0x6e, 0xcb, |
| 257 | 0xae, 0xbb, 0x57, 0xd1, 0xfb, 0x1c, 0xf8, 0x1e, 0x94, 0xe2, 0x8a, 0xcc, | 257 | 0xb6, 0xef, 0xbf, 0x04, 0xbf, 0xba, 0x0a, 0xbf, 0x66, 0x09, 0x69, 0xa9, |
| 258 | 0x3f, 0x07, 0x99, 0xa7, 0x7c, 0x9f, 0x87, 0xbe, 0x82, 0xf8, 0x7b, 0x29, | 258 | 0x86, 0x3d, 0xd0, 0x12, 0xc1, 0x9e, 0x32, 0x7b, 0x25, 0x26, 0x15, 0xd4, |
| 259 | 0xf7, 0x65, 0x19, 0x3c, 0x9d, 0x6b, 0xe0, 0x5e, 0x67, 0xc2, 0x60, 0xec, | 259 | 0x59, 0xc0, 0xbb, 0xc7, 0x6b, 0x86, 0xcb, 0xbe, 0x6f, 0x61, 0x5d, 0xfb, |
| 260 | 0x49, 0x99, 0xec, 0x90, 0xc7, 0x4b, 0x49, 0x73, 0xa2, 0x6e, 0x2d, 0x77, | 260 | 0xdd, 0xbf, 0xf6, 0x0b, 0xf1, 0xc6, 0xba, 0x06, 0x77, 0x11, 0x33, 0x11, |
| 261 | 0xac, 0x5a, 0x4b, 0xca, 0x80, 0xaa, 0x9f, 0x62, 0xfd, 0x72, 0x9d, 0x0c, | 261 | 0xf3, 0x10, 0xab, 0xf0, 0x1d, 0xf1, 0xc7, 0x61, 0xcc, 0x85, 0x32, 0xdc, |
| 262 | 0xcc, 0xcf, 0x5e, 0xaf, 0x1d, 0x65, 0x80, 0xed, 0xd6, 0xc3, 0xe9, 0xdc, | 262 | 0x26, 0xb1, 0x8c, 0x93, 0x18, 0x11, 0xa3, 0x8b, 0x5f, 0x03, 0xff, 0x8b, |
| 263 | 0x1b, 0x74, 0xdd, 0x45, 0x87, 0xfb, 0xb8, 0x8d, 0x52, 0x50, 0x32, 0x16, | 263 | 0x7e, 0xb3, 0xdb, 0x25, 0xcf, 0x83, 0xd7, 0xcf, 0xd5, 0x0d, 0xef, 0x93, |
| 264 | 0x90, 0xa2, 0x43, 0xbd, 0xca, 0x26, 0x42, 0x62, 0x01, 0x2b, 0x7d, 0x10, | 264 | 0xe0, 0xbd, 0x53, 0x2c, 0x8a, 0x2f, 0x17, 0x3d, 0x37, 0xf9, 0x39, 0xa4, |
| 265 | 0x74, 0x66, 0x52, 0x61, 0xf1, 0xf6, 0x12, 0xc6, 0xb1, 0x06, 0x4b, 0xa6, | 265 | 0xdf, 0xf1, 0x7e, 0x85, 0xb4, 0x78, 0x0a, 0x26, 0x0f, 0x38, 0x1b, 0x7a, |
| 266 | 0xeb, 0x5e, 0xb2, 0x45, 0xca, 0x88, 0x3d, 0x17, 0x91, 0x16, 0x2b, 0xd0, | 266 | 0x75, 0xd6, 0xe0, 0xc7, 0x36, 0xe2, 0x7d, 0x4d, 0xc7, 0xab, 0xe8, 0xd3, |
| 267 | 0xd9, 0x68, 0x08, 0x36, 0xc0, 0x97, 0xf1, 0x88, 0xcc, 0xa1, 0xce, 0x3c, | 267 | 0xb1, 0x2d, 0x80, 0xa5, 0x3b, 0x51, 0x2f, 0x90, 0x6b, 0x53, 0x76, 0x18, |
| 268 | 0xde, 0x3d, 0x5e, 0xf1, 0x25, 0xc6, 0x75, 0x0d, 0xf0, 0x68, 0x8f, 0xfd, | 268 | 0x75, 0x39, 0x07, 0xfa, 0x62, 0xdf, 0xc5, 0x5e, 0xf2, 0xfd, 0x7b, 0xbd, |
| 269 | 0xff, 0xdc, 0x7c, 0xac, 0xbe, 0xae, 0x8f, 0x89, 0x89, 0x65, 0x89, 0x4d, | 269 | 0xc9, 0x86, 0x3d, 0x31, 0x0f, 0x1e, 0x28, 0xd9, 0x1c, 0x68, 0x17, 0xc6, |
| 270 | 0x89, 0x29, 0xf9, 0x8e, 0x38, 0xf1, 0x20, 0x68, 0xa1, 0xce, 0xb6, 0x48, | 270 | 0xee, 0xa4, 0xbf, 0x43, 0xf9, 0x0a, 0x7c, 0x86, 0x8c, 0x0e, 0xd0, 0x26, |
| 271 | 0x24, 0x6d, 0xc5, 0x87, 0xc5, 0xf7, 0xfd, 0x97, 0x21, 0x4b, 0x05, 0xb7, | 271 | 0x24, 0x55, 0xdc, 0x8f, 0xb6, 0xe7, 0x39, 0xd0, 0xfe, 0xd3, 0x35, 0xf2, |
| 272 | 0xd1, 0xee, 0x90, 0x67, 0x20, 0x37, 0xe7, 0x57, 0x70, 0x4c, 0x02, 0x72, | 272 | 0xa1, 0x55, 0xe9, 0xfe, 0xe7, 0xcb, 0xb4, 0xef, 0x01, 0x46, 0x9b, 0x50, |
| 273 | 0x44, 0x3f, 0xea, 0xca, 0x39, 0xc7, 0x4e, 0x7c, 0x0e, 0xe9, 0xb7, 0x9d, | 273 | 0xb1, 0x5c, 0xda, 0x84, 0x34, 0x78, 0x13, 0xc4, 0xf0, 0x1e, 0x50, 0x6d, |
| 274 | 0xdf, 0x22, 0xdf, 0x9e, 0x10, 0xe9, 0x43, 0x2c, 0x04, 0xbb, 0x3e, 0xe3, | 274 | 0x59, 0x8f, 0x6d, 0x1b, 0xf9, 0xc7, 0x3a, 0x5b, 0x81, 0xaf, 0x28, 0x83, |
| 275 | 0x63, 0xfb, 0x16, 0xc6, 0x64, 0x5a, 0x96, 0xae, 0xa0, 0x4f, 0xcb, 0x34, | 275 | 0x6d, 0xc0, 0x25, 0xed, 0x72, 0x20, 0xdd, 0x0c, 0xba, 0x77, 0x28, 0x3c, |
| 276 | 0x00, 0x6a, 0xef, 0x42, 0x3d, 0x4f, 0x37, 0xfc, 0xb2, 0x83, 0xa8, 0x4b, | 276 | 0x65, 0xb9, 0x1f, 0x86, 0xed, 0x02, 0xa6, 0xb3, 0x1d, 0x6f, 0xd5, 0xf7, |
| 277 | 0x1a, 0x18, 0x2f, 0x7f, 0x07, 0x3a, 0xeb, 0xba, 0xf7, 0x39, 0x8b, 0x75, | 277 | 0xb8, 0x1d, 0x65, 0x3f, 0x05, 0xfd, 0x59, 0xb6, 0x49, 0xc7, 0xaf, 0x1f, |
| 278 | 0xb6, 0xe6, 0x39, 0xac, 0xbf, 0x92, 0xf3, 0xfe, 0x56, 0xe1, 0xfe, 0xaa, | 278 | 0xc6, 0xfe, 0xab, 0x6c, 0x0d, 0xe2, 0x22, 0xe4, 0x83, 0xd1, 0x03, 0xc6, |
| 279 | 0xf4, 0xb5, 0xa9, 0x78, 0x8e, 0xcf, 0x90, 0xf7, 0x7e, 0x62, 0xa1, 0x84, | 279 | 0xfe, 0xd9, 0x1a, 0x47, 0x92, 0x37, 0x41, 0x0c, 0xc5, 0x52, 0x75, 0x89, |
| 280 | 0xc2, 0x9a, 0xc4, 0x0d, 0xe7, 0xc1, 0xfb, 0x4f, 0x2a, 0x4c, 0x43, 0xfc, | 280 | 0xe7, 0x1b, 0xfd, 0x16, 0xee, 0x3b, 0xdf, 0xbf, 0xe8, 0x29, 0x7b, 0x0a, |
| 281 | 0x06, 0xfa, 0x4b, 0xc4, 0x14, 0x1e, 0x96, 0xf6, 0x70, 0x1d, 0xb1, 0x45, | 281 | 0x1e, 0xec, 0x86, 0x0d, 0x8b, 0x68, 0x5a, 0xb7, 0x82, 0xd6, 0x81, 0x8d, |
| 282 | 0x0a, 0x6b, 0xe3, 0xe3, 0x0b, 0xb6, 0x65, 0x3d, 0xb6, 0xad, 0x5f, 0x3f, | 282 | 0x4d, 0x76, 0x40, 0xef, 0xb8, 0x56, 0x53, 0x40, 0x3f, 0x62, 0x85, 0xbf, |
| 283 | 0xd6, 0xd9, 0x14, 0xc8, 0x1d, 0xa3, 0x3c, 0xd3, 0x3f, 0xb6, 0xca, 0xbe, | 283 | 0x85, 0x1f, 0x4f, 0xff, 0x81, 0x38, 0x81, 0x73, 0x47, 0xbb, 0x05, 0xd6, |
| 284 | 0x54, 0x23, 0xf8, 0xde, 0xa6, 0xfd, 0xf8, 0xfb, 0x80, 0xd9, 0x80, 0xbd, | 284 | 0xa5, 0x2d, 0x7e, 0x0c, 0x63, 0x84, 0x25, 0xd9, 0xc9, 0xfc, 0x03, 0xba, |
| 285 | 0x4d, 0xcb, 0xa9, 0xd9, 0x9e, 0xf7, 0xa0, 0xec, 0x17, 0xe0, 0x3f, 0xcb, | 285 | 0x0d, 0x9f, 0x7d, 0xe9, 0xdd, 0xd1, 0x28, 0xcf, 0x83, 0x98, 0x27, 0xd7, |
| 286 | 0xf6, 0x37, 0x78, 0x7e, 0xf2, 0x61, 0xe8, 0xf2, 0xdc, 0x26, 0x6f, 0xef, | 286 | 0x63, 0xe2, 0x7a, 0x5d, 0x4a, 0x07, 0xac, 0xca, 0x85, 0x99, 0x93, 0x19, |
| 287 | 0x8a, 0xeb, 0xe0, 0xe3, 0x04, 0x1f, 0xf7, 0x99, 0x1a, 0xef, 0x73, 0x6d, | 287 | 0x97, 0x73, 0x4b, 0x48, 0x07, 0xe6, 0x76, 0x37, 0x74, 0xf4, 0x8e, 0x0e, |
| 288 | 0xbc, 0x7d, 0x2e, 0x43, 0xd5, 0x65, 0xac, 0x55, 0x1f, 0x5b, 0x52, 0x87, | 288 | 0xf6, 0x69, 0xc6, 0x6e, 0x9c, 0x93, 0xc1, 0x2f, 0x81, 0xdd, 0x8d, 0xba, |
| 289 | 0x5d, 0xf7, 0x9c, 0xe3, 0xe3, 0xc8, 0xed, 0xf0, 0xa1, 0x21, 0xcd, 0xeb, | 289 | 0xcd, 0xb2, 0xa3, 0x93, 0xb4, 0xeb, 0x52, 0xba, 0x7a, 0x95, 0x1f, 0xb4, |
| 290 | 0x66, 0xf0, 0x9a, 0x18, 0x25, 0x22, 0x89, 0x36, 0x62, 0x8a, 0x07, 0x1b, | 290 | 0xbf, 0x1c, 0x7b, 0x7d, 0xf9, 0x1d, 0x0d, 0xf3, 0x6a, 0x3c, 0x03, 0x20, |
| 291 | 0x6a, 0x58, 0xe6, 0x6f, 0xdc, 0xa0, 0xcd, 0x78, 0x8f, 0x38, 0x86, 0xb4, | 291 | 0x76, 0xd8, 0x89, 0x77, 0x9c, 0x13, 0x9c, 0xe4, 0xb8, 0x2f, 0x7b, 0x14, |
| 292 | 0x6f, 0xd7, 0x78, 0x86, 0xd8, 0xe6, 0x31, 0x8c, 0x11, 0x94, 0x44, 0x3b, | 292 | 0xdd, 0x38, 0xb7, 0xc6, 0x79, 0x10, 0x43, 0x71, 0xce, 0x9c, 0xc3, 0x7a, |
| 293 | 0xf3, 0x7f, 0xa9, 0xdb, 0xf0, 0xd9, 0x95, 0xee, 0xad, 0xf5, 0xf2, 0x3c, | 293 | 0x6c, 0xc2, 0xf9, 0xfc, 0x57, 0xcd, 0xc3, 0x4d, 0x7a, 0x5d, 0x06, 0xcb, |
| 294 | 0x00, 0x3a, 0x39, 0x1f, 0x7f, 0xef, 0xb5, 0x43, 0xd9, 0x93, 0x9a, 0x5c, | 294 | 0xa4, 0xd0, 0xf6, 0x3f, 0x60, 0x0d, 0x7c, 0xe6, 0x3a, 0x8c, 0xcd, 0x4e, |
| 295 | 0xf8, 0x34, 0xf9, 0xe3, 0x92, 0xb6, 0xb8, 0xb4, 0x81, 0xb6, 0x7b, 0xe0, | 295 | 0x05, 0xfd, 0xb4, 0x98, 0x78, 0xb0, 0x89, 0x6b, 0x70, 0x5e, 0xdc, 0x33, |
| 296 | 0x53, 0xb6, 0xb6, 0xb1, 0x4f, 0x7f, 0xec, 0x7a, 0x9a, 0xea, 0xf1, 0x55, | 296 | 0x86, 0x4e, 0x1d, 0x9a, 0x47, 0xbb, 0xd7, 0x8d, 0xeb, 0x78, 0x6b, 0xf5, |
| 297 | 0x02, 0x63, 0x34, 0xca, 0xd6, 0x76, 0xf2, 0xae, 0x43, 0xf9, 0x96, 0xda, | 297 | 0xc8, 0xed, 0x0d, 0xeb, 0xeb, 0x97, 0xe2, 0x02, 0xe5, 0xe2, 0x36, 0xa4, |
| 298 | 0x7a, 0xd0, 0xf7, 0x73, 0xec, 0xb5, 0xe5, 0xef, 0xad, 0xa3, 0x6b, 0x2d, | 298 | 0x06, 0x13, 0x0c, 0x40, 0xf7, 0xbf, 0x2b, 0x26, 0xe0, 0x59, 0xd5, 0x78, |
| 299 | 0xe6, 0xdb, 0x86, 0x77, 0xa4, 0xc9, 0x84, 0x5d, 0x72, 0x65, 0x87, 0xe3, | 299 | 0x01, 0x3e, 0x99, 0xd2, 0xfd, 0x6a, 0x2f, 0xc6, 0x90, 0x87, 0x3e, 0xa9, |
| 300 | 0xe3, 0xbb, 0x7a, 0x3a, 0x88, 0xf1, 0x48, 0x33, 0x69, 0xf0, 0x31, 0x39, | 300 | 0xdf, 0x43, 0x19, 0x1b, 0x9f, 0xa8, 0x79, 0xe3, 0x93, 0xb5, 0x81, 0x71, |
| 301 | 0x7f, 0x5c, 0x1b, 0xd2, 0x93, 0xd6, 0xe7, 0x44, 0xfb, 0xf5, 0xbc, 0x6e, | 301 | 0xe2, 0xa9, 0x40, 0xe6, 0x50, 0xbf, 0x26, 0x13, 0xf0, 0xb3, 0xc7, 0x73, |
| 302 | 0xd3, 0x75, 0x92, 0x68, 0xfb, 0xc7, 0x98, 0x03, 0x9f, 0x39, 0x0f, 0x1f, | 302 | 0xaa, 0x9d, 0x8a, 0x31, 0x6c, 0xd0, 0x8f, 0x70, 0x3f, 0x4e, 0x04, 0x63, |
| 303 | 0x1b, 0x26, 0xbd, 0x7e, 0xa2, 0xeb, 0xc5, 0x00, 0xd4, 0x19, 0x9f, 0x4f, | 303 | 0xc5, 0xc6, 0xf3, 0xd0, 0x41, 0x0b, 0xb3, 0xb0, 0x4b, 0xae, 0x93, 0xa5, |
| 304 | 0x6d, 0x7a, 0x8d, 0xb6, 0xaf, 0x19, 0xd7, 0x72, 0x56, 0xdb, 0x91, 0xf7, | 304 | 0x5c, 0xee, 0xf7, 0x9c, 0x11, 0x25, 0x7b, 0x71, 0x67, 0x8c, 0xbc, 0xac, |
| 305 | 0xd4, 0xcd, 0xaf, 0x4f, 0x0a, 0xf3, 0x94, 0x8b, 0x77, 0x21, 0xf5, 0x63, | 305 | 0xce, 0xfe, 0xb2, 0x2c, 0xcc, 0xf9, 0x72, 0x17, 0x74, 0xe1, 0x43, 0x90, |
| 306 | 0xa3, 0x7e, 0xf8, 0x91, 0x0c, 0x62, 0x21, 0xc6, 0x48, 0xd7, 0xc4, 0x47, | 306 | 0x55, 0x39, 0x07, 0x45, 0x78, 0x0e, 0xca, 0xeb, 0x5c, 0x5c, 0xac, 0x53, |
| 307 | 0x3c, 0x47, 0x1c, 0xcb, 0x23, 0x5e, 0x56, 0x7e, 0xc4, 0xf3, 0x91, 0xc8, | 307 | 0x5d, 0x12, 0x3d, 0x96, 0x90, 0xc8, 0x31, 0x62, 0xcb, 0x94, 0x7d, 0x97, |
| 308 | 0xc3, 0x9e, 0x54, 0xef, 0xa5, 0x8c, 0x8d, 0x8d, 0x57, 0x9c, 0xb1, 0xbd, | 308 | 0x08, 0xec, 0xd8, 0x8b, 0x1f, 0xb2, 0xc4, 0x19, 0xcc, 0x4a, 0x2a, 0xf9, |
| 309 | 0x95, 0xfe, 0x31, 0xc6, 0x11, 0x9e, 0xcc, 0xa1, 0x7e, 0x45, 0xc6, 0x0d, | 309 | 0x38, 0x6c, 0x6f, 0x15, 0x69, 0x49, 0x52, 0xe9, 0xb3, 0xe8, 0x2b, 0x7a, |
| 310 | 0xb4, 0xcb, 0xaa, 0x76, 0x6a, 0x1f, 0x68, 0x9d, 0x7e, 0x84, 0xfa, 0x38, | 310 | 0x0e, 0x75, 0xd1, 0x6e, 0xd3, 0x52, 0x12, 0xbf, 0x4e, 0x69, 0x59, 0x0a, |
| 311 | 0xee, 0x8d, 0x15, 0x19, 0xcb, 0xc1, 0x06, 0xcd, 0xcf, 0xc0, 0xc7, 0xd9, | 311 | 0xf6, 0x4a, 0xcb, 0xd2, 0x5a, 0xff, 0x7c, 0x68, 0xc5, 0x3f, 0xe7, 0xfb, |
| 312 | 0x56, 0x86, 0x72, 0xb9, 0xc7, 0xb1, 0x86, 0x95, 0xec, 0xc5, 0xac, 0x51, | 312 | 0xb7, 0x75, 0x5c, 0xe1, 0x8b, 0xfa, 0x8c, 0x81, 0x32, 0x42, 0x7b, 0xa4, |
| 313 | 0xae, 0x65, 0x79, 0xe6, 0x1d, 0xb0, 0xa1, 0xae, 0xdc, 0x0d, 0x5b, 0xf8, | 313 | 0x7c, 0x63, 0xe8, 0xfd, 0x2f, 0xc2, 0xc7, 0x02, 0x0e, 0x2c, 0xc3, 0x97, |
| 314 | 0x10, 0x64, 0x55, 0xce, 0xc0, 0x10, 0x9e, 0x81, 0xf1, 0x3a, 0x13, 0x13, | 314 | 0xca, 0xf8, 0xf2, 0xac, 0x57, 0xf4, 0x73, 0x03, 0xbe, 0xbc, 0xe6, 0xb9, |
| 315 | 0xe3, 0x78, 0x87, 0x84, 0x8f, 0xc4, 0x25, 0x74, 0x84, 0xb1, 0x58, 0xd2, | 315 | 0xc5, 0x82, 0x38, 0x6f, 0x53, 0xdf, 0xfd, 0x85, 0xf7, 0x4f, 0xe4, 0xfe, |
| 316 | 0xbc, 0x5b, 0x04, 0x3e, 0xf1, 0xc5, 0xdb, 0x0d, 0xb1, 0x06, 0x32, 0x92, | 316 | 0x76, 0xe7, 0xfe, 0x6c, 0xa8, 0xe8, 0xb7, 0xc2, 0xb7, 0xba, 0x31, 0x73, |
| 317 | 0x44, 0x3c, 0xd9, 0x6b, 0x96, 0x91, 0x16, 0x25, 0x99, 0x3a, 0x8d, 0xbe, | 317 | 0x58, 0xf6, 0x6f, 0x5f, 0x86, 0x0f, 0x9c, 0xbd, 0x11, 0x38, 0x2b, 0x51, |
| 318 | 0xc2, 0x67, 0x50, 0x17, 0xed, 0x9a, 0x16, 0x13, 0xf8, 0xb5, 0x4b, 0x74, | 318 | 0x50, 0xba, 0xea, 0x75, 0xe5, 0xb7, 0x7d, 0xa2, 0xe7, 0xb0, 0x6c, 0xd9, |
| 319 | 0xd1, 0xd3, 0x95, 0xe8, 0xe2, 0xea, 0x3d, 0x94, 0xc1, 0x95, 0x3d, 0x14, | 319 | 0xee, 0xd8, 0xd7, 0xc2, 0xc4, 0x40, 0x87, 0x25, 0x0f, 0xfd, 0x9f, 0x0f, |
| 320 | 0xbe, 0x7f, 0x43, 0xef, 0xfd, 0x3c, 0xab, 0xe3, 0x1a, 0xca, 0x08, 0x7d, | 320 | 0xbb, 0xf6, 0x5e, 0x71, 0x46, 0x1e, 0x11, 0x9e, 0x0d, 0xba, 0xd2, 0x7d, |
| 321 | 0x9b, 0x8a, 0xcd, 0x60, 0xc7, 0x9f, 0x45, 0x2c, 0x6c, 0x4b, 0xae, 0x04, | 321 | 0xcc, 0x4d, 0x7c, 0x32, 0xd4, 0x7b, 0xf0, 0x93, 0xc0, 0xae, 0xdd, 0xe7, |
| 322 | 0xcc, 0x9e, 0x76, 0xe5, 0x29, 0xa7, 0xe0, 0x66, 0xfb, 0x5d, 0xb9, 0xec, | 322 | 0x98, 0xf7, 0x25, 0xb6, 0xdd, 0xc6, 0x73, 0x5c, 0xba, 0x4f, 0x25, 0x25, |
| 323 | 0xd8, 0x85, 0xbc, 0x58, 0x6f, 0xd0, 0xde, 0xfd, 0x4f, 0xe7, 0xfd, 0xb2, | 323 | 0x05, 0xba, 0xf4, 0x29, 0x9a, 0xf0, 0x6c, 0x22, 0x21, 0xbd, 0xc7, 0x88, |
| 324 | 0xab, 0xd5, 0xda, 0x95, 0x09, 0x14, 0xdc, 0x66, 0x3b, 0x2a, 0x37, 0xa5, | 324 | 0x49, 0x14, 0x6d, 0xfa, 0x40, 0x9b, 0x34, 0x68, 0x03, 0x9f, 0x66, 0x9b, |
| 325 | 0x0f, 0xca, 0x9e, 0x2d, 0x4b, 0x66, 0x50, 0x32, 0x37, 0x01, 0x17, 0xc6, | 325 | 0x7d, 0x0d, 0xe9, 0x65, 0x49, 0x0d, 0x7e, 0x0f, 0xb4, 0xe9, 0x03, 0x6d, |
| 326 | 0xf3, 0xca, 0x56, 0xbd, 0xa6, 0xe2, 0xeb, 0x07, 0xba, 0x0e, 0xca, 0xc6, | 326 | 0x7a, 0xcf, 0x25, 0xd1, 0x1e, 0x7d, 0x2c, 0x75, 0x23, 0x6d, 0x91, 0x5f, |
| 327 | 0x2d, 0x96, 0x79, 0x35, 0x48, 0xcc, 0x76, 0x10, 0xb1, 0x80, 0x15, 0xcf, | 327 | 0xbb, 0xbe, 0x13, 0xcf, 0xae, 0xa4, 0x8e, 0xc5, 0x30, 0x46, 0x48, 0xf6, |
| 328 | 0x05, 0x6d, 0x73, 0xa7, 0x58, 0xc3, 0x9f, 0x16, 0x9e, 0xdb, 0xda, 0xd2, | 328 | 0xf4, 0x14, 0x65, 0x78, 0x3b, 0x30, 0x74, 0xfc, 0xb0, 0x5c, 0x81, 0x1d, |
| 329 | 0x79, 0xc4, 0x8e, 0x7f, 0x22, 0xd0, 0xbd, 0xff, 0x13, 0x8c, 0xef, 0xce, | 329 | 0x2a, 0xc3, 0x7f, 0x7b, 0x76, 0xd0, 0x19, 0x5b, 0x86, 0x2e, 0xad, 0xdf, |
| 330 | 0x30, 0xef, 0x4a, 0x64, 0x8b, 0x89, 0xe7, 0x98, 0x74, 0x1e, 0x4f, 0x48, | 330 | 0xed, 0xcb, 0x37, 0xb6, 0x7f, 0xd3, 0x4f, 0x5c, 0xef, 0xdc, 0x2f, 0xa1, |
| 331 | 0x12, 0x7c, 0xe9, 0x51, 0x3c, 0xe1, 0xf9, 0x51, 0x5c, 0xba, 0x8f, 0x10, | 331 | 0x01, 0x99, 0x2e, 0x2b, 0xfb, 0x90, 0xc8, 0x85, 0x15, 0xd6, 0xc1, 0x1a, |
| 332 | 0x43, 0x29, 0xde, 0xf4, 0x80, 0x37, 0x29, 0xf0, 0x06, 0x31, 0x55, 0xaf, | 332 | 0x8b, 0xb0, 0x31, 0x3c, 0xf3, 0x74, 0xa1, 0xeb, 0x1f, 0x91, 0x87, 0x2a, |
| 333 | 0x79, 0x15, 0xe9, 0xb2, 0x24, 0x07, 0x7e, 0x00, 0xde, 0xf4, 0x80, 0x37, | 333 | 0x53, 0xf8, 0x01, 0x77, 0xcf, 0xb0, 0xee, 0x41, 0xe0, 0xed, 0x87, 0xe5, |
| 334 | 0xdd, 0x67, 0x12, 0x68, 0x8f, 0x3e, 0x16, 0x3b, 0x91, 0x46, 0xe5, 0x83, | 334 | 0xc0, 0x0c, 0xb0, 0x58, 0x06, 0xf3, 0x1e, 0x70, 0x81, 0xcb, 0x33, 0xcd, |
| 335 | 0x37, 0xb4, 0xe3, 0xd9, 0x96, 0xe4, 0x91, 0x08, 0xc6, 0x08, 0xc8, 0x8e, | 335 | 0xd2, 0x86, 0x32, 0xd0, 0x76, 0xac, 0xbe, 0x1e, 0xd7, 0x2e, 0x83, 0x0f, |
| 336 | 0xae, 0x82, 0x0c, 0x6d, 0x41, 0x6c, 0x16, 0x3b, 0x28, 0x17, 0xe1, 0x87, | 336 | 0x83, 0xf2, 0x27, 0xf5, 0x01, 0xf9, 0x4a, 0xbd, 0x5f, 0xbe, 0x04, 0xdb, |
| 337 | 0x4a, 0x88, 0x11, 0x9e, 0x1a, 0xb0, 0x46, 0x97, 0x60, 0x4b, 0xab, 0xf7, | 337 | 0xf2, 0x5c, 0xbd, 0x0b, 0x7b, 0x25, 0x01, 0x9e, 0x64, 0xc0, 0x1f, 0x4f, |
| 338 | 0xb8, 0xf2, 0xf2, 0x96, 0xbf, 0x70, 0xe3, 0x37, 0x58, 0xbb, 0x24, 0xd0, | 338 | 0xbe, 0x5c, 0x4f, 0xcb, 0x17, 0x41, 0xab, 0xe7, 0xf1, 0x1b, 0x2e, 0xa7, |
| 339 | 0x2f, 0x93, 0x25, 0xe5, 0x1f, 0xe2, 0xd9, 0xa0, 0xc2, 0x65, 0x98, 0x63, | 339 | 0x65, 0x4f, 0xb9, 0x5f, 0xf3, 0x88, 0xfc, 0x71, 0x31, 0x1f, 0x17, 0x6b, |
| 340 | 0x01, 0x3e, 0x86, 0xe7, 0xd1, 0x36, 0x6c, 0xfd, 0xa7, 0xe5, 0xa1, 0xb9, | 340 | 0x77, 0x9e, 0x29, 0x62, 0xff, 0x2d, 0xd4, 0xdd, 0xb7, 0xaa, 0x34, 0xb2, |
| 341 | 0x09, 0xfc, 0x10, 0x6f, 0x4e, 0xb1, 0xee, 0x7e, 0xc4, 0x73, 0x0f, 0xcb, | 341 | 0x6d, 0xb6, 0x9c, 0x59, 0xb1, 0x2f, 0x45, 0xdf, 0x76, 0x9d, 0xa3, 0x13, |
| 342 | 0xbe, 0x29, 0x60, 0xc7, 0x34, 0xe8, 0xee, 0xb7, 0x11, 0xcf, 0xcd, 0x37, | 342 | 0xe0, 0x43, 0x15, 0xfb, 0x74, 0x4c, 0xd1, 0x7e, 0xd5, 0xf6, 0x54, 0x03, |
| 343 | 0x4a, 0x0b, 0xca, 0xc0, 0xdb, 0xd1, 0xea, 0xda, 0x38, 0x6e, 0x09, 0xeb, | 343 | 0xdb, 0x63, 0xd6, 0x37, 0x5b, 0x90, 0xef, 0x48, 0xee, 0xc4, 0xb4, 0xec, |
| 344 | 0x30, 0x20, 0x7f, 0x56, 0xed, 0x97, 0xaf, 0x55, 0xfb, 0xe4, 0x4f, 0xe0, | 344 | 0x3f, 0xe9, 0xcb, 0x6f, 0x7a, 0x3e, 0xe4, 0x98, 0xba, 0x78, 0x80, 0x3a, |
| 345 | 0x5b, 0xce, 0x57, 0x3b, 0xa0, 0x2b, 0x71, 0xac, 0x49, 0x1a, 0xeb, 0xe3, | 345 | 0x3e, 0x39, 0x11, 0xb6, 0x94, 0x9f, 0x1b, 0x60, 0x8d, 0xef, 0x75, 0x60, |
| 346 | 0xc8, 0x73, 0xd5, 0x94, 0x3c, 0x0b, 0x5e, 0x3d, 0x83, 0xdf, 0x50, 0x29, | 346 | 0xcf, 0xa6, 0xb3, 0xd6, 0x94, 0xa4, 0x4e, 0x4c, 0x49, 0xf7, 0x09, 0xc8, |
| 347 | 0x25, 0x3b, 0x4a, 0x7d, 0x7a, 0x8d, 0xb8, 0x3e, 0x36, 0xe8, 0xb1, 0x31, | 347 | 0x82, 0xc7, 0xbe, 0x96, 0x6d, 0xeb, 0x1d, 0xf2, 0xc0, 0x71, 0x9c, 0xc1, |
| 348 | 0x77, 0xeb, 0xc9, 0x02, 0xf4, 0x6f, 0xbe, 0x6a, 0xbf, 0x5e, 0x96, 0x8f, | 348 | 0xbc, 0xb8, 0xf6, 0x5b, 0x92, 0xc6, 0xf8, 0x87, 0xa4, 0x07, 0x6d, 0x5c, |
| 349 | 0x37, 0x72, 0x8f, 0xf7, 0xd4, 0x8a, 0x7f, 0x29, 0xb8, 0xa6, 0x6d, 0x1d, | 349 | 0xb4, 0xb9, 0xa6, 0xc6, 0x6e, 0xc5, 0xd8, 0xcd, 0x72, 0x24, 0xee, 0x40, |
| 350 | 0x1e, 0xc7, 0x3a, 0x94, 0xa1, 0xa7, 0xa3, 0x8a, 0xf7, 0x35, 0xdf, 0x53, | 350 | 0xd6, 0x68, 0xc3, 0xff, 0xaf, 0xe4, 0xaa, 0x4c, 0x7f, 0x24, 0xb9, 0x33, |
| 351 | 0xf6, 0x7c, 0x8f, 0x3f, 0xbf, 0x99, 0xbc, 0x7c, 0x5b, 0xb2, 0x47, 0x27, | 351 | 0x6f, 0x37, 0x4b, 0x0b, 0x9f, 0xa1, 0x1a, 0xe6, 0x59, 0xde, 0x8d, 0x94, |
| 352 | 0x65, 0xcf, 0x31, 0x57, 0x3e, 0xec, 0xb8, 0x90, 0x63, 0xda, 0xe2, 0x7e, | 352 | 0xe5, 0xae, 0x58, 0xc7, 0x7f, 0x22, 0xb9, 0xf3, 0x1c, 0xfb, 0x2d, 0x94, |
| 353 | 0xda, 0xf8, 0xc4, 0x78, 0xd0, 0x50, 0xb1, 0x94, 0x87, 0x5b, 0x7a, 0x37, | 353 | 0x7f, 0x43, 0x72, 0xc7, 0x7f, 0x8a, 0xfc, 0x15, 0xa4, 0x6f, 0x23, 0x1d, |
| 354 | 0x43, 0x67, 0x53, 0x19, 0x63, 0x42, 0x92, 0x47, 0x27, 0xa4, 0xf3, 0x28, | 354 | 0x93, 0xee, 0xe3, 0xf0, 0x91, 0xcf, 0x7f, 0x1b, 0x79, 0xf8, 0x74, 0xe7, |
| 355 | 0x64, 0xc1, 0x61, 0x5f, 0x4b, 0xa6, 0x71, 0x8d, 0x3c, 0x70, 0x1c, 0x6b, | 355 | 0x8f, 0xa0, 0xde, 0x6e, 0xcc, 0xef, 0xde, 0x18, 0xb0, 0x06, 0x74, 0x5e, |
| 356 | 0x20, 0x27, 0xb6, 0xf9, 0xba, 0xa4, 0x30, 0xfe, 0x01, 0xe9, 0x42, 0x1b, | 356 | 0xec, 0xba, 0x60, 0xfe, 0x2c, 0x67, 0x19, 0xdf, 0x1d, 0x81, 0x4e, 0xfb, |
| 357 | 0x1b, 0x6d, 0xae, 0xaa, 0xb1, 0x9b, 0x31, 0x76, 0xa3, 0x1c, 0x8a, 0x59, | 357 | 0x1f, 0xd0, 0x69, 0xfa, 0x79, 0x81, 0x79, 0xea, 0x36, 0x3e, 0x4f, 0x81, |
| 358 | 0x90, 0x35, 0xfa, 0xf0, 0xff, 0x25, 0xd9, 0x32, 0xd3, 0x9f, 0x4a, 0xf6, | 358 | 0x26, 0x87, 0x90, 0xf7, 0xe5, 0x61, 0x8f, 0xf6, 0x66, 0xa7, 0x8c, 0xdb, |
| 359 | 0xd4, 0x47, 0x23, 0x12, 0xe5, 0x33, 0x4c, 0xc3, 0x09, 0x96, 0x77, 0x22, | 359 | 0x45, 0xbf, 0x05, 0xb8, 0xa2, 0x15, 0xfb, 0x60, 0x6a, 0xc7, 0xc6, 0xfb, |
| 360 | 0x65, 0xb9, 0x8d, 0x38, 0xfa, 0xe7, 0x92, 0x3d, 0xcb, 0xb1, 0x5f, 0x47, | 360 | 0xe0, 0x68, 0xef, 0x61, 0xd9, 0xb4, 0xdd, 0xac, 0xdf, 0xac, 0xd7, 0xb5, |
| 361 | 0xf9, 0xcb, 0x92, 0x9d, 0xfe, 0x05, 0xf2, 0x17, 0x91, 0xbe, 0x81, 0x74, | 361 | 0x7f, 0xa8, 0xe8, 0xe0, 0x14, 0x3f, 0x29, 0x5c, 0x87, 0x9b, 0x78, 0xd2, |
| 362 | 0x54, 0x3a, 0xa7, 0x25, 0x90, 0x3d, 0xfb, 0x2d, 0xe4, 0x43, 0x48, 0x0f, | 362 | 0xea, 0xbd, 0xff, 0x21, 0xec, 0x03, 0xeb, 0x3c, 0xf3, 0xc1, 0x3e, 0xb0, |
| 363 | 0xa1, 0xde, 0x76, 0xd0, 0xf7, 0xa7, 0xe8, 0x2f, 0x03, 0x9b, 0xf7, 0x3b, | 363 | 0xce, 0x43, 0x37, 0xcc, 0xc3, 0x47, 0x9b, 0xef, 0x92, 0xe6, 0xe3, 0xab, |
| 364 | 0x9a, 0x7e, 0x96, 0xb3, 0x8c, 0xef, 0x0e, 0xc1, 0xa6, 0xfd, 0x67, 0xd8, | 364 | 0xfb, 0xa0, 0xe9, 0xf8, 0xcf, 0xdf, 0x07, 0xcd, 0xe7, 0x51, 0xef, 0x3c, |
| 365 | 0x34, 0xfd, 0x3c, 0xcf, 0x3c, 0x6d, 0x1b, 0x9f, 0x27, 0xc0, 0x93, 0x03, | 365 | 0x69, 0x86, 0x3e, 0xce, 0x90, 0x66, 0x9d, 0x48, 0x1f, 0xc1, 0x5a, 0x39, |
| 366 | 0xc8, 0xbb, 0xf2, 0xb0, 0x43, 0x7f, 0xb3, 0x4d, 0xc6, 0xcc, 0x82, 0x1b, | 366 | 0xf7, 0x66, 0xcc, 0x3d, 0xc0, 0x45, 0x1f, 0x82, 0xbc, 0x7f, 0x62, 0xfb, |
| 367 | 0x05, 0xae, 0x68, 0x86, 0x1e, 0x4c, 0x6c, 0x5d, 0x5f, 0x0f, 0x0e, 0x77, | 367 | 0x21, 0x5d, 0xfe, 0x9f, 0xfd, 0x91, 0xb8, 0x53, 0x91, 0x10, 0x69, 0x8a, |
| 368 | 0x1f, 0x94, 0xa6, 0x2d, 0xfe, 0xfc, 0xfd, 0xf9, 0xda, 0xe6, 0x4f, 0x14, | 368 | 0xba, 0x55, 0xd2, 0xf0, 0x79, 0xd0, 0xe6, 0xa0, 0x74, 0x93, 0x7e, 0xd5, |
| 369 | 0x1f, 0xac, 0xc2, 0x27, 0x84, 0xf3, 0xb0, 0xe3, 0x5f, 0x30, 0xba, 0x77, | 369 | 0xbd, 0xc8, 0x17, 0xfd, 0x28, 0x7d, 0x74, 0x45, 0x4f, 0xe0, 0xa4, 0x01, |
| 370 | 0x3d, 0x04, 0x3d, 0x30, 0xce, 0x32, 0xef, 0xe9, 0x81, 0x71, 0x16, 0xb6, | 370 | 0x96, 0xbf, 0x0a, 0x99, 0x21, 0xc6, 0x7c, 0x5d, 0xf6, 0xcf, 0xf8, 0x32, |
| 371 | 0xe1, 0x04, 0x62, 0xc4, 0x13, 0x1d, 0xd2, 0x38, 0x5d, 0xd3, 0x83, 0x86, | 371 | 0xee, 0x71, 0xfd, 0x6f, 0x62, 0xfd, 0xd9, 0xed, 0x71, 0x59, 0x4e, 0xc6, |
| 372 | 0xe9, 0x5f, 0xad, 0x07, 0x8d, 0x67, 0x51, 0xef, 0x2c, 0x79, 0x86, 0x3e, | 372 | 0x41, 0x93, 0x05, 0xe8, 0xf6, 0x2b, 0x12, 0xd0, 0x81, 0x31, 0xe7, 0x3d, |
| 373 | 0x4e, 0x91, 0x67, 0xed, 0x48, 0x3f, 0x8d, 0xb9, 0x92, 0xf6, 0x46, 0xd0, | 373 | 0xe2, 0x26, 0x86, 0xc5, 0x4d, 0x7f, 0x0f, 0x74, 0x18, 0x86, 0xec, 0xe7, |
| 374 | 0xee, 0xe1, 0xa2, 0xdb, 0x21, 0xef, 0x0f, 0x6c, 0x39, 0xa0, 0xcb, 0xff, | 374 | 0xeb, 0x94, 0x9d, 0x57, 0x64, 0x08, 0x32, 0xf1, 0x86, 0xe7, 0xa4, 0x81, |
| 375 | 0xd2, 0x1d, 0x8e, 0x59, 0x73, 0x12, 0x20, 0x4f, 0x51, 0xb7, 0x4c, 0x1e, | 375 | 0x85, 0xa0, 0x2f, 0x28, 0x17, 0x94, 0x89, 0x36, 0xa5, 0x93, 0xe6, 0x3d, |
| 376 | 0xde, 0xdc, 0x24, 0xd1, 0xfd, 0xd2, 0x49, 0xfe, 0x95, 0x77, 0x22, 0x5f, | 376 | 0xe7, 0xa9, 0xaa, 0xdc, 0x2a, 0xf3, 0x0a, 0x9b, 0xe2, 0xdd, 0x71, 0x65, |
| 377 | 0x70, 0xc3, 0x76, 0xb3, 0xe6, 0x27, 0x70, 0x52, 0x3f, 0xcb, 0x5f, 0x85, | 377 | 0x2f, 0xd2, 0x13, 0x56, 0x0f, 0x74, 0x74, 0x5a, 0xec, 0xde, 0x9b, 0x9b, |
| 378 | 0xcc, 0x10, 0xaf, 0xbe, 0x26, 0x7b, 0xa6, 0x5c, 0x19, 0x73, 0x38, 0xff, | 378 | 0xcd, 0x3d, 0x85, 0xc2, 0x89, 0x90, 0x4c, 0xf5, 0x92, 0x57, 0xec, 0x17, |
| 379 | 0xef, 0x63, 0xfe, 0x99, 0x2d, 0x31, 0x59, 0x4a, 0xc4, 0xc0, 0x93, 0x79, | 379 | 0xf9, 0x6a, 0xd1, 0x8f, 0xb8, 0x6f, 0xf9, 0xa7, 0x3b, 0x93, 0xf2, 0xe9, |
| 380 | 0xd8, 0xf6, 0x8b, 0xe2, 0xf1, 0x81, 0xe7, 0x02, 0x3b, 0xc4, 0x8e, 0x0f, | 380 | 0xde, 0x15, 0xb9, 0xac, 0x88, 0x04, 0xfb, 0x62, 0x48, 0xf1, 0xc3, 0xcc, |
| 381 | 0x89, 0x9d, 0xfa, 0x01, 0xf8, 0x30, 0x04, 0xd9, 0xcf, 0x55, 0x29, 0x3b, | 381 | 0xdb, 0xac, 0xc5, 0xbc, 0xeb, 0x6f, 0x78, 0xc7, 0xb5, 0x50, 0xd6, 0x57, |
| 382 | 0xaf, 0xc8, 0x20, 0x64, 0xe2, 0x7b, 0x8e, 0x95, 0x02, 0x16, 0x82, 0xbd, | 382 | 0xf6, 0x4e, 0xf2, 0x9d, 0x73, 0xfd, 0x5d, 0xd0, 0xcc, 0x79, 0xaa, 0x24, |
| 383 | 0xa0, 0x5c, 0x50, 0x26, 0x5a, 0x94, 0x4d, 0x3a, 0xe1, 0x58, 0x4f, 0x94, | 383 | 0xaf, 0x41, 0xf6, 0x40, 0xc3, 0xf3, 0x4c, 0x49, 0xc3, 0x29, 0xc8, 0xfd, |
| 384 | 0xe5, 0x56, 0x39, 0xd1, 0x46, 0xda, 0xf1, 0x6e, 0x5a, 0xf9, 0x8b, 0xd4, | 384 | 0xab, 0xb2, 0xe7, 0x04, 0xf7, 0xcc, 0xab, 0x58, 0xab, 0xd2, 0x25, 0xd0, |
| 385 | 0xb8, 0xd1, 0x05, 0x1b, 0x9d, 0x12, 0xb3, 0xbb, 0xd8, 0xe8, 0xdf, 0x21, | 385 | 0x11, 0xec, 0xcf, 0x97, 0x69, 0x8f, 0xb1, 0x92, 0x5b, 0x13, 0x93, 0xf0, |
| 386 | 0xc9, 0x1f, 0x0d, 0xc8, 0x44, 0x37, 0xd7, 0x8a, 0xfd, 0x22, 0x5f, 0x2e, | 386 | 0xe1, 0x26, 0x6c, 0x5f, 0x96, 0xbc, 0xa2, 0x2c, 0x0d, 0xa2, 0x4d, 0xf5, |
| 387 | 0xb8, 0x21, 0xfb, 0x75, 0xf7, 0x64, 0x7b, 0x42, 0x3e, 0xd9, 0xbd, 0x22, | 387 | 0x11, 0xfc, 0xda, 0xf4, 0xda, 0x3e, 0x0b, 0xba, 0x3b, 0xc9, 0x8a, 0xf5, |
| 388 | 0x97, 0x73, 0x22, 0x9e, 0x5e, 0x0c, 0xaa, 0xf5, 0xf0, 0xe9, 0xf6, 0xe7, | 388 | 0x19, 0xd0, 0xfd, 0x61, 0x49, 0x1d, 0x5f, 0xd1, 0x35, 0x90, 0xbb, 0x40, |
| 389 | 0xe2, 0xbf, 0xeb, 0xab, 0x7b, 0xc7, 0xb9, 0x50, 0xd6, 0x57, 0x74, 0x27, | 389 | 0xd7, 0xa4, 0xce, 0xdb, 0x52, 0x2d, 0xbb, 0xf2, 0x71, 0xea, 0x90, 0x32, |
| 390 | 0x71, 0x2d, 0xad, 0xaf, 0x41, 0x9e, 0xac, 0x27, 0x8a, 0x72, 0x19, 0xb2, | 390 | 0xd7, 0x05, 0x1d, 0xc3, 0xf3, 0xdb, 0x32, 0xf4, 0x4c, 0x19, 0x3a, 0x05, |
| 391 | 0x07, 0x1e, 0x9e, 0x65, 0x4a, 0x1e, 0x4e, 0x40, 0xee, 0x5f, 0x95, 0x1d, | 391 | 0x3a, 0xe4, 0x4b, 0x28, 0xff, 0x22, 0xea, 0x3c, 0x0f, 0x9f, 0xe7, 0x39, |
| 392 | 0x47, 0xa9, 0x33, 0xaf, 0x62, 0xae, 0xca, 0x96, 0xc0, 0x46, 0xb0, 0x3f, | 392 | 0x60, 0xbf, 0x8b, 0xc0, 0x14, 0x17, 0xca, 0x59, 0xed, 0x1b, 0xaa, 0xf5, |
| 393 | 0x57, 0x26, 0x9d, 0xae, 0xd4, 0x29, 0xb9, 0x35, 0xbe, 0x17, 0x31, 0xe7, | 393 | 0xc2, 0x66, 0x29, 0x7f, 0x45, 0xaa, 0x15, 0xd2, 0xe3, 0x27, 0x8a, 0xb7, |
| 394 | 0xb8, 0xe9, 0xca, 0xa2, 0x53, 0x90, 0xc5, 0x01, 0xb4, 0x29, 0x7f, 0x1a, | 394 | 0x39, 0x6f, 0x2b, 0x71, 0x16, 0x66, 0x26, 0x52, 0xa9, 0x18, 0x9a, 0x50, |
| 395 | 0xbf, 0x4f, 0xe9, 0xb9, 0x3d, 0x0a, 0xbe, 0x5b, 0x89, 0x39, 0xe3, 0xf7, | 395 | 0xf7, 0x31, 0xf6, 0x6f, 0x74, 0x65, 0xeb, 0x3a, 0x5d, 0x29, 0xf2, 0x62, |
| 396 | 0xc1, 0xf7, 0x87, 0x25, 0x39, 0xbd, 0x62, 0x6b, 0x20, 0x77, 0x9e, 0xad, | 396 | 0x2d, 0xc0, 0x93, 0xc4, 0xc7, 0xa5, 0x99, 0xe4, 0xca, 0x19, 0x59, 0x09, |
| 397 | 0x49, 0x9e, 0x35, 0xa5, 0x5c, 0xb2, 0xe5, 0x23, 0xb4, 0x21, 0x25, 0xce, | 397 | 0x76, 0xf3, 0x32, 0xfc, 0x92, 0x58, 0xe6, 0x5b, 0x12, 0x3b, 0xe5, 0xfb, |
| 398 | 0x0b, 0x36, 0x86, 0x67, 0xec, 0x25, 0xd8, 0x99, 0x12, 0x6c, 0x0a, 0x6c, | 398 | 0xdf, 0x87, 0xdd, 0x2c, 0x82, 0x27, 0x56, 0x08, 0xe5, 0x8b, 0x7c, 0x47, |
| 399 | 0xc8, 0x9f, 0xa0, 0xfc, 0x59, 0xd4, 0x79, 0x06, 0xf1, 0xd3, 0x79, 0x60, | 399 | 0xb9, 0xa7, 0x6c, 0x87, 0x18, 0x2b, 0x97, 0x97, 0x51, 0x56, 0x55, 0x3e, |
| 400 | 0xbf, 0x73, 0xc0, 0x14, 0x4f, 0x97, 0x32, 0x3a, 0x96, 0x55, 0xf3, 0x85, | 400 | 0xd3, 0xb7, 0x31, 0x1f, 0x3d, 0x3f, 0x55, 0xc6, 0x7a, 0xcd, 0x92, 0x1f, |
| 401 | 0xcf, 0x52, 0xb1, 0x8f, 0x94, 0xe7, 0xd4, 0x7d, 0x1e, 0xb5, 0xb6, 0x59, | 401 | 0x4f, 0xcb, 0xe3, 0xe5, 0x6d, 0x76, 0x33, 0xda, 0x57, 0x16, 0xd9, 0xc6, |
| 402 | 0x67, 0x13, 0x71, 0x16, 0x28, 0x13, 0x99, 0x9b, 0xf3, 0x79, 0x42, 0xdb, | 402 | 0x19, 0xe4, 0x95, 0x9d, 0x97, 0x17, 0x59, 0xde, 0x25, 0x57, 0x66, 0x32, |
| 403 | 0xc7, 0xf3, 0x19, 0xdf, 0x56, 0x36, 0xaf, 0xb1, 0x95, 0x22, 0x2f, 0x56, | 403 | 0x6a, 0x0e, 0xd5, 0xb9, 0x8c, 0x04, 0x31, 0x49, 0xea, 0x2b, 0xce, 0x15, |
| 404 | 0x3c, 0x3c, 0x49, 0x7c, 0x5c, 0x9c, 0x4a, 0xac, 0x9c, 0x63, 0x16, 0xe1, | 404 | 0x79, 0xfa, 0x96, 0x65, 0xda, 0xd9, 0x88, 0x14, 0x13, 0xa4, 0x75, 0x42, |
| 405 | 0x37, 0x97, 0x11, 0x67, 0x44, 0xd2, 0xdf, 0x94, 0xc8, 0x71, 0xd7, 0xfd, | 405 | 0x2e, 0xcf, 0xc4, 0x37, 0x31, 0x86, 0x93, 0x73, 0xf9, 0x6c, 0x62, 0x07, |
| 406 | 0x21, 0xfc, 0x66, 0x01, 0x6b, 0x62, 0x04, 0x50, 0xbe, 0xc0, 0x77, 0x94, | 406 | 0xf6, 0xfb, 0x88, 0x1d, 0x30, 0x5e, 0x10, 0x81, 0x2d, 0x53, 0x31, 0x04, |
| 407 | 0x7b, 0xca, 0x76, 0x80, 0xe7, 0x19, 0xf2, 0x12, 0xca, 0xca, 0x2a, 0xfe, | 407 | 0xa4, 0xc9, 0x06, 0x9f, 0x95, 0xef, 0x03, 0x6c, 0xb4, 0x8a, 0x1f, 0x89, |
| 408 | 0xfa, 0x16, 0xe8, 0xd1, 0xf4, 0xa9, 0x32, 0xd6, 0x6b, 0x94, 0xdc, 0x58, | 408 | 0x27, 0xb9, 0x5e, 0xa7, 0xb8, 0x0c, 0xfd, 0xd1, 0x91, 0x79, 0x49, 0xee, |
| 409 | 0x0a, 0x31, 0x4e, 0xaf, 0xd9, 0x88, 0xf6, 0x73, 0x0b, 0x6c, 0x63, 0x0d, | 409 | 0x99, 0x0f, 0xd6, 0x67, 0x9d, 0x11, 0xde, 0xd3, 0x90, 0x6b, 0x73, 0x8e, |
| 410 | 0xf0, 0x3a, 0xd5, 0x4b, 0x0b, 0x2c, 0xef, 0x90, 0x8b, 0x88, 0x45, 0x49, | 410 | 0x77, 0x15, 0x98, 0x22, 0x1f, 0xf7, 0xc0, 0xaf, 0x3f, 0x8b, 0x41, 0x7f, |
| 411 | 0x43, 0x79, 0x36, 0x2d, 0xde, 0xde, 0x31, 0xed, 0x15, 0x69, 0x45, 0x1e, | 411 | 0x0d, 0x66, 0xad, 0x3d, 0x9b, 0x02, 0x7c, 0x16, 0x91, 0xa9, 0x19, 0x9e, |
| 412 | 0xfc, 0xca, 0x96, 0xe8, 0x67, 0x43, 0x52, 0x88, 0x93, 0xd7, 0x71, 0x59, | 412 | 0xa9, 0x41, 0xb7, 0x01, 0x43, 0xfe, 0xf3, 0x08, 0x9e, 0x6b, 0xcc, 0xc3, |
| 413 | 0x9e, 0xfa, 0x4c, 0x13, 0xf7, 0x66, 0xb3, 0x36, 0x9f, 0xfd, 0xbd, 0x0e, | 413 | 0x4f, 0x0b, 0x7c, 0x50, 0x3c, 0x07, 0xfd, 0x91, 0xe6, 0xd6, 0x3c, 0xd7, |
| 414 | 0xf3, 0x2d, 0xec, 0x75, 0x70, 0x7f, 0x23, 0x04, 0x5f, 0xa6, 0xf6, 0x3c, | 414 | 0x1e, 0x92, 0x7b, 0x80, 0x4e, 0x04, 0xfd, 0x77, 0xeb, 0xb1, 0xba, 0xcf, |
| 415 | 0x90, 0x26, 0xea, 0xe2, 0x5f, 0xbe, 0xf7, 0xb0, 0x51, 0x0d, 0x3f, 0x12, | 415 | 0xa4, 0x19, 0xc3, 0x93, 0x14, 0xf4, 0x45, 0x6e, 0x2e, 0x82, 0xb1, 0xba, |
| 416 | 0x4f, 0x72, 0xbe, 0x56, 0x61, 0x09, 0xf6, 0xa3, 0x2d, 0x7d, 0x49, 0xee, | 416 | 0x34, 0x36, 0xe7, 0xbb, 0xf5, 0xd8, 0xd3, 0xf8, 0x78, 0x69, 0x79, 0xa2, |
| 417 | 0x3d, 0xe1, 0xcd, 0xcf, 0x38, 0x25, 0xbc, 0x4b, 0x23, 0x57, 0x67, 0x2d, | 417 | 0x6c, 0xb0, 0x5e, 0x1a, 0x36, 0x56, 0x22, 0x23, 0x7d, 0xbe, 0x7c, 0xdf, |
| 418 | 0xe7, 0x0a, 0x30, 0x45, 0x2e, 0xe6, 0x60, 0xbd, 0x46, 0x9b, 0x60, 0xbf, | 418 | 0x23, 0xbd, 0xfa, 0x91, 0xf7, 0xe4, 0x68, 0xfd, 0xdd, 0xce, 0xce, 0x1a, |
| 419 | 0x06, 0x32, 0xc6, 0x99, 0x26, 0x0f, 0x9f, 0x85, 0x64, 0x62, 0x8a, 0xe7, | 419 | 0xff, 0x5a, 0x31, 0x47, 0xfe, 0x30, 0x3f, 0xe0, 0x23, 0xce, 0xdd, 0x82, |
| 420 | 0x9e, 0xb0, 0x6d, 0xc0, 0x90, 0xbf, 0x1b, 0xc2, 0x73, 0x85, 0x79, 0xc4, | 420 | 0x3d, 0x2f, 0x01, 0x77, 0x59, 0xe7, 0xba, 0xd4, 0x3b, 0x0b, 0xd8, 0xa0, |
| 421 | 0xa4, 0x5e, 0x3c, 0x8b, 0x67, 0xaf, 0x3f, 0xf2, 0xdc, 0x38, 0xc1, 0xb9, | 421 | 0x3a, 0x03, 0xdd, 0x78, 0x8e, 0xe7, 0x89, 0xd0, 0x6d, 0xe7, 0xa2, 0x52, |
| 422 | 0x07, 0xe4, 0x5e, 0xa0, 0x13, 0x41, 0xff, 0x9d, 0x7a, 0xac, 0xce, 0x53, | 422 | 0x9a, 0xa5, 0x5c, 0x4a, 0x87, 0x05, 0x7e, 0xb1, 0x7e, 0x75, 0xa6, 0x0b, |
| 423 | 0x29, 0xee, 0x65, 0x4b, 0x12, 0xf6, 0x22, 0x8b, 0x58, 0x32, 0x17, 0xeb, | 423 | 0x69, 0x2b, 0xd2, 0xa4, 0xea, 0xa7, 0x3a, 0xe3, 0xaa, 0xf6, 0xd5, 0x99, |
| 424 | 0xd0, 0xd8, 0x9c, 0xef, 0xd6, 0x62, 0x4f, 0x3f, 0xc6, 0x4b, 0xc9, 0xe7, | 424 | 0xb4, 0x6a, 0x57, 0x9d, 0xe9, 0x47, 0xea, 0x49, 0xd3, 0x39, 0x38, 0x4e, |
| 425 | 0x4b, 0x3e, 0xd6, 0x4b, 0xc1, 0xc7, 0x4a, 0x68, 0xb8, 0xc7, 0x95, 0x1f, | 425 | 0xe7, 0x7a, 0x65, 0xea, 0x34, 0xec, 0xcb, 0x80, 0xa5, 0xce, 0xe2, 0x27, |
| 426 | 0x3a, 0xe4, 0x57, 0x1f, 0xf2, 0x8e, 0x1c, 0xae, 0xfe, 0xb2, 0xf3, 0xcd, | 426 | 0x60, 0x7f, 0x22, 0xf0, 0xb2, 0xae, 0xda, 0x83, 0xc0, 0x58, 0x3b, 0x81, |
| 427 | 0xfa, 0xbf, 0x66, 0xd0, 0xc8, 0x1f, 0xe8, 0x03, 0x3e, 0x22, 0xed, 0x06, | 427 | 0x41, 0x76, 0x8a, 0x7b, 0x8a, 0xeb, 0xa7, 0xee, 0xbd, 0xcc, 0x78, 0x52, |
| 428 | 0xfc, 0x79, 0x11, 0xb8, 0xcb, 0x38, 0xd3, 0xa1, 0xde, 0x19, 0xc0, 0x06, | 428 | 0xe2, 0x41, 0xc9, 0xca, 0x81, 0xd9, 0x66, 0xec, 0xd7, 0x88, 0x5d, 0x92, |
| 429 | 0xe5, 0x29, 0xd8, 0xc6, 0x33, 0x3c, 0xf3, 0x85, 0x6d, 0x3b, 0x13, 0x96, | 429 | 0x1e, 0x7b, 0x18, 0xf9, 0x42, 0x85, 0x74, 0xbb, 0x4f, 0xf9, 0x6e, 0x39, |
| 430 | 0xe2, 0x0c, 0xe5, 0x52, 0xda, 0x0c, 0xac, 0x17, 0xeb, 0x97, 0xa7, 0x3a, | 430 | 0xef, 0x1c, 0x78, 0x92, 0xc1, 0x18, 0xef, 0xa7, 0x7d, 0x1f, 0xe4, 0xcf, |
| 431 | 0x90, 0x36, 0x23, 0x4d, 0xa8, 0x7e, 0xca, 0x53, 0xb6, 0x6a, 0x5f, 0x9e, | 431 | 0xd5, 0x7d, 0x64, 0x30, 0x9f, 0x46, 0x7a, 0xf0, 0x1c, 0x31, 0xfb, 0x73, |
| 432 | 0x4a, 0xa9, 0x76, 0xe5, 0xa9, 0x3e, 0xa4, 0x8e, 0x34, 0x9c, 0x41, 0xe0, | 432 | 0xce, 0x11, 0x29, 0xd7, 0xa4, 0xef, 0x7d, 0x72, 0xd9, 0xcd, 0xc8, 0xcb, |
| 433 | 0x74, 0xa6, 0x5b, 0x26, 0x4e, 0xc2, 0xbf, 0xf4, 0x1b, 0xea, 0xbe, 0xc4, | 433 | 0x6e, 0x5a, 0xae, 0xb8, 0x3b, 0xe4, 0xeb, 0xb0, 0xd3, 0x2f, 0xb9, 0x7d, |
| 434 | 0x38, 0xfc, 0x4f, 0x08, 0x51, 0xd6, 0x15, 0x73, 0x00, 0x18, 0x6b, 0x1b, | 434 | 0x9b, 0x88, 0x05, 0xaa, 0xea, 0x6c, 0xc6, 0xf0, 0xca, 0xd5, 0xf1, 0xc4, |
| 435 | 0x30, 0xc8, 0x36, 0xb1, 0x8f, 0x73, 0xfe, 0xb4, 0xbd, 0xcb, 0xdc, 0xff, | 435 | 0x1f, 0xc8, 0xd2, 0x0c, 0xb1, 0xb3, 0xbf, 0x7b, 0xbf, 0x57, 0xa4, 0xdd, |
| 436 | 0x8a, 0x3f, 0x28, 0x19, 0xd9, 0x37, 0xd3, 0x08, 0x7d, 0x0d, 0x99, 0x45, | 436 | 0xc2, 0x1c, 0x88, 0xd5, 0x8a, 0xb0, 0x7f, 0x87, 0x65, 0xd8, 0xa3, 0xdd, |
| 437 | 0xe9, 0x32, 0x87, 0x90, 0xcf, 0xcf, 0x91, 0x6f, 0xf7, 0xab, 0xd8, 0x2d, | 437 | 0x53, 0x36, 0x2a, 0x31, 0x1c, 0xec, 0x67, 0xaf, 0x00, 0xbd, 0x7a, 0x79, |
| 438 | 0xeb, 0xc4, 0xa2, 0x12, 0x4d, 0x63, 0x8c, 0xb7, 0xd2, 0xbe, 0x07, 0xf2, | 438 | 0x16, 0xfb, 0x49, 0x28, 0xff, 0x78, 0xae, 0x90, 0xef, 0xae, 0x3c, 0x59, |
| 439 | 0x67, 0xeb, 0x3e, 0xd2, 0xa0, 0xa7, 0x9e, 0x1f, 0x3c, 0xeb, 0xcd, 0xfc, | 439 | 0xe6, 0x3a, 0x4b, 0xd7, 0xb5, 0x48, 0x58, 0x46, 0x14, 0x5e, 0x68, 0x93, |
| 440 | 0x8a, 0xb3, 0x5e, 0xca, 0x35, 0xf9, 0x7b, 0xbf, 0x2c, 0xdb, 0x69, 0x79, | 440 | 0x17, 0x17, 0x37, 0x8b, 0x05, 0x0b, 0x65, 0xdd, 0x12, 0x55, 0xb7, 0x18, |
| 441 | 0xc9, 0x4e, 0xc9, 0x45, 0x7b, 0xab, 0xfc, 0x39, 0xfc, 0xf4, 0x25, 0x7b, | 441 | 0xe8, 0x7f, 0x4b, 0x3b, 0xef, 0x22, 0xbd, 0x05, 0xda, 0x30, 0x16, 0x80, |
| 442 | 0xba, 0x89, 0x58, 0xa0, 0xac, 0xce, 0xcf, 0xfc, 0xb5, 0xb2, 0xf5, 0x3e, | 442 | 0xb5, 0xb5, 0x73, 0x25, 0x26, 0xdf, 0x8f, 0xfd, 0xf5, 0x96, 0xda, 0x6b, |
| 443 | 0xfa, 0x8f, 0x64, 0x71, 0x8a, 0xd8, 0xd9, 0xdd, 0xbe, 0xc7, 0x29, 0xd0, | 443 | 0x79, 0x37, 0x8e, 0x67, 0xa6, 0xdc, 0x73, 0x8c, 0x3b, 0x85, 0x75, 0xfc, |
| 444 | 0x6f, 0x81, 0x06, 0x62, 0xb5, 0x02, 0xfc, 0xdf, 0x41, 0x19, 0x72, 0xe8, | 444 | 0xf7, 0xaf, 0xd4, 0xfb, 0x66, 0x77, 0x17, 0x70, 0x1d, 0xe5, 0x15, 0xe9, |
| 445 | 0xf7, 0x94, 0x8f, 0x8a, 0x0f, 0x79, 0xfa, 0xec, 0xe4, 0x61, 0x57, 0x97, | 445 | 0x52, 0x30, 0x6e, 0x1e, 0x38, 0xae, 0xd0, 0xcf, 0x3b, 0x14, 0x4e, 0xba, |
| 446 | 0x67, 0xa0, 0x4f, 0x42, 0xf9, 0xc7, 0xf3, 0x1c, 0xd7, 0xdd, 0x96, 0x2f, | 446 | 0x88, 0xbd, 0x30, 0xa1, 0xea, 0xef, 0xc4, 0x7e, 0xda, 0xd4, 0x42, 0xfc, |
| 447 | 0x94, 0x38, 0xcf, 0xe2, 0xe6, 0xa8, 0x04, 0x65, 0x58, 0xe1, 0x85, 0x16, | 447 | 0xb0, 0x07, 0xb2, 0xf8, 0xd2, 0x0c, 0x9f, 0xf9, 0x9e, 0xfe, 0x15, 0xe3, |
| 448 | 0x79, 0x71, 0x61, 0x83, 0x18, 0xf0, 0x50, 0xc6, 0x2d, 0x61, 0x75, 0xd3, | 448 | 0x6b, 0x17, 0x46, 0xa7, 0xdd, 0xdf, 0xd2, 0xfb, 0x47, 0x42, 0x77, 0xf5, |
| 449 | 0x84, 0xf1, 0xb7, 0xb4, 0xf2, 0xbe, 0xd8, 0x87, 0xc1, 0x1b, 0xee, 0x05, | 449 | 0x01, 0x87, 0x1e, 0x6b, 0xc2, 0x5a, 0x9c, 0x64, 0x32, 0x64, 0x75, 0x5a, |
| 450 | 0x60, 0x6e, 0xad, 0x9c, 0x89, 0x9f, 0xef, 0x83, 0x7e, 0xf1, 0x39, 0x20, | 450 | 0xc0, 0xf1, 0xc3, 0xca, 0xe6, 0xf6, 0x61, 0xfe, 0x69, 0x39, 0x93, 0x6e, |
| 451 | 0x39, 0x3b, 0x86, 0x67, 0xa6, 0xd4, 0x39, 0xee, 0x93, 0x05, 0xc5, 0xc3, | 451 | 0x93, 0xaa, 0xed, 0xaa, 0x3b, 0x57, 0xcb, 0xf6, 0x76, 0x62, 0x7d, 0xfc, |
| 452 | 0xdc, 0xe3, 0xea, 0x7d, 0xa3, 0x7d, 0x07, 0x70, 0x1d, 0xe5, 0x15, 0xe9, | 452 | 0x36, 0xa1, 0xac, 0x07, 0x69, 0x33, 0xd2, 0xdb, 0xa4, 0x74, 0xb2, 0xaf, |
| 453 | 0xa2, 0x37, 0x6e, 0x0e, 0x38, 0x2e, 0xdf, 0xd7, 0xa4, 0xce, 0xff, 0x0a, | 453 | 0x25, 0xe8, 0x2f, 0xba, 0x2e, 0xff, 0x75, 0x3d, 0xce, 0x5f, 0x6a, 0x7f, |
| 454 | 0xd0, 0x85, 0x71, 0x55, 0xbf, 0x5f, 0x2e, 0x4d, 0xed, 0x8f, 0x7a, 0xfa, | 454 | 0x8a, 0xe3, 0x44, 0xc5, 0xfd, 0x7c, 0xab, 0xf4, 0x1c, 0xb3, 0x81, 0x6d, |
| 455 | 0x31, 0xa0, 0x9f, 0xf9, 0x9e, 0xf1, 0x15, 0xf7, 0x4b, 0x5e, 0x19, 0x99, | 455 | 0x13, 0xc0, 0xba, 0x5d, 0x92, 0x3e, 0x96, 0x94, 0x5b, 0x8e, 0x99, 0x38, |
| 456 | 0xb4, 0xbf, 0xa1, 0xf5, 0x47, 0x02, 0x77, 0xf7, 0x00, 0x87, 0x1e, 0x69, | 456 | 0xd1, 0x97, 0x47, 0x53, 0x2a, 0x66, 0xf8, 0xa5, 0x51, 0xb7, 0xa2, 0xce, |
| 457 | 0xc0, 0x5c, 0xac, 0x44, 0x22, 0x60, 0xb4, 0x1b, 0xc0, 0xf1, 0x43, 0xca, | 457 | 0x53, 0xf5, 0xdd, 0xb0, 0x65, 0x7d, 0x67, 0xec, 0x1b, 0xa3, 0x7d, 0x2a, |
| 458 | 0xe7, 0xf6, 0xa8, 0xfd, 0xe8, 0x53, 0xa9, 0x16, 0x29, 0x9b, 0xb6, 0xba, | 458 | 0xfd, 0xf6, 0x68, 0x5a, 0xa5, 0xaf, 0x8c, 0xde, 0x52, 0x0b, 0xfc, 0xa3, |
| 459 | 0x17, 0xb7, 0x64, 0x6e, 0x21, 0xd6, 0xc7, 0xaf, 0x09, 0x65, 0x5d, 0x48, | 459 | 0xd2, 0x42, 0x5a, 0x3e, 0x57, 0x26, 0xbe, 0x1c, 0x00, 0x76, 0xf4, 0xa0, |
| 460 | 0x1b, 0x91, 0xbe, 0x4b, 0x8a, 0xc7, 0xa6, 0xf5, 0x78, 0xe1, 0x35, 0xf9, | 460 | 0x67, 0xfa, 0xa1, 0x67, 0xd2, 0xd0, 0x33, 0x83, 0xd4, 0x33, 0xd0, 0xdb, |
| 461 | 0x3e, 0x9d, 0x7e, 0x44, 0xc7, 0x53, 0x1c, 0x27, 0x2c, 0xf6, 0x17, 0x9b, | 461 | 0xaf, 0x40, 0x6f, 0x7b, 0xf2, 0x06, 0xe4, 0xf5, 0x82, 0xd7, 0x0c, 0x5c, |
| 462 | 0xa5, 0xeb, 0x88, 0x09, 0x6c, 0x1b, 0x07, 0xd6, 0xed, 0x90, 0xd4, 0x91, | 462 | 0xe8, 0xfb, 0xc1, 0x5a, 0x9d, 0xa7, 0x96, 0xc1, 0xdf, 0xea, 0x59, 0x89, |
| 463 | 0x84, 0xdc, 0x72, 0xc4, 0xdf, 0x73, 0xfa, 0x0f, 0x23, 0x49, 0xb5, 0xc7, | 463 | 0xb5, 0x43, 0x07, 0x6d, 0x9f, 0x6f, 0x92, 0x85, 0xb8, 0xef, 0x9f, 0xf0, |
| 464 | 0xf9, 0xdd, 0x11, 0x7b, 0x8e, 0xe9, 0x6b, 0xfa, 0xfe, 0xde, 0x15, 0x7d, | 464 | 0x5c, 0xb9, 0x86, 0xfa, 0x39, 0x97, 0xfb, 0x78, 0xa2, 0x85, 0xfe, 0xd8, |
| 465 | 0xaf, 0xef, 0x47, 0x23, 0x3d, 0x2a, 0xfd, 0x6f, 0x23, 0x29, 0x95, 0xbe, | 465 | 0xb5, 0x99, 0x1d, 0xd0, 0x49, 0x94, 0xf7, 0x98, 0x54, 0xc7, 0x13, 0xb2, |
| 466 | 0x3e, 0x72, 0x4b, 0xc5, 0x8b, 0x8f, 0x8a, 0xf3, 0x29, 0xf9, 0x5c, 0x89, | 466 | 0x08, 0xff, 0x6c, 0xb5, 0x4e, 0x1a, 0xcf, 0xdc, 0xff, 0xff, 0x12, 0x75, |
| 467 | 0xf8, 0xb2, 0x1f, 0xd8, 0xd1, 0x81, 0x9d, 0xe9, 0x83, 0x9d, 0x49, 0xc1, | 467 | 0xd3, 0xb0, 0x0f, 0xb6, 0x2c, 0xf5, 0x25, 0xe5, 0x4c, 0x9f, 0x33, 0x98, |
| 468 | 0xce, 0x0c, 0xd0, 0xce, 0xc0, 0x6e, 0xbf, 0x02, 0xbb, 0xed, 0xc8, 0xf7, | 468 | 0xb4, 0xa8, 0xbb, 0x92, 0x52, 0x81, 0xaf, 0x5f, 0x2d, 0xb3, 0x3e, 0xeb, |
| 469 | 0x20, 0xaf, 0x4f, 0x3b, 0x8d, 0xc0, 0x85, 0xae, 0xeb, 0xcd, 0xd5, 0x7a, | 469 | 0x61, 0x7f, 0x96, 0x83, 0x76, 0xd3, 0x65, 0xa3, 0x27, 0x20, 0x9f, 0x73, |
| 470 | 0x62, 0x09, 0xeb, 0x5b, 0x3e, 0x2d, 0x91, 0x56, 0xd8, 0xa0, 0x2d, 0x27, | 470 | 0x8c, 0x03, 0x06, 0x36, 0xc0, 0xb2, 0x9a, 0x21, 0x07, 0x1e, 0xe8, 0x3f, |
| 471 | 0x1a, 0x64, 0x3e, 0xe6, 0xba, 0x47, 0x1d, 0x5b, 0xae, 0xa2, 0x7e, 0xd6, | 471 | 0x8e, 0xf2, 0x01, 0xde, 0x25, 0x40, 0x19, 0xb1, 0x50, 0x49, 0xf1, 0x38, |
| 472 | 0xa6, 0x1e, 0xbf, 0x14, 0x65, 0x3c, 0x76, 0x75, 0x6a, 0x2b, 0x6c, 0x12, | 472 | 0xef, 0x8d, 0xa3, 0x8c, 0x6d, 0x9c, 0x44, 0x0a, 0xe5, 0x63, 0x92, 0x4a, |
| 473 | 0xe5, 0x3d, 0x22, 0xe5, 0xb1, 0xb8, 0x2c, 0x20, 0x3e, 0xab, 0xd5, 0x49, | 473 | 0x14, 0xd4, 0xbd, 0xa6, 0x4e, 0x94, 0xb1, 0x8f, 0xb0, 0x8e, 0xc7, 0xcc, |
| 474 | 0xe1, 0x99, 0xfa, 0xff, 0x5d, 0xd4, 0x4d, 0xc1, 0x3f, 0x98, 0xb2, 0xd8, | 474 | 0xb6, 0x50, 0x8e, 0xc2, 0xae, 0x29, 0xdf, 0xa6, 0x62, 0x03, 0x59, 0xdb, |
| 475 | 0x93, 0x90, 0x53, 0x3d, 0xd6, 0x40, 0xc2, 0xa0, 0xed, 0x4a, 0xc8, 0x1c, | 475 | 0xc3, 0x7e, 0x60, 0x59, 0xca, 0x66, 0xbb, 0xbc, 0xe7, 0x29, 0x5d, 0x78, |
| 476 | 0x62, 0xfd, 0x72, 0x89, 0xf5, 0x59, 0x0f, 0xfa, 0x59, 0xf2, 0xda, 0x4d, | 476 | 0xaf, 0x3e, 0xb7, 0xb8, 0xa7, 0xd6, 0x2a, 0xf9, 0x5a, 0xd3, 0x7b, 0xe8, |
| 477 | 0x96, 0x7c, 0x3b, 0xd1, 0xcf, 0x7d, 0xc8, 0x50, 0xae, 0xc7, 0xf3, 0x01, | 477 | 0x7f, 0xb3, 0x27, 0x2f, 0x27, 0x6c, 0xe1, 0x19, 0x7b, 0xb0, 0xcf, 0x23, |
| 478 | 0x86, 0xd1, 0x08, 0x39, 0x70, 0xc0, 0xff, 0x31, 0x94, 0xf7, 0xf3, 0xbe, | 478 | 0x3b, 0xb8, 0x27, 0x40, 0x77, 0xd8, 0xdf, 0xe7, 0xb1, 0xde, 0xe7, 0x60, |
| 479 | 0x07, 0xca, 0x88, 0x85, 0x7e, 0x1c, 0x25, 0x46, 0xcc, 0x39, 0x63, 0x28, | 479 | 0x7f, 0x2f, 0xc2, 0xfe, 0x5e, 0x28, 0xaf, 0xea, 0x8f, 0xc0, 0xee, 0x52, |
| 480 | 0x63, 0x1b, 0x2b, 0x9e, 0x44, 0xf9, 0xa8, 0x24, 0xe3, 0x79, 0x75, 0xf7, | 480 | 0x07, 0x3c, 0x03, 0x9e, 0x8d, 0x01, 0xf7, 0xef, 0x85, 0x3f, 0x30, 0x02, |
| 481 | 0xac, 0x1d, 0x65, 0xec, 0x23, 0xa8, 0xf7, 0x63, 0xfe, 0x8f, 0x92, 0xa3, | 481 | 0xec, 0x3f, 0x04, 0xfe, 0x65, 0xc0, 0xbb, 0x71, 0xde, 0x45, 0x01, 0x1f, |
| 482 | 0xa0, 0xed, 0x97, 0xf7, 0xaa, 0xbd, 0x81, 0x8c, 0xe9, 0x40, 0x1f, 0x58, | 482 | 0x07, 0xd5, 0x59, 0xe6, 0xac, 0x3a, 0xcf, 0xff, 0x81, 0xb2, 0xbd, 0x8f, |
| 483 | 0x96, 0x34, 0xd9, 0x2e, 0xe7, 0x38, 0xca, 0x16, 0xde, 0x57, 0xe1, 0x19, | 483 | 0x97, 0x2d, 0xd8, 0x87, 0xa2, 0x7f, 0x9d, 0xeb, 0x00, 0xff, 0xad, 0xec, |
| 484 | 0x5e, 0x44, 0xee, 0xad, 0x34, 0x4b, 0xae, 0xd2, 0x70, 0x1d, 0xfb, 0xef, | 484 | 0xe7, 0xc1, 0x17, 0xa1, 0x57, 0x7e, 0x8c, 0x79, 0x3d, 0x37, 0x4b, 0x7b, |
| 485 | 0xeb, 0xe4, 0x72, 0xdc, 0x14, 0xde, 0x83, 0xf0, 0xf4, 0x3c, 0xb4, 0x95, | 485 | 0x8e, 0x3a, 0x01, 0xde, 0xf6, 0x18, 0xeb, 0xc2, 0x7e, 0x3e, 0x7a, 0x59, |
| 486 | 0x3a, 0x31, 0xc0, 0x73, 0x03, 0xf8, 0x5b, 0xac, 0x05, 0xfc, 0xef, 0x39, | 486 | 0x96, 0x81, 0x3b, 0xb2, 0x94, 0x63, 0xf8, 0x0f, 0xce, 0x85, 0x8a, 0xf4, |
| 487 | 0xf8, 0xdf, 0xa7, 0x4b, 0x35, 0xfb, 0xe1, 0xf9, 0x5d, 0xda, 0x80, 0x27, | 487 | 0x52, 0x07, 0x02, 0x13, 0x0d, 0xca, 0xc0, 0xf1, 0x04, 0xb0, 0x1e, 0x90, |
| 488 | 0xb1, 0x66, 0xa3, 0xc0, 0xfd, 0x3b, 0x11, 0x0f, 0x0c, 0x03, 0xfb, 0x0f, | 488 | 0xbc, 0x3a, 0xaf, 0xc3, 0xf3, 0xf9, 0x2d, 0x62, 0x11, 0xef, 0x79, 0x3c, |
| 489 | 0x62, 0xfd, 0xd2, 0x58, 0xbb, 0x31, 0xde, 0x17, 0xc2, 0x3a, 0x0e, 0xa8, | 489 | 0x9b, 0xa1, 0xde, 0x30, 0x18, 0x69, 0x79, 0xb0, 0x43, 0xb2, 0xdb, 0x3b, |
| 490 | 0x73, 0xe6, 0x19, 0x75, 0xe7, 0xe2, 0x47, 0xca, 0xf7, 0x3e, 0x5e, 0x32, | 490 | 0x94, 0xee, 0x70, 0xbc, 0x97, 0x31, 0xee, 0x1e, 0xb8, 0x20, 0x6f, 0x00, |
| 491 | 0xe0, 0x1f, 0x0a, 0xee, 0x66, 0xdb, 0x02, 0xfe, 0x5b, 0xd1, 0xe7, 0x81, | 491 | 0x21, 0x58, 0x99, 0x43, 0xf2, 0xbf, 0x3c, 0xc6, 0xa8, 0x02, 0xdf, 0x0f, |
| 492 | 0x17, 0x61, 0x57, 0x7e, 0x06, 0xba, 0xce, 0xcf, 0xd0, 0x9f, 0xa3, 0x8e, | 492 | 0x73, 0x89, 0x81, 0x66, 0x9b, 0xf6, 0xbb, 0x76, 0x6c, 0x4f, 0x9d, 0xfd, |
| 493 | 0x87, 0xb7, 0x1d, 0xee, 0x75, 0x41, 0x9f, 0x0f, 0x2f, 0xcb, 0x12, 0x70, | 493 | 0xc7, 0x14, 0xc6, 0xca, 0x0b, 0xfb, 0x87, 0x9d, 0xc0, 0x98, 0xa9, 0xe3, |
| 494 | 0x47, 0x86, 0x72, 0x8c, 0xf8, 0xc1, 0x7a, 0x7a, 0x4e, 0xba, 0x69, 0x03, | 494 | 0x94, 0xfd, 0x6d, 0xe0, 0xdb, 0x3f, 0x05, 0x06, 0x22, 0x55, 0x87, 0x36, |
| 495 | 0xe7, 0xa8, 0x2b, 0xfd, 0xd3, 0x71, 0x60, 0x3d, 0x20, 0x79, 0x75, 0xae, | 495 | 0x07, 0xfb, 0x85, 0xf3, 0x5f, 0x26, 0x9e, 0x60, 0x4c, 0x3d, 0xf0, 0xcb, |
| 496 | 0x8a, 0xe7, 0xb3, 0x1b, 0xc5, 0x20, 0xde, 0x73, 0x6e, 0x40, 0x19, 0xed, | 496 | 0x57, 0xe6, 0xb6, 0x13, 0xf6, 0xeb, 0xb6, 0xcd, 0x94, 0x81, 0x71, 0x0f, |
| 497 | 0x86, 0x8f, 0x91, 0x96, 0x06, 0xda, 0x24, 0xb3, 0xa5, 0x4d, 0xd9, 0x0e, | 497 | 0x7e, 0xdf, 0xf1, 0xc0, 0x5e, 0x77, 0x9f, 0x47, 0xab, 0x13, 0xd2, 0xc9, |
| 498 | 0xcb, 0x79, 0x09, 0xe3, 0xee, 0x90, 0x46, 0x60, 0xb8, 0x02, 0xc6, 0x38, | 498 | 0xd3, 0x4e, 0x4b, 0x6e, 0x91, 0x8f, 0x44, 0x82, 0x7e, 0xac, 0x79, 0x1b, |
| 499 | 0x20, 0xff, 0xd5, 0xe1, 0x1e, 0x95, 0x17, 0xfb, 0x81, 0x96, 0x08, 0x78, | 499 | 0xb2, 0x4a, 0x3d, 0xd0, 0x09, 0x39, 0x67, 0x9e, 0x3a, 0x85, 0x3a, 0x81, |
| 500 | 0xd6, 0xb4, 0xc7, 0x36, 0x23, 0x3b, 0xaa, 0xec, 0x3f, 0xa2, 0x30, 0x56, | 500 | 0xb2, 0xe0, 0x4a, 0xa9, 0x0e, 0x9d, 0xd0, 0xd6, 0x25, 0x15, 0xd2, 0x6c, |
| 501 | 0x4e, 0xd8, 0x3f, 0xfc, 0x04, 0xc6, 0x4c, 0x4e, 0x53, 0xf6, 0x7b, 0xb1, | 501 | 0x9e, 0x7a, 0xe2, 0x07, 0x32, 0xbd, 0x4e, 0x57, 0x0e, 0x89, 0xf1, 0x6b, |
| 502 | 0x6e, 0xbf, 0x0d, 0x0c, 0x44, 0xae, 0x7e, 0x75, 0x83, 0xa7, 0x2f, 0xa4, | 502 | 0x5b, 0x25, 0x9a, 0x71, 0xed, 0x7b, 0xd5, 0x1a, 0x03, 0x7d, 0x79, 0x80, |
| 503 | 0x7f, 0x89, 0x78, 0x82, 0x67, 0x00, 0x5e, 0x5c, 0xbe, 0x42, 0x5b, 0x3f, | 503 | 0xf8, 0x73, 0x36, 0xeb, 0x74, 0x88, 0xc6, 0x9e, 0x0a, 0x3f, 0xbd, 0x89, |
| 504 | 0xe8, 0x9d, 0xdd, 0xe0, 0x9f, 0x25, 0x77, 0x4e, 0x7b, 0xfe, 0xba, 0xf3, | 504 | 0xb5, 0xb2, 0x0f, 0x45, 0xa7, 0xc1, 0xa1, 0xc0, 0x17, 0x50, 0x31, 0x3f, |
| 505 | 0x2c, 0x5a, 0x1d, 0x95, 0x76, 0x9e, 0x4a, 0x1b, 0x72, 0x8b, 0xdc, 0x19, | 505 | 0xe0, 0xe0, 0xc4, 0x8f, 0xa1, 0x6b, 0xf3, 0xc4, 0x25, 0xa0, 0x73, 0xf7, |
| 506 | 0xf2, 0xfa, 0x31, 0x4e, 0x98, 0x90, 0x55, 0xda, 0x81, 0x76, 0xc8, 0x39, | 506 | 0x09, 0xca, 0xd1, 0x75, 0xea, 0x6c, 0xbc, 0x62, 0xa5, 0xa9, 0xaf, 0x65, |
| 507 | 0xf3, 0xb4, 0x29, 0xb4, 0x09, 0x94, 0x05, 0x5b, 0x8a, 0x55, 0xd8, 0x84, | 507 | 0xf1, 0x38, 0x30, 0x97, 0xb5, 0x4b, 0x0a, 0x94, 0x57, 0x9e, 0x7d, 0x2f, |
| 508 | 0x96, 0x0e, 0x99, 0x23, 0xcf, 0x4e, 0xd0, 0x4e, 0xfc, 0x48, 0x26, 0xd7, | 508 | 0x5a, 0x32, 0x3d, 0xd7, 0x26, 0x3d, 0xf3, 0x8c, 0xaf, 0xee, 0x6e, 0x91, |
| 509 | 0xd8, 0xca, 0x41, 0xf1, 0xe3, 0xda, 0x66, 0x09, 0xa7, 0x6d, 0xf3, 0x3e, | 509 | 0x36, 0xc6, 0x58, 0x69, 0x83, 0x06, 0x24, 0x8f, 0xf2, 0xee, 0xf9, 0xb0, |
| 510 | 0x35, 0x47, 0xcf, 0x5e, 0xee, 0x23, 0xfe, 0x9c, 0xc9, 0x58, 0x6d, 0xa2, | 510 | 0x8a, 0x87, 0x55, 0x2c, 0xd2, 0xa8, 0x1f, 0xfa, 0xc0, 0x49, 0x2f, 0x5b, |
| 511 | 0xb1, 0xa7, 0xc2, 0x4f, 0xdf, 0xc7, 0x5c, 0xd9, 0x87, 0xe2, 0xd3, 0xc0, | 511 | 0xff, 0x25, 0x16, 0x60, 0x48, 0xc8, 0x52, 0x19, 0x32, 0x56, 0x86, 0x8c, |
| 512 | 0xa0, 0x17, 0x0b, 0xa8, 0x3d, 0x3f, 0xe0, 0xe0, 0xf8, 0xcf, 0x60, 0x6b, | 512 | 0x95, 0x21, 0x63, 0x65, 0xc8, 0x18, 0xb0, 0xdf, 0x73, 0xd8, 0x7f, 0x17, |
| 513 | 0x73, 0xc4, 0x25, 0xe0, 0x73, 0xe7, 0x51, 0xca, 0xd1, 0x66, 0xda, 0x32, | 513 | 0xcb, 0x83, 0xda, 0xae, 0xdf, 0xaf, 0xec, 0xfa, 0x91, 0x32, 0xcf, 0xf0, |
| 514 | 0xe0, 0xbc, 0x14, 0xed, 0xb5, 0x2c, 0x4c, 0x03, 0x73, 0x19, 0x77, 0x48, | 514 | 0xe9, 0x83, 0x26, 0x95, 0x0e, 0xb9, 0xa4, 0x7c, 0x51, 0xe3, 0xa3, 0xbe, |
| 515 | 0x9e, 0xf2, 0xca, 0xbb, 0x0a, 0x0b, 0x86, 0x4c, 0xce, 0xb6, 0x48, 0xd7, | 515 | 0x22, 0xcf, 0xcc, 0xbe, 0x2a, 0x67, 0x66, 0x57, 0x71, 0xe0, 0x54, 0xd9, |
| 516 | 0x09, 0xee, 0xaf, 0x9e, 0x8a, 0x4a, 0x0b, 0xf7, 0x58, 0xe9, 0x83, 0xfa, | 516 | 0x97, 0x97, 0x3d, 0xf8, 0x9f, 0x0b, 0xc4, 0x54, 0xd9, 0xf6, 0x66, 0x85, |
| 517 | 0x25, 0x87, 0xf2, 0xce, 0x13, 0x41, 0xb5, 0x1f, 0x36, 0x67, 0x90, 0x47, | 517 | 0xad, 0x0e, 0x4b, 0x41, 0xe1, 0x64, 0x65, 0x47, 0x80, 0xaf, 0x14, 0x2e, |
| 518 | 0x7d, 0xb0, 0x07, 0x56, 0x6a, 0xc9, 0xd8, 0xd6, 0xe4, 0x61, 0x48, 0xc8, | 518 | 0xe4, 0xde, 0x94, 0x8e, 0xed, 0xaf, 0xc9, 0x45, 0xd8, 0xf1, 0xc5, 0xfa, |
| 519 | 0x52, 0x09, 0x32, 0x56, 0x82, 0x8c, 0x95, 0x20, 0x63, 0x25, 0xc8, 0x18, | 519 | 0xeb, 0xf2, 0xbc, 0xc2, 0xe3, 0xa4, 0xc3, 0x07, 0xe4, 0x47, 0x76, 0x70, |
| 520 | 0xb0, 0xdf, 0x79, 0xe8, 0xdf, 0xb9, 0xd2, 0x80, 0xf6, 0xeb, 0xbb, 0x94, | 520 | 0x4e, 0x7c, 0x06, 0x58, 0x63, 0xb1, 0x8f, 0xba, 0x23, 0x02, 0x5b, 0xe0, |
| 521 | 0x5f, 0x3f, 0x54, 0x7a, 0xc5, 0x65, 0xfa, 0xac, 0x8a, 0x4d, 0xfb, 0x20, | 521 | 0x14, 0xbb, 0xb1, 0xaf, 0x0f, 0x5a, 0x37, 0x00, 0xd3, 0xf0, 0xfd, 0x16, |
| 522 | 0x83, 0x8c, 0x45, 0xfd, 0x18, 0xf5, 0x15, 0x79, 0x72, 0xe6, 0x55, 0x39, | 522 | 0x79, 0x71, 0xb6, 0xd8, 0x20, 0x13, 0xd4, 0x0f, 0xce, 0x51, 0xb1, 0x68, |
| 523 | 0x35, 0x53, 0xc3, 0x81, 0x13, 0x25, 0x57, 0x5e, 0x72, 0x10, 0x7f, 0xce, | 523 | 0xa7, 0x68, 0x37, 0xb9, 0x5e, 0xda, 0xa9, 0x3f, 0xd8, 0xcc, 0xb3, 0xd4, |
| 524 | 0x13, 0x53, 0x65, 0x5a, 0x1b, 0x15, 0xb6, 0x3a, 0x28, 0x79, 0x85, 0x93, | 524 | 0xea, 0xc9, 0x73, 0x2d, 0x8c, 0x37, 0xc6, 0x5d, 0xd2, 0xf4, 0x35, 0x39, |
| 525 | 0x95, 0x1f, 0x01, 0xbe, 0x52, 0xb8, 0x90, 0xba, 0x29, 0x6d, 0x5b, 0x2e, | 525 | 0x58, 0x63, 0xd9, 0xab, 0xe0, 0x0f, 0xd3, 0xef, 0xf9, 0xf7, 0xc4, 0x39, |
| 526 | 0xcb, 0x39, 0xf8, 0xf1, 0x85, 0xea, 0x6b, 0xf2, 0x8c, 0xc2, 0xe3, 0xe4, | 526 | 0x1e, 0xfb, 0x05, 0x6e, 0xea, 0xc4, 0x5a, 0xcb, 0x7f, 0xa9, 0x63, 0x5e, |
| 527 | 0xc3, 0x3b, 0xe5, 0xa7, 0xa6, 0x77, 0x9e, 0x7f, 0x0a, 0x58, 0x63, 0xa1, | 527 | 0xfd, 0x0a, 0x47, 0xbf, 0x13, 0x2f, 0x9b, 0x7b, 0x0d, 0xaf, 0xa9, 0x78, |
| 528 | 0x87, 0xb6, 0x23, 0x04, 0x5f, 0x60, 0x15, 0x3a, 0xa1, 0xd7, 0xfb, 0x8d, | 528 | 0xe0, 0x06, 0x71, 0xe2, 0xa7, 0xb0, 0xaf, 0x8a, 0x57, 0x85, 0x31, 0x4b, |
| 529 | 0x1b, 0x81, 0x69, 0xf8, 0x7e, 0xa3, 0xbc, 0x38, 0x53, 0xa8, 0x93, 0x09, | 529 | 0xc6, 0x73, 0x19, 0x2b, 0x6e, 0xd4, 0x18, 0xea, 0xbc, 0x54, 0xee, 0x86, |
| 530 | 0xda, 0x07, 0xeb, 0xb0, 0x18, 0xf4, 0x53, 0xf4, 0x9b, 0x9c, 0x2f, 0xfd, | 530 | 0x7e, 0xb9, 0x07, 0xfa, 0xe5, 0xde, 0x77, 0xdc, 0xaf, 0x35, 0x71, 0xfb, |
| 531 | 0xd4, 0x4f, 0x37, 0xf0, 0x0e, 0x57, 0xf9, 0x58, 0x6c, 0x03, 0xf7, 0x1b, | 531 | 0x9e, 0x62, 0xd8, 0xea, 0x92, 0xb1, 0x5a, 0x63, 0x5b, 0xc6, 0x71, 0x37, |
| 532 | 0x63, 0x36, 0x79, 0x7a, 0x59, 0xf6, 0x57, 0x58, 0xf6, 0x2a, 0xd6, 0x87, | 532 | 0x8a, 0xdb, 0x32, 0xa6, 0x9b, 0x5e, 0x17, 0x0b, 0xa4, 0x6c, 0xf8, 0xf2, |
| 533 | 0xe9, 0x0f, 0xdc, 0x7b, 0x63, 0x1c, 0x8f, 0xfd, 0x02, 0x37, 0xb5, 0x63, | 533 | 0x92, 0xc7, 0xb8, 0x9b, 0xb9, 0x9b, 0xbd, 0x11, 0xfe, 0xfa, 0xc3, 0xcd, |
| 534 | 0xae, 0xa5, 0x8f, 0x68, 0xcc, 0xdd, 0xa7, 0x70, 0xf4, 0xb5, 0x78, 0x99, | 534 | 0x26, 0xe6, 0x1c, 0xc9, 0x5c, 0x15, 0xde, 0xd1, 0x2e, 0xcd, 0x10, 0x0f, |
| 535 | 0x7c, 0x72, 0xc0, 0xa7, 0xcb, 0x6a, 0x3f, 0x70, 0x9d, 0x7d, 0xe2, 0x27, | 535 | 0xa8, 0xb3, 0x40, 0x15, 0xbb, 0xce, 0x07, 0xf1, 0x03, 0x94, 0xc3, 0xea, |
| 536 | 0xa0, 0x57, 0x85, 0x2b, 0xc2, 0x3d, 0x4b, 0xee, 0xe7, 0x72, 0xaf, 0xb8, | 536 | 0xc2, 0xdf, 0x61, 0xec, 0xda, 0xde, 0xe1, 0xd8, 0x63, 0xe1, 0xe0, 0xae, |
| 537 | 0xde, 0x62, 0xa8, 0x7b, 0x03, 0x72, 0x0f, 0xec, 0xcb, 0xbd, 0xb0, 0x2f, | 537 | 0x1f, 0xf7, 0x72, 0xa0, 0xcb, 0x20, 0x8b, 0xf5, 0xd5, 0x3b, 0x74, 0x43, |
| 538 | 0xf7, 0x5d, 0x73, 0x07, 0xda, 0x3f, 0x03, 0xe8, 0x2a, 0x04, 0x8d, 0x0e, | 538 | 0x4a, 0x5f, 0x5c, 0xc5, 0x1e, 0x20, 0xbf, 0xe0, 0x2f, 0x60, 0x9f, 0x4c, |
| 539 | 0x19, 0xad, 0xd4, 0xb7, 0xe5, 0x3e, 0xee, 0x7a, 0xfb, 0xb6, 0xdc, 0xd3, | 539 | 0x41, 0x3f, 0x15, 0x54, 0x7f, 0x31, 0xca, 0x45, 0x36, 0x17, 0xb6, 0x24, |
| 540 | 0x4d, 0xad, 0xd9, 0x0b, 0xa4, 0x6c, 0xb8, 0x72, 0xc9, 0xe1, 0xbe, 0x9b, | 540 | 0x7a, 0x8a, 0xbe, 0x50, 0x10, 0x6b, 0xc9, 0x87, 0x1d, 0xa5, 0xbf, 0x31, |
| 541 | 0x7f, 0x6f, 0x7e, 0x3d, 0xfc, 0x15, 0x68, 0xf6, 0xf7, 0x9c, 0x43, 0xe9, | 541 | 0x77, 0xe0, 0x33, 0xee, 0xcf, 0xe4, 0x44, 0x73, 0xa6, 0x09, 0x76, 0x15, |
| 542 | 0x2b, 0xc2, 0xfb, 0xf3, 0xc5, 0x29, 0xe2, 0x81, 0x98, 0xba, 0x17, 0x63, | 542 | 0xfc, 0xab, 0x33, 0x26, 0x80, 0xbd, 0xbb, 0xf4, 0x5d, 0x39, 0x30, 0x77, |
| 543 | 0xa8, 0x7d, 0x3e, 0xaf, 0x6d, 0x71, 0x4a, 0x9d, 0x31, 0x15, 0xb8, 0x77, | 543 | 0x69, 0x73, 0x20, 0xff, 0x8c, 0x23, 0x73, 0x7d, 0x66, 0x0e, 0x6b, 0xfb, |
| 544 | 0x6d, 0x6e, 0xb5, 0xcc, 0xd1, 0xa0, 0x77, 0x1f, 0x93, 0xba, 0xec, 0xd9, | 544 | 0xb6, 0x4e, 0x49, 0xac, 0x05, 0x36, 0xed, 0xa3, 0xa7, 0x88, 0x07, 0x9a, |
| 545 | 0x32, 0xc8, 0x62, 0xb5, 0x76, 0xcf, 0x71, 0x50, 0xd9, 0x8b, 0x2b, 0xd0, | 545 | 0x65, 0x39, 0xce, 0x7e, 0x83, 0x3d, 0x33, 0x5d, 0x66, 0xdf, 0xdf, 0x95, |
| 546 | 0x01, 0xae, 0x17, 0xe2, 0x05, 0xe8, 0xc9, 0x04, 0xec, 0x53, 0x5e, 0xf5, | 546 | 0xe1, 0xb9, 0x74, 0x2b, 0xf5, 0xc8, 0x12, 0xf4, 0xc0, 0x65, 0x9b, 0x36, |
| 547 | 0x17, 0xa1, 0x5c, 0x64, 0xb2, 0x41, 0x43, 0xc2, 0xc7, 0x19, 0x0b, 0x79, | 547 | 0x74, 0x1c, 0x36, 0xae, 0x53, 0xde, 0x9c, 0xa3, 0x7d, 0x4c, 0xd9, 0x67, |
| 548 | 0x7b, 0x2d, 0xb9, 0xa0, 0xa5, 0xec, 0x37, 0x68, 0x07, 0x3e, 0xa3, 0x7e, | 548 | 0x64, 0x5b, 0xe2, 0x0c, 0xe6, 0xf4, 0x84, 0x17, 0xa1, 0x8f, 0xe6, 0x0f, |
| 549 | 0x26, 0xc6, 0x1b, 0xd3, 0x0d, 0xf0, 0xab, 0x58, 0xbf, 0x2a, 0xf7, 0x04, | 549 | 0xa1, 0xec, 0xeb, 0x92, 0xb2, 0xbb, 0x43, 0x7c, 0xde, 0x66, 0x3f, 0x29, |
| 550 | 0xa0, 0xbb, 0x8b, 0xdf, 0x91, 0x7d, 0xb3, 0xdd, 0xcd, 0x9e, 0xfc, 0x73, | 550 | 0xbc, 0x6f, 0x90, 0xb2, 0x6f, 0x0d, 0x51, 0x8e, 0xe0, 0x73, 0x2f, 0xad, |
| 551 | 0x1f, 0x99, 0xf3, 0xf3, 0x69, 0x58, 0xdd, 0xb7, 0x71, 0x5c, 0x22, 0x51, | 551 | 0xce, 0xf3, 0x7b, 0x73, 0xca, 0x4f, 0x52, 0x7a, 0x66, 0xc9, 0xe3, 0x78, |
| 552 | 0xf8, 0xb4, 0x0f, 0x20, 0xce, 0xd8, 0x01, 0x59, 0x59, 0x8a, 0xb1, 0x5f, | 552 | 0x97, 0xb4, 0x6e, 0xbb, 0x15, 0xfa, 0x24, 0xa6, 0xcf, 0xc2, 0xd0, 0x86, |
| 553 | 0x4f, 0x67, 0x26, 0x4b, 0xec, 0xfb, 0x3b, 0x32, 0x34, 0x5b, 0x6a, 0xa6, | 553 | 0xd8, 0xc6, 0x8b, 0xe8, 0xfc, 0x67, 0x25, 0x77, 0x3a, 0x0e, 0x7d, 0xc6, |
| 554 | 0x2f, 0x59, 0x84, 0x1d, 0x58, 0x36, 0xe9, 0x43, 0xc7, 0xe0, 0xe3, 0xda, | 554 | 0xbe, 0x8c, 0xef, 0x40, 0x1b, 0x69, 0xf0, 0x36, 0xed, 0xdd, 0x2e, 0xd8, |
| 555 | 0xe5, 0xfb, 0xb3, 0xf4, 0x8f, 0x49, 0xf3, 0x94, 0xf4, 0xc6, 0x4f, 0x81, | 555 | 0xbd, 0x9b, 0xd4, 0x7c, 0x46, 0xbc, 0x7e, 0x99, 0x3a, 0xc9, 0xb1, 0xfb, |
| 556 | 0xa6, 0xcf, 0x3b, 0x21, 0xc6, 0x68, 0xee, 0x20, 0xca, 0xfe, 0x5c, 0x92, | 556 | 0xa0, 0xcb, 0x13, 0x4a, 0x6e, 0x4b, 0xe5, 0xcb, 0x89, 0x18, 0x74, 0x72, |
| 557 | 0x66, 0x67, 0x80, 0xcf, 0xbd, 0xe6, 0x17, 0x80, 0x61, 0x33, 0x66, 0xd2, | 557 | 0x6c, 0x3b, 0xe9, 0xf9, 0x61, 0xb9, 0xd3, 0x1d, 0x97, 0xbb, 0x20, 0x3b, |
| 558 | 0xbc, 0x35, 0x40, 0x39, 0x42, 0xcc, 0xbd, 0x58, 0xa3, 0xf3, 0x07, 0xb3, | 558 | 0x43, 0xae, 0x27, 0xc3, 0xe0, 0xc5, 0x1e, 0x17, 0x76, 0x47, 0x61, 0xe8, |
| 559 | 0x2a, 0x4e, 0x52, 0x76, 0x66, 0xd1, 0xe1, 0x78, 0xa0, 0x5b, 0xd9, 0xac, | 559 | 0x66, 0xf8, 0x5d, 0x1c, 0x9b, 0xf7, 0xc4, 0xd9, 0x36, 0xc0, 0x8f, 0x7f, |
| 560 | 0x5b, 0x61, 0x4f, 0x22, 0xfa, 0xfc, 0x0d, 0x6d, 0x88, 0x6d, 0x9c, 0x90, | 560 | 0x54, 0x0f, 0x68, 0x94, 0x9b, 0xfb, 0x88, 0xa2, 0xcd, 0x88, 0xb7, 0x53, |
| 561 | 0xce, 0x3f, 0x2a, 0xd9, 0x93, 0x31, 0xd8, 0x33, 0xf6, 0xe5, 0xc7, 0x0e, | 561 | 0xdb, 0xd9, 0x36, 0xc9, 0xab, 0x7a, 0x3b, 0x95, 0x3d, 0x2e, 0x2d, 0xde, |
| 562 | 0xf4, 0x91, 0x3e, 0xde, 0xa6, 0xbf, 0xbb, 0x03, 0x7e, 0xef, 0x66, 0x45, | 562 | 0x87, 0x14, 0xb6, 0x79, 0x11, 0xfa, 0x06, 0x98, 0xbb, 0x54, 0xdb, 0x81, |
| 563 | 0xcf, 0xb0, 0xd3, 0x27, 0x13, 0xc7, 0x38, 0x76, 0x0f, 0x6c, 0x79, 0x5c, | 563 | 0x3c, 0x6c, 0xe8, 0x62, 0x06, 0xe9, 0x87, 0x91, 0xb2, 0x6e, 0xa8, 0x35, |
| 564 | 0xc9, 0x6d, 0xb1, 0xb4, 0x1c, 0x8f, 0xc0, 0x26, 0x47, 0xb6, 0x90, 0x9f, | 564 | 0x88, 0xe5, 0x1a, 0x3c, 0xba, 0x7a, 0xbf, 0xf0, 0xa3, 0x0a, 0x97, 0x5e, |
| 565 | 0xef, 0x93, 0xbb, 0xec, 0x31, 0xb9, 0x1b, 0xb2, 0x33, 0x68, 0x3b, 0x32, | 565 | 0x55, 0xf7, 0xcb, 0x2c, 0x60, 0x9d, 0x1c, 0xf4, 0x4a, 0x2b, 0x30, 0xd0, |
| 566 | 0x84, 0xb5, 0xd8, 0x61, 0xc3, 0xef, 0x28, 0x0c, 0xdd, 0x88, 0xb8, 0x8b, | 566 | 0xcc, 0x29, 0x27, 0x3d, 0x1c, 0xda, 0x2d, 0xbf, 0x06, 0x5f, 0xbe, 0xea, |
| 567 | 0x63, 0xb7, 0xeb, 0xfb, 0x17, 0x1e, 0x7e, 0xfc, 0x4a, 0xd5, 0xe3, 0x51, | 567 | 0x91, 0x97, 0x3b, 0xe4, 0xc1, 0x3b, 0x28, 0x23, 0xbb, 0x65, 0xff, 0x1d, |
| 568 | 0x76, 0xf6, 0x49, 0xc5, 0x9b, 0x61, 0x67, 0x9b, 0xf6, 0xb3, 0x2d, 0x92, | 568 | 0x21, 0xd9, 0xdf, 0xef, 0x64, 0x39, 0xef, 0x5b, 0x6e, 0x33, 0xfe, 0x74, |
| 569 | 0x53, 0xf5, 0xb6, 0x29, 0x7f, 0x5c, 0x5c, 0xb8, 0x1f, 0x29, 0x7c, 0xf3, | 569 | 0xcf, 0x48, 0x2a, 0x34, 0x20, 0x4f, 0x42, 0xc6, 0x8a, 0x90, 0xaf, 0xe1, |
| 570 | 0x02, 0xec, 0x0d, 0x30, 0x77, 0xb1, 0xb2, 0x15, 0x79, 0xf8, 0xd0, 0x85, | 570 | 0x3a, 0x69, 0x4e, 0x7d, 0x4f, 0x3d, 0x9f, 0x06, 0x56, 0x36, 0xd8, 0xcf, |
| 571 | 0x34, 0xd2, 0xf7, 0x21, 0x65, 0xdd, 0x07, 0x9a, 0xbd, 0xbd, 0xdc, 0xb5, | 571 | 0x95, 0x99, 0x7a, 0x93, 0x24, 0xaf, 0x67, 0x3c, 0x39, 0x19, 0x9c, 0x71, |
| 572 | 0xf7, 0xb8, 0x24, 0xf0, 0x01, 0x85, 0x4b, 0xaf, 0xa8, 0x3b, 0x80, 0x88, | 572 | 0x5c, 0x4f, 0x99, 0x80, 0x0f, 0x72, 0x7d, 0xb0, 0x3f, 0xd5, 0xbd, 0x2e, |
| 573 | 0xa1, 0x47, 0xb2, 0xb0, 0x2b, 0xcd, 0xc0, 0x40, 0x53, 0xc7, 0xad, 0xd4, | 573 | 0xf5, 0x1c, 0xa7, 0xff, 0xeb, 0x13, 0xe7, 0x15, 0x14, 0x5f, 0x68, 0x23, |
| 574 | 0x50, 0x60, 0xbb, 0x7c, 0x10, 0xb1, 0x7c, 0xd9, 0xe1, 0x5a, 0x6e, 0x95, | 574 | 0x98, 0xfe, 0xbb, 0xd6, 0x15, 0x7c, 0xd7, 0x46, 0xff, 0x61, 0x67, 0xeb, |
| 575 | 0x07, 0xdf, 0x4b, 0x19, 0xd9, 0x2e, 0x7b, 0xde, 0x1b, 0x90, 0x3d, 0x7d, | 575 | 0xea, 0xbd, 0xf4, 0xf5, 0xb2, 0x68, 0xe2, 0x6e, 0x15, 0xac, 0x99, 0x36, |
| 576 | 0x56, 0x86, 0x74, 0xdf, 0xf2, 0x2e, 0x3f, 0x9e, 0xee, 0x1a, 0x4e, 0x06, | 576 | 0xdd, 0xb1, 0xa9, 0x0b, 0xdb, 0xdd, 0xfb, 0xe5, 0x4f, 0x60, 0xdf, 0xbf, |
| 577 | 0xfa, 0xe5, 0x0b, 0x90, 0xb1, 0x02, 0xe4, 0x6b, 0xa8, 0x4a, 0x9e, 0xd3, | 577 | 0xb2, 0x62, 0xdf, 0xf7, 0x81, 0x1e, 0xeb, 0x31, 0x80, 0x6b, 0xdf, 0x8d, |
| 578 | 0xde, 0xd3, 0xce, 0xa7, 0x80, 0x95, 0x7d, 0xec, 0x67, 0xcb, 0x54, 0xb5, | 578 | 0xb5, 0x8c, 0x80, 0x9f, 0x77, 0xe1, 0x77, 0x67, 0x79, 0x4d, 0x1c, 0x6f, |
| 579 | 0x41, 0x12, 0x37, 0x70, 0x3f, 0x39, 0xe1, 0x9d, 0x71, 0xdc, 0x40, 0x99, | 579 | 0xb6, 0x08, 0x3c, 0xd9, 0xe4, 0xb2, 0xbf, 0x35, 0xf1, 0xbc, 0x62, 0x41, |
| 580 | 0x40, 0x0c, 0x72, 0x83, 0xa7, 0x9f, 0xea, 0xee, 0xdd, 0x0d, 0x9e, 0x5f, | 580 | 0x56, 0x62, 0x85, 0x83, 0xd7, 0x84, 0x76, 0xef, 0x2d, 0x89, 0xf6, 0xba, |
| 581 | 0x41, 0xfc, 0xeb, 0x12, 0xe7, 0x79, 0x77, 0x0d, 0xbe, 0xa1, 0x6d, 0x69, | 581 | 0x6f, 0x75, 0x87, 0xdc, 0x17, 0xac, 0x10, 0xcf, 0x95, 0x3d, 0x39, 0x5b, |
| 582 | 0x68, 0xe3, 0x0a, 0xbe, 0x6b, 0x61, 0xfc, 0xf0, 0x87, 0xcd, 0xb5, 0x6f, | 582 | 0x27, 0x0e, 0xbb, 0x22, 0xd6, 0x79, 0x62, 0xb0, 0x6f, 0xa8, 0x18, 0x54, |
| 583 | 0x07, 0xd6, 0xca, 0xa2, 0xbf, 0xef, 0x36, 0x87, 0x39, 0xd3, 0xa7, 0x5b, | 583 | 0xb5, 0xfc, 0x6d, 0xa4, 0xa8, 0x0f, 0xfd, 0x18, 0x0e, 0xe2, 0x14, 0x0a, |
| 584 | 0x26, 0x6d, 0x61, 0xab, 0xbd, 0x4b, 0xfe, 0x0c, 0xfe, 0xfd, 0x6b, 0x2b, | 584 | 0xab, 0x50, 0xcf, 0xde, 0x05, 0x3e, 0x4c, 0xe1, 0xd7, 0xbd, 0xfd, 0x56, |
| 585 | 0xfe, 0x7d, 0x37, 0xf8, 0xb1, 0x16, 0x03, 0xd8, 0xe6, 0x3d, 0x98, 0xcb, | 585 | 0xec, 0x5f, 0xca, 0x29, 0x63, 0x5f, 0xbd, 0xf6, 0xf6, 0x10, 0xdf, 0x6d, |
| 586 | 0x30, 0xd6, 0xf3, 0x6e, 0xfc, 0xee, 0x2a, 0xad, 0xda, 0xc7, 0x9b, 0x29, | 586 | 0x14, 0x07, 0xfb, 0x8e, 0x44, 0x4e, 0xc0, 0xd6, 0x59, 0xd4, 0x0f, 0x5c, |
| 587 | 0x00, 0x4f, 0x36, 0xd8, 0xec, 0x6f, 0xd5, 0x7e, 0x5e, 0x21, 0x2f, 0x2b, | 587 | 0x07, 0xed, 0xa4, 0x2d, 0x0b, 0x27, 0xb9, 0xd7, 0x37, 0xaa, 0x6f, 0xea, |
| 588 | 0x7b, 0x85, 0x03, 0x57, 0x85, 0x7e, 0xef, 0x75, 0x09, 0x77, 0xdb, 0xaf, | 588 | 0x9a, 0xb5, 0x28, 0xbb, 0x91, 0x2d, 0x30, 0xc6, 0x59, 0x26, 0x0f, 0x3c, |
| 589 | 0x77, 0x06, 0xec, 0xe7, 0x8d, 0x00, 0xcf, 0xc1, 0x1d, 0x39, 0x5d, 0x25, | 589 | 0xf0, 0xc0, 0x97, 0x53, 0x5e, 0x3b, 0xf4, 0x76, 0x5c, 0xc2, 0xa7, 0x7c, |
| 590 | 0x0e, 0xbb, 0x28, 0xc6, 0x59, 0x62, 0xb0, 0x97, 0xd5, 0x1e, 0x54, 0xb9, | 590 | 0x19, 0x52, 0xd8, 0x75, 0x1b, 0x30, 0xd7, 0x16, 0x8d, 0x1b, 0xe2, 0x12, |
| 591 | 0xf4, 0x2d, 0xa4, 0xa8, 0x0f, 0xfb, 0x18, 0xf4, 0xf6, 0x29, 0x14, 0x56, | 591 | 0x39, 0xd5, 0x25, 0xcd, 0xc0, 0xd5, 0x4d, 0xc7, 0x68, 0x23, 0x53, 0xc9, |
| 592 | 0xa1, 0x9d, 0xbd, 0x1b, 0xeb, 0x30, 0x81, 0x5f, 0xe7, 0x96, 0x5b, 0xa1, | 592 | 0x21, 0x08, 0x41, 0x44, 0xdd, 0x55, 0x74, 0x06, 0xdf, 0x94, 0x6d, 0xc9, |
| 593 | 0xbf, 0x94, 0x53, 0xee, 0x7d, 0x75, 0x9b, 0x5b, 0x02, 0x7c, 0xb7, 0xde, | 593 | 0x37, 0x85, 0x78, 0xe9, 0x86, 0x2d, 0xf0, 0x09, 0xbc, 0x2b, 0x1b, 0xd4, |
| 594 | 0x3e, 0xd8, 0xb7, 0x25, 0x74, 0x14, 0xbe, 0xce, 0xa0, 0x7d, 0xe0, 0x3c, | 594 | 0x2f, 0xad, 0xd6, 0x87, 0x1c, 0x31, 0xb6, 0xc6, 0x36, 0x8c, 0xb5, 0xa5, |
| 595 | 0xe8, 0x27, 0x4d, 0x99, 0x3f, 0x46, 0x5d, 0x5f, 0xaf, 0xbe, 0x5f, 0xd7, | 595 | 0x06, 0xdf, 0x60, 0x8c, 0x0d, 0xbe, 0x66, 0xd3, 0xb9, 0x60, 0x0e, 0xd6, |
| 596 | 0x9f, 0x8b, 0xf2, 0x1b, 0x99, 0x3c, 0xf7, 0x38, 0x4b, 0x5c, 0x03, 0x07, | 596 | 0x52, 0x87, 0x54, 0x4f, 0x73, 0x8f, 0x32, 0xce, 0x62, 0x07, 0x7e, 0x6a, |
| 597 | 0x6b, 0xe0, 0xca, 0x71, 0xa7, 0x95, 0x36, 0x5d, 0x82, 0xc7, 0x5d, 0x19, | 597 | 0x99, 0xfe, 0x2a, 0xdf, 0x27, 0xf5, 0xfb, 0x6e, 0xfd, 0x9e, 0xfe, 0x68, |
| 598 | 0x54, 0xd8, 0xb5, 0x17, 0x98, 0x6b, 0xa3, 0xc6, 0x0d, 0x31, 0x09, 0x1d, | 598 | 0xd1, 0x6f, 0x02, 0x4d, 0xf7, 0x40, 0x7f, 0xde, 0xb7, 0xc3, 0x55, 0xb8, |
| 599 | 0xef, 0x90, 0x46, 0xe0, 0xea, 0x86, 0x23, 0xf4, 0x91, 0xc9, 0xc4, 0x20, | 599 | 0xe1, 0xbe, 0x15, 0x9e, 0xed, 0x15, 0xeb, 0x38, 0xfc, 0xd4, 0xf2, 0x61, |
| 600 | 0x84, 0x20, 0xa4, 0xee, 0x93, 0x5a, 0x03, 0xdf, 0x97, 0xde, 0xc4, 0xf7, | 600 | 0x71, 0xb7, 0x2f, 0xa7, 0x23, 0x32, 0x06, 0x5e, 0x30, 0x9f, 0xe5, 0x7c, |
| 601 | 0x85, 0x78, 0xe9, 0x51, 0xac, 0x9f, 0xe5, 0x5c, 0x5c, 0xa7, 0x7e, 0xb1, | 601 | 0xd2, 0x47, 0xe4, 0xa0, 0xe2, 0x4d, 0xf5, 0xa4, 0x73, 0x34, 0x19, 0x9a, |
| 602 | 0x56, 0x1f, 0x72, 0xc4, 0xbd, 0x35, 0xb6, 0xe1, 0x5e, 0x5b, 0x72, 0xe0, | 602 | 0x12, 0xab, 0xca, 0xe7, 0x47, 0x90, 0x1e, 0x01, 0xde, 0x09, 0x62, 0x97, |
| 603 | 0x7b, 0xdc, 0x63, 0x43, 0xac, 0xd9, 0x70, 0xc6, 0xa3, 0xc1, 0x58, 0x6c, | 603 | 0x56, 0x75, 0x2d, 0x2d, 0x81, 0x31, 0xec, 0x3d, 0x6b, 0xe2, 0x58, 0xab, |
| 604 | 0x93, 0xf2, 0x49, 0xea, 0x28, 0xf7, 0x59, 0x4c, 0x2f, 0x4e, 0x2d, 0x31, | 604 | 0x31, 0x2e, 0xbe, 0x1f, 0x52, 0xef, 0xd3, 0x6b, 0xe2, 0x5c, 0x79, 0x8b, |
| 605 | 0x5e, 0xe5, 0xfb, 0x84, 0x7e, 0xdf, 0xa9, 0xdf, 0x33, 0x1e, 0x2d, 0xb8, | 605 | 0x58, 0xc6, 0xbc, 0x27, 0x2f, 0xc8, 0x2f, 0xd8, 0xe2, 0x93, 0x26, 0xe6, |
| 606 | 0x0d, 0xe0, 0xe9, 0x0e, 0xd8, 0xcf, 0xfb, 0xb7, 0xda, 0x0a, 0x37, 0xdc, | 606 | 0xd5, 0xa6, 0xf9, 0x42, 0xfe, 0xcc, 0xc8, 0x45, 0xdb, 0x19, 0xa1, 0xfc, |
| 607 | 0xbf, 0xb2, 0x66, 0x3b, 0xd5, 0xdd, 0xa2, 0x72, 0xe9, 0xa0, 0xd8, 0x5b, | 607 | 0xfd, 0xea, 0x8e, 0x1b, 0x65, 0xa2, 0x93, 0xf1, 0xb6, 0xc6, 0x39, 0xac, |
| 608 | 0x96, 0x52, 0x21, 0x19, 0xc5, 0x5a, 0x30, 0x9f, 0x21, 0x3d, 0xa9, 0x43, | 608 | 0x8f, 0xa3, 0x35, 0x8e, 0xbf, 0x3e, 0xfe, 0xc6, 0xb1, 0x83, 0x18, 0x5b, |
| 609 | 0xb2, 0x5f, 0xad, 0x4d, 0xf9, 0x98, 0x75, 0x38, 0x11, 0x98, 0x10, 0xa3, | 609 | 0x6e, 0x4d, 0x8c, 0xad, 0x71, 0x3c, 0x8e, 0xb5, 0x05, 0xfe, 0x53, 0xd1, |
| 610 | 0xcc, 0xe7, 0x4f, 0x23, 0x3d, 0x04, 0xbc, 0xe3, 0xed, 0x5d, 0x1a, 0xe5, | 610 | 0x8f, 0xbb, 0xe4, 0x51, 0x4f, 0x72, 0x8e, 0xf9, 0x2f, 0x58, 0xe0, 0x63, |
| 611 | 0xd5, 0xbc, 0x04, 0xc6, 0x30, 0x77, 0xac, 0xda, 0xc7, 0xaa, 0xed, 0x71, | 611 | 0x1c, 0x76, 0x84, 0xbc, 0x34, 0x67, 0xcf, 0xe4, 0x69, 0x2a, 0x79, 0x24, |
| 612 | 0xf1, 0xfd, 0xa0, 0x7a, 0x9f, 0x5a, 0xb5, 0xcf, 0x95, 0x33, 0x88, 0x65, | 612 | 0xe0, 0xe7, 0x60, 0xc0, 0xf7, 0x80, 0xff, 0x57, 0x56, 0xf8, 0x48, 0xfb, |
| 613 | 0xfc, 0xf7, 0x5c, 0x0b, 0xae, 0x17, 0x7c, 0xf1, 0x31, 0x7f, 0xcf, 0xab, | 613 | 0x40, 0x3e, 0x76, 0x8a, 0x40, 0xcf, 0x5a, 0xc7, 0xc8, 0x43, 0xa6, 0xe4, |
| 614 | 0x45, 0xaf, 0x0b, 0xd7, 0x67, 0x4a, 0xce, 0x99, 0xd6, 0x30, 0xe5, 0xef, | 614 | 0x21, 0xdf, 0x91, 0x87, 0xdd, 0xfa, 0x1d, 0xf9, 0x07, 0x9c, 0xf6, 0x79, |
| 615 | 0xb6, 0xad, 0x37, 0xc9, 0x78, 0x3b, 0xf7, 0xdb, 0xea, 0x69, 0x58, 0xbb, | 615 | 0x60, 0x0c, 0x2f, 0xa7, 0xbe, 0xb1, 0xe9, 0xee, 0x35, 0x7b, 0x31, 0x2d, |
| 616 | 0x8f, 0x56, 0x3f, 0xfe, 0xda, 0xfd, 0x37, 0x8e, 0xed, 0xed, 0xb1, 0x65, | 616 | 0xcf, 0x2f, 0xb4, 0x88, 0x9d, 0x09, 0xd6, 0x35, 0xbe, 0x26, 0xde, 0xce, |
| 617 | 0x57, 0xed, 0xb1, 0xd5, 0x8f, 0xc7, 0xb1, 0x36, 0x22, 0x7e, 0x2a, 0xb8, | 617 | 0xf3, 0xab, 0x7e, 0x62, 0x4f, 0xb3, 0xae, 0x04, 0xd7, 0x75, 0x50, 0x5e, |
| 618 | 0x31, 0x9b, 0x6b, 0xd4, 0x95, 0x98, 0x65, 0xfe, 0xcb, 0x06, 0xd6, 0x31, | 618 | 0x93, 0xc2, 0x4c, 0x04, 0x3e, 0x60, 0x1a, 0x38, 0xa7, 0x1f, 0xfa, 0x96, |
| 619 | 0x06, 0x3f, 0xc2, 0xb5, 0xf4, 0xcf, 0x9e, 0xb9, 0xa6, 0xc9, 0xc4, 0x21, | 619 | 0xf1, 0x51, 0x94, 0xd5, 0x88, 0x57, 0x68, 0xeb, 0xd2, 0xd8, 0x2b, 0xd4, |
| 620 | 0x6f, 0x3d, 0x07, 0xbc, 0x75, 0xf7, 0xd6, 0xff, 0xe2, 0xca, 0x3a, 0xd2, | 620 | 0xc1, 0xc4, 0x23, 0xaf, 0x4a, 0xbe, 0x62, 0x74, 0x0c, 0xfa, 0xb7, 0x4c, |
| 621 | 0x3f, 0x70, 0x1d, 0xdb, 0x45, 0x60, 0x67, 0x8d, 0x23, 0x5c, 0x43, 0xa6, | 621 | 0xff, 0xa4, 0x73, 0xf6, 0x96, 0xeb, 0x64, 0x39, 0x79, 0x9d, 0x38, 0xc9, |
| 622 | 0x5c, 0x43, 0xbe, 0xe3, 0x1a, 0x76, 0xea, 0x77, 0x5c, 0x3f, 0xe0, 0xb4, | 622 | 0x45, 0x59, 0xe5, 0xeb, 0xf8, 0xc6, 0x74, 0xf7, 0xee, 0x0b, 0xaf, 0xca, |
| 623 | 0x2f, 0x02, 0x63, 0x38, 0x59, 0xf5, 0x1d, 0x54, 0x67, 0xb7, 0xaf, 0x8b, | 623 | 0xc6, 0xf8, 0x06, 0xbc, 0x9f, 0x14, 0xf3, 0xde, 0xf0, 0x7e, 0x43, 0x3e, |
| 624 | 0x29, 0x79, 0x66, 0x3e, 0x2a, 0x66, 0xda, 0x9b, 0xd7, 0xd8, 0xaa, 0xfd, | 624 | 0x14, 0x5f, 0x11, 0xf2, 0x82, 0x34, 0x20, 0x1e, 0x8e, 0xca, 0xef, 0xc6, |
| 625 | 0x76, 0x9e, 0x5f, 0xf5, 0x11, 0x7b, 0xfa, 0xf3, 0x8a, 0x73, 0x5e, 0xfb, | 625 | 0xb9, 0x1f, 0x8b, 0xea, 0x7c, 0x33, 0x65, 0xf5, 0x2a, 0x9d, 0x31, 0xe4, |
| 626 | 0xe5, 0xb2, 0xe4, 0xa7, 0x42, 0x88, 0x01, 0x53, 0xc0, 0x39, 0x7d, 0xb0, | 626 | 0x05, 0xf2, 0x5a, 0xc4, 0x38, 0xb1, 0x9e, 0xdf, 0xf3, 0x87, 0xe2, 0xf0, |
| 627 | 0xb7, 0xdc, 0x1f, 0x45, 0x59, 0x85, 0x78, 0x85, 0xbe, 0x2e, 0x05, 0x5d, | 627 | 0x73, 0x7b, 0xa8, 0x5f, 0xcc, 0x9e, 0x6e, 0x51, 0x7b, 0xfa, 0x09, 0x2f, |
| 628 | 0xa1, 0x0d, 0x26, 0x1e, 0x79, 0x55, 0x72, 0x73, 0xbe, 0x8d, 0x41, 0xff, | 628 | 0x24, 0x25, 0x37, 0x24, 0x53, 0xee, 0x61, 0x85, 0xf1, 0x7f, 0x03, 0x7d, |
| 629 | 0x86, 0xdf, 0x3f, 0xf9, 0x9c, 0xb9, 0x65, 0xb3, 0x2c, 0x25, 0x36, 0x8b, | 629 | 0x3d, 0xa8, 0xfb, 0x9a, 0x92, 0x5e, 0xad, 0x7f, 0x0e, 0x41, 0xce, 0x7d, |
| 630 | 0x95, 0x58, 0x90, 0xda, 0xba, 0x8e, 0xad, 0xcf, 0x77, 0xe7, 0xfe, 0x60, | 630 | 0xb9, 0xd7, 0xdb, 0x21, 0xbf, 0xda, 0xce, 0x3d, 0x60, 0xd6, 0x7f, 0x58, |
| 631 | 0x4d, 0x36, 0xc6, 0xd6, 0x59, 0xfb, 0xbd, 0xe2, 0xbf, 0xf7, 0xd7, 0x7e, | 631 | 0x7a, 0x76, 0x2c, 0x27, 0xe1, 0x19, 0xdc, 0x12, 0x5d, 0xa1, 0x01, 0xf7, |
| 632 | 0xdd, 0x75, 0x28, 0xbc, 0x22, 0x5c, 0x0b, 0xf2, 0x80, 0x78, 0x38, 0x2c, | 632 | 0x99, 0x91, 0xef, 0x80, 0x0e, 0xc1, 0xfa, 0xd7, 0xac, 0x55, 0xaf, 0x93, |
| 633 | 0x9f, 0x8a, 0x51, 0x1f, 0x0b, 0xea, 0x7c, 0x33, 0x69, 0x74, 0x2b, 0x9b, | 633 | 0x6b, 0x66, 0x3d, 0xae, 0x35, 0xc0, 0xf2, 0xab, 0x6b, 0x35, 0xf5, 0x5b, |
| 634 | 0x31, 0xe8, 0x78, 0xf2, 0x5a, 0xc0, 0x38, 0x91, 0xae, 0x7f, 0xe1, 0x0e, | 634 | 0x21, 0x4b, 0x4e, 0x52, 0x42, 0x8d, 0xb4, 0x59, 0xd1, 0x51, 0x23, 0x8c, |
| 635 | 0xc6, 0x10, 0xe7, 0x76, 0xd1, 0xbe, 0xf8, 0x3a, 0x1d, 0x55, 0x3a, 0xfd, | 635 | 0x91, 0x2c, 0xdb, 0x4e, 0x3a, 0x19, 0x32, 0xb1, 0xe8, 0x00, 0xeb, 0x76, |
| 636 | 0x79, 0x27, 0x20, 0x45, 0x3b, 0x20, 0x13, 0xf6, 0x41, 0x85, 0xf1, 0x3f, | 636 | 0x03, 0x87, 0xbb, 0xbd, 0xbd, 0xe9, 0x82, 0x8a, 0x91, 0x5a, 0x6a, 0x5d, |
| 637 | 0x84, 0xbe, 0x1e, 0xd4, 0x7d, 0x4d, 0x48, 0xb7, 0xb6, 0x3f, 0x07, 0x20, | 637 | 0x53, 0xc0, 0x64, 0x0b, 0xde, 0x2b, 0xfe, 0xa7, 0x81, 0x59, 0x27, 0xe4, |
| 638 | 0xe7, 0xae, 0xdc, 0xe7, 0x6c, 0x95, 0xdb, 0x5a, 0xa9, 0x03, 0xfe, 0xfc, | 638 | 0x61, 0x09, 0xaf, 0x89, 0xe5, 0x22, 0x7f, 0x9e, 0xf1, 0x5c, 0x27, 0x99, |
| 639 | 0x0f, 0x4a, 0xd7, 0xd6, 0xa5, 0x04, 0x22, 0x83, 0x5b, 0xc2, 0x2b, 0x3c, | 639 | 0x05, 0x8f, 0x7f, 0x13, 0x3e, 0x7c, 0x15, 0x7a, 0xff, 0xe3, 0xb4, 0x0d, |
| 640 | 0xa0, 0x9e, 0xf9, 0xf2, 0xed, 0xf1, 0xc1, 0x9b, 0xff, 0xaa, 0xb9, 0xea, | 640 | 0x65, 0xd8, 0x0b, 0xe0, 0x92, 0xaf, 0xbc, 0x27, 0x86, 0x9f, 0x68, 0x88, |
| 641 | 0x79, 0x72, 0xce, 0xac, 0xc7, 0xb9, 0x7a, 0x58, 0xbe, 0x36, 0x57, 0xbf, | 641 | 0xe5, 0x06, 0xf8, 0xf4, 0xa2, 0xc2, 0xa4, 0xc4, 0xed, 0x47, 0x43, 0x77, |
| 642 | 0x7e, 0x33, 0x64, 0xc9, 0x4a, 0x48, 0xa0, 0x9e, 0x37, 0x2b, 0x36, 0x6a, | 642 | 0xf7, 0x85, 0xe1, 0x67, 0x14, 0xfd, 0x98, 0x4b, 0x1c, 0x77, 0x58, 0xee, |
| 643 | 0x98, 0x7b, 0x24, 0x4b, 0xa6, 0x95, 0x4a, 0x04, 0xfc, 0xbd, 0x68, 0x0f, | 643 | 0x04, 0x7f, 0xce, 0x2e, 0x14, 0x43, 0x7b, 0xca, 0x46, 0x56, 0xe1, 0x57, |
| 644 | 0xeb, 0x76, 0x02, 0x87, 0xdb, 0xdd, 0xdd, 0xa9, 0xbc, 0xda, 0x23, 0x35, | 644 | 0xd6, 0x9d, 0xf4, 0x65, 0xd0, 0xe3, 0x19, 0x8d, 0xf9, 0x78, 0x5e, 0x53, |
| 645 | 0xd4, 0xbc, 0x26, 0x80, 0xc9, 0xe6, 0x9d, 0x57, 0xdc, 0x4f, 0x02, 0xb3, | 645 | 0xd5, 0x3e, 0x0b, 0x63, 0x43, 0xa5, 0xfa, 0x61, 0x99, 0xf6, 0x18, 0xdb, |
| 646 | 0x8e, 0xcb, 0xc3, 0x12, 0x5c, 0xb5, 0x97, 0x8b, 0xfc, 0x59, 0xee, 0xe7, | 646 | 0xe9, 0x91, 0x52, 0x3c, 0x7b, 0x63, 0xf3, 0x0a, 0x8d, 0x1c, 0x1b, 0x3e, |
| 647 | 0x5a, 0x89, 0x0c, 0xd6, 0xf8, 0xc3, 0x88, 0xe1, 0xcb, 0xb0, 0xfb, 0x1f, | 647 | 0x5f, 0x9a, 0xfa, 0xbb, 0xaa, 0xcf, 0x3b, 0x9e, 0x51, 0xf2, 0x65, 0xe2, |
| 648 | 0xa1, 0x6f, 0x28, 0xc1, 0x5f, 0x00, 0x97, 0x7c, 0xed, 0xba, 0x18, 0x7e, | 648 | 0xc2, 0xf4, 0x8f, 0x78, 0x5e, 0xd5, 0x63, 0x8f, 0xf0, 0xb9, 0x42, 0x19, |
| 649 | 0xbc, 0x6e, 0x2f, 0xd7, 0xc3, 0xa7, 0xe7, 0x14, 0x26, 0x25, 0x6e, 0x3f, | 649 | 0x50, 0x3e, 0x13, 0x68, 0xf9, 0x90, 0x64, 0xc7, 0x92, 0x0a, 0xb7, 0x3c, |
| 650 | 0x1c, 0xb8, 0xa7, 0x27, 0x88, 0x38, 0xa3, 0xe0, 0x46, 0x6c, 0xe2, 0xb8, | 650 | 0x5e, 0xe6, 0x7e, 0x21, 0xfe, 0x7f, 0x0d, 0xd8, 0x3f, 0x02, 0x9e, 0xd1, |
| 651 | 0x83, 0x72, 0x17, 0xd6, 0xe7, 0xf4, 0x7c, 0x21, 0xb0, 0xa3, 0xe4, 0xcb, | 651 | 0x0f, 0xe0, 0xd8, 0xdc, 0x17, 0x28, 0xab, 0xd9, 0xef, 0xb2, 0x2f, 0x5e, |
| 652 | 0x2a, 0xe2, 0xca, 0xaa, 0x95, 0x5a, 0x06, 0x3f, 0x9e, 0xd4, 0x98, 0x8f, | 652 | 0x6b, 0x23, 0xc6, 0xb8, 0x54, 0x16, 0x45, 0xbf, 0x65, 0x31, 0xb1, 0x73, |
| 653 | 0xe7, 0x35, 0x65, 0x1d, 0xb3, 0x70, 0x6f, 0xa8, 0x58, 0x3d, 0x28, 0x93, | 653 | 0x85, 0x05, 0x8b, 0xb9, 0x70, 0x48, 0x52, 0x27, 0xfe, 0x35, 0x64, 0xe8, |
| 654 | 0x0e, 0xf7, 0x76, 0xba, 0xa4, 0x18, 0xcb, 0xdc, 0xd4, 0xb8, 0xc2, 0x23, | 654 | 0xd7, 0xe1, 0x23, 0xa9, 0x7a, 0xea, 0xfc, 0x6a, 0x08, 0x98, 0xcb, 0x72, |
| 655 | 0xcb, 0x44, 0xcc, 0x97, 0xa2, 0xfd, 0x2e, 0xeb, 0xf3, 0x8e, 0x27, 0x95, | 655 | 0x6f, 0x90, 0x92, 0x1d, 0x95, 0x92, 0xba, 0xa3, 0xc9, 0xf3, 0xdc, 0xb0, |
| 656 | 0x7c, 0xf9, 0xfb, 0xc2, 0x8c, 0x8f, 0x78, 0x5e, 0xd5, 0x65, 0x0e, 0xf3, | 656 | 0x8a, 0xed, 0x94, 0x6c, 0x62, 0xfe, 0xff, 0xde, 0x16, 0xd8, 0xfa, 0x0e, |
| 657 | 0x79, 0x8e, 0x32, 0xa0, 0x62, 0x26, 0xf0, 0xf2, 0x21, 0xc9, 0x8c, 0x26, | 657 | 0xe4, 0xd9, 0x8e, 0x79, 0x96, 0x4f, 0x49, 0xf4, 0xc4, 0x21, 0x69, 0x3a, |
| 658 | 0x14, 0x6e, 0x79, 0xbc, 0x44, 0x7d, 0x21, 0xfe, 0xbf, 0x0c, 0xec, 0x1f, | 658 | 0xf1, 0xb0, 0x34, 0x1f, 0x27, 0xc6, 0x63, 0xec, 0xde, 0xda, 0xd5, 0x2c, |
| 659 | 0xc2, 0x9a, 0x31, 0x0e, 0xe0, 0xd8, 0xd4, 0x0b, 0x94, 0x55, 0xcc, 0x5f, | 659 | 0xc4, 0xdc, 0x43, 0x18, 0xfb, 0xb0, 0x7c, 0xdf, 0x33, 0x73, 0x5a, 0xc4, |
| 660 | 0xa2, 0x17, 0xdb, 0x37, 0x11, 0x63, 0x5c, 0x28, 0x7d, 0x5c, 0xf1, 0x6f, | 660 | 0x1c, 0x59, 0xc7, 0xe4, 0x0d, 0x1e, 0xdf, 0x85, 0xf9, 0x70, 0xfd, 0x49, |
| 661 | 0x49, 0xfc, 0xbd, 0x73, 0x85, 0x05, 0x0b, 0xd9, 0x60, 0x40, 0x92, 0x47, | 661 | 0x8d, 0xfb, 0x76, 0x35, 0xf8, 0xae, 0x4d, 0xda, 0x77, 0x65, 0xbb, 0x4f, |
| 662 | 0x3f, 0x03, 0x19, 0x1a, 0x41, 0x8c, 0xc4, 0x7a, 0xa2, 0xce, 0xaf, 0x06, | 662 | 0x61, 0xad, 0x27, 0x25, 0xea, 0x9a, 0xf6, 0xbb, 0x51, 0x2f, 0xd1, 0x70, |
| 663 | 0x81, 0xb9, 0x0c, 0xfb, 0x46, 0x29, 0x9a, 0x61, 0x29, 0xaa, 0x7b, 0x80, | 663 | 0x07, 0x82, 0x75, 0xf4, 0x9d, 0x80, 0x36, 0xe2, 0x1e, 0x9e, 0xb7, 0xb3, |
| 664 | 0x3c, 0xcf, 0x0d, 0xaa, 0xbd, 0x9d, 0xa2, 0x49, 0xcc, 0x9f, 0xd9, 0xe4, | 664 | 0x2c, 0x38, 0xf3, 0xb7, 0xaa, 0xbb, 0xc2, 0x6b, 0xc7, 0xdf, 0xd9, 0x50, |
| 665 | 0xdf, 0x03, 0x2c, 0x9a, 0x6c, 0xc7, 0x3c, 0xcb, 0x27, 0x24, 0x7c, 0xf4, | 665 | 0xd7, 0x94, 0x99, 0x36, 0xd1, 0xc0, 0xe7, 0x1f, 0x88, 0x36, 0xb4, 0x83, |
| 666 | 0x80, 0x34, 0x1c, 0x7d, 0x58, 0x1a, 0xa7, 0x89, 0xf1, 0xb8, 0x77, 0x6f, | 666 | 0x71, 0x53, 0x69, 0xe0, 0x7b, 0x04, 0x7e, 0x10, 0xd7, 0x90, 0x6e, 0xc0, |
| 667 | 0xdc, 0xd1, 0x28, 0xc4, 0xdc, 0x5f, 0xc5, 0xd8, 0x07, 0xe5, 0x87, 0x8e, | 667 | 0x39, 0x6b, 0xbf, 0x45, 0xcc, 0xa3, 0xbc, 0x30, 0x67, 0xee, 0x91, 0x59, |
| 668 | 0x4f, 0xd3, 0x86, 0x8d, 0xd2, 0xc2, 0x3a, 0x7e, 0xde, 0xc7, 0xe3, 0x77, | 668 | 0x58, 0x8b, 0x53, 0xa4, 0xff, 0x62, 0xf3, 0x4e, 0xee, 0x5c, 0x11, 0xf3, |
| 669 | 0x80, 0x1e, 0xce, 0x3f, 0xa1, 0x71, 0xdf, 0x1d, 0x75, 0xb1, 0x6b, 0x83, | 669 | 0xbe, 0x49, 0xdd, 0x25, 0xe2, 0xdd, 0x0d, 0xd4, 0x4b, 0x06, 0xf8, 0x93, |
| 670 | 0x8e, 0x5d, 0xd9, 0xee, 0x32, 0x7c, 0xf6, 0x31, 0x09, 0xdb, 0x7e, 0xfb, | 670 | 0xf9, 0x04, 0x78, 0x7e, 0x5b, 0x97, 0x95, 0xf9, 0xf3, 0x1b, 0x73, 0x03, |
| 671 | 0xed, 0xa8, 0x17, 0xaf, 0xbb, 0x03, 0xc1, 0x3a, 0xfa, 0x4e, 0x40, 0x0b, | 671 | 0xc4, 0x37, 0x5b, 0x79, 0x0e, 0x09, 0xdc, 0x4c, 0x39, 0xfb, 0x2e, 0xe4, |
| 672 | 0x71, 0x0f, 0xcf, 0xdb, 0x59, 0xe6, 0x9d, 0xf9, 0x1b, 0xe5, 0x74, 0x70, | 672 | 0xac, 0x59, 0x9d, 0xfb, 0x94, 0xca, 0xf4, 0xe7, 0x0a, 0x90, 0x1f, 0xde, |
| 673 | 0xf5, 0xf8, 0xdb, 0xea, 0xea, 0xfa, 0x65, 0x7e, 0x9b, 0xb0, 0x17, 0xf3, | 673 | 0x87, 0xa3, 0xdf, 0x57, 0xd0, 0xf1, 0x58, 0xce, 0x93, 0x98, 0xde, 0xf8, |
| 674 | 0xf7, 0x87, 0xeb, 0xda, 0x7d, 0xd7, 0xf4, 0x52, 0x2f, 0xf6, 0xf0, 0xe2, | 674 | 0x07, 0xec, 0x73, 0xfd, 0x19, 0x6c, 0xe3, 0xfd, 0x12, 0xca, 0x5b, 0x42, |
| 675 | 0x20, 0xce, 0x21, 0x55, 0x87, 0x73, 0x56, 0x7f, 0x2f, 0x9a, 0x43, 0x79, | 675 | 0xcd, 0x79, 0x78, 0x9d, 0xbf, 0x72, 0x04, 0xba, 0x60, 0x01, 0xf2, 0x3c, |
| 676 | 0x7e, 0xd6, 0xbf, 0x3b, 0x64, 0x60, 0x2e, 0x56, 0x81, 0xf1, 0x8b, 0xc9, | 676 | 0x09, 0x1d, 0x38, 0x14, 0xe6, 0xfe, 0x6c, 0xd1, 0xbe, 0xac, 0x4b, 0xbf, |
| 677 | 0x6f, 0x33, 0x67, 0x0b, 0xa0, 0xfb, 0x66, 0x75, 0xef, 0x88, 0x77, 0x37, | 677 | 0x3d, 0x34, 0x86, 0x3e, 0xac, 0xe3, 0xaf, 0xcb, 0x14, 0xf4, 0xff, 0x74, |
| 678 | 0x50, 0x2f, 0xe1, 0xe1, 0x4f, 0xe6, 0xe3, 0x58, 0xf3, 0x77, 0x75, 0x18, | 678 | 0x3d, 0xa5, 0xbe, 0x17, 0xc9, 0x26, 0x78, 0x07, 0x8c, 0xe5, 0x63, 0x18, |
| 679 | 0xe9, 0xff, 0x7e, 0x53, 0xb6, 0x9f, 0xf8, 0x66, 0x13, 0xcf, 0x21, 0x81, | 679 | 0xff, 0x75, 0xe0, 0xe1, 0xcd, 0xa0, 0xa7, 0xa5, 0x79, 0xf5, 0x2b, 0x3a, |
| 680 | 0x9b, 0x29, 0x67, 0xdf, 0x81, 0x9c, 0x35, 0xaa, 0x73, 0x9f, 0x62, 0x89, | 680 | 0x16, 0x15, 0x63, 0x2c, 0x1e, 0x7a, 0xb3, 0x14, 0x60, 0xcd, 0xf8, 0x34, |
| 681 | 0xf1, 0x5c, 0x1e, 0xf2, 0xc3, 0xfb, 0x7b, 0x8c, 0xfb, 0xf2, 0x7a, 0x3f, | 681 | 0xd2, 0xcd, 0x2d, 0x81, 0xbc, 0x4e, 0x6e, 0xd5, 0x77, 0x2f, 0x50, 0xfe, |
| 682 | 0x96, 0x74, 0x12, 0xd3, 0xfb, 0xf1, 0x01, 0xfb, 0x5c, 0xef, 0x9e, 0xb2, | 682 | 0x98, 0x8a, 0x41, 0x06, 0x6b, 0x72, 0xb4, 0xaf, 0x12, 0x85, 0xcc, 0x71, |
| 683 | 0x1f, 0xb3, 0x51, 0xde, 0xe2, 0x8a, 0xe6, 0xa1, 0x35, 0xf1, 0xca, 0x21, | 683 | 0x5d, 0xf7, 0xa2, 0x1e, 0x65, 0xad, 0x4f, 0x9f, 0xcd, 0xb6, 0x28, 0xfd, |
| 684 | 0xd8, 0x82, 0x79, 0xc8, 0xf3, 0x5e, 0xd8, 0xc0, 0xc1, 0x20, 0xf5, 0x33, | 684 | 0x98, 0x87, 0x2c, 0x15, 0x94, 0x1f, 0x01, 0x7c, 0xef, 0xb1, 0xdd, 0xaf, |
| 685 | 0xaa, 0x63, 0x59, 0x9b, 0x71, 0x7b, 0x60, 0x14, 0x7d, 0x18, 0xd3, 0xaf, | 685 | 0x6f, 0xe5, 0xd9, 0x67, 0x93, 0xab, 0x7c, 0x8b, 0xce, 0xb0, 0x98, 0xb2, |
| 686 | 0xc9, 0x04, 0xec, 0xff, 0x64, 0x35, 0xa9, 0xbe, 0xe9, 0xc9, 0xc4, 0x79, | 686 | 0x8f, 0xa0, 0x8c, 0x72, 0x76, 0x03, 0x78, 0xc3, 0xb2, 0x1c, 0xf2, 0x1c, |
| 687 | 0x9f, 0x8c, 0xe5, 0x5f, 0x83, 0xbc, 0xbe, 0x06, 0x3c, 0xbc, 0x01, 0xfc, | 687 | 0xeb, 0x46, 0x3d, 0x0e, 0xc7, 0xb8, 0xb4, 0x79, 0xed, 0x9c, 0xb8, 0x96, |
| 688 | 0x34, 0xf4, 0x5a, 0xfd, 0x96, 0xde, 0x8b, 0x8a, 0x70, 0x2f, 0x1e, 0x76, | 688 | 0xce, 0x75, 0x77, 0xe7, 0x59, 0x76, 0x83, 0x2e, 0x8b, 0xe8, 0xf5, 0xfd, |
| 689 | 0xb3, 0xe8, 0x61, 0xcd, 0xd8, 0x24, 0xd2, 0x7f, 0x1e, 0xf5, 0xe4, 0xf5, | 689 | 0xa9, 0xfe, 0xb6, 0xc1, 0x39, 0x9a, 0x5d, 0xc1, 0xc6, 0x9c, 0x5f, 0x4c, |
| 690 | 0xdf, 0x6a, 0x79, 0x6b, 0x42, 0xf9, 0x63, 0x6a, 0x0f, 0xd2, 0x9b, 0x93, | 690 | 0xb5, 0xcb, 0xda, 0x81, 0xec, 0x1c, 0x01, 0x3f, 0x22, 0x99, 0xaf, 0xf1, |
| 691 | 0xa5, 0x63, 0x95, 0x30, 0x64, 0x8e, 0xf3, 0xfa, 0x53, 0xd4, 0xa3, 0xac, | 691 | 0x4c, 0x19, 0xf4, 0x35, 0x7b, 0x22, 0xa1, 0xfc, 0xce, 0xa4, 0x15, 0xdc, |
| 692 | 0xf5, 0xe8, 0xb3, 0xd9, 0xa8, 0xb2, 0x8f, 0x39, 0xc8, 0x52, 0x5e, 0xc5, | 692 | 0x5d, 0xba, 0x58, 0x6e, 0xf4, 0x19, 0xcc, 0xfd, 0x6f, 0x57, 0xc6, 0x56, |
| 693 | 0x11, 0xc0, 0xf7, 0x0e, 0xdb, 0x3d, 0xb7, 0x89, 0x67, 0x9f, 0x0d, 0xb6, | 693 | 0x78, 0x45, 0xbe, 0x91, 0x5f, 0xef, 0xc6, 0x2b, 0xf2, 0x91, 0xfc, 0x2a, |
| 694 | 0x8a, 0x2d, 0xda, 0x83, 0xe2, 0x97, 0xdd, 0x89, 0x32, 0xca, 0xd9, 0x8d, | 694 | 0x48, 0x69, 0x96, 0x7c, 0xa2, 0xbc, 0x8c, 0x29, 0x79, 0x29, 0x55, 0x0c, |
| 695 | 0x58, 0x1b, 0x96, 0x65, 0x91, 0xe7, 0x58, 0x37, 0xe9, 0x71, 0x38, 0x46, | 695 | 0x4e, 0xa6, 0x2e, 0xe1, 0x37, 0x0f, 0x1b, 0x9d, 0xd7, 0x9b, 0xbb, 0x61, |
| 696 | 0x77, 0xf3, 0x6a, 0x9a, 0x38, 0x97, 0xf6, 0x35, 0xdf, 0x35, 0xb0, 0xec, | 696 | 0xbf, 0x44, 0xfa, 0x85, 0x86, 0xe1, 0x1e, 0x2d, 0xcc, 0x2a, 0x9d, 0x02, |
| 697 | 0x46, 0x5d, 0x16, 0xd2, 0xf3, 0x1b, 0xd2, 0xdf, 0xd2, 0x5a, 0x87, 0x33, | 697 | 0xbb, 0x98, 0x50, 0xba, 0xa2, 0x30, 0xce, 0xfc, 0xd2, 0x56, 0x7e, 0x9b, |
| 698 | 0x2b, 0xd8, 0x98, 0xf4, 0x45, 0x54, 0xbb, 0x8c, 0xe9, 0xc9, 0xce, 0x21, | 698 | 0x8b, 0x79, 0xa0, 0xbc, 0x53, 0xf3, 0xf5, 0x06, 0x75, 0xbf, 0x89, 0x7b, |
| 699 | 0xac, 0x47, 0x28, 0x1d, 0xe4, 0x99, 0x2c, 0xf8, 0xeb, 0xeb, 0x44, 0x5c, | 699 | 0xb0, 0x54, 0xa9, 0xab, 0xf7, 0x67, 0xe7, 0x9a, 0x54, 0xfd, 0xb3, 0x73, |
| 700 | 0xc5, 0x9d, 0x09, 0xc3, 0xbb, 0xbb, 0x74, 0xee, 0x9a, 0xfb, 0xd9, 0xde, | 700 | 0xeb, 0xef, 0x28, 0xb1, 0xec, 0x66, 0xc6, 0x55, 0x64, 0x71, 0xa6, 0x49, |
| 701 | 0x5d, 0xf7, 0xa1, 0x9e, 0x26, 0x99, 0x9f, 0x89, 0xe8, 0x7b, 0x93, 0x71, | 701 | 0x96, 0xe6, 0xfe, 0x90, 0x7e, 0x22, 0x8c, 0xc1, 0xca, 0xf7, 0x1d, 0xfa, |
| 702 | 0xa5, 0xb3, 0xf9, 0x31, 0xe6, 0xff, 0xc7, 0x26, 0x7e, 0xc7, 0x6c, 0xd8, | 702 | 0x5b, 0x2c, 0x5f, 0x86, 0x21, 0x37, 0x0b, 0x83, 0xd3, 0x52, 0x1d, 0xa4, |
| 703 | 0x2c, 0x6f, 0xd7, 0xfc, 0xbd, 0x51, 0xdd, 0x33, 0xa2, 0x2e, 0x14, 0xe7, | 703 | 0x1f, 0xa4, 0xee, 0x0e, 0x62, 0xbd, 0x4d, 0xc0, 0xc0, 0xc0, 0x85, 0x2e, |
| 704 | 0xde, 0x50, 0xef, 0x4f, 0xcf, 0x36, 0xa8, 0xfa, 0xa7, 0x67, 0xd7, 0xde, | 704 | 0xe3, 0xcf, 0x5b, 0xb4, 0x3e, 0x79, 0xb0, 0x75, 0x25, 0x2e, 0x1d, 0x2f, |
| 705 | 0x15, 0x62, 0xd9, 0xdb, 0xb8, 0xbf, 0x21, 0x0b, 0x53, 0x0d, 0xb2, 0x38, | 705 | 0xfa, 0x55, 0xd7, 0x7c, 0x33, 0xc3, 0x3e, 0xf9, 0xdd, 0x0c, 0x79, 0x66, |
| 706 | 0x1b, 0x60, 0xbc, 0x96, 0x6e, 0xac, 0x7d, 0x0b, 0xa3, 0xbf, 0x5b, 0x73, | 706 | 0xa1, 0x3d, 0xef, 0x64, 0x76, 0x33, 0xae, 0xad, 0xf9, 0x1c, 0x46, 0x7d, |
| 707 | 0x65, 0x08, 0xeb, 0x37, 0x3f, 0x30, 0x29, 0xe5, 0x01, 0xc6, 0x23, 0xea, | 707 | 0xa6, 0xbf, 0xa7, 0xf3, 0x73, 0x3a, 0xfd, 0xac, 0xec, 0x3f, 0xf9, 0x19, |
| 708 | 0x3e, 0x20, 0x64, 0xa4, 0x01, 0x58, 0xb4, 0xe0, 0x96, 0x6d, 0xee, 0x03, | 708 | 0xcc, 0x7b, 0x53, 0x70, 0xef, 0x4a, 0x1a, 0xbf, 0x9b, 0x88, 0xe8, 0x6f, |
| 709 | 0xb7, 0x68, 0xbd, 0x7e, 0x45, 0xc7, 0x7c, 0xe4, 0x91, 0x21, 0xb9, 0xbe, | 709 | 0x34, 0x3e, 0x8b, 0x32, 0xc6, 0xe2, 0x3e, 0xab, 0xd6, 0xc4, 0xbb, 0x7d, |
| 710 | 0x09, 0x45, 0x57, 0x59, 0xf1, 0xca, 0xff, 0xd6, 0x88, 0xfd, 0xf3, 0x7b, | 710 | 0x45, 0xf9, 0x79, 0x77, 0x54, 0x8c, 0x3f, 0xc8, 0xfb, 0x53, 0x2d, 0xba, |
| 711 | 0xa3, 0xa0, 0xc6, 0xb2, 0xfb, 0x35, 0xcf, 0xff, 0x4a, 0xa7, 0x8f, 0xca, | 711 | 0xbf, 0x3d, 0x5a, 0x96, 0xc6, 0x65, 0x3f, 0xec, 0x5d, 0x01, 0xb8, 0x98, |
| 712 | 0x9e, 0x63, 0xbf, 0x0f, 0x5a, 0x9b, 0xbc, 0x3b, 0x4f, 0x52, 0xff, 0x3d, | 712 | 0x77, 0xce, 0x26, 0xc2, 0x8d, 0x63, 0x9a, 0xfd, 0x14, 0xc4, 0x1a, 0xcc, |
| 713 | 0x49, 0x48, 0x7d, 0xcf, 0x12, 0xb2, 0x1f, 0x45, 0x19, 0xf7, 0xc1, 0x1e, | 713 | 0xdd, 0x87, 0xb0, 0xf2, 0x89, 0x56, 0xe2, 0x16, 0xba, 0x7c, 0x5c, 0x0e, |
| 714 | 0x55, 0xf3, 0xe0, 0xbd, 0xba, 0x82, 0xfc, 0xaa, 0xfb, 0x21, 0x7e, 0x2c, | 714 | 0x94, 0x55, 0xfc, 0x42, 0x9d, 0x59, 0x4e, 0x43, 0x2f, 0x0c, 0x29, 0x9b, |
| 715 | 0xc6, 0xbb, 0x4b, 0x51, 0xdd, 0xdf, 0x0e, 0xbd, 0x8e, 0x63, 0xb2, 0x07, | 715 | 0x16, 0x0b, 0x0d, 0xd7, 0x32, 0x52, 0x38, 0xbd, 0x17, 0xe3, 0x30, 0x16, |
| 716 | 0xbe, 0x26, 0x0f, 0x4c, 0xca, 0xfb, 0x5e, 0xe3, 0xc1, 0xfa, 0x31, 0x7d, | 716 | 0x98, 0xd5, 0x67, 0x83, 0xfb, 0x64, 0x7f, 0x3d, 0x18, 0x7b, 0xb2, 0xcc, |
| 717 | 0x59, 0xf6, 0xe2, 0x7c, 0xff, 0xde, 0x41, 0x50, 0xc5, 0x23, 0x2b, 0x7b, | 717 | 0xf7, 0x29, 0xe0, 0x04, 0xbe, 0xcf, 0x27, 0xc2, 0xea, 0x74, 0xe3, 0x56, |
| 718 | 0x06, 0xba, 0x7c, 0x4c, 0xf6, 0x95, 0xd4, 0xde, 0x81, 0x3a, 0x2f, 0x9c, | 718 | 0xb4, 0x6d, 0xd2, 0x74, 0xe6, 0xbd, 0x6b, 0xb6, 0xa7, 0x0e, 0x00, 0xc0, |
| 719 | 0x84, 0x4e, 0x0e, 0x2a, 0x7f, 0x12, 0x09, 0x0c, 0x55, 0xd2, 0x92, 0x3f, | 719 | 0x69, 0xc9, 0xe3, 0x3d, 0xdb, 0x98, 0xfe, 0x26, 0x61, 0xb7, 0xe8, 0x9f, |
| 720 | 0xb9, 0x13, 0xe3, 0x70, 0x1f, 0x2e, 0xa3, 0xcf, 0xe5, 0x76, 0xcb, 0x9e, | 720 | 0x3f, 0x2a, 0xcb, 0x95, 0x69, 0xb9, 0x5c, 0x31, 0xb2, 0xce, 0xbb, 0xd7, |
| 721 | 0xaa, 0x37, 0xf6, 0xde, 0x12, 0xdf, 0x27, 0xe1, 0xa3, 0xf9, 0x3e, 0x17, | 721 | 0x9c, 0xfb, 0x5d, 0xc1, 0xb7, 0xbf, 0xe5, 0x2c, 0xf8, 0xb3, 0x96, 0x56, |
| 722 | 0x0f, 0xaa, 0x93, 0x85, 0x5b, 0xd1, 0xb6, 0x41, 0xf3, 0x96, 0xf7, 0xfc, | 722 | 0xf9, 0x35, 0xdf, 0xdb, 0xfc, 0x2b, 0x3b, 0xf8, 0xe6, 0x6d, 0xb7, 0xba, |
| 723 | 0xd9, 0x9e, 0xfa, 0xf7, 0x4f, 0x4c, 0x89, 0xe6, 0xf0, 0x9e, 0x6d, 0xfc, | 723 | 0xc3, 0xb5, 0x76, 0xcf, 0xb1, 0x9f, 0xfd, 0x36, 0xcf, 0x3a, 0x82, 0x7b, |
| 724 | 0xfe, 0xf6, 0xc2, 0x67, 0x30, 0x36, 0x7e, 0x44, 0x96, 0xe6, 0x26, 0x65, | 724 | 0x68, 0x9d, 0x0d, 0xef, 0xe3, 0xfa, 0xee, 0xd7, 0xa7, 0xec, 0x80, 0x8f, |
| 725 | 0x79, 0xce, 0x97, 0x33, 0xde, 0xb9, 0x26, 0xed, 0x77, 0xeb, 0x3b, 0xd7, | 725 | 0xa4, 0xe7, 0x98, 0x9e, 0xef, 0xad, 0xd8, 0xff, 0xec, 0xf3, 0x31, 0xcd, |
| 726 | 0x19, 0xac, 0xc3, 0x6a, 0x5e, 0xe5, 0x56, 0x7d, 0x8f, 0xf4, 0x75, 0xd3, | 726 | 0x37, 0xa4, 0x0b, 0x7c, 0xe6, 0xfe, 0x5a, 0xd6, 0xe7, 0xbf, 0xb6, 0x1e, |
| 727 | 0xfb, 0x26, 0x70, 0xbb, 0xba, 0x3f, 0xb5, 0x5a, 0xde, 0xd9, 0xcf, 0x57, | 727 | 0xa3, 0xf1, 0xee, 0x5d, 0x53, 0xc3, 0xb8, 0x6c, 0x4f, 0xfb, 0x64, 0xee, |
| 728 | 0x4c, 0x9e, 0x33, 0x78, 0x77, 0xc0, 0xda, 0xeb, 0xde, 0xc7, 0xf4, 0xbd, | 728 | 0x80, 0xb3, 0xec, 0xa4, 0xbe, 0xe3, 0x77, 0xb5, 0xa1, 0xcc, 0xdc, 0x45, |
| 729 | 0xab, 0xaf, 0xe9, 0xbb, 0xfa, 0xe4, 0xe7, 0xa8, 0xa6, 0xf7, 0x56, 0xe8, | 729 | 0x23, 0xbd, 0x18, 0xd3, 0x44, 0x5a, 0x1f, 0xd3, 0xcf, 0x63, 0x0d, 0xdf, |
| 730 | 0x1e, 0xfb, 0x7c, 0x4c, 0xaf, 0x1b, 0xd2, 0x79, 0x3e, 0xab, 0xbb, 0xa6, | 730 | 0xc8, 0x98, 0x3e, 0x23, 0xe8, 0xc3, 0xdc, 0x41, 0x6f, 0xbc, 0x53, 0xcc, |
| 731 | 0xfa, 0xec, 0xd5, 0xd4, 0x63, 0xd4, 0xdf, 0x7b, 0x6b, 0xa8, 0x1b, 0x97, | 731 | 0xef, 0x83, 0x28, 0x8b, 0x16, 0xbf, 0x61, 0xa6, 0x1f, 0x08, 0xec, 0xb6, |
| 732 | 0xed, 0xe9, 0x1b, 0xfc, 0x3b, 0xe0, 0x2c, 0x3b, 0xa6, 0xef, 0xd7, 0xf9, | 732 | 0x45, 0x26, 0xd5, 0x7c, 0x8a, 0xea, 0xbe, 0x06, 0xbf, 0x9b, 0x19, 0xb2, |
| 733 | 0x77, 0xbe, 0x59, 0xe6, 0xdf, 0x03, 0x23, 0xbf, 0xb8, 0x9f, 0x88, 0xb4, | 733 | 0x83, 0xfc, 0xe4, 0xc2, 0x7a, 0x39, 0x65, 0xf9, 0x33, 0xcd, 0xd2, 0x52, |
| 734 | 0x3a, 0xaa, 0x9f, 0x47, 0xeb, 0xbe, 0x1d, 0xf2, 0xfb, 0x0c, 0xa1, 0x8f, | 734 | 0xc4, 0x38, 0x7c, 0xbf, 0xd1, 0xf7, 0xf4, 0x51, 0xfd, 0x9d, 0x90, 0x87, |
| 735 | 0x3b, 0x83, 0xd7, 0xde, 0x11, 0xe7, 0xb7, 0x54, 0x94, 0x45, 0x83, 0xdf, | 735 | 0x36, 0x4f, 0x50, 0xde, 0x8b, 0xc5, 0x95, 0x7b, 0xa2, 0xc5, 0xe0, 0x1b, |
| 736 | 0x78, 0x33, 0x06, 0x03, 0x6e, 0xda, 0x28, 0x7b, 0x15, 0x3d, 0x05, 0x75, | 736 | 0x26, 0xcb, 0xdc, 0xd7, 0xe4, 0x37, 0xda, 0x22, 0x17, 0x6a, 0xfc, 0x3e, |
| 737 | 0x57, 0x22, 0xeb, 0x34, 0xc9, 0xa0, 0xe9, 0xe5, 0xf7, 0xce, 0xaf, 0x95, | 737 | 0x69, 0xb7, 0xba, 0x47, 0x13, 0x9c, 0x4d, 0x72, 0x5e, 0x3d, 0xca, 0x2e, |
| 738 | 0x53, 0x96, 0x6f, 0x8a, 0x48, 0x94, 0xdf, 0x70, 0xf1, 0xfd, 0x7a, 0xdf, | 738 | 0x54, 0x6b, 0x25, 0xd2, 0x54, 0xdb, 0xf6, 0xa8, 0xb6, 0xed, 0xa4, 0xf1, |
| 739 | 0x2e, 0x84, 0xf5, 0xf7, 0x53, 0x0e, 0xda, 0x7c, 0x9e, 0xf2, 0x5e, 0x28, | 739 | 0x08, 0x68, 0xfc, 0x25, 0xcd, 0x17, 0xb6, 0xcf, 0xaa, 0xfb, 0xdd, 0xd9, |
| 740 | 0xac, 0xdc, 0xd1, 0x2c, 0xa8, 0x3d, 0x52, 0x00, 0x73, 0x7d, 0x57, 0x92, | 740 | 0x38, 0xcf, 0xc7, 0x1e, 0x53, 0x6b, 0xa1, 0x9d, 0x40, 0xdb, 0x5f, 0x0e, |
| 741 | 0xdf, 0xb0, 0x8b, 0x3c, 0x5d, 0xe1, 0xb7, 0x5c, 0xdb, 0xd5, 0x1d, 0x16, | 741 | 0xab, 0x78, 0xa7, 0xfa, 0x06, 0x1c, 0xf2, 0xc9, 0x6f, 0xba, 0xa1, 0xe3, |
| 742 | 0xef, 0x5c, 0x90, 0x74, 0x75, 0x29, 0x9b, 0x5c, 0xae, 0x14, 0xc9, 0x53, | 742 | 0xcb, 0xfc, 0x76, 0x7b, 0x04, 0x29, 0xbf, 0xd9, 0xde, 0xab, 0xee, 0xff, |
| 743 | 0xed, 0x57, 0xc3, 0xda, 0xaf, 0x92, 0xc7, 0xc3, 0xe0, 0xf1, 0x5f, 0xeb, | 743 | 0x57, 0xd5, 0x37, 0x01, 0x46, 0x1e, 0xc3, 0x7a, 0xac, 0x6f, 0x62, 0x8c, |
| 744 | 0x75, 0x61, 0xfb, 0x8c, 0xba, 0x0b, 0x9e, 0x89, 0xf1, 0x6c, 0xea, 0x31, | 744 | 0x80, 0xef, 0x85, 0x32, 0xbf, 0xe5, 0x36, 0x77, 0x4c, 0x37, 0x2f, 0x73, |
| 745 | 0x35, 0x17, 0xda, 0x68, 0xb4, 0x7d, 0x47, 0x50, 0xe9, 0xae, 0xfa, 0x46, | 745 | 0x4f, 0x88, 0xf2, 0xf3, 0x83, 0x6f, 0xfb, 0xab, 0xea, 0x3b, 0x82, 0x24, |
| 746 | 0x1e, 0xf2, 0xc9, 0x6f, 0xde, 0x61, 0x5f, 0x4b, 0xfc, 0xb6, 0x7d, 0x58, | 746 | 0xbf, 0x2b, 0x84, 0xfd, 0xba, 0x1f, 0xcf, 0x3c, 0x57, 0xde, 0x87, 0x14, |
| 747 | 0x7d, 0x67, 0x52, 0xae, 0x70, 0x5d, 0xf9, 0x4d, 0xfb, 0x68, 0x9d, 0x3c, | 747 | 0xfa, 0xa7, 0x36, 0x81, 0xf4, 0x61, 0xc9, 0xab, 0xb8, 0x5f, 0x2b, 0xf2, |
| 748 | 0x06, 0xf5, 0x58, 0x9b, 0x5a, 0x25, 0xea, 0xad, 0x3b, 0xbf, 0x51, 0x29, | 748 | 0x93, 0x6a, 0xec, 0x52, 0xed, 0x13, 0xb2, 0xff, 0xf4, 0x43, 0xfc, 0x5e, |
| 749 | 0x57, 0xfc, 0xfb, 0x9d, 0x1b, 0x96, 0xa8, 0x13, 0xa2, 0x62, 0x6c, 0xef, | 749 | 0x42, 0x7d, 0x77, 0x9e, 0xf3, 0x38, 0xc7, 0xb8, 0x4c, 0xa9, 0x75, 0x17, |
| 750 | 0x3b, 0x9b, 0xb2, 0xfa, 0x6e, 0x25, 0xc1, 0xef, 0x2e, 0xe1, 0x3b, 0x76, | 750 | 0x35, 0xed, 0xcd, 0x59, 0xcc, 0xcf, 0xd4, 0xb7, 0x19, 0xc5, 0x5a, 0x2b, |
| 751 | 0xe1, 0x99, 0x67, 0xba, 0xbb, 0x91, 0xc2, 0xe6, 0x54, 0xc6, 0x91, 0x3e, | 751 | 0xe6, 0x18, 0xd2, 0xf7, 0x4c, 0xe9, 0x0f, 0x98, 0xf5, 0xb7, 0xf0, 0xee, |
| 752 | 0x2c, 0x39, 0xb5, 0xe7, 0xd6, 0x8c, 0xfc, 0x5e, 0x35, 0x76, 0xb1, 0xf2, | 752 | 0xa2, 0xcf, 0xf3, 0xc3, 0xfd, 0x65, 0xde, 0x23, 0x4d, 0xe9, 0x38, 0x01, |
| 753 | 0x80, 0xec, 0x39, 0xf9, 0x10, 0xbf, 0xed, 0x51, 0xdf, 0xe5, 0x67, 0x1d, | 753 | 0x63, 0x87, 0x3c, 0x9f, 0xa0, 0x8c, 0x3b, 0xe9, 0x09, 0x58, 0xa0, 0xa8, |
| 754 | 0xd2, 0x18, 0x93, 0x09, 0x35, 0xef, 0x42, 0xed, 0x9b, 0x11, 0xc5, 0xfb, | 754 | 0x24, 0x78, 0xb6, 0xad, 0xd7, 0xd2, 0xda, 0xb0, 0x16, 0xde, 0x9d, 0x0d, |
| 755 | 0x5c, 0x2b, 0xd7, 0xb4, 0x50, 0x69, 0x06, 0x8d, 0x01, 0x7d, 0xc7, 0x93, | 755 | 0xd6, 0xc3, 0xef, 0x21, 0x0a, 0xe5, 0xc6, 0x6f, 0x2a, 0xd4, 0x37, 0xd0, |
| 756 | 0x58, 0xdc, 0x9f, 0x7f, 0x94, 0xf7, 0x06, 0x5d, 0x9e, 0xdd, 0xed, 0x29, | 756 | 0xfc, 0x76, 0x46, 0x26, 0x6a, 0x9f, 0x94, 0x07, 0xca, 0x5b, 0xf4, 0xf7, |
| 757 | 0xf1, 0x0e, 0x67, 0x52, 0xc7, 0xe8, 0xdc, 0xb7, 0xe3, 0xd9, 0x00, 0x65, | 757 | 0x14, 0x31, 0x79, 0xa0, 0xf6, 0xba, 0xa2, 0x69, 0x41, 0x7d, 0xd7, 0x11, |
| 758 | 0xdc, 0x4a, 0x8d, 0xc3, 0xfa, 0x87, 0x25, 0xce, 0x73, 0x65, 0x3d, 0x97, | 758 | 0xd5, 0x3c, 0x33, 0xdf, 0x54, 0x04, 0xfd, 0x1d, 0xa8, 0x39, 0x0d, 0xdf, |
| 759 | 0xe6, 0xba, 0xb9, 0xf0, 0xde, 0xaa, 0x37, 0x1f, 0x7e, 0x0b, 0x93, 0x2f, | 759 | 0x2f, 0x44, 0x65, 0x62, 0xe1, 0x47, 0x91, 0x8d, 0xbf, 0x61, 0x78, 0x54, |
| 760 | 0xd5, 0x7f, 0xc7, 0xa3, 0xbe, 0x11, 0x57, 0xdf, 0xcd, 0x8c, 0x57, 0x3e, | 760 | 0x72, 0xa7, 0x69, 0xa3, 0xa7, 0xe5, 0xf1, 0x8a, 0xef, 0xdf, 0xe9, 0x11, |
| 761 | 0x21, 0x1f, 0x2b, 0x6d, 0xd4, 0xdf, 0xf0, 0x44, 0xe4, 0x63, 0x95, 0xd7, | 761 | 0x5b, 0x6e, 0x96, 0xcb, 0xf1, 0xb1, 0x3d, 0x6f, 0xb8, 0x1d, 0xa1, 0xea, |
| 762 | 0x14, 0x4f, 0xf3, 0xea, 0xfb, 0xa3, 0xb0, 0x5e, 0xb3, 0x98, 0xea, 0xa3, | 762 | 0x6c, 0x33, 0x74, 0x2f, 0xf1, 0x8c, 0xb4, 0x30, 0xbf, 0x30, 0xcb, 0x7d, |
| 763 | 0xf6, 0x1d, 0x92, 0x55, 0xf7, 0x4d, 0x4a, 0x58, 0xc6, 0xe7, 0x7f, 0xd9, | 763 | 0x1a, 0xc1, 0x1a, 0x1d, 0xfb, 0x9a, 0xdc, 0xde, 0xce, 0xb8, 0xdb, 0x9d, |
| 764 | 0xb7, 0x48, 0x8f, 0x08, 0xbf, 0x47, 0xb9, 0xe4, 0x4c, 0xca, 0xe3, 0x73, | 764 | 0xf0, 0x65, 0x7f, 0xdb, 0x0b, 0xf4, 0xf5, 0xe7, 0x16, 0xf7, 0xca, 0xe7, |
| 765 | 0xae, 0x7b, 0x97, 0x43, 0x5c, 0xb7, 0x41, 0x96, 0x63, 0xa3, 0x3b, 0xbe, | 765 | 0x6a, 0xb1, 0x50, 0x75, 0x86, 0xf7, 0x0d, 0x9d, 0x91, 0x8a, 0xa4, 0x50, |
| 766 | 0x67, 0xb7, 0x05, 0xca, 0x33, 0x8d, 0xb0, 0xd7, 0xc4, 0x12, 0x12, 0x65, | 766 | 0x8f, 0xfd, 0x43, 0x5e, 0x12, 0xd7, 0xc9, 0xb3, 0x27, 0x7f, 0xea, 0x5f, |
| 767 | 0x7e, 0x7e, 0x86, 0x7a, 0x1a, 0xc2, 0x1c, 0x2d, 0xf3, 0xaa, 0x7c, 0xa6, | 767 | 0x73, 0xf1, 0x1e, 0xba, 0xe6, 0xb2, 0x67, 0x62, 0x8b, 0x63, 0xf0, 0x5d, |
| 768 | 0x95, 0x7b, 0x5e, 0x77, 0x21, 0x8e, 0xfc, 0xb8, 0xe3, 0xd9, 0xe5, 0xcf, | 768 | 0x59, 0xef, 0x3a, 0xc8, 0x01, 0xb0, 0x03, 0xf6, 0x1c, 0xfd, 0xdc, 0x6b, |
| 769 | 0x2d, 0xec, 0x94, 0xcf, 0x55, 0x22, 0x81, 0xf2, 0x14, 0xef, 0xfa, 0x59, | 769 | 0x5a, 0x6f, 0x59, 0xc7, 0x6e, 0x92, 0x6b, 0x2b, 0xf7, 0x95, 0x5f, 0x83, |
| 770 | 0xc3, 0x73, 0x92, 0x44, 0x3d, 0xf6, 0x0f, 0x79, 0x89, 0x6f, 0x96, 0xa7, | 770 | 0x6c, 0x27, 0x03, 0xfa, 0xab, 0x58, 0xfc, 0x21, 0x09, 0x7f, 0x1e, 0x36, |
| 771 | 0x8e, 0xfd, 0xc2, 0xbd, 0x6a, 0xe3, 0x3d, 0x6c, 0xcd, 0xb2, 0xe3, 0xef, | 771 | 0xe5, 0xf3, 0x4d, 0x4a, 0xb7, 0xd3, 0xb6, 0xc1, 0x07, 0x82, 0x9f, 0x13, |
| 772 | 0xeb, 0x21, 0x86, 0x3f, 0xc2, 0x7a, 0x9b, 0x21, 0x07, 0xf0, 0xdb, 0xd0, | 772 | 0x41, 0x3f, 0xa9, 0xf6, 0x40, 0x66, 0xa7, 0x45, 0xbe, 0xb0, 0x49, 0xb2, |
| 773 | 0x39, 0xc6, 0x98, 0x57, 0xb5, 0xdd, 0x32, 0x8e, 0xdc, 0x2c, 0x57, 0x57, | 773 | 0xed, 0xf4, 0xa3, 0xe5, 0xe7, 0xe8, 0xaf, 0xc6, 0x7d, 0x96, 0x96, 0x3f, |
| 774 | 0xee, 0x0a, 0x5f, 0x86, 0x6c, 0x27, 0x3c, 0xfe, 0xab, 0x7d, 0xf0, 0x03, | 774 | 0xe2, 0x1e, 0xaf, 0x73, 0x2d, 0xa9, 0xc4, 0x9f, 0xc9, 0xa7, 0x65, 0x22, |
| 775 | 0x12, 0xfc, 0x22, 0xfc, 0xc4, 0x17, 0x1b, 0x94, 0x6d, 0xa7, 0x3f, 0x43, | 775 | 0xc1, 0xb5, 0x3c, 0x2a, 0xc5, 0xca, 0x63, 0xf8, 0x71, 0x9d, 0x9c, 0xf7, |
| 776 | 0xfc, 0x81, 0x18, 0x23, 0x84, 0x7e, 0x1e, 0x6c, 0xf5, 0x64, 0x76, 0x52, | 776 | 0xc7, 0xf4, 0x5d, 0x86, 0x31, 0x29, 0xcd, 0x64, 0x64, 0x6a, 0x6e, 0x92, |
| 777 | 0xe4, 0xcb, 0x4d, 0x92, 0x69, 0x65, 0x0c, 0x2b, 0xbf, 0xc2, 0x7e, 0xd5, | 777 | 0xdf, 0xa0, 0x8e, 0xdc, 0xa9, 0xce, 0xf8, 0x9c, 0x44, 0x2a, 0xb4, 0x2d, |
| 778 | 0xeb, 0x59, 0x4a, 0xbe, 0x42, 0x1d, 0xaf, 0x72, 0x2e, 0xc9, 0xf8, 0x8f, | 778 | 0x39, 0xc5, 0xbb, 0x1b, 0x6a, 0x3d, 0x93, 0x58, 0xcf, 0xe3, 0xed, 0xbc, |
| 779 | 0xe5, 0x93, 0x32, 0x1e, 0xe7, 0x5c, 0x1e, 0x91, 0xc2, 0xdc, 0x63, 0xf8, | 779 | 0xb3, 0x7e, 0x0d, 0xfa, 0xd7, 0x3a, 0x45, 0x39, 0x74, 0xec, 0xee, 0x10, |
| 780 | 0x71, 0x9e, 0xa4, 0xfb, 0x1f, 0xe8, 0x7b, 0x04, 0xa3, 0x52, 0x9c, 0x4a, | 780 | 0xf3, 0xfb, 0xe0, 0xbf, 0xb3, 0x6c, 0x9f, 0x84, 0x8f, 0xad, 0xe8, 0x79, |
| 781 | 0xcb, 0xc4, 0xec, 0x5e, 0x7e, 0xa3, 0x3b, 0x7c, 0x97, 0x3a, 0x5f, 0xb3, | 781 | 0x94, 0xeb, 0xb3, 0x66, 0xd5, 0xfe, 0x14, 0xda, 0xa2, 0xde, 0x31, 0xd3, |
| 782 | 0xe2, 0xc9, 0x40, 0x6f, 0x62, 0x82, 0xf7, 0x26, 0xd4, 0x7c, 0xf6, 0x62, | 782 | 0xd6, 0xd4, 0x61, 0x5b, 0xae, 0x73, 0xaf, 0x34, 0x9f, 0x33, 0xf3, 0x82, |
| 783 | 0x3e, 0xdf, 0x6a, 0xe5, 0xdd, 0xf3, 0xab, 0xb0, 0xbf, 0xc6, 0x71, 0xca, | 783 | 0x1c, 0x26, 0x1a, 0xe9, 0xdd, 0xb2, 0x8e, 0xde, 0x11, 0x62, 0x5e, 0xd0, |
| 784 | 0xa1, 0x65, 0x76, 0x06, 0x98, 0xdf, 0x8d, 0xd8, 0x99, 0x65, 0xbb, 0x25, | 784 | 0x8b, 0x34, 0x0e, 0x6b, 0x1a, 0x7f, 0x05, 0xfd, 0x1b, 0x1e, 0xdc, 0x89, |
| 785 | 0x78, 0x64, 0xc5, 0xce, 0xa3, 0x5c, 0x9f, 0xf3, 0xaa, 0xf6, 0xff, 0x11, | 785 | 0x32, 0x5b, 0x7f, 0x93, 0xf4, 0x7e, 0xe8, 0x4e, 0x9a, 0xb3, 0x3e, 0xe9, |
| 786 | 0x6d, 0x51, 0xef, 0x88, 0xdf, 0xd6, 0xaf, 0xc3, 0xb6, 0x9c, 0xe7, 0x4e, | 786 | 0x4e, 0xd9, 0xe2, 0x7c, 0x36, 0xa2, 0xf9, 0xeb, 0x9a, 0x2f, 0xfb, 0x40, |
| 787 | 0xc4, 0xec, 0x3e, 0x5d, 0x90, 0xc3, 0x78, 0x3d, 0xbf, 0xa3, 0x6b, 0xf8, | 787 | 0x2f, 0xde, 0x2b, 0xdd, 0xa6, 0xbe, 0x2f, 0xc8, 0x8e, 0xef, 0x83, 0xec, |
| 788 | 0x1d, 0x22, 0xde, 0x04, 0xbf, 0xc8, 0xe3, 0xa0, 0xe6, 0xf1, 0x9b, 0xe8, | 788 | 0x98, 0x75, 0x6d, 0x83, 0x8c, 0xf1, 0xdc, 0x84, 0xf5, 0x1b, 0x69, 0x12, |
| 789 | 0xdf, 0x5f, 0x83, 0xbb, 0x50, 0x66, 0xea, 0x6f, 0x03, 0xdf, 0x0a, 0xdf, | 789 | 0xd8, 0xbd, 0x30, 0x63, 0x1f, 0x2e, 0xd7, 0x0a, 0x5c, 0xfa, 0x05, 0xda, |
| 790 | 0xc9, 0x73, 0xd6, 0x7f, 0xb0, 0xd5, 0x93, 0x35, 0xd2, 0xb3, 0x1e, 0xcf, | 790 | 0x28, 0x7e, 0x63, 0x7d, 0xb3, 0xb6, 0x51, 0x3f, 0x8f, 0xc7, 0x3f, 0x6a, |
| 791 | 0x3b, 0xdb, 0xbc, 0x75, 0xd9, 0x0d, 0x7e, 0xf1, 0x4e, 0x67, 0xaf, 0xfa, | 791 | 0x0f, 0x6c, 0x94, 0x0d, 0x9a, 0xb4, 0xe9, 0x36, 0xfb, 0x80, 0x91, 0x19, |
| 792 | 0x4e, 0x20, 0x33, 0xb6, 0x1b, 0xb2, 0xe3, 0xcf, 0xab, 0x17, 0x32, 0xc6, | 792 | 0x0f, 0x4e, 0x25, 0x1e, 0x14, 0x33, 0x8e, 0xbf, 0x9b, 0x7e, 0xef, 0xd0, |
| 793 | 0x33, 0x0b, 0xd6, 0xaf, 0xe7, 0x89, 0xe7, 0xf7, 0x82, 0xdc, 0x77, 0xb0, | 793 | 0xc0, 0x36, 0xa0, 0x16, 0x75, 0x67, 0x27, 0xc1, 0x3b, 0x40, 0xa9, 0xd0, |
| 794 | 0x39, 0x57, 0x60, 0xc2, 0x2f, 0xab, 0xef, 0x82, 0x60, 0x27, 0xdf, 0xb6, | 794 | 0x3e, 0x75, 0x7f, 0x63, 0xed, 0xf7, 0x23, 0x69, 0x79, 0x76, 0x55, 0x56, |
| 795 | 0xf2, 0x5d, 0xd0, 0xf5, 0xd7, 0x78, 0xa0, 0xcd, 0xf3, 0x51, 0x26, 0x78, | 795 | 0x46, 0x7e, 0x28, 0x8e, 0x24, 0x6f, 0xa4, 0xac, 0xb0, 0xdf, 0x49, 0xae, |
| 796 | 0xd2, 0xa2, 0xdb, 0xec, 0x06, 0x3e, 0xe5, 0x5e, 0x6c, 0x32, 0xfe, 0xa0, | 796 | 0x33, 0xf1, 0x90, 0x5a, 0xa7, 0x0d, 0x3f, 0x92, 0x77, 0x2d, 0xec, 0x50, |
| 797 | 0xf8, 0xe3, 0xb8, 0xdb, 0x19, 0x73, 0x0e, 0xf6, 0xf7, 0x22, 0xbe, 0x56, | 797 | 0x75, 0x8e, 0x7c, 0x47, 0xba, 0xc8, 0x67, 0x73, 0xde, 0xab, 0xf4, 0x0a, |
| 798 | 0xf7, 0x65, 0xe2, 0xbc, 0x7f, 0x93, 0x0c, 0xec, 0x56, 0x77, 0x27, 0x2e, | 798 | 0xc6, 0x65, 0x19, 0x75, 0x23, 0xdf, 0x67, 0xf4, 0x79, 0x70, 0x7b, 0x07, |
| 799 | 0xac, 0xfa, 0xb6, 0x2b, 0x25, 0x4f, 0xd5, 0x64, 0x65, 0xf8, 0x27, 0x62, | 799 | 0xef, 0x24, 0x14, 0x50, 0x56, 0x59, 0xdc, 0x78, 0x6e, 0xbf, 0xad, 0xe4, |
| 800 | 0x49, 0xe2, 0x26, 0xca, 0x0a, 0xfb, 0xdd, 0xcb, 0x79, 0xc6, 0x1f, 0x52, | 800 | 0xe0, 0x51, 0xd0, 0xfd, 0x9f, 0xa1, 0xee, 0x63, 0x48, 0xb9, 0xc6, 0xcc, |
| 801 | 0xf3, 0x34, 0x11, 0xc3, 0xf1, 0x9e, 0x83, 0x19, 0x28, 0xcf, 0x72, 0xdd, | 801 | 0x0a, 0xdf, 0x49, 0xef, 0x8f, 0xca, 0x20, 0xe4, 0x82, 0xf9, 0x47, 0x81, |
| 802 | 0x91, 0x2e, 0xf0, 0xd9, 0x3f, 0x6b, 0x55, 0x76, 0x05, 0xe3, 0xb2, 0x8c, | 802 | 0x37, 0x69, 0x4f, 0x91, 0x56, 0xf8, 0x4c, 0x5d, 0xef, 0x6a, 0x7b, 0xca, |
| 803 | 0xb6, 0x91, 0xef, 0xd3, 0xfa, 0x2c, 0xf6, 0xc3, 0x6d, 0xbc, 0x0f, 0x90, | 803 | 0xb9, 0xec, 0xc3, 0x5c, 0xd4, 0x3a, 0xb5, 0x3c, 0xdd, 0xaf, 0xdb, 0x8d, |
| 804 | 0x47, 0xd9, 0xdc, 0xc2, 0xfa, 0xb4, 0x7d, 0x5c, 0xc9, 0xc1, 0x23, 0xe0, | 804 | 0xaf, 0xd0, 0xea, 0xa1, 0x77, 0xe0, 0x8d, 0xe8, 0x0a, 0xde, 0x08, 0xc6, |
| 805 | 0xfb, 0x1f, 0xa3, 0xee, 0x63, 0x48, 0x39, 0xc7, 0xf4, 0xca, 0xba, 0x93, | 805 | 0xca, 0x76, 0x18, 0xac, 0x11, 0xac, 0x21, 0xc0, 0x1a, 0x81, 0x9c, 0x4f, |
| 806 | 0xdf, 0x1f, 0x90, 0x01, 0xc8, 0x05, 0xf3, 0x8f, 0x48, 0x51, 0xdd, 0x63, | 806 | 0x4a, 0x04, 0x72, 0x1c, 0x5e, 0x95, 0x63, 0xe0, 0x9e, 0x60, 0xcf, 0x4c, |
| 807 | 0x42, 0x3a, 0xc7, 0x67, 0xda, 0x7a, 0x5b, 0xfb, 0x53, 0xd2, 0xb2, 0x5b, | 807 | 0xf1, 0x1c, 0x53, 0xd1, 0x99, 0x72, 0x48, 0xf9, 0x25, 0x1f, 0x1b, 0x79, |
| 808 | 0x7f, 0x4f, 0xe6, 0xcb, 0xd3, 0x2e, 0xdd, 0x6e, 0x6c, 0x85, 0x57, 0x0f, | 808 | 0x7d, 0xfb, 0xbb, 0xf0, 0xba, 0xd4, 0x61, 0xf0, 0xc3, 0x3f, 0x6c, 0x1f, |
| 809 | 0x5d, 0x83, 0x37, 0xc2, 0x2b, 0x78, 0xc3, 0x1b, 0xeb, 0xf1, 0x36, 0x1f, | 809 | 0x3c, 0xd2, 0xb1, 0xba, 0x0f, 0x6e, 0xfa, 0x05, 0xed, 0x83, 0xf5, 0x72, |
| 810 | 0x6b, 0x78, 0x73, 0xf0, 0xb0, 0x86, 0x27, 0xe7, 0x7b, 0x25, 0x04, 0x39, | 810 | 0xd9, 0x28, 0x53, 0x36, 0xe4, 0x89, 0xfc, 0xa2, 0x3c, 0x51, 0x8e, 0x48, |
| 811 | 0x0e, 0xd6, 0xe4, 0x18, 0xb8, 0xc7, 0xd3, 0x99, 0x09, 0x9e, 0x21, 0x2a, | 811 | 0x4b, 0xea, 0xd3, 0x66, 0xfa, 0x6f, 0x89, 0xab, 0xea, 0xdb, 0x91, 0x69, |
| 812 | 0x3e, 0x53, 0x0e, 0x29, 0xbf, 0x5c, 0xc7, 0xfa, 0xb5, 0x7e, 0xcf, 0x2f, | 812 | 0xe8, 0xa0, 0x8e, 0x50, 0xa5, 0x12, 0x97, 0xd2, 0xe2, 0x4f, 0x94, 0x4c, |
| 813 | 0x59, 0xeb, 0x97, 0xdb, 0x7c, 0xfc, 0xf0, 0x77, 0xd3, 0x83, 0x0b, 0x6d, | 813 | 0x3f, 0x5b, 0xa7, 0x5e, 0x7a, 0xaf, 0xb5, 0xaf, 0xd5, 0xb9, 0x85, 0x75, |
| 814 | 0x35, 0x3d, 0xb8, 0xf9, 0x37, 0xa4, 0x07, 0x6b, 0xe5, 0xb2, 0x5e, 0xa6, | 814 | 0x3a, 0xb7, 0xb0, 0xa2, 0x73, 0xdb, 0xb5, 0xcf, 0xf6, 0x0f, 0xd1, 0xb9, |
| 815 | 0x4c, 0xc8, 0x13, 0xd7, 0x8b, 0xf2, 0x44, 0x39, 0x22, 0x2f, 0x69, 0x4f, | 815 | 0xf1, 0x86, 0xb3, 0x21, 0x73, 0x2e, 0x24, 0xa1, 0x5c, 0x5f, 0x8b, 0xec, |
| 816 | 0x1b, 0x19, 0x3b, 0xc5, 0xaf, 0xa8, 0xef, 0x36, 0x26, 0x61, 0x83, 0xda, | 816 | 0x81, 0x1d, 0x19, 0x99, 0xd9, 0x2b, 0x7f, 0x30, 0x33, 0xad, 0xee, 0x49, |
| 817 | 0x02, 0x73, 0x73, 0x31, 0x29, 0x2e, 0xbc, 0x4f, 0xc9, 0xf4, 0x53, 0x55, | 817 | 0x7d, 0xd3, 0x4b, 0x25, 0x3e, 0x11, 0xf2, 0xe5, 0xa3, 0xf0, 0xb9, 0x27, |
| 818 | 0xda, 0xa5, 0xeb, 0xcd, 0x7d, 0xb5, 0xcd, 0xcd, 0xaf, 0xb1, 0xb9, 0xf9, | 818 | 0xba, 0x9a, 0x64, 0xcf, 0x6d, 0xea, 0xbc, 0xd3, 0xce, 0x85, 0x3a, 0x85, |
| 819 | 0x15, 0x9b, 0xdb, 0xaa, 0xe3, 0xa5, 0xbf, 0x8b, 0xcd, 0x8d, 0xd5, 0x9d, | 819 | 0x91, 0xf8, 0xbc, 0xe7, 0x78, 0xc9, 0x10, 0xef, 0xcc, 0x35, 0xcb, 0x44, |
| 820 | 0xcb, 0xf8, 0x67, 0x32, 0x12, 0xc8, 0xf6, 0x44, 0x65, 0x07, 0xfc, 0xc8, | 820 | 0xbc, 0x55, 0xf6, 0x02, 0x3b, 0x15, 0xaf, 0xf7, 0xd4, 0x37, 0xd3, 0x59, |
| 821 | 0xf0, 0xd4, 0x4e, 0xf9, 0x97, 0x53, 0x93, 0xea, 0x8e, 0xd2, 0x5f, 0x38, | 821 | 0x75, 0x9e, 0xf4, 0x86, 0xe6, 0x3b, 0xe8, 0xd0, 0x66, 0xcb, 0x7f, 0xac, |
| 822 | 0xc9, 0xf8, 0x03, 0x01, 0x57, 0x3e, 0x80, 0x78, 0x77, 0xbc, 0xa3, 0x41, | 822 | 0x33, 0xcf, 0xf2, 0x07, 0xd7, 0xe5, 0xf9, 0xfc, 0x04, 0xfc, 0xb9, 0x38, |
| 823 | 0x76, 0xbc, 0x4b, 0x9d, 0x35, 0x9a, 0xd9, 0x40, 0xbb, 0x70, 0x17, 0x3c, | 823 | 0x68, 0xd5, 0x78, 0xff, 0x28, 0xac, 0xe8, 0x59, 0xaa, 0x8c, 0xab, 0x7b, |
| 824 | 0xe7, 0x58, 0x4e, 0x22, 0xc0, 0xfb, 0x6a, 0x8d, 0x32, 0x1e, 0x6b, 0x96, | 824 | 0x5d, 0x57, 0xc3, 0xa4, 0x97, 0xf2, 0xa1, 0x12, 0xb9, 0x30, 0x30, 0xce, |
| 825 | 0x9d, 0xc0, 0x4e, 0x85, 0x1b, 0x1c, 0xf5, 0x2d, 0x79, 0x46, 0x9d, 0xe5, | 825 | 0x2c, 0x90, 0xb4, 0x4b, 0xbf, 0x53, 0xe3, 0x4f, 0xe8, 0xff, 0xfd, 0xea, |
| 826 | 0xdc, 0xb2, 0xd9, 0x1b, 0x17, 0x7c, 0x68, 0x31, 0xe5, 0xab, 0xd5, 0x5b, | 826 | 0x7c, 0x79, 0x19, 0xb4, 0xf1, 0x55, 0xfc, 0xb9, 0x10, 0x27, 0xae, 0x5f, |
| 827 | 0xd4, 0x77, 0xd1, 0x17, 0x4a, 0xd5, 0xd6, 0xd5, 0x79, 0x3e, 0xff, 0x7b, | 827 | 0xbd, 0xc3, 0xfc, 0x4e, 0x7c, 0xaf, 0xb0, 0xbd, 0x39, 0x0b, 0xd1, 0xf1, |
| 828 | 0xd4, 0x89, 0x81, 0x57, 0xf5, 0x77, 0x7f, 0x82, 0x8a, 0x9f, 0xc5, 0xb9, | 828 | 0x2a, 0x1d, 0x07, 0x50, 0x67, 0x7b, 0x1b, 0xfd, 0xbf, 0x0b, 0xc4, 0x7a, |
| 829 | 0x31, 0x75, 0xa7, 0xea, 0x4a, 0x90, 0xfc, 0x52, 0x71, 0x53, 0x3c, 0x1b, | 829 | 0xfc, 0xae, 0x9f, 0xd8, 0xce, 0x39, 0x5a, 0x91, 0x1f, 0x2a, 0x5f, 0x34, |
| 830 | 0x04, 0xc6, 0x99, 0x01, 0x92, 0xb6, 0x19, 0xf3, 0x69, 0xfc, 0x09, 0xfb, | 830 | 0x4b, 0xfa, 0x56, 0xc1, 0xa7, 0xe3, 0x09, 0x63, 0xcf, 0x43, 0xdd, 0xe7, |
| 831 | 0xbf, 0x47, 0x9d, 0xed, 0x2e, 0x81, 0x37, 0xae, 0xda, 0xfb, 0xcd, 0xc7, | 831 | 0x1b, 0x7d, 0x51, 0xf6, 0x11, 0x53, 0x77, 0x42, 0x56, 0xff, 0x9f, 0x17, |
| 832 | 0x88, 0xeb, 0x6b, 0xf7, 0x87, 0xaf, 0xc5, 0xf7, 0xde, 0xb7, 0x67, 0xfa, | 832 | 0xc6, 0x98, 0xb2, 0xa1, 0xbb, 0xcb, 0xd3, 0x12, 0x3e, 0x31, 0x26, 0x91, |
| 833 | 0x1c, 0x42, 0xef, 0x15, 0xe9, 0x18, 0x5c, 0x9d, 0xab, 0xad, 0xf7, 0x7f, | 833 | 0xe3, 0x8c, 0xe7, 0x67, 0xa5, 0x14, 0xf7, 0xe5, 0x01, 0x6f, 0xad, 0x6f, |
| 834 | 0x29, 0x88, 0xf5, 0xf8, 0x7f, 0x0f, 0x88, 0xed, 0xac, 0xc3, 0x73, 0xe2, | 834 | 0xd2, 0x6d, 0xad, 0x9f, 0xfb, 0xa3, 0x32, 0x74, 0xfa, 0x31, 0x89, 0x9e, |
| 835 | 0xa8, 0x38, 0x30, 0x43, 0xfe, 0x96, 0xb1, 0x4e, 0xd3, 0x71, 0xdf, 0x9f, | 835 | 0xe0, 0xbb, 0x35, 0x67, 0x39, 0xd0, 0x47, 0x9b, 0xa5, 0x12, 0x67, 0x4c, |
| 836 | 0x07, 0x3a, 0xcf, 0xd6, 0xc7, 0x81, 0xec, 0x23, 0xa2, 0xee, 0x63, 0xd4, | 836 | 0x3b, 0xaa, 0xce, 0xc6, 0x2f, 0x8f, 0xbf, 0x1e, 0x2d, 0x01, 0x2b, 0x14, |
| 837 | 0xfe, 0x0f, 0x0e, 0xf7, 0x77, 0x32, 0x81, 0x7b, 0x4a, 0x93, 0x12, 0x3c, | 837 | 0x94, 0x6e, 0x41, 0xba, 0xe2, 0x4b, 0xe4, 0xae, 0xe3, 0x9e, 0x82, 0xbf, |
| 838 | 0x3a, 0x2a, 0xa1, 0x69, 0xee, 0xa5, 0x67, 0xa4, 0x18, 0x73, 0xe5, 0x63, | 838 | 0x19, 0x9a, 0xa8, 0x44, 0xd5, 0x1d, 0xa5, 0xcb, 0x71, 0xd6, 0x7d, 0x0c, |
| 839 | 0xce, 0xea, 0xd8, 0xa4, 0xd3, 0x58, 0x4b, 0xfb, 0x23, 0x32, 0x78, 0xf2, | 839 | 0x7e, 0x37, 0x71, 0x06, 0x74, 0xc7, 0x98, 0xb4, 0x30, 0x1f, 0x3e, 0xb1, |
| 840 | 0x31, 0x09, 0x1f, 0xe5, 0xbb, 0x55, 0xe7, 0x28, 0xb0, 0x47, 0x1b, 0x64, | 840 | 0x8a, 0x33, 0xa8, 0x13, 0x86, 0xbc, 0xb8, 0x44, 0xce, 0x04, 0x6b, 0xe7, |
| 841 | 0x2e, 0xc6, 0xfd, 0xe4, 0xb0, 0x3a, 0x97, 0x5e, 0x1e, 0x7b, 0x2d, 0x5c, | 841 | 0x7f, 0x1c, 0x64, 0xcd, 0xef, 0x95, 0xf0, 0x71, 0x3e, 0x37, 0xfa, 0x43, |
| 842 | 0x04, 0x56, 0xc8, 0x2b, 0xdb, 0x82, 0x74, 0x25, 0x96, 0x38, 0xbc, 0x99, | 842 | 0xc4, 0xee, 0xb0, 0x0d, 0xe7, 0x7f, 0x1f, 0xfd, 0xf1, 0x5d, 0x56, 0x7f, |
| 843 | 0x3a, 0x85, 0x18, 0x33, 0x30, 0x3e, 0x17, 0x56, 0xf7, 0x83, 0x96, 0x63, | 843 | 0x87, 0x8b, 0x7c, 0xf5, 0xef, 0xfa, 0x7f, 0x04, 0x50, 0xf6, 0xff, 0x3f, |
| 844 | 0xac, 0x8b, 0xf8, 0xfd, 0x28, 0x71, 0x06, 0x6c, 0xc7, 0xa8, 0x44, 0x99, | 844 | 0xc3, 0x8e, 0xbb, 0xb0, 0xa8, 0x4d, 0x00, 0x00, 0x00 }; |
| 845 | 0x0f, 0x1e, 0xad, 0xe1, 0x0c, 0xda, 0x84, 0x41, 0x27, 0x26, 0xa1, 0x53, | ||
| 846 | 0xde, 0xdc, 0xf9, 0x8f, 0x95, 0x8c, 0x13, 0x3b, 0x25, 0x38, 0xcd, 0xe7, | ||
| 847 | 0xfa, 0x78, 0x88, 0xd8, 0x1d, 0xbe, 0xe1, 0xec, 0x67, 0xd1, 0x1f, 0xdf, | ||
| 848 | 0x65, 0xf4, 0x37, 0xba, 0xc8, 0x97, 0xff, 0xb6, 0xff, 0x43, 0x81, 0xb2, | ||
| 849 | 0xff, 0xff, 0x01, 0xe6, 0x8e, 0x9a, 0x21, 0xc0, 0x4e, 0x00, 0x00, 0x00 }; | ||
| 850 | 845 | ||
| 851 | static const u32 bnx2_COM_b06FwData[(0x0/4) + 1] = { 0x0 }; | 846 | static const u32 bnx2_COM_b06FwData[(0x0/4) + 1] = { 0x0 }; |
| 852 | static const u32 bnx2_COM_b06FwRodata[(0x14/4) + 1] = { | 847 | static const u32 bnx2_COM_b06FwRodata[(0x14/4) + 1] = { |
| 853 | 0x08000e7c, 0x08000ec4, 0x08000ef8, 0x08000f44, 0x08000f78, 0x00000000 | 848 | 0x08000e7c, 0x08000ec4, 0x08000f04, 0x08000f50, 0x08000f84, 0x00000000 |
| 854 | }; | 849 | }; |
| 855 | 850 | ||
| 856 | static struct fw_info bnx2_com_fw_06 = { | 851 | static struct fw_info bnx2_com_fw_06 = { |
| 857 | /* Firmware version: 4.4.2 */ | 852 | /* Firmware version: 4.6.16 */ |
| 858 | .ver_major = 0x4, | 853 | .ver_major = 0x4, |
| 859 | .ver_minor = 0x4, | 854 | .ver_minor = 0x6, |
| 860 | .ver_fix = 0x2, | 855 | .ver_fix = 0x10, |
| 861 | 856 | ||
| 862 | .start_addr = 0x080000f8, | 857 | .start_addr = 0x080000f8, |
| 863 | 858 | ||
| 864 | .text_addr = 0x08000000, | 859 | .text_addr = 0x08000000, |
| 865 | .text_len = 0x4ebc, | 860 | .text_len = 0x4da4, |
| 866 | .text_index = 0x0, | 861 | .text_index = 0x0, |
| 867 | .gz_text = bnx2_COM_b06FwText, | 862 | .gz_text = bnx2_COM_b06FwText, |
| 868 | .gz_text_len = sizeof(bnx2_COM_b06FwText), | 863 | .gz_text_len = sizeof(bnx2_COM_b06FwText), |
| @@ -872,15 +867,15 @@ static struct fw_info bnx2_com_fw_06 = { | |||
| 872 | .data_index = 0x0, | 867 | .data_index = 0x0, |
| 873 | .data = bnx2_COM_b06FwData, | 868 | .data = bnx2_COM_b06FwData, |
| 874 | 869 | ||
| 875 | .sbss_addr = 0x08004f00, | 870 | .sbss_addr = 0x08004de0, |
| 876 | .sbss_len = 0x38, | 871 | .sbss_len = 0x38, |
| 877 | .sbss_index = 0x0, | 872 | .sbss_index = 0x0, |
| 878 | 873 | ||
| 879 | .bss_addr = 0x08004f38, | 874 | .bss_addr = 0x08004e18, |
| 880 | .bss_len = 0xbc, | 875 | .bss_len = 0xbc, |
| 881 | .bss_index = 0x0, | 876 | .bss_index = 0x0, |
| 882 | 877 | ||
| 883 | .rodata_addr = 0x08004ebc, | 878 | .rodata_addr = 0x08004da4, |
| 884 | .rodata_len = 0x14, | 879 | .rodata_len = 0x14, |
| 885 | .rodata_index = 0x0, | 880 | .rodata_index = 0x0, |
| 886 | .rodata = bnx2_COM_b06FwRodata, | 881 | .rodata = bnx2_COM_b06FwRodata, |
| @@ -903,1232 +898,1219 @@ static const struct cpu_reg cpu_reg_com = { | |||
| 903 | }; | 898 | }; |
| 904 | 899 | ||
| 905 | static u8 bnx2_CP_b06FwText[] = { | 900 | static u8 bnx2_CP_b06FwText[] = { |
| 906 | 0x9d, 0xbc, 0x0d, 0x78, 0x1b, 0xe5, 0x95, 0x36, 0x7c, 0xcf, 0x48, 0xb2, | 901 | 0x9d, 0xbc, 0x0d, 0x7c, 0x1b, 0xe5, 0x95, 0x2e, 0xfe, 0xcc, 0x48, 0xb2, |
| 907 | 0x65, 0x5b, 0xb6, 0xc7, 0x8e, 0x9c, 0x28, 0x6c, 0x9a, 0x68, 0xf0, 0x28, | 902 | 0x65, 0x5b, 0xb6, 0xc7, 0x8e, 0x92, 0x28, 0xac, 0x37, 0xd1, 0xc4, 0x23, |
| 908 | 0x51, 0xb0, 0x69, 0x47, 0x89, 0x03, 0x82, 0x55, 0x89, 0xea, 0x98, 0xc4, | 903 | 0x47, 0xc1, 0xa6, 0x8c, 0x12, 0x27, 0xa8, 0xac, 0x4a, 0x54, 0xc7, 0x24, |
| 909 | 0x81, 0x50, 0x9c, 0x12, 0x5a, 0xb3, 0x4b, 0x5b, 0xe1, 0xfc, 0x60, 0x42, | 904 | 0x4e, 0x48, 0xc1, 0x29, 0x69, 0x6b, 0xb8, 0x2d, 0xa8, 0xf9, 0xc2, 0x84, |
| 910 | 0xa0, 0xa1, 0xb0, 0xef, 0x9a, 0xef, 0x65, 0x5f, 0xab, 0xb6, 0x93, 0x38, | 905 | 0x40, 0x43, 0xcb, 0xde, 0x6b, 0xee, 0xed, 0xae, 0x55, 0xdb, 0x49, 0x9c, |
| 911 | 0x89, 0x2c, 0x39, 0x8e, 0x21, 0x61, 0xbf, 0x5e, 0x8b, 0x89, 0x9d, 0x38, | 906 | 0x44, 0x96, 0x6c, 0xc7, 0x24, 0xa1, 0xdb, 0xff, 0xa2, 0xc4, 0xce, 0x07, |
| 912 | 0x80, 0x6c, 0x85, 0x36, 0xdd, 0x0d, 0x7d, 0xd3, 0x8d, 0x36, 0x09, 0x60, | 907 | 0x54, 0xb6, 0xd2, 0x96, 0xee, 0x86, 0xde, 0x74, 0xd1, 0x4d, 0x02, 0x18, |
| 913 | 0xfe, 0xda, 0x40, 0xbb, 0x2c, 0xed, 0xcb, 0x07, 0xde, 0x14, 0x42, 0xd8, | 908 | 0xca, 0x47, 0xda, 0xe5, 0x76, 0x69, 0x7f, 0xbd, 0xc5, 0x97, 0x42, 0x08, |
| 914 | 0xb6, 0x40, 0xb7, 0x3f, 0x1b, 0x5a, 0xca, 0xbc, 0xf7, 0x19, 0x49, 0x89, | 909 | 0x5b, 0x0a, 0xe9, 0xe7, 0x86, 0x7e, 0x30, 0xf7, 0x39, 0x23, 0x29, 0x31, |
| 915 | 0x13, 0x28, 0xed, 0x7e, 0xbe, 0xae, 0xb9, 0xac, 0x99, 0x79, 0x7e, 0xce, | 910 | 0x2c, 0xdb, 0x76, 0xff, 0xfa, 0xfd, 0xe6, 0x27, 0xcd, 0xe8, 0xfd, 0x38, |
| 916 | 0x73, 0x9e, 0x73, 0xee, 0x73, 0x9f, 0x67, 0x9e, 0x19, 0x3f, 0x50, 0x8a, | 911 | 0xef, 0x79, 0xcf, 0x79, 0xce, 0x73, 0xde, 0x79, 0x67, 0xfc, 0x40, 0x39, |
| 917 | 0xfc, 0x5f, 0x39, 0x8f, 0x4f, 0x37, 0x6c, 0x5c, 0xbd, 0x60, 0xc1, 0xa7, | 912 | 0x0a, 0x9f, 0x4a, 0x1e, 0x1f, 0x6a, 0xde, 0xb6, 0x61, 0x69, 0xe8, 0x43, |
| 918 | 0x1b, 0xe4, 0xdc, 0x39, 0xdd, 0xe9, 0xc4, 0x9f, 0xf9, 0xe7, 0xff, 0x73, | 913 | 0x4b, 0xe5, 0xdc, 0xa9, 0x95, 0x38, 0xf1, 0x67, 0x7e, 0xfc, 0x7f, 0x6e, |
| 919 | 0x0b, 0x7e, 0xcc, 0x9f, 0x03, 0xd0, 0x0a, 0xfd, 0xcb, 0x01, 0xb7, 0x1a, | 914 | 0xc1, 0xc2, 0x47, 0xe1, 0xd1, 0x58, 0xf8, 0xed, 0x00, 0xb4, 0x62, 0xff, |
| 920 | 0x71, 0xde, 0xdc, 0x68, 0xc0, 0xed, 0x88, 0x4c, 0xb4, 0xad, 0x36, 0x80, | 915 | 0x72, 0xc0, 0xad, 0x46, 0xc6, 0x3a, 0x5a, 0x0c, 0xb8, 0x1d, 0x91, 0x6d, |
| 921 | 0x68, 0xba, 0xce, 0xbf, 0x04, 0x7f, 0xb0, 0xe2, 0x5e, 0x27, 0xe4, 0xfa, | 916 | 0xb7, 0x6f, 0x30, 0x80, 0x68, 0xa6, 0xd1, 0xbf, 0x1c, 0x7f, 0xb0, 0xe2, |
| 922 | 0xa7, 0x22, 0x1f, 0x74, 0x7e, 0xef, 0x72, 0xfd, 0xbd, 0x21, 0x07, 0xdc, | 917 | 0x5e, 0x27, 0xe4, 0xfa, 0x5f, 0x46, 0x7e, 0xdf, 0xfd, 0xed, 0x6b, 0xf4, |
| 923 | 0x5a, 0x24, 0x0e, 0x6d, 0x2e, 0xdc, 0xb3, 0x58, 0xe7, 0x9b, 0xf3, 0xbe, | 918 | 0x0b, 0x69, 0x07, 0xdc, 0x5a, 0x24, 0x0e, 0xad, 0x01, 0xee, 0x3a, 0xd6, |
| 924 | 0xa9, 0xa0, 0xa2, 0xd0, 0xd6, 0x69, 0xeb, 0x7b, 0xf3, 0x7c, 0xb1, 0x92, | 919 | 0xf9, 0xca, 0x82, 0xaf, 0x28, 0xa8, 0x2a, 0xb6, 0x75, 0xde, 0xfa, 0xf6, |
| 925 | 0x88, 0x86, 0x23, 0x19, 0xb4, 0xd4, 0xf7, 0x75, 0x5a, 0xe5, 0x46, 0x08, | 920 | 0x02, 0x5f, 0xac, 0x2c, 0xa2, 0xe1, 0xf1, 0x2c, 0xda, 0x9b, 0x06, 0xba, |
| 926 | 0x6e, 0xc3, 0x68, 0xed, 0x53, 0x3c, 0xe1, 0xf5, 0x8b, 0xe0, 0x29, 0x36, | 921 | 0xad, 0x4a, 0x23, 0x04, 0xb7, 0x61, 0x74, 0x0c, 0x28, 0x9e, 0xf0, 0x96, |
| 927 | 0x10, 0xbf, 0x28, 0x82, 0x96, 0x4b, 0xc6, 0x4a, 0xe3, 0xce, 0x88, 0x1b, | 922 | 0x25, 0xf0, 0x94, 0x1a, 0x88, 0x5f, 0x11, 0x41, 0xfb, 0x95, 0xe3, 0xe5, |
| 928 | 0xcd, 0x19, 0x77, 0xfc, 0x2f, 0x22, 0x06, 0x96, 0x65, 0x66, 0x95, 0xa2, | 923 | 0x71, 0x67, 0xc4, 0x8d, 0xb6, 0xac, 0x3b, 0xfe, 0x17, 0x11, 0x03, 0x2b, |
| 929 | 0xc2, 0x8d, 0x9e, 0xcc, 0xeb, 0x25, 0xb9, 0xf6, 0xea, 0xf3, 0xff, 0x83, | 924 | 0xb3, 0x46, 0x19, 0xaa, 0x34, 0xf4, 0x65, 0x5f, 0x77, 0xe7, 0xdb, 0x6b, |
| 930 | 0xd3, 0x72, 0xff, 0xa7, 0xc7, 0x9c, 0x11, 0x60, 0x53, 0xc2, 0xb2, 0x8a, | 925 | 0x2e, 0x7c, 0xdf, 0x56, 0x9b, 0xff, 0x9e, 0x15, 0x73, 0x46, 0x80, 0xed, |
| 931 | 0x22, 0x37, 0xdc, 0xa0, 0x46, 0x0c, 0xdf, 0x3e, 0x2c, 0x46, 0x9b, 0x86, | 926 | 0x09, 0xcb, 0x2a, 0x89, 0xdc, 0x7c, 0xb3, 0x1a, 0x31, 0x7c, 0x47, 0xb0, |
| 932 | 0xfb, 0x36, 0x37, 0xfc, 0xa7, 0x72, 0x74, 0x90, 0x0d, 0x8f, 0x3a, 0x10, | 927 | 0x0c, 0xeb, 0x35, 0x7c, 0x71, 0x47, 0xf3, 0x2f, 0x94, 0x53, 0x23, 0x4d, |
| 933 | 0xd5, 0x8e, 0xf3, 0xff, 0xec, 0xd9, 0xad, 0x61, 0x03, 0xbb, 0x47, 0xcf, | 928 | 0x88, 0x1f, 0x75, 0x20, 0xaa, 0x3d, 0xcb, 0xef, 0xb9, 0x73, 0x3b, 0xc2, |
| 934 | 0xf0, 0xba, 0xd3, 0xbe, 0xd6, 0xbd, 0x6b, 0xf6, 0xec, 0x9b, 0xc2, 0xc7, | 929 | 0x4d, 0x38, 0x70, 0xf4, 0x22, 0xaf, 0x3b, 0xed, 0x6b, 0xbd, 0xfb, 0xe7, |
| 935 | 0xf1, 0xe0, 0xa8, 0xfc, 0xbe, 0x15, 0x9d, 0xf5, 0x0a, 0x26, 0x6f, 0x58, | 930 | 0xce, 0xbd, 0x25, 0xfc, 0x2c, 0x1e, 0x3c, 0x2a, 0xbf, 0xef, 0x40, 0x77, |
| 936 | 0x07, 0x87, 0x61, 0xa0, 0x67, 0x97, 0xe2, 0xec, 0xaa, 0x57, 0x11, 0xf5, | 931 | 0x93, 0x82, 0xa9, 0x9b, 0x37, 0xc3, 0x61, 0x34, 0xa1, 0x6f, 0xbf, 0xe2, |
| 937 | 0xea, 0xc1, 0x18, 0x27, 0xc1, 0x69, 0x20, 0x56, 0x1c, 0x09, 0x3b, 0xdf, | 932 | 0xec, 0x69, 0x52, 0x11, 0xf5, 0xea, 0xc1, 0x18, 0x27, 0xc1, 0x69, 0x20, |
| 938 | 0x4e, 0x44, 0x34, 0x87, 0x61, 0x59, 0xc1, 0xd0, 0x0c, 0x38, 0xaa, 0x2c, | 933 | 0x56, 0x1a, 0x09, 0x3b, 0xdf, 0x48, 0x44, 0x34, 0x87, 0x61, 0x59, 0xc1, |
| 939 | 0xeb, 0x09, 0xd3, 0x03, 0xff, 0x97, 0x9e, 0x42, 0x7c, 0xb8, 0x05, 0xaa, | 934 | 0xd0, 0x6c, 0x38, 0x6a, 0x2c, 0xeb, 0x31, 0xd3, 0x03, 0xff, 0xa7, 0x9e, |
| 940 | 0xf1, 0x14, 0xba, 0x86, 0x9f, 0xc2, 0x43, 0x3b, 0x4b, 0x31, 0x39, 0x8d, | 935 | 0x47, 0x7c, 0xb4, 0x1d, 0xaa, 0xf1, 0x3c, 0x7a, 0x46, 0x9f, 0xc7, 0x43, |
| 941 | 0xe3, 0x4d, 0xf9, 0xf0, 0xbd, 0x79, 0xd2, 0xb7, 0xc8, 0x51, 0xcf, 0xc3, | 936 | 0x7b, 0xcb, 0x31, 0x35, 0x83, 0xe3, 0x4d, 0xf9, 0xf0, 0xed, 0x05, 0xd2, |
| 942 | 0x8d, 0x49, 0xc7, 0x6b, 0xfc, 0x2f, 0x65, 0xce, 0x58, 0x93, 0x33, 0xce, | 937 | 0xb7, 0xc8, 0xd1, 0xcc, 0xc3, 0x8d, 0x29, 0xc7, 0x39, 0x7e, 0x4b, 0x99, |
| 943 | 0x95, 0xd9, 0xc4, 0x32, 0x3d, 0x17, 0x94, 0x89, 0x0f, 0x47, 0xf0, 0x5c, | 938 | 0x8b, 0xd6, 0xd4, 0xec, 0xcb, 0x65, 0xb6, 0xb3, 0x4c, 0xdf, 0xfb, 0xca, |
| 944 | 0x42, 0xc1, 0xfa, 0x50, 0x05, 0xa2, 0x55, 0x32, 0x5e, 0xcb, 0x1a, 0x35, | 939 | 0xc4, 0x47, 0x23, 0xf8, 0x4e, 0x42, 0xc1, 0x96, 0x50, 0x15, 0xa2, 0x35, |
| 945 | 0x4f, 0x59, 0x93, 0x9a, 0xf4, 0x35, 0x81, 0xe7, 0x79, 0x6f, 0x73, 0xe8, | 940 | 0x32, 0x5e, 0xcb, 0x3a, 0x6a, 0x9e, 0xb3, 0xa6, 0x34, 0xe9, 0x6b, 0x12, |
| 946 | 0x0d, 0x2b, 0xeb, 0x95, 0xf6, 0xbe, 0x4e, 0x1b, 0x5a, 0xc9, 0xeb, 0x4e, | 941 | 0xcf, 0xf2, 0xbf, 0x1d, 0xa1, 0x57, 0xad, 0x9c, 0x57, 0xda, 0xfb, 0x3c, |
| 947 | 0xa4, 0x12, 0x88, 0x55, 0x44, 0x6e, 0xe4, 0xb9, 0x6e, 0xbe, 0xa3, 0xb8, | 942 | 0x6d, 0x68, 0x2d, 0xaf, 0x3b, 0x91, 0x4a, 0x20, 0x56, 0x15, 0xf9, 0x04, |
| 948 | 0xdd, 0xef, 0x26, 0xdc, 0x5f, 0x2a, 0x37, 0xd4, 0x7b, 0x2a, 0xe1, 0xc4, | 943 | 0xcf, 0x75, 0xf3, 0x2d, 0xc5, 0xed, 0x7e, 0x3b, 0xe1, 0xfe, 0x54, 0xa5, |
| 949 | 0x0b, 0x94, 0xf9, 0x90, 0xb9, 0x0e, 0x2e, 0xe3, 0x6e, 0xb1, 0x39, 0x8e, | 944 | 0xa1, 0xde, 0x57, 0x0d, 0x27, 0x9e, 0xa3, 0xcc, 0x27, 0xcc, 0xcd, 0x70, |
| 950 | 0xeb, 0x47, 0x16, 0x66, 0x14, 0xea, 0x4b, 0xbb, 0x6e, 0x6c, 0x4e, 0x59, | 945 | 0x19, 0x5f, 0x10, 0x9b, 0xe3, 0xb8, 0x5e, 0xb4, 0x30, 0xbb, 0x58, 0x5f, |
| 951 | 0xd6, 0x56, 0x33, 0x7a, 0x45, 0x09, 0x0d, 0xe2, 0x58, 0xa2, 0x05, 0xee, | 946 | 0xda, 0xd5, 0xb0, 0x23, 0x65, 0x59, 0xbb, 0xcc, 0xe8, 0x87, 0xcb, 0x68, |
| 952 | 0x48, 0xc0, 0x7f, 0x1a, 0x61, 0x2c, 0xc9, 0x78, 0xf1, 0x64, 0x02, 0xce, | 947 | 0x10, 0xa7, 0x13, 0xed, 0x70, 0x47, 0x02, 0xfe, 0xf3, 0x08, 0x63, 0x79, |
| 953 | 0xc6, 0x79, 0x5e, 0x74, 0x65, 0x22, 0xb8, 0x3a, 0x63, 0xa2, 0x29, 0xf3, | 948 | 0xd6, 0x8b, 0x27, 0x12, 0x70, 0xb6, 0x2c, 0xa8, 0x43, 0x4f, 0x36, 0x82, |
| 954 | 0xa7, 0x2d, 0xeb, 0xda, 0x94, 0x9f, 0x63, 0xf8, 0x83, 0x95, 0x1b, 0x83, | 949 | 0xeb, 0xb3, 0x26, 0x5a, 0xb3, 0x7f, 0xda, 0xca, 0x6e, 0x48, 0xf9, 0x39, |
| 955 | 0x8c, 0x2f, 0xf7, 0xbf, 0x27, 0x75, 0x11, 0xb6, 0x71, 0x8e, 0xb6, 0x70, | 950 | 0x86, 0x3f, 0x58, 0xf9, 0x31, 0xc8, 0xf8, 0xe4, 0x9b, 0xf3, 0x9a, 0xba, |
| 956 | 0xfe, 0x96, 0x87, 0xb2, 0xd1, 0x12, 0xe8, 0xe6, 0x69, 0x44, 0xb0, 0x34, | 951 | 0x02, 0xbb, 0x47, 0x0c, 0xec, 0xe4, 0xfc, 0xad, 0x0a, 0xe5, 0xa2, 0x65, |
| 957 | 0x63, 0x70, 0x4e, 0x23, 0x58, 0x92, 0xaa, 0xd5, 0x86, 0x31, 0x1f, 0x51, | 952 | 0xd0, 0xcd, 0xf3, 0x88, 0x60, 0x45, 0xd6, 0xe0, 0x9c, 0x46, 0xb0, 0x3c, |
| 958 | 0x5f, 0xce, 0xb6, 0xb7, 0x73, 0xbc, 0x6d, 0x81, 0x16, 0x94, 0xd3, 0x46, | 953 | 0x55, 0xaf, 0x8d, 0x62, 0x21, 0xa2, 0xbe, 0xbc, 0x6d, 0xef, 0xe1, 0x78, |
| 959 | 0xd2, 0x8b, 0xc2, 0x68, 0x64, 0xff, 0x2b, 0xfe, 0x8c, 0xfe, 0xaf, 0x67, | 954 | 0xd7, 0x07, 0xda, 0x51, 0x49, 0x1b, 0xc9, 0x2c, 0x09, 0xa3, 0x85, 0xfd, |
| 960 | 0xff, 0xef, 0xb0, 0xff, 0xac, 0xdd, 0x3f, 0x9c, 0xd7, 0xf0, 0xdc, 0x4d, | 955 | 0xaf, 0xf9, 0x33, 0xfa, 0xbf, 0x89, 0xfd, 0xbf, 0xc5, 0xfe, 0x73, 0x76, |
| 961 | 0x7b, 0xdc, 0x96, 0x76, 0x3a, 0x97, 0xa7, 0xbc, 0xd8, 0x9a, 0x36, 0x69, | 956 | 0xff, 0x70, 0xae, 0xe6, 0xb9, 0x9b, 0xf6, 0xb8, 0x3b, 0xe3, 0x74, 0xae, |
| 962 | 0x73, 0x72, 0xcb, 0x87, 0xcd, 0x83, 0xb3, 0xb0, 0x65, 0x50, 0xf7, 0x3d, | 957 | 0x4a, 0x79, 0xb1, 0x2b, 0x63, 0xd2, 0xe6, 0xe4, 0x2f, 0x1f, 0x76, 0x8c, |
| 963 | 0xcd, 0xdf, 0xdd, 0x23, 0x17, 0x61, 0xd3, 0xa0, 0x82, 0x3d, 0xc6, 0x45, | 958 | 0xd4, 0x61, 0xe7, 0x88, 0xee, 0x7b, 0x8a, 0xbf, 0x7b, 0xc7, 0xae, 0xc0, |
| 964 | 0xe8, 0xe2, 0xef, 0xdd, 0x83, 0xb3, 0xf1, 0xe0, 0xa0, 0x03, 0xe1, 0x69, | 959 | 0xf6, 0x11, 0x05, 0x87, 0x8c, 0x2b, 0xd0, 0xc3, 0xdf, 0x07, 0x46, 0xe6, |
| 965 | 0xe7, 0x8f, 0x63, 0xd2, 0x71, 0x11, 0xe2, 0x23, 0x7e, 0x74, 0x25, 0x9e, | 960 | 0xe2, 0xc1, 0x11, 0x07, 0xc2, 0x33, 0xa6, 0x8f, 0x43, 0xbe, 0xaf, 0x40, |
| 966 | 0xb7, 0x75, 0x58, 0x1e, 0xf9, 0x5e, 0xc1, 0x9f, 0xe9, 0x3b, 0x7e, 0xac, | 961 | 0x7c, 0xcc, 0x8f, 0x9e, 0xc4, 0xb3, 0xb6, 0x0e, 0x2b, 0x23, 0xdf, 0x2e, |
| 967 | 0x4e, 0x68, 0xe8, 0x4a, 0x89, 0x1f, 0xb8, 0x69, 0x9b, 0xe2, 0x07, 0xbf, | 962 | 0xfa, 0x33, 0x7d, 0xc7, 0x8f, 0x0d, 0x09, 0x1f, 0x7a, 0x52, 0xe2, 0x07, |
| 968 | 0x06, 0x2a, 0x34, 0x74, 0x67, 0x0a, 0xf7, 0x15, 0x38, 0x39, 0x6f, 0x6b, | 963 | 0x6e, 0xda, 0xa6, 0xf8, 0xc1, 0xaf, 0x80, 0x2a, 0xb6, 0x9f, 0x2d, 0xfe, |
| 969 | 0x34, 0x37, 0xb6, 0xa6, 0xc4, 0x26, 0xa4, 0x4d, 0xb1, 0x0b, 0xf9, 0x5d, | 964 | 0xaf, 0xc0, 0xc9, 0x79, 0xdb, 0xc8, 0xff, 0x76, 0xa5, 0xc4, 0x26, 0xa4, |
| 970 | 0x4d, 0xbb, 0x2b, 0x85, 0x7f, 0x6f, 0x29, 0x82, 0xf7, 0x6b, 0x78, 0xb3, | 965 | 0x4d, 0xb1, 0x0b, 0xf9, 0x5d, 0x4b, 0xbb, 0x2b, 0x87, 0xff, 0x70, 0x39, |
| 971 | 0x41, 0xae, 0xd3, 0xde, 0x43, 0x52, 0xa6, 0x1f, 0xfb, 0xd2, 0xe2, 0xa7, | 966 | 0x82, 0x0f, 0x68, 0x78, 0xad, 0x59, 0xae, 0xd3, 0xde, 0x43, 0x52, 0x66, |
| 972 | 0x7e, 0x34, 0x26, 0x26, 0xd8, 0x7e, 0x03, 0xdb, 0x36, 0xf1, 0xcf, 0x99, | 967 | 0x10, 0x47, 0x32, 0xe2, 0xa7, 0x7e, 0xb4, 0x24, 0x26, 0xd9, 0x7e, 0x33, |
| 973 | 0x7a, 0xfc, 0x53, 0x26, 0x88, 0x7f, 0xa4, 0x1e, 0xbf, 0x93, 0xf1, 0xe3, | 968 | 0xdb, 0x36, 0xf1, 0x4f, 0xd9, 0x26, 0xfc, 0x63, 0x36, 0x88, 0x7f, 0xa0, |
| 974 | 0x60, 0x66, 0x16, 0xbe, 0x9d, 0xf1, 0xe1, 0x5b, 0x9c, 0xbf, 0xc7, 0x33, | 969 | 0x1e, 0xbf, 0x99, 0xf5, 0xe3, 0xd1, 0x6c, 0x1d, 0xbe, 0x91, 0xf5, 0xe1, |
| 975 | 0x2d, 0xb4, 0x7d, 0x0d, 0x07, 0x32, 0xa2, 0xff, 0x22, 0x8e, 0xb7, 0x14, | 970 | 0xeb, 0x9c, 0xbf, 0xaf, 0x65, 0xdb, 0x69, 0xfb, 0x1a, 0x8e, 0x67, 0x45, |
| 976 | 0xdd, 0x83, 0xb5, 0xc1, 0x63, 0xb4, 0xad, 0x7f, 0x34, 0xaf, 0x41, 0xb6, | 971 | 0xff, 0x25, 0x1c, 0x6f, 0x39, 0x7a, 0x47, 0xea, 0x83, 0xa7, 0x69, 0x5b, |
| 977 | 0xba, 0xc1, 0xb6, 0xc9, 0xad, 0xbc, 0xbe, 0x6d, 0xb0, 0x36, 0x7a, 0x89, | 972 | 0xff, 0x60, 0xae, 0x46, 0xae, 0xb6, 0xd9, 0xb6, 0xc9, 0x5d, 0xbc, 0xbe, |
| 978 | 0x62, 0x59, 0x6a, 0xa8, 0x2e, 0x7c, 0x54, 0x55, 0x31, 0xe9, 0xd5, 0xfd, | 973 | 0x7b, 0xa4, 0x3e, 0x7a, 0xa5, 0x62, 0x59, 0x6a, 0xa8, 0x31, 0x7c, 0x4a, |
| 979 | 0x59, 0x55, 0xf7, 0x47, 0xe1, 0x42, 0x82, 0xbe, 0x11, 0xaf, 0xd1, 0x87, | 974 | 0x55, 0x31, 0xe5, 0xd5, 0xfd, 0x39, 0x55, 0xf7, 0x47, 0xe1, 0x42, 0x82, |
| 980 | 0xe2, 0xb4, 0x29, 0xaf, 0x31, 0xcc, 0xf1, 0xe8, 0xfe, 0xb8, 0xea, 0xc6, | 975 | 0xbe, 0x11, 0x9f, 0xa9, 0xa7, 0xe3, 0xb4, 0x29, 0xaf, 0x31, 0xca, 0xf1, |
| 981 | 0x96, 0x94, 0xbe, 0x3b, 0xae, 0x7a, 0x10, 0xcf, 0x94, 0xe2, 0x17, 0x83, | 976 | 0xe8, 0xfe, 0xb8, 0xaa, 0x61, 0x67, 0x4a, 0x3f, 0x10, 0x57, 0xbd, 0x88, |
| 982 | 0x7a, 0x6f, 0x5c, 0xfd, 0x3c, 0xe2, 0xd5, 0x96, 0xf5, 0xad, 0x10, 0x36, | 977 | 0x67, 0xcb, 0xf1, 0xb3, 0x11, 0xbd, 0x3f, 0xae, 0xde, 0x88, 0x78, 0xad, |
| 983 | 0xce, 0x88, 0x20, 0x5a, 0x13, 0x41, 0x6c, 0x76, 0xc4, 0x8b, 0x54, 0x0a, | 978 | 0x65, 0x7d, 0x3d, 0x84, 0x6d, 0xb3, 0x23, 0x88, 0xce, 0x8c, 0x20, 0x36, |
| 984 | 0x78, 0xa7, 0xcf, 0xf0, 0xfd, 0x9b, 0xd2, 0x82, 0xbf, 0x69, 0xd1, 0xfd, | 979 | 0x37, 0x52, 0x87, 0x54, 0x0a, 0x78, 0x6b, 0xc0, 0xf0, 0xfd, 0x8b, 0xd2, |
| 985 | 0x7e, 0xb5, 0x2e, 0x3e, 0xac, 0x2e, 0xa2, 0x4b, 0xc3, 0xef, 0x8b, 0x2c, | 980 | 0x8e, 0xbf, 0x6e, 0xd7, 0xfd, 0x7e, 0xb5, 0x31, 0x3e, 0xaa, 0x2e, 0xa1, |
| 986 | 0x43, 0x87, 0x7d, 0x4d, 0x81, 0x66, 0x78, 0xd0, 0x9d, 0xba, 0x02, 0x31, | 981 | 0x4b, 0xc3, 0xef, 0x8b, 0xac, 0x44, 0x97, 0x7d, 0x4d, 0x81, 0x66, 0x78, |
| 987 | 0x6f, 0x6d, 0xeb, 0x0e, 0xb5, 0xf6, 0x8c, 0xa9, 0xea, 0x13, 0x2d, 0xaa, | 982 | 0xd1, 0x9b, 0xfa, 0x30, 0x62, 0xde, 0xfa, 0x8e, 0x21, 0xb5, 0xfe, 0xa2, |
| 988 | 0x65, 0xfd, 0x72, 0xe1, 0x3b, 0x96, 0x7f, 0xba, 0x65, 0x2d, 0x58, 0x28, | 983 | 0xa9, 0xea, 0x93, 0xed, 0xaa, 0x65, 0xfd, 0x7c, 0xf1, 0x5b, 0x96, 0x7f, |
| 989 | 0x7d, 0xfa, 0x51, 0x15, 0x31, 0xb1, 0xd2, 0x9e, 0xc3, 0x52, 0x9c, 0x1a, | 984 | 0x96, 0x65, 0x2d, 0x5a, 0x2c, 0x7d, 0xfa, 0x51, 0x13, 0x31, 0xb1, 0xd6, |
| 990 | 0xac, 0x66, 0x1f, 0x1a, 0xfe, 0xf5, 0x72, 0x3d, 0xb8, 0x4e, 0x2d, 0xc5, | 985 | 0x9e, 0xc3, 0x72, 0x9c, 0x1b, 0xa9, 0x65, 0x1f, 0x1a, 0xfe, 0xf7, 0x35, |
| 991 | 0x9b, 0x23, 0xa5, 0x38, 0xc9, 0xf1, 0xfc, 0xe7, 0xa0, 0x0f, 0xbf, 0x1e, | 986 | 0x7a, 0x70, 0xb3, 0x5a, 0x8e, 0xd7, 0xc6, 0xca, 0xf1, 0x0a, 0xc7, 0xf3, |
| 992 | 0xb4, 0xac, 0x2f, 0x99, 0x7f, 0x89, 0x81, 0xea, 0x7e, 0xfc, 0xd3, 0xb8, | 987 | 0x8b, 0x11, 0x1f, 0x7e, 0x35, 0x62, 0x59, 0x9f, 0x32, 0xff, 0x0a, 0xc3, |
| 993 | 0x17, 0xbf, 0xe0, 0xdc, 0xbc, 0x91, 0x88, 0xde, 0x35, 0x0d, 0x7a, 0x74, | 988 | 0xb5, 0x83, 0xf8, 0xc7, 0x09, 0x2f, 0x7e, 0x96, 0xd0, 0xf0, 0x6a, 0x22, |
| 994 | 0x5c, 0x39, 0xf6, 0xd5, 0x0a, 0xd4, 0xb5, 0x54, 0x28, 0x7a, 0xf3, 0x76, | 989 | 0x7a, 0xef, 0x0c, 0xe8, 0xd1, 0x09, 0xe5, 0xf4, 0xed, 0x55, 0x68, 0x6c, |
| 995 | 0xe8, 0xbe, 0x4b, 0x14, 0x2f, 0x4e, 0xa7, 0x35, 0xfc, 0x34, 0x5d, 0x1b, | 990 | 0xaf, 0x52, 0xf4, 0xb6, 0x3d, 0xd0, 0x7d, 0x57, 0x2a, 0x5e, 0x9c, 0xcf, |
| 996 | 0xfe, 0x21, 0xfb, 0xfc, 0xad, 0xf9, 0x84, 0x95, 0x9d, 0x2e, 0x7a, 0x13, | 991 | 0x68, 0xf8, 0x49, 0xa6, 0x3e, 0xfc, 0xcf, 0xec, 0xf3, 0x37, 0xe6, 0x63, |
| 997 | 0x1d, 0x51, 0xcf, 0x29, 0xea, 0x39, 0x45, 0x3d, 0xa7, 0xa8, 0x67, 0xca, | 992 | 0x56, 0x6e, 0x96, 0xe8, 0x4d, 0x74, 0x44, 0x3d, 0xa7, 0xa8, 0xe7, 0x14, |
| 998 | 0x70, 0x30, 0x45, 0x3d, 0x53, 0x77, 0xdf, 0xa2, 0x4d, 0x3d, 0xce, 0x79, | 993 | 0xf5, 0x9c, 0xa2, 0x9e, 0x29, 0xc3, 0xa3, 0x29, 0xea, 0x99, 0xba, 0xfb, |
| 999 | 0x3c, 0x60, 0xcf, 0x63, 0x98, 0xf3, 0xf5, 0x17, 0xf8, 0x5f, 0x36, 0xb6, | 994 | 0x3a, 0x6d, 0xea, 0x6b, 0x9c, 0xc7, 0xe3, 0xf6, 0x3c, 0x86, 0x39, 0x5f, |
| 1000 | 0x3e, 0x6f, 0xfd, 0xad, 0x57, 0xc6, 0xd4, 0x3d, 0x3d, 0x87, 0x5f, 0x32, | 995 | 0x7f, 0x81, 0xbf, 0xb5, 0xb1, 0xf5, 0x59, 0xeb, 0xbf, 0x79, 0x65, 0x4c, |
| 1001 | 0xb6, 0xe7, 0xac, 0x98, 0x26, 0xe3, 0x92, 0xf1, 0xd9, 0xfa, 0xf3, 0x6f, | 996 | 0x0f, 0xcf, 0xcc, 0xe3, 0x97, 0x8c, 0xed, 0x3b, 0x56, 0x4c, 0x93, 0x71, |
| 1002 | 0x54, 0xb6, 0x28, 0x28, 0xb5, 0xac, 0x9d, 0x66, 0xfe, 0xbe, 0xb7, 0x30, | 997 | 0xc9, 0xf8, 0x6c, 0xfd, 0xf9, 0xb7, 0x29, 0x3b, 0x15, 0x94, 0x5b, 0xd6, |
| 1003 | 0xbe, 0x1b, 0x94, 0x9c, 0x5d, 0xed, 0x74, 0x53, 0xdf, 0xc1, 0xa8, 0xba, | 998 | 0x5e, 0xb3, 0xf0, 0xbf, 0xb7, 0x38, 0xbe, 0x9b, 0x95, 0xbc, 0x5d, 0xfd, |
| 1004 | 0x8c, 0xe7, 0x7a, 0x3c, 0x8a, 0xb9, 0xc5, 0xe7, 0x9f, 0x5f, 0x5b, 0x23, | 999 | 0x5d, 0x29, 0xf5, 0x1d, 0x8c, 0xaa, 0x2b, 0x79, 0xae, 0xc7, 0xa3, 0xf8, |
| 1005 | 0xf3, 0xe1, 0x3f, 0x7b, 0x4e, 0x7b, 0xb4, 0xfb, 0xbb, 0x8d, 0xe7, 0x32, | 1000 | 0xa8, 0xe3, 0xbd, 0xe7, 0xf7, 0x7a, 0x65, 0x3e, 0xfc, 0x97, 0xce, 0x69, |
| 1006 | 0x16, 0xb1, 0x45, 0xb1, 0x01, 0x2f, 0xed, 0xe5, 0xf2, 0xfc, 0x3d, 0xc4, | 1001 | 0x8f, 0x76, 0x7f, 0x77, 0xf2, 0x5c, 0xc6, 0x22, 0xb6, 0x28, 0x36, 0xe0, |
| 1007 | 0xd5, 0xc8, 0x46, 0xb4, 0x34, 0x3c, 0x6a, 0xf7, 0x51, 0x94, 0x14, 0xbf, | 1002 | 0xa5, 0xbd, 0x5c, 0x53, 0xf8, 0x0f, 0x71, 0x35, 0xb2, 0x0d, 0xed, 0xcd, |
| 1008 | 0x51, 0xf0, 0xce, 0x15, 0x0a, 0x8e, 0x86, 0x0c, 0xda, 0xcc, 0x10, 0x71, | 1003 | 0x8f, 0xd8, 0x7d, 0x94, 0x24, 0xc5, 0x6f, 0x14, 0xbc, 0xf5, 0x61, 0x05, |
| 1009 | 0x01, 0x28, 0x4e, 0xc2, 0xed, 0x89, 0x44, 0x90, 0xe8, 0x83, 0xbb, 0x24, | 1004 | 0xa7, 0x42, 0x06, 0x6d, 0xe6, 0x18, 0x71, 0x01, 0x28, 0x4d, 0xc2, 0xed, |
| 1010 | 0x12, 0xc6, 0xfc, 0xbe, 0xda, 0xf6, 0x53, 0xd0, 0x83, 0x7d, 0x8a, 0xde, | 1005 | 0x89, 0x44, 0x90, 0x18, 0x80, 0xbb, 0x2c, 0x12, 0xc6, 0xc2, 0x81, 0xfa, |
| 1011 | 0x02, 0xd4, 0x99, 0x63, 0xd4, 0xe3, 0x25, 0x8a, 0xee, 0x2f, 0x52, 0xe0, | 1006 | 0xce, 0x73, 0xd0, 0x83, 0x03, 0x8a, 0xde, 0xce, 0x58, 0x62, 0x8e, 0x53, |
| 1012 | 0x56, 0x58, 0x2e, 0x90, 0x1e, 0xc2, 0x96, 0x8c, 0xfc, 0x0e, 0xc3, 0x48, | 1007 | 0x8f, 0x57, 0x2a, 0xba, 0xbf, 0x44, 0x81, 0x5b, 0x61, 0xb9, 0x40, 0xe6, |
| 1013 | 0xff, 0xb6, 0xd0, 0x17, 0xed, 0x7e, 0x23, 0xed, 0xfe, 0x14, 0xc7, 0xae, | 1008 | 0x18, 0x76, 0x66, 0xe5, 0x77, 0x18, 0x46, 0xe6, 0x37, 0xc5, 0xbe, 0x24, |
| 1014 | 0xfb, 0x89, 0xaf, 0x6e, 0x57, 0xa4, 0x1d, 0x7b, 0x13, 0x70, 0x17, 0x45, | 1009 | 0xa6, 0xd0, 0xee, 0xcf, 0x71, 0xec, 0xba, 0x9f, 0xf8, 0xea, 0x76, 0x45, |
| 1015 | 0x36, 0xe0, 0xa9, 0x44, 0xf5, 0xf4, 0x42, 0x39, 0x85, 0xe5, 0xfc, 0xe9, | 1010 | 0x3a, 0x71, 0x38, 0x01, 0x77, 0x49, 0x64, 0x2b, 0x9e, 0x4c, 0x84, 0x67, |
| 1016 | 0xa9, 0xb2, 0xbc, 0x66, 0x45, 0xbd, 0x39, 0x59, 0x4a, 0x93, 0x43, 0xd8, | 1011 | 0x16, 0xcb, 0x29, 0x2c, 0xe7, 0xcf, 0x4c, 0x97, 0xe5, 0xc7, 0x56, 0xd4, |
| 1017 | 0x9e, 0x92, 0xba, 0x11, 0xbb, 0xae, 0x93, 0x7d, 0xf4, 0x24, 0x6a, 0x9b, | 1012 | 0x9b, 0x97, 0xa5, 0x3c, 0x79, 0x0c, 0x7b, 0x52, 0x52, 0x37, 0x62, 0xd7, |
| 1018 | 0xaf, 0x55, 0xf4, 0xf0, 0x23, 0xa8, 0x8b, 0xbe, 0xcd, 0x39, 0xec, 0x82, | 1013 | 0x75, 0xb2, 0x8f, 0xbe, 0x44, 0x7d, 0xdb, 0x0d, 0x8a, 0x1e, 0x7e, 0x98, |
| 1019 | 0x7e, 0xa6, 0x1d, 0x39, 0x59, 0xe6, 0xa5, 0x73, 0x72, 0x2c, 0x4e, 0x43, | 1014 | 0xf3, 0xd7, 0x83, 0xc6, 0xe8, 0x1b, 0xd0, 0xb5, 0x4e, 0xe4, 0x65, 0x59, |
| 1020 | 0xb9, 0x29, 0x05, 0x8f, 0xcf, 0x98, 0x96, 0xf7, 0x65, 0x28, 0xd7, 0x71, | 1015 | 0x90, 0xc9, 0xcb, 0x31, 0x3f, 0x03, 0xe5, 0xf6, 0x14, 0xac, 0x39, 0x06, |
| 1021 | 0xfe, 0x54, 0xc3, 0x8f, 0xeb, 0x68, 0x43, 0x1b, 0x76, 0x5a, 0xe8, 0x0e, | 1016 | 0x3c, 0x3e, 0xc3, 0xf0, 0xbf, 0xe3, 0xa8, 0xc5, 0x01, 0xce, 0x4f, 0x1f, |
| 1022 | 0x55, 0xd3, 0x57, 0x5b, 0x50, 0x41, 0xbf, 0xbc, 0x53, 0x43, 0xb4, 0x32, | 1017 | 0x7d, 0x45, 0xf0, 0xec, 0xee, 0xbd, 0x7e, 0x78, 0x0c, 0x0b, 0x47, 0x42, |
| 1023 | 0x12, 0x56, 0xae, 0xcf, 0x0c, 0xe7, 0xf5, 0x7f, 0xb4, 0x9a, 0xf2, 0x29, | 1018 | 0xb5, 0x78, 0x96, 0x58, 0x5b, 0x45, 0xdf, 0x7c, 0x5e, 0x43, 0x74, 0x4e, |
| 1024 | 0x4d, 0xa9, 0x0b, 0xaf, 0x57, 0xe6, 0xe3, 0xde, 0x85, 0xd7, 0x3d, 0x45, | 1019 | 0x24, 0xac, 0xdc, 0x92, 0x1d, 0x2d, 0xcc, 0xc1, 0x8b, 0x35, 0x05, 0x19, |
| 1025 | 0x1f, 0x5f, 0xbe, 0x4e, 0x1b, 0x81, 0xc2, 0x78, 0x53, 0x42, 0xfd, 0xea, | 1020 | 0xdf, 0x77, 0xbd, 0x5a, 0xf9, 0xe0, 0xeb, 0x50, 0x3a, 0x52, 0x7a, 0x30, |
| 1026 | 0x26, 0xab, 0x05, 0x5d, 0xf6, 0x35, 0x07, 0x86, 0x9c, 0x51, 0x9f, 0x03, | 1021 | 0x0e, 0x0b, 0xd5, 0x8b, 0x75, 0xff, 0x94, 0xf2, 0x96, 0x8a, 0x2a, 0x62, |
| 1027 | 0x1f, 0x58, 0xd1, 0x55, 0x72, 0xad, 0x14, 0xb1, 0x96, 0x3a, 0x9f, 0x13, | 1022 | 0x75, 0xf6, 0xfd, 0xe5, 0x1a, 0xb5, 0x31, 0xc6, 0x65, 0x07, 0x43, 0x5f, |
| 1028 | 0x75, 0xe1, 0x4d, 0xf4, 0xb7, 0xc9, 0x55, 0x8d, 0xbc, 0x17, 0x30, 0x8f, | 1023 | 0x54, 0xd3, 0x4d, 0x36, 0x13, 0x74, 0xd9, 0xd7, 0x1c, 0x48, 0x3b, 0xa3, |
| 1029 | 0xa1, 0xd6, 0xbf, 0x09, 0xf2, 0xfb, 0x7d, 0xda, 0x48, 0xa3, 0xd4, 0x65, | 1024 | 0x3e, 0x07, 0x7e, 0x6f, 0x45, 0xd7, 0xc9, 0xb5, 0x72, 0xc4, 0xda, 0x1b, |
| 1030 | 0x19, 0xb1, 0x39, 0x5d, 0x3b, 0x06, 0x2f, 0x36, 0xd1, 0xfe, 0x8a, 0x23, | 1025 | 0x7d, 0x4e, 0x34, 0x86, 0xb7, 0xd3, 0x07, 0xa7, 0xd6, 0xb5, 0xf0, 0xbf, |
| 1031 | 0xba, 0xb9, 0xcc, 0xe1, 0xc4, 0x7e, 0xe2, 0xb8, 0xc3, 0xe8, 0x45, 0x31, | 1026 | 0x80, 0x79, 0x1a, 0xf5, 0xfe, 0xed, 0x90, 0xdf, 0xef, 0xd0, 0x6e, 0x5a, |
| 1032 | 0xc7, 0xc8, 0xf8, 0x8a, 0x47, 0x12, 0xc0, 0xb3, 0xfd, 0x16, 0x1a, 0x43, | 1027 | 0xa4, 0x2e, 0xcb, 0x88, 0x1d, 0xea, 0x9a, 0xf8, 0x78, 0x9f, 0x69, 0x59, |
| 1033 | 0x1e, 0x2c, 0xb1, 0x6d, 0xf3, 0x90, 0x72, 0x75, 0xea, 0x43, 0x6b, 0xc8, | 1028 | 0x87, 0xcd, 0x13, 0x4a, 0x4b, 0xea, 0x5d, 0x2b, 0xea, 0x8c, 0x47, 0x4b, |
| 1034 | 0x59, 0x12, 0x55, 0x23, 0x01, 0xdf, 0x49, 0xb2, 0x81, 0xa2, 0x48, 0x9d, | 1029 | 0x23, 0x01, 0x73, 0x27, 0xc1, 0xd8, 0x11, 0x89, 0x2b, 0xd1, 0x6c, 0x9f, |
| 1035 | 0xe6, 0x44, 0x5c, 0x69, 0xce, 0xf4, 0x28, 0xcb, 0x33, 0xbd, 0xca, 0x92, | 1030 | 0x72, 0x7d, 0xb6, 0x5f, 0x59, 0x91, 0x95, 0xf2, 0x27, 0x94, 0xe5, 0x59, |
| 1036 | 0x8c, 0xb4, 0x7d, 0x48, 0x59, 0x9a, 0xf1, 0x20, 0xdd, 0xaf, 0x60, 0x7b, | 1031 | 0x29, 0x5f, 0x2c, 0x1b, 0x66, 0x59, 0xe0, 0x48, 0x22, 0x10, 0x2c, 0x96, |
| 1037 | 0x88, 0x72, 0xd5, 0xe4, 0xec, 0x38, 0xd3, 0xaf, 0x12, 0x63, 0xdf, 0x21, | 1032 | 0x5f, 0xc1, 0xb2, 0xd7, 0x5f, 0x2a, 0x1b, 0xa6, 0xad, 0x9a, 0x9c, 0x97, |
| 1038 | 0xc6, 0xea, 0x61, 0xb0, 0xef, 0x27, 0x12, 0xd5, 0x38, 0x44, 0x2c, 0xfd, | 1033 | 0x0a, 0x6c, 0xd6, 0xf4, 0x68, 0x9c, 0x3a, 0x2f, 0x8d, 0xf8, 0x6e, 0x7d, |
| 1039 | 0x71, 0x5a, 0x57, 0x51, 0x7a, 0x11, 0x5e, 0x19, 0xa9, 0xc0, 0xd8, 0xa0, | 1034 | 0xdd, 0xc8, 0x05, 0x1d, 0x9c, 0x83, 0xa3, 0x1c, 0x59, 0x2b, 0x71, 0x6e, |
| 1040 | 0xc9, 0xdf, 0xf5, 0x78, 0x61, 0xc4, 0xb2, 0x7a, 0x4c, 0xcb, 0xda, 0x6b, | 1035 | 0x83, 0xe1, 0x42, 0xbf, 0x56, 0x8d, 0x0d, 0xe6, 0x6f, 0xad, 0xcd, 0xeb, |
| 1041 | 0x1e, 0x52, 0x1a, 0xd9, 0x67, 0xd4, 0x19, 0x8f, 0x16, 0x47, 0x02, 0xe6, | 1036 | 0xe4, 0xbf, 0xbc, 0x6c, 0xb0, 0xcb, 0xd7, 0xb1, 0xbc, 0x6e, 0x1e, 0x2d, |
| 1042 | 0x16, 0xf6, 0xe9, 0x88, 0xc4, 0x95, 0x28, 0xfb, 0xbb, 0x9a, 0xfd, 0x2d, | 1037 | 0x60, 0xeb, 0xa9, 0x04, 0x06, 0x1d, 0x11, 0x62, 0x7e, 0x73, 0xc0, 0xdf, |
| 1043 | 0xcd, 0xf7, 0x97, 0xeb, 0x57, 0x64, 0x91, 0x7a, 0x85, 0x3a, 0x61, 0xd6, | 1038 | 0x03, 0x99, 0x1b, 0x3f, 0xae, 0xa7, 0x2c, 0x69, 0xe7, 0x74, 0xfc, 0x45, |
| 1044 | 0x01, 0xf6, 0x25, 0x02, 0xc1, 0x42, 0xbd, 0xa5, 0xac, 0x73, 0xf5, 0xd9, | 1039 | 0xfc, 0x72, 0x19, 0xb9, 0x26, 0xe5, 0xa6, 0x68, 0xdf, 0x82, 0x75, 0x96, |
| 1045 | 0x3a, 0xc0, 0x70, 0x22, 0xc8, 0x39, 0x15, 0x5b, 0xf7, 0x33, 0x76, 0x7d, | 1040 | 0x35, 0x64, 0x8a, 0x9d, 0xfb, 0x68, 0xe7, 0x33, 0xe1, 0xaf, 0xd5, 0xe3, |
| 1046 | 0x83, 0x18, 0xdb, 0x80, 0xb6, 0x61, 0xc1, 0xdf, 0x6b, 0xd4, 0xdc, 0x3c, | 1041 | 0x69, 0x56, 0x38, 0x9c, 0x98, 0x81, 0xb4, 0xa6, 0x12, 0x73, 0xef, 0xf2, |
| 1047 | 0xe5, 0xb0, 0x56, 0x62, 0x5e, 0x0e, 0x6f, 0x83, 0xe8, 0xa3, 0x5f, 0x77, | 1042 | 0xa0, 0x2a, 0xaa, 0x94, 0x90, 0xdb, 0x60, 0x42, 0xc6, 0x59, 0x89, 0xa8, |
| 1048 | 0xa5, 0xc4, 0xc6, 0xef, 0xf9, 0x72, 0x22, 0xa0, 0xe0, 0xb1, 0x40, 0xb6, | 1043 | 0x53, 0x0f, 0xca, 0xdc, 0x95, 0x30, 0xe6, 0x35, 0xa8, 0xac, 0x77, 0xc9, |
| 1049 | 0xa5, 0x1c, 0x95, 0x68, 0x0f, 0x89, 0x6d, 0x6e, 0xfc, 0xf2, 0x53, 0x86, | 1044 | 0x97, 0x65, 0xcc, 0x7e, 0xfa, 0x72, 0xdc, 0xd6, 0x51, 0xeb, 0xa5, 0x71, |
| 1050 | 0x1e, 0x5e, 0xa1, 0x70, 0xce, 0x02, 0x7a, 0xf3, 0x52, 0x05, 0x08, 0x8c, | 1045 | 0x4b, 0x7b, 0x45, 0x1d, 0xfd, 0x67, 0xea, 0x59, 0xd6, 0x8e, 0x4b, 0xba, |
| 1051 | 0x01, 0x6f, 0xa4, 0x2b, 0xb1, 0xda, 0x74, 0x40, 0xad, 0x0a, 0xa2, 0x37, | 1046 | 0x2d, 0x89, 0x96, 0x51, 0xb7, 0xc7, 0x12, 0x81, 0xf0, 0xd3, 0x88, 0x2b, |
| 1052 | 0x33, 0x35, 0x2e, 0x98, 0xc4, 0x78, 0x69, 0x2f, 0x48, 0xbf, 0x2e, 0xc3, | 1047 | 0x6d, 0x59, 0x27, 0xc6, 0x12, 0x52, 0xaf, 0x8f, 0xe5, 0xfb, 0x95, 0x95, |
| 1053 | 0x32, 0x2d, 0x67, 0xd3, 0x6e, 0xb6, 0xed, 0x0e, 0x64, 0x83, 0x2a, 0xe3, | 1048 | 0x97, 0xea, 0x4c, 0x15, 0xfc, 0x56, 0xc6, 0x23, 0xe3, 0xbb, 0x0e, 0x1b, |
| 1054 | 0xdd, 0x7e, 0x5e, 0x38, 0x46, 0xfc, 0x6f, 0x34, 0x5c, 0xc4, 0xff, 0x4a, | 1049 | 0xf6, 0xea, 0xf1, 0x38, 0xc4, 0xae, 0xa2, 0x58, 0x6f, 0xea, 0x7e, 0xda, |
| 1055 | 0x34, 0x9a, 0xbf, 0xb3, 0x96, 0xad, 0x92, 0x7b, 0x85, 0x76, 0xe0, 0x2e, | 1050 | 0x1f, 0xed, 0x06, 0xa8, 0x49, 0xc6, 0xdc, 0x79, 0x0c, 0x00, 0xee, 0xd8, |
| 1056 | 0x66, 0xbf, 0x6f, 0x19, 0xba, 0x7f, 0x94, 0x27, 0xd9, 0x74, 0xee, 0x7a, | 1051 | 0xdb, 0xce, 0xb1, 0x5a, 0x78, 0xcd, 0xac, 0xc5, 0x18, 0xbd, 0xb4, 0x3a, |
| 1057 | 0x9c, 0x31, 0xab, 0x9b, 0xed, 0x6e, 0x66, 0xbb, 0xeb, 0x34, 0x3d, 0x1a, | 1052 | 0x29, 0xd7, 0xa7, 0xcb, 0x18, 0x51, 0xd6, 0x1f, 0xf5, 0x97, 0xa1, 0x5c, |
| 1058 | 0x3f, 0x5b, 0x2e, 0x1b, 0x74, 0x40, 0xd7, 0xa4, 0x6c, 0x13, 0xdb, 0x5d, | 1053 | 0xe4, 0xfc, 0x1b, 0x35, 0x6f, 0xbf, 0x1f, 0x54, 0xff, 0x17, 0xd6, 0x98, |
| 1059 | 0xcd, 0x76, 0x7b, 0x35, 0x91, 0xef, 0x77, 0xd6, 0xba, 0x55, 0x72, 0x2f, | 1054 | 0x37, 0x7f, 0xad, 0x3a, 0x29, 0x9c, 0xaf, 0x1d, 0x5a, 0xd2, 0xc3, 0x78, |
| 1060 | 0x67, 0x1f, 0xb9, 0x76, 0xef, 0x91, 0x76, 0xcd, 0xd1, 0x7c, 0x5f, 0x47, | 1055 | 0x17, 0xb7, 0x2a, 0x0c, 0xbd, 0xfd, 0x82, 0xd2, 0x8d, 0x1b, 0x43, 0x7a, |
| 1061 | 0x13, 0xe8, 0x77, 0x44, 0x18, 0x63, 0x1b, 0x02, 0xfe, 0x2e, 0xc6, 0xdb, | 1056 | 0xec, 0x87, 0x8a, 0x1e, 0x1d, 0x50, 0x0c, 0xfa, 0x61, 0x10, 0xab, 0xb2, |
| 1062 | 0x26, 0xc6, 0x8e, 0x9c, 0x4d, 0x4c, 0x8d, 0x77, 0x88, 0x9f, 0x2b, 0x23, | 1057 | 0xef, 0xef, 0xeb, 0xfb, 0x50, 0x0f, 0x4b, 0x3f, 0xd2, 0xdf, 0x59, 0xf4, |
| 1063 | 0xd7, 0xa4, 0x9c, 0xd8, 0xda, 0x24, 0xf5, 0x2c, 0xf1, 0xc5, 0x47, 0xfd, | 1058 | 0xdb, 0x63, 0x2a, 0x8e, 0x47, 0xc6, 0xa6, 0x60, 0xb3, 0x3d, 0xa6, 0x15, |
| 1064 | 0x0a, 0xb6, 0x38, 0x71, 0x20, 0x41, 0xfc, 0xc7, 0x37, 0x68, 0x77, 0x7e, | 1059 | 0xb6, 0x7f, 0x7c, 0xd7, 0x74, 0x61, 0xe3, 0xde, 0x53, 0x0b, 0xc5, 0x40, |
| 1065 | 0xb4, 0x64, 0x6a, 0xb1, 0x66, 0x27, 0xe3, 0xa0, 0x59, 0x45, 0x5b, 0xcf, | 1060 | 0x36, 0x1d, 0x8d, 0xa2, 0xb7, 0xd9, 0x85, 0x0d, 0xa3, 0x37, 0xa9, 0x22, |
| 1066 | 0xd9, 0xdb, 0x32, 0xb6, 0x3d, 0x69, 0xb7, 0x1d, 0x57, 0x5a, 0x32, 0x75, | 1061 | 0x1b, 0xd4, 0xf9, 0x65, 0xf9, 0x6f, 0x85, 0xbc, 0xc5, 0x83, 0xf5, 0x59, |
| 1067 | 0x5a, 0x15, 0x63, 0xee, 0x91, 0xb3, 0xd8, 0x39, 0x27, 0x5a, 0x1a, 0x09, | 1062 | 0xce, 0x1d, 0x31, 0x74, 0xfd, 0x51, 0x99, 0xdb, 0x5a, 0x7e, 0xcb, 0xdc, |
| 1068 | 0x34, 0xaf, 0xe7, 0x24, 0xb9, 0x19, 0xdf, 0xbe, 0x37, 0xaf, 0x87, 0x76, | 1063 | 0x7a, 0xf9, 0x2d, 0xf3, 0x3c, 0x8b, 0xdf, 0xd5, 0xf0, 0xcf, 0x12, 0x59, |
| 1069 | 0xd1, 0x4b, 0x3b, 0xcc, 0xcd, 0x6f, 0x73, 0x66, 0x8f, 0x2a, 0x18, 0x07, | 1064 | 0x9a, 0x91, 0xd8, 0x0f, 0x77, 0x45, 0xa4, 0x0b, 0x77, 0x0d, 0x58, 0x56, |
| 1070 | 0xb5, 0x16, 0xeb, 0x76, 0xca, 0x7f, 0x72, 0x95, 0x86, 0xc7, 0x78, 0xad, | 1065 | 0x7f, 0xc0, 0xb2, 0xca, 0x42, 0xe4, 0x59, 0x81, 0xc6, 0xf0, 0x95, 0x4a, |
| 1071 | 0x16, 0xab, 0x87, 0xbf, 0x47, 0x3b, 0xd3, 0x7d, 0x62, 0x87, 0x5d, 0x67, | 1066 | 0x09, 0xa6, 0xb4, 0x66, 0xf4, 0x1f, 0x2d, 0x89, 0x55, 0x47, 0x66, 0xd1, |
| 1072 | 0xe5, 0x12, 0x99, 0x44, 0x36, 0x91, 0xa9, 0x8f, 0xe5, 0x66, 0x51, 0x3f, | 1067 | 0xf7, 0x35, 0xfc, 0x6c, 0x49, 0x3b, 0x26, 0xc6, 0xa7, 0x8f, 0x21, 0x6f, |
| 1073 | 0x82, 0x8d, 0xd5, 0x94, 0x67, 0x2b, 0xf9, 0xd0, 0x21, 0xe5, 0xf3, 0x94, | 1068 | 0x67, 0xdf, 0x5e, 0x50, 0xb4, 0x33, 0x91, 0x5f, 0x64, 0xd7, 0xfb, 0xd3, |
| 1074 | 0x27, 0xeb, 0xf2, 0xe2, 0xa1, 0x94, 0xc8, 0xa3, 0x44, 0x67, 0x46, 0x66, | 1069 | 0xf4, 0xcb, 0xb8, 0x86, 0x18, 0xfd, 0x83, 0x32, 0xd5, 0xa2, 0xe7, 0x12, |
| 1075 | 0xe1, 0x4c, 0x2a, 0x10, 0x7f, 0x02, 0x22, 0x5b, 0x8f, 0xd2, 0x2a, 0xf5, | 1070 | 0xa7, 0xfe, 0xa0, 0xfa, 0x17, 0x1b, 0x3b, 0x13, 0xef, 0x5a, 0x0c, 0xa7, |
| 1076 | 0x53, 0xbd, 0xbc, 0x57, 0x90, 0x11, 0x5a, 0xa5, 0x2d, 0x5b, 0x4e, 0xa6, | 1071 | 0xfc, 0xe4, 0x1a, 0xef, 0xcd, 0xbc, 0xd7, 0x6e, 0xca, 0x6c, 0xbb, 0x91, |
| 1077 | 0xeb, 0x39, 0xd7, 0x2e, 0xe3, 0x6f, 0xcb, 0x51, 0xe1, 0xa4, 0xad, 0x49, | 1072 | 0xb2, 0x17, 0x1b, 0xef, 0xcc, 0xac, 0xb0, 0xc7, 0x9c, 0x66, 0xe1, 0x4d, |
| 1078 | 0xdb, 0xff, 0x61, 0x45, 0xb5, 0x6e, 0x5e, 0xf3, 0x72, 0x9e, 0xdc, 0xe4, | 1073 | 0x7b, 0x45, 0xa7, 0xa2, 0x03, 0x0b, 0xc7, 0xcd, 0xeb, 0x88, 0x15, 0xaf, |
| 1079 | 0x05, 0x7a, 0xf0, 0x3a, 0x87, 0xd2, 0xe2, 0x91, 0x78, 0x4d, 0xfb, 0x4c, | 1074 | 0x5b, 0x8e, 0x59, 0xd2, 0x46, 0x97, 0xd2, 0x4a, 0x7b, 0x8a, 0x3b, 0x4b, |
| 1080 | 0xa7, 0x9d, 0x38, 0x9e, 0x58, 0xba, 0xb4, 0xcc, 0xf8, 0x34, 0x1e, 0x1b, | 1075 | 0x41, 0x4e, 0xad, 0x95, 0x44, 0xa2, 0xca, 0x5a, 0x5b, 0xff, 0xad, 0xca, |
| 1081 | 0xf1, 0x61, 0x84, 0x73, 0xfb, 0x6c, 0x42, 0xe2, 0xeb, 0x2c, 0x3c, 0x9a, | 1076 | 0xca, 0xd1, 0xe9, 0x6d, 0x77, 0xd1, 0x77, 0x1f, 0x57, 0xf3, 0xf3, 0x7d, |
| 1082 | 0xf6, 0xe0, 0x99, 0x84, 0x1f, 0x8f, 0x30, 0xfe, 0x4c, 0x24, 0x0c, 0xec, | 1077 | 0xde, 0x1e, 0x43, 0x5e, 0x7e, 0x3f, 0xda, 0x53, 0xd2, 0x8e, 0xe8, 0x35, |
| 1083 | 0x4f, 0x7b, 0xf1, 0x34, 0xed, 0x79, 0x34, 0xed, 0xa3, 0xbd, 0xd4, 0x63, | 1078 | 0xef, 0x6f, 0xed, 0x12, 0x23, 0x2e, 0xc9, 0x9c, 0xe7, 0x1e, 0x97, 0x31, |
| 1084 | 0x38, 0xdd, 0x66, 0x8f, 0xe1, 0xc9, 0xc4, 0xbf, 0xcb, 0x58, 0x83, 0x32, | 1079 | 0x61, 0xc9, 0x7b, 0xf0, 0xe3, 0x7a, 0xe2, 0x47, 0xf4, 0x3f, 0xc4, 0x8f, |
| 1085 | 0xd6, 0xcd, 0xf6, 0x58, 0x0b, 0x71, 0x7e, 0xd6, 0xd9, 0x79, 0x38, 0x91, | 1080 | 0xa5, 0x7f, 0xa2, 0xec, 0x59, 0xca, 0x21, 0x3c, 0x45, 0xe2, 0x9e, 0xf0, |
| 1086 | 0xb0, 0x71, 0xa0, 0x77, 0x99, 0x43, 0xe6, 0x81, 0x36, 0x3b, 0x20, 0x58, | 1081 | 0x16, 0xe1, 0x2b, 0x41, 0xca, 0x25, 0xfc, 0xa5, 0x68, 0x1b, 0x96, 0xf5, |
| 1087 | 0xa0, 0xf7, 0xc7, 0x61, 0x61, 0x8f, 0x39, 0x93, 0xfe, 0xdf, 0x4b, 0x79, | 1082 | 0x4d, 0x73, 0x01, 0x62, 0xb5, 0xfa, 0x20, 0x50, 0x87, 0x41, 0xca, 0xea, |
| 1088 | 0xa9, 0x53, 0x8e, 0x1f, 0xae, 0x8a, 0x68, 0x79, 0x24, 0x10, 0xeb, 0xa3, | 1083 | 0x48, 0x22, 0xce, 0x71, 0x52, 0xd7, 0xea, 0x75, 0x0e, 0xa8, 0x4d, 0x0e, |
| 1089 | 0xde, 0x9d, 0x11, 0xd1, 0x43, 0x4e, 0xef, 0x2b, 0x32, 0x87, 0x14, 0xe1, | 1084 | 0x74, 0xe3, 0x55, 0xd3, 0xe8, 0xdf, 0x8c, 0xbf, 0x44, 0x8f, 0xd7, 0xc2, |
| 1090 | 0x7a, 0x97, 0x0c, 0xc4, 0xad, 0x32, 0x43, 0xf4, 0x1d, 0x20, 0xce, 0x02, | 1085 | 0x61, 0x33, 0x48, 0x5c, 0x2a, 0x47, 0x67, 0x13, 0x27, 0x62, 0xad, 0x17, |
| 1091 | 0xf3, 0xf7, 0x38, 0x39, 0xbe, 0x9b, 0x38, 0x66, 0x13, 0x45, 0x46, 0x9d, | 1086 | 0x43, 0xa9, 0x78, 0x07, 0x61, 0x83, 0x31, 0xec, 0xd9, 0x4f, 0x26, 0x02, |
| 1092 | 0x56, 0x4d, 0xd9, 0x8f, 0x7c, 0x24, 0x06, 0x8a, 0x8e, 0xfe, 0x36, 0x3f, | 1087 | 0x7a, 0xfb, 0x56, 0xa6, 0x40, 0xab, 0x06, 0xdc, 0xf0, 0x4b, 0x2a, 0xc4, |
| 1093 | 0x5f, 0xba, 0x83, 0xf2, 0xfa, 0x81, 0xc2, 0xbc, 0x58, 0xd6, 0x0e, 0xb3, | 1088 | 0x98, 0xf1, 0x75, 0xc6, 0xf9, 0x4d, 0xe6, 0x15, 0xd4, 0x6d, 0x1f, 0x6d, |
| 1094 | 0x30, 0x37, 0x35, 0xf0, 0x57, 0xeb, 0xf1, 0x21, 0x5a, 0xc4, 0x48, 0x62, | 1089 | 0x48, 0xa5, 0xbd, 0x48, 0x3f, 0x41, 0xf2, 0x19, 0xa9, 0xcb, 0xb8, 0xd0, |
| 1095 | 0x1a, 0xe2, 0x9a, 0x9a, 0x6f, 0x3b, 0xaa, 0x14, 0x31, 0xff, 0xc0, 0xb8, | 1090 | 0xa0, 0xe0, 0x86, 0x06, 0xda, 0x27, 0x79, 0xd1, 0xe7, 0x43, 0x4e, 0xfb, |
| 1096 | 0xf8, 0x7e, 0x39, 0xa2, 0x4e, 0xa9, 0x8f, 0x68, 0x51, 0x24, 0x10, 0x9c, | 1091 | 0xff, 0x44, 0xb6, 0x31, 0x7a, 0xb3, 0xfa, 0x23, 0x0b, 0x33, 0xed, 0x36, |
| 1097 | 0xab, 0x4e, 0xb5, 0x19, 0xc1, 0x01, 0xe9, 0x2b, 0x4e, 0x59, 0xcf, 0xc7, | 1092 | 0xb4, 0xa8, 0x4a, 0xb9, 0xff, 0x28, 0x27, 0x30, 0x21, 0x5c, 0xad, 0xd2, |
| 1098 | 0x82, 0x91, 0x44, 0x01, 0x37, 0xfe, 0x3b, 0xf5, 0x2e, 0xd4, 0xa9, 0xc8, | 1093 | 0xf8, 0x0d, 0xc6, 0xbd, 0x52, 0xa7, 0x0a, 0x15, 0xc3, 0xf1, 0x59, 0xe5, |
| 1099 | 0x29, 0x7a, 0x55, 0x71, 0x74, 0x50, 0xf4, 0xe7, 0xc4, 0x4a, 0x73, 0x7a, | 1094 | 0xb4, 0xe1, 0xd2, 0x88, 0x8e, 0xbb, 0x46, 0x2b, 0xe1, 0x18, 0xd6, 0x2f, |
| 1100 | 0x5e, 0xe6, 0x59, 0x9c, 0x17, 0x62, 0x0e, 0xe7, 0xeb, 0x85, 0x7e, 0x2f, | 1095 | 0xae, 0x74, 0x20, 0x56, 0x22, 0xfc, 0x70, 0xb4, 0x16, 0x35, 0xfb, 0xac, |
| 1101 | 0xe5, 0xb6, 0x90, 0x0e, 0x5d, 0x8c, 0x4d, 0x36, 0xe7, 0x5c, 0x95, 0xcf, | 1096 | 0x6e, 0x77, 0xc4, 0xb2, 0x3c, 0x4b, 0x22, 0xb8, 0xf7, 0xa8, 0x06, 0x75, |
| 1102 | 0x5b, 0x38, 0x4f, 0xea, 0x76, 0xea, 0xfa, 0xb3, 0x8e, 0xdc, 0x79, 0x9d, | 1097 | 0x9f, 0x0b, 0x15, 0xcc, 0x43, 0xd6, 0x99, 0x7d, 0xb8, 0x8f, 0xfc, 0x6e, |
| 1103 | 0xef, 0xa3, 0xfa, 0xd2, 0xb5, 0x18, 0x0a, 0x3a, 0x03, 0x86, 0xd2, 0x88, | 1098 | 0x4e, 0x32, 0x88, 0xd5, 0xc4, 0xa2, 0x8b, 0xa9, 0xb6, 0xd6, 0x17, 0x12, |
| 1104 | 0xb9, 0x23, 0xf5, 0x4d, 0xce, 0xbe, 0xb6, 0x0d, 0xf4, 0xef, 0x7b, 0x4f, | 1099 | 0x0d, 0xdb, 0xe6, 0x38, 0x84, 0xfb, 0xaf, 0xc1, 0xe6, 0xec, 0x1a, 0xdc, |
| 1105 | 0x35, 0x7c, 0x16, 0x9b, 0xa9, 0x17, 0xa7, 0x6d, 0x67, 0x51, 0xc5, 0x65, | 1100 | 0xc9, 0xd8, 0xf9, 0x9c, 0x81, 0xee, 0x39, 0xf4, 0xd7, 0x3b, 0xc9, 0xff, |
| 1106 | 0x2c, 0xb1, 0xfd, 0x49, 0x1d, 0x5f, 0x91, 0xef, 0x23, 0x6a, 0xe7, 0x2c, | 1101 | 0x36, 0xa6, 0xd6, 0x61, 0x63, 0x76, 0x1b, 0xff, 0xeb, 0xc0, 0xdd, 0x3c, |
| 1107 | 0x50, 0x5b, 0xf2, 0xe7, 0x77, 0x53, 0xdf, 0x32, 0x0e, 0x15, 0x3f, 0x20, | 1102 | 0x36, 0xa5, 0xc4, 0xbf, 0x3f, 0x8d, 0x4d, 0xd9, 0x7a, 0xc4, 0x46, 0x37, |
| 1108 | 0x97, 0x7d, 0x27, 0xf4, 0x59, 0x64, 0x6d, 0xcc, 0x76, 0xd2, 0xdf, 0xaf, | 1103 | 0x62, 0x2b, 0x39, 0xc1, 0x5d, 0xa3, 0x5e, 0xea, 0xb6, 0x0d, 0x1b, 0xb2, |
| 1109 | 0x62, 0x5d, 0xe2, 0xdf, 0xb8, 0xc4, 0x52, 0xc4, 0x4b, 0xe8, 0xd7, 0x45, | 1104 | 0x6d, 0xb8, 0x97, 0x63, 0xb9, 0x97, 0xf3, 0xa1, 0x26, 0xb7, 0xd2, 0xc7, |
| 1110 | 0xf4, 0xd5, 0x6b, 0x32, 0xf7, 0xa0, 0x3d, 0x15, 0x08, 0x97, 0x28, 0xf7, | 1105 | 0x3c, 0xf0, 0x0e, 0x2f, 0xc5, 0x7d, 0xa3, 0xd7, 0x61, 0x0b, 0xe3, 0xe4, |
| 1111 | 0xe0, 0xd6, 0x8c, 0x0b, 0xb1, 0x61, 0x0f, 0xd6, 0x51, 0x27, 0xce, 0xa4, | 1106 | 0xed, 0x4b, 0xae, 0x43, 0xf7, 0xe8, 0x7d, 0xe8, 0x4a, 0x19, 0x5d, 0x73, |
| 1112 | 0xf8, 0xb9, 0x86, 0x75, 0xa3, 0x47, 0x67, 0x3a, 0xe9, 0x37, 0xeb, 0x46, | 1107 | 0x98, 0x6a, 0xbd, 0xb5, 0xe4, 0x3e, 0xdc, 0x43, 0x39, 0xb6, 0xed, 0xb5, |
| 1113 | 0xbd, 0x3c, 0xa6, 0xf3, 0x70, 0x63, 0x35, 0x8f, 0x3d, 0xb4, 0xcb, 0x36, | 1108 | 0x50, 0xb6, 0x68, 0xb1, 0x6a, 0xd4, 0xc4, 0x2d, 0x9f, 0x21, 0xb1, 0xf9, |
| 1114 | 0xc6, 0x86, 0x23, 0x09, 0x13, 0x9d, 0xd4, 0xd5, 0x13, 0x89, 0x06, 0xdc, | 1109 | 0xc0, 0xad, 0x7d, 0xc6, 0xee, 0x02, 0xb6, 0x38, 0x51, 0x62, 0x28, 0x62, |
| 1115 | 0x4b, 0xbd, 0x1d, 0x4a, 0x7c, 0x8a, 0x3a, 0x0a, 0xa3, 0x83, 0x73, 0xfc, | 1110 | 0xa3, 0xf9, 0xeb, 0x89, 0xbf, 0xc1, 0xe6, 0x51, 0x17, 0xee, 0x18, 0xed, |
| 1116 | 0x58, 0x42, 0xb5, 0xf3, 0xab, 0xdb, 0x33, 0xff, 0x62, 0x45, 0xa7, 0x8b, | 1111 | 0x52, 0x56, 0x8b, 0xad, 0xb8, 0x54, 0xce, 0x67, 0x94, 0xd8, 0xd7, 0xaa, |
| 1117 | 0x9c, 0xa2, 0x0b, 0x99, 0xcf, 0x8f, 0xe8, 0x81, 0xfe, 0x3b, 0x55, 0x17, | 1112 | 0xb4, 0x8c, 0xda, 0xf3, 0xac, 0x79, 0x23, 0x5d, 0xca, 0xba, 0xec, 0x9d, |
| 1118 | 0xf5, 0xd8, 0xb6, 0xcb, 0xc0, 0xf6, 0x5d, 0x75, 0xb4, 0xbb, 0x8c, 0xe5, | 1113 | 0x0e, 0x94, 0xcb, 0x5c, 0x5c, 0x83, 0xf1, 0xa6, 0xaf, 0x58, 0xe9, 0xfc, |
| 1119 | 0xaf, 0x1a, 0xa0, 0x0e, 0xa6, 0xea, 0xe1, 0x08, 0x79, 0x81, 0xe8, 0x41, | 1114 | 0x7c, 0xa6, 0xe9, 0x3e, 0x6e, 0x5f, 0xe4, 0x57, 0x9f, 0xf4, 0x2d, 0xd0, |
| 1120 | 0xda, 0xbc, 0x8f, 0x63, 0xee, 0xe6, 0x3d, 0x1f, 0x1e, 0x4f, 0x7c, 0x97, | 1115 | 0xbb, 0x0e, 0xa8, 0xc2, 0x2b, 0xdd, 0xc8, 0xd9, 0xf3, 0x59, 0xc2, 0x7e, |
| 1121 | 0xbf, 0xc3, 0xca, 0x5d, 0x19, 0xf1, 0x79, 0xf1, 0xb7, 0x7f, 0x70, 0xe4, | 1116 | 0x6a, 0x70, 0xc4, 0x9b, 0xe7, 0x12, 0xf3, 0xd8, 0x97, 0x95, 0x72, 0x71, |
| 1122 | 0x62, 0x6f, 0xa1, 0xdc, 0x16, 0x96, 0xb3, 0xac, 0xcd, 0x67, 0xe3, 0x4a, | 1117 | 0xac, 0x94, 0x9b, 0xe3, 0x99, 0x93, 0xf4, 0xe1, 0x7e, 0xea, 0xa7, 0x8b, |
| 1123 | 0x51, 0xb4, 0x84, 0x71, 0x65, 0x7f, 0x22, 0x10, 0x7e, 0xc6, 0x8e, 0x7d, | 1118 | 0x73, 0xd4, 0x45, 0xbd, 0x7c, 0x2e, 0x75, 0x8a, 0x31, 0x62, 0x1b, 0x3e, |
| 1124 | 0x4e, 0xda, 0x8e, 0xd8, 0x47, 0x8f, 0x6d, 0x1b, 0xcb, 0xce, 0xda, 0xc6, | 1119 | 0x57, 0xe8, 0xa7, 0x2f, 0x5b, 0x8a, 0x72, 0xa3, 0x0f, 0x8f, 0x68, 0x25, |
| 1125 | 0xe4, 0x59, 0x0e, 0xd5, 0x9f, 0x9a, 0xea, 0x73, 0x39, 0xbb, 0x70, 0x26, | 1120 | 0xf4, 0x31, 0xe1, 0x19, 0x07, 0x6e, 0x3d, 0x6c, 0xac, 0xe3, 0x18, 0xbe, |
| 1126 | 0xf5, 0x5e, 0xdb, 0x8e, 0xd3, 0x82, 0x8f, 0x0e, 0x38, 0x06, 0x9c, 0x68, | 1121 | 0xc4, 0x36, 0x44, 0xae, 0x46, 0xad, 0x06, 0xf9, 0xb2, 0x3d, 0xc4, 0xec, |
| 1127 | 0x33, 0x2f, 0xa5, 0xbe, 0xab, 0x19, 0x6f, 0x8a, 0x78, 0x30, 0x4f, 0x1d, | 1122 | 0x72, 0xe3, 0x37, 0xd6, 0x23, 0xde, 0x76, 0xbb, 0x6c, 0x15, 0xcb, 0x3e, |
| 1128 | 0xfe, 0x0b, 0x94, 0x0e, 0x64, 0xad, 0x12, 0xfe, 0x6e, 0x0e, 0x89, 0xbe, | 1123 | 0x3f, 0xe0, 0xc7, 0x8d, 0xb4, 0xef, 0xb2, 0x64, 0x94, 0x7a, 0x77, 0x93, |
| 1129 | 0xaf, 0xc2, 0xad, 0xc3, 0x0e, 0x14, 0x0d, 0x28, 0x78, 0xd2, 0xac, 0xc7, | 1124 | 0x53, 0xb5, 0x52, 0xe7, 0x9c, 0x63, 0xea, 0xf5, 0x0e, 0xda, 0xb3, 0x33, |
| 1130 | 0x90, 0x37, 0x87, 0xbb, 0x6a, 0xf2, 0x52, 0x7b, 0x9e, 0x2e, 0x1e, 0x3f, | 1125 | 0xb9, 0x86, 0xf3, 0xa0, 0xa1, 0x32, 0xd9, 0xc7, 0x79, 0xf0, 0xc2, 0x9d, |
| 1131 | 0xfa, 0x8c, 0xc4, 0x85, 0x7b, 0x47, 0x3d, 0xf0, 0x25, 0x15, 0x78, 0x88, | 1126 | 0x6c, 0x47, 0x27, 0xe5, 0x72, 0x25, 0xd7, 0x71, 0x2e, 0xea, 0xe0, 0x49, |
| 1132 | 0x2b, 0x65, 0x46, 0x3d, 0xf5, 0xaa, 0xa1, 0x32, 0x69, 0xe2, 0x6b, 0x19, | 1127 | 0x76, 0x70, 0x2e, 0x80, 0xbb, 0xa8, 0xcb, 0xfb, 0x42, 0xbf, 0x56, 0x7a, |
| 1133 | 0xd2, 0xa6, 0x07, 0xc2, 0xb8, 0x93, 0xf3, 0x52, 0xfe, 0xc0, 0x95, 0xb8, | 1128 | 0x6b, 0x65, 0x18, 0x6d, 0x9c, 0xbf, 0x28, 0x36, 0xa7, 0xea, 0xc3, 0x3b, |
| 1134 | 0x83, 0xe5, 0x36, 0xf0, 0xde, 0x86, 0xd1, 0x6a, 0x1e, 0x5e, 0x1e, 0xd3, | 1129 | 0x24, 0xee, 0x3b, 0x99, 0x90, 0x19, 0x3f, 0x26, 0x17, 0xa6, 0xf5, 0x1b, |
| 1135 | 0x79, 0x34, 0xe0, 0xf6, 0xe1, 0x5a, 0x44, 0xab, 0xf5, 0xa0, 0x5f, 0x75, | 1130 | 0x3d, 0xfc, 0x5d, 0x94, 0xb3, 0x88, 0xe3, 0x22, 0xa7, 0xc4, 0xd7, 0xa2, |
| 1136 | 0xa0, 0x7a, 0x40, 0xf4, 0xae, 0x62, 0xe5, 0x02, 0x05, 0xe6, 0xa7, 0x8b, | 1131 | 0x9c, 0x2e, 0x94, 0x19, 0xcf, 0x5a, 0x0f, 0x7b, 0xe1, 0x77, 0xb1, 0x6c, |
| 1137 | 0xa1, 0xce, 0xfd, 0x38, 0xdf, 0xfd, 0x53, 0xb2, 0xbe, 0x6c, 0x0d, 0xd9, | 1132 | 0x39, 0xcb, 0xae, 0xa6, 0x9c, 0xab, 0x29, 0xff, 0xbc, 0xe4, 0xa7, 0xd1, |
| 1138 | 0x98, 0x2e, 0x3a, 0x16, 0x3b, 0xf9, 0x57, 0xce, 0x85, 0xc8, 0x2b, 0x7d, | 1133 | 0x4d, 0x39, 0xe7, 0x0c, 0xbb, 0xc9, 0x51, 0x75, 0xdc, 0x4f, 0xdd, 0x1f, |
| 1139 | 0x48, 0xac, 0x15, 0x1d, 0x7f, 0x12, 0x36, 0x30, 0xb2, 0x54, 0x74, 0xb1, | 1134 | 0x48, 0x95, 0xa1, 0x9a, 0xf3, 0xfc, 0x39, 0xfe, 0xde, 0x41, 0x3f, 0x7a, |
| 1140 | 0xcc, 0x47, 0x7d, 0x01, 0x67, 0xe7, 0x7f, 0x2a, 0x67, 0x95, 0xb8, 0xaf, | 1135 | 0x7e, 0xd0, 0xc2, 0x99, 0x90, 0x86, 0x41, 0xad, 0x0c, 0xbd, 0xc1, 0xad, |
| 1141 | 0x87, 0x87, 0x6c, 0x8e, 0xe3, 0x67, 0xbe, 0xa8, 0xc7, 0x45, 0xe7, 0xe4, | 1136 | 0xe4, 0xe5, 0x32, 0x57, 0xcc, 0xa7, 0x8c, 0x0a, 0xc6, 0x75, 0xc4, 0x5d, |
| 1142 | 0x34, 0x6e, 0xd5, 0x80, 0xbf, 0xc8, 0xb8, 0x19, 0xb7, 0x71, 0x9e, 0xf6, | 1137 | 0xcd, 0x3a, 0xb6, 0x07, 0xdd, 0x48, 0x7b, 0x11, 0x75, 0x19, 0x51, 0xda, |
| 1143 | 0x26, 0xd4, 0xa5, 0x2e, 0xa8, 0xb3, 0x5c, 0x4c, 0x9c, 0x47, 0x4c, 0x1d, | 1138 | 0xb8, 0x0b, 0x03, 0x9a, 0x02, 0x17, 0xf1, 0xb0, 0x94, 0xfe, 0xb4, 0x93, |
| 1144 | 0xed, 0xc3, 0xcc, 0xb5, 0x86, 0xcb, 0xd1, 0xa5, 0x29, 0xee, 0x6d, 0xf5, | 1139 | 0x71, 0xd7, 0x15, 0x91, 0xff, 0x68, 0x27, 0xe4, 0x60, 0xd5, 0x11, 0x23, |
| 1145 | 0x8b, 0x24, 0xa7, 0xf6, 0x57, 0x1a, 0x50, 0xcb, 0x18, 0xff, 0xb7, 0x6b, | 1140 | 0xfe, 0x82, 0x12, 0x68, 0x73, 0xa9, 0xf7, 0x51, 0x47, 0x15, 0x38, 0x33, |
| 1146 | 0x70, 0x16, 0x19, 0x8a, 0x9a, 0xa8, 0x6f, 0x42, 0xbc, 0x0a, 0xce, 0x0a, | 1141 | 0xf8, 0x25, 0x6c, 0x64, 0x5f, 0x7d, 0x29, 0x0f, 0x73, 0x93, 0xbf, 0x53, |
| 1147 | 0x03, 0x0a, 0x73, 0x66, 0xf4, 0x69, 0x10, 0xec, 0x89, 0x16, 0x19, 0xf7, | 1142 | 0x72, 0x36, 0x7e, 0x7a, 0x90, 0x1c, 0x79, 0xdc, 0x9a, 0x67, 0x88, 0xdd, |
| 1148 | 0xe0, 0xb6, 0x14, 0xac, 0xd2, 0x08, 0xf3, 0xa1, 0x88, 0x41, 0x8e, 0x1b, | 1143 | 0x44, 0x70, 0xcf, 0xd1, 0x2a, 0x0c, 0x0e, 0x5e, 0x87, 0x6d, 0x2c, 0xb7, |
| 1149 | 0xf0, 0x15, 0xd1, 0x3f, 0x56, 0x93, 0x57, 0xac, 0x1d, 0x16, 0x39, 0x3c, | 1144 | 0x2b, 0x55, 0x0d, 0x63, 0x68, 0x99, 0x5d, 0x67, 0x84, 0xfe, 0x35, 0x90, |
| 1150 | 0xe4, 0x1b, 0x86, 0xbf, 0x0d, 0xcc, 0xe1, 0x5b, 0xf4, 0xe0, 0x24, 0xf3, | 1145 | 0xbc, 0x0f, 0x2b, 0x53, 0xf5, 0xc1, 0xa3, 0x4a, 0x8c, 0x3a, 0xf4, 0xa2, |
| 1151 | 0xd8, 0xd5, 0xd4, 0xfd, 0x48, 0xe2, 0x1e, 0x34, 0xa6, 0x8e, 0x58, 0x1e, | 1146 | 0x3f, 0xb9, 0xd1, 0xd6, 0x69, 0x62, 0x5f, 0x27, 0xb6, 0x1e, 0xbd, 0x02, |
| 1152 | 0xf2, 0xc8, 0x22, 0xa3, 0xf6, 0x4c, 0x17, 0x62, 0xf4, 0x0d, 0xe1, 0x47, | 1147 | 0x7b, 0xf6, 0x6d, 0xc1, 0x5d, 0x47, 0x99, 0xbf, 0xda, 0xb6, 0xac, 0xa2, |
| 1153 | 0x6b, 0xe8, 0x1b, 0x3e, 0x64, 0x12, 0xea, 0x71, 0xb2, 0x0b, 0x74, 0x8c, | 1148 | 0x77, 0xdf, 0x75, 0xca, 0x06, 0xb6, 0xb7, 0x7b, 0x98, 0xf6, 0x4c, 0x9b, |
| 1154 | 0xae, 0xc7, 0xd7, 0x46, 0x67, 0x61, 0x3c, 0xb1, 0x01, 0x77, 0x66, 0xc8, | 1149 | 0xbe, 0x7f, 0xaf, 0x91, 0x5b, 0xe6, 0xd8, 0xa2, 0xf8, 0x6b, 0xaf, 0x43, |
| 1155 | 0x95, 0xfa, 0xaf, 0xc2, 0x1d, 0xc3, 0x57, 0xe1, 0xf6, 0x9d, 0x46, 0x70, | 1150 | 0x97, 0x6d, 0x7b, 0x79, 0xbd, 0xed, 0xc8, 0xce, 0x67, 0x9e, 0xf3, 0xb7, |
| 1156 | 0x03, 0x75, 0xbd, 0x76, 0x98, 0x81, 0x72, 0xba, 0xb4, 0x5b, 0xd0, 0x95, | 1151 | 0xd6, 0xa3, 0xde, 0x52, 0x7b, 0x7e, 0x55, 0xea, 0xad, 0x25, 0xc1, 0xdc, |
| 1157 | 0xf0, 0x45, 0xea, 0x22, 0xaf, 0xa7, 0x2c, 0x0a, 0x1c, 0xe6, 0x5f, 0x2d, | 1152 | 0xbf, 0x96, 0xb9, 0x57, 0xc1, 0x5e, 0x7a, 0xb3, 0x8b, 0xc9, 0x1b, 0xbd, |
| 1158 | 0x5e, 0x8a, 0x17, 0x35, 0x28, 0xfe, 0xdd, 0xf5, 0x2f, 0x31, 0xb7, 0x17, | 1153 | 0xc8, 0x68, 0x41, 0xea, 0xa3, 0x38, 0x0f, 0x0d, 0x05, 0x7b, 0x79, 0x8b, |
| 1159 | 0xd9, 0x11, 0x9d, 0x69, 0xfc, 0xc0, 0x7a, 0x50, 0xa3, 0x7f, 0x47, 0x10, | 1154 | 0x65, 0x6c, 0x5b, 0x7e, 0x9f, 0x2f, 0xc8, 0xfc, 0xb6, 0xa3, 0x86, 0xf1, |
| 1160 | 0x9f, 0xd3, 0xf0, 0xbc, 0xf5, 0xd0, 0x2a, 0xb9, 0x7e, 0x9b, 0x13, 0xa5, | 1155 | 0x75, 0x43, 0x68, 0x9d, 0x72, 0xaf, 0x76, 0x69, 0xce, 0x7c, 0xc5, 0x39, |
| 1161 | 0x2a, 0xaf, 0x49, 0x9b, 0x82, 0x4b, 0x75, 0x44, 0xe2, 0x8f, 0x6b, 0x33, | 1156 | 0x93, 0x3c, 0xd1, 0x6e, 0x2b, 0xf1, 0x25, 0xdb, 0x76, 0xaf, 0xcf, 0x36, |
| 1162 | 0x6b, 0x25, 0xcf, 0x96, 0x27, 0x2f, 0x24, 0x16, 0x3f, 0x91, 0xf0, 0xa2, | 1157 | 0xa3, 0x73, 0x74, 0x7a, 0xfb, 0xc5, 0x3a, 0x65, 0x9c, 0x8b, 0xe2, 0x3c, |
| 1163 | 0x37, 0x95, 0xe3, 0x56, 0x37, 0x65, 0x84, 0x53, 0xb9, 0x51, 0xda, 0x27, | 1158 | 0xeb, 0xfd, 0x82, 0x65, 0x81, 0x45, 0x45, 0x2c, 0xbb, 0xb3, 0xd0, 0xff, |
| 1164 | 0x71, 0x25, 0x8a, 0xf5, 0xfc, 0x5d, 0xd2, 0xa7, 0xb7, 0xc4, 0x91, 0x60, | 1159 | 0x41, 0x8b, 0x31, 0xc9, 0xe9, 0x32, 0x1c, 0x18, 0x09, 0xfe, 0x57, 0x25, |
| 1165 | 0x9b, 0x4d, 0x9c, 0x0b, 0xda, 0x6b, 0x9f, 0x03, 0x25, 0x46, 0x73, 0xce, | 1160 | 0x5e, 0xeb, 0xa4, 0xcc, 0x0a, 0xb1, 0xe4, 0xef, 0xac, 0x3d, 0xeb, 0x64, |
| 1166 | 0x56, 0xfb, 0x56, 0xd0, 0x56, 0x35, 0x54, 0xf4, 0xf5, 0x70, 0xac, 0xb4, | 1161 | 0x5e, 0x3e, 0x42, 0x43, 0x86, 0xe2, 0xba, 0xe4, 0xb3, 0x6b, 0xb0, 0x3e, |
| 1167 | 0x55, 0xd6, 0xbb, 0x83, 0xba, 0xf0, 0xf4, 0xad, 0xa2, 0xbd, 0xce, 0x42, | 1162 | 0x25, 0xb2, 0xb6, 0x63, 0x43, 0xca, 0x96, 0xcb, 0x5f, 0x94, 0xab, 0x8f, |
| 1168 | 0x59, 0x5f, 0x2b, 0xf1, 0x01, 0x8c, 0xeb, 0x16, 0x8e, 0x9a, 0x95, 0x79, | 1163 | 0x36, 0xa3, 0x25, 0x77, 0xdb, 0x32, 0xb5, 0xd3, 0xae, 0xee, 0xd9, 0xab, |
| 1169 | 0x7e, 0xda, 0x8c, 0x5b, 0x53, 0x51, 0xb4, 0xa5, 0x6a, 0xa3, 0x27, 0x65, | 1164 | 0xe2, 0xe9, 0xd0, 0x26, 0xc5, 0x3f, 0x53, 0xe2, 0x70, 0x3d, 0xba, 0xf6, |
| 1170 | 0xad, 0xca, 0x95, 0xc3, 0xb0, 0x68, 0x8d, 0xe8, 0x62, 0x32, 0x8f, 0xa7, | 1165 | 0xca, 0xb7, 0x9f, 0x7c, 0x37, 0xa6, 0x4c, 0xcd, 0x1c, 0x60, 0xb9, 0x65, |
| 1171 | 0x7a, 0x73, 0x8e, 0xd3, 0xe9, 0x9a, 0x5f, 0x29, 0xc8, 0xde, 0x83, 0x18, | 1166 | 0x58, 0xbf, 0xb7, 0x16, 0x73, 0x38, 0xd6, 0xdb, 0xcd, 0xff, 0xa2, 0xbc, |
| 1172 | 0xf3, 0x8f, 0x39, 0x91, 0x16, 0x58, 0x29, 0x91, 0x3b, 0x6e, 0xf9, 0x98, | 1167 | 0x33, 0x43, 0xc6, 0xb3, 0xa2, 0x10, 0xcb, 0xeb, 0x71, 0xdf, 0x5e, 0xf1, |
| 1173 | 0x53, 0x7a, 0x22, 0xfa, 0xc6, 0xc5, 0x0e, 0xa3, 0xe3, 0x15, 0x25, 0x88, | 1168 | 0x21, 0xf9, 0xdd, 0x82, 0xde, 0xa5, 0xf5, 0x85, 0x38, 0xff, 0x37, 0x9c, |
| 1174 | 0xeb, 0x29, 0x43, 0x59, 0x5f, 0x27, 0x5e, 0x08, 0xe9, 0xbe, 0xef, 0x2a, | 1169 | 0x97, 0x2e, 0xe5, 0x06, 0xe2, 0x42, 0x8c, 0xb8, 0x40, 0x9b, 0x52, 0xda, |
| 1175 | 0xfa, 0x99, 0x0d, 0x78, 0x05, 0x3f, 0xe3, 0xb5, 0xa2, 0xbe, 0x09, 0x3c, | 1170 | 0x89, 0x0b, 0xd7, 0x17, 0x70, 0xc1, 0x43, 0x5c, 0x58, 0x93, 0x7d, 0x9b, |
| 1176 | 0x94, 0x79, 0x15, 0xa7, 0x28, 0xab, 0xda, 0xf7, 0xa1, 0xb5, 0xcc, 0x78, | 1171 | 0xf2, 0x88, 0x2f, 0xbe, 0x57, 0x9e, 0xbb, 0x29, 0xcf, 0xb1, 0xd0, 0x1c, |
| 1177 | 0x86, 0xe3, 0x77, 0x2b, 0x6f, 0x65, 0xa6, 0xda, 0xe2, 0x55, 0x58, 0xbd, | 1172 | 0xc0, 0x96, 0x67, 0x19, 0x79, 0x4c, 0x2d, 0xe7, 0xd0, 0x62, 0x7c, 0x50, |
| 1178 | 0x53, 0xec, 0x4f, 0x0f, 0xc6, 0x89, 0xbd, 0x6d, 0x66, 0x85, 0x70, 0x79, | 1173 | 0x94, 0x11, 0x5b, 0xcf, 0xcb, 0x28, 0xb3, 0xd8, 0x94, 0x45, 0xb9, 0x7f, |
| 1179 | 0x89, 0x4f, 0x94, 0xbf, 0x45, 0xb0, 0x85, 0xfe, 0x41, 0x3b, 0xb0, 0xc7, | 1174 | 0x8f, 0x06, 0x7b, 0x7d, 0xe0, 0xb2, 0x3c, 0xeb, 0xf7, 0xbe, 0xcb, 0x1c, |
| 1180 | 0xd0, 0x6a, 0x63, 0xb2, 0x33, 0x09, 0x1b, 0x4b, 0x73, 0x7a, 0x8e, 0x28, | 1175 | 0x41, 0x7e, 0x13, 0x2f, 0x9a, 0xeb, 0x89, 0x73, 0xcb, 0x88, 0x7b, 0x2e, |
| 1181 | 0x6d, 0xa3, 0xbe, 0x52, 0x94, 0xfa, 0xf2, 0x7e, 0x90, 0x5b, 0xb3, 0x38, | 1176 | 0x8e, 0x4b, 0xb0, 0x4e, 0x64, 0x73, 0xd1, 0x2f, 0xa4, 0x6d, 0xd1, 0xc9, |
| 1182 | 0x57, 0xf7, 0x3f, 0xad, 0x11, 0xef, 0xf9, 0x75, 0x2b, 0x98, 0x83, 0x55, | 1177 | 0x52, 0x47, 0x7e, 0x1e, 0x8a, 0xf3, 0xec, 0xa4, 0x1f, 0xbb, 0x51, 0x1d, |
| 1183 | 0x72, 0x3c, 0xef, 0xf6, 0xc5, 0xad, 0xd2, 0xdc, 0x58, 0x9a, 0x7f, 0xa0, | 1178 | 0xd1, 0xa3, 0x37, 0x39, 0x64, 0xce, 0x88, 0xf2, 0x43, 0xed, 0x85, 0xbe, |
| 1184 | 0x88, 0x4d, 0x06, 0xc9, 0xed, 0x3b, 0x71, 0x69, 0x48, 0x6f, 0xfd, 0xae, | 1179 | 0xfe, 0xbb, 0xd2, 0x50, 0xd3, 0x4f, 0x39, 0x4f, 0x28, 0xb7, 0x70, 0x5c, |
| 1185 | 0x22, 0x65, 0xf5, 0xf0, 0x06, 0xa5, 0xd0, 0xcf, 0xcb, 0x38, 0x39, 0x22, | 1180 | 0xfe, 0xd2, 0xaa, 0xa8, 0x27, 0x12, 0xe8, 0x48, 0xbc, 0x2f, 0x36, 0xde, |
| 1186 | 0x7d, 0x48, 0x5f, 0x13, 0xcc, 0xc9, 0x72, 0x63, 0x10, 0x5f, 0x7a, 0xc4, | 1181 | 0x90, 0xcd, 0xf3, 0x4b, 0x75, 0x28, 0x6e, 0x95, 0xd3, 0xf6, 0x9d, 0x46, |
| 1187 | 0x9e, 0x4b, 0xf1, 0x27, 0x3f, 0x96, 0x73, 0x4c, 0xae, 0x3e, 0x1f, 0x0f, | 1182 | 0xe0, 0xe2, 0x6a, 0xf6, 0x30, 0xef, 0xa0, 0xf0, 0x19, 0x93, 0x6d, 0x15, |
| 1188 | 0x17, 0xed, 0xd5, 0x87, 0xb5, 0x99, 0x15, 0x58, 0xcd, 0xbc, 0x76, 0x75, | 1183 | 0xfb, 0xaa, 0x23, 0x96, 0x84, 0x0a, 0x76, 0xb0, 0x46, 0x61, 0xde, 0xd0, |
| 1189 | 0xa6, 0x85, 0xba, 0xdf, 0x48, 0x7c, 0x67, 0x46, 0xa0, 0xe5, 0x74, 0x7c, | 1184 | 0x16, 0xb5, 0xed, 0x61, 0x17, 0xf5, 0x75, 0x42, 0xf9, 0x98, 0x70, 0x66, |
| 1190 | 0xce, 0x3e, 0x74, 0xff, 0x24, 0x56, 0xf0, 0xfe, 0xcf, 0x9d, 0xa8, 0x68, | 1185 | 0x9b, 0x63, 0xc4, 0x95, 0x55, 0xc4, 0x95, 0xea, 0xa4, 0x12, 0xf5, 0x46, |
| 1191 | 0x61, 0x79, 0xfb, 0xbe, 0x29, 0xf8, 0x7d, 0xae, 0xcc, 0x47, 0x78, 0x98, | 1186 | 0x1a, 0xb7, 0xd5, 0x20, 0xd0, 0xf6, 0x28, 0xfb, 0xac, 0x21, 0xcf, 0xbc, |
| 1192 | 0x1d, 0xe7, 0xf7, 0xda, 0x1c, 0xb1, 0xc5, 0xce, 0xbd, 0xae, 0xb6, 0xe7, | 1187 | 0x89, 0xb1, 0x36, 0xc9, 0x3e, 0x57, 0xb1, 0xcf, 0xb5, 0xd9, 0x2d, 0x6c, |
| 1193 | 0x5c, 0x38, 0x82, 0x85, 0x63, 0x66, 0x31, 0xf3, 0xaf, 0xba, 0xe0, 0xf9, | 1188 | 0x57, 0xb0, 0x55, 0xc5, 0x9c, 0x7d, 0x70, 0x7b, 0x69, 0x07, 0x23, 0x0d, |
| 1194 | 0x9c, 0x50, 0x67, 0x16, 0x5a, 0xc0, 0x03, 0xe9, 0x4b, 0xf4, 0x72, 0xa2, | 1189 | 0x4e, 0x84, 0x17, 0xff, 0x02, 0x98, 0x81, 0x98, 0xca, 0xfc, 0x7d, 0x5e, |
| 1195 | 0x26, 0xa7, 0x97, 0x4f, 0x2a, 0x7b, 0x3e, 0x76, 0xec, 0x49, 0x48, 0xdf, | 1190 | 0x52, 0x72, 0xa9, 0x03, 0xb7, 0x2e, 0xcb, 0x08, 0x96, 0x6a, 0xf0, 0x0c, |
| 1196 | 0x45, 0x36, 0x2f, 0x6d, 0xcc, 0x94, 0x22, 0xee, 0x15, 0x1d, 0x49, 0x7b, | 1191 | 0x7b, 0x25, 0x1e, 0xa1, 0x2f, 0x54, 0xa7, 0xec, 0xb1, 0xf1, 0x56, 0x45, |
| 1197 | 0xba, 0x5f, 0x64, 0x5a, 0xbb, 0x53, 0xec, 0xd8, 0xc2, 0x08, 0x65, 0xe8, | 1192 | 0xd9, 0x3e, 0x05, 0x57, 0x85, 0xbe, 0xae, 0xa4, 0x67, 0xe6, 0x31, 0x5f, |
| 1198 | 0xb6, 0xe7, 0x2d, 0xc7, 0x25, 0x8f, 0x9c, 0x17, 0x9f, 0x65, 0x4c, 0x85, | 1193 | 0xa5, 0x3e, 0x7a, 0x26, 0x04, 0x1b, 0xd3, 0xc4, 0xc6, 0x63, 0x4a, 0x7e, |
| 1199 | 0xbe, 0x6f, 0x73, 0xe5, 0xf8, 0x66, 0x81, 0x2b, 0x58, 0xd6, 0x80, 0x59, | 1194 | 0x3d, 0x86, 0x7e, 0x9f, 0x42, 0xbc, 0x2a, 0x22, 0x6b, 0x20, 0x81, 0xce, |
| 1200 | 0xe0, 0x0a, 0x32, 0xe6, 0xbf, 0x00, 0x63, 0x9d, 0x3d, 0xde, 0x35, 0xf9, | 1195 | 0x0f, 0x29, 0xf7, 0x11, 0x0b, 0x5d, 0x8c, 0x43, 0x1e, 0x62, 0xa3, 0xc4, |
| 1201 | 0xb6, 0xbb, 0xcc, 0x00, 0xed, 0x5a, 0xb8, 0x54, 0x44, 0x59, 0xb3, 0x2b, | 1196 | 0xe9, 0xf4, 0xad, 0x89, 0x81, 0x3a, 0xf4, 0xd3, 0xb7, 0x37, 0x1e, 0x3d, |
| 1202 | 0xc3, 0xb9, 0x95, 0xdc, 0x06, 0xb8, 0x93, 0xf7, 0xcb, 0x79, 0xff, 0xc5, | 1197 | 0x75, 0x8b, 0x07, 0xb5, 0xfc, 0xf6, 0xf2, 0x98, 0xc5, 0xc3, 0x4d, 0x5f, |
| 1203 | 0x90, 0x0b, 0x97, 0x4e, 0x97, 0xbe, 0xaf, 0x42, 0xc7, 0xce, 0x28, 0x2a, | 1198 | 0x76, 0xc3, 0x31, 0x20, 0x7c, 0xaf, 0x89, 0xb1, 0xca, 0x83, 0xf2, 0x01, |
| 1204 | 0x17, 0x06, 0x30, 0x69, 0x73, 0x89, 0x02, 0xef, 0x75, 0xe1, 0x8e, 0x9d, | 1199 | 0x13, 0x5b, 0x28, 0x4f, 0xe9, 0x50, 0x33, 0xe3, 0x09, 0xfd, 0x3c, 0x55, |
| 1205 | 0x1f, 0x5a, 0x15, 0x36, 0x17, 0x33, 0x62, 0xe3, 0x8a, 0x8a, 0xed, 0x8b, | 1200 | 0x83, 0xeb, 0x07, 0x97, 0x60, 0x93, 0x8d, 0x5f, 0xb5, 0x38, 0x3b, 0xb8, |
| 1206 | 0x84, 0xff, 0xba, 0x88, 0xef, 0xe4, 0xa2, 0xc2, 0xad, 0x5d, 0x65, 0xe4, | 1201 | 0xd4, 0xc6, 0x8d, 0x87, 0x52, 0x33, 0xf0, 0xce, 0xde, 0x6b, 0x6c, 0x8c, |
| 1207 | 0xb0, 0xc2, 0xe1, 0x02, 0xd9, 0x9b, 0x54, 0x68, 0x5a, 0x44, 0xb8, 0xdc, | 1202 | 0x1b, 0x64, 0x6c, 0xf6, 0xed, 0x0b, 0xa3, 0x8b, 0x6d, 0x7a, 0xf7, 0x5d, |
| 1208 | 0x2c, 0x9b, 0xc3, 0x0a, 0x97, 0xfd, 0x56, 0xea, 0xd0, 0x14, 0x2e, 0x7b, | 1203 | 0x8b, 0xfb, 0x8e, 0xfa, 0xa8, 0x23, 0x83, 0x71, 0x40, 0x7d, 0xd7, 0xff, |
| 1209 | 0x96, 0x73, 0x30, 0xf7, 0x69, 0x61, 0x7e, 0xef, 0x81, 0x3b, 0xa2, 0xb7, | 1204 | 0x49, 0xb1, 0xf3, 0xe9, 0xd8, 0x2f, 0x73, 0x2d, 0x75, 0x32, 0x34, 0x56, |
| 1210 | 0x6c, 0x52, 0x3a, 0xb1, 0x3c, 0x64, 0x98, 0x92, 0x53, 0x5f, 0xa9, 0xe8, | 1205 | 0xf9, 0xed, 0xb4, 0xb9, 0x70, 0x5e, 0x47, 0x79, 0x9d, 0x5c, 0x4d, 0x9d, |
| 1211 | 0xc1, 0xd3, 0x08, 0x12, 0x6f, 0x5f, 0xc6, 0xc8, 0x60, 0xdc, 0x25, 0x76, | 1206 | 0xdc, 0x94, 0xa5, 0x39, 0x0c, 0x3b, 0x39, 0xd7, 0xe4, 0x10, 0x35, 0xb5, |
| 1212 | 0xb4, 0x29, 0x73, 0x4e, 0x9e, 0x5b, 0x29, 0x8f, 0x3b, 0x27, 0x8f, 0x79, | 1207 | 0xf4, 0xcb, 0x12, 0x1e, 0xb4, 0xff, 0xd1, 0xbf, 0x60, 0x6c, 0xcf, 0x71, |
| 1213 | 0x1a, 0x2a, 0x9e, 0x6c, 0x70, 0x11, 0xb7, 0xfe, 0x0e, 0x6d, 0x3b, 0x55, | 1208 | 0x3e, 0xf9, 0xdb, 0x94, 0xf9, 0x94, 0xf8, 0xe9, 0x20, 0xe6, 0x2a, 0xd4, |
| 1214 | 0x2c, 0xb1, 0xb9, 0xf9, 0xdf, 0x11, 0x7f, 0x2f, 0x2a, 0xcd, 0x95, 0x07, | 1209 | 0xef, 0xff, 0x02, 0x66, 0xe7, 0x73, 0x9b, 0xa2, 0xae, 0x54, 0x8e, 0xbf, |
| 1215 | 0x3a, 0xe9, 0xdf, 0xef, 0x2f, 0x2c, 0x41, 0x68, 0x9a, 0x82, 0x2a, 0xa3, | 1210 | 0x25, 0x91, 0xb3, 0x39, 0x3d, 0x33, 0x22, 0x5d, 0xe5, 0x7f, 0x1b, 0x8f, |
| 1216 | 0x83, 0xf9, 0xf1, 0x87, 0x56, 0xdc, 0x49, 0x3a, 0x6b, 0x40, 0x2b, 0x89, | 1211 | 0x92, 0x73, 0x27, 0xc5, 0x67, 0xbd, 0xb4, 0xe7, 0x26, 0xea, 0x4b, 0x63, |
| 1217 | 0x44, 0x29, 0x5b, 0x93, 0x72, 0xcd, 0xf0, 0x20, 0xfb, 0xe9, 0x20, 0xef, | 1212 | 0xec, 0x30, 0x89, 0x73, 0xb3, 0xe0, 0xe2, 0x38, 0x36, 0x51, 0x3f, 0x1e, |
| 1218 | 0xf7, 0xe0, 0x2e, 0xda, 0xce, 0x5d, 0x8c, 0x65, 0x77, 0x31, 0x96, 0xdd, | 1213 | 0x8e, 0x63, 0x2b, 0xcb, 0xdd, 0xc5, 0xff, 0xee, 0x3a, 0x5a, 0xcb, 0xc3, |
| 1219 | 0x35, 0xfa, 0x2f, 0xbc, 0x3e, 0xdd, 0xfe, 0xbd, 0x29, 0x55, 0xb0, 0x65, | 1214 | 0xcb, 0x63, 0x16, 0x8f, 0x9f, 0x12, 0xb3, 0x9a, 0x69, 0xc7, 0x0e, 0x94, |
| 1220 | 0x27, 0xe3, 0x82, 0xe8, 0x77, 0x33, 0x7d, 0x47, 0xe2, 0x02, 0x28, 0x93, | 1215 | 0x0c, 0xab, 0x78, 0xca, 0x54, 0x70, 0xa1, 0x89, 0xfd, 0x35, 0x5c, 0xc6, |
| 1221 | 0x85, 0x93, 0x9c, 0xc7, 0x25, 0x9a, 0x1e, 0xcc, 0xe2, 0xeb, 0xae, 0x73, | 1216 | 0x3a, 0x89, 0x65, 0xde, 0xe4, 0x97, 0x88, 0x73, 0x7e, 0xac, 0x23, 0x27, |
| 1222 | 0x79, 0x5f, 0x21, 0xb6, 0xc8, 0x3c, 0xba, 0x70, 0x1b, 0x65, 0x0c, 0x86, | 1217 | 0xe8, 0xdc, 0xab, 0xc1, 0x15, 0xca, 0x30, 0x67, 0x12, 0x19, 0x4e, 0x14, |
| 1223 | 0xfe, 0xcb, 0x42, 0x95, 0xf8, 0xee, 0x85, 0xf7, 0x73, 0xf3, 0x7a, 0xe4, | 1218 | 0x38, 0xe6, 0x3c, 0xe6, 0x3a, 0x8d, 0x61, 0xda, 0x90, 0xb6, 0xd9, 0xb6, |
| 1224 | 0x2c, 0x07, 0x54, 0xc4, 0x4e, 0xe9, 0xf3, 0x7b, 0x6c, 0x4e, 0xf1, 0xa2, | 1219 | 0xa1, 0x38, 0xe3, 0x73, 0x90, 0xb9, 0x7e, 0xde, 0x76, 0x5b, 0xde, 0x63, |
| 1225 | 0xc9, 0xdc, 0x6d, 0xe7, 0xd1, 0xf9, 0x62, 0x2a, 0x6b, 0x47, 0xa3, 0xe8, | 1220 | 0x47, 0xf4, 0x31, 0x8e, 0x67, 0x4e, 0x44, 0xf7, 0xdf, 0x42, 0x5f, 0x10, |
| 1226 | 0xe6, 0xb8, 0x57, 0x0f, 0x3f, 0x96, 0xd7, 0x4b, 0x61, 0xbc, 0x0a, 0xd5, | 1221 | 0xce, 0x57, 0x9a, 0x04, 0x0e, 0x0c, 0xb6, 0xa3, 0x9a, 0x36, 0xe3, 0x5d, |
| 1227 | 0xe2, 0xa1, 0xff, 0xe4, 0x72, 0x95, 0xb6, 0x51, 0xe1, 0xb6, 0xd5, 0xfc, | 1222 | 0x7c, 0x14, 0xa9, 0xda, 0x7e, 0xdb, 0x56, 0xf3, 0x6d, 0x97, 0x45, 0x2b, |
| 1228 | 0x2f, 0xdc, 0xd6, 0xcb, 0xff, 0xc2, 0x73, 0xa7, 0xf3, 0xbf, 0x13, 0xfe, | 1223 | 0x23, 0x8d, 0x31, 0x69, 0x7b, 0xbc, 0xd0, 0xf6, 0x0a, 0xb6, 0x9d, 0x60, |
| 1229 | 0xe9, 0x62, 0xc7, 0xf5, 0xe8, 0xdd, 0x65, 0x59, 0xc5, 0x81, 0x7a, 0x6c, | 1224 | 0xdb, 0x2b, 0xff, 0x5d, 0xdb, 0xd3, 0xe3, 0x5d, 0x4f, 0x21, 0x2e, 0x4b, |
| 1230 | 0x19, 0xfd, 0x48, 0xbc, 0xbc, 0x40, 0x1e, 0x7b, 0x0e, 0xe8, 0x47, 0x2e, | 1225 | 0xde, 0x5c, 0xc4, 0xed, 0x22, 0xc7, 0xf8, 0x8d, 0xf7, 0x32, 0x4e, 0xee, |
| 1231 | 0xc1, 0x22, 0xbf, 0x5f, 0x95, 0xbe, 0x2d, 0x6c, 0x34, 0xaf, 0x62, 0x9f, | 1226 | 0x90, 0xb9, 0xf3, 0xe5, 0x7d, 0xf6, 0xbd, 0xd8, 0x7c, 0xb9, 0xad, 0x3d, |
| 1232 | 0x8c, 0x80, 0xd5, 0x53, 0xfd, 0xa2, 0xd0, 0x46, 0x41, 0xdf, 0xc5, 0xf4, | 1227 | 0xc5, 0x18, 0x6f, 0xd6, 0x4c, 0x6b, 0x6b, 0x0e, 0xff, 0xff, 0x70, 0x4a, |
| 1233 | 0x73, 0x68, 0x2e, 0xea, 0x7b, 0x65, 0x46, 0xea, 0x36, 0x29, 0x4b, 0x87, | 1228 | 0xb8, 0x44, 0x3b, 0x2c, 0xca, 0xfa, 0xac, 0xa1, 0x77, 0x2d, 0x73, 0x18, |
| 1234 | 0xa7, 0x96, 0xef, 0x20, 0x1f, 0x3e, 0x4d, 0x5d, 0x17, 0xfc, 0xc8, 0x9b, | 1229 | 0xdb, 0x2e, 0x32, 0xd7, 0xb9, 0xf1, 0x52, 0x5f, 0xb2, 0x36, 0xd2, 0x8e, |
| 1235 | 0xcf, 0x2b, 0x98, 0x4b, 0xa4, 0x44, 0x97, 0x32, 0xbe, 0x5c, 0xae, 0x28, | 1230 | 0x85, 0x03, 0x7a, 0xe7, 0x2e, 0xf2, 0xd1, 0xc3, 0x21, 0x3d, 0xfa, 0x2d, |
| 1236 | 0xb6, 0x74, 0xe4, 0x6c, 0x1f, 0xa2, 0xb7, 0xf8, 0xf4, 0x12, 0x43, 0xec, | 1231 | 0xe8, 0xf1, 0x52, 0xe5, 0x25, 0x94, 0x4c, 0x9c, 0xc5, 0x60, 0xf6, 0x47, |
| 1237 | 0x28, 0x48, 0x5c, 0xd1, 0xc3, 0xcd, 0x84, 0xed, 0x53, 0x09, 0xc4, 0x1c, | 1232 | 0x92, 0x6f, 0xb2, 0x4d, 0xb7, 0xe2, 0x99, 0xe8, 0x43, 0x8c, 0xf5, 0xdc, |
| 1238 | 0x91, 0xe6, 0xa6, 0xb5, 0x89, 0xb9, 0xda, 0xf1, 0x7c, 0x2e, 0xba, 0x87, | 1233 | 0xac, 0xe7, 0x1e, 0x80, 0xbb, 0x92, 0xf5, 0xc6, 0x07, 0xe2, 0x96, 0x8b, |
| 1239 | 0x38, 0xae, 0x1a, 0xb2, 0x0e, 0x42, 0x5b, 0x19, 0x16, 0xdd, 0x75, 0x28, | 1234 | 0x5c, 0x50, 0x8d, 0xe8, 0x1d, 0x95, 0x8a, 0x11, 0xdb, 0xc4, 0xb6, 0xd7, |
| 1240 | 0xe7, 0xf2, 0xce, 0x28, 0x79, 0x97, 0x6a, 0xcb, 0xe8, 0x8c, 0x88, 0x6c, | 1235 | 0x30, 0x96, 0x95, 0x27, 0xbb, 0xc9, 0x03, 0x74, 0xdf, 0x97, 0x55, 0xbd, |
| 1241 | 0x52, 0x87, 0xb2, 0x5f, 0xc0, 0xbf, 0x72, 0xba, 0xa8, 0x80, 0x67, 0x40, | 1236 | 0x6b, 0x3d, 0x5e, 0xc2, 0xbf, 0x92, 0x3c, 0xce, 0x4b, 0x9e, 0x45, 0x8a, |
| 1242 | 0x78, 0x97, 0x8e, 0x0d, 0x8c, 0xf3, 0x65, 0x03, 0x7e, 0xfa, 0x42, 0x35, | 1237 | 0xed, 0x59, 0xe3, 0x1a, 0xf9, 0xcc, 0xbb, 0x56, 0x78, 0x41, 0x85, 0x53, |
| 1243 | 0x4a, 0x1f, 0x88, 0x60, 0xfd, 0xa8, 0x86, 0x92, 0x07, 0x2c, 0x6b, 0x6e, | 1238 | 0xda, 0xbd, 0x38, 0xbe, 0xe0, 0xdd, 0xc4, 0x65, 0x3c, 0xd7, 0x5c, 0x46, |
| 1244 | 0xa8, 0x87, 0x5c, 0xf6, 0xb2, 0x22, 0xc9, 0x9d, 0x9c, 0x49, 0x62, 0x16, | 1239 | 0xe3, 0xfb, 0xf0, 0xa9, 0xa9, 0x75, 0x45, 0x62, 0xfd, 0x56, 0x57, 0x64, |
| 1245 | 0xf1, 0xad, 0x3d, 0xa5, 0xe0, 0x6a, 0xc6, 0xd3, 0x28, 0x71, 0xa8, 0xdd, | 1240 | 0xdb, 0xfd, 0xc7, 0x9b, 0xf3, 0x76, 0xeb, 0xcf, 0xb8, 0x71, 0xd6, 0x2b, |
| 1246 | 0xc6, 0x39, 0xab, 0x73, 0x4e, 0xc4, 0x45, 0x1b, 0x5a, 0xc5, 0xfb, 0xad, | 1241 | 0xbe, 0xc4, 0xfc, 0x67, 0x7f, 0x13, 0x76, 0xef, 0x67, 0x5e, 0xa9, 0x36, |
| 1247 | 0xc4, 0xc0, 0x56, 0x62, 0x9a, 0x65, 0xbd, 0x7f, 0x39, 0x3a, 0xcb, 0x22, | 1242 | 0x86, 0xcb, 0x95, 0x1a, 0xe6, 0x44, 0xc3, 0x36, 0x1f, 0x76, 0x1a, 0xbb, |
| 1248 | 0x37, 0x13, 0x0b, 0x6b, 0xc9, 0x89, 0x25, 0x7e, 0x5f, 0x8e, 0x35, 0x8c, | 1243 | 0xec, 0x9c, 0x59, 0xe2, 0x83, 0xd4, 0x99, 0x9f, 0x91, 0xf8, 0x27, 0xeb, |
| 1249 | 0xfd, 0xc5, 0x49, 0x3b, 0x9f, 0xa2, 0xee, 0x18, 0xa3, 0x32, 0x8c, 0x71, | 1244 | 0x39, 0x07, 0x6e, 0xdd, 0x90, 0xa0, 0xdf, 0x6a, 0xbd, 0x2c, 0xb3, 0xae, |
| 1250 | 0x94, 0xfd, 0x69, 0x72, 0x5c, 0xe1, 0xbb, 0x95, 0xc9, 0x0d, 0x8c, 0x75, | 1245 | 0xb0, 0x4e, 0x2f, 0x6b, 0x18, 0xbd, 0xd3, 0x38, 0xc9, 0xba, 0x69, 0xb1, |
| 1251 | 0x1e, 0x54, 0x0c, 0x5c, 0x86, 0x3b, 0x19, 0xcf, 0xef, 0xd8, 0xe9, 0x47, | 1246 | 0xaa, 0xd1, 0x5f, 0x73, 0x29, 0x8e, 0x74, 0x14, 0xca, 0x33, 0xd9, 0xb3, |
| 1252 | 0x7a, 0xd1, 0x55, 0x94, 0xef, 0x1e, 0xac, 0x4f, 0x19, 0x92, 0x43, 0x45, | 1247 | 0x65, 0x73, 0x4f, 0xc3, 0xb3, 0x1d, 0xbc, 0x96, 0xf7, 0x85, 0xcb, 0xf1, |
| 1253 | 0x83, 0x8b, 0xc8, 0xb7, 0x33, 0x82, 0x3b, 0x92, 0x8f, 0x95, 0x61, 0x49, | 1248 | 0x6e, 0x67, 0x61, 0x6e, 0x0e, 0xb9, 0xf2, 0xb8, 0xff, 0x69, 0x77, 0x71, |
| 1254 | 0x0b, 0x10, 0x4c, 0x16, 0xf0, 0x2d, 0x2a, 0x6b, 0x47, 0x30, 0x92, 0xe7, | 1249 | 0xbd, 0x28, 0x5f, 0xe6, 0xda, 0x12, 0x94, 0xef, 0xb9, 0x14, 0x5b, 0xe2, |
| 1255 | 0x63, 0xdb, 0x39, 0x5e, 0x24, 0xeb, 0x70, 0x2d, 0x98, 0xcf, 0x58, 0x20, | 1250 | 0xc4, 0xf2, 0x6d, 0x7b, 0xf3, 0xeb, 0x93, 0x95, 0x4b, 0x05, 0xb7, 0xeb, |
| 1256 | 0xf6, 0xa5, 0x31, 0xc7, 0x2c, 0x51, 0x0c, 0xdf, 0x1e, 0xfa, 0xa9, 0xe4, | 1251 | 0x71, 0xb7, 0xed, 0xf7, 0x5f, 0x75, 0xe5, 0xed, 0xc0, 0x59, 0x18, 0x97, |
| 1257 | 0x3d, 0x57, 0x24, 0x0b, 0xb1, 0x4f, 0xcf, 0x2e, 0x76, 0x74, 0x12, 0x47, | 1252 | 0x49, 0x1b, 0xbc, 0x52, 0xd6, 0xfc, 0x0b, 0xf8, 0x39, 0x9b, 0xff, 0xf7, |
| 1258 | 0xf4, 0x8d, 0xbf, 0x53, 0xf4, 0xf6, 0x13, 0xca, 0x2b, 0xd8, 0x37, 0xf6, | 1253 | 0x42, 0xe6, 0xc2, 0x45, 0xff, 0x7c, 0xdc, 0x74, 0x60, 0x6a, 0x46, 0x9e, |
| 1259 | 0x2a, 0x86, 0xc6, 0xdc, 0xca, 0xe8, 0x98, 0xf4, 0x35, 0x81, 0xbe, 0xcc, | 1254 | 0xaf, 0xab, 0xfb, 0x9a, 0xd0, 0x33, 0x46, 0xbc, 0xa1, 0x0f, 0xb5, 0x85, |
| 1260 | 0x9f, 0xea, 0x6b, 0xea, 0xfa, 0xcb, 0xa2, 0xf3, 0xd6, 0x6c, 0xae, 0xce, | 1255 | 0xd6, 0x5a, 0xa8, 0x91, 0x75, 0x83, 0x5a, 0x54, 0xec, 0x13, 0xde, 0x4c, |
| 1261 | 0xe7, 0x89, 0x4b, 0xcf, 0xe3, 0xc7, 0x32, 0x27, 0x62, 0x97, 0x5e, 0xf4, | 1256 | 0x9e, 0x31, 0x76, 0xca, 0x1e, 0x4b, 0x6f, 0x26, 0xbf, 0x2e, 0xb2, 0x33, |
| 1262 | 0xa4, 0xce, 0xad, 0x0b, 0xf4, 0x27, 0xb6, 0xd9, 0xfe, 0xd9, 0x92, 0x11, | 1257 | 0xd5, 0xf7, 0xee, 0x1d, 0x9a, 0xe0, 0x85, 0xd8, 0x46, 0xdd, 0xad, 0x0b, |
| 1263 | 0x7b, 0x55, 0x19, 0x33, 0x2f, 0xce, 0xe7, 0x2c, 0xb5, 0xd4, 0x41, 0x9f, | 1258 | 0x03, 0x39, 0xbf, 0x03, 0xba, 0xb9, 0x4b, 0x56, 0x92, 0x12, 0xb7, 0x61, |
| 1264 | 0x7d, 0x6f, 0x9f, 0xf9, 0x29, 0x64, 0xed, 0x6b, 0x8b, 0xe9, 0x9b, 0xd5, | 1259 | 0x7b, 0xad, 0x82, 0x2e, 0xa3, 0x1a, 0x8e, 0xc5, 0xbf, 0xb5, 0xee, 0x58, |
| 1265 | 0x28, 0x26, 0x26, 0x06, 0x43, 0x3e, 0x14, 0x57, 0xc9, 0x3a, 0xce, 0xb9, | 1260 | 0x27, 0xff, 0xbd, 0x5b, 0xc0, 0x97, 0x0f, 0xb2, 0x6f, 0x19, 0xb7, 0x70, |
| 1266 | 0xdc, 0x7f, 0xc3, 0x4e, 0x86, 0x64, 0x1b, 0x73, 0x1a, 0x89, 0x7f, 0xb5, | 1261 | 0x3a, 0x37, 0x2a, 0xe8, 0x53, 0x37, 0x38, 0x84, 0x73, 0x2a, 0x8c, 0x9d, |
| 1267 | 0x9c, 0xef, 0x1c, 0xce, 0xac, 0xa7, 0x0d, 0x5d, 0x27, 0x36, 0xe4, 0xca, | 1262 | 0xf6, 0x5c, 0xa0, 0x37, 0xad, 0x60, 0x77, 0x5a, 0x30, 0xd3, 0x49, 0x1c, |
| 1268 | 0xd9, 0xd0, 0x47, 0xd7, 0x17, 0x54, 0x90, 0xfb, 0x69, 0x15, 0x76, 0xde, | 1263 | 0xf4, 0x61, 0x67, 0x5a, 0x70, 0xd0, 0x45, 0x1c, 0x9c, 0x83, 0xed, 0x69, |
| 1269 | 0xd7, 0xa4, 0x5c, 0x9f, 0xb7, 0xab, 0xcf, 0x67, 0x1e, 0x2d, 0xca, 0xe7, | 1264 | 0xc1, 0xc1, 0x12, 0xbc, 0x3c, 0x78, 0x05, 0x1e, 0xe2, 0xef, 0x07, 0x53, |
| 1270 | 0x66, 0x17, 0x94, 0xff, 0x38, 0x1d, 0x5c, 0xf6, 0x67, 0xe8, 0x40, 0xe2, | 1265 | 0xa5, 0x08, 0xef, 0xfd, 0x0b, 0x1c, 0x48, 0x0b, 0x7f, 0x72, 0x23, 0x35, |
| 1271 | 0x81, 0xe4, 0x04, 0xa2, 0x83, 0xf3, 0xf3, 0xf2, 0xfe, 0x44, 0x35, 0x71, | 1266 | 0x5c, 0x87, 0x54, 0x3a, 0xcf, 0x25, 0xaa, 0x86, 0xff, 0x12, 0x49, 0xfe, |
| 1272 | 0xef, 0x42, 0x5d, 0xcc, 0xcc, 0xeb, 0x62, 0x31, 0xb1, 0x4b, 0xfe, 0x5b, | 1267 | 0x1e, 0x20, 0xef, 0xcb, 0x0c, 0xcd, 0x45, 0x82, 0xbf, 0x65, 0xbd, 0xcd, |
| 1273 | 0x38, 0x65, 0x7a, 0xf1, 0xa2, 0x26, 0xe3, 0x5e, 0x8c, 0xf5, 0x1c, 0xaf, | 1268 | 0x43, 0xf9, 0x13, 0x81, 0x0a, 0x6c, 0x18, 0x92, 0x1c, 0xda, 0x77, 0xeb, |
| 1274 | 0x9b, 0xba, 0x58, 0x1e, 0xaa, 0x44, 0xf0, 0xbc, 0x78, 0x50, 0xcb, 0xd8, | 1269 | 0x5d, 0x81, 0x79, 0xec, 0xb3, 0x0e, 0xbb, 0xc9, 0xd9, 0xda, 0x86, 0xfc, |
| 1275 | 0xf1, 0x21, 0x79, 0xa6, 0xfc, 0xf6, 0xe3, 0x05, 0xea, 0xe2, 0x8e, 0xe1, | 1270 | 0xe8, 0xe7, 0xef, 0x9d, 0xa9, 0x4a, 0xbc, 0x36, 0xa8, 0xdb, 0xfd, 0xf5, |
| 1276 | 0xc5, 0xb8, 0x8b, 0xfe, 0x94, 0xe3, 0x90, 0xb9, 0xd8, 0xb0, 0x76, 0x58, | 1271 | 0xa4, 0x56, 0xac, 0x70, 0x19, 0x55, 0x58, 0x31, 0x38, 0x1f, 0x3b, 0xd2, |
| 1277 | 0xda, 0x14, 0x8c, 0xfb, 0xd9, 0xd9, 0x71, 0xfe, 0x71, 0x5e, 0xfe, 0x0a, | 1272 | 0x82, 0xbd, 0xd5, 0xc4, 0xde, 0x7a, 0x3c, 0x98, 0x16, 0x7e, 0xa9, 0xc1, |
| 1278 | 0xe5, 0x97, 0x67, 0x07, 0xb2, 0x16, 0x2d, 0xcf, 0x11, 0x64, 0x2c, 0xc6, | 1273 | 0xbb, 0xd7, 0xc0, 0x48, 0x5a, 0xd6, 0x84, 0x6b, 0x70, 0x61, 0x28, 0x80, |
| 1279 | 0x14, 0xdc, 0xb1, 0xac, 0x83, 0xe6, 0x3c, 0xc4, 0xaa, 0xf5, 0x7e, 0x89, | 1274 | 0x41, 0xbb, 0x7f, 0x13, 0xc9, 0x54, 0x98, 0xf2, 0x79, 0x51, 0xb9, 0x2f, |
| 1280 | 0x8f, 0xfd, 0xc4, 0x03, 0x07, 0xf3, 0xc8, 0xa2, 0x48, 0x94, 0xfe, 0xac, | 1275 | 0xe7, 0xab, 0x82, 0x82, 0xc9, 0x40, 0x10, 0x03, 0x63, 0xb3, 0x50, 0xbe, |
| 1281 | 0x5e, 0xe5, 0x80, 0x5a, 0xef, 0x40, 0x27, 0xde, 0x30, 0x8d, 0xde, 0x75, | 1276 | 0x4f, 0x37, 0xb7, 0x42, 0xbf, 0x78, 0x17, 0xae, 0xc4, 0xee, 0x31, 0x1f, |
| 1282 | 0xf8, 0x14, 0xba, 0xbc, 0x16, 0xf6, 0xb2, 0x9d, 0xee, 0x54, 0x09, 0xda, | 1277 | 0x4a, 0xf7, 0x55, 0xc3, 0x1d, 0x6a, 0xc2, 0xce, 0xb1, 0x0f, 0x61, 0xfb, |
| 1283 | 0xeb, 0x69, 0x56, 0x2b, 0x3d, 0xd8, 0x91, 0x8a, 0xb7, 0x12, 0x16, 0x18, | 1278 | 0x58, 0x1d, 0xb1, 0x13, 0x78, 0x3a, 0x63, 0xa2, 0x9f, 0x18, 0x3c, 0x87, |
| 1284 | 0x73, 0x1a, 0xfe, 0x2a, 0x11, 0xd0, 0x5b, 0x36, 0x90, 0xb7, 0x2c, 0xef, | 1279 | 0x31, 0xe6, 0x95, 0xac, 0xcc, 0xa3, 0xcc, 0x8f, 0x02, 0x4f, 0xa0, 0x9a, |
| 1285 | 0x73, 0xc3, 0xaf, 0xe4, 0x72, 0xb4, 0x01, 0x55, 0xd6, 0x09, 0x23, 0x94, | 1280 | 0x31, 0x4a, 0x7e, 0xcb, 0xb5, 0xb0, 0x8d, 0xed, 0xf9, 0x75, 0x2a, 0x3d, |
| 1286 | 0xbd, 0xc7, 0xce, 0xf7, 0xfc, 0xd3, 0xa5, 0x1f, 0x3f, 0xe2, 0x19, 0xa9, | 1281 | 0xbe, 0x13, 0xb6, 0xbe, 0x91, 0xcb, 0x88, 0xee, 0x65, 0x4d, 0x68, 0xba, |
| 1287 | 0xeb, 0x47, 0xe9, 0x5c, 0x05, 0xcb, 0xe7, 0xea, 0xf1, 0xa8, 0x62, 0x59, | 1282 | 0x3d, 0xed, 0xb4, 0xd7, 0xe8, 0x2f, 0xdb, 0xe5, 0x5f, 0x15, 0xec, 0xd2, |
| 1288 | 0x0b, 0x42, 0x4e, 0xfb, 0xfe, 0xb6, 0x4c, 0x5d, 0xeb, 0x0d, 0xea, 0xab, | 1283 | 0x5e, 0x53, 0xc3, 0x93, 0x97, 0xf2, 0x5c, 0xb4, 0x96, 0x20, 0x60, 0x3a, |
| 1289 | 0x56, 0x6e, 0x6d, 0x52, 0xd7, 0xa2, 0x4c, 0x0a, 0x8e, 0xfc, 0xd1, 0xf5, | 1284 | 0x15, 0xf8, 0x99, 0xef, 0xfa, 0x9f, 0x7a, 0xdf, 0xda, 0xda, 0xe5, 0xf5, |
| 1290 | 0xf9, 0x20, 0xe4, 0xb9, 0x89, 0xdb, 0x58, 0x89, 0xfd, 0xf9, 0xf5, 0x39, | 1285 | 0x9f, 0xe9, 0x6b, 0xb0, 0x72, 0x6f, 0x49, 0x65, 0x3c, 0x2f, 0x41, 0x5c, |
| 1291 | 0x57, 0xe4, 0xbd, 0x2f, 0xef, 0x35, 0x24, 0x6f, 0x11, 0x9d, 0x4b, 0x7f, | 1286 | 0x93, 0x35, 0xaa, 0x46, 0x8d, 0x5a, 0x79, 0x5f, 0xde, 0x5d, 0x15, 0x2b, |
| 1292 | 0x62, 0x0b, 0xd7, 0x15, 0x0b, 0x06, 0x76, 0x65, 0x16, 0xd2, 0x16, 0x7f, | 1287 | 0x8b, 0x34, 0xc3, 0x3f, 0x5e, 0xe7, 0x7f, 0x2d, 0x21, 0x3a, 0xfd, 0xbd, |
| 1293 | 0x6b, 0x8d, 0x7a, 0xa7, 0x96, 0xbd, 0x51, 0xcd, 0xad, 0xb7, 0x4b, 0xd9, | 1288 | 0xe5, 0x36, 0x0c, 0xdf, 0x31, 0xd4, 0xf9, 0x7f, 0x92, 0x79, 0xbb, 0x04, |
| 1294 | 0x42, 0xb9, 0x8b, 0x89, 0x09, 0x8d, 0x18, 0x3e, 0xaf, 0x4d, 0xc9, 0x75, | 1289 | 0x55, 0x1e, 0x5c, 0x9f, 0xf8, 0xe0, 0x7a, 0x6a, 0x04, 0xca, 0xca, 0x66, |
| 1295 | 0x0b, 0x6d, 0xde, 0xc6, 0x72, 0xd2, 0xae, 0xe0, 0xef, 0x7f, 0x59, 0xfb, | 1290 | 0x1f, 0x79, 0x3f, 0x9c, 0xab, 0x17, 0x60, 0xda, 0x87, 0x7c, 0x24, 0x02, |
| 1296 | 0xce, 0x6b, 0xaf, 0xd5, 0x95, 0x6b, 0xef, 0xee, 0x62, 0xc9, 0xdd, 0xfb, | 1291 | 0xf5, 0x74, 0x73, 0x98, 0xb9, 0x7e, 0xfe, 0x7e, 0xce, 0xf2, 0xac, 0xee, |
| 1297 | 0x53, 0x45, 0xac, 0xf3, 0x4e, 0x9e, 0x07, 0x16, 0xca, 0x7c, 0xea, 0x82, | 1292 | 0x8b, 0x2a, 0xf9, 0x7b, 0x36, 0x9d, 0xa1, 0x3f, 0xd0, 0xae, 0xbb, 0x85, |
| 1298 | 0x32, 0xc4, 0x79, 0xe3, 0x4d, 0x6b, 0xcf, 0x79, 0x65, 0x96, 0x3b, 0xcf, | 1293 | 0xb3, 0xb0, 0x2f, 0x60, 0x6b, 0xc2, 0xb2, 0x9e, 0xa4, 0x0e, 0xe4, 0x5e, |
| 1299 | 0x2f, 0xe3, 0xc4, 0x1c, 0xe3, 0x55, 0xeb, 0xc8, 0x79, 0x65, 0xd2, 0x17, | 1294 | 0xe0, 0x9b, 0x99, 0xdf, 0x59, 0x93, 0x5e, 0x27, 0x5e, 0x37, 0xa6, 0xb7, |
| 1300 | 0x94, 0xb9, 0x1c, 0x63, 0xf5, 0x8f, 0x58, 0x43, 0xb9, 0xb9, 0xc9, 0xd2, | 1295 | 0x47, 0xae, 0x17, 0x31, 0x19, 0xfb, 0xec, 0x13, 0x75, 0xdc, 0x68, 0xdc, |
| 1301 | 0x7d, 0xdc, 0x33, 0x23, 0xad, 0x7f, 0x75, 0xc5, 0x3c, 0xbd, 0x63, 0xa6, | 1296 | 0x76, 0x98, 0x79, 0xf2, 0xc2, 0x80, 0xee, 0x4f, 0xe2, 0xff, 0x5a, 0xc2, |
| 1302 | 0x43, 0x9e, 0xd9, 0xb8, 0x91, 0xcd, 0xcd, 0x4d, 0x5c, 0xe6, 0xc6, 0xb5, | 1297 | 0x0b, 0xd3, 0x4a, 0x71, 0xdd, 0xee, 0xfd, 0x6b, 0x27, 0x55, 0x31, 0x17, |
| 1303 | 0xa0, 0x30, 0x37, 0xd7, 0xe5, 0xeb, 0x17, 0xda, 0xbd, 0xae, 0xe8, 0xfc, | 1298 | 0xc7, 0x77, 0x28, 0xa1, 0xf7, 0xc7, 0x99, 0xb7, 0x45, 0xbd, 0x88, 0x39, |
| 1304 | 0x76, 0x0b, 0xd7, 0xaf, 0xb8, 0x40, 0xee, 0xef, 0x5c, 0x50, 0xee, 0xb7, | 1299 | 0x23, 0x75, 0xfe, 0x9d, 0x09, 0x7b, 0x9c, 0xe6, 0x79, 0xce, 0xdd, 0xe9, |
| 1305 | 0x7f, 0xa4, 0xde, 0x2f, 0x1c, 0xe7, 0x5f, 0x3f, 0xa0, 0x9e, 0x7f, 0xde, | 1300 | 0xe6, 0x3a, 0x7f, 0x6f, 0x46, 0x6c, 0x50, 0xe1, 0x58, 0x9a, 0xf1, 0x70, |
| 1306 | 0x9c, 0x3f, 0x2f, 0xe8, 0xbf, 0xea, 0x82, 0xf2, 0x35, 0x17, 0x94, 0x7f, | 1301 | 0x46, 0xc5, 0x9d, 0x0f, 0x78, 0xb1, 0x69, 0xc0, 0x83, 0x6d, 0x03, 0x5f, |
| 1307 | 0x59, 0xfd, 0xf8, 0x7e, 0xd6, 0x5d, 0x50, 0xcf, 0x5e, 0xab, 0xc6, 0x53, | 1302 | 0x82, 0x71, 0x95, 0x13, 0x77, 0x30, 0xf7, 0xdb, 0x3c, 0x50, 0x4a, 0x3d, |
| 1308 | 0x67, 0x7d, 0x1e, 0x4d, 0x45, 0x08, 0x98, 0x4e, 0x05, 0x7e, 0xfa, 0xbe, | 1303 | 0x6a, 0xd8, 0x32, 0xe0, 0x44, 0xd3, 0x55, 0x55, 0x88, 0xcf, 0x2c, 0xc5, |
| 1309 | 0xff, 0xe9, 0x0b, 0xd6, 0xac, 0x9b, 0xce, 0xfa, 0xfe, 0x79, 0x9c, 0x33, | 1304 | 0xf3, 0xf4, 0xdd, 0xab, 0x42, 0x15, 0x48, 0xdb, 0x9c, 0x43, 0xb0, 0x41, |
| 1310 | 0x56, 0x1c, 0x91, 0x18, 0x56, 0x44, 0xee, 0x2c, 0x3c, 0xb0, 0x4e, 0x3b, | 1305 | 0x78, 0x9b, 0xe8, 0x8d, 0x71, 0xd0, 0x10, 0x0c, 0xf9, 0xa0, 0xf5, 0x99, |
| 1311 | 0x97, 0x67, 0x15, 0x62, 0x65, 0x45, 0xac, 0x24, 0xd2, 0x00, 0xff, 0xd8, | 1306 | 0xdf, 0x58, 0xb9, 0x99, 0x7b, 0x6c, 0x3e, 0xe9, 0x88, 0x88, 0x6e, 0xa4, |
| 1312 | 0x2c, 0xff, 0x9b, 0x09, 0x59, 0xb7, 0xfc, 0x80, 0x5c, 0xca, 0xf0, 0xed, | 1307 | 0xae, 0xac, 0x35, 0x79, 0x19, 0x23, 0xdf, 0xa3, 0x47, 0x65, 0x5e, 0x24, |
| 1313 | 0xc7, 0x2c, 0xff, 0x4f, 0xd3, 0x6f, 0x15, 0xa3, 0xc2, 0x83, 0xab, 0x13, | 1308 | 0x30, 0xb9, 0x4c, 0x71, 0x20, 0x1c, 0xa8, 0x8a, 0x55, 0x47, 0xc2, 0x58, |
| 1314 | 0x1f, 0x5f, 0x4f, 0x8d, 0x40, 0x59, 0xd6, 0xe0, 0x63, 0x7e, 0x05, 0xe7, | 1309 | 0x99, 0xed, 0xf1, 0xf9, 0xec, 0x7b, 0x59, 0x11, 0x9c, 0x5f, 0x62, 0xe2, |
| 1315 | 0x35, 0xf3, 0x30, 0xe5, 0xaf, 0x45, 0xf2, 0x3d, 0xf5, 0x58, 0x43, 0x98, | 1310 | 0x96, 0x2c, 0x9c, 0x2b, 0xa9, 0xfb, 0x56, 0xea, 0x75, 0x87, 0xf9, 0x07, |
| 1316 | 0xf1, 0x39, 0xf7, 0xbc, 0x76, 0x49, 0x46, 0xf7, 0x45, 0x95, 0xdc, 0x33, | 1311 | 0x2b, 0x9f, 0xd7, 0xb8, 0x89, 0x97, 0x96, 0xb5, 0x99, 0xfa, 0x65, 0x4e, |
| 1317 | 0xd9, 0xf6, 0xd0, 0x1f, 0xc8, 0x77, 0x3a, 0x29, 0x97, 0xc5, 0xbe, 0x80, | 1312 | 0x81, 0x9f, 0x16, 0xf4, 0x2b, 0x3a, 0xad, 0x18, 0xff, 0x9d, 0x75, 0x9a, |
| 1318 | 0x0d, 0x09, 0xcb, 0x7a, 0x8a, 0x79, 0xaa, 0x3c, 0xeb, 0xff, 0x79, 0xfa, | 1313 | 0xfa, 0x75, 0xb3, 0x3d, 0x37, 0xdb, 0x2b, 0x1b, 0x7f, 0xaf, 0x9e, 0x4b, |
| 1319 | 0xf7, 0xd6, 0x84, 0xd7, 0x89, 0xb7, 0x8c, 0xa9, 0xed, 0xf9, 0x51, 0x19, | 1314 | 0x29, 0xcf, 0x4a, 0x5b, 0x86, 0xd9, 0x72, 0x2f, 0xc0, 0x1f, 0x55, 0x8a, |
| 1320 | 0x31, 0x99, 0x2f, 0xd9, 0x27, 0xea, 0x98, 0x51, 0xb7, 0x71, 0x2f, 0xfd, | 1315 | 0x3c, 0xf4, 0x4f, 0x8d, 0xe9, 0x25, 0x7b, 0xbd, 0xed, 0xeb, 0x59, 0xcb, |
| 1321 | 0x6e, 0x7e, 0x40, 0xf7, 0x27, 0xf1, 0xef, 0x96, 0xbf, 0x46, 0x0f, 0x0e, | 1316 | 0x1a, 0x36, 0x45, 0xff, 0x7e, 0xea, 0x5f, 0xd6, 0x5d, 0x64, 0x0e, 0x9a, |
| 1322 | 0x29, 0x85, 0x75, 0xe2, 0x0b, 0xd7, 0x83, 0x2b, 0x62, 0x2e, 0x8e, 0x6f, | 1317 | 0x10, 0xad, 0xd5, 0xfb, 0x01, 0x49, 0x7c, 0x15, 0xcc, 0x60, 0xae, 0xf5, |
| 1323 | 0x8f, 0xcd, 0xf7, 0x8b, 0x88, 0x71, 0x88, 0x39, 0x23, 0xb3, 0xfc, 0x5b, | 1318 | 0x8d, 0x76, 0x0f, 0x5e, 0x4b, 0x54, 0xda, 0xe3, 0xbe, 0xaa, 0xc1, 0xb2, |
| 1324 | 0x12, 0xf6, 0x38, 0xc9, 0x17, 0x15, 0x1c, 0x6b, 0x98, 0xe5, 0xef, 0x4e, | 1319 | 0xbe, 0x16, 0xf2, 0xe3, 0x4d, 0xa3, 0x31, 0xbc, 0x48, 0xd5, 0x19, 0x13, |
| 1325 | 0x7b, 0xb1, 0x9d, 0xf1, 0xb8, 0xc4, 0x68, 0xc0, 0x23, 0x69, 0x15, 0xb7, | 1320 | 0x64, 0xed, 0x83, 0xba, 0x48, 0xcd, 0xe5, 0x7c, 0x89, 0xcf, 0x63, 0x1b, |
| 1326 | 0xdd, 0xef, 0xc5, 0x5a, 0x72, 0xd1, 0x8d, 0x7d, 0xdf, 0x80, 0x71, 0xa9, | 1321 | 0xed, 0xc9, 0xef, 0x88, 0x00, 0xaf, 0x26, 0x8c, 0xe0, 0x0e, 0xf6, 0x3f, |
| 1327 | 0x13, 0xb7, 0xd2, 0xfe, 0xd6, 0xf5, 0x15, 0xdb, 0x39, 0xc8, 0xfa, 0x3e, | 1322 | 0xea, 0x8d, 0x60, 0x7b, 0x4a, 0x6d, 0x75, 0x92, 0x7c, 0x96, 0x31, 0xd7, |
| 1328 | 0x27, 0xea, 0x2f, 0xad, 0x40, 0xbc, 0xa6, 0x18, 0xdf, 0x37, 0x1d, 0xcc, | 1323 | 0xdb, 0x85, 0x7f, 0xb5, 0xd2, 0x5e, 0x0b, 0x25, 0x21, 0x89, 0x25, 0xf3, |
| 1329 | 0x7b, 0xca, 0x30, 0x64, 0x63, 0xa2, 0xe4, 0xb2, 0x82, 0x73, 0xa2, 0x37, | 1324 | 0x70, 0x46, 0x73, 0xe0, 0x99, 0xe0, 0x2c, 0x44, 0x6b, 0x1c, 0xe4, 0x33, |
| 1330 | 0x87, 0xbd, 0x2e, 0xf9, 0xf1, 0x58, 0xfe, 0x5b, 0x2b, 0x5b, 0xb3, 0xdd, | 1325 | 0xaf, 0x5b, 0xff, 0xec, 0x95, 0x7e, 0x64, 0x2c, 0x7f, 0xe0, 0x38, 0x14, |
| 1331 | 0xc6, 0x5f, 0x47, 0xc4, 0xb4, 0xe3, 0x25, 0x90, 0xe3, 0x69, 0x5d, 0xe7, | 1326 | 0x1b, 0xef, 0x76, 0xa6, 0x22, 0xd4, 0xf7, 0xfb, 0xfb, 0xff, 0xbf, 0xd6, |
| 1332 | 0x3d, 0x57, 0x6e, 0x51, 0xe6, 0x44, 0x02, 0x13, 0x8b, 0x15, 0x07, 0xc2, | 1327 | 0x94, 0x57, 0xfa, 0xd7, 0x35, 0x3f, 0xf9, 0xf9, 0xe3, 0x1f, 0xb8, 0xce, |
| 1333 | 0x81, 0x8a, 0x58, 0x65, 0x24, 0x8c, 0x65, 0x99, 0x2e, 0x9f, 0xcf, 0x7e, | 1328 | 0x12, 0xe4, 0x78, 0xbf, 0x67, 0x7d, 0xc7, 0x6e, 0xf3, 0x23, 0xa5, 0x79, |
| 1334 | 0x56, 0x1d, 0xc1, 0xe9, 0x45, 0x26, 0x73, 0x60, 0x38, 0x97, 0x51, 0xf7, | 1329 | 0x5e, 0x2f, 0xed, 0x3d, 0xcd, 0xf1, 0x49, 0x9b, 0xc5, 0x7e, 0x44, 0x6f, |
| 1335 | 0x4d, 0xd4, 0xeb, 0x66, 0xf3, 0x0f, 0x56, 0xd6, 0xf6, 0x7b, 0x37, 0x62, | 1330 | 0x93, 0xa5, 0x82, 0xd7, 0x3b, 0x53, 0xa2, 0x3f, 0xc9, 0x97, 0x4e, 0x5b, |
| 1336 | 0x9a, 0x65, 0xad, 0xa3, 0x7e, 0x1d, 0xd4, 0xe3, 0xcf, 0xf2, 0xfa, 0x15, | 1331 | 0x98, 0x25, 0xe7, 0x0f, 0xdb, 0x65, 0xe3, 0xd4, 0x57, 0x0f, 0x6d, 0x88, |
| 1337 | 0x9d, 0x96, 0x8d, 0xfd, 0xde, 0x3a, 0x46, 0xfd, 0xba, 0xd9, 0x9e, 0x9b, | 1332 | 0xb1, 0x81, 0xf1, 0x42, 0xee, 0xb2, 0x6a, 0xc4, 0x5c, 0x0b, 0xdb, 0x19, |
| 1338 | 0xed, 0x95, 0x8c, 0x9d, 0xaf, 0xe7, 0x62, 0xca, 0xb3, 0xcc, 0x96, 0xa1, | 1333 | 0xb2, 0xd2, 0xde, 0x6a, 0xec, 0x34, 0x69, 0x77, 0x86, 0x3a, 0xdf, 0x09, |
| 1339 | 0x52, 0x9e, 0xf5, 0xf9, 0xa3, 0x4a, 0x01, 0xb7, 0xff, 0xd4, 0x98, 0x5e, | 1334 | 0x0b, 0xa7, 0x4d, 0x39, 0x77, 0x61, 0xca, 0xeb, 0xc0, 0x2e, 0xd3, 0x89, |
| 1340 | 0x99, 0x92, 0x83, 0x88, 0xfe, 0xfd, 0xd4, 0xbf, 0x60, 0xb8, 0xcc, 0x41, | 1335 | 0x4e, 0x43, 0xd5, 0xe5, 0xba, 0x23, 0x24, 0xe7, 0x2e, 0xf8, 0x67, 0x2a, |
| 1341 | 0xbd, 0xac, 0xfb, 0xf4, 0x02, 0xa3, 0x4c, 0xd6, 0x15, 0x4c, 0x33, 0x22, | 1336 | 0xd8, 0x13, 0x56, 0xb1, 0xc5, 0xe8, 0xf1, 0xcb, 0xf5, 0xe5, 0x21, 0x39, |
| 1342 | 0xf8, 0x76, 0x8b, 0x07, 0x6f, 0x26, 0xca, 0xed, 0x71, 0x5f, 0x3a, 0xd7, | 1337 | 0x57, 0xb0, 0x91, 0x3a, 0x89, 0x33, 0x57, 0xde, 0xca, 0x76, 0x7b, 0x43, |
| 1343 | 0xb2, 0x1e, 0x0f, 0xf9, 0xf1, 0x73, 0xa3, 0x2e, 0xbc, 0x40, 0xd5, 0x31, | 1338 | 0xf9, 0x75, 0xf1, 0x18, 0x2c, 0x6b, 0x8f, 0xd9, 0xf2, 0xe1, 0x0a, 0x96, |
| 1344 | 0xa9, 0x79, 0x91, 0x20, 0xce, 0x76, 0xa5, 0x66, 0x73, 0xbe, 0xbc, 0xd8, | 1339 | 0x3b, 0x67, 0x4a, 0xec, 0x38, 0x70, 0xcb, 0xc2, 0x40, 0x3c, 0x5a, 0x02, |
| 1345 | 0x92, 0xc2, 0x46, 0xda, 0x93, 0xdf, 0x11, 0x01, 0xde, 0x48, 0x18, 0xc1, | 1340 | 0x3d, 0x56, 0x46, 0x3f, 0xdd, 0x39, 0x30, 0x8f, 0xf5, 0x04, 0xfb, 0x9d, |
| 1346 | 0xcd, 0xec, 0x7f, 0xd8, 0xdb, 0x40, 0xfe, 0xad, 0x36, 0x91, 0xaa, 0xc5, | 1341 | 0xbe, 0xdd, 0x90, 0xf5, 0xae, 0x80, 0xff, 0x27, 0xe4, 0xde, 0x69, 0xef, |
| 1347 | 0x4b, 0x22, 0x46, 0x7c, 0x2b, 0xfe, 0xc3, 0x1a, 0x22, 0xce, 0x17, 0x85, | 1342 | 0x02, 0x6a, 0xd6, 0xf0, 0xbf, 0xc2, 0x79, 0xab, 0x36, 0x9c, 0xdb, 0x5e, |
| 1348 | 0x64, 0x6d, 0x6e, 0x0e, 0x8e, 0x6b, 0x0e, 0x3c, 0x1b, 0x9c, 0x8e, 0x28, | 1343 | 0x80, 0xde, 0x59, 0xa6, 0x2c, 0x08, 0x56, 0xc1, 0x85, 0x38, 0xf9, 0xf9, |
| 1349 | 0xdd, 0xb1, 0xcc, 0x78, 0xcb, 0xfa, 0xa1, 0x57, 0xfa, 0x91, 0xb1, 0xfc, | 1344 | 0xd8, 0x38, 0xf3, 0xeb, 0x94, 0xa1, 0x1d, 0xb1, 0xd7, 0xcc, 0x3d, 0xd4, |
| 1350 | 0x86, 0xe3, 0x50, 0x6c, 0x2c, 0xdc, 0x92, 0x6a, 0xa0, 0xbe, 0x2f, 0xec, | 1345 | 0x85, 0x87, 0xf1, 0x22, 0xa0, 0x4d, 0x2a, 0xc5, 0xf3, 0x79, 0x82, 0x0d, |
| 1351 | 0xff, 0xdf, 0xad, 0x49, 0xaf, 0xf4, 0xcf, 0x5c, 0x9e, 0xf1, 0xec, 0xc8, | 1346 | 0x31, 0x47, 0x44, 0xf0, 0x2d, 0x6e, 0x3d, 0xd1, 0x4c, 0xd5, 0x19, 0x6e, |
| 1352 | 0x1f, 0xc5, 0xee, 0x97, 0xac, 0xe7, 0xec, 0x36, 0x17, 0xb9, 0x73, 0x71, | 1347 | 0x7f, 0x2c, 0xe3, 0xe1, 0xa1, 0xf1, 0xf0, 0xfa, 0x37, 0x65, 0x7c, 0xfe, |
| 1353 | 0x50, 0xda, 0xfb, 0x17, 0x8e, 0x4f, 0xda, 0x2c, 0xf4, 0x23, 0x7a, 0xcb, | 1348 | 0x8d, 0x19, 0xf8, 0xd7, 0x67, 0x8a, 0x76, 0x59, 0xf4, 0x6d, 0xc1, 0x36, |
| 1354 | 0xba, 0xc5, 0x9f, 0xb7, 0xa4, 0x44, 0x7f, 0x82, 0x57, 0xc7, 0x2c, 0x4c, | 1349 | 0xcb, 0x92, 0x7b, 0xc9, 0x8f, 0x67, 0xa5, 0xad, 0x7c, 0x1c, 0x2b, 0xa1, |
| 1355 | 0x97, 0xf3, 0x87, 0xed, 0xb2, 0x71, 0xea, 0xab, 0x8b, 0x36, 0xc4, 0xd8, | 1350 | 0xec, 0x4f, 0xd2, 0xd6, 0x5d, 0x8c, 0x55, 0xbb, 0x8c, 0x38, 0xa1, 0xd2, |
| 1356 | 0xcb, 0x3c, 0x4e, 0x76, 0x51, 0x68, 0x76, 0x9e, 0xb6, 0x89, 0xdc, 0x7e, | 1351 | 0xb2, 0x0c, 0xf2, 0x99, 0x12, 0xc5, 0x8f, 0x9d, 0x4d, 0xbf, 0xe5, 0x7c, |
| 1357 | 0xc8, 0x5b, 0x89, 0x2d, 0x26, 0xed, 0xce, 0x50, 0x2f, 0x76, 0x42, 0x72, | 1352 | 0x02, 0x9b, 0x32, 0x01, 0x77, 0x7e, 0x3e, 0xc4, 0xcf, 0x04, 0x03, 0xfc, |
| 1358 | 0x53, 0x39, 0x77, 0x61, 0xd2, 0xeb, 0xc0, 0x56, 0xd3, 0x89, 0x76, 0x43, | 1353 | 0x8c, 0xbf, 0x3e, 0x7f, 0x0f, 0xfb, 0xd9, 0x9e, 0x99, 0xee, 0x03, 0x0a, |
| 1359 | 0xd5, 0xe5, 0xba, 0x23, 0x24, 0xe7, 0x2e, 0xf8, 0x6b, 0x14, 0x6c, 0x0f, | 1354 | 0x56, 0xb3, 0xad, 0x96, 0x10, 0x9c, 0x2b, 0x9a, 0xfe, 0xcd, 0xca, 0x79, |
| 1360 | 0xab, 0x58, 0x6f, 0x74, 0xf9, 0xe5, 0xfa, 0x92, 0x90, 0x9c, 0x2b, 0x58, | 1355 | 0xa7, 0xdf, 0x37, 0x75, 0x33, 0xe6, 0xc2, 0xb9, 0xbe, 0x49, 0xce, 0x15, |
| 1361 | 0x43, 0x9d, 0xc4, 0x35, 0x05, 0x1b, 0x0c, 0x79, 0xbe, 0x98, 0xe3, 0xbe, | 1356 | 0xb4, 0x84, 0xe5, 0x5c, 0xc1, 0x7a, 0x43, 0xce, 0x89, 0xd9, 0x59, 0x39, |
| 1362 | 0x31, 0x58, 0xd6, 0x76, 0xb3, 0xf1, 0x8a, 0x32, 0x48, 0x9c, 0x17, 0x2e, | 1357 | 0xb7, 0xac, 0xcb, 0xe7, 0xef, 0xc7, 0x22, 0x13, 0x77, 0xa5, 0x64, 0xed, |
| 1363 | 0xf7, 0xde, 0xcd, 0xf3, 0x03, 0x71, 0x12, 0x31, 0x3d, 0x56, 0x42, 0x3f, | 1358 | 0x4d, 0xb0, 0xc8, 0xed, 0xff, 0x4e, 0xa6, 0x09, 0x5b, 0x52, 0x72, 0x7f, |
| 1364 | 0xdd, 0xd2, 0x37, 0x87, 0xf5, 0x14, 0x72, 0x1c, 0xa7, 0x6f, 0x1b, 0x24, | 1359 | 0x8c, 0xb9, 0x86, 0xe1, 0xf1, 0x3f, 0x93, 0xb9, 0x16, 0x77, 0xee, 0x0f, |
| 1365 | 0x7e, 0x06, 0xfc, 0x3f, 0x65, 0xf2, 0x34, 0xe4, 0x9d, 0x47, 0xcd, 0x1a, | 1360 | 0xa3, 0x73, 0x3f, 0x9a, 0xca, 0x38, 0x86, 0xd2, 0x50, 0xc0, 0x7f, 0x14, |
| 1366 | 0xfe, 0x93, 0x9c, 0xb7, 0x4a, 0xc3, 0xb9, 0xf1, 0x07, 0xd0, 0xdb, 0x4b, | 1361 | 0x9a, 0xff, 0x0c, 0x75, 0x72, 0x8a, 0x72, 0x9e, 0x7e, 0x8f, 0x9c, 0xa2, |
| 1367 | 0x94, 0x79, 0xc1, 0x0a, 0xe6, 0x00, 0x71, 0xe2, 0xfb, 0xc8, 0x98, 0x13, | 1362 | 0x43, 0xf8, 0xef, 0x4e, 0xb8, 0x91, 0x09, 0xbd, 0x63, 0xc5, 0xed, 0x5c, |
| 1368 | 0x9b, 0x53, 0x86, 0xb6, 0xcf, 0xe6, 0x6e, 0x4e, 0xea, 0xc2, 0xc9, 0x1c, | 1363 | 0xc8, 0xeb, 0xbf, 0x27, 0xe1, 0x47, 0xce, 0xce, 0xc9, 0xde, 0x28, 0x15, |
| 1369 | 0x3f, 0xa0, 0x4d, 0x28, 0x85, 0xf3, 0x39, 0x82, 0x0d, 0xe4, 0xe2, 0x82, | 1364 | 0xec, 0xee, 0x4b, 0xc5, 0xa3, 0x2a, 0x8a, 0xf3, 0xab, 0x87, 0x65, 0x6e, |
| 1370 | 0x6f, 0x71, 0xeb, 0xc9, 0x06, 0x49, 0xdb, 0xdc, 0xfe, 0x58, 0xda, 0xc3, | 1365 | 0x5f, 0x4d, 0xc8, 0x7f, 0xd1, 0x2f, 0xa9, 0x8c, 0x4b, 0x2a, 0x73, 0xf9, |
| 1371 | 0x43, 0xe3, 0xe1, 0xf5, 0xaf, 0x4d, 0xfb, 0xfc, 0x6b, 0xd2, 0xf0, 0xb7, | 1366 | 0x41, 0x59, 0xdf, 0x57, 0x4b, 0x45, 0x3f, 0x72, 0x8f, 0x22, 0x2e, 0x39, |
| 1372 | 0xa5, 0x0b, 0x76, 0x59, 0xf0, 0x6d, 0xc1, 0x36, 0x8b, 0x7c, 0x33, 0x97, | 1367 | 0x63, 0x13, 0xaf, 0x6b, 0x8b, 0x10, 0xab, 0xa1, 0x9e, 0xca, 0x0d, 0xaf, |
| 1373 | 0x73, 0x75, 0x49, 0x4e, 0x03, 0x79, 0x3e, 0xf6, 0xde, 0xcd, 0x4f, 0xd1, | 1368 | 0xbf, 0x71, 0xc2, 0xe7, 0x37, 0x27, 0xe0, 0xbf, 0x72, 0x62, 0xba, 0x08, |
| 1374 | 0xd6, 0x5d, 0xe4, 0xf2, 0x5b, 0x8d, 0x78, 0x54, 0x9e, 0xd7, 0x19, 0x21, | 1369 | 0xe4, 0x0a, 0xea, 0x07, 0x61, 0x81, 0xd7, 0xbf, 0x39, 0x31, 0x8f, 0x3c, |
| 1375 | 0xdd, 0x57, 0xa4, 0xf8, 0xb1, 0xa5, 0xfe, 0x77, 0x9c, 0x4f, 0x72, 0xdc, | 1370 | 0x33, 0x6e, 0x2d, 0x6f, 0x3e, 0x6f, 0xcd, 0x8b, 0x18, 0xb9, 0xd3, 0x94, |
| 1376 | 0xf4, 0xa7, 0x4a, 0x72, 0xf3, 0x21, 0x7e, 0x26, 0x18, 0xe0, 0x67, 0x1e, | 1371 | 0xe1, 0x9d, 0x6b, 0xf4, 0xf8, 0x1c, 0xc7, 0xa9, 0xfb, 0xb5, 0x69, 0x7d, |
| 1377 | 0xe4, 0xf3, 0x77, 0xb1, 0x9f, 0x4d, 0xe9, 0xa9, 0x3e, 0xa0, 0xe0, 0x1a, | 1372 | 0x5c, 0x08, 0xfd, 0xff, 0xed, 0xa3, 0x18, 0xe7, 0x68, 0x0f, 0xcd, 0x32, |
| 1378 | 0xb6, 0xd5, 0x18, 0x82, 0x73, 0x69, 0xfd, 0x7f, 0x59, 0x59, 0xef, 0xd4, | 1373 | 0x06, 0x89, 0x77, 0xcc, 0x85, 0x6a, 0x65, 0x2c, 0x81, 0x02, 0x6f, 0x2b, |
| 1379 | 0x7d, 0x11, 0x20, 0x87, 0x80, 0xb3, 0xad, 0x5e, 0xce, 0x15, 0x34, 0x86, | 1374 | 0x8e, 0x4b, 0xe1, 0x5c, 0xbb, 0xa9, 0x8b, 0x62, 0x0c, 0xb3, 0xac, 0x5e, |
| 1380 | 0xe5, 0x5c, 0x41, 0x9b, 0x91, 0x93, 0x4f, 0x7c, 0xb7, 0x9b, 0xb8, 0x7d, | 1375 | 0xc3, 0x57, 0x58, 0x03, 0xe7, 0x9c, 0x65, 0x4f, 0x7d, 0xd8, 0xc9, 0x9c, |
| 1381 | 0xee, 0xfc, 0x42, 0x2c, 0x32, 0x71, 0x7b, 0x0a, 0xb1, 0xa2, 0x88, 0x60, | 1376 | 0xfd, 0x9c, 0xd9, 0xf2, 0x57, 0x4e, 0x44, 0x7d, 0xa5, 0x8c, 0xad, 0xb2, |
| 1382 | 0x91, 0xdb, 0xff, 0x5c, 0xba, 0x9e, 0x5c, 0x5c, 0x9e, 0x7f, 0xbb, 0x39, | 1377 | 0xf6, 0x74, 0xa6, 0x69, 0xca, 0x9a, 0x64, 0x1e, 0xd4, 0x92, 0x95, 0xfb, |
| 1383 | 0xe7, 0x1e, 0xff, 0xb3, 0xe9, 0x2b, 0x71, 0xdb, 0xae, 0x30, 0xda, 0x77, | 1378 | 0x4b, 0x0e, 0xda, 0xb7, 0x85, 0x87, 0x4d, 0xf9, 0x5f, 0x70, 0x26, 0x1e, |
| 1384 | 0xc9, 0x86, 0x23, 0xe6, 0x60, 0xa1, 0x80, 0x7f, 0x14, 0x9a, 0xff, 0x38, | 1379 | 0x73, 0xd0, 0x56, 0xdc, 0x86, 0xde, 0xf1, 0x65, 0xa5, 0x8a, 0xae, 0xec, |
| 1385 | 0x75, 0x72, 0x94, 0x72, 0x1e, 0x3b, 0x4f, 0x4e, 0xd1, 0x21, 0xfc, 0x77, | 1380 | 0x0c, 0x4e, 0x42, 0x0f, 0x6f, 0x51, 0xe8, 0x87, 0x35, 0x0b, 0x4c, 0x99, |
| 1386 | 0x24, 0xdc, 0x48, 0x87, 0xde, 0xb7, 0xe2, 0x36, 0xe7, 0xf0, 0xfa, 0xef, | 1381 | 0x82, 0x37, 0x12, 0x01, 0x33, 0x50, 0x88, 0x4b, 0xe7, 0x38, 0x77, 0x6f, |
| 1387 | 0x4c, 0xf8, 0x91, 0xb5, 0xb9, 0xe7, 0xbf, 0xbb, 0x25, 0x47, 0xec, 0x49, | 1382 | 0x25, 0x8c, 0xce, 0x27, 0x0b, 0xe7, 0x3f, 0xcb, 0x4c, 0x5f, 0x1f, 0x17, |
| 1388 | 0xc5, 0xa3, 0x4c, 0x79, 0xf3, 0xf3, 0xab, 0x87, 0x65, 0x6e, 0xdf, 0x48, | 1383 | 0x7b, 0x74, 0xbb, 0xb7, 0x27, 0x70, 0xc1, 0xd1, 0x8c, 0x0b, 0x87, 0xcc, |
| 1389 | 0xc8, 0xbd, 0xe8, 0x37, 0x54, 0xe8, 0x7e, 0x95, 0xb1, 0xb4, 0xdf, 0x14, | 1384 | 0x12, 0x2c, 0x6f, 0x17, 0x3b, 0x75, 0xbb, 0x77, 0x26, 0x30, 0xe5, 0xe4, |
| 1390 | 0xfb, 0xb5, 0xec, 0x67, 0xfb, 0xac, 0x18, 0xf7, 0x44, 0x02, 0xad, 0xf5, | 1385 | 0xb5, 0x73, 0xe6, 0x5c, 0x62, 0x9a, 0xbd, 0x7e, 0x29, 0x31, 0x22, 0xa6, |
| 1391 | 0xbc, 0xae, 0x2d, 0x40, 0xac, 0x8a, 0x7a, 0x2a, 0x35, 0xbc, 0xfe, 0xba, | 1386 | 0x31, 0xbe, 0x96, 0x47, 0xbc, 0xee, 0xf2, 0x09, 0x68, 0x65, 0xe4, 0x40, |
| 1392 | 0x71, 0x9f, 0xdf, 0x1c, 0x87, 0xff, 0x92, 0xf1, 0xa9, 0x22, 0x90, 0xa3, | 1387 | 0xee, 0x08, 0x5a, 0x1d, 0x49, 0xdd, 0xdf, 0xe6, 0x68, 0xc2, 0xaa, 0xac, |
| 1393 | 0xab, 0x1f, 0x87, 0x05, 0x5e, 0xff, 0xba, 0xc4, 0x1c, 0xa8, 0x91, 0xb8, | 1388 | 0x9f, 0x3c, 0xfa, 0x05, 0xf2, 0x4e, 0xfb, 0x3e, 0x1f, 0x6d, 0xd2, 0xc9, |
| 1394 | 0xb5, 0xa4, 0xe1, 0xb4, 0x35, 0x27, 0x62, 0x64, 0x8f, 0x51, 0x86, 0xf7, | 1389 | 0x0a, 0x43, 0xb3, 0xd4, 0x88, 0xe4, 0x76, 0x55, 0xb8, 0x4b, 0xdb, 0xfa, |
| 1395 | 0x2f, 0xd7, 0xe3, 0x33, 0x1d, 0x47, 0xef, 0xd5, 0xa6, 0xf4, 0xf1, 0x5e, | 1390 | 0x11, 0x35, 0x32, 0x88, 0x9b, 0x9a, 0xdd, 0xad, 0xd5, 0x13, 0x45, 0x9d, |
| 1396 | 0xe8, 0xff, 0x6f, 0x1f, 0x85, 0x38, 0x47, 0x7b, 0x68, 0x90, 0x31, 0x48, | 1391 | 0x20, 0xe6, 0x89, 0x40, 0xab, 0x32, 0xa0, 0x56, 0x46, 0x44, 0x37, 0xfe, |
| 1397 | 0xbc, 0x2b, 0x62, 0xce, 0x29, 0x63, 0xf9, 0x54, 0xe1, 0xb9, 0x47, 0x7e, | 1392 | 0xd6, 0xe4, 0xb8, 0xc8, 0xaa, 0xb9, 0x07, 0xc6, 0x7f, 0xe3, 0x46, 0x79, |
| 1398 | 0x5c, 0x0a, 0xe7, 0x1a, 0x36, 0x0f, 0xce, 0xc5, 0x30, 0xcb, 0xea, 0x36, | 1393 | 0x94, 0x58, 0xf5, 0x43, 0xdf, 0x7f, 0xae, 0xde, 0x33, 0x6e, 0xc1, 0x7b, |
| 1399 | 0x7c, 0xf9, 0xe7, 0x67, 0x9c, 0xb3, 0xcc, 0xd1, 0x2b, 0x9c, 0x58, 0x4c, | 1394 | 0x97, 0x21, 0xdf, 0xb6, 0x6d, 0x31, 0x1f, 0x19, 0xfb, 0x8c, 0x3b, 0x60, |
| 1400 | 0x3f, 0x68, 0xfc, 0x4b, 0x27, 0xa2, 0xbe, 0x62, 0xc6, 0x56, 0x59, 0x17, | 1395 | 0x59, 0x8c, 0x93, 0x3e, 0x28, 0x73, 0x39, 0x1e, 0xfa, 0x1a, 0xe3, 0xd2, |
| 1401 | 0x3a, 0x5e, 0x3f, 0x69, 0x4d, 0x18, 0xf5, 0x68, 0xcc, 0xc8, 0xf3, 0x4c, | 1396 | 0xc6, 0xcc, 0x1f, 0xac, 0x8f, 0x3a, 0x6d, 0x0e, 0x40, 0xde, 0xe4, 0xbf, |
| 1402 | 0x07, 0xed, 0xdb, 0xc2, 0x23, 0xa6, 0xdc, 0x17, 0x9c, 0x89, 0xc7, 0x1c, | 1397 | 0xed, 0x75, 0xe3, 0xf7, 0x96, 0xf0, 0x11, 0x27, 0x7d, 0xba, 0x84, 0x78, |
| 1403 | 0xb4, 0x15, 0xb7, 0xa1, 0xb7, 0xfe, 0xbd, 0x52, 0x81, 0xd2, 0x88, 0x33, | 1398 | 0xbe, 0xdb, 0x74, 0xb6, 0xad, 0x50, 0x14, 0xf4, 0x19, 0x0b, 0xb4, 0x32, |
| 1404 | 0x38, 0x01, 0x3d, 0xbc, 0x5e, 0xa1, 0x1f, 0x56, 0xcd, 0x33, 0x65, 0x0a, | 1399 | 0xc6, 0xa9, 0x5e, 0xfa, 0x75, 0xcc, 0x6b, 0x04, 0x0f, 0x81, 0xe5, 0x32, |
| 1405 | 0xde, 0x4e, 0x04, 0xcc, 0x40, 0x3e, 0x2e, 0x9d, 0xe2, 0xdc, 0xbd, 0x93, | 1400 | 0x9b, 0x37, 0xbb, 0x22, 0xf7, 0x7c, 0x76, 0xac, 0x59, 0xb0, 0x60, 0xea, |
| 1406 | 0x30, 0xda, 0x9f, 0xca, 0x9f, 0xff, 0x22, 0x3d, 0x35, 0xa7, 0x15, 0x7b, | 1401 | 0xb6, 0x27, 0x8d, 0x0e, 0xf2, 0xaf, 0xaf, 0x90, 0xa7, 0xe5, 0xfb, 0xc9, |
| 1407 | 0x74, 0xbb, 0x37, 0x25, 0xf0, 0x9e, 0xa3, 0x01, 0xef, 0xed, 0x31, 0x8b, | 1402 | 0x61, 0xde, 0x07, 0xf4, 0xb3, 0x79, 0x73, 0x69, 0x44, 0x78, 0x58, 0xfa, |
| 1408 | 0x98, 0x8b, 0x89, 0x9d, 0xba, 0xdd, 0x5b, 0x12, 0x98, 0x74, 0xf2, 0xda, | 1403 | 0xb6, 0xc3, 0x46, 0x1b, 0x73, 0xb0, 0x7b, 0x3e, 0x7b, 0xae, 0xf9, 0x00, |
| 1409 | 0x29, 0x73, 0x36, 0x31, 0x4d, 0xe5, 0xb5, 0xb0, 0xd8, 0x59, 0x4c, 0x63, | 1404 | 0xbf, 0xf3, 0x75, 0xd2, 0xa8, 0xfe, 0xc0, 0x3a, 0x15, 0x11, 0xe9, 0xc3, |
| 1410 | 0x7c, 0x2d, 0x8d, 0x78, 0xdd, 0xa5, 0xe3, 0xd0, 0x4a, 0x8c, 0x0a, 0xe6, | 1405 | 0xcf, 0x3e, 0xee, 0xf9, 0x6c, 0xe7, 0x92, 0x31, 0x6c, 0xcf, 0x6e, 0xfb, |
| 1411 | 0xba, 0x68, 0x72, 0x24, 0x75, 0x7f, 0xb3, 0xa3, 0x9e, 0x39, 0xaf, 0x5f, | 1406 | 0x93, 0xfd, 0x54, 0x46, 0x64, 0x3d, 0x34, 0x76, 0xfb, 0xea, 0xc0, 0x3d, |
| 1412 | 0x71, 0x19, 0xdf, 0x63, 0x5e, 0x2f, 0x6b, 0x61, 0x61, 0xda, 0xa4, 0x93, | 1407 | 0x9f, 0xcd, 0x2c, 0x19, 0x64, 0x1f, 0x9f, 0x66, 0x7c, 0xc9, 0xd7, 0x89, |
| 1413 | 0x15, 0x76, 0x4c, 0x57, 0x23, 0x0a, 0xb1, 0xb0, 0x02, 0xb7, 0x6b, 0x1b, | 1408 | 0x2a, 0x8e, 0x0f, 0xd4, 0x41, 0x59, 0x64, 0xdb, 0xed, 0x0b, 0x03, 0xbf, |
| 1414 | 0x3e, 0xab, 0x46, 0xfa, 0x71, 0x7d, 0x83, 0xbb, 0xa9, 0x72, 0xbc, 0xa0, | 1409 | 0xb7, 0x16, 0x0c, 0x94, 0xd8, 0x3a, 0x70, 0x51, 0x07, 0x0f, 0x9a, 0xce, |
| 1415 | 0x13, 0xc4, 0x3c, 0x11, 0xe6, 0x25, 0x06, 0xd4, 0xf2, 0x88, 0xe8, 0xc6, | 1410 | 0x5c, 0xc0, 0x61, 0xeb, 0xa0, 0xcb, 0x47, 0x1d, 0x24, 0xa9, 0x83, 0xdc, |
| 1416 | 0xdf, 0x94, 0x1c, 0x13, 0x59, 0x35, 0x77, 0xdf, 0xd8, 0x3b, 0x25, 0x28, | 1411 | 0x4c, 0x23, 0xfc, 0x36, 0x75, 0xb0, 0x60, 0x7c, 0xf3, 0xe6, 0xb2, 0x08, |
| 1417 | 0x0d, 0x13, 0xab, 0x7e, 0xe2, 0xfb, 0xef, 0xd5, 0x3b, 0x5a, 0x22, 0x78, | 1412 | 0x9c, 0x0e, 0xe3, 0x47, 0x0e, 0xe6, 0x45, 0xaa, 0xcb, 0xd8, 0x4c, 0xbd, |
| 1418 | 0xef, 0x32, 0xe4, 0xbf, 0x6d, 0x5b, 0x6e, 0x77, 0xe4, 0x83, 0x98, 0x3b, | 1413 | 0xdd, 0xf3, 0xd9, 0xf9, 0x4b, 0x6c, 0x9d, 0xdf, 0xea, 0x0e, 0xdc, 0x47, |
| 1419 | 0x60, 0x59, 0x8c, 0x93, 0x3e, 0x28, 0xb3, 0x39, 0x1e, 0xfa, 0x1a, 0xe7, | 1414 | 0xbb, 0x69, 0xa5, 0xad, 0x6f, 0xe5, 0xd1, 0xce, 0xa3, 0x8f, 0x47, 0x02, |
| 1420 | 0x66, 0x4d, 0xfa, 0x0f, 0xd6, 0xe7, 0x9c, 0x36, 0x07, 0x70, 0x17, 0x47, | 1415 | 0xbb, 0xb3, 0x1b, 0xa9, 0xab, 0x35, 0x1c, 0xc7, 0x3a, 0xca, 0xd5, 0xc5, |
| 1421 | 0x3a, 0x6e, 0x79, 0xcb, 0xf8, 0xc0, 0x7a, 0x33, 0xc1, 0x5c, 0xd9, 0x90, | 1416 | 0xdf, 0x31, 0xfe, 0x8e, 0xf3, 0xb7, 0xcc, 0x8f, 0x7a, 0x49, 0xb6, 0xd8, |
| 1422 | 0x67, 0x43, 0x73, 0xb0, 0xcd, 0x74, 0x36, 0x2f, 0x55, 0x14, 0xf4, 0x18, | 1417 | 0x25, 0xd9, 0x1c, 0x94, 0xc7, 0x63, 0xaf, 0x55, 0x96, 0x47, 0x8e, 0xdf, |
| 1423 | 0xf3, 0xb4, 0x12, 0xc6, 0xa9, 0x6e, 0xfa, 0x75, 0xcc, 0x6b, 0x04, 0xf7, | 1418 | 0xba, 0x3a, 0xd0, 0xc9, 0x36, 0xfe, 0xbf, 0x32, 0xd9, 0x57, 0xe0, 0x32, |
| 1424 | 0x80, 0xe5, 0xd2, 0xeb, 0xd6, 0xb9, 0x22, 0x77, 0xde, 0x32, 0xd2, 0x20, | 1419 | 0xe2, 0x3e, 0x27, 0x44, 0x3e, 0xbd, 0xa3, 0x13, 0x39, 0x62, 0xef, 0xef, |
| 1425 | 0x58, 0x10, 0x6e, 0x7b, 0xca, 0x68, 0x41, 0x4f, 0x66, 0x10, 0xbd, 0x99, | 1420 | 0xf2, 0xd8, 0x4b, 0xd9, 0xaa, 0x38, 0x3f, 0xcf, 0x2d, 0x49, 0xcf, 0xf6, |
| 1426 | 0x5c, 0x3f, 0x59, 0xcc, 0xf9, 0x98, 0x7e, 0xd6, 0xad, 0x2b, 0x8e, 0x08, | 1421 | 0x18, 0xf0, 0xb9, 0x8d, 0x7e, 0x0c, 0x64, 0x47, 0xa8, 0x03, 0xb1, 0x93, |
| 1427 | 0xf7, 0x3a, 0x73, 0xcb, 0x5e, 0x23, 0x8a, 0xcd, 0x99, 0x3b, 0x6f, 0x39, | 1422 | 0x2f, 0x52, 0x7f, 0xdd, 0xac, 0x73, 0x8a, 0xb1, 0x4c, 0x8f, 0xd2, 0x67, |
| 1428 | 0xd5, 0xd0, 0xcf, 0xff, 0xb9, 0x3a, 0x43, 0xa8, 0xfc, 0xd8, 0x3a, 0x65, | 1423 | 0x69, 0xb3, 0x7a, 0x98, 0x07, 0xed, 0xe5, 0x51, 0xb6, 0x9b, 0xa6, 0x4c, |
| 1429 | 0x11, 0xe9, 0xa3, 0xe3, 0x96, 0xa7, 0x8c, 0x3b, 0x6f, 0x69, 0x5f, 0xf4, | 1424 | 0x25, 0xb4, 0x5f, 0x05, 0x72, 0x0f, 0xf7, 0x0c, 0xdb, 0x3f, 0x6c, 0xfc, |
| 1430 | 0x4d, 0x6c, 0xca, 0xb4, 0xff, 0xc9, 0x7e, 0xca, 0x59, 0xa7, 0x34, 0x72, | 1425 | 0xba, 0xe2, 0x14, 0xc7, 0x1e, 0xf5, 0x6e, 0xc6, 0x68, 0x93, 0xe8, 0x2a, |
| 1431 | 0xa8, 0xed, 0x9a, 0xc0, 0x9d, 0xb7, 0xa4, 0x17, 0xf5, 0xb2, 0x8f, 0x55, | 1426 | 0x46, 0x5d, 0xe9, 0x3e, 0xff, 0x34, 0x5d, 0x5e, 0x96, 0xf7, 0x0a, 0xf2, |
| 1432 | 0x8c, 0x2f, 0xb9, 0x3a, 0x51, 0xc6, 0xf6, 0x8f, 0xd3, 0x41, 0x49, 0x64, | 1427 | 0x09, 0xcb, 0xfa, 0x89, 0xd1, 0xb2, 0x90, 0x49, 0x21, 0xd2, 0x76, 0xae, |
| 1433 | 0xa2, 0x6d, 0x7e, 0xe0, 0x03, 0x6b, 0x5e, 0x5f, 0x91, 0xad, 0x03, 0x17, | 1428 | 0x64, 0x59, 0x25, 0xf6, 0xfe, 0xb3, 0xd8, 0xed, 0x1b, 0x0c, 0x91, 0xb7, |
| 1434 | 0x75, 0xf0, 0xa0, 0xe9, 0xcc, 0x06, 0x1c, 0xb6, 0x0e, 0x3a, 0x7c, 0xd4, | 1429 | 0xb1, 0x7d, 0x3b, 0x8d, 0x73, 0x73, 0x86, 0xfe, 0x1c, 0xf8, 0x9d, 0x15, |
| 1435 | 0x41, 0x92, 0x3a, 0xc8, 0xd6, 0x18, 0xe1, 0x77, 0xa9, 0x83, 0x79, 0x63, | 1430 | 0x9d, 0x29, 0xf5, 0xe6, 0xe1, 0x15, 0xc6, 0xde, 0xa8, 0x16, 0xef, 0x74, |
| 1436 | 0xeb, 0xd6, 0x95, 0x44, 0xe0, 0x74, 0x18, 0xaf, 0x3a, 0x9c, 0x9c, 0x0b, | 1431 | 0x0b, 0xbf, 0x37, 0x9c, 0xe1, 0x35, 0x88, 0x33, 0xa1, 0xd4, 0x83, 0x77, |
| 1437 | 0x97, 0xb1, 0x8e, 0x7a, 0xbb, 0xf3, 0x96, 0x8b, 0x17, 0xd9, 0x3a, 0xff, | 1432 | 0x92, 0x7b, 0x9e, 0x33, 0xf2, 0x7e, 0x7c, 0x24, 0xa3, 0x47, 0x1f, 0xe6, |
| 1438 | 0xb2, 0x3b, 0xb0, 0xc1, 0xde, 0x3b, 0xd7, 0x9d, 0x59, 0xc3, 0xa3, 0x99, | 1433 | 0x39, 0x39, 0x30, 0xb9, 0x54, 0x31, 0x4e, 0x05, 0xc9, 0x7b, 0x3d, 0x70, |
| 1439 | 0xc7, 0x7d, 0x3c, 0x7a, 0x98, 0xb3, 0xdc, 0x4c, 0x5d, 0x35, 0x71, 0x1c, | 1434 | 0x32, 0x87, 0x6a, 0x75, 0xf4, 0x04, 0x5d, 0xa0, 0x2f, 0x96, 0xcb, 0xb8, |
| 1440 | 0x2b, 0x28, 0xd7, 0x46, 0xfe, 0x6e, 0xe5, 0xef, 0x0e, 0xfe, 0x96, 0xf9, | 1435 | 0xe2, 0x1c, 0xa3, 0xe0, 0xb6, 0x5b, 0xdb, 0x68, 0x63, 0x79, 0x7c, 0xa1, |
| 1441 | 0x51, 0xcf, 0xca, 0x16, 0x3b, 0x2b, 0x9b, 0x83, 0xf2, 0x78, 0x88, 0x57, | 1436 | 0x0b, 0x1e, 0x6d, 0x53, 0xa6, 0x18, 0xe3, 0x3c, 0xda, 0xfa, 0x84, 0xe0, |
| 1442 | 0x32, 0x26, 0xf7, 0x57, 0xae, 0x09, 0xc4, 0xd8, 0xc6, 0xfd, 0xa5, 0xb2, | 1437 | 0x82, 0xdc, 0x77, 0x0d, 0x53, 0xcf, 0x82, 0x0f, 0xaf, 0xda, 0x7b, 0xd5, |
| 1443 | 0x6f, 0xc8, 0x65, 0xc4, 0x7d, 0x4e, 0x88, 0x7c, 0x7a, 0x6b, 0x3b, 0xb2, | 1438 | 0x88, 0x11, 0x55, 0x4e, 0x23, 0xdf, 0xae, 0xc6, 0x76, 0xdb, 0x1d, 0x1a, |
| 1444 | 0xc4, 0xde, 0xdf, 0xe7, 0xb0, 0x97, 0xb2, 0x55, 0x70, 0x7e, 0x5e, 0x58, | 1439 | 0x2e, 0xfb, 0xb8, 0xae, 0xb5, 0x3b, 0x64, 0x1f, 0x1d, 0xd1, 0x2b, 0x53, |
| 1445 | 0x34, 0x34, 0xc3, 0x63, 0xc0, 0xe7, 0x36, 0xe2, 0xcc, 0xf9, 0x13, 0xd4, | 1440 | 0xa8, 0x97, 0xc7, 0xb9, 0x65, 0x2e, 0x1b, 0xe7, 0xd8, 0x06, 0xf3, 0x8e, |
| 1446 | 0x81, 0xd8, 0xc9, 0x3d, 0xd4, 0x5f, 0x27, 0xeb, 0x1c, 0x65, 0x2c, 0xdb, | 1441 | 0xe5, 0x89, 0xf7, 0xf7, 0x2f, 0xfd, 0x49, 0xbf, 0x3d, 0x35, 0x2a, 0x64, |
| 1447 | 0xcd, 0xfe, 0xed, 0xf5, 0xdb, 0xb0, 0xfd, 0x9c, 0x0c, 0xba, 0x79, 0x9c, | 1442 | 0x9f, 0x8f, 0xdc, 0x13, 0xeb, 0x64, 0xbe, 0x36, 0x7d, 0xaf, 0x8f, 0x7e, |
| 1448 | 0xed, 0xed, 0x35, 0x7e, 0x53, 0x76, 0xb4, 0x5e, 0xf6, 0x53, 0x3a, 0x31, | 1443 | 0x82, 0xed, 0x1f, 0x8f, 0x73, 0x3e, 0xe7, 0x1a, 0xb2, 0x0f, 0x48, 0xee, |
| 1449 | 0x6c, 0xcf, 0xbb, 0x42, 0x2e, 0x73, 0x11, 0x79, 0x82, 0x65, 0xfd, 0xd4, | 1444 | 0xa1, 0x4d, 0xdf, 0xf7, 0x63, 0xdf, 0x9f, 0x2c, 0x17, 0x2e, 0x73, 0x98, |
| 1450 | 0x68, 0x9c, 0xef, 0xb0, 0xed, 0xea, 0x50, 0x9b, 0x3b, 0xe0, 0xc6, 0x90, | 1445 | 0x38, 0x19, 0x6d, 0x97, 0xfa, 0x96, 0xf5, 0xe3, 0x05, 0x41, 0xe4, 0x66, |
| 1451 | 0xbd, 0x06, 0x6e, 0x59, 0x45, 0xb6, 0x7d, 0x89, 0x2c, 0x75, 0xcd, 0x9b, | 1446 | 0x38, 0x31, 0xd2, 0x00, 0x0c, 0x27, 0x45, 0xd7, 0xe9, 0xcf, 0x6c, 0x30, |
| 1452 | 0x68, 0x78, 0xeb, 0xd2, 0x1f, 0x90, 0x27, 0x8a, 0xfc, 0x73, 0x70, 0x92, | 1447 | 0xfe, 0xcd, 0x8a, 0xd6, 0x36, 0x6a, 0xbd, 0xaa, 0xac, 0x67, 0x8c, 0xdd, |
| 1453 | 0x31, 0x35, 0xaa, 0xc5, 0xdb, 0x45, 0xd6, 0x32, 0xc3, 0x19, 0xbe, 0x16, | 1448 | 0xda, 0x67, 0xd4, 0x6b, 0x7d, 0x6a, 0xee, 0x18, 0xe3, 0xd0, 0x01, 0xe6, |
| 1454 | 0xf1, 0x16, 0x27, 0xfb, 0x6b, 0x26, 0xa7, 0x3c, 0x95, 0xc7, 0xee, 0x7d, | 1449 | 0xe8, 0xe5, 0x82, 0x15, 0x35, 0x46, 0xb4, 0xbf, 0x06, 0x0d, 0xf0, 0xdb, |
| 1455 | 0x69, 0x3d, 0xb6, 0x5f, 0xc9, 0xf1, 0xd3, 0xde, 0xb1, 0x42, 0xfc, 0x09, | 1450 | 0xf7, 0x24, 0xf4, 0xf8, 0x37, 0x54, 0x23, 0xb8, 0x56, 0xf8, 0xa7, 0xfa, |
| 1456 | 0x92, 0xcf, 0x7a, 0xe0, 0x8c, 0xe8, 0xfe, 0x26, 0x47, 0x57, 0xd0, 0x05, | 1451 | 0x8e, 0x95, 0xa6, 0x0d, 0x7c, 0xa1, 0xe1, 0x67, 0x65, 0x79, 0x6c, 0x8f, |
| 1457 | 0xfa, 0x58, 0xa9, 0xc8, 0x1b, 0xa7, 0xec, 0x82, 0xc7, 0x6e, 0x6d, 0x8d, | 1452 | 0x76, 0xce, 0xe2, 0xbc, 0xbc, 0xb9, 0x48, 0xf7, 0x67, 0x14, 0xd1, 0x91, |
| 1458 | 0x8d, 0xd1, 0xf1, 0xf9, 0x2e, 0x78, 0xb4, 0xb5, 0xe9, 0x42, 0xec, 0xf2, | 1453 | 0x70, 0xae, 0x11, 0xec, 0x62, 0x3c, 0xfe, 0xb7, 0x86, 0x08, 0x8e, 0xf0, |
| 1459 | 0x68, 0x6d, 0x09, 0xf1, 0x77, 0x59, 0xab, 0x0f, 0xdb, 0xdc, 0xe3, 0x48, | 1454 | 0xfb, 0xa7, 0xd7, 0xca, 0x1e, 0x37, 0xcb, 0x0a, 0x06, 0x16, 0x84, 0x6b, |
| 1460 | 0xe6, 0xa5, 0x52, 0xd9, 0x8b, 0x47, 0xdf, 0xaf, 0x70, 0x1a, 0xb9, 0x76, | 1455 | 0x38, 0x86, 0x67, 0xf8, 0x7f, 0x7f, 0xf6, 0x75, 0xeb, 0xdc, 0x2c, 0x63, |
| 1461 | 0x35, 0xb6, 0xdb, 0xe2, 0xd0, 0x70, 0xce, 0x77, 0x75, 0xad, 0xc5, 0x21, | 1456 | 0x70, 0x25, 0x83, 0xe2, 0xf0, 0x84, 0xae, 0x4d, 0xa9, 0xff, 0xd9, 0x3d, |
| 1462 | 0xfb, 0x5f, 0x89, 0x4a, 0xe9, 0x7c, 0xbd, 0x1c, 0x7e, 0x2d, 0x76, 0xd9, | 1457 | 0x37, 0xf6, 0x3a, 0xe3, 0x67, 0x9e, 0x0f, 0x34, 0x6a, 0x49, 0xb5, 0xae, |
| 1463 | 0xf8, 0xc5, 0x36, 0x4a, 0x81, 0x25, 0x89, 0x0b, 0xfb, 0x97, 0xfe, 0xa4, | 1458 | 0x5c, 0xf4, 0x3a, 0x3c, 0xf1, 0x52, 0x21, 0xce, 0xe7, 0xef, 0x75, 0x3e, |
| 1464 | 0xdf, 0xae, 0x2a, 0x15, 0x13, 0xf6, 0xb3, 0x92, 0x83, 0x99, 0x18, 0x06, | 1459 | 0x7e, 0x49, 0x3f, 0x72, 0xdf, 0x76, 0x1e, 0x6d, 0x2e, 0x1a, 0xa7, 0xde, |
| 1465 | 0x53, 0x53, 0xf7, 0xe8, 0xe9, 0x87, 0xd8, 0xfe, 0x81, 0x38, 0xe7, 0x69, | 1460 | 0xdd, 0x33, 0x38, 0xe6, 0x2f, 0x34, 0xdc, 0x69, 0x8f, 0xb3, 0xd6, 0x98, |
| 1466 | 0xb6, 0x21, 0xfb, 0xf7, 0x64, 0xcf, 0xde, 0xd4, 0xfd, 0x7a, 0x22, 0x5b, | 1461 | 0xc3, 0x31, 0x2a, 0xd0, 0x1a, 0x9c, 0xe5, 0x79, 0xfe, 0xd8, 0x42, 0x96, |
| 1467 | 0x65, 0x19, 0x81, 0x0d, 0x7b, 0x89, 0x7f, 0xd1, 0x16, 0xa9, 0x6f, 0x59, | 1462 | 0x96, 0xb6, 0x5a, 0xe9, 0x43, 0x25, 0xac, 0x73, 0xbd, 0x79, 0x70, 0x76, |
| 1468 | 0xaf, 0xcd, 0x0b, 0x22, 0x3b, 0xcd, 0x89, 0xc1, 0xb9, 0xc0, 0x40, 0x52, | 1463 | 0x4f, 0x93, 0xee, 0xfb, 0x02, 0x6d, 0x35, 0xd4, 0xf0, 0x2b, 0x2b, 0xaa, |
| 1469 | 0xf6, 0x53, 0x9d, 0x89, 0xad, 0x66, 0x1e, 0x19, 0xad, 0xae, 0xd3, 0xba, | 1464 | 0x39, 0xcd, 0xaf, 0x73, 0xd4, 0x77, 0x26, 0xa4, 0xac, 0xcc, 0xab, 0x11, |
| 1470 | 0x55, 0xd9, 0x0b, 0xf5, 0xc1, 0x97, 0x7b, 0x8c, 0x5a, 0xad, 0x47, 0xcd, | 1465 | 0x6d, 0x50, 0xde, 0xb2, 0x30, 0x33, 0x10, 0x6e, 0xb0, 0xc7, 0x0f, 0xdc, |
| 1471 | 0xee, 0x67, 0x7c, 0xd9, 0x0d, 0xcc, 0x2e, 0x13, 0x0c, 0xa8, 0x32, 0xa2, | 1466 | 0x91, 0x19, 0x61, 0xae, 0x2c, 0x6d, 0x2a, 0x58, 0x19, 0x78, 0xc3, 0xf2, |
| 1472 | 0xbd, 0x55, 0x98, 0x0b, 0x7f, 0xb5, 0x8d, 0xcb, 0xf1, 0x6f, 0xab, 0x46, | 1467 | 0xcf, 0x1a, 0xc1, 0xce, 0xec, 0x1f, 0xe3, 0xb0, 0x5f, 0x21, 0x87, 0xd6, |
| 1473 | 0x70, 0xa5, 0xf0, 0x4a, 0xf5, 0x7d, 0x6b, 0x88, 0xdc, 0xe4, 0xee, 0xb9, | 1468 | 0x3b, 0xe2, 0x79, 0xbf, 0x6b, 0x03, 0xfb, 0x2d, 0x37, 0xec, 0x3c, 0xfc, |
| 1474 | 0xff, 0xa7, 0x34, 0xbf, 0xee, 0xd4, 0x3e, 0x9d, 0xf3, 0xf2, 0xf3, 0x05, | 1469 | 0xb6, 0x44, 0x40, 0xd6, 0x8c, 0xc6, 0x3e, 0x33, 0x1e, 0x90, 0xbd, 0x19, |
| 1475 | 0xba, 0x3f, 0xad, 0x88, 0x8e, 0x84, 0x4b, 0x25, 0xb0, 0x95, 0x71, 0xf6, | 1470 | 0x5e, 0xe4, 0xda, 0xa5, 0x4c, 0xbd, 0x36, 0x8e, 0x1c, 0x19, 0xa6, 0xec, |
| 1476 | 0xbf, 0xe6, 0x46, 0xb0, 0x8f, 0xff, 0x7f, 0x76, 0xa5, 0xec, 0x4d, 0xb5, | 1471 | 0x23, 0x39, 0x54, 0x9e, 0x5f, 0x47, 0x70, 0xc8, 0x3a, 0xb8, 0xf6, 0x2a, |
| 1477 | 0xac, 0x60, 0x60, 0x5e, 0xb8, 0x8a, 0x63, 0x78, 0x96, 0xf7, 0x7b, 0x33, | 1472 | 0x39, 0x61, 0x9b, 0x21, 0x6d, 0x28, 0x58, 0x18, 0x98, 0x81, 0xc6, 0xb5, |
| 1478 | 0x6f, 0x59, 0xa7, 0xa6, 0x1b, 0xfd, 0xcb, 0x18, 0xec, 0x06, 0xc6, 0x75, | 1473 | 0x3f, 0x7a, 0xb9, 0x24, 0x90, 0xf7, 0xdb, 0x3e, 0xc3, 0xd8, 0x76, 0x1a, |
| 1479 | 0x6d, 0x52, 0xfd, 0xef, 0xee, 0x95, 0x83, 0xbb, 0x82, 0x63, 0xf9, 0x7e, | 1474 | 0xbf, 0x26, 0x56, 0xc9, 0x3e, 0x93, 0xb4, 0xd4, 0x63, 0x5b, 0x0d, 0xc8, |
| 1480 | 0xa0, 0x4e, 0x4b, 0xaa, 0xa5, 0x65, 0xa2, 0xd7, 0x81, 0xf1, 0x57, 0xa6, | 1475 | 0x68, 0x4e, 0x8c, 0x1a, 0xb2, 0x0f, 0xd2, 0xb2, 0x56, 0x07, 0x5e, 0xa3, |
| 1481 | 0x3c, 0x3b, 0x28, 0xf0, 0x59, 0x7b, 0x5d, 0xa5, 0x77, 0x88, 0xbe, 0x3e, | 1476 | 0xdf, 0x51, 0x9e, 0xac, 0xb3, 0x50, 0x57, 0xca, 0x14, 0xf6, 0x70, 0x28, |
| 1482 | 0xa4, 0x45, 0xe3, 0xd4, 0xbb, 0x7b, 0x1a, 0xc7, 0x7c, 0xf7, 0xdc, 0x2f, | 1477 | 0x2d, 0x9f, 0x15, 0x9d, 0x3c, 0x61, 0xc6, 0x99, 0x35, 0x48, 0x7c, 0x18, |
| 1483 | 0xd9, 0xe3, 0xac, 0x36, 0x66, 0x72, 0x8c, 0x0a, 0xb4, 0xb9, 0xff, 0x99, | 1478 | 0xfb, 0xcc, 0xeb, 0x86, 0x70, 0x78, 0xdd, 0x5c, 0xa9, 0x54, 0x33, 0xde, |
| 1484 | 0x5f, 0x7f, 0x6d, 0x24, 0xfb, 0x1a, 0xb2, 0x9a, 0xe8, 0x1b, 0x45, 0xac, | 1479 | 0x3a, 0xfd, 0x63, 0xf6, 0x7a, 0x86, 0x9f, 0x58, 0x2e, 0x3c, 0x54, 0x72, |
| 1485 | 0x73, 0xb5, 0xf9, 0xf0, 0x8c, 0xae, 0x7a, 0xdd, 0x77, 0x37, 0x6d, 0x34, | 1480 | 0x43, 0x27, 0x9e, 0x34, 0x6a, 0xf0, 0x84, 0x96, 0xe7, 0x74, 0xc4, 0x44, |
| 1486 | 0x34, 0xf7, 0xd7, 0x16, 0x6d, 0xda, 0xfc, 0x16, 0x47, 0x7d, 0x5b, 0xc2, | 1481 | 0xbc, 0x90, 0x58, 0x90, 0xa3, 0x87, 0x90, 0x1b, 0x1b, 0x9d, 0x17, 0x95, |
| 1487 | 0x8e, 0x55, 0x9c, 0x57, 0x23, 0x3a, 0x57, 0x79, 0xc7, 0x42, 0x4d, 0x20, | 1482 | 0x5f, 0x33, 0x6f, 0x04, 0x9e, 0xcb, 0x74, 0xe1, 0x41, 0xb9, 0x8f, 0xa5, |
| 1488 | 0x3c, 0xd7, 0x1e, 0x3f, 0x70, 0x6b, 0x3a, 0x81, 0x6d, 0x29, 0x69, 0x53, | 1483 | 0xd4, 0xb7, 0x35, 0x3a, 0xa4, 0xbf, 0x2e, 0xec, 0xb2, 0xd7, 0x65, 0xc7, |
| 1489 | 0xc1, 0xb2, 0xc0, 0xdb, 0x96, 0x7f, 0x7a, 0x02, 0x5b, 0x32, 0x9f, 0xc4, | 1484 | 0x3e, 0x73, 0xd8, 0x78, 0xa4, 0x20, 0xab, 0x60, 0xfe, 0xd8, 0x67, 0x9e, |
| 1490 | 0x4d, 0x07, 0xc9, 0x8d, 0xf5, 0xd6, 0x38, 0xf4, 0x68, 0xee, 0xd9, 0xd4, | 1485 | 0x34, 0x4e, 0xdb, 0x73, 0x27, 0x7b, 0x16, 0xfa, 0x4d, 0xc1, 0xc6, 0x72, |
| 1491 | 0x1c, 0x59, 0xdb, 0x96, 0xbd, 0x45, 0xb7, 0x24, 0x02, 0x70, 0x97, 0x13, | 1486 | 0xa8, 0xcc, 0x2f, 0x1c, 0xc6, 0xa7, 0xe1, 0xa8, 0x19, 0xa3, 0xed, 0xc9, |
| 1492 | 0x83, 0xc7, 0x02, 0xf2, 0x2c, 0xd3, 0x8b, 0x6c, 0x8b, 0x94, 0xa9, 0xd5, | 1487 | 0x7a, 0xcf, 0xed, 0x70, 0xd6, 0xb8, 0xe8, 0x9b, 0x77, 0xc0, 0x55, 0x23, |
| 1493 | 0xc6, 0x90, 0x25, 0x73, 0x94, 0xb5, 0xd0, 0xfe, 0xb2, 0xdc, 0x3e, 0x09, | 1488 | 0x9c, 0xbe, 0xc8, 0xb7, 0xdb, 0xf8, 0xbf, 0xe8, 0x76, 0xca, 0xd6, 0xad, |
| 1494 | 0x1a, 0x5e, 0x8d, 0xae, 0xbd, 0x41, 0xae, 0xd7, 0x6c, 0x48, 0x1b, 0x0a, | 1489 | 0x93, 0xd8, 0xd3, 0x27, 0xf9, 0x9f, 0x51, 0x4d, 0x1d, 0xe9, 0x1d, 0xb2, |
| 1495 | 0xe6, 0x07, 0xa6, 0xa1, 0x6e, 0xe5, 0xab, 0xaf, 0x17, 0x05, 0x8a, 0x18, | 1490 | 0xae, 0x5d, 0x49, 0x6c, 0x65, 0x1c, 0x75, 0x57, 0xb3, 0xcc, 0xdb, 0xd4, |
| 1496 | 0x4f, 0xc4, 0xb7, 0x8c, 0x8d, 0xc7, 0xf0, 0x1b, 0x62, 0x90, 0xec, 0x19, | 1491 | 0xfb, 0x82, 0x81, 0x0a, 0x72, 0x7d, 0xcb, 0x7a, 0x87, 0x5c, 0x7f, 0x61, |
| 1497 | 0x4b, 0x4a, 0x3d, 0xb6, 0x35, 0x17, 0x69, 0xf1, 0x53, 0x43, 0xf6, 0x2f, | 1492 | 0xa0, 0x31, 0x67, 0x30, 0xfe, 0xe1, 0x66, 0xbd, 0x4d, 0xee, 0x11, 0x6f, |
| 1498 | 0x5b, 0xd6, 0x35, 0x81, 0x37, 0xad, 0x68, 0x0d, 0xe5, 0x21, 0x5f, 0xcb, | 1493 | 0x30, 0x2e, 0x5a, 0xb1, 0x75, 0x52, 0x46, 0xf7, 0xc5, 0x94, 0x62, 0x1f, |
| 1499 | 0xd5, 0x95, 0x32, 0xf9, 0xbd, 0x40, 0x4a, 0xe3, 0x2d, 0xa2, 0x93, 0x27, | 1494 | 0x8b, 0xe0, 0x9f, 0x61, 0xc1, 0x15, 0xb1, 0x88, 0x5d, 0xba, 0x19, 0x45, |
| 1500 | 0xcd, 0x38, 0xb3, 0x01, 0xc1, 0xfd, 0x0f, 0x62, 0x6f, 0x19, 0x8a, 0xfd, | 1495 | 0x8b, 0xec, 0xf5, 0x69, 0x97, 0xf1, 0xbb, 0xe4, 0x7e, 0x03, 0xa2, 0x93, |
| 1501 | 0x8c, 0x71, 0x99, 0x52, 0xc9, 0x38, 0xea, 0xf4, 0x8f, 0xd8, 0xeb, 0x05, | 1496 | 0x2e, 0x18, 0xb9, 0x23, 0x32, 0x67, 0xb3, 0x2d, 0x04, 0x16, 0xff, 0x8e, |
| 1502 | 0x1d, 0xc4, 0x68, 0xe1, 0x97, 0x92, 0xf3, 0x39, 0xf1, 0x94, 0x51, 0x85, | 1497 | 0x39, 0x93, 0xcc, 0x4f, 0x7d, 0xae, 0x49, 0xc9, 0x05, 0x7d, 0xe4, 0xfe, |
| 1503 | 0x27, 0xb5, 0x1c, 0x57, 0x23, 0xd6, 0xe1, 0x07, 0x89, 0x79, 0x59, 0x7a, | 1498 | 0x8f, 0x40, 0x6f, 0x4f, 0x50, 0xd7, 0xad, 0x21, 0x1b, 0xf3, 0x7c, 0x09, |
| 1504 | 0x08, 0x39, 0xaf, 0xd1, 0x7e, 0x46, 0xf9, 0x0d, 0xfd, 0x1c, 0x78, 0x21, | 1499 | 0xd8, 0x7c, 0xdf, 0x7c, 0x05, 0x1f, 0x45, 0x25, 0x73, 0xdc, 0x86, 0xf1, |
| 1505 | 0xbd, 0x11, 0x0f, 0xca, 0x1a, 0xa2, 0x52, 0xdb, 0x5c, 0xe7, 0x90, 0xfe, | 1500 | 0x35, 0xa8, 0xaa, 0x89, 0xfa, 0xca, 0xb1, 0x94, 0xe7, 0x5b, 0x99, 0xc7, |
| 1506 | 0x36, 0x62, 0x6b, 0x46, 0xda, 0xfa, 0x20, 0xb6, 0xd7, 0xd8, 0x9d, 0x97, | 1501 | 0x7c, 0x12, 0x55, 0x6b, 0x63, 0x48, 0x70, 0xec, 0x95, 0xc6, 0xad, 0xbc, |
| 1507 | 0x55, 0xb0, 0xfc, 0x83, 0xd8, 0x53, 0xc6, 0xe3, 0xf6, 0xdc, 0xc9, 0x73, | 1502 | 0xd6, 0x87, 0x64, 0xca, 0xc5, 0x71, 0xfc, 0xd0, 0xaa, 0x9a, 0x29, 0xb2, |
| 1508 | 0xaf, 0x5e, 0x53, 0x30, 0xaf, 0x14, 0x2a, 0xf3, 0x06, 0x87, 0x71, 0x33, | 1503 | 0x99, 0xde, 0x0a, 0x83, 0x79, 0xb7, 0xad, 0x0b, 0x62, 0x79, 0x4a, 0xb8, |
| 1509 | 0x1c, 0x55, 0xdf, 0xa4, 0xed, 0xc9, 0xbe, 0x9a, 0xaf, 0xc2, 0x59, 0xe5, | 1504 | 0x54, 0x63, 0x74, 0x0b, 0xfe, 0x40, 0xdb, 0xd5, 0x3b, 0x36, 0x2a, 0x71, |
| 1510 | 0xa2, 0x6f, 0xde, 0x0a, 0x57, 0x95, 0x70, 0xf5, 0x02, 0x8f, 0x8e, 0xf2, | 1505 | 0xda, 0x6c, 0x82, 0x3a, 0x97, 0xb2, 0x96, 0xb5, 0x2a, 0xf0, 0x5b, 0xea, |
| 1511 | 0xbe, 0xe8, 0x36, 0xdc, 0x26, 0xba, 0x75, 0x12, 0x87, 0x7a, 0x24, 0xaf, | 1506 | 0x38, 0xce, 0x73, 0xc3, 0xff, 0x1a, 0xd4, 0xa5, 0xa5, 0x38, 0x6b, 0xc5, |
| 1512 | 0x33, 0x2a, 0xa9, 0x23, 0xbd, 0x95, 0x9c, 0x1e, 0xe5, 0xc4, 0x4c, 0xc6, | 1507 | 0x35, 0x1f, 0xed, 0x52, 0x5d, 0x27, 0xbc, 0x6b, 0x45, 0x48, 0xad, 0x40, |
| 1513 | 0x47, 0x37, 0xf3, 0xb7, 0xb6, 0x77, 0xa9, 0xf7, 0x79, 0x7d, 0x65, 0xe4, | 1508 | 0xb9, 0x56, 0xb0, 0xd3, 0x74, 0x41, 0x97, 0x53, 0xb7, 0xf5, 0x19, 0x6f, |
| 1514 | 0xf0, 0x96, 0xf5, 0x3e, 0x39, 0xfc, 0xfc, 0x40, 0x5d, 0xd6, 0x20, 0x4e, | 1509 | 0x94, 0xcb, 0x75, 0x87, 0x7d, 0xdd, 0x5f, 0xb8, 0x9e, 0xe6, 0xf5, 0xf3, |
| 1515 | 0xe1, 0x06, 0xbd, 0x39, 0x4e, 0xbc, 0x59, 0x6d, 0x9c, 0xb1, 0x62, 0xab, | 1510 | 0xbc, 0x3e, 0x48, 0xdd, 0xab, 0x57, 0x48, 0xfd, 0xcd, 0xa6, 0xd4, 0x27, |
| 1516 | 0xa4, 0x8c, 0xee, 0x8b, 0x29, 0x85, 0x3e, 0x16, 0xc0, 0x3f, 0xcd, 0x82, | 1511 | 0x1d, 0x31, 0x12, 0x85, 0xf9, 0x88, 0xdd, 0x9e, 0x2f, 0xbb, 0xed, 0xf6, |
| 1517 | 0x2b, 0x22, 0xcf, 0x14, 0x64, 0xbd, 0xb8, 0x51, 0x9e, 0xf5, 0xb5, 0xc8, | 1512 | 0x7c, 0x1b, 0x4e, 0xb6, 0x11, 0x8f, 0x96, 0xc3, 0x44, 0x45, 0x40, 0x70, |
| 1518 | 0xf8, 0x5d, 0xb2, 0xee, 0x86, 0xe8, 0x84, 0x0b, 0x46, 0x76, 0x9f, 0xcc, | 1513 | 0x5e, 0xe4, 0xe2, 0xdc, 0x65, 0x45, 0xae, 0xad, 0x8c, 0x8b, 0x3d, 0x4f, |
| 1519 | 0xd9, 0x0c, 0x0b, 0x81, 0x85, 0xbf, 0x67, 0x2e, 0x24, 0xf3, 0x53, 0x9b, | 1514 | 0x97, 0x23, 0xde, 0x35, 0xc7, 0xb6, 0xc3, 0x34, 0x79, 0x8a, 0xee, 0x7f, |
| 1520 | 0xad, 0x57, 0xb2, 0x41, 0x1f, 0x39, 0xfd, 0xa3, 0xd0, 0x5b, 0x12, 0xd4, | 1515 | 0x5d, 0x69, 0xf1, 0xc9, 0xb2, 0x4e, 0x8a, 0x9c, 0xf7, 0x7e, 0xd3, 0x19, |
| 1521 | 0x75, 0x53, 0x48, 0x9e, 0xdf, 0x3b, 0x7d, 0x09, 0xd8, 0x3c, 0xde, 0x3c, | 1516 | 0x6e, 0x72, 0x2c, 0xc8, 0x95, 0xc2, 0x88, 0x5d, 0x54, 0x66, 0x57, 0x08, |
| 1522 | 0x89, 0xcf, 0xa1, 0x9c, 0xb9, 0xeb, 0xdc, 0xb1, 0x15, 0xa8, 0xa8, 0x8a, | 1517 | 0x3e, 0x24, 0x32, 0x2d, 0xcc, 0xd0, 0xe2, 0x41, 0xe6, 0x56, 0xc1, 0x2c, |
| 1523 | 0xfa, 0x4a, 0x71, 0x19, 0xcf, 0xd7, 0x30, 0x3f, 0xf9, 0x22, 0x2a, 0x56, | 1518 | 0x75, 0xbb, 0x9e, 0x88, 0x7d, 0xc2, 0xde, 0xb3, 0xe4, 0x9c, 0x5c, 0x83, |
| 1524 | 0xb6, 0x22, 0xc1, 0xb1, 0x97, 0x1b, 0x7f, 0xc5, 0x6b, 0xf7, 0x21, 0x99, | 1519 | 0x16, 0xdd, 0x81, 0x05, 0xe1, 0x39, 0xcc, 0xd0, 0x68, 0x97, 0x66, 0xa9, |
| 1525 | 0x72, 0x71, 0x1c, 0x3f, 0xb1, 0x2a, 0x6a, 0x44, 0x36, 0xd3, 0x5b, 0x66, | 1520 | 0x43, 0xf7, 0xdf, 0x84, 0xff, 0x62, 0xd7, 0x3b, 0x92, 0xc9, 0x75, 0x96, |
| 1526 | 0x30, 0x9f, 0xb6, 0x75, 0x41, 0xdc, 0x4e, 0x09, 0x47, 0xaa, 0x8b, 0xae, | 1521 | 0x73, 0x4e, 0xbf, 0x4a, 0x39, 0x76, 0x07, 0x44, 0x8e, 0xb1, 0x82, 0x1c, |
| 1527 | 0x07, 0x73, 0xfb, 0x1a, 0xbd, 0x75, 0x8d, 0xd2, 0x41, 0x9b, 0xed, 0xa1, | 1522 | 0x31, 0xc6, 0x5c, 0x53, 0xbb, 0x21, 0x30, 0x78, 0x49, 0x6f, 0x4f, 0xdb, |
| 1528 | 0xce, 0xa5, 0xac, 0x65, 0x2d, 0x0f, 0x9c, 0xa6, 0x8e, 0x3b, 0x78, 0x6e, | 1523 | 0x7a, 0xeb, 0xe3, 0x79, 0x29, 0x76, 0x90, 0x3f, 0x9e, 0x6a, 0xf2, 0x16, |
| 1529 | 0xf8, 0xdf, 0x84, 0x7a, 0x59, 0x31, 0x4e, 0x58, 0x71, 0xcd, 0x47, 0xbb, | 1524 | 0xd6, 0xf6, 0x25, 0xa7, 0x13, 0xfc, 0x3d, 0xfb, 0xa9, 0x0d, 0x86, 0x1e, |
| 1530 | 0x54, 0x57, 0x09, 0x9f, 0x5a, 0x1a, 0x7a, 0x8f, 0xf7, 0xb5, 0xbc, 0x9d, | 1525 | 0x76, 0xd8, 0xfc, 0xdf, 0x8d, 0xb8, 0xcd, 0xad, 0x1d, 0x10, 0xee, 0xf8, |
| 1531 | 0x9e, 0xb9, 0x25, 0xa7, 0xcb, 0x30, 0x75, 0xf9, 0x6f, 0xf6, 0x75, 0x87, | 1526 | 0xb0, 0x5d, 0xce, 0x45, 0x9d, 0x54, 0xe0, 0x91, 0x82, 0xbf, 0x54, 0x30, |
| 1532 | 0x7d, 0xbd, 0x23, 0x7f, 0xfd, 0xcc, 0x2d, 0x3d, 0xc6, 0xcb, 0xbc, 0xde, | 1527 | 0xbe, 0x7d, 0xd5, 0xfe, 0x9d, 0xe6, 0xdc, 0xba, 0xe8, 0xab, 0xc5, 0x18, |
| 1533 | 0x4b, 0xdd, 0xab, 0x17, 0x49, 0xfd, 0x75, 0xa6, 0xd4, 0x67, 0x4a, 0x65, | 1528 | 0x25, 0xeb, 0x83, 0xfd, 0xb6, 0xef, 0xa7, 0xf1, 0x7d, 0xfb, 0x3b, 0x97, |
| 1534 | 0xf4, 0xe4, 0xe7, 0xe3, 0x50, 0x7e, 0x3e, 0x26, 0xf2, 0x6d, 0x38, 0xd9, | 1529 | 0xcf, 0xcb, 0xd0, 0x47, 0x9f, 0x70, 0xb0, 0x8d, 0x5e, 0x7b, 0x2f, 0xaa, |
| 1535 | 0x46, 0x3c, 0x5a, 0x0a, 0x13, 0x65, 0x01, 0xc1, 0x79, 0x91, 0x8b, 0x73, | 1530 | 0xac, 0x15, 0x5c, 0x8b, 0x1d, 0x1c, 0x95, 0xdb, 0xe8, 0x44, 0xbf, 0x26, |
| 1536 | 0x97, 0x11, 0xb9, 0xd6, 0x30, 0xde, 0x75, 0x3d, 0x53, 0x8a, 0x78, 0xc7, | 1531 | 0x36, 0xd1, 0x8d, 0xa4, 0x66, 0x7a, 0xb3, 0x4d, 0xd3, 0x73, 0x2a, 0x13, |
| 1537 | 0x4c, 0xdb, 0x0e, 0xcf, 0xdc, 0x22, 0xfb, 0xde, 0xde, 0x52, 0x1a, 0x7d, | 1532 | 0x87, 0x9a, 0x7e, 0xcf, 0x58, 0x2e, 0xd7, 0xce, 0x5a, 0x87, 0x8d, 0x53, |
| 1538 | 0xb2, 0x65, 0x23, 0x45, 0x2e, 0x7b, 0xaf, 0xe9, 0x0c, 0xd7, 0x3b, 0xe6, | 1533 | 0x21, 0x7a, 0x70, 0x67, 0x89, 0xad, 0xdf, 0xa9, 0xdb, 0xec, 0x7d, 0x5b, |
| 1539 | 0x65, 0x8b, 0x61, 0xc4, 0xce, 0x28, 0x2e, 0x8f, 0xe0, 0x43, 0x22, 0xdd, | 1534 | 0x94, 0xf9, 0xe9, 0x84, 0xc4, 0xd1, 0x79, 0xc8, 0x98, 0x22, 0x9b, 0xb3, |
| 1540 | 0xc8, 0xcc, 0x2b, 0x1e, 0x64, 0xce, 0x14, 0xcc, 0x50, 0xb7, 0x6d, 0x44, | 1535 | 0x7d, 0x0f, 0xe7, 0xa4, 0x2f, 0x15, 0x88, 0x5e, 0xc9, 0xff, 0x26, 0x19, |
| 1541 | 0xec, 0x43, 0xf6, 0xde, 0x37, 0xe7, 0xc4, 0x0a, 0x34, 0xea, 0x0e, 0xcc, | 1536 | 0xcb, 0x7a, 0xa9, 0xcf, 0x58, 0xbb, 0xf0, 0xb8, 0xad, 0x38, 0x40, 0x1b, |
| 1542 | 0x0b, 0xcf, 0x64, 0xe6, 0x45, 0xbb, 0x34, 0x8b, 0x1d, 0xba, 0xff, 0x7a, | 1537 | 0x9b, 0x30, 0x2d, 0xeb, 0x08, 0x31, 0xa2, 0x7a, 0x81, 0x8a, 0xdc, 0xcc, |
| 1543 | 0x2c, 0xb7, 0xeb, 0xed, 0x4b, 0x67, 0xdb, 0x4b, 0x39, 0xa7, 0x8f, 0x51, | 1538 | 0xad, 0x48, 0x31, 0x36, 0x1d, 0x31, 0x5a, 0x3e, 0x5a, 0x82, 0xb8, 0x9f, |
| 1544 | 0x8e, 0x6d, 0x01, 0x91, 0xe3, 0x9b, 0x79, 0x39, 0x5a, 0x19, 0x4b, 0x4d, | 1539 | 0x31, 0xdc, 0xb7, 0x93, 0xa3, 0xb9, 0x9f, 0xf3, 0x75, 0xca, 0x14, 0x7e, |
| 1545 | 0xed, 0xda, 0x40, 0xef, 0x59, 0xbd, 0x3d, 0x63, 0xeb, 0xed, 0x3e, 0x9e, | 1540 | 0xe9, 0xbc, 0xb8, 0x02, 0x46, 0x78, 0x99, 0xe3, 0x87, 0xd6, 0x94, 0xc8, |
| 1546 | 0x17, 0x33, 0xbf, 0x2f, 0xc2, 0xd1, 0x7a, 0x6f, 0x7e, 0x1f, 0x9b, 0xe4, | 1541 | 0x9e, 0xea, 0xf9, 0x5f, 0x94, 0x61, 0x9b, 0x38, 0x6f, 0x35, 0xe7, 0xf8, |
| 1547 | 0x6a, 0x82, 0xbf, 0x0d, 0x7f, 0xbd, 0xda, 0xd0, 0xc3, 0x0e, 0x9b, 0xd7, | 1542 | 0xed, 0x80, 0xde, 0xf6, 0x02, 0xfb, 0x69, 0x1c, 0x68, 0xe9, 0x14, 0x19, |
| 1548 | 0xbb, 0x11, 0xb7, 0x39, 0xb3, 0x3c, 0xf3, 0xae, 0xc0, 0x23, 0x76, 0x39, | 1543 | 0x0e, 0x87, 0x9c, 0xb1, 0x23, 0x08, 0xb4, 0x6f, 0x55, 0x8a, 0x39, 0x04, |
| 1549 | 0x17, 0x75, 0x52, 0x86, 0x47, 0xf3, 0xfe, 0x22, 0x7b, 0x0e, 0x1e, 0xb3, | 1544 | 0x70, 0xe5, 0xb8, 0x89, 0xa3, 0x4d, 0xcf, 0x90, 0xef, 0x48, 0xfd, 0x52, |
| 1550 | 0x7f, 0xef, 0xe6, 0xdc, 0xba, 0xe8, 0xab, 0x85, 0x18, 0x25, 0xeb, 0xed, | 1545 | 0x3c, 0x66, 0x3e, 0x65, 0xd5, 0xcf, 0x7e, 0xde, 0x3a, 0x66, 0xa8, 0x5b, |
| 1551 | 0xff, 0xc3, 0xf6, 0xfd, 0x21, 0x1c, 0xb7, 0xff, 0x67, 0x73, 0xf9, 0x16, | 1546 | 0xa8, 0xed, 0x58, 0x25, 0x64, 0x4d, 0x33, 0x7d, 0xdb, 0x5d, 0x01, 0xdd, |
| 1552 | 0x7a, 0x4c, 0xd9, 0x3b, 0x53, 0x86, 0x6e, 0x7b, 0x0f, 0xb9, 0xac, 0x01, | 1547 | 0xdc, 0xc3, 0xb6, 0xce, 0x24, 0x4e, 0x05, 0xdd, 0x6c, 0xeb, 0x11, 0x53, |
| 1553 | 0x5c, 0x89, 0xcd, 0x9a, 0xac, 0x07, 0x93, 0xfb, 0x68, 0x62, 0x13, 0x9d, | 1548 | 0x72, 0x08, 0x67, 0x5b, 0x1b, 0xe7, 0xb6, 0x27, 0x15, 0xf0, 0xc9, 0xba, |
| 1554 | 0x48, 0x6a, 0xa6, 0x37, 0x53, 0x3f, 0x35, 0x57, 0x32, 0xb1, 0xa7, 0xfe, | 1549 | 0xad, 0xe4, 0x79, 0xb7, 0x27, 0x64, 0xcf, 0xf8, 0x18, 0xc7, 0x13, 0xdd, |
| 1555 | 0x03, 0x2b, 0x6a, 0xe7, 0x4f, 0x27, 0xac, 0xbd, 0xc6, 0xd1, 0x10, 0x3d, | 1550 | 0xe6, 0x42, 0xcb, 0xfd, 0x55, 0xb4, 0x9f, 0x6a, 0x14, 0x6d, 0x5d, 0xf7, |
| 1556 | 0xb8, 0xbd, 0xc8, 0xd6, 0x6f, 0xb8, 0xcd, 0xde, 0xff, 0x47, 0x99, 0x9f, | 1551 | 0x11, 0xef, 0x70, 0x17, 0xcb, 0xbc, 0x1c, 0x98, 0x87, 0xe7, 0x42, 0x2d, |
| 1557 | 0x49, 0x48, 0x1c, 0x9d, 0x83, 0xb4, 0x69, 0xc7, 0xe2, 0x96, 0xed, 0x9c, | 1552 | 0x6b, 0xe7, 0xc1, 0x19, 0x3b, 0xa6, 0x04, 0xda, 0xb6, 0x2a, 0x71, 0x4d, |
| 1558 | 0x93, 0x9e, 0x54, 0x20, 0x7a, 0x09, 0xef, 0x4d, 0x30, 0x96, 0x75, 0x53, | 1553 | 0x6c, 0xf1, 0xce, 0x8c, 0x1e, 0x6c, 0x85, 0x60, 0x77, 0x8c, 0xfa, 0x98, |
| 1559 | 0x9f, 0xb1, 0x16, 0xe1, 0x67, 0x6b, 0xb0, 0x9b, 0x36, 0x36, 0x6e, 0x5a, | 1554 | 0x87, 0x77, 0x16, 0x8b, 0x5c, 0xce, 0x70, 0xd0, 0x11, 0xe8, 0x7a, 0x8a, |
| 1560 | 0xd6, 0x3e, 0x62, 0x44, 0xe5, 0x3c, 0x15, 0xd9, 0x9a, 0x35, 0x48, 0x31, | 1555 | 0xf3, 0x5b, 0xb5, 0x40, 0x64, 0x07, 0xb2, 0x19, 0x91, 0x3f, 0x86, 0x64, |
| 1561 | 0x36, 0xed, 0x33, 0x1a, 0x3f, 0x57, 0x84, 0xb8, 0xdf, 0x0d, 0xdd, 0xb7, | 1556 | 0xf6, 0xec, 0xdb, 0x87, 0x0d, 0x38, 0x4f, 0x34, 0x3d, 0x68, 0xc1, 0xde, |
| 1562 | 0x85, 0xa3, 0xb9, 0x97, 0xf3, 0x75, 0xd4, 0x14, 0xde, 0xe8, 0x3c, 0xb3, | 1557 | 0x63, 0xde, 0x22, 0xf3, 0xd0, 0x21, 0xf3, 0x50, 0x4e, 0x7f, 0x5a, 0x4d, |
| 1563 | 0x14, 0x46, 0x78, 0xb1, 0xe3, 0x27, 0xd6, 0xa4, 0xfd, 0xec, 0xb8, 0xeb, | 1558 | 0xb9, 0xb7, 0xd8, 0x72, 0xcf, 0xc3, 0xa8, 0x29, 0xeb, 0x64, 0x4e, 0xed, |
| 1564 | 0x5f, 0x28, 0xc3, 0x46, 0x71, 0xde, 0x4a, 0xce, 0xf1, 0xbb, 0x01, 0x79, | 1559 | 0x4e, 0x0c, 0x12, 0x3b, 0x03, 0x17, 0x7b, 0xd8, 0xcf, 0xcb, 0x94, 0x79, |
| 1565 | 0x7e, 0x0d, 0xd4, 0xf5, 0x35, 0xb6, 0x8b, 0x0c, 0x7b, 0x43, 0xce, 0xd8, | 1560 | 0x01, 0xf5, 0x3e, 0xd5, 0x2e, 0xfc, 0xb6, 0x0f, 0x03, 0xa9, 0xe2, 0x1e, |
| 1566 | 0x3e, 0x04, 0x5a, 0x36, 0x28, 0xe7, 0x72, 0x83, 0x4b, 0xc6, 0x4c, 0x8c, | 1561 | 0x74, 0x05, 0x92, 0x7a, 0x4f, 0x39, 0xfa, 0xc8, 0xf7, 0x7a, 0xac, 0xa9, |
| 1567 | 0xd6, 0x3f, 0x4b, 0x1e, 0x23, 0xf5, 0x8b, 0xf1, 0x84, 0xf9, 0xb4, 0x55, | 1562 | 0x99, 0x72, 0x3d, 0x8d, 0x1d, 0xa9, 0xa8, 0x46, 0x7f, 0xa0, 0xde, 0xa1, |
| 1568 | 0x3b, 0xe3, 0xfb, 0xd6, 0x7e, 0x43, 0x5d, 0x4f, 0x6d, 0xc7, 0xca, 0xd9, | 1563 | 0xcf, 0x83, 0x3e, 0xf9, 0xaa, 0x23, 0x4a, 0x1f, 0x30, 0xbd, 0x17, 0x89, |
| 1569 | 0x56, 0x19, 0xdb, 0xba, 0x3d, 0xa0, 0x9b, 0xdb, 0xd9, 0xd6, 0xf1, 0xc4, | 1564 | 0x0d, 0x27, 0xd0, 0x65, 0xa1, 0xc6, 0xb6, 0x87, 0x9f, 0x8e, 0x19, 0x0e, |
| 1570 | 0xd1, 0xa0, 0x9b, 0x6d, 0x3d, 0x6a, 0x4a, 0x6e, 0xe0, 0x6c, 0x6e, 0xe6, | 1565 | 0x59, 0x6b, 0x0f, 0xe6, 0xa8, 0x03, 0x95, 0x73, 0x22, 0x3a, 0xa8, 0xa4, |
| 1571 | 0xdc, 0x76, 0xa5, 0x02, 0xbe, 0xad, 0x94, 0x4b, 0xf2, 0xb7, 0xaf, 0x26, | 1566 | 0xcf, 0x8e, 0x07, 0x74, 0xff, 0x73, 0x94, 0x67, 0x0f, 0xe5, 0x59, 0x93, |
| 1572 | 0xe4, 0x5d, 0x8f, 0x6f, 0x72, 0x3c, 0xd1, 0x8d, 0x2e, 0x34, 0xde, 0x5b, | 1567 | 0x9f, 0x43, 0xdf, 0x0e, 0x45, 0x7c, 0x3a, 0xd0, 0xbe, 0x81, 0xd7, 0x77, |
| 1573 | 0x41, 0xfb, 0xa9, 0x44, 0xc1, 0xd6, 0x75, 0x1f, 0xf1, 0x0e, 0xb7, 0xb3, | 1568 | 0x53, 0x9e, 0xc0, 0x80, 0x82, 0x34, 0xd1, 0xac, 0x8f, 0x7c, 0xf6, 0xc0, |
| 1574 | 0xcc, 0xeb, 0x81, 0x39, 0x78, 0x21, 0xd4, 0xb8, 0x72, 0x0e, 0x9c, 0xe4, | 1569 | 0x34, 0x79, 0xdc, 0xf6, 0x9c, 0xc5, 0xc9, 0x05, 0x4a, 0x71, 0xd8, 0x14, |
| 1575 | 0x21, 0x81, 0xe6, 0x0d, 0x4a, 0x5c, 0x13, 0x5b, 0xbc, 0x2d, 0xad, 0x07, | 1570 | 0xfc, 0xd6, 0x30, 0x4a, 0x3b, 0x3d, 0xc4, 0x19, 0x89, 0x7a, 0x55, 0x94, |
| 1576 | 0x9b, 0x20, 0xd8, 0xdd, 0x4a, 0x7d, 0xcc, 0xc1, 0xfb, 0x0b, 0x45, 0x2e, | 1571 | 0x1a, 0x82, 0x01, 0x33, 0x79, 0xcd, 0xc5, 0xb9, 0xa9, 0xc6, 0x31, 0x2d, |
| 1577 | 0x67, 0x38, 0xe8, 0x08, 0x74, 0x3c, 0xcd, 0xf9, 0xad, 0x98, 0x97, 0xcb, | 1572 | 0xcd, 0x38, 0x59, 0xe4, 0x76, 0x7f, 0xb0, 0x8e, 0x7a, 0x85, 0x9f, 0xc9, |
| 1578 | 0x53, 0x33, 0xf6, 0x7e, 0xcd, 0x56, 0x24, 0x33, 0x27, 0xde, 0xdd, 0x6b, | 1573 | 0x3a, 0x9a, 0xac, 0x35, 0x7d, 0xb9, 0x22, 0xbf, 0xbf, 0x52, 0xf6, 0x3f, |
| 1579 | 0xc0, 0x79, 0xa8, 0xfe, 0x41, 0x0b, 0xf6, 0xbb, 0x21, 0x8d, 0x32, 0x0f, | 1574 | 0xe4, 0xaf, 0x3f, 0xad, 0x09, 0x47, 0x2e, 0x96, 0xff, 0xb9, 0xf5, 0x84, |
| 1580 | 0xad, 0x32, 0x0f, 0xa5, 0xf4, 0xa7, 0x6b, 0x28, 0xf7, 0x7a, 0x5b, 0xee, | 1575 | 0x5d, 0x5e, 0xca, 0xb9, 0x6c, 0x2e, 0x5f, 0x6e, 0x97, 0xfb, 0xb9, 0xf5, |
| 1581 | 0x39, 0x18, 0x36, 0x65, 0xfd, 0xcb, 0xa9, 0xdd, 0x86, 0x5e, 0x62, 0x67, | 1576 | 0x8c, 0xe6, 0x9c, 0x56, 0xae, 0xb8, 0x07, 0xef, 0xd4, 0x97, 0x5c, 0xc4, |
| 1582 | 0xe0, 0x4c, 0x17, 0xfb, 0x79, 0x9d, 0x32, 0xcf, 0xa3, 0xde, 0x27, 0x5b, | 1577 | 0x3c, 0x47, 0xc3, 0x32, 0x3c, 0x61, 0x9c, 0xad, 0x5f, 0xdf, 0xd4, 0xcd, |
| 1583 | 0x84, 0xb7, 0xde, 0x87, 0xbe, 0x54, 0xe1, 0xdd, 0x11, 0x05, 0xe9, 0x80, | 1578 | 0x38, 0x56, 0xe4, 0x5a, 0x75, 0xf4, 0x2b, 0x0b, 0x43, 0xe6, 0xa9, 0xa1, |
| 1584 | 0xf4, 0x71, 0x1f, 0x79, 0x5c, 0x97, 0x35, 0x59, 0x23, 0xd7, 0x77, 0x33, | 1579 | 0x12, 0xf4, 0x90, 0x3b, 0x0a, 0x17, 0x10, 0x8e, 0x2a, 0xeb, 0x7c, 0xb7, |
| 1585 | 0xf7, 0x8f, 0x6a, 0xf4, 0x07, 0xea, 0x1d, 0xfa, 0x1c, 0xe8, 0x13, 0x6f, | 1580 | 0x96, 0x5f, 0xce, 0x79, 0xf5, 0xa0, 0x5f, 0x6d, 0xb3, 0xb9, 0x61, 0x54, |
| 1586 | 0x38, 0xa2, 0xf4, 0x01, 0xd3, 0x7b, 0x86, 0xd8, 0x70, 0x08, 0x1d, 0x16, | 1581 | 0x15, 0xdc, 0xad, 0xb3, 0xc7, 0x7e, 0x39, 0xfe, 0x4b, 0xac, 0x98, 0xbe, |
| 1587 | 0xaa, 0x6c, 0x7b, 0xf8, 0xd9, 0x88, 0xf1, 0xa1, 0x22, 0xb1, 0x3d, 0x4b, | 1582 | 0x6e, 0xd7, 0x8d, 0x43, 0x46, 0x91, 0xb3, 0x9c, 0x7a, 0x50, 0x25, 0x4e, |
| 1588 | 0x1d, 0xa8, 0x9c, 0x13, 0xd1, 0x41, 0x39, 0x7d, 0x76, 0x2c, 0xa0, 0xfb, | 1583 | 0x0e, 0x9b, 0xcb, 0x24, 0x36, 0xfb, 0x59, 0x3f, 0x18, 0x53, 0xa7, 0x73, |
| 1589 | 0x5f, 0xa0, 0x3c, 0xdb, 0x29, 0xcf, 0x8a, 0xdc, 0x1c, 0xfa, 0x36, 0x2b, | 1584 | 0x9b, 0xbf, 0xa9, 0x40, 0x55, 0xcf, 0x2e, 0x07, 0x64, 0xff, 0xaf, 0xec, |
| 1590 | 0xe2, 0xd3, 0x81, 0x96, 0xd5, 0xbc, 0xbe, 0x8d, 0xf2, 0x04, 0xfa, 0x14, | 1585 | 0xd9, 0x96, 0xbe, 0xca, 0x0a, 0xeb, 0x57, 0x1f, 0xc4, 0x35, 0x8a, 0x7d, |
| 1591 | 0x0c, 0xb5, 0xf4, 0x90, 0x2b, 0x76, 0x50, 0x07, 0xe7, 0xe4, 0x71, 0xdb, | 1586 | 0x09, 0xdf, 0xa8, 0x28, 0xca, 0x18, 0x8c, 0xda, 0x72, 0xfe, 0xd2, 0x5a, |
| 1592 | 0x73, 0xd6, 0x41, 0x2e, 0x50, 0x8c, 0xbd, 0xa6, 0xe0, 0xb7, 0x86, 0x61, | 1587 | 0xab, 0xe5, 0xe6, 0x68, 0x78, 0xaf, 0xec, 0xd1, 0x82, 0xec, 0xb1, 0x0f, |
| 1593 | 0xda, 0xe9, 0x1e, 0xce, 0x48, 0xd4, 0xab, 0xa2, 0xd8, 0x10, 0x0c, 0xa8, | 1588 | 0x5c, 0x7f, 0x93, 0x7e, 0xa6, 0xb7, 0x59, 0xdc, 0x7b, 0x2a, 0x6b, 0xb3, |
| 1594 | 0xe1, 0x35, 0x17, 0xe7, 0xa6, 0x12, 0xfb, 0xb5, 0xdd, 0xf6, 0x5e, 0xe5, | 1589 | 0xf2, 0x9f, 0x82, 0x1e, 0xe2, 0x50, 0x54, 0x6b, 0x61, 0x9c, 0xd7, 0x7d, |
| 1595 | 0x1c, 0xb7, 0xfb, 0x83, 0x35, 0xea, 0x15, 0x7e, 0x26, 0xeb, 0x63, 0xb2, | 1590 | 0x9b, 0x38, 0x1f, 0x71, 0xaf, 0xec, 0x6b, 0x2d, 0xc6, 0xc8, 0x52, 0xe4, |
| 1596 | 0x86, 0xd4, 0xeb, 0xc9, 0xed, 0xd7, 0x72, 0x51, 0x27, 0xb9, 0xeb, 0xcf, | 1591 | 0xd7, 0x48, 0x81, 0x43, 0x85, 0x75, 0x51, 0xda, 0x3d, 0x7a, 0x32, 0xbf, |
| 1597 | 0x68, 0xc2, 0x7d, 0x0b, 0xe5, 0x7f, 0x69, 0x3d, 0x69, 0x97, 0x97, 0x72, | 1592 | 0xb3, 0x72, 0x5e, 0x27, 0x63, 0xe1, 0xe5, 0xfd, 0xf7, 0x69, 0xea, 0x75, |
| 1598 | 0x2e, 0x9b, 0xa3, 0x97, 0xda, 0xe5, 0x7e, 0x69, 0x3d, 0xab, 0x39, 0xa7, | 1593 | 0x94, 0xff, 0xed, 0xb8, 0xb4, 0xee, 0x22, 0x6b, 0x4f, 0x12, 0x7b, 0x7f, |
| 1599 | 0x94, 0x2b, 0x3c, 0x2f, 0x3c, 0xfa, 0x0d, 0x27, 0x31, 0xaf, 0x78, 0xee, | 1594 | 0x6b, 0xad, 0x7f, 0x4f, 0xd9, 0xe9, 0x7b, 0x5f, 0x67, 0xc6, 0x64, 0x3f, |
| 1600 | 0x62, 0x1c, 0x33, 0x4e, 0xd4, 0x9e, 0xac, 0xef, 0x64, 0x1c, 0x9b, 0xba, | 1595 | 0xda, 0xd1, 0xc2, 0xfa, 0x7c, 0xeb, 0xbf, 0xdf, 0x8f, 0x46, 0x5b, 0x42, |
| 1601 | 0x7f, 0xcb, 0xc2, 0xe3, 0x76, 0x1e, 0xde, 0x45, 0x3e, 0x7b, 0x74, 0x47, | 1596 | 0x74, 0x07, 0xb9, 0x5d, 0x1c, 0x7d, 0x38, 0x9a, 0x68, 0xd4, 0x76, 0x42, |
| 1602 | 0x11, 0x84, 0xa3, 0xca, 0xfa, 0x5d, 0x73, 0xd9, 0xb9, 0x5c, 0x56, 0xf6, | 1597 | 0x93, 0x75, 0x69, 0x7e, 0xfa, 0x70, 0x2c, 0x81, 0x68, 0xc9, 0x55, 0xd5, |
| 1603 | 0x35, 0x5d, 0x66, 0x73, 0xc3, 0xa8, 0x2a, 0xb8, 0xfb, 0x49, 0x7b, 0xf8, | 1598 | 0xe4, 0x5b, 0x88, 0x3a, 0x64, 0x8f, 0x50, 0xa2, 0xb1, 0x6d, 0x37, 0xc7, |
| 1604 | 0x84, 0xbb, 0x74, 0x62, 0x8f, 0x51, 0xe0, 0x2c, 0x47, 0x1f, 0x54, 0x89, | 1599 | 0xe4, 0x5f, 0xdb, 0x87, 0xd1, 0x44, 0xcb, 0xad, 0x8c, 0x23, 0xfe, 0x8a, |
| 1605 | 0x93, 0x03, 0xe6, 0x62, 0x89, 0xcd, 0x7e, 0xd6, 0x0f, 0xc6, 0xd4, 0xa9, | 1600 | 0x3c, 0xd7, 0xe9, 0x38, 0x4c, 0x1c, 0xd8, 0x5e, 0x58, 0x1b, 0x5b, 0x9f, |
| 1606 | 0xdc, 0xe6, 0x76, 0x0f, 0x2a, 0xba, 0xb6, 0x3a, 0x20, 0xfb, 0x47, 0x65, | 1601 | 0xf8, 0x15, 0xe5, 0xb7, 0x85, 0x64, 0xbd, 0x3f, 0x56, 0xee, 0x2c, 0x7a, |
| 1607 | 0x2f, 0xa8, 0xf4, 0x55, 0x92, 0x5f, 0x97, 0xfa, 0x38, 0xae, 0x51, 0xe8, | 1602 | 0x53, 0x67, 0xb1, 0x79, 0x50, 0x11, 0xfb, 0xc2, 0xa6, 0xb4, 0xc8, 0x73, |
| 1608 | 0x4b, 0xf8, 0xc6, 0xfb, 0xa5, 0x85, 0x7d, 0x86, 0x51, 0x5b, 0xce, 0x5f, | 1603 | 0x16, 0x1b, 0x07, 0xbf, 0x87, 0x43, 0x83, 0xb3, 0xd1, 0x6a, 0xeb, 0xa6, |
| 1609 | 0x59, 0x2b, 0xb5, 0xec, 0x4c, 0x0d, 0xe7, 0xcb, 0x1e, 0xcd, 0xcb, 0x1e, | 1604 | 0x0b, 0x5b, 0xf7, 0x9e, 0xc4, 0x9e, 0x94, 0x85, 0xdd, 0x21, 0x0f, 0xb6, |
| 1610 | 0xfb, 0xd8, 0x75, 0xb5, 0xa9, 0xfb, 0xee, 0x82, 0xf9, 0xe7, 0x5d, 0xf2, | 1605 | 0x1c, 0x54, 0xb0, 0x2a, 0x70, 0x06, 0x3b, 0xf7, 0x5a, 0x98, 0x1f, 0xea, |
| 1611 | 0x0c, 0x46, 0xd6, 0x5c, 0xe5, 0x9e, 0x82, 0x2e, 0xe2, 0x50, 0x54, 0x6b, | 1606 | 0x46, 0x9b, 0x59, 0x81, 0xd2, 0x9a, 0x05, 0x9d, 0x2a, 0xcb, 0xad, 0x1f, |
| 1612 | 0x64, 0x9c, 0xd7, 0x7d, 0x6b, 0x39, 0x1f, 0x71, 0xaf, 0xec, 0x51, 0x2f, | 1607 | 0xed, 0x52, 0x6e, 0xe4, 0xb8, 0x73, 0xae, 0xe3, 0xc4, 0x02, 0x15, 0x3e, |
| 1613 | 0xc4, 0xc8, 0x62, 0xe4, 0xd6, 0x3e, 0x65, 0x9f, 0x45, 0x6e, 0xbd, 0x93, | 1608 | 0x03, 0x5a, 0x75, 0x24, 0xaa, 0xdc, 0x92, 0x6d, 0x55, 0x3a, 0x46, 0x6d, |
| 1614 | 0x76, 0x8f, 0xae, 0xf4, 0xef, 0xad, 0xac, 0xd7, 0xc9, 0x58, 0x78, 0x6e, | 1609 | 0x3e, 0xa5, 0xdc, 0x94, 0xf5, 0x55, 0x4a, 0x4c, 0x3f, 0x14, 0x3a, 0x8b, |
| 1615 | 0x7f, 0xf4, 0x10, 0xf5, 0x3a, 0xcc, 0x7b, 0x9b, 0xcf, 0xae, 0xa7, 0xc8, | 1610 | 0x74, 0xba, 0xaa, 0x32, 0xef, 0x2f, 0x67, 0xc9, 0x1d, 0x24, 0xe7, 0x30, |
| 1616 | 0x9a, 0x92, 0xc4, 0xde, 0xdf, 0x59, 0x6d, 0xe7, 0x95, 0x9d, 0xba, 0x57, | 1611 | 0x69, 0x53, 0x7f, 0xec, 0xb9, 0x02, 0xb1, 0xbb, 0x29, 0xfc, 0x64, 0xe4, |
| 1617 | 0xbc, 0x26, 0x26, 0xcf, 0xdc, 0x46, 0xf3, 0xeb, 0xee, 0x4d, 0x1f, 0x79, | 1612 | 0x15, 0xbc, 0x32, 0xf2, 0x2f, 0x58, 0xae, 0x49, 0x9e, 0x69, 0x75, 0x3b, |
| 1618 | 0xe6, 0x36, 0x41, 0x5b, 0x42, 0x74, 0x33, 0xb9, 0x5d, 0x1c, 0x3d, 0x18, | 1613 | 0x23, 0x96, 0xb5, 0xbf, 0x39, 0x6e, 0xcd, 0x34, 0x2c, 0xb6, 0x57, 0x85, |
| 1619 | 0x4d, 0xd4, 0x69, 0x5b, 0xa0, 0xc9, 0x7a, 0x33, 0xff, 0x7a, 0xb0, 0x3f, | 1614 | 0x59, 0x91, 0xef, 0x62, 0xb7, 0xc6, 0xb6, 0x52, 0xc7, 0xed, 0x7b, 0xb7, |
| 1620 | 0x81, 0x68, 0xd1, 0xa5, 0x95, 0xe4, 0x5b, 0x88, 0x3a, 0x18, 0xa3, 0x1e, | 1615 | 0xbe, 0xc8, 0xa7, 0xe1, 0x4b, 0xe5, 0xcc, 0x5a, 0x44, 0x87, 0x6a, 0xa1, |
| 1621 | 0x4d, 0xd4, 0x35, 0x6f, 0xe3, 0x98, 0xfc, 0x2b, 0x7b, 0x30, 0x9c, 0x68, | 1616 | 0x6f, 0xab, 0x71, 0x18, 0x5d, 0xff, 0x5b, 0x69, 0xc2, 0x4d, 0xd9, 0x57, |
| 1622 | 0xfc, 0x2b, 0xc6, 0x11, 0x7f, 0x99, 0xcd, 0x75, 0xe2, 0x7f, 0xbd, 0x97, | 1617 | 0xf0, 0xe6, 0x48, 0x37, 0x31, 0x53, 0xef, 0xf8, 0x96, 0x62, 0x75, 0xef, |
| 1623 | 0x38, 0xb0, 0x29, 0xbf, 0xe6, 0xd5, 0x96, 0xf8, 0x35, 0xe5, 0xb7, 0x85, | 1618 | 0x0e, 0xe9, 0x6d, 0xff, 0x55, 0x89, 0xc6, 0xcb, 0x69, 0x53, 0x65, 0xcc, |
| 1624 | 0x64, 0xbd, 0x4f, 0x2a, 0x37, 0xc1, 0x3c, 0xff, 0x04, 0xd6, 0xf5, 0x2b, | 1619 | 0x09, 0x6e, 0x1e, 0x91, 0x7c, 0xb9, 0x03, 0xee, 0x01, 0x3d, 0xb7, 0x82, |
| 1625 | 0x78, 0xd2, 0x38, 0x81, 0xb5, 0x43, 0x22, 0xcf, 0x09, 0xac, 0xe9, 0x7f, | 1620 | 0x3c, 0xfb, 0x0b, 0x8b, 0xe2, 0x73, 0x66, 0xd0, 0x2e, 0x1d, 0x8a, 0x1e, |
| 1626 | 0x09, 0x7b, 0xfa, 0x67, 0xa0, 0xc9, 0xd6, 0x4d, 0x07, 0x36, 0xec, 0x3c, | 1621 | 0x34, 0xd4, 0x6e, 0x3c, 0x6e, 0xea, 0x93, 0xbf, 0x75, 0x18, 0xe9, 0x6f, |
| 1627 | 0x88, 0xed, 0x29, 0x0b, 0xdb, 0x42, 0x1e, 0xac, 0x7f, 0x58, 0xc1, 0xf2, | 1622 | 0xa2, 0x09, 0xeb, 0xb2, 0x7a, 0x7a, 0x29, 0xf3, 0xb0, 0x9d, 0x49, 0x13, |
| 1628 | 0xc0, 0x61, 0x6c, 0xd9, 0x69, 0xe1, 0xe2, 0x50, 0x27, 0x9a, 0xcd, 0x32, | 1623 | 0xa9, 0xa4, 0xde, 0xd1, 0xe5, 0xe8, 0xc7, 0xdd, 0x81, 0xfa, 0x6d, 0x6f, |
| 1629 | 0x14, 0x57, 0xcd, 0x6b, 0x57, 0x59, 0xae, 0x6d, 0xb8, 0x23, 0xbf, 0x2f, | 1624 | 0x93, 0xcb, 0x79, 0x88, 0x29, 0xc9, 0x89, 0x0c, 0xf3, 0xdc, 0x7e, 0x6c, |
| 1630 | 0x79, 0x3f, 0xb1, 0x40, 0x85, 0xcf, 0x90, 0x3d, 0xc7, 0x51, 0xe5, 0xa6, | 1625 | 0x3d, 0x18, 0xc1, 0x96, 0xfd, 0x26, 0xfa, 0x92, 0x19, 0xca, 0xf6, 0x1a, |
| 1631 | 0x4c, 0x93, 0xd2, 0x9a, 0x7f, 0x66, 0x79, 0x7d, 0xa6, 0xa8, 0x02, 0xa5, | 1626 | 0x6d, 0xdb, 0xb2, 0xda, 0x43, 0xf1, 0x1b, 0x54, 0x04, 0xa2, 0xec, 0xb3, |
| 1632 | 0x71, 0xec, 0x09, 0x9d, 0xc0, 0xd0, 0xd0, 0x07, 0xe5, 0x39, 0x7f, 0x99, | 1627 | 0x45, 0x8d, 0x04, 0xfc, 0xaa, 0xc2, 0xe8, 0x3f, 0xe1, 0x44, 0x2f, 0xcb, |
| 1633 | 0x20, 0x77, 0x90, 0x9c, 0xc3, 0xa4, 0x4d, 0x7d, 0xd2, 0xfb, 0x40, 0x62, | 1628 | 0x0c, 0xa4, 0x68, 0x73, 0x49, 0x37, 0xe3, 0x65, 0x1d, 0x46, 0xc7, 0x7d, |
| 1634 | 0x77, 0x93, 0xf8, 0xe9, 0xe0, 0x49, 0x9c, 0x1c, 0xfc, 0x37, 0x2c, 0xd1, | 1629 | 0x38, 0x32, 0xee, 0x41, 0x7a, 0x5c, 0xe3, 0x51, 0x8e, 0x87, 0x86, 0x2d, |
| 1635 | 0x24, 0x7f, 0xb4, 0x3a, 0x9d, 0x11, 0xcb, 0xda, 0xd5, 0x10, 0xb7, 0x6a, | 1630 | 0x62, 0xb9, 0x17, 0x8f, 0x1d, 0x76, 0x63, 0xfb, 0x3e, 0x0f, 0xe6, 0x45, |
| 1636 | 0x8c, 0x5f, 0xb0, 0xed, 0x0a, 0x4c, 0x8f, 0xbc, 0x88, 0x6d, 0x1a, 0xdb, | 1631 | 0x66, 0xe1, 0xf0, 0xe1, 0x72, 0x1c, 0xe0, 0xf5, 0x9a, 0xc5, 0x7e, 0x7c, |
| 1637 | 0x4a, 0xed, 0xc7, 0x0e, 0xc6, 0x75, 0x5f, 0xe4, 0x66, 0xf8, 0x52, 0x59, | 1632 | 0x8d, 0xd7, 0x07, 0xf7, 0xb9, 0x38, 0x0f, 0xf3, 0x71, 0x9c, 0x86, 0x9d, |
| 1638 | 0xb3, 0x1a, 0xd1, 0x1d, 0xd5, 0xd0, 0x37, 0x56, 0x39, 0x8c, 0x8e, 0x7f, | 1633 | 0x1e, 0xaf, 0x40, 0x6a, 0x98, 0x26, 0x4f, 0xce, 0xfa, 0x3a, 0x33, 0x8c, |
| 1639 | 0x55, 0xea, 0x71, 0x7d, 0xe6, 0x24, 0x7e, 0x3e, 0x68, 0xef, 0xa5, 0x6a, | 1634 | 0xa3, 0x87, 0x19, 0x1b, 0x0f, 0x9a, 0x48, 0xb0, 0x9f, 0x3d, 0xd4, 0x55, |
| 1640 | 0xfd, 0xae, 0x62, 0x75, 0x6e, 0x0b, 0xe9, 0xcd, 0xff, 0x43, 0x89, 0xc6, | 1635 | 0x1f, 0x71, 0x6d, 0xeb, 0xb8, 0x60, 0xfc, 0x3a, 0xac, 0x1e, 0xd0, 0xdb, |
| 1641 | 0x4b, 0x69, 0x53, 0x25, 0xcc, 0x09, 0x6e, 0x18, 0x94, 0x1c, 0xb1, 0x15, | 1636 | 0x5a, 0x15, 0x23, 0xba, 0x44, 0x09, 0xca, 0x73, 0x2b, 0x6e, 0x95, 0xd7, |
| 1642 | 0xee, 0x3e, 0x3d, 0xbb, 0x94, 0x3c, 0xfb, 0xee, 0x05, 0xf1, 0x99, 0xd3, | 1637 | 0x5a, 0x12, 0xba, 0xd9, 0x8a, 0x6e, 0x9c, 0xe6, 0xb8, 0xff, 0x3b, 0xfd, |
| 1643 | 0x68, 0x97, 0x0e, 0x45, 0x0f, 0x1a, 0x6a, 0x27, 0x8e, 0x98, 0xfa, 0xc4, | 1638 | 0x76, 0x99, 0x43, 0xef, 0xbf, 0x5e, 0x3d, 0x89, 0xa1, 0x6c, 0x8e, 0x5c, |
| 1644 | 0xef, 0x1c, 0xc6, 0xd0, 0x77, 0x50, 0x8f, 0x55, 0x19, 0x7d, 0xe8, 0x32, | 1639 | 0x1d, 0x08, 0x1f, 0x3a, 0x49, 0xfe, 0xf6, 0x38, 0xf1, 0xe7, 0x65, 0xcb, |
| 1645 | 0xe6, 0x61, 0x5b, 0x92, 0x26, 0x52, 0x49, 0xbd, 0xb5, 0xc3, 0xd1, 0x8b, | 1640 | 0x67, 0xa8, 0xb8, 0xe9, 0x01, 0x23, 0x7c, 0x41, 0x09, 0x6c, 0xfb, 0x25, |
| 1646 | 0x3b, 0x02, 0xb5, 0x1b, 0xdf, 0x25, 0x97, 0xf3, 0x10, 0x53, 0x92, 0xe3, | 1641 | 0x75, 0x70, 0xe3, 0x61, 0x15, 0x1f, 0x1b, 0x5a, 0x86, 0x4c, 0x28, 0x8a, |
| 1647 | 0x23, 0xcc, 0x5f, 0x7b, 0xb1, 0xe1, 0xe1, 0x08, 0xd6, 0xef, 0x32, 0xd1, | 1642 | 0x3d, 0x4b, 0x54, 0xdc, 0x70, 0xf0, 0x24, 0x71, 0xff, 0xac, 0xcd, 0x93, |
| 1648 | 0x93, 0x1c, 0xa1, 0x6c, 0x3f, 0x2c, 0x97, 0xbd, 0x34, 0x2d, 0xa1, 0xf8, | 1643 | 0x73, 0x99, 0x2f, 0x22, 0x38, 0x20, 0x6b, 0xf7, 0x6e, 0xc6, 0xef, 0x4a, |
| 1649 | 0xb5, 0x2a, 0x02, 0x51, 0xf6, 0xd9, 0xa8, 0x46, 0x02, 0x7e, 0x55, 0x61, | 1644 | 0x9c, 0x19, 0xec, 0xa6, 0xdf, 0x56, 0xe2, 0x54, 0xfa, 0x24, 0xed, 0xb1, |
| 1650 | 0xf4, 0x1f, 0x77, 0xa2, 0x9b, 0x65, 0xfa, 0x52, 0xb4, 0xb9, 0xa4, 0x9b, | 1645 | 0x12, 0x8f, 0x0f, 0x1a, 0x93, 0x3f, 0x71, 0x54, 0xe2, 0x31, 0x9e, 0x0f, |
| 1651 | 0xf1, 0x72, 0x16, 0x86, 0xc7, 0x7c, 0xd8, 0x37, 0xe6, 0xc1, 0xd0, 0x98, | 1646 | 0xf1, 0x7c, 0xf1, 0xb0, 0x31, 0xd8, 0xa5, 0x56, 0x62, 0xd1, 0xa1, 0x66, |
| 1652 | 0xc6, 0xa3, 0x14, 0x0f, 0x0d, 0xc8, 0x9e, 0x14, 0x2f, 0x9e, 0xd8, 0xeb, | 1647 | 0x0c, 0x26, 0xc5, 0x36, 0x35, 0x6c, 0x1b, 0x6f, 0x2a, 0xe8, 0x5e, 0x74, |
| 1653 | 0xc6, 0xa6, 0x07, 0x3c, 0x98, 0x13, 0x99, 0x8e, 0xbd, 0x7b, 0x4b, 0xb1, | 1648 | 0xee, 0xc5, 0x3d, 0xd4, 0xd5, 0xdd, 0x43, 0xdd, 0xec, 0xcf, 0x47, 0x9d, |
| 1654 | 0x9b, 0xd7, 0xab, 0x16, 0xfa, 0xf1, 0x38, 0xaf, 0xf7, 0x3f, 0xe0, 0xe2, | 1649 | 0x9f, 0xc4, 0x43, 0xcc, 0xeb, 0x76, 0x27, 0x7d, 0x38, 0x9f, 0x32, 0xfc, |
| 1655 | 0x3c, 0x5c, 0x8c, 0x03, 0x34, 0xec, 0xa1, 0xb1, 0x32, 0xa4, 0x06, 0x68, | 1650 | 0x9f, 0x52, 0x0c, 0xb3, 0x4c, 0x09, 0x68, 0x67, 0xe0, 0xc3, 0x2b, 0xd9, |
| 1656 | 0xf2, 0xe4, 0xac, 0x6f, 0x31, 0xc3, 0x18, 0xdd, 0xcb, 0xd8, 0xf8, 0xb0, | 1651 | 0x72, 0xf4, 0x0e, 0xd7, 0xe1, 0x27, 0xb4, 0xcf, 0x07, 0xf7, 0x9d, 0xb4, |
| 1657 | 0x89, 0x04, 0xfb, 0xd9, 0x4e, 0x5d, 0xf5, 0x10, 0xd7, 0x36, 0x8c, 0x09, | 1652 | 0xed, 0xff, 0x40, 0x6a, 0x2e, 0x1e, 0x1b, 0x33, 0xd9, 0xb6, 0xcc, 0x93, |
| 1658 | 0xc6, 0xaf, 0xc2, 0x35, 0x7d, 0x7a, 0x73, 0x93, 0x62, 0x44, 0x17, 0xd9, | 1653 | 0xc3, 0xde, 0xdb, 0xe4, 0x4a, 0x89, 0x6f, 0x44, 0x87, 0x68, 0x16, 0xc4, |
| 1659 | 0xfb, 0xb4, 0xe4, 0xbd, 0xad, 0x55, 0x68, 0x4c, 0xe8, 0x66, 0x13, 0x3a, | 1654 | 0xc4, 0x93, 0xc8, 0x0e, 0xea, 0xfd, 0x37, 0xab, 0xc2, 0xab, 0x55, 0xea, |
| 1660 | 0x71, 0x8c, 0xe3, 0xfe, 0x7f, 0xe8, 0xb7, 0x8b, 0x1d, 0x7a, 0xef, 0xd5, | 1655 | 0xd2, 0x81, 0x29, 0x4d, 0x8f, 0xd7, 0xa8, 0xf1, 0x41, 0xe6, 0xaf, 0xf1, |
| 1661 | 0xea, 0x41, 0xec, 0xc8, 0x1c, 0x22, 0x57, 0x07, 0xc2, 0x7b, 0x0e, 0x92, | 1656 | 0x5a, 0xea, 0xe4, 0xb1, 0x41, 0x27, 0x16, 0x2c, 0x56, 0x79, 0x3d, 0x7e, |
| 1662 | 0xbf, 0x1d, 0x21, 0xfe, 0xbc, 0x6e, 0xf9, 0x0c, 0x15, 0xd7, 0xdf, 0x6f, | 1657 | 0x91, 0xb1, 0x2d, 0x3e, 0x4f, 0x35, 0x71, 0xc0, 0x96, 0x15, 0xf1, 0x12, |
| 1663 | 0x84, 0xdf, 0x53, 0x02, 0x1b, 0x7f, 0x45, 0x1d, 0x7c, 0x7e, 0xaf, 0x8a, | 1658 | 0x72, 0xfb, 0xea, 0xc5, 0xf5, 0x8c, 0x5f, 0x0e, 0xb1, 0xbd, 0x58, 0xa5, |
| 1664 | 0xeb, 0x76, 0x2c, 0x46, 0x3a, 0x14, 0xc5, 0xf6, 0x45, 0x2a, 0xae, 0x7d, | 1659 | 0xea, 0xa4, 0xde, 0x5f, 0xc1, 0x18, 0xed, 0xfa, 0x11, 0x1e, 0xc7, 0x47, |
| 1665 | 0xf8, 0x20, 0x71, 0x7f, 0xc2, 0xe6, 0xc9, 0xd9, 0xf4, 0x7d, 0x08, 0xf6, | 1660 | 0xac, 0xee, 0x55, 0xe4, 0xdc, 0xf3, 0x03, 0x56, 0xf7, 0xcd, 0xa6, 0xe1, |
| 1666 | 0xc9, 0x9a, 0xbc, 0x9b, 0xf1, 0xbb, 0x1c, 0xc7, 0xfb, 0x3b, 0xe9, 0xb7, | 1661 | 0x2b, 0x51, 0x03, 0xd1, 0x2f, 0xe0, 0x15, 0x1c, 0x1b, 0x93, 0x32, 0xb2, |
| 1667 | 0xe5, 0x38, 0x3a, 0x74, 0x90, 0xf6, 0x58, 0x8e, 0x23, 0xfd, 0xc6, 0xc4, | 1662 | 0x0f, 0x24, 0x86, 0x91, 0xa4, 0xd5, 0x3d, 0x64, 0xce, 0x47, 0xb3, 0x9d, |
| 1668 | 0x4f, 0x1d, 0xe5, 0x78, 0x82, 0xe7, 0x3b, 0x78, 0xbe, 0x70, 0xc0, 0xe8, | 1663 | 0x1b, 0xbb, 0x2a, 0xf3, 0x98, 0x29, 0x7e, 0x24, 0x6b, 0x25, 0x53, 0xf8, |
| 1669 | 0xef, 0x50, 0xcb, 0xb1, 0x60, 0x4f, 0x03, 0xfa, 0x93, 0x62, 0x9b, 0x1a, | 1664 | 0x25, 0xdb, 0xb9, 0x30, 0x52, 0x8d, 0x19, 0xb5, 0xe2, 0x07, 0x67, 0xf1, |
| 1670 | 0x36, 0x8e, 0xd5, 0xe7, 0x75, 0x2f, 0x3a, 0xf7, 0xe2, 0x4e, 0xea, 0xea, | 1665 | 0xc6, 0xe0, 0x77, 0x71, 0x7e, 0xd0, 0xc2, 0xa2, 0x90, 0x05, 0x67, 0xa8, |
| 1671 | 0x8e, 0x1d, 0x9d, 0xec, 0xcf, 0x47, 0x9d, 0x1f, 0xc4, 0x43, 0xcc, 0xeb, | 1666 | 0xd1, 0x6c, 0x55, 0x97, 0x12, 0x23, 0x14, 0xac, 0x6e, 0xf8, 0x1e, 0xde, |
| 1672 | 0xb6, 0x25, 0x7d, 0x38, 0x9d, 0x32, 0xfc, 0x5f, 0x52, 0x0c, 0xb3, 0x44, | 1667 | 0x1a, 0x94, 0xfd, 0xa6, 0x96, 0x2d, 0xcb, 0x00, 0x16, 0x5b, 0x7b, 0x66, |
| 1673 | 0x09, 0x68, 0xc7, 0xe1, 0xc3, 0xc9, 0x4c, 0x29, 0xba, 0x07, 0x66, 0xe1, | 1668 | 0x8a, 0xdf, 0x48, 0xbd, 0x3f, 0x95, 0x07, 0xeb, 0x8c, 0x86, 0xc5, 0x5c, |
| 1674 | 0xa7, 0xb4, 0xcf, 0x07, 0x1f, 0x90, 0xfe, 0x26, 0x18, 0x1f, 0x66, 0xe3, | 1669 | 0xf8, 0x15, 0x8c, 0x8e, 0x18, 0xd1, 0xcd, 0x45, 0x39, 0x07, 0x5f, 0xa1, |
| 1675 | 0x89, 0x11, 0x93, 0x6d, 0xcb, 0x3c, 0x49, 0xcc, 0xe9, 0x81, 0x2b, 0x25, | 1670 | 0x0e, 0xec, 0xf8, 0x74, 0xb0, 0x06, 0x0b, 0x2e, 0x32, 0x6b, 0xfc, 0xf0, |
| 1676 | 0xbe, 0x11, 0xdd, 0x41, 0xb3, 0x20, 0x26, 0x1e, 0x46, 0xa6, 0x5f, 0xef, | 1671 | 0x3c, 0xda, 0xce, 0xa2, 0xc5, 0x01, 0x73, 0xa5, 0xfa, 0x6f, 0xf4, 0xd3, |
| 1677 | 0xbd, 0x41, 0x15, 0x5e, 0xad, 0x52, 0x97, 0x0e, 0x4c, 0x6a, 0x7a, 0xbc, | 1672 | 0x57, 0x70, 0x24, 0x5d, 0xc4, 0x6b, 0x1f, 0x5a, 0xe9, 0xe7, 0xf9, 0x7d, |
| 1678 | 0x4a, 0x8d, 0xf7, 0x33, 0x7f, 0x8d, 0x57, 0xab, 0x87, 0xf1, 0x44, 0xbf, | 1673 | 0xfe, 0x5e, 0xb4, 0xa4, 0x4e, 0xd8, 0xeb, 0x0f, 0xc7, 0x89, 0x8f, 0x83, |
| 1679 | 0x13, 0xf3, 0x16, 0xaa, 0xbc, 0x1e, 0x3f, 0xc3, 0xd8, 0x16, 0x9f, 0xa3, | 1674 | 0x29, 0x29, 0xa3, 0x61, 0x2c, 0xdb, 0x4a, 0x6c, 0x88, 0xe2, 0x9f, 0xb2, |
| 1680 | 0x9a, 0xd8, 0x6d, 0xcb, 0x8a, 0x78, 0x11, 0xb9, 0x7d, 0xe5, 0xc2, 0x5a, | 1675 | 0x11, 0xe2, 0x43, 0x98, 0xf8, 0xd0, 0x4c, 0x7c, 0x30, 0x89, 0x0f, 0x4d, |
| 1681 | 0xc6, 0x2f, 0x87, 0xd8, 0x5e, 0xac, 0x5c, 0x75, 0x52, 0xef, 0x27, 0x31, | 1676 | 0xc4, 0x87, 0x20, 0xf1, 0xc1, 0xb0, 0xd7, 0xd6, 0xd3, 0x47, 0xbf, 0x8b, |
| 1682 | 0x42, 0xbb, 0x7e, 0x94, 0xc7, 0x81, 0x41, 0xab, 0x73, 0x39, 0x39, 0xf7, | 1677 | 0x92, 0xe1, 0xb3, 0x70, 0xd1, 0x07, 0xce, 0x98, 0x16, 0xf9, 0x49, 0xa3, |
| 1683 | 0xc5, 0x01, 0xab, 0xf3, 0x06, 0xd3, 0xf0, 0x15, 0xa9, 0x81, 0xe8, 0xdd, | 1678 | 0xb6, 0x11, 0xf3, 0x95, 0xa8, 0xe6, 0x45, 0x9a, 0xed, 0x95, 0x0d, 0x6b, |
| 1684 | 0x38, 0x89, 0xfd, 0x23, 0x52, 0x06, 0x6e, 0x6f, 0x84, 0x79, 0x75, 0xd2, | 1679 | 0x1c, 0x8b, 0x85, 0x60, 0xa8, 0x3e, 0xdc, 0x4f, 0xac, 0xfe, 0x95, 0xd1, |
| 1685 | 0xea, 0xdc, 0x61, 0x5e, 0x8c, 0x06, 0x3b, 0x37, 0xfe, 0x55, 0x79, 0x0e, | 1680 | 0xd8, 0xef, 0x45, 0xe3, 0x81, 0x99, 0x30, 0x06, 0x17, 0xab, 0x0d, 0x4a, |
| 1686 | 0x33, 0xc5, 0x8f, 0x64, 0x0d, 0x64, 0x12, 0xbf, 0x62, 0x3b, 0xef, 0x0d, | 1681 | 0xf4, 0xe3, 0x5e, 0x8e, 0xb3, 0x16, 0x73, 0xf7, 0x69, 0x98, 0xc7, 0xe3, |
| 1687 | 0x56, 0x62, 0x5a, 0xb5, 0xf8, 0xc1, 0x09, 0xbc, 0xdd, 0xff, 0x22, 0x4e, | 1682 | 0x1f, 0x53, 0xf5, 0x93, 0x2f, 0x3b, 0xe0, 0x9d, 0x4d, 0xba, 0x33, 0x87, |
| 1688 | 0xf7, 0x5b, 0x58, 0x10, 0xb2, 0xe0, 0x0c, 0xd5, 0x99, 0x4d, 0xea, 0x65, | 1683 | 0x4c, 0x80, 0xac, 0xd6, 0xeb, 0xc3, 0x95, 0xc7, 0x5f, 0x51, 0x15, 0xe4, |
| 1689 | 0xc4, 0x08, 0x05, 0xd7, 0xcc, 0x7d, 0x09, 0xef, 0xd0, 0xff, 0xaf, 0x9d, | 1684 | 0x3e, 0x2e, 0x31, 0xaf, 0x31, 0xd8, 0xa7, 0xaa, 0xb2, 0x96, 0x44, 0x0c, |
| 1690 | 0x6b, 0xd9, 0xb2, 0xf4, 0x61, 0xa1, 0xb5, 0xbd, 0x46, 0xfc, 0xc6, 0xb4, | 1685 | 0xe7, 0xa1, 0x22, 0x42, 0x16, 0x51, 0xc7, 0xfc, 0xc2, 0xda, 0x68, 0x96, |
| 1691 | 0xf7, 0xf5, 0x7c, 0x72, 0x1e, 0x5c, 0xd8, 0xb7, 0x26, 0xb9, 0xf0, 0x49, | 1686 | 0x61, 0x47, 0x13, 0x39, 0xa7, 0x57, 0x3f, 0x21, 0x31, 0x6a, 0x36, 0x63, |
| 1692 | 0x0c, 0x0f, 0x1a, 0xd1, 0x75, 0x05, 0x39, 0xfb, 0x4f, 0x52, 0x07, 0x16, | 1687 | 0x44, 0x79, 0x32, 0x7e, 0xe7, 0x6c, 0x78, 0x50, 0x96, 0xb4, 0xac, 0xaf, |
| 1693 | 0x76, 0x98, 0x47, 0x1f, 0xae, 0xc2, 0xbc, 0x33, 0xcc, 0x1a, 0xaf, 0x98, | 1688 | 0x86, 0x34, 0x78, 0x22, 0x81, 0xe8, 0x56, 0xa6, 0x91, 0x1f, 0x5f, 0x10, |
| 1694 | 0x43, 0xdb, 0x59, 0xb0, 0x30, 0x60, 0x2e, 0x53, 0xdf, 0xa4, 0x9f, 0x9e, | 1689 | 0xc6, 0xea, 0xec, 0x09, 0x0c, 0x73, 0x7c, 0xab, 0xb2, 0xc5, 0x67, 0xc5, |
| 1695 | 0xc4, 0xbe, 0xa1, 0x02, 0x5e, 0xfb, 0xd0, 0x44, 0x3f, 0xcf, 0xed, 0x65, | 1690 | 0xfe, 0xf8, 0xe7, 0xf2, 0x33, 0x67, 0x57, 0x1e, 0x98, 0x0d, 0x43, 0xbb, |
| 1696 | 0xf7, 0xa2, 0x31, 0x75, 0xc8, 0x5e, 0x7f, 0x38, 0x40, 0x7c, 0xcc, 0x3d, | 1691 | 0x57, 0x1d, 0xae, 0x22, 0x07, 0x3f, 0xce, 0xb8, 0xa7, 0x4c, 0x7d, 0x42, |
| 1697 | 0xd3, 0xd4, 0x30, 0x92, 0x69, 0x22, 0x36, 0x44, 0xf1, 0xcf, 0x99, 0x08, | 1692 | 0x41, 0xc7, 0x70, 0x1c, 0x33, 0x42, 0x2f, 0x28, 0xb1, 0x5a, 0xdd, 0xef, |
| 1698 | 0xf1, 0x21, 0x4c, 0x7c, 0x68, 0x20, 0x3e, 0x98, 0xc4, 0x87, 0x7a, 0xe2, | 1693 | 0x57, 0x6a, 0xf1, 0x89, 0x7d, 0xd4, 0xf5, 0xa2, 0x1f, 0x7a, 0xe4, 0xb9, |
| 1699 | 0x43, 0xd0, 0x7e, 0xd6, 0x2f, 0x6b, 0xe6, 0x43, 0xa3, 0x2f, 0xa2, 0x68, | 1694 | 0xb0, 0x6f, 0x1e, 0x15, 0xdd, 0xd6, 0xa7, 0x87, 0x38, 0x8e, 0xc9, 0x86, |
| 1700 | 0xe0, 0x04, 0x5c, 0xf4, 0x81, 0xe3, 0xa6, 0x45, 0x7e, 0x52, 0xa7, 0xad, | 1695 | 0x13, 0x82, 0x93, 0x8f, 0xba, 0xe1, 0x78, 0x74, 0x16, 0xa2, 0x68, 0x6a, |
| 1701 | 0xc1, 0xc5, 0x4a, 0x54, 0xf3, 0x62, 0x28, 0x73, 0x02, 0x25, 0x03, 0x1a, | 1696 | 0xb8, 0xb2, 0xeb, 0x5f, 0x54, 0xd1, 0x8b, 0xf0, 0x6b, 0x7d, 0x30, 0xae, |
| 1702 | 0xc7, 0x22, 0xfb, 0x33, 0x6a, 0xc3, 0xbd, 0xc4, 0xea, 0x5f, 0x1b, 0x75, | 1697 | 0x18, 0xda, 0xcf, 0x95, 0x13, 0xf6, 0x7d, 0xb8, 0xaf, 0x66, 0x4f, 0x52, |
| 1703 | 0xbd, 0x5e, 0xd4, 0xed, 0xae, 0x81, 0xd1, 0xbf, 0x50, 0x9d, 0xab, 0x44, | 1698 | 0x97, 0xc7, 0x0b, 0xf9, 0xd2, 0x3a, 0x24, 0x06, 0x64, 0x5f, 0xfe, 0x59, |
| 1704 | 0xbf, 0xe0, 0xe5, 0x38, 0xab, 0x31, 0xfb, 0x01, 0x0d, 0x73, 0x78, 0xfc, | 1699 | 0xcc, 0x1d, 0xd6, 0xdb, 0x77, 0x29, 0x46, 0xf0, 0x06, 0xe5, 0x2c, 0xe6, |
| 1705 | 0x53, 0xaa, 0x76, 0xe2, 0x75, 0x07, 0xbc, 0x33, 0x48, 0x77, 0x66, 0x92, | 1700 | 0x0c, 0x07, 0x39, 0x97, 0x1a, 0x56, 0x26, 0x8b, 0xf8, 0x29, 0x18, 0xbc, |
| 1706 | 0x09, 0x90, 0xd5, 0x7a, 0x7d, 0xb8, 0xe4, 0xc0, 0x49, 0x55, 0x41, 0xf6, | 1701 | 0x8e, 0x18, 0x6c, 0x2d, 0xfb, 0x89, 0x19, 0xd7, 0x65, 0x4f, 0x82, 0x53, |
| 1707 | 0x0b, 0x12, 0xf3, 0xea, 0x82, 0x3d, 0xaa, 0x2a, 0x6b, 0x48, 0xc4, 0x70, | 1702 | 0xd1, 0x3b, 0x1a, 0x94, 0x38, 0x63, 0xa8, 0x71, 0x71, 0x3d, 0xeb, 0x78, |
| 1708 | 0x1e, 0x2a, 0x22, 0x64, 0x11, 0xb3, 0x98, 0x5f, 0x58, 0x6b, 0xcc, 0x12, | 1703 | 0x86, 0x9b, 0x70, 0x3b, 0xc7, 0xdc, 0xc6, 0x79, 0xfb, 0xee, 0x62, 0x0b, |
| 1709 | 0x6c, 0xae, 0x57, 0x65, 0x6f, 0xc8, 0x21, 0x89, 0x51, 0x33, 0x18, 0x23, | 1704 | 0x4b, 0x16, 0xeb, 0x07, 0xca, 0x1c, 0xd1, 0x7b, 0x6b, 0x90, 0xeb, 0x9a, |
| 1710 | 0x4a, 0x93, 0xf1, 0xdb, 0x66, 0xc0, 0x83, 0x92, 0xa4, 0x65, 0x3d, 0x16, | 1705 | 0x49, 0xbb, 0xb9, 0x7b, 0x91, 0x1e, 0x7e, 0x81, 0xb8, 0x4b, 0x9c, 0x46, |
| 1711 | 0xd2, 0xe0, 0x89, 0x04, 0xa2, 0x1b, 0x98, 0x46, 0x7e, 0x61, 0x5e, 0x18, | 1706 | 0x2f, 0xe3, 0xce, 0x46, 0xc6, 0xa2, 0xf2, 0x88, 0xde, 0xcf, 0x1c, 0xf5, |
| 1712 | 0xd7, 0x64, 0x0e, 0x60, 0x80, 0xe3, 0x5b, 0x9e, 0x29, 0xbc, 0xe3, 0xf9, | 1707 | 0xc2, 0x1d, 0x8e, 0x68, 0x48, 0x9e, 0xff, 0xf8, 0x32, 0x96, 0xc1, 0x1d, |
| 1713 | 0xc9, 0x7f, 0xe7, 0xde, 0x15, 0xbd, 0x64, 0xf7, 0x0c, 0x18, 0xda, 0x5d, | 1708 | 0xaa, 0x22, 0x0e, 0xea, 0xb9, 0xef, 0x42, 0x3f, 0x70, 0x3b, 0xfa, 0xf1, |
| 1714 | 0x6a, 0xbc, 0x92, 0x1c, 0xfc, 0x00, 0xe3, 0x9e, 0x32, 0x79, 0xa3, 0x82, | 1709 | 0x03, 0xf2, 0xbb, 0x99, 0x57, 0xe5, 0x88, 0x51, 0x19, 0x3c, 0x98, 0x3d, |
| 1715 | 0xd6, 0x81, 0x38, 0xa6, 0x85, 0x7e, 0xa0, 0xc4, 0xaa, 0x75, 0xbf, 0x5f, | 1710 | 0x89, 0x03, 0xd9, 0x47, 0xb1, 0x37, 0xbb, 0x5b, 0x49, 0xdb, 0xf7, 0x20, |
| 1716 | 0xa9, 0xc6, 0x8d, 0x0f, 0x50, 0xd7, 0x0b, 0x26, 0x68, 0x2b, 0x3e, 0x7c, | 1711 | 0x15, 0x79, 0xee, 0x26, 0x5a, 0xa5, 0x7c, 0x06, 0x95, 0xa1, 0xaf, 0x5b, |
| 1717 | 0x67, 0x54, 0x74, 0x5b, 0x3b, 0xb4, 0x83, 0xe3, 0x98, 0x98, 0x7b, 0x40, | 1712 | 0xe9, 0x1a, 0x15, 0xd5, 0xa1, 0x20, 0x56, 0x27, 0xe3, 0x70, 0x44, 0xde, |
| 1718 | 0x70, 0xf2, 0xa0, 0x1b, 0x8e, 0x83, 0xd3, 0x99, 0x9b, 0xd6, 0xcf, 0xbd, | 1713 | 0xb6, 0xe4, 0xb9, 0xcf, 0x2d, 0x13, 0x06, 0xae, 0x4f, 0x96, 0x23, 0x76, |
| 1719 | 0xa4, 0xe3, 0xdf, 0x54, 0xd1, 0x8b, 0xf0, 0x6b, 0xbd, 0x3f, 0xae, 0x18, | 1714 | 0xc8, 0xb2, 0xfa, 0x9b, 0x9d, 0xd8, 0x34, 0xd1, 0x84, 0x95, 0xc3, 0x0f, |
| 1720 | 0xda, 0x2f, 0x95, 0x03, 0xe4, 0x6c, 0x5e, 0x3c, 0x96, 0x39, 0x4c, 0x5d, | 1715 | 0x59, 0xf3, 0x18, 0x73, 0xde, 0xbd, 0xc6, 0x83, 0x3b, 0x0e, 0x79, 0xb0, |
| 1721 | 0xee, 0xcf, 0xe7, 0x4b, 0xab, 0x90, 0xe8, 0x93, 0x7d, 0x81, 0x27, 0x30, | 1716 | 0x3e, 0x19, 0x85, 0x2f, 0x52, 0xc1, 0xdf, 0x01, 0x73, 0x39, 0x8c, 0xc9, |
| 1722 | 0x7b, 0x40, 0x6f, 0xd9, 0xaa, 0x18, 0xc1, 0x6b, 0x95, 0x13, 0x98, 0x39, | 1717 | 0x49, 0x18, 0xfd, 0xd7, 0x39, 0x02, 0xc7, 0xc2, 0xaa, 0x07, 0x7f, 0x4d, |
| 1723 | 0x10, 0xe4, 0x5c, 0x6a, 0x58, 0x96, 0x2c, 0xe0, 0xa7, 0x60, 0xf0, 0x2a, | 1718 | 0x1c, 0x5f, 0x45, 0xdc, 0x89, 0x4d, 0x58, 0xa8, 0x8e, 0x78, 0x71, 0x27, |
| 1724 | 0x62, 0xb0, 0xb5, 0xf8, 0xa7, 0x66, 0x9c, 0x39, 0x8e, 0x6e, 0x3a, 0x15, | 1719 | 0xeb, 0x7f, 0x8c, 0x73, 0xff, 0xd6, 0x92, 0xe3, 0xc4, 0x02, 0x23, 0x36, |
| 1725 | 0xbd, 0x75, 0xae, 0x22, 0xfb, 0x80, 0x8c, 0x33, 0x6d, 0xac, 0xe3, 0x19, | 1720 | 0xa1, 0x68, 0xd8, 0x3a, 0xe1, 0xa6, 0xae, 0xdc, 0x88, 0x1d, 0xa9, 0xc5, |
| 1726 | 0xa8, 0xc7, 0x57, 0x39, 0xe6, 0x66, 0xce, 0xdb, 0x8b, 0x0b, 0x2d, 0x2c, | 1721 | 0xf5, 0xfb, 0xfc, 0xb8, 0x63, 0xc2, 0x83, 0x96, 0xa4, 0xb5, 0xec, 0xb8, |
| 1727 | 0x5a, 0xa8, 0xef, 0x2e, 0x71, 0x44, 0xef, 0xaa, 0x42, 0xb6, 0xa3, 0x86, | 1722 | 0x19, 0x5f, 0xab, 0xc1, 0xc0, 0xfa, 0x09, 0x2f, 0x6e, 0x4b, 0xea, 0xbe, |
| 1728 | 0x76, 0x73, 0xc7, 0x02, 0x3d, 0xfc, 0x03, 0xe2, 0x2e, 0x71, 0x1a, 0xdd, | 1723 | 0x1b, 0x98, 0xf3, 0x8f, 0x99, 0x41, 0xfc, 0xed, 0x84, 0x0f, 0xb7, 0x24, |
| 1729 | 0x8c, 0x3b, 0x6b, 0x18, 0x8b, 0x4a, 0x23, 0x7a, 0x2f, 0x73, 0xd4, 0xf7, | 1724 | 0x4f, 0x49, 0x1e, 0xb9, 0xdc, 0xc9, 0xd8, 0x73, 0xff, 0x44, 0x1d, 0xd6, |
| 1730 | 0x6e, 0x75, 0x44, 0x43, 0xf2, 0x1e, 0xd1, 0xdf, 0x63, 0x31, 0xdc, 0xa1, | 1725 | 0x26, 0xf5, 0x8b, 0x93, 0xe4, 0x76, 0xdd, 0x47, 0x4c, 0xdc, 0x3b, 0xa1, |
| 1731 | 0x0a, 0xe2, 0xa0, 0x9e, 0x7d, 0x11, 0xfa, 0xee, 0xaf, 0x92, 0x93, 0xfe, | 1726 | 0xa2, 0x83, 0xed, 0x7c, 0x22, 0x39, 0x17, 0x5d, 0x47, 0x9a, 0x29, 0xc3, |
| 1732 | 0x98, 0xfc, 0xae, 0xe6, 0xd2, 0x43, 0xc4, 0xa8, 0x11, 0x3c, 0x98, 0x39, | 1727 | 0x62, 0xac, 0x1a, 0x76, 0xc2, 0x24, 0x8b, 0xc7, 0x27, 0x81, 0x76, 0xfa, |
| 1733 | 0x88, 0xdd, 0x99, 0x34, 0x76, 0x66, 0xb6, 0x29, 0x43, 0xf6, 0xb3, 0x45, | 1728 | 0x47, 0x22, 0xf5, 0x45, 0xec, 0x19, 0x30, 0x71, 0xd7, 0x84, 0x9c, 0x9f, |
| 1734 | 0x45, 0xde, 0x99, 0x8b, 0x56, 0x28, 0x5f, 0x46, 0x79, 0xe8, 0x5b, 0xd6, | 1729 | 0xb4, 0x9f, 0x95, 0xbb, 0x70, 0x70, 0x31, 0x6e, 0x1c, 0x56, 0x89, 0x03, |
| 1735 | 0x50, 0x95, 0x8a, 0xca, 0x50, 0x10, 0xd7, 0x24, 0xe3, 0x70, 0x44, 0xde, | 1730 | 0xa5, 0x48, 0xaf, 0x55, 0x70, 0x1b, 0xaf, 0xef, 0x4a, 0xd9, 0x7b, 0xab, |
| 1736 | 0xb5, 0xe4, 0x7d, 0xed, 0xf5, 0xe3, 0x06, 0xae, 0x4e, 0x96, 0x22, 0xb6, | 1731 | 0x11, 0x1a, 0x0a, 0x1c, 0xab, 0x21, 0x67, 0x58, 0x72, 0x30, 0x7f, 0xfd, |
| 1737 | 0xc7, 0xb2, 0x7a, 0x1b, 0x9c, 0x58, 0x3b, 0x5e, 0x8f, 0x65, 0x03, 0x0f, | 1732 | 0x41, 0xe2, 0x7c, 0x19, 0x71, 0xbe, 0x82, 0x1c, 0xf6, 0xba, 0xd1, 0x93, |
| 1738 | 0x59, 0x73, 0x18, 0x73, 0x3e, 0xbc, 0xdc, 0x83, 0x5b, 0xf7, 0x78, 0xd0, | 1733 | 0x78, 0x80, 0xb8, 0x7c, 0x62, 0xb8, 0x9b, 0x71, 0xa7, 0x12, 0x5f, 0x63, |
| 1739 | 0x96, 0x8c, 0xc2, 0x17, 0x29, 0xe3, 0xef, 0x80, 0xb9, 0x04, 0xc6, 0xc4, | 1734 | 0x1c, 0x48, 0xf2, 0xfc, 0xec, 0x90, 0xd1, 0x55, 0x46, 0x9c, 0x7e, 0x81, |
| 1740 | 0x04, 0x8c, 0xde, 0xab, 0x1c, 0x81, 0xfd, 0x61, 0xd5, 0x83, 0xbf, 0x21, | 1735 | 0xf8, 0xdb, 0x4f, 0xcc, 0xb8, 0x3b, 0x49, 0xb7, 0x1f, 0x62, 0x0e, 0x70, |
| 1741 | 0x8e, 0x2f, 0x27, 0xee, 0xc4, 0xc6, 0x2d, 0x54, 0x46, 0xbc, 0xb8, 0x8d, | 1736 | 0x55, 0x74, 0xa1, 0x87, 0x39, 0xd6, 0x0d, 0x4a, 0xc0, 0xf7, 0x1a, 0x2a, |
| 1742 | 0xf5, 0xaf, 0xe3, 0xdc, 0xbf, 0xb3, 0x68, 0x3f, 0xb1, 0x40, 0xf6, 0x42, | 1737 | 0xe1, 0x38, 0x58, 0x8b, 0x96, 0x7d, 0x52, 0x46, 0xf0, 0x4b, 0x85, 0x7a, |
| 1743 | 0x6a, 0xd8, 0x30, 0xee, 0xa6, 0xae, 0xdc, 0x88, 0xed, 0xab, 0xc6, 0xd5, | 1738 | 0xd8, 0x49, 0x9d, 0x9f, 0x84, 0x35, 0xe8, 0xe0, 0x78, 0xeb, 0x4d, 0x32, |
| 1744 | 0x0f, 0xf8, 0x71, 0xeb, 0xb8, 0x07, 0x8d, 0x49, 0x6b, 0xf1, 0x01, 0x33, | 1739 | 0x70, 0xfc, 0xd8, 0xd4, 0xb5, 0x7f, 0x22, 0xd6, 0xbe, 0x43, 0x4c, 0xf5, |
| 1745 | 0xbe, 0x52, 0x83, 0x81, 0xb6, 0x71, 0x2f, 0xbe, 0x92, 0xd4, 0x7d, 0xd7, | 1740 | 0xcf, 0x6e, 0x46, 0xab, 0x61, 0xf2, 0x38, 0x89, 0x57, 0x06, 0x0d, 0xf3, |
| 1746 | 0x32, 0xe7, 0x1f, 0x31, 0x83, 0xf8, 0x5f, 0xe3, 0x3e, 0xdc, 0x94, 0x3c, | 1741 | 0x10, 0x9c, 0x78, 0x99, 0x3c, 0x6f, 0x6a, 0x36, 0x63, 0xa6, 0x21, 0x7e, |
| 1747 | 0x2a, 0x79, 0xe4, 0x12, 0x27, 0x63, 0xcf, 0xbd, 0xe3, 0xb3, 0xb0, 0x32, | 1742 | 0x98, 0xe1, 0x78, 0x54, 0xc9, 0x4b, 0xe0, 0x18, 0x07, 0xde, 0x38, 0xb8, |
| 1748 | 0xa9, 0x9f, 0x99, 0x20, 0xb7, 0xeb, 0xdc, 0x67, 0xe2, 0xae, 0x71, 0x15, | 1743 | 0x8c, 0xe3, 0x92, 0x58, 0x2a, 0xf1, 0x2e, 0x43, 0x59, 0x97, 0x61, 0x0d, |
| 1749 | 0xad, 0x6c, 0xe7, 0xc6, 0xe4, 0x6c, 0x74, 0xec, 0x6b, 0xa0, 0x0c, 0x0b, | 1744 | 0xf5, 0xd1, 0x9a, 0x54, 0x91, 0x39, 0x12, 0xc1, 0x5d, 0xfb, 0xf3, 0x71, |
| 1750 | 0xb1, 0x7c, 0xc0, 0x09, 0x93, 0x2c, 0x1e, 0x5f, 0x04, 0x5a, 0x06, 0x26, | 1745 | 0x78, 0x5b, 0x28, 0x7e, 0x33, 0xe3, 0x70, 0xb8, 0x9c, 0x71, 0xd8, 0x15, |
| 1751 | 0x98, 0xc7, 0xdd, 0x87, 0xed, 0x7d, 0x26, 0x6e, 0x1f, 0x97, 0xf3, 0x83, | 1746 | 0x11, 0xd9, 0x9c, 0x18, 0x65, 0xdc, 0xde, 0x91, 0x0a, 0xa3, 0x8d, 0x73, |
| 1752 | 0xf6, 0x3b, 0xae, 0xef, 0x3d, 0xbc, 0x10, 0x9f, 0x1f, 0x50, 0x89, 0x03, | 1747 | 0x38, 0x99, 0x61, 0xbf, 0xc9, 0x3a, 0x9c, 0xc9, 0x78, 0x18, 0xb3, 0x34, |
| 1753 | 0xc5, 0x18, 0x5a, 0xa9, 0xe0, 0x2b, 0xbc, 0xbe, 0x35, 0x25, 0x7b, 0x90, | 1748 | 0x1e, 0x44, 0xb5, 0xb1, 0x59, 0x3c, 0xfc, 0x3c, 0xe6, 0xf3, 0x30, 0xec, |
| 1754 | 0x81, 0xd0, 0x8e, 0xc0, 0xfe, 0x2a, 0x72, 0x86, 0x45, 0x0f, 0xe7, 0xae, | 1749 | 0x6b, 0x1b, 0x93, 0x0a, 0xe2, 0xed, 0x8a, 0xcd, 0xe7, 0xcf, 0x64, 0x04, |
| 1755 | 0x3f, 0x48, 0x9c, 0x2f, 0x21, 0xce, 0x97, 0x91, 0xc3, 0x5e, 0x35, 0x7c, | 1750 | 0x9b, 0x65, 0x2d, 0x73, 0x7b, 0x95, 0x3c, 0x8b, 0x32, 0x98, 0xfa, 0x1e, |
| 1756 | 0x10, 0xf7, 0x13, 0x97, 0x0f, 0x0d, 0x74, 0x32, 0xee, 0x94, 0xe3, 0x71, | 1751 | 0xaa, 0xa9, 0xff, 0xaa, 0x02, 0x0e, 0xfd, 0x34, 0x24, 0xb8, 0x5b, 0x4f, |
| 1757 | 0xc6, 0x81, 0x24, 0xcf, 0x4f, 0xec, 0x30, 0x3a, 0x4a, 0x88, 0xd3, 0x3f, | 1752 | 0xdc, 0x95, 0xe7, 0x04, 0x2c, 0x6b, 0x5d, 0x60, 0x3a, 0x1e, 0xfd, 0x9f, |
| 1758 | 0x20, 0xfe, 0xf6, 0x12, 0x33, 0xee, 0x48, 0x32, 0xdc, 0xef, 0x60, 0x0e, | 1753 | 0x77, 0xa3, 0xf6, 0x33, 0x17, 0x82, 0x49, 0xc4, 0xbf, 0x14, 0xf1, 0x8f, |
| 1759 | 0x70, 0x69, 0x74, 0xbe, 0x87, 0x39, 0xd6, 0xb5, 0x4a, 0xc0, 0xf7, 0x26, | 1754 | 0x63, 0xe8, 0xb9, 0x96, 0x18, 0x48, 0x99, 0xfe, 0x21, 0x45, 0x0c, 0x24, |
| 1760 | 0xca, 0xe1, 0x78, 0xb8, 0x1a, 0x8d, 0x0f, 0x48, 0x19, 0xc1, 0x2f, 0x15, | 1755 | 0x4e, 0x3f, 0x4a, 0x9c, 0xfe, 0x06, 0x71, 0xfa, 0xeb, 0xc4, 0xe9, 0xaf, |
| 1761 | 0xea, 0x5e, 0x27, 0x75, 0x7e, 0x18, 0x56, 0xbf, 0x83, 0xe3, 0xad, 0x35, | 1756 | 0x11, 0x13, 0xf2, 0x6b, 0x7a, 0x6d, 0x72, 0xff, 0x85, 0xf3, 0xf1, 0x96, |
| 1762 | 0xc9, 0xc0, 0xf1, 0x9a, 0xa9, 0x6b, 0xff, 0x4c, 0xac, 0x7d, 0x9f, 0x98, | 1757 | 0xbd, 0xb6, 0x38, 0x93, 0xba, 0x9a, 0x3b, 0xac, 0x60, 0x9e, 0xa1, 0x1f, |
| 1763 | 0xea, 0x9f, 0xd1, 0x80, 0x26, 0xc3, 0xe4, 0x71, 0x18, 0x27, 0xfb, 0x0d, | 1758 | 0x13, 0xbb, 0xff, 0x01, 0xe7, 0xc9, 0x3f, 0xa3, 0xce, 0x7e, 0x26, 0xa6, |
| 1764 | 0x53, 0xf6, 0xe4, 0xbd, 0x4e, 0x9e, 0x37, 0x39, 0x83, 0x31, 0xd3, 0x10, | 1759 | 0x35, 0xd9, 0x07, 0x77, 0xb2, 0x51, 0xeb, 0x87, 0xfd, 0x2c, 0xb2, 0x29, |
| 1765 | 0x3f, 0x1c, 0xe1, 0x78, 0x54, 0xc9, 0x4b, 0xe0, 0x18, 0x03, 0xde, 0x7e, | 1760 | 0x5c, 0xb4, 0x24, 0xb9, 0x11, 0x8e, 0x64, 0xe3, 0xb1, 0xd3, 0x72, 0x9f, |
| 1766 | 0x78, 0x31, 0xc7, 0x25, 0xb1, 0x54, 0xe2, 0xdd, 0x08, 0x65, 0x5d, 0x8c, | 1761 | 0x77, 0x96, 0xe4, 0xf5, 0x1b, 0xe1, 0x4c, 0xea, 0xc7, 0xe2, 0x94, 0x65, |
| 1767 | 0x15, 0xd4, 0x47, 0x53, 0x52, 0x45, 0x7a, 0x5f, 0x04, 0xb7, 0xef, 0xca, | 1762 | 0x25, 0xff, 0x73, 0x25, 0x1b, 0xcd, 0xd7, 0x60, 0x63, 0x9b, 0x7f, 0xca, |
| 1768 | 0xc5, 0xe1, 0x8d, 0xa1, 0xf8, 0x0d, 0x8c, 0xc3, 0xe1, 0x52, 0xc6, 0x61, | 1763 | 0xfe, 0xaf, 0xfe, 0xc2, 0x03, 0xd4, 0x57, 0x8e, 0x6d, 0x66, 0xa8, 0xfb, |
| 1769 | 0x57, 0x44, 0x64, 0x73, 0x62, 0x98, 0x71, 0x7b, 0x73, 0x2a, 0x8c, 0x66, | 1764 | 0x72, 0xf2, 0x95, 0x47, 0xb2, 0xf2, 0xbb, 0xb1, 0x23, 0xa1, 0x1e, 0x43, |
| 1770 | 0xce, 0xe1, 0x44, 0x9a, 0xfd, 0x26, 0x67, 0xe1, 0x78, 0xda, 0xc3, 0x98, | 1765 | 0x6c, 0xa6, 0xf0, 0xf1, 0x30, 0x6e, 0x4a, 0x7a, 0x68, 0x07, 0x71, 0x54, |
| 1771 | 0xa5, 0xf1, 0x20, 0xaa, 0x8d, 0x4c, 0xe7, 0xe1, 0xe7, 0x71, 0x31, 0x0f, | 1766 | 0xd1, 0xb7, 0x3e, 0x37, 0xd1, 0x4c, 0x5f, 0x7b, 0xc8, 0xd2, 0x22, 0x81, |
| 1772 | 0xc3, 0xbe, 0xb6, 0x26, 0xa9, 0x20, 0xde, 0xa2, 0xd8, 0x7c, 0xfe, 0x78, | 1767 | 0x8e, 0x09, 0x72, 0x9e, 0x2d, 0x13, 0xcb, 0xb0, 0x62, 0xd8, 0xb2, 0x3c, |
| 1773 | 0x5a, 0xb0, 0x59, 0xd6, 0x32, 0xef, 0xae, 0x94, 0x3d, 0xa8, 0xfd, 0xa9, | 1768 | 0x4b, 0x8d, 0xf0, 0x56, 0xc5, 0x0f, 0x17, 0x7d, 0xd0, 0x41, 0xbf, 0xda, |
| 1774 | 0x97, 0x50, 0x49, 0x7c, 0xaa, 0xc8, 0xe3, 0xd0, 0xcf, 0x42, 0x82, 0xbb, | 1769 | 0x7c, 0x28, 0xa0, 0xbd, 0x46, 0x3c, 0xed, 0x6c, 0x3e, 0x41, 0xfb, 0x30, |
| 1775 | 0xb5, 0xc4, 0x5d, 0xd9, 0x4f, 0x64, 0x59, 0xab, 0x02, 0x53, 0xf1, 0xe8, | 1770 | 0x2e, 0xb6, 0x11, 0x4b, 0x9d, 0x91, 0x00, 0xf3, 0x44, 0x0f, 0x6d, 0xdf, |
| 1776 | 0xff, 0xfb, 0x30, 0x6a, 0xef, 0xab, 0x15, 0x4c, 0x22, 0xfe, 0xa5, 0x88, | 1771 | 0x8b, 0x8b, 0x09, 0xf1, 0x2f, 0xbd, 0xeb, 0x9f, 0x98, 0x9b, 0x74, 0xd1, |
| 1777 | 0x7f, 0x1c, 0x43, 0xd7, 0x95, 0xc4, 0x40, 0xca, 0xf4, 0x8f, 0x29, 0x62, | 1772 | 0x37, 0x7e, 0x9e, 0xa8, 0xa3, 0x0f, 0xb8, 0xf1, 0x46, 0xc2, 0xa0, 0xbf, |
| 1778 | 0x20, 0x71, 0xfa, 0x20, 0x71, 0xfa, 0xdb, 0xc4, 0xe9, 0x6f, 0x11, 0xa7, | 1773 | 0x79, 0xf0, 0x56, 0xa2, 0x89, 0x7d, 0x05, 0x59, 0xc6, 0x8f, 0x7b, 0x26, |
| 1779 | 0x1f, 0x27, 0x26, 0xe4, 0xd6, 0xf4, 0x9a, 0xe5, 0xb9, 0x0a, 0xe7, 0xe3, | 1774 | 0xc2, 0xf4, 0xb3, 0x6b, 0x79, 0xc8, 0x73, 0x99, 0xf5, 0xf1, 0x6f, 0x2a, |
| 1780 | 0x1d, 0x7b, 0x6d, 0xb1, 0x86, 0xba, 0x9a, 0x3d, 0xa0, 0x60, 0x8e, 0xa1, | 1775 | 0xf5, 0x83, 0x73, 0xd5, 0x1a, 0x44, 0x6b, 0x35, 0x7c, 0x7e, 0xe2, 0x23, |
| 1781 | 0xef, 0x17, 0xbb, 0xff, 0x31, 0xe7, 0xc9, 0x3f, 0x2d, 0xb7, 0xe7, 0xb7, | 1776 | 0xf8, 0x57, 0xc6, 0xed, 0x4d, 0x49, 0x70, 0x0e, 0x11, 0x22, 0x0f, 0x9c, |
| 1782 | 0x29, 0xd9, 0x03, 0x77, 0xb2, 0x4e, 0xeb, 0x85, 0xfd, 0x0d, 0x01, 0x53, | 1777 | 0x3c, 0x22, 0xf7, 0x1c, 0xd1, 0x18, 0x6d, 0x70, 0xe8, 0xcc, 0x6d, 0xf5, |
| 1783 | 0xb8, 0x68, 0x51, 0x72, 0x0d, 0x1c, 0xc9, 0xba, 0xfd, 0xc7, 0xe4, 0xf9, | 1778 | 0xdc, 0x79, 0x87, 0x93, 0x7d, 0x92, 0x15, 0xb3, 0xec, 0xcf, 0x07, 0xcb, |
| 1784 | 0xed, 0x74, 0xc9, 0xeb, 0xd7, 0xc8, 0x1e, 0xed, 0xfd, 0xb2, 0x37, 0x6c, | 1779 | 0x71, 0xef, 0xa1, 0x13, 0xf4, 0x91, 0x12, 0x2c, 0x7a, 0xc0, 0x8d, 0xcf, |
| 1785 | 0x19, 0xef, 0xb9, 0x92, 0x75, 0xe6, 0x9b, 0xb0, 0xb1, 0xcd, 0x3f, 0x69, | 1780 | 0x1f, 0xc9, 0x90, 0x3b, 0xa8, 0x90, 0xfd, 0xbc, 0x69, 0x12, 0x85, 0x39, |
| 1786 | 0xdf, 0xab, 0x7d, 0xef, 0x7e, 0xea, 0x2b, 0xcb, 0x36, 0xd3, 0x29, 0xd9, | 1781 | 0xa3, 0x11, 0xdc, 0xb9, 0x3f, 0x83, 0xe1, 0x02, 0xcf, 0x0b, 0x85, 0xe2, |
| 1787 | 0x17, 0x3b, 0x0b, 0x8f, 0x66, 0xe4, 0x77, 0x5d, 0x6b, 0x42, 0xdd, 0x8f, | 1782 | 0xff, 0x43, 0xc5, 0x09, 0xf2, 0x88, 0x40, 0xe7, 0xd5, 0xb4, 0xb1, 0xaa, |
| 1788 | 0x58, 0x8d, 0xf0, 0xf1, 0x30, 0xae, 0x4f, 0x7a, 0x68, 0x07, 0x71, 0x54, | 1783 | 0x48, 0x20, 0x2e, 0xe3, 0x6e, 0xa7, 0x8d, 0xf5, 0x71, 0x3e, 0x33, 0x1c, |
| 1789 | 0xd0, 0xb7, 0xbe, 0x36, 0xde, 0x40, 0x5f, 0x7b, 0xc8, 0xd2, 0x22, 0x81, | 1784 | 0x47, 0x82, 0x36, 0xf6, 0x55, 0xca, 0xbf, 0x87, 0x36, 0x16, 0xa7, 0x8d, |
| 1790 | 0xd6, 0x71, 0x72, 0x9e, 0xf5, 0xe3, 0x8b, 0xb1, 0x74, 0xc0, 0xb2, 0x3c, | 1785 | 0xc5, 0x69, 0x4f, 0x71, 0xda, 0x98, 0x3c, 0xfb, 0x1b, 0xa7, 0x8d, 0xc5, |
| 1791 | 0x97, 0x19, 0xe1, 0x0d, 0x8a, 0x1f, 0x2e, 0xfa, 0xa0, 0x83, 0x7e, 0xb5, | 1786 | 0x69, 0x63, 0xf1, 0xcc, 0x32, 0x1c, 0x25, 0xd3, 0xd8, 0x39, 0xd6, 0x4c, |
| 1792 | 0x6e, 0x4f, 0x40, 0x7b, 0x93, 0x78, 0xda, 0xde, 0x70, 0x80, 0xf6, 0x61, | 1787 | 0x1c, 0x53, 0xec, 0xa8, 0x94, 0xbb, 0xf9, 0x23, 0xe4, 0xec, 0xd7, 0xf1, |
| 1793 | 0x9c, 0x69, 0x26, 0x96, 0x3a, 0x23, 0x01, 0xe6, 0x89, 0x1e, 0xda, 0xbe, | 1788 | 0x50, 0xd0, 0x46, 0x9f, 0xec, 0x4f, 0x67, 0xc8, 0x79, 0xdc, 0xf8, 0x75, |
| 1794 | 0x17, 0x67, 0x12, 0xe2, 0x5f, 0x7a, 0xc7, 0x3f, 0x33, 0x37, 0xe9, 0xa0, | 1789 | 0x56, 0x38, 0x7e, 0x33, 0xf3, 0xd8, 0x93, 0xe4, 0xf9, 0x2a, 0x9e, 0x30, |
| 1795 | 0x6f, 0xfc, 0x32, 0x31, 0x8b, 0x3e, 0xe0, 0xc6, 0xdb, 0x09, 0x83, 0xfe, | 1790 | 0x25, 0x0f, 0x36, 0x79, 0xce, 0x58, 0x93, 0x12, 0xbe, 0x76, 0x12, 0x77, |
| 1796 | 0xe6, 0xc1, 0x3b, 0x89, 0x7a, 0xf6, 0x15, 0x64, 0x19, 0x3f, 0xee, 0x1c, | 1791 | 0x0f, 0x02, 0x37, 0x90, 0x17, 0xd6, 0x92, 0x97, 0x1c, 0x5e, 0xc4, 0xdf, |
| 1797 | 0x0f, 0xd3, 0xcf, 0xae, 0xe4, 0x21, 0xef, 0x53, 0xd7, 0xc6, 0xbf, 0xa3, | 1792 | 0x07, 0x4f, 0xd0, 0xe6, 0x4f, 0xda, 0x7b, 0xbb, 0x54, 0xb6, 0x75, 0x66, |
| 1798 | 0xd4, 0xf6, 0xcf, 0x56, 0xab, 0x10, 0xad, 0xd6, 0xf0, 0xf5, 0xf1, 0xcf, | 1793 | 0xb0, 0xde, 0x77, 0x3d, 0x7d, 0xf0, 0x7e, 0xd6, 0x75, 0x1e, 0x94, 0x3a, |
| 1799 | 0xe2, 0x3f, 0x18, 0xb7, 0xd7, 0x26, 0xc1, 0x39, 0x44, 0x88, 0x3c, 0x70, | 1794 | 0x27, 0xd8, 0xb6, 0x1e, 0xfe, 0x35, 0xe7, 0xbf, 0xe3, 0x81, 0x5a, 0xbc, |
| 1800 | 0x62, 0x9f, 0x3c, 0x4b, 0x44, 0x5d, 0x74, 0xae, 0x43, 0x67, 0x6e, 0xab, | 1795 | 0xb1, 0x5f, 0x0f, 0xbf, 0x43, 0xcc, 0xab, 0x75, 0x58, 0xcb, 0xae, 0x0e, |
| 1801 | 0x67, 0x4f, 0x3b, 0x9c, 0xec, 0x93, 0xac, 0x98, 0x65, 0x7f, 0xd9, 0x5f, | 1796 | 0x05, 0xb6, 0x5d, 0xad, 0xe6, 0xf9, 0x5e, 0xfb, 0x90, 0x13, 0xc7, 0x42, |
| 1802 | 0x8a, 0xbb, 0xf6, 0x1c, 0xa0, 0x8f, 0x14, 0x61, 0xc1, 0xfd, 0x6e, 0x7c, | 1797 | 0xcb, 0xe0, 0x59, 0x54, 0xe4, 0x7c, 0xb4, 0xa5, 0x5a, 0xe1, 0x58, 0x7a, |
| 1803 | 0x7d, 0xdf, 0x08, 0xb9, 0x83, 0x8a, 0x99, 0xcc, 0x95, 0x86, 0x48, 0x14, | 1798 | 0xf8, 0x3c, 0xb9, 0x4a, 0x92, 0xed, 0x1f, 0xcd, 0x3c, 0x4e, 0x0c, 0xf9, |
| 1804 | 0x66, 0x0e, 0x47, 0x70, 0xdb, 0xae, 0x11, 0x0c, 0xe4, 0x79, 0x5e, 0x28, | 1799 | 0x22, 0x9e, 0x63, 0x7e, 0x3e, 0xf6, 0xa1, 0x97, 0xc9, 0x1d, 0xdd, 0x18, |
| 1805 | 0x14, 0xff, 0x9f, 0x2a, 0x0e, 0x90, 0x47, 0x04, 0xda, 0x3f, 0x43, 0x1b, | 1800 | 0x27, 0x07, 0x3c, 0x3e, 0x18, 0xfd, 0xa8, 0x93, 0xb8, 0xef, 0x59, 0x54, |
| 1806 | 0xab, 0x88, 0x04, 0xe2, 0x32, 0xee, 0x16, 0xda, 0x58, 0x0f, 0xe7, 0x33, | 1801 | 0x89, 0x4c, 0x5a, 0xb8, 0x62, 0x25, 0x9e, 0x19, 0x34, 0xb4, 0x1b, 0x94, |
| 1807 | 0xcd, 0x71, 0x24, 0x68, 0x63, 0x8f, 0x51, 0xfe, 0xed, 0xb4, 0xb1, 0x38, | 1802 | 0x3c, 0x2f, 0xcc, 0xef, 0xfd, 0x32, 0x2e, 0x8e, 0x22, 0x30, 0x79, 0x9e, |
| 1808 | 0x6d, 0x2c, 0x4e, 0x7b, 0x8a, 0xd3, 0xc6, 0xe4, 0x9d, 0xfd, 0x38, 0x6d, | 1803 | 0xdc, 0xf0, 0x9d, 0xb4, 0xc4, 0xb0, 0x93, 0xf4, 0x71, 0x3f, 0xc2, 0x49, |
| 1809 | 0x2c, 0x4e, 0x1b, 0x8b, 0xa7, 0x17, 0x63, 0x94, 0x4c, 0x63, 0xcb, 0x48, | 1804 | 0x0d, 0x27, 0xc6, 0x0d, 0x2c, 0x4c, 0x7a, 0xf1, 0xf0, 0x78, 0x10, 0x57, |
| 1810 | 0x03, 0x71, 0x4c, 0xb1, 0xa3, 0x52, 0xf6, 0x86, 0xcf, 0x92, 0xb3, 0x5f, | 1805 | 0xd3, 0x77, 0xb3, 0xe4, 0x87, 0x1f, 0x4a, 0x8a, 0x2f, 0xd6, 0x61, 0x62, |
| 1811 | 0xc5, 0x43, 0x41, 0x33, 0x7d, 0xb2, 0x77, 0x68, 0x84, 0x9c, 0xc7, 0x8d, | 1806 | 0xbc, 0x8e, 0x3e, 0x22, 0xbc, 0xfc, 0x67, 0xf0, 0xd4, 0x9e, 0xb5, 0xf7, |
| 1812 | 0xdf, 0x64, 0x84, 0xe3, 0x37, 0x30, 0x8f, 0x3d, 0x4c, 0x9e, 0xaf, 0xe2, | 1807 | 0x36, 0x8f, 0xa6, 0xf4, 0xfe, 0x18, 0xc7, 0x13, 0xf3, 0xea, 0xc7, 0x62, |
| 1813 | 0x49, 0x53, 0xf2, 0x60, 0x93, 0xe7, 0x8c, 0x35, 0x29, 0xe1, 0x6b, 0x87, | 1808 | 0xd0, 0xd3, 0xc0, 0x87, 0xdf, 0x4d, 0x7f, 0x52, 0xe2, 0xa3, 0xf8, 0xa3, |
| 1814 | 0x71, 0x47, 0x3f, 0x70, 0x2d, 0x79, 0x61, 0x35, 0x79, 0xc9, 0xde, 0x05, | 1809 | 0x86, 0x09, 0xf2, 0x9d, 0x52, 0x62, 0x6a, 0x79, 0xa4, 0xfe, 0xc2, 0xf7, |
| 1815 | 0xfc, 0xfd, 0xf0, 0x01, 0xda, 0xbc, 0xf8, 0x63, 0x6e, 0xaf, 0xeb, 0xf1, | 1810 | 0x15, 0x3d, 0xf7, 0x94, 0x6a, 0x59, 0xdf, 0x5b, 0xac, 0xc1, 0x77, 0x44, |
| 1816 | 0xfe, 0x5a, 0xdf, 0xd5, 0xf4, 0xc1, 0x7b, 0x59, 0xd7, 0xf9, 0xb0, 0xd4, | 1811 | 0x23, 0xf7, 0x30, 0xed, 0xe7, 0x62, 0xe4, 0x79, 0xf3, 0xd9, 0xfb, 0x6a, |
| 1817 | 0x39, 0xc0, 0xb6, 0xf5, 0xf0, 0x6f, 0x38, 0xff, 0xad, 0xf7, 0x57, 0xe3, | 1812 | 0x31, 0x63, 0x5f, 0x12, 0xff, 0xad, 0x36, 0xfe, 0xd1, 0x59, 0x8c, 0xf3, |
| 1818 | 0xed, 0x5d, 0x7a, 0xf8, 0x7d, 0x62, 0x5e, 0xb5, 0xc3, 0x5a, 0xfc, 0x99, | 1813 | 0xb3, 0x64, 0x7f, 0x76, 0xf2, 0xf4, 0x6c, 0xb9, 0x57, 0x34, 0xa9, 0x36, |
| 1819 | 0x50, 0x60, 0xe3, 0x67, 0xd4, 0x1c, 0xdf, 0x6b, 0xd9, 0xe1, 0xc4, 0xfe, | 1814 | 0x76, 0x1c, 0x83, 0x7e, 0xec, 0x15, 0x45, 0xf7, 0x7d, 0x95, 0xb1, 0xc1, |
| 1820 | 0xd0, 0x62, 0x78, 0x16, 0x14, 0x38, 0x1f, 0x6d, 0xa9, 0x5a, 0x38, 0x96, | 1815 | 0x45, 0x1b, 0x75, 0x4c, 0x68, 0xf4, 0xdd, 0xc6, 0x13, 0x33, 0x60, 0xc4, |
| 1821 | 0x1e, 0x3e, 0x4d, 0xae, 0x92, 0x64, 0xfb, 0xa3, 0xe9, 0x23, 0xc4, 0x90, | 1816 | 0xaf, 0x51, 0x5d, 0x16, 0x6c, 0x79, 0x6e, 0xa8, 0xca, 0xe7, 0x45, 0x82, |
| 1822 | 0xfb, 0xf0, 0x02, 0xf3, 0xf3, 0x91, 0x4f, 0xbf, 0x4e, 0xee, 0xe8, 0xc6, | 1817 | 0x3b, 0x12, 0x17, 0xc8, 0x17, 0x89, 0xc1, 0x9d, 0xf4, 0x97, 0x35, 0x76, |
| 1823 | 0x18, 0x39, 0xe0, 0x81, 0xfe, 0xe8, 0xe7, 0x9c, 0xc4, 0x7d, 0xcf, 0x82, | 1818 | 0x2c, 0x3a, 0x61, 0xef, 0xfd, 0xde, 0x3a, 0x11, 0xa7, 0x8f, 0x2c, 0x43, |
| 1824 | 0x72, 0xa4, 0x87, 0x84, 0x2b, 0x96, 0xe3, 0xd9, 0x7e, 0x43, 0xbb, 0x56, | 1819 | 0xc5, 0xb0, 0x07, 0x9f, 0xb3, 0xe3, 0xd0, 0x43, 0x56, 0x0d, 0xfd, 0xe5, |
| 1825 | 0xc9, 0xf1, 0xc2, 0x2d, 0x3c, 0x7f, 0xb3, 0xdf, 0x38, 0x33, 0x8c, 0xc0, | 1820 | 0xae, 0x43, 0x81, 0xce, 0xeb, 0xe9, 0x2f, 0xf5, 0x4b, 0x25, 0x86, 0x31, |
| 1826 | 0xc4, 0x69, 0x72, 0xc3, 0xf7, 0x87, 0x24, 0x86, 0x1d, 0xa4, 0x8f, 0xfb, | 1821 | 0x6e, 0xa7, 0x0c, 0x73, 0x94, 0xd8, 0xf2, 0x50, 0xb3, 0x31, 0xf9, 0x32, |
| 1827 | 0x11, 0x4e, 0x6a, 0x38, 0x34, 0x66, 0x60, 0x7e, 0xd2, 0x8b, 0x47, 0xc6, | 1822 | 0xf2, 0x3e, 0xb3, 0x6b, 0xa0, 0x16, 0x7f, 0xff, 0xc0, 0x71, 0x7b, 0x2d, |
| 1828 | 0x82, 0xf8, 0x0c, 0x7d, 0x37, 0x43, 0x7e, 0xf8, 0xe9, 0xa4, 0xf8, 0xe2, | 1823 | 0xe4, 0x4e, 0x9e, 0x27, 0x07, 0x7c, 0xb6, 0x7f, 0xc4, 0xf8, 0xfb, 0x1e, |
| 1829 | 0x2c, 0x8c, 0x8f, 0xcd, 0xb2, 0xf7, 0x54, 0x7a, 0x8c, 0x5f, 0xc0, 0x53, | 1824 | 0xc6, 0xbc, 0x18, 0xfd, 0x68, 0xe7, 0x80, 0xb5, 0xec, 0xf9, 0xc5, 0xf1, |
| 1830 | 0x2d, 0x3e, 0x49, 0x6e, 0x9d, 0xd2, 0x7b, 0x63, 0x1c, 0x4f, 0xcc, 0xab, | 1825 | 0xb5, 0x55, 0x08, 0x32, 0x26, 0xb9, 0xd1, 0x3f, 0xa0, 0x0f, 0x76, 0x30, |
| 1831 | 0xef, 0x8f, 0x41, 0x1f, 0x02, 0xae, 0xf8, 0x70, 0xe8, 0x8b, 0x12, 0x1f, | 1826 | 0x06, 0x9d, 0x5d, 0x6c, 0x52, 0x16, 0x0f, 0x86, 0x06, 0x04, 0x53, 0x4f, |
| 1832 | 0xc5, 0x1f, 0x35, 0x8c, 0x93, 0xef, 0x14, 0x13, 0x53, 0x4b, 0x23, 0xb5, | 1827 | 0xdd, 0x52, 0x8b, 0xf8, 0xff, 0xd0, 0x38, 0xbe, 0xcf, 0xd9, 0xf7, 0x08, |
| 1833 | 0xef, 0xbd, 0xac, 0xe8, 0xd9, 0xa7, 0x55, 0xcb, 0x7a, 0x69, 0xa1, 0x06, | 1828 | 0xeb, 0xb0, 0xe9, 0xc8, 0x52, 0xca, 0xdc, 0x44, 0x1f, 0x64, 0x5e, 0xcd, |
| 1834 | 0xdf, 0x3e, 0x8d, 0xdc, 0xc3, 0x64, 0xec, 0x16, 0x3f, 0xd5, 0x30, 0xe3, | 1829 | 0x7c, 0x67, 0xc3, 0x7e, 0xf1, 0x0b, 0xb4, 0x48, 0x9e, 0xd6, 0x6d, 0x06, |
| 1835 | 0x81, 0x6a, 0x4c, 0x7b, 0x20, 0x89, 0xbf, 0xad, 0x8e, 0x7f, 0x6e, 0x3a, | 1830 | 0xcc, 0x57, 0xe9, 0x43, 0x25, 0xe4, 0x3a, 0x0f, 0xa6, 0xec, 0xe7, 0x73, |
| 1836 | 0xe3, 0xfc, 0x74, 0xe2, 0x7a, 0x65, 0xf2, 0xd8, 0x0c, 0x37, 0xf9, 0xf2, | 1831 | 0x72, 0x15, 0x46, 0x18, 0x8b, 0x69, 0xa3, 0x25, 0x86, 0x0f, 0x33, 0xc8, |
| 1837 | 0x84, 0x5a, 0xd7, 0xba, 0x1f, 0xfa, 0xfe, 0x93, 0x8a, 0xee, 0x7b, 0x8c, | 1832 | 0xeb, 0x16, 0x72, 0x3e, 0xca, 0xb2, 0x1e, 0x80, 0x1c, 0x02, 0xc4, 0x27, |
| 1838 | 0xb1, 0xc1, 0x45, 0x1b, 0x75, 0x8c, 0x6b, 0xf4, 0xdd, 0xba, 0x43, 0xd3, | 1833 | 0x1c, 0x25, 0x08, 0x1e, 0xf5, 0xf3, 0x98, 0xcf, 0x83, 0x8a, 0xc8, 0xaa, |
| 1839 | 0x60, 0xc4, 0x2f, 0x57, 0x5d, 0x16, 0x6c, 0x79, 0xae, 0xa8, 0xcc, 0xe5, | 1834 | 0x98, 0x79, 0x94, 0x75, 0x47, 0x33, 0xb6, 0x2d, 0xfe, 0x3d, 0xe7, 0x3d, |
| 1840 | 0x45, 0x82, 0x3b, 0x12, 0x17, 0x1c, 0xb2, 0xff, 0x13, 0xed, 0xf4, 0x97, | 1835 | 0x41, 0x5b, 0xff, 0x04, 0xb1, 0x7e, 0x72, 0x2f, 0xd0, 0x7f, 0x30, 0x6f, |
| 1841 | 0x15, 0x76, 0x2c, 0x3a, 0x60, 0xef, 0x8f, 0xdb, 0x30, 0x1e, 0xa7, 0x8f, | 1836 | 0xdb, 0x29, 0xb6, 0xdf, 0x4e, 0xcc, 0xbb, 0x40, 0x9b, 0xed, 0xe3, 0x7c, |
| 1842 | 0x2c, 0x46, 0xd9, 0x80, 0x07, 0x5f, 0xb3, 0xe3, 0xd0, 0x43, 0x56, 0x15, | 1837 | 0x0f, 0x8d, 0x18, 0xc1, 0x46, 0x35, 0xa0, 0x4d, 0x70, 0x9e, 0x7b, 0xc6, |
| 1843 | 0xfd, 0xe5, 0xf6, 0x3d, 0x81, 0xf6, 0xab, 0xe9, 0x2f, 0xb5, 0x97, 0x49, | 1838 | 0x54, 0x0c, 0x0c, 0x2e, 0xc3, 0x28, 0xf3, 0xa0, 0xde, 0xb4, 0xf8, 0x88, |
| 1844 | 0x0c, 0x63, 0xdc, 0x4e, 0x19, 0xe6, 0x30, 0xb1, 0xe5, 0xa1, 0x06, 0x63, | 1839 | 0x94, 0x39, 0x89, 0x6e, 0xfa, 0xc8, 0x2f, 0x17, 0x2b, 0x88, 0x7d, 0x5c, |
| 1845 | 0xe2, 0x75, 0xe4, 0x7c, 0x66, 0x6b, 0x5f, 0x35, 0xfe, 0xe1, 0xfe, 0xfd, | 1840 | 0xf6, 0xbe, 0x3b, 0x99, 0xef, 0x7f, 0x11, 0x9b, 0x12, 0x8f, 0x5b, 0x95, |
| 1846 | 0xf6, 0x5a, 0xc8, 0x6d, 0x3c, 0x4f, 0xf6, 0xf9, 0x6c, 0xff, 0x88, 0xf1, | 1841 | 0x86, 0xde, 0x9f, 0x56, 0x99, 0x67, 0xd1, 0x36, 0x7b, 0x98, 0x9f, 0x2c, |
| 1847 | 0xf7, 0x9d, 0x8c, 0x79, 0x31, 0xfa, 0xd1, 0x96, 0x3e, 0x6b, 0xf1, 0xf7, | 1842 | 0x67, 0x7e, 0xd2, 0x5b, 0xb0, 0xcb, 0x33, 0xb4, 0xc3, 0x01, 0xc6, 0xb1, |
| 1848 | 0x17, 0xc6, 0x57, 0x56, 0x20, 0xc8, 0x98, 0xe4, 0x46, 0x6f, 0x9f, 0xde, | 1843 | 0x97, 0xd3, 0xf9, 0xb8, 0xf7, 0x83, 0x21, 0x3f, 0x16, 0x5e, 0x53, 0x89, |
| 1849 | 0xdf, 0xca, 0x18, 0x74, 0x62, 0xa1, 0x49, 0x59, 0x3c, 0xd8, 0xd1, 0x27, | 1844 | 0xa7, 0x0f, 0xe6, 0x65, 0xdb, 0x4b, 0x9b, 0x7c, 0x8a, 0x7a, 0xbe, 0x83, |
| 1850 | 0x98, 0x7a, 0xf4, 0xa6, 0x6a, 0xc4, 0xff, 0xa7, 0xc6, 0xf1, 0x7d, 0xcd, | 1845 | 0x7a, 0x7d, 0x29, 0x25, 0x18, 0x15, 0xc4, 0x33, 0xe4, 0xd1, 0x5b, 0xc8, |
| 1851 | 0x7e, 0xf6, 0x37, 0x0b, 0x6b, 0xf7, 0x5d, 0x46, 0x99, 0xeb, 0xe9, 0x83, | 1846 | 0x05, 0xbe, 0x97, 0xca, 0xdb, 0xe4, 0xe7, 0x27, 0xd6, 0x68, 0xf9, 0xf8, |
| 1852 | 0xcc, 0xab, 0x99, 0xef, 0xac, 0xde, 0x25, 0x7e, 0x81, 0x46, 0xc9, 0xd3, | 1847 | 0xe0, 0x85, 0xba, 0x4f, 0xf6, 0x00, 0x5a, 0xd6, 0x72, 0x33, 0xd7, 0x49, |
| 1853 | 0x3a, 0xcd, 0x80, 0xf9, 0x06, 0x7d, 0xa8, 0x88, 0x5c, 0xe7, 0x41, 0x62, | 1848 | 0x5e, 0xc3, 0xb6, 0x23, 0xe4, 0x46, 0x4e, 0xcc, 0x49, 0x46, 0xb0, 0x22, |
| 1854 | 0x59, 0x31, 0x21, 0xb3, 0xcc, 0x08, 0x63, 0x21, 0x6d, 0x54, 0xde, 0xe1, | 1849 | 0x55, 0xdf, 0xd6, 0x20, 0x9b, 0x3d, 0xe6, 0xe4, 0x39, 0xa0, 0x2b, 0x29, |
| 1855 | 0x98, 0x46, 0x5e, 0x37, 0x9f, 0xf3, 0x51, 0x92, 0xf1, 0x00, 0xe4, 0x10, | 1850 | 0xef, 0x0e, 0xd0, 0x50, 0xc1, 0xdc, 0xe9, 0xaf, 0x0b, 0xef, 0x2b, 0xf8, |
| 1856 | 0x20, 0x3e, 0x61, 0x94, 0x20, 0x38, 0xea, 0xe7, 0x71, 0x31, 0x0f, 0x2a, | 1851 | 0xc4, 0x9f, 0xc1, 0x1d, 0xd7, 0x50, 0xa6, 0x14, 0xb9, 0xe3, 0x54, 0xe1, |
| 1857 | 0x22, 0xa3, 0xa2, 0x66, 0x94, 0x75, 0x87, 0x47, 0x6c, 0x5b, 0xfc, 0x07, | 1852 | 0x7d, 0x05, 0x37, 0xdb, 0xef, 0x2b, 0x70, 0x63, 0xc6, 0x84, 0xd3, 0xf9, |
| 1858 | 0xce, 0x7b, 0x82, 0xb6, 0x7e, 0x23, 0xb1, 0x7e, 0x62, 0x27, 0xd0, 0xfb, | 1853 | 0xa9, 0x94, 0x07, 0xb3, 0x27, 0x2e, 0x71, 0x50, 0x77, 0x49, 0xa4, 0x15, |
| 1859 | 0x70, 0xce, 0xb6, 0x53, 0x6c, 0xbf, 0x85, 0x98, 0xf7, 0x1e, 0x6d, 0xb6, | 1854 | 0x4f, 0x26, 0x14, 0xcc, 0x32, 0xfe, 0x27, 0xbe, 0x6f, 0xaf, 0x09, 0xd4, |
| 1860 | 0x87, 0xf3, 0xbd, 0x63, 0xd0, 0x08, 0xd6, 0xa9, 0x01, 0x6d, 0x9c, 0xf3, | 1855 | 0xda, 0x7b, 0xf6, 0x5d, 0x91, 0x28, 0x0e, 0x27, 0xf4, 0xb6, 0xc7, 0x78, |
| 1861 | 0xdc, 0x35, 0xa2, 0xa2, 0xaf, 0x7f, 0x31, 0x86, 0x99, 0x07, 0x75, 0x0f, | 1856 | 0x5e, 0x46, 0x3c, 0xad, 0xda, 0xa7, 0xe0, 0xa9, 0x80, 0x17, 0xa5, 0x47, |
| 1862 | 0x89, 0x8f, 0x48, 0x99, 0xc3, 0xe8, 0xa4, 0x8f, 0xfc, 0x6a, 0xa1, 0x82, | 1857 | 0x64, 0xaf, 0xbb, 0x65, 0x39, 0x17, 0xaf, 0xb2, 0x76, 0xac, 0x13, 0xfb, |
| 1863 | 0xd8, 0x17, 0xe4, 0x1d, 0x51, 0x27, 0xf3, 0xfd, 0xfb, 0xb0, 0x36, 0x71, | 1858 | 0xe6, 0x1c, 0x1e, 0x09, 0x54, 0x09, 0x06, 0x1e, 0x36, 0x65, 0xdd, 0xd2, |
| 1864 | 0xc4, 0x2a, 0x37, 0xf4, 0xde, 0x21, 0x95, 0x79, 0x16, 0x6d, 0xb3, 0x8b, | 1859 | 0x40, 0x5f, 0xa2, 0x96, 0xfc, 0xba, 0xbe, 0xb3, 0x15, 0xf5, 0xe6, 0xcf, |
| 1865 | 0xf9, 0xc9, 0x12, 0xe6, 0x27, 0xdd, 0x79, 0xbb, 0x3c, 0x4e, 0x3b, 0xec, | 1860 | 0x1c, 0xb5, 0x28, 0x39, 0x72, 0x87, 0x26, 0x6b, 0xf6, 0xdf, 0xe0, 0x9c, |
| 1866 | 0x63, 0x1c, 0x7b, 0x7d, 0x28, 0x17, 0xf7, 0x7e, 0xbc, 0xc3, 0x8f, 0xf9, | 1861 | 0xf5, 0x12, 0xbb, 0x7a, 0x52, 0xf9, 0xf8, 0xd9, 0x9a, 0xb1, 0xaa, 0x45, |
| 1867 | 0x97, 0x97, 0xe3, 0x99, 0x87, 0x73, 0xb2, 0xed, 0xa4, 0x4d, 0x3e, 0x4d, | 1862 | 0x2f, 0xbd, 0xe4, 0x27, 0x6a, 0xf2, 0xa2, 0x5d, 0xa6, 0x22, 0x92, 0x23, |
| 1868 | 0x3d, 0xdf, 0x4a, 0xbd, 0xbe, 0x92, 0x12, 0x8c, 0x0a, 0xe2, 0x59, 0xf2, | 1863 | 0xfe, 0xd4, 0xe1, 0x04, 0xf9, 0x82, 0xc4, 0xd2, 0x0a, 0x1e, 0x95, 0xe4, |
| 1869 | 0xe8, 0xf5, 0xe4, 0x02, 0x2f, 0xa5, 0x72, 0x36, 0xf9, 0xf5, 0xf1, 0x2b, | 1864 | 0x8d, 0x3f, 0x67, 0x2c, 0xbd, 0x27, 0x94, 0x0b, 0xca, 0x9b, 0x2c, 0x6a, |
| 1870 | 0xab, 0x72, 0xf1, 0xc1, 0x0b, 0xf5, 0x01, 0x79, 0x27, 0xcf, 0xb2, 0x96, | 1865 | 0xc8, 0xc5, 0xe9, 0x03, 0x38, 0x12, 0xd2, 0xdb, 0x37, 0x38, 0xa2, 0x4f, |
| 1871 | 0x98, 0xd9, 0x76, 0xf2, 0x1a, 0xb6, 0x1d, 0x21, 0x37, 0x72, 0x62, 0x66, | 1866 | 0x33, 0x07, 0x0b, 0x2f, 0x63, 0x4e, 0xbe, 0x2a, 0x90, 0xc1, 0x2e, 0xf2, |
| 1872 | 0x32, 0x82, 0xa5, 0xa9, 0xda, 0xe6, 0xb9, 0xb2, 0x89, 0x63, 0x66, 0x8e, | 1867 | 0xc0, 0x9d, 0xcc, 0xc5, 0x3b, 0x68, 0x9b, 0x9d, 0xfb, 0x19, 0xdb, 0x1c, |
| 1873 | 0x03, 0xba, 0x92, 0xf2, 0xcd, 0x0f, 0x0d, 0x65, 0xcc, 0x9d, 0xfe, 0x26, | 1868 | 0x97, 0x73, 0x71, 0x2d, 0x14, 0xdf, 0x40, 0x0e, 0xd0, 0xe5, 0x51, 0xc5, |
| 1874 | 0xff, 0x9d, 0x91, 0x1b, 0xff, 0x0c, 0xee, 0xb8, 0x82, 0x32, 0xa5, 0xc8, | 1869 | 0x5e, 0xc5, 0x77, 0x02, 0x1d, 0xaf, 0x12, 0xa3, 0x1b, 0x19, 0x37, 0xc4, |
| 1875 | 0x1d, 0x27, 0xf3, 0xdf, 0x19, 0xb9, 0xc1, 0xfe, 0xce, 0x88, 0x1b, 0xd3, | 1870 | 0xde, 0xf7, 0xa4, 0xf4, 0x4e, 0x2a, 0xa0, 0xa6, 0x92, 0xb9, 0xe3, 0xbd, |
| 1876 | 0xc6, 0x9d, 0xce, 0x2f, 0xa5, 0x3c, 0x98, 0x31, 0x7e, 0x96, 0x83, 0xba, | 1871 | 0xe3, 0xcd, 0xf4, 0x9b, 0xfc, 0x33, 0x73, 0xce, 0x25, 0x75, 0xcc, 0x39, |
| 1877 | 0x8b, 0x22, 0x4d, 0x78, 0x2a, 0xa1, 0x60, 0xba, 0xf1, 0xbf, 0xf1, 0xb2, | 1872 | 0xaf, 0x43, 0xef, 0x10, 0xed, 0x9f, 0xbe, 0x74, 0xff, 0x00, 0xc8, 0xcf, |
| 1878 | 0xbd, 0x26, 0x50, 0x8d, 0x99, 0x0f, 0xc8, 0x7a, 0x42, 0x54, 0xde, 0x89, | 1873 | 0xd4, 0x9d, 0x9c, 0xbf, 0xdc, 0x11, 0x04, 0x2e, 0xb6, 0xa3, 0xb1, 0xad, |
| 1879 | 0x69, 0x7e, 0x82, 0xe7, 0x25, 0xc4, 0xd3, 0x8a, 0x07, 0x14, 0x3c, 0x1d, | 1874 | 0xc4, 0x21, 0x32, 0xe8, 0xed, 0x6f, 0x90, 0xa7, 0x75, 0x31, 0x3f, 0xdd, |
| 1880 | 0xf0, 0xa2, 0x98, 0xbf, 0x7d, 0xe4, 0x9a, 0xce, 0x85, 0xcb, 0xad, 0xcd, | 1875 | 0xc2, 0x5c, 0x3e, 0xc6, 0x5c, 0x3e, 0xc6, 0x7a, 0xa9, 0x21, 0xb9, 0x4f, |
| 1881 | 0xab, 0xc4, 0xbe, 0x39, 0x87, 0xfb, 0xa6, 0x55, 0x0a, 0x06, 0xee, 0x35, | 1876 | 0x64, 0xb4, 0x9f, 0x61, 0xfe, 0xf3, 0x39, 0xf2, 0x9f, 0xa1, 0x07, 0x44, |
| 1882 | 0x65, 0xdd, 0xd2, 0x40, 0x4f, 0xa2, 0x9a, 0xfc, 0xba, 0xb6, 0xbd, 0x09, | 1877 | 0xae, 0x59, 0xb8, 0xf7, 0xf0, 0x75, 0x48, 0xd2, 0x9e, 0xee, 0xe1, 0xb5, |
| 1883 | 0xb5, 0xe6, 0x2f, 0x1c, 0xd5, 0x28, 0xda, 0x77, 0x63, 0x95, 0xac, 0xd9, | 1878 | 0x81, 0x07, 0xe6, 0xe3, 0x6e, 0xe6, 0xf1, 0xb1, 0xf1, 0x65, 0x18, 0x64, |
| 1884 | 0x7f, 0x9b, 0x73, 0xd6, 0x4d, 0xec, 0xea, 0x4a, 0xe5, 0xe2, 0x67, 0x53, | 1879 | 0x26, 0xba, 0xed, 0xf0, 0x47, 0xd0, 0x43, 0x3e, 0xb5, 0x9c, 0x18, 0xbd, |
| 1885 | 0xfa, 0x17, 0x9a, 0xe8, 0xa5, 0x9b, 0xfc, 0x44, 0x4d, 0x9e, 0xb2, 0xcb, | 1880 | 0xe1, 0x60, 0xc6, 0xc6, 0x6c, 0xc1, 0xfc, 0x1f, 0x67, 0x80, 0xd7, 0xc8, |
| 1886 | 0x94, 0x45, 0x0e, 0x11, 0x7f, 0x66, 0xe1, 0x10, 0xf3, 0x1a, 0x89, 0xa5, | 1881 | 0xc9, 0x06, 0x53, 0x27, 0x6c, 0x9e, 0xe6, 0x62, 0x7c, 0x28, 0x25, 0x2e, |
| 1887 | 0x65, 0x3c, 0xca, 0xc9, 0x1b, 0x7f, 0xc9, 0x58, 0x7a, 0x67, 0x28, 0x1b, | 1882 | 0x85, 0xf7, 0x1b, 0x5d, 0x2b, 0x55, 0x6b, 0x59, 0xd9, 0xe2, 0x40, 0xff, |
| 1888 | 0x94, 0x2f, 0xd0, 0x54, 0x91, 0x8b, 0xd3, 0x07, 0xb0, 0x2f, 0xa4, 0xb7, | 1883 | 0x1b, 0xf4, 0xd5, 0x9a, 0x23, 0x2a, 0x6a, 0x87, 0x25, 0x57, 0x27, 0x3f, |
| 1889 | 0xac, 0x76, 0x44, 0x9f, 0x61, 0x0e, 0x16, 0x5e, 0xcc, 0x9c, 0x7c, 0x79, | 1884 | 0x22, 0x46, 0x3f, 0x47, 0x8c, 0xae, 0x3c, 0x94, 0xcf, 0xcb, 0x13, 0xcc, |
| 1890 | 0x60, 0x04, 0x5b, 0xc9, 0x03, 0xb7, 0x30, 0x17, 0x6f, 0xa5, 0x6d, 0xb6, | 1885 | 0xbb, 0x6a, 0x8d, 0x7c, 0x6e, 0xbe, 0x67, 0x40, 0xf6, 0xe8, 0xb8, 0xf1, |
| 1891 | 0xef, 0x62, 0x6c, 0x73, 0x9c, 0xcb, 0xc5, 0xb5, 0x50, 0x7c, 0x35, 0x39, | 1886 | 0x1d, 0xda, 0xfe, 0xa9, 0x82, 0xed, 0x9f, 0x2e, 0x60, 0xb0, 0xc5, 0xdc, |
| 1892 | 0x40, 0x87, 0x47, 0x15, 0x7b, 0x15, 0xdf, 0x09, 0xb4, 0xbe, 0x41, 0x8c, | 1887 | 0xfc, 0x35, 0x1b, 0x7f, 0xf3, 0xb9, 0xf9, 0xc2, 0x61, 0xa3, 0x2b, 0x4c, |
| 1893 | 0xae, 0x63, 0xdc, 0x10, 0x7b, 0xdf, 0x9e, 0xd2, 0xdb, 0xa9, 0x80, 0xaa, | 1888 | 0x8c, 0xbe, 0xfa, 0x90, 0xf4, 0xaf, 0xa1, 0x96, 0x78, 0x32, 0x93, 0x58, |
| 1894 | 0x72, 0xe6, 0x8e, 0x77, 0x8d, 0x35, 0xd0, 0x6f, 0xac, 0x4e, 0x37, 0xed, | 1889 | 0x52, 0x35, 0x2c, 0xeb, 0x33, 0x81, 0xce, 0x09, 0xd5, 0x67, 0xf7, 0xb1, |
| 1895 | 0xda, 0xb9, 0x68, 0x16, 0x73, 0xce, 0xab, 0xd0, 0xbd, 0x83, 0xf6, 0x4f, | 1890 | 0x9d, 0xb2, 0xf5, 0xd2, 0x07, 0xbe, 0x9a, 0x30, 0xb4, 0xad, 0x4a, 0xc0, |
| 1896 | 0x5f, 0xba, 0xb7, 0x0f, 0xe4, 0x67, 0xea, 0x16, 0xce, 0x5f, 0x76, 0x1f, | 1891 | 0x5c, 0x4d, 0x7d, 0x1e, 0xc9, 0x5c, 0x87, 0xce, 0xc1, 0x3a, 0x1c, 0x4b, |
| 1897 | 0x02, 0x67, 0x5a, 0x50, 0xd7, 0x5c, 0xe4, 0x10, 0x19, 0xf4, 0x96, 0xb7, | 1892 | 0x4b, 0x7c, 0x91, 0xf6, 0x25, 0x17, 0x77, 0xe2, 0x9d, 0xfd, 0x73, 0xf1, |
| 1898 | 0xc9, 0xd3, 0x3a, 0x98, 0x9f, 0xae, 0x67, 0x2e, 0x1f, 0x63, 0x2e, 0x1f, | 1893 | 0xce, 0xd8, 0xe5, 0x3c, 0x7c, 0x47, 0x2a, 0x7a, 0x3f, 0xc3, 0xeb, 0x2a, |
| 1899 | 0x63, 0xbd, 0xd4, 0x0e, 0x79, 0x4e, 0x64, 0xb4, 0x1c, 0x67, 0xfe, 0xf3, | 1894 | 0xc9, 0xc3, 0xbf, 0xc7, 0x3c, 0xfc, 0x0d, 0x45, 0xd6, 0x10, 0x55, 0x7c, |
| 1900 | 0x35, 0xf2, 0x9f, 0x1d, 0xf7, 0x8b, 0x5c, 0xd3, 0x71, 0xd7, 0xde, 0xab, | 1895 | 0x62, 0x91, 0x83, 0xf1, 0x45, 0xf7, 0x7f, 0xd7, 0x11, 0x97, 0xfb, 0xc8, |
| 1901 | 0x90, 0xa4, 0x3d, 0xdd, 0xc9, 0x6b, 0x7d, 0xf7, 0x5f, 0x8c, 0x3b, 0x98, | 1896 | 0xfe, 0x07, 0xf8, 0xff, 0xb3, 0x8c, 0xe7, 0xc3, 0x9c, 0x89, 0x68, 0xad, |
| 1902 | 0xc7, 0xc7, 0xc6, 0x16, 0xa3, 0x9f, 0x99, 0xe8, 0xc6, 0xbd, 0x9f, 0x45, | 1897 | 0x03, 0x4f, 0x2f, 0x8e, 0x47, 0x65, 0x9d, 0xb4, 0x9f, 0x3c, 0x65, 0x0e, |
| 1903 | 0x17, 0xf9, 0xd4, 0x12, 0x62, 0xf4, 0xea, 0x87, 0x47, 0x6c, 0xcc, 0x16, | 1898 | 0xe3, 0xe1, 0xdf, 0xa7, 0xea, 0xc3, 0x0b, 0x1d, 0x0e, 0x5c, 0x34, 0xf5, |
| 1904 | 0xcc, 0x7f, 0x2d, 0x0d, 0xbc, 0x49, 0x4e, 0xd6, 0x9f, 0x3a, 0x60, 0xf3, | 1899 | 0xf6, 0x03, 0xbc, 0xf6, 0x4c, 0x56, 0x7c, 0x31, 0x4c, 0xfc, 0x5a, 0x59, |
| 1905 | 0x34, 0x17, 0xe3, 0x43, 0x31, 0x71, 0x29, 0xbc, 0xcb, 0xe8, 0x58, 0xa6, | 1900 | 0xf0, 0xc5, 0x5a, 0x94, 0xd3, 0xce, 0xe7, 0xd2, 0x5e, 0x7f, 0x9c, 0xd2, |
| 1906 | 0x5a, 0x8b, 0x4b, 0x16, 0x06, 0x7a, 0xdf, 0xa6, 0xaf, 0x56, 0xed, 0x53, | 1901 | 0x07, 0x9f, 0xa1, 0x9d, 0xd6, 0x5e, 0xb2, 0x53, 0x59, 0xa3, 0x95, 0xbc, |
| 1907 | 0x51, 0x3d, 0x20, 0xb9, 0x3a, 0xf9, 0x11, 0x31, 0xfa, 0x05, 0x62, 0x74, | 1902 | 0xa6, 0x9d, 0x79, 0xcd, 0xf4, 0xe7, 0xa5, 0x8f, 0xa3, 0x2f, 0x7b, 0x1f, |
| 1908 | 0xf9, 0x9e, 0x5c, 0x5e, 0x9e, 0x60, 0xde, 0x55, 0x6d, 0xe4, 0x72, 0xf3, | 1903 | 0xee, 0xdd, 0xab, 0x77, 0x39, 0x1d, 0x71, 0x4b, 0x33, 0xba, 0x99, 0xa3, |
| 1909 | 0xed, 0x7d, 0xb2, 0xf7, 0xc6, 0x8d, 0xe7, 0x68, 0xfb, 0x47, 0xf3, 0xb6, | 1904 | 0x75, 0x23, 0xb0, 0xc8, 0xe8, 0xb8, 0xa0, 0xe8, 0x9d, 0x3f, 0x54, 0xca, |
| 1910 | 0x7f, 0x2c, 0x8f, 0xc1, 0x16, 0x73, 0xf3, 0x37, 0x6d, 0xfc, 0xcd, 0xe5, | 1905 | 0x99, 0xf3, 0x9d, 0xc1, 0xf6, 0x51, 0x3d, 0x98, 0x51, 0x0c, 0xdc, 0x40, |
| 1911 | 0xe6, 0xf3, 0x07, 0x8c, 0x8e, 0x30, 0x31, 0xfa, 0x33, 0x7b, 0xa4, 0x7f, | 1906 | 0x8c, 0x7b, 0x78, 0xa4, 0x84, 0x76, 0xb8, 0x1e, 0x47, 0x06, 0xf5, 0x70, |
| 1912 | 0x0d, 0xd5, 0xc4, 0x93, 0x1a, 0x62, 0x49, 0xc5, 0x80, 0xac, 0xcf, 0x04, | 1907 | 0x1c, 0x26, 0x31, 0xb4, 0xde, 0x5f, 0xa6, 0x5c, 0xc0, 0x69, 0xf3, 0x2c, |
| 1913 | 0xda, 0xc7, 0x55, 0x9f, 0xdd, 0xc7, 0x26, 0xca, 0xd6, 0x9d, 0x92, 0x77, | 1908 | 0xb6, 0x67, 0xe7, 0x60, 0xbd, 0x26, 0x7b, 0x9a, 0xd6, 0x63, 0x62, 0xf0, |
| 1914 | 0x6c, 0x0d, 0x6d, 0x83, 0x12, 0x30, 0xaf, 0xa1, 0x3e, 0xf7, 0xa5, 0xaf, | 1909 | 0x02, 0x71, 0xa8, 0x9d, 0xdc, 0x4a, 0xf2, 0x06, 0x0b, 0x7b, 0x42, 0x57, |
| 1915 | 0x42, 0x7b, 0xff, 0x2c, 0xec, 0x1f, 0x92, 0xf8, 0x22, 0xed, 0x4b, 0x2e, | 1910 | 0x63, 0x8b, 0xed, 0xbf, 0xa5, 0xf2, 0x4e, 0x0b, 0xcf, 0x3c, 0xc3, 0x20, |
| 1916 | 0xee, 0xc4, 0xfb, 0xbb, 0x66, 0xe3, 0xfd, 0x91, 0x73, 0x79, 0xf8, 0xe6, | 1911 | 0x4e, 0x48, 0x6e, 0xee, 0x9b, 0xb6, 0x3f, 0x57, 0xd6, 0x75, 0x1b, 0xab, |
| 1917 | 0x54, 0xf4, 0x5e, 0x86, 0xd7, 0xe5, 0x92, 0x87, 0xbf, 0xc4, 0x3c, 0xfc, | 1912 | 0xf2, 0xf7, 0x95, 0xff, 0x58, 0x99, 0x29, 0x1c, 0x1a, 0x91, 0xf5, 0x85, |
| 1918 | 0x6d, 0x45, 0xd6, 0x10, 0x55, 0xdc, 0xb8, 0xc0, 0xc1, 0xf8, 0xa2, 0xfb, | 1913 | 0x19, 0xca, 0xe3, 0x83, 0x0d, 0xbe, 0x1e, 0xc6, 0x8f, 0xfb, 0xcd, 0x1c, |
| 1919 | 0x5f, 0x74, 0xc4, 0xe5, 0x39, 0xb2, 0xff, 0x7e, 0xde, 0x7f, 0x9e, 0xf1, | 1914 | 0x5e, 0x5f, 0x5c, 0x86, 0x29, 0xaf, 0x82, 0xd0, 0xd5, 0x61, 0xe9, 0x83, |
| 1920 | 0x7c, 0x80, 0x33, 0x11, 0xad, 0x76, 0xe0, 0x99, 0x85, 0xf1, 0xa8, 0x8b, | 1915 | 0x9f, 0x73, 0x96, 0xff, 0x93, 0xd2, 0xce, 0x82, 0xc2, 0x9a, 0xc3, 0x3b, |
| 1921 | 0xd7, 0x7b, 0xc9, 0x53, 0x66, 0x1a, 0x07, 0xe9, 0x9b, 0xb5, 0xe1, 0xf9, | 1916 | 0x35, 0x8c, 0x55, 0x3c, 0x97, 0xe7, 0x03, 0xe5, 0xbc, 0x78, 0xfd, 0x47, |
| 1922 | 0x0e, 0x07, 0xce, 0x98, 0x7a, 0xcb, 0x6e, 0x5e, 0x7b, 0x36, 0x23, 0xbe, | 1917 | 0x56, 0xd4, 0x2b, 0xd7, 0x89, 0xd9, 0xb3, 0xc4, 0x7f, 0x67, 0x28, 0x77, |
| 1923 | 0x18, 0x26, 0x7e, 0x2d, 0xca, 0xfb, 0xa2, 0xbc, 0x8f, 0x01, 0xf7, 0x6c, | 1918 | 0x12, 0x6f, 0xe7, 0x87, 0x66, 0x28, 0xeb, 0xd3, 0xc5, 0x3a, 0x2f, 0x22, |
| 1924 | 0xda, 0xeb, 0x6b, 0x29, 0xbd, 0xff, 0x59, 0xda, 0x69, 0xf5, 0x59, 0x3b, | 1919 | 0x3b, 0xf2, 0x22, 0xe7, 0x53, 0x0f, 0x4e, 0xc1, 0x55, 0x78, 0x56, 0x5e, |
| 1925 | 0x2d, 0xec, 0xd3, 0x82, 0xbb, 0x2a, 0xd2, 0x82, 0x50, 0xb2, 0xb0, 0x5f, | 1920 | 0xf6, 0x81, 0xb9, 0xc8, 0x43, 0x65, 0x2d, 0xfe, 0x1c, 0x86, 0xf6, 0x0b, |
| 1926 | 0x6b, 0x3f, 0x7a, 0x32, 0xf7, 0x60, 0xe3, 0x4e, 0x7d, 0xa3, 0xac, 0x11, | 1921 | 0x6f, 0xb4, 0xac, 0x40, 0xc3, 0x39, 0x6c, 0x3f, 0x7a, 0x42, 0xe9, 0x48, |
| 1927 | 0xbd, 0x10, 0x8a, 0x5b, 0x95, 0x46, 0x27, 0x5c, 0x0b, 0x8c, 0x16, 0xe6, | 1922 | 0xbd, 0x6b, 0xa1, 0x74, 0x46, 0x6c, 0x8e, 0xbd, 0xdf, 0x59, 0xda, 0xe8, |
| 1928 | 0x2f, 0xb1, 0xef, 0x2a, 0xa5, 0xb4, 0xdf, 0xc3, 0xd8, 0x34, 0xac, 0x07, | 1923 | 0x53, 0xda, 0xb3, 0x81, 0xf0, 0xfd, 0x0c, 0xbe, 0x5a, 0x44, 0x9e, 0x63, |
| 1929 | 0xb7, 0x2b, 0x06, 0xe3, 0x86, 0x86, 0xfd, 0x83, 0x45, 0xb8, 0x75, 0x57, | 1924 | 0x97, 0xb1, 0x9d, 0xe0, 0x35, 0xc3, 0x7e, 0x66, 0xe8, 0xb8, 0x3d, 0xce, |
| 1930 | 0x1b, 0xf6, 0xf5, 0x9b, 0xc4, 0xcf, 0x5a, 0xff, 0x69, 0xbc, 0x87, 0x63, | 1925 | 0xf7, 0xeb, 0xe1, 0x9b, 0x56, 0xb4, 0x5d, 0xea, 0x16, 0xe5, 0x9a, 0xcf, |
| 1931 | 0xa6, 0xbc, 0xaf, 0x54, 0x82, 0x36, 0x4d, 0xf6, 0x29, 0x31, 0xfb, 0x9c, | 1926 | 0x89, 0x16, 0xd9, 0x8a, 0xff, 0x8f, 0x17, 0x64, 0x2f, 0x25, 0x77, 0xce, |
| 1932 | 0x7e, 0xde, 0x3b, 0xe0, 0x9e, 0x12, 0xa3, 0xf0, 0x2e, 0xbf, 0xc1, 0x7c, | 1927 | 0x97, 0xe9, 0xa4, 0xec, 0x25, 0xa1, 0x28, 0x4e, 0x35, 0x4f, 0x97, 0xbf, |
| 1933 | 0x71, 0x12, 0x7b, 0x06, 0x65, 0x6d, 0x60, 0x9a, 0x72, 0xa4, 0x7f, 0xae, | 1928 | 0x38, 0xd6, 0x83, 0xef, 0x69, 0x2f, 0x5f, 0xf6, 0xe3, 0xb5, 0xb2, 0x4f, |
| 1934 | 0xaf, 0x8b, 0xd8, 0x7f, 0xaf, 0x99, 0xc5, 0x99, 0x85, 0xd5, 0xc0, 0x0c, | 1929 | 0xea, 0x54, 0xf3, 0x24, 0xfe, 0xce, 0x5e, 0xd7, 0x78, 0xd3, 0xde, 0xdf, |
| 1935 | 0x05, 0xa1, 0xcf, 0x04, 0xe4, 0x5b, 0x35, 0xfc, 0x7b, 0xd7, 0xf2, 0x7f, | 1930 | 0xb9, 0xcb, 0x6c, 0x89, 0x96, 0xe1, 0xa3, 0x50, 0xaf, 0x8a, 0x2f, 0x2c, |
| 1936 | 0x51, 0xda, 0xa9, 0xa9, 0xc8, 0xad, 0x17, 0xbc, 0x5e, 0x2d, 0xef, 0xf2, | 1931 | 0xb3, 0xf9, 0x76, 0xb4, 0xbd, 0x8c, 0x39, 0xb7, 0xdb, 0x88, 0xde, 0xef, |
| 1937 | 0x1d, 0x49, 0xcd, 0xac, 0xcc, 0x3d, 0x77, 0xfe, 0xa4, 0x3e, 0x5e, 0xb3, | 1932 | 0x46, 0x2e, 0x47, 0x9e, 0xd0, 0x71, 0x51, 0x39, 0xa6, 0xdc, 0x11, 0xd0, |
| 1938 | 0xfc, 0x76, 0x1b, 0x85, 0xba, 0xaf, 0x5a, 0x51, 0xaf, 0x94, 0x2f, 0x62, | 1933 | 0xb7, 0xbd, 0x4d, 0xfe, 0xf3, 0x6c, 0x20, 0xce, 0x39, 0x37, 0x7c, 0x03, |
| 1939 | 0xdb, 0xe2, 0x9f, 0xd3, 0x94, 0x76, 0xe2, 0xa9, 0x1a, 0x9a, 0xa6, 0xb4, | 1934 | 0x8a, 0x6e, 0x6e, 0x62, 0x8c, 0x7d, 0x86, 0x39, 0xed, 0xc6, 0x40, 0xbf, |
| 1940 | 0x0d, 0x5d, 0xd8, 0xee, 0x8b, 0x56, 0xb4, 0x45, 0xce, 0x0b, 0xe5, 0xdc, | 1935 | 0x7d, 0xcf, 0x53, 0x89, 0xac, 0xc1, 0x95, 0xf6, 0xfb, 0x26, 0xda, 0x61, |
| 1941 | 0xd3, 0x50, 0x2a, 0x65, 0x0b, 0xf7, 0x9f, 0xc9, 0xb7, 0x55, 0x4c, 0xae, | 1936 | 0x64, 0x5e, 0x94, 0x35, 0x38, 0xfe, 0x8e, 0x61, 0xa1, 0x7d, 0x6d, 0x23, |
| 1942 | 0x9a, 0x2b, 0x73, 0x6b, 0xbf, 0xec, 0xad, 0x8a, 0xe2, 0x68, 0xc3, 0xd4, | 1937 | 0x82, 0xf6, 0xf7, 0xba, 0xc2, 0x3b, 0x29, 0x3a, 0x50, 0x6f, 0x7f, 0x7f, |
| 1943 | 0xf6, 0x0a, 0x7d, 0x7f, 0xef, 0xbc, 0xf6, 0x72, 0x65, 0x67, 0xb1, 0x4d, | 1938 | 0x1a, 0x0d, 0x99, 0x4b, 0x6b, 0xd5, 0xe8, 0x35, 0x2d, 0xeb, 0x49, 0x53, |
| 1944 | 0x29, 0x9f, 0xc5, 0xff, 0x6b, 0xaf, 0x23, 0xbc, 0x61, 0xef, 0x93, 0xdc, | 1939 | 0x9e, 0x57, 0xbb, 0xb4, 0xb7, 0x7c, 0x8d, 0x83, 0x39, 0x10, 0x21, 0x25, |
| 1945 | 0x6a, 0x36, 0x46, 0x4b, 0xf0, 0x39, 0xa8, 0x97, 0xc6, 0xe7, 0x97, 0xd8, | 1940 | 0x96, 0x7f, 0x27, 0xcf, 0xe5, 0xe7, 0xc5, 0x56, 0xbc, 0x67, 0x6f, 0xb9, |
| 1946 | 0xfc, 0x36, 0xda, 0x52, 0xc2, 0x1c, 0xd7, 0x6d, 0x44, 0xef, 0x75, 0x23, | 1941 | 0xfd, 0xac, 0x93, 0xfd, 0xce, 0xa5, 0x05, 0x4b, 0x9c, 0xf8, 0x4e, 0xa2, |
| 1947 | 0x9b, 0x65, 0x5c, 0x6e, 0x3d, 0xa3, 0xec, 0x57, 0x6e, 0x0d, 0xe8, 0x1b, | 1942 | 0x2a, 0xe6, 0xe1, 0xef, 0xed, 0x4b, 0x4a, 0xb0, 0x25, 0x44, 0x0e, 0x7a, |
| 1948 | 0xdf, 0x25, 0xdf, 0x78, 0x3e, 0x10, 0x27, 0xd6, 0x1b, 0xbe, 0x3e, 0x45, | 1943 | 0xd5, 0x19, 0x9c, 0xcf, 0x38, 0x71, 0x26, 0x11, 0x0f, 0x8d, 0xb1, 0xbf, |
| 1949 | 0x37, 0xd7, 0x32, 0xa6, 0x3d, 0xcb, 0x1c, 0x72, 0x4d, 0xa0, 0xd7, 0x7e, | 1944 | 0x53, 0x09, 0x15, 0xa7, 0x47, 0xfa, 0x42, 0x87, 0xec, 0xbe, 0x5f, 0x45, |
| 1950 | 0xc6, 0xa8, 0x44, 0x56, 0xe0, 0x12, 0xfb, 0xbb, 0x2c, 0x2d, 0x30, 0xd2, | 1945 | 0xef, 0x51, 0xb9, 0x0f, 0xd9, 0x8e, 0x0d, 0x89, 0xf3, 0x8c, 0xbb, 0xd2, |
| 1951 | 0xcf, 0xcb, 0x9a, 0x17, 0x7f, 0xc7, 0x30, 0xdf, 0xbe, 0xb6, 0x06, 0x41, | 1946 | 0x96, 0xac, 0x05, 0xe8, 0xb9, 0x8d, 0xcc, 0x9f, 0x55, 0x47, 0x10, 0xb7, |
| 1952 | 0xfb, 0xff, 0xaa, 0xfc, 0xb7, 0x5b, 0x5a, 0x51, 0x6b, 0xff, 0xbf, 0x19, | 1947 | 0x30, 0xde, 0x3d, 0x97, 0xe8, 0x86, 0x6b, 0xb1, 0xde, 0xf5, 0x2d, 0x72, |
| 1953 | 0x73, 0xd3, 0x67, 0xd7, 0x86, 0xd1, 0x6d, 0x5a, 0xd6, 0x53, 0xa6, 0x85, | 1948 | 0x96, 0xaa, 0x88, 0x1e, 0x7c, 0x4b, 0xe9, 0x20, 0x37, 0x74, 0x63, 0x32, |
| 1954 | 0x37, 0xce, 0xed, 0xd1, 0x5e, 0xe1, 0x60, 0xce, 0x41, 0x17, 0x8e, 0xe5, | 1949 | 0x21, 0x7e, 0x21, 0xef, 0xac, 0xf9, 0x34, 0x8e, 0x91, 0x23, 0x3f, 0x9b, |
| 1955 | 0xbe, 0x5d, 0x75, 0xee, 0xfd, 0x8c, 0xa5, 0xe7, 0xed, 0xd1, 0x96, 0xf7, | 1950 | 0xd0, 0x70, 0xbe, 0xd9, 0x83, 0x0c, 0x39, 0xf3, 0x77, 0x12, 0x6e, 0x7c, |
| 1956 | 0xe2, 0xab, 0xed, 0x6f, 0x93, 0xcd, 0x5b, 0xe4, 0xc4, 0x73, 0x89, 0x8a, | 1951 | 0x95, 0x9c, 0xf9, 0x91, 0x11, 0x59, 0xb3, 0x6c, 0x45, 0x4b, 0x42, 0xd6, |
| 1957 | 0x98, 0x87, 0xbf, 0x37, 0x2d, 0x2a, 0xc2, 0xfa, 0x10, 0x39, 0xdf, 0xa5, | 1952 | 0xab, 0xc9, 0x03, 0xc7, 0xbc, 0xb4, 0x6d, 0xcb, 0xea, 0x35, 0x67, 0xd3, |
| 1958 | 0xc7, 0x71, 0xda, 0xfe, 0x46, 0x43, 0x3c, 0x24, 0xdf, 0x66, 0x38, 0x9a, | 1953 | 0x9f, 0xce, 0xb2, 0x4f, 0x59, 0xe7, 0x8c, 0x62, 0x35, 0x79, 0xd0, 0x23, |
| 1959 | 0x50, 0x71, 0x6c, 0xb0, 0x27, 0xb4, 0xc7, 0xee, 0xfb, 0x55, 0x74, 0x8f, | 1954 | 0x63, 0x3e, 0x3c, 0xcf, 0x5c, 0x21, 0xc9, 0x7a, 0xcf, 0x25, 0xfc, 0x18, |
| 1960 | 0xca, 0x73, 0xbf, 0x16, 0xac, 0x4e, 0x4c, 0xda, 0x7b, 0xda, 0x36, 0xa7, | 1955 | 0xc8, 0xf8, 0xf0, 0x14, 0x73, 0x86, 0x9d, 0x3c, 0x97, 0xf7, 0x1f, 0x95, |
| 1961 | 0x24, 0xf7, 0xd6, 0xb3, 0x6b, 0x98, 0xaf, 0xaa, 0x8e, 0x20, 0x6e, 0x62, | 1956 | 0x18, 0x41, 0xf2, 0xf2, 0x93, 0xa8, 0x18, 0xb8, 0x02, 0x9b, 0xd7, 0x3e, |
| 1962 | 0x7c, 0x79, 0x21, 0x41, 0x3b, 0x5d, 0xa8, 0x77, 0x7c, 0x97, 0x1c, 0xa1, | 1957 | 0x0a, 0x75, 0xe0, 0x04, 0x8f, 0x6b, 0xc9, 0x21, 0xae, 0x45, 0x6a, 0x24, |
| 1963 | 0x22, 0xa2, 0x07, 0xdf, 0x51, 0x5a, 0xc9, 0xc5, 0xdc, 0x98, 0x48, 0x88, | 1958 | 0x82, 0xd4, 0xd8, 0x8b, 0xe8, 0x1f, 0x91, 0x71, 0xc9, 0x7b, 0x6c, 0x64, |
| 1964 | 0x2d, 0xca, 0xb7, 0x9d, 0x6e, 0xc6, 0x7e, 0x72, 0xd2, 0xe7, 0x13, 0x1a, | 1959 | 0x0f, 0x12, 0xb9, 0xe7, 0x80, 0x17, 0xe9, 0x31, 0xe9, 0xa7, 0x96, 0x7d, |
| 1965 | 0x4e, 0x37, 0x78, 0x90, 0x26, 0x47, 0x7d, 0x2e, 0xe1, 0xc6, 0x63, 0xe4, | 1960 | 0xff, 0xb9, 0xed, 0xff, 0xab, 0xb5, 0xf9, 0x13, 0xd2, 0xf6, 0xa3, 0x7f, |
| 1966 | 0xa8, 0x8f, 0x0e, 0xca, 0x1a, 0x61, 0x13, 0x1a, 0x13, 0xb2, 0x3e, 0x4c, | 1961 | 0xa4, 0x7d, 0xd1, 0x95, 0xac, 0xbd, 0xb4, 0x17, 0xd6, 0x5e, 0xdc, 0x6c, |
| 1967 | 0xde, 0x35, 0xe2, 0xa5, 0x3d, 0x5a, 0x56, 0x37, 0x6d, 0xb7, 0x4d, 0x9b, | 1962 | 0xd3, 0x03, 0x47, 0x24, 0xb7, 0xb6, 0x12, 0x7a, 0x74, 0xb7, 0x62, 0xb4, |
| 1968 | 0x60, 0x9f, 0xb2, 0xae, 0x18, 0xc5, 0x35, 0xe4, 0x1d, 0x8f, 0x8e, 0xf8, | 1963 | 0x55, 0x28, 0xe7, 0xb1, 0x3b, 0x2b, 0xef, 0x45, 0x28, 0xc5, 0x53, 0xc4, |
| 1969 | 0xf0, 0x7d, 0x72, 0xf3, 0x24, 0xeb, 0xbd, 0x90, 0xf0, 0xa3, 0x2f, 0xed, | 1964 | 0x6b, 0x57, 0x48, 0xd7, 0xbe, 0x45, 0xdb, 0x59, 0x4e, 0x8c, 0x7b, 0xd5, |
| 1970 | 0xc3, 0xd3, 0xe4, 0xe8, 0x5b, 0x78, 0x2e, 0xdf, 0x09, 0x2b, 0x32, 0x82, | 1965 | 0xbc, 0x1a, 0x71, 0x4d, 0xf4, 0x57, 0x8a, 0x17, 0x06, 0xdd, 0xc4, 0xa6, |
| 1971 | 0xe4, 0xc1, 0x87, 0x51, 0xd6, 0x77, 0x11, 0xd6, 0xad, 0x3c, 0x08, 0xb5, | 1966 | 0x08, 0xf2, 0xcf, 0xc8, 0x79, 0xf0, 0x83, 0x84, 0x97, 0xf3, 0xd5, 0x98, |
| 1972 | 0xef, 0x10, 0x8f, 0x2b, 0x19, 0xb3, 0xaf, 0x44, 0x6a, 0x30, 0x82, 0xd4, | 1967 | 0x33, 0x1c, 0x0d, 0xf2, 0x0c, 0x9e, 0x7d, 0xed, 0x54, 0x62, 0x23, 0x0e, |
| 1973 | 0xc8, 0x8f, 0xd0, 0x3b, 0x28, 0xe3, 0x92, 0xef, 0x3d, 0xc9, 0xbe, 0x27, | 1968 | 0x51, 0xde, 0xe7, 0x12, 0x17, 0x39, 0x3f, 0x9d, 0xd4, 0xbf, 0xe8, 0x3b, |
| 1974 | 0x72, 0xbd, 0x3e, 0x2f, 0x86, 0x46, 0xa4, 0x9f, 0x6a, 0xf6, 0xfd, 0xe7, | 1969 | 0x5e, 0xd0, 0x75, 0x1f, 0x75, 0x5d, 0x87, 0x67, 0x12, 0x5f, 0xc4, 0x23, |
| 1975 | 0xb6, 0xff, 0x1f, 0xd6, 0xba, 0x1b, 0xa5, 0xed, 0x83, 0x9f, 0xd0, 0xbe, | 1970 | 0x94, 0xff, 0xe1, 0x41, 0x23, 0x3a, 0x5f, 0x39, 0x49, 0xfc, 0x2e, 0xc5, |
| 1976 | 0xe8, 0xaa, 0xf0, 0x9e, 0xa1, 0xac, 0x75, 0xb8, 0xd9, 0xa6, 0x07, 0x8e, | 1971 | 0x69, 0xb6, 0x7d, 0x07, 0x33, 0xf7, 0x29, 0xe9, 0x2b, 0x25, 0xeb, 0xa5, |
| 1977 | 0x48, 0x76, 0x65, 0x39, 0xf4, 0xe8, 0x36, 0xc5, 0x68, 0x2e, 0x53, 0x26, | 1972 | 0x0a, 0xde, 0x5a, 0x72, 0x12, 0x13, 0xfc, 0xef, 0x07, 0x83, 0xf2, 0x1c, |
| 1978 | 0xb1, 0x2d, 0x23, 0xef, 0x8d, 0x15, 0xe3, 0x69, 0xe2, 0xa3, 0x2b, 0xa4, | 1973 | 0x5a, 0x35, 0xfb, 0x10, 0xfd, 0xf8, 0xed, 0xdc, 0xa4, 0x87, 0xbc, 0x6b, |
| 1979 | 0x6b, 0xdf, 0xa5, 0xed, 0x2c, 0x21, 0xa6, 0xbc, 0x61, 0x7e, 0x06, 0x71, | 1974 | 0x55, 0xf3, 0x49, 0xec, 0x4a, 0xcb, 0xb5, 0xf5, 0xe8, 0x1f, 0xbc, 0x00, |
| 1980 | 0x4d, 0xf4, 0x57, 0x8c, 0x1f, 0xf4, 0xbb, 0xf1, 0x4e, 0x28, 0x82, 0xdc, | 1975 | 0x47, 0xa8, 0x04, 0x77, 0x78, 0x9b, 0x69, 0xeb, 0x39, 0xec, 0xce, 0x34, |
| 1981 | 0xb7, 0xbd, 0x3c, 0xf8, 0x71, 0xc2, 0xcb, 0xf9, 0xaa, 0xcb, 0x1a, 0x8e, | 1976 | 0xcf, 0xc8, 0x73, 0xe2, 0xaa, 0x19, 0xf2, 0x4c, 0xd6, 0xa9, 0x44, 0x29, |
| 1982 | 0xb9, 0xc0, 0xb4, 0xdc, 0xb5, 0xa3, 0x89, 0x35, 0xd8, 0x43, 0x79, 0x5f, | 1977 | 0xbe, 0xc3, 0x3a, 0x9b, 0x89, 0x15, 0xf9, 0x7b, 0x38, 0xe4, 0xfe, 0xc4, |
| 1983 | 0x48, 0x9c, 0xe1, 0xfc, 0xb4, 0x53, 0xff, 0xa2, 0xef, 0x78, 0x5e, 0xd7, | 1978 | 0xfa, 0x0c, 0xfb, 0x48, 0xd8, 0x6d, 0xcc, 0x50, 0x0e, 0xd0, 0x0f, 0xab, |
| 1984 | 0x3d, 0xd4, 0xf5, 0x2c, 0x3c, 0x9b, 0xb8, 0x0f, 0x8f, 0x52, 0xfe, 0x47, | 1979 | 0x17, 0xcf, 0x50, 0x52, 0x69, 0xc9, 0x35, 0x5e, 0xc4, 0x13, 0x0f, 0xe4, |
| 1985 | 0xfa, 0x8d, 0xe8, 0xc5, 0xca, 0x61, 0xe2, 0x65, 0x31, 0x8e, 0xb1, 0xed, | 1980 | 0x75, 0x78, 0xc8, 0xdc, 0x88, 0x74, 0xa6, 0xba, 0xd0, 0xde, 0x4b, 0x85, |
| 1986 | 0x5b, 0x99, 0x29, 0x4f, 0x4a, 0x5f, 0x29, 0x59, 0x9f, 0x54, 0xf0, 0xce, | 1981 | 0x7b, 0x6d, 0xf2, 0x3c, 0x88, 0x51, 0x78, 0x17, 0xc0, 0xe5, 0x7b, 0x6c, |
| 1987 | 0xa2, 0xc3, 0x18, 0xe7, 0xbd, 0x1f, 0xf3, 0x77, 0x78, 0x61, 0x25, 0xfb, | 1982 | 0xdf, 0xc8, 0x56, 0x91, 0xcf, 0x97, 0xd3, 0xd6, 0x4a, 0x62, 0x5e, 0xc6, |
| 1988 | 0x10, 0xfd, 0xf8, 0xed, 0x5c, 0xa0, 0x8b, 0x3c, 0x67, 0x79, 0xc3, 0x61, | 1983 | 0xf9, 0x8d, 0x8b, 0x34, 0xec, 0x5d, 0xfa, 0xd9, 0x5a, 0x54, 0x69, 0xce, |
| 1989 | 0x6c, 0x1d, 0x92, 0x6b, 0x6d, 0xe8, 0xed, 0x7f, 0x0f, 0x8e, 0x10, 0x71, | 1984 | 0x5f, 0x35, 0xbf, 0xc8, 0x7e, 0xaa, 0x62, 0x35, 0x91, 0x47, 0xec, 0x7d, |
| 1990 | 0xc8, 0xdb, 0x40, 0x5b, 0xcf, 0x62, 0x5b, 0xfa, 0xc3, 0x69, 0x39, 0x0e, | 1985 | 0x59, 0xa1, 0xa5, 0x33, 0x19, 0xe7, 0xe4, 0x5e, 0x75, 0x0c, 0xaf, 0x27, |
| 1991 | 0xfa, 0xca, 0x34, 0xd9, 0x8b, 0x7c, 0x34, 0x51, 0x8c, 0xe7, 0x58, 0x67, | 1986 | 0x6a, 0x63, 0xb5, 0x91, 0x6a, 0xe6, 0xf6, 0x17, 0x30, 0x30, 0xea, 0x44, |
| 1992 | 0x5d, 0xc8, 0x95, 0x7f, 0x66, 0x72, 0x98, 0xfc, 0xc9, 0x89, 0x34, 0xfb, | 1987 | 0x15, 0x79, 0x7c, 0x65, 0xb2, 0x16, 0x6e, 0x7b, 0x5d, 0xf1, 0x0a, 0xf2, |
| 1993 | 0x48, 0xd8, 0x6d, 0x4c, 0x53, 0x76, 0xd3, 0x0f, 0x2b, 0x17, 0x4e, 0x53, | 1988 | 0xa7, 0xb9, 0xe4, 0x48, 0x75, 0xa8, 0x26, 0x4f, 0xf2, 0x84, 0x2c, 0xeb, |
| 1994 | 0x52, 0x43, 0xc2, 0xed, 0x7f, 0x84, 0x27, 0xef, 0xcf, 0xe9, 0x70, 0x8f, | 1989 | 0xa7, 0x8b, 0x2d, 0xeb, 0x4a, 0x1e, 0x65, 0x3c, 0xce, 0x85, 0xc4, 0x4f, |
| 1995 | 0xb9, 0x06, 0x43, 0xe9, 0x1f, 0x17, 0xda, 0x9b, 0xf2, 0x2e, 0x9c, 0xbc, | 1990 | 0xa3, 0x68, 0xb4, 0xfd, 0xd5, 0x40, 0x93, 0xfd, 0xdd, 0x4a, 0x5f, 0xef, |
| 1996 | 0x9f, 0x53, 0x78, 0x57, 0x27, 0xf7, 0x4c, 0xeb, 0xdb, 0x99, 0x0a, 0xf2, | 1991 | 0x0a, 0x2d, 0x9c, 0xf8, 0x62, 0xa8, 0x61, 0x62, 0x26, 0xd4, 0xe1, 0x59, |
| 1997 | 0xe7, 0x52, 0xda, 0x5a, 0x51, 0xcc, 0xcb, 0xb8, 0xba, 0x66, 0x81, 0x86, | 1992 | 0x70, 0xb0, 0xad, 0x8f, 0x2f, 0xb5, 0xd0, 0x6a, 0xca, 0xfb, 0x04, 0x84, |
| 1998 | 0x9d, 0x97, 0xd5, 0x4d, 0x43, 0x85, 0xe6, 0xfc, 0x75, 0xc3, 0xf3, 0xec, | 1993 | 0xa7, 0x6d, 0x24, 0x4f, 0xeb, 0x0f, 0x19, 0x13, 0x8f, 0xe2, 0x7a, 0xc6, |
| 1999 | 0xa7, 0x22, 0x56, 0x15, 0xd9, 0x63, 0xef, 0x83, 0x0a, 0x5d, 0x56, 0xc3, | 1994 | 0x5d, 0xf7, 0xb0, 0x8f, 0xfd, 0x48, 0xce, 0xef, 0xcc, 0xcd, 0x23, 0xff, |
| 2000 | 0xb8, 0x22, 0xcf, 0x86, 0x63, 0x78, 0x2b, 0x51, 0x1d, 0xab, 0x8e, 0x54, | 1995 | 0xbf, 0x7a, 0xb1, 0x70, 0xb6, 0x0e, 0x79, 0x97, 0x08, 0x3a, 0x26, 0x4e, |
| 2001 | 0x12, 0x6f, 0x4f, 0xa3, 0x6f, 0xd8, 0x89, 0x0a, 0xf2, 0xe6, 0xf2, 0x64, | 1996 | 0xe2, 0x26, 0x96, 0xf1, 0x0c, 0xbf, 0x84, 0x64, 0xf6, 0x47, 0x18, 0xc8, |
| 2002 | 0x35, 0xdc, 0xf6, 0x3a, 0xde, 0x45, 0xe4, 0x2b, 0xb3, 0xc9, 0x49, 0x66, | 1997 | 0x4a, 0x3c, 0xc9, 0xe1, 0x06, 0xb6, 0x5d, 0x3e, 0xdc, 0x46, 0xae, 0xba, |
| 2003 | 0xa1, 0x92, 0xbc, 0xc4, 0x13, 0xb2, 0xac, 0x9f, 0x2d, 0xb4, 0xac, 0x4b, | 1998 | 0x06, 0x9b, 0x27, 0x2c, 0xac, 0x0a, 0x4d, 0x62, 0xd5, 0x04, 0x39, 0xf0, |
| 2004 | 0x78, 0x94, 0xf0, 0x38, 0x15, 0x12, 0x3f, 0x8d, 0xa2, 0xce, 0xf6, 0x57, | 1999 | 0x44, 0xd1, 0x5f, 0x85, 0xbf, 0xad, 0x81, 0x3c, 0x7f, 0xe6, 0x26, 0xb6, |
| 2005 | 0x03, 0xf5, 0xf6, 0xff, 0x26, 0xfa, 0x7a, 0x47, 0x68, 0xfe, 0xf8, 0x7d, | 2000 | 0xc8, 0xda, 0x9e, 0x4a, 0x3f, 0x6c, 0xa1, 0x7d, 0x3f, 0x9e, 0x8a, 0x63, |
| 2006 | 0xa1, 0xb9, 0xe3, 0x35, 0x50, 0x07, 0xa6, 0xc3, 0xc1, 0xb6, 0xbe, 0x70, | 2001 | 0xc3, 0x84, 0x60, 0xee, 0x7d, 0xe8, 0x9d, 0x90, 0xb5, 0xe2, 0xaf, 0x84, |
| 2007 | 0x99, 0x85, 0x26, 0xfa, 0xf0, 0x5a, 0x53, 0x78, 0xd1, 0x1a, 0xf2, 0xa2, | 2002 | 0xe6, 0x4f, 0xfc, 0x08, 0x2d, 0x13, 0xe9, 0xd0, 0x82, 0x89, 0x31, 0xca, |
| 2008 | 0xde, 0x90, 0x31, 0x7e, 0x10, 0x57, 0x33, 0xce, 0xb9, 0x07, 0x7c, 0xec, | 2003 | 0x9d, 0xa0, 0x6c, 0x83, 0xa1, 0xfa, 0x89, 0x91, 0x50, 0x70, 0xe2, 0x40, |
| 2009 | 0x47, 0x72, 0x6c, 0x67, 0x76, 0x0e, 0xf9, 0xf6, 0x67, 0x16, 0x0a, 0x47, | 2004 | 0x28, 0x30, 0xd1, 0x8e, 0x9d, 0x13, 0xeb, 0xb0, 0x63, 0x62, 0x1b, 0xb6, |
| 2010 | 0x6a, 0x25, 0x47, 0x3a, 0x84, 0xd6, 0xf1, 0xc3, 0xb8, 0x9e, 0x65, 0x3c, | 2005 | 0x4f, 0x08, 0x6e, 0x4f, 0x61, 0xe5, 0xc4, 0xab, 0x58, 0x31, 0xf1, 0x2c, |
| 2011 | 0xe4, 0x2a, 0xc9, 0xcc, 0x8f, 0xd0, 0x97, 0xb1, 0xb0, 0x3d, 0x94, 0xc5, | 2006 | 0x5a, 0x27, 0xce, 0x62, 0xf9, 0xc4, 0x8b, 0x68, 0x9b, 0x78, 0x89, 0x63, |
| 2012 | 0xb5, 0x6c, 0xbb, 0x74, 0xa0, 0x99, 0xdc, 0x70, 0x05, 0xd6, 0x8d, 0xcb, | 2007 | 0x91, 0xb5, 0x67, 0x59, 0x77, 0x2e, 0xde, 0xe7, 0x9b, 0xbe, 0x97, 0x5a, |
| 2013 | 0xbb, 0x52, 0x13, 0x58, 0x3e, 0x4e, 0xce, 0x39, 0x5e, 0xf0, 0x57, 0xe1, | 2008 | 0xd6, 0x56, 0xe4, 0x59, 0x30, 0x99, 0x43, 0x17, 0xd6, 0x6a, 0xe7, 0xd0, |
| 2014 | 0x4b, 0x2b, 0xc8, 0x97, 0x64, 0x2d, 0x6d, 0x95, 0xbd, 0x96, 0xa6, 0xd2, | 2009 | 0xb7, 0x5f, 0xde, 0xb5, 0xd6, 0xa8, 0xf5, 0x42, 0xee, 0xe1, 0xbe, 0x28, |
| 2015 | 0x0f, 0x1b, 0x13, 0xf2, 0x9e, 0x50, 0x1c, 0xab, 0xc7, 0x05, 0xab, 0xef, | 2010 | 0xcf, 0x06, 0xd0, 0xc6, 0xa6, 0xef, 0x1b, 0xd6, 0xb5, 0xa9, 0x4b, 0xf7, |
| 2016 | 0x41, 0xf7, 0xb8, 0xac, 0xcd, 0x7e, 0x33, 0x74, 0xf1, 0xf8, 0xab, 0x68, | 2011 | 0x3c, 0xe5, 0x99, 0x2c, 0x89, 0x3d, 0xe7, 0xd1, 0x93, 0xfd, 0x8d, 0x15, |
| 2017 | 0x1c, 0x1f, 0x0a, 0xcd, 0x1b, 0x1f, 0xa1, 0xdc, 0x09, 0xca, 0xd6, 0x1f, | 2012 | 0xd5, 0xa4, 0xac, 0x3c, 0x2b, 0x26, 0xf6, 0x70, 0x0e, 0x0f, 0xed, 0x3f, |
| 2018 | 0xaa, 0x1d, 0x1f, 0x0c, 0x05, 0xc7, 0x77, 0x87, 0x02, 0xe3, 0x2d, 0xd8, | 2013 | 0x4f, 0x0e, 0x35, 0x69, 0xaf, 0x1d, 0xbd, 0xbd, 0x40, 0xde, 0xd3, 0xe3, |
| 2019 | 0x32, 0xbe, 0x0a, 0x9b, 0xc7, 0x37, 0x62, 0xd3, 0xb8, 0xe0, 0xfc, 0x24, | 2014 | 0x27, 0x36, 0x9d, 0x43, 0xea, 0x28, 0x30, 0x71, 0x50, 0xfc, 0x70, 0x23, |
| 2020 | 0x96, 0x8d, 0xbf, 0x81, 0xa5, 0xe3, 0xcf, 0xa3, 0x69, 0xfc, 0x04, 0x96, | 2015 | 0xfd, 0x70, 0x52, 0x7c, 0x32, 0x4e, 0x4c, 0xbe, 0xcd, 0x83, 0xfb, 0xc8, |
| 2021 | 0x8c, 0xff, 0x08, 0xcd, 0xe3, 0xaf, 0x70, 0x2c, 0xb2, 0xd6, 0x2b, 0xeb, | 2016 | 0x93, 0x4a, 0x90, 0x1b, 0x2b, 0xc7, 0xd3, 0x23, 0x71, 0x6b, 0x9e, 0x21, |
| 2022 | 0xbc, 0x85, 0xe7, 0x6a, 0x53, 0xf7, 0x24, 0xcb, 0x5a, 0x86, 0x7c, 0xbf, | 2017 | 0xef, 0x2e, 0x31, 0x72, 0x57, 0x32, 0xee, 0xbf, 0xc4, 0x6b, 0x93, 0x83, |
| 2023 | 0x43, 0xe6, 0xd0, 0x85, 0x95, 0xda, 0x6b, 0xe8, 0xd9, 0x25, 0xdf, 0x24, | 2018 | 0xf0, 0xfb, 0x8c, 0x80, 0x6f, 0x1e, 0xcf, 0x4f, 0xa7, 0x27, 0xc9, 0x71, |
| 2024 | 0xac, 0xd3, 0xba, 0xe5, 0xf9, 0xa3, 0xf7, 0x79, 0xd9, 0x63, 0x4f, 0x1b, | 2019 | 0xba, 0x30, 0xc5, 0x6f, 0xc9, 0x89, 0x81, 0x5e, 0xa4, 0xd3, 0xa2, 0xcf, |
| 2025 | 0x3b, 0xff, 0xbd, 0xbc, 0xc9, 0xb3, 0xcf, 0x18, 0xe5, 0x1b, 0x18, 0xf2, | 2020 | 0x76, 0xea, 0x53, 0x70, 0x51, 0xef, 0x6a, 0x25, 0x1e, 0x5a, 0x8a, 0xe0, |
| 2026 | 0xec, 0x73, 0x12, 0x5d, 0x99, 0xdf, 0x5a, 0x51, 0x4d, 0xca, 0xca, 0xf7, | 2021 | 0xa1, 0x8a, 0x8a, 0x7d, 0xc2, 0x25, 0xec, 0x77, 0x9f, 0x98, 0x03, 0xca, |
| 2027 | 0x3f, 0xc4, 0x1e, 0x5e, 0xc3, 0x43, 0xbb, 0x26, 0xc9, 0x59, 0xb2, 0xf6, | 2022 | 0x8b, 0xf8, 0x0e, 0x73, 0x98, 0xf2, 0x7d, 0xe4, 0x43, 0xc4, 0xca, 0xaa, |
| 2028 | 0x5a, 0xcd, 0xbb, 0xf3, 0xe4, 0x9b, 0x56, 0xf2, 0xce, 0xfe, 0x6b, 0x48, | 2023 | 0x88, 0x62, 0xac, 0x0a, 0x9c, 0xc3, 0xd3, 0x63, 0x4e, 0xb8, 0x93, 0x4e, |
| 2029 | 0x8d, 0x02, 0xe3, 0x0f, 0x8b, 0x1f, 0xae, 0xa1, 0x1f, 0x66, 0xc5, 0x27, | 2024 | 0x4c, 0x12, 0x27, 0x1d, 0x49, 0xd9, 0x3f, 0xa0, 0x51, 0x16, 0x59, 0xa7, |
| 2030 | 0xe3, 0xc4, 0xe4, 0xaf, 0x78, 0x70, 0x0f, 0x79, 0x49, 0x11, 0xb2, 0x23, | 2025 | 0x3a, 0x8b, 0x9c, 0x7d, 0x7f, 0x4f, 0xee, 0xcf, 0x7c, 0xd7, 0xee, 0xc7, |
| 2031 | 0xa5, 0x78, 0x66, 0x30, 0x6e, 0xcd, 0x31, 0x3c, 0x28, 0x8f, 0x18, 0xd9, | 2026 | 0x49, 0xd9, 0xfb, 0x88, 0xa5, 0x3d, 0xa9, 0xef, 0xa1, 0x35, 0xed, 0xb1, |
| 2032 | 0x4b, 0x18, 0x67, 0x5f, 0xe1, 0xb5, 0x89, 0x7e, 0xf8, 0x7d, 0x46, 0xc0, | 2027 | 0x9f, 0xf3, 0xdb, 0x9d, 0x7a, 0x15, 0xa9, 0xfd, 0x75, 0xb8, 0xdd, 0x7e, |
| 2033 | 0x37, 0x87, 0xe7, 0xc7, 0x86, 0xb2, 0xe4, 0x14, 0x1d, 0x98, 0xe4, 0x7f, | 2028 | 0xd6, 0xcf, 0x84, 0x46, 0xbd, 0xdd, 0x32, 0x6e, 0x22, 0x7a, 0x78, 0x1d, |
| 2034 | 0xc9, 0x41, 0x81, 0x6e, 0x0c, 0x0d, 0x89, 0x3e, 0x5b, 0xa8, 0x4f, 0xc1, | 2029 | 0xd6, 0x1e, 0xfe, 0x24, 0x8f, 0x59, 0xb8, 0xe9, 0x70, 0x27, 0x6e, 0x1c, |
| 2035 | 0x45, 0xbd, 0xa3, 0x89, 0x78, 0x68, 0x29, 0x82, 0x87, 0x2a, 0xca, 0x1e, | 2030 | 0x8f, 0xa3, 0x63, 0xbc, 0x8f, 0xc7, 0x7a, 0x7c, 0x6c, 0xa8, 0x1a, 0x99, |
| 2036 | 0xe8, 0xa4, 0xbf, 0xea, 0xb1, 0x9f, 0x30, 0x16, 0xf4, 0x29, 0x3f, 0xc2, | 2031 | 0x90, 0xc6, 0x1c, 0x7f, 0x3d, 0x73, 0x7c, 0xe1, 0x67, 0x1b, 0xf0, 0x34, |
| 2037 | 0x73, 0xcc, 0x19, 0x4a, 0x1f, 0x20, 0xff, 0x20, 0x56, 0x56, 0x44, 0x14, | 2032 | 0x71, 0x27, 0x18, 0xda, 0x80, 0x49, 0xdb, 0x17, 0x65, 0x8f, 0xe5, 0x06, |
| 2038 | 0x63, 0x79, 0xe0, 0x14, 0x9e, 0x19, 0x71, 0xc2, 0x9d, 0x74, 0x62, 0x82, | 2033 | 0x6c, 0x67, 0xfe, 0x3e, 0x8a, 0x0d, 0xe8, 0xe1, 0xb5, 0x21, 0x7b, 0x0e, |
| 2039 | 0x38, 0xe9, 0x48, 0xca, 0xf3, 0x7a, 0x8d, 0xb2, 0xc8, 0xba, 0xd0, 0x09, | 2034 | 0x4e, 0x62, 0x19, 0xf3, 0xb3, 0x77, 0xae, 0x39, 0x89, 0x0f, 0x1f, 0x92, |
| 2040 | 0x64, 0xed, 0xe7, 0x69, 0xf2, 0x3c, 0xe4, 0x45, 0xbb, 0x1f, 0x27, 0x65, | 2035 | 0xbe, 0x2f, 0x20, 0xb5, 0x77, 0x23, 0xdb, 0xcc, 0xa1, 0x7d, 0xfc, 0x9f, |
| 2041 | 0xef, 0x21, 0x96, 0x76, 0xa5, 0x5e, 0x42, 0xd3, 0x90, 0x07, 0x73, 0x92, | 2036 | 0x71, 0xe3, 0x10, 0xee, 0xac, 0x46, 0x35, 0x9e, 0x0d, 0x05, 0x3a, 0x06, |
| 2042 | 0x13, 0xcc, 0x5f, 0x5e, 0x45, 0x6a, 0xd7, 0x2c, 0x7c, 0x95, 0x3c, 0x70, | 2037 | 0x94, 0x7f, 0xb6, 0xdb, 0xde, 0x9e, 0xfa, 0x11, 0x76, 0xa5, 0xce, 0xe3, |
| 2043 | 0x66, 0xd2, 0x84, 0x46, 0xbd, 0xdd, 0x34, 0x66, 0x22, 0xba, 0x77, 0x15, | 2038 | 0xe1, 0xcc, 0x4b, 0xe8, 0x4f, 0x4d, 0x9f, 0x53, 0x99, 0xcb, 0x37, 0x19, |
| 2044 | 0x56, 0xee, 0xfd, 0x22, 0x8f, 0xe9, 0xb8, 0x7e, 0x6f, 0x3b, 0x3e, 0x3f, | 2039 | 0x0f, 0xbe, 0x8f, 0x23, 0x63, 0x53, 0xc4, 0xde, 0x57, 0x78, 0xbc, 0xff, |
| 2045 | 0x16, 0x47, 0xeb, 0x58, 0x0f, 0x8f, 0x36, 0x5c, 0xb7, 0xa3, 0x12, 0xe9, | 2040 | 0x7e, 0x7a, 0xfe, 0x39, 0xdc, 0xbc, 0xdd, 0x48, 0x3e, 0x55, 0xe4, 0x6f, |
| 2046 | 0x90, 0xc6, 0x9c, 0xba, 0x8d, 0x39, 0xb5, 0xf0, 0xa1, 0xd5, 0x78, 0x86, | 2041 | 0x71, 0xab, 0xda, 0xc8, 0xed, 0x9a, 0x03, 0x7d, 0x5b, 0x58, 0x95, 0xfb, |
| 2047 | 0xb8, 0x13, 0x0c, 0xad, 0xc6, 0x84, 0xed, 0x8b, 0xb2, 0x97, 0x71, 0x35, | 2042 | 0x81, 0x46, 0xec, 0x05, 0x45, 0x6f, 0xff, 0x96, 0xe2, 0x61, 0xae, 0x21, |
| 2048 | 0x36, 0x31, 0x5f, 0x1e, 0xc6, 0x6a, 0x74, 0xf1, 0xda, 0x0e, 0x7b, 0x0e, | 2043 | 0xcf, 0x45, 0xea, 0xd1, 0x1b, 0xa8, 0xef, 0xb2, 0x07, 0xbe, 0x0f, 0xe7, |
| 2049 | 0x0e, 0x63, 0x31, 0xf3, 0xa1, 0xf7, 0x2f, 0x3f, 0x8c, 0x2b, 0xf6, 0x48, | 2044 | 0x03, 0x4e, 0x94, 0x26, 0x65, 0x2d, 0x47, 0xde, 0x2b, 0x23, 0xef, 0x30, |
| 2050 | 0xdf, 0xa7, 0x91, 0xda, 0xb9, 0x86, 0x6d, 0x66, 0xd1, 0x32, 0xf6, 0x43, | 2045 | 0xc9, 0xe9, 0xa5, 0xf2, 0xae, 0x89, 0xe4, 0x24, 0x63, 0x7f, 0x6e, 0x61, |
| 2051 | 0x7c, 0x7e, 0x07, 0x6e, 0xab, 0x44, 0x25, 0x9e, 0x0f, 0x05, 0x5a, 0xfb, | 2046 | 0x09, 0xe4, 0x39, 0xec, 0xeb, 0xb0, 0x71, 0x30, 0x8a, 0x1e, 0x53, 0x9e, |
| 2052 | 0x94, 0x1f, 0xda, 0x6d, 0x6f, 0xa2, 0x1f, 0x6f, 0x65, 0xb9, 0x47, 0xd2, | 2047 | 0x31, 0xca, 0x8f, 0x7f, 0x5e, 0xf3, 0xf7, 0xd1, 0xcb, 0xf8, 0xb3, 0x9e, |
| 2053 | 0x27, 0xd0, 0x9b, 0x9a, 0x3a, 0xa7, 0xf6, 0x7b, 0xed, 0x8c, 0x07, 0x2f, | 2048 | 0x98, 0x78, 0xbb, 0x7d, 0x6f, 0xf6, 0xfb, 0xe8, 0x1b, 0xf9, 0x47, 0xb7, |
| 2054 | 0x63, 0xdf, 0xc8, 0x24, 0xb1, 0xf7, 0x24, 0x8f, 0x0b, 0x9f, 0x5f, 0x7b, | 2049 | 0xf0, 0x9d, 0x3e, 0x53, 0x9e, 0xe3, 0xd6, 0xcd, 0xf7, 0xbe, 0xc3, 0x66, |
| 2055 | 0xed, 0x7c, 0x26, 0x67, 0x37, 0x92, 0xbf, 0xc8, 0x3a, 0x70, 0x0b, 0x7c, | 2050 | 0xbe, 0xec, 0x69, 0xa3, 0x4d, 0xe4, 0x16, 0xba, 0xb0, 0xbd, 0x36, 0xff, |
| 2056 | 0x29, 0xe1, 0x44, 0xd9, 0xad, 0x33, 0xa1, 0x6f, 0x0c, 0xdb, 0x1c, 0xc9, | 2051 | 0x1e, 0x95, 0x0f, 0x7a, 0xe7, 0xd0, 0x5f, 0xda, 0xef, 0x1c, 0x92, 0xfb, |
| 2057 | 0x88, 0x91, 0x1b, 0xb5, 0x7c, 0x57, 0xf1, 0x90, 0x1b, 0x05, 0xb1, 0x22, | 2052 | 0xfa, 0xf2, 0xbe, 0xaa, 0x27, 0x12, 0xf2, 0x1e, 0x09, 0x75, 0x99, 0x0b, |
| 2058 | 0xa3, 0x47, 0xaf, 0xa5, 0xbe, 0x4b, 0xee, 0x7f, 0x19, 0xce, 0xfb, 0x9d, | 2053 | 0xaa, 0xd7, 0x45, 0x5e, 0xf8, 0xaa, 0x39, 0x13, 0xbd, 0x5e, 0x0b, 0xd7, |
| 2059 | 0x28, 0x4e, 0xca, 0xda, 0xc9, 0x04, 0x7a, 0x33, 0xf2, 0xfe, 0x6e, 0x56, | 2054 | 0x53, 0x96, 0x63, 0x4d, 0x1f, 0x63, 0xe6, 0x12, 0xef, 0x70, 0xd9, 0xef, |
| 2060 | 0x2f, 0x26, 0xae, 0x16, 0x25, 0xb3, 0x8c, 0xfd, 0xd9, 0xf9, 0x45, 0x90, | 2055 | 0x26, 0x39, 0xff, 0xa9, 0x7f, 0xff, 0x6e, 0x92, 0x37, 0x89, 0x93, 0x0a, |
| 2061 | 0x77, 0xf1, 0xaf, 0xc2, 0x9a, 0xfe, 0x28, 0xba, 0x4c, 0x79, 0x57, 0x27, | 2056 | 0x2a, 0x8d, 0x5b, 0xf0, 0x9c, 0x1d, 0x13, 0x14, 0x54, 0x34, 0xc8, 0xba, |
| 2062 | 0x37, 0xfe, 0x39, 0x0d, 0x2f, 0xa3, 0x9b, 0xf1, 0xa7, 0x8d, 0x98, 0xf8, | 2057 | 0xa8, 0x1f, 0xcf, 0x18, 0x8d, 0xfe, 0x1a, 0xb9, 0xdf, 0xa5, 0x9c, 0xb3, |
| 2063 | 0x55, 0xfb, 0x59, 0xe8, 0xcb, 0xe8, 0x19, 0x2c, 0xbc, 0xbb, 0x2e, 0x6d, | 2058 | 0xe2, 0xde, 0x3a, 0xc6, 0x97, 0xff, 0x68, 0x2f, 0xfe, 0xf3, 0xd8, 0xb9, |
| 2064 | 0x3e, 0x4f, 0xbd, 0xb9, 0xf2, 0xdf, 0xec, 0x91, 0x36, 0x75, 0xd3, 0xaf, | 2059 | 0x37, 0x4c, 0xce, 0xe8, 0x95, 0x67, 0x23, 0x67, 0x14, 0x9f, 0xc5, 0xdc, |
| 2065 | 0x4e, 0xcb, 0xbd, 0x8b, 0x03, 0xfb, 0x19, 0x36, 0xed, 0xe3, 0x35, 0xf4, | 2060 | 0x91, 0x92, 0x3d, 0xec, 0x0c, 0x8a, 0xe5, 0x6f, 0xd2, 0xcf, 0xde, 0x94, |
| 2066 | 0xee, 0x2a, 0x8c, 0x99, 0xb9, 0x41, 0xe0, 0x35, 0xf4, 0x8f, 0xca, 0xd8, | 2061 | 0x3d, 0x58, 0xe4, 0x3c, 0x7f, 0x85, 0x60, 0xcd, 0x8c, 0xfc, 0x73, 0x52, |
| 2067 | 0xaf, 0x9f, 0x96, 0x7b, 0xc7, 0x78, 0xaa, 0x3e, 0x0a, 0x75, 0x1d, 0xb4, | 2062 | 0xf6, 0x5e, 0x5f, 0x59, 0x0f, 0xd8, 0x5e, 0x78, 0xef, 0xa2, 0x94, 0x95, |
| 2068 | 0xe7, 0xc2, 0xfd, 0x8f, 0xfb, 0x6e, 0xd0, 0xa7, 0xec, 0x6f, 0xf0, 0xe4, | 2063 | 0x7a, 0x6f, 0xda, 0x6b, 0xc2, 0x2e, 0xe3, 0x37, 0xd6, 0x6b, 0xde, 0x5a, |
| 2069 | 0xbe, 0x81, 0x04, 0x3c, 0x99, 0x90, 0x77, 0xfb, 0xd5, 0xc5, 0x2e, 0xa8, | 2064 | 0x96, 0xfd, 0x45, 0xe1, 0xff, 0xf3, 0xe2, 0x33, 0x66, 0x14, 0x72, 0x4d, |
| 2070 | 0x5e, 0x17, 0x8a, 0x19, 0x2f, 0x6a, 0xd0, 0xed, 0xb5, 0x70, 0x35, 0xc7, | 2065 | 0xea, 0x88, 0xae, 0x2e, 0xd7, 0xe9, 0x4d, 0x39, 0x88, 0x7b, 0x67, 0xad, |
| 2071 | 0xb2, 0xbf, 0xfe, 0x3a, 0x66, 0x1a, 0xf1, 0x56, 0x97, 0xfd, 0xce, 0xe1, | 2066 | 0x6e, 0xaf, 0x8c, 0x61, 0xec, 0x7d, 0x75, 0x54, 0xfb, 0x1d, 0x84, 0x79, |
| 2072 | 0x8a, 0xbf, 0xfe, 0xe8, 0x3b, 0x87, 0x6f, 0x10, 0x67, 0x15, 0x94, 0x1b, | 2067 | 0xfd, 0x8a, 0x3c, 0xff, 0xbe, 0x4f, 0x59, 0x3f, 0x2e, 0x31, 0x2a, 0x70, |
| 2073 | 0x37, 0xe1, 0x05, 0x3b, 0xa6, 0x28, 0x28, 0x9b, 0x2b, 0xeb, 0x98, 0x7e, | 2068 | 0xae, 0x26, 0xbf, 0xae, 0x73, 0x59, 0xc6, 0x47, 0xbc, 0xb2, 0xef, 0xaf, |
| 2074 | 0x3c, 0x6b, 0xd4, 0xf9, 0xab, 0xe4, 0xf9, 0x94, 0x72, 0xca, 0x92, 0x6f, | 2069 | 0xd4, 0x3e, 0xb7, 0xfb, 0x35, 0x2f, 0xd7, 0xfb, 0x46, 0x61, 0xbc, 0xb5, |
| 2075 | 0x06, 0x6c, 0xcb, 0xfc, 0xb1, 0x3d, 0xf1, 0x4f, 0x61, 0xcb, 0xce, 0x30, | 2070 | 0xf6, 0xb3, 0x4a, 0x0f, 0xda, 0xbc, 0xc6, 0x31, 0x6d, 0xdc, 0xcb, 0xbc, |
| 2076 | 0xe4, 0xfd, 0x15, 0xa7, 0xa1, 0x79, 0x73, 0xfc, 0x4a, 0x64, 0x93, 0xbd, | 2071 | 0xef, 0xed, 0x67, 0xa4, 0xd0, 0xaf, 0x6a, 0x3f, 0xef, 0x75, 0xb9, 0x0f, |
| 2077 | 0xe4, 0xb7, 0x12, 0x9c, 0xde, 0xa0, 0x9f, 0xbe, 0x21, 0x7b, 0xa6, 0xc8, | 2072 | 0x91, 0xeb, 0xa9, 0x42, 0x1d, 0x3d, 0x1c, 0xb5, 0xfb, 0x57, 0x99, 0xbf, |
| 2078 | 0x99, 0xfe, 0x12, 0xc1, 0xaa, 0xc2, 0x38, 0x65, 0xaf, 0xa9, 0x92, 0x1b, | 2073 | 0x15, 0xfb, 0xa4, 0x3f, 0x2d, 0x2e, 0xb6, 0x31, 0x29, 0xf6, 0xd5, 0x5d, |
| 2079 | 0xab, 0x5d, 0x47, 0xca, 0x4a, 0xbd, 0x37, 0xec, 0x35, 0x5c, 0x97, 0xf1, | 2074 | 0xca, 0xd8, 0x74, 0xae, 0xf9, 0x3e, 0x6c, 0x4f, 0x88, 0x9e, 0xe5, 0x1d, |
| 2080 | 0x5b, 0xeb, 0x4d, 0x6f, 0x35, 0xcb, 0x1e, 0xce, 0xdf, 0x9f, 0x14, 0x9f, | 2075 | 0x95, 0xc4, 0x60, 0x9b, 0x6b, 0xb9, 0xe8, 0x6f, 0x4b, 0x91, 0xd6, 0xe2, |
| 2081 | 0x33, 0xe5, 0x1b, 0x56, 0x4e, 0xbb, 0x8e, 0xe8, 0xf7, 0x5c, 0x9d, 0xee, | 2076 | 0x38, 0xd4, 0x24, 0xcf, 0xe6, 0xb9, 0x68, 0xd3, 0x71, 0x94, 0x91, 0xdb, |
| 2082 | 0x94, 0x83, 0xb8, 0x79, 0xc2, 0xea, 0xf4, 0xca, 0x18, 0xee, 0xbc, 0xa0, | 2077 | 0x46, 0x79, 0x4d, 0xf6, 0xb4, 0x1c, 0x31, 0xf5, 0xe8, 0x13, 0xf8, 0x12, |
| 2083 | 0x8e, 0xac, 0x2b, 0x68, 0xd2, 0x6f, 0x58, 0xc6, 0xdc, 0x95, 0xf9, 0x68, | 2078 | 0x1c, 0x57, 0xd9, 0xeb, 0x5f, 0x6d, 0x69, 0xc8, 0x75, 0x93, 0xb9, 0xc9, |
| 2084 | 0x9f, 0xb2, 0xde, 0x5b, 0x64, 0x94, 0xe1, 0x54, 0x55, 0x6e, 0x1d, 0xe6, | 2079 | 0xf4, 0x15, 0x83, 0x32, 0xda, 0x8e, 0xbd, 0x17, 0xdb, 0x94, 0x67, 0xf7, |
| 2085 | 0x9c, 0x8c, 0x3d, 0x35, 0xb2, 0x4f, 0xaf, 0xd8, 0x3e, 0xb7, 0xfb, 0x35, | 2080 | 0x06, 0x12, 0xf2, 0x0c, 0x59, 0x63, 0x8c, 0xfc, 0x10, 0xcf, 0x65, 0x64, |
| 2086 | 0xcf, 0xd5, 0xfb, 0xbb, 0xfc, 0x78, 0xab, 0xed, 0x77, 0x86, 0x1e, 0xb4, | 2081 | 0xff, 0xc3, 0x6f, 0xad, 0xf8, 0x4c, 0xd9, 0x67, 0x39, 0xbd, 0x4e, 0x09, |
| 2087 | 0x79, 0x91, 0x63, 0xca, 0xb8, 0x4b, 0x6a, 0xce, 0xef, 0xe7, 0x2b, 0xf9, | 2082 | 0x71, 0x29, 0x10, 0xae, 0x52, 0x8a, 0xcf, 0x91, 0x5d, 0xfe, 0xdc, 0x44, |
| 2088 | 0x7e, 0x45, 0x1e, 0xef, 0x94, 0x3e, 0x44, 0xae, 0x87, 0xf3, 0x75, 0xf4, | 2083 | 0x9b, 0x39, 0x6f, 0x3f, 0xfb, 0x27, 0x67, 0x11, 0xb4, 0xa4, 0xe4, 0x5d, |
| 2089 | 0x70, 0xd4, 0xee, 0x5f, 0x65, 0xbe, 0x55, 0xe8, 0x93, 0xfe, 0xb8, 0xb0, | 2084 | 0x8c, 0xfa, 0xe4, 0x2a, 0x34, 0xe6, 0xea, 0x1d, 0xce, 0x02, 0xff, 0x08, |
| 2090 | 0xd0, 0x46, 0x56, 0xec, 0xb3, 0xb3, 0x98, 0xb1, 0xed, 0x54, 0xc3, 0x3d, | 2085 | 0x63, 0x0d, 0xed, 0x66, 0x47, 0x20, 0x6c, 0x3f, 0xe3, 0x26, 0xef, 0xdc, |
| 2091 | 0xd8, 0x94, 0x10, 0x3d, 0xcb, 0xb7, 0x60, 0x89, 0xe1, 0x36, 0x57, 0x73, | 2086 | 0x78, 0x18, 0x7a, 0xe7, 0x1b, 0x2c, 0xff, 0xb1, 0xec, 0xf3, 0x56, 0xda, |
| 2092 | 0xd1, 0x5f, 0x2f, 0xc3, 0x90, 0x16, 0xc7, 0x9e, 0x7a, 0x79, 0x47, 0xce, | 2087 | 0x2b, 0x63, 0x2a, 0xfa, 0xb8, 0xbc, 0xdb, 0x87, 0x7a, 0x8c, 0x88, 0x7f, |
| 2093 | 0x45, 0x9f, 0x88, 0xa3, 0xc4, 0x28, 0x96, 0xfd, 0xc7, 0xf6, 0x1e, 0x94, | 2088 | 0x78, 0x50, 0x13, 0x09, 0xd3, 0x0f, 0x25, 0x7e, 0xcb, 0xf3, 0x71, 0xfa, |
| 2094 | 0x7d, 0xa6, 0x1e, 0x7d, 0x52, 0xbe, 0x55, 0x76, 0xa9, 0xbd, 0x5e, 0xd5, | 2089 | 0x01, 0xc9, 0xab, 0x5a, 0xb2, 0xf2, 0xfc, 0xb7, 0xec, 0x9b, 0xd6, 0xfd, |
| 2095 | 0x3c, 0x04, 0xb9, 0x6e, 0xe2, 0xda, 0xf3, 0xf2, 0xfe, 0x12, 0xda, 0x8e, | 2090 | 0x6b, 0x1d, 0xc1, 0xc2, 0xfe, 0xe5, 0x62, 0xbc, 0xb7, 0xbc, 0x85, 0xbd, |
| 2096 | 0xbd, 0x27, 0xda, 0x94, 0x77, 0xe8, 0xfa, 0x12, 0xf2, 0x2e, 0x57, 0x5d, | 2091 | 0xd5, 0xee, 0x79, 0x8c, 0x6f, 0x96, 0xbd, 0x6f, 0x60, 0xa3, 0x8d, 0x0d, |
| 2097 | 0x8c, 0xfc, 0x12, 0x2f, 0xa4, 0x65, 0xbf, 0xc2, 0xef, 0xac, 0x78, 0x8d, | 2092 | 0x9a, 0xa1, 0x1f, 0xfb, 0xa5, 0xa3, 0x1b, 0x8f, 0x2d, 0x32, 0xba, 0x8e, |
| 2098 | 0xec, 0x8b, 0x9c, 0x5a, 0xa7, 0x88, 0xb8, 0x16, 0x08, 0x57, 0x28, 0x85, | 2093 | 0xab, 0xb9, 0xb4, 0x8f, 0x38, 0x71, 0xad, 0x23, 0x3a, 0xc4, 0x6f, 0xff, |
| 2099 | 0xf7, 0xb9, 0xce, 0xfd, 0x5d, 0x4f, 0x9b, 0x39, 0x6d, 0xbf, 0x83, 0x27, | 2094 | 0x77, 0x89, 0xcd, 0x37, 0xd9, 0x75, 0xf5, 0xe0, 0x3a, 0xb5, 0xf8, 0x6c, |
| 2100 | 0x67, 0x11, 0x34, 0xa6, 0xe4, 0x9b, 0xa7, 0xfa, 0xc4, 0x72, 0xd4, 0x65, | 2095 | 0xb5, 0x3c, 0x73, 0xa1, 0x77, 0x7c, 0x43, 0xe9, 0xc6, 0xd6, 0x90, 0xd1, |
| 2101 | 0x6b, 0x1d, 0xce, 0x3c, 0x7f, 0x09, 0x63, 0x05, 0xed, 0x66, 0x73, 0x20, | 2096 | 0xbe, 0x4d, 0xd1, 0xdb, 0xbe, 0xac, 0xe8, 0xfe, 0x90, 0x22, 0xe5, 0xec, |
| 2102 | 0x6c, 0xbf, 0x6b, 0xb6, 0x2c, 0x55, 0x1b, 0x7c, 0x04, 0x7a, 0xfb, 0xdb, | 2097 | 0x77, 0xe8, 0x5c, 0x8a, 0x9d, 0x2e, 0xf6, 0x71, 0x38, 0xa1, 0x87, 0x67, |
| 2103 | 0x2c, 0x7f, 0x5d, 0xe6, 0xfb, 0xd6, 0x90, 0x57, 0xc6, 0x54, 0xc0, 0x88, | 2098 | 0xb0, 0xec, 0x39, 0xd3, 0xf0, 0x5d, 0x60, 0x9b, 0x3f, 0xe4, 0x31, 0x84, |
| 2104 | 0x13, 0xf4, 0x0d, 0xea, 0x31, 0x22, 0xfe, 0xe1, 0x41, 0x55, 0x24, 0x4c, | 2099 | 0x20, 0x96, 0xdb, 0xed, 0x46, 0x17, 0xba, 0xec, 0xf7, 0xa4, 0x76, 0x30, |
| 2105 | 0x3f, 0x96, 0xf8, 0x2f, 0xef, 0xa9, 0xe9, 0xbb, 0xe3, 0x30, 0xd1, 0xc8, | 2100 | 0x26, 0xc8, 0xfb, 0xb0, 0x62, 0xd0, 0x92, 0x75, 0x34, 0x31, 0xbd, 0xff, |
| 2106 | 0x1c, 0xdd, 0x65, 0xef, 0x73, 0xd6, 0xfd, 0x2b, 0x19, 0x87, 0x8e, 0x9c, | 2101 | 0x66, 0x48, 0x4e, 0xdd, 0xc3, 0x80, 0xed, 0x81, 0x37, 0xd2, 0x8d, 0x86, |
| 2107 | 0xdd, 0x13, 0x20, 0x7c, 0xe1, 0xc7, 0x35, 0xf9, 0xbd, 0xd0, 0xee, 0x39, | 2102 | 0x45, 0x86, 0x6f, 0x89, 0x6a, 0xd7, 0x0f, 0xca, 0xfb, 0x81, 0x96, 0x73, |
| 2108 | 0x8c, 0x8f, 0x96, 0xfd, 0x9c, 0x7f, 0x8d, 0x8d, 0x2d, 0x9a, 0xa1, 0xef, | 2103 | 0x9c, 0x23, 0x90, 0x36, 0x72, 0x96, 0xd6, 0x50, 0x6d, 0xd7, 0x59, 0xa4, |
| 2109 | 0xff, 0x95, 0xa3, 0x13, 0x4f, 0x2c, 0x30, 0x3a, 0x0e, 0xa8, 0xd9, 0x21, | 2104 | 0x7e, 0x14, 0xae, 0x0f, 0xfd, 0xca, 0x4a, 0x6b, 0xd0, 0x6a, 0x0d, 0xa9, |
| 2110 | 0x1f, 0x71, 0xe6, 0x4a, 0x47, 0x74, 0x07, 0xff, 0xfb, 0x5f, 0xb4, 0xbf, | 2105 | 0x13, 0x1f, 0xd2, 0xf0, 0x1f, 0xd5, 0x13, 0x5c, 0xf9, 0xa5, 0x85, 0x59, |
| 2111 | 0xa1, 0x22, 0x75, 0xf5, 0xe0, 0x2a, 0x55, 0xf6, 0x0f, 0xb5, 0x60, 0xac, | 2106 | 0x52, 0x4f, 0xf6, 0xac, 0x7d, 0x1a, 0x77, 0x0d, 0xc8, 0x7b, 0x22, 0xc4, |
| 2112 | 0x4f, 0xde, 0x7d, 0xd0, 0x5b, 0xbf, 0xad, 0x74, 0x62, 0x43, 0xc8, 0x68, | 2107 | 0x1f, 0xf5, 0xe8, 0x17, 0xc8, 0x35, 0xcb, 0xed, 0xf7, 0x6f, 0x49, 0x2c, |
| 2113 | 0xd9, 0xa8, 0xe8, 0xcd, 0x7f, 0xaf, 0xe8, 0xfe, 0x90, 0x22, 0xe5, 0x82, | 2108 | 0x59, 0x4f, 0x3c, 0xeb, 0x86, 0x16, 0xd2, 0xfb, 0xaf, 0x50, 0xe5, 0x1d, |
| 2114 | 0xb2, 0xb6, 0x77, 0x36, 0xf6, 0xba, 0xd8, 0xc7, 0xde, 0x84, 0x1e, 0x9e, | 2109 | 0x43, 0x8f, 0xc9, 0xbe, 0x9d, 0x03, 0x0b, 0xd4, 0xfc, 0xfe, 0x9e, 0xd8, |
| 2115 | 0xc6, 0xb2, 0xa7, 0x4c, 0xc3, 0xf7, 0x1e, 0xdb, 0xfc, 0x09, 0x8f, 0x1d, | 2110 | 0x1f, 0x7d, 0x5f, 0x11, 0xfb, 0x2a, 0x97, 0xf7, 0x15, 0xd5, 0xd9, 0xcf, |
| 2116 | 0xf6, 0x3b, 0xec, 0x52, 0x3e, 0x3a, 0xdf, 0x65, 0x7f, 0x8f, 0xb8, 0x95, | 2111 | 0xa7, 0xac, 0x4f, 0x38, 0x0a, 0xfb, 0x15, 0x2f, 0xbf, 0xc7, 0x73, 0x23, |
| 2117 | 0x31, 0x45, 0xbe, 0x35, 0x1c, 0x83, 0x96, 0x9c, 0x45, 0x13, 0xd3, 0x7b, | 2112 | 0x79, 0xfd, 0x26, 0x79, 0x67, 0x1f, 0xc7, 0xba, 0x39, 0x21, 0x4b, 0x5a, |
| 2118 | 0x6f, 0x80, 0xe4, 0xc0, 0x37, 0x4f, 0x47, 0xa9, 0x07, 0xde, 0x48, 0x27, | 2113 | 0xff, 0x0f, 0xdd, 0x0f, 0x6b, 0xf2, 0xd0, 0x56, 0x00, 0x00, 0x00 }; |
| 2119 | 0xe6, 0x2e, 0x30, 0x7c, 0x8b, 0x54, 0xbb, 0x7e, 0x30, 0xaa, 0x4a, 0x7d, | ||
| 2120 | 0xdd, 0x3f, 0x08, 0x69, 0x23, 0x6b, 0x69, 0x73, 0x2b, 0xed, 0x3a, 0x0b, | ||
| 2121 | 0xd4, 0xcf, 0xc1, 0xf5, 0xe9, 0x5f, 0xcb, 0x37, 0x8b, 0xb4, 0x6a, 0x43, | ||
| 2122 | 0xea, 0xc4, 0x77, 0x68, 0xf8, 0x63, 0xf5, 0x04, 0x57, 0x7e, 0x65, 0x61, | ||
| 2123 | 0xba, 0xd4, 0x93, 0x3d, 0x66, 0x37, 0xe3, 0x76, 0xfb, 0xbb, 0x2b, 0xe2, | ||
| 2124 | 0x8f, 0x7a, 0xf4, 0x6e, 0x72, 0xd5, 0x52, 0x45, 0x78, 0xaa, 0xc4, 0xa2, | ||
| 2125 | 0x36, 0xe2, 0x61, 0x27, 0xb4, 0x90, 0xde, 0x7b, 0x91, 0xea, 0x41, 0x71, | ||
| 2126 | 0x64, 0x54, 0xf6, 0xd9, 0xec, 0x9e, 0xa7, 0xe6, 0xf6, 0xe3, 0xc4, 0xd8, | ||
| 2127 | 0xee, 0x91, 0x3f, 0xfa, 0xdc, 0x97, 0x7d, 0x95, 0x9a, 0xf2, 0xce, 0x8e, | ||
| 2128 | 0xfd, 0x9e, 0x48, 0x5b, 0xc2, 0x91, 0xdf, 0x5f, 0x58, 0x98, 0x5b, 0x0d, | ||
| 2129 | 0x6b, 0x98, 0x17, 0xac, 0x95, 0x6f, 0x63, 0x72, 0xac, 0xeb, 0x12, 0xb2, | ||
| 2130 | 0x0a, 0xf5, 0x7f, 0x01, 0x28, 0xfc, 0xfc, 0x40, 0x38, 0x5a, 0x00, 0x00, | ||
| 2131 | 0x00 }; | ||
| 2132 | 2114 | ||
| 2133 | static const u32 bnx2_CP_b06FwData[(0x84/4) + 1] = { | 2115 | static const u32 bnx2_CP_b06FwData[(0x84/4) + 1] = { |
| 2134 | 0x00000000, 0x0000001b, 0x0000000f, 0x0000000a, 0x00000008, 0x00000006, | 2116 | 0x00000000, 0x0000001b, 0x0000000f, 0x0000000a, 0x00000008, 0x00000006, |
| @@ -2137,50 +2119,51 @@ static const u32 bnx2_CP_b06FwData[(0x84/4) + 1] = { | |||
| 2137 | 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, | 2119 | 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, |
| 2138 | 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, | 2120 | 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, |
| 2139 | 0x00000001, 0x00000001, 0x00000001, 0x00000000 }; | 2121 | 0x00000001, 0x00000001, 0x00000001, 0x00000000 }; |
| 2140 | static const u32 bnx2_CP_b06FwRodata[(0x130/4) + 1] = { | 2122 | static const u32 bnx2_CP_b06FwRodata[(0x134/4) + 1] = { |
| 2141 | 0x08001e8c, 0x08001d18, 0x08001e68, 0x08001e44, 0x08001e20, 0x08001dfc, | 2123 | 0x08000f30, 0x08000d88, 0x08000fc4, 0x0800106c, 0x08000f58, 0x08000f98, |
| 2142 | 0x08001dd4, 0x08001dac, 0x08001d80, 0x08001f84, 0x08001f74, 0x08001d34, | 2124 | 0x080011a4, 0x08000da4, 0x080011c8, 0x08000df4, 0x08001498, 0x08001440, |
| 2143 | 0x08001d34, 0x08001d34, 0x08001eb4, 0x08001eb4, 0x08001d34, 0x08001d34, | 2125 | 0x08000da4, 0x08000da4, 0x08000da4, 0x08001254, 0x08001254, 0x08000da4, |
| 2144 | 0x08001f64, 0x08001d34, 0x08001d34, 0x08001d34, 0x08001d34, 0x08001f54, | 2126 | 0x08000da4, 0x080016e0, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, |
| 2145 | 0x08001d34, 0x08001d34, 0x08001d34, 0x08001d34, 0x08001d34, 0x08001d34, | 2127 | 0x080013d4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, |
| 2146 | 0x08001d34, 0x08001d34, 0x08001d34, 0x08001d34, 0x08001d34, 0x08001d34, | 2128 | 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, |
| 2147 | 0x08001d34, 0x08001d34, 0x08001f44, 0x08001d34, 0x08001d34, 0x08001f34, | 2129 | 0x08000da4, 0x08000da4, 0x08000da4, 0x08000fb8, 0x08000da4, 0x08000da4, |
| 2148 | 0x08001d34, 0x08001d34, 0x08001d34, 0x08001d34, 0x08001d34, 0x08001d34, | 2130 | 0x08001690, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, |
| 2149 | 0x08001d34, 0x08001d34, 0x08001d34, 0x08001d34, 0x08001d34, 0x08001d34, | 2131 | 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, |
| 2150 | 0x08001d34, 0x08001d34, 0x08001d34, 0x08001d34, 0x08001d34, 0x08001f1c, | 2132 | 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, 0x08000da4, |
| 2151 | 0x08001d34, 0x08001d34, 0x08001f0c, 0x08001efc, 0x08003208, 0x08003210, | 2133 | 0x080015bc, 0x08000da4, 0x08000da4, 0x08001348, 0x080012b8, 0x08002e50, |
| 2152 | 0x080031d8, 0x080031e4, 0x080031f0, 0x080031fc, 0x08005694, 0x08005654, | 2134 | 0x08002e58, 0x08002e20, 0x08002e2c, 0x08002e38, 0x08002e44, 0x0800532c, |
| 2153 | 0x08005620, 0x080055f4, 0x080055d0, 0x0800558c, 0x00000000 }; | 2135 | 0x080052ec, 0x080052b8, 0x0800528c, 0x08005268, 0x08005224, 0x00000000 |
| 2136 | }; | ||
| 2154 | 2137 | ||
| 2155 | static struct fw_info bnx2_cp_fw_06 = { | 2138 | static struct fw_info bnx2_cp_fw_06 = { |
| 2156 | /* Firmware version: 4.4.22 */ | 2139 | /* Firmware version: 4.6.16 */ |
| 2157 | .ver_major = 0x4, | 2140 | .ver_major = 0x4, |
| 2158 | .ver_minor = 0x4, | 2141 | .ver_minor = 0x6, |
| 2159 | .ver_fix = 0x16, | 2142 | .ver_fix = 0x10, |
| 2160 | 2143 | ||
| 2161 | .start_addr = 0x08000080, | 2144 | .start_addr = 0x08000080, |
| 2162 | 2145 | ||
| 2163 | .text_addr = 0x08000000, | 2146 | .text_addr = 0x08000000, |
| 2164 | .text_len = 0x5a34, | 2147 | .text_len = 0x56cc, |
| 2165 | .text_index = 0x0, | 2148 | .text_index = 0x0, |
| 2166 | .gz_text = bnx2_CP_b06FwText, | 2149 | .gz_text = bnx2_CP_b06FwText, |
| 2167 | .gz_text_len = sizeof(bnx2_CP_b06FwText), | 2150 | .gz_text_len = sizeof(bnx2_CP_b06FwText), |
| 2168 | 2151 | ||
| 2169 | .data_addr = 0x08005b80, | 2152 | .data_addr = 0x08005820, |
| 2170 | .data_len = 0x84, | 2153 | .data_len = 0x84, |
| 2171 | .data_index = 0x0, | 2154 | .data_index = 0x0, |
| 2172 | .data = bnx2_CP_b06FwData, | 2155 | .data = bnx2_CP_b06FwData, |
| 2173 | 2156 | ||
| 2174 | .sbss_addr = 0x08005c04, | 2157 | .sbss_addr = 0x080058a4, |
| 2175 | .sbss_len = 0xe9, | 2158 | .sbss_len = 0xf1, |
| 2176 | .sbss_index = 0x0, | 2159 | .sbss_index = 0x0, |
| 2177 | 2160 | ||
| 2178 | .bss_addr = 0x08005cf0, | 2161 | .bss_addr = 0x08005998, |
| 2179 | .bss_len = 0x5d8, | 2162 | .bss_len = 0x5d8, |
| 2180 | .bss_index = 0x0, | 2163 | .bss_index = 0x0, |
| 2181 | 2164 | ||
| 2182 | .rodata_addr = 0x08005a34, | 2165 | .rodata_addr = 0x080056cc, |
| 2183 | .rodata_len = 0x130, | 2166 | .rodata_len = 0x134, |
| 2184 | .rodata_index = 0x0, | 2167 | .rodata_index = 0x0, |
| 2185 | .rodata = bnx2_CP_b06FwRodata, | 2168 | .rodata = bnx2_CP_b06FwRodata, |
| 2186 | }; | 2169 | }; |
| @@ -2202,761 +2185,747 @@ static const struct cpu_reg cpu_reg_cp = { | |||
| 2202 | }; | 2185 | }; |
| 2203 | 2186 | ||
| 2204 | static u8 bnx2_RXP_b06FwText[] = { | 2187 | static u8 bnx2_RXP_b06FwText[] = { |
| 2205 | 0xec, 0x5b, 0x5f, 0x6c, 0x5b, 0xd7, 0x79, 0xff, 0xee, 0x21, 0x25, 0x51, | 2188 | 0xec, 0x5b, 0x5d, 0x6c, 0x1c, 0xd7, 0x75, 0x3e, 0x33, 0x3b, 0x24, 0x57, |
| 2206 | 0xb2, 0xfe, 0x5c, 0xc9, 0x8c, 0x43, 0x27, 0x4a, 0x43, 0x4a, 0x57, 0x12, | 2189 | 0x14, 0x45, 0x8e, 0xa8, 0x15, 0xb5, 0xb2, 0x99, 0x64, 0x97, 0x1c, 0x89, |
| 2207 | 0x13, 0x69, 0xe9, 0x95, 0xc6, 0x26, 0x2a, 0x46, 0x34, 0x2c, 0x29, 0xdb, | 2190 | 0x1b, 0x93, 0x50, 0x86, 0xec, 0x5a, 0x66, 0x92, 0x45, 0xbc, 0x59, 0x52, |
| 2208 | 0x4a, 0xe3, 0x07, 0xc5, 0xf5, 0xda, 0xac, 0xeb, 0x30, 0x81, 0xb2, 0xb1, | 2191 | 0x16, 0x53, 0x08, 0xf0, 0xda, 0x56, 0x5c, 0xa3, 0x31, 0x90, 0xc5, 0x92, |
| 2209 | 0xec, 0x61, 0x83, 0x67, 0xac, 0x41, 0xb6, 0xb9, 0x30, 0x41, 0x29, 0x8e, | 2192 | 0x76, 0xd2, 0x37, 0xc9, 0xa9, 0x5d, 0x21, 0xb1, 0xab, 0xf5, 0x92, 0x91, |
| 2210 | 0x92, 0xd2, 0x22, 0x67, 0x2b, 0x73, 0xb1, 0x65, 0x80, 0x42, 0x49, 0x76, | 2193 | 0x15, 0x75, 0xc5, 0x61, 0x24, 0x26, 0x72, 0x1b, 0xb7, 0xa0, 0xf9, 0x23, |
| 2211 | 0xb6, 0xd1, 0x62, 0xda, 0xbd, 0x74, 0x45, 0x1c, 0x0b, 0x8a, 0xe7, 0xe5, | 2194 | 0xaa, 0xc1, 0x4a, 0xe3, 0x9f, 0xd8, 0xf5, 0x43, 0x64, 0x31, 0xb2, 0xad, |
| 2212 | 0xa1, 0x0f, 0x69, 0x17, 0x60, 0xed, 0xd0, 0x61, 0x86, 0xe2, 0xda, 0x79, | 2195 | 0xfa, 0xa5, 0x80, 0xd3, 0x1f, 0xc0, 0x28, 0x8c, 0x56, 0x90, 0x6b, 0xd9, |
| 2213 | 0x28, 0xb6, 0x6c, 0x40, 0x96, 0x6c, 0x71, 0x73, 0xf7, 0xfb, 0x9d, 0x7b, | 2196 | 0x68, 0x81, 0x42, 0x6d, 0x51, 0xd4, 0x6d, 0x64, 0x4d, 0xbf, 0xef, 0xce, |
| 2214 | 0xaf, 0x4c, 0x2b, 0x1a, 0x9a, 0x87, 0x3d, 0xde, 0x03, 0x08, 0xe7, 0x9e, | 2197 | 0x0c, 0xb9, 0x22, 0x94, 0xc6, 0x2f, 0x7d, 0x9b, 0x0b, 0x2c, 0xee, 0xdc, |
| 2215 | 0x73, 0xbe, 0xf3, 0x9d, 0xef, 0xfb, 0xce, 0xf7, 0xf7, 0xd0, 0xfe, 0xc3, | 2198 | 0x3b, 0xe7, 0x9e, 0x7b, 0xce, 0xb9, 0xe7, 0xf7, 0x0e, 0xf9, 0x44, 0x9b, |
| 2216 | 0x76, 0x69, 0x13, 0xaf, 0x75, 0xe0, 0x2f, 0x75, 0xec, 0x99, 0xe3, 0x63, | 2199 | 0xb4, 0x4a, 0xd0, 0x36, 0xe1, 0x97, 0x3d, 0x70, 0xe8, 0xb1, 0xc1, 0x5d, |
| 2217 | 0x0f, 0xa5, 0x1e, 0xe2, 0x38, 0xa4, 0xc2, 0x61, 0xf6, 0x86, 0x04, 0x2d, | 2200 | 0xbb, 0x77, 0xe1, 0x71, 0x77, 0xcc, 0x6c, 0x36, 0x38, 0xaf, 0x49, 0xd4, |
| 2218 | 0x68, 0x41, 0x0b, 0x5a, 0xd0, 0x82, 0x16, 0xb4, 0xa0, 0x05, 0x2d, 0x68, | 2201 | 0xa2, 0x16, 0xb5, 0xa8, 0x45, 0x2d, 0x6a, 0x51, 0x8b, 0x5a, 0xd4, 0xa2, |
| 2219 | 0x41, 0x0b, 0x5a, 0xd0, 0x82, 0x16, 0xb4, 0xa0, 0x05, 0x2d, 0x68, 0x41, | 2202 | 0x16, 0xb5, 0xa8, 0x45, 0x2d, 0x6a, 0x51, 0x8b, 0x5a, 0xd4, 0xa2, 0x16, |
| 2220 | 0x0b, 0x5a, 0xd0, 0x82, 0x16, 0xb4, 0xa0, 0x05, 0x2d, 0x68, 0x41, 0x0b, | 2203 | 0xb5, 0xa8, 0x45, 0x2d, 0x6a, 0x51, 0x8b, 0x5a, 0xd4, 0xa2, 0x16, 0xb5, |
| 2221 | 0x5a, 0xd0, 0x82, 0x16, 0xb4, 0xa0, 0x05, 0x2d, 0x68, 0x41, 0x0b, 0x5a, | 2204 | 0xa8, 0x45, 0x2d, 0x6a, 0x51, 0x8b, 0x5a, 0xd4, 0xa2, 0x16, 0xb5, 0xa8, |
| 2222 | 0xd0, 0x82, 0x16, 0xb4, 0xa0, 0x05, 0x2d, 0x68, 0x41, 0x0b, 0x5a, 0xd0, | 2205 | 0x45, 0x2d, 0x6a, 0x51, 0x8b, 0x5a, 0xd4, 0xa2, 0x16, 0xb5, 0xa8, 0x45, |
| 2223 | 0x82, 0x16, 0xb4, 0xa0, 0x05, 0xed, 0xff, 0xb3, 0x85, 0x44, 0x4c, 0xf6, | 2206 | 0x2d, 0x6a, 0x51, 0x8b, 0x5a, 0xd4, 0xfe, 0x3f, 0x5a, 0x4c, 0xc4, 0x64, |
| 2224 | 0x1d, 0xde, 0x9f, 0x44, 0x54, 0x3a, 0x7e, 0x3c, 0x6b, 0x49, 0x24, 0x94, | 2207 | 0xbf, 0x29, 0xf8, 0x49, 0x5c, 0xcf, 0xa5, 0x0e, 0x16, 0x2c, 0x89, 0xc7, |
| 2225 | 0xbe, 0xf2, 0xf4, 0x8c, 0x25, 0x92, 0xa9, 0x0d, 0xc7, 0x73, 0xf2, 0x0b, | 2208 | 0x72, 0x6f, 0x3f, 0x3e, 0x6e, 0x89, 0xe4, 0xeb, 0xfd, 0xa9, 0x11, 0xf9, |
| 2226 | 0xa7, 0x10, 0x0d, 0x0b, 0xe7, 0xef, 0x4b, 0xdf, 0x3a, 0x79, 0xe9, 0x91, | 2209 | 0xc4, 0xab, 0x24, 0x0c, 0xe1, 0xfc, 0x67, 0x72, 0xd7, 0x0f, 0x9f, 0xbf, |
| 2227 | 0xc4, 0x7b, 0x4b, 0x21, 0x89, 0x98, 0xe9, 0xb7, 0x46, 0xcd, 0x41, 0x89, | 2210 | 0x2b, 0x7d, 0x6d, 0x2e, 0x26, 0x71, 0x33, 0xf7, 0xee, 0xa0, 0xb9, 0x53, |
| 2228 | 0xf4, 0x62, 0xcf, 0x4b, 0x43, 0x97, 0xbb, 0xa4, 0xd3, 0xc7, 0x25, 0x52, | 2211 | 0xe2, 0xdd, 0x58, 0xf3, 0x5c, 0xdf, 0xc4, 0x66, 0x69, 0x0f, 0x71, 0x79, |
| 2229 | 0x2d, 0x25, 0xec, 0xfd, 0x32, 0x6c, 0x6e, 0x48, 0x58, 0x32, 0x38, 0xe3, | 2212 | 0xde, 0x92, 0xed, 0xc9, 0x25, 0xbb, 0xa2, 0x8d, 0xf4, 0xbd, 0xa6, 0x15, |
| 2230 | 0x7c, 0x4d, 0xa4, 0x58, 0x32, 0x88, 0x43, 0x8a, 0xb5, 0x88, 0x5c, 0x0b, | 2213 | 0x9c, 0x1b, 0x5e, 0xde, 0xd0, 0x45, 0x07, 0xbe, 0x89, 0x7a, 0x5c, 0x1e, |
| 2231 | 0x11, 0xea, 0x7b, 0x46, 0xb6, 0xfc, 0xb1, 0x93, 0x09, 0xe3, 0x5c, 0x0b, | 2214 | 0x59, 0x6c, 0x95, 0x47, 0xe7, 0x36, 0x4a, 0x79, 0x4e, 0x4c, 0x3d, 0x97, |
| 2232 | 0xdf, 0x75, 0x7f, 0x3e, 0x22, 0x2a, 0x9d, 0x48, 0x66, 0x43, 0x93, 0x52, | 2215 | 0x94, 0x6f, 0x61, 0xee, 0x72, 0x0c, 0x70, 0xae, 0x94, 0x62, 0xb9, 0x8f, |
| 2233 | 0x5d, 0x74, 0x9c, 0x39, 0xfb, 0x5e, 0xe0, 0xe8, 0x91, 0x39, 0xcb, 0x1d, | 2216 | 0xef, 0x2d, 0xd7, 0x08, 0x2f, 0xba, 0x9e, 0x5b, 0xb9, 0x77, 0xa2, 0xfe, |
| 2234 | 0x67, 0xed, 0x07, 0xcd, 0x09, 0xb9, 0x1b, 0x73, 0x21, 0x51, 0xd6, 0x3d, | 2217 | 0xe6, 0xbd, 0xe5, 0x3a, 0xe1, 0x08, 0x83, 0x77, 0xf5, 0x8f, 0xbc, 0xf3, |
| 2235 | 0xf8, 0x8b, 0x1b, 0xb9, 0xb3, 0xdf, 0x32, 0xb2, 0xcb, 0xed, 0x52, 0x2c, | 2218 | 0x7d, 0x09, 0xb9, 0xe0, 0x9a, 0xf2, 0x82, 0xfb, 0x32, 0xf6, 0x4c, 0x57, |
| 2236 | 0x3b, 0x32, 0x63, 0x4b, 0x26, 0x6b, 0xb7, 0x62, 0xfd, 0x63, 0x67, 0x66, | 2219 | 0x2a, 0xd2, 0x24, 0xe5, 0x93, 0x37, 0xbc, 0x98, 0x95, 0x4e, 0x61, 0x13, |
| 2237 | 0x6b, 0xcf, 0xb0, 0x99, 0x93, 0x26, 0xc9, 0x44, 0x63, 0x80, 0x59, 0x34, | 2220 | 0x73, 0x44, 0xf0, 0xde, 0xc1, 0x7b, 0x07, 0xf3, 0x0b, 0x3f, 0xdf, 0x2c, |
| 2238 | 0x72, 0x17, 0xfe, 0xae, 0x5d, 0xda, 0x40, 0x4f, 0x8a, 0xe3, 0x8f, 0x9d, | 2221 | 0xad, 0x49, 0x39, 0xdf, 0xc7, 0x75, 0x5c, 0xc3, 0xb5, 0x8b, 0xed, 0xfe, |
| 2239 | 0x90, 0x65, 0x61, 0x9d, 0xe7, 0x63, 0x5c, 0x27, 0x5e, 0x7e, 0x13, 0xe7, | 2222 | 0x3a, 0xc1, 0xba, 0xa2, 0xc4, 0x2c, 0x4f, 0x0a, 0xb6, 0x21, 0x23, 0x09, |
| 2240 | 0x35, 0xe7, 0xd2, 0x50, 0x4c, 0xbe, 0x5b, 0x8f, 0xca, 0x77, 0xea, 0xa6, | 2223 | 0xd1, 0x74, 0xab, 0x02, 0x3a, 0x7e, 0xd1, 0x26, 0xad, 0xc4, 0x55, 0xd1, |
| 2241 | 0xbc, 0x5a, 0xef, 0x95, 0xcb, 0x75, 0xc7, 0xf9, 0x8e, 0xed, 0x38, 0x6f, | 2224 | 0xf2, 0x2e, 0xfb, 0x10, 0xdf, 0x53, 0x1d, 0x3e, 0xae, 0x67, 0x81, 0xab, |
| 2242 | 0xe1, 0xef, 0x3f, 0xed, 0x2d, 0x1e, 0xd0, 0x0a, 0xc6, 0x44, 0xfd, 0x2f, | 2225 | 0x24, 0xaf, 0xbb, 0x0f, 0xcb, 0x5f, 0xb8, 0x63, 0xf2, 0x92, 0x3b, 0x01, |
| 2243 | 0xda, 0xa5, 0x33, 0x11, 0x17, 0xd5, 0x2e, 0xb3, 0xe5, 0x98, 0xcc, 0x95, | 2226 | 0x9c, 0x0f, 0xc9, 0xab, 0xee, 0x7e, 0x79, 0xc5, 0x2d, 0xca, 0xcf, 0xdc, |
| 2244 | 0x4b, 0xc6, 0x13, 0x17, 0x16, 0x8c, 0xa9, 0x0b, 0x15, 0x9c, 0x19, 0xc6, | 2227 | 0x7d, 0xf2, 0xb2, 0x3b, 0x2a, 0x2f, 0xba, 0x79, 0xec, 0x97, 0xd1, 0x8a, |
| 2245 | 0x9c, 0x14, 0x8a, 0xf6, 0x2b, 0x46, 0xae, 0x3e, 0x6f, 0x1c, 0xba, 0xd0, | 2228 | 0xce, 0xdd, 0x32, 0x7e, 0x92, 0x34, 0xa6, 0xaf, 0x41, 0x36, 0xf2, 0x98, |
| 2246 | 0x09, 0x1a, 0x79, 0xfe, 0x1e, 0x23, 0x7b, 0xf6, 0x96, 0x64, 0x6d, 0xca, | 2229 | 0xdd, 0x67, 0xea, 0xa2, 0x61, 0xcf, 0xf4, 0x6b, 0x22, 0x8f, 0x4a, 0x3e, |
| 2247 | 0x38, 0x61, 0x7e, 0x0d, 0x62, 0xcf, 0x96, 0x48, 0x73, 0xb3, 0x47, 0xaf, | 2230 | 0x31, 0x2c, 0x73, 0x6e, 0x97, 0x56, 0x38, 0xd9, 0xa9, 0x8d, 0x9c, 0x24, |
| 2248 | 0xe3, 0xa8, 0xb4, 0x73, 0x32, 0x9b, 0xb2, 0xcc, 0xa2, 0x90, 0x3e, 0x3d, | 2231 | 0x2d, 0x9e, 0x8c, 0xdb, 0xe9, 0x54, 0x21, 0x96, 0x36, 0x47, 0x62, 0x92, |
| 2249 | 0x77, 0xd9, 0xa5, 0xf9, 0xbc, 0x91, 0xbd, 0xd0, 0x6e, 0xe4, 0xce, 0x85, | 2232 | 0xdf, 0x03, 0xb9, 0x55, 0x9d, 0xa4, 0xe4, 0x4d, 0xc9, 0x1f, 0xb5, 0x0c, |
| 2250 | 0x41, 0x87, 0xf4, 0x86, 0x84, 0xfb, 0x06, 0x62, 0x79, 0xa9, 0xe1, 0x0c, | 2233 | 0xc8, 0x53, 0x93, 0x58, 0x8e, 0x7c, 0x6e, 0xe1, 0x1c, 0x5a, 0x9b, 0x2c, |
| 2251 | 0x31, 0x55, 0x9a, 0x72, 0x05, 0xcd, 0xa0, 0xe5, 0xbb, 0x65, 0xf0, 0x50, | 2234 | 0xd4, 0x6c, 0x29, 0x3b, 0xf3, 0x5a, 0x39, 0xa1, 0x51, 0x04, 0x18, 0x0f, |
| 2252 | 0x06, 0x0f, 0x65, 0xf2, 0x16, 0x97, 0x4b, 0x43, 0x3e, 0x6f, 0x8e, 0xf3, | 2235 | 0x60, 0xfc, 0x67, 0xc1, 0xf8, 0x4b, 0x52, 0x3e, 0x25, 0xf9, 0xc9, 0x59, |
| 2253 | 0x23, 0x9b, 0xb4, 0x27, 0xe2, 0x19, 0xe5, 0xf3, 0xe9, 0x38, 0xff, 0x61, | 2236 | 0xcf, 0x2b, 0xd8, 0x7f, 0x1c, 0xcc, 0x0d, 0x63, 0x4e, 0x97, 0xd8, 0x8f, |
| 2254 | 0x93, 0x57, 0xf2, 0xe3, 0x38, 0xaf, 0xda, 0x31, 0xd0, 0xee, 0x5c, 0x56, | 2237 | 0x38, 0x37, 0x1b, 0xcc, 0x51, 0x1e, 0x9e, 0x8c, 0xd8, 0x14, 0x23, 0xe8, |
| 2255 | 0x56, 0x09, 0xbc, 0x58, 0xc0, 0x4f, 0x59, 0x2f, 0x80, 0x87, 0x79, 0xf0, | 2238 | 0x35, 0x8b, 0xe8, 0x9b, 0xd1, 0x73, 0x8f, 0x8d, 0x9b, 0xfc, 0xff, 0x03, |
| 2256 | 0x77, 0x1e, 0xbc, 0x55, 0x40, 0xc7, 0x2f, 0x3b, 0xaf, 0x60, 0xe4, 0x86, | 2239 | 0xe2, 0xf9, 0x26, 0xf0, 0x6c, 0x83, 0x66, 0x89, 0x7f, 0x36, 0x77, 0xf4, |
| 2257 | 0xb6, 0xe4, 0x15, 0xa7, 0x8c, 0xf3, 0x2b, 0x0a, 0xb2, 0xde, 0x25, 0xf9, | 2240 | 0xe0, 0x3f, 0xf4, 0xad, 0x8d, 0xf5, 0xdc, 0x7b, 0x52, 0xa8, 0x69, 0x4a, |
| 2258 | 0x25, 0x53, 0xa6, 0x57, 0xfc, 0xfd, 0xbe, 0x1e, 0x1c, 0x93, 0x83, 0xe5, | 2241 | 0x57, 0x34, 0x3c, 0xf7, 0xd4, 0x9f, 0xea, 0xf4, 0xf5, 0xc2, 0x69, 0x97, |
| 2259 | 0x1e, 0xc8, 0x86, 0xb2, 0x4c, 0xd8, 0x22, 0x0e, 0x64, 0x54, 0x4c, 0x2a, | 2242 | 0x56, 0xc8, 0xc9, 0x21, 0xfd, 0x29, 0xd0, 0xbf, 0x49, 0xb6, 0xfc, 0x90, |
| 2260 | 0x11, 0x23, 0x6f, 0x9f, 0xd4, 0xf7, 0xbf, 0x62, 0x49, 0x26, 0x6f, 0x53, | 2243 | 0x3c, 0xf4, 0xa7, 0x74, 0xc9, 0xa7, 0x0d, 0xb1, 0x65, 0xd1, 0x35, 0xb4, |
| 2261 | 0x8e, 0x12, 0xcf, 0xdb, 0x85, 0x58, 0x18, 0xfa, 0xb6, 0x62, 0x15, 0xcc, | 2244 | 0x11, 0x27, 0x2f, 0x7a, 0xce, 0x4a, 0x96, 0x45, 0x97, 0x52, 0x22, 0x2f, |
| 2262 | 0xb0, 0x50, 0x8e, 0x89, 0xd8, 0x1f, 0x43, 0x96, 0x47, 0x4b, 0x92, 0xf9, | 2245 | 0xcf, 0x64, 0xd3, 0xc3, 0x15, 0x49, 0x49, 0x79, 0xc8, 0x96, 0x65, 0x17, |
| 2263 | 0x52, 0xc9, 0x97, 0xb1, 0x2b, 0xdf, 0xc7, 0x4b, 0x5f, 0xec, 0x90, 0x36, | 2246 | 0x90, 0x89, 0x8a, 0x5c, 0xcd, 0xa6, 0xed, 0xcb, 0xb2, 0x51, 0x56, 0x4c, |
| 2264 | 0xf5, 0x99, 0x26, 0xf9, 0x3d, 0xec, 0x25, 0xee, 0x3b, 0xf6, 0x62, 0x9f, | 2247 | 0x5b, 0x4e, 0xbb, 0x71, 0x79, 0xeb, 0xe4, 0x3e, 0xf9, 0x96, 0xc3, 0x73, |
| 2265 | 0x0b, 0xe7, 0xee, 0x4d, 0x3c, 0x29, 0x42, 0xd8, 0x62, 0x7f, 0x93, 0xb6, | 2248 | 0x92, 0xfe, 0x26, 0x79, 0x5a, 0x96, 0xb2, 0x4f, 0x5f, 0x5b, 0xb2, 0x8f, |
| 2266 | 0x11, 0x31, 0xb2, 0x56, 0x21, 0x16, 0x02, 0x5c, 0x5e, 0x8a, 0xa3, 0xde, | 2249 | 0xb7, 0x49, 0x3b, 0x75, 0xb0, 0xd6, 0xee, 0xd3, 0xfd, 0x15, 0xf0, 0x96, |
| 2267 | 0x5c, 0x53, 0xd6, 0xba, 0x15, 0x9a, 0xb3, 0x13, 0xf1, 0xa2, 0xdc, 0x0a, | 2250 | 0x87, 0x6c, 0xdb, 0x21, 0x33, 0x43, 0xf1, 0x55, 0x78, 0xb0, 0x13, 0x3d, |
| 2268 | 0x5d, 0xb5, 0xf5, 0x5c, 0x6b, 0xd6, 0x72, 0x64, 0x15, 0xd8, 0x9f, 0x83, | 2251 | 0xd7, 0xfd, 0xfd, 0x16, 0xe8, 0x83, 0x2d, 0x5a, 0x48, 0x63, 0x93, 0x14, |
| 2269 | 0x3d, 0x6c, 0x80, 0xa3, 0xdf, 0x2d, 0xe9, 0xf9, 0x0e, 0xec, 0x4f, 0x36, | 2252 | 0xba, 0xb8, 0xe6, 0x25, 0xe0, 0xc0, 0xfb, 0x55, 0xda, 0x6f, 0xd3, 0x0a, |
| 2270 | 0x01, 0x67, 0x9b, 0x24, 0x92, 0x55, 0xcc, 0x5f, 0x75, 0xe7, 0xbb, 0x5d, | 2253 | 0xa7, 0xda, 0xc5, 0xf8, 0xd1, 0x9d, 0x38, 0x4f, 0x43, 0x1e, 0x19, 0xf2, |
| 2271 | 0xbc, 0xc5, 0xfe, 0x36, 0x8d, 0x5b, 0xe4, 0x15, 0x77, 0xfe, 0x2e, 0x17, | 2254 | 0xbc, 0xaf, 0xdb, 0x46, 0x6a, 0x42, 0x72, 0xa4, 0x5d, 0x36, 0x1f, 0xdf, |
| 2272 | 0x77, 0xf1, 0x01, 0xcc, 0x03, 0xff, 0xe0, 0xe4, 0x90, 0xa1, 0xe7, 0xf7, | 2255 | 0x2a, 0x73, 0x66, 0x5c, 0x12, 0xc7, 0xc3, 0xbd, 0x5a, 0x82, 0xf3, 0xf9, |
| 2273 | 0xd2, 0x9e, 0x7e, 0xa7, 0x74, 0x2b, 0xb4, 0x6a, 0x3b, 0x92, 0x1b, 0x1d, | 2256 | 0x32, 0xf1, 0xa7, 0x52, 0xfa, 0xa6, 0x60, 0x1c, 0xd2, 0x34, 0x8a, 0x33, |
| 2274 | 0x9c, 0x1c, 0x34, 0x5c, 0x7c, 0xa7, 0xdc, 0x7d, 0xf7, 0xb9, 0xf8, 0x06, | 2257 | 0xea, 0x35, 0x7b, 0xf4, 0x21, 0x2d, 0xaf, 0xfe, 0x8f, 0x6a, 0x2c, 0x18, |
| 2275 | 0x27, 0x93, 0x86, 0x8b, 0x6f, 0xa5, 0xa4, 0xf7, 0x4a, 0xbe, 0x44, 0xd8, | 2258 | 0xef, 0xd2, 0xbe, 0x6a, 0x74, 0x89, 0x61, 0xcd, 0x43, 0xae, 0x86, 0x5c, |
| 2276 | 0xc1, 0x49, 0xcb, 0xb8, 0x4f, 0xa6, 0xbb, 0x07, 0x27, 0xfb, 0x0c, 0xf5, | 2259 | 0x74, 0xc2, 0xf9, 0xb8, 0xf8, 0x70, 0x94, 0xb3, 0x0c, 0xae, 0xc9, 0x59, |
| 2277 | 0x99, 0x5d, 0x2e, 0x1f, 0x09, 0x9f, 0x86, 0x5d, 0x9a, 0x06, 0x9e, 0xab, | 2260 | 0x06, 0x7b, 0xea, 0x4f, 0x07, 0x38, 0xf3, 0x01, 0xec, 0x06, 0xc9, 0x27, |
| 2278 | 0xe7, 0x07, 0xb2, 0x56, 0xf1, 0x81, 0x5d, 0xfa, 0x7c, 0x9e, 0xa9, 0xe7, | 2261 | 0xdb, 0x78, 0xa6, 0x01, 0xec, 0x75, 0xf9, 0xce, 0x50, 0xfa, 0x0c, 0xff, |
| 2279 | 0x1e, 0x20, 0x5d, 0x3c, 0x7b, 0x66, 0xf4, 0x8e, 0x73, 0x7f, 0xe5, 0xb6, | 2262 | 0x57, 0x6b, 0x6d, 0x0d, 0xdf, 0xdb, 0x32, 0xef, 0xaa, 0x35, 0xc9, 0xfb, |
| 2280 | 0x7c, 0x76, 0x3a, 0x93, 0xe7, 0x49, 0x24, 0x9c, 0x0e, 0x8f, 0xce, 0x95, | 2263 | 0x70, 0xb6, 0xa5, 0xe4, 0x1d, 0xe6, 0x82, 0x1e, 0xd3, 0xf2, 0x09, 0xe2, |
| 2281 | 0x8e, 0x49, 0xb6, 0x1c, 0x97, 0xd9, 0x91, 0x56, 0x99, 0x36, 0xfb, 0xa7, | 2264 | 0x6a, 0x96, 0xc7, 0x13, 0xbd, 0x18, 0x6b, 0x52, 0xfe, 0x12, 0xf5, 0xf5, |
| 2282 | 0x0f, 0x0a, 0x7d, 0x4f, 0x64, 0x74, 0xc6, 0xbb, 0xc3, 0x9c, 0x18, 0x32, | 2265 | 0x13, 0xf1, 0xe7, 0x39, 0x97, 0x3e, 0xda, 0xab, 0x1f, 0x03, 0x7d, 0x94, |
| 2283 | 0x0b, 0x1e, 0x0f, 0xd6, 0x24, 0x62, 0x00, 0xbe, 0xbf, 0x16, 0x96, 0xe7, | 2266 | 0x41, 0x3a, 0x29, 0x10, 0x7e, 0x79, 0xe8, 0x36, 0xf0, 0x67, 0xa2, 0x0f, |
| 2284 | 0xeb, 0x86, 0x34, 0x6b, 0xfb, 0x4c, 0x98, 0xeb, 0xd0, 0xc3, 0x67, 0xcb, | 2267 | 0xf9, 0xdf, 0x2c, 0xf9, 0x22, 0xe9, 0x57, 0x76, 0x0a, 0x39, 0x27, 0xb1, |
| 2285 | 0xd4, 0x63, 0xea, 0xac, 0x64, 0xaa, 0x5a, 0x67, 0x7d, 0x7b, 0x6d, 0xe3, | 2268 | 0xdf, 0xdd, 0xb0, 0xc9, 0xf5, 0xf6, 0x0a, 0x1b, 0x6d, 0xa7, 0xad, 0x7e, |
| 2286 | 0xdd, 0x16, 0x0a, 0x02, 0x73, 0x4c, 0x5b, 0x66, 0x55, 0x5a, 0x24, 0x33, | 2269 | 0x11, 0x3c, 0xa7, 0x33, 0x22, 0x16, 0xe4, 0x95, 0x94, 0x66, 0x6b, 0x1a, |
| 2287 | 0x25, 0x85, 0xaa, 0xbd, 0x65, 0x3f, 0xb1, 0x65, 0xd9, 0x80, 0x1e, 0x88, | 2270 | 0x3c, 0x51, 0x2f, 0xb7, 0x61, 0x7e, 0xc3, 0xc7, 0x79, 0xc5, 0x7a, 0x38, |
| 2288 | 0x99, 0x4d, 0x71, 0x9e, 0xf0, 0x0d, 0xb0, 0xa6, 0x6b, 0x7b, 0x21, 0xd8, | 2271 | 0xf7, 0x41, 0x20, 0xcb, 0x7d, 0x32, 0xe1, 0xec, 0x57, 0x3c, 0x57, 0xf5, |
| 2289 | 0xde, 0x4c, 0x8a, 0xb0, 0x52, 0xd0, 0xfe, 0xa2, 0x0e, 0x7d, 0xac, 0xdf, | 2272 | 0xcb, 0x92, 0xef, 0xee, 0x35, 0xa7, 0x40, 0x6f, 0xc1, 0x48, 0xcf, 0x55, |
| 2290 | 0xd7, 0xe1, 0xfa, 0xbb, 0x08, 0x6c, 0xb4, 0x1d, 0x76, 0xfe, 0x19, 0xd8, | 2273 | 0x24, 0x29, 0x0b, 0xf0, 0x13, 0x2f, 0xc2, 0xe6, 0x5f, 0x71, 0x53, 0xb0, |
| 2291 | 0x60, 0xaf, 0x91, 0x3d, 0xe7, 0x38, 0xf0, 0x3f, 0x51, 0x25, 0xb4, 0x41, | 2274 | 0xaf, 0xbc, 0x3c, 0xea, 0xe4, 0x64, 0xe2, 0x14, 0x6d, 0x2c, 0x9d, 0x29, |
| 2292 | 0xd8, 0x7b, 0x9d, 0x6b, 0xed, 0x98, 0x17, 0x73, 0xd6, 0xee, 0x06, 0x8f, | 2275 | 0xc4, 0x72, 0x32, 0xef, 0xa4, 0x33, 0x0b, 0xd0, 0xbd, 0x05, 0xc7, 0xf3, |
| 2293 | 0x8e, 0x33, 0x69, 0xc7, 0xa5, 0x68, 0x77, 0x61, 0x5f, 0x93, 0xf4, 0x58, | 2276 | 0xa6, 0xec, 0xfe, 0xd4, 0x28, 0x30, 0x5e, 0x74, 0x76, 0x24, 0x27, 0x20, |
| 2294 | 0xd4, 0x79, 0xda, 0xf5, 0x2e, 0x9c, 0x67, 0x70, 0xdc, 0x89, 0xf3, 0x3a, | 2277 | 0xc8, 0x25, 0x2b, 0x25, 0x4b, 0x6e, 0x06, 0x3a, 0x86, 0xf7, 0xae, 0x85, |
| 2295 | 0x30, 0x17, 0x9b, 0xa5, 0x2d, 0xa7, 0xe8, 0xb7, 0x5c, 0x1f, 0x2a, 0x72, | 2278 | 0x7e, 0x00, 0x3a, 0x9e, 0x85, 0x7d, 0x93, 0x16, 0x53, 0x16, 0xfb, 0x20, |
| 2296 | 0x1d, 0xb4, 0x72, 0x8f, 0x86, 0x8b, 0xb4, 0xa4, 0x53, 0x72, 0xb3, 0xb4, | 2279 | 0x3b, 0x47, 0x07, 0x2e, 0x4d, 0xf2, 0xfb, 0x6f, 0x40, 0xbe, 0x21, 0xdf, |
| 2297 | 0x57, 0xae, 0x45, 0x29, 0x03, 0xe0, 0x2c, 0xc3, 0x27, 0x46, 0x0d, 0xd0, | 2280 | 0x77, 0x81, 0xb6, 0x04, 0x70, 0x92, 0xae, 0xdb, 0xa4, 0xda, 0x05, 0xf9, |
| 2298 | 0x4f, 0xba, 0xe9, 0x03, 0x77, 0x7b, 0x63, 0xe3, 0x7e, 0xf7, 0x0c, 0x31, | 2281 | 0x0d, 0x25, 0x94, 0x5d, 0x16, 0x3a, 0xb7, 0x4a, 0xe1, 0x8e, 0x66, 0xbc, |
| 2299 | 0x43, 0xe9, 0x4e, 0xc9, 0xe9, 0x39, 0x51, 0x6a, 0x74, 0x97, 0xb7, 0xde, | 2282 | 0xef, 0xc2, 0x98, 0xf2, 0x6f, 0xc1, 0x1c, 0xdf, 0xff, 0x4b, 0x60, 0x5f, |
| 2300 | 0x69, 0xec, 0x3f, 0xa7, 0xe4, 0xc0, 0xc3, 0xf0, 0x5b, 0x38, 0xeb, 0xaa, | 2283 | 0x4d, 0xeb, 0xc6, 0x57, 0xd1, 0xb7, 0xcb, 0x36, 0x8b, 0xbd, 0x89, 0xfe, |
| 2301 | 0xe5, 0x38, 0x57, 0xed, 0xf7, 0x61, 0xf7, 0x4a, 0x9a, 0xac, 0x6b, 0x9d, | 2284 | 0x9f, 0xd1, 0x77, 0xa2, 0xef, 0xc5, 0x5e, 0xe7, 0x21, 0x43, 0xca, 0x0f, |
| 2302 | 0xd2, 0x46, 0x7b, 0x36, 0x1a, 0x64, 0x18, 0x93, 0x53, 0x65, 0xee, 0x29, | 2285 | 0xcf, 0x0b, 0x5c, 0xb3, 0x3d, 0xd8, 0x97, 0x78, 0xdb, 0x81, 0x67, 0x53, |
| 2303 | 0x48, 0xd8, 0x22, 0x0c, 0xe1, 0xff, 0x05, 0x70, 0x21, 0x69, 0x81, 0x3d, | 2286 | 0xb0, 0x57, 0x3b, 0xc6, 0xad, 0xc1, 0x5e, 0x16, 0x68, 0x8e, 0x29, 0x19, |
| 2304 | 0x6e, 0xd8, 0x51, 0xd2, 0xdb, 0xe5, 0xc2, 0x77, 0xe3, 0x0c, 0xd2, 0x4e, | 2287 | 0x16, 0xac, 0xf8, 0xba, 0xb1, 0x86, 0x3e, 0x0e, 0xdc, 0x84, 0xd7, 0xe5, |
| 2305 | 0xfb, 0x73, 0xb4, 0xfd, 0x65, 0x43, 0x2a, 0x33, 0xb1, 0x08, 0x6b, 0x1a, | 2288 | 0x4a, 0x57, 0x17, 0x9e, 0xb9, 0x27, 0x61, 0xf8, 0x1e, 0xbd, 0x4b, 0xfc, |
| 2306 | 0xa1, 0xbc, 0xb3, 0xdd, 0x70, 0xff, 0x32, 0x3b, 0x54, 0x30, 0x95, 0xbe, | 2289 | 0x1c, 0xe7, 0xe5, 0x09, 0x07, 0xfe, 0x89, 0xfa, 0xe6, 0x52, 0x8e, 0xbb, |
| 2307 | 0x6f, 0x91, 0x5c, 0xe9, 0x7e, 0x99, 0xb3, 0x71, 0x9e, 0x15, 0x06, 0xcd, | 2290 | 0x65, 0x02, 0xbc, 0x8f, 0x3b, 0xe9, 0x99, 0xaa, 0xee, 0x79, 0x7a, 0xd6, |
| 2308 | 0xf4, 0x35, 0x03, 0x85, 0x90, 0x82, 0x95, 0xf5, 0x50, 0x56, 0x3e, 0xad, | 2291 | 0x30, 0xab, 0x92, 0x86, 0x1d, 0x8f, 0xc9, 0x38, 0xe4, 0x77, 0xda, 0x89, |
| 2309 | 0xff, 0x8c, 0xf3, 0x0a, 0x46, 0xd8, 0xe2, 0x19, 0xbf, 0xe5, 0xc9, 0x87, | 2292 | 0xcb, 0x45, 0x65, 0x7b, 0xe4, 0xe9, 0x21, 0xc8, 0x05, 0xf1, 0xa4, 0x8b, |
| 2310 | 0xba, 0x67, 0x4b, 0xb6, 0xd4, 0xce, 0x31, 0xe8, 0x68, 0xd3, 0x74, 0x84, | 2293 | 0xf6, 0x49, 0x9b, 0x82, 0xfc, 0x8a, 0xa6, 0x5c, 0xca, 0xd2, 0x96, 0xb3, |
| 2311 | 0xd2, 0xfa, 0xee, 0x0c, 0x95, 0xf6, 0x63, 0x00, 0x41, 0xef, 0xc0, 0x03, | 2294 | 0xb2, 0xbc, 0x6a, 0xcb, 0x15, 0xd8, 0x32, 0xed, 0xb8, 0x02, 0x7b, 0xf6, |
| 2312 | 0x3e, 0xb8, 0xd7, 0xc2, 0xde, 0x08, 0x68, 0xec, 0x68, 0xa0, 0xbf, 0x8d, | 2295 | 0xf5, 0xfa, 0x41, 0xd9, 0x06, 0xbd, 0x4e, 0x62, 0x3f, 0xea, 0xf5, 0xb3, |
| 2313 | 0xf0, 0x90, 0x55, 0xc4, 0x3b, 0x43, 0xf3, 0x6d, 0xb8, 0x7c, 0xfb, 0xb2, | 2296 | 0xd0, 0x6b, 0xc8, 0xd4, 0x86, 0xae, 0x9b, 0xd4, 0x89, 0x6f, 0xc3, 0xa7, |
| 2314 | 0x7a, 0x1d, 0xb2, 0xfa, 0xc8, 0x39, 0x30, 0x46, 0x1c, 0x29, 0xe0, 0x80, | 2297 | 0x81, 0xdf, 0x44, 0xf0, 0xbc, 0xfc, 0x5d, 0x29, 0x9c, 0x6a, 0x05, 0xdd, |
| 2315 | 0xdc, 0x4d, 0xfa, 0x2c, 0xfa, 0x29, 0x73, 0x0b, 0x17, 0x6c, 0x41, 0x85, | 2298 | 0x7b, 0xdb, 0x29, 0xb3, 0xf2, 0x32, 0x7f, 0xa1, 0x2e, 0x3e, 0x05, 0xf9, |
| 2316 | 0xd2, 0xed, 0x92, 0x33, 0x75, 0x1c, 0x00, 0xec, 0xb8, 0x68, 0x3f, 0x6f, | 2299 | 0xc1, 0x8f, 0x2a, 0x1d, 0x04, 0x6f, 0xd9, 0x3d, 0x80, 0x19, 0xc6, 0x39, |
| 2317 | 0x91, 0x47, 0x6f, 0x6c, 0x25, 0xb4, 0xde, 0xe4, 0x2b, 0x8c, 0x05, 0x45, | 2300 | 0xb7, 0x02, 0x3f, 0x69, 0xbc, 0x15, 0x1c, 0xdf, 0x83, 0xee, 0x2c, 0xf5, |
| 2318 | 0xd0, 0xb6, 0x9e, 0x50, 0x9a, 0xb5, 0x76, 0xc8, 0x5c, 0x22, 0x4d, 0xe9, | 2301 | 0x15, 0xf3, 0x0b, 0xe1, 0x79, 0xb7, 0xa9, 0x3d, 0xcb, 0x43, 0xad, 0x01, |
| 2319 | 0xb7, 0x64, 0xb5, 0xa4, 0xf6, 0x34, 0x4b, 0x97, 0x4c, 0x41, 0x46, 0xd5, | 2302 | 0x7f, 0x94, 0x03, 0xf5, 0x3e, 0x09, 0xbd, 0xd5, 0x64, 0x5c, 0xe9, 0x6e, |
| 2320 | 0x71, 0xc4, 0xb0, 0x91, 0x76, 0x09, 0x3d, 0xc4, 0x58, 0x10, 0x03, 0xad, | 2303 | 0x5e, 0xc9, 0x61, 0xde, 0xa1, 0xfe, 0x02, 0x87, 0x4d, 0x19, 0x98, 0x72, |
| 2321 | 0xeb, 0x09, 0x53, 0x6e, 0x39, 0x6a, 0x10, 0xfb, 0x47, 0x70, 0x0f, 0x87, | 2304 | 0xbf, 0x82, 0x4f, 0xae, 0xd9, 0x77, 0x37, 0x69, 0xe7, 0x78, 0x83, 0xf4, |
| 2322 | 0x79, 0xa7, 0xca, 0x83, 0x23, 0x4c, 0x88, 0x32, 0xef, 0x69, 0x16, 0xe2, | 2305 | 0x28, 0x1f, 0xd4, 0x1d, 0xe8, 0x76, 0x13, 0x6c, 0x9f, 0xef, 0x1e, 0x92, |
| 2323 | 0xe6, 0xda, 0x70, 0xcc, 0x14, 0xce, 0x23, 0x5e, 0x4e, 0x71, 0x2f, 0xf9, | 2306 | 0xc7, 0xdc, 0x61, 0x9c, 0x43, 0x52, 0x0e, 0xba, 0xdd, 0xf2, 0xfb, 0xee, |
| 2324 | 0x73, 0xf7, 0x7c, 0x92, 0x3f, 0x7f, 0x9d, 0x32, 0xa3, 0xec, 0xa0, 0x63, | 2307 | 0x46, 0xb9, 0xdc, 0x09, 0xba, 0x56, 0x6d, 0xec, 0x6e, 0xf9, 0x03, 0xc6, |
| 2325 | 0xa0, 0xa9, 0x1b, 0x72, 0x1b, 0x5d, 0x80, 0x4f, 0xb4, 0x1f, 0xd7, 0x3a, | 2308 | 0x3c, 0xf5, 0x0c, 0x3f, 0xa9, 0xdf, 0x05, 0x1a, 0x68, 0x4f, 0xb4, 0x2b, |
| 2326 | 0xdc, 0x37, 0x76, 0xaf, 0x5c, 0x83, 0xdd, 0xc5, 0x95, 0x18, 0x55, 0x7b, | 2309 | 0xc2, 0xc5, 0xa4, 0xa4, 0xf6, 0xfc, 0x89, 0xef, 0xdb, 0x80, 0x77, 0xae, |
| 2327 | 0xaf, 0x9e, 0x53, 0x96, 0x2f, 0x4f, 0xca, 0x60, 0xf7, 0x36, 0x19, 0x10, | 2310 | 0x93, 0xf6, 0x4b, 0xda, 0x8c, 0xc0, 0x66, 0xd3, 0x66, 0x49, 0xc8, 0x33, |
| 2328 | 0xe7, 0xce, 0x72, 0x38, 0x52, 0x21, 0x0d, 0x2e, 0x2d, 0x73, 0xd6, 0x7a, | 2311 | 0x69, 0xe5, 0x73, 0xa3, 0x2c, 0xd8, 0x37, 0xca, 0x20, 0xc4, 0x13, 0xda, |
| 2329 | 0x22, 0x2c, 0x8d, 0xf4, 0x7c, 0xec, 0x28, 0xcb, 0x2a, 0xf4, 0x29, 0xe2, | 2312 | 0xe5, 0xa8, 0xe4, 0x5d, 0xf6, 0xf4, 0x97, 0x88, 0x91, 0x0e, 0x62, 0xa4, |
| 2330 | 0x6f, 0x16, 0xb5, 0x27, 0x2c, 0x4f, 0x8c, 0x19, 0x12, 0x3f, 0xa4, 0xe4, | 2313 | 0x83, 0xd8, 0x08, 0x5b, 0x78, 0xc5, 0x41, 0x6c, 0x74, 0x10, 0x1b, 0xe1, |
| 2331 | 0xd0, 0xc3, 0xc4, 0xf9, 0x13, 0xf2, 0x38, 0x9e, 0xe1, 0xfa, 0x18, 0x75, | 2314 | 0xcf, 0x5e, 0x72, 0x10, 0x1f, 0xa1, 0x43, 0x2f, 0x38, 0x8c, 0xeb, 0xdf, |
| 2332 | 0x21, 0x8c, 0x5e, 0xf3, 0x87, 0xb9, 0x46, 0x5d, 0x7f, 0xdd, 0xd3, 0xf5, | 2315 | 0x46, 0x4c, 0x35, 0xe4, 0x99, 0x9a, 0xc8, 0x91, 0x5a, 0x1a, 0xd4, 0xa5, |
| 2333 | 0x8f, 0x9c, 0x43, 0x63, 0x61, 0x0f, 0x36, 0xd2, 0x00, 0x2b, 0xb8, 0xef, | 2316 | 0x87, 0x3f, 0x90, 0xfe, 0xcc, 0x07, 0x92, 0xb6, 0x2f, 0xe2, 0xf7, 0x96, |
| 2334 | 0x9d, 0x60, 0x09, 0xd3, 0xa8, 0x17, 0x84, 0x2d, 0xec, 0x00, 0x8b, 0xe0, | 2317 | 0xe0, 0x9d, 0xca, 0x11, 0xf0, 0xbe, 0x1e, 0xe6, 0x13, 0x38, 0x7f, 0x8b, |
| 2335 | 0xf4, 0x15, 0xda, 0x50, 0xb7, 0xe7, 0x33, 0x7c, 0x9b, 0xe2, 0x39, 0xec, | 2318 | 0x39, 0x83, 0x3f, 0x0f, 0x97, 0x88, 0xb8, 0x41, 0x9b, 0x1e, 0x93, 0xf9, |
| 2336 | 0x77, 0xb2, 0x3f, 0xee, 0xe3, 0x7e, 0xc2, 0x6f, 0x8f, 0xa7, 0xb8, 0x06, | 2319 | 0x59, 0xda, 0xf2, 0xed, 0x38, 0x8b, 0x4e, 0x99, 0xb2, 0xfc, 0x71, 0xc1, |
| 2337 | 0xd9, 0x31, 0xa6, 0xa2, 0x4d, 0xe2, 0x5b, 0xc1, 0xff, 0x34, 0xc6, 0x56, | 2320 | 0xbe, 0xc3, 0x1c, 0xa5, 0xee, 0x98, 0x31, 0xd0, 0x76, 0x1b, 0x7e, 0x29, |
| 2338 | 0xce, 0x99, 0x18, 0x4f, 0xa0, 0xb7, 0x24, 0x5f, 0xa3, 0x1d, 0x71, 0x3f, | 2321 | 0xc4, 0xda, 0x3f, 0xd2, 0x0a, 0x0b, 0x71, 0xc4, 0x56, 0xc6, 0x5b, 0xc9, |
| 2339 | 0x63, 0xed, 0xbb, 0x9e, 0xef, 0x6c, 0x9f, 0x0e, 0xa7, 0xa3, 0xf0, 0x9d, | 2322 | 0xfb, 0x7a, 0x74, 0xc3, 0x1b, 0x5f, 0x5d, 0xd3, 0x0f, 0xfd, 0x86, 0xdc, |
| 2340 | 0x32, 0x55, 0x2c, 0x9d, 0x44, 0x3e, 0x24, 0x85, 0x7b, 0xd2, 0xd4, 0x8b, | 2323 | 0x13, 0x09, 0xc0, 0xcc, 0x6a, 0x23, 0xcb, 0x6f, 0xfb, 0x76, 0x92, 0xe5, |
| 2341 | 0xf6, 0x71, 0xf8, 0xc6, 0xa9, 0x62, 0x8d, 0x39, 0x11, 0xdc, 0x17, 0xf6, | 2324 | 0xf8, 0x46, 0x60, 0x7b, 0xdc, 0x1f, 0x63, 0x97, 0x78, 0xf9, 0x4c, 0x9c, |
| 2342 | 0x21, 0x3e, 0x47, 0xd4, 0x42, 0xa4, 0x70, 0x6f, 0x9a, 0x3e, 0x39, 0x2e, | 2325 | 0x97, 0x91, 0x1f, 0x24, 0x91, 0x17, 0x24, 0xe0, 0x7b, 0x98, 0x73, 0x74, |
| 2343 | 0xf1, 0xda, 0x7b, 0xc8, 0x39, 0x4c, 0xc9, 0x6a, 0x1d, 0xfb, 0xf6, 0x5e, | 2326 | 0x23, 0x3f, 0xf0, 0xbc, 0x17, 0x6d, 0xcf, 0x7b, 0x07, 0xbf, 0x7f, 0xb7, |
| 2344 | 0xd2, 0x5c, 0x44, 0xfe, 0x10, 0x4e, 0x4b, 0x58, 0xa5, 0x9b, 0x23, 0xb3, | 2327 | 0x57, 0x79, 0x40, 0xab, 0x68, 0xa3, 0x6e, 0x4a, 0x46, 0xdd, 0x9f, 0xb6, |
| 2345 | 0xa9, 0x76, 0xe4, 0x59, 0x93, 0x7b, 0xd5, 0xda, 0xc1, 0xbd, 0xa1, 0xb5, | 2328 | 0xfb, 0x72, 0x8c, 0xcb, 0xa4, 0x93, 0x90, 0x29, 0xa7, 0xa6, 0xdd, 0xb7, |
| 2346 | 0x3d, 0xd3, 0x4d, 0xe9, 0xc2, 0x5e, 0xb5, 0x20, 0xb2, 0x5c, 0x12, 0x85, | 2329 | 0x3c, 0xad, 0x15, 0x97, 0x67, 0xb0, 0xaf, 0x81, 0x39, 0xa9, 0x54, 0xed, |
| 2347 | 0x9c, 0x26, 0x76, 0x44, 0x30, 0x5e, 0xfb, 0xf2, 0x97, 0x55, 0x3a, 0x24, | 2330 | 0x33, 0xda, 0x88, 0x7b, 0x54, 0xbb, 0x7f, 0xb9, 0x5d, 0xd9, 0x79, 0xd5, |
| 2348 | 0xf9, 0xa8, 0x9c, 0x58, 0x49, 0x85, 0x99, 0x3f, 0xc6, 0xa7, 0xe4, 0x04, | 2331 | 0x61, 0xce, 0x70, 0x5d, 0xe5, 0x2e, 0x05, 0x2b, 0x6d, 0xfe, 0x2e, 0x14, |
| 2349 | 0x72, 0xc6, 0x67, 0x64, 0xb6, 0x04, 0xba, 0x34, 0xdf, 0x31, 0xf0, 0xdb, | 2332 | 0xaf, 0x50, 0x23, 0xdd, 0xcd, 0x01, 0xcd, 0xb0, 0xc3, 0x9c, 0x77, 0xb8, |
| 2350 | 0x0b, 0xdc, 0xa4, 0x3d, 0x0a, 0xdf, 0xea, 0xd2, 0x0e, 0x9a, 0x33, 0x39, | 2333 | 0x90, 0xb5, 0x60, 0x8b, 0xa4, 0x51, 0xcd, 0x5d, 0xf0, 0xe9, 0x3e, 0xad, |
| 2351 | 0xe6, 0x48, 0x29, 0xc6, 0x94, 0xf7, 0xa0, 0x27, 0xb4, 0x93, 0x9f, 0xcb, | 2334 | 0x15, 0x96, 0xdb, 0xb4, 0x91, 0x53, 0x8c, 0xc7, 0xd2, 0x1d, 0x13, 0xae, |
| 2352 | 0xaa, 0xd5, 0x2a, 0x79, 0xd7, 0x2f, 0x68, 0x3d, 0x0d, 0xa7, 0xdf, 0xf5, | 2335 | 0xdb, 0x01, 0x7b, 0xad, 0x63, 0x0f, 0xe6, 0x5b, 0x94, 0x2d, 0xe8, 0x86, |
| 2353 | 0xd6, 0xae, 0x63, 0x8d, 0xfa, 0xba, 0xab, 0xe1, 0xee, 0xbe, 0xa5, 0xf3, | 2336 | 0x0e, 0xbf, 0x04, 0x7a, 0x5e, 0x54, 0xf9, 0x0f, 0xf9, 0x4b, 0xe1, 0xac, |
| 2354 | 0x9c, 0xab, 0x36, 0xbf, 0x09, 0xfb, 0x83, 0x51, 0x17, 0xf6, 0xcd, 0xd1, | 2337 | 0x42, 0xfe, 0x3c, 0xef, 0xaf, 0xed, 0x90, 0xfe, 0x74, 0x2a, 0xaf, 0x87, |
| 2355 | 0x55, 0xeb, 0x2b, 0x5d, 0xd2, 0x86, 0x73, 0xca, 0x3c, 0x27, 0x4a, 0xdf, | 2338 | 0xfc, 0x7a, 0xde, 0xbf, 0xd9, 0xe4, 0x99, 0x3c, 0x79, 0xde, 0x0b, 0x76, |
| 2356 | 0x8a, 0xf5, 0x6b, 0x1e, 0xae, 0x9f, 0x02, 0x57, 0x3b, 0xe9, 0x46, 0x0b, | 2339 | 0x02, 0xf4, 0x7b, 0x17, 0x74, 0xab, 0x06, 0x7e, 0x18, 0xdb, 0x29, 0xf3, |
| 2357 | 0x63, 0x1d, 0xf4, 0x21, 0xdf, 0xc9, 0x6f, 0xf9, 0x18, 0xc2, 0xbe, 0xe6, | 2340 | 0x69, 0xf0, 0x71, 0x14, 0x3c, 0x9e, 0x06, 0x7f, 0x33, 0xa0, 0xe5, 0x37, |
| 2358 | 0xe1, 0xfa, 0x5e, 0x03, 0x2e, 0xae, 0xb1, 0xe7, 0x99, 0x38, 0xbb, 0x8d, | 2341 | 0xed, 0xd9, 0x98, 0x4b, 0x4a, 0x8a, 0xb2, 0x2e, 0x2f, 0x32, 0xa7, 0x64, |
| 2359 | 0xbc, 0x91, 0x1f, 0xde, 0x01, 0xef, 0x23, 0x69, 0x4c, 0xc1, 0xa7, 0x4f, | 2342 | 0x1e, 0x69, 0x4a, 0x69, 0x31, 0x5c, 0x1f, 0xea, 0xc3, 0x01, 0xd9, 0xeb, |
| 2360 | 0xd5, 0x75, 0x5e, 0x67, 0xe4, 0xca, 0xc8, 0xb7, 0xea, 0x2f, 0x82, 0x46, | 2343 | 0x74, 0x42, 0x3e, 0x94, 0xe7, 0x35, 0xd0, 0x4b, 0x9f, 0x5f, 0xcd, 0xe8, |
| 2361 | 0xe4, 0x61, 0xf5, 0x01, 0x2f, 0xd7, 0xa6, 0xad, 0xac, 0x6b, 0x9f, 0x45, | 2344 | 0x08, 0x80, 0x65, 0x1b, 0xb1, 0x5e, 0x46, 0x94, 0x2e, 0x2c, 0x5a, 0x92, |
| 2362 | 0x7f, 0x53, 0xd4, 0xf6, 0x74, 0x05, 0x63, 0x9d, 0x67, 0xe3, 0x6e, 0xae, | 2345 | 0x2f, 0xdb, 0x26, 0xed, 0x36, 0x55, 0xb6, 0x2b, 0xc8, 0x0c, 0x7c, 0x39, |
| 2363 | 0x48, 0x5f, 0xad, 0xdc, 0xe5, 0xfe, 0xbf, 0x6d, 0x53, 0x42, 0xfa, 0x3e, | 2346 | 0x8e, 0xd4, 0x0c, 0xbc, 0xe3, 0x58, 0x60, 0xf3, 0xa1, 0x6c, 0x0d, 0xd8, |
| 2364 | 0x19, 0xd7, 0xa8, 0x67, 0x77, 0xc3, 0x9f, 0x3b, 0x1f, 0x30, 0xbe, 0x4c, | 2347 | 0x5d, 0x28, 0xf3, 0x70, 0xee, 0xc1, 0x0e, 0xfa, 0xcc, 0x79, 0xf7, 0x0b, |
| 2365 | 0x31, 0xf6, 0x4c, 0x31, 0x66, 0x18, 0x9e, 0x1f, 0x8c, 0x37, 0xe0, 0x88, | 2348 | 0xc0, 0x41, 0xbc, 0xbf, 0x09, 0x47, 0x1c, 0x31, 0x84, 0x78, 0xe2, 0x72, |
| 2366 | 0x03, 0xc7, 0x79, 0x4f, 0x6f, 0x4f, 0x7b, 0xb8, 0xfc, 0xdc, 0xd3, 0xf7, | 2349 | 0xc6, 0x21, 0x3c, 0xf3, 0x8b, 0xb8, 0xb4, 0x22, 0x26, 0x6f, 0xc8, 0x89, |
| 2367 | 0xa5, 0x2f, 0xdd, 0x73, 0xe7, 0xba, 0x61, 0xba, 0xe3, 0x66, 0xed, 0x87, | 2350 | 0xf6, 0xf9, 0x1d, 0x69, 0x73, 0x31, 0x16, 0x93, 0x63, 0x09, 0xb9, 0xc3, |
| 2368 | 0x61, 0xf7, 0xa0, 0x3f, 0x3e, 0xad, 0xa0, 0x5f, 0xb9, 0x9a, 0x7b, 0x1f, | 2351 | 0x60, 0x00, 0xd8, 0xec, 0x67, 0xea, 0x85, 0x19, 0x0d, 0xba, 0xdc, 0x26, |
| 2369 | 0xb0, 0x71, 0xe8, 0x1e, 0x3f, 0xfd, 0xbb, 0x75, 0x73, 0x6f, 0x57, 0x06, | 2352 | 0x93, 0x03, 0x69, 0x73, 0x1e, 0x7b, 0xe8, 0xd8, 0xe3, 0x6b, 0x9c, 0xaf, |
| 2370 | 0xbc, 0xd3, 0x0c, 0xf9, 0xce, 0x84, 0x49, 0x4b, 0x7d, 0x12, 0xfb, 0xe5, | 2353 | 0xfd, 0x87, 0x57, 0x4a, 0xec, 0x84, 0x9d, 0x48, 0xdc, 0xc8, 0x19, 0x83, |
| 2371 | 0x18, 0x63, 0x62, 0x1e, 0x7c, 0x1c, 0x31, 0x87, 0xcd, 0x59, 0xe2, 0x8e, | 2354 | 0x53, 0xb5, 0x03, 0xc2, 0xfc, 0x6a, 0x72, 0x60, 0x03, 0xec, 0xbc, 0x77, |
| 2372 | 0x0a, 0x70, 0x22, 0x8f, 0x4c, 0xb7, 0x78, 0xf7, 0xfc, 0x7d, 0x9e, 0x0f, | 2355 | 0x78, 0xaf, 0x30, 0x97, 0x8f, 0x0f, 0x8e, 0x5b, 0x3e, 0x5d, 0x23, 0xb0, |
| 2373 | 0xdc, 0xbb, 0x38, 0x46, 0xff, 0x7d, 0x8f, 0x9e, 0x1b, 0x9d, 0x2e, 0x3d, | 2356 | 0xeb, 0x49, 0xe4, 0x79, 0x7b, 0xeb, 0xcc, 0x01, 0x8c, 0xc1, 0xde, 0xba, |
| 2374 | 0xfe, 0xfa, 0x80, 0x79, 0xe7, 0x78, 0x75, 0xaf, 0x27, 0x4f, 0x7c, 0x3f, | 2357 | 0x21, 0x47, 0x60, 0xaf, 0xcd, 0xd0, 0x9f, 0x15, 0xa5, 0xcb, 0x26, 0x64, |
| 2375 | 0xe3, 0xd1, 0xc5, 0xbb, 0x69, 0xa4, 0x89, 0xf7, 0xf2, 0x5f, 0xc0, 0xa3, | 2358 | 0x4d, 0xdf, 0x3a, 0x0c, 0xdc, 0xef, 0x40, 0x6e, 0x16, 0x62, 0x67, 0x37, |
| 2376 | 0xf3, 0x8c, 0x82, 0x4a, 0x23, 0x6f, 0x49, 0x31, 0x56, 0xc1, 0xe6, 0xc5, | 2359 | 0xf2, 0xd9, 0x0c, 0xce, 0x33, 0x85, 0xd8, 0xd7, 0xa8, 0xd7, 0x12, 0xdf, |
| 2377 | 0xc2, 0x9d, 0x24, 0xec, 0x69, 0xec, 0x7a, 0xb7, 0xc4, 0x7b, 0xbe, 0x05, | 2360 | 0x0a, 0xb8, 0x57, 0x76, 0x32, 0x2f, 0xf3, 0xbc, 0x07, 0xac, 0xf4, 0xb3, |
| 2378 | 0x1f, 0xcd, 0x7b, 0xff, 0x50, 0xe6, 0x4a, 0xfd, 0x76, 0xb3, 0x41, 0x7b, | 2361 | 0xe4, 0x65, 0xca, 0x91, 0x7c, 0xd5, 0x56, 0xbe, 0x10, 0x3a, 0x9b, 0x62, |
| 2379 | 0x4d, 0x24, 0xcf, 0xcb, 0xb0, 0x7d, 0x5e, 0xe7, 0x4f, 0x89, 0xf8, 0x29, | 2362 | 0x3e, 0x07, 0xfd, 0x83, 0x4e, 0x16, 0x39, 0x5e, 0xd5, 0xc1, 0xe4, 0xa4, |
| 2380 | 0xa1, 0x6c, 0x6f, 0xc9, 0x80, 0xce, 0x6b, 0x3e, 0x14, 0x0b, 0x72, 0x99, | 2363 | 0xcc, 0x43, 0x76, 0x62, 0x16, 0xb2, 0x84, 0x0d, 0xe1, 0x5a, 0x02, 0xdd, |
| 2381 | 0x2a, 0xc3, 0xc6, 0xc6, 0xfe, 0xcd, 0xd1, 0xf9, 0x28, 0xf2, 0xa5, 0x1b, | 2364 | 0xf6, 0xbc, 0x18, 0x74, 0x77, 0x3c, 0x4b, 0x38, 0xa9, 0x28, 0x9b, 0x83, |
| 2382 | 0x3b, 0xe0, 0x7a, 0x53, 0xe3, 0x21, 0xbe, 0x46, 0x5c, 0x86, 0xb4, 0x8c, | 2365 | 0xcc, 0x26, 0xdd, 0x5d, 0x1d, 0x7e, 0x3e, 0x09, 0x5f, 0x99, 0xe0, 0x5e, |
| 2383 | 0xf9, 0xf8, 0x2c, 0x99, 0xaf, 0xfb, 0x38, 0xc3, 0xf0, 0xc3, 0xf0, 0x01, | 2366 | 0x9f, 0x85, 0x0e, 0x77, 0x23, 0x86, 0x78, 0x1e, 0x6c, 0x38, 0xa1, 0x0b, |
| 2384 | 0x63, 0xbf, 0xe1, 0xe9, 0x0b, 0xbf, 0x7f, 0xe8, 0x30, 0x07, 0x52, 0xe9, | 2367 | 0x75, 0x18, 0xf6, 0xe2, 0xf2, 0x5d, 0x1b, 0xe6, 0xc5, 0x9c, 0x84, 0x4f, |
| 2385 | 0x3f, 0xf7, 0xe6, 0xae, 0x50, 0x06, 0x18, 0xfb, 0x72, 0x7f, 0xd1, 0xf3, | 2368 | 0x2b, 0x99, 0x9e, 0x77, 0x0f, 0x68, 0xa9, 0xda, 0x1d, 0x58, 0xd7, 0x24, |
| 2386 | 0x39, 0x05, 0x23, 0x53, 0xa7, 0x0c, 0xa8, 0x2b, 0xb8, 0x7f, 0xad, 0x9f, | 2369 | 0x08, 0x7b, 0xa6, 0xbf, 0xdf, 0x46, 0x15, 0x3b, 0x30, 0x6e, 0xc7, 0x7e, |
| 2387 | 0xb0, 0x99, 0xf2, 0x17, 0x10, 0x1f, 0xbb, 0xdd, 0xbc, 0x01, 0xb5, 0x55, | 2370 | 0x9b, 0x98, 0x7b, 0x4e, 0xd2, 0x16, 0xb2, 0xb4, 0x7d, 0x23, 0xf0, 0xe7, |
| 2388 | 0xa6, 0xce, 0xb9, 0xf5, 0x96, 0xac, 0xdd, 0xe4, 0xd9, 0xd2, 0x41, 0xcc, | 2371 | 0x6f, 0x82, 0x4e, 0xae, 0x51, 0x70, 0xf1, 0xa6, 0x5c, 0x56, 0x96, 0x6a, |
| 2389 | 0x4d, 0xe1, 0x8f, 0xb2, 0x23, 0xcc, 0x61, 0x7c, 0x67, 0x3c, 0x38, 0x19, | 2372 | 0xdb, 0x65, 0x6e, 0x3f, 0xf7, 0xe8, 0xa6, 0x1d, 0x22, 0xfe, 0xf3, 0x99, |
| 2390 | 0xcf, 0x22, 0x66, 0x65, 0x0e, 0x4f, 0x60, 0x6c, 0x78, 0x35, 0x96, 0x96, | 2373 | 0x74, 0xd3, 0x8f, 0x74, 0x06, 0x63, 0xed, 0x73, 0xfe, 0x1e, 0x62, 0x32, |
| 2391 | 0x7b, 0x05, 0x39, 0x0a, 0xe4, 0x39, 0x00, 0x7e, 0xe2, 0x32, 0x51, 0xc7, | 2374 | 0xdf, 0x1d, 0x51, 0xf4, 0x8a, 0x7e, 0xd1, 0xde, 0xe8, 0xc7, 0xa8, 0x5c, |
| 2392 | 0x9d, 0x6f, 0xf9, 0xb3, 0x2d, 0x98, 0xc2, 0x6d, 0x18, 0xd7, 0xf7, 0x4d, | 2375 | 0xbb, 0x76, 0x0f, 0x72, 0xf0, 0xbd, 0xbb, 0xa9, 0x03, 0x86, 0x5c, 0xb2, |
| 2393 | 0xd4, 0x7f, 0xec, 0xd0, 0x1f, 0xfc, 0xad, 0xb6, 0x97, 0x78, 0x43, 0xde, | 2376 | 0x3c, 0xef, 0x92, 0xdd, 0x04, 0xfe, 0x74, 0x69, 0xb2, 0x8e, 0x9b, 0xd2, |
| 2394 | 0x97, 0x31, 0x9e, 0x28, 0x4f, 0x1a, 0x87, 0xca, 0xdc, 0xa3, 0x5e, 0xea, | 2377 | 0x0a, 0x99, 0x3b, 0x5a, 0x20, 0x97, 0x36, 0x25, 0x97, 0x49, 0x15, 0xf7, |
| 2395 | 0x11, 0x2b, 0x9e, 0x55, 0xc8, 0x51, 0xc7, 0x3a, 0x71, 0xe6, 0x29, 0xe8, | 2378 | 0xde, 0xc5, 0xd9, 0x70, 0x6d, 0x45, 0xc5, 0x97, 0x82, 0x5a, 0xc7, 0x35, |
| 2396 | 0x46, 0xc1, 0x98, 0x1a, 0xea, 0x92, 0x7c, 0xb2, 0x07, 0x34, 0x3f, 0x82, | 2379 | 0x3c, 0xd3, 0x77, 0x91, 0x73, 0x1f, 0xc3, 0xda, 0x98, 0xb4, 0x28, 0xdd, |
| 2397 | 0x1e, 0xb1, 0xc3, 0xfa, 0x35, 0xcc, 0x43, 0x8f, 0x92, 0xb4, 0x8f, 0x56, | 2380 | 0x66, 0xfc, 0x27, 0xaf, 0xd2, 0xe1, 0xe3, 0x61, 0xac, 0xa5, 0x0e, 0x87, |
| 2398 | 0x5d, 0x57, 0x4e, 0xeb, 0xb8, 0x35, 0xe0, 0xe9, 0xd6, 0x3f, 0x99, 0xae, | 2381 | 0xfc, 0x8f, 0x06, 0x3c, 0x12, 0xaf, 0x0d, 0xbc, 0x6d, 0xaa, 0xce, 0x28, |
| 2399 | 0x2e, 0x3d, 0x8d, 0xf1, 0x2e, 0xcc, 0xff, 0x26, 0x7a, 0xc4, 0xac, 0x31, | 2382 | 0xfb, 0xe7, 0xd7, 0x11, 0x53, 0xf2, 0x40, 0x5d, 0x94, 0x0b, 0x7d, 0x21, |
| 2400 | 0x7f, 0x9e, 0x36, 0x38, 0x8e, 0xf9, 0xcf, 0x01, 0xc7, 0x9f, 0xe0, 0xfb, | 2383 | 0x41, 0x43, 0xba, 0x9f, 0xc1, 0x3e, 0xa4, 0x61, 0x13, 0xf2, 0x5e, 0xd1, |
| 2401 | 0x7e, 0x7c, 0xff, 0xd1, 0xb6, 0xbd, 0xdf, 0xe0, 0xd9, 0x98, 0xcf, 0x6e, | 2384 | 0xaa, 0xe4, 0xcb, 0x0c, 0xf7, 0x11, 0x3d, 0x96, 0x6b, 0x91, 0x11, 0x68, |
| 2402 | 0x9b, 0xf7, 0xfd, 0xb7, 0x8e, 0x93, 0xd2, 0xbd, 0x06, 0xc6, 0xd7, 0x22, | 2385 | 0x5d, 0xd5, 0xb1, 0xcc, 0x07, 0xa0, 0x7b, 0x5f, 0x07, 0x8f, 0x85, 0x19, |
| 2403 | 0xb2, 0xfb, 0x7c, 0x9b, 0xa8, 0xaa, 0xeb, 0xc3, 0x55, 0xd5, 0x94, 0x9e, | 2386 | 0xfa, 0xaa, 0x2f, 0x61, 0xdd, 0x4a, 0x5a, 0xf7, 0xb7, 0x95, 0x23, 0x0e, |
| 2404 | 0xf3, 0xf4, 0xdf, 0x3f, 0xc2, 0x1e, 0x4b, 0xd4, 0x1a, 0x2e, 0x8d, 0x77, | 2387 | 0x65, 0xfa, 0x0e, 0x64, 0xaa, 0x77, 0x35, 0x4b, 0x87, 0x14, 0x91, 0x4f, |
| 2405 | 0xab, 0x6d, 0xf4, 0x99, 0xe3, 0x7d, 0x4b, 0xec, 0x0b, 0xc7, 0x47, 0x6b, | 2388 | 0xcd, 0x0f, 0x83, 0xaf, 0x81, 0x36, 0x89, 0xed, 0xa2, 0xaf, 0x42, 0xed, |
| 2406 | 0x84, 0xe1, 0xf7, 0x89, 0xe3, 0x7d, 0xb5, 0x9f, 0x00, 0x16, 0x72, 0x29, | 2389 | 0x93, 0x58, 0x41, 0x60, 0xb8, 0xee, 0xe9, 0x3b, 0xb1, 0x7e, 0x20, 0x01, |
| 2407 | 0xfb, 0xf8, 0x09, 0xff, 0xda, 0xb6, 0x33, 0xb5, 0x6c, 0x71, 0x26, 0xed, | 2390 | 0xf9, 0x52, 0x66, 0x7a, 0x00, 0x47, 0x18, 0x14, 0x4a, 0x66, 0xa1, 0xb3, |
| 2408 | 0xfe, 0x99, 0xe3, 0xd9, 0x0a, 0xf3, 0x83, 0x44, 0x4c, 0x74, 0x1e, 0x5e, | 2391 | 0x59, 0x88, 0x9b, 0xef, 0xfa, 0x93, 0xa6, 0x70, 0x1e, 0x3e, 0xbd, 0xc8, |
| 2409 | 0x38, 0x3e, 0x53, 0x0a, 0x4b, 0x48, 0xd3, 0xe2, 0xaf, 0x73, 0x8d, 0xf7, | 2392 | 0xb5, 0xa4, 0xd9, 0x5f, 0xd3, 0x64, 0x85, 0xb2, 0xfe, 0x2b, 0xf8, 0xa7, |
| 2410 | 0xb0, 0x13, 0x6d, 0xa4, 0xab, 0x11, 0x0f, 0xe3, 0x0c, 0xf1, 0x9c, 0x00, | 2393 | 0x5f, 0x79, 0x7b, 0x87, 0xc2, 0xf7, 0xe4, 0x87, 0x7c, 0xe1, 0x0c, 0x41, |
| 2411 | 0x9e, 0x24, 0xf0, 0x30, 0xde, 0xb8, 0xf4, 0xc6, 0x97, 0x76, 0xa2, 0x8d, | 2394 | 0xd3, 0xe6, 0x9c, 0x25, 0x83, 0xd3, 0xa2, 0x15, 0x90, 0x7b, 0x50, 0x47, |
| 2412 | 0xb8, 0x78, 0x96, 0x8f, 0xaf, 0x47, 0xd4, 0xf9, 0xb7, 0x49, 0xaf, 0xc9, | 2395 | 0x7a, 0x86, 0xd2, 0x95, 0x94, 0xbe, 0x0d, 0xbc, 0x1a, 0xb2, 0x7f, 0x88, |
| 2413 | 0x9c, 0xd6, 0xf5, 0x35, 0x4d, 0x92, 0x3f, 0x8b, 0xdc, 0xc6, 0x1e, 0xf3, | 2396 | 0xfc, 0x6e, 0x0d, 0xf2, 0x8e, 0x46, 0x9e, 0x3b, 0x02, 0x9e, 0xd5, 0x7e, |
| 2414 | 0xc6, 0x77, 0x9b, 0xac, 0xb7, 0xe3, 0x8a, 0xf3, 0xec, 0xb1, 0x96, 0x8a, | 2397 | 0xc3, 0x79, 0x7d, 0x8d, 0xf7, 0xd1, 0x99, 0x70, 0x5f, 0x03, 0xb6, 0xbc, |
| 2415 | 0x63, 0x0e, 0xe3, 0x65, 0x1f, 0x56, 0x79, 0xb0, 0x1d, 0x0d, 0x7c, 0x37, | 2398 | 0x82, 0x9a, 0x87, 0xfb, 0x93, 0x9e, 0x1b, 0x9e, 0x6e, 0x59, 0x95, 0x1e, |
| 2416 | 0x79, 0xb2, 0xe6, 0x99, 0x7e, 0xdd, 0xd9, 0x48, 0x0b, 0x40, 0x71, 0x0f, | 2399 | 0xfd, 0x57, 0xde, 0xfd, 0x43, 0x9a, 0xca, 0xd3, 0x74, 0xe4, 0x8c, 0xfa, |
| 2417 | 0xdd, 0x5b, 0xf7, 0xe0, 0xf3, 0x89, 0x85, 0x35, 0xd2, 0x96, 0x04, 0xaf, | 2400 | 0x10, 0x78, 0x1d, 0xe2, 0x79, 0xe9, 0x72, 0xff, 0x6e, 0xe2, 0x3b, 0x42, |
| 2418 | 0x3e, 0x6d, 0x9f, 0xf6, 0xfe, 0xb8, 0x37, 0x89, 0x3f, 0xff, 0x3c, 0x5f, | 2401 | 0xde, 0x80, 0xb3, 0xd5, 0xaf, 0x61, 0x86, 0xc2, 0x3d, 0x1a, 0xf5, 0x27, |
| 2419 | 0x06, 0xa4, 0x8b, 0x3d, 0x74, 0xf9, 0x13, 0x75, 0x73, 0x12, 0x76, 0xc7, | 2402 | 0xc4, 0x49, 0x5c, 0x84, 0xe1, 0x99, 0xd0, 0xdf, 0x4a, 0xbc, 0x60, 0xc7, |
| 2420 | 0x37, 0x10, 0xc7, 0x59, 0xb5, 0x29, 0xfb, 0x16, 0xdc, 0xbb, 0xf6, 0xb1, | 2403 | 0x83, 0xb3, 0x0e, 0xd7, 0x89, 0x66, 0x58, 0xeb, 0xd7, 0xc1, 0x68, 0x1f, |
| 2421 | 0xa8, 0x21, 0x14, 0x73, 0xb9, 0x38, 0xeb, 0xd5, 0xa3, 0xb2, 0x09, 0x5c, | 2404 | 0xa4, 0xde, 0xf5, 0x04, 0x76, 0x16, 0xea, 0x21, 0xf7, 0x64, 0x7f, 0x2b, |
| 2422 | 0x19, 0xd4, 0x94, 0x6e, 0x5d, 0x34, 0x0d, 0xff, 0xb8, 0x0e, 0xfd, 0xbc, | 2405 | 0x9d, 0xe5, 0x3a, 0xae, 0x27, 0x3c, 0x61, 0xe0, 0x33, 0xe0, 0x83, 0x7e, |
| 2423 | 0x6a, 0xf1, 0x2d, 0x26, 0xcc, 0x78, 0x27, 0xc5, 0xda, 0xcf, 0x01, 0xc3, | 2406 | 0x06, 0xdb, 0x78, 0xf9, 0x26, 0x5f, 0xce, 0xd8, 0x4e, 0x1f, 0x63, 0xaf, |
| 2424 | 0x3c, 0xea, 0xf6, 0x3b, 0xcb, 0x12, 0x60, 0x96, 0xb1, 0x76, 0xca, 0xf5, | 2407 | 0xf7, 0xe7, 0xac, 0x7d, 0xf0, 0xac, 0xc3, 0x7e, 0x1b, 0xfd, 0x3a, 0xe7, |
| 2425 | 0xcb, 0xf4, 0xed, 0xc8, 0xa9, 0x50, 0xc3, 0x58, 0xff, 0xe3, 0xe4, 0xa3, | 2408 | 0x50, 0x4f, 0x2c, 0x8e, 0xa2, 0xb7, 0x64, 0xed, 0x1e, 0x80, 0x7e, 0x3e, |
| 2426 | 0x8d, 0xb0, 0x3b, 0xbd, 0x83, 0x20, 0xe6, 0x2c, 0x26, 0xe6, 0x97, 0xe0, | 2409 | 0xac, 0xe7, 0xdb, 0x4a, 0x46, 0x8e, 0x35, 0xbd, 0x14, 0xab, 0xb5, 0xc3, |
| 2427 | 0xc3, 0x2b, 0x96, 0xda, 0xad, 0xb4, 0x46, 0x26, 0x2a, 0xf0, 0x49, 0xa8, | 2410 | 0x88, 0xc9, 0x52, 0xb9, 0x4d, 0xd5, 0xc6, 0x6d, 0xc3, 0x85, 0x2c, 0xe6, |
| 2428 | 0x78, 0x13, 0xf1, 0x25, 0x79, 0x5f, 0xdf, 0x43, 0x93, 0x35, 0x6c, 0xf6, | 2411 | 0xea, 0x8c, 0xcb, 0x30, 0x7f, 0xac, 0x43, 0x6c, 0x88, 0xeb, 0xd3, 0xf1, |
| 2429 | 0xa8, 0xaf, 0x52, 0xaf, 0x34, 0xe5, 0xa1, 0x33, 0x88, 0xcb, 0x23, 0x4f, | 2412 | 0xca, 0xed, 0x39, 0xda, 0x49, 0x4a, 0x52, 0xf5, 0x6b, 0x88, 0x79, 0xc8, |
| 2430 | 0x20, 0xe6, 0x40, 0x5e, 0x67, 0x0a, 0xa8, 0xe2, 0xa9, 0x23, 0x3f, 0xf8, | 2413 | 0x1f, 0x95, 0x0e, 0x7d, 0xf1, 0x76, 0xd2, 0x5f, 0x45, 0xec, 0x32, 0x72, |
| 2431 | 0x83, 0x19, 0xcb, 0xcd, 0xff, 0x75, 0x3c, 0x13, 0x97, 0xc7, 0xd0, 0x99, | 2414 | 0x62, 0xe8, 0xb9, 0xe6, 0xf8, 0x64, 0xb6, 0x0d, 0xb1, 0x7e, 0x6c, 0xbb, |
| 2432 | 0x76, 0xed, 0x67, 0xf2, 0xda, 0xdf, 0xf4, 0x9b, 0x53, 0xaa, 0x0d, 0x39, | 2415 | 0x7e, 0x6e, 0xdf, 0xf6, 0xd8, 0xb9, 0xae, 0x52, 0x53, 0xae, 0xb2, 0x5d, |
| 2433 | 0x06, 0x12, 0x4f, 0x64, 0x38, 0xe6, 0xa0, 0x48, 0x1f, 0xf3, 0x4e, 0xf8, | 2416 | 0x9f, 0x86, 0x2f, 0xaf, 0x89, 0x8e, 0x98, 0x8a, 0x1a, 0x01, 0xe3, 0x73, |
| 2434 | 0xe1, 0xbe, 0x35, 0x78, 0xb7, 0x33, 0x84, 0x57, 0x12, 0x3e, 0x13, 0x92, | 2417 | 0x0f, 0x3c, 0xa0, 0xe7, 0x62, 0x52, 0x4e, 0xc8, 0x93, 0x8b, 0x59, 0xf8, |
| 2435 | 0xa6, 0x33, 0x7c, 0x0b, 0x91, 0x3d, 0xa8, 0xc3, 0x88, 0xb3, 0x2f, 0x8c, | 2418 | 0xf5, 0x5a, 0x3a, 0x55, 0x94, 0x27, 0xa5, 0x5a, 0x3b, 0x24, 0x93, 0xb5, |
| 2436 | 0x7e, 0x02, 0x7f, 0xfb, 0x90, 0x5f, 0x99, 0xc8, 0x8d, 0x77, 0x80, 0x07, | 2419 | 0xf0, 0xde, 0x80, 0x77, 0x06, 0x49, 0xe5, 0xbf, 0xe8, 0x5f, 0x27, 0x03, |
| 2437 | 0x2c, 0xf7, 0xec, 0x04, 0xdf, 0xd5, 0x2d, 0x6d, 0x11, 0xec, 0x21, 0x3c, | 2420 | 0xda, 0x41, 0x73, 0x7e, 0x84, 0x31, 0x3a, 0x4b, 0xdf, 0x7d, 0x0d, 0x3a, |
| 2438 | 0xf2, 0x43, 0x6b, 0x0f, 0xe8, 0x71, 0xcf, 0x27, 0x8e, 0xf0, 0x19, 0x91, | 2421 | 0xd1, 0x12, 0xd4, 0xda, 0xbe, 0xfe, 0x19, 0xb9, 0x8f, 0x30, 0x47, 0xfd, |
| 2439 | 0xfe, 0x05, 0xe9, 0x51, 0x7a, 0x4f, 0x58, 0x66, 0x52, 0x5c, 0x6b, 0x07, | 2422 | 0xdb, 0xb0, 0x7a, 0x6e, 0x7b, 0x4e, 0xfd, 0x89, 0x8a, 0xa9, 0x4b, 0x36, |
| 2440 | 0x3c, 0xf7, 0x61, 0x4d, 0xef, 0x73, 0xdf, 0x94, 0xf2, 0xb7, 0xe9, 0xc6, | 2423 | 0x9f, 0x09, 0xf3, 0xf6, 0xe0, 0x94, 0x75, 0xdd, 0x64, 0x6d, 0x70, 0xc1, |
| 2441 | 0x9c, 0x81, 0x6f, 0xe4, 0x53, 0x29, 0x53, 0xfa, 0xab, 0x2e, 0x6c, 0xdf, | 2424 | 0x21, 0x3e, 0x53, 0x9d, 0xb5, 0x91, 0xbb, 0x8c, 0xb5, 0xad, 0xa4, 0x0b, |
| 2442 | 0xda, 0x53, 0xdd, 0x7c, 0x97, 0x52, 0x96, 0x4b, 0x9b, 0x42, 0xee, 0x9b, | 2425 | 0xcd, 0xc0, 0x3c, 0xf6, 0x77, 0x9a, 0x83, 0x71, 0xb8, 0xf6, 0xb5, 0x86, |
| 2443 | 0x87, 0x54, 0xc3, 0x83, 0x7c, 0x9b, 0x21, 0x0c, 0xeb, 0xd9, 0x2e, 0x0d, | 2426 | 0xb5, 0x9c, 0x63, 0x4f, 0xdc, 0xd8, 0xa3, 0xe1, 0xce, 0xe4, 0x82, 0x9b, |
| 2444 | 0x63, 0x0e, 0x52, 0x7e, 0xee, 0x9c, 0x52, 0xff, 0xd7, 0x9b, 0x4b, 0x63, | 2427 | 0x51, 0x35, 0x7b, 0xc1, 0x55, 0xb9, 0x02, 0x6a, 0x74, 0xe8, 0x93, 0xba, |
| 2445 | 0x4e, 0xa1, 0x6d, 0x05, 0xfb, 0xbf, 0xa9, 0x6d, 0x45, 0x54, 0xdc, 0xb3, | 2428 | 0x43, 0x81, 0x3f, 0x72, 0xff, 0xce, 0xf4, 0xcf, 0x9d, 0xfe, 0x63, 0x45, |
| 2446 | 0x15, 0x8c, 0x97, 0x39, 0xf6, 0x63, 0xf1, 0xf1, 0x7b, 0x5c, 0x7f, 0xef, | 2429 | 0x18, 0xdf, 0xa8, 0x6f, 0x53, 0xca, 0x4f, 0xbd, 0xd9, 0x70, 0x17, 0xf0, |
| 2447 | 0xc8, 0xac, 0xcd, 0xf7, 0x0b, 0x47, 0xae, 0xda, 0x05, 0xe3, 0xc0, 0x1d, | 2430 | 0x26, 0xfc, 0xd2, 0x9d, 0x9b, 0xfd, 0x9a, 0xc6, 0x0c, 0x7c, 0x5a, 0xab, |
| 2448 | 0x79, 0x66, 0x52, 0xc7, 0xe7, 0x19, 0xc8, 0x7e, 0xb3, 0xa6, 0x6b, 0x35, | 2431 | 0xca, 0x53, 0x7c, 0x9f, 0x96, 0x6a, 0x80, 0x4d, 0xf1, 0xde, 0xa0, 0xc3, |
| 2449 | 0xb9, 0x56, 0x8b, 0xc8, 0x3b, 0x2b, 0x6d, 0xb2, 0xb9, 0xe4, 0xea, 0xfc, | 2432 | 0xaf, 0xbd, 0x7f, 0x2b, 0x58, 0xc3, 0xfc, 0xc1, 0x32, 0x99, 0x3b, 0xf8, |
| 2450 | 0xe6, 0x12, 0xf5, 0xdc, 0x94, 0x9f, 0xad, 0x58, 0x58, 0x4b, 0xe2, 0xaf, | 2433 | 0xb2, 0xf0, 0x9e, 0x59, 0x1d, 0x27, 0x4a, 0x01, 0xbe, 0xa6, 0xe0, 0xdd, |
| 2451 | 0x47, 0x6e, 0xac, 0xdc, 0x99, 0x77, 0x5e, 0xae, 0x3f, 0x0a, 0x5a, 0x7a, | 2434 | 0x5b, 0x6d, 0x3e, 0x4d, 0xe1, 0xda, 0x3f, 0x0d, 0xee, 0xa6, 0x94, 0x2f, |
| 2452 | 0x24, 0x64, 0x39, 0xba, 0xee, 0xca, 0x21, 0xf6, 0x15, 0x64, 0x42, 0xf2, | 2435 | 0xcc, 0x03, 0x16, 0x3c, 0xa4, 0x4a, 0x3a, 0xf4, 0x66, 0xa4, 0xee, 0xcb, |
| 2453 | 0xe5, 0x7e, 0xd4, 0x7e, 0x08, 0xce, 0x61, 0xc6, 0x20, 0xdc, 0x7f, 0xf9, | 2436 | 0x1b, 0xf1, 0x8e, 0xf7, 0x4f, 0x8a, 0xb6, 0x0b, 0x2a, 0xe7, 0x68, 0xe4, |
| 2454 | 0xf3, 0xc8, 0x4d, 0x12, 0x30, 0x9e, 0x7e, 0xfd, 0xa6, 0xf8, 0xc5, 0x70, | 2437 | 0x3f, 0x4f, 0xbe, 0xf3, 0x06, 0x69, 0x74, 0xc7, 0xb0, 0x56, 0x0e, 0xf8, |
| 2455 | 0x8f, 0x34, 0x5b, 0xdf, 0xec, 0x76, 0x63, 0x95, 0xe9, 0xd6, 0xa7, 0x96, | 2438 | 0x77, 0x14, 0xa6, 0x4c, 0x98, 0xfd, 0xe6, 0x24, 0xf1, 0x26, 0x04, 0xf8, |
| 2456 | 0x1f, 0xaf, 0xdf, 0x04, 0xee, 0x11, 0xe8, 0x29, 0x75, 0xd3, 0x86, 0xce, | 2439 | 0x90, 0x97, 0xe4, 0xc2, 0x33, 0xfc, 0x26, 0xf7, 0x06, 0xde, 0x8d, 0x1c, |
| 2457 | 0x9a, 0xb2, 0x3a, 0x94, 0xa8, 0x14, 0x84, 0xfe, 0x21, 0xc5, 0x7c, 0x11, | 2440 | 0xa3, 0xff, 0x66, 0x40, 0xcb, 0x8f, 0x03, 0x79, 0x85, 0xef, 0x7f, 0xb1, |
| 2458 | 0xfb, 0x92, 0x90, 0x47, 0xab, 0xce, 0x85, 0x32, 0x0a, 0x77, 0xbb, 0x30, | 2441 | 0xf9, 0xe6, 0xf1, 0x3d, 0xb7, 0x07, 0xf2, 0xc4, 0xf3, 0xa1, 0x5f, 0x43, |
| 2459 | 0x27, 0xf9, 0xfa, 0xef, 0x63, 0x3e, 0x23, 0xd3, 0xf5, 0x71, 0x9c, 0x75, | 2442 | 0x13, 0xf5, 0xfd, 0x34, 0xf0, 0xa8, 0x18, 0x5c, 0xd1, 0x73, 0x88, 0xf9, |
| 2460 | 0x1a, 0x7a, 0xfb, 0x60, 0x8f, 0xb4, 0xf1, 0x9c, 0x14, 0x68, 0x7c, 0x44, | 2443 | 0x59, 0x64, 0x34, 0x35, 0xd8, 0xb4, 0x20, 0xf6, 0xbb, 0x69, 0xbb, 0x84, |
| 2461 | 0x66, 0xce, 0xce, 0xc9, 0x91, 0x32, 0xe9, 0xe4, 0x1b, 0x63, 0x22, 0x99, | 2444 | 0x55, 0x1f, 0xd5, 0xe8, 0x57, 0xaf, 0xc3, 0xaf, 0xf2, 0xac, 0x3f, 0x96, |
| 2462 | 0x93, 0xe1, 0xf8, 0x0a, 0x72, 0x27, 0xd7, 0x1e, 0xd3, 0x32, 0x73, 0x0e, | 2445 | 0xa9, 0x5a, 0xaf, 0xdd, 0xac, 0xa9, 0xfc, 0x3a, 0x73, 0x5a, 0xfa, 0xed, |
| 2463 | 0x38, 0xca, 0xac, 0xff, 0xfb, 0xa1, 0x37, 0xc3, 0xba, 0x7e, 0x99, 0xd6, | 2446 | 0xd3, 0xc8, 0x3d, 0x50, 0xa3, 0xa5, 0x8e, 0x08, 0x65, 0x7e, 0x5d, 0x76, |
| 2464 | 0x7e, 0x87, 0xf3, 0x6f, 0xe3, 0x9e, 0xfa, 0x0b, 0xfb, 0x00, 0x97, 0x47, | 2447 | 0xa8, 0x9c, 0xe0, 0x63, 0xb1, 0x20, 0x93, 0x22, 0xea, 0x04, 0x7d, 0xe8, |
| 2465 | 0xad, 0x33, 0x85, 0x7c, 0x79, 0xb9, 0x8c, 0x3a, 0xcf, 0x0e, 0x31, 0xf7, | 2448 | 0x5f, 0x3d, 0x95, 0xd3, 0x68, 0xa8, 0x42, 0x6f, 0x81, 0xeb, 0x6d, 0x85, |
| 2466 | 0x52, 0xea, 0xa1, 0x5e, 0xa9, 0x96, 0x87, 0x4d, 0xa5, 0x98, 0x53, 0xf1, | 2449 | 0x87, 0xf8, 0x1a, 0x71, 0x69, 0xd2, 0x32, 0x14, 0xe2, 0x4b, 0xc9, 0x51, |
| 2467 | 0x2e, 0xb8, 0x46, 0xfb, 0x8e, 0xa9, 0xb0, 0xd5, 0x2b, 0x2b, 0xe5, 0x02, | 2450 | 0x37, 0xc4, 0x69, 0xc8, 0x65, 0x64, 0x2d, 0xfa, 0x90, 0x17, 0xf0, 0xcf, |
| 2468 | 0xea, 0x65, 0xe5, 0xbd, 0x67, 0x14, 0xc4, 0xb4, 0x5c, 0xbf, 0xa7, 0x6b, | 2451 | 0xe7, 0x5f, 0x7a, 0xcc, 0x09, 0xf4, 0xdc, 0xdd, 0x81, 0x0c, 0x7e, 0x8f, |
| 2469 | 0x1b, 0xe6, 0x9f, 0xf5, 0x2f, 0x80, 0xc6, 0x0c, 0x2e, 0xf3, 0x24, 0xe8, | 2452 | 0x32, 0xc0, 0x18, 0x3a, 0xef, 0x7c, 0xc5, 0xaf, 0x45, 0x54, 0x2d, 0x37, |
| 2470 | 0xc3, 0xf7, 0x32, 0x74, 0x7c, 0x81, 0x39, 0x5c, 0x06, 0x6b, 0x69, 0x39, | 2453 | 0x86, 0x9a, 0x82, 0x73, 0x2b, 0x2d, 0x05, 0x3b, 0x3c, 0xe3, 0x7d, 0x98, |
| 2471 | 0x76, 0x61, 0x0a, 0x34, 0x74, 0x4a, 0xff, 0x9f, 0xd1, 0xc6, 0x9e, 0xc4, | 2454 | 0x2b, 0xe2, 0x47, 0xb9, 0x10, 0x66, 0x3f, 0x9e, 0xf3, 0x01, 0x9c, 0x0c, |
| 2472 | 0x1c, 0xc7, 0x09, 0xe8, 0xeb, 0xd7, 0xf1, 0x4d, 0xd8, 0x18, 0x7a, 0xca, | 2455 | 0xfb, 0x35, 0x79, 0x58, 0x8b, 0x84, 0x39, 0xa1, 0xcc, 0xe8, 0x39, 0xe6, |
| 2473 | 0xa1, 0x17, 0xbd, 0x09, 0x5a, 0x58, 0x07, 0x43, 0xfe, 0x87, 0xe3, 0x52, | 2456 | 0xef, 0x3b, 0x40, 0x2b, 0x73, 0x56, 0x9c, 0xe7, 0xaa, 0xff, 0x59, 0x85, |
| 2474 | 0x3d, 0xfb, 0xb0, 0x4c, 0x2f, 0x3f, 0x0c, 0xfc, 0xff, 0x8a, 0xba, 0x00, | 2457 | 0xa9, 0xac, 0xc1, 0xf8, 0xb9, 0xe7, 0xa8, 0x1b, 0xe6, 0xbb, 0xcc, 0x69, |
| 2475 | 0xf1, 0x6d, 0x99, 0x67, 0x31, 0xff, 0xe3, 0x39, 0x10, 0x10, 0x6d, 0x63, | 2458 | 0xc3, 0xdc, 0x27, 0xaf, 0x15, 0x9d, 0x31, 0xed, 0x3e, 0x87, 0xf0, 0xfa, |
| 2476 | 0x81, 0xf3, 0xec, 0x0f, 0x62, 0x3f, 0x6a, 0x8c, 0x72, 0x46, 0x66, 0xca, | 2459 | 0xec, 0x66, 0xb1, 0x52, 0x3d, 0xba, 0x27, 0x23, 0x43, 0xac, 0x9d, 0x8f, |
| 2477 | 0x3c, 0x0b, 0x77, 0x87, 0x7c, 0x2a, 0x7f, 0x76, 0xca, 0xbb, 0xe3, 0x1e, | 2460 | 0xe1, 0xcc, 0x3b, 0xa4, 0x9c, 0x41, 0x1e, 0x60, 0xde, 0x85, 0xbe, 0x19, |
| 2478 | 0xc9, 0x45, 0x0b, 0xac, 0x2f, 0x10, 0x27, 0x96, 0x46, 0xb3, 0xa5, 0x84, | 2461 | 0x73, 0x5f, 0xc6, 0x1c, 0x74, 0x23, 0xc3, 0xfc, 0x66, 0x83, 0xaa, 0x41, |
| 2479 | 0x99, 0x55, 0xc4, 0x95, 0x14, 0xc6, 0x06, 0x77, 0x2e, 0x22, 0xd6, 0x02, | 2462 | 0x4a, 0x2a, 0x76, 0xec, 0x08, 0xf4, 0xe5, 0x89, 0x4e, 0x5f, 0x3f, 0xbe, |
| 2480 | 0x6a, 0xda, 0x34, 0xd7, 0x4e, 0x7a, 0x6f, 0x06, 0xc4, 0xf5, 0x63, 0x99, | 2463 | 0x87, 0xf1, 0x46, 0xcc, 0x7f, 0x03, 0xbd, 0xe7, 0xf5, 0x0c, 0x85, 0xf3, |
| 2481 | 0x80, 0x8e, 0xf5, 0x2f, 0x8c, 0x20, 0x17, 0xfe, 0x29, 0x72, 0xc9, 0xb8, | 2464 | 0xd4, 0xfb, 0x61, 0xcc, 0xdf, 0x09, 0x1c, 0x15, 0x3c, 0x7f, 0x0e, 0xcf, |
| 2482 | 0x27, 0x83, 0x71, 0x4f, 0x37, 0xda, 0x1a, 0x74, 0x02, 0xf7, 0x5c, 0xc6, | 2465 | 0x7f, 0xb8, 0x6e, 0xed, 0x77, 0x31, 0xae, 0x60, 0xbe, 0xb0, 0x6e, 0x3e, |
| 2483 | 0xdd, 0x97, 0xa1, 0x07, 0xf0, 0xd5, 0xaf, 0x6e, 0xe9, 0xc7, 0x78, 0x43, | 2466 | 0xf4, 0xb3, 0xdc, 0xaf, 0xa2, 0x15, 0xdd, 0x29, 0x2d, 0xaf, 0xea, 0x88, |
| 2484 | 0x8e, 0xd9, 0x21, 0xff, 0x50, 0x49, 0x24, 0xd7, 0xa1, 0x3f, 0x37, 0x50, | 2467 | 0x63, 0xa8, 0x55, 0xe8, 0x6b, 0x59, 0xb3, 0xcc, 0x20, 0x17, 0xa7, 0x9f, |
| 2485 | 0x0b, 0xac, 0xa3, 0x3e, 0xdc, 0xb4, 0x23, 0xa8, 0x4b, 0x0e, 0x83, 0x7e, | 2468 | 0x3d, 0x88, 0x35, 0x8b, 0xd0, 0xbb, 0x56, 0x95, 0x65, 0xea, 0xca, 0x1e, |
| 2486 | 0xe6, 0x94, 0x1c, 0xc7, 0x74, 0xae, 0xd3, 0x62, 0x3d, 0x7f, 0x8f, 0x7e, | 2469 | 0x0f, 0x1d, 0xec, 0x99, 0x63, 0x5f, 0x39, 0x68, 0xd7, 0x09, 0xc3, 0xe7, |
| 2487 | 0xd7, 0x95, 0xaf, 0xf6, 0xb0, 0xa6, 0x64, 0x3d, 0xce, 0x37, 0xe9, 0x77, | 2470 | 0x27, 0x0f, 0xf6, 0xd4, 0x0f, 0x01, 0x96, 0xf9, 0x7a, 0xe3, 0x1d, 0xef, |
| 2488 | 0x70, 0x8f, 0xeb, 0x26, 0xd7, 0xfd, 0x7d, 0xac, 0x05, 0x7c, 0xfd, 0x21, | 2471 | 0x37, 0xd6, 0xed, 0xe9, 0xd7, 0x38, 0x45, 0x75, 0x37, 0x78, 0xe8, 0x60, |
| 2489 | 0x2d, 0xd4, 0x1f, 0xee, 0x21, 0x4c, 0x8f, 0xb6, 0x93, 0xbc, 0xc6, 0x47, | 2472 | 0x61, 0x86, 0x71, 0x9a, 0xf5, 0x26, 0xf3, 0xd2, 0xca, 0xc1, 0xf1, 0xda, |
| 2490 | 0x9d, 0xfd, 0x9b, 0x6e, 0xd7, 0xce, 0x74, 0x9e, 0x65, 0x5e, 0x13, 0x5f, | 2473 | 0x54, 0x50, 0xd3, 0x84, 0xef, 0xf9, 0x8e, 0xf2, 0xbf, 0x15, 0x6d, 0xa4, |
| 2491 | 0x7f, 0x3f, 0x74, 0x58, 0xd7, 0x65, 0x87, 0xe0, 0xbb, 0xeb, 0x8e, 0xbc, | 2474 | 0xab, 0x11, 0x8f, 0xca, 0x6b, 0x80, 0xe7, 0x49, 0xe0, 0x61, 0x6d, 0xa4, |
| 2492 | 0x60, 0xdf, 0x69, 0x77, 0xfb, 0xcb, 0xbe, 0x9c, 0x28, 0xc7, 0xc3, 0x72, | 2475 | 0xee, 0x90, 0x15, 0xbd, 0xa9, 0xb9, 0x5b, 0xd1, 0x46, 0x5c, 0xdc, 0x2b, |
| 2493 | 0xaa, 0x9e, 0x80, 0x4d, 0x50, 0x86, 0x56, 0x83, 0x0c, 0x45, 0xfe, 0xaa, | 2476 | 0xc4, 0x77, 0x02, 0x75, 0xc7, 0x77, 0x48, 0x2f, 0xf0, 0x7c, 0x26, 0xc8, |
| 2494 | 0x2c, 0xf2, 0x4a, 0x99, 0x6b, 0x5a, 0x86, 0xb1, 0x6c, 0xa8, 0x8d, 0xef, | 2477 | 0x6d, 0x78, 0x37, 0x65, 0xf8, 0x77, 0x38, 0x6a, 0x1c, 0xd6, 0xbe, 0x4d, |
| 2495 | 0xea, 0xd0, 0xcb, 0xb7, 0xe5, 0xc8, 0xa2, 0xc8, 0x05, 0xac, 0xaf, 0x96, | 2478 | 0xeb, 0x6a, 0xdf, 0xa6, 0xe0, 0x1e, 0x8b, 0xb0, 0x7a, 0x00, 0xab, 0xee, |
| 2496 | 0x69, 0xab, 0x23, 0xc8, 0x5f, 0x77, 0x49, 0x75, 0x09, 0x35, 0x59, 0x59, | 2479 | 0xd0, 0x31, 0x97, 0x0a, 0xee, 0x94, 0xe3, 0xbc, 0x53, 0x6e, 0x90, 0x45, |
| 2497 | 0xa6, 0xb3, 0x9f, 0x63, 0xbc, 0x89, 0xc8, 0xa6, 0x7e, 0x8f, 0x15, 0x19, | 2480 | 0x53, 0x20, 0x7f, 0xd2, 0x11, 0xd6, 0x2b, 0x8d, 0xf4, 0xf1, 0xbe, 0x79, |
| 2498 | 0xbc, 0x18, 0x96, 0xf0, 0x45, 0x14, 0x7f, 0x90, 0xfd, 0xa5, 0x21, 0xff, | 2481 | 0x0a, 0xef, 0xc3, 0xb3, 0x09, 0x79, 0x5f, 0xc4, 0x3c, 0xe9, 0x3d, 0x03, |
| 2499 | 0x7d, 0xd6, 0xb5, 0xf9, 0x62, 0x09, 0x7b, 0xcb, 0xfd, 0xda, 0x4f, 0x16, | 2482 | 0xf8, 0x90, 0xde, 0x4f, 0x7b, 0xa6, 0x5c, 0x7b, 0x06, 0xbf, 0x70, 0xbf, |
| 2500 | 0x6b, 0x33, 0x92, 0xaf, 0xf0, 0x2c, 0xf4, 0x4b, 0x71, 0xac, 0xa5, 0x64, | 2483 | 0x50, 0x2e, 0xa4, 0xf5, 0xd7, 0xd5, 0x5a, 0xa1, 0xdf, 0x5b, 0x0c, 0x62, |
| 2501 | 0xf6, 0xec, 0x88, 0x3c, 0x8b, 0x33, 0x50, 0xff, 0xe1, 0x8c, 0x09, 0x29, | 2484 | 0x3a, 0xe9, 0xa2, 0x0f, 0xa2, 0x3f, 0x0e, 0xef, 0xc0, 0x59, 0x63, 0x33, |
| 2502 | 0x5c, 0xc0, 0x7c, 0xed, 0xba, 0x2c, 0xad, 0xcc, 0x48, 0xb5, 0x72, 0xb9, | 2485 | 0x56, 0xf0, 0xbc, 0x5a, 0xa0, 0x2b, 0x84, 0xd3, 0x90, 0x5f, 0xeb, 0xcc, |
| 2503 | 0xe1, 0xdd, 0x1d, 0xe3, 0xa5, 0xc6, 0x5a, 0xf6, 0x30, 0xeb, 0x19, 0xd4, | 2486 | 0xc3, 0x52, 0xa8, 0x35, 0x92, 0x8f, 0xc8, 0x0f, 0xb0, 0x57, 0x3e, 0xd3, |
| 2504 | 0xaa, 0x16, 0xc6, 0x90, 0x59, 0x6d, 0x76, 0xfa, 0xce, 0xf7, 0xe2, 0xc6, | 2487 | 0xa4, 0xec, 0x88, 0xf7, 0x08, 0xcd, 0xb2, 0x02, 0x9d, 0xbe, 0x84, 0xfa, |
| 2505 | 0x1a, 0x76, 0x52, 0xe6, 0xcb, 0x29, 0x29, 0x9e, 0x1d, 0xd1, 0x6f, 0x0a, | 2488 | 0x63, 0x1e, 0xb5, 0xd1, 0x12, 0xef, 0xb5, 0xeb, 0x27, 0x3b, 0x79, 0x1f, |
| 2506 | 0x2d, 0xe9, 0xca, 0xd3, 0x37, 0x11, 0x2b, 0x26, 0xf5, 0x7b, 0xf1, 0x2d, | 2489 | 0x32, 0x65, 0xad, 0xd5, 0xf1, 0x73, 0x80, 0x59, 0xb0, 0x58, 0xeb, 0x4b, |
| 2507 | 0x79, 0xcc, 0x9e, 0x97, 0xa3, 0xd6, 0x41, 0x39, 0x85, 0xfc, 0xfa, 0x4b, | 2490 | 0xd0, 0x10, 0x23, 0x91, 0x67, 0x8c, 0x5b, 0xff, 0xe3, 0x95, 0x13, 0x8d, |
| 2508 | 0x76, 0xab, 0xc4, 0xbb, 0x79, 0x8f, 0xa0, 0xd7, 0x62, 0x0d, 0xea, 0xc8, | 2491 | 0xb0, 0xb7, 0xaa, 0xb3, 0xdb, 0xa4, 0x3a, 0x9b, 0x3e, 0x3a, 0x87, 0x7a, |
| 2509 | 0x84, 0xfd, 0xa0, 0xf9, 0x3c, 0x24, 0xfb, 0x4e, 0x8d, 0x71, 0xf2, 0xbf, | 2492 | 0x77, 0xc6, 0xd2, 0xb7, 0xe8, 0x7e, 0xad, 0x34, 0x03, 0xdf, 0xa4, 0x6a, |
| 2510 | 0x9d, 0x0c, 0xe2, 0xde, 0x4d, 0xd4, 0x8e, 0x19, 0x0d, 0x67, 0xb8, 0x70, | 2493 | 0xad, 0x39, 0x79, 0xae, 0x93, 0x67, 0xd7, 0x64, 0xf5, 0x9b, 0x9d, 0xfa, |
| 2511 | 0x15, 0xc2, 0x0d, 0x9b, 0x2f, 0x10, 0x6e, 0xc9, 0xf0, 0xe0, 0x0c, 0xc0, | 2494 | 0xef, 0x50, 0x17, 0x15, 0xe5, 0xb1, 0x13, 0x1b, 0xa4, 0x3c, 0x70, 0x1f, |
| 2512 | 0x85, 0x64, 0xc3, 0x0e, 0x43, 0x47, 0x26, 0xc1, 0x27, 0x7c, 0xfc, 0x68, | 2495 | 0x72, 0x2d, 0xc8, 0xf3, 0x44, 0x05, 0x95, 0x21, 0xf5, 0xea, 0xbd, 0x03, |
| 2513 | 0x87, 0x97, 0x07, 0xb7, 0x22, 0xb6, 0xde, 0xde, 0xff, 0x86, 0xb7, 0xff, | 2496 | 0xe3, 0x16, 0x6b, 0x26, 0xf1, 0xe3, 0x9a, 0xf8, 0x3c, 0xc6, 0x4e, 0xb4, |
| 2514 | 0x59, 0x6f, 0xff, 0xd5, 0xad, 0xfd, 0x7e, 0x7c, 0xfd, 0x85, 0x23, 0x0d, | 2497 | 0x29, 0x9f, 0xe4, 0xdf, 0x99, 0xf7, 0x9a, 0x45, 0xe4, 0x63, 0x85, 0x01, |
| 2515 | 0x74, 0xbd, 0x51, 0x72, 0xe1, 0xe7, 0x3d, 0xba, 0xae, 0x6e, 0xd1, 0xe5, | 2498 | 0x24, 0x8d, 0xc8, 0x5e, 0xcc, 0x9d, 0x22, 0x3d, 0xcc, 0x19, 0xe1, 0x8f, |
| 2516 | 0xc3, 0x43, 0x9e, 0x9a, 0x67, 0xfa, 0x66, 0xfa, 0xe8, 0x7e, 0xc8, 0xd1, | 2499 | 0x7b, 0xce, 0xc1, 0xcb, 0x9d, 0x20, 0xbc, 0x2e, 0xc6, 0x89, 0x98, 0x34, |
| 2517 | 0x91, 0x9c, 0x0d, 0xdb, 0x28, 0x27, 0xc6, 0x0b, 0xfa, 0x2d, 0x4d, 0xc9, | 2500 | 0x9d, 0x60, 0x9d, 0x2d, 0x5d, 0xa8, 0x51, 0x88, 0xb3, 0xc7, 0x40, 0x3f, |
| 2518 | 0x7a, 0x74, 0x5e, 0x26, 0xad, 0xc4, 0xf8, 0xac, 0x84, 0xa0, 0xcb, 0xf4, | 2501 | 0x8a, 0xdf, 0x1e, 0xe4, 0x51, 0x26, 0xf2, 0xda, 0x5b, 0xc0, 0x03, 0x96, |
| 2519 | 0x2d, 0x21, 0xa9, 0xd2, 0xe7, 0xa0, 0xcf, 0xdb, 0x3b, 0xd3, 0xfa, 0x4e, | 2502 | 0x6b, 0x6e, 0x05, 0xff, 0x6a, 0x27, 0xeb, 0xce, 0x9e, 0x73, 0x84, 0xe7, |
| 2520 | 0x03, 0xad, 0xa1, 0x97, 0x49, 0xa3, 0x4b, 0x6b, 0x64, 0xe0, 0x36, 0xad, | 2503 | 0x7d, 0x76, 0x17, 0xe8, 0xf1, 0xf7, 0x27, 0x0e, 0xe3, 0x84, 0x48, 0xef, |
| 2521 | 0x2e, 0xbc, 0x4b, 0xeb, 0x3b, 0xa5, 0x06, 0xf8, 0x8b, 0x61, 0x0f, 0x3e, | 2504 | 0xb4, 0x74, 0xea, 0x6a, 0x8d, 0x21, 0xe3, 0x59, 0xbe, 0x6b, 0x03, 0xfc, |
| 2522 | 0xdc, 0x00, 0x4f, 0x7d, 0x66, 0x5e, 0x41, 0x7d, 0x26, 0x6d, 0x9f, 0x85, | 2505 | 0xab, 0xca, 0x3e, 0x7b, 0xd5, 0x3a, 0xff, 0xce, 0xa2, 0xbc, 0x46, 0x37, |
| 2523 | 0x6d, 0x48, 0xa4, 0x35, 0x5d, 0x39, 0xfe, 0xc0, 0x80, 0x23, 0x11, 0xe4, | 2506 | 0xe6, 0x34, 0x3c, 0x23, 0x57, 0xca, 0x9a, 0xd2, 0x3b, 0xef, 0xc3, 0xf6, |
| 2524 | 0x1b, 0xcd, 0x58, 0xdb, 0xac, 0x30, 0x17, 0x51, 0x7d, 0xcd, 0x32, 0x08, | 2507 | 0x9c, 0xeb, 0xd8, 0xe2, 0xdf, 0xed, 0xf8, 0xb4, 0xf1, 0x6e, 0xb0, 0x0c, |
| 2525 | 0x9d, 0xe5, 0xdd, 0xb9, 0x6f, 0x82, 0x8f, 0xe9, 0x9c, 0xc0, 0x91, 0xa3, | 2508 | 0xa9, 0x1a, 0x3b, 0x59, 0xf3, 0x13, 0x86, 0xdf, 0x52, 0xd8, 0x73, 0x2d, |
| 2526 | 0x36, 0x69, 0x79, 0xdf, 0x79, 0x25, 0x3a, 0x68, 0x17, 0x65, 0xc8, 0x6c, | 2509 | 0xe5, 0xe7, 0xcf, 0xe9, 0xfa, 0xff, 0xa5, 0x5f, 0xeb, 0xbf, 0xe1, 0x84, |
| 2527 | 0xc6, 0xf9, 0xd5, 0xba, 0xc6, 0x99, 0x24, 0x2d, 0xe7, 0x87, 0xfa, 0xcd, | 2510 | 0x77, 0x4b, 0xa9, 0x86, 0xbb, 0xa5, 0x74, 0xc3, 0xb7, 0x97, 0x9f, 0xb4, |
| 2528 | 0xbf, 0x07, 0x9f, 0x13, 0x15, 0x43, 0xaa, 0x56, 0x22, 0x76, 0x09, 0x38, | 2511 | 0x05, 0x7a, 0x27, 0x93, 0xb6, 0x27, 0xe1, 0xf7, 0xa5, 0xbd, 0x37, 0xe5, |
| 2529 | 0xf6, 0xe1, 0x6e, 0xaa, 0x23, 0xa4, 0x47, 0xe4, 0x08, 0xf4, 0xbb, 0xaa, | 2512 | 0x90, 0x19, 0x15, 0xa7, 0xc7, 0x21, 0xfb, 0x2b, 0x75, 0xd2, 0x8b, 0x98, |
| 2530 | 0xe3, 0x22, 0xf5, 0x38, 0x31, 0x59, 0x40, 0xae, 0xf3, 0xd7, 0x3a, 0xb6, | 2513 | 0x53, 0x8f, 0xcb, 0xfb, 0x8b, 0xad, 0x72, 0x65, 0xce, 0xcf, 0x29, 0xaf, |
| 2531 | 0x39, 0xce, 0x4d, 0xc4, 0xb7, 0xc9, 0x6d, 0xba, 0xa7, 0x2e, 0xba, 0xba, | 2514 | 0xa8, 0x6f, 0x4e, 0xa6, 0x7c, 0x80, 0xc2, 0xff, 0x72, 0x3d, 0x83, 0x5f, |
| 2532 | 0xa7, 0x2e, 0xa2, 0x06, 0x3e, 0x1d, 0x91, 0x96, 0x55, 0xd8, 0xcf, 0xcb, | 2515 | 0xa7, 0x5c, 0x5d, 0xbc, 0x39, 0xa7, 0xbc, 0xe0, 0xde, 0x0d, 0x5a, 0x3a, |
| 2533 | 0x7b, 0xdc, 0x7c, 0xee, 0x65, 0xfe, 0xe6, 0x04, 0x7f, 0x77, 0x3a, 0x2c, | 2516 | 0x03, 0x1b, 0x46, 0xdd, 0x86, 0x18, 0x58, 0x09, 0xee, 0xea, 0x55, 0xce, |
| 2534 | 0xd6, 0x69, 0x1d, 0x0f, 0x20, 0xef, 0x09, 0x99, 0x3d, 0x47, 0x9f, 0x6a, | 2517 | 0x62, 0xd0, 0x16, 0x78, 0x27, 0x1f, 0xde, 0x57, 0xf7, 0x9a, 0x17, 0x21, |
| 2535 | 0xc9, 0xc0, 0x69, 0xde, 0x07, 0xf3, 0x9a, 0xa5, 0xd1, 0x19, 0xd8, 0xc8, | 2518 | 0xe3, 0xaf, 0x1a, 0x9d, 0xa8, 0xa3, 0x79, 0xd7, 0x16, 0xc6, 0xec, 0x30, |
| 2536 | 0x1c, 0xfc, 0x82, 0x5a, 0x7d, 0x57, 0x66, 0x2c, 0xca, 0xa1, 0x53, 0xda, | 2519 | 0xf6, 0x90, 0xee, 0xb7, 0x81, 0x7b, 0x00, 0x7a, 0x4a, 0xdd, 0xb4, 0xa1, |
| 2537 | 0x56, 0x51, 0x8f, 0xaf, 0xc2, 0x37, 0xac, 0xc6, 0xa4, 0x09, 0xb6, 0xa5, | 2520 | 0xb3, 0xa6, 0x2c, 0xf5, 0xa5, 0x67, 0x2a, 0xc2, 0xef, 0x02, 0x59, 0xec, |
| 2538 | 0x2e, 0x46, 0x8d, 0xe2, 0xe2, 0x07, 0xb0, 0x07, 0xfe, 0x7e, 0x83, 0xdc, | 2521 | 0xb9, 0x0c, 0xbd, 0xcc, 0x40, 0x1e, 0xcc, 0xf5, 0x28, 0x57, 0x9c, 0xed, |
| 2539 | 0xf2, 0x62, 0xcc, 0xa0, 0x6d, 0xa9, 0x8b, 0xd4, 0x73, 0xa4, 0x53, 0x17, | 2522 | 0xf4, 0x94, 0x94, 0xdd, 0xad, 0xc0, 0x97, 0x97, 0x92, 0x3b, 0x8c, 0xbd, |
| 2540 | 0xa9, 0xe7, 0xa4, 0xc3, 0xb7, 0x17, 0x7c, 0x5f, 0x1c, 0xd1, 0xef, 0xd3, | 2523 | 0x8e, 0x43, 0x6f, 0x7f, 0xb9, 0x85, 0x77, 0x99, 0xcd, 0x56, 0x16, 0x34, |
| 2541 | 0x37, 0x6d, 0xf2, 0xf2, 0x8f, 0x92, 0xad, 0x30, 0x47, 0x24, 0x3f, 0xd2, | 2524 | 0xde, 0x25, 0xe3, 0x27, 0xa7, 0x64, 0xc2, 0x59, 0xfd, 0x66, 0x94, 0xe1, |
| 2542 | 0x8d, 0x5c, 0xa6, 0x2b, 0x6b, 0x0f, 0x8c, 0x6f, 0xca, 0xa7, 0xe5, 0xeb, | 2525 | 0xf7, 0x94, 0x45, 0xd4, 0xb4, 0xbe, 0x3d, 0xe6, 0x64, 0xfc, 0x14, 0x70, |
| 2543 | 0xee, 0x4f, 0xc1, 0x17, 0xf9, 0x68, 0xe4, 0x8b, 0x3c, 0x75, 0x4a, 0x93, | 2526 | 0x38, 0xac, 0x8d, 0x7b, 0xa1, 0x37, 0xfd, 0xaa, 0x36, 0x2e, 0x29, 0x9f, |
| 2544 | 0xe6, 0xcb, 0xe7, 0x07, 0x82, 0x06, 0x3f, 0x7d, 0xa7, 0x63, 0xc0, 0xff, | 2527 | 0xc4, 0xf9, 0xef, 0x01, 0x57, 0x6f, 0x65, 0x0f, 0xe0, 0xca, 0xa8, 0x9f, |
| 2545 | 0x75, 0xf8, 0x80, 0x5e, 0xf4, 0x4f, 0xa2, 0x47, 0x48, 0xbb, 0x48, 0xde, | 2528 | 0x8b, 0xc8, 0x85, 0x17, 0x1c, 0x43, 0xca, 0x36, 0x7c, 0x6b, 0x31, 0xa9, |
| 2546 | 0xc9, 0xeb, 0x0d, 0xe4, 0x8d, 0x3e, 0x9f, 0xd3, 0xf8, 0x7e, 0x5d, 0x66, | 2529 | 0xeb, 0xbb, 0xba, 0x65, 0xde, 0xe9, 0x37, 0x75, 0xde, 0x3d, 0x26, 0x7c, |
| 2547 | 0x17, 0x9d, 0x93, 0x88, 0xab, 0x7c, 0x3b, 0xef, 0x71, 0xdf, 0x81, 0xb7, | 2530 | 0xdf, 0x57, 0x56, 0xf6, 0x9d, 0xd4, 0x0d, 0xab, 0x5b, 0x16, 0x9d, 0x8a, |
| 2548 | 0xf3, 0xfe, 0xba, 0xb8, 0xf2, 0x49, 0x98, 0x55, 0xc1, 0xf7, 0xca, 0x76, | 2531 | 0x54, 0x07, 0x38, 0xe6, 0xf9, 0x55, 0xc4, 0xb4, 0x7c, 0x5f, 0x99, 0xd7, |
| 2549 | 0x59, 0x34, 0xfa, 0x8e, 0x98, 0xce, 0xc3, 0x8f, 0xd4, 0xe8, 0x27, 0x28, | 2532 | 0x35, 0x75, 0xb7, 0x5d, 0x76, 0xd5, 0xfd, 0x68, 0xca, 0x94, 0xc3, 0xa0, |
| 2550 | 0xa3, 0x1b, 0x92, 0x5d, 0xe4, 0xfb, 0x97, 0x8b, 0x6f, 0xba, 0xe6, 0xfb, | 2533 | 0x0f, 0xcf, 0x0b, 0xd0, 0xf1, 0x69, 0xe6, 0x78, 0xfe, 0x9d, 0xf1, 0x81, |
| 2551 | 0x8d, 0xc6, 0x3d, 0x36, 0xe0, 0x7a, 0x01, 0x47, 0xba, 0xd6, 0x29, 0x3f, | 2534 | 0xe5, 0x22, 0x68, 0x68, 0x97, 0xde, 0x1f, 0xd3, 0xc6, 0x1e, 0xc2, 0x1c, |
| 2552 | 0xf8, 0x9c, 0xbd, 0x0d, 0xbe, 0xa6, 0x71, 0xdf, 0xb8, 0x3c, 0x87, 0x3c, | 2535 | 0xc7, 0x69, 0xe8, 0xeb, 0xc3, 0x78, 0x26, 0x6c, 0x12, 0x3d, 0xe5, 0xd0, |
| 2553 | 0xe0, 0x0d, 0xfb, 0x0e, 0xb9, 0x4e, 0x33, 0x17, 0xaa, 0xd6, 0xa6, 0x60, | 2536 | 0x8d, 0xde, 0x04, 0x2d, 0xd0, 0x4b, 0xd6, 0xa5, 0xfb, 0x53, 0x32, 0x7f, |
| 2554 | 0x93, 0x4d, 0xf0, 0x65, 0xa6, 0x6c, 0x96, 0x9a, 0xa5, 0x8a, 0x7c, 0x67, | 2537 | 0x72, 0xb7, 0x94, 0x16, 0x76, 0x03, 0xff, 0x3f, 0x22, 0xe7, 0xbf, 0x33, |
| 2555 | 0x79, 0x85, 0xbe, 0x90, 0xb4, 0xb7, 0x61, 0xde, 0xf5, 0x5f, 0xf4, 0xb5, | 2538 | 0xb8, 0x8b, 0x65, 0xde, 0xcf, 0x7d, 0x5e, 0xdc, 0xa2, 0x6c, 0x63, 0x9a, |
| 2556 | 0x9b, 0x25, 0xc4, 0x59, 0xd8, 0xf6, 0x66, 0x29, 0x8a, 0xbe, 0x17, 0xbd, | 2539 | 0xf3, 0xec, 0xf7, 0x61, 0x3d, 0xea, 0x07, 0x47, 0xdd, 0x4f, 0x03, 0x06, |
| 2557 | 0x85, 0x3e, 0x8e, 0x3e, 0x89, 0x7e, 0x04, 0xfd, 0x08, 0x7a, 0x0b, 0x7b, | 2540 | 0x67, 0xe7, 0x36, 0x7e, 0xfb, 0xeb, 0x84, 0x9f, 0xae, 0xb0, 0x76, 0x40, |
| 2558 | 0x63, 0xe8, 0xfd, 0x9a, 0x81, 0xb8, 0x6e, 0xf3, 0x5d, 0xd4, 0xe7, 0x21, | 2541 | 0x6c, 0x99, 0x1b, 0x2c, 0xd4, 0xd2, 0x66, 0x41, 0x7d, 0x97, 0xc8, 0x88, |
| 2559 | 0x57, 0xb4, 0x18, 0xd3, 0xc2, 0x76, 0x0e, 0x75, 0x44, 0x76, 0x84, 0xb9, | 2542 | 0x1f, 0x6f, 0x38, 0x17, 0x17, 0x6b, 0x1a, 0xf5, 0x68, 0x8e, 0xef, 0x0e, |
| 2560 | 0x1e, 0x73, 0xbe, 0x8f, 0x1d, 0xd3, 0x62, 0x5d, 0x5e, 0x30, 0xf6, 0x0d, | 2543 | 0xab, 0xfb, 0x1f, 0xf5, 0x7d, 0x4e, 0xde, 0x95, 0x51, 0xe8, 0x58, 0xef, |
| 2561 | 0x31, 0x2e, 0x54, 0x10, 0x17, 0x3e, 0xd8, 0x8d, 0xfa, 0xd1, 0xdc, 0xaf, | 2544 | 0x74, 0x06, 0x39, 0xf1, 0x7b, 0xc8, 0x27, 0x7f, 0x1e, 0xc8, 0x60, 0x38, |
| 2562 | 0xdf, 0x8e, 0x16, 0x31, 0xe6, 0x37, 0x6a, 0xde, 0xe8, 0x1c, 0xe2, 0x14, | 2545 | 0xd0, 0x8d, 0xd6, 0x06, 0x9d, 0xc0, 0x39, 0x3b, 0x38, 0x7b, 0x07, 0x7a, |
| 2563 | 0xfd, 0xa7, 0x83, 0x3d, 0x79, 0xf8, 0xf1, 0x2e, 0xd8, 0x5f, 0x06, 0x7e, | 2546 | 0xe0, 0xe0, 0xac, 0x57, 0xf5, 0x63, 0xb8, 0xc1, 0xe7, 0x6e, 0x92, 0xbf, |
| 2564 | 0x1b, 0xdf, 0x4b, 0x6f, 0xec, 0x76, 0x63, 0x2a, 0xf2, 0x77, 0xb5, 0xfd, | 2547 | 0x9c, 0x49, 0x67, 0x56, 0xa0, 0x3f, 0x57, 0xc1, 0xeb, 0x0a, 0xea, 0xbc, |
| 2565 | 0xbd, 0xc6, 0xc6, 0x9e, 0x9d, 0x6a, 0x83, 0x0e, 0xe0, 0x48, 0x54, 0x96, | 2548 | 0x2b, 0x88, 0x23, 0x0b, 0x35, 0x7e, 0x4b, 0xe0, 0xb7, 0x38, 0x8e, 0xb7, |
| 2566 | 0x60, 0x83, 0x3f, 0xb4, 0x4f, 0xea, 0xdc, 0x8e, 0x77, 0xf1, 0x2c, 0x72, | 2549 | 0xe1, 0x3c, 0x42, 0x7f, 0xfc, 0x52, 0x60, 0x17, 0x9b, 0xd4, 0x7d, 0xe7, |
| 2567 | 0xd4, 0xdc, 0x02, 0x73, 0x98, 0x13, 0xa8, 0x4b, 0x50, 0x9f, 0x45, 0x59, | 2550 | 0xfb, 0x38, 0xc3, 0x15, 0xd3, 0xcf, 0x17, 0xfd, 0x35, 0x9b, 0x24, 0xfc, |
| 2568 | 0x93, 0x33, 0x16, 0xe8, 0x5c, 0x34, 0x2a, 0x6d, 0x8c, 0x03, 0x37, 0x70, | 2551 | 0xde, 0xe7, 0xeb, 0x0f, 0x69, 0xa1, 0xfe, 0x7c, 0xb2, 0xc5, 0xcf, 0xfb, |
| 2569 | 0x1e, 0xf8, 0x5a, 0x76, 0x20, 0xb3, 0x03, 0xc8, 0x09, 0x1d, 0x27, 0x6c, | 2552 | 0xf9, 0x0d, 0x8c, 0xf5, 0x0b, 0x9f, 0xef, 0xdf, 0xe2, 0xe3, 0x6a, 0xd4, |
| 2570 | 0xed, 0x93, 0xf8, 0x21, 0xfa, 0x1c, 0xc1, 0x7e, 0x53, 0xdc, 0xf7, 0x74, | 2553 | 0xdb, 0x8f, 0x3d, 0xd6, 0x6a, 0x85, 0x3e, 0xf8, 0x6c, 0xd7, 0x93, 0x63, |
| 2571 | 0xf8, 0xdd, 0x29, 0xfd, 0x5b, 0x31, 0x94, 0xeb, 0xb3, 0xd8, 0x7b, 0x17, | 2554 | 0xf6, 0xcd, 0xf6, 0x76, 0x8f, 0x13, 0xca, 0x87, 0xf2, 0x2b, 0xca, 0x11, |
| 2572 | 0x70, 0x71, 0x9e, 0x6f, 0xd9, 0x22, 0xfb, 0x16, 0xdc, 0x9c, 0x56, 0x59, | 2555 | 0x37, 0x0d, 0x5b, 0xa0, 0xec, 0xac, 0x06, 0xd9, 0x89, 0xfc, 0xb9, 0x23, |
| 2573 | 0x8d, 0xf8, 0x7e, 0xd5, 0xc3, 0xc7, 0x75, 0xe5, 0xfd, 0xa6, 0xb1, 0xc7, | 2556 | 0xbc, 0xef, 0xc2, 0x3b, 0x25, 0xbb, 0x64, 0x21, 0xd6, 0xca, 0xfb, 0x5a, |
| 2574 | 0x7d, 0x1b, 0xc6, 0x1d, 0x9f, 0x42, 0xfe, 0xbc, 0x81, 0x7b, 0x79, 0x03, | 2557 | 0xe8, 0xe3, 0xdf, 0xca, 0xc4, 0xac, 0xc8, 0x32, 0xde, 0x2f, 0x39, 0xb4, |
| 2575 | 0x77, 0x72, 0xa5, 0x44, 0x5d, 0x1f, 0x86, 0xde, 0x43, 0x86, 0x53, 0xc4, | 2558 | 0xd1, 0x0c, 0xf2, 0xd7, 0x8d, 0x32, 0x3f, 0x87, 0x3a, 0xcb, 0x91, 0x52, |
| 2576 | 0x35, 0xa2, 0xcf, 0xde, 0x28, 0xc1, 0x77, 0xd2, 0xff, 0x29, 0x64, 0x77, | 2559 | 0xe1, 0x4e, 0xc6, 0x99, 0xb8, 0x5c, 0x51, 0xf7, 0x7b, 0x22, 0x3b, 0xcf, |
| 2577 | 0x6d, 0x6e, 0x4c, 0x77, 0xf1, 0xf4, 0xba, 0x70, 0xe2, 0xaf, 0xed, 0xd6, | 2560 | 0x1a, 0x62, 0x9c, 0x45, 0x41, 0x07, 0x99, 0x9f, 0xef, 0x0b, 0xef, 0xfb, |
| 2578 | 0xf4, 0x54, 0xf5, 0x3b, 0x18, 0xe5, 0x04, 0x1d, 0xe4, 0x6f, 0x03, 0x1a, | 2561 | 0x7c, 0x5b, 0xaf, 0xd6, 0xb0, 0xd6, 0xe9, 0x55, 0xfe, 0xb1, 0x5a, 0x1f, |
| 2579 | 0xe6, 0x6b, 0x51, 0xfd, 0xfe, 0xae, 0x38, 0x47, 0x3e, 0x46, 0x24, 0xbb, | 2562 | 0x97, 0xf2, 0x0c, 0xf7, 0x42, 0x3f, 0x97, 0xc2, 0x3b, 0x5b, 0x26, 0x4f, |
| 2580 | 0xe0, 0xef, 0xeb, 0xc6, 0xbe, 0xd6, 0x06, 0x5c, 0x77, 0x6f, 0xe3, 0x41, | 2563 | 0x66, 0xe4, 0xfb, 0xfc, 0x5e, 0x93, 0x1d, 0xc5, 0x1e, 0x05, 0xa9, 0x2c, |
| 2581 | 0x79, 0x3c, 0x70, 0xfd, 0x93, 0x6f, 0xc3, 0x85, 0xad, 0xb7, 0x61, 0xc6, | 2564 | 0x63, 0xbe, 0xfe, 0x4f, 0x32, 0xb7, 0x38, 0x2e, 0xf3, 0x33, 0x17, 0x1a, |
| 2582 | 0x5f, 0xde, 0x4d, 0x0a, 0xfb, 0xfd, 0xfb, 0xe9, 0xf5, 0x6a, 0x81, 0xc4, | 2565 | 0xee, 0x73, 0x31, 0x9e, 0x6b, 0xac, 0x4f, 0x8b, 0xac, 0xa9, 0x50, 0x7f, |
| 2583 | 0x7c, 0x41, 0x98, 0xab, 0xf0, 0x8e, 0xc6, 0x61, 0xd7, 0x5d, 0xc0, 0x6f, | 2566 | 0x5a, 0x18, 0xc3, 0x06, 0xea, 0x93, 0xa5, 0x9b, 0xef, 0x1f, 0x1b, 0xeb, |
| 2584 | 0x4b, 0xa5, 0xd4, 0x22, 0xaa, 0x87, 0xb5, 0x31, 0x73, 0xe5, 0xc6, 0x33, | 2567 | 0xd2, 0x51, 0x39, 0x8a, 0x33, 0xae, 0x9e, 0xcc, 0xa8, 0xba, 0xa6, 0x25, |
| 2585 | 0x7f, 0xdb, 0x3b, 0x13, 0xf5, 0xf4, 0x19, 0xe6, 0xcd, 0x3a, 0xce, 0x00, | 2568 | 0x37, 0xfb, 0xf8, 0x87, 0x88, 0x11, 0x63, 0x42, 0x3d, 0xbb, 0x2e, 0x5f, |
| 2586 | 0xa6, 0x7d, 0x1b, 0x6d, 0xbf, 0xee, 0xc1, 0x71, 0x3d, 0x29, 0x05, 0xe4, | 2569 | 0xb3, 0x8f, 0xca, 0x23, 0x88, 0x1d, 0x47, 0x90, 0x5f, 0xff, 0x36, 0xea, |
| 2587 | 0xa1, 0xb9, 0x05, 0x64, 0xf4, 0xf0, 0xdf, 0x2a, 0xcd, 0xdf, 0xb3, 0xf8, | 2570 | 0xba, 0xd4, 0x66, 0x9e, 0x21, 0xe8, 0xb5, 0x58, 0x57, 0x7a, 0x32, 0x6a, |
| 2588 | 0x86, 0x37, 0x1c, 0x9f, 0x05, 0x8d, 0x05, 0x33, 0xc3, 0x77, 0x33, 0xe0, | 2571 | 0xdf, 0x61, 0xfe, 0x00, 0x92, 0x7d, 0xbf, 0xce, 0xf8, 0xf8, 0xdf, 0x5e, |
| 2589 | 0xd8, 0xbb, 0x0d, 0xc7, 0x84, 0x87, 0x63, 0x42, 0x8a, 0xe7, 0x26, 0x61, | 2572 | 0x1e, 0xf1, 0xee, 0x43, 0x0b, 0x3e, 0x41, 0xc1, 0x69, 0x3e, 0xdc, 0x0c, |
| 2590 | 0x6b, 0x19, 0xc4, 0xf7, 0x7e, 0xf3, 0x80, 0x7c, 0x1e, 0xc5, 0x35, 0xe6, | 2573 | 0xe1, 0xfa, 0xcd, 0x63, 0x84, 0x9b, 0xd3, 0x02, 0x38, 0x0d, 0x70, 0x31, |
| 2591 | 0x2e, 0x8c, 0xe0, 0x9e, 0x1c, 0x67, 0x9f, 0x7d, 0x18, 0x74, 0xbf, 0x86, | 2574 | 0xb9, 0x68, 0x1b, 0xd0, 0x8d, 0x51, 0xf0, 0x09, 0xdf, 0x3e, 0x18, 0x7e, |
| 2592 | 0xd8, 0xea, 0xe7, 0x3c, 0xc5, 0x58, 0x08, 0x31, 0xec, 0x98, 0xfe, 0x0d, | 2575 | 0x6f, 0xdc, 0x80, 0x98, 0xba, 0xb6, 0xfe, 0x8d, 0x60, 0xfd, 0xf7, 0x83, |
| 2593 | 0xb6, 0x60, 0x9a, 0xd0, 0x57, 0x65, 0x0c, 0x27, 0x51, 0xde, 0x23, 0xbe, | 2576 | 0xf5, 0x97, 0x56, 0xd7, 0x87, 0x71, 0xf5, 0x13, 0x4f, 0x1a, 0xe8, 0x7a, |
| 2594 | 0xcd, 0x23, 0x56, 0x91, 0xcf, 0x0e, 0x29, 0x9a, 0xc6, 0xa3, 0x21, 0xe4, | 2577 | 0xa3, 0xe6, 0xc3, 0x1f, 0x0d, 0xe8, 0xba, 0xb4, 0x4a, 0x57, 0x08, 0x0f, |
| 2595 | 0x35, 0xd9, 0x05, 0xda, 0x91, 0x0c, 0x84, 0xd2, 0xcd, 0xc8, 0x49, 0x1d, | 2578 | 0x79, 0x2a, 0x9e, 0xe9, 0x93, 0xe9, 0x9b, 0x7b, 0x21, 0x47, 0x7e, 0x47, |
| 2596 | 0xf9, 0x99, 0xcd, 0x7f, 0xa3, 0x30, 0x2f, 0x1b, 0x35, 0x13, 0xfd, 0x3a, | 2579 | 0x86, 0x4d, 0x38, 0xfc, 0x7e, 0x4b, 0x3b, 0xd1, 0x65, 0x25, 0x71, 0x54, |
| 2597 | 0xee, 0xe1, 0xdb, 0xf8, 0xbe, 0xde, 0x83, 0xbc, 0x0f, 0x2b, 0x19, 0xe8, | 2580 | 0xc6, 0xac, 0xf4, 0xf0, 0xa4, 0xc4, 0xa0, 0xc3, 0xf4, 0x29, 0x31, 0x99, |
| 2598 | 0x6e, 0x52, 0xe7, 0x33, 0xcc, 0x23, 0xaa, 0x88, 0xb7, 0x0a, 0xb1, 0x06, | 2581 | 0xa7, 0xaf, 0x41, 0x5f, 0xb6, 0x6f, 0x4d, 0xeb, 0xfb, 0x0d, 0xb4, 0xc6, |
| 2599 | 0x79, 0xd5, 0x38, 0x73, 0xd7, 0xe7, 0x96, 0xaf, 0xcb, 0x95, 0x45, 0xfe, | 2582 | 0x9e, 0x27, 0x8d, 0x3e, 0xad, 0xf1, 0x1d, 0x6b, 0xb4, 0xfa, 0xf0, 0x3e, |
| 2600 | 0x06, 0xca, 0xb8, 0x7c, 0x90, 0xfe, 0xc0, 0x9c, 0x4b, 0x61, 0x6e, 0x85, | 2583 | 0xad, 0xef, 0xd7, 0x1a, 0xe0, 0xcf, 0x1a, 0x01, 0xbc, 0xd1, 0x00, 0x4f, |
| 2601 | 0xbe, 0x0c, 0xe3, 0x3a, 0x0c, 0xa8, 0x07, 0x39, 0x02, 0x72, 0xed, 0x4d, | 2584 | 0x7d, 0x66, 0x3e, 0x41, 0x7d, 0x26, 0x6d, 0x5f, 0x50, 0xf7, 0x66, 0x1b, |
| 2602 | 0x2b, 0x09, 0x3e, 0xaf, 0xcb, 0xc6, 0x62, 0x58, 0x96, 0x2d, 0xe6, 0x45, | 2585 | 0x72, 0xb3, 0x07, 0x3f, 0xbf, 0xc3, 0x93, 0x38, 0xf2, 0x8c, 0x66, 0xbc, |
| 2603 | 0x12, 0xcf, 0x02, 0x76, 0x63, 0xe5, 0x9a, 0xab, 0x13, 0x84, 0x47, 0xcd, | 2586 | 0xbb, 0x32, 0xc3, 0x1c, 0x44, 0xef, 0x69, 0x96, 0x9d, 0xd0, 0x59, 0x9e, |
| 2604 | 0x53, 0x40, 0x5e, 0x77, 0x40, 0xef, 0xfd, 0x65, 0xf7, 0x4c, 0x9a, 0x1a, | 2587 | 0x5d, 0xe3, 0x9d, 0xab, 0x27, 0x8f, 0xd8, 0xa4, 0xe5, 0x3f, 0xbd, 0x33, |
| 2605 | 0xeb, 0xbc, 0x19, 0xd9, 0xa0, 0x3d, 0xd9, 0x7c, 0x93, 0x62, 0x6e, 0x70, | 2588 | 0x89, 0x9d, 0x76, 0x55, 0xfa, 0xcc, 0x66, 0xe1, 0x9d, 0xae, 0xc2, 0x99, |
| 2606 | 0x02, 0x3a, 0xcb, 0xdc, 0x9d, 0xf5, 0x00, 0xbe, 0x6b, 0x5c, 0x27, 0xef, | 2589 | 0x21, 0x2d, 0xa7, 0xfb, 0x7a, 0xcd, 0xb7, 0xc0, 0xe7, 0xe8, 0x8c, 0x26, |
| 2607 | 0xe8, 0x97, 0xfa, 0x21, 0x1b, 0xda, 0x3d, 0xdf, 0xc4, 0x10, 0x47, 0x15, | 2590 | 0xf3, 0x56, 0x3a, 0x79, 0x1e, 0x38, 0xf6, 0xe0, 0x6c, 0xe6, 0x07, 0x48, |
| 2608 | 0x6d, 0xbd, 0xa8, 0x7d, 0x41, 0xb1, 0x3c, 0x83, 0x98, 0x02, 0x1f, 0xc0, | 2591 | 0x8f, 0xc8, 0x04, 0xf4, 0x7b, 0x5e, 0xc5, 0x43, 0xea, 0x71, 0x7a, 0xac, |
| 2609 | 0xdf, 0x70, 0xa6, 0xa6, 0x70, 0x97, 0xe3, 0x80, 0xdb, 0x16, 0x4b, 0xd6, | 2592 | 0x82, 0x1c, 0xe7, 0xa7, 0x2a, 0xa6, 0x79, 0xde, 0x87, 0x88, 0x6b, 0x63, |
| 2610 | 0x8a, 0x3a, 0x2f, 0x53, 0xe7, 0x6f, 0xbf, 0xdf, 0xe4, 0x61, 0x3f, 0x6a, | 2593 | 0xeb, 0x74, 0x4f, 0x3f, 0xeb, 0xeb, 0x9e, 0x7e, 0x16, 0xb5, 0xf1, 0xf1, |
| 2611 | 0x0d, 0xba, 0x05, 0x1b, 0x52, 0x6b, 0x51, 0xf4, 0xf0, 0xc7, 0x6b, 0xa8, | 2594 | 0xb8, 0xb4, 0x2c, 0xc1, 0x7e, 0x9e, 0xef, 0x52, 0xfa, 0xa7, 0x3f, 0xcf, |
| 2612 | 0x2f, 0x4a, 0x7c, 0x1f, 0x42, 0x6d, 0x50, 0xe2, 0xdb, 0x49, 0x12, 0xfd, | 2595 | 0x6f, 0x19, 0xf0, 0x73, 0xc7, 0x0d, 0xb1, 0x8e, 0xab, 0x38, 0x00, 0x79, |
| 2613 | 0x08, 0xdf, 0x8b, 0x3c, 0xbf, 0x46, 0xfc, 0xa4, 0xc3, 0xf7, 0x2f, 0xcc, | 2596 | 0x17, 0x64, 0xf2, 0x14, 0x7d, 0xa9, 0x25, 0x3b, 0x8e, 0xf3, 0x3c, 0x98, |
| 2614 | 0x25, 0xe9, 0x5f, 0xfc, 0x7c, 0xd2, 0xd5, 0x85, 0x53, 0x65, 0xfa, 0x10, | 2597 | 0xcf, 0xcc, 0x0d, 0x8e, 0xc3, 0x46, 0xa6, 0xf8, 0x7d, 0x70, 0xe9, 0x23, |
| 2615 | 0xea, 0x75, 0x3f, 0xfc, 0x16, 0x75, 0xc1, 0xcd, 0x25, 0x57, 0x2a, 0xae, | 2598 | 0x19, 0xb7, 0x28, 0x07, 0x94, 0xfa, 0x4b, 0xa6, 0xc4, 0x96, 0xe0, 0x13, |
| 2616 | 0xcc, 0x66, 0xeb, 0x97, 0x75, 0x8c, 0xd8, 0x2f, 0x16, 0x74, 0x8c, 0xb2, | 2599 | 0x96, 0x92, 0xd2, 0x04, 0xdb, 0xd2, 0xcf, 0x26, 0xb4, 0xea, 0xec, 0x7f, |
| 2617 | 0xc3, 0x9a, 0x8e, 0x01, 0x97, 0x24, 0xa3, 0x7b, 0xca, 0xec, 0x75, 0xc9, | 2600 | 0xc1, 0x1e, 0xf8, 0x4d, 0x20, 0x83, 0x71, 0x52, 0xab, 0xd6, 0x06, 0xd0, |
| 2618 | 0xac, 0x8c, 0xc8, 0x0b, 0xda, 0x6f, 0xf9, 0x3e, 0x8b, 0x39, 0x64, 0x0c, | 2601 | 0x53, 0xcf, 0x91, 0x46, 0x9d, 0xa5, 0x9e, 0x93, 0x8e, 0xd0, 0x5e, 0xf0, |
| 2619 | 0xf2, 0x4b, 0xca, 0xf3, 0x67, 0xaf, 0x4b, 0xf6, 0x45, 0xfa, 0xad, 0xe1, | 2602 | 0x7c, 0x36, 0xa3, 0xee, 0x6c, 0x3f, 0xb4, 0xc9, 0xcb, 0xdf, 0x48, 0x61, |
| 2620 | 0x58, 0xab, 0x41, 0x5f, 0xe5, 0x48, 0x0d, 0xb1, 0xe9, 0x80, 0xcd, 0x7f, | 2603 | 0x26, 0xfc, 0x1b, 0x10, 0xd9, 0x8c, 0x1c, 0xa6, 0xa3, 0x60, 0xef, 0x18, |
| 2621 | 0x07, 0x10, 0x42, 0x4d, 0xe7, 0x48, 0xf3, 0x68, 0xc2, 0x8e, 0x1b, 0xfd, | 2604 | 0xbe, 0x22, 0x9f, 0x96, 0xaf, 0x6d, 0x9f, 0x82, 0x2f, 0xf2, 0xd1, 0xc8, |
| 2622 | 0x4f, 0xb6, 0x1a, 0x8c, 0x8d, 0xc3, 0xe6, 0x53, 0xe2, 0xbf, 0x47, 0xb5, | 2605 | 0x17, 0x79, 0x6a, 0x97, 0x26, 0xc5, 0x57, 0xc8, 0x0f, 0x04, 0x0d, 0x7e, |
| 2623 | 0xc8, 0x53, 0xfa, 0xad, 0x02, 0x66, 0xbb, 0xf0, 0x91, 0xfe, 0x1d, 0xe5, | 2606 | 0x7a, 0x8e, 0x27, 0x81, 0xff, 0x61, 0xf8, 0x80, 0x6e, 0xf4, 0x0f, 0xa1, |
| 2624 | 0x66, 0x8a, 0xb2, 0xc6, 0x78, 0x8d, 0xf3, 0x85, 0xc8, 0xcd, 0x54, 0x93, | 2607 | 0x47, 0x28, 0x3b, 0x4b, 0xde, 0xc9, 0xeb, 0x55, 0xe4, 0x8b, 0x21, 0x9f, |
| 2625 | 0x14, 0xef, 0x72, 0x9c, 0xa3, 0xa3, 0xa9, 0xdd, 0xee, 0xbf, 0x15, 0xf9, | 2608 | 0x25, 0x3c, 0xbf, 0x2e, 0x93, 0xb3, 0xde, 0x61, 0xc4, 0x53, 0xde, 0x27, |
| 2626 | 0xc6, 0x5d, 0xae, 0x2f, 0x38, 0xea, 0x8d, 0x5f, 0x41, 0x4f, 0xdd, 0x66, | 2609 | 0x77, 0xea, 0x4a, 0x77, 0xd7, 0xf3, 0xfe, 0xba, 0xf8, 0xf2, 0xe1, 0x5d, |
| 2627 | 0xbc, 0x65, 0x7c, 0xe4, 0xbd, 0xa1, 0x5f, 0xe1, 0x37, 0x63, 0xef, 0x3c, | 2610 | 0x3c, 0x9e, 0x17, 0xd7, 0xcb, 0xa2, 0xd1, 0x77, 0x24, 0x83, 0xbf, 0x7b, |
| 2628 | 0x62, 0x2f, 0xe3, 0x65, 0x97, 0xe4, 0x0e, 0x6b, 0x9f, 0xc1, 0xf9, 0x82, | 2611 | 0xa1, 0x9f, 0xa0, 0x8c, 0xae, 0x4a, 0x61, 0x96, 0x77, 0x5a, 0x3e, 0xbe, |
| 2629 | 0x9b, 0x4b, 0x7b, 0x70, 0x95, 0x69, 0x99, 0xad, 0x30, 0x87, 0xda, 0x40, | 2612 | 0xd2, 0xea, 0xdf, 0xbe, 0x34, 0xae, 0x19, 0x00, 0x5c, 0x37, 0xe0, 0x48, |
| 2630 | 0x2c, 0x1b, 0x82, 0xae, 0x32, 0xa6, 0x9d, 0x44, 0x3c, 0xe7, 0xef, 0xd2, | 2613 | 0xd7, 0x0a, 0xe5, 0x07, 0x9f, 0xb3, 0xbd, 0xc1, 0xd7, 0x34, 0xae, 0xcb, |
| 2631 | 0x58, 0x5b, 0xe2, 0xbe, 0x44, 0x32, 0xae, 0xc0, 0xf3, 0x96, 0x4e, 0xdd, | 2614 | 0xca, 0x33, 0x88, 0xff, 0x6f, 0xd8, 0x37, 0xc9, 0xb5, 0xc4, 0x1c, 0x68, |
| 2632 | 0x8c, 0xf2, 0x3d, 0xea, 0xd2, 0x10, 0xee, 0xfd, 0x4f, 0x59, 0x5b, 0x0c, | 2615 | 0xbe, 0xbe, 0x0f, 0x36, 0xd9, 0x04, 0x5f, 0x66, 0xca, 0x95, 0x5a, 0xb3, |
| 2633 | 0x68, 0x1d, 0xc9, 0xbe, 0x4c, 0xd9, 0xbb, 0xbf, 0x5b, 0x4b, 0xb7, 0x6b, | 2616 | 0xcc, 0x23, 0xcf, 0x59, 0x58, 0xa4, 0x2f, 0x24, 0xed, 0xad, 0x98, 0xf7, |
| 2634 | 0x03, 0xcc, 0x03, 0x1e, 0x87, 0x5c, 0xf6, 0xdb, 0xd7, 0x19, 0xbb, 0xff, | 2617 | 0xfd, 0x17, 0x7d, 0xed, 0x95, 0x1a, 0xe2, 0x2b, 0x6c, 0xfb, 0x4a, 0x2d, |
| 2635 | 0x5d, 0x59, 0xc3, 0xc9, 0xa7, 0x0c, 0xda, 0x36, 0xc6, 0x2b, 0x21, 0x59, | 2618 | 0x81, 0xbe, 0x1b, 0xbd, 0x85, 0x3e, 0x85, 0x3e, 0x83, 0x7e, 0x00, 0xfd, |
| 2636 | 0x8a, 0x92, 0x7f, 0xc8, 0xcb, 0xa0, 0xed, 0xec, 0x24, 0x87, 0xed, 0x32, | 2619 | 0x00, 0x7a, 0x0b, 0x6b, 0x93, 0xe8, 0xc3, 0x5a, 0x82, 0xb8, 0xd6, 0xf8, |
| 2637 | 0xf8, 0x4b, 0xc8, 0x80, 0xb2, 0xf4, 0x65, 0xc0, 0xef, 0x49, 0xdc, 0x17, | 2620 | 0xae, 0xaa, 0xfd, 0xf8, 0xdd, 0x90, 0xb1, 0xcc, 0xb0, 0x47, 0x50, 0x63, |
| 2638 | 0x6b, 0x86, 0x7e, 0x5d, 0x47, 0x16, 0xeb, 0xee, 0xd9, 0xc5, 0x72, 0x23, | 2621 | 0x17, 0x06, 0xc2, 0xbf, 0xb9, 0xb9, 0xe1, 0x99, 0x16, 0x6b, 0xf7, 0x8a, |
| 2639 | 0xcd, 0xa4, 0x97, 0x77, 0x7a, 0x49, 0x72, 0xfa, 0x7e, 0xe7, 0x25, 0x57, | 2622 | 0xb6, 0x47, 0x7d, 0x5f, 0x98, 0x41, 0x5c, 0x78, 0x6e, 0xab, 0xb4, 0x5a, |
| 2640 | 0xb9, 0x24, 0xfb, 0x2a, 0xf3, 0xf2, 0x98, 0xf5, 0x28, 0xf8, 0xbd, 0xe6, | 2623 | 0xe6, 0x3d, 0xea, 0xee, 0x68, 0x16, 0x63, 0x3e, 0xa3, 0x3e, 0x4e, 0x4c, |
| 2641 | 0xcc, 0x58, 0xba, 0x56, 0x19, 0xcf, 0xff, 0x6f, 0xe7, 0x56, 0x1b, 0xdb, | 2624 | 0x21, 0x3e, 0xd1, 0x7f, 0xfe, 0x6f, 0xe7, 0xd6, 0x1b, 0xdb, 0xc6, 0x59, |
| 2642 | 0x56, 0x75, 0x86, 0x5f, 0x5f, 0xdb, 0x69, 0x1a, 0x9a, 0x70, 0xeb, 0x3a, | 2625 | 0xc6, 0x1f, 0x9f, 0x9d, 0x34, 0xe9, 0x9a, 0xf6, 0x92, 0x38, 0xa9, 0x93, |
| 2643 | 0x89, 0x9b, 0x66, 0xad, 0x1d, 0xdf, 0x7e, 0x88, 0xa4, 0xe8, 0x36, 0x64, | 2626 | 0x85, 0xcd, 0x8e, 0x2f, 0xad, 0x45, 0xd2, 0x71, 0xed, 0x2c, 0x16, 0xa6, |
| 2644 | 0x34, 0xea, 0x82, 0x62, 0x9c, 0x50, 0xc2, 0xe8, 0x44, 0xda, 0x75, 0x55, | 2627 | 0x8c, 0x78, 0x76, 0x92, 0x76, 0x30, 0xa6, 0xb4, 0x74, 0xd3, 0x84, 0x10, |
| 2645 | 0xb5, 0x31, 0x64, 0x39, 0xe9, 0x07, 0xd3, 0x06, 0xa3, 0xb0, 0x82, 0x18, | 2628 | 0x58, 0xc9, 0xba, 0x75, 0x13, 0xd2, 0x28, 0x30, 0x34, 0x89, 0xa2, 0x18, |
| 2646 | 0x52, 0x8d, 0xdb, 0x6a, 0x9d, 0x96, 0xc6, 0xe9, 0x07, 0x6b, 0x37, 0x69, | 2629 | 0x27, 0x61, 0x19, 0x18, 0xc7, 0x0b, 0x81, 0x4e, 0xf0, 0xc5, 0x38, 0xd1, |
| 2647 | 0x9a, 0xe5, 0xa4, 0x2d, 0x48, 0x11, 0x2e, 0x88, 0x6e, 0xfb, 0xb1, 0x8d, | 2630 | 0x06, 0x22, 0x4a, 0x3a, 0x8d, 0x0f, 0x08, 0x6d, 0x74, 0xb8, 0x83, 0xef, |
| 2648 | 0x2a, 0x65, 0xec, 0xff, 0xf6, 0x67, 0xda, 0xd0, 0x16, 0x15, 0x18, 0xfc, | 2631 | 0xfc, 0x11, 0x62, 0x12, 0x1f, 0xaa, 0xa8, 0x63, 0x20, 0x21, 0xe0, 0x23, |
| 2649 | 0xd8, 0xa4, 0xfe, 0xe0, 0x47, 0x25, 0xe8, 0xbc, 0xe7, 0x79, 0xcf, 0xbd, | 2632 | 0xd2, 0x98, 0x8e, 0xdf, 0xef, 0x79, 0xef, 0x12, 0xc7, 0x64, 0x54, 0xf0, |
| 2650 | 0x8e, 0x6d, 0x82, 0x26, 0x2d, 0x52, 0xe4, 0x7b, 0xce, 0x3d, 0xf7, 0x9c, | 2633 | 0xc1, 0x3a, 0xbf, 0x77, 0xf7, 0xbe, 0xf7, 0xde, 0xfb, 0x3c, 0xef, 0xef, |
| 2651 | 0x73, 0xcf, 0xfb, 0xfd, 0xbe, 0xcf, 0xc5, 0xda, 0x13, 0x7d, 0x6b, 0xe5, | 2634 | 0xf9, 0x3d, 0x7f, 0xce, 0x43, 0x9f, 0x19, 0xe0, 0xf8, 0x11, 0x61, 0x0c, |
| 2652 | 0x63, 0xf8, 0x1d, 0x27, 0x67, 0x6d, 0xc9, 0xd8, 0x83, 0xf2, 0x63, 0xcd, | 2635 | 0x36, 0x9b, 0xc6, 0xff, 0xea, 0xc5, 0x1e, 0x63, 0x4b, 0xc1, 0xdb, 0x77, |
| 2653 | 0xe5, 0x33, 0x3e, 0x09, 0xc0, 0x27, 0x35, 0xb8, 0x02, 0x69, 0x77, 0x62, | 2636 | 0xb8, 0x61, 0x60, 0xab, 0x46, 0xd0, 0x67, 0x3f, 0x9f, 0x00, 0x36, 0xb0, |
| 2654 | 0x37, 0x85, 0x3e, 0x65, 0x18, 0xb4, 0x8e, 0x1b, 0xbf, 0xd9, 0x36, 0xf7, | 2637 | 0x92, 0xa8, 0x54, 0xb1, 0x07, 0x7f, 0xed, 0xce, 0x29, 0xa7, 0xa3, 0x2c, |
| 2655 | 0x37, 0x9d, 0x81, 0xef, 0xee, 0x0e, 0xb4, 0xfb, 0x39, 0x5f, 0xe3, 0xdf, | 2638 | 0x16, 0xc1, 0x4d, 0x73, 0x65, 0x72, 0x97, 0xcb, 0xf0, 0x47, 0xe0, 0xcb, |
| 2656 | 0xfe, 0xc5, 0xab, 0xa1, 0x0d, 0xca, 0x0c, 0xf6, 0xf3, 0x96, 0xea, 0x59, | 2639 | 0x45, 0xe9, 0xbb, 0xd3, 0x16, 0x90, 0x83, 0xfe, 0x12, 0x73, 0xa3, 0x1d, |
| 2657 | 0x07, 0xbc, 0xc4, 0xdc, 0x74, 0x4c, 0xf3, 0x0f, 0xe1, 0x69, 0xea, 0xa8, | 2640 | 0xf8, 0x26, 0x9e, 0x87, 0xf7, 0x5a, 0xf3, 0xb0, 0x66, 0xa7, 0xc1, 0x05, |
| 2658 | 0xab, 0xd0, 0x51, 0x43, 0xd4, 0x5d, 0xc3, 0xb3, 0x2e, 0xf3, 0x03, 0x51, | 2641 | 0x3d, 0x2f, 0xe2, 0x4c, 0x4a, 0xfc, 0x1c, 0x31, 0x47, 0xd0, 0xdf, 0xc4, |
| 2659 | 0xf9, 0xf3, 0x14, 0xf5, 0x70, 0x5c, 0xfe, 0x34, 0xf5, 0x02, 0xf6, 0x93, | 2642 | 0xb2, 0xc8, 0xab, 0x32, 0xd3, 0x9a, 0x83, 0x84, 0x72, 0xfd, 0x0e, 0x7d, |
| 2660 | 0x28, 0x32, 0x47, 0x79, 0x63, 0x26, 0x47, 0x3f, 0x49, 0xfd, 0xf9, 0xb4, | 2643 | 0x7b, 0xc4, 0xc4, 0xa7, 0x18, 0x7f, 0x16, 0x99, 0x2c, 0x1b, 0x2e, 0x0b, |
| 2661 | 0xfb, 0xac, 0xda, 0x81, 0xb8, 0x95, 0x5f, 0x13, 0x56, 0x7d, 0xf3, 0xb4, | 2644 | 0xbf, 0xac, 0x61, 0xbc, 0xbb, 0xfd, 0xf1, 0x78, 0xdd, 0xd2, 0x71, 0x6a, |
| 2662 | 0xd6, 0x74, 0xe3, 0x56, 0xb7, 0xdc, 0x38, 0x6f, 0x74, 0x6c, 0x78, 0x3a, | 2645 | 0xd2, 0x6b, 0x62, 0xbb, 0x63, 0x23, 0xb0, 0x11, 0x51, 0xa9, 0x43, 0x2e, |
| 2663 | 0x1a, 0x18, 0x99, 0xa3, 0x5d, 0x4a, 0xc6, 0xb2, 0xd6, 0x0a, 0x39, 0x10, | 2646 | 0xd7, 0x21, 0x93, 0x37, 0x4b, 0xd4, 0xf5, 0x61, 0xe8, 0x7d, 0x0b, 0xf3, |
| 2664 | 0x65, 0xee, 0x39, 0x45, 0xfd, 0x0c, 0x5b, 0xd8, 0x6b, 0x67, 0xad, 0x66, | 2647 | 0xb3, 0x18, 0x6b, 0x44, 0x9f, 0x5d, 0x2f, 0x01, 0x3b, 0x6d, 0xf5, 0x4f, |
| 2665 | 0xcf, 0xfe, 0xc4, 0x1a, 0xf4, 0xec, 0xd3, 0x9e, 0x9e, 0xe5, 0xbd, 0x14, | 2648 | 0x7b, 0xc9, 0x0b, 0x69, 0x07, 0xcd, 0x38, 0x03, 0xe6, 0x3e, 0x09, 0xae, |
| 2666 | 0x68, 0x4a, 0x5b, 0x94, 0x98, 0x19, 0xb5, 0x92, 0xb0, 0x79, 0xb8, 0x9e, | 2649 | 0x75, 0xeb, 0x7c, 0x6a, 0x1a, 0x03, 0xe3, 0x3a, 0x41, 0x07, 0x4b, 0xdd, |
| 2667 | 0xe7, 0xfc, 0x71, 0x39, 0x32, 0x7f, 0x18, 0xfe, 0x77, 0xaf, 0xbd, 0x87, | 2650 | 0xfe, 0x3d, 0x5e, 0x8f, 0xa9, 0x77, 0xe2, 0x39, 0xbe, 0xc7, 0x88, 0x64, |
| 2668 | 0x76, 0xd5, 0x1e, 0x22, 0x16, 0x07, 0xeb, 0x7f, 0xa9, 0x61, 0xae, 0xc7, | 2651 | 0xcb, 0x41, 0xbf, 0x4e, 0xf4, 0x6b, 0x6f, 0x18, 0xeb, 0x68, 0xd3, 0x3b, |
| 2669 | 0xbd, 0xb9, 0x78, 0x1f, 0x72, 0x3e, 0xed, 0xc8, 0x04, 0x6c, 0xc9, 0x88, | 2652 | 0x58, 0xfe, 0x3b, 0xf0, 0x7a, 0x33, 0xdf, 0x4f, 0xd8, 0x05, 0x09, 0x38, |
| 2670 | 0x6d, 0xf6, 0x5a, 0x3f, 0x76, 0x77, 0x75, 0xdd, 0x13, 0x05, 0xc7, 0xc3, | 2653 | 0x3f, 0xed, 0x2f, 0x65, 0x93, 0xd6, 0xfc, 0xb6, 0x91, 0xcf, 0x80, 0xef, |
| 2671 | 0x85, 0xe1, 0x17, 0xbe, 0xd0, 0xd7, 0x23, 0x5c, 0x93, 0xeb, 0xb5, 0x49, | 2654 | 0x03, 0x24, 0x96, 0x0a, 0x02, 0xbe, 0x18, 0xa5, 0x8c, 0xd2, 0xd8, 0xd7, |
| 2672 | 0x7a, 0x1f, 0xf4, 0xcb, 0x34, 0xff, 0x73, 0x5e, 0xed, 0x0a, 0xf1, 0x4a, | 2655 | 0x3f, 0x89, 0xca, 0x61, 0x57, 0x2a, 0xa5, 0x03, 0x62, 0x75, 0xb5, 0x68, |
| 2673 | 0xb4, 0x6b, 0x19, 0xdb, 0xf4, 0x80, 0x37, 0xdf, 0xb6, 0x0e, 0x69, 0x89, | 2656 | 0x8d, 0x4e, 0xdc, 0x6a, 0x7c, 0xe6, 0x67, 0xfd, 0x67, 0xc2, 0xf7, 0x5e, |
| 2674 | 0xd6, 0x8c, 0x67, 0x6e, 0x85, 0xed, 0xb8, 0xe4, 0xe6, 0xf9, 0x5b, 0xa9, | 2657 | 0x69, 0xd7, 0xb8, 0x34, 0xec, 0x0c, 0xee, 0x39, 0xd4, 0x34, 0xb7, 0x87, |
| 2675 | 0x44, 0x9c, 0x26, 0xd9, 0x63, 0xaf, 0x6b, 0x98, 0x63, 0x2b, 0xfa, 0x8c, | 2658 | 0xfd, 0xfb, 0x78, 0xdd, 0x91, 0x02, 0xf8, 0x67, 0xae, 0x0c, 0x26, 0x0f, |
| 2676 | 0x4f, 0x10, 0x9c, 0x0e, 0x78, 0xbe, 0xc5, 0x06, 0xfa, 0x4d, 0xde, 0x75, | 2659 | 0xfc, 0xb6, 0xc6, 0x98, 0xe3, 0x61, 0x0c, 0x6f, 0x38, 0x3e, 0x8f, 0x39, |
| 2677 | 0xb3, 0xe6, 0x64, 0xe2, 0x56, 0x57, 0xc3, 0x7b, 0x6c, 0xa8, 0xda, 0xe1, | 2660 | 0x16, 0xec, 0x31, 0xc6, 0xcd, 0x30, 0x46, 0x5f, 0xd3, 0x18, 0x13, 0xfe, |
| 2678 | 0xb8, 0x45, 0xdd, 0xd9, 0x14, 0x95, 0x36, 0xf2, 0x50, 0x45, 0xfd, 0xf8, | 2661 | 0x18, 0x59, 0x29, 0x5e, 0x99, 0xc0, 0x5e, 0x1b, 0x83, 0x7d, 0x4f, 0xda, |
| 2679 | 0x90, 0x63, 0xb0, 0x16, 0x51, 0xe7, 0x60, 0x07, 0x73, 0xf6, 0x6f, 0xeb, | 2662 | 0xa7, 0xe5, 0x23, 0x22, 0x9d, 0x38, 0xf7, 0x72, 0x0a, 0x72, 0xf2, 0xbc, |
| 2680 | 0xb9, 0xb5, 0xd2, 0x27, 0xc0, 0x35, 0xf8, 0xe4, 0x73, 0xf9, 0x5e, 0xe6, | 2663 | 0x49, 0x77, 0x1a, 0xf3, 0x7e, 0x0d, 0xb6, 0x35, 0xe0, 0x3c, 0xc5, 0x58, |
| 2681 | 0x7a, 0x31, 0x7f, 0x0b, 0xe7, 0x77, 0xbd, 0x73, 0x4e, 0xb8, 0x39, 0xeb, | 2664 | 0x18, 0x36, 0xec, 0xf3, 0x2e, 0xe3, 0x62, 0x05, 0x30, 0xb2, 0x84, 0x6d, |
| 2682 | 0x7e, 0xc9, 0x9e, 0x37, 0xfc, 0x97, 0x76, 0xc0, 0x7b, 0x6d, 0x68, 0xcf, | 2665 | 0x85, 0x86, 0x53, 0x35, 0xf0, 0xba, 0x2a, 0x2c, 0x69, 0xd1, 0xe1, 0x7b, |
| 2683 | 0xd1, 0x26, 0x7c, 0xd1, 0x3c, 0xbe, 0x6d, 0xd8, 0xa2, 0xb6, 0xe1, 0x78, | 2666 | 0x76, 0x48, 0xd1, 0x0e, 0x8d, 0x87, 0xc1, 0x6b, 0xb2, 0x65, 0xee, 0x23, |
| 2684 | 0x81, 0xfc, 0x49, 0xbe, 0xf4, 0xf9, 0xd1, 0xd7, 0x79, 0xe4, 0x51, 0xea, | 2667 | 0x19, 0x0a, 0x8f, 0xb5, 0x82, 0x8b, 0x7a, 0xf2, 0x36, 0xa0, 0xa6, 0x58, |
| 2685 | 0xd9, 0x41, 0x39, 0x53, 0xe0, 0xd9, 0xa4, 0xb4, 0xa6, 0xb5, 0xf1, 0xec, | 2668 | 0x5a, 0x92, 0xfa, 0x86, 0x8d, 0xe3, 0x05, 0xc8, 0xe1, 0x45, 0xfc, 0x7f, |
| 2686 | 0x84, 0xe2, 0xb1, 0x7a, 0xa6, 0x13, 0x17, 0x73, 0x32, 0x2c, 0x57, 0x5d, | 2669 | 0x3e, 0xaa, 0x75, 0x4a, 0xe0, 0xeb, 0x8b, 0x78, 0x1f, 0xf2, 0x19, 0xf2, |
| 2687 | 0x9e, 0x59, 0xa2, 0x98, 0x09, 0xb6, 0xd6, 0xbc, 0xff, 0x3e, 0x3d, 0xb3, | 2670 | 0x88, 0x1a, 0xec, 0xad, 0x05, 0x5b, 0x03, 0x5e, 0x35, 0x4a, 0xde, 0xf5, |
| 2688 | 0xb0, 0xfa, 0x8c, 0x31, 0x8c, 0x7d, 0xc9, 0xa3, 0x77, 0x9b, 0x9e, 0x6d, | 2671 | 0xdc, 0xda, 0x4d, 0x79, 0x73, 0x35, 0x81, 0x67, 0xd1, 0x2e, 0x9f, 0x21, |
| 2689 | 0xa6, 0x8e, 0x3e, 0x8f, 0xea, 0x39, 0x85, 0xa1, 0x13, 0x59, 0xc7, 0x0f, | 2672 | 0x1e, 0xd8, 0x0b, 0x69, 0x9c, 0x5b, 0x37, 0xdc, 0xb7, 0xb8, 0x85, 0x0d, |
| 2690 | 0x47, 0xf8, 0x0c, 0xd7, 0xa5, 0xcf, 0xc7, 0xb5, 0xc8, 0x7b, 0x3d, 0xb0, | 2673 | 0xd4, 0x05, 0x8e, 0x00, 0x8e, 0xbd, 0x0d, 0x0c, 0x2c, 0xe2, 0xfe, 0xfa, |
| 2691 | 0xd8, 0xfd, 0x12, 0xdc, 0x01, 0xd1, 0xdf, 0xc1, 0x3a, 0x72, 0x00, 0xb2, | 2674 | 0x6a, 0x44, 0xd6, 0x1c, 0xf2, 0x22, 0x89, 0x67, 0x71, 0x6f, 0x7d, 0x7d, |
| 2692 | 0xba, 0xd1, 0x60, 0x5f, 0xc6, 0x8d, 0xaf, 0x91, 0xb1, 0xde, 0xc2, 0x39, | 2675 | 0xb1, 0xd7, 0xe4, 0x51, 0xd8, 0x7f, 0x42, 0x0a, 0xe0, 0x75, 0xa7, 0xb5, |
| 2693 | 0x22, 0x56, 0x81, 0x1f, 0x7d, 0xfc, 0xa7, 0x77, 0x30, 0x5f, 0xc6, 0xf3, | 2676 | 0xef, 0xad, 0xe4, 0xcc, 0x39, 0x35, 0xfa, 0x77, 0xb3, 0x52, 0xe7, 0x7e, |
| 2694 | 0xd7, 0x07, 0x30, 0x3f, 0xcf, 0x82, 0x32, 0x36, 0xb5, 0x8d, 0xbc, 0x3a, | 2677 | 0xd2, 0xdc, 0x03, 0xb9, 0xc1, 0x65, 0xe8, 0x2c, 0x39, 0x3b, 0xfd, 0x00, |
| 2695 | 0xaa, 0xf5, 0x41, 0x3e, 0x43, 0x39, 0xe6, 0x99, 0x91, 0x2e, 0x7f, 0xc3, | 2678 | 0xfc, 0xdf, 0xe0, 0x75, 0xbe, 0x3b, 0x8e, 0xd5, 0x24, 0xd6, 0x86, 0xfb, |
| 2696 | 0xf3, 0x6c, 0x6f, 0x6d, 0xa0, 0x63, 0xd2, 0xdb, 0x9f, 0x7f, 0x3f, 0x2c, | 2679 | 0xbe, 0x10, 0x9a, 0x3e, 0x0e, 0x3b, 0x6a, 0x71, 0xaf, 0x17, 0x15, 0x0b, |
| 2697 | 0xe1, 0x0e, 0xea, 0xb8, 0xa8, 0x24, 0xa7, 0x19, 0xb3, 0xc0, 0x76, 0x8d, | 2680 | 0x8a, 0xcb, 0xb3, 0xb0, 0x29, 0xac, 0xb5, 0xe8, 0x83, 0x2e, 0x3e, 0x08, |
| 2698 | 0x73, 0xae, 0xff, 0xad, 0x8b, 0x33, 0xff, 0xa7, 0x2e, 0xce, 0x58, 0x1f, | 2681 | 0x59, 0xa6, 0x71, 0x5f, 0x93, 0x2d, 0xd9, 0x2c, 0x2a, 0x2f, 0xb3, 0x5e, |
| 2699 | 0x29, 0xef, 0x84, 0x35, 0x8f, 0xf5, 0xc5, 0x74, 0x2d, 0xd6, 0xd1, 0xd5, | 2682 | 0x32, 0xb8, 0x66, 0xd5, 0xc0, 0xd1, 0xb0, 0x7f, 0xac, 0x4d, 0xe8, 0x16, |
| 2700 | 0xaf, 0xdd, 0x47, 0xab, 0x74, 0xfc, 0x51, 0x81, 0xf6, 0x2a, 0xa5, 0x39, | 2683 | 0xf6, 0x90, 0xb5, 0x19, 0xc5, 0x11, 0x78, 0xbc, 0x09, 0xbf, 0x02, 0xf8, |
| 2701 | 0xe5, 0x7f, 0x4e, 0xf1, 0x6c, 0xb9, 0xc7, 0xab, 0xdc, 0xe3, 0xf0, 0x82, | 2684 | 0x66, 0x6d, 0xc2, 0x27, 0x00, 0xbe, 0x59, 0x9b, 0x29, 0x1c, 0x81, 0xf1, |
| 2702 | 0x62, 0x20, 0xbf, 0xa6, 0x32, 0x7c, 0xb2, 0x40, 0x1d, 0xd3, 0x2a, 0xb3, | 2685 | 0x9b, 0x01, 0xae, 0x71, 0xfc, 0x94, 0xe6, 0xe1, 0x0d, 0xbe, 0x90, 0x4b, |
| 2703 | 0x33, 0xbe, 0x9e, 0x19, 0xf3, 0x7c, 0xdc, 0xfc, 0x9a, 0x26, 0xd5, 0x33, | 2686 | 0x12, 0x5f, 0x02, 0x3e, 0x69, 0x74, 0xe1, 0xeb, 0xcb, 0xc4, 0x10, 0xea, |
| 2704 | 0xf0, 0x6e, 0x9c, 0x11, 0xcf, 0xbe, 0x74, 0x4b, 0xe9, 0x3c, 0xed, 0x6e, | 2687 | 0x75, 0x12, 0xb8, 0x45, 0x5d, 0x30, 0x5c, 0x72, 0xbd, 0x62, 0xd6, 0x6c, |
| 2705 | 0x12, 0x7d, 0xd1, 0x40, 0x69, 0x8e, 0xb5, 0x49, 0x62, 0x50, 0x86, 0x85, | 2688 | 0x7e, 0xeb, 0x9a, 0xda, 0x88, 0x29, 0x71, 0xa0, 0x63, 0x5c, 0x3b, 0x5c, |
| 2706 | 0x75, 0xff, 0x11, 0xfb, 0x38, 0xe4, 0x2d, 0x26, 0xef, 0x4f, 0xd1, 0xa7, | 2689 | 0x53, 0x1b, 0xf0, 0xba, 0x64, 0xf4, 0xc8, 0x35, 0xfb, 0xb9, 0x64, 0xd6, |
| 2707 | 0x6f, 0x82, 0x6f, 0xdc, 0xd6, 0x70, 0xbe, 0xdb, 0xab, 0x3e, 0x61, 0x3d, | 2690 | 0x53, 0xf2, 0x0d, 0xc5, 0xad, 0x00, 0xb3, 0xc8, 0x21, 0x63, 0x58, 0x3f, |
| 2708 | 0xdd, 0x37, 0x74, 0x4a, 0x0b, 0xf9, 0xdc, 0xb1, 0x6f, 0x08, 0x7d, 0x30, | 2691 | 0x47, 0x9e, 0xff, 0xf6, 0x4d, 0xc9, 0x7e, 0x87, 0xb8, 0x35, 0x1c, 0x6b, |
| 2709 | 0x5e, 0x67, 0x11, 0x0b, 0x30, 0xf6, 0x88, 0x6b, 0xec, 0x51, 0x2a, 0xb2, | 2692 | 0x0f, 0x11, 0xab, 0x3c, 0xd9, 0x80, 0x6d, 0x3a, 0xed, 0x26, 0x1e, 0x65, |
| 2710 | 0xaf, 0xd5, 0xcb, 0x2b, 0xb5, 0x2a, 0xaf, 0x90, 0xdf, 0x32, 0xea, 0x7f, | 2693 | 0xfd, 0x66, 0x1e, 0xba, 0xd2, 0x7a, 0x32, 0xe1, 0xc6, 0x43, 0xc9, 0x47, |
| 2711 | 0x0f, 0xa9, 0xce, 0xca, 0x4f, 0xf5, 0x1a, 0xfc, 0x8a, 0x1d, 0x53, 0xde, | 2694 | 0xdb, 0x43, 0xb4, 0x8d, 0xc3, 0xf6, 0x45, 0x39, 0xe5, 0xc7, 0xa3, 0x0e, |
| 2712 | 0x93, 0x3a, 0xde, 0x8b, 0x79, 0x6b, 0x3f, 0xdc, 0x69, 0x7c, 0x2b, 0x5b, | 2695 | 0xc8, 0x45, 0xe5, 0xfe, 0x2c, 0xcf, 0x78, 0x57, 0x73, 0x23, 0xef, 0xa4, |
| 2713 | 0xf5, 0x4d, 0x58, 0xc7, 0xd1, 0xae, 0x70, 0x7e, 0xf2, 0x06, 0x79, 0x84, | 2696 | 0xb9, 0xd6, 0x68, 0x6f, 0x6a, 0xdc, 0xa8, 0xed, 0x9d, 0x74, 0x8b, 0x14, |
| 2714 | 0x3a, 0xcf, 0x1f, 0xe7, 0xd3, 0xc3, 0x6f, 0x73, 0x3c, 0xf9, 0xbf, 0x16, | 2697 | 0x7b, 0x3c, 0xef, 0xc2, 0xc9, 0xb7, 0xa2, 0x26, 0xce, 0xd5, 0x7f, 0xd4, |
| 2715 | 0x8b, 0xe0, 0xcb, 0xaa, 0xdf, 0xe7, 0xcb, 0x1d, 0xef, 0xd5, 0xda, 0x04, | 2698 | 0x60, 0x01, 0x00, 0x4c, 0xdb, 0x9f, 0xc0, 0x91, 0xba, 0x4d, 0x7b, 0x4b, |
| 2716 | 0xca, 0x5d, 0x6d, 0x7d, 0xd2, 0x96, 0xc8, 0xf4, 0x12, 0x5d, 0xd2, 0xfd, | 2699 | 0xfb, 0x48, 0xb9, 0xe1, 0xb8, 0xce, 0xff, 0xb4, 0xbd, 0x4b, 0xb0, 0xbd, |
| 2717 | 0xdc, 0xff, 0x4b, 0xcc, 0xed, 0x42, 0xde, 0x96, 0xa3, 0xcd, 0x51, 0xa5, | 2700 | 0xb4, 0x97, 0x47, 0x24, 0xc7, 0x9c, 0x9c, 0xa5, 0xe7, 0x0b, 0x86, 0x4b, |
| 2718 | 0x4d, 0x06, 0xb4, 0x89, 0x28, 0x6d, 0x18, 0xef, 0x3d, 0xe3, 0xf1, 0x5b, | 2701 | 0xfb, 0xf7, 0x55, 0xf2, 0x32, 0x5f, 0x21, 0x87, 0xaa, 0xc3, 0x96, 0xb1, |
| 2719 | 0x2b, 0xce, 0x8b, 0xb9, 0x5a, 0xe8, 0xba, 0xbd, 0xd4, 0xf9, 0xcf, 0x77, | 2702 | 0xf6, 0x91, 0x36, 0x6d, 0x0e, 0xf6, 0x9c, 0xb9, 0x5a, 0x5c, 0xab, 0xb2, |
| 2720 | 0x6a, 0x7d, 0xd0, 0xa1, 0xee, 0x5b, 0x05, 0x7d, 0xc6, 0xf6, 0x66, 0xf5, | 2703 | 0x5f, 0x22, 0x15, 0xb7, 0xf0, 0xce, 0x3b, 0x3a, 0x55, 0x82, 0xfe, 0x51, |
| 2721 | 0x47, 0x4c, 0xbc, 0x15, 0xd7, 0x3c, 0x68, 0x10, 0xfa, 0xb9, 0x34, 0x05, | 2704 | 0x9f, 0x20, 0xf7, 0x17, 0xe8, 0x5b, 0x0c, 0xa9, 0x8e, 0x64, 0x7f, 0xc0, |
| 2722 | 0x5f, 0x8d, 0x78, 0xb7, 0x3a, 0x5a, 0x7d, 0xc7, 0x3b, 0xaf, 0x92, 0xd2, | 2705 | 0xb5, 0xf7, 0xbc, 0x33, 0x2e, 0xd4, 0xb0, 0xd3, 0xec, 0x01, 0xf2, 0x80, |
| 2723 | 0x86, 0x32, 0x40, 0xbd, 0xb9, 0x1a, 0xf3, 0xed, 0x8e, 0xf6, 0x81, 0xbf, | 2706 | 0x8f, 0x63, 0x5d, 0xa6, 0xdc, 0x9b, 0xb4, 0xdd, 0x7f, 0xb7, 0x9c, 0xe1, |
| 2724 | 0x7e, 0x81, 0xfe, 0x8d, 0x1a, 0x4f, 0x04, 0x21, 0xf3, 0x37, 0xa7, 0x3a, | 2707 | 0xd4, 0xc5, 0x10, 0xf7, 0x36, 0xda, 0xeb, 0x61, 0xa9, 0x46, 0xf9, 0xfe, |
| 2725 | 0xbc, 0x18, 0xce, 0x41, 0x1b, 0x71, 0xeb, 0x54, 0x84, 0x31, 0x05, 0xda, | 2708 | 0x58, 0xaf, 0x10, 0xf7, 0xce, 0x7e, 0xeb, 0xd0, 0xbc, 0x06, 0x59, 0xac, |
| 2726 | 0x5b, 0xa4, 0x69, 0x1a, 0xf1, 0x2b, 0xf4, 0xf8, 0x82, 0xda, 0xa3, 0x3e, | 2709 | 0x01, 0xd7, 0x32, 0x58, 0x03, 0xfe, 0x9f, 0x80, 0xbc, 0xe8, 0x33, 0x10, |
| 2727 | 0xdc, 0xbf, 0x8b, 0x18, 0x3f, 0x5c, 0x1f, 0xc6, 0x73, 0xbd, 0x06, 0x8b, | 2710 | 0x87, 0xf1, 0x7f, 0xcb, 0x3c, 0x9b, 0x75, 0x99, 0xbb, 0x73, 0xe6, 0x7c, |
| 2728 | 0x10, 0xdd, 0xa4, 0x67, 0x5a, 0x9a, 0x4a, 0xc4, 0x0e, 0x8a, 0xd7, 0x37, | 2711 | 0x29, 0xd3, 0xd7, 0x25, 0xa7, 0xf2, 0x5d, 0x92, 0x5c, 0xe5, 0x75, 0x99, |
| 2729 | 0xee, 0xaa, 0x3e, 0x58, 0xda, 0xd7, 0x43, 0xb2, 0xbb, 0x6a, 0x2f, 0x18, | 2712 | 0xac, 0x2c, 0xc9, 0x03, 0xce, 0x38, 0xde, 0xf7, 0x86, 0x37, 0xeb, 0xa8, |
| 2730 | 0x47, 0xc3, 0x87, 0x9f, 0x31, 0xf6, 0x20, 0x5f, 0xec, 0x53, 0x5c, 0x54, | 2713 | 0xaf, 0x32, 0x3a, 0x83, 0x67, 0xcf, 0x8e, 0xf4, 0xc9, 0x9f, 0x5d, 0x47, |
| 2731 | 0x70, 0x68, 0x1e, 0x67, 0x49, 0x9f, 0x74, 0x11, 0x7e, 0xb8, 0x8b, 0x33, | 2714 | 0x16, 0xd7, 0x6c, 0xc9, 0xdb, 0x69, 0x79, 0x5e, 0x63, 0xf9, 0xf4, 0x4f, |
| 2732 | 0xa4, 0xdf, 0x5d, 0x39, 0x76, 0xc2, 0x4d, 0xb1, 0x3e, 0x06, 0x7d, 0x70, | 2715 | 0x42, 0xe0, 0xa4, 0xcc, 0xc9, 0xb7, 0x89, 0xf4, 0x38, 0xb1, 0x6d, 0x21, |
| 2733 | 0x4c, 0x46, 0x10, 0x17, 0x8c, 0x04, 0xdb, 0x98, 0x57, 0x86, 0x6f, 0x98, | 2716 | 0xa7, 0x6c, 0x81, 0xac, 0xe3, 0x86, 0x37, 0xdb, 0xe6, 0xfa, 0xb1, 0x17, |
| 2734 | 0xf3, 0x72, 0x8f, 0x7d, 0xcc, 0x99, 0xca, 0xd9, 0x39, 0xee, 0x9d, 0xb2, | 2717 | 0xc0, 0xdd, 0xdd, 0xb7, 0x7a, 0x83, 0xf8, 0xb0, 0xe1, 0xb7, 0x7f, 0xf0, |
| 2735 | 0x6d, 0x62, 0xef, 0xd2, 0x14, 0xf7, 0x6b, 0xf2, 0x10, 0x6c, 0x5b, 0xd3, | 2718 | 0xf3, 0x62, 0x69, 0xa9, 0x30, 0x07, 0xa7, 0x38, 0xeb, 0x40, 0x97, 0x98, |
| 2736 | 0x2e, 0x7e, 0x79, 0x16, 0x03, 0xf8, 0x1d, 0x84, 0x3c, 0x70, 0x2c, 0x7e, | 2719 | 0xc3, 0x8f, 0x69, 0xdc, 0xa1, 0xa5, 0x4c, 0x8c, 0xba, 0x0a, 0x8c, 0x1a, |
| 2737 | 0xe7, 0x16, 0xe5, 0xdd, 0xf3, 0xbe, 0x6d, 0x0f, 0xc8, 0x3b, 0x4e, 0xe5, | 2720 | 0x25, 0x76, 0x8d, 0xaf, 0xb9, 0x8c, 0x0b, 0x44, 0xe5, 0xb7, 0x25, 0xe2, |
| 2738 | 0xd8, 0x71, 0x77, 0x0d, 0xcf, 0xc0, 0xcd, 0xb1, 0x66, 0xed, 0x38, 0x6e, | 2721 | 0x70, 0x5c, 0x7e, 0x53, 0x7a, 0x16, 0xf3, 0x49, 0x54, 0x19, 0xcf, 0xbc, |
| 2739 | 0x5e, 0x2a, 0x95, 0x05, 0x77, 0x61, 0x8d, 0xa5, 0xb4, 0xa4, 0xfc, 0xff, | 2722 | 0x5e, 0x29, 0x90, 0x27, 0x29, 0x9f, 0xcf, 0xba, 0x5f, 0x54, 0x3b, 0x10, |
| 2740 | 0x03, 0x67, 0x78, 0xfd, 0x3e, 0x4b, 0x0c, 0xfd, 0x48, 0x9b, 0xcf, 0xd7, | 2723 | 0xb7, 0x8a, 0xdd, 0x2d, 0x8a, 0x37, 0x4f, 0x6b, 0x1e, 0x36, 0x6e, 0x0d, |
| 2741 | 0xfe, 0x6a, 0x6d, 0x81, 0xaf, 0xff, 0xc8, 0x8f, 0xe4, 0xcb, 0x45, 0xd9, | 2724 | 0xc8, 0xf5, 0x55, 0xbe, 0x6f, 0x0a, 0x63, 0x47, 0x43, 0xb9, 0x75, 0xda, |
| 2742 | 0xa9, 0xfa, 0x7f, 0xb9, 0xe7, 0x6a, 0x75, 0xbf, 0xef, 0xdf, 0x52, 0xbf, | 2725 | 0xa5, 0x64, 0x6c, 0xc6, 0x3a, 0x20, 0x17, 0xa2, 0x8c, 0x53, 0x8f, 0x11, |
| 2743 | 0x93, 0x17, 0x63, 0x1a, 0x1f, 0x6c, 0x9a, 0x6e, 0xd4, 0x09, 0x4f, 0x78, | 2726 | 0x9f, 0x61, 0x0b, 0x87, 0xed, 0x19, 0xd6, 0x38, 0xa9, 0xfd, 0x89, 0x35, |
| 2744 | 0x75, 0x85, 0xe5, 0x78, 0x6f, 0xbf, 0xa7, 0x17, 0x52, 0xea, 0x3b, 0xa7, | 2727 | 0xe1, 0xec, 0xd3, 0x3e, 0xce, 0xf2, 0xda, 0x18, 0x64, 0x4a, 0x5b, 0x94, |
| 2745 | 0x6c, 0xea, 0x07, 0xee, 0xa7, 0x45, 0x26, 0x2e, 0xdc, 0x01, 0x4d, 0x7c, | 2728 | 0xa8, 0x4c, 0x58, 0x49, 0xd8, 0x3c, 0xfc, 0xdf, 0xe0, 0xf8, 0x71, 0xf9, |
| 2746 | 0x1d, 0xcc, 0xb8, 0xcf, 0xd7, 0x1d, 0x6d, 0x9e, 0x2f, 0x6c, 0x49, 0xcf, | 2729 | 0xc2, 0xc6, 0x45, 0xf0, 0xef, 0x61, 0xfb, 0x1c, 0xed, 0xaa, 0x3d, 0x8a, |
| 2747 | 0x59, 0xfa, 0x4e, 0x0e, 0xf4, 0x68, 0xbb, 0x64, 0xc6, 0x83, 0x92, 0x3c, | 2730 | 0x7b, 0xf9, 0xfc, 0x0f, 0x34, 0x8d, 0xf5, 0x69, 0x7f, 0x2c, 0x5e, 0xc7, |
| 2748 | 0x1b, 0x8b, 0x19, 0x5f, 0x97, 0xfc, 0x07, 0x79, 0xd3, 0x3e, 0xad, 0x45, | 2731 | 0x3e, 0x2f, 0x3b, 0x32, 0x5b, 0x62, 0x2e, 0xda, 0xcc, 0x75, 0xef, 0xbd, |
| 2749 | 0xa1, 0xff, 0x6e, 0xe1, 0xda, 0x86, 0x9f, 0x21, 0xcf, 0x7b, 0xfd, 0x7b, | 2732 | 0x67, 0x77, 0x9e, 0xbb, 0xb0, 0x4c, 0x7e, 0x63, 0xea, 0xdc, 0x8a, 0xe0, |
| 2750 | 0x76, 0x03, 0x8f, 0xee, 0xf0, 0x78, 0x94, 0xf7, 0x2d, 0x53, 0xff, 0xc0, | 2733 | 0x42, 0x9f, 0xec, 0xe2, 0x33, 0xf9, 0xbc, 0xc3, 0x92, 0x7d, 0x04, 0xf8, |
| 2751 | 0xd8, 0x9e, 0xb3, 0xdc, 0xa3, 0x79, 0xae, 0xe7, 0xac, 0x89, 0xd7, 0xeb, | 2734 | 0x52, 0xe6, 0xaf, 0xe0, 0xd7, 0xde, 0xc2, 0x5f, 0x89, 0xf6, 0xef, 0x63, |
| 2752 | 0x9f, 0xeb, 0xab, 0x3e, 0x87, 0xfb, 0xf0, 0x7d, 0xcd, 0xdc, 0x3b, 0x07, | 2735 | 0x9b, 0xee, 0xf3, 0xc7, 0xfb, 0x3d, 0x74, 0x28, 0xda, 0x70, 0x3f, 0x63, |
| 2753 | 0xe1, 0xd3, 0xf5, 0xd1, 0xe6, 0xd0, 0x7e, 0x6f, 0x74, 0x77, 0x0a, 0xf9, | 2736 | 0x2a, 0x6c, 0xc7, 0xa5, 0xb0, 0xc1, 0xa3, 0xe7, 0x75, 0x39, 0xad, 0x72, |
| 2754 | 0x3d, 0xe1, 0xf1, 0x1c, 0xf5, 0x4d, 0xc4, 0xd3, 0x37, 0x4b, 0xf6, 0x65, | 2737 | 0xce, 0xbe, 0xbd, 0x69, 0x8c, 0x13, 0x38, 0x67, 0x38, 0x41, 0xb8, 0x1c, |
| 2755 | 0xc4, 0xe0, 0x4f, 0x98, 0x13, 0xa9, 0xb1, 0x2f, 0x4f, 0x98, 0x77, 0xab, | 2738 | 0xf2, 0xb9, 0xc5, 0x9d, 0xe4, 0x4d, 0xfe, 0xff, 0x36, 0x8d, 0xc5, 0xc4, |
| 2756 | 0xb3, 0x2f, 0x77, 0x7b, 0xf3, 0xf8, 0xf7, 0x7c, 0xbd, 0xe2, 0xb7, 0x7d, | 2739 | 0xad, 0xfe, 0xa6, 0xf7, 0xb8, 0x73, 0xc7, 0x0e, 0xc7, 0x2d, 0x62, 0xe7, |
| 2757 | 0xbd, 0xd2, 0xe8, 0xd3, 0xfa, 0xb4, 0xaf, 0xed, 0xaf, 0x8f, 0xf9, 0xf2, | 2740 | 0x8f, 0x71, 0x8d, 0x3a, 0xe4, 0x29, 0x8f, 0x8f, 0x80, 0xe7, 0xe7, 0x80, |
| 2758 | 0xcb, 0xe6, 0x5d, 0xb2, 0x88, 0xd9, 0xe8, 0x53, 0x26, 0x72, 0x06, 0x2f, | 2741 | 0x05, 0x51, 0xe7, 0xb6, 0x18, 0x8b, 0x4d, 0xae, 0x2d, 0x9b, 0x7a, 0x54, |
| 2759 | 0x6d, 0x9d, 0xb1, 0x88, 0xfb, 0x70, 0x7e, 0x22, 0xe9, 0xc8, 0x1d, 0x8d, | 2742 | 0x72, 0xe0, 0x6b, 0xfb, 0xe6, 0x6a, 0x53, 0xd0, 0x65, 0x8c, 0x7f, 0x90, |
| 2760 | 0xad, 0x4f, 0x5e, 0x18, 0xd3, 0x3c, 0x4f, 0xc9, 0xf5, 0xf4, 0x4e, 0x74, | 2743 | 0xe3, 0x8f, 0xf8, 0xeb, 0x9c, 0x70, 0x0b, 0xd6, 0x87, 0x65, 0x66, 0xd5, |
| 2761 | 0x17, 0xe4, 0xea, 0x4a, 0x64, 0x09, 0x53, 0x34, 0x73, 0x34, 0x0d, 0x3b, | 2744 | 0xe8, 0x5f, 0xd6, 0x81, 0xee, 0x1d, 0x46, 0x7b, 0x9d, 0x36, 0xe1, 0xfd, |
| 2762 | 0x94, 0xd2, 0x7a, 0xd9, 0xf7, 0xb0, 0xdf, 0x41, 0xc5, 0x73, 0xad, 0x74, | 2745 | 0xc6, 0x09, 0x6c, 0x43, 0x4a, 0x6d, 0xc3, 0xfc, 0x32, 0xf5, 0x93, 0x7a, |
| 2763 | 0x5e, 0x94, 0x47, 0xec, 0x8a, 0xd6, 0x6e, 0x9a, 0x87, 0x8a, 0x47, 0x9b, | 2746 | 0x19, 0xe8, 0x63, 0x80, 0x79, 0xd4, 0x51, 0xe2, 0x6c, 0x5a, 0x5e, 0x58, |
| 2764 | 0x4f, 0xfb, 0x7c, 0x4f, 0x7e, 0x9a, 0x39, 0x3a, 0x31, 0x53, 0x19, 0x0e, | 2747 | 0xe6, 0xda, 0x64, 0x34, 0xa7, 0x35, 0xb4, 0x32, 0xab, 0xf5, 0x3d, 0x83, |
| 2765 | 0x6d, 0xeb, 0xb5, 0xf3, 0x42, 0xbc, 0xfe, 0xb0, 0x1c, 0x52, 0xdc, 0xf0, | 2748 | 0xe5, 0xc4, 0x8b, 0x05, 0x19, 0x97, 0xab, 0x2e, 0xd7, 0x2c, 0x51, 0xcd, |
| 2766 | 0xab, 0xb8, 0xbf, 0x97, 0xf1, 0x65, 0x22, 0xa4, 0x78, 0xe0, 0x44, 0x6c, | 2749 | 0x87, 0x3b, 0x1a, 0xde, 0xff, 0x9c, 0xbf, 0x66, 0x29, 0xd5, 0xab, 0xc1, |
| 2767 | 0x12, 0xb2, 0x98, 0x75, 0x89, 0xef, 0x5f, 0xa5, 0x38, 0xff, 0x92, 0xd0, | 2750 | 0xf2, 0xe5, 0x1d, 0x79, 0xe7, 0xad, 0xc3, 0x4d, 0xeb, 0x14, 0x70, 0xb8, |
| 2768 | 0xcf, 0x22, 0xa6, 0xe0, 0x05, 0x39, 0xe8, 0x6e, 0x74, 0x17, 0xc4, 0xf8, | 2751 | 0xb8, 0x90, 0x3f, 0x44, 0xba, 0xd8, 0x87, 0xcf, 0x25, 0xe7, 0xe3, 0xb3, |
| 2769 | 0xbf, 0x59, 0xad, 0x09, 0xad, 0x90, 0x49, 0x37, 0xd4, 0x9c, 0x2e, 0x1b, | 2752 | 0x68, 0x5b, 0xef, 0x60, 0x3d, 0x83, 0xd0, 0x8f, 0x8b, 0x3c, 0x62, 0xb8, |
| 2770 | 0x19, 0x18, 0x0d, 0xa6, 0x56, 0x9e, 0x70, 0xa2, 0xcd, 0x3b, 0xcb, 0x90, | 2753 | 0x45, 0xde, 0x7a, 0x18, 0xeb, 0x76, 0x50, 0xeb, 0x28, 0xe7, 0xbf, 0xfb, |
| 2771 | 0xf1, 0x32, 0xf4, 0x7f, 0x39, 0x16, 0x18, 0x51, 0x6c, 0xda, 0x57, 0x24, | 2754 | 0x1e, 0xfa, 0xe7, 0x7d, 0x7e, 0x9e, 0xc6, 0x78, 0x7c, 0x77, 0xee, 0xa9, |
| 2772 | 0xdd, 0x41, 0x3f, 0x9f, 0xfa, 0xe4, 0x01, 0xb9, 0x69, 0x6f, 0x96, 0x9b, | 2755 | 0xd2, 0x49, 0xea, 0xe6, 0xa4, 0xe6, 0x03, 0xd9, 0x87, 0xfb, 0x96, 0x6b, |
| 2773 | 0x5b, 0x88, 0xc3, 0xec, 0x47, 0x9b, 0xba, 0x64, 0x10, 0x7d, 0x49, 0xf4, | 2756 | 0x44, 0x39, 0x5c, 0x8e, 0x19, 0x7b, 0x7a, 0xa2, 0x69, 0x3e, 0x49, 0x7f, |
| 2774 | 0x35, 0x2b, 0x3f, 0x6a, 0x7c, 0x06, 0x9d, 0x75, 0xd3, 0xa6, 0xae, 0x5a, | 2757 | 0x3e, 0xc1, 0xf5, 0x16, 0x89, 0xf4, 0xa6, 0xb4, 0x96, 0x24, 0x59, 0xa6, |
| 2775 | 0xcf, 0x5f, 0xbc, 0xeb, 0x22, 0x68, 0x42, 0x6c, 0xc7, 0x56, 0xb4, 0xa9, | 2758 | 0x8f, 0x02, 0x5b, 0x35, 0xcd, 0xb1, 0x6e, 0x8d, 0xbd, 0xf9, 0xff, 0x13, |
| 2776 | 0xe3, 0xec, 0x86, 0xfe, 0x2e, 0xb4, 0xef, 0xc3, 0x1c, 0x4d, 0xfa, 0x7e, | 2759 | 0x7b, 0xf3, 0x56, 0x49, 0xe7, 0xd8, 0xe2, 0xfc, 0x2f, 0x72, 0x6c, 0xac, |
| 2777 | 0x96, 0xb3, 0xcd, 0xd4, 0x39, 0xeb, 0xc6, 0xac, 0x6e, 0x68, 0xff, 0xb1, | 2760 | 0xa7, 0x37, 0x72, 0x7b, 0x6e, 0x99, 0xf6, 0x29, 0xa3, 0xb1, 0xe3, 0x3f, |
| 2778 | 0xdd, 0xe0, 0x13, 0x3e, 0x25, 0xbd, 0x73, 0x29, 0xd9, 0xd5, 0x59, 0xdf, | 2761 | 0x95, 0xb8, 0x96, 0x9c, 0xe3, 0x55, 0xce, 0x71, 0xbc, 0xae, 0xb5, 0x74, |
| 2779 | 0xfe, 0x77, 0x43, 0xbb, 0x4d, 0x56, 0xb6, 0x93, 0x0c, 0x4f, 0x75, 0xd4, | 2762 | 0x0f, 0xe9, 0x9e, 0x5d, 0x5c, 0x26, 0xa6, 0x74, 0xc8, 0x5a, 0x25, 0xc0, |
| 2780 | 0xf7, 0xfb, 0xfc, 0xe4, 0xb7, 0x3b, 0xf1, 0xbe, 0x09, 0x18, 0xbc, 0xa4, | 2763 | 0x95, 0x07, 0x7c, 0x4e, 0x5b, 0xec, 0x6e, 0xc5, 0x3e, 0x39, 0xe3, 0x5a, |
| 2781 | 0xc6, 0x52, 0x37, 0xa3, 0x5c, 0xeb, 0x83, 0x86, 0x67, 0x78, 0xcd, 0x67, | 2764 | 0x5a, 0x47, 0x68, 0x3d, 0xcc, 0x73, 0x03, 0x52, 0x5b, 0xa5, 0x9d, 0x4d, |
| 2782 | 0xf8, 0x2c, 0xf3, 0x7a, 0x9f, 0xb1, 0x1f, 0xcf, 0x30, 0x27, 0xc0, 0xbc, | 2765 | 0xc2, 0xaf, 0x88, 0x86, 0x6a, 0xeb, 0xcc, 0x45, 0xb2, 0x4e, 0x64, 0x5c, |
| 2783 | 0x06, 0x79, 0x76, 0xb9, 0x38, 0x8b, 0x63, 0x3e, 0x9f, 0x6f, 0xc8, 0x54, | 2766 | 0x98, 0xbb, 0xcf, 0xd9, 0xf3, 0xd8, 0x5f, 0x31, 0xf8, 0xfd, 0xe4, 0xf0, |
| 2784 | 0x79, 0xcf, 0xd7, 0x2b, 0xb1, 0x2a, 0x56, 0x6d, 0x67, 0xc1, 0xcf, 0x09, | 2767 | 0x8c, 0x8f, 0x35, 0xcb, 0x7b, 0x74, 0x87, 0x03, 0xee, 0x95, 0xf3, 0x2f, |
| 2785 | 0x93, 0x76, 0x5a, 0x93, 0x8a, 0xdd, 0x00, 0x9d, 0x0f, 0x80, 0xce, 0x0f, | 2768 | 0xb0, 0xde, 0xd4, 0x6b, 0xc7, 0xbe, 0x0e, 0x3b, 0x99, 0x8b, 0xf2, 0xff, |
| 2786 | 0x05, 0x19, 0x17, 0xb6, 0x78, 0xb4, 0x76, 0x64, 0xa4, 0xfc, 0x5b, 0xc8, | 2769 | 0x0c, 0xb8, 0x3f, 0x7d, 0x8d, 0xb8, 0xfa, 0x1a, 0xb5, 0x6a, 0x46, 0x96, |
| 2787 | 0x38, 0x79, 0x14, 0x3e, 0x45, 0xd9, 0xf2, 0xf0, 0x19, 0x03, 0xb0, 0x69, | 2770 | 0x54, 0xf7, 0x3b, 0xfc, 0x58, 0x52, 0x87, 0xea, 0x07, 0x75, 0x2c, 0xaf, |
| 2788 | 0xae, 0x04, 0x35, 0xef, 0x80, 0xf8, 0x7e, 0xf6, 0xba, 0x8c, 0x4c, 0x31, | 2771 | 0x9c, 0x7b, 0x54, 0x71, 0xaa, 0x58, 0x1a, 0x36, 0x75, 0x26, 0x76, 0xcc, |
| 2789 | 0x27, 0x40, 0x7e, 0x66, 0x5c, 0x9f, 0xc2, 0xbd, 0x5b, 0x18, 0xeb, 0x42, | 2772 | 0xaf, 0x27, 0x6f, 0x7c, 0x7e, 0xcc, 0x7f, 0xfe, 0x5f, 0x7c, 0xf9, 0xda, |
| 2790 | 0x86, 0xc7, 0xc0, 0xaf, 0x21, 0x71, 0xa6, 0xb7, 0x4a, 0x6e, 0x7c, 0x4c, | 2773 | 0x8a, 0x31, 0xba, 0xd6, 0x56, 0x52, 0x7d, 0xcb, 0xf9, 0x65, 0xea, 0x07, |
| 2791 | 0x7d, 0x80, 0x1e, 0xd8, 0xa8, 0xe3, 0xee, 0xa8, 0x9c, 0xb8, 0xb2, 0x01, | 2774 | 0xf5, 0x84, 0x38, 0x17, 0xdc, 0x17, 0xc8, 0x24, 0x68, 0xf3, 0x7e, 0xea, |
| 2792 | 0xb2, 0xca, 0xb8, 0x5f, 0x73, 0x1a, 0x95, 0xb0, 0xfa, 0xe6, 0xf4, 0x39, | 2775 | 0x7c, 0x63, 0x4d, 0x41, 0xb0, 0x3f, 0x83, 0x73, 0x81, 0x8c, 0x78, 0xad, |
| 2793 | 0x98, 0x87, 0x33, 0x35, 0x66, 0x23, 0xb7, 0x93, 0x31, 0x69, 0x1b, 0x95, | 2776 | 0xd1, 0x0e, 0x70, 0xaf, 0xc5, 0x21, 0xa7, 0xdd, 0xfd, 0xd6, 0x55, 0xde, |
| 2794 | 0x99, 0x0b, 0xb6, 0xe2, 0x5d, 0x52, 0x72, 0xa7, 0x42, 0xda, 0x65, 0xf7, | 2777 | 0x95, 0x4d, 0xf6, 0x14, 0xe7, 0x7f, 0x99, 0x71, 0x5c, 0xec, 0xb1, 0xfd, |
| 2795 | 0xc6, 0xa1, 0xab, 0xe8, 0xcb, 0x9f, 0x8c, 0x98, 0xb3, 0x7c, 0x74, 0x2d, | 2778 | 0xe4, 0xf3, 0x65, 0x95, 0x4f, 0x1e, 0xf2, 0xe9, 0x52, 0xdc, 0xa7, 0x8f, |
| 2796 | 0x63, 0xe2, 0xe4, 0x74, 0xed, 0x1c, 0x8a, 0x91, 0xc1, 0xbd, 0xd7, 0xda, | 2779 | 0x77, 0xc9, 0xd7, 0xb9, 0x0e, 0xac, 0x19, 0xe3, 0xb2, 0xc0, 0xb7, 0xf3, |
| 2797 | 0x8d, 0xcc, 0x30, 0x3e, 0xfe, 0xa0, 0x92, 0x8a, 0x72, 0x4d, 0x8e, 0x65, | 2780 | 0xc4, 0xf9, 0xbe, 0x3e, 0xe2, 0x0b, 0x63, 0x8a, 0x99, 0xe9, 0x43, 0xc0, |
| 2798 | 0xed, 0x96, 0x3c, 0xc2, 0xbd, 0x7d, 0xea, 0xf1, 0xf2, 0xcf, 0x30, 0x5f, | 2781 | 0x30, 0xb6, 0x8f, 0x2b, 0x07, 0x31, 0x3e, 0x56, 0x5c, 0x63, 0x8b, 0x61, |
| 2799 | 0x5c, 0x7a, 0x5e, 0x1f, 0xd3, 0xb8, 0xfe, 0x78, 0x5d, 0x0c, 0x6b, 0xf2, | 2782 | 0x60, 0x72, 0xad, 0x04, 0x7e, 0xc6, 0xba, 0xaf, 0x3d, 0xf2, 0x7a, 0xca, |
| 2800 | 0x05, 0x26, 0x8e, 0xbd, 0x2e, 0x93, 0xf3, 0xa4, 0x0f, 0x6d, 0x7c, 0x40, | 2783 | 0x5f, 0xaf, 0x89, 0x3e, 0xca, 0x87, 0xfb, 0x80, 0x58, 0xd9, 0x89, 0xf1, |
| 2801 | 0x5e, 0x73, 0x7a, 0xed, 0x27, 0xb5, 0xd6, 0x98, 0x48, 0xb1, 0x3e, 0xd3, | 2784 | 0xce, 0x46, 0x53, 0xd0, 0xb1, 0x71, 0x9c, 0x1f, 0x52, 0x1f, 0x22, 0x8c, |
| 2802 | 0xe2, 0x24, 0xed, 0x59, 0x09, 0x0d, 0x7e, 0x15, 0xd7, 0x8c, 0x6b, 0xf3, | 2785 | 0x7d, 0xbe, 0x5d, 0xea, 0xf5, 0xfd, 0x36, 0x07, 0x6d, 0xf8, 0xaa, 0xa5, |
| 2803 | 0x6e, 0xaf, 0xfb, 0xa4, 0xf8, 0x38, 0x90, 0x8d, 0xa9, 0x15, 0x81, 0xdb, | 2786 | 0x2e, 0xfa, 0x11, 0x1a, 0x47, 0x6c, 0x2d, 0xc3, 0x67, 0x05, 0x76, 0xd7, |
| 2804 | 0x95, 0xeb, 0x7b, 0x39, 0xc6, 0xe0, 0x40, 0x24, 0x40, 0x5a, 0xbd, 0xb7, | 2787 | 0xd5, 0x06, 0x8d, 0xe0, 0xfa, 0x6d, 0xac, 0x89, 0xd3, 0xda, 0xe0, 0x6d, |
| 2805 | 0x9e, 0xf8, 0x99, 0xfa, 0xfc, 0xdf, 0x83, 0x4f, 0xef, 0x19, 0x48, 0x9c, | 2788 | 0x95, 0x19, 0x7d, 0xcd, 0x63, 0xba, 0xa6, 0xb5, 0x52, 0x22, 0xf6, 0xb8, |
| 2806 | 0x62, 0x0c, 0x1b, 0x76, 0xbe, 0xb5, 0xd6, 0xbc, 0x6b, 0x2e, 0xb7, 0x5a, | 2789 | 0xf8, 0xe7, 0xa6, 0xf9, 0xdc, 0xc1, 0x86, 0x79, 0x4d, 0xca, 0xd9, 0x1d, |
| 2807 | 0xb4, 0x7e, 0x76, 0xe4, 0x23, 0x87, 0x78, 0x88, 0x44, 0x6c, 0x85, 0xc5, | 2790 | 0x1b, 0x41, 0xdf, 0x19, 0xbc, 0xbd, 0x62, 0x6c, 0x40, 0xb1, 0x9a, 0xd2, |
| 2808 | 0x3c, 0x38, 0x75, 0x1c, 0x6b, 0x2a, 0xcc, 0xb9, 0x11, 0xc7, 0xdf, 0x2c, | 2791 | 0xfa, 0xa5, 0xf0, 0xd8, 0x06, 0xd6, 0x92, 0x3c, 0xf4, 0x06, 0xb8, 0xf7, |
| 2809 | 0x97, 0xfb, 0x2c, 0x79, 0x30, 0x94, 0x8a, 0x5b, 0xb2, 0x29, 0x7e, 0x56, | 2792 | 0x08, 0xd6, 0x90, 0x5c, 0xdb, 0x9b, 0x5b, 0x70, 0x33, 0xcc, 0x85, 0xc1, |
| 2810 | 0xb0, 0x26, 0xeb, 0x2b, 0xf3, 0x89, 0x1c, 0xc7, 0x87, 0xa6, 0x39, 0x5f, | 2793 | 0x86, 0xcd, 0x49, 0x0e, 0xbe, 0x40, 0x2e, 0x7c, 0x98, 0x31, 0x64, 0xf0, |
| 2811 | 0x5c, 0xe3, 0x95, 0xe4, 0xa6, 0x4a, 0xe5, 0x19, 0x57, 0x02, 0xc9, 0x7b, | 2794 | 0xc1, 0x82, 0x1f, 0x6f, 0x1c, 0x61, 0x9c, 0x54, 0x56, 0xd6, 0x39, 0x77, |
| 2812 | 0x3f, 0xac, 0xb0, 0x16, 0x6e, 0xbd, 0xfe, 0x45, 0x38, 0x05, 0xea, 0x8a, | 2795 | 0xee, 0x6f, 0xe3, 0x6f, 0xd7, 0x4a, 0x9c, 0xaf, 0x89, 0x3d, 0xb0, 0x6d, |
| 2813 | 0x55, 0x93, 0x06, 0x73, 0x78, 0xe2, 0x48, 0xcf, 0x3c, 0xdb, 0xdf, 0x7d, | 2796 | 0x95, 0x5d, 0x1c, 0xb9, 0x16, 0x69, 0x1c, 0xef, 0xc5, 0x9e, 0xe0, 0xbd, |
| 2814 | 0xc4, 0xb4, 0x4f, 0xa1, 0xdd, 0xe4, 0x61, 0x9d, 0xa6, 0x8e, 0xf4, 0x14, | 2797 | 0x38, 0xae, 0xdf, 0x90, 0x5f, 0xad, 0x06, 0xf6, 0x3c, 0x24, 0x6f, 0x3a, |
| 2815 | 0x9f, 0x5a, 0x6b, 0xe2, 0xef, 0x45, 0xc5, 0x7f, 0xbd, 0x5d, 0x17, 0xd3, | 2798 | 0xde, 0xdc, 0xbc, 0xdb, 0xcd, 0x35, 0x70, 0x0b, 0xcc, 0x65, 0x3b, 0x8e, |
| 2816 | 0xa4, 0x02, 0xe3, 0x85, 0xb1, 0xc0, 0x58, 0xc1, 0xea, 0x6b, 0x06, 0xad, | 2799 | 0x5b, 0x14, 0xcf, 0xab, 0xbb, 0xf5, 0x6e, 0x4b, 0x65, 0x49, 0x0c, 0xf8, |
| 2817 | 0xe6, 0x5c, 0xe6, 0x6a, 0xfc, 0x9c, 0x15, 0xf3, 0xfd, 0x22, 0xdf, 0x57, | 2800 | 0x1a, 0xd6, 0xf0, 0x8d, 0xbb, 0x2d, 0x31, 0xf2, 0xa3, 0x6c, 0xae, 0xfd, |
| 2818 | 0x8c, 0x14, 0x6b, 0x8a, 0x96, 0xfa, 0x42, 0x07, 0xe6, 0x98, 0xe3, 0x8f, | 2801 | 0x57, 0xfc, 0x0f, 0x30, 0x90, 0xfa, 0x48, 0xbd, 0xbc, 0x21, 0x53, 0x8a, |
| 2819 | 0xa8, 0x3e, 0x38, 0x38, 0xdf, 0x26, 0x79, 0x7b, 0x8d, 0xe4, 0x55, 0xc6, | 2802 | 0xf9, 0xfb, 0xf5, 0x6b, 0xc4, 0x89, 0x80, 0xd3, 0x12, 0xd3, 0xa9, 0x8b, |
| 2820 | 0xa3, 0xaa, 0x03, 0x2c, 0xe7, 0x5e, 0xf4, 0x71, 0xdf, 0x4f, 0x28, 0x2e, | 2803 | 0x31, 0xf5, 0x09, 0x8e, 0x95, 0x9b, 0x71, 0xe1, 0x33, 0x7e, 0x0e, 0x61, |
| 2821 | 0xe2, 0xcd, 0x42, 0x17, 0xda, 0xcc, 0x35, 0x6f, 0x6f, 0xe8, 0xaf, 0xad, | 2804 | 0x3f, 0xdd, 0x7b, 0xd4, 0xc7, 0x86, 0x31, 0xe5, 0xcb, 0x19, 0x9b, 0x18, |
| 2822 | 0xcb, 0x26, 0x6c, 0xcb, 0x6a, 0xac, 0xc9, 0xb2, 0xaf, 0xb1, 0x16, 0x7b, | 2805 | 0xc1, 0xf9, 0x1c, 0x94, 0xd9, 0x2b, 0x8d, 0x38, 0x4c, 0x5f, 0xcf, 0xe0, |
| 2823 | 0x52, 0xae, 0x93, 0x6f, 0xca, 0x7e, 0xce, 0xdd, 0xf5, 0x72, 0xee, 0xdf, | 2806 | 0x87, 0x7e, 0xe3, 0xa1, 0xfc, 0xd7, 0x92, 0xc1, 0x15, 0xf2, 0x25, 0x07, |
| 2824 | 0xee, 0x32, 0x18, 0x61, 0xc9, 0x84, 0x86, 0x9a, 0xfb, 0x8e, 0x4f, 0x05, | 2807 | 0x58, 0xda, 0x23, 0xf9, 0xe9, 0xb0, 0x24, 0x57, 0x7e, 0xd6, 0x67, 0xf8, |
| 2825 | 0x6f, 0x2d, 0xe5, 0x4f, 0xd1, 0x9e, 0xaf, 0xd6, 0xca, 0x71, 0xef, 0x39, | 2808 | 0x2d, 0xf5, 0x0f, 0xfb, 0x4d, 0xcf, 0xb1, 0x5d, 0xc7, 0xf9, 0x23, 0xc2, |
| 2826 | 0x62, 0xc5, 0xe1, 0x57, 0xe4, 0xbc, 0xef, 0x0e, 0x78, 0xbf, 0xfa, 0xfc, | 2809 | 0x67, 0x1b, 0x7d, 0xc6, 0x7e, 0x3e, 0x1f, 0x5c, 0xb3, 0x9b, 0x74, 0xf4, |
| 2827 | 0xff, 0xd8, 0x53, 0x8b, 0xd6, 0xd9, 0xad, 0xba, 0x3a, 0xfb, 0xe3, 0x78, | 2810 | 0x5e, 0x5f, 0x47, 0x79, 0xdd, 0x32, 0xb9, 0x0e, 0xdc, 0x3b, 0xb8, 0xc2, |
| 2828 | 0x96, 0x35, 0xf6, 0x5c, 0xa5, 0x09, 0xbc, 0xdb, 0x44, 0x9c, 0x48, 0x75, | 2811 | 0x39, 0x9a, 0x7e, 0x83, 0x2b, 0xc6, 0x47, 0xdf, 0xdb, 0x6f, 0x64, 0xa7, |
| 2829 | 0x3c, 0x75, 0xbc, 0xea, 0x72, 0x9d, 0x6b, 0xa7, 0x37, 0x57, 0x10, 0x7a, | 2812 | 0x1f, 0xae, 0x83, 0xef, 0x9a, 0xb1, 0xa7, 0x46, 0xc1, 0xe3, 0x46, 0x58, |
| 2830 | 0x7e, 0x62, 0xca, 0x1f, 0x73, 0x4c, 0x56, 0xf4, 0x27, 0x62, 0x41, 0x8b, | 2813 | 0x83, 0x44, 0x9b, 0x3d, 0xe4, 0x4e, 0x09, 0xf5, 0x3d, 0xe1, 0xeb, 0x1c, |
| 2831 | 0x63, 0x8c, 0xbe, 0x4f, 0xbb, 0xc7, 0xa0, 0xc7, 0xa9, 0xf3, 0xf9, 0xde, | 2814 | 0xf1, 0xa6, 0xcb, 0xc7, 0x9b, 0x5d, 0x1b, 0x93, 0x33, 0x35, 0x27, 0x8c, |
| 2832 | 0x0e, 0x7c, 0x3d, 0xea, 0x02, 0xea, 0x73, 0xb5, 0x01, 0xf1, 0x3c, 0x74, | 2815 | 0x83, 0x34, 0xd8, 0x18, 0xe9, 0xff, 0x4f, 0x1b, 0x73, 0xc4, 0x1f, 0x27, |
| 2833 | 0xfd, 0x48, 0x59, 0x73, 0xf9, 0xb1, 0x87, 0x83, 0x89, 0x99, 0xac, 0xea, | 2816 | 0xb8, 0x16, 0xe0, 0x4a, 0xd0, 0x0e, 0x70, 0xa5, 0x99, 0xc7, 0x06, 0xb2, |
| 2834 | 0x06, 0xf8, 0x7b, 0xe5, 0x6b, 0xcc, 0x07, 0x9d, 0x92, 0x40, 0x6d, 0x9d, | 2817 | 0x6f, 0x3c, 0xdf, 0xe8, 0xe7, 0x65, 0x7c, 0x7f, 0xde, 0xd2, 0xfd, 0xf3, |
| 2835 | 0x86, 0xb1, 0x19, 0x6b, 0x1a, 0xad, 0xd0, 0x0d, 0x22, 0x57, 0xc1, 0x1b, | 2818 | 0xca, 0x8e, 0x1f, 0x4f, 0x19, 0x27, 0xa0, 0x7a, 0x25, 0xec, 0xed, 0xf7, |
| 2836 | 0x6f, 0xcc, 0x91, 0x5f, 0x83, 0x1d, 0x26, 0xbe, 0x5a, 0xd8, 0x6e, 0x49, | 2819 | 0xd4, 0x6f, 0x5e, 0xbc, 0x32, 0xa1, 0xb1, 0x9c, 0x9a, 0xca, 0xfa, 0xab, |
| 2837 | 0x87, 0xd6, 0x3e, 0xf3, 0x4e, 0x84, 0xfe, 0xc9, 0x70, 0xb2, 0x1f, 0x7e, | 2820 | 0x58, 0x9f, 0x33, 0xd8, 0x47, 0x0f, 0x46, 0x77, 0xeb, 0x86, 0x56, 0x9f, |
| 2838 | 0xb6, 0x62, 0x0f, 0x98, 0xaf, 0x9c, 0x40, 0x3c, 0x56, 0x9b, 0x63, 0x81, | 2821 | 0xc9, 0xfa, 0xbc, 0x25, 0x23, 0x5d, 0x98, 0x5f, 0x5a, 0xeb, 0xb0, 0xda, |
| 2839 | 0x7c, 0x8d, 0xb3, 0x3f, 0x0b, 0xbf, 0x72, 0xa9, 0xee, 0x91, 0x2f, 0x9e, | 2822 | 0x9d, 0xaf, 0xc8, 0x03, 0x66, 0xee, 0x6d, 0x6d, 0x63, 0xeb, 0xcf, 0xb4, |
| 2840 | 0xd0, 0xdc, 0x66, 0x69, 0xae, 0x55, 0x75, 0x6c, 0xa9, 0xf8, 0x30, 0xce, | 2823 | 0x7d, 0x2b, 0xd0, 0x73, 0xea, 0xcf, 0xea, 0x33, 0xb3, 0x15, 0x6f, 0x3c, |
| 2841 | 0x45, 0x36, 0x5b, 0x43, 0x79, 0xaf, 0x3f, 0x2c, 0xc5, 0x22, 0xdb, 0xd2, | 2824 | 0x72, 0x72, 0xd8, 0x2e, 0x0a, 0x6b, 0xbd, 0xc7, 0xe5, 0x09, 0x97, 0xd7, |
| 2842 | 0xdd, 0xa4, 0xe7, 0xee, 0xd7, 0x76, 0x6c, 0x99, 0x85, 0xaf, 0x58, 0x9c, | 2825 | 0x7f, 0x88, 0xeb, 0xd3, 0xf4, 0x21, 0x13, 0x11, 0xfd, 0xfe, 0x20, 0x11, |
| 2843 | 0x77, 0xf0, 0xbf, 0x05, 0xff, 0x7d, 0xf8, 0xdf, 0x25, 0xe9, 0x69, 0xfa, | 2826 | 0x7b, 0x0c, 0x7b, 0x6f, 0x46, 0xbf, 0xf7, 0x38, 0xa4, 0x35, 0xe2, 0x35, |
| 2844 | 0xaf, 0xac, 0xe5, 0xb4, 0x36, 0xac, 0x1f, 0xf6, 0x70, 0xe0, 0xf4, 0x6b, | 2827 | 0x21, 0x97, 0x62, 0x8d, 0xc1, 0xb3, 0xf2, 0xb8, 0x3b, 0xe4, 0xd6, 0xc5, |
| 2845 | 0x4d, 0x9c, 0x93, 0x2f, 0x36, 0xca, 0x09, 0xf3, 0xa4, 0xbe, 0x8e, 0x60, | 2828 | 0x70, 0xdc, 0x19, 0xcd, 0xf7, 0x1c, 0x90, 0xc7, 0xdc, 0x48, 0x5b, 0x76, |
| 2846 | 0xbe, 0xd4, 0xaf, 0xf5, 0xd5, 0xd6, 0xb0, 0x2c, 0xaf, 0xee, 0x45, 0x9e, | 2829 | 0xcb, 0xe8, 0xfc, 0x44, 0x38, 0xd3, 0xbe, 0xe0, 0x44, 0xdb, 0xa6, 0xb6, |
| 2847 | 0x6e, 0x91, 0x83, 0x45, 0xbf, 0x76, 0x15, 0x93, 0x43, 0xd5, 0xda, 0x95, | 2830 | 0xb0, 0xa7, 0xb7, 0x80, 0xf7, 0x5b, 0xb1, 0x50, 0x6e, 0x83, 0xef, 0x1e, |
| 2848 | 0x64, 0x82, 0x43, 0xb7, 0x1f, 0xcb, 0x4e, 0x29, 0x9e, 0xc0, 0xb2, 0x86, | 2831 | 0x36, 0x35, 0x1d, 0xea, 0x5f, 0x11, 0x43, 0xee, 0x93, 0x6d, 0xfb, 0xb8, |
| 2849 | 0xae, 0x3f, 0x36, 0x39, 0xff, 0xce, 0x63, 0x4b, 0x98, 0x70, 0xdc, 0x9b, | 2832 | 0x6c, 0xa7, 0xf8, 0x4d, 0xd6, 0x29, 0xb4, 0x07, 0x35, 0xe7, 0xb2, 0x0d, |
| 2850 | 0x5f, 0x0e, 0x33, 0x44, 0x2c, 0x1d, 0xbf, 0x93, 0x53, 0xdf, 0x0d, 0xfb, | 2833 | 0xbc, 0xd9, 0x4e, 0xb5, 0xa9, 0x0e, 0xaa, 0x1f, 0x06, 0x9c, 0xda, 0xb6, |
| 2851 | 0xf6, 0x63, 0x1e, 0xe2, 0xec, 0xe2, 0xf6, 0x12, 0x7e, 0xd9, 0x8f, 0x47, | 2834 | 0x89, 0x4f, 0x77, 0xf0, 0x88, 0x77, 0x9e, 0x83, 0x1c, 0x58, 0xef, 0x71, |
| 2852 | 0x89, 0x23, 0xe5, 0x73, 0xb5, 0xd8, 0x8f, 0x10, 0xce, 0x5f, 0x02, 0x96, | 2835 | 0x02, 0x6d, 0xe2, 0x9a, 0xdd, 0x74, 0xbe, 0x1f, 0xed, 0xbb, 0x31, 0x46, |
| 2853 | 0x93, 0xc3, 0x3e, 0x2e, 0x76, 0x19, 0x3f, 0x90, 0x38, 0xd3, 0x44, 0x0d, | 2836 | 0xab, 0xbe, 0xa3, 0xe5, 0x9c, 0x34, 0x79, 0xcc, 0x3d, 0xf7, 0x74, 0x36, |
| 2854 | 0xf6, 0xc8, 0xc7, 0x9a, 0x5e, 0xc4, 0x5c, 0x19, 0xf9, 0x7d, 0xf9, 0x71, | 2837 | 0xb5, 0x3f, 0x77, 0xd4, 0x7c, 0x6f, 0xf4, 0x3d, 0xca, 0xb8, 0x90, 0x91, |
| 2855 | 0xf9, 0x75, 0x79, 0x0c, 0xf2, 0x3d, 0x89, 0x39, 0xf7, 0xcb, 0xaf, 0xca, | 2838 | 0xbf, 0xc5, 0xf6, 0xb6, 0x97, 0xfb, 0xf6, 0xb6, 0x0f, 0x4b, 0x7b, 0x0f, |
| 2856 | 0x7b, 0xe5, 0x5a, 0x79, 0x5c, 0xde, 0x2a, 0xef, 0x42, 0x4c, 0x35, 0x4a, | 2839 | 0x45, 0xd1, 0xdd, 0x74, 0x5f, 0xa0, 0x43, 0x41, 0xfb, 0x28, 0x71, 0x85, |
| 2857 | 0xac, 0xa7, 0x87, 0x95, 0x1e, 0x96, 0x89, 0x73, 0x8a, 0x01, 0xbc, 0x45, | 2840 | 0x76, 0x4b, 0x7d, 0xa6, 0xed, 0x28, 0x9f, 0xb5, 0xd8, 0xd4, 0x87, 0xff, |
| 2858 | 0xbf, 0xe7, 0x88, 0xfa, 0xd9, 0x01, 0xf2, 0xf4, 0x6f, 0x18, 0xcf, 0x13, | 2841 | 0xd9, 0x87, 0x7d, 0x19, 0xbf, 0xfb, 0xbe, 0xd1, 0x33, 0x8b, 0xbe, 0x3f, |
| 2859 | 0x9b, 0x59, 0x2c, 0xfb, 0x18, 0x8e, 0x43, 0xdd, 0x58, 0xdb, 0xe6, 0x37, | 2842 | 0xe3, 0x17, 0xd4, 0xd3, 0xfd, 0xfc, 0xa9, 0x84, 0x7e, 0x1f, 0xb4, 0xbf, |
| 2860 | 0x29, 0x23, 0xe7, 0x22, 0x81, 0xd1, 0x73, 0xa1, 0xc0, 0x43, 0xfa, 0x7d, | 2843 | 0xae, 0x05, 0x38, 0x12, 0xf3, 0x63, 0x0a, 0x26, 0xef, 0x64, 0xe2, 0xbe, |
| 2861 | 0x0b, 0xeb, 0x9d, 0x15, 0x39, 0xe1, 0x3a, 0xe4, 0xcd, 0xc1, 0x11, 0xc8, | 2844 | 0x94, 0x9d, 0xe6, 0x9d, 0x62, 0xd7, 0x21, 0xe7, 0x0b, 0x90, 0xf3, 0x64, |
| 2862 | 0xc2, 0x28, 0x54, 0xfd, 0x23, 0xce, 0x1a, 0x01, 0x49, 0x53, 0x1f, 0xc3, | 2845 | 0x98, 0xbe, 0x1f, 0xf3, 0x4b, 0x8e, 0xe4, 0xb6, 0x28, 0x6f, 0xda, 0x75, |
| 2863 | 0xcf, 0x4c, 0x9e, 0x76, 0x25, 0x5b, 0x98, 0x0d, 0x18, 0x3c, 0x9a, 0x8d, | 2846 | 0xea, 0x26, 0x78, 0xc4, 0x16, 0x31, 0xc5, 0x02, 0x07, 0xca, 0x60, 0x8e, |
| 2864 | 0x76, 0x1f, 0xda, 0xbf, 0xf4, 0xda, 0x3b, 0x24, 0x7b, 0x41, 0x52, 0xef, | 2847 | 0xaf, 0xe1, 0xbc, 0xe5, 0xd7, 0x6f, 0xa4, 0x61, 0xd3, 0x5c, 0xfc, 0x28, |
| 2865 | 0xab, 0x3f, 0xfc, 0x73, 0xaf, 0x6f, 0x10, 0x7d, 0xe0, 0xcc, 0x57, 0xd8, | 2848 | 0x77, 0xf8, 0xf4, 0x6b, 0x94, 0x31, 0xeb, 0xd9, 0x18, 0x0b, 0xe0, 0xfc, |
| 2866 | 0xf7, 0x8a, 0xd7, 0xc7, 0x33, 0x61, 0xad, 0x3e, 0xae, 0x7c, 0x95, 0xb5, | 2849 | 0x98, 0x63, 0x77, 0xa1, 0xd3, 0x13, 0xd0, 0xdd, 0x88, 0x38, 0xe5, 0x13, |
| 2867 | 0xc7, 0x85, 0xdf, 0x2f, 0x18, 0x4c, 0xe8, 0xfb, 0x5d, 0x46, 0xb7, 0x11, | 2850 | 0x52, 0x98, 0x9e, 0x50, 0xfb, 0x3f, 0x08, 0xfb, 0x34, 0xef, 0x66, 0x65, |
| 2868 | 0x13, 0xf8, 0xaf, 0x2e, 0xc6, 0x60, 0x45, 0xc8, 0xd7, 0x7a, 0xe8, 0xc4, | 2851 | 0xe1, 0xe5, 0x3b, 0xb1, 0x4f, 0xe9, 0xe7, 0x6b, 0x0c, 0xc3, 0x6b, 0x51, |
| 2869 | 0xbf, 0x6f, 0x5e, 0x6a, 0x5b, 0x43, 0x9f, 0xd4, 0x60, 0xb4, 0x3f, 0x91, | 2852 | 0x9d, 0x26, 0xe7, 0x60, 0xdc, 0xcd, 0xe4, 0x92, 0xfd, 0xef, 0xaa, 0xfa, |
| 2870 | 0x9e, 0xf9, 0xdb, 0x1e, 0x9e, 0xf7, 0x30, 0xde, 0x0d, 0x67, 0x55, 0x20, | 2853 | 0xe5, 0x70, 0x56, 0x2a, 0x57, 0x6c, 0xad, 0x85, 0xc9, 0xc8, 0x7b, 0x1e, |
| 2871 | 0x6e, 0x3c, 0x0e, 0xd9, 0x6e, 0x95, 0x35, 0x67, 0x48, 0xaf, 0x5e, 0xe8, | 2854 | 0x65, 0x38, 0x73, 0x3e, 0x0e, 0x9c, 0x22, 0x77, 0xff, 0x60, 0xd4, 0xac, |
| 2872 | 0xea, 0x14, 0xe4, 0xd6, 0x95, 0xb9, 0x72, 0x28, 0x30, 0x52, 0x48, 0x89, | 2855 | 0xe9, 0x5f, 0xfb, 0xe9, 0x03, 0x27, 0xcb, 0x8d, 0x63, 0x68, 0xfd, 0x0c, |
| 2873 | 0xc1, 0x53, 0x5b, 0x92, 0x89, 0xa6, 0xe4, 0xe4, 0x40, 0x62, 0x0b, 0xf3, | 2856 | 0xae, 0x3d, 0x74, 0xd4, 0xec, 0x1f, 0xfa, 0xc3, 0x37, 0xbd, 0x4c, 0x94, |
| 2874 | 0x90, 0xd9, 0x7e, 0x57, 0x2e, 0x95, 0x69, 0x8f, 0x73, 0x72, 0x79, 0x20, | 2857 | 0xcf, 0xe4, 0xbd, 0xcc, 0xd1, 0x52, 0x57, 0x38, 0xb7, 0x77, 0x7d, 0xbd, |
| 2875 | 0xe1, 0x16, 0x85, 0xb8, 0x18, 0x57, 0x2e, 0x43, 0x36, 0xff, 0x70, 0x6e, | 2858 | 0xfe, 0x28, 0xc6, 0x8b, 0xcb, 0xe0, 0xe6, 0x84, 0xfa, 0xf1, 0xf3, 0x7b, |
| 2876 | 0x97, 0x1c, 0x2a, 0xa8, 0x1f, 0xdc, 0x1b, 0x96, 0x97, 0xe5, 0xd2, 0xc0, | 2859 | 0x7c, 0x56, 0x13, 0x1f, 0x30, 0x7e, 0xeb, 0x1b, 0xf2, 0xd8, 0x06, 0xe5, |
| 2877 | 0xcb, 0xb7, 0x2e, 0xb9, 0x93, 0x38, 0x53, 0xf2, 0xe1, 0x81, 0x6e, 0xb3, | 2860 | 0x44, 0xfb, 0x1e, 0x92, 0x1f, 0x39, 0xc3, 0xf6, 0x93, 0x5a, 0x77, 0x9c, |
| 2878 | 0x6f, 0xc5, 0x21, 0x09, 0xf3, 0x21, 0x5a, 0x53, 0x73, 0x56, 0x48, 0x7a, | 2861 | 0xc8, 0x30, 0x1f, 0x73, 0xd0, 0x49, 0xda, 0x6b, 0x12, 0x19, 0xfd, 0x98, |
| 2879 | 0x5f, 0xc4, 0x8b, 0xcb, 0xe1, 0x73, 0x07, 0xee, 0x33, 0xf5, 0x94, 0x80, | 2862 | 0xf0, 0x9b, 0x16, 0xd6, 0x7a, 0x0c, 0xbb, 0x4f, 0x4a, 0x50, 0xef, 0x31, |
| 2880 | 0xbf, 0xcf, 0x30, 0xfc, 0x18, 0x3e, 0xe7, 0xd3, 0xc6, 0x9f, 0xa7, 0x2b, | 2863 | 0x94, 0x39, 0x10, 0xfa, 0xa7, 0xf7, 0xc6, 0x79, 0xde, 0x63, 0xea, 0x3d, |
| 2881 | 0x90, 0xbe, 0xd0, 0x26, 0xa1, 0x57, 0xbe, 0x0c, 0xba, 0x86, 0xe4, 0x40, | 2864 | 0x24, 0x44, 0xb9, 0xfd, 0xf1, 0x0e, 0x7e, 0xe3, 0xb9, 0x37, 0xde, 0x77, |
| 2882 | 0x7f, 0xa5, 0xf2, 0x0d, 0x37, 0x14, 0x9f, 0x44, 0x8c, 0x82, 0xfd, 0xcb, | 2865 | 0xff, 0xd3, 0xe7, 0xd2, 0x89, 0x25, 0xfa, 0xac, 0x2d, 0xce, 0xbf, 0xfa, |
| 2883 | 0xea, 0xd3, 0xed, 0xa0, 0x49, 0xb3, 0x44, 0x4f, 0xfb, 0xeb, 0xad, 0xf0, | 2866 | 0xcd, 0xbb, 0x16, 0x0a, 0x9d, 0xa2, 0xf9, 0xb2, 0x4b, 0xef, 0x38, 0xac, |
| 2884 | 0xb0, 0x0c, 0xe7, 0x57, 0x1b, 0x5b, 0xe6, 0x63, 0x1b, 0xfc, 0xf9, 0x0c, | 2867 | 0x7b, 0x48, 0xc4, 0x0e, 0x58, 0x8c, 0x7b, 0x13, 0xdf, 0x98, 0x43, 0x61, |
| 2885 | 0xa6, 0xac, 0xc7, 0xea, 0x0f, 0x78, 0xdf, 0x49, 0x78, 0xed, 0x7b, 0x03, | 2868 | 0x8c, 0x0d, 0x6d, 0x70, 0x86, 0x97, 0x46, 0x2c, 0xb9, 0x3f, 0x92, 0x89, |
| 2886 | 0x0f, 0x86, 0x3a, 0x24, 0xe4, 0xfc, 0x70, 0x1d, 0xb1, 0x91, 0x0b, 0x05, | 2869 | 0x5b, 0x72, 0x2c, 0xbe, 0x22, 0x78, 0x26, 0xf3, 0x29, 0x1b, 0x89, 0x02, |
| 2887 | 0xbf, 0x1f, 0x7e, 0x62, 0xc8, 0xf7, 0x87, 0x65, 0xdb, 0xd2, 0x59, 0xcb, | 2870 | 0xef, 0x8f, 0x94, 0x39, 0x5e, 0x5c, 0xfd, 0x93, 0xe4, 0x31, 0xcf, 0xbb, |
| 2888 | 0xb6, 0x9e, 0xf9, 0x6f, 0x7a, 0x73, 0xa6, 0xbc, 0xb1, 0x88, 0x39, 0x62, | 2871 | 0xe4, 0x4a, 0x28, 0x79, 0xd7, 0xdb, 0x1e, 0x73, 0xde, 0xd6, 0xe6, 0xfb, |
| 2889 | 0xab, 0xd4, 0x3e, 0x99, 0xb1, 0x9f, 0xc9, 0xb3, 0xfd, 0x89, 0x57, 0x15, | 2872 | 0xd5, 0x23, 0x10, 0x37, 0x16, 0x9e, 0x32, 0xb5, 0x87, 0x4b, 0x97, 0x06, |
| 2890 | 0x27, 0x5b, 0x7d, 0x86, 0xf7, 0x11, 0x43, 0x96, 0xf5, 0x99, 0xd8, 0x6e, | 2873 | 0x37, 0xf4, 0x9b, 0xb9, 0x69, 0xd3, 0x2e, 0xa1, 0xdd, 0xea, 0xd7, 0x41, |
| 2891 | 0xd0, 0x37, 0x13, 0xbb, 0xc7, 0x9e, 0xb5, 0x82, 0x01, 0xe3, 0x8f, 0x34, | 2874 | 0x55, 0x2e, 0x0d, 0x56, 0x8f, 0xdc, 0x6e, 0xfc, 0x6d, 0xf2, 0xab, 0xc0, |
| 2892 | 0xc9, 0x0f, 0xa2, 0xb0, 0xdb, 0x88, 0xf1, 0xb2, 0xcc, 0x7f, 0xb9, 0x77, | 2875 | 0x87, 0x89, 0xef, 0xa9, 0x0b, 0x3b, 0xbb, 0x7c, 0x26, 0x74, 0x66, 0xd9, |
| 2893 | 0x3c, 0x3f, 0x85, 0x7d, 0x89, 0x53, 0x49, 0x6b, 0x02, 0xfb, 0xe3, 0x19, | 2876 | 0x5a, 0x6d, 0x63, 0x0e, 0xec, 0x94, 0x27, 0xdd, 0x27, 0x83, 0x38, 0x15, |
| 2894 | 0x10, 0x03, 0x6a, 0x81, 0x4e, 0x5d, 0x78, 0x3f, 0xc4, 0x4f, 0xfd, 0xfe, | 2877 | 0xe3, 0x5a, 0x22, 0x9d, 0x9b, 0x13, 0x26, 0xe7, 0xb1, 0x69, 0x29, 0x17, |
| 2895 | 0xfb, 0xaf, 0x86, 0x0e, 0xe3, 0xfe, 0x0d, 0x2e, 0x4c, 0x2c, 0xe6, 0x42, | 2878 | 0xea, 0x7a, 0x89, 0xb1, 0xaa, 0xa8, 0x62, 0x43, 0xf7, 0x26, 0xeb, 0xc1, |
| 2896 | 0x86, 0x3d, 0x0c, 0x6c, 0xad, 0xdc, 0xfa, 0xd8, 0x58, 0x1f, 0x4f, 0x47, | 2879 | 0x7a, 0x64, 0x46, 0x31, 0xa3, 0x47, 0xf1, 0xc0, 0xe8, 0x5d, 0x97, 0xc6, |
| 2897 | 0x8c, 0x52, 0x0c, 0x7e, 0x20, 0x65, 0x82, 0xbc, 0xd9, 0x89, 0xfe, 0x95, | 2880 | 0x61, 0xc9, 0x97, 0xae, 0x2d, 0xbb, 0x03, 0xac, 0xe1, 0x79, 0x75, 0xf9, |
| 2898 | 0xb7, 0x53, 0xfa, 0xea, 0x7e, 0xdf, 0x87, 0x55, 0x6c, 0xf7, 0x64, 0x61, | 2881 | 0x09, 0xb4, 0x89, 0x33, 0xf7, 0x34, 0x9d, 0x6f, 0xcc, 0xc9, 0x26, 0xec, |
| 2899 | 0xaf, 0xc1, 0xe6, 0x59, 0x8b, 0x92, 0xea, 0x4e, 0xda, 0x27, 0xb0, 0xdf, | 2882 | 0x41, 0xab, 0x39, 0x1f, 0xcb, 0x73, 0xcd, 0x79, 0xd8, 0x57, 0x25, 0xdf, |
| 2900 | 0x74, 0x28, 0x51, 0xcc, 0x49, 0x4c, 0x66, 0xa1, 0x2f, 0xde, 0x80, 0xec, | 2883 | 0xcb, 0xdc, 0x6b, 0x10, 0x6f, 0x77, 0xfd, 0x78, 0xfb, 0x87, 0x06, 0xa8, |
| 2901 | 0x5f, 0x2b, 0xc7, 0x03, 0x69, 0xec, 0xe9, 0x60, 0x61, 0x48, 0x26, 0x2f, | 2884 | 0x83, 0xf0, 0x6f, 0xf2, 0x91, 0xb1, 0xb6, 0x91, 0xf9, 0x52, 0xf8, 0x1f, |
| 2902 | 0xe8, 0x37, 0x5f, 0xd0, 0xfb, 0x43, 0x52, 0x2a, 0x24, 0xb6, 0xcc, 0x82, | 2885 | 0xbb, 0xb1, 0x53, 0xb4, 0x37, 0x76, 0xf2, 0xe3, 0xb8, 0xf6, 0x25, 0x70, |
| 2903 | 0xff, 0x66, 0x0b, 0xc4, 0x17, 0xf5, 0xc6, 0x47, 0x31, 0xe3, 0x42, 0x61, | 2886 | 0x92, 0x22, 0xf8, 0x45, 0xc1, 0xaf, 0xc3, 0xe7, 0xf5, 0x9d, 0xfe, 0xb7, |
| 2904 | 0x23, 0xec, 0x83, 0xa4, 0x2e, 0xc1, 0xff, 0xb9, 0x54, 0xde, 0x02, 0x3e, | 2887 | 0x98, 0xd3, 0x41, 0xcd, 0xad, 0x0f, 0xee, 0xc9, 0xad, 0xdf, 0x35, 0xc0, |
| 2905 | 0xc3, 0xfd, 0xb2, 0x83, 0x5f, 0xe8, 0xcc, 0xf2, 0x00, 0xe4, 0x9c, 0x7b, | 2888 | 0xda, 0xe3, 0xe2, 0xd6, 0x6e, 0xdf, 0x88, 0xdf, 0x77, 0xe2, 0x96, 0xef, |
| 2906 | 0xb1, 0x65, 0x6e, 0x33, 0xce, 0x8e, 0x38, 0x22, 0xc5, 0x8f, 0xff, 0x07, | 2889 | 0x63, 0xf6, 0x4c, 0x51, 0xf7, 0xcc, 0x65, 0x8d, 0x11, 0xcf, 0x6f, 0x2d, |
| 2907 | 0xe7, 0xeb, 0xbf, 0xf7, 0x76, 0xb5, 0xd3, 0xb3, 0xba, 0x2f, 0xd8, 0x65, | 2890 | 0xc9, 0x8c, 0xd3, 0x25, 0xb9, 0xd5, 0xc0, 0x4e, 0x78, 0xe3, 0xb3, 0x6e, |
| 2908 | 0xc4, 0x00, 0xd9, 0x7e, 0x63, 0xb7, 0xd3, 0x91, 0x76, 0x49, 0xdf, 0x43, | 2891 | 0xa1, 0x2f, 0x2c, 0xec, 0xcf, 0xe7, 0x29, 0x47, 0x8b, 0xe5, 0xc2, 0x1c, |
| 2909 | 0x3b, 0xde, 0xa1, 0x31, 0xa2, 0xf2, 0x62, 0x84, 0xf7, 0xdf, 0x59, 0x67, | 2892 | 0xff, 0x90, 0x44, 0xc6, 0x68, 0x3b, 0x68, 0x13, 0x3e, 0x05, 0x2c, 0x03, |
| 2910 | 0xe8, 0x17, 0x6e, 0x68, 0xbf, 0x8d, 0xdf, 0x36, 0xe9, 0x74, 0xf8, 0x6b, | 2893 | 0x4f, 0xdf, 0x6a, 0xcc, 0x7d, 0xbf, 0x9f, 0x1c, 0x29, 0xc3, 0xe0, 0x9d, |
| 2911 | 0xe3, 0xf7, 0xc6, 0x3a, 0xd6, 0x77, 0x3b, 0x9d, 0x24, 0xd6, 0xfa, 0x9d, | 2894 | 0x0b, 0x5e, 0x2b, 0xf6, 0xdf, 0x31, 0xd6, 0xb4, 0xec, 0xcc, 0x95, 0x36, |
| 2912 | 0x97, 0x2f, 0xc0, 0xf5, 0x2c, 0x9f, 0x59, 0xeb, 0xad, 0xcb, 0x79, 0xdb, | 2895 | 0x4b, 0x6d, 0x93, 0xbe, 0xc7, 0x94, 0xff, 0x1e, 0x61, 0xcc, 0x67, 0xb6, |
| 2913 | 0x30, 0x4f, 0xab, 0xb7, 0x56, 0x9b, 0xe6, 0x27, 0xcd, 0x5a, 0x88, 0x71, | 2896 | 0x14, 0xdc, 0x33, 0x27, 0xc7, 0x4f, 0x25, 0x62, 0x49, 0x4b, 0xe7, 0xa5, |
| 2914 | 0x0b, 0xef, 0xad, 0xd3, 0xef, 0x8c, 0x61, 0x2f, 0xea, 0xdb, 0x7f, 0x5d, | 2897 | 0xf6, 0x2b, 0xeb, 0xce, 0xc1, 0x2e, 0xd1, 0x86, 0x29, 0xae, 0x81, 0xab, |
| 2915 | 0x47, 0xdc, 0x5c, 0xa7, 0xd3, 0xa6, 0x18, 0xcf, 0x9b, 0x1d, 0x1d, 0xb8, | 2898 | 0x12, 0xd7, 0x68, 0x9f, 0xd4, 0xa6, 0xc5, 0x8b, 0x98, 0x67, 0x6e, 0x4b, |
| 2916 | 0xe6, 0x9a, 0x1c, 0x63, 0xf2, 0xe1, 0xa5, 0x32, 0xe7, 0x67, 0x3b, 0x25, | 2899 | 0xf3, 0x0f, 0xb1, 0xd3, 0xe1, 0x44, 0x65, 0x46, 0xb1, 0x0e, 0x7c, 0x55, |
| 2917 | 0x47, 0x35, 0x9f, 0x61, 0xb0, 0x7c, 0xa5, 0xc2, 0xfd, 0x32, 0x79, 0x4e, | 2900 | 0xe7, 0x0e, 0x7b, 0x1c, 0x6a, 0xcc, 0x2d, 0xd1, 0xbf, 0x64, 0x1e, 0xa6, |
| 2918 | 0xf1, 0x75, 0x33, 0x79, 0x8b, 0xdf, 0xbd, 0xf0, 0x3b, 0x39, 0xfa, 0x12, | 2901 | 0x43, 0xb2, 0x15, 0x91, 0x57, 0xa0, 0xdf, 0x57, 0xd7, 0xb9, 0xe7, 0xc2, |
| 2919 | 0x63, 0x32, 0x81, 0xf3, 0xbb, 0x0c, 0x9f, 0x6a, 0xc1, 0x7c, 0x13, 0x8b, | 2902 | 0xbd, 0xc6, 0x47, 0xac, 0xdf, 0x63, 0x49, 0xaf, 0xe6, 0x6b, 0x8b, 0x58, |
| 2920 | 0xbf, 0xfd, 0x38, 0x97, 0x10, 0x64, 0x8c, 0x32, 0x4a, 0x99, 0xc2, 0xf9, | 2903 | 0x2f, 0xf0, 0xab, 0xf1, 0xf0, 0x29, 0xf8, 0x09, 0x5a, 0x27, 0xc1, 0x18, |
| 2921 | 0x8d, 0xdb, 0xf2, 0xee, 0x00, 0xe5, 0x79, 0x40, 0xae, 0x54, 0xe5, 0x39, | 2904 | 0xeb, 0x2c, 0x7c, 0xca, 0xc6, 0xb8, 0x10, 0x30, 0x62, 0x9a, 0xe7, 0x67, |
| 2922 | 0x07, 0x79, 0xa6, 0x2c, 0xe7, 0x20, 0xd3, 0x86, 0xaf, 0xf7, 0xf1, 0x1b, | 2905 | 0xc0, 0x8b, 0x77, 0x73, 0x35, 0xc5, 0xea, 0x82, 0xc6, 0x63, 0x6b, 0xeb, |
| 2923 | 0x6b, 0x84, 0xeb, 0x25, 0xf5, 0x21, 0x2e, 0x82, 0xaf, 0x6d, 0x13, 0x97, | 2906 | 0x1d, 0x6a, 0x2f, 0x6a, 0xd5, 0x3e, 0xac, 0x8b, 0x1c, 0xb7, 0xc6, 0x8a, |
| 2924 | 0x2b, 0x2e, 0xfe, 0x30, 0xf4, 0x5a, 0x93, 0xf7, 0x1d, 0x00, 0xae, 0xaf, | 2907 | 0xfe, 0xf9, 0x16, 0xa9, 0x56, 0xd9, 0x96, 0x81, 0x56, 0xd5, 0x97, 0x20, |
| 2925 | 0xbc, 0x28, 0xe9, 0x0b, 0x2d, 0xd8, 0x77, 0xbc, 0x9b, 0x67, 0x96, 0xbd, | 2908 | 0x1f, 0x65, 0xcb, 0x1a, 0xb8, 0x6e, 0x75, 0xc3, 0xc1, 0x2f, 0x85, 0xdf, |
| 2926 | 0xc2, 0x7f, 0x9f, 0x17, 0x89, 0x37, 0xa5, 0x3f, 0xcb, 0x6b, 0xc6, 0x79, | 2909 | 0x08, 0x7e, 0x0f, 0x4a, 0xb6, 0x4c, 0xfe, 0xcd, 0xfc, 0x53, 0x47, 0xd3, |
| 2927 | 0xeb, 0x31, 0x66, 0x10, 0x74, 0x6e, 0xc1, 0xfc, 0xdc, 0xe3, 0x72, 0xe3, | 2910 | 0xf3, 0x5b, 0xf4, 0xfb, 0x11, 0xd6, 0xb4, 0x15, 0x7d, 0x3f, 0xad, 0x58, |
| 2928 | 0x78, 0x3f, 0x54, 0x83, 0x4f, 0xf5, 0xe9, 0xbd, 0x4a, 0xd7, 0xcc, 0xea, | 2911 | 0xdd, 0x8f, 0x9b, 0x32, 0xbe, 0x9b, 0xf2, 0xb1, 0xee, 0xa7, 0x7e, 0x6d, |
| 2929 | 0x37, 0x5a, 0x46, 0x06, 0x27, 0x0a, 0xe4, 0xfb, 0x18, 0xf8, 0x96, 0x3e, | 2912 | 0xed, 0xbf, 0x01, 0x17, 0x24, 0x5e, 0x9d, 0xe0, 0x70, 0x00, 0x00, 0x00 }; |
| 2930 | 0x31, 0xf9, 0x25, 0xa5, 0xe7, 0x50, 0x2a, 0x90, 0x7f, 0x43, 0x9a, 0xc3, | ||
| 2931 | 0xc8, 0xc2, 0xb6, 0xec, 0xd1, 0xf1, 0xb1, 0x25, 0xf9, 0xee, 0x0e, 0x68, | ||
| 2932 | 0xdc, 0x9d, 0x2d, 0xac, 0x94, 0x1e, 0xd5, 0x41, 0xdd, 0x1e, 0x6f, 0xc3, | ||
| 2933 | 0x5e, 0x28, 0x96, 0x7b, 0xbf, 0x1c, 0x29, 0x0f, 0x82, 0x0e, 0x31, 0x79, | ||
| 2934 | 0x06, 0x7e, 0xf3, 0x73, 0xe5, 0xbb, 0x64, 0x31, 0x82, 0x7d, 0x55, 0x65, | ||
| 2935 | 0x6c, 0x58, 0x9e, 0x9f, 0x8d, 0x7b, 0xd7, 0x09, 0x77, 0xd1, 0xda, 0x8e, | ||
| 2936 | 0x3d, 0x50, 0x9e, 0x28, 0x57, 0x1c, 0x17, 0x44, 0x2c, 0xc2, 0x79, 0x8f, | ||
| 2937 | 0x18, 0xdd, 0x86, 0x79, 0x8b, 0x11, 0xca, 0x2f, 0xf7, 0x16, 0xf2, 0x64, | ||
| 2938 | 0x96, 0x71, 0x15, 0xdf, 0xd9, 0xd8, 0xa4, 0x4c, 0xdd, 0x59, 0x24, 0x14, | ||
| 2939 | 0x07, 0xba, 0x74, 0x06, 0xfe, 0x3c, 0xbe, 0x5c, 0xfa, 0xdf, 0x51, 0x50, | ||
| 2940 | 0x8f, 0xc2, 0x56, 0x16, 0x60, 0x2b, 0x0b, 0xb0, 0x91, 0x90, 0x85, 0x6b, | ||
| 2941 | 0x05, 0xd8, 0xc8, 0x02, 0x6c, 0x24, 0xf4, 0xd9, 0x9b, 0x88, 0xed, 0xde, | ||
| 2942 | 0x00, 0x0f, 0x19, 0x5f, 0xfb, 0x30, 0x7d, 0x6d, 0xfc, 0xfd, 0x17, 0xea, | ||
| 2943 | 0x52, 0x61, 0x78, 0xd0, 0x71, 0x00, 0x00, 0x00 }; | ||
| 2944 | 2913 | ||
| 2945 | static const u32 bnx2_RXP_b06FwData[(0x0/4) + 1] = { 0x0 }; | 2914 | static const u32 bnx2_RXP_b06FwData[(0x0/4) + 1] = { 0x0 }; |
| 2946 | static const u32 bnx2_RXP_b06FwRodata[(0x24/4) + 1] = { | 2915 | static const u32 bnx2_RXP_b06FwRodata[(0x24/4) + 1] = { |
| 2947 | 0x0800458c, 0x0800458c, 0x08004504, 0x0800453c, 0x08004570, 0x08004594, | 2916 | 0x08004c28, 0x08004c28, 0x08004ba0, 0x08004bd8, 0x08004c0c, 0x08004c30, |
| 2948 | 0x08004594, 0x08004594, 0x08004474, 0x00000000 }; | 2917 | 0x08004c30, 0x08004c30, 0x08004b10, 0x00000000 }; |
| 2949 | 2918 | ||
| 2950 | static struct fw_info bnx2_rxp_fw_06 = { | 2919 | static struct fw_info bnx2_rxp_fw_06 = { |
| 2951 | /* Firmware version: 4.4.2 */ | 2920 | /* Firmware version: 4.6.16 */ |
| 2952 | .ver_major = 0x4, | 2921 | .ver_major = 0x4, |
| 2953 | .ver_minor = 0x4, | 2922 | .ver_minor = 0x6, |
| 2954 | .ver_fix = 0x2, | 2923 | .ver_fix = 0x10, |
| 2955 | 2924 | ||
| 2956 | .start_addr = 0x080031d0, | 2925 | .start_addr = 0x080031d8, |
| 2957 | 2926 | ||
| 2958 | .text_addr = 0x08000000, | 2927 | .text_addr = 0x08000000, |
| 2959 | .text_len = 0x71cc, | 2928 | .text_len = 0x70dc, |
| 2960 | .text_index = 0x0, | 2929 | .text_index = 0x0, |
| 2961 | .gz_text = bnx2_RXP_b06FwText, | 2930 | .gz_text = bnx2_RXP_b06FwText, |
| 2962 | .gz_text_len = sizeof(bnx2_RXP_b06FwText), | 2931 | .gz_text_len = sizeof(bnx2_RXP_b06FwText), |
| @@ -2966,15 +2935,15 @@ static struct fw_info bnx2_rxp_fw_06 = { | |||
| 2966 | .data_index = 0x0, | 2935 | .data_index = 0x0, |
| 2967 | .data = bnx2_RXP_b06FwData, | 2936 | .data = bnx2_RXP_b06FwData, |
| 2968 | 2937 | ||
| 2969 | .sbss_addr = 0x08007220, | 2938 | .sbss_addr = 0x08007120, |
| 2970 | .sbss_len = 0x58, | 2939 | .sbss_len = 0x54, |
| 2971 | .sbss_index = 0x0, | 2940 | .sbss_index = 0x0, |
| 2972 | 2941 | ||
| 2973 | .bss_addr = 0x08007278, | 2942 | .bss_addr = 0x08007178, |
| 2974 | .bss_len = 0x44c, | 2943 | .bss_len = 0x450, |
| 2975 | .bss_index = 0x0, | 2944 | .bss_index = 0x0, |
| 2976 | 2945 | ||
| 2977 | .rodata_addr = 0x080071cc, | 2946 | .rodata_addr = 0x080070dc, |
| 2978 | .rodata_len = 0x24, | 2947 | .rodata_len = 0x24, |
| 2979 | .rodata_index = 0x0, | 2948 | .rodata_index = 0x0, |
| 2980 | .rodata = bnx2_RXP_b06FwRodata, | 2949 | .rodata = bnx2_RXP_b06FwRodata, |
| @@ -2997,639 +2966,571 @@ static const struct cpu_reg cpu_reg_rxp = { | |||
| 2997 | }; | 2966 | }; |
| 2998 | 2967 | ||
| 2999 | static u8 bnx2_rv2p_proc1[] = { | 2968 | static u8 bnx2_rv2p_proc1[] = { |
| 3000 | /* Date: 05/13/2008 13:50 */ | 2969 | /* Date: 02/03/2009 14:20 */ |
| 3001 | 0xa5, 0x56, 0x4f, 0x48, 0x14, 0x61, 0x14, 0x7f, 0x3b, 0xfb, 0x67, 0xd6, | 2970 | 0xa5, 0x56, 0x4f, 0x68, 0x14, 0x67, 0x14, 0x7f, 0x33, 0xbb, 0xb3, 0xb3, |
| 3002 | 0xdd, 0xd9, 0x9d, 0x25, 0xff, 0x6d, 0x66, 0xb8, 0x49, 0x97, 0xd5, 0x15, | 2971 | 0x99, 0x9d, 0xd9, 0xdd, 0x92, 0x18, 0x96, 0x18, 0xcc, 0x1a, 0x84, 0x92, |
| 3003 | 0xb5, 0x22, 0x3a, 0x18, 0x86, 0x17, 0x21, 0x3b, 0x84, 0x20, 0x45, 0x04, | 2972 | 0x75, 0xb7, 0x6e, 0x6c, 0x0f, 0x42, 0x03, 0x29, 0xb9, 0x08, 0x35, 0x87, |
| 3004 | 0xd9, 0x12, 0xde, 0x82, 0x0e, 0xd1, 0x29, 0x68, 0xd1, 0x34, 0x8a, 0x0a, | 2973 | 0x12, 0x11, 0x8a, 0x2d, 0x68, 0xb7, 0x22, 0x14, 0x0a, 0xa5, 0x07, 0x8f, |
| 3005 | 0x16, 0x52, 0x30, 0xa2, 0xa4, 0x43, 0x85, 0x04, 0xed, 0x74, 0x0a, 0x12, | 2974 | 0xa5, 0x83, 0x71, 0x53, 0x5a, 0xbc, 0xe4, 0xd0, 0x80, 0x42, 0x35, 0x27, |
| 3006 | 0x82, 0x8a, 0x88, 0xea, 0x12, 0x78, 0xa8, 0x4b, 0x16, 0x61, 0xd0, 0xa1, | 2975 | 0x5b, 0x62, 0x0e, 0x3b, 0xe0, 0xa1, 0x88, 0xe0, 0x41, 0x8f, 0x7a, 0xaa, |
| 3007 | 0x83, 0x9d, 0xba, 0xe4, 0xf4, 0xbd, 0xef, 0xbd, 0xcf, 0x9d, 0xf9, 0x9c, | 2976 | 0x7f, 0x5a, 0x28, 0x46, 0x29, 0xb5, 0x87, 0x82, 0xc7, 0xde, 0x9a, 0xe9, |
| 3008 | 0x55, 0x21, 0x41, 0x7f, 0xbc, 0x6f, 0xde, 0x7b, 0xdf, 0x9b, 0xdf, 0x7b, | 2977 | 0xf7, 0xfe, 0x7c, 0xbb, 0x33, 0x5f, 0x66, 0x13, 0xa1, 0x42, 0xfc, 0xf1, |
| 3009 | 0xef, 0x37, 0x66, 0x00, 0xc0, 0x80, 0x92, 0xd3, 0x26, 0x10, 0x52, 0x46, | 2978 | 0xbd, 0x79, 0xef, 0xfb, 0xde, 0x9f, 0xdf, 0x7b, 0x6f, 0xab, 0x00, 0x60, |
| 3010 | 0x28, 0x2e, 0x20, 0x04, 0xf0, 0x18, 0xe8, 0x27, 0x6a, 0x49, 0xbb, 0xd4, | 2979 | 0x43, 0x18, 0x4d, 0x29, 0x04, 0x2b, 0x67, 0x15, 0x11, 0x00, 0x36, 0x81, |
| 3011 | 0xcd, 0x76, 0x27, 0x41, 0xa9, 0x33, 0x23, 0xfe, 0x9e, 0x85, 0xfe, 0x1c, | 2980 | 0xff, 0x39, 0x3e, 0x9d, 0xc3, 0x23, 0x72, 0x3e, 0xcc, 0x10, 0x1e, 0xae, |
| 3012 | 0x62, 0x18, 0xfa, 0x77, 0x21, 0x1e, 0x84, 0x17, 0xb9, 0xac, 0xc0, 0xbf, | 2981 | 0xaa, 0xff, 0x3f, 0x85, 0xf9, 0x3a, 0x62, 0x0e, 0xe6, 0x0f, 0x22, 0x1e, |
| 3013 | 0x2e, 0x94, 0xd0, 0x6e, 0xa8, 0x3c, 0x73, 0x92, 0x32, 0xff, 0x12, 0xc7, | 2982 | 0x85, 0xbb, 0xf5, 0x9a, 0xc2, 0x7f, 0x63, 0x08, 0xf1, 0x1c, 0xf4, 0x7e, |
| 3014 | 0x7f, 0x0a, 0x13, 0x1e, 0x28, 0xc4, 0x29, 0x0f, 0x23, 0x74, 0x65, 0x24, | 2983 | 0x8e, 0x4a, 0x74, 0xff, 0x96, 0xd8, 0xff, 0x9a, 0x63, 0x3c, 0xd6, 0xac, |
| 3015 | 0x2c, 0x96, 0xd1, 0x1e, 0x19, 0x81, 0x18, 0xe6, 0x99, 0x12, 0x0e, 0x68, | 2984 | 0x12, 0x3e, 0x5a, 0xc5, 0xf7, 0x4e, 0x9d, 0x82, 0x02, 0xda, 0x5d, 0x50, |
| 3016 | 0xb7, 0x86, 0x4a, 0x5d, 0x5c, 0x97, 0x41, 0x7e, 0x5f, 0xca, 0x36, 0x9e, | 2985 | 0x17, 0x23, 0x96, 0xd4, 0x83, 0x45, 0xb2, 0x03, 0xbb, 0xa2, 0x70, 0x12, |
| 3017 | 0xc3, 0xd7, 0x01, 0xb4, 0xb7, 0x27, 0x2e, 0x97, 0x11, 0xb3, 0x30, 0x16, | 2986 | 0x9e, 0x2f, 0xa0, 0xfe, 0x1b, 0xde, 0xa5, 0x55, 0xc4, 0x12, 0x74, 0x9a, |
| 3018 | 0xb7, 0xe8, 0x7d, 0xda, 0x28, 0xed, 0x52, 0x07, 0xc6, 0x09, 0xdf, 0x0e, | 2987 | 0xa8, 0x77, 0x00, 0xb2, 0xf5, 0x6a, 0x4a, 0x0f, 0xe5, 0x11, 0x84, 0x4d, |
| 3019 | 0xce, 0x1b, 0xc5, 0xbc, 0x3f, 0x5d, 0xca, 0x8b, 0xf9, 0xbc, 0x79, 0x5a, | 2988 | 0xc4, 0x11, 0x80, 0x56, 0xf2, 0x3d, 0xd7, 0x0a, 0x5b, 0x68, 0xff, 0x85, |
| 3020 | 0x45, 0x1e, 0x3c, 0x8f, 0x71, 0x5d, 0x31, 0xad, 0xae, 0x98, 0xa8, 0x83, | 2989 | 0xbc, 0xb7, 0x4f, 0xee, 0x51, 0x71, 0x47, 0x88, 0x3d, 0xb1, 0x53, 0x7f, |
| 3021 | 0x79, 0x00, 0x55, 0x07, 0x62, 0xa3, 0xb8, 0x17, 0xf3, 0xae, 0xf0, 0x7b, | 2990 | 0x2d, 0x96, 0xb3, 0xfe, 0x67, 0x4a, 0x4f, 0xc7, 0xe3, 0x73, 0xde, 0xa6, |
| 3022 | 0x03, 0x9c, 0xca, 0x71, 0x7e, 0x07, 0xb1, 0xc2, 0xf9, 0xc4, 0x2f, 0xbf, | 2991 | 0x38, 0x1e, 0x57, 0xe2, 0x79, 0xb6, 0xaa, 0xf3, 0x86, 0xfa, 0xbf, 0xc7, |
| 3023 | 0xc7, 0xfa, 0x3c, 0x8a, 0x27, 0x7f, 0xfd, 0x66, 0x41, 0x3d, 0x57, 0xfd, | 2992 | 0x69, 0x7d, 0xd8, 0x43, 0xff, 0x89, 0xd2, 0x4f, 0xdf, 0xcb, 0xf2, 0x5f, |
| 3024 | 0xc0, 0x7b, 0x3e, 0x8a, 0x7b, 0xbc, 0xfe, 0xb0, 0x89, 0xff, 0x7b, 0xe1, | 2993 | 0x06, 0xf2, 0x99, 0xf4, 0xf7, 0xad, 0x06, 0xfa, 0xe7, 0x00, 0x34, 0x24, |
| 3025 | 0xef, 0xcf, 0x4b, 0xe7, 0x6f, 0xab, 0xe7, 0xf9, 0x20, 0xde, 0xa2, 0x1a, | 2994 | 0x8f, 0xa4, 0xff, 0x30, 0xe6, 0x78, 0xe6, 0xe0, 0x90, 0x5d, 0x23, 0xbd, |
| 3026 | 0x6f, 0x2f, 0x99, 0xb7, 0x41, 0xd8, 0x6d, 0x64, 0xa5, 0x5f, 0x04, 0x10, | 2995 | 0x3c, 0xd4, 0x28, 0x3f, 0x1c, 0xef, 0x01, 0xc1, 0x25, 0xc1, 0x6b, 0x82, |
| 3027 | 0x77, 0x88, 0x02, 0x10, 0x77, 0x32, 0x1e, 0x63, 0xbc, 0xc9, 0x78, 0x83, | 2996 | 0x3f, 0x08, 0xc2, 0xff, 0xc4, 0xad, 0x21, 0xf2, 0x7d, 0x82, 0xfb, 0x0d, |
| 3028 | 0xb1, 0x91, 0xb1, 0x81, 0xb1, 0x9e, 0x71, 0x1b, 0xe3, 0x3b, 0xc6, 0x0c, | 2997 | 0xf9, 0x2d, 0xc1, 0xb7, 0x0c, 0x7b, 0xcf, 0x62, 0x7c, 0xac, 0xbf, 0xcb, |
| 3029 | 0xa3, 0xcd, 0x98, 0x66, 0x7c, 0xc3, 0x68, 0x31, 0x26, 0xb5, 0x7c, 0x2d, | 2998 | 0xf9, 0x5d, 0xc3, 0xfe, 0x4b, 0xe0, 0xfc, 0x58, 0x46, 0xde, 0x36, 0x85, |
| 3030 | 0x8c, 0x71, 0xc6, 0xbb, 0x8c, 0xfb, 0xb5, 0xf8, 0xdf, 0x8c, 0x0b, 0x8c, | 2999 | 0x87, 0x58, 0x77, 0xf9, 0x3e, 0xa3, 0xf5, 0x84, 0x37, 0x8d, 0xa4, 0xfe, |
| 3031 | 0xcd, 0x21, 0xc2, 0x43, 0x6c, 0x23, 0xa1, 0x3c, 0xf7, 0x3e, 0xbe, 0xee, | 3000 | 0x8d, 0x5d, 0xf4, 0x59, 0x6d, 0x61, 0x26, 0xcb, 0xee, 0x7a, 0x2c, 0x79, |
| 3032 | 0xaf, 0xf5, 0x77, 0xb1, 0xcc, 0xcf, 0xf3, 0xca, 0x2f, 0x2e, 0xf9, 0x83, | 3001 | 0x14, 0x7b, 0xaf, 0x77, 0x67, 0x08, 0xef, 0xe7, 0x32, 0x79, 0x3f, 0x2e, |
| 3033 | 0x0e, 0xaf, 0xff, 0x9d, 0x0d, 0xfc, 0xc9, 0x6d, 0x20, 0x1f, 0x14, 0x37, | 3002 | 0x71, 0xa8, 0xa6, 0x23, 0xfb, 0xdb, 0x16, 0xf3, 0xdb, 0x11, 0x5e, 0xee, |
| 3034 | 0xed, 0x52, 0x1d, 0xb7, 0x38, 0xbe, 0xbe, 0xb2, 0x50, 0x63, 0x8f, 0xfa, | 3003 | 0xc6, 0x63, 0xe1, 0xd5, 0x8c, 0xe6, 0x57, 0x9a, 0x57, 0xcc, 0x8f, 0x82, |
| 3035 | 0x0a, 0xfa, 0x7c, 0x05, 0xed, 0xd1, 0x4e, 0xde, 0xa3, 0xa3, 0xeb, 0xe6, | 3004 | 0xc1, 0x8f, 0x6f, 0xf7, 0xc8, 0x4b, 0xc9, 0x88, 0x6f, 0x39, 0xd6, 0xf9, |
| 3036 | 0x97, 0xe6, 0xd4, 0xbb, 0x87, 0x32, 0x4f, 0x8d, 0x39, 0x7f, 0x1a, 0x2a, | 3005 | 0xb6, 0x45, 0x7c, 0xb1, 0x50, 0xa5, 0x7b, 0xbf, 0x8b, 0xe8, 0x38, 0xe6, |
| 3037 | 0x16, 0xb2, 0x34, 0x17, 0xa5, 0x8d, 0xee, 0xc5, 0x78, 0x9e, 0xcb, 0xbc, | 3006 | 0xaf, 0xe0, 0x39, 0x0f, 0x97, 0x23, 0x6d, 0x27, 0xfd, 0xd4, 0xd0, 0xef, |
| 3038 | 0x9a, 0x4f, 0xff, 0x5c, 0xd2, 0x7c, 0xc5, 0xb4, 0xf9, 0xba, 0xb0, 0x09, | 3007 | 0xb0, 0x7d, 0x20, 0x9f, 0x6d, 0x47, 0xfb, 0xc9, 0x72, 0x0f, 0xf0, 0x3c, |
| 3039 | 0xbf, 0x49, 0x8d, 0xa7, 0x73, 0xae, 0xea, 0x97, 0xc1, 0xc7, 0xe3, 0xb1, | 3008 | 0xda, 0x5b, 0x37, 0xf2, 0x56, 0xa7, 0xb8, 0x41, 0xe2, 0x07, 0x23, 0x7e, |
| 3040 | 0x8c, 0xcc, 0x7b, 0xcd, 0x91, 0x66, 0x83, 0x35, 0x85, 0x76, 0x04, 0xae, | 3009 | 0x9d, 0xbf, 0x57, 0xc2, 0xf7, 0x49, 0x95, 0x0f, 0xfe, 0x3e, 0x05, 0xfa, |
| 3041 | 0x3b, 0x2a, 0x8e, 0xf7, 0xb2, 0x43, 0xdd, 0x43, 0xf1, 0x29, 0x20, 0x9e, | 3010 | 0x7e, 0x9c, 0x0b, 0x45, 0x38, 0x7b, 0xbc, 0x42, 0xfe, 0x94, 0x0b, 0x7c, |
| 3042 | 0xe7, 0x34, 0x9e, 0x73, 0x5b, 0xd2, 0xa9, 0x15, 0xb7, 0xaa, 0x53, 0xf4, | 3011 | 0xcd, 0x87, 0x15, 0xc6, 0x73, 0x1e, 0xe3, 0x9f, 0x9e, 0xca, 0x2d, 0xc4, |
| 3043 | 0xbc, 0x0d, 0xbc, 0x3a, 0x15, 0x87, 0xd1, 0x41, 0x5b, 0xde, 0x9b, 0x8e, | 3012 | 0xf1, 0xf9, 0x12, 0x9f, 0x3f, 0x09, 0xf0, 0xde, 0x51, 0xf5, 0xb0, 0xb6, |
| 3044 | 0x51, 0x9a, 0xe3, 0x36, 0xe1, 0x99, 0x04, 0xe1, 0x72, 0xa2, 0x4e, 0xfc, | 3013 | 0xd7, 0x7e, 0xed, 0xe6, 0x0f, 0xbe, 0xaf, 0xdf, 0xd1, 0x7e, 0xe8, 0xf7, |
| 3045 | 0x75, 0xdd, 0xb1, 0x24, 0xd9, 0xa7, 0x53, 0x6a, 0x3f, 0x54, 0xbc, 0xaa, | 3014 | 0xd2, 0x75, 0x19, 0xfe, 0x2e, 0x63, 0xc7, 0x4e, 0xe7, 0x21, 0x3f, 0xcb, |
| 3046 | 0x6b, 0xa3, 0x7a, 0xf0, 0x7e, 0x75, 0x8f, 0xaa, 0x43, 0xdd, 0xe7, 0xe7, | 3015 | 0x78, 0xb5, 0x4d, 0x50, 0x5b, 0xf3, 0xd9, 0xee, 0x8a, 0x9f, 0xc7, 0xf3, |
| 3047 | 0xbf, 0xf6, 0xbd, 0x84, 0x45, 0xc3, 0xcf, 0xc3, 0xed, 0x1e, 0xc2, 0x48, | 3016 | 0x3b, 0x57, 0x1e, 0xe0, 0xfd, 0xf6, 0xd1, 0xb5, 0x48, 0xfc, 0xab, 0xe8, |
| 3048 | 0xaf, 0x84, 0xec, 0x8c, 0x45, 0x71, 0xb3, 0x56, 0x04, 0xed, 0x7d, 0xb3, | 3017 | 0xba, 0x92, 0x1c, 0xa6, 0x81, 0xcf, 0x4b, 0xc2, 0x93, 0x25, 0xe2, 0x71, |
| 3049 | 0x1f, 0x30, 0xbf, 0xb1, 0x67, 0xc6, 0xe1, 0xfa, 0x6c, 0xd5, 0x3f, 0x79, | 3018 | 0x59, 0x7d, 0x42, 0x9c, 0x80, 0xd0, 0x26, 0x3d, 0xef, 0x3e, 0xd9, 0xe7, |
| 3050 | 0x0e, 0xed, 0x40, 0xf6, 0x30, 0xcf, 0xc3, 0xb0, 0x9c, 0x7b, 0xb1, 0xd7, | 3019 | 0x44, 0xae, 0xea, 0x37, 0x9d, 0xe6, 0xff, 0x16, 0xf3, 0xa2, 0x98, 0xe6, |
| 3051 | 0x06, 0x62, 0x0b, 0x94, 0xa4, 0xae, 0x1b, 0x89, 0xd7, 0x32, 0x3e, 0xcc, | 3020 | 0xd3, 0x7c, 0x62, 0xce, 0x25, 0xf3, 0x61, 0xf5, 0x79, 0xb4, 0xb3, 0x8e, |
| 3052 | 0xe7, 0xa2, 0x4f, 0xed, 0xfe, 0x7d, 0x59, 0xa2, 0xfe, 0xc7, 0xfd, 0x73, | 3021 | 0xe9, 0x7a, 0x3d, 0x5a, 0xd5, 0xf9, 0x61, 0xbe, 0xb2, 0x9e, 0x2a, 0x56, |
| 3053 | 0xd3, 0xed, 0x06, 0xcf, 0x63, 0xa2, 0x32, 0x57, 0x0e, 0xea, 0xd7, 0x73, | 3022 | 0x8b, 0xd5, 0xc3, 0xb6, 0x24, 0x72, 0x56, 0xbe, 0xb7, 0x4c, 0xde, 0x66, |
| 3054 | 0xd6, 0xbd, 0x2c, 0x14, 0x7b, 0x6b, 0xe9, 0xb1, 0xfa, 0x0e, 0x2a, 0x3d, | 3023 | 0xf1, 0xbe, 0x6a, 0xf0, 0xb8, 0x21, 0xbc, 0x1f, 0xe9, 0xad, 0xbf, 0xd6, |
| 3055 | 0x92, 0xc7, 0x95, 0x52, 0xd8, 0xc7, 0xcb, 0x21, 0x28, 0x04, 0xe5, 0x7f, | 3024 | 0x7e, 0xb8, 0x29, 0xbc, 0xaf, 0x0e, 0xf6, 0xc3, 0x26, 0xed, 0x27, 0x75, |
| 3056 | 0xa2, 0xbe, 0x2f, 0x01, 0x7b, 0xb4, 0xd9, 0xbd, 0xbe, 0xfc, 0x69, 0x28, | 3025 | 0x26, 0xf5, 0x5e, 0x98, 0x4b, 0xd5, 0xe9, 0x3d, 0xc8, 0xec, 0xef, 0xab, |
| 3057 | 0x04, 0xed, 0x81, 0xa9, 0xed, 0x8d, 0xcd, 0x7b, 0xd3, 0xbc, 0x6e, 0x7e, | 3026 | 0x72, 0x4f, 0x5b, 0xfa, 0xbc, 0x90, 0xd8, 0x23, 0xa4, 0x5e, 0x06, 0xf2, |
| 3058 | 0x95, 0x4e, 0xe4, 0x36, 0xd4, 0x89, 0xff, 0xd5, 0x05, 0x03, 0x48, 0x17, | 3027 | 0xc3, 0x35, 0xfa, 0x74, 0x2c, 0x96, 0x77, 0x54, 0xbf, 0x65, 0xc5, 0xeb, |
| 3059 | 0x50, 0x8f, 0xfd, 0xf7, 0x9b, 0xaa, 0x7e, 0x6d, 0xff, 0xa9, 0xee, 0x3f, | 3028 | 0xc2, 0x5f, 0xc2, 0x83, 0x0e, 0xf5, 0x93, 0x33, 0xf6, 0xf9, 0xed, 0x54, |
| 3060 | 0xab, 0x5b, 0xd3, 0x11, 0xef, 0xfb, 0x07, 0xe9, 0x48, 0x42, 0xd3, 0x85, | 3029 | 0x9d, 0x00, 0x0e, 0xea, 0xfd, 0x90, 0xf4, 0x2b, 0xb9, 0xdf, 0xf0, 0xbe, |
| 3061 | 0x5f, 0xab, 0x55, 0x1d, 0xc1, 0xe7, 0xf3, 0xf3, 0xd4, 0x97, 0x8b, 0xee, | 3030 | 0x1a, 0x74, 0x66, 0x93, 0x7b, 0xee, 0x72, 0xbf, 0xdf, 0x03, 0xea, 0xa3, |
| 3062 | 0x9a, 0xae, 0xfb, 0xf8, 0xac, 0x63, 0x3e, 0x85, 0x9f, 0x8c, 0x5f, 0xd6, | 3031 | 0xf2, 0x8e, 0xbe, 0xd4, 0xf3, 0xac, 0xde, 0x4c, 0xf6, 0xf7, 0x98, 0xcc, |
| 3063 | 0xe2, 0x55, 0x5f, 0xcf, 0x33, 0xcf, 0x46, 0x1f, 0xcd, 0x95, 0x59, 0xfc, | 3032 | 0x2f, 0x5b, 0xf6, 0x73, 0xc9, 0x8c, 0x53, 0xed, 0xbd, 0xec, 0x7a, 0x71, |
| 3064 | 0xa1, 0xf1, 0xdd, 0x5b, 0xc0, 0xbd, 0xb8, 0x04, 0x0e, 0xf3, 0xf6, 0xd9, | 3033 | 0xbc, 0xff, 0x6c, 0xbf, 0xde, 0xbc, 0xdb, 0xab, 0xee, 0x9e, 0x51, 0xf7, |
| 3065 | 0xc7, 0x5f, 0x8a, 0xf5, 0xc1, 0x84, 0x47, 0x8e, 0xe2, 0x59, 0xf5, 0x87, | 3034 | 0xbf, 0xb7, 0x75, 0x1e, 0x6d, 0x27, 0x6b, 0xbf, 0x7f, 0xa0, 0xee, 0x15, |
| 3066 | 0xf0, 0xa1, 0xf4, 0xcf, 0x6c, 0xc2, 0x77, 0x06, 0x1e, 0x38, 0x6a, 0xbf, | 3035 | 0x7d, 0x99, 0x1b, 0x67, 0xea, 0x59, 0x7c, 0x2d, 0xee, 0xd0, 0x4b, 0xcf, |
| 3067 | 0x6d, 0x99, 0xaf, 0x87, 0xf5, 0x64, 0x94, 0xf7, 0xfa, 0x5b, 0x82, 0x74, | 3036 | 0x2f, 0xed, 0xe7, 0xc6, 0x06, 0xd7, 0xfd, 0xa3, 0xb8, 0xbf, 0x97, 0x52, |
| 3068 | 0xa3, 0x38, 0x24, 0xf7, 0x14, 0x9a, 0x78, 0xbf, 0x8b, 0x29, 0xb2, 0x5b, | 3037 | 0xf3, 0x75, 0x44, 0xea, 0xac, 0xf4, 0xc8, 0xbf, 0xa7, 0xdb, 0x83, 0x79, |
| 3069 | 0x52, 0xf4, 0x7f, 0x5b, 0x8f, 0x69, 0x49, 0xbf, 0x96, 0x14, 0x61, 0x53, | 3038 | 0x9c, 0xe4, 0xcd, 0x49, 0xe1, 0xab, 0x3d, 0xb7, 0x4e, 0xfd, 0xe1, 0x76, |
| 3070 | 0x12, 0xe3, 0xb2, 0xf0, 0xfd, 0x88, 0x74, 0x2f, 0x54, 0xf7, 0x5b, 0xdf, | 3039 | 0x5e, 0x1a, 0x75, 0x98, 0x6d, 0x62, 0xfd, 0xbf, 0x86, 0x48, 0xfc, 0xfc, |
| 3071 | 0x6b, 0x7e, 0xdf, 0xbd, 0x78, 0xde, 0x24, 0xf6, 0xd4, 0xdb, 0x0f, 0x6b, | 3040 | 0x2d, 0xe5, 0x6f, 0x20, 0xfd, 0x55, 0x80, 0x9f, 0x22, 0x1d, 0x97, 0xae, |
| 3072 | 0x4d, 0x5f, 0xef, 0x71, 0xf5, 0x39, 0xdb, 0xcb, 0xb7, 0x9a, 0xdb, 0x67, | 3041 | 0x1b, 0xe3, 0x8f, 0x4d, 0xe9, 0x93, 0x7e, 0x7c, 0xf8, 0xee, 0xa2, 0xbc, |
| 3073 | 0x35, 0xfa, 0x34, 0xe8, 0x2a, 0xdd, 0x6b, 0x1f, 0xc4, 0x7a, 0x6d, 0x48, | 3042 | 0x5b, 0x85, 0x1b, 0x91, 0x9e, 0x63, 0x38, 0xd7, 0x5c, 0x68, 0xcb, 0xdc, |
| 3074 | 0x9b, 0x34, 0x1f, 0x84, 0x22, 0x8f, 0x61, 0x62, 0x58, 0xeb, 0x24, 0xeb, | 3043 | 0x3c, 0x2b, 0xf3, 0xeb, 0x85, 0xc7, 0xf3, 0xb1, 0x73, 0x82, 0x78, 0x08, |
| 3075 | 0xc4, 0xe4, 0xb8, 0x4c, 0x73, 0x64, 0x52, 0x9d, 0x0f, 0xc8, 0xc1, 0x1f, | 3044 | 0xe3, 0x32, 0xc7, 0x3a, 0x01, 0x9f, 0x27, 0x02, 0xfe, 0x7d, 0xd8, 0x76, |
| 3076 | 0x9e, 0x7f, 0x25, 0xcf, 0xd3, 0x4e, 0x98, 0xce, 0xcd, 0x21, 0xc5, 0x97, | 3045 | 0x7d, 0xd2, 0x9b, 0x08, 0x18, 0xc7, 0x4b, 0x68, 0x57, 0x83, 0x3f, 0x16, |
| 3077 | 0x2d, 0xdf, 0x7f, 0x86, 0xf8, 0x3a, 0x39, 0x4d, 0x78, 0x02, 0x0e, 0x4b, | 3046 | 0x49, 0xbd, 0x39, 0x98, 0x63, 0xe6, 0xfc, 0x92, 0x38, 0xdf, 0x46, 0xb9, |
| 3078 | 0x4c, 0x54, 0xf5, 0x2d, 0x2e, 0x11, 0x52, 0x5e, 0x7d, 0x8b, 0x8a, 0xf2, | 3047 | 0xda, 0x93, 0xd3, 0x7c, 0xe6, 0x3a, 0xfb, 0x7d, 0x5e, 0x5f, 0x97, 0xaa, |
| 3079 | 0xd0, 0xae, 0xf3, 0xf4, 0x51, 0xff, 0x6e, 0x6c, 0xb5, 0x9f, 0x5e, 0x9d, | 3048 | 0xd4, 0x2b, 0xc9, 0x3c, 0xeb, 0x3e, 0xba, 0x69, 0xe4, 0x57, 0xd7, 0xe7, |
| 3080 | 0xc4, 0x7e, 0xea, 0x7a, 0x27, 0xe7, 0x46, 0x9b, 0xcf, 0x72, 0x8d, 0xf9, | 3049 | 0xcd, 0x58, 0xcf, 0xf7, 0xe9, 0xe3, 0xe8, 0x6f, 0x05, 0xca, 0x2e, 0xf3, |
| 3081 | 0xcc, 0xd5, 0x98, 0x6f, 0x5d, 0x2f, 0xae, 0xf2, 0xde, 0x45, 0x20, 0x1a, | 3050 | 0x82, 0x51, 0xdd, 0x63, 0xbb, 0x68, 0x36, 0xd9, 0x95, 0x79, 0xd8, 0xbd, |
| 3082 | 0x96, 0x1f, 0x24, 0x2b, 0x32, 0x21, 0xfb, 0x6b, 0x4c, 0xd2, 0x87, 0xd4, | 3051 | 0x48, 0xd7, 0x2c, 0x76, 0xb5, 0x7c, 0x81, 0x1a, 0x61, 0x69, 0xe3, 0x1e, |
| 3083 | 0x8a, 0x4e, 0x85, 0x24, 0x6f, 0xd6, 0x14, 0xf9, 0x45, 0xe8, 0x3c, 0xab, | 3052 | 0xc9, 0xcb, 0x51, 0x8e, 0xe5, 0xee, 0x09, 0x9d, 0xaf, 0x0a, 0xc5, 0xbf, |
| 3084 | 0xf0, 0xca, 0x84, 0xfa, 0xee, 0xfe, 0x03, 0x65, 0x6c, 0x9a, 0x59, 0x40, | 3053 | 0xc6, 0xf9, 0xfa, 0xf8, 0x7b, 0xc6, 0xd3, 0xf0, 0x3e, 0xa1, 0x37, 0x98, |
| 3085 | 0x0c, 0x00, 0x00, 0x00 }; | 3054 | 0xe3, 0x45, 0x42, 0x08, 0x92, 0x73, 0xdc, 0x51, 0xee, 0x55, 0xc9, 0x9f, |
| 3055 | 0x41, 0xfd, 0xcc, 0xfd, 0xb8, 0x5b, 0x1d, 0x47, 0x13, 0xfc, 0xd3, 0x75, | ||
| 3056 | 0x34, 0xe7, 0x39, 0xf1, 0xc4, 0xe0, 0x63, 0x77, 0x08, 0x1f, 0xad, 0x21, | ||
| 3057 | 0x7c, 0x36, 0xe7, 0xd6, 0x57, 0xd2, 0xc7, 0x79, 0x70, 0x72, 0xb4, 0x70, | ||
| 3058 | 0xfd, 0xfc, 0x32, 0xd5, 0xd5, 0xee, 0xf2, 0x0f, 0x08, 0xdf, 0x59, 0xb1, | ||
| 3059 | 0x28, 0x5f, 0xfe, 0x0a, 0xeb, 0xe5, 0x59, 0x5e, 0xd3, 0xf8, 0xcd, 0xb2, | ||
| 3060 | 0xfe, 0xbd, 0xf1, 0x1f, 0xb6, 0x34, 0x9b, 0xb9, 0xa0, 0x0c, 0x00, 0x00, | ||
| 3061 | 0x00 }; | ||
| 3086 | 3062 | ||
| 3087 | static u8 bnx2_rv2p_proc2[] = { | 3063 | static u8 bnx2_rv2p_proc2[] = { |
| 3088 | /* Date: 05/13/2008 13:50 */ | 3064 | /* Date: 02/03/2009 14:20 */ |
| 3089 | 0xad, 0x58, 0x4d, 0x6c, 0x54, 0x55, 0x14, 0xbe, 0x7d, 0xf3, 0xdb, 0x99, | 3065 | 0xad, 0x57, 0x4d, 0x68, 0x5c, 0x55, 0x14, 0x3e, 0xf3, 0xe6, 0xef, 0xcd, |
| 3090 | 0x37, 0x3f, 0xb4, 0xb5, 0xbf, 0x68, 0xa1, 0x95, 0xd2, 0x92, 0x29, 0x94, | 3066 | 0xcc, 0x9b, 0xcc, 0x34, 0x8d, 0x93, 0x31, 0x29, 0x26, 0x4d, 0x68, 0xea, |
| 3091 | 0x69, 0x01, 0x95, 0x44, 0x49, 0x31, 0x05, 0x94, 0x84, 0x52, 0x5d, 0x10, | 3067 | 0xc8, 0x44, 0xf3, 0x47, 0x05, 0x5d, 0x18, 0x46, 0x48, 0x7f, 0x2c, 0x34, |
| 3092 | 0x37, 0xd0, 0x22, 0xa5, 0x83, 0x2d, 0x69, 0x28, 0x61, 0xc1, 0xc6, 0x09, | 3068 | 0x8d, 0x2e, 0x8a, 0x9b, 0x36, 0x53, 0x3b, 0x3a, 0x6d, 0xed, 0xc2, 0xec, |
| 3093 | 0xc5, 0xe2, 0x62, 0x12, 0x2d, 0xb1, 0x14, 0x8c, 0xc1, 0x46, 0x37, 0xc4, | 3069 | 0xdc, 0xf8, 0xb0, 0x35, 0x41, 0x98, 0x45, 0x53, 0x4c, 0x13, 0x44, 0xa8, |
| 3094 | 0xb8, 0x19, 0x83, 0x52, 0xd4, 0xc4, 0x84, 0x60, 0x43, 0x70, 0x01, 0x26, | 3070 | 0xe8, 0xce, 0xdd, 0x88, 0x9a, 0xd6, 0x8d, 0x50, 0x68, 0x28, 0x76, 0x51, |
| 3095 | 0x9a, 0xe0, 0x42, 0x13, 0xa2, 0x50, 0x0b, 0x36, 0x58, 0x7e, 0x46, 0x17, | 3071 | 0x04, 0x05, 0xed, 0x42, 0x10, 0xad, 0xa1, 0x15, 0x41, 0x51, 0xb3, 0x92, |
| 3096 | 0xca, 0x78, 0xef, 0xf9, 0xce, 0x7d, 0x7d, 0x6f, 0x3a, 0xb5, 0x2c, 0xe8, | 3072 | 0x8c, 0xf7, 0x9e, 0xef, 0xdc, 0x37, 0xef, 0x4d, 0xa6, 0xa4, 0x0b, 0x67, |
| 3097 | 0xe6, 0xeb, 0xbd, 0xef, 0xdc, 0x73, 0xcf, 0xcf, 0x77, 0xcf, 0x39, 0x6d, | 3073 | 0xf3, 0xe5, 0xdc, 0x77, 0xee, 0xb9, 0xe7, 0xe7, 0x3b, 0xe7, 0xde, 0x64, |
| 3098 | 0x54, 0x08, 0xe1, 0x16, 0xc9, 0x74, 0xb5, 0x44, 0x11, 0x32, 0x0a, 0xfc, | 3074 | 0x89, 0x28, 0x42, 0x6e, 0xbd, 0x4f, 0x21, 0x85, 0xc2, 0x21, 0x5b, 0x41, |
| 3099 | 0x12, 0xb2, 0x42, 0x78, 0xca, 0xd5, 0x5a, 0x18, 0x82, 0x7f, 0x56, 0x44, | 3075 | 0x83, 0x28, 0x9a, 0xd7, 0x32, 0x59, 0x24, 0xbf, 0x27, 0xb2, 0x0c, 0xdf, |
| 3100 | 0x09, 0x7e, 0x48, 0xab, 0xef, 0x3e, 0xf1, 0xaa, 0x81, 0xef, 0x6e, 0xa1, | 3076 | 0xd6, 0x1d, 0xad, 0x46, 0x6e, 0x41, 0xeb, 0xd9, 0xf4, 0x92, 0x05, 0xbd, |
| 3101 | 0x30, 0x22, 0x44, 0x52, 0x61, 0x94, 0x71, 0x3d, 0x63, 0x86, 0x31, 0x58, | 3077 | 0x08, 0x69, 0x54, 0x3a, 0xae, 0xc6, 0x1d, 0x82, 0xcf, 0x08, 0x46, 0x42, |
| 3102 | 0x00, 0x6c, 0x66, 0x7c, 0xc0, 0xfb, 0x77, 0x78, 0x7d, 0x93, 0xf1, 0x6f, | 3078 | 0xc0, 0xb0, 0xa0, 0xd5, 0x82, 0x24, 0x7a, 0x5d, 0x22, 0x6f, 0x8a, 0xec, |
| 3103 | 0xde, 0x37, 0x19, 0x6f, 0xf3, 0xfe, 0xf3, 0x06, 0x30, 0xc1, 0xfb, 0x3f, | 3079 | 0x08, 0xe6, 0x65, 0xfd, 0xb4, 0xe0, 0xab, 0xb2, 0x7e, 0x47, 0x70, 0x5d, |
| 3104 | 0x4b, 0xd4, 0x76, 0xa9, 0xf5, 0x74, 0x56, 0x24, 0xe5, 0x19, 0x21, 0xc5, | 3080 | 0xa1, 0xf1, 0x53, 0xcb, 0xbf, 0x35, 0x9a, 0xb2, 0x03, 0xf3, 0x05, 0xf8, |
| 3105 | 0x1b, 0xf4, 0xbe, 0x49, 0x90, 0x6c, 0x80, 0xdd, 0xaf, 0x2c, 0x51, 0x72, | 3081 | 0xff, 0x62, 0x3f, 0xeb, 0x37, 0x82, 0xfa, 0x77, 0x1b, 0xc6, 0x0f, 0x13, |
| 3106 | 0xbf, 0xe7, 0x91, 0x53, 0xfb, 0x37, 0xb2, 0xd0, 0x3b, 0xeb, 0xaf, 0xe1, | 3082 | 0xaf, 0x15, 0xd5, 0xfa, 0xbb, 0x27, 0x2e, 0x2f, 0x62, 0xdf, 0xf1, 0x7e, |
| 3107 | 0x51, 0xe7, 0x96, 0xb6, 0x9c, 0x18, 0xc6, 0xf9, 0x9d, 0x4b, 0xb0, 0xff, | 3083 | 0xac, 0x3f, 0x56, 0xd4, 0x71, 0xc7, 0xc8, 0x15, 0xa4, 0x61, 0x9b, 0xe3, |
| 3108 | 0x54, 0x4c, 0xf9, 0xef, 0x15, 0x49, 0x46, 0xd1, 0xa8, 0xd0, 0x28, 0x48, | 3084 | 0x70, 0x87, 0x4d, 0xa2, 0xa0, 0xff, 0xe3, 0x22, 0xa4, 0xd9, 0x34, 0xec, |
| 3109 | 0x36, 0xea, 0x40, 0x41, 0xfe, 0x97, 0x61, 0xac, 0x3a, 0x43, 0xd0, 0x1b, | 3085 | 0x26, 0x03, 0x76, 0x73, 0x5b, 0xec, 0x7e, 0x9f, 0xf0, 0xdb, 0xff, 0x54, |
| 3110 | 0x70, 0xe8, 0x2d, 0x9d, 0xa3, 0xf7, 0x5a, 0xa1, 0x5d, 0xff, 0x67, 0xac, | 3086 | 0xec, 0x27, 0xb7, 0xb5, 0x5f, 0x4e, 0x03, 0x77, 0x16, 0xdb, 0x9d, 0x93, |
| 3111 | 0x3f, 0xb0, 0xa0, 0xfe, 0xae, 0x10, 0xb0, 0x38, 0x96, 0xef, 0x9e, 0xc2, | 3087 | 0xd8, 0xc6, 0xff, 0xd3, 0xdb, 0xda, 0x7f, 0xd3, 0xf3, 0xdf, 0xac, 0x03, |
| 3112 | 0x05, 0xec, 0xdf, 0xb7, 0xa0, 0xfe, 0xc3, 0x96, 0xfd, 0x3a, 0x6e, 0xfa, | 3088 | 0xfb, 0xf0, 0xf9, 0x13, 0xf7, 0x29, 0x93, 0x47, 0x13, 0xaf, 0xf8, 0x15, |
| 3113 | 0x3b, 0xb0, 0x1a, 0x62, 0x9f, 0x24, 0x57, 0xe9, 0x78, 0x6a, 0xbf, 0xd9, | 3089 | 0x06, 0x4e, 0x16, 0x19, 0x6a, 0x27, 0x25, 0xb1, 0x53, 0x43, 0xfa, 0xbc, |
| 3114 | 0x3e, 0x17, 0x70, 0x43, 0x8c, 0x20, 0xb5, 0x9b, 0x03, 0xdc, 0x56, 0xa7, | 3090 | 0x4e, 0x8a, 0x58, 0xda, 0xce, 0x5e, 0x3b, 0x76, 0x0d, 0xeb, 0xc7, 0x32, |
| 3115 | 0xee, 0x2d, 0x12, 0x6e, 0x43, 0xe9, 0x59, 0xee, 0xf7, 0x9e, 0xc7, 0xfe, | 3091 | 0xc0, 0x57, 0x24, 0x80, 0xbb, 0x49, 0x9d, 0x90, 0x46, 0xa3, 0x92, 0x12, |
| 3116 | 0x8e, 0x08, 0xf0, 0x75, 0x76, 0xe4, 0x46, 0x40, 0x05, 0x26, 0x9b, 0xed, | 3092 | 0xfb, 0x28, 0x23, 0xb9, 0x29, 0xec, 0x5f, 0x73, 0xb4, 0x5f, 0xb7, 0x54, |
| 3117 | 0x0e, 0xb2, 0x7e, 0xa4, 0x55, 0x24, 0x83, 0x38, 0x3f, 0x61, 0x2a, 0xfb, | 3093 | 0xdd, 0xb4, 0x1c, 0x26, 0x37, 0x13, 0xf4, 0xff, 0x0a, 0x41, 0x6f, 0xc7, |
| 3118 | 0x2e, 0xcb, 0xfc, 0xa9, 0xb5, 0x4b, 0x24, 0x23, 0x4e, 0x3f, 0x3e, 0x14, | 3094 | 0x5e, 0xac, 0x5e, 0xac, 0x40, 0xee, 0xfd, 0x38, 0xcb, 0xfa, 0x2b, 0x75, |
| 3119 | 0x90, 0x5b, 0xb4, 0x1c, 0xbb, 0xef, 0x76, 0x63, 0x5d, 0xf5, 0x71, 0x94, | 3095 | 0x13, 0x87, 0x5e, 0x57, 0xfc, 0xcf, 0xc0, 0x0e, 0x0d, 0xd8, 0x7c, 0x18, |
| 3120 | 0xe4, 0x4f, 0xa6, 0xb5, 0x1f, 0x6a, 0x5f, 0xbe, 0x83, 0x08, 0xf4, 0x88, | 3096 | 0xf2, 0xa3, 0x0e, 0x1d, 0x36, 0xf6, 0xf0, 0xbb, 0xbc, 0xc7, 0xf0, 0x09, |
| 3121 | 0x1a, 0x3f, 0x5d, 0x86, 0x38, 0xc9, 0x4b, 0x1b, 0xb5, 0x3e, 0xfc, 0x9c, | 3097 | 0x72, 0x25, 0xc6, 0x90, 0x9f, 0x9d, 0xd7, 0xfe, 0x66, 0xe8, 0x84, 0xa5, |
| 3122 | 0x58, 0xa6, 0xf9, 0x85, 0x75, 0xb7, 0x97, 0xa0, 0xbc, 0x73, 0x48, 0xd9, | 3098 | 0x1d, 0xb1, 0x24, 0xbe, 0xb0, 0xed, 0x7c, 0x01, 0xfd, 0xaf, 0xfa, 0x1c, |
| 3123 | 0x1b, 0x11, 0xbb, 0x0c, 0x65, 0x88, 0xc1, 0xfe, 0xb9, 0xfc, 0xe6, 0x17, | 3099 | 0xf6, 0xad, 0x32, 0x8e, 0x7d, 0x5d, 0x63, 0xc0, 0xa5, 0xb1, 0xa8, 0x86, |
| 3124 | 0x90, 0xff, 0xa6, 0xda, 0x24, 0xdb, 0xba, 0x9b, 0x71, 0xae, 0x24, 0x0e, | 3100 | 0x62, 0x65, 0x8e, 0xc5, 0x27, 0x7f, 0x1e, 0xb5, 0x59, 0xcf, 0x1d, 0x36, |
| 3125 | 0x1c, 0x89, 0x7b, 0x14, 0xc4, 0xba, 0x07, 0x68, 0xb9, 0xf2, 0xd7, 0xd5, | 3101 | 0x7c, 0x35, 0x79, 0xd7, 0xf1, 0x5e, 0x6c, 0xf2, 0x76, 0x10, 0xf9, 0xf9, |
| 3126 | 0x7e, 0x92, 0x4b, 0x36, 0x6a, 0xfe, 0xea, 0xb8, 0x2b, 0x7f, 0xdf, 0xc9, | 3102 | 0x75, 0x8f, 0xd6, 0x57, 0x49, 0x1a, 0xc0, 0x39, 0x33, 0xd5, 0x76, 0x7c, |
| 3127 | 0x5a, 0xfc, 0xaf, 0x45, 0x7c, 0x6e, 0x2e, 0x53, 0xf2, 0x32, 0x48, 0x35, | 3103 | 0x7f, 0x57, 0xed, 0x7b, 0xb8, 0xfa, 0x4d, 0x72, 0xdc, 0x93, 0x12, 0x7f, |
| 3128 | 0xb8, 0xa7, 0x23, 0x91, 0x8f, 0xff, 0x6f, 0xdb, 0xf8, 0xff, 0x68, 0x79, | 3104 | 0xbf, 0xf0, 0x63, 0x57, 0x1b, 0x7e, 0x64, 0xf8, 0xef, 0xfb, 0xa5, 0x2c, |
| 3129 | 0xdc, 0x40, 0xfe, 0x6f, 0xe0, 0x38, 0x2c, 0x61, 0xbe, 0x2c, 0xce, 0xc3, | 3105 | 0xe7, 0xef, 0x08, 0xd6, 0x2f, 0x4d, 0xad, 0x22, 0xcf, 0x07, 0x39, 0x7e, |
| 3130 | 0x97, 0x08, 0xfd, 0x7e, 0xab, 0x35, 0x4a, 0x71, 0xdc, 0x86, 0xfd, 0xe3, | 3106 | 0x4a, 0x5e, 0xf8, 0x1c, 0xbb, 0x66, 0xd3, 0x5a, 0x7e, 0x79, 0xa2, 0xf2, |
| 3131 | 0x6d, 0xe7, 0x10, 0xef, 0x2d, 0x14, 0x07, 0x11, 0x38, 0xfa, 0x39, 0x4e, | 3107 | 0x25, 0xe4, 0x72, 0x58, 0xcb, 0xc7, 0x9c, 0x93, 0x57, 0xa1, 0x1f, 0x3d, |
| 3132 | 0x75, 0x86, 0xd4, 0xfa, 0xb5, 0x96, 0xee, 0x2f, 0xb1, 0xee, 0x72, 0xa9, | 3108 | 0x9f, 0xe5, 0xbc, 0x1d, 0x91, 0x53, 0x0e, 0xaa, 0x51, 0xa1, 0x7e, 0xb5, |
| 3133 | 0xf5, 0x0e, 0x73, 0xf7, 0x38, 0xe4, 0x3d, 0x83, 0x51, 0x8a, 0xdf, 0x36, | 3109 | 0xd8, 0x79, 0x16, 0x9d, 0x35, 0xfe, 0x9e, 0xa5, 0x85, 0x3a, 0xbe, 0x9f, |
| 3134 | 0xbe, 0x65, 0x8b, 0xab, 0x40, 0x41, 0xca, 0x3b, 0x48, 0x4b, 0x73, 0x82, | 3110 | 0x4b, 0xe9, 0xb8, 0xce, 0xa8, 0xb8, 0x58, 0xaf, 0xab, 0x1a, 0xc3, 0xfe, |
| 3135 | 0xbe, 0x47, 0xc5, 0xb1, 0x34, 0xbe, 0xef, 0x0f, 0x52, 0x7d, 0x90, 0xfe, | 3111 | 0xda, 0xa2, 0xb6, 0x17, 0xa2, 0x7b, 0x9f, 0x69, 0xf9, 0x70, 0xf1, 0x1e, |
| 3136 | 0x91, 0x5c, 0x49, 0xc2, 0x8b, 0xf3, 0xa9, 0x61, 0x3f, 0xf9, 0x3b, 0x75, | 3112 | 0xf4, 0x8b, 0xd5, 0x79, 0x31, 0x6c, 0x21, 0x6f, 0xf7, 0x2d, 0xe8, 0x0b, |
| 3137 | 0x56, 0xad, 0xb7, 0xc6, 0xa6, 0x20, 0x1f, 0x4b, 0x0c, 0xb1, 0x62, 0x03, | 3113 | 0xad, 0x92, 0x11, 0xae, 0x5b, 0x88, 0x9c, 0x29, 0xe0, 0x3b, 0xfc, 0xfd, |
| 3138 | 0xf1, 0xbb, 0x65, 0x40, 0x9e, 0xe9, 0x15, 0x70, 0x53, 0xfe, 0x0a, 0x84, | 3114 | 0xdf, 0x50, 0x8d, 0xf3, 0xf5, 0x7c, 0x47, 0x64, 0xd5, 0xe4, 0x47, 0x30, |
| 3139 | 0xd9, 0x06, 0x7c, 0x8b, 0xbe, 0xff, 0x53, 0x90, 0xa2, 0x78, 0x6d, 0x0c, | 3115 | 0x63, 0xe2, 0x02, 0x3e, 0x2c, 0x6f, 0xe7, 0x1d, 0xc3, 0x57, 0xa9, 0x57, |
| 3140 | 0xbb, 0xcf, 0xe9, 0xf8, 0x30, 0x46, 0xb4, 0x5f, 0xc0, 0x47, 0xe5, 0xef, | 3116 | 0xe1, 0x41, 0x7c, 0x05, 0x4e, 0x0d, 0x01, 0x63, 0x83, 0x5a, 0x2f, 0xda, |
| 3141 | 0x90, 0xa9, 0x79, 0xcb, 0x79, 0x6b, 0x98, 0x8f, 0xb7, 0xc0, 0xb6, 0x3a, | 3117 | 0x86, 0xb7, 0xc1, 0xba, 0x48, 0x5d, 0x7d, 0xfc, 0x62, 0x50, 0xbc, 0x0a, |
| 3142 | 0xa0, 0xb7, 0x56, 0xc9, 0x79, 0xf2, 0xf0, 0xd7, 0x99, 0x17, 0xce, 0xab, | 3118 | 0xf0, 0x4c, 0xf1, 0x98, 0xe7, 0x90, 0xca, 0xa7, 0xe1, 0x8b, 0x36, 0x14, |
| 3143 | 0x8d, 0x67, 0x04, 0x92, 0x5f, 0x0e, 0xbe, 0x49, 0x3e, 0x53, 0x5d, 0x92, | 3119 | 0xa7, 0x33, 0x62, 0xaf, 0x2a, 0x71, 0x9d, 0x95, 0xb8, 0x7e, 0x4f, 0x9a, |
| 3144 | 0xf1, 0xd4, 0xbc, 0x51, 0x8a, 0x7c, 0xe2, 0x0d, 0xd6, 0x97, 0x60, 0xbf, | 3120 | 0xbc, 0x9b, 0x78, 0x80, 0x0b, 0x5e, 0x3c, 0x86, 0x6f, 0xb8, 0x1f, 0x66, |
| 3145 | 0x7a, 0xd9, 0xaf, 0xe9, 0x80, 0x8e, 0xbb, 0xf6, 0x07, 0x78, 0xcc, 0x04, | 3121 | 0xaa, 0x01, 0x7f, 0x6a, 0x37, 0x06, 0xf0, 0x47, 0xef, 0x20, 0xd0, 0x8b, |
| 3146 | 0xbf, 0x3a, 0x12, 0xda, 0x2f, 0x27, 0x7f, 0xd9, 0x9e, 0xd4, 0xb7, 0x35, | 3122 | 0x73, 0x88, 0xfb, 0xa4, 0xa3, 0xfb, 0xaa, 0xf1, 0x43, 0xd7, 0x75, 0x43, |
| 3147 | 0xf8, 0xa5, 0xaa, 0x16, 0x68, 0xf9, 0x59, 0x47, 0xef, 0x25, 0x5c, 0x36, | 3123 | 0xf8, 0x6a, 0xa9, 0x78, 0xfd, 0xfd, 0xd9, 0xd3, 0xa6, 0x3f, 0x83, 0xfd, |
| 3148 | 0xae, 0xed, 0x50, 0x79, 0xfd, 0x4b, 0xe6, 0x15, 0xf9, 0x39, 0x99, 0xb6, | 3124 | 0x62, 0xe2, 0x3f, 0x97, 0xe6, 0x01, 0x34, 0x71, 0x7b, 0x3d, 0xd8, 0x0f, |
| 3149 | 0xbf, 0xd3, 0xca, 0x3c, 0xef, 0xd4, 0xf9, 0x6e, 0xb4, 0xff, 0xfb, 0x43, | 3125 | 0xe0, 0x7f, 0xdc, 0xe3, 0x51, 0xd7, 0x3e, 0xc9, 0x93, 0x60, 0xee, 0x69, |
| 3150 | 0x54, 0x88, 0x5a, 0xae, 0x4c, 0x3a, 0xdf, 0x05, 0xf8, 0xef, 0xb3, 0x78, | 3126 | 0x6d, 0x6f, 0x5a, 0xec, 0x8f, 0x88, 0x7d, 0xc7, 0xd7, 0x8f, 0xda, 0xbf, |
| 3151 | 0x54, 0xb2, 0x96, 0xe3, 0xc4, 0x58, 0xba, 0x4e, 0xe9, 0x6b, 0x67, 0xfd, | 3127 | 0x3e, 0xaf, 0x0f, 0x4d, 0x7d, 0x9a, 0xfd, 0x68, 0xf2, 0xc4, 0xe7, 0x17, |
| 3152 | 0x4d, 0xac, 0xdf, 0xb4, 0xbd, 0x4b, 0x65, 0xdf, 0x93, 0xd6, 0x7b, 0xd4, | 3128 | 0x6f, 0xaf, 0xeb, 0xfd, 0xbd, 0xdb, 0xf4, 0xe7, 0x23, 0x9e, 0xbd, 0xef, |
| 3153 | 0xf9, 0x99, 0x7d, 0x97, 0x3a, 0x4e, 0x74, 0x7f, 0xec, 0xca, 0xa4, 0x3a, | 3129 | 0xbc, 0x7e, 0xd4, 0xdf, 0x53, 0xf4, 0x9c, 0x88, 0xc1, 0x39, 0xf3, 0x87, |
| 3154 | 0x5f, 0xb5, 0xc0, 0x3b, 0x2d, 0xb6, 0xf4, 0xfd, 0x68, 0xbd, 0x47, 0xf5, | 3130 | 0x9a, 0x33, 0x1c, 0x87, 0xed, 0xac, 0xca, 0x5c, 0x99, 0xd3, 0xe7, 0xe4, |
| 3155 | 0x3d, 0x28, 0x5e, 0xe0, 0xa5, 0xb3, 0xde, 0xfc, 0x29, 0xeb, 0x0d, 0xf9, | 3131 | 0xc5, 0xef, 0xbc, 0x99, 0xeb, 0xca, 0x6f, 0x99, 0x3f, 0xc7, 0xfd, 0x73, |
| 3156 | 0xe1, 0x37, 0xcf, 0x71, 0x7d, 0x19, 0x50, 0xf7, 0x94, 0xb3, 0xdd, 0xe5, | 3132 | 0x24, 0xde, 0xe6, 0x3c, 0xc0, 0x64, 0xb1, 0x35, 0x5f, 0xc8, 0x3b, 0xec, |
| 3157 | 0xba, 0xce, 0x4b, 0xbb, 0xb9, 0x0e, 0xed, 0xb4, 0xd7, 0x13, 0x8f, 0xad, | 3133 | 0xaa, 0xfc, 0x9b, 0x39, 0x30, 0x6e, 0xec, 0x43, 0x74, 0x47, 0xfd, 0xfa, |
| 3158 | 0x2e, 0xa8, 0xb5, 0x2b, 0x4f, 0x9f, 0x74, 0xc4, 0x33, 0x29, 0x22, 0x98, | 3134 | 0xad, 0xf5, 0x89, 0x3c, 0x60, 0x9e, 0x6d, 0x6c, 0xe2, 0xde, 0xfd, 0x67, |
| 3159 | 0x03, 0x92, 0x11, 0x25, 0x7f, 0x4f, 0xcc, 0xad, 0x2b, 0xb9, 0xf6, 0x23, | 3135 | 0xb3, 0x79, 0x1f, 0x07, 0xea, 0xe8, 0x12, 0xd7, 0x3d, 0xae, 0xea, 0xcf, |
| 3160 | 0x1e, 0x9d, 0x46, 0x88, 0xe4, 0xae, 0xf7, 0xab, 0x73, 0xd7, 0xac, 0x3e, | 3136 | 0xef, 0x03, 0xef, 0x9e, 0xb7, 0xa2, 0x7a, 0x5d, 0xe5, 0x42, 0x78, 0xf5, |
| 3161 | 0x8e, 0x3a, 0x73, 0x91, 0xed, 0x5d, 0xcc, 0xf6, 0x4a, 0x7d, 0x8d, 0xc4, | 3137 | 0xfa, 0xe3, 0xb2, 0xbf, 0x80, 0xb9, 0xf4, 0xda, 0x29, 0xce, 0xff, 0x7b, |
| 3162 | 0x53, 0xff, 0xf5, 0x7e, 0xbb, 0xbd, 0x77, 0x1e, 0xce, 0x7f, 0x9f, 0x33, | 3138 | 0x67, 0x37, 0x78, 0x3e, 0x7d, 0xf8, 0xc6, 0x35, 0x1d, 0xd7, 0xa3, 0xb4, |
| 3163 | 0xef, 0xfd, 0xdc, 0x6f, 0xb8, 0x4f, 0xfa, 0x77, 0x7f, 0xa5, 0xed, 0xe1, | 3139 | 0x3e, 0xe7, 0xb0, 0x3f, 0xa5, 0xdd, 0x50, 0xdf, 0x78, 0xb6, 0xb5, 0x1e, |
| 3164 | 0x7b, 0x23, 0xfa, 0x7e, 0x93, 0xf2, 0x32, 0x39, 0xa0, 0xce, 0x87, 0x05, | 3140 | 0x78, 0xd7, 0xa0, 0x5e, 0x4a, 0x6f, 0x36, 0x78, 0xaf, 0x36, 0xfd, 0x43, |
| 3165 | 0xd3, 0x44, 0xf4, 0xd5, 0xa3, 0xae, 0x4d, 0xef, 0x81, 0xfd, 0x7d, 0x75, | 3141 | 0xbf, 0xec, 0xcf, 0x40, 0xdf, 0xf4, 0x73, 0xb0, 0xae, 0x77, 0x36, 0x9b, |
| 3166 | 0xea, 0xfe, 0x16, 0x81, 0x7e, 0xe3, 0x96, 0x21, 0x45, 0x7d, 0xbf, 0x38, | 3142 | 0x73, 0xd7, 0xe4, 0x3b, 0xc8, 0xd3, 0xa3, 0xe3, 0x7e, 0xbb, 0x83, 0xb4, |
| 3167 | 0x9c, 0x2f, 0x8f, 0x5f, 0xb3, 0xdc, 0x38, 0xfb, 0x15, 0x65, 0xbf, 0x36, | 3143 | 0x56, 0x87, 0xdd, 0x69, 0xe9, 0xc3, 0x13, 0x72, 0xf0, 0x4f, 0xc9, 0x0c, |
| 3168 | 0x4b, 0xbf, 0x28, 0xee, 0xfc, 0x3d, 0x9f, 0xdf, 0x6c, 0xa7, 0xd0, 0xfd, | 3144 | 0x9f, 0x53, 0x7e, 0x81, 0x79, 0x46, 0xb9, 0x14, 0xe2, 0x2c, 0x1f, 0xc6, |
| 3169 | 0x9b, 0xcf, 0x91, 0x5c, 0x0f, 0xcb, 0xb9, 0xe7, 0xed, 0xdb, 0x99, 0xe5, | 3145 | 0xf7, 0x72, 0x1a, 0xeb, 0x3d, 0x69, 0xdc, 0x6f, 0xd3, 0x71, 0x87, 0xf5, |
| 3170 | 0x54, 0x87, 0x4f, 0x1f, 0xa6, 0x7a, 0x1a, 0xb2, 0xf8, 0xe6, 0xb4, 0x6f, | 3146 | 0x7b, 0xd2, 0xc0, 0x9c, 0xf4, 0xeb, 0x9a, 0x37, 0x8f, 0x80, 0x2b, 0x31, |
| 3171 | 0xe2, 0x31, 0xc4, 0x51, 0xc9, 0x2d, 0x12, 0x7b, 0xc3, 0xf3, 0xc5, 0xcb, | 3147 | 0x7f, 0xff, 0x46, 0xe8, 0x7a, 0x4c, 0x2b, 0xa8, 0xcb, 0xba, 0x80, 0xfe, |
| 3172 | 0xad, 0xb6, 0xc7, 0x66, 0xc6, 0x75, 0xbc, 0x4d, 0xf2, 0x73, 0x72, 0x80, | 3148 | 0x2b, 0x0d, 0x39, 0xfc, 0x7d, 0xa6, 0x80, 0xb9, 0x4a, 0x03, 0xc1, 0xfb, |
| 3173 | 0xe6, 0xc2, 0x9c, 0x38, 0x1a, 0xb6, 0x38, 0x42, 0x1e, 0xf3, 0x4a, 0xbe, | 3149 | 0x50, 0xfa, 0xb9, 0xa7, 0x39, 0xb7, 0xfc, 0x73, 0x2d, 0x31, 0xb6, 0x5c, |
| 3174 | 0xf8, 0xe5, 0xeb, 0x8b, 0x9f, 0x3e, 0xd4, 0x7c, 0x3a, 0xe2, 0xd5, 0xf6, | 3150 | 0x0f, 0xde, 0x97, 0x2b, 0x31, 0xff, 0x9c, 0xd0, 0x76, 0x59, 0x54, 0xf3, |
| 3175 | 0x2b, 0x5c, 0x65, 0xe5, 0xf3, 0x00, 0xcf, 0x23, 0x19, 0x93, 0x7e, 0x89, | 3151 | 0xc1, 0x3f, 0xd7, 0xc2, 0x52, 0xef, 0xbf, 0x64, 0x0e, 0xec, 0xa4, 0x9b, |
| 3176 | 0x4f, 0xa7, 0x68, 0x69, 0x56, 0x9c, 0x51, 0x72, 0x2b, 0xe2, 0x07, 0xd8, | 3152 | 0x75, 0xc4, 0xb5, 0x56, 0x6f, 0xcd, 0xb3, 0x39, 0xcf, 0xd8, 0x83, 0xdf, |
| 3177 | 0xce, 0xcb, 0x2e, 0xf8, 0xd1, 0xb3, 0x07, 0xeb, 0x2b, 0x5c, 0xdf, 0xee, | 3153 | 0x26, 0x8e, 0xa6, 0x7d, 0x9c, 0x7f, 0x4a, 0xfc, 0xfc, 0x85, 0xdf, 0x21, |
| 3178 | 0x72, 0x9d, 0xda, 0xee, 0x07, 0x4e, 0xd7, 0x93, 0x7f, 0xf1, 0x03, 0xe7, | 3154 | 0x39, 0x89, 0x47, 0xdb, 0xc5, 0xfa, 0x01, 0x99, 0xb3, 0xae, 0x27, 0x07, |
| 3179 | 0xb5, 0x7e, 0xd2, 0x6b, 0x66, 0x38, 0x3e, 0x2f, 0xba, 0xd8, 0xee, 0x1a, | 3155 | 0xe7, 0xe3, 0x34, 0xfb, 0xd5, 0x49, 0x78, 0x77, 0xe4, 0xbc, 0xbe, 0x36, |
| 3180 | 0xca, 0x47, 0xfc, 0x0e, 0xbd, 0x4f, 0xb7, 0x68, 0x5d, 0xaa, 0xb0, 0x42, | 3156 | 0xf1, 0x75, 0x8d, 0x00, 0x97, 0x46, 0x4c, 0x1d, 0x4c, 0xbd, 0x4c, 0x7d, |
| 3181 | 0xc6, 0x81, 0xed, 0x59, 0x0f, 0xec, 0xf0, 0x71, 0x5c, 0x1b, 0x72, 0xf3, | 3157 | 0x50, 0xc7, 0xdc, 0x28, 0xab, 0x4d, 0x94, 0x47, 0x99, 0xa7, 0x23, 0xe5, |
| 3182 | 0x85, 0x6d, 0x6f, 0x0d, 0x9f, 0xef, 0xc4, 0xda, 0xc7, 0xf5, 0x65, 0x94, | 3158 | 0x3f, 0x83, 0xef, 0xb4, 0xa3, 0x45, 0xad, 0xff, 0x16, 0x7d, 0xc3, 0x7d, |
| 3183 | 0xed, 0x7a, 0xaf, 0x1e, 0x18, 0x6e, 0x40, 0x7f, 0x9c, 0x34, 0x15, 0x46, | 3159 | 0x44, 0xf4, 0x83, 0x60, 0x73, 0x1e, 0x49, 0x01, 0x02, 0xef, 0xb2, 0x30, |
| 3184 | 0xe2, 0x03, 0xe3, 0xf0, 0xa7, 0x77, 0x23, 0xfc, 0xbd, 0xc7, 0x71, 0x60, | 3160 | 0x5d, 0x8f, 0xca, 0xf2, 0xb8, 0xe9, 0x9b, 0x60, 0xdf, 0x5d, 0xe1, 0x77, |
| 3185 | 0x0c, 0x9f, 0x1a, 0xa4, 0xbe, 0x19, 0x1e, 0x42, 0x7f, 0x0d, 0x7b, 0x07, | 3161 | 0xfa, 0xc2, 0xe6, 0xd6, 0xfe, 0x37, 0xf1, 0x69, 0xbd, 0x61, 0xe1, 0xa1, |
| 3186 | 0xe1, 0x47, 0x6f, 0x06, 0xeb, 0x7b, 0xcf, 0x02, 0x1f, 0x3c, 0x87, 0x73, | 3162 | 0x4d, 0xa5, 0xfd, 0x78, 0xd7, 0x74, 0xc4, 0xc1, 0xf3, 0x8e, 0xb8, 0xbf, |
| 3187 | 0x07, 0x0f, 0x73, 0x7c, 0x36, 0xe6, 0x3f, 0xd7, 0x73, 0x1f, 0x72, 0x7d, | 3163 | 0x4e, 0x8a, 0x0f, 0x89, 0xb8, 0x16, 0x77, 0x75, 0x26, 0x38, 0x8e, 0x4b, |
| 3188 | 0xf5, 0xd4, 0xe7, 0xc7, 0xb8, 0xef, 0x8a, 0x04, 0xf7, 0xf9, 0x0c, 0xaf, | 3164 | 0x5f, 0xdf, 0xe2, 0xcf, 0x1f, 0x2d, 0xa7, 0xb0, 0xde, 0x5d, 0x82, 0xf9, |
| 3189 | 0xf7, 0x71, 0x1f, 0xb9, 0xcd, 0x7d, 0xb2, 0x37, 0xa7, 0x4f, 0x4e, 0xa1, | 3165 | 0x08, 0xf3, 0x35, 0x4c, 0x17, 0xc0, 0xe7, 0x0f, 0x96, 0x80, 0xef, 0xd3, |
| 3190 | 0x6e, 0x8e, 0x65, 0x52, 0x6a, 0x43, 0xd6, 0xaf, 0x42, 0xdd, 0x1f, 0x15, | 3166 | 0x21, 0xd8, 0xe9, 0x7c, 0x9b, 0xef, 0x71, 0xbb, 0x1b, 0xe9, 0xac, 0x2d, |
| 3191 | 0x06, 0xe2, 0x65, 0x9c, 0xaf, 0x92, 0x35, 0xc0, 0x91, 0x35, 0xe8, 0x6b, | 3167 | 0x0b, 0x4f, 0xf3, 0x16, 0xff, 0x3f, 0xd2, 0xa0, 0xb4, 0xbc, 0x5b, 0xa5, |
| 3192 | 0xbd, 0x87, 0x38, 0x2e, 0x2d, 0x94, 0x9f, 0x95, 0x33, 0xe3, 0x9a, 0x0f, | 3168 | 0xcf, 0xc0, 0xcf, 0x88, 0xaf, 0xce, 0xdb, 0xf1, 0x55, 0xa3, 0xa3, 0xf8, |
| 3193 | 0x34, 0x3f, 0x3d, 0xd4, 0xbc, 0x43, 0xfd, 0xca, 0x58, 0xf5, 0x76, 0x8a, | 3169 | 0x88, 0xed, 0xc2, 0x5b, 0xbb, 0x95, 0xb7, 0xa6, 0x8e, 0x79, 0xab, 0x2d, |
| 3194 | 0xec, 0xab, 0x1a, 0xcb, 0x90, 0x7c, 0xa5, 0x28, 0x26, 0x7e, 0x55, 0x84, | 3170 | 0x4f, 0xf7, 0x05, 0x79, 0x1a, 0x13, 0x9e, 0xfe, 0xed, 0xcd, 0xd3, 0xad, |
| 3195 | 0x67, 0x60, 0x6f, 0x7c, 0x94, 0xfd, 0xec, 0x7f, 0x06, 0x78, 0x88, 0xf3, | 3171 | 0x76, 0x31, 0xc7, 0x6f, 0xfe, 0x6f, 0xbc, 0x05, 0x1e, 0x18, 0xd4, 0xe7, |
| 3196 | 0xac, 0xf3, 0x77, 0x75, 0x9d, 0x49, 0xe7, 0x26, 0x07, 0x60, 0xb7, 0xe6, | 3172 | 0x77, 0xfb, 0xf8, 0x67, 0xfc, 0xf2, 0xcf, 0x9f, 0x43, 0x6a, 0xae, 0xfe, |
| 3197 | 0x7d, 0xee, 0x9c, 0xa7, 0xf3, 0x5e, 0xd1, 0x4c, 0x6b, 0xd1, 0x73, 0x50, | 3173 | 0x07, 0x92, 0xe2, 0x88, 0x7c, 0xe0, 0x0d, 0x00, 0x00, 0x00 }; |
| 3198 | 0xdd, 0x13, 0x92, 0xf9, 0x52, 0x76, 0xc9, 0x58, 0x70, 0x7f, 0x74, 0xf2, | ||
| 3199 | 0x41, 0xf1, 0x45, 0xf3, 0xd2, 0xce, 0x23, 0x3b, 0x4f, 0x9c, 0xfc, 0x08, | ||
| 3200 | 0x53, 0x3d, 0x97, 0x8f, 0x97, 0xfa, 0xa7, 0x37, 0x3e, 0x3a, 0xfc, 0xff, | ||
| 3201 | 0xf1, 0x3a, 0x85, 0x78, 0xc5, 0xd9, 0x6e, 0x33, 0x41, 0x73, 0xd6, 0x13, | ||
| 3202 | 0x62, 0x88, 0xf3, 0x35, 0x55, 0xcf, 0xef, 0xb5, 0x06, 0xf9, 0xea, 0x7f, | ||
| 3203 | 0x1a, 0xf6, 0xf4, 0xf3, 0x3b, 0xf9, 0x83, 0xfb, 0x39, 0xf2, 0xec, 0x33, | ||
| 3204 | 0xbb, 0xc7, 0x39, 0xaf, 0xcc, 0xb7, 0x7d, 0x1c, 0x87, 0xdb, 0x88, 0x83, | ||
| 3205 | 0xa9, 0xe3, 0x90, 0xb0, 0xe2, 0xa0, 0xeb, 0x83, 0x5d, 0x4f, 0x91, 0xe4, | ||
| 3206 | 0x0b, 0xd5, 0x19, 0xf3, 0x2a, 0xcd, 0x27, 0x1e, 0xf6, 0x5b, 0xca, 0x35, | ||
| 3207 | 0x2b, 0xff, 0xc2, 0xec, 0x5f, 0x48, 0xec, 0x5d, 0x69, 0x3f, 0x17, 0xe4, | ||
| 3208 | 0x73, 0x01, 0x79, 0x0e, 0xfb, 0x78, 0x8f, 0xe6, 0x3c, 0xf1, 0x55, 0x71, | ||
| 3209 | 0xd4, 0x7a, 0x73, 0xdf, 0x9d, 0x3d, 0x9e, 0x54, 0x51, 0xe9, 0x07, 0x75, | ||
| 3210 | 0x46, 0xe6, 0x8d, 0xea, 0x91, 0x69, 0xd5, 0x99, 0xbb, 0x54, 0x7f, 0x03, | ||
| 3211 | 0xa7, 0xfb, 0x50, 0x17, 0x4e, 0xf7, 0x9d, 0xe1, 0xfe, 0xc7, 0x71, 0x69, | ||
| 3212 | 0xa7, 0xb9, 0x58, 0xc6, 0xae, 0xc6, 0x59, 0x67, 0x9c, 0x76, 0x54, 0xd9, | ||
| 3213 | 0xec, 0xd0, 0xf7, 0xce, 0xd7, 0x97, 0x31, 0xaf, 0x6d, 0xa2, 0xbe, 0xec, | ||
| 3214 | 0xb7, 0xe6, 0x49, 0x67, 0xbd, 0xf7, 0x3f, 0x72, 0xbd, 0xdf, 0xde, 0x6c, | ||
| 3215 | 0xd7, 0x5f, 0x2b, 0x26, 0xd2, 0xd0, 0xdf, 0xce, 0xfd, 0x72, 0x17, 0xbf, | ||
| 3216 | 0xdb, 0xeb, 0x81, 0x08, 0xdd, 0xd7, 0xf5, 0x32, 0xf9, 0x27, 0x4a, 0x83, | ||
| 3217 | 0xf0, 0xa7, 0x6b, 0x2b, 0xbe, 0x77, 0x85, 0xb0, 0x5f, 0x19, 0xc2, 0xdf, | ||
| 3218 | 0x5b, 0xed, 0x3e, 0x93, 0xe4, 0x2b, 0x43, 0xc0, 0x52, 0x7e, 0xef, 0x13, | ||
| 3219 | 0xd6, 0x5c, 0x0c, 0x3c, 0xe9, 0xb5, 0xcf, 0x8f, 0x6e, 0x71, 0xc1, 0x8b, | ||
| 3220 | 0xf7, 0x2f, 0x1a, 0x30, 0x07, 0xb6, 0xd6, 0x99, 0xf4, 0xbd, 0xa3, 0x01, | ||
| 3221 | 0xfd, 0x12, 0xf5, 0x75, 0xf6, 0xef, 0x33, 0x9e, 0x2b, 0x2b, 0x67, 0xe7, | ||
| 3222 | 0x67, 0xfb, 0x7c, 0x5d, 0x18, 0x1f, 0xb5, 0xe6, 0x5c, 0x7d, 0x9f, 0xfd, | ||
| 3223 | 0xfd, 0x28, 0xbd, 0xb4, 0x94, 0x73, 0xaa, 0x7d, 0xbe, 0x76, 0xe9, 0x79, | ||
| 3224 | 0x87, 0xe7, 0xd1, 0x62, 0x71, 0x29, 0x0d, 0xbf, 0x26, 0xd2, 0xf9, 0xde, | ||
| 3225 | 0xa1, 0xba, 0x4f, 0xeb, 0x83, 0xdd, 0xda, 0x8f, 0x59, 0xfd, 0xb8, 0x7f, | ||
| 3226 | 0x0f, 0xdb, 0xf9, 0x1b, 0xfd, 0x5d, 0x5c, 0xca, 0xfe, 0x28, 0xbd, 0xd8, | ||
| 3227 | 0xdf, 0xcc, 0xf3, 0x7e, 0xd2, 0x5a, 0x3b, 0xe7, 0xf4, 0x76, 0xb2, 0xab, | ||
| 3228 | 0x88, 0xfb, 0x69, 0xa9, 0xad, 0xdf, 0x43, 0xbe, 0xa4, 0x09, 0x38, 0xd2, | ||
| 3229 | 0xa4, 0xf3, 0xa0, 0xf3, 0xa5, 0xf3, 0x83, 0x3c, 0x96, 0xae, 0x26, 0xb1, | ||
| 3230 | 0x96, 0xae, 0xd5, 0xf4, 0x60, 0x9b, 0xba, 0x66, 0x9c, 0xff, 0x3f, 0xd8, | ||
| 3231 | 0x1e, 0x53, 0xf2, 0x6f, 0x8a, 0xef, 0x63, 0x68, 0x80, 0x3f, 0x31, 0xce, | ||
| 3232 | 0xce, 0xc5, 0x9c, 0x00, 0x6b, 0x1e, 0xc1, 0x7d, 0x17, 0x3c, 0xbc, 0xdd, | ||
| 3233 | 0xac, 0xe7, 0x46, 0x67, 0xff, 0xfe, 0x90, 0xea, 0xf2, 0xd9, 0x7f, 0x73, | ||
| 3234 | 0xe7, 0xce, 0xd9, 0xf9, 0x51, 0xfb, 0xa9, 0xe4, 0x1b, 0x99, 0x8f, 0x7e, | ||
| 3235 | 0xd1, 0xba, 0x09, 0x7f, 0x6f, 0x87, 0x7d, 0xe0, 0x7d, 0xd8, 0x67, 0xcf, | ||
| 3236 | 0x97, 0xe4, 0x45, 0x21, 0x3d, 0xf0, 0xc5, 0x45, 0x85, 0xe4, 0xcf, 0xf1, | ||
| 3237 | 0xcb, 0xdf, 0xd1, 0xe7, 0x8f, 0x46, 0x83, 0xd8, 0x2f, 0x6b, 0x85, 0x7a, | ||
| 3238 | 0x37, 0xf1, 0xd6, 0x25, 0x8e, 0x82, 0xd7, 0x1f, 0x8c, 0x00, 0xdf, 0x17, | ||
| 3239 | 0x2f, 0x41, 0x4f, 0xd1, 0x11, 0xea, 0x73, 0xfe, 0x32, 0x84, 0x35, 0x35, | ||
| 3240 | 0xca, 0x7c, 0x2d, 0x37, 0xe8, 0xff, 0x65, 0x59, 0x11, 0xe2, 0xff, 0xab, | ||
| 3241 | 0xf0, 0xbb, 0x03, 0x4f, 0xdd, 0xb6, 0x7c, 0x2f, 0xc4, 0x5b, 0xaa, 0x1f, | ||
| 3242 | 0x92, 0x97, 0x38, 0xce, 0xfc, 0xf5, 0xe7, 0xf2, 0x57, 0xc7, 0xa5, 0xdc, | ||
| 3243 | 0xc8, 0xcb, 0xd7, 0xb5, 0x4e, 0xbe, 0x7a, 0x99, 0xaf, 0xf7, 0xad, 0xfe, | ||
| 3244 | 0x36, 0x57, 0x2f, 0xfe, 0xae, 0xb8, 0xf4, 0xd8, 0xf8, 0x0b, 0xdc, 0x5c, | ||
| 3245 | 0xab, 0xee, 0x2f, 0x9b, 0x33, 0x77, 0x56, 0x0b, 0x7b, 0x3d, 0x3a, 0x24, | ||
| 3246 | 0xf3, 0xfd, 0x1f, 0xfe, 0xac, 0x5e, 0x92, 0x80, 0x14, 0x00, 0x00, 0x00 }; | ||
| 3247 | 3174 | ||
| 3248 | static u8 bnx2_TPAT_b06FwText[] = { | 3175 | static u8 bnx2_TPAT_b06FwText[] = { |
| 3249 | 0xbd, 0x59, 0x6d, 0x70, 0x5b, 0x55, 0x7a, 0x7e, 0xae, 0x74, 0x25, 0x5d, | 3176 | 0xbd, 0x58, 0x6d, 0x70, 0x5c, 0xd5, 0x79, 0x7e, 0xce, 0xbd, 0x77, 0xb5, |
| 3250 | 0xdb, 0xb2, 0x75, 0x8d, 0x95, 0x20, 0xb7, 0x2e, 0xd6, 0x8d, 0xaf, 0x6c, | 3177 | 0xd7, 0xd2, 0x4a, 0xba, 0xb2, 0xd6, 0x66, 0x5d, 0xdc, 0xfa, 0x1e, 0x74, |
| 3251 | 0x11, 0xb9, 0xe1, 0x2a, 0x36, 0x45, 0x19, 0xee, 0x94, 0x1b, 0x7f, 0x21, | 3178 | 0x57, 0x52, 0x58, 0x01, 0x77, 0x6d, 0x01, 0xeb, 0xe6, 0xb6, 0xbe, 0xc8, |
| 3252 | 0x92, 0x10, 0x94, 0x42, 0x5b, 0x67, 0x96, 0x19, 0x4c, 0xe2, 0x4d, 0x4c, | 3179 | 0xb2, 0xbc, 0xfe, 0x00, 0xe4, 0xc0, 0x4c, 0xe4, 0x96, 0x8e, 0x37, 0xc6, |
| 3253 | 0x08, 0x6c, 0xba, 0xcb, 0x4c, 0xdd, 0xd9, 0x4c, 0x23, 0xfc, 0x15, 0x93, | 3180 | 0x18, 0xd9, 0x90, 0xa9, 0x28, 0xfc, 0x58, 0x37, 0x4c, 0xbd, 0x95, 0x65, |
| 3254 | 0xc8, 0x16, 0x6b, 0x20, 0x26, 0x3b, 0x3b, 0x43, 0xc6, 0xf9, 0x70, 0x0a, | 3181 | 0x63, 0xc3, 0x4a, 0x6b, 0x0c, 0xb1, 0x4c, 0xda, 0x99, 0x78, 0x84, 0xb1, |
| 3255 | 0x72, 0x14, 0xda, 0x3f, 0x3b, 0xd3, 0x65, 0xf0, 0x6c, 0x12, 0x12, 0x58, | 3182 | 0x4c, 0x22, 0x7b, 0x0d, 0xe4, 0x07, 0x49, 0xc3, 0xa0, 0xc1, 0x0e, 0x08, |
| 3256 | 0xd8, 0xb4, 0xd3, 0x3f, 0xc9, 0xf4, 0xc7, 0x7a, 0x21, 0xa1, 0x81, 0x42, | 3183 | 0x06, 0xf3, 0x31, 0x6d, 0x67, 0x98, 0xe9, 0xa4, 0xf5, 0x18, 0xf3, 0x11, |
| 3257 | 0x36, 0xed, 0x0c, 0x9d, 0x50, 0x68, 0x4e, 0x9f, 0x73, 0x25, 0x07, 0x13, | 3184 | 0x92, 0x18, 0x87, 0x4e, 0x3a, 0xa2, 0x10, 0x9f, 0x3e, 0x67, 0x77, 0xc5, |
| 3258 | 0xb2, 0xfd, 0xd9, 0xcc, 0x08, 0x4b, 0xe7, 0xde, 0x73, 0xce, 0x7b, 0xce, | 3185 | 0x57, 0x32, 0xd3, 0xfe, 0xaa, 0x66, 0x56, 0x7b, 0xf7, 0xec, 0xf9, 0x78, |
| 3259 | 0xfb, 0x3c, 0xcf, 0xfb, 0x9c, 0xc3, 0x0a, 0x05, 0x95, 0x28, 0xff, 0xab, | 3186 | 0xcf, 0xfb, 0x3e, 0xef, 0xf3, 0x3e, 0xef, 0x5e, 0x21, 0x50, 0x8f, 0xda, |
| 3260 | 0xe6, 0xa7, 0xfd, 0xc9, 0x5d, 0xcf, 0xad, 0x5e, 0xd5, 0xbe, 0x8a, 0x5f, | 3187 | 0x5f, 0x23, 0x5f, 0xdd, 0xdf, 0x1a, 0xba, 0x2f, 0x7d, 0xf5, 0x75, 0x57, |
| 3261 | 0x57, 0x2b, 0xcb, 0x55, 0x15, 0xff, 0x8f, 0xff, 0xbc, 0x80, 0xbe, 0x18, | 3188 | 0xf3, 0xf1, 0x3a, 0xe1, 0xd4, 0x59, 0xf8, 0x7f, 0xfc, 0x33, 0x01, 0x67, |
| 3262 | 0x87, 0xfc, 0x40, 0xf3, 0xd8, 0xf3, 0x77, 0x75, 0x98, 0xd0, 0xbc, 0xf6, | 3189 | 0xce, 0x0e, 0xfd, 0x82, 0x6d, 0x04, 0x85, 0xcb, 0x7b, 0x3c, 0xd8, 0x66, |
| 3263 | 0x63, 0x4d, 0x5b, 0x4d, 0xc0, 0x29, 0x24, 0xa2, 0x9d, 0xf8, 0x1f, 0x91, | 3190 | 0x10, 0x77, 0x6f, 0xf7, 0x80, 0x70, 0x2a, 0xe5, 0xae, 0xc4, 0xef, 0x54, |
| 3264 | 0x0d, 0xab, 0x90, 0xed, 0x7f, 0x64, 0x7f, 0x7d, 0xcf, 0x5b, 0xf7, 0x19, | 3191 | 0x21, 0x6e, 0x41, 0x8f, 0xff, 0x71, 0xf0, 0xe9, 0x35, 0xcf, 0x5d, 0x2f, |
| 3265 | 0xd7, 0x0e, 0x79, 0xa1, 0xe9, 0xf6, 0xb8, 0xaa, 0x37, 0x43, 0x6b, 0x60, | 3192 | 0x2f, 0x1e, 0x36, 0x61, 0x3b, 0xc1, 0x5e, 0xcb, 0x69, 0x87, 0xbd, 0x98, |
| 3266 | 0x9f, 0x9f, 0xb5, 0xf4, 0xfb, 0x50, 0xb3, 0x38, 0x16, 0x70, 0x38, 0x67, | 3193 | 0x6b, 0xfe, 0xb1, 0xe3, 0x2f, 0x04, 0x9a, 0xe6, 0xf6, 0x52, 0x6a, 0xc4, |
| 3267 | 0x58, 0xdb, 0x90, 0xd0, 0x4f, 0x41, 0x85, 0xc3, 0x39, 0x8e, 0x15, 0x80, | 3194 | 0x8f, 0x62, 0xd8, 0x4f, 0x60, 0x77, 0xc9, 0x40, 0xe8, 0x44, 0xb1, 0xcb, |
| 3268 | 0xbd, 0x39, 0x05, 0x97, 0x39, 0xe6, 0x68, 0x41, 0xc3, 0x82, 0xd7, 0x9d, | 3195 | 0x9b, 0x55, 0x5b, 0x7c, 0xe9, 0xef, 0x86, 0x5a, 0x72, 0xda, 0x97, 0x89, |
| 3269 | 0xae, 0xaf, 0xc2, 0x46, 0xc6, 0x9c, 0xd8, 0x23, 0x02, 0x26, 0xb2, 0x7f, | 3196 | 0x5e, 0x13, 0xe1, 0x77, 0xbc, 0xc5, 0xd8, 0x5d, 0x4e, 0x60, 0xa4, 0x6c, |
| 3270 | 0x60, 0x9b, 0xf1, 0xbd, 0x08, 0xa6, 0x66, 0xda, 0x91, 0x59, 0x31, 0xa7, | 3197 | 0xe3, 0xac, 0x39, 0x82, 0xde, 0xf2, 0xdc, 0x3a, 0x97, 0xeb, 0x3a, 0xb1, |
| 3271 | 0x61, 0x73, 0xbe, 0xa1, 0x4f, 0xb3, 0xc1, 0x77, 0x14, 0xa4, 0xee, 0xd3, | 3198 | 0xe7, 0xcb, 0x6b, 0xdd, 0xdd, 0x48, 0x25, 0xf6, 0xc0, 0x40, 0x2e, 0xee, |
| 3272 | 0xd0, 0x5b, 0x8c, 0x23, 0x5b, 0xcc, 0xc2, 0x29, 0x8e, 0xf0, 0xa3, 0x21, | 3199 | 0x71, 0x5d, 0x9b, 0xbb, 0x07, 0xb2, 0x93, 0xfb, 0x14, 0xea, 0xba, 0x5d, |
| 3273 | 0x30, 0xa1, 0x69, 0xf7, 0x4c, 0x2c, 0x97, 0xef, 0x20, 0x38, 0x71, 0x4d, | 3200 | 0xee, 0x51, 0xe0, 0x7a, 0xe9, 0x1e, 0x85, 0xde, 0x2b, 0xc3, 0xcf, 0x6f, |
| 3274 | 0x5c, 0x4d, 0xea, 0x78, 0x6f, 0x8d, 0x10, 0xd5, 0x36, 0xb2, 0x55, 0xed, | 3201 | 0xa9, 0xe7, 0x3a, 0x16, 0xe3, 0x19, 0xee, 0xff, 0x74, 0xd9, 0xc1, 0xc9, |
| 3275 | 0x59, 0x78, 0x6d, 0xc3, 0x5a, 0xef, 0x55, 0xd0, 0xf5, 0xc7, 0x66, 0x7c, | 3202 | 0xb2, 0x87, 0xe7, 0xcb, 0x2e, 0x7e, 0x54, 0x8e, 0xe3, 0xa9, 0xb2, 0x9d, |
| 3276 | 0x42, 0x79, 0xf4, 0x51, 0x8f, 0x0d, 0x4d, 0xb1, 0xa3, 0x6a, 0x53, 0xa1, | 3203 | 0xb3, 0x03, 0xf4, 0xc7, 0x47, 0x77, 0xaa, 0x84, 0x87, 0xc2, 0x1f, 0x05, |
| 3277 | 0x01, 0x63, 0x45, 0x1d, 0x7b, 0x8b, 0x61, 0x8c, 0x14, 0xb1, 0xdb, 0x7b, | 3204 | 0xde, 0xa1, 0x43, 0x46, 0x2c, 0xf3, 0x37, 0xd7, 0xa1, 0x7f, 0xfe, 0x71, |
| 3278 | 0xaf, 0x1f, 0x33, 0x3a, 0x9c, 0xef, 0xb5, 0xec, 0xc6, 0x8e, 0xdc, 0x20, | 3205 | 0x1b, 0x1b, 0x4a, 0x8b, 0x73, 0xd1, 0x00, 0x9c, 0x23, 0xe0, 0x5f, 0x67, |
| 3279 | 0xb6, 0xe6, 0x52, 0xd8, 0x57, 0x94, 0x31, 0x46, 0x31, 0x5c, 0x54, 0xe1, | 3206 | 0xa3, 0x9f, 0x7b, 0x14, 0xb8, 0x7f, 0x58, 0x1e, 0xe1, 0xcb, 0xc6, 0xbb, |
| 3280 | 0x9f, 0x30, 0x22, 0xef, 0xe2, 0x76, 0xcf, 0x84, 0x18, 0xb1, 0x02, 0x18, | 3207 | 0x45, 0xdb, 0x6e, 0x1e, 0x5d, 0xa8, 0xe7, 0xe0, 0x57, 0xc5, 0x8b, 0xea, |
| 3281 | 0xb2, 0xe2, 0x18, 0xcd, 0x7b, 0xb8, 0xce, 0x00, 0x86, 0xcd, 0xeb, 0xa2, | 3208 | 0x42, 0xda, 0xc1, 0x2b, 0xcb, 0x95, 0x6a, 0x0c, 0x50, 0x68, 0xe8, 0x2e, |
| 3282 | 0xdf, 0x32, 0xac, 0x51, 0x88, 0xc6, 0xd3, 0x96, 0x11, 0xe9, 0xf2, 0xc2, | 3209 | 0xc0, 0x0c, 0x64, 0x76, 0x9d, 0x29, 0xd0, 0x7b, 0x95, 0xd7, 0x39, 0x2a, |
| 3283 | 0xf9, 0xb1, 0x19, 0xc1, 0x28, 0x63, 0x1f, 0x71, 0xfb, 0x8d, 0xa0, 0xeb, | 3210 | 0x6e, 0xb9, 0xc5, 0x08, 0x60, 0x8b, 0xc0, 0xb5, 0xda, 0xa6, 0x32, 0xd8, |
| 3284 | 0x66, 0x3f, 0x87, 0xfd, 0x74, 0x8c, 0x7d, 0xbb, 0x6f, 0x74, 0x14, 0x89, | 3211 | 0x57, 0xe6, 0xbd, 0x68, 0xcf, 0x48, 0x19, 0xe1, 0x5f, 0x76, 0x98, 0x98, |
| 3285 | 0xc8, 0x18, 0x3c, 0xe8, 0x0b, 0xb7, 0xb2, 0x5f, 0x53, 0x74, 0x0c, 0x46, | 3212 | 0x88, 0xe3, 0xfe, 0xb7, 0xbb, 0x2d, 0x7c, 0x5c, 0x94, 0x89, 0x4e, 0xf3, |
| 3286 | 0x9c, 0xe3, 0x64, 0xfd, 0xed, 0x0e, 0xc7, 0xc8, 0xb2, 0xbf, 0x11, 0x3d, | 3213 | 0x7e, 0xec, 0x2c, 0xe6, 0x71, 0x47, 0x11, 0x05, 0x23, 0x18, 0xc2, 0x37, |
| 3287 | 0x06, 0x39, 0x56, 0x03, 0x7f, 0xb7, 0xb3, 0xbf, 0x02, 0x8f, 0x1d, 0x8b, | 3214 | 0xba, 0x03, 0xde, 0x33, 0xc4, 0xf7, 0xcb, 0xb0, 0x5b, 0x83, 0xd3, 0x97, |
| 3288 | 0x0e, 0xb1, 0xcf, 0x29, 0x4b, 0xc5, 0x19, 0x7e, 0xfa, 0x74, 0x43, 0x66, | 3215 | 0xdf, 0xdb, 0x2e, 0x0f, 0x87, 0x06, 0x90, 0x1d, 0x03, 0xfa, 0x4a, 0x02, |
| 3289 | 0x56, 0x09, 0xb0, 0x7d, 0x2f, 0xf8, 0xdc, 0xac, 0xc2, 0xa1, 0x8c, 0x85, | 3216 | 0xa7, 0x32, 0x02, 0x5b, 0xfc, 0xcb, 0x50, 0x70, 0xba, 0xb1, 0xb7, 0x2c, |
| 3290 | 0x21, 0xae, 0x5b, 0x63, 0xdb, 0x38, 0xdb, 0x7c, 0xa6, 0xc5, 0xf1, 0xa1, | 3217 | 0xb3, 0x05, 0x7e, 0x77, 0xd5, 0x28, 0xec, 0x45, 0xc1, 0x6d, 0xd6, 0xf2, |
| 3291 | 0x77, 0x15, 0x97, 0x62, 0x62, 0x31, 0x37, 0xbf, 0xaf, 0x9d, 0x63, 0xe4, | 3218 | 0x12, 0xec, 0x96, 0x60, 0xc0, 0x4a, 0x8f, 0xb5, 0xcd, 0x1e, 0x13, 0x32, |
| 3292 | 0x4b, 0x39, 0x95, 0xef, 0x74, 0xe6, 0x6f, 0x88, 0x27, 0xd5, 0xa5, 0xcf, | 3219 | 0xbf, 0xc2, 0x94, 0x21, 0x20, 0x33, 0x9d, 0x46, 0xaa, 0xa0, 0x84, 0x1c, |
| 3293 | 0x07, 0x95, 0x0e, 0xb6, 0x39, 0x6a, 0x03, 0xf6, 0xe6, 0xa1, 0xf9, 0x4d, | 3220 | 0xba, 0x08, 0x6d, 0xd3, 0x6d, 0xd6, 0x35, 0x53, 0xfa, 0x7d, 0xc0, 0xba, |
| 3294 | 0x8d, 0xf3, 0x68, 0xf8, 0x28, 0x37, 0xa8, 0xf4, 0x14, 0x1d, 0xa5, 0x7b, | 3221 | 0x7a, 0x0a, 0x58, 0xcf, 0x3d, 0x1f, 0x5a, 0x2e, 0xb0, 0x3d, 0xfd, 0x6b, |
| 3295 | 0xb6, 0x43, 0x71, 0x66, 0x55, 0xa5, 0x6b, 0x5a, 0xc6, 0x2d, 0xc4, 0x0b, | 3222 | 0x15, 0x2e, 0x90, 0xe1, 0x61, 0xd1, 0x8d, 0xd1, 0x32, 0x70, 0xd3, 0x18, |
| 3296 | 0x96, 0xc2, 0x98, 0x7f, 0x22, 0xe3, 0x75, 0xa2, 0xca, 0x0d, 0xb1, 0x32, | 3223 | 0xec, 0x18, 0xe7, 0x16, 0xb9, 0x77, 0x3d, 0xe7, 0xae, 0x1d, 0x6d, 0x1b, |
| 3297 | 0xe6, 0x41, 0x95, 0xd9, 0xa3, 0xac, 0x9f, 0x15, 0x22, 0x9d, 0x4c, 0x2b, | 3224 | 0x9c, 0x11, 0x92, 0x77, 0x93, 0x03, 0x40, 0xca, 0x3f, 0x0e, 0xe9, 0xae, |
| 3298 | 0xeb, 0x66, 0xa1, 0x05, 0x6d, 0x5b, 0xcd, 0x4d, 0xec, 0x43, 0x76, 0x99, | 3225 | 0x13, 0xd2, 0xd9, 0x53, 0xdb, 0x33, 0x59, 0xdb, 0xf3, 0x8a, 0x29, 0x5b, |
| 3299 | 0x89, 0x83, 0xf9, 0x28, 0x3e, 0xb0, 0x3c, 0x38, 0xb4, 0xac, 0x02, 0xaa, | 3226 | 0xac, 0x2a, 0x41, 0xf4, 0x96, 0xe0, 0x3e, 0xe9, 0x83, 0x77, 0x89, 0xf1, |
| 3300 | 0xa9, 0xf0, 0x83, 0xe0, 0x79, 0x0b, 0x6a, 0x0d, 0xbf, 0x5f, 0xdd, 0xa4, | 3227 | 0xde, 0xf5, 0x70, 0x5b, 0xa4, 0x7f, 0x98, 0x73, 0xa3, 0x41, 0x97, 0xf5, |
| 3301 | 0x62, 0xa4, 0x7d, 0x9d, 0xd2, 0xc5, 0x3e, 0x3e, 0xe6, 0xf9, 0x68, 0x2e, | 3228 | 0x5e, 0x51, 0xe0, 0x43, 0x4f, 0xcf, 0xef, 0xd2, 0xb6, 0x84, 0x4e, 0x90, |
| 3302 | 0x8d, 0x20, 0xb1, 0x53, 0x65, 0xc7, 0x22, 0x05, 0xee, 0xcd, 0x7b, 0x56, | 3229 | 0x11, 0xfd, 0xe5, 0xfd, 0x73, 0x39, 0x62, 0x9c, 0xf4, 0xe3, 0xc0, 0x42, |
| 3303 | 0x2c, 0xfe, 0xb4, 0xc4, 0x63, 0xad, 0x11, 0x91, 0x7b, 0x53, 0x6d, 0xc7, | 3230 | 0x34, 0xb7, 0x78, 0xf3, 0xf1, 0xb0, 0x83, 0xc6, 0xa8, 0xb7, 0xcc, 0x78, |
| 3304 | 0xe2, 0x73, 0xdc, 0x07, 0xaf, 0xa9, 0xe2, 0xd7, 0x96, 0x0f, 0xf3, 0x9b, | 3231 | 0xc0, 0xa9, 0xc3, 0x49, 0xff, 0xb7, 0x0a, 0xdf, 0xd0, 0xf3, 0x81, 0x6f, |
| 3305 | 0x2c, 0xe6, 0x54, 0x87, 0x9f, 0xed, 0xc7, 0xdc, 0x76, 0xf9, 0x1b, 0x7a, | 3232 | 0x3f, 0xe2, 0x20, 0xe6, 0x5d, 0xc4, 0xd1, 0xf4, 0x36, 0xe3, 0x55, 0x67, |
| 3306 | 0xf7, 0xb7, 0xf6, 0xa1, 0xb4, 0x07, 0xc3, 0xf9, 0x26, 0xc6, 0x5c, 0xda, | 3233 | 0x08, 0x4d, 0xde, 0xcf, 0x8d, 0xd7, 0x9c, 0x38, 0x1e, 0xe2, 0x7d, 0xee, |
| 3307 | 0x83, 0x47, 0xb8, 0xde, 0xdf, 0xfa, 0xe4, 0xd7, 0xbb, 0x6e, 0xb6, 0x6d, | 3234 | 0x4c, 0xc6, 0xf1, 0x40, 0xf9, 0xab, 0xfb, 0x5a, 0x22, 0x3b, 0xfe, 0x8e, |
| 3308 | 0x66, 0x9c, 0x1e, 0xdb, 0x9c, 0x5f, 0xe1, 0xad, 0x07, 0xea, 0xda, 0xb1, | 3235 | 0x42, 0x4b, 0x65, 0x7d, 0xf8, 0xac, 0x3f, 0x01, 0x5c, 0xa6, 0xc7, 0xf3, |
| 3309 | 0x8f, 0x39, 0xee, 0x4a, 0x2e, 0x47, 0xd6, 0x7d, 0x1e, 0xd6, 0xd7, 0x4f, | 3236 | 0x62, 0x63, 0xe9, 0x92, 0x72, 0xa3, 0x19, 0x3c, 0x50, 0xb2, 0x31, 0x8f, |
| 3310 | 0xd7, 0xa1, 0x6f, 0x99, 0xbb, 0x6f, 0xfa, 0xc6, 0x69, 0x21, 0xce, 0x24, | 3237 | 0x76, 0x45, 0x3c, 0x1b, 0x6f, 0x17, 0xf3, 0x62, 0x55, 0x39, 0x14, 0x6b, |
| 3311 | 0xfd, 0x98, 0x33, 0x87, 0x22, 0xd5, 0xc8, 0x5a, 0x5e, 0xe6, 0xfb, 0x2c, | 3238 | 0x26, 0x7b, 0x44, 0x38, 0x69, 0x89, 0x9e, 0x71, 0x10, 0x9b, 0x4a, 0xad, |
| 3312 | 0xe7, 0x2f, 0x24, 0xbd, 0x38, 0x9c, 0x3c, 0x84, 0x6c, 0x2d, 0x30, 0x93, | 3239 | 0xf1, 0x05, 0xfe, 0xc3, 0xff, 0x57, 0xe3, 0x6c, 0xab, 0x0c, 0x5d, 0x71, |
| 3313 | 0x93, 0xbc, 0x32, 0xe6, 0xcf, 0xf2, 0xbf, 0x9e, 0xa2, 0x5c, 0x9f, 0xc5, | 3240 | 0x49, 0x79, 0x49, 0x03, 0xf5, 0x5e, 0x9f, 0x58, 0x3b, 0xa9, 0xd4, 0x5e, |
| 3314 | 0xf5, 0x29, 0x38, 0x66, 0x4a, 0x4c, 0x5b, 0x6a, 0x33, 0xf9, 0xb5, 0x83, | 3241 | 0x3f, 0x2b, 0x7a, 0x27, 0x61, 0x37, 0x04, 0x81, 0x75, 0xd7, 0xe8, 0x69, |
| 3315 | 0xfb, 0x59, 0xdf, 0x1e, 0x24, 0x3e, 0x81, 0x0f, 0x73, 0xfd, 0xd8, 0x5c, | 3242 | 0x23, 0xb7, 0x20, 0x86, 0x52, 0xc9, 0xc5, 0x29, 0x5f, 0xe3, 0x77, 0x1e, |
| 3316 | 0x8a, 0x05, 0xd7, 0x73, 0x50, 0x7c, 0x6d, 0x69, 0x1c, 0x2a, 0xfd, 0x26, | 3243 | 0x2c, 0x4f, 0xf0, 0x85, 0xd8, 0x19, 0x1f, 0x56, 0x8c, 0xcf, 0x53, 0x1b, |
| 3317 | 0xc7, 0xd3, 0x6a, 0x47, 0xce, 0xc8, 0xa4, 0x91, 0x38, 0xd7, 0xa1, 0xc8, | 3244 | 0x2c, 0x8c, 0x74, 0xaf, 0xad, 0xac, 0x89, 0x10, 0x2b, 0x4f, 0x14, 0xb3, |
| 3318 | 0xfe, 0x69, 0x75, 0x65, 0xc1, 0x8f, 0x68, 0x5d, 0xe9, 0x79, 0x95, 0xbd, | 3245 | 0x30, 0x88, 0xbf, 0x45, 0x41, 0x72, 0x76, 0x82, 0x98, 0x7f, 0xcb, 0x4f, |
| 3319 | 0x41, 0x7d, 0x7a, 0x42, 0xc1, 0xf6, 0x98, 0x7c, 0xb6, 0x41, 0x6d, 0x29, | 3246 | 0x76, 0x7e, 0x6c, 0x92, 0x1c, 0x5a, 0x65, 0x82, 0x86, 0x0a, 0x2b, 0x48, |
| 3320 | 0x40, 0xab, 0xb6, 0x77, 0xa9, 0x73, 0x13, 0x46, 0xdf, 0x71, 0x25, 0x11, | 3247 | 0x76, 0x1e, 0x81, 0x80, 0xe9, 0x59, 0x78, 0xc5, 0x8f, 0x20, 0xdc, 0x60, |
| 3321 | 0x9d, 0x70, 0xfb, 0xec, 0x52, 0x5b, 0x0b, 0x01, 0xae, 0x27, 0xce, 0x9c, | 3248 | 0x63, 0x17, 0x71, 0x55, 0xc7, 0xf1, 0xa3, 0x95, 0x71, 0xfd, 0x19, 0xce, |
| 3322 | 0x40, 0xab, 0xb1, 0x9f, 0x53, 0x7f, 0xcd, 0x07, 0xe7, 0xdc, 0x3e, 0xcf, | 3249 | 0xaa, 0xf2, 0x57, 0x73, 0x9e, 0xe3, 0xa5, 0x36, 0xe4, 0x2a, 0x79, 0x0f, |
| 3323 | 0xa9, 0xf1, 0x82, 0x6c, 0x37, 0xac, 0xa8, 0x12, 0xc0, 0xdd, 0x49, 0x0d, | 3250 | 0x67, 0x1d, 0xef, 0xfb, 0xad, 0x88, 0x7e, 0xfc, 0x93, 0xcf, 0xc6, 0x6e, |
| 3324 | 0x2b, 0x5b, 0x44, 0x63, 0x77, 0xd2, 0x98, 0xef, 0xf6, 0x46, 0x70, 0x90, | 3251 | 0xa4, 0x9d, 0x66, 0xe0, 0xe5, 0x1e, 0x17, 0x8b, 0x50, 0x68, 0x01, 0xed, |
| 3325 | 0x5c, 0x20, 0xee, 0x9c, 0x3f, 0x6c, 0x19, 0x41, 0x77, 0xd1, 0x8b, 0x68, | 3252 | 0x36, 0x70, 0x21, 0xbd, 0x10, 0xd3, 0x2d, 0xfa, 0xeb, 0xb8, 0xd3, 0x3f, |
| 3326 | 0xad, 0x83, 0xfd, 0xf9, 0x00, 0x7e, 0x49, 0xfc, 0xf7, 0x58, 0x3a, 0x46, | 3253 | 0xde, 0xaa, 0x63, 0xa2, 0xf7, 0x72, 0x56, 0x8d, 0x2b, 0xf5, 0xbc, 0x5f, |
| 3327 | 0xf2, 0x46, 0xfc, 0x57, 0x48, 0xa4, 0x8e, 0x30, 0x67, 0x0b, 0xe4, 0xc0, | 3254 | 0x87, 0xd9, 0x8e, 0xe1, 0x19, 0x66, 0x89, 0xbf, 0x88, 0x39, 0xf9, 0x12, |
| 3328 | 0xfe, 0x62, 0x53, 0xfc, 0x08, 0x8c, 0x81, 0x6e, 0x72, 0x40, 0x6b, 0x97, | 3255 | 0xcf, 0x6f, 0x59, 0x66, 0xc2, 0x5c, 0xe6, 0x9a, 0xee, 0x7c, 0x60, 0xa2, |
| 3329 | 0x31, 0x40, 0x57, 0x6d, 0x72, 0xa7, 0xd8, 0x80, 0x1c, 0xf9, 0xd0, 0xed, | 3256 | 0xa8, 0x39, 0x41, 0xce, 0xbe, 0xc4, 0xff, 0xe7, 0xca, 0x1a, 0x9f, 0x3e, |
| 3330 | 0xf2, 0x6a, 0x50, 0xe9, 0x2a, 0xbe, 0x4f, 0x6d, 0xed, 0x21, 0xbe, 0x10, | 3257 | 0xf1, 0x29, 0xd0, 0xde, 0xa1, 0xe3, 0xee, 0x5b, 0xed, 0xc4, 0xde, 0x76, |
| 3331 | 0x8a, 0x98, 0x7e, 0xa4, 0xea, 0xa2, 0x38, 0x4d, 0xac, 0x64, 0xc3, 0x15, | 3258 | 0xfa, 0x33, 0xc2, 0x3c, 0x78, 0x90, 0xf6, 0x9e, 0x2b, 0x7e, 0xcf, 0x58, |
| 3332 | 0xcc, 0xa5, 0xcc, 0xe7, 0x45, 0x3e, 0x5f, 0xa7, 0x74, 0xce, 0x46, 0xf1, | 3259 | 0xe5, 0x48, 0x57, 0x9f, 0xf0, 0x4e, 0x11, 0xe2, 0x79, 0xff, 0xef, 0xb4, |
| 3333 | 0x4b, 0xeb, 0x6b, 0xe1, 0x84, 0xab, 0xd9, 0xe6, 0x5b, 0xd2, 0xae, 0xe1, | 3260 | 0x8f, 0x5d, 0x6e, 0x4b, 0xcc, 0xdc, 0x47, 0xcc, 0x68, 0xee, 0x59, 0x6f, |
| 3334 | 0xf2, 0xcb, 0x95, 0xf8, 0xf4, 0xe5, 0x20, 0xbe, 0x7c, 0x99, 0xfc, 0xce, | 3261 | 0x39, 0x63, 0x72, 0xe0, 0x7d, 0x1a, 0x91, 0x08, 0x86, 0xac, 0x44, 0x29, |
| 3335 | 0xa3, 0xbd, 0x12, 0x42, 0xa4, 0xda, 0x84, 0x28, 0x5a, 0xad, 0xf8, 0xa8, | 3262 | 0xb5, 0x77, 0x90, 0xdf, 0xdb, 0x41, 0xd6, 0xb2, 0x47, 0x65, 0x9e, 0xe7, |
| 3336 | 0x36, 0x16, 0xbd, 0x00, 0xa9, 0x8d, 0x8e, 0xba, 0x35, 0x67, 0xec, 0x1a, | 3263 | 0xe5, 0x2c, 0x43, 0x26, 0x9a, 0xcd, 0xd4, 0xd0, 0x88, 0x90, 0x83, 0xcd, |
| 3337 | 0x40, 0xc2, 0x39, 0xe5, 0xee, 0x85, 0xa3, 0xae, 0x2a, 0x9c, 0x16, 0xd8, | 3264 | 0x42, 0xf6, 0xdf, 0x03, 0xe9, 0x9c, 0x10, 0xfa, 0xcc, 0xf5, 0x56, 0x57, |
| 3338 | 0x54, 0xda, 0x0b, 0xbf, 0xdd, 0xa5, 0xbe, 0xc3, 0xdc, 0x9c, 0x77, 0x73, | 3265 | 0x05, 0xa3, 0x59, 0x62, 0x54, 0xbf, 0xdf, 0x67, 0xa5, 0x2a, 0xef, 0x43, |
| 3339 | 0xd3, 0xa5, 0xde, 0x53, 0xb8, 0xdf, 0x83, 0xca, 0xd2, 0x33, 0xd5, 0xce, | 3266 | 0xd6, 0x95, 0x53, 0x09, 0x8c, 0x96, 0xa4, 0xef, 0x8a, 0x28, 0xbe, 0x96, |
| 3340 | 0xa8, 0x23, 0x39, 0xa3, 0x77, 0x9c, 0xeb, 0xeb, 0x77, 0xfb, 0x66, 0xd4, | 3267 | 0xb6, 0x71, 0x22, 0xa9, 0x96, 0xbc, 0x90, 0x96, 0xb9, 0x1e, 0x73, 0x31, |
| 3341 | 0x04, 0xf7, 0x7e, 0xa1, 0x9c, 0x9b, 0x6a, 0xfb, 0x31, 0xee, 0x33, 0x73, | 3268 | 0x73, 0x21, 0x81, 0x61, 0x62, 0xe9, 0x1f, 0x92, 0x23, 0xe8, 0x29, 0x9b, |
| 3342 | 0xef, 0xee, 0xe3, 0x63, 0xdc, 0x63, 0x39, 0xdf, 0xe0, 0x2d, 0xf3, 0x0d, | 3269 | 0xc4, 0xb1, 0x8b, 0xfd, 0xa5, 0x28, 0x66, 0xc8, 0x4f, 0x75, 0xe9, 0x4e, |
| 3343 | 0x72, 0xbe, 0xe3, 0x4b, 0xe6, 0xdb, 0xbd, 0x64, 0xbe, 0xdd, 0x4b, 0xe6, | 3270 | 0x8c, 0x94, 0x64, 0xe7, 0x1b, 0x48, 0xe5, 0x8f, 0x30, 0x5e, 0x67, 0x17, |
| 3344 | 0x4b, 0x91, 0xab, 0xff, 0x22, 0x86, 0xc2, 0xa5, 0xb1, 0x55, 0x7b, 0xe0, | 3271 | 0x78, 0xd8, 0x5f, 0x6e, 0x63, 0x8c, 0xa4, 0xbb, 0x8a, 0x1c, 0x65, 0x76, |
| 3345 | 0x96, 0xb9, 0x07, 0x38, 0xf7, 0x01, 0xb1, 0x90, 0x29, 0x8d, 0x53, 0x6d, | 3272 | 0x4b, 0x67, 0x17, 0x7d, 0x5b, 0x17, 0x90, 0xdb, 0xca, 0x19, 0xee, 0x53, |
| 3346 | 0xef, 0x5c, 0x32, 0xf7, 0x4e, 0xce, 0xbd, 0x38, 0x8e, 0x4e, 0x2d, 0x12, | 3273 | 0xc0, 0xaa, 0x72, 0x5e, 0xf4, 0x95, 0xe7, 0x70, 0xfa, 0x73, 0x62, 0x53, |
| 3347 | 0x62, 0xa3, 0x25, 0x84, 0x6a, 0x9b, 0x7a, 0x17, 0x9a, 0x33, 0x5d, 0xc4, | 3274 | 0x63, 0xd5, 0xc6, 0xe6, 0x12, 0x70, 0x67, 0xc9, 0x47, 0x8b, 0x67, 0xbc, |
| 3348 | 0x4e, 0x25, 0x12, 0xf3, 0x1e, 0x98, 0x83, 0xf5, 0x5e, 0x1f, 0x16, 0x6a, | 3275 | 0x18, 0xc5, 0x45, 0xfa, 0x71, 0x02, 0xf7, 0x38, 0x21, 0x16, 0x79, 0xeb, |
| 3349 | 0x17, 0xb9, 0x51, 0x5d, 0xfe, 0xfb, 0x9a, 0x02, 0x6a, 0xfd, 0x1b, 0xb9, | 3276 | 0xd4, 0x8e, 0xb8, 0x9e, 0x9f, 0x17, 0x6b, 0x19, 0xb7, 0x30, 0x02, 0x63, |
| 3350 | 0x10, 0xc7, 0x88, 0xe9, 0xfd, 0x8a, 0x10, 0xa7, 0xd6, 0x24, 0x06, 0xbc, | 3277 | 0xd2, 0x37, 0x71, 0x36, 0x3e, 0x3c, 0x3f, 0x52, 0xe1, 0x5d, 0xfd, 0x6e, |
| 3351 | 0x48, 0xf4, 0xd5, 0xc0, 0x24, 0x86, 0x7c, 0x65, 0x2e, 0x2c, 0xed, 0x73, | 3278 | 0xa2, 0xdf, 0xc7, 0x1a, 0x07, 0x72, 0xc8, 0x17, 0x85, 0xc1, 0x26, 0xfa, |
| 3352 | 0xdc, 0xed, 0x53, 0x74, 0xfb, 0x08, 0xf1, 0xe1, 0xbd, 0x57, 0xc4, 0x5b, | 3279 | 0xe1, 0xa4, 0x28, 0x0c, 0xc4, 0x20, 0x0b, 0xf7, 0x0a, 0x3a, 0x6b, 0x8c, |
| 3353 | 0x2d, 0x61, 0xbc, 0x4d, 0x4e, 0x9e, 0x2c, 0x2e, 0xea, 0x8a, 0xd4, 0x0d, | 3280 | 0x24, 0xb1, 0x60, 0x8e, 0xa7, 0x2d, 0xfc, 0x75, 0xe9, 0x29, 0xe3, 0x5c, |
| 3354 | 0x78, 0x4e, 0x59, 0x7e, 0xc6, 0x34, 0xb4, 0xc3, 0xff, 0xad, 0xfe, 0x04, | 3281 | 0xa4, 0x0e, 0xe6, 0x81, 0x08, 0xa2, 0x07, 0x2c, 0x34, 0x1f, 0x10, 0xc4, |
| 3355 | 0x8c, 0x29, 0xdb, 0xbc, 0x78, 0x3d, 0x89, 0x27, 0x2b, 0x61, 0xf4, 0xee, | 3282 | 0x5d, 0xa1, 0x33, 0xaa, 0xd7, 0x21, 0x81, 0x7d, 0xa3, 0x36, 0xee, 0xe9, |
| 3356 | 0x53, 0xb2, 0xe9, 0x2a, 0x18, 0xce, 0x4a, 0x25, 0x9b, 0xd2, 0x20, 0x79, | 3283 | 0x88, 0xe0, 0x42, 0x52, 0x0e, 0x5e, 0x21, 0x86, 0xfd, 0x26, 0x8e, 0x8d, |
| 3357 | 0xa3, 0x36, 0x1e, 0x35, 0x8d, 0xec, 0x65, 0xbe, 0xac, 0x4e, 0xde, 0x2e, | 3284 | 0x1e, 0x97, 0xae, 0x6b, 0x14, 0x22, 0x68, 0x8a, 0x23, 0xd2, 0x5e, 0x87, |
| 3358 | 0x06, 0x95, 0x63, 0x04, 0xf1, 0x6c, 0xfe, 0x7d, 0xcc, 0xfb, 0xa4, 0x86, | 3285 | 0x06, 0xae, 0xdb, 0x59, 0x52, 0x3b, 0xed, 0xa0, 0xe0, 0x36, 0x40, 0xfa, |
| 3359 | 0x49, 0xed, 0xe4, 0xc0, 0x27, 0xa4, 0x86, 0x05, 0x48, 0x44, 0x15, 0x7b, | 3286 | 0x0f, 0x73, 0xdf, 0x53, 0x45, 0xa5, 0xea, 0xaf, 0xf5, 0x66, 0x3e, 0x30, |
| 3360 | 0xf2, 0x9e, 0xd3, 0x8d, 0x10, 0xf0, 0xb7, 0xf9, 0x70, 0xd1, 0x1c, 0xb6, | 3287 | 0xe5, 0xf4, 0x0e, 0x7e, 0x7e, 0x6b, 0xaa, 0xba, 0xff, 0xbc, 0x03, 0x36, |
| 3361 | 0xea, 0xb1, 0x16, 0xe7, 0x5b, 0xb9, 0x07, 0xcb, 0x54, 0x44, 0x66, 0x96, | 3288 | 0x1a, 0x0f, 0x56, 0xf6, 0x9f, 0x7d, 0x8a, 0x16, 0x7c, 0x58, 0xd2, 0xf9, |
| 3362 | 0x8e, 0x15, 0xe1, 0x58, 0x11, 0x7c, 0x92, 0x13, 0xa2, 0xd2, 0x36, 0xe2, | 3289 | 0xa4, 0x54, 0x34, 0xf0, 0xfa, 0xdf, 0x13, 0x4a, 0xdd, 0xe4, 0xcb, 0xdc, |
| 3363 | 0x0b, 0x30, 0x19, 0x47, 0x04, 0x57, 0x0a, 0x5b, 0xfc, 0xa8, 0x09, 0x43, | 3290 | 0xcb, 0xa2, 0x6d, 0x60, 0x94, 0xcf, 0x83, 0xe9, 0xa4, 0x9b, 0xa5, 0xcd, |
| 3364 | 0x6d, 0x56, 0xb1, 0x3d, 0xaf, 0x29, 0xdd, 0x79, 0xe8, 0x5e, 0xdb, 0x8c, | 3291 | 0xe7, 0xcb, 0x51, 0xda, 0xc7, 0x5c, 0xf0, 0xb6, 0x19, 0x3b, 0x1c, 0x13, |
| 3365 | 0x1e, 0xc6, 0x51, 0xc6, 0xc3, 0xba, 0x76, 0x4c, 0x55, 0x36, 0x4e, 0x07, | 3292 | 0x75, 0xde, 0x0e, 0x63, 0x6b, 0x05, 0xab, 0x0e, 0x16, 0x8d, 0xd5, 0x63, |
| 3366 | 0x50, 0x3d, 0xf5, 0x99, 0x78, 0x9f, 0x7a, 0xf8, 0xc6, 0xbd, 0xac, 0x17, | 3293 | 0x89, 0x17, 0x8a, 0x4d, 0xcc, 0xcd, 0x8d, 0x93, 0x16, 0xe7, 0xe9, 0xdc, |
| 3367 | 0xc9, 0x00, 0xaa, 0xdc, 0xb9, 0x85, 0xf8, 0xb8, 0xad, 0x0e, 0x17, 0x39, | 3294 | 0x14, 0x88, 0x7a, 0xbd, 0x62, 0xe5, 0x64, 0x5f, 0x25, 0x5f, 0x07, 0xc6, |
| 3368 | 0x5f, 0xf4, 0x2f, 0x03, 0xf0, 0x4e, 0x05, 0xe0, 0x9b, 0x52, 0x30, 0xd3, | 3295 | 0x0d, 0xbc, 0xe9, 0xdf, 0x80, 0x48, 0x90, 0x15, 0x03, 0x93, 0x3a, 0x7f, |
| 3369 | 0x1e, 0x80, 0x67, 0x46, 0xfe, 0x56, 0x10, 0x30, 0xa7, 0xb1, 0x5d, 0x6f, | 3296 | 0xd6, 0x8a, 0xd5, 0x93, 0x8c, 0xdf, 0x7c, 0x9d, 0x3b, 0x37, 0x88, 0x48, |
| 3370 | 0xc0, 0x78, 0x9e, 0x45, 0xda, 0xfc, 0x19, 0x06, 0xdc, 0xef, 0x2a, 0x9e, | 3297 | 0xa0, 0xf3, 0xe5, 0xf3, 0x1c, 0xb2, 0x99, 0x43, 0xc7, 0xfe, 0x97, 0x1c, |
| 3371 | 0xca, 0x6b, 0x08, 0x1d, 0x10, 0xa2, 0xd1, 0x16, 0x22, 0x96, 0xf4, 0x60, | 3298 | 0x7a, 0xa8, 0x64, 0x21, 0xd7, 0x52, 0xcd, 0x97, 0x5e, 0xc6, 0xe2, 0xef, |
| 3372 | 0xd6, 0x1c, 0x8e, 0x06, 0xb8, 0x8e, 0x61, 0x4b, 0x6a, 0x8e, 0x0f, 0xea, | 3299 | 0x6b, 0x75, 0x7b, 0x3b, 0xc7, 0xa3, 0x07, 0x74, 0x0e, 0xf7, 0x32, 0x87, |
| 3373 | 0x8c, 0x91, 0x39, 0xc7, 0xa8, 0x37, 0x4f, 0xa8, 0x4a, 0xef, 0xf4, 0x1e, | 3300 | 0x35, 0x9e, 0x2d, 0xb1, 0x69, 0x1c, 0x76, 0x73, 0x10, 0x5a, 0x1f, 0x8e, |
| 3374 | 0xc1, 0x98, 0xfa, 0x1e, 0xf0, 0x0a, 0x51, 0xd3, 0xd6, 0x34, 0x70, 0x9e, | 3301 | 0x2a, 0xbc, 0xed, 0x2b, 0xf5, 0xf1, 0x32, 0xed, 0x13, 0x39, 0xf8, 0x2c, |
| 3375 | 0xda, 0x3c, 0x13, 0x8b, 0xf5, 0x0e, 0x29, 0xc0, 0xfa, 0x39, 0x1f, 0xfc, | 3302 | 0xf1, 0x08, 0x12, 0xd2, 0xbb, 0x9e, 0x52, 0x33, 0x7e, 0x2a, 0xfb, 0x2c, |
| 3376 | 0x53, 0xff, 0xc5, 0x3a, 0x2b, 0x44, 0xe1, 0x5e, 0x81, 0x77, 0xad, 0x6c, | 3303 | 0x79, 0xf9, 0x9c, 0xd0, 0xf7, 0x8f, 0xc2, 0x49, 0x6b, 0x3c, 0xf6, 0x5a, |
| 3377 | 0xbc, 0x02, 0x46, 0xea, 0x24, 0xc2, 0xb8, 0xf4, 0xa2, 0x10, 0xdb, 0xdb, | 3304 | 0x57, 0x55, 0x70, 0x19, 0x12, 0xaf, 0xac, 0xd5, 0xf3, 0x35, 0x36, 0xa3, |
| 3378 | 0x43, 0x78, 0xcd, 0x32, 0x76, 0x7d, 0xec, 0x15, 0xb8, 0x98, 0xcc, 0x0e, | 3305 | 0x68, 0x48, 0xce, 0xd2, 0x37, 0x72, 0xa8, 0x51, 0xa8, 0x25, 0xaf, 0xa6, |
| 3379 | 0xd6, 0x53, 0xb7, 0xae, 0x29, 0x51, 0x54, 0xe5, 0x8d, 0xcc, 0x15, 0x85, | 3306 | 0xab, 0xb8, 0x2c, 0xb2, 0x36, 0xad, 0xe7, 0x59, 0xbd, 0xe3, 0xb2, 0xb0, |
| 3380 | 0x4b, 0x9f, 0x31, 0xf5, 0x9d, 0x4a, 0x10, 0x55, 0x27, 0x82, 0xe8, 0x98, | 3307 | 0xde, 0xac, 0xd6, 0xd1, 0xbd, 0xc4, 0x86, 0xe6, 0xb8, 0xcb, 0xdb, 0xa3, |
| 3381 | 0xf3, 0xa3, 0x62, 0x2a, 0x08, 0xef, 0xa4, 0x79, 0xfd, 0x41, 0xb8, 0xe3, | 3308 | 0xd8, 0x47, 0x8c, 0x7a, 0x69, 0x17, 0xc3, 0xac, 0xab, 0xbb, 0x4b, 0xd2, |
| 3382 | 0x58, 0x27, 0xd1, 0x8c, 0x8b, 0x2f, 0x1b, 0xf3, 0xc7, 0x89, 0x93, 0xed, | 3309 | 0x1d, 0x26, 0x4e, 0x77, 0xd7, 0x70, 0x3a, 0xcc, 0x5a, 0xba, 0x1b, 0x72, |
| 3383 | 0x88, 0xe2, 0x37, 0x05, 0x13, 0x17, 0x0b, 0x41, 0xa8, 0x27, 0x74, 0xd4, | 3310 | 0xaf, 0xae, 0xa5, 0x11, 0xe2, 0x94, 0x34, 0x56, 0xc1, 0xe9, 0x48, 0x0d, |
| 3384 | 0xbb, 0xf5, 0x4e, 0x47, 0xb5, 0xe9, 0x61, 0x5e, 0x1c, 0xe5, 0x61, 0xb7, | 3311 | 0xa7, 0xbd, 0x15, 0x9c, 0xee, 0x36, 0x34, 0x3e, 0x35, 0xf6, 0x36, 0xf1, |
| 3385 | 0x9e, 0x74, 0xf1, 0xd3, 0xa3, 0x74, 0xb0, 0xae, 0x6c, 0x98, 0x26, 0x95, | 3312 | 0xbe, 0x67, 0xa3, 0x30, 0x7e, 0xc0, 0xfd, 0xc3, 0x05, 0xc3, 0x3d, 0x35, |
| 3386 | 0xf9, 0xec, 0x9c, 0x75, 0x43, 0xec, 0x8f, 0xa5, 0x59, 0x47, 0x2a, 0xe0, | 3313 | 0xec, 0xf5, 0x68, 0xec, 0x19, 0x69, 0xdc, 0x63, 0xf0, 0x6e, 0x2f, 0x88, |
| 3387 | 0xb3, 0xd7, 0xb1, 0x8e, 0xb0, 0x38, 0xb9, 0xba, 0x5f, 0xa1, 0xf8, 0xec, | 3314 | 0x42, 0xae, 0x11, 0x32, 0x3b, 0x2c, 0x0a, 0x9d, 0xf3, 0x88, 0xbd, 0x67, |
| 3388 | 0xef, 0x6a, 0x7e, 0x88, 0x9a, 0x5f, 0xfc, 0x3f, 0x35, 0x5f, 0x85, 0x3a, | 3315 | 0x38, 0xa3, 0x81, 0xd8, 0xab, 0xfa, 0x4c, 0xcf, 0x8f, 0x11, 0x7b, 0xff, |
| 3389 | 0xe5, 0xc1, 0x98, 0x19, 0xc0, 0x6f, 0xac, 0xa6, 0x73, 0x8d, 0x08, 0x20, | 3316 | 0x29, 0xce, 0x46, 0x34, 0xd7, 0xea, 0xd8, 0x02, 0x8b, 0x4e, 0x68, 0xae, |
| 3390 | 0xd5, 0xa6, 0x23, 0x72, 0xc2, 0xc2, 0x8b, 0xdc, 0x5b, 0xdc, 0x71, 0x6b, | 3317 | 0x8d, 0x92, 0x30, 0x2c, 0xe4, 0x4b, 0xc6, 0xe2, 0x04, 0x14, 0xb6, 0x92, |
| 3391 | 0x3d, 0x04, 0x76, 0x92, 0x53, 0x15, 0xd4, 0x86, 0xbb, 0x27, 0x82, 0xd4, | 3318 | 0xdb, 0xde, 0xf4, 0x76, 0xf9, 0x2d, 0xb8, 0x01, 0xa7, 0xbb, 0x0c, 0x68, |
| 3392 | 0x29, 0x55, 0x59, 0x4f, 0x9d, 0xdf, 0x91, 0xbc, 0x21, 0xd2, 0x31, 0x23, | 3319 | 0x1d, 0x62, 0x4e, 0x54, 0xb1, 0x7b, 0x17, 0x39, 0xa3, 0x29, 0x90, 0x9d, |
| 3393 | 0x1e, 0x57, 0x12, 0xa9, 0xbf, 0x43, 0x49, 0x3b, 0x62, 0xd4, 0xd1, 0x05, | 3320 | 0x67, 0xa9, 0x37, 0xb6, 0xa4, 0x1b, 0x50, 0xf2, 0x86, 0xc3, 0x66, 0x56, |
| 3394 | 0x7d, 0x91, 0x83, 0x5d, 0x2e, 0x07, 0x67, 0x62, 0x25, 0xed, 0x58, 0x51, | 3321 | 0x43, 0x9b, 0xe7, 0xae, 0x86, 0xae, 0x85, 0x71, 0x58, 0xed, 0x36, 0x1a, |
| 3395 | 0x28, 0xf1, 0xef, 0x01, 0xea, 0xe7, 0xf5, 0xb6, 0x92, 0x76, 0xbe, 0x4a, | 3322 | 0x8e, 0x7a, 0xb9, 0x13, 0x42, 0xe3, 0x15, 0xe8, 0x3a, 0x6e, 0xd3, 0x7e, |
| 3396 | 0xff, 0xd3, 0xcb, 0xf1, 0x1e, 0x99, 0x36, 0xb2, 0xbd, 0xcc, 0xcf, 0x25, | 3323 | 0x38, 0xf5, 0x81, 0x97, 0xf9, 0xc0, 0x7c, 0x5c, 0x9c, 0x75, 0xaa, 0xf5, |
| 3397 | 0x62, 0x63, 0x92, 0x19, 0x9c, 0xaf, 0xa5, 0xa6, 0x36, 0x07, 0x18, 0xe3, | 3324 | 0xa0, 0x6f, 0x5c, 0x63, 0xec, 0x57, 0xea, 0x4d, 0xcf, 0xc0, 0x1d, 0xdd, |
| 3398 | 0x75, 0x71, 0x9a, 0xde, 0x62, 0x98, 0xfd, 0x46, 0xf3, 0x46, 0x74, 0x98, | 3325 | 0x4a, 0x79, 0x4b, 0xa3, 0x88, 0x4c, 0xd8, 0xa8, 0x3b, 0xd8, 0x8a, 0x97, |
| 3399 | 0x7c, 0x1f, 0x2d, 0x6b, 0xe9, 0x30, 0xfd, 0xc4, 0x28, 0xf3, 0xf4, 0x36, | 3326 | 0xba, 0x22, 0x38, 0x7b, 0xab, 0xfe, 0x3e, 0x8a, 0x7a, 0xe2, 0x70, 0xd3, |
| 3400 | 0x9f, 0x9d, 0xcc, 0x1b, 0xe9, 0x2e, 0x57, 0x53, 0xa5, 0xaf, 0x90, 0x31, | 3327 | 0xb5, 0x51, 0x2c, 0x99, 0xa8, 0x62, 0xb2, 0xc1, 0xfb, 0x89, 0xb8, 0x8b, |
| 3401 | 0x49, 0x6f, 0x11, 0xc1, 0x5b, 0x2d, 0x52, 0x5f, 0x1b, 0xa8, 0xaf, 0x8b, | 3328 | 0x98, 0x9c, 0xe7, 0x9d, 0x11, 0xdb, 0x9c, 0x0c, 0xf6, 0xd2, 0xa6, 0xd7, |
| 3402 | 0xba, 0x2a, 0xf1, 0x70, 0x4d, 0x84, 0x5a, 0x42, 0x5e, 0xc9, 0xcb, 0x4b, | 3329 | 0xc9, 0xf1, 0xe7, 0x93, 0xbb, 0x66, 0x2c, 0xda, 0xbf, 0x62, 0x59, 0xa1, |
| 3403 | 0x49, 0x21, 0xaa, 0xec, 0x20, 0x2a, 0x27, 0xcc, 0xf4, 0x7a, 0x25, 0x16, | 3330 | 0x73, 0x09, 0x22, 0x58, 0x34, 0x21, 0x07, 0x8e, 0xe9, 0x0a, 0x33, 0x6a, |
| 3404 | 0x31, 0x95, 0xbb, 0xd8, 0xce, 0x1c, 0xce, 0x6d, 0xf2, 0xba, 0xde, 0xf6, | 3331 | 0x89, 0x0d, 0xc4, 0xbb, 0xe6, 0x57, 0x93, 0x71, 0xba, 0x62, 0x69, 0xdb, |
| 3405 | 0x84, 0x10, 0x21, 0x5b, 0x47, 0xcd, 0x84, 0x49, 0xdc, 0xc4, 0xfa, 0x8e, | 3332 | 0xd0, 0xcd, 0xb8, 0xa4, 0xce, 0x24, 0x93, 0xd9, 0x51, 0x62, 0x7d, 0xdb, |
| 3406 | 0xb8, 0xcf, 0x75, 0x04, 0xe7, 0x16, 0xc8, 0xe7, 0x08, 0xf9, 0x1c, 0xc6, | 3333 | 0xf1, 0x08, 0xea, 0x0e, 0xfc, 0x97, 0x32, 0x02, 0xe6, 0x42, 0xb7, 0x22, |
| 3407 | 0x9b, 0xb7, 0x70, 0x9a, 0x5a, 0xeb, 0xe9, 0x27, 0xa7, 0xb3, 0xe1, 0xa1, | 3334 | 0x3e, 0x0b, 0x99, 0x7a, 0x72, 0xc8, 0x45, 0xc4, 0xf1, 0xd8, 0xfe, 0x9d, |
| 3408 | 0x2d, 0xde, 0x6f, 0xf1, 0x71, 0xbf, 0xe4, 0x34, 0xdb, 0xbc, 0x78, 0x21, | 3335 | 0x6a, 0x09, 0xc7, 0xdf, 0xbb, 0xbe, 0x19, 0x6d, 0xcb, 0x64, 0x7e, 0x2b, |
| 3409 | 0x89, 0xcd, 0xc4, 0x47, 0xe6, 0x29, 0x25, 0xeb, 0x90, 0xdb, 0xa9, 0x0a, | 3336 | 0xf7, 0x9f, 0x4d, 0x17, 0x3a, 0x13, 0x8c, 0xdd, 0x49, 0xb8, 0xb8, 0x6a, |
| 3410 | 0x25, 0x4b, 0x17, 0xf5, 0x0d, 0xa7, 0xcf, 0xf0, 0x6d, 0x2f, 0x39, 0xdd, | 3337 | 0x4c, 0xe6, 0x8e, 0xa1, 0x0e, 0xcd, 0x13, 0x5e, 0xf6, 0x84, 0x88, 0xa1, |
| 3411 | 0x17, 0xbe, 0x95, 0xd3, 0x2c, 0xbe, 0xcc, 0xf7, 0x33, 0xf9, 0x83, 0x98, | 3338 | 0xf1, 0x44, 0x0c, 0xfb, 0x8e, 0xeb, 0xfc, 0x8c, 0xc1, 0x1a, 0xf3, 0x66, |
| 3412 | 0xf1, 0xf9, 0x11, 0x99, 0xf2, 0x21, 0x30, 0xa5, 0x92, 0x5f, 0x0a, 0xfd, | 3339 | 0x3b, 0x44, 0xa1, 0x9f, 0xf9, 0x39, 0xd3, 0x2f, 0xda, 0xd1, 0x3e, 0x2e, |
| 3413 | 0x41, 0x36, 0x1e, 0x80, 0x91, 0x3e, 0x89, 0x08, 0x12, 0x13, 0x1a, 0xfe, | 3340 | 0xa7, 0xb3, 0xc2, 0x0b, 0x1f, 0x80, 0x87, 0x76, 0xd6, 0x65, 0xfb, 0x84, |
| 3414 | 0xaa, 0xc5, 0x87, 0x63, 0x31, 0x23, 0xb3, 0x93, 0x3c, 0x5d, 0x39, 0x37, | 3341 | 0x8b, 0x15, 0xba, 0x7e, 0x94, 0x75, 0xfe, 0xe8, 0x7a, 0x6a, 0xf0, 0x4e, |
| 3415 | 0xc4, 0x88, 0x8c, 0x68, 0xd4, 0x53, 0xe2, 0xab, 0xaf, 0xd9, 0x0f, 0x6d, | 3342 | 0xa1, 0x58, 0x5f, 0xa9, 0x79, 0xbd, 0x7c, 0xf5, 0xb1, 0xfe, 0x59, 0x62, |
| 3416 | 0xca, 0xe5, 0xe0, 0x1e, 0x8f, 0x9d, 0x8d, 0x6a, 0x30, 0x76, 0xfd, 0x84, | 3343 | 0xdd, 0xb8, 0xce, 0x2d, 0x03, 0x33, 0xfe, 0x25, 0xb5, 0x3d, 0x99, 0x65, |
| 3417 | 0xb8, 0xb8, 0x30, 0x21, 0x44, 0x67, 0xbb, 0x79, 0xee, 0x23, 0xaf, 0x41, | 3344 | 0xad, 0x9b, 0xc7, 0xbc, 0xaa, 0xe6, 0x13, 0x5a, 0x74, 0x6e, 0xcd, 0xab, |
| 3418 | 0x2d, 0x54, 0x71, 0x7e, 0xae, 0x34, 0x7e, 0xd5, 0x94, 0x06, 0xff, 0x01, | 3345 | 0xe5, 0x93, 0x85, 0x33, 0x8c, 0xdd, 0xe1, 0xff, 0x73, 0x5d, 0xb2, 0x90, |
| 3419 | 0x77, 0xfc, 0xeb, 0x6f, 0x32, 0x8a, 0xcf, 0xf3, 0x12, 0x9f, 0x42, 0x04, | 3346 | 0x38, 0x60, 0xa0, 0xa5, 0x23, 0x8a, 0x6b, 0x96, 0xb6, 0x39, 0xcd, 0x88, |
| 3420 | 0x6c, 0x33, 0x32, 0x4b, 0x3d, 0xdc, 0x97, 0x34, 0xb8, 0x7f, 0x4d, 0x4e, | 3347 | 0xe2, 0x26, 0xdf, 0x41, 0x13, 0x31, 0xb1, 0x9f, 0x39, 0x85, 0xf9, 0xd5, |
| 3421 | 0x33, 0xbf, 0x7b, 0x92, 0xb1, 0xe8, 0x16, 0xbe, 0x73, 0xa9, 0x58, 0xe2, | 3348 | 0x5c, 0x5b, 0xa9, 0xeb, 0x55, 0x2d, 0xd7, 0xf2, 0xa5, 0x04, 0x6b, 0x93, |
| 3422 | 0x70, 0xbd, 0xb9, 0x15, 0x7f, 0xa3, 0x7b, 0x51, 0x63, 0xfe, 0x10, 0xcf, | 3349 | 0xae, 0x05, 0xbd, 0xac, 0x05, 0x16, 0x0e, 0x95, 0xb5, 0x6f, 0x1d, 0xbc, |
| 3423 | 0xba, 0x1a, 0x45, 0xec, 0x4f, 0x56, 0xa2, 0x91, 0x98, 0x7f, 0x82, 0x98, | 3350 | 0x4b, 0xce, 0x7e, 0xc5, 0xd7, 0xbe, 0x5d, 0x8c, 0x12, 0x73, 0xe3, 0x41, |
| 3424 | 0xdf, 0x3c, 0x4b, 0xad, 0x99, 0x6a, 0x67, 0x7e, 0x25, 0xdf, 0xbb, 0x94, | 3351 | 0xe6, 0xc6, 0xda, 0xf2, 0x25, 0xb5, 0xc6, 0xd3, 0xf5, 0x38, 0x64, 0x3d, |
| 3425 | 0xde, 0xd9, 0x1e, 0xd7, 0x57, 0x3d, 0x32, 0xed, 0xc1, 0x9b, 0xd6, 0x5a, | 3352 | 0xb6, 0xc4, 0x4d, 0xe3, 0x72, 0xd0, 0x15, 0xa7, 0xee, 0x24, 0x36, 0x3b, |
| 3426 | 0x7a, 0x98, 0xb4, 0xf2, 0xc8, 0xac, 0xc4, 0xfb, 0x3a, 0xe5, 0x41, 0x62, | 3353 | 0x1b, 0x0d, 0xa5, 0x5e, 0x4e, 0xa7, 0x42, 0xea, 0x98, 0xcc, 0xdd, 0x42, |
| 3427 | 0x3f, 0x7a, 0x87, 0x8a, 0x19, 0x6b, 0xad, 0xe2, 0x77, 0xb1, 0xef, 0x83, | 3354 | 0xba, 0xef, 0x93, 0x9b, 0xd6, 0x9a, 0x51, 0x2c, 0xaf, 0xe5, 0x60, 0xb2, |
| 3428 | 0x93, 0x29, 0xe1, 0xde, 0x6b, 0xc7, 0xac, 0x53, 0x4b, 0x70, 0xdf, 0x73, | 3355 | 0x96, 0x83, 0x1e, 0x73, 0xd0, 0x6d, 0x45, 0xf8, 0x09, 0x6d, 0x6c, 0x63, |
| 3429 | 0x1b, 0xaf, 0x23, 0xb5, 0x03, 0x25, 0x7d, 0xd7, 0xbb, 0x98, 0xaf, 0xe7, | 3356 | 0x0e, 0x6e, 0xa3, 0x4e, 0xfd, 0x7e, 0xa9, 0xc2, 0xfb, 0x99, 0x15, 0x22, |
| 3430 | 0xcb, 0xf8, 0x7e, 0x96, 0xed, 0xbe, 0x29, 0x68, 0x95, 0xc4, 0xf0, 0x3a, | 3357 | 0x35, 0x73, 0x9e, 0xf9, 0xe4, 0x5e, 0xe6, 0x51, 0xaf, 0xb5, 0x65, 0xce, |
| 3431 | 0x62, 0x7c, 0x92, 0x38, 0x79, 0x78, 0x5a, 0xe0, 0x0d, 0xd6, 0x89, 0x42, | 3358 | 0x33, 0x66, 0xab, 0x6b, 0xf9, 0xb4, 0xbb, 0xc6, 0xfb, 0x0f, 0xd4, 0xf2, |
| 3432 | 0xd2, 0xb0, 0x76, 0x2a, 0x46, 0xba, 0x47, 0x49, 0x64, 0x57, 0x96, 0x6b, | 3359 | 0x69, 0xf5, 0x97, 0xf2, 0x49, 0xf3, 0xd3, 0x0b, 0xbf, 0x43, 0xab, 0xd6, |
| 3433 | 0xe4, 0xdd, 0xac, 0x73, 0xb8, 0x43, 0xe0, 0xe7, 0x16, 0xb4, 0x00, 0xb1, | 3360 | 0x22, 0x79, 0xa1, 0xef, 0x97, 0xb3, 0x10, 0xfe, 0xd8, 0xd7, 0x67, 0xd9, |
| 3434 | 0xfd, 0x6f, 0xac, 0x59, 0xff, 0x51, 0xae, 0x91, 0xc9, 0x42, 0x25, 0x42, | 3361 | 0xb0, 0x82, 0xc6, 0x0a, 0xdf, 0x58, 0x41, 0x28, 0x7a, 0x59, 0x3b, 0x6d, |
| 3435 | 0x2d, 0xd4, 0x7c, 0x62, 0xb9, 0x9b, 0x58, 0x3e, 0x44, 0x3e, 0x8c, 0xd0, | 3362 | 0x2f, 0x2f, 0xb2, 0xf4, 0x9d, 0x5e, 0xb7, 0x96, 0xb1, 0xd8, 0x99, 0xfe, |
| 3436 | 0x13, 0x6c, 0x26, 0x96, 0x57, 0xb4, 0x19, 0xd9, 0x2e, 0xfa, 0x69, 0xcf, | 3363 | 0x05, 0xce, 0xb6, 0x2a, 0xd5, 0x97, 0xbe, 0xa4, 0xde, 0x60, 0x5c, 0x62, |
| 3437 | 0xea, 0x08, 0x71, 0x1a, 0xa7, 0x87, 0x1d, 0x41, 0x07, 0xe7, 0x4a, 0x4f, | 3364 | 0xd4, 0x1f, 0xeb, 0x27, 0xb3, 0xa2, 0x7f, 0x52, 0xfb, 0xa6, 0x11, 0x11, |
| 3438 | 0x1b, 0x91, 0x0e, 0xe2, 0x5f, 0x65, 0x9f, 0xd7, 0xd8, 0x67, 0xa1, 0x4e, | 3365 | 0x6f, 0xad, 0x58, 0x35, 0x09, 0xdc, 0x43, 0x3d, 0x73, 0x8e, 0x7e, 0x59, |
| 3439 | 0x7a, 0xed, 0x00, 0x5e, 0x60, 0x1f, 0x33, 0xe9, 0xb8, 0x3a, 0x21, 0xf1, | 3366 | 0xe3, 0xcb, 0xa1, 0x35, 0xbc, 0xdb, 0x19, 0xdf, 0xc2, 0xc3, 0xe5, 0xaa, |
| 3440 | 0x3f, 0x86, 0x44, 0x46, 0xe2, 0xdf, 0x59, 0xd6, 0x4a, 0xdf, 0x2f, 0xf1, | 3367 | 0x7f, 0xf6, 0x95, 0x65, 0x66, 0x1a, 0x23, 0x58, 0xc3, 0x9a, 0x76, 0x98, |
| 3441 | 0x4f, 0x0c, 0xe6, 0x89, 0xc1, 0x12, 0x07, 0x06, 0x24, 0x07, 0x6a, 0xe8, | 3368 | 0x7c, 0xf1, 0x6f, 0xc9, 0x28, 0x5e, 0x24, 0x5f, 0xbc, 0xc4, 0xfb, 0x1d, |
| 3442 | 0x2b, 0x4e, 0xd0, 0x57, 0x54, 0xd9, 0x51, 0xe2, 0x5f, 0xf2, 0xa1, 0xe4, | 3369 | 0xaa, 0xde, 0xcf, 0x9f, 0x45, 0x2a, 0x73, 0x5a, 0xf3, 0x05, 0xb5, 0xf7, |
| 3443 | 0x2d, 0xba, 0xca, 0x1c, 0x58, 0xef, 0xce, 0x27, 0x35, 0x20, 0x88, 0xa6, | 3370 | 0xa1, 0x72, 0x9b, 0x7f, 0x9a, 0x78, 0x7c, 0xb0, 0x24, 0x07, 0xfa, 0x78, |
| 3444 | 0x49, 0x43, 0x57, 0x95, 0xff, 0x14, 0x4f, 0x98, 0xe6, 0xfc, 0x76, 0xfa, | 3371 | 0x47, 0xbb, 0x5b, 0xce, 0x0e, 0x0a, 0x81, 0x8d, 0x49, 0x38, 0x66, 0xa0, |
| 3445 | 0x83, 0x2f, 0xdb, 0x62, 0xcc, 0x7b, 0x10, 0xf7, 0x9c, 0x08, 0xa9, 0x12, | 3372 | 0xef, 0xe1, 0x52, 0xe3, 0x66, 0xe8, 0x87, 0x02, 0xfa, 0x78, 0xd7, 0x95, |
| 3446 | 0xe7, 0xf5, 0x93, 0x41, 0x84, 0x26, 0x25, 0x0f, 0xb2, 0xe3, 0x11, 0x62, | 3373 | 0xac, 0x71, 0x8f, 0x95, 0xbf, 0xa4, 0xeb, 0xb0, 0xad, 0xa4, 0xb9, 0x4a, |
| 3447 | 0xc4, 0xf2, 0xfc, 0x96, 0xf8, 0x8f, 0x12, 0x17, 0xaa, 0xd2, 0xcd, 0x31, | 3374 | 0xa9, 0x8e, 0xb4, 0xd6, 0x4a, 0x79, 0x71, 0xb3, 0xe6, 0x94, 0x48, 0x14, |
| 3448 | 0x6a, 0xa6, 0x74, 0xb4, 0x4e, 0x1a, 0x03, 0x27, 0x70, 0x55, 0xbc, 0x11, | 3375 | 0xca, 0x6f, 0x4b, 0x2c, 0x61, 0xec, 0xf3, 0xc4, 0xd7, 0xbb, 0x5e, 0x3d, |
| 3449 | 0x33, 0x33, 0x7b, 0x99, 0xff, 0x6d, 0xc9, 0x18, 0xf7, 0x4a, 0xc7, 0xdd, | 3376 | 0x79, 0x21, 0x24, 0xaf, 0xf7, 0x90, 0xb7, 0x7b, 0x45, 0x5f, 0x85, 0xcf, |
| 3450 | 0x37, 0xc7, 0x70, 0x39, 0xe1, 0x6c, 0xb1, 0x82, 0x65, 0xaf, 0xad, 0x61, | 3377 | 0xb3, 0x22, 0x3b, 0x69, 0x8b, 0x1e, 0x6a, 0x94, 0x0d, 0xcc, 0x33, 0x77, |
| 3451 | 0x4b, 0x1e, 0xd8, 0x96, 0xa7, 0xd9, 0x35, 0x3d, 0xab, 0xfc, 0xb8, 0x86, | 3378 | 0xe1, 0x3c, 0x62, 0x4a, 0xe3, 0xca, 0xc0, 0x0f, 0xfc, 0xb5, 0xe4, 0xfc, |
| 3452 | 0xc3, 0x44, 0x7f, 0xbf, 0xee, 0x30, 0xff, 0x01, 0xea, 0x7d, 0xe9, 0x9d, | 3379 | 0x1b, 0xe8, 0x2b, 0xf2, 0x52, 0x05, 0x8b, 0x37, 0x50, 0x27, 0x55, 0xb1, |
| 3453 | 0x92, 0x07, 0xff, 0x79, 0xf9, 0x8c, 0xf9, 0x2b, 0x4f, 0xe9, 0xef, 0xdb, | 3380 | 0xf8, 0x43, 0x62, 0x31, 0x57, 0xc3, 0x62, 0x24, 0x48, 0x92, 0xef, 0x3e, |
| 3454 | 0xde, 0xc5, 0x33, 0xe7, 0x16, 0x62, 0xb0, 0x93, 0x18, 0xec, 0x61, 0x8e, | 3381 | 0xc7, 0x62, 0xef, 0x1f, 0xe0, 0xf7, 0x2f, 0x62, 0x6e, 0xbd, 0xe6, 0xf7, |
| 3455 | 0xb6, 0x5b, 0xe4, 0x36, 0xf3, 0x99, 0x55, 0x03, 0xf4, 0xd4, 0x4d, 0x7d, | 3382 | 0xc8, 0x1c, 0xe6, 0x58, 0x9f, 0x3b, 0x02, 0xf2, 0xb0, 0xc6, 0x9b, 0x8d, |
| 3456 | 0xd5, 0xd4, 0xb4, 0x7d, 0xd4, 0xa7, 0x77, 0xcd, 0x4a, 0x7a, 0x70, 0x87, | 3383 | 0xbe, 0x47, 0xeb, 0xb1, 0xe1, 0xd1, 0x18, 0x6e, 0x7e, 0x54, 0xa9, 0xd7, |
| 3457 | 0xda, 0xd9, 0x41, 0xdd, 0xec, 0x52, 0x1e, 0x72, 0xb1, 0x95, 0x26, 0x8e, | 3384 | 0x7c, 0x78, 0x2d, 0xe4, 0xa2, 0x5f, 0xa4, 0x27, 0x70, 0xa6, 0x25, 0xe9, |
| 3458 | 0x34, 0x25, 0x4d, 0x5f, 0xeb, 0x63, 0xed, 0x38, 0x14, 0x5e, 0xf4, 0xdf, | 3385 | 0xee, 0x83, 0xee, 0xa3, 0x7a, 0xad, 0xdb, 0x8b, 0x5a, 0xa3, 0x84, 0xd4, |
| 3459 | 0x32, 0x4e, 0xe9, 0xb9, 0x8d, 0xb8, 0x2c, 0xbf, 0xcf, 0xba, 0x3a, 0xb4, | 3386 | 0x28, 0xb2, 0xff, 0x7d, 0xe6, 0xfa, 0xa6, 0xa4, 0xcc, 0xef, 0xac, 0x70, |
| 3460 | 0x16, 0xaa, 0xbd, 0x56, 0x51, 0x6d, 0x79, 0xc6, 0x50, 0xf1, 0x03, 0xea, | 3387 | 0x7f, 0xca, 0xa7, 0x16, 0xdf, 0x6b, 0x98, 0x32, 0xdb, 0x6e, 0x54, 0xb1, |
| 3461 | 0xec, 0xc2, 0x26, 0x79, 0xd6, 0xe0, 0xba, 0xd8, 0x16, 0x31, 0x63, 0xd1, | 3388 | 0x76, 0x4d, 0x0d, 0x6b, 0x5f, 0x9b, 0xb2, 0xf1, 0x4b, 0xd6, 0x85, 0xcd, |
| 3462 | 0x83, 0xc4, 0xd5, 0xab, 0xdf, 0x39, 0x7b, 0x94, 0xf0, 0x36, 0x9c, 0x57, | 3389 | 0xe9, 0x28, 0x56, 0xeb, 0x1a, 0xef, 0xe8, 0x5e, 0x2a, 0x8a, 0x7e, 0xc6, |
| 3463 | 0x6f, 0xfa, 0x68, 0xa9, 0x0f, 0x6b, 0x6f, 0xe2, 0x4d, 0xc3, 0x33, 0x2d, | 3390 | 0xc5, 0x58, 0xaa, 0xa8, 0x37, 0xa8, 0x3b, 0x18, 0xcb, 0x55, 0xec, 0xa7, |
| 3464 | 0x51, 0xe2, 0x51, 0x62, 0x4d, 0x43, 0xe1, 0x95, 0x4a, 0xbc, 0xf1, 0x4a, | 3391 | 0xce, 0x50, 0x9f, 0xdc, 0x68, 0x56, 0x7b, 0xa9, 0xd1, 0x9a, 0x3e, 0xb9, |
| 3465 | 0x10, 0xaf, 0xbf, 0x22, 0xc4, 0x68, 0x12, 0x3c, 0xe1, 0x08, 0xf1, 0x50, | 3392 | 0xb1, 0xac, 0xf3, 0xd1, 0x25, 0x06, 0xa2, 0x38, 0xcd, 0x35, 0x7b, 0xfc, |
| 3466 | 0x72, 0x0d, 0x8e, 0xeb, 0xb1, 0xe8, 0x0b, 0xae, 0x8f, 0x75, 0xe8, 0x63, | 3393 | 0xaa, 0x3e, 0x79, 0x1d, 0xa9, 0xac, 0xd6, 0x27, 0x2e, 0x79, 0xbf, 0x54, |
| 3467 | 0x8d, 0x81, 0xb3, 0xb8, 0x21, 0x0a, 0x2e, 0xa7, 0x13, 0xe4, 0x5b, 0x09, | 3394 | 0xd1, 0x27, 0x5a, 0x8f, 0x68, 0x2d, 0xa2, 0xfb, 0x85, 0x6e, 0xf6, 0x0b, |
| 3468 | 0x8b, 0xae, 0xdf, 0xad, 0xd5, 0x70, 0x81, 0xf8, 0x0b, 0x11, 0x7f, 0xbf, | 3395 | 0x72, 0x5a, 0xeb, 0x15, 0xa3, 0x5b, 0xfa, 0x86, 0x19, 0x61, 0x8d, 0xcc, |
| 3469 | 0xa3, 0xe6, 0x5e, 0x2d, 0x6b, 0xee, 0xaa, 0x02, 0xf9, 0xd8, 0x16, 0x40, | 3396 | 0x30, 0x96, 0x97, 0x61, 0xd7, 0x23, 0x4d, 0x8c, 0x45, 0x23, 0x76, 0x38, |
| 3470 | 0x8f, 0x5c, 0x0b, 0x71, 0x38, 0x7c, 0x13, 0x87, 0xac, 0xbd, 0xdc, 0xf3, | 3397 | 0x2b, 0xac, 0x25, 0x9e, 0xe6, 0x4f, 0x6a, 0x90, 0xdf, 0xd3, 0x2e, 0x47, |
| 3471 | 0xb3, 0x96, 0x11, 0xef, 0x24, 0x1e, 0x67, 0x2c, 0xc3, 0xe9, 0xa0, 0x9f, | 3398 | 0x35, 0xc7, 0x32, 0xfe, 0x73, 0xe3, 0xff, 0x5e, 0x1b, 0xd7, 0xf3, 0xb3, |
| 3472 | 0x1d, 0x76, 0x31, 0x49, 0xed, 0x8d, 0x49, 0x5c, 0x12, 0x87, 0xcc, 0xc9, | 3399 | 0xac, 0xd1, 0x7a, 0xcd, 0x8f, 0xac, 0x2a, 0xee, 0xd1, 0xdc, 0xe4, 0xfd, |
| 3473 | 0x3e, 0xf6, 0x39, 0xcd, 0x3e, 0x63, 0x65, 0x3f, 0xfb, 0x1e, 0x12, 0x69, | 3400 | 0x19, 0x2e, 0xd0, 0xc6, 0x37, 0xbf, 0x14, 0x47, 0x9b, 0x79, 0xa1, 0xe3, |
| 3474 | 0xe9, 0x67, 0xa3, 0xc4, 0xe0, 0x3e, 0xd7, 0xcf, 0x4a, 0xff, 0x2a, 0xbd, | 3401 | 0xf8, 0x09, 0xd7, 0xea, 0x78, 0xdb, 0x78, 0x87, 0x3e, 0x3e, 0x47, 0x1f, |
| 3475 | 0xab, 0x8c, 0xb3, 0xdd, 0x8d, 0xb3, 0xfb, 0x26, 0x0e, 0xa9, 0x61, 0xb5, | 3402 | 0xff, 0xf2, 0xd1, 0x80, 0xdc, 0x84, 0x4f, 0x0d, 0xfa, 0x78, 0x3b, 0x71, |
| 3476 | 0x12, 0x7f, 0x0f, 0x60, 0xec, 0xa5, 0x1a, 0x84, 0xcc, 0x3b, 0x71, 0x3e, | 3403 | 0xf3, 0x63, 0xff, 0x7a, 0xb4, 0xb7, 0x26, 0xdd, 0x0f, 0xcc, 0xb9, 0x7a, |
| 3477 | 0xf3, 0x80, 0x1a, 0x31, 0xa1, 0xd7, 0xdb, 0x25, 0x3c, 0x6e, 0x2e, 0xa6, | 3404 | 0x0b, 0x7b, 0x09, 0x7d, 0xa7, 0xe8, 0x67, 0xdd, 0xeb, 0x1c, 0xa3, 0x7f, |
| 3478 | 0x90, 0xcf, 0xbf, 0x23, 0xf2, 0x61, 0xc3, 0x39, 0xeb, 0x7a, 0xd2, 0x01, | 3405 | 0x99, 0xcb, 0x15, 0x0d, 0xd2, 0x6e, 0x56, 0xfd, 0xdb, 0x51, 0xf3, 0x6f, |
| 3479 | 0x7a, 0xc4, 0x1b, 0xc2, 0x13, 0x33, 0xce, 0x6d, 0xa1, 0x2f, 0x6b, 0xf2, | 3406 | 0x66, 0x6a, 0x1b, 0xcf, 0xd1, 0xf5, 0x54, 0xeb, 0xd1, 0xfb, 0x2b, 0xfd, |
| 3480 | 0x96, 0xfc, 0xdd, 0x9a, 0xc2, 0xfb, 0x02, 0x75, 0xa5, 0x75, 0xaa, 0xf4, | 3407 | 0x92, 0x19, 0xdc, 0x5a, 0x89, 0x55, 0x5d, 0x90, 0xb7, 0x5e, 0x2c, 0xea, |
| 3481 | 0x74, 0x23, 0xe4, 0xdc, 0xa8, 0x59, 0xf2, 0x77, 0xb1, 0xc2, 0xa7, 0xaa, | 3408 | 0x9a, 0xdd, 0xcf, 0x9a, 0xcd, 0x9e, 0xc9, 0x94, 0x83, 0x83, 0x48, 0x4d, |
| 3482 | 0xd4, 0x73, 0x4f, 0x9b, 0x1c, 0x37, 0x4d, 0x0d, 0x59, 0x1c, 0xfb, 0x1b, | 3409 | 0x73, 0xaf, 0xbd, 0xa7, 0x91, 0x0a, 0xd9, 0x4f, 0x0d, 0x9d, 0x67, 0xef, |
| 3483 | 0x5d, 0x1e, 0x21, 0x06, 0x87, 0xa5, 0xd7, 0xa2, 0x2f, 0xe1, 0x59, 0x7d, | 3410 | 0x93, 0x31, 0x64, 0x6e, 0xa6, 0xa2, 0x27, 0x6f, 0xad, 0xd5, 0xe9, 0xfe, |
| 3484 | 0x89, 0xa6, 0xee, 0xf6, 0xc2, 0x94, 0x6d, 0x8e, 0xf2, 0x10, 0xd7, 0xa0, | 3411 | 0x9a, 0xae, 0xbc, 0xbf, 0x76, 0x4e, 0x9e, 0xba, 0x72, 0xee, 0x1c, 0x7d, |
| 3485 | 0x99, 0x83, 0x4a, 0x9a, 0xb5, 0x79, 0x2f, 0xf1, 0xd5, 0xc3, 0x1a, 0x7c, | 3412 | 0x97, 0xcb, 0x2d, 0xfd, 0xac, 0xfb, 0x80, 0x37, 0xfc, 0x9f, 0x29, 0x2c, |
| 3486 | 0xd9, 0x6a, 0x26, 0x87, 0x05, 0xeb, 0xd0, 0x0d, 0xb1, 0xcf, 0x5c, 0x3c, | 3413 | 0x6c, 0xac, 0xe8, 0x8e, 0xcf, 0xef, 0x6c, 0x89, 0x8d, 0xe3, 0x17, 0x55, |
| 3487 | 0xd3, 0xc9, 0xf3, 0x5c, 0x9c, 0x71, 0x57, 0xb3, 0x76, 0xaf, 0x63, 0xbd, | 3414 | 0xa6, 0xe3, 0x2e, 0x13, 0xf5, 0x4a, 0x59, 0xcb, 0x42, 0x14, 0x4b, 0x33, |
| 3488 | 0xe6, 0x69, 0x91, 0x39, 0xfd, 0x32, 0x26, 0x1a, 0x57, 0xb5, 0x19, 0x03, | 3415 | 0xaa, 0x18, 0x97, 0x05, 0x0d, 0xca, 0x96, 0xe0, 0x6e, 0xc6, 0x07, 0xb6, |
| 3489 | 0x1b, 0xbd, 0x01, 0xe4, 0x88, 0xf7, 0x57, 0x59, 0x83, 0xf2, 0xdc, 0xd3, | 3416 | 0x15, 0x0c, 0x5a, 0x23, 0x45, 0x39, 0xc4, 0x5e, 0x2e, 0xcf, 0x3e, 0x2c, |
| 3490 | 0xc9, 0xa2, 0x91, 0xca, 0x62, 0x04, 0x1b, 0xb9, 0xa7, 0x3c, 0x03, 0x39, | 3417 | 0xdc, 0x0f, 0xad, 0x6f, 0xf5, 0x79, 0x77, 0xeb, 0x3e, 0x8e, 0xef, 0x83, |
| 3491 | 0xff, 0x18, 0x2b, 0x9d, 0x91, 0xb7, 0xb3, 0xb6, 0x8d, 0x97, 0xb9, 0x7d, | 3418 | 0xb4, 0x67, 0xee, 0xdc, 0x10, 0x8f, 0x95, 0xfe, 0x4a, 0x3d, 0x16, 0x97, |
| 3492 | 0x05, 0x09, 0x4b, 0x72, 0x7b, 0x9e, 0xb5, 0x6d, 0xdc, 0xe5, 0xb6, 0x91, | 3419 | 0x39, 0xbd, 0x47, 0x84, 0x73, 0x9e, 0xa8, 0xe8, 0xe7, 0x41, 0xad, 0x9f, |
| 3493 | 0x92, 0x7c, 0xae, 0x28, 0xd7, 0xb4, 0x4f, 0x20, 0x39, 0x7c, 0x6b, 0x3d, | 3420 | 0x5d, 0x8d, 0xc7, 0x31, 0x4f, 0xce, 0x9e, 0x40, 0x6a, 0xe0, 0x82, 0x29, |
| 3494 | 0x93, 0x78, 0x5e, 0xeb, 0x93, 0xde, 0x36, 0x9f, 0x97, 0x35, 0x49, 0xd6, | 3421 | 0xfb, 0x63, 0xd4, 0xcc, 0xeb, 0x6a, 0x7b, 0xad, 0xa8, 0xed, 0xd5, 0x36, |
| 3495 | 0xa2, 0xc5, 0xba, 0xa4, 0xc9, 0xfb, 0x84, 0x4c, 0xe3, 0xc4, 0x1e, 0xe1, | 3422 | 0xf5, 0x10, 0xed, 0xd6, 0x78, 0xac, 0xd6, 0x37, 0x23, 0x88, 0xa1, 0x69, |
| 3496 | 0x29, 0xdd, 0x49, 0x9c, 0xfb, 0xd0, 0x1b, 0x4c, 0xa5, 0xee, 0x43, 0x26, | 3423 | 0xd4, 0x63, 0x8d, 0x4f, 0xe6, 0x8e, 0xb0, 0xce, 0xc4, 0x8e, 0xef, 0xa8, |
| 3497 | 0x32, 0xa7, 0x61, 0x53, 0xbe, 0xa1, 0x2f, 0x60, 0x83, 0xef, 0x28, 0xb0, | 3424 | 0xd8, 0xfb, 0xba, 0xff, 0xa4, 0x59, 0xc9, 0xef, 0x13, 0xba, 0x4e, 0x58, |
| 3498 | 0xfe, 0x44, 0x43, 0xe6, 0x96, 0x3b, 0x89, 0x8f, 0x73, 0x9a, 0x16, 0x9a, | 3425 | 0xb0, 0x58, 0x77, 0xae, 0x1c, 0x93, 0xe1, 0x16, 0xf1, 0x91, 0x5a, 0x92, |
| 3499 | 0x58, 0x2e, 0xdf, 0xc1, 0x67, 0xb9, 0xdb, 0xde, 0x49, 0xa4, 0x7f, 0xdf, | 3426 | 0xf4, 0x12, 0xab, 0x85, 0xd6, 0x3e, 0x49, 0x6a, 0x9f, 0x18, 0x32, 0x27, |
| 3500 | 0x9d, 0xc4, 0x0b, 0xe4, 0xc7, 0x58, 0xe9, 0x4e, 0xc2, 0xf9, 0x5e, 0x8b, | 3427 | 0xfe, 0x85, 0xf6, 0x69, 0xfd, 0xa6, 0x6b, 0xa1, 0x83, 0x96, 0x51, 0xaf, |
| 3501 | 0x17, 0x33, 0x61, 0xec, 0xfe, 0xa8, 0x5d, 0xc5, 0xe5, 0x9c, 0x11, 0x39, | 3428 | 0xb3, 0xcd, 0x48, 0x52, 0x3b, 0x3b, 0x68, 0xfe, 0x6c, 0x3f, 0x4b, 0xac, |
| 3502 | 0x8e, 0xdd, 0xe8, 0x77, 0xef, 0x1f, 0x90, 0xf5, 0xdb, 0xbb, 0xf0, 0x4f, | 3429 | 0xe2, 0x3e, 0x75, 0x07, 0x1c, 0x5c, 0x33, 0x26, 0x9d, 0xa3, 0xb8, 0x40, |
| 3503 | 0xed, 0xf2, 0xfe, 0x21, 0x25, 0xd7, 0x38, 0xce, 0xe5, 0x43, 0xa3, 0xde, | 3430 | 0x0e, 0xf7, 0x06, 0xb5, 0x4e, 0xbc, 0x3a, 0x9d, 0x64, 0x4d, 0x77, 0xd0, |
| 3504 | 0xac, 0x67, 0x2d, 0xd8, 0xb1, 0x46, 0xc1, 0x43, 0xc9, 0x3b, 0x5d, 0x6c, | 3431 | 0xf5, 0xd9, 0x3e, 0x31, 0xd4, 0x8d, 0xe9, 0xb3, 0x0b, 0xd3, 0x26, 0xe3, |
| 3505 | 0x8f, 0x17, 0x8d, 0x74, 0x94, 0xcf, 0xee, 0x99, 0x90, 0x35, 0xf2, 0x71, | 3432 | 0xe4, 0x98, 0x47, 0x39, 0xee, 0xa2, 0xfd, 0x44, 0x23, 0xfb, 0x2d, 0xa5, |
| 3506 | 0x9e, 0x17, 0xa1, 0x35, 0xda, 0xbd, 0xaa, 0xc8, 0x37, 0x45, 0xae, 0x28, | 3433 | 0xfa, 0x59, 0x0f, 0x2c, 0xd6, 0xdc, 0x5e, 0xb4, 0x0f, 0x8e, 0x88, 0xd4, |
| 3507 | 0x86, 0x73, 0x18, 0xf2, 0x8e, 0x20, 0x71, 0xce, 0xab, 0x18, 0xf3, 0x1f, | 3434 | 0x40, 0x23, 0x52, 0xfd, 0x31, 0x78, 0xce, 0x3a, 0xa1, 0x7f, 0x63, 0x98, |
| 3508 | 0x7a, 0x8d, 0x54, 0xbd, 0x8b, 0x99, 0xc7, 0x79, 0x76, 0x93, 0x7f, 0x7b, | 3435 | 0xd3, 0x24, 0xc0, 0xe3, 0xc5, 0x3f, 0xe7, 0xba, 0xa4, 0xb3, 0x85, 0x18, |
| 3509 | 0xe5, 0xb9, 0x0f, 0x1b, 0x39, 0xe6, 0x07, 0x6b, 0xe4, 0x59, 0xf4, 0x73, | 3436 | 0x6b, 0xf9, 0xd3, 0x54, 0xbe, 0x05, 0xa9, 0x21, 0x07, 0x9e, 0xfb, 0x3a, |
| 3510 | 0x91, 0x5d, 0x66, 0x38, 0x0b, 0x8a, 0xc6, 0xdc, 0x80, 0xfa, 0x24, 0x35, | 3437 | 0xe7, 0x15, 0xbe, 0x30, 0xef, 0xd9, 0xca, 0x3c, 0xfa, 0xe2, 0x7a, 0xad, |
| 3511 | 0xfc, 0x71, 0x6a, 0xb8, 0xf4, 0x2c, 0xbd, 0xf4, 0x2c, 0x4d, 0xf3, 0x71, | 3438 | 0xb5, 0x94, 0x7a, 0x82, 0x7a, 0xab, 0xe0, 0x68, 0xce, 0x11, 0x18, 0xf6, |
| 3512 | 0xaf, 0x91, 0xb9, 0x4e, 0xbd, 0xe3, 0x98, 0x7d, 0xbd, 0x8a, 0xd1, 0x7b, | 3439 | 0xf5, 0x9e, 0x3d, 0xae, 0x05, 0x99, 0xb8, 0x03, 0x9f, 0xa8, 0x42, 0x3c, |
| 3513 | 0x82, 0xfa, 0xbf, 0x53, 0x29, 0x8d, 0xb9, 0xb2, 0x3c, 0xe6, 0xdd, 0x05, | 3440 | 0xec, 0x8c, 0x54, 0x7e, 0x97, 0x90, 0x4e, 0x8e, 0xdc, 0x36, 0x5d, 0xed, |
| 3514 | 0x4d, 0xe9, 0xcc, 0x83, 0xba, 0x83, 0xe8, 0x36, 0x8b, 0xda, 0x51, 0xac, | 3441 | 0xb3, 0xd8, 0x17, 0x29, 0xf5, 0x22, 0xb9, 0xe9, 0x09, 0x6a, 0x9f, 0xe1, |
| 3515 | 0x24, 0xc7, 0x4c, 0xb9, 0x66, 0xc6, 0xd6, 0xca, 0xd8, 0x14, 0x5c, 0x69, | 3442 | 0xa9, 0x4f, 0xd4, 0x34, 0xb5, 0xcd, 0x88, 0xa7, 0xe7, 0x55, 0x39, 0xe8, |
| 3516 | 0x91, 0xef, 0xb6, 0xca, 0x38, 0x9c, 0x2a, 0x3b, 0x45, 0xed, 0x7d, 0xc5, | 3443 | 0xb0, 0xa3, 0xd4, 0xe3, 0xfc, 0x6e, 0xcf, 0xd4, 0x1c, 0x2f, 0xf1, 0x3c, |
| 3517 | 0x57, 0xd6, 0x2f, 0xcf, 0x16, 0x6b, 0x19, 0x9c, 0x30, 0x42, 0x3e, 0xb3, | 3444 | 0x72, 0xc2, 0xed, 0xde, 0x7f, 0xab, 0xcd, 0x5f, 0x9a, 0xab, 0xd4, 0x18, |
| 3518 | 0x0e, 0xa3, 0xb4, 0x81, 0x41, 0xb3, 0x19, 0x39, 0xdd, 0x8f, 0x2d, 0xd6, | 3445 | 0x6d, 0x78, 0xcb, 0xc7, 0xfd, 0x11, 0x24, 0x73, 0xb3, 0xf4, 0xcf, 0x99, |
| 3519 | 0x17, 0x82, 0x3a, 0xc9, 0xf7, 0x81, 0xa7, 0x5e, 0xe2, 0x19, 0xde, 0xbc, | 3446 | 0xe5, 0xb2, 0x7f, 0x8a, 0xf7, 0x5c, 0x2f, 0x64, 0x96, 0x77, 0xec, 0x9d, |
| 3520 | 0x86, 0x58, 0xf2, 0x39, 0x1c, 0xd3, 0x77, 0xd1, 0x0f, 0x6e, 0xc5, 0xeb, | 3447 | 0x07, 0xcd, 0xb5, 0x92, 0xf9, 0x60, 0x78, 0x75, 0x7c, 0xfe, 0x99, 0x2f, |
| 3521 | 0xae, 0x9e, 0xd8, 0xc4, 0xb3, 0x42, 0x0c, 0xd9, 0xb2, 0xd6, 0xdd, 0x32, | 3448 | 0x13, 0x47, 0xf8, 0xbe, 0x39, 0xa3, 0xf7, 0x50, 0xaa, 0xc7, 0xd7, 0x3d, |
| 3522 | 0xb6, 0xbc, 0x93, 0xb8, 0x24, 0xb2, 0xa5, 0x31, 0x9c, 0x6d, 0x56, 0x86, | 3449 | 0xfe, 0x08, 0x7b, 0xfc, 0x82, 0x6a, 0xf0, 0xde, 0x50, 0xcf, 0x75, 0xc8, |
| 3523 | 0x71, 0x7d, 0xa3, 0xbb, 0x3b, 0xa8, 0xbb, 0x15, 0xa6, 0xe7, 0xae, 0x4a, | 3450 | 0xfe, 0x11, 0xe1, 0x71, 0xad, 0xcb, 0xba, 0xa0, 0xfb, 0xaa, 0x11, 0xf6, |
| 3524 | 0xea, 0xee, 0x56, 0xeb, 0xcf, 0xf1, 0x14, 0x39, 0x5e, 0x65, 0x7e, 0x26, | 3451 | 0x55, 0x2e, 0x9e, 0x26, 0xc7, 0x9c, 0x2c, 0x77, 0xe2, 0xf9, 0xb2, 0x87, |
| 3525 | 0x9e, 0x0e, 0xcb, 0x31, 0xa9, 0xaf, 0x35, 0x4b, 0xc7, 0xff, 0x90, 0x63, | 3452 | 0x67, 0x58, 0x3f, 0x9e, 0x2a, 0x5b, 0xd8, 0xfa, 0x88, 0xcc, 0x58, 0x62, |
| 3526 | 0xca, 0x39, 0x64, 0x3d, 0x3c, 0x2f, 0x0e, 0xd5, 0xca, 0x31, 0x07, 0x95, | 3453 | 0x27, 0xce, 0xfb, 0xd2, 0xf9, 0x1e, 0xed, 0x36, 0x03, 0xb9, 0x7f, 0x25, |
| 3527 | 0x8d, 0xe4, 0xd4, 0x3c, 0x4b, 0xef, 0x0f, 0xc8, 0xa7, 0x05, 0xe6, 0xa7, | 3454 | 0x79, 0x85, 0x67, 0x14, 0x72, 0x66, 0x8b, 0xb0, 0x03, 0x1b, 0xdf, 0xe9, |
| 3528 | 0xf1, 0x36, 0x7c, 0x6a, 0x24, 0x9f, 0x9e, 0x58, 0xc2, 0xa7, 0x83, 0x79, | 3455 | 0x30, 0x70, 0x38, 0x3e, 0x84, 0xbe, 0xf6, 0xbb, 0xf9, 0xb2, 0xd0, 0x7a, |
| 3529 | 0xe9, 0xbd, 0x14, 0xb4, 0xb4, 0xfd, 0x29, 0x75, 0x45, 0x08, 0x7f, 0xdb, | 3456 | 0x40, 0xd7, 0x6a, 0xdd, 0x6f, 0x34, 0xe3, 0x4e, 0xf2, 0xd9, 0xd5, 0x4b, |
| 3530 | 0x0d, 0x71, 0xc6, 0xf5, 0xbe, 0xd2, 0xef, 0xa6, 0x95, 0xee, 0x59, 0xa9, | 3457 | 0x43, 0xfc, 0x3a, 0xdd, 0xd6, 0xf9, 0x92, 0xa0, 0x66, 0x68, 0x91, 0x59, |
| 3531 | 0x4f, 0xd5, 0x08, 0x92, 0x4f, 0x1b, 0xc8, 0xa7, 0x7e, 0xf2, 0xe9, 0x69, | 3458 | 0xe0, 0xa7, 0xd8, 0xc8, 0x7e, 0x21, 0xb3, 0x6c, 0x7f, 0xad, 0x37, 0xff, |
| 3532 | 0x53, 0x34, 0xee, 0x48, 0x1a, 0xa9, 0x79, 0xfa, 0x9a, 0x75, 0xe4, 0xd4, | 3459 | 0x29, 0x56, 0xea, 0x3e, 0xc3, 0x6f, 0x66, 0xbd, 0xab, 0xc6, 0xe1, 0x70, |
| 3533 | 0x3b, 0xe4, 0xd4, 0x48, 0xb1, 0xa4, 0x53, 0xfb, 0xb8, 0xee, 0xfb, 0xa9, | 3460 | 0xc5, 0x8f, 0x06, 0x9a, 0x0e, 0x16, 0x54, 0xbd, 0x27, 0x73, 0x93, 0x15, |
| 3534 | 0x53, 0xeb, 0x8a, 0x52, 0xdb, 0x1c, 0xe2, 0x3f, 0x80, 0xcf, 0xc9, 0xa9, | 3461 | 0x1d, 0xb5, 0xd0, 0xb9, 0x91, 0x7d, 0x40, 0xc3, 0x01, 0xcf, 0x5d, 0x27, |
| 3535 | 0xd9, 0xa4, 0xab, 0x53, 0xd6, 0xef, 0x90, 0xd8, 0x75, 0x5a, 0xf2, 0x89, | 3462 | 0x14, 0x63, 0xb1, 0x9b, 0xb1, 0x48, 0x86, 0x31, 0xb6, 0xdb, 0xcd, 0x41, |
| 3536 | 0x3a, 0x95, 0x2f, 0x36, 0x59, 0xa7, 0xb9, 0xa6, 0xf1, 0xbc, 0x71, 0xbd, | 3463 | 0x32, 0x6c, 0x16, 0x79, 0x71, 0x8b, 0xae, 0xb1, 0x75, 0xf5, 0xec, 0xbf, |
| 3537 | 0x87, 0x9c, 0xf2, 0xb5, 0x1b, 0xe7, 0x2e, 0x13, 0xbb, 0x81, 0x18, 0xf4, | 3464 | 0x59, 0x53, 0x27, 0x0d, 0xf6, 0x23, 0xba, 0x1f, 0x8f, 0x62, 0x2a, 0xdd, |
| 3538 | 0x88, 0x2d, 0xd7, 0xc4, 0x1a, 0xcb, 0x3a, 0x79, 0x90, 0xf8, 0xef, 0xa1, | 3465 | 0xc6, 0x3e, 0x29, 0x8a, 0xed, 0xe9, 0x1e, 0xea, 0x1a, 0x03, 0xc6, 0xc1, |
| 3539 | 0x66, 0xf4, 0x16, 0x6d, 0xec, 0x2d, 0x2e, 0xdd, 0x53, 0xd6, 0xa1, 0xdb, | 3466 | 0x4b, 0x6a, 0xe5, 0x17, 0xfa, 0x88, 0x4d, 0xe3, 0x9a, 0xc3, 0x6c, 0xb1, |
| 3540 | 0xee, 0xcb, 0xb8, 0xff, 0xf6, 0xed, 0xac, 0x57, 0xb7, 0x6d, 0x97, 0x7c, | 3467 | 0x91, 0xf9, 0x9b, 0x59, 0x46, 0xb1, 0x76, 0x8b, 0xee, 0xe1, 0xf5, 0x1d, |
| 3541 | 0x5d, 0xe6, 0x97, 0x7c, 0x1d, 0xce, 0xbf, 0xa6, 0xde, 0xfe, 0x1d, 0x79, | 3468 | 0x1c, 0xf6, 0xc7, 0x06, 0xa6, 0x17, 0x38, 0xd8, 0xd5, 0x2d, 0x13, 0x05, |
| 3542 | 0xa7, 0x26, 0xc4, 0x51, 0x4b, 0xde, 0x49, 0x48, 0xdf, 0xa3, 0x60, 0xc8, | 3469 | 0xe8, 0x5c, 0xfe, 0x6a, 0x4d, 0x81, 0x93, 0xfd, 0xbd, 0x3a, 0x03, 0x67, |
| 3543 | 0x92, 0xf7, 0x6a, 0x1d, 0x51, 0x15, 0x46, 0xe4, 0xfb, 0xf8, 0x4a, 0x64, | 3470 | 0x03, 0x6d, 0x91, 0x75, 0x4a, 0xb5, 0xa6, 0x4d, 0xe4, 0x2a, 0xf5, 0x26, |
| 3544 | 0xc3, 0x4e, 0xdc, 0xe7, 0xd6, 0x48, 0x43, 0xef, 0x63, 0xad, 0x9b, 0x2f, | 3471 | 0xe1, 0x64, 0xd9, 0xff, 0xcd, 0x4c, 0xb1, 0x27, 0x3b, 0xa8, 0xd4, 0x4e, |
| 3545 | 0x9f, 0xfd, 0x66, 0x78, 0x3e, 0x7b, 0x87, 0x75, 0xea, 0x28, 0xcf, 0x79, | 3472 | 0x62, 0xe9, 0xe3, 0x8e, 0xe1, 0x43, 0xec, 0xc4, 0xf7, 0xb6, 0xb2, 0xb7, |
| 3546 | 0x43, 0x85, 0xaf, 0xc4, 0x7c, 0x58, 0xc5, 0x88, 0x79, 0xf3, 0x8e, 0xd2, | 3473 | 0xfa, 0x3a, 0xdb, 0xb7, 0xb7, 0x8a, 0xdf, 0x24, 0x7f, 0x1b, 0xdd, 0x09, |
| 3547 | 0xd5, 0xb1, 0xc3, 0x7c, 0x36, 0x56, 0x58, 0xac, 0x51, 0xd4, 0x4c, 0x53, | 3474 | 0xe8, 0x7e, 0xa7, 0xa0, 0x22, 0x9e, 0x37, 0xfb, 0x38, 0xb5, 0xe0, 0x6f, |
| 3548 | 0x88, 0xad, 0xe6, 0x7f, 0x8b, 0x2d, 0xdf, 0x7a, 0x57, 0x88, 0x49, 0xc6, | 3475 | 0x96, 0x75, 0xc1, 0x9d, 0x5f, 0xf5, 0xd5, 0x6a, 0x6a, 0xa9, 0x8f, 0xc8, |
| 3549 | 0x70, 0xc1, 0xc2, 0x6e, 0x1f, 0x62, 0x7d, 0xd7, 0x59, 0xd7, 0x3f, 0x58, | 3476 | 0xf9, 0x61, 0xe5, 0x73, 0xcc, 0x59, 0x37, 0x7e, 0x49, 0x6d, 0xa6, 0x6f, |
| 3550 | 0x63, 0x64, 0x0a, 0x4a, 0xa2, 0x77, 0x83, 0x22, 0xbd, 0x9e, 0xa7, 0xab, | 3477 | 0x7a, 0xaa, 0x76, 0x59, 0xf5, 0x01, 0x9b, 0xc4, 0x6b, 0xe1, 0xac, 0xf9, |
| 3551 | 0x82, 0xef, 0xb4, 0xd0, 0x1b, 0x5d, 0x61, 0x06, 0xfd, 0xfc, 0x7e, 0xc6, | 3478 | 0x03, 0x36, 0x7d, 0x5e, 0xef, 0x62, 0xce, 0x9a, 0xf1, 0xc5, 0xb4, 0x51, |
| 3552 | 0x32, 0x22, 0x47, 0xf8, 0x77, 0x4b, 0x4a, 0x8e, 0x21, 0x44, 0x87, 0x25, | 3479 | 0xba, 0xd3, 0x15, 0xfc, 0xf8, 0xf8, 0xc8, 0x1b, 0x4e, 0xcc, 0x47, 0xa1, |
| 3553 | 0xef, 0xbb, 0x46, 0xd4, 0xdc, 0x44, 0x56, 0x54, 0x99, 0x17, 0xa8, 0x4d, | 3480 | 0x93, 0x39, 0x36, 0xfb, 0x4f, 0x1c, 0x6b, 0x5f, 0x0a, 0xfc, 0xa6, 0xfc, |
| 3554 | 0x46, 0x66, 0x44, 0x91, 0x3e, 0x3b, 0x0a, 0x57, 0x67, 0xf9, 0x4c, 0x9b, | 3481 | 0x5d, 0xf2, 0xbe, 0xd1, 0xd5, 0x82, 0xc2, 0x0c, 0x6d, 0x3c, 0xf4, 0x75, |
| 3555 | 0x88, 0xe0, 0xef, 0x5d, 0xff, 0x1c, 0xa5, 0x66, 0x35, 0xe0, 0x1f, 0x5c, | 3482 | 0x62, 0x32, 0x3f, 0x86, 0xfb, 0xd8, 0x46, 0xe0, 0x59, 0xd6, 0xdb, 0x63, |
| 3556 | 0xdd, 0x52, 0xb1, 0xed, 0x25, 0x23, 0xa5, 0x2a, 0x7b, 0x70, 0xc9, 0x32, | 3483 | 0xe4, 0x8c, 0xe6, 0xb4, 0x83, 0x32, 0x9f, 0x8f, 0x94, 0x92, 0x83, 0xa7, |
| 3557 | 0xf4, 0x9f, 0x32, 0x6e, 0x6a, 0xcd, 0x8b, 0x9d, 0x3c, 0x3f, 0x71, 0x8e, | 3484 | 0x99, 0xb7, 0xc7, 0xf9, 0x7c, 0x94, 0xf7, 0xdc, 0x4a, 0x7d, 0x77, 0xef, |
| 3558 | 0x6c, 0x9f, 0xb7, 0x56, 0xd1, 0x58, 0x3b, 0x7e, 0xdc, 0x22, 0x6b, 0xf7, | 3485 | 0x78, 0x3d, 0xbe, 0x3d, 0x1e, 0xc3, 0xd6, 0xf1, 0x80, 0x9a, 0x02, 0xb7, |
| 3559 | 0x2e, 0xf4, 0x34, 0xef, 0xe4, 0x47, 0x45, 0xdd, 0x94, 0xaa, 0x6c, 0xa2, | 3486 | 0x35, 0x72, 0xdf, 0x57, 0x89, 0xe7, 0xcd, 0x4b, 0xaf, 0xc3, 0x5a, 0x27, |
| 3560 | 0x27, 0x09, 0x4d, 0x85, 0xb0, 0x7d, 0xb5, 0x10, 0xab, 0x56, 0x3b, 0xf8, | 3487 | 0xe9, 0xde, 0xcd, 0xdc, 0xab, 0x3b, 0x08, 0xc7, 0x21, 0x8e, 0xfe, 0xd9, |
| 3561 | 0x3c, 0xd9, 0x14, 0x3f, 0xcb, 0x1a, 0x74, 0xa8, 0xd6, 0x48, 0x03, 0xbf, | 3488 | 0x5b, 0x2e, 0xd0, 0x44, 0xbd, 0xbf, 0xd4, 0x12, 0xeb, 0xc7, 0x57, 0x57, |
| 3562 | 0xc0, 0x66, 0x7a, 0xd9, 0x54, 0x5b, 0x0e, 0xb8, 0x53, 0xae, 0xf1, 0x17, | 3489 | 0x9e, 0x47, 0xd2, 0x79, 0x6a, 0x0b, 0x62, 0xb2, 0x44, 0x4c, 0x32, 0x36, |
| 3563 | 0xe8, 0x94, 0x1e, 0xd8, 0x0a, 0x49, 0xbf, 0xe5, 0xe2, 0xb7, 0x74, 0xaf, | 3490 | 0x4f, 0x97, 0x88, 0x4b, 0x6a, 0xc3, 0x93, 0x25, 0x8d, 0x6d, 0x1f, 0xcf, |
| 3564 | 0xc4, 0xd4, 0x1d, 0xc8, 0x8a, 0x4a, 0xd3, 0xe8, 0x9b, 0x65, 0xbd, 0xfd, | 3491 | 0x75, 0x0c, 0xa9, 0x2a, 0x56, 0x3e, 0x55, 0x4f, 0x78, 0xaf, 0x45, 0x50, |
| 3565 | 0x20, 0xb6, 0x5c, 0x7f, 0x78, 0x56, 0x7a, 0x60, 0x33, 0xba, 0x5e, 0x11, | 3492 | 0x6f, 0xe9, 0xdf, 0x76, 0xf0, 0x66, 0x31, 0xe1, 0x6c, 0x28, 0x6b, 0x3c, |
| 3566 | 0xcc, 0xc5, 0xf3, 0xcc, 0x45, 0xcc, 0x09, 0xd2, 0x32, 0xf0, 0xac, 0xe5, | 3493 | 0xfc, 0x6d, 0x0d, 0x0f, 0x6f, 0x47, 0xaa, 0xfa, 0x44, 0xce, 0x4c, 0x42, |
| 3567 | 0x84, 0x94, 0x41, 0xe5, 0x51, 0xf2, 0xa1, 0xcf, 0x5f, 0x49, 0x0f, 0xe1, | 3494 | 0x73, 0xdd, 0x62, 0xe7, 0xa6, 0xd2, 0xf0, 0x34, 0x7d, 0x9f, 0xa7, 0xc6, |
| 3568 | 0xd0, 0x3f, 0x78, 0x50, 0x7d, 0x40, 0x7a, 0x8a, 0x00, 0xb5, 0xa6, 0xa9, | 3495 | 0x76, 0xdf, 0x67, 0xc8, 0xc7, 0xa6, 0x8c, 0x2e, 0xf6, 0xd4, 0xf4, 0x87, |
| 3569 | 0x37, 0xc8, 0xfc, 0xec, 0x48, 0x4a, 0xff, 0x41, 0xac, 0x1f, 0xb8, 0x21, | 3496 | 0xbe, 0x33, 0xf3, 0x37, 0x2d, 0x3b, 0x75, 0x4c, 0x8e, 0x17, 0x71, 0x2b, |
| 3570 | 0x3a, 0xe9, 0x71, 0x3b, 0xcb, 0x1e, 0xf7, 0x89, 0xe9, 0x34, 0x3d, 0xb0, | 3497 | 0xfb, 0x1e, 0x3f, 0x44, 0xf5, 0x6e, 0x53, 0xbc, 0xf3, 0x43, 0xbc, 0xf3, |
| 3571 | 0xa6, 0xc8, 0x3b, 0xb6, 0x54, 0x1b, 0x0f, 0xa4, 0x8f, 0x4a, 0x1f, 0x22, | 3498 | 0x0f, 0xf9, 0x3c, 0x51, 0x4a, 0x66, 0x7b, 0x78, 0xe7, 0x27, 0xf9, 0x3c, |
| 3572 | 0xd7, 0xa0, 0xe3, 0x6a, 0x52, 0x62, 0x57, 0xc7, 0x70, 0xbb, 0x11, 0xc9, | 3499 | 0x59, 0x6a, 0xad, 0xd3, 0x67, 0x4c, 0x4e, 0x85, 0xac, 0x03, 0x2f, 0xab, |
| 3573 | 0x42, 0xde, 0xe9, 0xdc, 0xea, 0x2f, 0xa0, 0xa7, 0xbf, 0xe3, 0x39, 0xa0, | 3500 | 0x52, 0xbc, 0x12, 0x0e, 0xf6, 0xc0, 0x06, 0x1a, 0x0e, 0xce, 0xf1, 0xb3, |
| 3574 | 0x6f, 0x62, 0x2c, 0x86, 0x5f, 0x88, 0xba, 0xa4, 0x17, 0x7d, 0xee, 0x59, | 3501 | 0xfe, 0x6d, 0x49, 0xd7, 0x38, 0xcd, 0xf9, 0x83, 0xba, 0x26, 0x67, 0xae, |
| 3575 | 0x2e, 0xa2, 0xa7, 0xc9, 0xfb, 0x73, 0xf4, 0x09, 0x5e, 0x9e, 0x99, 0xf7, | 3502 | 0x14, 0x97, 0xd4, 0x47, 0x9e, 0x0c, 0x9f, 0xc6, 0x29, 0x35, 0x1f, 0xa9, |
| 3576 | 0x10, 0x4b, 0x5f, 0xb6, 0x0c, 0xbd, 0x5a, 0x8f, 0xec, 0x78, 0x1d, 0xcf, | 3503 | 0x99, 0xf9, 0x42, 0x4e, 0xaf, 0x30, 0xa4, 0xbb, 0xc8, 0xac, 0x72, 0x75, |
| 3577 | 0xa8, 0xf7, 0x53, 0x57, 0x2f, 0xe4, 0x1e, 0x65, 0x3d, 0xf7, 0xb4, 0x47, | 3504 | 0x67, 0x8d, 0xab, 0xbd, 0xa9, 0x1b, 0xeb, 0xaa, 0x77, 0x48, 0x39, 0x47, |
| 3578 | 0x78, 0x06, 0x68, 0x9c, 0xca, 0x8a, 0x7a, 0xfa, 0x41, 0x9e, 0x97, 0x51, | 3505 | 0x30, 0x8f, 0xd8, 0xd7, 0x35, 0x55, 0xf3, 0x8f, 0xfe, 0x4c, 0x7d, 0x67, |
| 3579 | 0xdb, 0x16, 0xa7, 0xdf, 0x5e, 0xdc, 0x2b, 0x0f, 0x7e, 0x68, 0x99, 0x70, | 3506 | 0x85, 0x09, 0x93, 0x7e, 0x08, 0x6f, 0xd5, 0x63, 0xd1, 0xda, 0x6f, 0x3e, |
| 3580 | 0xdc, 0xdf, 0x41, 0xbd, 0x7b, 0x9a, 0xe7, 0x68, 0x73, 0xb9, 0xde, 0x51, | 3507 | 0x29, 0x5f, 0xf7, 0x82, 0xd3, 0xf1, 0x1e, 0x7e, 0xa7, 0x7b, 0xc1, 0x4f, |
| 3581 | 0x8a, 0x4b, 0xad, 0xb0, 0x2d, 0xb4, 0xdc, 0x0b, 0xfd, 0xc1, 0xdb, 0xc4, | 3508 | 0x54, 0x2e, 0xde, 0xf3, 0x19, 0x67, 0x15, 0xd0, 0x45, 0xed, 0xf1, 0x3e, |
| 3582 | 0xb4, 0x4e, 0x7a, 0x1f, 0x5f, 0xa9, 0xdf, 0x9f, 0x4d, 0x37, 0xe8, 0x8f, | 3509 | 0x39, 0xa1, 0x83, 0x2a, 0x4a, 0xe0, 0x14, 0xfb, 0xb0, 0x23, 0x5d, 0x49, |
| 3583 | 0xb0, 0xde, 0xcd, 0x13, 0x2b, 0x4f, 0xac, 0xb6, 0x64, 0x2c, 0xf3, 0x32, | 3510 | 0x67, 0x17, 0xf7, 0x0b, 0x1d, 0x87, 0x5c, 0xb0, 0x93, 0x3a, 0x93, 0x73, |
| 3584 | 0x16, 0xfa, 0x4b, 0xe7, 0x7e, 0x0f, 0x7d, 0x49, 0x12, 0x08, 0xcd, 0xfd, | 3511 | 0xca, 0x1d, 0x5c, 0xa3, 0xb9, 0xf0, 0x3e, 0xfa, 0xe6, 0xb7, 0xed, 0x96, |
| 3585 | 0x35, 0x79, 0xe5, 0x69, 0x0d, 0x21, 0xbb, 0x8b, 0x31, 0xbe, 0xfa, 0xaf, | 3512 | 0xe7, 0x63, 0x57, 0xe9, 0x39, 0xc3, 0xf2, 0xb4, 0x5f, 0x52, 0x99, 0x5d, |
| 3586 | 0xdc, 0x9a, 0xfe, 0x49, 0xf4, 0x7b, 0xd8, 0x67, 0xc2, 0x02, 0x9e, 0x39, | 3513 | 0xb4, 0xe7, 0x2c, 0xed, 0x89, 0x78, 0x21, 0xb9, 0x31, 0x55, 0x59, 0x5f, |
| 3587 | 0x01, 0x3c, 0x3d, 0x19, 0xa3, 0x2f, 0xa7, 0x8f, 0x3c, 0xa1, 0xe1, 0xfb, | 3514 | 0xb0, 0xb4, 0x1d, 0x15, 0x7b, 0x38, 0xa6, 0x39, 0x4f, 0xf6, 0x9f, 0x62, |
| 3588 | 0xd3, 0x95, 0xf8, 0xd1, 0x74, 0x10, 0x3b, 0xa6, 0xdd, 0xbb, 0xae, 0x0d, | 3515 | 0x8d, 0xdd, 0x02, 0xfd, 0x3b, 0x85, 0xb6, 0xa1, 0x2d, 0xb1, 0x85, 0xf6, |
| 3589 | 0x75, 0x7c, 0xaf, 0x83, 0x67, 0xbb, 0x59, 0x6b, 0x35, 0x3e, 0xa2, 0x87, | 3516 | 0x1c, 0x8e, 0x57, 0xf8, 0x94, 0xdf, 0xf1, 0xbc, 0x92, 0xb1, 0xbe, 0x9e, |
| 3590 | 0x5a, 0xa1, 0x78, 0x10, 0x39, 0x00, 0x5d, 0x27, 0x6e, 0x6a, 0x5b, 0x7e, | 3517 | 0x78, 0xbf, 0x22, 0x9d, 0x60, 0x6c, 0xbb, 0xa8, 0xef, 0xab, 0x71, 0xde, |
| 3591 | 0x44, 0x2e, 0x0b, 0x61, 0xae, 0x96, 0x3a, 0xf9, 0xbc, 0xfb, 0x7d, 0x84, | 3518 | 0x57, 0xc1, 0xf2, 0xff, 0x00, 0xb0, 0x60, 0x72, 0xf9, 0x60, 0x17, 0x00, |
| 3592 | 0xfe, 0x31, 0x23, 0x31, 0x98, 0x27, 0x06, 0xf3, 0xc4, 0xe4, 0x4d, 0x4f, | 3519 | 0x00, 0x00 }; |
| 3593 | 0x2d, 0xb1, 0x1c, 0xa7, 0x8f, 0x7e, 0x4e, 0x94, 0xb0, 0xf1, 0xb5, 0x38, | ||
| 3594 | 0x6a, 0x9e, 0x24, 0x7f, 0x55, 0x6a, 0x28, 0xf0, 0xcf, 0xb9, 0x88, 0xbe, | ||
| 3595 | 0xa9, 0x28, 0xf3, 0xff, 0xb7, 0xe5, 0xfc, 0x9f, 0xf1, 0x97, 0xf4, 0xc2, | ||
| 3596 | 0x70, 0x66, 0xd1, 0x80, 0xc9, 0x7c, 0x83, 0xbe, 0x21, 0x3f, 0x34, 0xa8, | ||
| 3597 | 0x21, 0x1b, 0x0d, 0xc1, 0x18, 0x98, 0x84, 0xa7, 0x35, 0x08, 0xb9, 0x76, | ||
| 3598 | 0xa0, 0xe0, 0xae, 0x51, 0x88, 0x31, 0xea, 0x9b, 0xcc, 0xc1, 0xbf, 0xe7, | ||
| 3599 | 0xd0, 0xea, 0x61, 0x3e, 0x1c, 0xc8, 0xb3, 0x35, 0xf0, 0x69, 0x41, 0xde, | ||
| 3600 | 0x7d, 0xc6, 0xd2, 0xdd, 0xf8, 0xc2, 0x1d, 0xf3, 0x93, 0x42, 0x0a, 0xfb, | ||
| 3601 | 0xf3, 0x1f, 0x88, 0xfd, 0xe1, 0x92, 0xc6, 0xa7, 0x79, 0x3e, 0x0a, 0x1d, | ||
| 3602 | 0x28, 0x7b, 0x21, 0x72, 0xb8, 0x9a, 0xeb, 0xbd, 0x9a, 0x74, 0xbd, 0x3f, | ||
| 3603 | 0x6b, 0xe4, 0x80, 0x7a, 0xd4, 0x64, 0xb1, 0xab, 0xb9, 0x21, 0xc6, 0x62, | ||
| 3604 | 0x89, 0x40, 0x29, 0xa6, 0x84, 0x7e, 0x04, 0x15, 0xc4, 0xae, 0x3c, 0x23, | ||
| 3605 | 0x49, 0xfd, 0x90, 0xbf, 0x79, 0x3e, 0x51, 0x9d, 0x88, 0x97, 0xeb, 0x72, | ||
| 3606 | 0x1e, 0x93, 0x6d, 0x81, 0xb2, 0x5f, 0x5d, 0xf4, 0x22, 0x1d, 0x7c, 0x26, | ||
| 3607 | 0xbd, 0xc8, 0x57, 0xa2, 0x2f, 0xdc, 0x71, 0x53, 0x73, 0xb2, 0x7c, 0x63, | ||
| 3608 | 0x34, 0x2f, 0xef, 0xb4, 0x5a, 0xe8, 0x88, 0x15, 0x9c, 0x62, 0xe4, 0x47, | ||
| 3609 | 0x5a, 0x63, 0xfa, 0x30, 0xc7, 0x73, 0x74, 0x9d, 0x5c, 0xde, 0x43, 0xbf, | ||
| 3610 | 0xcc, 0x77, 0x8a, 0x2d, 0xec, 0x23, 0xb5, 0xec, 0x2f, 0xb8, 0xd6, 0x2f, | ||
| 3611 | 0x9a, 0x25, 0xb6, 0x87, 0xf3, 0x6f, 0x79, 0x54, 0x53, 0xae, 0x33, 0x91, | ||
| 3612 | 0x1a, 0x66, 0x3c, 0x0b, 0xba, 0xf4, 0xd6, 0x0e, 0xb5, 0x2d, 0xe1, 0xf6, | ||
| 3613 | 0xcf, 0xaa, 0x32, 0x0e, 0x37, 0x1e, 0xb6, 0x49, 0xcd, 0x32, 0x32, 0xa7, | ||
| 3614 | 0x90, 0x70, 0xfa, 0xa5, 0x39, 0x58, 0x26, 0x63, 0x68, 0x8a, 0xf4, 0x33, | ||
| 3615 | 0x9e, 0x43, 0x61, 0x57, 0x0f, 0xf9, 0x8c, 0xf3, 0xe5, 0x3d, 0x1b, 0x2a, | ||
| 3616 | 0x21, 0xb0, 0x22, 0xe9, 0x9e, 0xf9, 0xcb, 0xff, 0x5f, 0x43, 0xa5, 0x0f, | ||
| 3617 | 0x91, 0x58, 0xfc, 0x5f, 0x69, 0xd7, 0x8a, 0xc0, 0xa8, 0x1a, 0x00, 0x00, | ||
| 3618 | 0x00 }; | ||
| 3619 | 3520 | ||
| 3620 | static const u32 bnx2_TPAT_b06FwData[(0x0/4) + 1] = { 0x0 }; | 3521 | static const u32 bnx2_TPAT_b06FwData[(0x0/4) + 1] = { 0x0 }; |
| 3621 | static const u32 bnx2_TPAT_b06FwRodata[(0x0/4) + 1] = { 0x0 }; | 3522 | static const u32 bnx2_TPAT_b06FwRodata[(0x0/4) + 1] = { 0x0 }; |
| 3622 | 3523 | ||
| 3623 | static struct fw_info bnx2_tpat_fw_06 = { | 3524 | static struct fw_info bnx2_tpat_fw_06 = { |
| 3624 | /* Firmware version: 4.4.22 */ | 3525 | /* Firmware version: 4.6.16 */ |
| 3625 | .ver_major = 0x4, | 3526 | .ver_major = 0x4, |
| 3626 | .ver_minor = 0x4, | 3527 | .ver_minor = 0x6, |
| 3627 | .ver_fix = 0x16, | 3528 | .ver_fix = 0x10, |
| 3628 | 3529 | ||
| 3629 | .start_addr = 0x08000488, | 3530 | .start_addr = 0x08000488, |
| 3630 | 3531 | ||
| 3631 | .text_addr = 0x08000400, | 3532 | .text_addr = 0x08000400, |
| 3632 | .text_len = 0x1aa4, | 3533 | .text_len = 0x175c, |
| 3633 | .text_index = 0x0, | 3534 | .text_index = 0x0, |
| 3634 | .gz_text = bnx2_TPAT_b06FwText, | 3535 | .gz_text = bnx2_TPAT_b06FwText, |
| 3635 | .gz_text_len = sizeof(bnx2_TPAT_b06FwText), | 3536 | .gz_text_len = sizeof(bnx2_TPAT_b06FwText), |
| @@ -3639,11 +3540,11 @@ static struct fw_info bnx2_tpat_fw_06 = { | |||
| 3639 | .data_index = 0x0, | 3540 | .data_index = 0x0, |
| 3640 | .data = bnx2_TPAT_b06FwData, | 3541 | .data = bnx2_TPAT_b06FwData, |
| 3641 | 3542 | ||
| 3642 | .sbss_addr = 0x08001ec0, | 3543 | .sbss_addr = 0x08001b80, |
| 3643 | .sbss_len = 0x44, | 3544 | .sbss_len = 0x44, |
| 3644 | .sbss_index = 0x0, | 3545 | .sbss_index = 0x0, |
| 3645 | 3546 | ||
| 3646 | .bss_addr = 0x08001f04, | 3547 | .bss_addr = 0x08001bc4, |
| 3647 | .bss_len = 0x450, | 3548 | .bss_len = 0x450, |
| 3648 | .bss_index = 0x0, | 3549 | .bss_index = 0x0, |
| 3649 | 3550 | ||
| @@ -3670,862 +3571,858 @@ static const struct cpu_reg cpu_reg_tpat = { | |||
| 3670 | }; | 3571 | }; |
| 3671 | 3572 | ||
| 3672 | static u8 bnx2_TXP_b06FwText[] = { | 3573 | static u8 bnx2_TXP_b06FwText[] = { |
| 3673 | 0xad, 0x7b, 0x0d, 0x70, 0x94, 0xf7, 0x79, 0xe7, 0xef, 0xbf, 0x1f, 0xd2, | 3574 | 0xad, 0x7b, 0x0f, 0x70, 0x54, 0xe7, 0x75, 0xef, 0xef, 0xee, 0x1f, 0x69, |
| 3674 | 0xae, 0xb4, 0x5a, 0xad, 0xf0, 0x82, 0x57, 0x89, 0x52, 0xf6, 0xf5, 0xbe, | 3575 | 0x57, 0x5a, 0xad, 0x2e, 0x78, 0xc1, 0xab, 0x54, 0x29, 0x7b, 0xd9, 0xbb, |
| 3675 | 0x2b, 0x2d, 0x96, 0x80, 0x77, 0x41, 0x04, 0x11, 0x6d, 0xcd, 0x56, 0x08, | 3576 | 0xd2, 0x1a, 0x09, 0xb8, 0x0b, 0xc2, 0x88, 0xe8, 0xd6, 0x6c, 0x85, 0x00, |
| 3676 | 0x21, 0x40, 0xd8, 0x32, 0x56, 0x92, 0x25, 0xc7, 0xd4, 0x2a, 0xc8, 0x20, | 3577 | 0x21, 0x64, 0x2c, 0x63, 0x25, 0x15, 0x7d, 0x9e, 0x5a, 0x0f, 0x64, 0x23, |
| 3677 | 0xdb, 0x18, 0x8b, 0x86, 0xe6, 0xe4, 0xd6, 0xad, 0xd6, 0x92, 0xc0, 0x60, | 3578 | 0xdb, 0xd8, 0x16, 0x35, 0x6d, 0xe5, 0xd4, 0xad, 0xd6, 0x92, 0xc0, 0xc2, |
| 3678 | 0x56, 0xbc, 0x22, 0x82, 0x08, 0x77, 0xee, 0x26, 0xb2, 0x25, 0x2c, 0xec, | 3579 | 0xac, 0xb8, 0x22, 0x0b, 0x11, 0xee, 0xf4, 0xbd, 0xc8, 0x96, 0xb0, 0xb0, |
| 3679 | 0xac, 0x58, 0x3b, 0xbd, 0xeb, 0xc5, 0x33, 0xc9, 0x58, 0x67, 0x6c, 0x4c, | 3580 | 0xb3, 0x62, 0xed, 0xa4, 0xaf, 0xd3, 0xcc, 0x34, 0xe3, 0x7d, 0xfe, 0x83, |
| 3680 | 0x72, 0xfe, 0xc8, 0x75, 0x3a, 0x3d, 0xf7, 0xe6, 0xee, 0xca, 0xf8, 0x83, | 3581 | 0x49, 0x1e, 0xb6, 0xd3, 0x4e, 0xe7, 0x3d, 0xa7, 0xf3, 0xde, 0x84, 0x17, |
| 3681 | 0xd8, 0x6e, 0x8c, 0xdd, 0x4c, 0x3a, 0x27, 0x52, 0xdb, 0xef, 0xfd, 0x9e, | 3582 | 0x63, 0x62, 0xa7, 0x89, 0xed, 0xe6, 0xa5, 0xf3, 0x44, 0xea, 0xf8, 0xbe, |
| 3682 | 0xf7, 0xdd, 0x05, 0xe2, 0xba, 0xd3, 0x99, 0xce, 0x69, 0x66, 0x67, 0xa5, | 3583 | 0xdf, 0xb9, 0x77, 0x17, 0x88, 0x9b, 0x4e, 0x67, 0x3a, 0x4f, 0x33, 0x9a, |
| 3683 | 0xf7, 0xe3, 0xf9, 0x3f, 0xdf, 0xcf, 0xef, 0x79, 0xfe, 0x7f, 0xd5, 0x03, | 3584 | 0xd5, 0xde, 0x3f, 0xdf, 0x77, 0xce, 0xf9, 0xce, 0xf9, 0x9d, 0xdf, 0x39, |
| 3684 | 0x15, 0x28, 0xfe, 0x54, 0xf1, 0xd3, 0x3c, 0x30, 0x78, 0x70, 0xd5, 0x8a, | 3585 | 0xdf, 0xa7, 0x06, 0xa0, 0x0a, 0xa5, 0x9f, 0x1a, 0xfe, 0xb6, 0x0c, 0x0d, |
| 3685 | 0xe6, 0x15, 0xf6, 0x05, 0x97, 0xc7, 0x23, 0x37, 0xbf, 0xaa, 0x80, 0xde, | 3586 | 0x1f, 0x4a, 0xad, 0xb9, 0x75, 0x0d, 0xff, 0xbc, 0x15, 0x6a, 0x85, 0x4f, |
| 3686 | 0x0f, 0xf0, 0x6f, 0xfa, 0xf9, 0xca, 0xbf, 0xed, 0x35, 0xfb, 0xc7, 0x0d, | 3587 | 0x6e, 0xde, 0xaa, 0x00, 0xfd, 0x3f, 0xc6, 0xbf, 0xeb, 0xe7, 0xf3, 0xff, |
| 3687 | 0x84, 0x4a, 0x7c, 0xc9, 0x07, 0x3e, 0x57, 0xea, 0xd2, 0xd7, 0xda, 0x74, | 3588 | 0xbe, 0xd7, 0x9c, 0x1f, 0x2f, 0xa0, 0x96, 0xe5, 0x92, 0x5f, 0x04, 0x3c, |
| 3688 | 0xf8, 0xdc, 0xa9, 0x93, 0xa9, 0xdd, 0x3a, 0x90, 0xce, 0x37, 0x46, 0x37, | 3589 | 0xe6, 0xcc, 0x17, 0xda, 0x75, 0x04, 0xbc, 0x66, 0xaf, 0xb9, 0x4f, 0x07, |
| 3689 | 0xe0, 0x53, 0x2b, 0x1b, 0xf6, 0x40, 0xae, 0x7f, 0x25, 0xf5, 0xc9, 0xd0, | 3590 | 0xd2, 0xf9, 0xa6, 0xd8, 0x16, 0xfc, 0xd2, 0xce, 0x44, 0x7c, 0x90, 0xeb, |
| 3690 | 0x4f, 0xd6, 0x6a, 0x1f, 0x4f, 0xb9, 0xe1, 0x0b, 0xa5, 0x4e, 0x23, 0x54, | 3591 | 0x9f, 0x37, 0x3f, 0x19, 0xf9, 0xf6, 0x46, 0xed, 0xe3, 0x19, 0x2f, 0x02, |
| 3691 | 0x0f, 0x5f, 0x1d, 0xdf, 0xf9, 0x0f, 0x0d, 0xd5, 0x6e, 0x04, 0x4b, 0xb4, | 3592 | 0xaa, 0x79, 0x1a, 0x6a, 0x03, 0x02, 0xf5, 0x7c, 0xe7, 0xcf, 0x1b, 0xfd, |
| 3692 | 0x5a, 0x30, 0x62, 0x22, 0xeb, 0x4b, 0x0d, 0xa0, 0x7c, 0x0d, 0xf0, 0x6e, | 3593 | 0x5e, 0x84, 0xcb, 0x63, 0xb5, 0x62, 0xcc, 0x42, 0x26, 0x60, 0x0e, 0xa1, |
| 3693 | 0x2e, 0x6e, 0x8c, 0x00, 0xe3, 0xae, 0x54, 0x3c, 0xfa, 0x22, 0x0c, 0x1c, | 3594 | 0x72, 0x03, 0xf0, 0x5e, 0x36, 0x61, 0x8c, 0x01, 0x53, 0x1e, 0x33, 0x11, |
| 3694 | 0x2a, 0x44, 0xd1, 0xce, 0xcf, 0x66, 0xf3, 0x33, 0x2b, 0xea, 0x45, 0xd6, | 3595 | 0x7b, 0x05, 0x06, 0x0e, 0x17, 0x62, 0xe8, 0xe0, 0xef, 0x0e, 0xeb, 0x53, |
| 3695 | 0xcd, 0xe7, 0x76, 0x35, 0x03, 0x1b, 0x73, 0x06, 0x0e, 0x9b, 0xf0, 0xd5, | 3596 | 0x3b, 0xe6, 0x47, 0xc6, 0xcb, 0xe7, 0xf6, 0xb6, 0x00, 0x5b, 0xb3, 0x06, |
| 3696 | 0xa6, 0x1e, 0xc6, 0x3a, 0x7e, 0x07, 0x53, 0x83, 0x78, 0x7d, 0x2c, 0x16, | 3597 | 0x8e, 0x58, 0x08, 0xd4, 0x99, 0x8f, 0x63, 0x13, 0x3f, 0xc3, 0xe6, 0x30, |
| 3697 | 0x7d, 0x0a, 0x5a, 0x46, 0x77, 0x6b, 0x83, 0x40, 0x63, 0x7f, 0x9f, 0xd2, | 3598 | 0xde, 0x9a, 0x8c, 0xc7, 0x9e, 0x83, 0xd6, 0xa7, 0x7b, 0xb5, 0x61, 0xa0, |
| 3698 | 0x7a, 0xdf, 0x50, 0x5a, 0xf7, 0x98, 0x82, 0x4f, 0xf1, 0xb9, 0xc6, 0xbc, | 3599 | 0x69, 0x70, 0x40, 0xd1, 0xfa, 0xdf, 0x56, 0xb4, 0x9e, 0x49, 0x05, 0x01, |
| 3699 | 0x7c, 0x0f, 0xe2, 0xd6, 0xbc, 0x0f, 0x97, 0xdc, 0xb2, 0xfe, 0xef, 0x52, | 3600 | 0x85, 0xcf, 0x35, 0xe5, 0xe5, 0x73, 0x18, 0xab, 0xf2, 0x01, 0x5c, 0xf2, |
| 3700 | 0xdf, 0x0a, 0x1e, 0xbd, 0x05, 0xa3, 0xe4, 0xc1, 0x9b, 0x52, 0x78, 0xb2, | 3601 | 0xca, 0xfc, 0xbf, 0x45, 0x7b, 0x2b, 0xf0, 0xe9, 0xad, 0x18, 0xa7, 0x0c, |
| 3701 | 0x39, 0x1e, 0x19, 0x86, 0xdc, 0x8f, 0x62, 0x43, 0x41, 0xbe, 0x35, 0x4a, | 3602 | 0x7e, 0x53, 0xc1, 0xb3, 0x2d, 0x89, 0xe8, 0x28, 0xe4, 0x7e, 0x0c, 0x5b, |
| 3702 | 0x6d, 0x59, 0xa3, 0x86, 0x65, 0x9d, 0x31, 0xca, 0x91, 0x0d, 0x69, 0x11, | 3603 | 0x0a, 0xf2, 0xa9, 0x51, 0x6b, 0xdb, 0x1e, 0x37, 0x6c, 0xfb, 0x8c, 0x51, |
| 3703 | 0x40, 0x61, 0xd8, 0x70, 0x21, 0x1d, 0x6a, 0x8b, 0x7a, 0xa0, 0x45, 0xee, | 3604 | 0x89, 0x8c, 0xaa, 0x45, 0x01, 0x05, 0xa3, 0x86, 0x07, 0x69, 0xb5, 0x3d, |
| 3704 | 0xc1, 0x3f, 0x51, 0xe6, 0x74, 0xc2, 0x0b, 0xe7, 0xf9, 0x5e, 0x94, 0x63, | 3605 | 0xe6, 0x83, 0x16, 0xbd, 0x17, 0xff, 0x4c, 0x9d, 0xd3, 0x49, 0x3f, 0xdc, |
| 3705 | 0x3e, 0xe4, 0x68, 0xed, 0xc9, 0x9c, 0x65, 0x5d, 0xd0, 0x3d, 0x38, 0x43, | 3606 | 0xe7, 0xfb, 0x51, 0x89, 0xa2, 0xea, 0x5a, 0xed, 0xd9, 0xac, 0x6d, 0x9f, |
| 3706 | 0xfd, 0x0c, 0xe7, 0xff, 0xc9, 0x9a, 0xa7, 0x6e, 0x46, 0xf5, 0xd2, 0xfa, | 3607 | 0xd7, 0x7d, 0x38, 0x43, 0xfb, 0x8c, 0xe6, 0xff, 0xd9, 0x2e, 0xd2, 0x36, |
| 3707 | 0x3e, 0x4c, 0x85, 0x2c, 0x6b, 0x9a, 0xf7, 0x0e, 0xe7, 0x4b, 0x7a, 0xb6, | 3608 | 0xe3, 0x7a, 0x79, 0xfe, 0x00, 0x66, 0x54, 0xdb, 0x9e, 0xe5, 0xbd, 0x23, |
| 3708 | 0x2c, 0x97, 0x6e, 0x59, 0xbb, 0xf5, 0xdf, 0x58, 0xbb, 0x7e, 0xeb, 0x59, | 3609 | 0xf9, 0xb2, 0x9d, 0x6d, 0xdb, 0xa3, 0xdb, 0xf6, 0x3e, 0xfd, 0x17, 0xf6, |
| 3709 | 0xcb, 0x7a, 0xcc, 0xb8, 0x09, 0x67, 0x27, 0xda, 0xd5, 0x96, 0xd9, 0x25, | 3610 | 0xde, 0x5f, 0x79, 0xd6, 0xb6, 0x9f, 0x32, 0x6e, 0xc2, 0xd9, 0x5c, 0x87, |
| 3710 | 0xc1, 0xcd, 0x93, 0x16, 0x2e, 0x18, 0x08, 0xb9, 0x52, 0x1d, 0x6a, 0xf3, | 3611 | 0xd2, 0x35, 0xbf, 0x3c, 0xbc, 0x63, 0xda, 0xc6, 0x79, 0x03, 0xaa, 0xc7, |
| 3711 | 0x6c, 0xa7, 0xda, 0x58, 0xd8, 0xae, 0x3a, 0xa6, 0xbf, 0xa5, 0x3a, 0x67, | 3612 | 0xdc, 0xa6, 0xec, 0x98, 0xef, 0x54, 0xb6, 0x16, 0x76, 0x2b, 0xdb, 0x66, |
| 3712 | 0x7b, 0xd5, 0xa6, 0x42, 0x04, 0x33, 0x66, 0x18, 0xd3, 0x66, 0x46, 0xb5, | 3613 | 0x7f, 0x57, 0xe9, 0x9c, 0xef, 0x57, 0xb6, 0x17, 0xa2, 0x98, 0xb3, 0x22, |
| 3713 | 0xcf, 0xf6, 0x28, 0x47, 0x8e, 0x41, 0xd5, 0x56, 0x28, 0xd1, 0xba, 0xae, | 3614 | 0x98, 0xb5, 0xfa, 0x94, 0x8e, 0xf9, 0x5e, 0xc5, 0xd5, 0x63, 0x58, 0x69, |
| 3714 | 0xc7, 0xcd, 0xb9, 0x14, 0x8e, 0x98, 0xe5, 0x5c, 0x67, 0xc1, 0xfa, 0x49, | 3615 | 0x2f, 0x94, 0xc7, 0xba, 0x6e, 0xc7, 0x1d, 0x59, 0x13, 0x13, 0x56, 0x25, |
| 3715 | 0xc3, 0x02, 0xe5, 0x34, 0x70, 0xb4, 0xf0, 0x18, 0xb6, 0x4d, 0x5a, 0x56, | 3616 | 0xe7, 0x59, 0xb4, 0xbf, 0xdd, 0xb8, 0x48, 0x3d, 0x0d, 0x1c, 0x2d, 0x3c, |
| 3716 | 0x3e, 0x09, 0xe4, 0x0b, 0xc0, 0x0f, 0xcc, 0x58, 0x77, 0xbf, 0xb2, 0xac, | 3617 | 0x85, 0xdb, 0xa7, 0x6d, 0x3b, 0x9f, 0x02, 0xf2, 0x05, 0xe0, 0xeb, 0x56, |
| 3717 | 0x4d, 0x71, 0x6b, 0xe9, 0x65, 0xa3, 0x31, 0xf1, 0x12, 0xfe, 0xaf, 0x35, | 3618 | 0xbc, 0x67, 0x50, 0xb1, 0xed, 0xed, 0x09, 0x7b, 0xc5, 0x15, 0xa3, 0x29, |
| 3718 | 0x15, 0x46, 0x36, 0x40, 0x1a, 0xc7, 0x68, 0xb3, 0xfb, 0xc6, 0xe0, 0x2b, | 3619 | 0xf9, 0x1a, 0xfe, 0xaf, 0x3d, 0x13, 0x41, 0x26, 0xc4, 0x31, 0x8e, 0x71, |
| 3719 | 0x4f, 0x8d, 0xe2, 0x17, 0x39, 0xf8, 0xca, 0x52, 0x59, 0x5c, 0xc8, 0x0d, | 3620 | 0xcd, 0x1e, 0x98, 0x44, 0xa0, 0xd2, 0x1c, 0xc7, 0x8f, 0xb2, 0x08, 0x54, |
| 3720 | 0x87, 0x7c, 0x88, 0x45, 0x36, 0xab, 0xec, 0xa0, 0x0b, 0xda, 0xc0, 0xdb, | 3621 | 0x98, 0x19, 0x9c, 0xcf, 0x8e, 0xaa, 0x01, 0xc4, 0xa3, 0x3b, 0x94, 0xcc, |
| 3721 | 0xd0, 0xa2, 0xb4, 0xc7, 0xc5, 0xf3, 0x4a, 0x9b, 0x7f, 0x09, 0x5a, 0xfa, | 3622 | 0xb0, 0x07, 0xda, 0xd0, 0xbb, 0xd0, 0x62, 0x5c, 0x8f, 0x0b, 0xaf, 0x2a, |
| 3722 | 0x37, 0x4a, 0xeb, 0xac, 0x75, 0x23, 0xed, 0x8a, 0xfb, 0xf0, 0x93, 0x06, | 3623 | 0x5a, 0xf1, 0x35, 0x68, 0xe9, 0x5f, 0x28, 0x5a, 0x67, 0x9d, 0x17, 0x69, |
| 3723 | 0xb1, 0xc9, 0x28, 0x56, 0xd8, 0xb6, 0xc9, 0x62, 0xd9, 0x35, 0xdb, 0xa4, | 3624 | 0x4f, 0x22, 0x80, 0x6f, 0x37, 0xca, 0x9a, 0x8c, 0x63, 0x8d, 0xb3, 0x36, |
| 3724 | 0x30, 0x4c, 0xbe, 0x0e, 0x93, 0xaf, 0x97, 0x0d, 0x2d, 0xf2, 0x24, 0xac, | 3625 | 0x19, 0xdc, 0x72, 0x6d, 0x6d, 0x4c, 0x8c, 0x52, 0xae, 0x23, 0x94, 0xeb, |
| 3725 | 0xa5, 0x7d, 0x86, 0xdc, 0x4b, 0x61, 0xb4, 0x60, 0x45, 0x83, 0xa9, 0x4b, | 3626 | 0x75, 0x43, 0x8b, 0x3e, 0x0b, 0x7b, 0xc5, 0x80, 0x21, 0xf7, 0x4c, 0x8c, |
| 3726 | 0xe4, 0x17, 0xd9, 0x2f, 0xa5, 0x7c, 0xd9, 0xea, 0xd4, 0xa7, 0xd6, 0x6b, | 3627 | 0x17, 0xec, 0x58, 0xd8, 0xbc, 0x44, 0x79, 0x91, 0xf9, 0x9c, 0x19, 0xc8, |
| 3727 | 0x6b, 0x22, 0x78, 0xa1, 0x10, 0xc6, 0x73, 0x85, 0x10, 0x9e, 0x2d, 0xb4, | 3628 | 0xd4, 0x9a, 0xbf, 0xb4, 0xdf, 0xdc, 0x10, 0xc5, 0xcb, 0x85, 0x08, 0x5e, |
| 3728 | 0xc3, 0x2c, 0x20, 0xb8, 0xad, 0xf0, 0x45, 0x7e, 0x6c, 0x21, 0xc0, 0xe7, | 3629 | 0x2a, 0xa8, 0x78, 0xb1, 0xd0, 0x01, 0xab, 0x80, 0xf0, 0xed, 0x85, 0x5f, |
| 3729 | 0xc9, 0x77, 0x70, 0x6b, 0xc1, 0xd3, 0x5b, 0x96, 0x42, 0xf7, 0x4f, 0x73, | 3630 | 0xe7, 0xc7, 0x36, 0x42, 0x7c, 0x9e, 0x72, 0x87, 0x77, 0x16, 0x7c, 0xfd, |
| 3730 | 0x43, 0x56, 0x85, 0x8e, 0xde, 0x9a, 0x94, 0x9e, 0xbe, 0x55, 0x05, 0x5a, | 3631 | 0x15, 0x26, 0x7a, 0xbe, 0x93, 0x1d, 0xb1, 0xab, 0x74, 0xf4, 0x2f, 0x31, |
| 3731 | 0xe8, 0x87, 0xdd, 0xaf, 0xe4, 0x5b, 0x3c, 0xfa, 0x71, 0x3f, 0xbc, 0xd4, | 3632 | 0xf5, 0xf4, 0x2a, 0x25, 0xd4, 0x4a, 0x3f, 0xec, 0x79, 0x23, 0xdf, 0xea, |
| 3732 | 0xff, 0xc6, 0x82, 0x65, 0x8d, 0x18, 0x07, 0x56, 0xee, 0x6a, 0xf9, 0x8b, | 3633 | 0xd3, 0x8f, 0x07, 0xe1, 0xa7, 0xfd, 0xb7, 0x16, 0x6c, 0x7b, 0xcc, 0x38, |
| 3733 | 0xf9, 0x6e, 0xbd, 0x0b, 0xd9, 0x42, 0x1f, 0x10, 0x4c, 0xf1, 0x9b, 0xa1, | 3634 | 0xb8, 0x76, 0x6f, 0xeb, 0x37, 0x8b, 0x3d, 0x7a, 0x37, 0x32, 0x85, 0x01, |
| 3734 | 0xb8, 0xbd, 0xa9, 0x3d, 0x7a, 0xee, 0x01, 0x8f, 0xe3, 0xcf, 0xe4, 0x81, | 3635 | 0x20, 0x6c, 0xf2, 0x93, 0xa1, 0xb8, 0xbb, 0xb9, 0x23, 0x76, 0xae, 0xdf, |
| 3735 | 0x7a, 0x7f, 0xce, 0x24, 0x0f, 0xe6, 0xe1, 0x20, 0x2a, 0xa2, 0x94, 0xef, | 3636 | 0xe7, 0xfa, 0x33, 0x65, 0xa0, 0xdd, 0x5f, 0xb2, 0x28, 0x83, 0xf5, 0x47, |
| 3736 | 0xe7, 0xe4, 0x33, 0x81, 0x1f, 0x16, 0x74, 0xf2, 0xd6, 0x44, 0x1e, 0xa3, | 3637 | 0x61, 0x54, 0xc5, 0xa8, 0xdf, 0xf7, 0x28, 0x67, 0x12, 0xdf, 0x28, 0xe8, |
| 3737 | 0xe4, 0xcf, 0x87, 0x5d, 0x13, 0xda, 0x78, 0x16, 0xda, 0x91, 0x29, 0x2c, | 3638 | 0x94, 0xad, 0x99, 0x32, 0xc6, 0x28, 0x5f, 0x00, 0x7b, 0x73, 0xda, 0x54, |
| 3738 | 0x47, 0x3a, 0x1c, 0xa2, 0x0f, 0xfe, 0x39, 0x1c, 0x1a, 0x5d, 0x38, 0x6e, | 3639 | 0x06, 0xda, 0xc4, 0x0c, 0x56, 0x23, 0x1d, 0x51, 0xe9, 0x83, 0x7f, 0x06, |
| 3739 | 0x62, 0x55, 0x28, 0x45, 0xfb, 0x26, 0xf1, 0x70, 0x19, 0xe2, 0xbd, 0x1f, | 3640 | 0x77, 0x8c, 0x6e, 0x1c, 0xb7, 0xb0, 0x4e, 0x35, 0xb9, 0xbe, 0x29, 0x3c, |
| 3740 | 0x2b, 0x85, 0xd7, 0xe2, 0x5d, 0x18, 0xa3, 0x3c, 0x5d, 0x79, 0x3f, 0xee, | 3641 | 0x5e, 0x81, 0x44, 0xff, 0xc7, 0x8a, 0x82, 0x37, 0x13, 0xdd, 0x98, 0xa4, |
| 3741 | 0x9f, 0xa8, 0xc0, 0xbd, 0x13, 0x16, 0xee, 0x4b, 0x22, 0x55, 0x41, 0x79, | 3642 | 0x3e, 0xdd, 0xf9, 0x20, 0x1e, 0xcc, 0x55, 0xe1, 0xfe, 0x9c, 0x8d, 0x07, |
| 3742 | 0x12, 0xc9, 0x78, 0xf4, 0x3d, 0x78, 0xd0, 0x9e, 0xef, 0x62, 0x2c, 0x6d, | 3643 | 0x52, 0x30, 0xab, 0xa8, 0x4f, 0x32, 0x95, 0x88, 0xbd, 0x0f, 0x1f, 0x3a, |
| 3743 | 0x40, 0xba, 0xcc, 0x87, 0x0d, 0xf9, 0x00, 0xe3, 0x31, 0x8d, 0xd3, 0x93, | 3644 | 0xf2, 0xdd, 0x8c, 0xa5, 0x2d, 0x48, 0x57, 0x04, 0xb0, 0x25, 0x1f, 0x62, |
| 3744 | 0x3e, 0x78, 0x57, 0xbb, 0x30, 0x15, 0x2e, 0x43, 0xa2, 0xde, 0xc5, 0x4f, | 3645 | 0x3c, 0xa6, 0x71, 0x7a, 0x3a, 0x00, 0xff, 0x7a, 0x0f, 0x66, 0x22, 0x15, |
| 3745 | 0x38, 0xd8, 0x36, 0x59, 0x17, 0xdc, 0x68, 0x7a, 0xb0, 0xd7, 0x74, 0x61, | 3646 | 0x48, 0x36, 0x78, 0xf8, 0x1b, 0x09, 0xb7, 0x4f, 0xd7, 0x87, 0xb7, 0x5a, |
| 3746 | 0x68, 0xc2, 0xb2, 0xda, 0x0d, 0x0b, 0x57, 0x57, 0x87, 0xf0, 0x3c, 0xf5, | 3647 | 0x3e, 0xec, 0xb7, 0x3c, 0x18, 0xc9, 0xd9, 0x76, 0x87, 0x61, 0xe3, 0xea, |
| 3747 | 0x77, 0xc0, 0x8c, 0xe0, 0x6c, 0xe1, 0x51, 0xf2, 0x12, 0x76, 0xf8, 0x35, | 3648 | 0x7a, 0x15, 0xdf, 0xa2, 0xfd, 0x0e, 0x5a, 0x51, 0x9c, 0x2d, 0x3c, 0x49, |
| 3748 | 0xc9, 0xbb, 0x49, 0xde, 0x4d, 0xf2, 0x6d, 0x0a, 0x9f, 0xe7, 0x19, 0x33, | 3649 | 0x59, 0x22, 0xae, 0xbc, 0x16, 0x65, 0xb7, 0x28, 0xbb, 0x45, 0xb9, 0x2d, |
| 3749 | 0x06, 0xe5, 0xf2, 0x93, 0x87, 0x4a, 0xf4, 0x93, 0x8f, 0x58, 0xd2, 0x82, | 3650 | 0x91, 0xf3, 0x55, 0xc6, 0x8c, 0x41, 0xbd, 0x82, 0x94, 0xa1, 0x1a, 0x83, |
| 3750 | 0x2b, 0xa9, 0x65, 0x77, 0x31, 0x79, 0x2d, 0xad, 0xb7, 0xac, 0x8f, 0x57, | 3651 | 0x94, 0x23, 0x9e, 0xb2, 0xe1, 0x49, 0x69, 0x99, 0xbd, 0x04, 0xaf, 0x15, |
| 3751 | 0x8b, 0x2c, 0xb4, 0xb9, 0xab, 0x4b, 0x62, 0xf4, 0xf7, 0xaa, 0x18, 0x57, | 3652 | 0x0d, 0xb6, 0xfd, 0xf1, 0x7a, 0xd1, 0x85, 0x6b, 0xee, 0xe9, 0x96, 0x18, |
| 3752 | 0x7f, 0x4b, 0xbd, 0x3d, 0x5e, 0xf0, 0x63, 0x70, 0xc2, 0xf6, 0xdb, 0x83, | 3653 | 0xfd, 0xed, 0x1a, 0xc6, 0xd5, 0xf7, 0x69, 0xb7, 0xa7, 0x0b, 0x41, 0x0c, |
| 3753 | 0x65, 0xe4, 0x5b, 0xf8, 0x2a, 0xe8, 0x71, 0xc6, 0x68, 0x3c, 0xc3, 0x18, | 3654 | 0xe7, 0x1c, 0xbf, 0x3d, 0x54, 0x41, 0xb9, 0x45, 0xae, 0x82, 0x9e, 0x60, |
| 3754 | 0xc5, 0x56, 0xf2, 0x7c, 0x9f, 0x19, 0x6f, 0xd9, 0xae, 0x3c, 0xd8, 0x94, | 3655 | 0x8c, 0x26, 0xfa, 0x18, 0xa3, 0xd8, 0x49, 0x99, 0x1f, 0xb0, 0x22, 0xe1, |
| 3755 | 0x0f, 0x07, 0xdb, 0x6f, 0xe0, 0x93, 0xf2, 0x4a, 0x0c, 0x52, 0xd6, 0x10, | 3656 | 0x8e, 0xe9, 0x44, 0xeb, 0x6e, 0xc5, 0x87, 0xed, 0xf9, 0xeb, 0x72, 0x52, |
| 3756 | 0xf9, 0x0b, 0x63, 0x37, 0xf9, 0x7c, 0xae, 0xc8, 0xe7, 0x74, 0x41, 0xd6, | 3657 | 0x5f, 0x89, 0x41, 0xea, 0xaa, 0x52, 0xbe, 0x08, 0xf6, 0x51, 0xce, 0x97, |
| 3757 | 0xfa, 0x3c, 0xaf, 0x25, 0x3e, 0x91, 0x5d, 0x94, 0x0a, 0x2b, 0x54, 0x04, | 3658 | 0x4a, 0x72, 0xce, 0x16, 0x64, 0xae, 0xcf, 0xca, 0x5a, 0x96, 0x13, 0x99, |
| 3758 | 0xb0, 0x3d, 0xff, 0x26, 0x6d, 0x51, 0x87, 0xbf, 0xa0, 0x0d, 0x5e, 0x60, | 3659 | 0xa5, 0x66, 0x44, 0x41, 0x55, 0x08, 0xbb, 0xf3, 0xef, 0x70, 0x2d, 0xea, |
| 3759 | 0x8c, 0xfc, 0xf0, 0x9a, 0xbf, 0x88, 0x3d, 0x1e, 0xa1, 0x1d, 0xb4, 0xd3, | 3660 | 0xf1, 0x4d, 0xae, 0xc1, 0xcb, 0x8c, 0x91, 0x6f, 0x5c, 0xf3, 0x17, 0x59, |
| 3760 | 0x59, 0x04, 0xd0, 0x5b, 0x48, 0xe3, 0xd0, 0x24, 0xd2, 0x33, 0xc6, 0x31, | 3661 | 0x8f, 0x27, 0xb8, 0x0e, 0xda, 0xe9, 0x0c, 0x42, 0xe8, 0x2f, 0xa4, 0x71, |
| 3761 | 0xc6, 0xfb, 0x12, 0xb8, 0xf5, 0xf2, 0x74, 0x48, 0xaf, 0xc0, 0xee, 0xe9, | 3662 | 0x78, 0x1a, 0xe9, 0x39, 0xe3, 0x18, 0xe3, 0x7d, 0x39, 0xbc, 0x7a, 0x65, |
| 3762 | 0x30, 0x06, 0x0a, 0x6d, 0x30, 0x27, 0xc2, 0xd8, 0x47, 0xdf, 0xbc, 0x92, | 3663 | 0x5a, 0xd5, 0xab, 0xb0, 0x6f, 0x36, 0x82, 0xa1, 0x42, 0x3b, 0xac, 0x5c, |
| 3763 | 0x4c, 0xdf, 0x17, 0x84, 0xf0, 0x1e, 0xc6, 0xfd, 0x7c, 0xe7, 0xb1, 0xc9, | 3664 | 0x04, 0x07, 0xe8, 0x9b, 0x1f, 0xa6, 0xd2, 0x0f, 0x84, 0x21, 0xb2, 0x47, |
| 3764 | 0x30, 0xfa, 0xa9, 0xa3, 0xcd, 0xc9, 0x78, 0x8b, 0x9f, 0xd7, 0xf6, 0xf2, | 3665 | 0xf0, 0x20, 0xdf, 0x79, 0x6a, 0x3a, 0x82, 0x41, 0xda, 0x68, 0x47, 0x2a, |
| 3765 | 0xda, 0x61, 0xea, 0xff, 0xbc, 0x31, 0x86, 0xde, 0x6e, 0x2d, 0x01, 0x84, | 3666 | 0xd1, 0x1a, 0xe4, 0xb5, 0xfd, 0xbc, 0x76, 0x84, 0xf6, 0x7f, 0xd5, 0x98, |
| 3766 | 0xb1, 0xc7, 0x44, 0x88, 0x2e, 0xfc, 0x08, 0xf3, 0x5b, 0xe2, 0x3c, 0xff, | 3667 | 0x44, 0x7f, 0x8f, 0x96, 0x04, 0x22, 0xb8, 0xcf, 0x82, 0x4a, 0x17, 0x7e, |
| 3767 | 0xbe, 0xa7, 0x50, 0x41, 0x39, 0x83, 0x88, 0xe8, 0x9f, 0x58, 0xde, 0x66, | 3668 | 0x82, 0xf8, 0x96, 0x7c, 0x95, 0xdf, 0xef, 0x2d, 0x54, 0x51, 0xdf, 0x30, |
| 3768 | 0xcb, 0xfa, 0xbe, 0x11, 0xbf, 0xf8, 0x96, 0xdb, 0x83, 0x87, 0x0a, 0x2e, | 3669 | 0xa2, 0xfa, 0x27, 0xb6, 0xbf, 0xc5, 0xb6, 0xbf, 0x66, 0x24, 0x2e, 0xfc, |
| 3769 | 0x0c, 0x4e, 0x57, 0xe0, 0x0f, 0x27, 0x3c, 0xb8, 0xb3, 0xbe, 0x02, 0x07, | 3670 | 0xd0, 0xeb, 0xc3, 0x63, 0x05, 0x0f, 0x86, 0x67, 0xab, 0xf0, 0xfb, 0x39, |
| 3770 | 0xa6, 0xd3, 0x18, 0x99, 0xac, 0x40, 0xdf, 0x04, 0x96, 0xee, 0x31, 0x46, | 3671 | 0x1f, 0xee, 0x6c, 0xa8, 0xc2, 0xc1, 0xd9, 0x34, 0xc6, 0xa6, 0xab, 0x30, |
| 3771 | 0x6a, 0xca, 0xa0, 0x2d, 0xb4, 0x23, 0x81, 0xab, 0xb4, 0xc3, 0x43, 0xd3, | 3672 | 0x90, 0xc3, 0x8a, 0xfb, 0x8c, 0xb1, 0x25, 0x15, 0xd0, 0x16, 0x3b, 0x90, |
| 3772 | 0x81, 0x60, 0x66, 0x32, 0x84, 0xc1, 0x59, 0x3f, 0x9f, 0x77, 0xf1, 0xf9, | 3673 | 0xc4, 0x55, 0xae, 0xc3, 0x63, 0xb3, 0xa1, 0x70, 0xdf, 0xb4, 0x8a, 0xe1, |
| 3773 | 0x72, 0x18, 0xab, 0x62, 0x83, 0x21, 0x08, 0x8f, 0x95, 0xd8, 0x3f, 0xed, | 3674 | 0xf9, 0x20, 0x9f, 0xf7, 0xf0, 0xf9, 0x4a, 0x18, 0xeb, 0xe2, 0xc3, 0x2a, |
| 3774 | 0xc7, 0x03, 0x13, 0x21, 0xec, 0x9b, 0x6c, 0xc6, 0xb8, 0x99, 0xc6, 0x51, | 3675 | 0x44, 0xc6, 0x6a, 0x3c, 0x3c, 0x1b, 0xc4, 0x43, 0x39, 0x15, 0x07, 0xa6, |
| 3775 | 0xe6, 0x8e, 0x1f, 0x24, 0xb5, 0xee, 0x7d, 0x4a, 0x4b, 0x6f, 0x54, 0x69, | 3676 | 0x5b, 0x30, 0x65, 0xa5, 0x71, 0x94, 0xd8, 0xf1, 0xf5, 0x94, 0xd6, 0x73, |
| 3776 | 0x34, 0x24, 0xbd, 0xb8, 0xc4, 0x3c, 0xe4, 0x4d, 0x36, 0xb6, 0x3c, 0xcb, | 3677 | 0x40, 0xd1, 0xd2, 0x5b, 0x95, 0x34, 0x1a, 0x53, 0x7e, 0x5c, 0x22, 0x0e, |
| 3777 | 0xdc, 0x50, 0x96, 0x0a, 0xf3, 0x6f, 0xed, 0x08, 0x63, 0x36, 0xed, 0x75, | 3678 | 0xf9, 0x53, 0x4d, 0xad, 0x2f, 0x12, 0x1b, 0x2a, 0xcc, 0x08, 0xbf, 0x6b, |
| 3778 | 0xad, 0x06, 0x16, 0x4b, 0xfc, 0x86, 0x83, 0x5b, 0xcc, 0x50, 0x70, 0x4b, | 3679 | 0x13, 0x8c, 0xd9, 0xb4, 0xdf, 0xb3, 0x1e, 0x58, 0x26, 0xf1, 0x1b, 0x09, |
| 3779 | 0xa1, 0x2e, 0xb8, 0xd9, 0x8c, 0x04, 0x37, 0x33, 0xbe, 0x36, 0x8a, 0x3f, | 3680 | 0x77, 0x59, 0x6a, 0xb8, 0xab, 0x50, 0x1f, 0xde, 0x61, 0x45, 0xc3, 0x3b, |
| 3780 | 0x9a, 0x3e, 0x1c, 0x4b, 0x7e, 0x6a, 0xf5, 0xd6, 0xd8, 0xf9, 0x2c, 0xb8, | 3681 | 0x18, 0x5f, 0x5b, 0xc5, 0x1f, 0xad, 0x00, 0x8e, 0xa5, 0x7e, 0x69, 0xf7, |
| 3781 | 0x6d, 0x52, 0xcb, 0x4e, 0x41, 0x33, 0x58, 0x0d, 0x30, 0x36, 0xeb, 0xa1, | 3682 | 0x2f, 0x71, 0xf0, 0x2c, 0x7c, 0xfb, 0xb4, 0x96, 0x99, 0x81, 0x66, 0x30, |
| 3782 | 0xfd, 0x14, 0x6a, 0xf4, 0x66, 0xe6, 0xf1, 0x10, 0xf6, 0x33, 0xa7, 0xfc, | 3683 | 0x1b, 0x60, 0x72, 0xde, 0xc7, 0xf5, 0x53, 0xb0, 0x44, 0x6f, 0x21, 0x8e, |
| 3783 | 0x15, 0x73, 0x4a, 0xdf, 0xf1, 0x58, 0x68, 0x1c, 0x7e, 0xea, 0x1b, 0xd8, | 3684 | 0xab, 0x78, 0x98, 0x98, 0xf2, 0xb7, 0xc4, 0x94, 0x81, 0xe3, 0x71, 0x75, |
| 3784 | 0x75, 0x2e, 0x4c, 0x9b, 0x77, 0xe2, 0x51, 0xf2, 0xb5, 0x79, 0x4d, 0x18, | 3685 | 0x0a, 0x41, 0xda, 0x1b, 0xd8, 0x7b, 0x2e, 0xc2, 0x35, 0xef, 0xc4, 0x93, |
| 3785 | 0xf7, 0x16, 0x42, 0xc1, 0x4e, 0xda, 0xef, 0xbd, 0x7c, 0x24, 0xb8, 0x81, | 3686 | 0x94, 0x6b, 0xc7, 0x86, 0x08, 0xee, 0x2f, 0xa8, 0xe1, 0x4e, 0xae, 0xdf, |
| 3786 | 0xb6, 0x7c, 0x3b, 0xaf, 0x45, 0xe7, 0xf1, 0x8f, 0xe2, 0x4f, 0x09, 0xb8, | 3687 | 0xfb, 0xf9, 0x68, 0x78, 0x0b, 0xd7, 0xf2, 0xdd, 0xbc, 0x16, 0x2b, 0xe2, |
| 3787 | 0x80, 0x3d, 0xc7, 0xbd, 0x98, 0x0f, 0xcb, 0x5a, 0xd4, 0xb9, 0xf9, 0x82, | 3688 | 0x9f, 0xc4, 0x9f, 0x92, 0xf0, 0x00, 0xf7, 0x1d, 0xf7, 0xa3, 0x18, 0x91, |
| 3788 | 0x15, 0xd0, 0xf5, 0xd3, 0xfb, 0xa8, 0xeb, 0x6f, 0x17, 0x02, 0x78, 0xc0, | 3689 | 0xb9, 0x68, 0x73, 0xeb, 0x65, 0x3b, 0xa4, 0xeb, 0xa7, 0x0f, 0xd0, 0xd6, |
| 3789 | 0xd4, 0x12, 0x3f, 0x54, 0x01, 0xea, 0xd4, 0x47, 0x3d, 0x30, 0xc1, 0x2c, | 3690 | 0x8f, 0x16, 0x42, 0x78, 0xc8, 0xd2, 0x92, 0xdf, 0x50, 0x42, 0xb4, 0x69, |
| 3790 | 0x91, 0xe7, 0x92, 0x88, 0x2e, 0x71, 0x72, 0xed, 0x81, 0x69, 0xf1, 0x13, | 3691 | 0x80, 0x76, 0x20, 0xc0, 0x2c, 0x97, 0xe7, 0x52, 0x88, 0x2d, 0x77, 0xb1, |
| 3791 | 0xda, 0xde, 0xa4, 0x0f, 0xd0, 0x7f, 0x7e, 0x78, 0x2d, 0x56, 0xb5, 0x50, | 3692 | 0xf6, 0xe0, 0xac, 0xf8, 0x09, 0xd7, 0xde, 0xa2, 0x0f, 0xd0, 0x7f, 0xbe, |
| 3792 | 0xd6, 0xce, 0xdd, 0x09, 0xfa, 0x8b, 0xa3, 0xa3, 0x13, 0x93, 0xa2, 0x07, | 3693 | 0x71, 0x2d, 0x56, 0x35, 0x35, 0xe3, 0x60, 0x77, 0x92, 0xfe, 0xe2, 0xda, |
| 3793 | 0x6d, 0x1c, 0xae, 0x34, 0x56, 0xae, 0xfa, 0x2b, 0xeb, 0xd2, 0x62, 0xd1, | 3694 | 0xe8, 0xc4, 0xb4, 0xd8, 0x41, 0x9b, 0x82, 0x27, 0x8d, 0xb5, 0xeb, 0xfe, |
| 3794 | 0x47, 0x08, 0x43, 0xd4, 0xe1, 0x69, 0xd3, 0xb2, 0xae, 0xae, 0xfe, 0xd0, | 3695 | 0xd6, 0xbe, 0xb4, 0x4c, 0xec, 0xa1, 0x62, 0x84, 0x36, 0x3c, 0x6d, 0xd9, |
| 3795 | 0x6a, 0xb9, 0x59, 0xf4, 0x22, 0xb2, 0x3e, 0xaf, 0xa4, 0x8e, 0xd4, 0xe8, | 3696 | 0xf6, 0xd5, 0xf5, 0x3f, 0xb5, 0x5b, 0x6f, 0x16, 0xbb, 0x88, 0xae, 0xdf, |
| 3796 | 0xc1, 0xff, 0x0f, 0xbe, 0xf2, 0x1d, 0xab, 0xd7, 0x96, 0x4f, 0xfc, 0xc5, | 3697 | 0x52, 0x24, 0x8f, 0x2c, 0xd1, 0xc3, 0xff, 0x1f, 0x7c, 0xe5, 0x0f, 0xed, |
| 3797 | 0x43, 0x5f, 0x7c, 0x94, 0xb4, 0x5d, 0xe8, 0x25, 0xbd, 0x07, 0x4d, 0xeb, | 3698 | 0x7e, 0x47, 0x3f, 0xf1, 0x17, 0x1f, 0x7d, 0xf1, 0x49, 0x8e, 0xed, 0x41, |
| 3798 | 0xa3, 0xda, 0xd4, 0x67, 0x56, 0xcb, 0x5a, 0x7d, 0x60, 0x41, 0xfd, 0x0f, | 3699 | 0x3f, 0xc7, 0x7b, 0xc4, 0xb2, 0x3f, 0xaa, 0x33, 0x3f, 0xb5, 0x5b, 0x37, |
| 3799 | 0x5e, 0x0f, 0x63, 0x7f, 0xa1, 0x85, 0xba, 0x6b, 0xc7, 0x63, 0xd4, 0xe1, | 3700 | 0xea, 0x43, 0x8b, 0xca, 0xff, 0xe0, 0xf5, 0x08, 0x1e, 0x2e, 0xb4, 0xd2, |
| 3800 | 0x61, 0x53, 0x72, 0x62, 0x84, 0xfe, 0x5c, 0x47, 0xff, 0xf6, 0xa8, 0x8d, | 3701 | 0x76, 0x1d, 0x78, 0xca, 0x12, 0x3c, 0xec, 0x64, 0xbc, 0x45, 0xe9, 0xcf, |
| 3801 | 0x66, 0x1e, 0x9b, 0xc7, 0xb2, 0xd8, 0x44, 0x7f, 0xbf, 0x98, 0x8b, 0xb5, | 3702 | 0xf5, 0xf4, 0x6f, 0x9f, 0xb2, 0xd5, 0xca, 0x63, 0xc7, 0x64, 0x06, 0xdb, |
| 3802 | 0x3c, 0x0d, 0x2d, 0x4b, 0x19, 0x82, 0x9d, 0xd4, 0x71, 0xbb, 0xa9, 0x75, | 3703 | 0xe9, 0xef, 0x17, 0xb2, 0xf1, 0xd6, 0xe7, 0xa1, 0x65, 0xa8, 0x43, 0xb8, |
| 3803 | 0x8a, 0x4d, 0xdb, 0x99, 0x97, 0x5e, 0xcc, 0x45, 0x82, 0x6d, 0x05, 0xd1, | 3704 | 0x93, 0x36, 0xee, 0xb0, 0xb4, 0x4e, 0x59, 0xd3, 0x0e, 0xe2, 0xd2, 0x2b, |
| 3804 | 0x77, 0x5d, 0x70, 0x43, 0xe1, 0xab, 0xb4, 0xbd, 0xc2, 0xba, 0xe5, 0x3e, | 3705 | 0xd9, 0x68, 0xb8, 0xbd, 0x20, 0xf6, 0xae, 0x0f, 0x6f, 0x29, 0xdc, 0xca, |
| 3805 | 0xe6, 0x99, 0x3b, 0xe1, 0xd8, 0xd5, 0xb1, 0xdd, 0x6b, 0xc9, 0xc6, 0xde, | 3706 | 0xb5, 0x57, 0xb0, 0x69, 0x75, 0x80, 0x38, 0x73, 0x07, 0xdc, 0x75, 0x75, |
| 3806 | 0x0f, 0x99, 0x9f, 0xb2, 0x8b, 0x9d, 0x6b, 0x83, 0xbc, 0x56, 0xbd, 0x1a, | 3707 | 0xd7, 0xee, 0xcd, 0x54, 0x53, 0xff, 0x4f, 0xd1, 0x85, 0xcc, 0x32, 0xf7, |
| 3807 | 0xc1, 0x3b, 0xe8, 0x07, 0x77, 0xd3, 0x0f, 0xae, 0xae, 0xfe, 0xd4, 0x8a, | 3708 | 0xda, 0x30, 0xaf, 0xd5, 0xae, 0x47, 0xf8, 0x0e, 0xfa, 0xc1, 0x3d, 0xf4, |
| 3808 | 0xde, 0xe4, 0xf8, 0x41, 0xdb, 0xa4, 0x27, 0xd8, 0x41, 0x3d, 0x6d, 0x34, | 3709 | 0x83, 0xab, 0xeb, 0x7f, 0x69, 0xc7, 0x6e, 0x72, 0xfd, 0xa0, 0x7d, 0xda, |
| 3809 | 0x14, 0xa6, 0x8d, 0x1c, 0x7a, 0xaf, 0x61, 0x87, 0xf4, 0xd4, 0x59, 0x23, | 3710 | 0x17, 0xde, 0x46, 0x3b, 0x6d, 0x35, 0x14, 0xcc, 0x1a, 0x4f, 0xa1, 0xff, |
| 3810 | 0xcd, 0x3c, 0xf2, 0xbb, 0xf0, 0xd4, 0x60, 0xea, 0x69, 0xe3, 0x51, 0x44, | 3711 | 0x1a, 0x77, 0x48, 0xcf, 0x9c, 0x35, 0xd2, 0xc4, 0x91, 0x36, 0xf8, 0x96, |
| 3811 | 0x1d, 0xdf, 0xc1, 0xbe, 0x09, 0x3f, 0xb2, 0x77, 0x86, 0x30, 0xd3, 0x10, | 3712 | 0x60, 0xe6, 0x79, 0xe3, 0x30, 0x62, 0xae, 0xef, 0xe0, 0x40, 0x2e, 0x88, |
| 3812 | 0xc2, 0x83, 0xa4, 0x7d, 0x25, 0xd9, 0xd8, 0xff, 0x3a, 0x75, 0x30, 0x55, | 3713 | 0xcc, 0x9d, 0x2a, 0xe6, 0x1a, 0x55, 0x3c, 0xc2, 0xb1, 0x3f, 0x4c, 0x35, |
| 3813 | 0x23, 0xd7, 0xd2, 0xf8, 0x91, 0xf1, 0x30, 0x70, 0x93, 0xb3, 0xf6, 0xac, | 3714 | 0x0d, 0xbe, 0x45, 0x1b, 0xcc, 0x2c, 0x91, 0x6b, 0x69, 0xfc, 0x95, 0xf1, |
| 3814 | 0xc4, 0xe8, 0x6c, 0x33, 0x0e, 0x17, 0x32, 0xca, 0xc9, 0x9b, 0x5a, 0x67, | 3715 | 0x65, 0xe0, 0x26, 0x77, 0xee, 0x79, 0x89, 0xd1, 0xf9, 0x16, 0x1c, 0x29, |
| 3815 | 0x1a, 0x3f, 0xb7, 0x24, 0x97, 0xce, 0x9a, 0xcc, 0x71, 0xd4, 0xc7, 0x28, | 3716 | 0xf4, 0x29, 0x2e, 0x6e, 0x6a, 0x9d, 0x69, 0x7c, 0xcf, 0x16, 0x2c, 0x9d, |
| 3816 | 0xfd, 0x68, 0x38, 0x5f, 0x17, 0xdc, 0x44, 0x3f, 0x7a, 0x34, 0x2f, 0x32, | 3717 | 0x27, 0x86, 0xb4, 0xd3, 0xa7, 0xc6, 0xe9, 0x47, 0xa3, 0xc4, 0x90, 0xed, |
| 3817 | 0xc5, 0x0d, 0xc3, 0x5d, 0xcb, 0xda, 0x4c, 0xfd, 0x98, 0x76, 0xcd, 0xaf, | 3718 | 0xf4, 0xa3, 0x27, 0xf3, 0xa2, 0x53, 0xc2, 0x30, 0xbc, 0x37, 0x33, 0x37, |
| 3818 | 0x0e, 0xe9, 0x47, 0x31, 0x6e, 0xf3, 0x36, 0xa8, 0x32, 0xc4, 0x18, 0x0c, | 3719 | 0xd3, 0x3e, 0x96, 0x93, 0xf3, 0x6b, 0x55, 0xfd, 0x30, 0xa6, 0x1c, 0xd9, |
| 3819 | 0x99, 0xea, 0x72, 0xfd, 0x00, 0x1e, 0xb5, 0xaf, 0x85, 0x83, 0x3b, 0x26, | 3720 | 0x86, 0x95, 0x3b, 0xc8, 0x31, 0x2e, 0xf9, 0x51, 0x1b, 0xd5, 0x1f, 0xc1, |
| 3820 | 0xd3, 0x2e, 0x97, 0x8e, 0x50, 0x65, 0xaa, 0x5d, 0xed, 0x60, 0xdd, 0xed, | 3721 | 0x69, 0xe7, 0x5a, 0x84, 0xef, 0xa6, 0x3d, 0x1e, 0x1d, 0xaa, 0x6a, 0x76, |
| 3821 | 0x98, 0xec, 0x50, 0x1d, 0xb3, 0x12, 0x03, 0x9d, 0x6a, 0x33, 0x6b, 0x6e, | 3722 | 0x30, 0xaf, 0x8a, 0xef, 0x77, 0x2a, 0x3b, 0x98, 0x6b, 0xd3, 0xcc, 0xb5, |
| 3822 | 0x9a, 0x35, 0x37, 0xcd, 0x9a, 0x9b, 0x26, 0x1f, 0x69, 0xd6, 0xda, 0xb6, | 3723 | 0x69, 0xe6, 0xda, 0x34, 0xe7, 0x4f, 0x33, 0xc7, 0xb6, 0x17, 0x86, 0x95, |
| 3823 | 0xc2, 0xa0, 0xda, 0x2a, 0xfa, 0xa7, 0x7f, 0x3d, 0x6b, 0x3a, 0x38, 0x82, | 3724 | 0x1e, 0xb1, 0xbb, 0xd8, 0xdf, 0x72, 0xf9, 0x03, 0xb1, 0x27, 0xbc, 0xbd, |
| 3824 | 0x39, 0x28, 0xb8, 0xa9, 0xb0, 0xc2, 0xe5, 0x60, 0xbb, 0x41, 0x55, 0xc4, | 3725 | 0xb0, 0xc6, 0xe3, 0x72, 0xba, 0x61, 0xa5, 0xc4, 0x61, 0x02, 0x55, 0x3a, |
| 3825 | 0x32, 0xbe, 0x0a, 0x9d, 0xb5, 0xcc, 0x1c, 0x54, 0x5b, 0x58, 0x6f, 0x33, | 3726 | 0x73, 0x98, 0x35, 0xac, 0x74, 0x31, 0xcf, 0xf6, 0x39, 0x36, 0x8c, 0x0f, |
| 3826 | 0xb6, 0x2e, 0x63, 0x03, 0xef, 0xb0, 0xce, 0xbe, 0xc6, 0x3a, 0x9b, 0x4f, | 3727 | 0x5d, 0x66, 0x7e, 0x7d, 0x93, 0xf9, 0x35, 0x9f, 0x62, 0x3c, 0xad, 0xbe, |
| 3827 | 0x32, 0xae, 0x96, 0x5f, 0xb5, 0x7a, 0x17, 0x3b, 0x35, 0x61, 0x84, 0xfc, | 3728 | 0x6a, 0xf7, 0x2f, 0x73, 0x73, 0xc1, 0x18, 0xe5, 0xfc, 0x1a, 0xd7, 0xaa, |
| 3828 | 0x7e, 0x9f, 0x36, 0x9b, 0x67, 0x2d, 0x6d, 0x77, 0x2b, 0xec, 0xd1, 0x51, | 3729 | 0xc8, 0x1c, 0xda, 0xe1, 0x55, 0x70, 0x9f, 0x8e, 0xda, 0x3a, 0x62, 0xe9, |
| 3829 | 0x5d, 0xcb, 0x9c, 0x7a, 0xb8, 0xc0, 0x3a, 0x60, 0xc4, 0x5a, 0xde, 0xa7, | 3730 | 0x91, 0x02, 0xf1, 0xdf, 0x88, 0xb7, 0x7e, 0x40, 0x83, 0x1e, 0xd1, 0xfd, |
| 3830 | 0x62, 0x0f, 0xeb, 0x5e, 0x5c, 0xbd, 0x89, 0x60, 0x47, 0x6f, 0xc3, 0xb1, | 3731 | 0xb8, 0x7a, 0x13, 0x49, 0x8e, 0xde, 0x8e, 0x63, 0xb9, 0x4a, 0x0c, 0xa6, |
| 3831 | 0x89, 0x72, 0xf4, 0x27, 0xd3, 0x8b, 0x7c, 0xc4, 0x2a, 0x9d, 0xcd, 0x78, | 3732 | 0xd2, 0x4b, 0x03, 0xe4, 0x28, 0x9d, 0x2d, 0x78, 0x9c, 0x53, 0x2b, 0x51, |
| 3832 | 0x98, 0x4b, 0xab, 0x48, 0x2a, 0x4e, 0xbf, 0x41, 0xfa, 0x38, 0xeb, 0xc4, | 3733 | 0x33, 0x41, 0x7f, 0x41, 0xfa, 0x38, 0xf3, 0xc3, 0xa4, 0x75, 0x2b, 0xf2, |
| 3833 | 0x98, 0xf9, 0x55, 0xe4, 0x59, 0x4f, 0x67, 0x0c, 0x0f, 0x5e, 0xcb, 0xaf, | 3734 | 0xcc, 0xa3, 0x73, 0x86, 0x0f, 0x6f, 0xe6, 0xd7, 0x10, 0xdf, 0x12, 0x46, |
| 3834 | 0x60, 0x9e, 0x8b, 0x1b, 0x01, 0x55, 0xc1, 0xf8, 0x4d, 0x21, 0x67, 0x4a, | 3735 | 0x48, 0xa9, 0x62, 0xdc, 0x9a, 0xc8, 0x5a, 0x82, 0x4b, 0xb6, 0x3d, 0x27, |
| 3835 | 0x7e, 0xb2, 0xac, 0x19, 0xe1, 0x21, 0x1e, 0x4f, 0x0f, 0x43, 0x72, 0x96, | 3736 | 0x32, 0x24, 0x12, 0xe9, 0x51, 0x08, 0x56, 0xd9, 0x2b, 0xee, 0x4d, 0x55, |
| 3836 | 0xb5, 0xf4, 0x9e, 0x64, 0x19, 0xd6, 0xc5, 0x83, 0x58, 0xaa, 0xf7, 0xaa, | 3737 | 0x60, 0x53, 0x22, 0x8c, 0x15, 0x7a, 0xbf, 0xd2, 0x59, 0x48, 0x18, 0xaf, |
| 3837 | 0xce, 0x42, 0xdc, 0x38, 0x8f, 0x6f, 0xa9, 0xbb, 0x67, 0x53, 0x8c, 0xed, | 3738 | 0xe2, 0x77, 0x95, 0x7b, 0xe6, 0x4d, 0xc6, 0x74, 0x9f, 0xb2, 0x67, 0xbe, |
| 3838 | 0x0c, 0x75, 0x53, 0x81, 0x4b, 0x61, 0xe1, 0x11, 0xd5, 0x5e, 0xdd, 0x85, | 3739 | 0x0a, 0x97, 0x22, 0x22, 0x23, 0x6a, 0xfd, 0xba, 0x07, 0xef, 0xdd, 0xa5, |
| 3839 | 0x77, 0xef, 0x52, 0x08, 0xe9, 0x69, 0x5c, 0x68, 0x0e, 0xd1, 0xaf, 0x3a, | 3740 | 0x40, 0xd5, 0xd3, 0x38, 0xdf, 0xa2, 0xd2, 0x9f, 0x3a, 0xc9, 0x2d, 0x62, |
| 3840 | 0x89, 0x31, 0xa2, 0x70, 0xcf, 0x45, 0x82, 0x5b, 0x69, 0x8b, 0xca, 0xb9, | 3741 | 0xf0, 0x2e, 0x44, 0xc3, 0x3b, 0xb9, 0x06, 0xd5, 0x0b, 0xb2, 0x2e, 0x1d, |
| 3841 | 0x3a, 0xda, 0x87, 0xbe, 0x47, 0x1d, 0xb6, 0x51, 0x87, 0x5b, 0xa6, 0x11, | 3742 | 0xb4, 0x55, 0x3d, 0xfd, 0xaf, 0x53, 0xe9, 0xa0, 0x1d, 0xbb, 0x66, 0xa1, |
| 3842 | 0xaa, 0x48, 0xf5, 0xa8, 0x8e, 0x42, 0xbb, 0x6a, 0x2f, 0x68, 0xd4, 0x93, | 3743 | 0x56, 0x99, 0xbd, 0xca, 0xb6, 0x82, 0x46, 0x3b, 0x89, 0x4d, 0x86, 0xc9, |
| 3843 | 0xe8, 0xe4, 0x3b, 0xc4, 0x4a, 0xe2, 0x2b, 0x25, 0x5b, 0x8a, 0xbf, 0xde, | 3744 | 0x91, 0xc4, 0x47, 0xca, 0x6b, 0x28, 0x7e, 0x7a, 0xe3, 0x3a, 0xf6, 0x79, |
| 3844 | 0x68, 0xcf, 0x8c, 0x4b, 0x62, 0x6e, 0xdd, 0xf2, 0x14, 0xe3, 0xd1, 0x45, | 3745 | 0x24, 0xd6, 0x36, 0xad, 0x36, 0x19, 0x87, 0x1e, 0xca, 0x25, 0x32, 0x04, |
| 3845 | 0xbe, 0x84, 0x07, 0x1f, 0xaa, 0x1b, 0xac, 0xa5, 0x57, 0x92, 0x4c, 0x9e, | 3746 | 0x50, 0xdb, 0x68, 0xaf, 0xf8, 0x30, 0xb5, 0xc0, 0x7b, 0x26, 0x8e, 0x17, |
| 3846 | 0x15, 0x29, 0x1c, 0x2f, 0x74, 0xd1, 0x2e, 0xab, 0x8b, 0xfe, 0x15, 0x0a, | 3747 | 0xba, 0xb9, 0x2e, 0xcd, 0x25, 0xbf, 0x52, 0xe9, 0x87, 0x1d, 0x1c, 0x5f, |
| 3847 | 0x6e, 0x9c, 0x6c, 0x57, 0x1b, 0x67, 0x17, 0x05, 0xbb, 0x69, 0xc3, 0xee, | 3748 | 0xfc, 0x3b, 0x0d, 0x77, 0x2d, 0x3b, 0xc9, 0x89, 0xfe, 0xb5, 0x35, 0x3c, |
| 3848 | 0xd9, 0x88, 0xd0, 0xe5, 0xfa, 0x62, 0xdb, 0x34, 0x5c, 0xfa, 0xbf, 0x64, | 3749 | 0xc8, 0x31, 0x64, 0x1d, 0x2b, 0xca, 0x7e, 0x19, 0xbe, 0x67, 0x3a, 0x8d, |
| 3849 | 0xcb, 0x6f, 0x93, 0x96, 0xd8, 0xd3, 0x5f, 0xf2, 0xd3, 0xe0, 0xdd, 0x93, | 3750 | 0xf7, 0x9c, 0x1c, 0x5a, 0xf6, 0xe1, 0x61, 0xa5, 0x93, 0x6b, 0x09, 0xbf, |
| 3850 | 0x69, 0xbc, 0xbb, 0xda, 0xcb, 0x9a, 0x5a, 0xc2, 0x14, 0x55, 0xc5, 0xef, | 3751 | 0x3b, 0xfe, 0xae, 0x69, 0xf8, 0x6b, 0x4c, 0xc4, 0xbc, 0xe4, 0x6d, 0x17, |
| 3851 | 0xd3, 0x2e, 0xe8, 0x83, 0xaa, 0x53, 0xfc, 0xc8, 0xeb, 0xac, 0x79, 0xc7, | 3752 | 0x53, 0x09, 0x75, 0x52, 0xe9, 0xe6, 0x58, 0x8c, 0x2d, 0x62, 0x7d, 0x35, |
| 3852 | 0x24, 0xbc, 0x84, 0x0a, 0x51, 0x37, 0x31, 0xdd, 0x87, 0xc9, 0x78, 0xef, | 3753 | 0xfd, 0xa6, 0x83, 0xfa, 0x76, 0x51, 0xdf, 0x2e, 0x67, 0x4e, 0xf1, 0xbb, |
| 3853 | 0x39, 0xd5, 0xa5, 0xba, 0x0a, 0x52, 0x83, 0x1d, 0x9f, 0x6a, 0xa3, 0x4f, | 3754 | 0x5f, 0x9d, 0x77, 0x4b, 0xe1, 0x1e, 0x47, 0xf7, 0x9d, 0x7c, 0x67, 0x0f, |
| 3854 | 0xb5, 0x93, 0x9f, 0x76, 0xfa, 0xd4, 0x16, 0xf2, 0xb3, 0xc5, 0xf6, 0x29, | 3755 | 0x65, 0xdd, 0xc3, 0xe7, 0xb7, 0x58, 0xdf, 0xe7, 0x35, 0x91, 0x57, 0xe2, |
| 3855 | 0xf1, 0xcd, 0xdf, 0xe6, 0x65, 0x43, 0xe1, 0x6e, 0x5b, 0x2f, 0x5b, 0xf9, | 3756 | 0xfa, 0xc6, 0x5c, 0x25, 0xb1, 0xfd, 0xdd, 0x12, 0x57, 0x40, 0xc6, 0x63, |
| 3856 | 0x6e, 0x27, 0xe5, 0xe8, 0xe4, 0x7b, 0x77, 0xf3, 0xbd, 0xbb, 0x67, 0xff, | 3757 | 0x4a, 0xec, 0x0f, 0xa1, 0xa7, 0x05, 0x81, 0xa5, 0xe6, 0x50, 0xdb, 0xee, |
| 3857 | 0x97, 0xf0, 0x47, 0x59, 0x9c, 0xd8, 0xbf, 0x5e, 0xd3, 0x24, 0x07, 0xfc, | 3758 | 0x06, 0xe2, 0x14, 0x71, 0x32, 0x70, 0x9c, 0x1c, 0x99, 0xd8, 0x3b, 0xd7, |
| 3858 | 0xac, 0x88, 0x29, 0x90, 0x75, 0xa5, 0x24, 0x47, 0x0c, 0xa0, 0xbb, 0x19, | 3759 | 0xaa, 0x60, 0xcc, 0xb8, 0x99, 0xf1, 0x67, 0x60, 0xa2, 0xa0, 0x75, 0xc6, |
| 3859 | 0xbe, 0x45, 0xa9, 0x67, 0x5b, 0xb7, 0xd7, 0x33, 0x9f, 0x31, 0x9f, 0xfa, | 3760 | 0x78, 0xaf, 0x79, 0x52, 0xb8, 0xfb, 0x01, 0xb4, 0x93, 0xaf, 0x45, 0xcd, |
| 3860 | 0x8e, 0x13, 0x4b, 0x33, 0x47, 0xcf, 0xb4, 0x28, 0x8c, 0x18, 0x37, 0x33, | 3761 | 0x41, 0x44, 0xad, 0x78, 0x74, 0x42, 0xd1, 0x06, 0xb7, 0x40, 0xbb, 0x40, |
| 3861 | 0x4e, 0x0d, 0x1c, 0x29, 0x68, 0x9d, 0x51, 0xde, 0x6b, 0x1a, 0x13, 0x8c, | 3762 | 0xcc, 0x1f, 0x9e, 0x55, 0xb4, 0xa1, 0x3a, 0xaf, 0x96, 0x7e, 0xdb, 0xe1, |
| 3862 | 0xbf, 0x0f, 0x6d, 0xc4, 0x75, 0x91, 0x54, 0x3f, 0x22, 0x66, 0x2c, 0x72, | 3763 | 0xcd, 0x07, 0xb0, 0xda, 0xe1, 0x66, 0x83, 0x48, 0x92, 0xa3, 0xee, 0xe4, |
| 3863 | 0x44, 0x69, 0xfd, 0x1b, 0xa0, 0x5d, 0x64, 0x6d, 0x18, 0x9c, 0x56, 0xda, | 3764 | 0x98, 0xfb, 0x37, 0x29, 0xb8, 0x62, 0xfc, 0x94, 0xeb, 0xa4, 0xa5, 0x33, |
| 3864 | 0x40, 0xad, 0x5b, 0x4b, 0xbf, 0x61, 0xe3, 0xeb, 0x7d, 0x58, 0x6e, 0x63, | 3765 | 0x8a, 0x81, 0x2c, 0xe3, 0x3f, 0x7a, 0x5c, 0x38, 0xf8, 0x01, 0x72, 0x70, |
| 3865 | 0xb8, 0x7e, 0x24, 0x88, 0x65, 0xb7, 0x92, 0xe6, 0xde, 0x75, 0x0a, 0x97, | 3766 | 0x04, 0x42, 0x7c, 0x36, 0x3b, 0x19, 0x1f, 0x0e, 0x78, 0xb5, 0x24, 0xf9, |
| 3866 | 0x8d, 0x0f, 0x69, 0x47, 0x2d, 0x9d, 0x55, 0x06, 0x72, 0xcc, 0x13, 0x91, | 3767 | 0x77, 0x9a, 0x63, 0x1a, 0x05, 0xf2, 0x72, 0xce, 0x11, 0xbb, 0xaf, 0x34, |
| 3867 | 0xe3, 0x82, 0xd5, 0xf7, 0x11, 0xab, 0xc3, 0x17, 0xe0, 0xb3, 0xb9, 0xb1, | 3768 | 0x66, 0xa2, 0x34, 0xa6, 0x9e, 0x07, 0xe3, 0x62, 0x02, 0xdb, 0x13, 0xcc, |
| 3868 | 0xd8, 0xa0, 0xcf, 0xad, 0x25, 0x88, 0xd3, 0xd3, 0xa4, 0x69, 0x14, 0x88, | 3769 | 0x01, 0xc4, 0xb2, 0xa3, 0xc2, 0xf5, 0x39, 0x5e, 0xe5, 0x71, 0x83, 0xdf, |
| 3869 | 0xdf, 0xb9, 0x46, 0x74, 0x4f, 0x91, 0x66, 0xbc, 0x48, 0x53, 0xcf, 0x83, | 3770 | 0x87, 0x95, 0x3d, 0x12, 0x33, 0x95, 0x2e, 0x73, 0xab, 0xe5, 0x1c, 0x35, |
| 3870 | 0x71, 0x73, 0x04, 0x9b, 0xe2, 0xac, 0x15, 0xcc, 0x79, 0x47, 0xa5, 0x27, | 3771 | 0xe6, 0x21, 0x2c, 0x38, 0x73, 0x0c, 0xc9, 0x1c, 0x43, 0x3f, 0x52, 0xb4, |
| 3871 | 0x20, 0xbd, 0xf2, 0xe3, 0x06, 0xff, 0x1e, 0x54, 0x3b, 0x24, 0xa6, 0xca, | 3772 | 0xe4, 0x39, 0x45, 0x30, 0xb8, 0xa9, 0xef, 0x1c, 0x63, 0xe4, 0x88, 0xa2, |
| 3872 | 0x1d, 0x2b, 0x54, 0x73, 0x8d, 0xaa, 0xd4, 0x41, 0xcc, 0xd9, 0x6b, 0x0c, | 3773 | 0xb5, 0x1e, 0xa3, 0xfa, 0x41, 0x5d, 0xc6, 0x3f, 0x54, 0x9a, 0x67, 0x08, |
| 3873 | 0xc8, 0x1a, 0x03, 0xbf, 0x50, 0x5a, 0xe2, 0x9c, 0x92, 0x5c, 0xdd, 0x98, | 3774 | 0x8d, 0x79, 0xc6, 0x5f, 0x21, 0xa0, 0x6c, 0xc9, 0xb5, 0x63, 0x6c, 0xb6, |
| 3874 | 0x39, 0xc7, 0x18, 0x3a, 0xac, 0xb4, 0x96, 0x63, 0x14, 0xdf, 0xaf, 0x0b, | 3775 | 0x1d, 0xa3, 0x39, 0x05, 0xf7, 0x18, 0xcb, 0x70, 0xe9, 0x66, 0xa7, 0xfe, |
| 3875 | 0xfd, 0x83, 0xc5, 0x75, 0x06, 0xd0, 0x90, 0x67, 0x7c, 0x16, 0x7c, 0x6a, | 3776 | 0xa8, 0x59, 0xa1, 0xd7, 0x61, 0x44, 0x45, 0xad, 0x47, 0xff, 0x3c, 0xf6, |
| 3876 | 0xc3, 0x44, 0x1b, 0x46, 0xa6, 0xdb, 0x30, 0x3c, 0xa1, 0x70, 0xb7, 0xb1, | 3777 | 0x96, 0xb8, 0xfb, 0xf6, 0x13, 0x3d, 0xc4, 0x73, 0x1b, 0x1f, 0x30, 0x56, |
| 3877 | 0x18, 0x97, 0x6e, 0xb6, 0xfb, 0x94, 0xaa, 0xa5, 0x7a, 0x2d, 0x86, 0x42, | 3778 | 0xe2, 0x4b, 0x90, 0xf6, 0x9b, 0xad, 0xe4, 0xd9, 0x4b, 0xbd, 0x6e, 0x3c, |
| 3878 | 0xa8, 0x76, 0xe9, 0x5f, 0xc1, 0xae, 0x22, 0xc6, 0xdf, 0x74, 0xa2, 0x9b, | 3779 | 0xff, 0x7d, 0xc0, 0x5d, 0x03, 0xb1, 0xff, 0x67, 0xef, 0xb5, 0xe3, 0xe9, |
| 3879 | 0x79, 0xdf, 0xc2, 0xfb, 0x8c, 0xa5, 0x58, 0x0d, 0xd2, 0xde, 0x54, 0x0b, | 3780 | 0x5c, 0x05, 0x5a, 0xd7, 0xe3, 0xce, 0x28, 0x6a, 0x3c, 0xcc, 0x5d, 0xef, |
| 3880 | 0xf1, 0x78, 0x9d, 0xdb, 0x89, 0xf7, 0x0f, 0x7d, 0x8e, 0x0d, 0x44, 0xff, | 3781 | 0xec, 0x56, 0x1e, 0xe6, 0x3d, 0xe7, 0xd9, 0xc0, 0x6f, 0x98, 0x1f, 0xb7, |
| 3881 | 0x9f, 0xbf, 0xd7, 0x86, 0xc7, 0x27, 0xca, 0xd0, 0xb2, 0x1a, 0x77, 0x46, | 3782 | 0xfd, 0x71, 0xa3, 0x5c, 0x97, 0x67, 0x6f, 0xbc, 0xae, 0x9a, 0xff, 0xf2, |
| 3882 | 0x50, 0xe5, 0x62, 0x8d, 0x7b, 0x73, 0xbb, 0x1a, 0xe4, 0x3d, 0xfb, 0x59, | 3783 | 0xba, 0x82, 0x17, 0x08, 0x50, 0x5f, 0x67, 0xae, 0xc8, 0x67, 0x6d, 0x78, |
| 3883 | 0xdf, 0x97, 0x53, 0x46, 0xea, 0x4f, 0x1a, 0xe4, 0xba, 0x9d, 0x37, 0x6e, | 3784 | 0x4d, 0x1f, 0x06, 0x27, 0x63, 0x38, 0xb0, 0x10, 0xc1, 0x42, 0x56, 0xeb, |
| 3884 | 0xb8, 0xde, 0xfd, 0x05, 0xd7, 0x15, 0x9e, 0x61, 0x22, 0xfb, 0x01, 0x6b, | 3785 | 0xbf, 0xc4, 0xba, 0x60, 0x6f, 0x8b, 0x8e, 0x87, 0x16, 0xa2, 0x98, 0xcf, |
| 3885 | 0x4a, 0x3e, 0x67, 0xc1, 0x9d, 0xf2, 0xa0, 0x7f, 0x2c, 0x8a, 0x7d, 0x73, | 3786 | 0xc2, 0x0e, 0x9a, 0x7a, 0x31, 0xa8, 0x24, 0xb1, 0x7f, 0xa1, 0x1e, 0xe7, |
| 3886 | 0x61, 0xcc, 0xe5, 0xb4, 0xde, 0x4b, 0xec, 0x1f, 0x76, 0x35, 0xeb, 0x78, | 3787 | 0xb2, 0xfa, 0x85, 0x51, 0x25, 0x31, 0x5c, 0x47, 0x3e, 0xf1, 0xc8, 0x42, |
| 3887 | 0x60, 0x2e, 0x82, 0xd9, 0x1c, 0x2c, 0x7f, 0x4a, 0x9f, 0xf7, 0xab, 0x04, | 3788 | 0x33, 0x1e, 0x5e, 0x08, 0xf0, 0x1d, 0x1b, 0x5d, 0xa9, 0x7a, 0x3e, 0xef, |
| 3888 | 0xf6, 0xce, 0xd5, 0xe1, 0x5c, 0x4e, 0xbf, 0x38, 0xac, 0xe2, 0x83, 0xb5, | 3789 | 0xc1, 0xf3, 0x27, 0x6d, 0x5b, 0xf8, 0xd4, 0xe0, 0x02, 0x30, 0x3f, 0xc5, |
| 3889 | 0xc4, 0x1d, 0x0f, 0xce, 0x35, 0x61, 0xff, 0x9c, 0x8f, 0xef, 0x58, 0xd8, | 3790 | 0x1c, 0x73, 0x86, 0xf9, 0xe6, 0x19, 0x60, 0xff, 0x33, 0x1e, 0xcc, 0x4e, |
| 3890 | 0x92, 0xac, 0xe3, 0xf3, 0x2e, 0x3c, 0x7d, 0xd2, 0xb2, 0x04, 0x77, 0xf5, | 3791 | 0xd9, 0xd8, 0x6b, 0x8c, 0xd6, 0x79, 0xe8, 0xe4, 0xfd, 0xcc, 0x07, 0x7e, |
| 3891 | 0xcf, 0x01, 0xb3, 0xe3, 0xac, 0x45, 0x67, 0x58, 0x97, 0x9e, 0x00, 0xf6, | 3792 | 0xe6, 0xb6, 0x7b, 0x55, 0x17, 0xa7, 0x2f, 0x11, 0x87, 0x1e, 0x78, 0x26, |
| 3892 | 0x3e, 0xe1, 0xc2, 0xf4, 0xb8, 0x85, 0x5d, 0xc6, 0x70, 0xad, 0x8b, 0x0e, | 3793 | 0x89, 0x77, 0xb2, 0x19, 0x74, 0x91, 0x77, 0x0f, 0x53, 0x96, 0xb7, 0xb3, |
| 3893 | 0xdf, 0xcb, 0xba, 0xe1, 0x65, 0x0d, 0xbc, 0x27, 0xe4, 0xe4, 0xf3, 0x4b, | 3794 | 0xcc, 0x4f, 0x0b, 0x06, 0xde, 0xca, 0x06, 0x38, 0x4f, 0x33, 0x5e, 0xcb, |
| 3894 | 0xcc, 0x53, 0xf7, 0x3d, 0x91, 0xc0, 0x9b, 0xb9, 0x2c, 0xb6, 0x10, 0x9f, | 3795 | 0xca, 0x33, 0xf2, 0x6c, 0x08, 0x03, 0x94, 0xe5, 0xcd, 0x6c, 0x94, 0x73, |
| 3895 | 0x0f, 0x92, 0x97, 0x37, 0x72, 0xac, 0x63, 0x73, 0x06, 0x5e, 0xcf, 0xf9, | 3796 | 0x46, 0xf0, 0x1d, 0x3e, 0x77, 0xff, 0x82, 0xce, 0x7c, 0x14, 0xe0, 0xbc, |
| 3896 | 0xb8, 0x4e, 0x13, 0x5e, 0xca, 0xc9, 0x33, 0xf2, 0x6c, 0x00, 0x7d, 0xe4, | 3797 | 0x31, 0xbc, 0x91, 0x0d, 0x51, 0xd6, 0x08, 0x73, 0xd0, 0x00, 0xc6, 0xb2, |
| 3897 | 0xe5, 0xb5, 0x5c, 0x84, 0x6b, 0x86, 0xf1, 0x53, 0x3e, 0x77, 0xef, 0x9c, | 3798 | 0x4d, 0x17, 0xb6, 0x90, 0xb3, 0xb8, 0x39, 0x44, 0xae, 0x5d, 0xb6, 0xbb, |
| 3898 | 0xce, 0xba, 0xe5, 0xe3, 0xba, 0x51, 0xbc, 0x92, 0x0b, 0x90, 0xd7, 0x30, | 3799 | 0x9d, 0x98, 0x93, 0x79, 0xca, 0xf3, 0x0e, 0x60, 0x34, 0xfb, 0x9a, 0xb7, |
| 3899 | 0x6b, 0x55, 0x1f, 0x46, 0x72, 0x8d, 0x17, 0x37, 0x30, 0x51, 0x3b, 0xb5, | 3800 | 0x5c, 0x27, 0xbf, 0x30, 0xb5, 0xe8, 0x70, 0xba, 0xe7, 0x2d, 0xfe, 0x3d, |
| 3900 | 0x46, 0xae, 0xbd, 0x63, 0x75, 0xd9, 0xb1, 0x28, 0xeb, 0x94, 0xd6, 0xed, | 3801 | 0x0b, 0x9c, 0xb3, 0x32, 0x76, 0xad, 0x49, 0x0e, 0xcb, 0xdc, 0xf3, 0xc3, |
| 3901 | 0xc3, 0x70, 0xee, 0x75, 0x77, 0xa9, 0x9f, 0x7e, 0x66, 0x7c, 0xc1, 0xc6, | 3802 | 0x0d, 0xcd, 0x9c, 0x57, 0xef, 0x7f, 0x45, 0x91, 0x3a, 0xc6, 0x87, 0xd8, |
| 3902 | 0x7e, 0x4f, 0x9b, 0xfc, 0x7d, 0x1a, 0x38, 0x67, 0x66, 0xad, 0xea, 0x14, | 3803 | 0x33, 0x62, 0x2f, 0xc6, 0xf1, 0x3c, 0xf0, 0x57, 0xe4, 0x95, 0x8d, 0x93, |
| 3903 | 0xb1, 0x2e, 0x6b, 0xd4, 0x5b, 0x6b, 0x9a, 0xb8, 0xae, 0xde, 0xfb, 0xa2, | 3804 | 0x9a, 0xf8, 0x7d, 0x1f, 0xf9, 0x4a, 0x4f, 0x11, 0x0d, 0xc9, 0x87, 0x30, |
| 3904 | 0x92, 0x7e, 0xc7, 0x83, 0xe8, 0x13, 0xa2, 0x2f, 0x62, 0xe6, 0x59, 0xe0, | 3805 | 0x62, 0x57, 0x90, 0x77, 0xd7, 0x92, 0xaf, 0x2e, 0x34, 0x33, 0xff, 0x6c, |
| 3905 | 0x47, 0xc4, 0x9f, 0x0d, 0x63, 0x9a, 0xf8, 0x7d, 0x86, 0xb8, 0xa6, 0x7b, | 3806 | 0xb0, 0xed, 0xef, 0xb7, 0xc0, 0xf6, 0x98, 0xba, 0x51, 0xe7, 0x2d, 0x7e, |
| 3906 | 0x1e, 0xf5, 0x89, 0x07, 0x30, 0x64, 0x95, 0x11, 0x9f, 0x57, 0x13, 0xd7, | 3807 | 0xbe, 0x06, 0xfa, 0x85, 0xb0, 0xa2, 0x17, 0x7f, 0x88, 0xc4, 0xd0, 0xab, |
| 3907 | 0xce, 0x35, 0xb1, 0x4e, 0xad, 0xb1, 0xac, 0xbf, 0x6d, 0x86, 0xe5, 0x4a, | 3808 | 0x10, 0xbb, 0x02, 0x6b, 0x16, 0x7c, 0x58, 0x4b, 0x7d, 0xb6, 0x4e, 0x72, |
| 3908 | 0xe9, 0x46, 0xad, 0x7b, 0xfe, 0x2b, 0x55, 0xd0, 0x2f, 0x06, 0x95, 0x3e, | 3809 | 0x6e, 0xf2, 0x8e, 0x04, 0x75, 0xba, 0x7d, 0x92, 0x5c, 0x4a, 0x0f, 0x61, |
| 3909 | 0xff, 0x16, 0xe2, 0x03, 0xe7, 0x21, 0x7a, 0x05, 0x56, 0xcc, 0x79, 0xb0, | 3810 | 0x35, 0x6d, 0x3c, 0x78, 0xca, 0xb6, 0x2b, 0x69, 0xe3, 0x46, 0xae, 0xcf, |
| 3910 | 0x92, 0xf2, 0x6c, 0x1c, 0xe3, 0xda, 0xc4, 0x27, 0x71, 0xca, 0xb4, 0x6d, | 3811 | 0x7d, 0x27, 0x6c, 0xbc, 0x62, 0xbc, 0x42, 0x9b, 0x2a, 0xe4, 0x83, 0x2d, |
| 3911 | 0x8c, 0x98, 0x4b, 0x0f, 0x60, 0x39, 0x75, 0xdc, 0x7f, 0xca, 0xb2, 0xca, | 3812 | 0x7c, 0x27, 0xc2, 0xe7, 0x03, 0xd8, 0x3f, 0x29, 0x75, 0x50, 0x3d, 0x9f, |
| 3912 | 0xa9, 0xe3, 0x06, 0xda, 0x67, 0xcf, 0x09, 0x0b, 0x2f, 0x1a, 0x2f, 0x52, | 3813 | 0xb9, 0x88, 0x63, 0xd9, 0x24, 0x9a, 0x69, 0xbf, 0x18, 0xc7, 0x6c, 0xe2, |
| 3913 | 0xa7, 0x8a, 0xb8, 0xb1, 0x99, 0xef, 0x84, 0xf9, 0xbc, 0x0f, 0x7b, 0xc7, | 3814 | 0x3b, 0xb1, 0x05, 0x37, 0x97, 0xc4, 0x16, 0x7e, 0x1d, 0x0e, 0x00, 0xa7, |
| 3914 | 0xa4, 0x5f, 0xaa, 0xe3, 0x33, 0xaf, 0xe2, 0x58, 0x2e, 0x81, 0x26, 0xea, | 3815 | 0xa7, 0xb4, 0x89, 0x22, 0xb9, 0x74, 0x8d, 0x39, 0x02, 0xe6, 0x62, 0xbc, |
| 3915 | 0x2f, 0x4a, 0x9a, 0x8d, 0x7c, 0x27, 0x4a, 0x7a, 0xd1, 0xb9, 0xaf, 0x61, | 3816 | 0x3d, 0xa3, 0xe0, 0xf8, 0x14, 0x6b, 0xb7, 0x0d, 0xb0, 0xab, 0xa8, 0xc7, |
| 3916 | 0xf3, 0x29, 0x05, 0x3d, 0x2e, 0x3a, 0xf8, 0x1a, 0xda, 0xcf, 0x7c, 0x51, | 3817 | 0x5b, 0x33, 0xbf, 0x89, 0xe7, 0x4e, 0x52, 0xf7, 0x67, 0x23, 0xf8, 0x7a, |
| 3917 | 0x4e, 0x60, 0x96, 0x1a, 0xd7, 0x8e, 0xcc, 0x13, 0x7f, 0x57, 0xa5, 0x86, | 3818 | 0xd6, 0x87, 0x5b, 0x8e, 0x0b, 0x3f, 0xd3, 0x93, 0x07, 0x14, 0xa9, 0x75, |
| 3918 | 0xc0, 0xfa, 0x8d, 0x37, 0xa6, 0x14, 0x8e, 0x8f, 0xb3, 0xdf, 0x5b, 0x03, | 3819 | 0xa4, 0x06, 0x49, 0xc4, 0xfc, 0x8a, 0x07, 0x0d, 0xcf, 0xf9, 0xa0, 0x9f, |
| 3919 | 0xab, 0x82, 0x32, 0xbd, 0x3e, 0xf5, 0x3b, 0x78, 0xea, 0x24, 0xf5, 0xf0, | 3820 | 0x8b, 0xc1, 0xdf, 0x10, 0x80, 0xde, 0xf0, 0xfb, 0xc4, 0x17, 0x0f, 0x2a, |
| 3920 | 0x64, 0x18, 0x3f, 0xc8, 0x79, 0xb0, 0xec, 0xb8, 0x60, 0x3a, 0x3d, 0xb1, | 3821 | 0x58, 0x97, 0x6e, 0xff, 0x4a, 0x92, 0xd7, 0x22, 0xbc, 0x86, 0xdf, 0xac, |
| 3921 | 0x4f, 0x49, 0x7f, 0x24, 0x7d, 0x4b, 0x3c, 0xea, 0x55, 0x2e, 0xd4, 0x3f, | 3822 | 0x84, 0x77, 0xb9, 0x97, 0xf9, 0xb8, 0x42, 0x27, 0xb7, 0xf2, 0xd9, 0xb6, |
| 3922 | 0xe5, 0x81, 0x7e, 0x2e, 0x0a, 0x6f, 0xbd, 0x0f, 0x7a, 0xfd, 0x1f, 0x32, | 3823 | 0x97, 0x78, 0xbf, 0xe7, 0xab, 0xb6, 0x1d, 0x5f, 0x2f, 0xcf, 0xab, 0x88, |
| 3923 | 0xd7, 0xb8, 0x50, 0xc6, 0x5e, 0x76, 0xd3, 0x77, 0x13, 0xbc, 0x16, 0xe6, | 3824 | 0x9f, 0xd3, 0xf9, 0x9c, 0x9b, 0x03, 0xaf, 0x73, 0x2b, 0x2f, 0x7d, 0x47, |
| 3924 | 0x35, 0xfc, 0x4e, 0x39, 0xdc, 0x4b, 0xdc, 0xac, 0xe1, 0x65, 0x3a, 0xf1, | 3825 | 0xe2, 0xf3, 0x71, 0xb8, 0xf5, 0x90, 0xcb, 0xc1, 0x5f, 0x2a, 0x08, 0x4f, |
| 3925 | 0x98, 0xc7, 0xb2, 0xdc, 0xac, 0x0d, 0x3b, 0xbe, 0x67, 0x59, 0xb1, 0xd5, | 3826 | 0x89, 0x39, 0x3a, 0x9c, 0x9d, 0x52, 0x88, 0x73, 0x26, 0x9f, 0xdd, 0x0c, |
| 3926 | 0xf2, 0x7c, 0x08, 0xb1, 0x73, 0x3a, 0x9f, 0x73, 0xea, 0xe5, 0x75, 0x3c, | 3827 | 0x6f, 0x4a, 0x9b, 0xc8, 0x70, 0xed, 0xf7, 0xaa, 0xad, 0x78, 0xc1, 0xf2, |
| 3927 | 0xe6, 0xa6, 0x1f, 0x49, 0xac, 0xb2, 0xde, 0xdb, 0x3d, 0x94, 0x83, 0xdb, | 3828 | 0xa3, 0x5a, 0x5f, 0x8e, 0x07, 0x7b, 0x54, 0xbc, 0x40, 0x8e, 0xcf, 0x75, |
| 3928 | 0x9f, 0x2b, 0x08, 0xb6, 0x89, 0xda, 0x32, 0x9c, 0x1d, 0x57, 0xcc, 0xd9, | 3829 | 0x4a, 0x16, 0x51, 0xc9, 0x5a, 0x8b, 0xe3, 0x79, 0xfe, 0x1a, 0xfa, 0x57, |
| 3929 | 0x29, 0x3e, 0xbb, 0x1e, 0xee, 0xa4, 0x76, 0x24, 0x4b, 0x3f, 0xd8, 0x15, | 3830 | 0x3c, 0xc4, 0x36, 0xaf, 0x83, 0x6d, 0x15, 0x0d, 0x40, 0x31, 0xef, 0xc3, |
| 3930 | 0x6a, 0xc1, 0x33, 0xa6, 0x17, 0x95, 0xfa, 0x12, 0xdc, 0xdf, 0x1d, 0xc2, | 3831 | 0x79, 0xdd, 0xe5, 0x77, 0x2f, 0x39, 0x79, 0x58, 0x53, 0x8b, 0xd7, 0x78, |
| 3931 | 0x33, 0xec, 0x0b, 0x68, 0xb3, 0xc4, 0x3c, 0xd8, 0x48, 0x07, 0x49, 0xcf, | 3832 | 0x9d, 0xd6, 0x9a, 0x56, 0x0e, 0x7b, 0x45, 0xce, 0x17, 0x0b, 0x3b, 0x7d, |
| 3932 | 0xf5, 0x63, 0xe8, 0xdf, 0x75, 0x31, 0xcf, 0xb9, 0xed, 0x3c, 0x57, 0x56, | 3833 | 0xae, 0xff, 0x5c, 0xf4, 0x4a, 0xfd, 0x70, 0xfd, 0x7b, 0x15, 0x3c, 0xa6, |
| 3933 | 0x0f, 0xcc, 0xe7, 0x3d, 0xb8, 0xa0, 0x3b, 0x98, 0xf0, 0x39, 0xbb, 0x66, | 3834 | 0x16, 0x6d, 0xf7, 0x22, 0xe0, 0x33, 0x03, 0x6d, 0xe3, 0xfa, 0xe7, 0x6e, |
| 3934 | 0x6b, 0xa1, 0xf9, 0x6b, 0x58, 0x50, 0x6b, 0x49, 0x2b, 0x32, 0x13, 0x14, | 3835 | 0x90, 0xbd, 0x19, 0x63, 0x85, 0xeb, 0x75, 0x73, 0x67, 0xd6, 0xf1, 0x9b, |
| 3935 | 0xdd, 0x65, 0x3c, 0x8e, 0x2f, 0xfd, 0x8d, 0x5b, 0x7a, 0x8e, 0xeb, 0x7f, | 3836 | 0x4e, 0xb1, 0xfd, 0x53, 0x86, 0x60, 0xeb, 0xb0, 0xd2, 0x41, 0xac, 0xca, |
| 3936 | 0x57, 0xc0, 0x95, 0xd2, 0x22, 0x6d, 0x6e, 0xf8, 0x3c, 0xa9, 0xce, 0xd6, | 3837 | 0xf8, 0xdc, 0xba, 0xf8, 0x08, 0xeb, 0xe2, 0xd7, 0xb3, 0xd2, 0x1b, 0x39, |
| 3937 | 0x51, 0xfd, 0x4b, 0x37, 0xf0, 0xde, 0x84, 0x91, 0xc2, 0xf5, 0x5e, 0xbb, | 3838 | 0x84, 0x7d, 0x0e, 0xce, 0x0e, 0x09, 0xce, 0xc6, 0xce, 0x42, 0x1b, 0x1c, |
| 3938 | 0x33, 0x67, 0xfb, 0x50, 0xa7, 0xe8, 0xfe, 0x31, 0x43, 0xf2, 0xec, 0xa0, | 3839 | 0x28, 0xe1, 0xec, 0x9c, 0x8b, 0xb3, 0xfd, 0x2e, 0xce, 0x1e, 0x2a, 0xe1, |
| 3939 | 0x6a, 0x67, 0xde, 0xca, 0x7a, 0x90, 0xad, 0xe2, 0x33, 0xd4, 0x3f, 0x0e, | 3840 | 0xec, 0x10, 0x9a, 0xf3, 0x11, 0x72, 0xe0, 0x0e, 0xe6, 0xda, 0x6e, 0x72, |
| 3940 | 0x8f, 0x09, 0x9d, 0x83, 0x18, 0xcd, 0xc9, 0x6c, 0x63, 0x00, 0xeb, 0xcc, | 3841 | 0x0e, 0xc9, 0x91, 0x7d, 0xca, 0xce, 0xf9, 0x80, 0xb2, 0x2d, 0x17, 0xc0, |
| 3941 | 0x58, 0xe2, 0x22, 0x7b, 0xe8, 0x43, 0x90, 0x39, 0x44, 0xe3, 0xfc, 0xcb, | 3842 | 0xeb, 0xe4, 0x53, 0x33, 0xbd, 0x50, 0x6f, 0xd9, 0x80, 0xe0, 0xce, 0x5c, |
| 3942 | 0x4a, 0x1b, 0xbc, 0xc5, 0xad, 0xf5, 0x2f, 0x28, 0x27, 0x6f, 0xad, 0x28, | 3843 | 0x0f, 0x2a, 0x75, 0xa9, 0x03, 0x2b, 0xb1, 0xdd, 0xc9, 0x55, 0x52, 0x2f, |
| 3943 | 0xe6, 0xad, 0xe5, 0xf9, 0x25, 0xc1, 0x2e, 0xd6, 0x83, 0xae, 0xd9, 0x52, | 3844 | 0x49, 0x2f, 0xa0, 0x97, 0x58, 0x07, 0x35, 0x68, 0xba, 0x75, 0xbf, 0xe0, |
| 3944 | 0x7d, 0xe8, 0x52, 0x9b, 0xec, 0xda, 0x9a, 0x51, 0x5b, 0x67, 0x7d, 0xaa, | 3845 | 0xde, 0xed, 0x7c, 0xf7, 0x2c, 0xfd, 0x10, 0x6e, 0x4e, 0x53, 0xee, 0x60, |
| 3945 | 0x63, 0xc2, 0x87, 0x97, 0x89, 0xc5, 0xa6, 0x7a, 0x10, 0x5a, 0xb6, 0x06, | 3846 | 0x3d, 0xf0, 0x61, 0x4a, 0x41, 0xf1, 0xce, 0x00, 0x38, 0x16, 0xf5, 0x3d, |
| 3946 | 0xfe, 0xad, 0x13, 0xdd, 0x28, 0xd7, 0xa5, 0x87, 0x2c, 0xc7, 0x26, 0xbb, | 3847 | 0xd0, 0x36, 0x3e, 0xd5, 0xa3, 0x74, 0xcc, 0xce, 0x05, 0x99, 0xb7, 0x99, |
| 3947 | 0xae, 0xd5, 0x05, 0xbb, 0x58, 0x7f, 0xba, 0x0a, 0x3d, 0xcc, 0x7f, 0x08, | 3848 | 0x93, 0x66, 0x82, 0x6e, 0xae, 0xfe, 0xec, 0x58, 0xd2, 0x73, 0x49, 0xb6, |
| 3948 | 0xf9, 0x53, 0xce, 0xcc, 0x40, 0x72, 0xe1, 0xed, 0x7c, 0xf7, 0x62, 0x72, | 3849 | 0x6d, 0x22, 0xc7, 0x69, 0x5d, 0xff, 0x8f, 0x36, 0x7e, 0x47, 0xde, 0xff, |
| 3949 | 0x11, 0xe0, 0xd4, 0x3f, 0x95, 0x61, 0x2f, 0x51, 0xbd, 0x5a, 0xe1, 0xd2, | 3850 | 0xcf, 0x25, 0xfb, 0xa5, 0x29, 0x4f, 0x24, 0xb0, 0xbd, 0xa0, 0x06, 0xd2, |
| 3950 | 0x9d, 0x3e, 0x90, 0x16, 0x7b, 0xfe, 0x7c, 0xeb, 0x85, 0xf1, 0x6e, 0xd5, | 3851 | 0x85, 0x0e, 0xbe, 0xdf, 0xc3, 0xb1, 0x7a, 0x83, 0x1d, 0xd6, 0xdd, 0xc1, |
| 3951 | 0x31, 0x3d, 0xe3, 0xdf, 0x68, 0xca, 0x2c, 0x62, 0xca, 0xdf, 0x4e, 0x1e, | 3852 | 0xad, 0x56, 0x77, 0x70, 0x9b, 0xc5, 0xd8, 0x2d, 0xf4, 0xd2, 0x8e, 0x3d, |
| 3952 | 0xda, 0x67, 0x9f, 0xf4, 0x6f, 0x20, 0x4f, 0x1b, 0x66, 0x3f, 0x4f, 0x53, | 3853 | 0xac, 0xe1, 0xef, 0x26, 0x7f, 0x90, 0x31, 0xfb, 0xc9, 0x65, 0x82, 0xd4, |
| 3953 | 0xea, 0x4a, 0x7f, 0x6b, 0x1b, 0x63, 0x7b, 0x87, 0xf1, 0x91, 0x15, 0xfd, | 3854 | 0x6d, 0x84, 0xba, 0x15, 0xa3, 0x7e, 0xa4, 0x35, 0x3f, 0x34, 0x75, 0xcc, |
| 3954 | 0xa6, 0xd0, 0x99, 0x2b, 0xea, 0x33, 0x4d, 0xbe, 0xc2, 0xbe, 0x4d, 0x85, | 3855 | 0x59, 0xb7, 0x09, 0xa7, 0x8f, 0x54, 0x65, 0xae, 0x6e, 0xeb, 0x3a, 0x41, |
| 3955 | 0x90, 0x2f, 0x5d, 0x68, 0xf7, 0xb7, 0x99, 0xdd, 0xfe, 0x0d, 0x66, 0x8f, | 3856 | 0x4c, 0x37, 0x1b, 0xda, 0x6e, 0x39, 0x85, 0x25, 0x7e, 0x53, 0xea, 0x5e, |
| 3956 | 0xbf, 0xdd, 0xdc, 0x49, 0xda, 0x5d, 0xfe, 0x0e, 0x93, 0x71, 0x5d, 0xe8, | 3857 | 0xd6, 0xb2, 0x89, 0x84, 0xf1, 0x3e, 0x12, 0xd1, 0xd7, 0xf9, 0xec, 0x28, |
| 3957 | 0xa1, 0x5e, 0xbb, 0x31, 0x5a, 0xd8, 0x49, 0xec, 0x21, 0x34, 0x7b, 0x89, | 3858 | 0x7d, 0x75, 0xcc, 0xe9, 0x1d, 0x70, 0x01, 0xf2, 0xcd, 0xe8, 0xb2, 0x02, |
| 3958 | 0x83, 0xfc, 0x94, 0x71, 0x88, 0x32, 0xce, 0x47, 0xbc, 0x48, 0x6b, 0x5e, | 3859 | 0xc1, 0xdb, 0x59, 0x57, 0x85, 0x4d, 0xad, 0x75, 0x97, 0x57, 0x7a, 0x19, |
| 3959 | 0xea, 0x6b, 0xc4, 0xb6, 0xe3, 0x11, 0x7b, 0x16, 0x55, 0x91, 0x7a, 0xa0, | 3860 | 0xc5, 0xdf, 0x0e, 0xa1, 0x19, 0x9d, 0x85, 0x40, 0x70, 0xcb, 0xf4, 0xe7, |
| 3960 | 0x75, 0xcb, 0x09, 0xe6, 0xfb, 0xd4, 0x9e, 0xd6, 0x65, 0xa7, 0x50, 0xe3, | 3861 | 0xf0, 0x0f, 0x27, 0x99, 0xbb, 0x20, 0x7e, 0x67, 0xdb, 0xf7, 0xb3, 0x26, |
| 3961 | 0x4d, 0x49, 0xef, 0xcc, 0x7e, 0x38, 0x1e, 0x37, 0xde, 0x43, 0x3c, 0xf2, | 3862 | 0x39, 0x9a, 0xaf, 0xc7, 0x15, 0x67, 0x4d, 0x7d, 0x38, 0x92, 0x8f, 0xe1, |
| 3962 | 0x32, 0x9f, 0x1d, 0xa6, 0xef, 0x8e, 0xd8, 0xf3, 0x07, 0x1a, 0x24, 0xdf, | 3863 | 0x32, 0xf1, 0xc9, 0xb7, 0x50, 0x87, 0x77, 0xa7, 0xbc, 0xd8, 0x67, 0xdc, |
| 3963 | 0x84, 0x2d, 0xa6, 0xcf, 0xbf, 0x8d, 0xbd, 0x59, 0x30, 0xa5, 0xb5, 0xdc, | 3864 | 0x56, 0xca, 0x09, 0x1e, 0xdc, 0x9b, 0x3c, 0x48, 0x1e, 0xe0, 0x41, 0x2d, |
| 3964 | 0xee, 0x96, 0x79, 0xc8, 0xfc, 0xef, 0x05, 0xd0, 0x84, 0xce, 0x82, 0x8f, | 3865 | 0x39, 0xd8, 0x23, 0xce, 0x35, 0x2f, 0x6b, 0xb7, 0x2f, 0x62, 0xd8, 0xcd, |
| 3965 | 0x72, 0x7d, 0x09, 0x7f, 0x7f, 0x92, 0x75, 0x0d, 0xe2, 0x87, 0x96, 0x75, | 3866 | 0x19, 0x94, 0xb1, 0x9e, 0x32, 0xb6, 0x04, 0xb7, 0xe4, 0xb4, 0xe0, 0x1d, |
| 3966 | 0x2f, 0xfb, 0x9a, 0xa3, 0xf9, 0x3a, 0x5c, 0xb6, 0x6d, 0xec, 0xc1, 0xe1, | 3867 | 0x39, 0x04, 0xfc, 0xe6, 0xca, 0xb6, 0x33, 0x27, 0x6d, 0x0c, 0x18, 0xab, |
| 3967 | 0x7c, 0x14, 0xef, 0x50, 0x3e, 0xcf, 0x5c, 0x2d, 0xde, 0x1e, 0x77, 0x63, | 3868 | 0xf0, 0xe1, 0xc9, 0xd1, 0x41, 0x1f, 0xfd, 0xe5, 0x27, 0xa9, 0x3e, 0x58, |
| 3968 | 0xb7, 0x71, 0x5b, 0xb1, 0x5e, 0xb8, 0x70, 0x4f, 0xe2, 0x00, 0xb1, 0x83, | 3869 | 0xd3, 0x38, 0x4f, 0x26, 0x71, 0x31, 0x44, 0xfc, 0x6e, 0x24, 0x67, 0xa0, |
| 3969 | 0x0b, 0xd5, 0xc4, 0x6f, 0x0f, 0xda, 0xd7, 0xdc, 0xec, 0xff, 0xbe, 0x8e, | 3870 | 0x1f, 0x18, 0xf3, 0x8c, 0xc5, 0x6d, 0xf4, 0x0f, 0xfa, 0x43, 0xda, 0x6b, |
| 3970 | 0x41, 0xa7, 0x9e, 0x90, 0xc7, 0x9d, 0xe4, 0xb1, 0xd9, 0xbf, 0x61, 0x42, | 3871 | 0x26, 0xfa, 0xc7, 0x48, 0x00, 0x6b, 0x28, 0x4f, 0x90, 0xf8, 0x1c, 0x5a, |
| 3971 | 0xf3, 0xdf, 0x31, 0x01, 0x9f, 0x37, 0xb5, 0xab, 0xf5, 0xcc, 0x49, 0x0b, | 3872 | 0x88, 0x05, 0xf7, 0x30, 0xa7, 0x44, 0x59, 0x9b, 0x05, 0x13, 0xb8, 0xad, |
| 3972 | 0x7d, 0xc6, 0xad, 0xb8, 0x72, 0x72, 0xb8, 0xdf, 0x43, 0xff, 0xf9, 0x65, | 3873 | 0x0e, 0x89, 0xe4, 0x22, 0xf5, 0xf6, 0x2f, 0x34, 0x07, 0x77, 0x31, 0x47, |
| 3973 | 0x32, 0x03, 0x73, 0x12, 0x17, 0x88, 0x3c, 0x5e, 0x0d, 0x30, 0xb7, 0x37, | 3874 | 0x5c, 0x49, 0xd8, 0x23, 0xaf, 0x18, 0x21, 0x84, 0x17, 0x0c, 0xda, 0xbb, |
| 3974 | 0x24, 0xe3, 0x21, 0xd6, 0x62, 0x63, 0x96, 0xb1, 0xd9, 0x01, 0xad, 0x9f, | 3875 | 0x0f, 0xa3, 0xf3, 0x2c, 0x97, 0x12, 0xac, 0xd7, 0x17, 0x5a, 0x83, 0xb7, |
| 3975 | 0x35, 0x39, 0xed, 0x4e, 0xc5, 0x7b, 0x47, 0x08, 0x1e, 0xab, 0xc8, 0x8f, | 3876 | 0x33, 0x16, 0x6b, 0x88, 0x53, 0x4d, 0x0b, 0xe9, 0xa0, 0xd4, 0x6b, 0xcd, |
| 3976 | 0x9f, 0xb9, 0x3b, 0x30, 0x17, 0xf5, 0xef, 0x60, 0xbd, 0x89, 0xb0, 0xbf, | 3877 | 0x0b, 0x1b, 0x29, 0x9f, 0xac, 0x63, 0x73, 0xdb, 0x26, 0xfa, 0x41, 0x6c, |
| 3977 | 0xf3, 0xc7, 0x71, 0x5b, 0x2d, 0xe2, 0x89, 0x05, 0xca, 0xed, 0x9d, 0x6b, | 3878 | 0x01, 0xdb, 0x09, 0x65, 0xaf, 0x71, 0xcc, 0xbe, 0x28, 0x79, 0xe8, 0xfe, |
| 3978 | 0xf2, 0xdf, 0xce, 0xfa, 0x71, 0x39, 0x6e, 0x0d, 0xbd, 0x68, 0x04, 0x10, | 3879 | 0x0d, 0x21, 0x62, 0x91, 0xd8, 0x92, 0x76, 0x2c, 0x94, 0x75, 0x92, 0xdc, |
| 3979 | 0x9c, 0x33, 0xa8, 0xef, 0x0c, 0x86, 0x67, 0xd9, 0x72, 0xc5, 0xd9, 0xf3, | 3880 | 0xdb, 0xd0, 0xb6, 0x70, 0x4a, 0x72, 0x6f, 0xb4, 0x2d, 0x7b, 0x4a, 0xc7, |
| 3980 | 0xcf, 0xb5, 0xf8, 0xb7, 0x31, 0x36, 0xab, 0x68, 0xa2, 0xc6, 0xb9, 0xb4, | 3881 | 0x65, 0xe6, 0x8f, 0x35, 0x29, 0xcd, 0x38, 0xa7, 0xc4, 0xa3, 0x17, 0xa9, |
| 3981 | 0x5f, 0x7a, 0xbe, 0xa6, 0xb9, 0xb5, 0xe4, 0x4f, 0x7c, 0x74, 0x5f, 0xeb, | 3882 | 0x8b, 0x0f, 0x3f, 0xb3, 0xf7, 0xea, 0x89, 0xe2, 0x4a, 0xc6, 0x4f, 0x2d, |
| 3982 | 0x3a, 0xfa, 0x43, 0x74, 0x0e, 0x9b, 0x98, 0xe6, 0x5e, 0x22, 0xcd, 0x4c, | 3883 | 0xf1, 0x2f, 0x4a, 0x5c, 0xaf, 0x5d, 0xa0, 0x61, 0x16, 0x7e, 0x46, 0xff, |
| 3983 | 0x84, 0x18, 0x76, 0xef, 0x9a, 0x00, 0xf3, 0x94, 0xe8, 0x92, 0x7a, 0x2c, | 3884 | 0x88, 0x22, 0x90, 0xd0, 0xf1, 0xde, 0xc9, 0x24, 0xed, 0x70, 0x6d, 0xcc, |
| 3984 | 0x94, 0x64, 0x92, 0xba, 0xbc, 0xa7, 0x75, 0xee, 0x94, 0xd4, 0xe5, 0x4c, | 3885 | 0x03, 0xa4, 0x50, 0x03, 0x4c, 0x77, 0x4f, 0x3c, 0x47, 0x1f, 0x1c, 0xe7, |
| 3985 | 0x6b, 0xee, 0x94, 0x8e, 0x77, 0x58, 0x5b, 0x56, 0x24, 0x35, 0xe3, 0x9c, | 3886 | 0xbc, 0x15, 0x0b, 0x22, 0xb3, 0x3c, 0x1f, 0xe1, 0xf3, 0xd7, 0xe7, 0xae, |
| 3986 | 0x8a, 0x45, 0x5e, 0xa5, 0x2c, 0x1e, 0xfc, 0xca, 0xda, 0xa5, 0xc7, 0xe7, | 3887 | 0xe5, 0xdc, 0x1f, 0x9d, 0x92, 0xfe, 0x52, 0xb4, 0xed, 0xfc, 0x49, 0x77, |
| 3987 | 0x6f, 0x61, 0x3c, 0x55, 0x33, 0x37, 0x46, 0x98, 0xf3, 0xab, 0xe7, 0xa8, | 3888 | 0xee, 0x44, 0x2a, 0x89, 0x9f, 0x9e, 0xd4, 0x86, 0xde, 0x53, 0xe2, 0xfd, |
| 3988 | 0x98, 0x39, 0xb7, 0x17, 0x15, 0x11, 0xf8, 0xe2, 0x3a, 0xde, 0x3d, 0x99, | 3889 | 0xe7, 0x15, 0x99, 0x1f, 0xf5, 0x35, 0xf8, 0xd0, 0x1e, 0x4d, 0x24, 0x86, |
| 3989 | 0xa0, 0x1e, 0xae, 0xd1, 0xdc, 0x47, 0xa8, 0xd5, 0xc7, 0x52, 0xf8, 0xc8, | 3890 | 0xf7, 0x72, 0xcc, 0xd6, 0x8d, 0xb4, 0xbf, 0x23, 0x07, 0x13, 0x3b, 0xb1, |
| 3990 | 0x53, 0xf4, 0xc5, 0x51, 0xae, 0x5b, 0x36, 0x27, 0x3c, 0xcb, 0xf3, 0x61, | 3891 | 0xd4, 0x4f, 0x79, 0x5c, 0x59, 0xea, 0x39, 0xf6, 0xc9, 0x52, 0x9d, 0xc5, |
| 3991 | 0x3e, 0x7f, 0x7d, 0xed, 0x6a, 0xae, 0xfd, 0xd1, 0x29, 0xf1, 0xd7, 0x4c, | 3892 | 0x1a, 0xf3, 0xba, 0x3c, 0x11, 0xda, 0x21, 0xb0, 0xa7, 0x25, 0x84, 0x3a, |
| 3992 | 0xeb, 0x85, 0x93, 0xce, 0xda, 0xf1, 0x64, 0x02, 0x1f, 0x9e, 0xd4, 0x06, | 3893 | 0xe7, 0x39, 0x95, 0xcf, 0x89, 0x1d, 0x7e, 0xae, 0x78, 0xf4, 0xf7, 0x89, |
| 3993 | 0xde, 0x55, 0xb1, 0xde, 0x0b, 0x4a, 0xd6, 0x47, 0x5d, 0x15, 0xae, 0x58, | 3894 | 0x5b, 0x82, 0x1d, 0x11, 0x62, 0xd6, 0xdd, 0x52, 0x8f, 0x66, 0x32, 0xf4, |
| 3994 | 0xc3, 0xf1, 0xf8, 0xe0, 0x2e, 0xd2, 0x6c, 0x59, 0x4b, 0xfd, 0xdb, 0x7c, | 3895 | 0x77, 0x3f, 0xfd, 0x7d, 0xab, 0xf8, 0xb4, 0x45, 0x9f, 0xb6, 0xe8, 0xd3, |
| 3995 | 0xd0, 0xe7, 0x99, 0x67, 0xbd, 0xe4, 0xc7, 0xe1, 0xa5, 0x8e, 0xb4, 0x4f, | 3896 | 0x96, 0x16, 0x1d, 0x42, 0x5c, 0x1d, 0xe0, 0xba, 0xa5, 0xa3, 0xe2, 0xeb, |
| 3996 | 0x16, 0x7b, 0x35, 0xf6, 0xa9, 0xd7, 0xf9, 0x09, 0x53, 0x0f, 0xbe, 0x1d, | 3897 | 0xbd, 0xd8, 0xc7, 0xdf, 0xfb, 0x78, 0xff, 0x08, 0x6b, 0x54, 0x2c, 0x95, |
| 3997 | 0xcd, 0x01, 0xd4, 0xda, 0xcf, 0x85, 0xf8, 0x9c, 0xe8, 0xe1, 0xd7, 0xca, | 3898 | 0x39, 0x0f, 0xa1, 0xc3, 0x7a, 0x02, 0x83, 0x39, 0xfc, 0x22, 0xd8, 0x52, |
| 3998 | 0xa5, 0xbf, 0xc7, 0x3c, 0x26, 0xb9, 0x24, 0xcc, 0x1c, 0xb6, 0x53, 0x7a, | 3899 | 0x89, 0xca, 0xd5, 0x52, 0x7f, 0x6b, 0xea, 0x51, 0x3c, 0xc1, 0x1a, 0xe8, |
| 3999 | 0xda, 0x6c, 0x96, 0xfe, 0xee, 0xa5, 0xbf, 0x6f, 0x14, 0x9f, 0x36, 0xe9, | 3900 | 0xe7, 0x4a, 0xb5, 0xee, 0xeb, 0x39, 0xa6, 0x68, 0x6a, 0x07, 0x6b, 0xd9, |
| 4000 | 0xd3, 0x26, 0x7d, 0xda, 0xd4, 0x22, 0x03, 0x88, 0x85, 0xfa, 0x68, 0xb7, | 3901 | 0xbd, 0x85, 0xbb, 0xb9, 0xbe, 0xf1, 0xc1, 0xd7, 0x15, 0xd6, 0x41, 0x75, |
| 4001 | 0x74, 0x44, 0x7c, 0xbd, 0x07, 0xbb, 0xf9, 0xd9, 0xc3, 0xfb, 0x87, 0xd9, | 3902 | 0x9c, 0x9b, 0xb1, 0x74, 0x07, 0xe7, 0xb1, 0x44, 0x0e, 0x07, 0x5f, 0x7f, |
| 4002 | 0xe7, 0x62, 0x91, 0xac, 0x79, 0x10, 0xed, 0xe6, 0x23, 0xe8, 0x9f, 0xc0, | 3903 | 0x0f, 0x62, 0xdb, 0x6f, 0x37, 0x0e, 0x70, 0x7e, 0x57, 0x8e, 0x51, 0xd6, |
| 4003 | 0x6f, 0xfc, 0xcd, 0xe5, 0x28, 0x5f, 0x2e, 0x3d, 0xbc, 0x16, 0x3a, 0x8a, | 3904 | 0x83, 0x03, 0x8c, 0xb1, 0x7d, 0x4e, 0x7c, 0xf5, 0x72, 0x8c, 0xeb, 0xb8, |
| 4004 | 0x47, 0xd8, 0x47, 0xfd, 0x5a, 0x55, 0xea, 0x9e, 0xee, 0x63, 0x4a, 0x0b, | 3905 | 0xb5, 0x25, 0x2b, 0xf9, 0xd2, 0xc6, 0x93, 0x86, 0x8d, 0xe7, 0xf9, 0x7b, |
| 4005 | 0xb5, 0xb3, 0x1f, 0xde, 0x55, 0xd8, 0x49, 0xfb, 0xc6, 0xfa, 0x5f, 0x56, | 3906 | 0x81, 0xd8, 0x35, 0x76, 0x03, 0x76, 0x79, 0xf8, 0xdc, 0x1e, 0x3e, 0xd7, |
| 4006 | 0xec, 0xa5, 0x6a, 0xb9, 0x36, 0x63, 0xe9, 0x0e, 0xae, 0x63, 0x0a, 0x1f, | 3907 | 0x4a, 0xdc, 0x9e, 0x9f, 0x95, 0xbe, 0xde, 0x21, 0xe9, 0xeb, 0x21, 0x6f, |
| 4007 | 0x76, 0xbe, 0xfd, 0x7d, 0x88, 0x6e, 0x7f, 0xd2, 0xd0, 0xc7, 0xf5, 0x1d, | 3908 | 0x89, 0xed, 0x87, 0x70, 0x3e, 0x1b, 0x1f, 0xf6, 0x7a, 0xed, 0x11, 0xc6, |
| 4008 | 0x3e, 0x86, 0xd9, 0x53, 0xf6, 0x31, 0xc6, 0x76, 0xdb, 0xf1, 0xd5, 0x43, | 3909 | 0xd5, 0x85, 0x8f, 0xe8, 0xbb, 0x6f, 0x6e, 0xd0, 0x7a, 0x68, 0xc3, 0xe4, |
| 4009 | 0x1a, 0xd7, 0xf3, 0xd8, 0x86, 0x9c, 0xd4, 0x52, 0x0b, 0x8f, 0x1a, 0x16, | 3910 | 0xa4, 0xa2, 0x45, 0xbf, 0x8b, 0xe2, 0xf6, 0x00, 0x9a, 0x62, 0x6b, 0xbd, |
| 4010 | 0x9e, 0xe6, 0xe7, 0x22, 0x73, 0xd9, 0xc8, 0x0d, 0xb9, 0xcc, 0xc5, 0xe7, | 3911 | 0x09, 0x95, 0x38, 0x57, 0x1c, 0xa0, 0xa6, 0xcf, 0x16, 0x5c, 0x6c, 0xdb, |
| 4011 | 0x76, 0xf0, 0xb9, 0x16, 0xa6, 0xce, 0xd9, 0x69, 0x99, 0x0d, 0x1e, 0x94, | 3912 | 0x54, 0xc2, 0xb6, 0xd6, 0x7c, 0x15, 0xb1, 0x87, 0x39, 0x78, 0xd6, 0xce, |
| 4012 | 0xd9, 0x20, 0xf2, 0xa6, 0xe8, 0x7e, 0x00, 0x17, 0x72, 0xb1, 0x41, 0xb7, | 3913 | 0x84, 0x99, 0x9f, 0x0a, 0xb3, 0x32, 0xf6, 0x08, 0x9a, 0x52, 0x32, 0x96, |
| 4013 | 0xdb, 0x1a, 0x62, 0x5c, 0x5d, 0xfc, 0x88, 0xbe, 0xfb, 0xda, 0x1a, 0xad, | 3914 | 0xde, 0x39, 0xa9, 0xe0, 0x4b, 0xd5, 0x48, 0x30, 0x37, 0xc1, 0xa8, 0xd4, |
| 4014 | 0x9b, 0x3a, 0x4c, 0x8c, 0x29, 0x2d, 0xf2, 0x33, 0xcc, 0x6f, 0xf2, 0xa1, | 3915 | 0x33, 0x36, 0x73, 0x90, 0xea, 0x37, 0x25, 0x3f, 0x76, 0x13, 0x0f, 0x7b, |
| 4015 | 0x31, 0xba, 0xd2, 0x1d, 0x0f, 0x9d, 0x85, 0x36, 0xdf, 0x47, 0x49, 0x9f, | 3916 | 0x89, 0x87, 0xc2, 0x99, 0xa5, 0xd7, 0xe9, 0xe2, 0xd1, 0xd6, 0x82, 0xac, |
| 4016 | 0x2c, 0x38, 0xb9, 0x6e, 0x5d, 0x31, 0xd7, 0xb5, 0xe4, 0x2b, 0xd4, 0x1d, | 3917 | 0x8b, 0xac, 0x89, 0xac, 0xcd, 0x21, 0xdc, 0x6b, 0x49, 0xdd, 0x6e, 0x63, |
| 4017 | 0x13, 0xac, 0xcf, 0xd3, 0x56, 0x36, 0xc8, 0x7a, 0x55, 0x98, 0x16, 0xda, | 3918 | 0xca, 0x48, 0xc4, 0x9e, 0x83, 0xac, 0xd3, 0x21, 0xda, 0xc2, 0x8f, 0x7d, |
| 4018 | 0x43, 0x68, 0x4c, 0x0a, 0x2d, 0xbd, 0x73, 0x4c, 0xe1, 0x1b, 0x95, 0x88, | 3919 | 0xc4, 0xbf, 0xbd, 0x2d, 0xb4, 0x55, 0xd8, 0x8f, 0xbd, 0x4e, 0x1f, 0xa0, |
| 4019 | 0xb3, 0x56, 0xc1, 0x28, 0xd7, 0xb3, 0x16, 0x6b, 0x52, 0xc8, 0x9b, 0x92, | 3920 | 0x6c, 0x3f, 0x3f, 0xd7, 0x50, 0x61, 0x4e, 0xfb, 0xaa, 0xdf, 0xb5, 0xa3, |
| 4020 | 0xda, 0xd9, 0xc5, 0xbe, 0xa5, 0x87, 0x79, 0x51, 0x30, 0xb5, 0xcc, 0x4b, | 3921 | 0xdb, 0x57, 0xf4, 0x9a, 0x32, 0x5e, 0xb9, 0xa7, 0xe8, 0xda, 0x6e, 0x7b, |
| 4021 | 0x9d, 0x7c, 0xb4, 0xb1, 0x20, 0x76, 0x11, 0x9b, 0x88, 0x6d, 0x0e, 0xe2, | 3922 | 0x56, 0xc6, 0xb5, 0x71, 0xd6, 0x70, 0xb9, 0x69, 0xd9, 0x66, 0x82, 0xed, |
| 4022 | 0x1e, 0x53, 0x7a, 0x7f, 0x0b, 0xe3, 0x46, 0x3c, 0xfa, 0x14, 0xc4, 0x4e, | 3923 | 0x4b, 0x36, 0x02, 0x6b, 0x6f, 0xe0, 0xa7, 0x55, 0xbc, 0xd6, 0x75, 0x9d, |
| 4023 | 0x07, 0xa9, 0x0b, 0x2f, 0x76, 0x33, 0x0f, 0xee, 0x6a, 0xa6, 0xae, 0x82, | 3924 | 0x9f, 0xf6, 0x09, 0x07, 0x26, 0x3f, 0xed, 0xdc, 0x49, 0x7e, 0xda, 0xa0, |
| 4024 | 0x5e, 0xec, 0xb2, 0x67, 0x09, 0x25, 0xfd, 0x79, 0x69, 0x43, 0xc5, 0x1a, | 3925 | 0x94, 0xb9, 0xa9, 0xf4, 0x14, 0xca, 0xfc, 0xb4, 0xb6, 0x84, 0xcd, 0x87, |
| 4025 | 0x37, 0xeb, 0x75, 0xf4, 0xe8, 0xcc, 0x26, 0xdd, 0x29, 0xa1, 0x57, 0x9a, | 3926 | 0xb0, 0x97, 0xdc, 0xa5, 0xae, 0x61, 0x04, 0x81, 0x75, 0x9e, 0x4f, 0x3d, |
| 4026 | 0x4b, 0x3a, 0xba, 0xdb, 0x94, 0x13, 0xba, 0x16, 0xce, 0x1a, 0x0e, 0x6e, | 3927 | 0x18, 0x61, 0xed, 0x51, 0x01, 0x2c, 0xb3, 0xb1, 0x72, 0x7d, 0xc6, 0xae, |
| 4027 | 0x2d, 0xe9, 0x2c, 0x42, 0xb9, 0x6a, 0xd6, 0x02, 0x2b, 0x6f, 0xc0, 0xae, | 3928 | 0xd4, 0x1b, 0x62, 0x95, 0x1e, 0xe9, 0x19, 0x27, 0x32, 0x63, 0xc4, 0x12, |
| 4028 | 0x15, 0xbc, 0xb6, 0xe5, 0x3a, 0x76, 0xcd, 0x08, 0x3e, 0x26, 0x76, 0xed, | 3929 | 0xcf, 0x3a, 0x2d, 0x93, 0x46, 0x40, 0x5d, 0xa2, 0xdf, 0x5d, 0xaa, 0x09, |
| 4029 | 0xdc, 0x4a, 0xec, 0x5a, 0xaf, 0x4a, 0xb8, 0x55, 0xe6, 0x12, 0x25, 0xec, | 3930 | 0xa2, 0x81, 0x1d, 0xe4, 0x36, 0x89, 0xd4, 0x2f, 0xed, 0x99, 0xc8, 0x08, |
| 4030 | 0x5a, 0x5d, 0xcc, 0xd1, 0x07, 0xb1, 0x8b, 0xb8, 0xa6, 0xb6, 0x7e, 0x08, | 3931 | 0xa2, 0xeb, 0x8a, 0xc3, 0x51, 0xa4, 0x0f, 0x46, 0x1d, 0x5c, 0x99, 0x40, |
| 4031 | 0xbe, 0x55, 0xae, 0xcf, 0x5c, 0x18, 0x62, 0xbf, 0x52, 0x06, 0x2c, 0xb6, | 3932 | 0x3e, 0x11, 0x0d, 0x74, 0x17, 0x32, 0xc1, 0xae, 0xc6, 0x18, 0x76, 0x4e, |
| 4032 | 0x70, 0xcb, 0xea, 0xac, 0x55, 0xae, 0xd7, 0x47, 0xcb, 0x5d, 0x32, 0x77, | 3933 | 0x76, 0xb0, 0xe6, 0xd0, 0xb1, 0x6d, 0xb2, 0x93, 0xf5, 0x51, 0x8f, 0xd2, |
| 4033 | 0x8e, 0x67, 0x47, 0x98, 0x4b, 0x5c, 0xab, 0xb4, 0x6c, 0x1a, 0xbe, 0x50, | 3934 | 0x33, 0x2b, 0xf6, 0x11, 0xfb, 0x6a, 0x6a, 0xcc, 0x73, 0x63, 0x2f, 0xb3, |
| 4034 | 0x8d, 0xbe, 0xb3, 0xd8, 0x2f, 0x44, 0x7c, 0x9b, 0x89, 0x7b, 0xe2, 0xc9, | 3935 | 0x5c, 0xcf, 0xbe, 0xef, 0xf8, 0xce, 0xb8, 0xa1, 0xd2, 0x2e, 0xff, 0xdb, |
| 4035 | 0x4f, 0xad, 0xa9, 0xb0, 0xd0, 0x98, 0x9f, 0xf7, 0x21, 0xfd, 0x90, 0x8f, | 3936 | 0x8f, 0xb0, 0x8d, 0x33, 0x86, 0xf8, 0x1c, 0xbf, 0xb3, 0xb6, 0xda, 0xda, |
| 4036 | 0x75, 0x68, 0x41, 0x1d, 0xc1, 0x6b, 0xf1, 0x88, 0x6f, 0x5b, 0x21, 0xeb, | 3937 | 0x32, 0x65, 0xfb, 0x74, 0xe9, 0x49, 0x47, 0x9d, 0xf5, 0x92, 0x1a, 0xab, |
| 4037 | 0xdf, 0xd2, 0x70, 0x0b, 0xba, 0x4e, 0x49, 0xcd, 0x89, 0x62, 0xeb, 0xa9, | 3938 | 0x63, 0xb6, 0x97, 0x6b, 0x54, 0xee, 0x3f, 0xdf, 0xb8, 0x56, 0x9b, 0x83, |
| 4038 | 0x76, 0xd6, 0x19, 0x1d, 0x1d, 0x63, 0x9d, 0xec, 0xe3, 0xba, 0x55, 0xf7, | 3939 | 0x5b, 0x89, 0x67, 0xac, 0xc7, 0x02, 0x01, 0x62, 0x64, 0xe0, 0x94, 0x8d, |
| 4039 | 0xb4, 0xe8, 0x49, 0xf4, 0xac, 0x85, 0xa2, 0xae, 0x1b, 0xe7, 0xa2, 0xa5, | 3940 | 0x59, 0xe3, 0x1d, 0xfb, 0x49, 0xdd, 0xc7, 0xf5, 0xb8, 0x95, 0x78, 0x2b, |
| 4040 | 0x9e, 0xf8, 0x3d, 0xdb, 0x87, 0x46, 0x8d, 0x10, 0xf5, 0xf3, 0x2b, 0x2f, | 3941 | 0xfc, 0xc3, 0x0c, 0xee, 0x9a, 0xf6, 0x79, 0x58, 0x5b, 0xb5, 0x54, 0xc0, |
| 4041 | 0x82, 0x16, 0xce, 0x18, 0xe2, 0x7b, 0xfc, 0xdb, 0x4c, 0x63, 0x63, 0xf3, | 3942 | 0xa9, 0xad, 0x9c, 0x3e, 0xe1, 0xb1, 0xfc, 0x6d, 0xc1, 0xae, 0x1c, 0xeb, |
| 4042 | 0xb8, 0xe5, 0xd1, 0x65, 0xbe, 0x1d, 0xb1, 0xed, 0xb6, 0x81, 0xb5, 0xac, | 3943 | 0x04, 0xd6, 0xa9, 0x6e, 0x8d, 0x76, 0x6b, 0xf0, 0x9e, 0x9c, 0x57, 0xa9, |
| 4043 | 0x7d, 0xba, 0x87, 0xb6, 0x2a, 0xcd, 0xb2, 0x6f, 0xb4, 0xd9, 0x7a, 0xff, | 3944 | 0x33, 0xe1, 0x6d, 0xdd, 0x68, 0xe3, 0xe3, 0xf5, 0x89, 0xe1, 0xa8, 0x87, |
| 4044 | 0x46, 0xe6, 0x35, 0xf6, 0xe9, 0x3e, 0x1f, 0x73, 0xa5, 0xef, 0x94, 0x85, | 3945 | 0xd8, 0xc8, 0xb1, 0xac, 0x7c, 0x4b, 0xb0, 0x8f, 0x58, 0x7c, 0x7b, 0x0e, |
| 4045 | 0x69, 0xe3, 0x4d, 0xeb, 0x51, 0xdd, 0x43, 0xbb, 0x7c, 0x95, 0x79, 0x57, | 3946 | 0x69, 0xe9, 0xa9, 0x86, 0xd7, 0x8f, 0xf6, 0x87, 0x21, 0xfd, 0x2f, 0x7c, |
| 4046 | 0x70, 0x49, 0xca, 0x7f, 0xfb, 0xa4, 0xc7, 0x55, 0x95, 0x42, 0x73, 0x19, | 3947 | 0x89, 0xd1, 0x18, 0xa1, 0xaf, 0x45, 0xdb, 0x95, 0xc4, 0xe2, 0x20, 0x12, |
| 4047 | 0x7d, 0xee, 0xd5, 0xa4, 0x33, 0x73, 0x3c, 0x96, 0xbf, 0xcd, 0xbf, 0x65, | 3948 | 0x17, 0x3e, 0xf6, 0xbe, 0x63, 0x3f, 0x9d, 0xdf, 0xc8, 0xe7, 0x3b, 0x89, |
| 4048 | 0x82, 0xbd, 0x04, 0x7b, 0x5d, 0xa7, 0xbf, 0xfb, 0xaa, 0xff, 0xee, 0x09, | 3949 | 0x93, 0x69, 0xe2, 0xe6, 0xe8, 0xb0, 0x1f, 0xf2, 0x8e, 0xd6, 0xf7, 0xb6, |
| 4049 | 0xb7, 0xaa, 0x4d, 0xc1, 0xdd, 0xb2, 0xd6, 0xc2, 0xc7, 0xab, 0xe3, 0x83, | 3950 | 0x12, 0xa7, 0x8f, 0xe3, 0x77, 0xf8, 0xbc, 0xba, 0x8d, 0x18, 0x39, 0x6b, |
| 4050 | 0x11, 0x17, 0x73, 0x24, 0x69, 0x99, 0xf9, 0x66, 0x7f, 0x86, 0x39, 0x79, | 3951 | 0x24, 0xd2, 0x5b, 0x90, 0xe9, 0xac, 0x85, 0x66, 0x34, 0x2a, 0xd2, 0xaf, |
| 4051 | 0xdb, 0x04, 0xd2, 0x32, 0x9f, 0x0d, 0xae, 0x1e, 0xee, 0x0d, 0x42, 0x66, | 3952 | 0x12, 0xfb, 0x27, 0xf1, 0x3d, 0xce, 0xe9, 0xd3, 0xc5, 0x8e, 0x9b, 0x31, |
| 4052 | 0x69, 0xf8, 0x06, 0xa3, 0x32, 0x4c, 0x9f, 0x8b, 0xb4, 0xa9, 0xf8, 0x42, | 3953 | 0x30, 0xab, 0xa9, 0xd7, 0xfd, 0x4c, 0x6c, 0x20, 0x76, 0xe9, 0xa8, 0x40, |
| 4053 | 0x3f, 0xe2, 0x17, 0x3f, 0x76, 0xbf, 0x69, 0x3d, 0x9e, 0x5f, 0xcb, 0xe7, | 3954 | 0xd5, 0x52, 0xea, 0xf6, 0x3d, 0x07, 0x4f, 0x82, 0xba, 0x8e, 0xff, 0x42, |
| 4054 | 0x3b, 0x99, 0x2f, 0xd3, 0xcc, 0x9f, 0xc3, 0x83, 0x5e, 0xc8, 0x3b, 0x5a, | 3955 | 0x1e, 0xf4, 0x17, 0x05, 0xe9, 0x4b, 0x96, 0xb9, 0x9d, 0xf8, 0x44, 0x73, |
| 4055 | 0xe6, 0x0d, 0x15, 0xa3, 0xaf, 0xe3, 0x9b, 0x7c, 0x3e, 0xd4, 0xc1, 0x5c, | 3956 | 0xdb, 0x2d, 0x33, 0xc9, 0x52, 0x9f, 0x32, 0x10, 0xec, 0x9c, 0xb6, 0x71, |
| 4056 | 0x39, 0x6d, 0xc4, 0xd3, 0x1b, 0x90, 0xed, 0xac, 0x86, 0x66, 0x34, 0x28, | 3957 | 0xd2, 0x08, 0x43, 0xea, 0xf3, 0xca, 0x54, 0x91, 0x19, 0xbf, 0x19, 0xdb, |
| 4057 | 0x99, 0x7d, 0x89, 0x1d, 0x12, 0xf8, 0x39, 0xd7, 0xf4, 0xe8, 0xa2, 0xc7, | 3958 | 0x78, 0xbd, 0x63, 0xba, 0x5a, 0xe9, 0xc8, 0xd9, 0xf8, 0xa6, 0xa1, 0x65, |
| 4058 | 0xf5, 0xe8, 0x9b, 0x66, 0xfd, 0xbf, 0xe6, 0x6f, 0xa2, 0x03, 0xd1, 0xcb, | 3959 | 0xda, 0xbd, 0x8c, 0x65, 0x43, 0x3b, 0x0b, 0x5c, 0x26, 0x27, 0x12, 0xdf, |
| 4059 | 0x37, 0xcb, 0x50, 0xb1, 0x88, 0xb2, 0xfd, 0xdc, 0xce, 0x2b, 0x7e, 0x5d, | 3960 | 0xf2, 0x21, 0xa4, 0xbb, 0x63, 0x35, 0xcf, 0xdc, 0x46, 0xbe, 0x20, 0xb1, |
| 4060 | 0xc7, 0x7f, 0x26, 0x3e, 0xfa, 0x4f, 0x05, 0x99, 0x71, 0x96, 0x30, 0x9f, | 3961 | 0xe5, 0x5d, 0x53, 0x85, 0x94, 0x32, 0xe3, 0x13, 0xbb, 0x75, 0x22, 0x5d, |
| 4061 | 0xdd, 0x47, 0xb5, 0x2e, 0x9b, 0x4a, 0x14, 0x67, 0x9e, 0x3e, 0x7f, 0xe7, | 3962 | 0xa8, 0x56, 0x76, 0xd3, 0x96, 0x77, 0xac, 0xab, 0xc0, 0x25, 0xc7, 0x96, |
| 4062 | 0xa4, 0x85, 0x93, 0x46, 0x10, 0xd2, 0xe3, 0x97, 0x27, 0xe7, 0x89, 0x00, | 3963 | 0xb7, 0xd1, 0x96, 0x78, 0x6b, 0x05, 0xbc, 0xe7, 0xeb, 0xd0, 0xa9, 0xc0, |
| 4063 | 0x9a, 0xd0, 0xc1, 0xeb, 0xed, 0x93, 0x95, 0xaa, 0x7d, 0xc2, 0xc2, 0x5f, | 3964 | 0xa9, 0xbd, 0xaa, 0x99, 0x9f, 0xd3, 0xe4, 0xae, 0xe4, 0x7d, 0x6a, 0x2f, |
| 4064 | 0x18, 0x5a, 0xb6, 0xcd, 0xcd, 0x98, 0x36, 0xb4, 0xb3, 0xc0, 0x3b, 0xc4, | 3965 | 0xbe, 0x42, 0x9c, 0x79, 0x92, 0x3e, 0xfa, 0x33, 0xbd, 0x19, 0x55, 0x5f, |
| 4065 | 0x4a, 0xe2, 0x63, 0x1e, 0x04, 0x74, 0x87, 0x56, 0xd3, 0xd4, 0x6d, 0xc4, | 3966 | 0x6d, 0xe1, 0x3a, 0x6e, 0x0c, 0xee, 0xc8, 0xf5, 0xe1, 0xa9, 0x79, 0x1b, |
| 4066 | 0x0f, 0x12, 0x63, 0xee, 0x15, 0x15, 0x48, 0xaa, 0x29, 0x8f, 0xe8, 0xad, | 3967 | 0xcf, 0x31, 0x3e, 0x1a, 0x53, 0x19, 0xb5, 0x92, 0xb5, 0x18, 0x73, 0xd9, |
| 4067 | 0x13, 0xe9, 0x42, 0xa5, 0xda, 0x4e, 0x5d, 0xde, 0xb1, 0xaa, 0x0c, 0x97, | 3968 | 0xe2, 0x09, 0xc7, 0xbf, 0x57, 0xb6, 0x6d, 0x9e, 0x8b, 0xc2, 0xfb, 0x15, |
| 4068 | 0x6c, 0x5d, 0xde, 0x46, 0x5d, 0xe2, 0xf5, 0xa5, 0x70, 0x5f, 0xa8, 0x45, | 3969 | 0xf9, 0xbb, 0xbe, 0x2d, 0x36, 0x27, 0x9f, 0x51, 0x7e, 0xda, 0x18, 0x32, |
| 4069 | 0xa7, 0x82, 0xdd, 0x9f, 0x55, 0xb2, 0x4e, 0xa7, 0x89, 0x6f, 0x89, 0x07, | 3970 | 0xb4, 0xf4, 0xc7, 0xde, 0x2a, 0x54, 0x27, 0x6c, 0x7b, 0x28, 0x25, 0xd7, |
| 4070 | 0x43, 0x3d, 0xf8, 0x2e, 0xf3, 0xcd, 0xa3, 0xf4, 0xd5, 0x5f, 0xe9, 0x4d, | 3971 | 0xf5, 0xb6, 0xa4, 0x73, 0xbf, 0x81, 0x9f, 0xe5, 0x3e, 0xf2, 0xeb, 0xc2, |
| 4071 | 0xa8, 0xf8, 0x5e, 0x33, 0xed, 0xb8, 0xd6, 0xbf, 0x79, 0x22, 0x83, 0xc7, | 3972 | 0xf9, 0x62, 0x69, 0xea, 0xbc, 0x93, 0x79, 0xbd, 0x8f, 0x79, 0xbd, 0xce, |
| 4072 | 0x66, 0x2d, 0x3c, 0xc5, 0x38, 0x69, 0x48, 0x66, 0x43, 0xe5, 0xec, 0xd7, | 3973 | 0xd4, 0xd2, 0x7b, 0xbc, 0xd2, 0x3b, 0x29, 0x1e, 0xac, 0xe5, 0xf5, 0x5d, |
| 4073 | 0x58, 0xd3, 0x16, 0x4e, 0xd8, 0x7e, 0xbe, 0xab, 0x75, 0xfd, 0x4c, 0x04, | 3974 | 0xa5, 0xbc, 0x5e, 0x73, 0x4a, 0xfa, 0x70, 0xe4, 0x7a, 0x70, 0xf7, 0x2f, |
| 4074 | 0xee, 0xef, 0xca, 0xef, 0x3b, 0x5b, 0xa3, 0x33, 0xf2, 0x9d, 0xe1, 0xb7, | 3975 | 0xba, 0x99, 0xd7, 0xab, 0x26, 0x7d, 0xe8, 0x62, 0x4e, 0xf7, 0x93, 0x67, |
| 4075 | 0x85, 0x01, 0x43, 0x4b, 0x7f, 0xec, 0xae, 0x40, 0x65, 0xdc, 0xb2, 0x06, | 3976 | 0x6f, 0xcd, 0xd7, 0x21, 0x78, 0xc2, 0x8b, 0x78, 0xea, 0xdb, 0x38, 0x48, |
| 4076 | 0x92, 0x72, 0xbd, 0xaf, 0x35, 0x61, 0xdf, 0xdf, 0xc3, 0xef, 0xd2, 0x4c, | 3977 | 0x1f, 0x3b, 0x98, 0xf4, 0x2a, 0xb1, 0xe5, 0x1e, 0xda, 0xe9, 0x9f, 0x70, |
| 4077 | 0xfa, 0x6f, 0x04, 0x0b, 0x46, 0xd3, 0x94, 0x79, 0x2b, 0xeb, 0x7b, 0x86, | 3978 | 0x40, 0xf5, 0xa2, 0x46, 0xff, 0x2e, 0x1e, 0xfa, 0x35, 0xb9, 0xbc, 0x2f, |
| 4078 | 0xf5, 0xbd, 0x36, 0xa5, 0xa5, 0x77, 0xb8, 0x65, 0xfe, 0x32, 0x7f, 0xa0, | 3979 | 0x27, 0x31, 0xbd, 0xb2, 0xad, 0xeb, 0x94, 0x9b, 0xcb, 0x43, 0xa7, 0x46, |
| 4079 | 0x9a, 0xd7, 0x6f, 0x2f, 0xd6, 0xf7, 0xaa, 0x53, 0x32, 0xd3, 0x23, 0x06, | 3980 | 0x17, 0x25, 0x97, 0xd7, 0xad, 0xef, 0xc3, 0xe9, 0x69, 0xfc, 0xe1, 0x0a, |
| 4080 | 0x84, 0xb3, 0x17, 0xd2, 0xc5, 0xfa, 0x5e, 0x31, 0xe6, 0xc1, 0x16, 0xd6, | 3981 | 0x92, 0xc4, 0x3a, 0xce, 0xd9, 0x90, 0x4a, 0xb0, 0x6e, 0xd6, 0x06, 0xb7, |
| 4081 | 0x76, 0x2f, 0xb1, 0xf8, 0xc6, 0x7c, 0x2d, 0xfc, 0x27, 0xdc, 0x88, 0x25, | 3982 | 0x29, 0x89, 0x89, 0x1a, 0xc6, 0xfe, 0x69, 0xe6, 0xf2, 0x80, 0x99, 0x50, |
| 4082 | 0x7f, 0x82, 0x03, 0xf4, 0xb1, 0x03, 0x09, 0xb7, 0x8a, 0x2e, 0x71, 0x51, | 3983 | 0x93, 0x1e, 0x74, 0xfb, 0xb9, 0x1e, 0x1f, 0xb0, 0x86, 0xfe, 0x61, 0x3e, |
| 4083 | 0x4f, 0xff, 0x88, 0x7d, 0x21, 0x37, 0xaa, 0xf4, 0x9f, 0xe1, 0x81, 0x2f, | 3984 | 0xc6, 0x31, 0x2b, 0xe0, 0x63, 0x2e, 0xff, 0x40, 0xc7, 0xa7, 0x5e, 0xfa, |
| 4084 | 0xa8, 0xe9, 0x99, 0x09, 0x89, 0xed, 0x5d, 0xad, 0x5b, 0x4e, 0x39, 0x35, | 3985 | 0xde, 0x65, 0x6f, 0x00, 0x57, 0xf3, 0x6e, 0x2e, 0xaf, 0x6d, 0xb4, 0x47, |
| 4085 | 0x3d, 0x70, 0x6a, 0x78, 0x41, 0x6a, 0x7a, 0xed, 0xea, 0x0c, 0x4e, 0x4f, | 3986 | 0xae, 0xa4, 0x42, 0xf8, 0x30, 0x6f, 0xd0, 0x07, 0xfb, 0x70, 0x84, 0xb9, |
| 4086 | 0xe2, 0x3b, 0x4b, 0x09, 0x1e, 0x6b, 0xb9, 0x66, 0x7d, 0x32, 0xce, 0xde, | 3987 | 0xfc, 0x8a, 0xae, 0xe2, 0xa7, 0xf9, 0x56, 0xfa, 0x65, 0x04, 0x3f, 0x21, |
| 4087 | 0x5a, 0xeb, 0xef, 0x50, 0xf1, 0x23, 0x55, 0xcc, 0x01, 0xa7, 0x59, 0xd3, | 3988 | 0xcf, 0x5d, 0xc7, 0x5c, 0x7e, 0x27, 0x7d, 0x2a, 0xc5, 0x5c, 0xde, 0xee, |
| 4088 | 0x7d, 0xa9, 0x78, 0x28, 0xe1, 0x42, 0x97, 0x97, 0xf6, 0x78, 0x9f, 0x7d, | 3989 | 0xf0, 0x8c, 0xe6, 0xb6, 0x33, 0x53, 0x4e, 0x2e, 0x6f, 0x64, 0x89, 0x5f, |
| 4089 | 0xf6, 0x5b, 0xf9, 0x28, 0x69, 0x96, 0xc1, 0xc3, 0x9a, 0xfe, 0xbe, 0x8e, | 3990 | 0xef, 0x47, 0x62, 0x91, 0xf8, 0x60, 0xff, 0x6c, 0x63, 0x88, 0xcf, 0xd2, |
| 4090 | 0xcf, 0xdc, 0xf4, 0xbd, 0x77, 0xdc, 0x3e, 0x5c, 0xcd, 0x3b, 0x35, 0xbd, | 3991 | 0x6e, 0x85, 0xf5, 0x98, 0x71, 0x72, 0xcf, 0xe6, 0xe0, 0x6e, 0xce, 0xbd, |
| 4091 | 0xba, 0xc1, 0x1a, 0xba, 0x9c, 0x0c, 0xe0, 0x4a, 0xde, 0xa0, 0x0f, 0x66, | 3992 | 0xcc, 0x89, 0x33, 0x1b, 0x3b, 0xd7, 0xbd, 0x89, 0x3f, 0x58, 0xe2, 0xa1, |
| 4092 | 0x70, 0x98, 0x35, 0xfd, 0xb2, 0x1e, 0xc2, 0x87, 0xf9, 0x16, 0xfa, 0x65, | 3993 | 0x1f, 0x9a, 0xc1, 0x3b, 0x18, 0x6b, 0x61, 0xfa, 0xd7, 0x4f, 0x53, 0x89, |
| 4093 | 0x18, 0xbf, 0x24, 0xfe, 0x5d, 0xc5, 0x9a, 0x7e, 0x27, 0x7d, 0x2a, 0xc9, | 3994 | 0xfe, 0x73, 0xac, 0x21, 0x7f, 0xc2, 0x38, 0xbb, 0x93, 0xbe, 0xb1, 0x72, |
| 4094 | 0x9a, 0xde, 0x66, 0xe3, 0x8d, 0x7d, 0xad, 0x67, 0xc6, 0xed, 0x9a, 0xde, | 3995 | 0x5d, 0x80, 0xeb, 0xee, 0xc6, 0x59, 0x07, 0xe3, 0x2c, 0xca, 0x38, 0x5b, |
| 4095 | 0xe0, 0x62, 0x3d, 0xf4, 0x22, 0xbe, 0xc0, 0x3c, 0x61, 0xfd, 0x6a, 0x6d, | 3996 | 0xc1, 0x38, 0x7b, 0xda, 0x48, 0x24, 0x37, 0x93, 0x6f, 0xbd, 0x9e, 0x97, |
| 4096 | 0x80, 0xcf, 0x52, 0x6f, 0x85, 0xd5, 0x98, 0xb2, 0x6b, 0xd0, 0x7a, 0xff, | 3997 | 0x58, 0x6b, 0xe1, 0xb8, 0x1a, 0xf5, 0x1a, 0xed, 0x97, 0x98, 0xd9, 0xb9, |
| 4097 | 0x76, 0xae, 0xbd, 0xd8, 0x8e, 0x33, 0x0b, 0x5b, 0x57, 0xbd, 0x86, 0x3f, | 3998 | 0x6e, 0xf4, 0x6c, 0x35, 0xc4, 0x56, 0xf8, 0x74, 0x19, 0xb9, 0x05, 0x11, |
| 4098 | 0xaa, 0x71, 0xd1, 0x0f, 0x53, 0xfe, 0x3b, 0x18, 0x6b, 0xc1, 0x54, 0x69, | 3999 | 0xe9, 0xc2, 0xa2, 0x37, 0x31, 0xbc, 0xca, 0x9b, 0x18, 0x7a, 0x5f, 0x79, |
| 4099 | 0xe6, 0x91, 0xe0, 0x3a, 0xb7, 0xf9, 0xef, 0xa4, 0x6f, 0xdc, 0xb2, 0x8a, | 4000 | 0xc7, 0x7e, 0x8b, 0x71, 0x76, 0x3b, 0xe3, 0x6c, 0x37, 0xe3, 0xac, 0xdd, |
| 4100 | 0x99, 0x24, 0xe4, 0xc4, 0x59, 0x3b, 0xe3, 0x2c, 0xc2, 0x38, 0x5b, 0xca, | 4001 | 0xb2, 0xf1, 0x52, 0x4a, 0xeb, 0x6b, 0xf6, 0xc4, 0x8d, 0x76, 0x0f, 0x56, |
| 4101 | 0x38, 0x7b, 0xdc, 0x88, 0x27, 0xd6, 0x13, 0x77, 0xbd, 0x9c, 0x97, 0x58, | 4002 | 0x54, 0x33, 0x25, 0x04, 0x91, 0xe8, 0xfc, 0x03, 0xca, 0x7f, 0xc1, 0x48, |
| 4102 | 0x6b, 0x26, 0x5d, 0x8d, 0x72, 0x0d, 0xf7, 0x4a, 0xcc, 0x6c, 0x5d, 0x35, | 4003 | 0xf4, 0x24, 0x15, 0x89, 0xad, 0x18, 0x7e, 0x4c, 0xbd, 0x2b, 0x4b, 0xb1, |
| 4103 | 0x7c, 0xb6, 0x12, 0xa2, 0x2b, 0x7c, 0xb6, 0x98, 0x18, 0x83, 0x99, 0xe9, | 4004 | 0xb5, 0x7f, 0xf6, 0xd5, 0x92, 0x6f, 0x94, 0x75, 0xf7, 0xe2, 0x45, 0x83, |
| 4104 | 0xe2, 0x82, 0x3b, 0x3e, 0x78, 0xab, 0x3b, 0x3e, 0xf0, 0x9e, 0x7a, 0xd3, | 4005 | 0x18, 0xba, 0x54, 0x8b, 0x65, 0x3c, 0xbd, 0x98, 0xa0, 0x1d, 0x83, 0x89, |
| 4105 | 0x7a, 0x9d, 0x71, 0xb6, 0x8d, 0x71, 0xb6, 0x9d, 0x71, 0xd6, 0x66, 0x5a, | 4006 | 0x5e, 0x1c, 0x65, 0x1e, 0xbc, 0x9f, 0xf9, 0xf7, 0x01, 0x2b, 0xde, 0xba, |
| 4106 | 0x78, 0x2e, 0xa9, 0x65, 0x9a, 0x5c, 0x31, 0xa3, 0xcd, 0x85, 0xa5, 0x95, | 4007 | 0x83, 0x75, 0xce, 0xa5, 0xa8, 0x16, 0x8b, 0x29, 0xbd, 0x18, 0xa0, 0x0f, |
| 4107 | 0x2c, 0x0d, 0x7e, 0xc4, 0x3b, 0xff, 0x88, 0xfc, 0x5f, 0x34, 0xe2, 0xdd, | 4008 | 0x0f, 0x30, 0x5f, 0xb4, 0x5b, 0x3f, 0x57, 0xb6, 0x91, 0x23, 0xdc, 0x57, |
| 4108 | 0x09, 0x25, 0xb1, 0x15, 0xc5, 0x07, 0x94, 0xbb, 0xbc, 0x18, 0x5b, 0x7b, | 4009 | 0x90, 0xf7, 0xb4, 0x64, 0xbf, 0x67, 0x10, 0xfd, 0xf3, 0x82, 0x6d, 0x50, |
| 4109 | 0xa7, 0xcf, 0x17, 0x7d, 0xa3, 0x24, 0xbb, 0x1b, 0xcf, 0x1a, 0xcc, 0xa5, | 4010 | 0x6f, 0x32, 0x7b, 0x71, 0xdc, 0xaa, 0x40, 0x6f, 0x4b, 0xb7, 0xb2, 0xab, |
| 4110 | 0x8b, 0xb4, 0x68, 0xd6, 0xd5, 0x83, 0x23, 0xd4, 0xa3, 0x3f, 0xde, 0x83, | 4011 | 0x20, 0xbd, 0x33, 0xc6, 0xa3, 0xc5, 0x78, 0x75, 0xe4, 0x55, 0x88, 0xa5, |
| 4111 | 0xa3, 0xac, 0x87, 0xf7, 0xb2, 0x0e, 0xdf, 0x67, 0xc6, 0x5a, 0x36, 0xb3, | 4012 | 0xdd, 0xc8, 0x4a, 0x7c, 0x5a, 0xbb, 0x95, 0x3b, 0x67, 0x25, 0xc6, 0x7b, |
| 4112 | 0xff, 0xb9, 0x14, 0xd1, 0xa2, 0x51, 0xd5, 0x83, 0x3e, 0xfa, 0x70, 0x1f, | 4013 | 0x95, 0x5e, 0x89, 0x61, 0x6b, 0x58, 0xb9, 0x4b, 0x62, 0xda, 0xe9, 0x33, |
| 4113 | 0xeb, 0x46, 0x9b, 0xf9, 0x6b, 0xd5, 0x41, 0xac, 0xb0, 0xa7, 0x20, 0xef, | 4014 | 0x4b, 0xdc, 0xcb, 0x3e, 0xc4, 0x6d, 0xe4, 0x6f, 0x60, 0x4c, 0x79, 0xbf, |
| 4114 | 0x69, 0x89, 0x5e, 0x57, 0x3f, 0x7a, 0x67, 0x25, 0xb7, 0x21, 0x74, 0x53, | 4015 | 0x1a, 0x65, 0xdc, 0xb5, 0x57, 0x78, 0xe8, 0xa7, 0x71, 0xae, 0x9d, 0x07, |
| 4115 | 0xaa, 0x07, 0xc7, 0xcd, 0x32, 0xf4, 0x34, 0x77, 0xa9, 0xdb, 0x0b, 0x32, | 4016 | 0x1d, 0xc6, 0x6f, 0xda, 0x19, 0xb5, 0x9f, 0x31, 0xd5, 0x8b, 0x23, 0xd6, |
| 4116 | 0x7f, 0x63, 0x3c, 0x9a, 0x8c, 0x57, 0x9b, 0x5f, 0x85, 0x7c, 0xbc, 0x0b, | 4017 | 0x6f, 0xd8, 0x57, 0x1c, 0x5e, 0x52, 0xc6, 0xf3, 0xcd, 0xb8, 0x37, 0xb7, |
| 4117 | 0x39, 0x89, 0x4f, 0x73, 0xbb, 0xba, 0x73, 0x5a, 0x62, 0xbc, 0x47, 0xf5, | 4018 | 0x1c, 0x01, 0x5d, 0xf2, 0x75, 0x08, 0xc9, 0x25, 0x01, 0x54, 0xe9, 0x92, |
| 4118 | 0x48, 0x0c, 0x9b, 0x83, 0xea, 0x2e, 0x89, 0x69, 0x7b, 0x66, 0x2d, 0x71, | 4019 | 0x67, 0x9a, 0xdb, 0x16, 0x4e, 0x50, 0x86, 0x0d, 0xe5, 0xf8, 0xde, 0x8c, |
| 4119 | 0x2f, 0x7b, 0x1a, 0xb7, 0x11, 0xc7, 0x81, 0x31, 0xe5, 0xfe, 0x5e, 0x84, | 4020 | 0x07, 0x89, 0x03, 0xfb, 0x52, 0xf7, 0xe2, 0x01, 0xb5, 0x0a, 0x61, 0xda, |
| 4120 | 0x71, 0xd7, 0x56, 0xe6, 0xa2, 0x9f, 0xc6, 0x68, 0x3b, 0x17, 0xda, 0x8d, | 4021 | 0xe9, 0x61, 0x35, 0x44, 0x7c, 0xfd, 0xbd, 0xd2, 0x38, 0xff, 0xa9, 0xa2, |
| 4121 | 0xdf, 0xb1, 0xb2, 0xa1, 0x5e, 0xc6, 0x54, 0x0f, 0x0e, 0x9b, 0x5f, 0xb6, | 4022 | 0x54, 0x33, 0x5f, 0xe3, 0x54, 0x75, 0x8c, 0xb1, 0x4d, 0xd3, 0x52, 0x9b, |
| 4122 | 0x2e, 0xdb, 0xf8, 0xa4, 0x94, 0xd7, 0xd7, 0xe3, 0x9e, 0x89, 0x25, 0xf0, | 4023 | 0x44, 0xdb, 0xa2, 0xd3, 0x3a, 0xc2, 0xac, 0x55, 0x37, 0xa7, 0xb4, 0xe1, |
| 4123 | 0xe9, 0x52, 0xb7, 0x03, 0x48, 0xd4, 0xf8, 0x50, 0xa1, 0x4b, 0xbd, 0xd9, | 4024 | 0xcd, 0xde, 0xf8, 0xe0, 0xa2, 0x82, 0x6c, 0x98, 0x7c, 0x2e, 0x9f, 0x48, |
| 4124 | 0xd7, 0x3a, 0x77, 0x42, 0x49, 0xff, 0x51, 0x8c, 0xef, 0xf5, 0xb8, 0x9f, | 4025 | 0xf4, 0x34, 0x8b, 0x8d, 0xf5, 0x28, 0xb6, 0xd3, 0x4e, 0x5d, 0xf9, 0x08, |
| 4125 | 0x79, 0x60, 0x77, 0xf2, 0x1e, 0xdc, 0x17, 0xaa, 0x40, 0x90, 0x7a, 0xda, | 4026 | 0x63, 0xe8, 0xbd, 0x0a, 0xe1, 0x46, 0xe9, 0xfc, 0xf5, 0xb1, 0xa2, 0x1c, |
| 4126 | 0x1f, 0x0a, 0x30, 0xbf, 0xfe, 0x7e, 0x91, 0xce, 0xb3, 0x65, 0xc5, 0xbe, | 4027 | 0x2b, 0x3a, 0x2d, 0x3c, 0x2d, 0x4a, 0x9e, 0xa6, 0x33, 0x0e, 0x6d, 0x7b, |
| 4127 | 0xfa, 0x1a, 0xb6, 0xaa, 0x65, 0x8c, 0xad, 0x9b, 0x94, 0x39, 0x51, 0xa6, | 4028 | 0x13, 0xf9, 0x59, 0xe8, 0x94, 0xd4, 0x38, 0xf1, 0x09, 0x72, 0xda, 0x66, |
| 4128 | 0x35, 0x32, 0xa9, 0x23, 0xc8, 0x7e, 0x76, 0x7d, 0x52, 0x1b, 0x5c, 0xef, | 4029 | 0xf2, 0xdd, 0x5e, 0x7a, 0xb5, 0xbd, 0xb2, 0x21, 0x61, 0xb4, 0x2b, 0x78, |
| 4129 | 0x8e, 0x49, 0xaf, 0x92, 0x0b, 0x12, 0xd7, 0xe5, 0xe3, 0xf1, 0xee, 0x26, | 4030 | 0x62, 0xae, 0x85, 0xf5, 0x11, 0xc7, 0xbc, 0x9c, 0x57, 0x71, 0x25, 0x1f, |
| 4130 | 0xd1, 0xb1, 0x1e, 0xc1, 0x26, 0xea, 0x69, 0x4b, 0x3e, 0xcc, 0x18, 0x5a, | 4031 | 0xc5, 0xbb, 0x1c, 0xfb, 0x92, 0x33, 0x76, 0x3d, 0x7e, 0x54, 0xc2, 0xad, |
| 4131 | 0x28, 0x13, 0x8c, 0x94, 0xce, 0x5f, 0xa7, 0x15, 0x21, 0xad, 0xc8, 0xa4, | 4032 | 0x14, 0x71, 0x6b, 0x4b, 0x4e, 0xa1, 0xbf, 0xc6, 0x30, 0x62, 0xfc, 0xdd, |
| 4132 | 0xe0, 0xb5, 0x0c, 0xf1, 0x9a, 0xce, 0x38, 0xb4, 0xac, 0x75, 0xc4, 0x69, | 4033 | 0xa7, 0x97, 0x6e, 0x0e, 0xd0, 0x6e, 0xa2, 0x8b, 0x8f, 0x9f, 0xe3, 0x78, |
| 4133 | 0x81, 0x53, 0x32, 0x6f, 0x8a, 0x1d, 0x21, 0xb6, 0x6d, 0x22, 0xee, 0xed, | 4034 | 0xd8, 0xc1, 0xe9, 0x37, 0x3f, 0x9d, 0x59, 0xc2, 0xb5, 0xa2, 0xed, 0x6b, |
| 4134 | 0xa1, 0x57, 0x5b, 0xb7, 0xd4, 0xc7, 0x8d, 0x36, 0x85, 0x47, 0x66, 0x9a, | 4035 | 0x4b, 0xef, 0xad, 0x9d, 0xf9, 0xf3, 0x92, 0xbe, 0x3a, 0x3c, 0xa7, 0x92, |
| 4135 | 0xe1, 0x73, 0x93, 0xe6, 0x3b, 0xf9, 0x10, 0x2e, 0xe7, 0x23, 0x78, 0x9b, | 4036 | 0xa8, 0x38, 0x75, 0x4d, 0x56, 0x5d, 0xe2, 0x83, 0x19, 0xf5, 0x89, 0xaf, |
| 4136 | 0xb4, 0x2f, 0xd9, 0xb4, 0xeb, 0xf0, 0x8b, 0x62, 0xde, 0x4a, 0x32, 0x6f, | 4037 | 0x71, 0xfe, 0xc7, 0xc8, 0xf5, 0x6c, 0xce, 0x7f, 0xd5, 0x99, 0x37, 0xc2, |
| 4137 | 0x6d, 0x98, 0x50, 0xf4, 0xd7, 0x28, 0x86, 0x8c, 0xbf, 0xfe, 0xec, 0xd2, | 4038 | 0x79, 0x95, 0x6b, 0xbc, 0x30, 0x7a, 0xed, 0x1d, 0x95, 0xba, 0xe3, 0xf1, |
| 4138 | 0xcd, 0x3e, 0xea, 0x4d, 0x64, 0xf1, 0xf0, 0x7b, 0x14, 0xfb, 0xed, 0x3c, | 4039 | 0x28, 0x6d, 0xf7, 0xe1, 0x06, 0x79, 0x2e, 0x84, 0x5d, 0xf9, 0x15, 0x95, |
| 4139 | 0xfd, 0xda, 0x67, 0x53, 0x35, 0xb4, 0x15, 0x75, 0x5f, 0x5d, 0x7c, 0x6f, | 4040 | 0x82, 0xe3, 0x41, 0xd6, 0x01, 0xae, 0x2f, 0x91, 0xe7, 0x59, 0xcf, 0xf1, |
| 4140 | 0xe5, 0x54, 0xa1, 0x28, 0xaf, 0x0e, 0xd7, 0xa9, 0x04, 0xca, 0x4e, 0x5d, | 4041 | 0x9e, 0xf0, 0xae, 0xcd, 0xe4, 0x18, 0x9f, 0xb5, 0x7b, 0x84, 0x6b, 0xf1, |
| 4141 | 0xe3, 0x55, 0x97, 0xf8, 0x60, 0x65, 0x7d, 0xe4, 0xfb, 0x5c, 0xff, 0x21, | 4042 | 0x7f, 0xf8, 0x8e, 0xdc, 0xfb, 0x75, 0x79, 0xf4, 0x4f, 0x31, 0xcc, 0x1a, |
| 4142 | 0x62, 0x3e, 0x8b, 0xeb, 0x5f, 0xb5, 0xd7, 0x0d, 0x73, 0x5d, 0x75, 0x0d, | 4043 | 0xe8, 0xb1, 0x5c, 0x06, 0x0f, 0xe7, 0xbe, 0xec, 0xec, 0xab, 0xad, 0x5d, |
| 4143 | 0x1f, 0x46, 0xae, 0xbd, 0x13, 0xa2, 0xec, 0x78, 0x38, 0x42, 0xdd, 0x5d, | 4044 | 0x8f, 0xfb, 0x38, 0xe7, 0x81, 0x5a, 0xc6, 0xd1, 0x7f, 0x4b, 0x25, 0x84, |
| 4144 | 0x59, 0x23, 0xcf, 0x05, 0x70, 0x7b, 0x7e, 0x55, 0xb9, 0xe4, 0x71, 0x3f, | 4045 | 0x1b, 0xed, 0xae, 0x86, 0xe4, 0xda, 0x44, 0xeb, 0x2a, 0xc5, 0x46, 0x45, |
| 4145 | 0xfb, 0x01, 0xc7, 0x97, 0x88, 0xf7, 0xcc, 0xe7, 0x79, 0x4f, 0xf0, 0xd7, | 4046 | 0x0a, 0x43, 0x1d, 0x2d, 0x89, 0xe4, 0x15, 0x3c, 0x61, 0x4b, 0x5f, 0xd3, |
| 4146 | 0x7a, 0x62, 0x8d, 0xcf, 0xeb, 0x3d, 0x4c, 0x5b, 0x94, 0xd1, 0x78, 0x72, | 4047 | 0x5b, 0xca, 0xbb, 0x52, 0xff, 0x49, 0x6f, 0xb5, 0xbd, 0xc4, 0x91, 0xb6, |
| 4147 | 0xef, 0x8b, 0xea, 0xe8, 0x9f, 0x61, 0x90, 0xbd, 0xd0, 0x43, 0x13, 0x59, | 4048 | 0x14, 0xde, 0xf9, 0x4c, 0xef, 0x40, 0xea, 0x6e, 0xc9, 0x37, 0x41, 0xa5, |
| 4148 | 0xec, 0x9f, 0xf8, 0x63, 0x7b, 0x8f, 0x6e, 0xe5, 0x6a, 0xec, 0xe1, 0x9a, | 4049 | 0x9d, 0xf3, 0x1c, 0x21, 0x66, 0xbf, 0x68, 0xbc, 0x12, 0x65, 0x36, 0x86, |
| 4149 | 0xfb, 0xaa, 0x19, 0x47, 0xff, 0x2d, 0x19, 0x17, 0x8c, 0xb4, 0xbd, 0x12, | 4050 | 0x6f, 0x9d, 0x82, 0x83, 0x86, 0x1f, 0x99, 0x88, 0x8d, 0xdd, 0xfc, 0xdc, |
| 4150 | 0x52, 0x6b, 0xe3, 0x2d, 0xb7, 0x2a, 0x0b, 0x65, 0x49, 0x0c, 0xb4, 0x37, | 4051 | 0x4f, 0xde, 0xf4, 0x9e, 0x51, 0x83, 0x19, 0x55, 0x25, 0x57, 0x24, 0x06, |
| 4151 | 0xc7, 0x13, 0x97, 0xf1, 0x88, 0x25, 0xf3, 0x6e, 0x77, 0xb1, 0xee, 0x12, | 4052 | 0x7b, 0xde, 0xf4, 0xcb, 0x5e, 0x4c, 0xcc, 0x23, 0xfb, 0xe6, 0xff, 0xd6, |
| 4152 | 0x97, 0xaa, 0x76, 0xd6, 0xde, 0xb6, 0x22, 0x56, 0xda, 0x50, 0x78, 0xf3, | 4053 | 0x5e, 0xca, 0x3a, 0xf2, 0x16, 0xd1, 0x3d, 0xa8, 0x10, 0x43, 0x93, 0x20, |
| 4153 | 0x73, 0x33, 0x05, 0xe9, 0xc7, 0xa5, 0xde, 0xf8, 0x55, 0x1b, 0xd7, 0x39, | 4054 | 0x97, 0xd9, 0x6b, 0x14, 0x63, 0x1e, 0xa4, 0xaf, 0x7a, 0xa0, 0x9d, 0xbe, |
| 4154 | 0xcc, 0x9c, 0xfd, 0xac, 0xf1, 0x62, 0x84, 0xd5, 0x18, 0x9e, 0x55, 0x0a, | 4055 | 0xcc, 0xfa, 0xee, 0xb1, 0x06, 0xed, 0x74, 0x9b, 0x57, 0xc7, 0xf0, 0xf1, |
| 4155 | 0x07, 0x0c, 0x2f, 0xb2, 0x61, 0x0b, 0xdb, 0xf9, 0xbd, 0x97, 0xf8, 0xe9, | 4056 | 0x00, 0x1e, 0x39, 0xbe, 0x0d, 0xb5, 0x4e, 0xef, 0x67, 0x9c, 0x36, 0xf5, |
| 4156 | 0x5d, 0xa3, 0x0a, 0x53, 0xa1, 0x10, 0x31, 0x23, 0x73, 0xb0, 0xeb, 0xff, | 4057 | 0xb0, 0xae, 0x1a, 0xfd, 0xa5, 0x8f, 0xf5, 0xd5, 0xd5, 0xf5, 0x8f, 0xa3, |
| 4157 | 0x78, 0x65, 0x5f, 0x27, 0xea, 0x92, 0x3d, 0xf8, 0x7f, 0x6d, 0x5f, 0x66, | 4058 | 0xd5, 0xb9, 0x3e, 0x86, 0xfb, 0x72, 0x41, 0xa5, 0x2b, 0xe7, 0xc3, 0xb6, |
| 4158 | 0x15, 0xf1, 0x8b, 0xc8, 0xee, 0x57, 0xcc, 0xa1, 0x09, 0x10, 0xd3, 0xec, | 4059 | 0x3b, 0x1f, 0x87, 0x7f, 0x5d, 0x3f, 0xe5, 0x92, 0xeb, 0xf2, 0xf7, 0x5d, |
| 4159 | 0x32, 0xe6, 0xa3, 0x2e, 0xa4, 0xaf, 0xba, 0xa0, 0x9d, 0x7e, 0x87, 0x7d, | 4060 | 0xac, 0xcb, 0x44, 0xbe, 0x0a, 0xc4, 0x96, 0x53, 0xb6, 0x75, 0x3a, 0x46, |
| 4160 | 0xde, 0x43, 0xf5, 0xda, 0xe9, 0x56, 0xb7, 0x8e, 0xc1, 0xe3, 0x3e, 0x3c, | 4061 | 0x8e, 0xfb, 0x94, 0x3d, 0xd6, 0x7f, 0xb7, 0xaf, 0x3a, 0xfb, 0x34, 0x72, |
| 4161 | 0x78, 0xbc, 0x03, 0xd5, 0xf6, 0x7c, 0x68, 0x94, 0x3a, 0x75, 0xb1, 0xbf, | 4062 | 0xad, 0x4a, 0xf6, 0xef, 0xf9, 0x8c, 0x60, 0xce, 0x00, 0x72, 0x8c, 0xed, |
| 4162 | 0x1a, 0xfe, 0xd4, 0xc3, 0x3e, 0xeb, 0xea, 0xea, 0x87, 0xd1, 0x62, 0x5f, | 4063 | 0xbb, 0x9c, 0xf7, 0xff, 0xb8, 0xc2, 0xd5, 0x29, 0xcd, 0x7a, 0xb5, 0x83, |
| 4163 | 0x1f, 0xc1, 0x9e, 0x09, 0xbf, 0xda, 0x32, 0xe1, 0x41, 0xc7, 0x9d, 0x0f, | 4064 | 0xeb, 0x27, 0xcf, 0x24, 0x4b, 0xd7, 0x9a, 0x03, 0xee, 0x19, 0x01, 0xf1, |
| 4164 | 0xc3, 0xbb, 0xaa, 0x97, 0x7c, 0xc9, 0x75, 0xf9, 0xfd, 0x2e, 0xf6, 0x67, | 4065 | 0x85, 0x01, 0xdc, 0xc2, 0x45, 0x68, 0x48, 0x88, 0x8f, 0x0d, 0xa0, 0x21, |
| 4165 | 0xc2, 0x5f, 0x19, 0xa2, 0x4b, 0xc8, 0xdb, 0x2a, 0x1d, 0x43, 0xc7, 0x3d, | 4066 | 0x4f, 0x40, 0x5d, 0xee, 0xca, 0xfb, 0x90, 0x55, 0x64, 0xad, 0xa9, 0x13, |
| 4166 | 0x6a, 0x87, 0xf9, 0x37, 0xd6, 0x55, 0x7b, 0xcf, 0x47, 0xae, 0x55, 0xc8, | 4067 | 0x37, 0x69, 0xbb, 0x65, 0xf2, 0xfe, 0x2f, 0x2a, 0x7f, 0xf5, 0x7d, 0xc1, |
| 4167 | 0x59, 0x00, 0x3e, 0x23, 0x39, 0xa7, 0x0f, 0x13, 0x8c, 0xed, 0xbb, 0xec, | 4068 | 0x5b, 0x72, 0xcc, 0xb0, 0x70, 0xcd, 0x5f, 0x77, 0xff, 0xb7, 0x20, 0xf7, |
| 4168 | 0xf7, 0x8f, 0x97, 0x39, 0x32, 0xa5, 0xd9, 0xb7, 0xb6, 0xd3, 0x7e, 0xf2, | 4069 | 0x7c, 0xfa, 0x9f, 0x30, 0x8e, 0x13, 0x3d, 0xd5, 0x1e, 0xf1, 0x9f, 0x3f, |
| 4169 | 0x4c, 0x6b, 0xf1, 0xda, 0x7a, 0x9f, 0x73, 0xde, 0x40, 0x7c, 0xa1, 0x0f, | 4070 | 0xc1, 0x03, 0xb3, 0x8f, 0xf0, 0xbe, 0x8c, 0x7f, 0x88, 0x35, 0x84, 0x4f, |
| 4170 | 0xcb, 0x68, 0x84, 0xfa, 0xb8, 0x5d, 0xa7, 0x50, 0x9f, 0x67, 0x42, 0x5d, | 4071 | 0xe9, 0x24, 0xfe, 0xec, 0x3f, 0xee, 0xd9, 0x55, 0x81, 0xbf, 0xb4, 0x2b, |
| 4171 | 0xe2, 0xf0, 0xfb, 0x80, 0x39, 0xcf, 0x9e, 0x53, 0x67, 0xde, 0xa4, 0xee, | 4072 | 0x97, 0x8d, 0xa0, 0x21, 0x35, 0xc6, 0xe7, 0x15, 0x74, 0x90, 0x2f, 0x3e, |
| 4172 | 0x16, 0xcb, 0xfb, 0x55, 0xbe, 0xdf, 0x7e, 0x5f, 0xf2, 0x2d, 0xb1, 0x66, | 4073 | 0x65, 0x6c, 0xc1, 0xb6, 0x25, 0x82, 0x01, 0x2f, 0xda, 0x03, 0xbd, 0x62, |
| 4173 | 0x50, 0x30, 0xe7, 0x17, 0xdd, 0xff, 0x5d, 0xc8, 0x3d, 0x8f, 0xfe, 0xa7, | 4074 | 0x43, 0x05, 0x5b, 0x79, 0xfd, 0x25, 0xae, 0xef, 0xb3, 0x86, 0x0f, 0x0d, |
| 4174 | 0x8c, 0xe3, 0x78, 0x77, 0xa5, 0x4b, 0xfc, 0xe7, 0x4f, 0x71, 0xdf, 0xf4, | 4075 | 0x4b, 0xa5, 0x8f, 0xa7, 0x4d, 0xa5, 0xd1, 0x1e, 0x70, 0xf7, 0xab, 0x32, |
| 4175 | 0x30, 0xef, 0x0b, 0xfd, 0x83, 0xec, 0x25, 0x3c, 0xaa, 0x93, 0xf9, 0x67, | 4076 | 0x76, 0xad, 0xae, 0x0f, 0xdd, 0xe1, 0x69, 0x98, 0x7a, 0x9b, 0xfe, 0xd4, |
| 4176 | 0xef, 0x71, 0xd7, 0xed, 0x65, 0xf8, 0x4b, 0xab, 0x7c, 0xf1, 0x10, 0xea, | 4077 | 0xbe, 0xee, 0xc6, 0x7b, 0x65, 0x9b, 0x18, 0xe4, 0x90, 0x2f, 0xd8, 0xb8, |
| 4177 | 0x93, 0x23, 0x7c, 0x5e, 0xa1, 0x9d, 0xb8, 0xf1, 0x31, 0x63, 0x03, 0x3a, | 4078 | 0x69, 0x14, 0xea, 0xba, 0x1b, 0xd7, 0xbf, 0x2c, 0xf7, 0x21, 0xc6, 0x20, |
| 4178 | 0x6a, 0x24, 0x07, 0x3c, 0x6b, 0xf5, 0xf5, 0x88, 0x0e, 0x15, 0x36, 0xf2, | 4079 | 0x32, 0xb5, 0xa6, 0xf4, 0x79, 0x12, 0x1c, 0xe7, 0x10, 0x7e, 0xbf, 0x30, |
| 4179 | 0xfa, 0x73, 0xb4, 0xef, 0x93, 0x86, 0x07, 0xf5, 0x8b, 0x64, 0xd6, 0xa7, | 4080 | 0x86, 0x83, 0xb9, 0x12, 0xa7, 0xa6, 0x6f, 0xeb, 0xeb, 0xae, 0xeb, 0xf6, |
| 4180 | 0x8d, 0xa7, 0xf1, 0x75, 0x9f, 0xb3, 0xf7, 0x95, 0xb5, 0xaa, 0x75, 0x7d, | 4081 | 0x50, 0x2e, 0xd1, 0x5f, 0x53, 0xd2, 0xed, 0x00, 0xeb, 0x8b, 0x6a, 0x62, |
| 4181 | 0xe0, 0x0e, 0x57, 0xfd, 0xf8, 0x1b, 0xf4, 0xa7, 0xb6, 0x55, 0x37, 0xde, | 4082 | 0xec, 0x83, 0xb4, 0xe9, 0x90, 0x63, 0xd3, 0x5e, 0x18, 0xf9, 0xeb, 0xe3, |
| 4182 | 0x2b, 0xe9, 0xc4, 0x40, 0x64, 0xd5, 0x33, 0x16, 0x6e, 0x1a, 0x46, 0x68, | 4083 | 0x0e, 0x72, 0xdc, 0xa0, 0x29, 0x76, 0x93, 0x3d, 0xb2, 0x43, 0xd8, 0xcf, |
| 4183 | 0xd5, 0x8d, 0xf6, 0x2f, 0xf1, 0x7d, 0x90, 0x31, 0x88, 0x6c, 0x75, 0x4a, | 4084 | 0x71, 0xf7, 0xdd, 0x30, 0xee, 0x80, 0x71, 0x7d, 0xdc, 0xbd, 0xb9, 0xc4, |
| 4184 | 0xe6, 0x3f, 0x71, 0xd2, 0x39, 0x88, 0x3f, 0x2c, 0x8c, 0xe0, 0xc0, 0x44, | 4085 | 0x69, 0x4f, 0x69, 0xdc, 0x47, 0x67, 0xcb, 0x63, 0x64, 0x70, 0xfb, 0xba, |
| 4185 | 0x11, 0x5b, 0xd3, 0xb7, 0xf5, 0x55, 0xd7, 0x65, 0x7b, 0x60, 0x22, 0xde, | 4086 | 0x0c, 0xf2, 0x9b, 0x0e, 0xd8, 0x07, 0x1c, 0x7b, 0x9c, 0x72, 0xae, 0x6f, |
| 4186 | 0x5b, 0x55, 0x94, 0x6d, 0x1f, 0xfb, 0x8c, 0x4a, 0xe6, 0xd8, 0xfb, 0xa9, | 4087 | 0x6d, 0x10, 0xee, 0xc5, 0x3f, 0x4d, 0xd9, 0x8f, 0x4f, 0x92, 0x7b, 0xe9, |
| 4187 | 0xd3, 0x01, 0x5b, 0xa7, 0x3d, 0x30, 0xf2, 0xd7, 0xe9, 0xf6, 0x93, 0xae, | 4088 | 0xce, 0x9e, 0xf0, 0x37, 0x0a, 0xe5, 0xbe, 0x94, 0xf6, 0x4e, 0x97, 0x37, |
| 4188 | 0x3f, 0x25, 0x7a, 0x93, 0xfd, 0xb6, 0x83, 0xd8, 0x4b, 0xba, 0xbb, 0x6f, | 4089 | 0xcd, 0xd8, 0x8e, 0x04, 0x76, 0x7c, 0xa6, 0x97, 0xb1, 0x8d, 0xf5, 0xd7, |
| 4189 | 0xa0, 0xdb, 0x67, 0x5c, 0xa7, 0xbb, 0x6b, 0x22, 0x7e, 0xda, 0x55, 0xa4, | 4090 | 0x76, 0xab, 0x3b, 0xd8, 0x69, 0x05, 0xc8, 0xbb, 0xaa, 0x95, 0xad, 0x39, |
| 4190 | 0xfb, 0xed, 0xe9, 0x12, 0x8d, 0x2c, 0xb6, 0xad, 0xca, 0x22, 0xbf, 0x6e, | 4091 | 0xe9, 0x69, 0x48, 0x2c, 0x97, 0xb8, 0x70, 0x41, 0xea, 0xbc, 0xbb, 0x59, |
| 4191 | 0x9f, 0xb5, 0xcf, 0xd6, 0xc7, 0x59, 0xfb, 0xfa, 0xc6, 0x7a, 0x89, 0x07, | 4092 | 0x1f, 0x2c, 0x0f, 0x20, 0xdc, 0x8f, 0x89, 0xc2, 0xef, 0x2a, 0xe9, 0x88, |
| 4192 | 0xfe, 0x9a, 0xd2, 0xed, 0xbd, 0x7d, 0x07, 0x7b, 0xdd, 0x18, 0x1f, 0xda, | 4093 | 0xec, 0x4d, 0x4b, 0x5e, 0x01, 0x73, 0x5e, 0x0f, 0xaa, 0xe9, 0x4b, 0x11, |
| 4193 | 0x9b, 0x5b, 0xdc, 0x69, 0xc6, 0x76, 0xd8, 0xb7, 0xf9, 0x73, 0x33, 0x8d, | 4094 | 0xd3, 0x30, 0x4f, 0x36, 0xd8, 0x20, 0x47, 0x09, 0x2c, 0x35, 0xd3, 0xe6, |
| 4194 | 0x0e, 0xf6, 0x61, 0x9b, 0xcc, 0x2e, 0x7f, 0xa7, 0xe9, 0x23, 0xee, 0xaa, | 4095 | 0xee, 0x06, 0x2f, 0x8e, 0x39, 0xfc, 0x4b, 0x9b, 0xe1, 0xef, 0x94, 0xc4, |
| 4195 | 0x54, 0x1b, 0x27, 0x64, 0xb6, 0x21, 0xb1, 0x5c, 0xc4, 0xc2, 0x05, 0xe9, | 4096 | 0xcc, 0x1d, 0x39, 0xc9, 0x63, 0xa4, 0x90, 0xfa, 0x08, 0xfe, 0x31, 0x55, |
| 4196 | 0xf7, 0x76, 0xb2, 0x4f, 0x58, 0x46, 0xfb, 0xf6, 0xe2, 0x48, 0xa1, 0x57, | 4097 | 0x1c, 0x5a, 0x82, 0xf4, 0xfd, 0x4b, 0x20, 0xf5, 0xc4, 0x04, 0xfe, 0x4a, |
| 4197 | 0xa5, 0xc3, 0x5c, 0xc7, 0x94, 0xba, 0x02, 0xd6, 0xbc, 0x6e, 0x54, 0xd2, | 4098 | 0x8f, 0x06, 0xfa, 0x0a, 0x3e, 0xa5, 0xcb, 0x9a, 0x0b, 0xee, 0xb4, 0xc2, |
| 4198 | 0x97, 0xc2, 0xa9, 0x81, 0xd4, 0xc9, 0x7a, 0x0b, 0xc4, 0x28, 0xbe, 0x45, | 4099 | 0x08, 0xb1, 0x1e, 0xeb, 0xf6, 0xc6, 0x59, 0x5f, 0x88, 0x1d, 0x03, 0x6d, |
| 4199 | 0xa9, 0x6c, 0x6a, 0x7b, 0xbd, 0x1b, 0xc7, 0x6c, 0xfc, 0xa5, 0x4d, 0xf1, | 4100 | 0xb7, 0xe4, 0xfb, 0x82, 0x1d, 0x96, 0x8b, 0x85, 0x2b, 0x67, 0x02, 0xc1, |
| 4200 | 0x33, 0x2e, 0x31, 0x73, 0xc7, 0x84, 0xd4, 0x31, 0x42, 0x48, 0x7d, 0x08, | 4101 | 0x6d, 0xd3, 0xf1, 0xe8, 0x84, 0xc3, 0xc5, 0x42, 0x6d, 0xf1, 0xbc, 0x6d, |
| 4201 | 0xff, 0x90, 0x9c, 0x1f, 0xa8, 0x41, 0xfa, 0xde, 0x1a, 0x48, 0x5f, 0x71, | 4102 | 0xbf, 0x61, 0x14, 0xaf, 0x56, 0x3a, 0xdf, 0x8d, 0xb6, 0x64, 0xbe, 0x19, |
| 4202 | 0x04, 0x3f, 0xd2, 0x23, 0xbe, 0x4c, 0xc1, 0xa3, 0xb6, 0x98, 0x33, 0xfe, | 4103 | 0xf7, 0x90, 0x3f, 0xb5, 0x4f, 0x37, 0xc3, 0x98, 0x06, 0x4e, 0x1c, 0x8f, |
| 4203 | 0xad, 0x66, 0x10, 0x01, 0xf6, 0x65, 0x5d, 0xee, 0x18, 0xfb, 0x0c, 0xd1, | 4104 | 0x62, 0x6d, 0x4e, 0x3b, 0x3d, 0xec, 0xed, 0xc3, 0xd4, 0x7c, 0x27, 0x72, |
| 4204 | 0x63, 0x67, 0xeb, 0xb2, 0x7c, 0xc6, 0xdf, 0x6e, 0x3a, 0xb9, 0xf0, 0x96, | 4105 | 0x85, 0xe0, 0x62, 0xcc, 0x43, 0x5e, 0x9d, 0xf2, 0x60, 0x97, 0x71, 0x5c, |
| 4205 | 0x29, 0x9f, 0xbf, 0x63, 0x32, 0x16, 0x39, 0x62, 0x63, 0xb1, 0xae, 0xd6, | 4106 | 0x29, 0x2e, 0x53, 0x70, 0x17, 0x11, 0xbc, 0xdf, 0xe1, 0x13, 0x73, 0xac, |
| 4206 | 0x58, 0xde, 0xb2, 0x5e, 0x31, 0xe6, 0xaf, 0x96, 0x3b, 0x3d, 0x48, 0x6b, | 4107 | 0x47, 0x15, 0xdc, 0xe4, 0xe0, 0x6e, 0x4b, 0xdb, 0x5a, 0xf2, 0xed, 0x3b, |
| 4207 | 0x22, 0xdf, 0x84, 0xbb, 0x89, 0x9f, 0xda, 0x26, 0x9b, 0x60, 0x4c, 0x02, | 4108 | 0xc9, 0x07, 0x77, 0x11, 0x57, 0x12, 0xeb, 0x6c, 0xbc, 0x99, 0xca, 0xf4, |
| 4208 | 0x27, 0x8e, 0x47, 0xb0, 0x72, 0x42, 0x3b, 0x3d, 0xe8, 0xce, 0x60, 0x7c, | 4109 | 0xd7, 0x40, 0xeb, 0x39, 0xcc, 0x1a, 0xa8, 0x47, 0x71, 0xf9, 0x5d, 0xd3, |
| 4209 | 0xb6, 0x13, 0x13, 0x05, 0xff, 0x42, 0xd4, 0x45, 0x5c, 0x9d, 0x74, 0xe1, | 4110 | 0x9c, 0xcb, 0x09, 0x57, 0xcd, 0xb5, 0x90, 0x37, 0xb2, 0xae, 0x49, 0x69, |
| 4210 | 0x76, 0x63, 0xb5, 0x9a, 0xb7, 0x63, 0x5a, 0xe1, 0x2e, 0x63, 0xbb, 0xea, | 4111 | 0x31, 0x8f, 0x47, 0xc5, 0x94, 0x33, 0x46, 0xac, 0xcd, 0x98, 0xab, 0x60, |
| 4211 | 0xb5, 0x31, 0xc5, 0x0c, 0xb1, 0x88, 0xc2, 0x4d, 0xce, 0x5c, 0xbe, 0x35, | 4112 | 0xbe, 0xeb, 0xc5, 0xd3, 0x8e, 0xfc, 0x49, 0xca, 0x77, 0x37, 0xbe, 0x66, |
| 4212 | 0x49, 0xcc, 0x7d, 0xfb, 0x84, 0xd4, 0x77, 0x0b, 0xaf, 0x26, 0xa9, 0x97, | 4113 | 0xf5, 0x05, 0xfb, 0x2c, 0xd9, 0xbf, 0x8c, 0x27, 0xaf, 0x7a, 0x4d, 0xf2, |
| 4213 | 0x64, 0x36, 0xe3, 0x65, 0x0f, 0xb4, 0x4f, 0x69, 0xdd, 0x86, 0x72, 0x30, | 4114 | 0xd7, 0x78, 0xac, 0xce, 0xfb, 0x05, 0x25, 0xe3, 0x6b, 0x6a, 0x9d, 0x83, |
| 4214 | 0xde, 0xad, 0x33, 0x0e, 0x2e, 0x5c, 0x36, 0xd3, 0xec, 0x97, 0x1c, 0xd4, | 4115 | 0xa9, 0x5c, 0x2a, 0x71, 0x36, 0xd1, 0x2f, 0x41, 0x8e, 0xd5, 0x7e, 0x3c, |
| 4215 | 0x6e, 0x68, 0x11, 0x8f, 0x2b, 0x84, 0x01, 0x9b, 0x46, 0x6f, 0xab, 0x31, | 4116 | 0xb8, 0x98, 0x86, 0xdb, 0xb3, 0xd9, 0x66, 0xfc, 0x2f, 0x14, 0x23, 0xda, |
| 4216 | 0x53, 0x86, 0xa5, 0x7a, 0x0f, 0x4e, 0xdb, 0x32, 0xf4, 0xb7, 0xae, 0x27, | 4117 | 0x44, 0x9a, 0x18, 0xb0, 0x85, 0x98, 0xdb, 0xdf, 0xeb, 0xe3, 0x7d, 0xe9, |
| 4217 | 0xbe, 0x7e, 0xdc, 0xcc, 0xb0, 0x07, 0x96, 0xfd, 0xd0, 0x58, 0xa2, 0xc5, | 4118 | 0x79, 0xa9, 0x6d, 0xe3, 0x59, 0x14, 0x83, 0x66, 0x22, 0x73, 0x94, 0x9e, |
| 4218 | 0xdd, 0x46, 0x0c, 0x1b, 0x8b, 0x2e, 0xa8, 0xb4, 0xca, 0x7a, 0x1a, 0xd3, | 4119 | 0xd3, 0x53, 0x90, 0xfd, 0x8d, 0x00, 0x1e, 0x60, 0xed, 0x94, 0x2e, 0xed, |
| 4219 | 0x33, 0x60, 0x45, 0xa9, 0x71, 0xea, 0x9b, 0xc8, 0x18, 0x27, 0xce, 0x6a, | 4120 | 0xfd, 0x6c, 0x9d, 0x76, 0xf7, 0xb3, 0x0e, 0xcf, 0xfb, 0xc2, 0xdd, 0x56, |
| 4220 | 0x3b, 0xee, 0x5f, 0x48, 0xc3, 0x99, 0xdf, 0x6c, 0x32, 0xfe, 0x37, 0x2e, | 4121 | 0x0b, 0xf3, 0xbd, 0xef, 0x86, 0xb1, 0x13, 0x13, 0x2b, 0x3d, 0x1e, 0xac, |
| 4221 | 0x85, 0xb5, 0x23, 0x69, 0xf2, 0xdd, 0xc1, 0xbc, 0x3b, 0xdf, 0xe3, 0xe1, | 4122 | 0x5e, 0xb7, 0x47, 0x99, 0x59, 0x56, 0xce, 0xad, 0x51, 0x27, 0x1f, 0x56, |
| 4222 | 0x7d, 0x99, 0xdb, 0x75, 0xb7, 0x8e, 0xe6, 0x30, 0xef, 0x4e, 0x49, 0x5f, | 4123 | 0x50, 0xcf, 0xf3, 0x27, 0x65, 0x8e, 0xcf, 0xb5, 0x8d, 0x9f, 0x94, 0x5c, |
| 4223 | 0x85, 0x60, 0x77, 0x01, 0x32, 0x43, 0x62, 0x6f, 0xf1, 0xa9, 0x55, 0xda, | 4124 | 0xab, 0xb6, 0x6d, 0xb2, 0xb4, 0x3e, 0xa9, 0xfd, 0xa2, 0xb4, 0x53, 0x94, |
| 4224 | 0x3b, 0xea, 0x9a, 0x74, 0xf6, 0xc5, 0x72, 0xb3, 0x9e, 0xe0, 0x56, 0xb3, | 4125 | 0xba, 0xad, 0x30, 0xd7, 0xb4, 0xd9, 0xd3, 0x5a, 0x74, 0x40, 0x49, 0x93, |
| 4225 | 0x19, 0xc7, 0x0a, 0x9e, 0x1b, 0x68, 0xc7, 0x8f, 0xdc, 0xe2, 0x72, 0x21, | 4126 | 0xf7, 0x69, 0xc9, 0x5b, 0xbc, 0x1e, 0x3c, 0xa2, 0x6b, 0x83, 0xd2, 0x13, |
| 4226 | 0xbe, 0xea, 0x2e, 0x55, 0xdc, 0x5b, 0x62, 0x9e, 0xc8, 0xd8, 0x35, 0xb1, | 4127 | 0x7c, 0x19, 0x2e, 0x07, 0x6e, 0x9a, 0x1b, 0x60, 0x5e, 0x73, 0x6d, 0xeb, |
| 4227 | 0x8c, 0x72, 0x5e, 0x38, 0x29, 0x6b, 0x7c, 0xab, 0x75, 0xf4, 0xa4, 0xd4, | 4128 | 0xf6, 0x07, 0xeb, 0xdb, 0x9a, 0x1d, 0x5e, 0x6c, 0xdb, 0x97, 0x53, 0xdd, |
| 4228 | 0xc8, 0xee, 0xd6, 0x88, 0xa9, 0x75, 0x4b, 0x1f, 0x58, 0x4d, 0x3d, 0x7d, | 4129 | 0xe4, 0x0c, 0xc2, 0x8b, 0xe5, 0xfa, 0xea, 0xb6, 0xc6, 0x99, 0x00, 0x65, |
| 4229 | 0x34, 0x26, 0x35, 0x78, 0x3f, 0x6b, 0xb0, 0xb6, 0xd0, 0xae, 0xa4, 0x8e, | 4130 | 0x53, 0xf0, 0x3e, 0x73, 0xd2, 0x44, 0xa1, 0x2c, 0xa3, 0xcb, 0x99, 0x77, |
| 4230 | 0x69, 0x09, 0xbf, 0xdb, 0x85, 0x2b, 0x0d, 0x5a, 0xe6, 0x79, 0x68, 0xbd, | 4131 | 0x90, 0x33, 0x57, 0x99, 0x5a, 0x6b, 0x17, 0x39, 0xb3, 0x9e, 0x2a, 0xd6, |
| 4231 | 0xce, 0xbc, 0x70, 0x67, 0x6b, 0x63, 0x11, 0x0f, 0xdf, 0x3a, 0xd3, 0x27, | 4132 | 0xf9, 0xd0, 0x8b, 0xa7, 0xac, 0x66, 0x39, 0xe3, 0xe4, 0xf0, 0xe6, 0x2b, |
| 4232 | 0xe7, 0x49, 0x6c, 0x1d, 0x37, 0xe5, 0x05, 0x1b, 0x5b, 0xd6, 0x4b, 0xc9, | 4133 | 0x27, 0xb5, 0xb4, 0x70, 0xe6, 0x1f, 0x18, 0xc0, 0x3d, 0xe4, 0xcc, 0x57, |
| 4233 | 0x2e, 0xe2, 0x06, 0xc1, 0xc6, 0x72, 0xfd, 0x81, 0xd6, 0x86, 0x29, 0x1f, | 4134 | 0xb3, 0x3e, 0xec, 0x21, 0x67, 0x5e, 0xcc, 0x06, 0xd0, 0x47, 0xce, 0xfc, |
| 4234 | 0x79, 0x53, 0x78, 0x8f, 0x75, 0xe9, 0x48, 0xa1, 0xc4, 0xa3, 0x83, 0x9b, | 4135 | 0x11, 0xf9, 0xd5, 0xbb, 0xa9, 0x2b, 0x78, 0xb4, 0xd4, 0x07, 0xdb, 0x9b, |
| 4235 | 0x37, 0x13, 0x37, 0xbb, 0x53, 0x5a, 0xcb, 0x06, 0xe2, 0x66, 0x9d, 0x3d, | 4136 | 0xf4, 0xd0, 0xaf, 0x85, 0x37, 0xff, 0xbc, 0xc4, 0x9b, 0xe7, 0xff, 0x05, |
| 4236 | 0x84, 0x07, 0x3d, 0x78, 0xcc, 0x74, 0xfa, 0x08, 0xc1, 0xce, 0xd6, 0x49, | 4137 | 0x6f, 0xde, 0x4a, 0x3e, 0xd8, 0x9d, 0x13, 0x4e, 0xb0, 0x92, 0x9c, 0xc0, |
| 4237 | 0x2d, 0x2d, 0xb8, 0xf9, 0xea, 0x6a, 0x60, 0x07, 0x71, 0xf3, 0x42, 0xce, | 4138 | 0xc6, 0xcb, 0xa5, 0x1e, 0xd8, 0x0a, 0xe6, 0xb3, 0xa7, 0x53, 0x7d, 0xc8, |
| 4238 | 0x83, 0x0c, 0x71, 0xf3, 0x47, 0x39, 0x1f, 0xee, 0x20, 0x6e, 0xbe, 0x42, | 4139 | 0x4e, 0x63, 0x79, 0x8d, 0xd3, 0x77, 0x12, 0x99, 0x34, 0xe3, 0xb2, 0x92, |
| 4239 | 0x8c, 0x75, 0x3e, 0xf9, 0x4b, 0x7c, 0xbb, 0x38, 0x13, 0xdb, 0x95, 0xf0, | 4140 | 0xe8, 0xec, 0x43, 0x82, 0xf5, 0xb1, 0x96, 0xbc, 0xe8, 0xf6, 0xc0, 0x16, |
| 4240 | 0xd1, 0xb7, 0x05, 0x3b, 0xff, 0xa6, 0x88, 0x9d, 0xff, 0xcb, 0x3f, 0xc3, | 4141 | 0xdf, 0x85, 0xf4, 0x88, 0x7c, 0xa8, 0x59, 0x00, 0x56, 0xdc, 0xd0, 0x03, |
| 4241 | 0xce, 0x77, 0x13, 0x13, 0x76, 0x4d, 0xc8, 0xfe, 0xd1, 0xae, 0xd6, 0xd7, | 4142 | 0xab, 0x49, 0xe0, 0x4f, 0xeb, 0x20, 0xfb, 0x9a, 0x0c, 0xb3, 0x85, 0x66, |
| 4242 | 0x4f, 0xc9, 0x99, 0x95, 0x5b, 0xf1, 0xee, 0xc9, 0xe1, 0x7e, 0x62, 0x65, | 4143 | 0xc6, 0xa7, 0x82, 0x23, 0x89, 0x10, 0xba, 0x8f, 0x93, 0xf3, 0x38, 0x3d, |
| 4243 | 0x8c, 0x24, 0x33, 0xc8, 0x4d, 0x62, 0x09, 0x71, 0xc1, 0x4b, 0x6e, 0xae, | 4144 | 0x30, 0x7b, 0xe4, 0x3b, 0x46, 0x1f, 0x8e, 0xce, 0xbb, 0x3d, 0xb0, 0xed, |
| 4244 | 0xbb, 0x32, 0xa9, 0x19, 0x6f, 0xa8, 0x78, 0x67, 0x06, 0x71, 0xf6, 0xca, | 4145 | 0xe4, 0x6e, 0xbe, 0x44, 0x04, 0x95, 0x0b, 0x3e, 0xbc, 0x40, 0xee, 0xbc, |
| 4245 | 0xda, 0x02, 0x4d, 0x98, 0xf6, 0xa4, 0x88, 0x8d, 0x59, 0x03, 0x97, 0x12, | 4146 | 0x95, 0xeb, 0x7c, 0xa6, 0xd4, 0x07, 0x5b, 0xc1, 0x18, 0xb1, 0x73, 0x2a, |
| 4246 | 0x3b, 0x57, 0xcd, 0x01, 0xb5, 0x73, 0x0e, 0x76, 0x96, 0x79, 0x58, 0x55, | 4147 | 0x66, 0x16, 0xf0, 0x86, 0x17, 0xb8, 0xb8, 0xc2, 0xe9, 0xed, 0x4b, 0xff, |
| 4247 | 0x1c, 0x7f, 0x46, 0xec, 0xcc, 0xfe, 0x96, 0xa1, 0x36, 0xd7, 0xc4, 0x18, | 4148 | 0x3f, 0x84, 0x73, 0x0e, 0x77, 0x0e, 0x2e, 0x66, 0x14, 0x57, 0xb7, 0x0a, |
| 4248 | 0x55, 0x38, 0x1c, 0x0f, 0xa0, 0xeb, 0x38, 0x71, 0x8f, 0x3d, 0x0f, 0xb3, | 4149 | 0xae, 0x89, 0xac, 0xab, 0x87, 0xeb, 0xda, 0x7e, 0x52, 0xeb, 0x7c, 0x85, |
| 4249 | 0x86, 0x7e, 0x6a, 0x64, 0x70, 0x74, 0xd6, 0x99, 0x87, 0x6d, 0x22, 0x7e, | 4150 | 0xb6, 0x68, 0x4a, 0xbc, 0xea, 0xac, 0xc7, 0x40, 0x4a, 0x6a, 0xd9, 0x40, |
| 4250 | 0xf3, 0xc4, 0xc3, 0x28, 0x9f, 0xf3, 0xe0, 0x19, 0xe2, 0xe7, 0x8d, 0xb4, | 4151 | 0x5b, 0xc0, 0x39, 0x0f, 0xa5, 0xb6, 0xfd, 0x28, 0x1b, 0xef, 0xa9, 0x2c, |
| 4251 | 0xf3, 0x19, 0xe2, 0xe7, 0xbb, 0x6f, 0x98, 0x89, 0x4d, 0xcd, 0xe1, 0x15, | 4152 | 0xc5, 0xe3, 0xaa, 0x7c, 0x05, 0xd2, 0x25, 0x1f, 0x09, 0xd0, 0xa7, 0x03, |
| 4252 | 0x62, 0xf9, 0xba, 0x5a, 0xc4, 0x65, 0xde, 0x61, 0x5d, 0x59, 0x13, 0xc0, | 4153 | 0x93, 0x69, 0x54, 0x6d, 0x70, 0xfd, 0x7b, 0x55, 0x7e, 0x9c, 0xbc, 0xb5, |
| 4253 | 0x39, 0x1b, 0x3f, 0xfb, 0x17, 0xb2, 0xca, 0x91, 0xad, 0x8c, 0xb6, 0x10, | 4154 | 0x53, 0xea, 0xe8, 0xf0, 0x76, 0xab, 0x13, 0x53, 0x56, 0x0c, 0x95, 0xe7, |
| 4254 | 0xbb, 0xba, 0x68, 0xd7, 0xb6, 0x93, 0x5a, 0xe7, 0x8b, 0xd4, 0x45, 0x63, | 4155 | 0x4a, 0x7b, 0xa6, 0xe7, 0xe4, 0xec, 0x5c, 0x7d, 0x9b, 0xfa, 0xd5, 0x32, |
| 4255 | 0xfc, 0xbc, 0x6d, 0x8f, 0xbe, 0xa4, 0xcc, 0x4e, 0x3a, 0x5b, 0xe5, 0x5c, | 4156 | 0x1f, 0x4c, 0x93, 0xe3, 0x44, 0x02, 0x77, 0x14, 0x84, 0x2b, 0xf6, 0xe0, |
| 4256 | 0x55, 0x05, 0xed, 0xbd, 0x65, 0x2c, 0x96, 0xfe, 0x00, 0x4e, 0x4c, 0x26, | 4157 | 0xa8, 0xa5, 0x45, 0xbf, 0x87, 0xf8, 0xd0, 0xfd, 0xb4, 0x51, 0xb1, 0xee, |
| 4257 | 0xf2, 0x65, 0xc5, 0x7a, 0x28, 0xf7, 0xfa, 0x79, 0x2f, 0x8d, 0xce, 0x35, | 4158 | 0x7a, 0xbf, 0x69, 0x40, 0xfa, 0x51, 0x9f, 0xe9, 0x37, 0x0d, 0xe7, 0xf0, |
| 4258 | 0x8e, 0x7f, 0x27, 0xf2, 0xc7, 0x88, 0x5d, 0x65, 0xcf, 0x34, 0x14, 0xdc, | 4159 | 0x8b, 0xba, 0x96, 0x4a, 0x78, 0xd6, 0xfa, 0xc9, 0xe7, 0xb5, 0xe8, 0xd3, |
| 4259 | 0x64, 0x76, 0x62, 0xdc, 0x8c, 0xa2, 0xfc, 0x5c, 0x71, 0xef, 0xf5, 0x9c, | 4160 | 0x78, 0x02, 0x23, 0xb9, 0x9f, 0x2b, 0x21, 0xdd, 0x37, 0xf8, 0x13, 0xaf, |
| 4260 | 0x9c, 0xc5, 0xdb, 0xd9, 0x1a, 0xfa, 0x5e, 0x09, 0x13, 0xa6, 0x89, 0xef, | 4161 | 0x16, 0x9d, 0x53, 0x42, 0x7c, 0xf7, 0xee, 0x60, 0x97, 0x75, 0x37, 0x71, |
| 4261 | 0xc2, 0xbe, 0xdb, 0x0b, 0x82, 0x17, 0xbb, 0x71, 0xd4, 0xd4, 0x22, 0x3f, | 4162 | 0x27, 0x9e, 0xec, 0x54, 0xbc, 0x98, 0x89, 0x3a, 0x5c, 0x34, 0xd8, 0xc3, |
| 4262 | 0x67, 0x4c, 0xdc, 0x2b, 0xfb, 0xee, 0x37, 0xcc, 0x9e, 0x1e, 0xe4, 0x3d, | 4163 | 0x6b, 0x53, 0x85, 0x32, 0xa7, 0x71, 0x6b, 0xfe, 0xed, 0xc7, 0x5d, 0xfc, |
| 4263 | 0xf3, 0x73, 0xb3, 0xa7, 0xc1, 0x09, 0xfc, 0xc6, 0xdd, 0x5c, 0x0e, 0xd7, | 4164 | 0x88, 0xe7, 0x83, 0x8b, 0x97, 0xe0, 0xea, 0x56, 0x4d, 0x5d, 0x1f, 0x9c, |
| 4264 | 0x4a, 0x2f, 0x31, 0xbd, 0x16, 0x19, 0xc1, 0x23, 0xc4, 0x1c, 0xbf, 0x56, | 4165 | 0x54, 0xed, 0xfe, 0x65, 0x12, 0xc3, 0x3a, 0xf6, 0xd0, 0xf7, 0xee, 0x99, |
| 4265 | 0x01, 0xdd, 0xd3, 0xdf, 0xe4, 0xd6, 0x22, 0x33, 0x2a, 0xc0, 0x77, 0x77, | 4166 | 0x1e, 0xa0, 0x9c, 0xc2, 0xa5, 0x57, 0x10, 0xa7, 0xfa, 0x30, 0x4e, 0x9c, |
| 4266 | 0x32, 0xbf, 0xed, 0xa4, 0x6f, 0xc4, 0x16, 0x2a, 0x94, 0x1b, 0x97, 0xbe, | 4167 | 0xb1, 0x28, 0x5f, 0x8e, 0x35, 0xe4, 0xe2, 0xfa, 0x8c, 0x3d, 0xb9, 0x41, |
| 4267 | 0x6c, 0xe3, 0x51, 0x7f, 0x37, 0xaf, 0x8d, 0x17, 0x4a, 0xb8, 0xa6, 0x47, | 4168 | 0x37, 0x56, 0x7b, 0x8b, 0x4b, 0xa2, 0xe4, 0x36, 0xeb, 0x98, 0xb7, 0xdb, |
| 4268 | 0x78, 0xc5, 0xa6, 0xe3, 0x4e, 0x0e, 0xd1, 0xf3, 0xfe, 0x85, 0x4b, 0x70, | 4169 | 0x0b, 0xcd, 0xb8, 0x7c, 0x46, 0x67, 0x7d, 0xdb, 0x41, 0xee, 0xde, 0x83, |
| 4269 | 0x64, 0xab, 0xa4, 0xac, 0xf7, 0x8f, 0x85, 0xac, 0xde, 0xc5, 0x12, 0xc3, | 4170 | 0x87, 0xa9, 0xcf, 0xa3, 0x85, 0xc7, 0x91, 0xfe, 0x92, 0x0f, 0x87, 0x8f, |
| 4270 | 0x3a, 0xb6, 0x99, 0xe2, 0x5f, 0x7d, 0xe4, 0xb3, 0x07, 0x87, 0xcc, 0xa5, | 4171 | 0xa7, 0xb1, 0x6a, 0x5d, 0x0a, 0xe9, 0x2f, 0x06, 0x88, 0x53, 0x21, 0x4c, |
| 4271 | 0xec, 0xdd, 0x64, 0x0e, 0xda, 0x44, 0x6c, 0xdd, 0xcd, 0x1a, 0x6c, 0x59, | 4172 | 0x30, 0x16, 0xa1, 0xb8, 0x7e, 0x2e, 0xe7, 0x7f, 0xfe, 0x82, 0x36, 0xfb, |
| 4272 | 0x83, 0x46, 0xd6, 0x6a, 0x5a, 0xab, 0x1b, 0x79, 0x35, 0x5f, 0x13, 0x21, | 4173 | 0x26, 0xed, 0xf7, 0x8d, 0x6b, 0x7b, 0x00, 0x65, 0xfe, 0x7d, 0x9d, 0xab, |
| 4273 | 0xbe, 0x59, 0xc5, 0xda, 0xdd, 0x56, 0x68, 0xc2, 0x1b, 0x67, 0x74, 0xfa, | 4174 | 0x7a, 0xb9, 0x86, 0xfb, 0x9c, 0xd8, 0x8c, 0x32, 0x36, 0x75, 0x5c, 0x2d, |
| 4274 | 0x66, 0x3b, 0xf1, 0x7b, 0x37, 0xee, 0xa1, 0x3c, 0xdf, 0x2e, 0x7c, 0x07, | 4175 | 0xf5, 0x12, 0x17, 0x4f, 0x6a, 0x8b, 0xf7, 0x22, 0x3e, 0x7c, 0xd9, 0x8b, |
| 4275 | 0xe9, 0x6f, 0x78, 0x70, 0xe4, 0x78, 0x1a, 0xeb, 0x57, 0x0d, 0xe1, 0xd2, | 4176 | 0x81, 0x3a, 0xfa, 0x5d, 0x94, 0x5c, 0xf5, 0xc3, 0x44, 0xc2, 0x38, 0x47, |
| 4276 | 0x37, 0x7d, 0xcc, 0x55, 0x01, 0x3c, 0x7e, 0x5c, 0xf2, 0x6b, 0x09, 0x6f, | 4177 | 0xae, 0x3a, 0xba, 0xc1, 0xe5, 0xaa, 0x9e, 0x05, 0x15, 0x15, 0x0b, 0xac, |
| 4277 | 0xdf, 0x88, 0x45, 0x7c, 0x88, 0xda, 0x38, 0xe4, 0x8b, 0xef, 0x39, 0x18, | 4178 | 0x65, 0x9d, 0x5e, 0xe2, 0x37, 0x83, 0x6e, 0x2f, 0x51, 0xf8, 0x4d, 0xab, |
| 4278 | 0xc5, 0xcf, 0xfe, 0xb7, 0xf4, 0x3e, 0xf3, 0xd0, 0xaa, 0x7f, 0x86, 0x67, | 4179 | 0x9c, 0x75, 0xba, 0x8d, 0xb5, 0x5c, 0xfa, 0x0a, 0x32, 0xe8, 0x2c, 0xcc, |
| 4279 | 0x88, 0x5b, 0x88, 0x05, 0x2a, 0x12, 0xf6, 0xb9, 0xb7, 0x12, 0xde, 0xf5, | 4180 | 0x04, 0xef, 0x21, 0x36, 0xf7, 0x49, 0x6f, 0xa4, 0x10, 0x09, 0xdf, 0x43, |
| 4280 | 0xd0, 0x07, 0x24, 0xa6, 0x97, 0x32, 0xd6, 0x2d, 0x62, 0xe7, 0x85, 0xe2, | 4181 | 0xde, 0xf5, 0x2d, 0xae, 0xaf, 0xec, 0xed, 0xf6, 0x15, 0x56, 0xf3, 0xbd, |
| 4281 | 0x5c, 0xf2, 0xed, 0x93, 0xda, 0xc5, 0x43, 0x88, 0x11, 0x43, 0xa3, 0x4f, | 4182 | 0x28, 0x3f, 0x05, 0x57, 0x45, 0xf6, 0x1b, 0xf5, 0xe8, 0xa9, 0x92, 0xbd, |
| 4282 | 0xb0, 0x9b, 0x9b, 0x78, 0xf7, 0x4a, 0x3c, 0x6e, 0x9c, 0x23, 0xde, 0x1d, | 4183 | 0x86, 0x97, 0xa9, 0x43, 0xff, 0xdc, 0x4a, 0x3c, 0x3a, 0xe7, 0xaf, 0x12, |
| 4283 | 0xa6, 0xad, 0x3d, 0xba, 0xf8, 0x66, 0x08, 0x65, 0x73, 0x11, 0xfa, 0xa4, | 4184 | 0xc2, 0xff, 0x68, 0xde, 0xc5, 0xb6, 0x58, 0xfe, 0xae, 0xa0, 0xf0, 0xc9, |
| 4284 | 0xcc, 0x25, 0x5f, 0xf1, 0x3b, 0x73, 0x49, 0x99, 0x85, 0xcb, 0xb9, 0x10, | 4185 | 0xf6, 0xe3, 0xee, 0x77, 0xfd, 0x86, 0xef, 0x65, 0xfd, 0x56, 0x50, 0x3f, |
| 4285 | 0x74, 0x94, 0xb1, 0x77, 0x2b, 0x57, 0x59, 0xe6, 0xe4, 0x29, 0xff, 0x0e, | 4186 | 0x7b, 0x5a, 0xea, 0xa2, 0x68, 0xdb, 0x19, 0xea, 0xb7, 0x78, 0xd2, 0x89, |
| 4286 | 0xe6, 0xf7, 0x8c, 0x19, 0x0e, 0xee, 0x28, 0x84, 0xf8, 0xa9, 0x0b, 0x66, | 4187 | 0x2f, 0xd6, 0x98, 0xf1, 0xe1, 0x84, 0x57, 0xf4, 0xfa, 0x99, 0xe8, 0x45, |
| 4287 | 0x0a, 0xbf, 0xc7, 0xe7, 0x23, 0xfc, 0x8e, 0x62, 0x22, 0x5f, 0x5b, 0x21, | 4188 | 0xae, 0xc2, 0x78, 0xe1, 0xb8, 0x1e, 0x3d, 0xe2, 0xe8, 0xe5, 0xea, 0xe3, |
| 4288 | 0xcd, 0xc0, 0x44, 0xde, 0xc9, 0x79, 0xd1, 0xfc, 0x5e, 0xbf, 0x60, 0xcd, | 4189 | 0xf6, 0x69, 0xaf, 0x9c, 0x4c, 0xde, 0xd8, 0x17, 0xd5, 0xc9, 0x97, 0x3f, |
| 4289 | 0xb6, 0xe3, 0xce, 0xdf, 0xfa, 0x0d, 0x7f, 0x7f, 0x1e, 0xf3, 0x7b, 0xc9, | 4190 | 0x61, 0x6c, 0x3c, 0x71, 0x98, 0x9c, 0xf9, 0x2a, 0x6b, 0x4a, 0x3f, 0x9f, |
| 4290 | 0xf7, 0x99, 0x93, 0x3a, 0x3e, 0x3a, 0x69, 0x63, 0xfe, 0x79, 0x62, 0xfe, | 4191 | 0xaf, 0x73, 0x9e, 0x97, 0x3e, 0xad, 0xe7, 0x1a, 0x67, 0x5e, 0xbc, 0xfe, |
| 4291 | 0x01, 0xaf, 0x5b, 0xb0, 0xe6, 0xaf, 0xac, 0xf3, 0xf1, 0x78, 0xef, 0x34, | 4192 | 0x4e, 0x89, 0x2f, 0x4b, 0x4f, 0x5a, 0x9e, 0x53, 0x1d, 0x3b, 0xed, 0x76, |
| 4292 | 0xfd, 0xa0, 0x8b, 0x74, 0x5d, 0x7a, 0xd8, 0xe6, 0xd7, 0xe1, 0xd3, 0x99, | 4193 | 0x78, 0xa0, 0x70, 0x2b, 0x1b, 0x1d, 0xeb, 0xfe, 0xad, 0x35, 0x0b, 0x2e, |
| 4293 | 0xe5, 0x5e, 0x3e, 0x99, 0xc0, 0x3b, 0xd7, 0x67, 0xa7, 0x9f, 0x94, 0xd9, | 4194 | 0xce, 0x38, 0x6e, 0xd5, 0x55, 0x25, 0x7b, 0xe1, 0xab, 0xd6, 0x3d, 0x68, |
| 4294 | 0x33, 0x60, 0x3c, 0xf2, 0xee, 0x5a, 0xf8, 0x5a, 0xd8, 0x6f, 0x7a, 0xf9, | 4195 | 0xbb, 0xfe, 0x1c, 0x09, 0xef, 0x62, 0x9c, 0x7c, 0x85, 0xef, 0xec, 0x3a, |
| 4295 | 0x7c, 0xc4, 0x7e, 0x5e, 0x66, 0xb9, 0x9f, 0x7c, 0x56, 0xc2, 0xd3, 0x1f, | 4196 | 0x57, 0x1f, 0xbe, 0xcb, 0x6a, 0x71, 0x6c, 0x74, 0xd7, 0xb9, 0x28, 0x46, |
| 4296 | 0x5d, 0x7f, 0xe7, 0x20, 0x3b, 0x35, 0xdf, 0x79, 0xc6, 0x96, 0xdb, 0x7e, | 4197 | 0x2d, 0xe9, 0xeb, 0x43, 0xf1, 0x99, 0x87, 0xb1, 0x7d, 0x2a, 0x86, 0x77, |
| 4297 | 0x4e, 0xe6, 0xad, 0xfe, 0x05, 0xd8, 0xf1, 0xf5, 0xfb, 0x94, 0x49, 0xec, | 4198 | 0x8d, 0x60, 0xe9, 0xec, 0x89, 0xc4, 0xa4, 0xc1, 0x98, 0x8c, 0xd0, 0x77, |
| 4298 | 0x7b, 0xc0, 0x72, 0xfc, 0x36, 0x1c, 0xdc, 0xc6, 0x78, 0xf8, 0x2e, 0xed, | 4199 | 0xe3, 0xb1, 0x77, 0xc9, 0x51, 0x33, 0x3e, 0xe0, 0x68, 0x8e, 0xb8, 0x46, |
| 4299 | 0xb3, 0xed, 0x5c, 0x5d, 0xf0, 0x2e, 0xb3, 0xd3, 0x96, 0xf9, 0xae, 0x73, | 4200 | 0xde, 0x08, 0xc5, 0x3d, 0xbb, 0xe9, 0xbe, 0x5b, 0xfe, 0xbb, 0x1a, 0xb1, |
| 4300 | 0x52, 0x93, 0xe4, 0xfe, 0x1f, 0x54, 0x08, 0x1e, 0x7f, 0x9c, 0x35, 0x6b, | 4201 | 0x25, 0xf1, 0xd6, 0xfd, 0xa8, 0x47, 0x96, 0xd8, 0x1f, 0xd4, 0xff, 0x1a, |
| 4301 | 0xd8, 0x94, 0xd9, 0x3e, 0x94, 0x27, 0x75, 0x08, 0x9b, 0xc6, 0xa3, 0x78, | 4202 | 0xc7, 0x4e, 0x78, 0x98, 0x1f, 0x08, 0x4e, 0x77, 0x1a, 0xfc, 0xde, 0x34, |
| 4302 | 0xdb, 0xf0, 0x17, 0xcf, 0xb0, 0x48, 0x4c, 0x0e, 0x30, 0x26, 0xc3, 0x18, | 4203 | 0xf8, 0x01, 0xfe, 0xd1, 0x9e, 0x91, 0xf3, 0x51, 0x8a, 0x9c, 0xc5, 0xf8, |
| 4303 | 0x31, 0x63, 0xd1, 0xb7, 0x89, 0x4f, 0xb3, 0x64, 0xf8, 0xe8, 0x84, 0x1b, | 4204 | 0xc4, 0xae, 0xd3, 0xf5, 0xe2, 0xb7, 0xa0, 0x0f, 0x5f, 0x45, 0xd3, 0xd0, |
| 4304 | 0x6f, 0x13, 0x33, 0x42, 0x39, 0x67, 0x40, 0x9d, 0x77, 0x4b, 0xbf, 0x57, | 4205 | 0x22, 0x7e, 0x6c, 0x17, 0x79, 0xef, 0x7d, 0xc6, 0xd1, 0x2b, 0x46, 0x3c, |
| 4305 | 0x22, 0x5a, 0x13, 0x6b, 0xd9, 0x8b, 0x3a, 0xe4, 0x98, 0xf3, 0xfd, 0xfa, | 4206 | 0xea, 0xa1, 0xf0, 0xc5, 0x88, 0x17, 0xf7, 0x1b, 0xb2, 0xa7, 0xa4, 0x0d, |
| 4306 | 0x8f, 0x71, 0xec, 0x84, 0x0b, 0xf7, 0xb1, 0xef, 0x4b, 0xdf, 0x69, 0xf0, | 4207 | 0x3d, 0x0f, 0x6d, 0xf0, 0xbc, 0x22, 0x67, 0x6a, 0x2e, 0xd9, 0x99, 0x25, |
| 4307 | 0xef, 0xc6, 0xfe, 0xf7, 0xf1, 0x0f, 0xd6, 0x94, 0x9c, 0xb3, 0x52, 0x72, | 4208 | 0x32, 0xaf, 0x82, 0xb5, 0xab, 0x9b, 0x3a, 0x2b, 0xa0, 0xb5, 0xfa, 0x15, |
| 4308 | 0x96, 0xe3, 0x13, 0xab, 0x56, 0xd7, 0xe7, 0x9f, 0x87, 0x3e, 0x78, 0x15, | 4209 | 0xdd, 0xf8, 0x40, 0xf9, 0x7b, 0xbb, 0x18, 0xf9, 0xc4, 0xbe, 0xac, 0x97, |
| 4309 | 0x8d, 0x03, 0x0b, 0xf8, 0xc0, 0x9a, 0xe7, 0xbd, 0xf7, 0x18, 0x3f, 0x2f, | 4210 | 0xc7, 0xd5, 0x62, 0x01, 0x6f, 0x59, 0xb6, 0x7a, 0x1c, 0xb3, 0x64, 0x2f, |
| 4310 | 0x1a, 0xb1, 0x88, 0x8b, 0xc2, 0xcc, 0x87, 0xdd, 0xb8, 0xd7, 0x90, 0x7d, | 4211 | 0xee, 0xaf, 0xf1, 0xc0, 0x09, 0x1f, 0x3a, 0x52, 0x3f, 0xb1, 0x33, 0x11, |
| 4311 | 0x26, 0x6d, 0xe0, 0x69, 0x68, 0xfd, 0x17, 0x94, 0x9c, 0xcd, 0xb9, 0x64, | 4212 | 0x19, 0xf3, 0x13, 0xda, 0x42, 0xc6, 0x77, 0xfb, 0xd5, 0x2f, 0x17, 0xa0, |
| 4312 | 0x65, 0x6b, 0x64, 0x5d, 0x85, 0x95, 0xcb, 0x1b, 0x3b, 0xcb, 0xa0, 0xb5, | 4213 | 0x6c, 0xb3, 0x84, 0x33, 0x8b, 0x5f, 0x4c, 0xc1, 0xb6, 0xa4, 0x87, 0x68, |
| 4313 | 0x78, 0x95, 0x6e, 0xbc, 0xaf, 0xfe, 0xa7, 0x35, 0x1f, 0xfe, 0xc4, 0x7a, | 4214 | 0xe3, 0x8e, 0xd4, 0x08, 0xde, 0x4f, 0xa5, 0xff, 0x63, 0x00, 0xda, 0x85, |
| 4314 | 0x47, 0x2f, 0xd1, 0xd5, 0xa2, 0x3e, 0x77, 0x89, 0xb7, 0x3a, 0x1c, 0x33, | 4215 | 0x2b, 0x5e, 0xad, 0xd8, 0xec, 0x8d, 0x29, 0xc1, 0x46, 0x7d, 0xa8, 0xd1, |
| 4315 | 0x65, 0x7f, 0xee, 0xc7, 0xb8, 0xef, 0x84, 0x07, 0xed, 0xc9, 0x5f, 0x5a, | 4216 | 0xdd, 0x9f, 0x67, 0xfd, 0x14, 0x0a, 0xec, 0x2a, 0x48, 0x9d, 0x39, 0x85, |
| 4316 | 0xd9, 0xb0, 0xd0, 0x0c, 0x56, 0xa2, 0x42, 0xe8, 0x3b, 0x33, 0xeb, 0x17, | 4217 | 0x85, 0xc9, 0x0c, 0x7c, 0xe4, 0x77, 0xa3, 0x2d, 0x5a, 0xdf, 0x73, 0x8a, |
| 4317 | 0x0a, 0x50, 0x1d, 0xa6, 0xe0, 0x65, 0xf1, 0xd3, 0x71, 0x58, 0xa6, 0xcc, | 4218 | 0x16, 0x3d, 0xa0, 0xc4, 0x94, 0x7b, 0xf5, 0x61, 0xbc, 0x60, 0x24, 0xd2, |
| 4318 | 0x11, 0x2d, 0xdc, 0x91, 0x1c, 0xc2, 0x7b, 0xc9, 0xf4, 0x1f, 0xf8, 0xa0, | 4219 | 0xed, 0x4a, 0x7d, 0xa0, 0xb3, 0x50, 0x1e, 0xbb, 0x83, 0xb8, 0xa1, 0x15, |
| 4319 | 0x5d, 0xbc, 0xec, 0xd6, 0xe6, 0x9b, 0xdc, 0x51, 0xe5, 0x6f, 0xd0, 0x07, | 4220 | 0xaf, 0x78, 0x2b, 0x51, 0xb7, 0x5e, 0xef, 0xac, 0xf4, 0x6a, 0xc3, 0x5f, |
| 4320 | 0x1a, 0xec, 0x7a, 0x93, 0x67, 0xef, 0x14, 0x60, 0x6e, 0x91, 0x1e, 0x73, | 4221 | 0x60, 0x1d, 0xb0, 0xa3, 0x50, 0x0c, 0x7e, 0x90, 0xf0, 0x60, 0x8d, 0xb3, |
| 4321 | 0x1c, 0x73, 0x63, 0x59, 0x78, 0x88, 0xed, 0x86, 0x9b, 0xb5, 0xcc, 0x53, | 4222 | 0x87, 0x90, 0x2d, 0xf5, 0x47, 0xa7, 0xd0, 0x35, 0x69, 0x6f, 0xbe, 0x98, |
| 4322 | 0x4a, 0x8b, 0xec, 0x53, 0x51, 0x75, 0x8f, 0x3e, 0x88, 0x67, 0x8c, 0x78, | 4223 | 0xd2, 0xa2, 0xcf, 0x29, 0x99, 0x3d, 0x21, 0xf2, 0x9a, 0x07, 0xa1, 0xc7, |
| 4323 | 0xba, 0x4d, 0xd5, 0xf9, 0x3a, 0x0b, 0x25, 0xda, 0xed, 0xc4, 0x2a, 0xda, | 4224 | 0xe6, 0x19, 0xc7, 0x1d, 0x05, 0x0f, 0x56, 0x3a, 0x7e, 0x9c, 0xe5, 0x98, |
| 4324 | 0xfc, 0x65, 0x77, 0x39, 0x6a, 0x57, 0xeb, 0x9d, 0xe5, 0x6e, 0x6d, 0xf0, | 4225 | 0x87, 0x51, 0x79, 0xc2, 0xde, 0xbc, 0xc7, 0xd0, 0x86, 0xaf, 0x78, 0x33, |
| 4325 | 0x6b, 0x8c, 0xaf, 0xcd, 0x85, 0x79, 0xff, 0xfb, 0x71, 0x17, 0x56, 0xd8, | 4226 | 0xff, 0xb5, 0x8e, 0x76, 0xdb, 0xa6, 0x68, 0xac, 0x4f, 0x47, 0x70, 0x91, |
| 4326 | 0xfb, 0x08, 0xb9, 0xe2, 0x8c, 0x74, 0x1c, 0x5b, 0xc6, 0xac, 0xf5, 0xaf, | 4227 | 0x3a, 0x7c, 0x3d, 0xa5, 0x25, 0xff, 0x4c, 0xd1, 0x7a, 0xbe, 0x4c, 0x5f, |
| 4327 | 0x26, 0xb5, 0xc8, 0x53, 0x2a, 0xbb, 0x23, 0x40, 0x4c, 0x73, 0x3f, 0xf4, | 4228 | 0xf6, 0x9a, 0x61, 0xca, 0xa9, 0x25, 0x67, 0x21, 0xbd, 0xf3, 0x18, 0xae, |
| 4328 | 0xe8, 0x2c, 0xeb, 0x54, 0x7b, 0xc1, 0x85, 0x5b, 0x4e, 0x09, 0xcd, 0x1c, | 4229 | 0x18, 0x99, 0xe0, 0xf6, 0xc6, 0x24, 0xf9, 0x59, 0x94, 0xf9, 0x30, 0x86, |
| 4329 | 0x69, 0x1e, 0x42, 0xf9, 0x09, 0x6b, 0xfd, 0x0e, 0x43, 0x1b, 0xbc, 0xec, | 4230 | 0xa3, 0xe4, 0x77, 0x87, 0x0b, 0x15, 0x28, 0xaa, 0x3a, 0xf9, 0x59, 0x0f, |
| 4330 | 0xce, 0xfe, 0xd7, 0x5a, 0xea, 0xad, 0x43, 0xc9, 0x3e, 0xda, 0x10, 0x71, | 4231 | 0x3c, 0x93, 0x21, 0x65, 0x2e, 0x1b, 0x37, 0x3a, 0xf0, 0x47, 0x28, 0x3a, |
| 4331 | 0xc5, 0x90, 0x9c, 0x87, 0x4b, 0xfc, 0x39, 0x31, 0xc5, 0x1f, 0xd3, 0x57, | 4232 | 0x38, 0x77, 0x18, 0xa1, 0x13, 0x3f, 0xb0, 0x6b, 0x74, 0xbd, 0x75, 0x52, |
| 4332 | 0xdd, 0xa9, 0x20, 0xf9, 0xd4, 0x12, 0xd3, 0x90, 0xf9, 0x79, 0x14, 0x97, | 4233 | 0xe1, 0xbc, 0xcf, 0x44, 0x69, 0x63, 0xbe, 0x27, 0xe7, 0x4e, 0xac, 0x6e, |
| 4333 | 0x8d, 0xac, 0x7f, 0x53, 0x43, 0x82, 0xd8, 0x2c, 0xc2, 0x3a, 0x18, 0xc5, | 4234 | 0xdc, 0x3b, 0x19, 0xe1, 0xfb, 0x35, 0x58, 0x7b, 0x22, 0x86, 0x0f, 0x53, |
| 4334 | 0x51, 0x62, 0xbc, 0x43, 0x6c, 0x09, 0xe7, 0x43, 0x3a, 0xb1, 0x59, 0x37, | 4235 | 0x37, 0xa3, 0xe8, 0x70, 0x04, 0x85, 0x7e, 0x40, 0x3f, 0x62, 0xad, 0x95, |
| 4335 | 0x5c, 0x63, 0x01, 0x35, 0x93, 0x8b, 0x19, 0xed, 0xf8, 0xf7, 0x98, 0x8f, | 4236 | 0x21, 0x8f, 0x94, 0x7d, 0xa3, 0xc3, 0x96, 0xd4, 0xe8, 0x3e, 0x7e, 0x0f, |
| 4336 | 0x88, 0x8b, 0x1c, 0x42, 0xe0, 0xc4, 0xdf, 0x59, 0x55, 0xba, 0xde, 0x32, | 4237 | 0xf1, 0x57, 0xec, 0xf9, 0x39, 0x72, 0x1d, 0xf9, 0x5c, 0xd3, 0x16, 0x9b, |
| 4337 | 0xa6, 0xb8, 0xee, 0x13, 0x11, 0xea, 0x98, 0xef, 0xc9, 0xb9, 0x15, 0xb3, | 4238 | 0xfb, 0x5e, 0x95, 0xb3, 0x7f, 0x89, 0x18, 0x9f, 0x53, 0x9d, 0xde, 0xe0, |
| 4338 | 0x0b, 0xf7, 0x8c, 0x85, 0xf9, 0x7e, 0x15, 0x56, 0x9e, 0x88, 0xe2, 0x4a, | 4239 | 0x28, 0xc7, 0x3c, 0x3b, 0x25, 0xb5, 0x5b, 0xfb, 0xa6, 0x40, 0x69, 0x7f, |
| 4339 | 0xf2, 0x66, 0xcc, 0xd7, 0x38, 0x18, 0xc8, 0xaf, 0xd3, 0x8f, 0xd8, 0x67, | 4240 | 0xfd, 0x87, 0x86, 0x07, 0x9b, 0x59, 0xdf, 0x47, 0x75, 0x39, 0x9b, 0x39, |
| 4340 | 0x65, 0x0b, 0xba, 0xbd, 0x77, 0x74, 0xc8, 0x94, 0xfe, 0xdc, 0xc3, 0xbf, | 4241 | 0xaa, 0xd5, 0x61, 0x13, 0x4e, 0xab, 0x2c, 0xc4, 0xf5, 0xff, 0x80, 0x09, |
| 4341 | 0x03, 0xfc, 0x88, 0x3e, 0xbf, 0x55, 0xc4, 0x3a, 0xfb, 0x5b, 0xa3, 0x33, | 4242 | 0x35, 0x49, 0xac, 0xd1, 0xf1, 0x5e, 0xf6, 0x37, 0x58, 0xf3, 0xd4, 0xcb, |
| 4342 | 0x6f, 0x55, 0xd8, 0x7b, 0x9a, 0x88, 0xf2, 0xb9, 0x90, 0x3d, 0x17, 0x1c, | 4243 | 0xd9, 0x1b, 0xac, 0x3c, 0xe1, 0xe7, 0x9c, 0x9b, 0xc9, 0x75, 0xb6, 0xe3, |
| 4343 | 0x26, 0xcd, 0xb3, 0xe3, 0xd2, 0xb7, 0xb5, 0xad, 0xf3, 0x15, 0xf7, 0xdf, | 4244 | 0xbb, 0xaa, 0x5b, 0x6f, 0x10, 0x8f, 0x30, 0x3e, 0x1b, 0x22, 0x1f, 0x0d, |
| 4344 | 0xdf, 0x32, 0x5c, 0x58, 0xcf, 0xde, 0x3e, 0xa2, 0x4b, 0xbd, 0x1c, 0xd6, | 4245 | 0xf0, 0xf7, 0x46, 0xd9, 0x7e, 0x9d, 0x4c, 0xa2, 0xcb, 0xbf, 0x25, 0x53, |
| 4345 | 0x6a, 0xb1, 0x0e, 0xa7, 0x43, 0x6c, 0xc2, 0xf5, 0x7f, 0x87, 0x23, 0xa1, | 4246 | 0x80, 0x7c, 0x80, 0x78, 0x99, 0x7d, 0x0d, 0x1f, 0x72, 0xec, 0xcc, 0xac, |
| 4346 | 0x04, 0x73, 0xbe, 0x8e, 0x77, 0x73, 0x5f, 0x66, 0xbf, 0x53, 0x27, 0x67, | 4247 | 0x3b, 0xe6, 0xf1, 0x82, 0x8c, 0x2b, 0xf3, 0xc5, 0x99, 0x37, 0x65, 0xfc, |
| 4347 | 0x77, 0x70, 0xcb, 0x09, 0x2f, 0xd7, 0x5c, 0x4f, 0x5c, 0xb3, 0x09, 0x3f, | 4248 | 0x90, 0x9c, 0xbf, 0xfd, 0x77, 0xce, 0x41, 0x86, 0x77, 0x82, 0x35, 0xb2, |
| 4348 | 0x0b, 0x39, 0xbd, 0xc6, 0x61, 0x5e, 0x1f, 0x9d, 0x0e, 0x10, 0x8b, 0xfa, | 4249 | 0xd1, 0x88, 0x0e, 0x95, 0xeb, 0x65, 0xc9, 0x1c, 0x1a, 0xeb, 0x51, 0x79, |
| 4349 | 0xf8, 0xb9, 0x91, 0xb7, 0x2f, 0xe2, 0x49, 0x64, 0xf9, 0xd7, 0x78, 0xf2, | 4250 | 0x37, 0x8a, 0x35, 0x93, 0xf6, 0x48, 0xd4, 0x94, 0xeb, 0xb6, 0x5d, 0xbb, |
| 4350 | 0x11, 0x0f, 0xe8, 0xb8, 0x9a, 0x7b, 0x09, 0x57, 0x48, 0x3b, 0x3b, 0xed, | 4251 | 0x51, 0x8f, 0xbe, 0xad, 0xf8, 0x98, 0xf3, 0x7c, 0xb4, 0xc1, 0x38, 0xce, |
| 4351 | 0xd0, 0x3c, 0x5e, 0x10, 0xba, 0xb2, 0x5e, 0x6c, 0xb0, 0xd6, 0x2d, 0xf4, | 4252 | 0x66, 0x9b, 0x2e, 0xbc, 0x4f, 0x0e, 0x15, 0x63, 0xbd, 0x77, 0xc9, 0x3b, |
| 4352 | 0x03, 0x72, 0x8e, 0xf7, 0xdf, 0xb8, 0x06, 0x91, 0xdd, 0x09, 0xf6, 0xc7, | 4253 | 0x8e, 0xb9, 0xec, 0xb1, 0x6a, 0xe9, 0x13, 0x30, 0x0f, 0x2a, 0xb3, 0xd9, |
| 4353 | 0x46, 0x03, 0xda, 0x43, 0xb4, 0x97, 0x29, 0x6b, 0x68, 0xec, 0x45, 0xe5, | 4254 | 0xfb, 0xab, 0x05, 0xab, 0xc6, 0xe8, 0x0b, 0xcd, 0x93, 0x22, 0xab, 0x3d, |
| 4354 | 0xdd, 0x08, 0x56, 0x8c, 0x59, 0x43, 0x91, 0x94, 0x5c, 0xb7, 0xac, 0xea, | 4255 | 0x52, 0xc3, 0x71, 0x8e, 0x72, 0x9c, 0xd9, 0x0d, 0x7a, 0xdf, 0x98, 0x22, |
| 4355 | 0xb5, 0x7a, 0xe4, 0x0d, 0xe5, 0x61, 0xad, 0xf3, 0x50, 0x07, 0xa3, 0x38, | 4256 | 0x36, 0x0b, 0xe1, 0x58, 0xe1, 0xa2, 0xf4, 0xd0, 0x68, 0xb7, 0x69, 0x3e, |
| 4356 | 0x9b, 0x6b, 0xbc, 0xf8, 0x1e, 0xb1, 0x53, 0x94, 0xbd, 0xde, 0x25, 0xf7, | 4257 | 0x2f, 0x76, 0x8b, 0xe0, 0xbb, 0xa5, 0x71, 0x9e, 0x2a, 0x5c, 0xc0, 0x6c, |
| 4357 | 0x28, 0x66, 0x72, 0xff, 0xb1, 0x52, 0x66, 0x04, 0xa3, 0x85, 0x80, 0x9a, | 4258 | 0xf6, 0x2d, 0xe7, 0xef, 0x31, 0xd6, 0x0d, 0xe3, 0xac, 0x21, 0xf3, 0xc4, |
| 4358 | 0xce, 0xfd, 0x49, 0xa5, 0xe4, 0xa2, 0x11, 0xfa, 0x42, 0xd3, 0x98, 0xf0, | 4259 | 0x93, 0xc9, 0x6c, 0x53, 0xdf, 0x24, 0xe5, 0x70, 0xcf, 0xca, 0x0d, 0xe0, |
| 4359 | 0x6a, 0x0d, 0x55, 0x91, 0xce, 0x51, 0xd2, 0x99, 0x5e, 0xa3, 0x67, 0x46, | 4260 | 0xd9, 0xd2, 0x33, 0xa3, 0x7c, 0x77, 0xf4, 0xda, 0xdf, 0x62, 0x23, 0x77, |
| 4360 | 0x94, 0xe8, 0x2c, 0x40, 0x5c, 0xf7, 0xaa, 0xcc, 0xcf, 0xa8, 0xb7, 0xa7, | 4261 | 0x0f, 0xdf, 0xdd, 0x53, 0xa8, 0xe4, 0xda, 0xb9, 0xb5, 0xf8, 0x11, 0xcb, |
| 4361 | 0xf9, 0xbc, 0xe8, 0x2d, 0x8c, 0x9f, 0x15, 0xe9, 0x3c, 0x56, 0xb8, 0x88, | 4262 | 0x2f, 0x7d, 0x70, 0xbc, 0x36, 0xb5, 0x19, 0x63, 0xc6, 0x5f, 0x62, 0x2f, |
| 4362 | 0xe9, 0xdc, 0x25, 0xfb, 0xf7, 0x91, 0x42, 0x82, 0xb5, 0xaf, 0x0f, 0x79, | 4263 | 0xf5, 0x1e, 0xa7, 0x3d, 0x4f, 0x58, 0xce, 0x5e, 0xbd, 0x9c, 0xcb, 0x22, |
| 4363 | 0xe6, 0x93, 0xb1, 0x5c, 0x63, 0x66, 0x8c, 0x7c, 0x38, 0x67, 0xee, 0xfa, | 4264 | 0x96, 0x87, 0xda, 0xce, 0x90, 0x93, 0x1d, 0x63, 0xcc, 0xdc, 0x97, 0x6a, |
| 4364 | 0xf0, 0x64, 0xf1, 0x99, 0x61, 0xbe, 0x3b, 0x7c, 0xed, 0x77, 0xd1, 0x91, | 4265 | 0xea, 0x79, 0x9d, 0x7e, 0x97, 0xfe, 0xa2, 0xec, 0x87, 0x03, 0x93, 0xb9, |
| 4365 | 0xb3, 0xaf, 0xef, 0xec, 0x2b, 0x94, 0xd3, 0x76, 0x4e, 0x1f, 0x7e, 0xd8, | 4266 | 0x47, 0x31, 0xb3, 0xa4, 0x69, 0xf1, 0x45, 0x62, 0xc2, 0x69, 0xe2, 0x94, |
| 4366 | 0xf4, 0xca, 0x0c, 0x1c, 0x2f, 0x8d, 0xaf, 0xc7, 0x88, 0xf1, 0x97, 0xd8, | 4267 | 0x8f, 0x98, 0x50, 0x9b, 0xf3, 0x94, 0xf6, 0x77, 0x0d, 0x7e, 0x6f, 0xba, |
| 4367 | 0x45, 0xb9, 0x47, 0xa9, 0xcf, 0x13, 0xa6, 0xbd, 0x7f, 0x2f, 0xe7, 0xba, | 4268 | 0x30, 0x87, 0xbf, 0xa1, 0x5d, 0x44, 0xbe, 0x78, 0x72, 0x0e, 0xf2, 0xac, |
| 4368 | 0x98, 0xab, 0xbb, 0x5a, 0xcf, 0x10, 0x8b, 0x1d, 0x63, 0xcc, 0xec, 0x49, | 4269 | 0xdb, 0x83, 0xd5, 0xe7, 0x06, 0x71, 0xe9, 0x66, 0xb7, 0x8f, 0xe6, 0x65, |
| 4369 | 0x36, 0x76, 0xbf, 0x4c, 0xbf, 0x4b, 0x7f, 0x5d, 0xf6, 0xc8, 0x81, 0xb1, | 4270 | 0xee, 0xde, 0x97, 0x6d, 0x52, 0xc7, 0x64, 0xec, 0x5e, 0x2d, 0x9a, 0xe1, |
| 4370 | 0x89, 0x6f, 0x63, 0xaa, 0xa6, 0x71, 0xe1, 0x59, 0xe6, 0x84, 0xd3, 0xcc, | 4271 | 0x5a, 0x4d, 0x38, 0x1c, 0x5c, 0x65, 0x8e, 0x97, 0x73, 0x58, 0x35, 0xf0, |
| 4371 | 0x53, 0x1e, 0xe6, 0x84, 0xea, 0x09, 0x62, 0x48, 0xe6, 0xa9, 0x79, 0xe6, | 4272 | 0xd1, 0xf7, 0xc7, 0x0c, 0x39, 0xbf, 0x10, 0x0d, 0xef, 0xe0, 0x1a, 0x8e, |
| 4372 | 0x29, 0x8f, 0xde, 0x78, 0x71, 0x06, 0xff, 0x9d, 0x7a, 0x11, 0xfe, 0x62, | 4273 | 0x59, 0x4d, 0xad, 0x71, 0x65, 0x0f, 0xca, 0xfc, 0xdb, 0xe5, 0xd4, 0x5a, |
| 4373 | 0x89, 0x19, 0xc8, 0xb3, 0xce, 0xfc, 0x55, 0x9f, 0xe9, 0xc7, 0xa5, 0x9b, | 4274 | 0xdf, 0x51, 0x34, 0xf5, 0x3c, 0x88, 0x2f, 0x21, 0xbd, 0xa4, 0xa9, 0x7f, |
| 4374 | 0x9d, 0x19, 0x9a, 0x9b, 0x35, 0x7b, 0x77, 0xae, 0x31, 0x34, 0x22, 0xb4, | 4275 | 0x0a, 0x71, 0xe3, 0x7e, 0xc8, 0x39, 0x4e, 0x77, 0xac, 0x86, 0x3c, 0x33, |
| 4375 | 0x7b, 0xb4, 0x48, 0x96, 0xb6, 0x3a, 0x62, 0x63, 0xef, 0x6e, 0xf6, 0x0b, | 4276 | 0xc9, 0xd2, 0x4f, 0xec, 0x15, 0xfa, 0x53, 0x98, 0x22, 0x77, 0x6c, 0x5c, |
| 4376 | 0x72, 0x8e, 0xab, 0x0a, 0x1e, 0xfa, 0xfe, 0x88, 0x21, 0xe7, 0x1b, 0x22, | 4277 | 0xa7, 0x5f, 0xf8, 0x5a, 0xe9, 0x9e, 0xbb, 0x4f, 0x24, 0xfe, 0x12, 0xa0, |
| 4377 | 0xc1, 0xcd, 0xb4, 0xe1, 0x88, 0xd9, 0xd8, 0x12, 0x53, 0x3b, 0x70, 0xa9, | 4278 | 0x0d, 0x2a, 0xe1, 0x5b, 0x5a, 0xcf, 0x39, 0x68, 0x0b, 0xe7, 0x8c, 0xef, |
| 4378 | 0x98, 0x63, 0x1d, 0x2c, 0xad, 0x65, 0x8e, 0xa2, 0xb1, 0xfb, 0x7e, 0x7c, | 4279 | 0x45, 0x1c, 0xa4, 0xbf, 0x4d, 0x15, 0x14, 0x18, 0x0d, 0x17, 0x31, 0x24, |
| 4379 | 0x03, 0xe9, 0x9a, 0xc6, 0xde, 0x71, 0xc4, 0x8c, 0x7b, 0x21, 0xe7, 0x41, | 4280 | 0xb9, 0x8b, 0xef, 0xb4, 0x67, 0x43, 0xe4, 0xb2, 0x51, 0x54, 0xea, 0xf1, |
| 4380 | 0x1d, 0x5a, 0xf5, 0x79, 0x37, 0xf1, 0xc8, 0x27, 0xd6, 0x52, 0xfd, 0x31, | 4281 | 0xd8, 0x28, 0xf5, 0x6b, 0x27, 0x96, 0x8f, 0x13, 0x43, 0x32, 0x6a, 0xc8, |
| 4381 | 0x8c, 0x13, 0x33, 0x36, 0xac, 0xd2, 0x2f, 0x7e, 0xbf, 0x78, 0xcf, 0xd9, | 4282 | 0x39, 0x77, 0x5a, 0xa9, 0x47, 0x9d, 0xff, 0x15, 0x90, 0x5a, 0xa8, 0x71, |
| 4382 | 0x2b, 0x12, 0x7f, 0xf1, 0x51, 0x07, 0xe5, 0xf0, 0x2c, 0xaa, 0xe3, 0x1a, | 4283 | 0x46, 0xf6, 0xa8, 0x0f, 0xe3, 0xe2, 0x54, 0x11, 0xc7, 0x52, 0x69, 0xec, |
| 4383 | 0xd4, 0x85, 0x7d, 0x56, 0xf8, 0x55, 0x1c, 0xa0, 0xbf, 0x8d, 0x17, 0x14, | 4284 | 0x5f, 0xa2, 0x62, 0xd2, 0x5a, 0xe6, 0xf4, 0x0e, 0xa4, 0xe6, 0xea, 0xca, |
| 4384 | 0x8c, 0xfa, 0x57, 0x31, 0x20, 0xb5, 0x89, 0xef, 0xb4, 0xe5, 0x02, 0xc4, | 4285 | 0x1d, 0x72, 0xfa, 0x91, 0x5b, 0x53, 0x9e, 0x06, 0x39, 0xa7, 0x31, 0xcb, |
| 4385 | 0x29, 0x11, 0x94, 0xeb, 0xb1, 0xe8, 0x30, 0xe5, 0x6b, 0x63, 0x2e, 0x1f, | 4286 | 0xda, 0x6b, 0xca, 0x18, 0xc1, 0x41, 0xe3, 0xcb, 0x30, 0x96, 0x0a, 0x76, |
| 4386 | 0x65, 0x0e, 0xc9, 0x86, 0x02, 0xf6, 0xf9, 0xd5, 0x72, 0x3d, 0x62, 0xff, | 4287 | 0x8e, 0xe1, 0xd5, 0x19, 0xc9, 0x71, 0xc9, 0xb6, 0x5b, 0x26, 0xc5, 0x3e, |
| 4387 | 0xcf, 0x81, 0xf4, 0x41, 0x0d, 0x53, 0xb2, 0x4f, 0x7d, 0x08, 0xaf, 0x8e, | 4288 | 0x1e, 0x72, 0xdf, 0x00, 0x9a, 0x1d, 0x2e, 0xf7, 0x50, 0xdb, 0xea, 0x19, |
| 4388 | 0xcf, 0xe3, 0x58, 0x32, 0x8d, 0xbd, 0x35, 0x21, 0x8c, 0x99, 0x8b, 0xed, | 4289 | 0x97, 0xd3, 0x35, 0xe7, 0xe5, 0xac, 0x74, 0x0d, 0xc2, 0xb4, 0xd7, 0xf9, |
| 4389 | 0xb9, 0x81, 0xf4, 0x5b, 0x5b, 0x26, 0x0e, 0xda, 0xb3, 0xc8, 0x8d, 0x49, | 4290 | 0x94, 0x9f, 0x98, 0x23, 0xf6, 0x94, 0x33, 0x7a, 0xae, 0x9e, 0xc9, 0xbc, |
| 4390 | 0x57, 0xbd, 0x9c, 0xe3, 0x98, 0x66, 0xdf, 0x35, 0x6e, 0x0c, 0xe1, 0x80, | 4291 | 0x82, 0xb1, 0x96, 0x1b, 0xf7, 0x58, 0xe4, 0xff, 0x06, 0xae, 0x9d, 0x1b, |
| 4391 | 0xf1, 0xc7, 0x30, 0x16, 0x49, 0xee, 0x1c, 0xc1, 0xf9, 0x29, 0xa9, 0x61, | 4292 | 0x2c, 0xf5, 0xc7, 0xff, 0xcc, 0xbe, 0x74, 0x93, 0xe8, 0xbd, 0x22, 0x44, |
| 4392 | 0xfd, 0xad, 0xcb, 0xc6, 0x44, 0x3f, 0x2e, 0x62, 0x5e, 0x1f, 0x9a, 0x6c, | 4293 | 0x4c, 0x8f, 0xcd, 0x5c, 0xb3, 0xaf, 0xd8, 0xf4, 0x9c, 0xe4, 0x0c, 0xc7, |
| 4393 | 0x0c, 0x37, 0xd7, 0xba, 0x7c, 0xca, 0xc1, 0x72, 0x4d, 0x79, 0x39, 0x73, | 4294 | 0xe6, 0x6e, 0xcf, 0x4d, 0x1b, 0xba, 0xac, 0x34, 0x31, 0x9f, 0xd0, 0xaf, |
| 4394 | 0x5d, 0x85, 0x20, 0xf5, 0x75, 0x21, 0xe9, 0x65, 0xce, 0x11, 0x7d, 0xca, | 4295 | 0x96, 0xd0, 0xdf, 0x9a, 0xd1, 0xbf, 0xc2, 0xf4, 0xf5, 0x5e, 0xb5, 0x36, |
| 4395 | 0x19, 0x3f, 0x47, 0xce, 0x44, 0x5e, 0x61, 0xa4, 0xf9, 0xc6, 0xfd, 0x15, | 4296 | 0xa3, 0x75, 0xfd, 0x7b, 0x36, 0x6e, 0x6e, 0x87, 0x57, 0x97, 0xeb, 0x33, |
| 4396 | 0xf9, 0xff, 0x83, 0x6b, 0xe7, 0x0e, 0x8b, 0xb3, 0xf1, 0x3f, 0xb7, 0x2e, | 4297 | 0x76, 0x5a, 0x95, 0xbf, 0xff, 0x24, 0x24, 0xb9, 0xfe, 0x65, 0xab, 0x68, |
| 4397 | 0xdd, 0x24, 0x72, 0x27, 0x03, 0xcc, 0xe9, 0xd1, 0xa9, 0x6b, 0xfa, 0x15, | 4298 | 0xaf, 0x5e, 0xe6, 0x72, 0xc4, 0x1f, 0x64, 0x65, 0xdf, 0x2b, 0x63, 0xb3, |
| 4398 | 0x9d, 0x9e, 0x93, 0x9a, 0x61, 0xeb, 0xdc, 0x99, 0xb7, 0x69, 0x03, 0xef, | 4299 | 0xde, 0xbe, 0xf0, 0xae, 0xf7, 0x10, 0xbe, 0x9f, 0x3f, 0x8c, 0x77, 0xa6, |
| 4399 | 0xa8, 0x46, 0xd6, 0x13, 0xfa, 0x55, 0x0d, 0xfd, 0xad, 0x09, 0xbd, 0x4b, | 4300 | 0x7c, 0x08, 0xeb, 0xa2, 0xcb, 0x66, 0xd4, 0xae, 0x4f, 0xa4, 0xdf, 0x23, |
| 4400 | 0x53, 0x9e, 0x9e, 0xab, 0xe6, 0x7a, 0xb4, 0xac, 0x7e, 0xd7, 0xc2, 0xcd, | 4301 | 0x2e, 0x5e, 0x98, 0x29, 0xfb, 0xc5, 0x43, 0x6d, 0x6b, 0x66, 0x14, 0x8e, |
| 4401 | 0x6d, 0x70, 0xeb, 0x72, 0x7d, 0xca, 0x4a, 0x87, 0xe4, 0x77, 0x33, 0x20, | 4302 | 0x55, 0x83, 0x0a, 0xea, 0xf9, 0x1d, 0xc3, 0x8b, 0x58, 0x89, 0xe3, 0x7a, |
| 4402 | 0xb5, 0xfc, 0x05, 0x73, 0xde, 0x5a, 0xbe, 0xd8, 0xc1, 0x86, 0x7f, 0x97, | 4303 | 0x29, 0xa7, 0x9c, 0x7b, 0x10, 0xee, 0x1b, 0xcf, 0x1f, 0x0a, 0xb9, 0x3d, |
| 4403 | 0x93, 0xbd, 0xaf, 0xac, 0xc5, 0x5e, 0xfb, 0xe2, 0xdb, 0xee, 0x83, 0xf8, | 4304 | 0xb0, 0x10, 0x71, 0x74, 0x1c, 0x13, 0xd9, 0xa6, 0xe4, 0xfb, 0x72, 0x0e, |
| 4404 | 0xdb, 0xfc, 0x21, 0xbc, 0x39, 0xee, 0x21, 0xce, 0x14, 0x59, 0xd6, 0xa3, | 4305 | 0x87, 0x35, 0xd9, 0x25, 0x8c, 0xe3, 0x44, 0xb6, 0x8c, 0xa1, 0x51, 0x39, |
| 4405 | 0x7a, 0x75, 0x3c, 0xfd, 0x2e, 0xf3, 0xe2, 0xc5, 0xa9, 0x92, 0x5f, 0xcc, | 4306 | 0x97, 0x9a, 0x8c, 0x79, 0x5c, 0x8c, 0x8c, 0x79, 0xb4, 0x4c, 0xcc, 0xe3, |
| 4406 | 0xb5, 0xae, 0x98, 0x52, 0xa4, 0x55, 0x85, 0x32, 0xca, 0xf9, 0x53, 0xc3, | 4307 | 0x0f, 0x09, 0x77, 0x18, 0x2d, 0xc4, 0xa3, 0x95, 0xf0, 0xe2, 0x3e, 0xc3, |
| 4407 | 0x8d, 0x68, 0x11, 0xdb, 0xba, 0xc9, 0xe7, 0xee, 0x9c, 0x83, 0x79, 0x63, | 4308 | 0xf5, 0x8f, 0x86, 0x39, 0x3f, 0x62, 0x4b, 0x25, 0x2f, 0x4b, 0x4e, 0xf6, |
| 4408 | 0xf9, 0xc3, 0x01, 0x67, 0xfe, 0x15, 0x60, 0x1e, 0x1d, 0xc5, 0x91, 0x5c, | 4309 | 0x31, 0x27, 0x2f, 0x23, 0xbf, 0xf6, 0xe1, 0x4d, 0x5d, 0xec, 0xb1, 0xa6, |
| 4409 | 0x63, 0xe2, 0x3d, 0x39, 0xa7, 0xc3, 0x5e, 0xec, 0x12, 0x46, 0x71, 0x22, | 4310 | 0x6c, 0x0f, 0xe3, 0x1c, 0x1e, 0xb6, 0x8b, 0x3d, 0xe2, 0x4b, 0x7e, 0x1c, |
| 4410 | 0x57, 0xca, 0xa1, 0x11, 0x39, 0xdf, 0x9a, 0x88, 0xba, 0x9c, 0x1c, 0x19, | 4311 | 0x6e, 0x9e, 0xb5, 0x67, 0x22, 0xa2, 0xbb, 0x17, 0xa7, 0x89, 0xaf, 0xb8, |
| 4411 | 0x75, 0x69, 0xd9, 0xa8, 0xeb, 0xe6, 0x80, 0x60, 0x83, 0xe1, 0x42, 0x2c, | 4312 | 0x39, 0x1e, 0x3d, 0xcd, 0x9c, 0x3d, 0xa6, 0x97, 0x7d, 0xfc, 0xb7, 0x4b, |
| 4412 | 0x52, 0x0e, 0x37, 0xf6, 0x18, 0x8e, 0x7f, 0xd4, 0xcf, 0x78, 0x11, 0x5d, | 4313 | 0x72, 0xea, 0x7d, 0xf3, 0xb8, 0x9f, 0x7f, 0x37, 0x44, 0xf7, 0x2b, 0xee, |
| 4413 | 0x24, 0x75, 0x59, 0x6a, 0xb2, 0x87, 0x35, 0x79, 0x31, 0xd2, 0x8b, 0x3d, | 4314 | 0x7c, 0xab, 0xe7, 0xfe, 0x26, 0x54, 0xee, 0x9f, 0xca, 0xb3, 0xb1, 0xfc, |
| 4414 | 0x78, 0x4d, 0x17, 0x7d, 0xec, 0x2f, 0xe9, 0xc3, 0x38, 0x87, 0xfd, 0xd6, | 4315 | 0xe3, 0xfc, 0x2e, 0x63, 0x85, 0xe8, 0x9f, 0x95, 0xe8, 0x8f, 0xc8, 0xff, |
| 4415 | 0x7c, 0xb7, 0xf8, 0x92, 0x17, 0x87, 0x9a, 0xa6, 0xad, 0xa9, 0xb0, 0xc8, | 4316 | 0x89, 0x88, 0x5d, 0x64, 0x3f, 0x11, 0xb4, 0x87, 0x8d, 0xd7, 0x68, 0x8f, |
| 4416 | 0xee, 0xc6, 0x69, 0xe6, 0x57, 0xdc, 0x1c, 0x8b, 0x9c, 0x66, 0xcd, 0x1e, | 4317 | 0xc3, 0xd7, 0xce, 0x4c, 0xb9, 0xf8, 0x55, 0xc5, 0xeb, 0x3b, 0x52, 0xaf, |
| 4417 | 0xd1, 0x4b, 0x3e, 0x7e, 0x57, 0x91, 0x4f, 0x3d, 0x33, 0x8b, 0x3f, 0xe1, | 4318 | 0x6c, 0x0a, 0xe2, 0x17, 0xf6, 0xa5, 0x48, 0x94, 0x98, 0x50, 0xe6, 0xa1, |
| 4418 | 0xef, 0xf5, 0x91, 0xbd, 0xca, 0x59, 0x6f, 0xf9, 0xcc, 0xdb, 0x81, 0xd2, | 4319 | 0x62, 0x33, 0xc3, 0xb1, 0x99, 0x5b, 0x2b, 0x5e, 0xd3, 0xa3, 0x38, 0x40, |
| 4419 | 0xec, 0x54, 0x9e, 0x8d, 0xe6, 0x09, 0x3a, 0x2b, 0x84, 0x56, 0x80, 0xfe, | 4320 | 0xbe, 0xbd, 0x90, 0x2d, 0x9f, 0x15, 0x89, 0x13, 0x6b, 0x3e, 0x8f, 0xfe, |
| 4420 | 0x59, 0x8e, 0xde, 0xb0, 0x9c, 0xf3, 0x10, 0xbd, 0xc8, 0x9e, 0x22, 0xa8, | 4321 | 0x3a, 0x19, 0xaf, 0x9e, 0xfe, 0x95, 0xa4, 0x0d, 0xd4, 0xf0, 0xce, 0x69, |
| 4421 | 0x0f, 0x0b, 0x2f, 0x51, 0x1f, 0x87, 0xae, 0x9d, 0xa9, 0x72, 0xf2, 0x57, | 4322 | 0xa9, 0xb5, 0xc9, 0x8f, 0x27, 0xe3, 0xc6, 0x43, 0xe4, 0x91, 0x13, 0x93, |
| 4422 | 0x05, 0xaf, 0x6f, 0x4e, 0xbe, 0xb8, 0xce, 0x8f, 0xdf, 0x58, 0x97, 0xc2, | 4323 | 0xb6, 0xfd, 0x96, 0x81, 0x3b, 0xc3, 0xcc, 0xef, 0x2f, 0x90, 0x4f, 0x90, |
| 4423 | 0x11, 0xe6, 0x04, 0xb1, 0x69, 0xc6, 0xc6, 0x91, 0x6e, 0xe2, 0x93, 0xdd, | 4324 | 0x6f, 0xc4, 0x2a, 0x95, 0xa6, 0xe8, 0x2a, 0xe6, 0xfa, 0x31, 0xd6, 0x0a, |
| 4424 | 0xf6, 0xf9, 0x11, 0xc6, 0x81, 0x79, 0x4d, 0x8e, 0xf9, 0x3e, 0xe2, 0xec, | 4325 | 0x4f, 0x13, 0xe3, 0x4e, 0x2f, 0x54, 0xc1, 0x3a, 0x21, 0xfb, 0x82, 0x55, |
| 4425 | 0xb9, 0x9c, 0x7d, 0x66, 0xaf, 0xf7, 0x0d, 0x15, 0x63, 0xae, 0xf9, 0x12, | 4326 | 0x98, 0x7c, 0x26, 0x49, 0xd9, 0x97, 0x72, 0x9c, 0x00, 0xaa, 0xcf, 0xb4, |
| 4426 | 0x7a, 0x6b, 0x85, 0x5e, 0x28, 0xb8, 0x6d, 0x32, 0x41, 0x1d, 0xd4, 0x09, | 4327 | 0xa2, 0xea, 0x94, 0x82, 0x1d, 0x89, 0x56, 0x04, 0xcf, 0xd4, 0x30, 0xff, |
| 4427 | 0x5d, 0xeb, 0x29, 0x76, 0x73, 0x87, 0xc6, 0x84, 0x3e, 0x30, 0x32, 0x16, | 4328 | 0x06, 0x70, 0xa5, 0x85, 0x6b, 0xfc, 0x4c, 0x59, 0x0f, 0x67, 0x8f, 0x14, |
| 4428 | 0xeb, 0xff, 0x29, 0xb0, 0xae, 0x0a, 0xda, 0xe0, 0x6c, 0xf1, 0xff, 0x38, | 4329 | 0x4f, 0xe6, 0x62, 0xe4, 0xf1, 0x11, 0x2c, 0x58, 0xb2, 0x1f, 0x1c, 0x70, |
| 4429 | 0x7e, 0xa1, 0x84, 0x96, 0xd0, 0xf1, 0xc0, 0x64, 0x8e, 0x3b, 0x3e, 0x57, | 4330 | 0xb0, 0xf4, 0xc2, 0x86, 0x7a, 0x67, 0xcf, 0xea, 0xc5, 0x82, 0x1e, 0x3d, |
| 4430 | 0x41, 0xdd, 0x69, 0xdd, 0x3f, 0x50, 0x15, 0x78, 0xec, 0x89, 0x04, 0x79, | 4331 | 0xab, 0xd4, 0xe0, 0xc7, 0x27, 0x8a, 0x37, 0x57, 0xc2, 0x7e, 0x79, 0x85, |
| 4431 | 0x5f, 0x14, 0xdc, 0x3c, 0xe9, 0x83, 0xff, 0x4c, 0x15, 0x6b, 0xae, 0x0f, | 4332 | 0x99, 0xe8, 0xdb, 0x4b, 0xff, 0x5f, 0xb3, 0x3a, 0xc2, 0xfa, 0xc6, 0xb6, |
| 4432 | 0x97, 0x9b, 0x69, 0xd7, 0x27, 0x4a, 0xbc, 0xdb, 0x7b, 0xa3, 0x78, 0x74, | 4333 | 0xaf, 0x6e, 0x94, 0x3a, 0xd8, 0x70, 0xea, 0x60, 0x77, 0x6f, 0x5f, 0x1f, |
| 4433 | 0x22, 0x0a, 0x93, 0x3e, 0x3b, 0x67, 0xca, 0x3e, 0xb0, 0xcf, 0xce, 0x9f, | 4334 | 0x7c, 0x4c, 0xc9, 0x6c, 0x0f, 0xc3, 0xfe, 0xa8, 0xd2, 0xb4, 0x3f, 0xf6, |
| 4434 | 0x17, 0xd7, 0xd4, 0xd9, 0x7b, 0x54, 0xcf, 0x16, 0xf4, 0xc8, 0x59, 0x55, | 4335 | 0x9b, 0x09, 0xbe, 0x2f, 0x7b, 0x7c, 0xb6, 0xfd, 0xc3, 0x16, 0xdb, 0xce, |
| 4435 | 0x85, 0x0f, 0x4e, 0xcc, 0xdf, 0x5c, 0x0e, 0xeb, 0x85, 0xa5, 0xa9, 0x78, | 4336 | 0xb7, 0xc4, 0xfb, 0x54, 0xaf, 0x8a, 0x33, 0x8d, 0xb2, 0x2f, 0xe8, 0xc1, |
| 4436 | 0x66, 0x17, 0x7d, 0x7e, 0xc5, 0xf2, 0x30, 0x7b, 0x19, 0xf6, 0x94, 0x6b, | 4337 | 0x8f, 0x13, 0x7a, 0x74, 0x2f, 0x64, 0x0f, 0x9e, 0x78, 0xbf, 0x4c, 0xce, |
| 4437 | 0xa5, 0xff, 0x1d, 0x60, 0xff, 0x5b, 0xda, 0xd3, 0xd7, 0xfb, 0x1f, 0x52, | 4338 | 0x18, 0xd6, 0x87, 0x3b, 0xad, 0xa5, 0x78, 0x61, 0x7e, 0x23, 0xfa, 0xfd, |
| 4438 | 0xd9, 0x4d, 0x41, 0x58, 0x1f, 0x95, 0xa7, 0xac, 0x8f, 0xbd, 0xa9, 0x38, | 4339 | 0x70, 0xce, 0xc5, 0xd8, 0x06, 0xde, 0x5e, 0x01, 0xc9, 0xe1, 0x89, 0xd6, |
| 4439 | 0xdf, 0x97, 0x3d, 0x3d, 0xcb, 0x7a, 0xab, 0xd9, 0xb2, 0xf2, 0xcd, 0xb1, | 4340 | 0xc7, 0x10, 0xc1, 0x7c, 0xe1, 0x30, 0x1e, 0x39, 0x21, 0xf5, 0xd7, 0xea, |
| 4440 | 0x4c, 0xc8, 0x1d, 0xc2, 0x99, 0x06, 0xd9, 0x07, 0x74, 0xe1, 0x83, 0xb8, | 4341 | 0xb6, 0xc0, 0x09, 0xfb, 0x07, 0x51, 0xb3, 0x48, 0x8c, 0xb4, 0xed, 0xaa, |
| 4441 | 0x1e, 0xd9, 0x05, 0xd9, 0x7b, 0x67, 0x8e, 0x5f, 0x2c, 0xe7, 0x0e, 0xeb, | 4342 | 0x8d, 0x4d, 0x51, 0xa6, 0x26, 0xf2, 0x8d, 0x18, 0x79, 0xb3, 0x3e, 0xf8, |
| 4442 | 0x82, 0x9d, 0xe6, 0x22, 0x3c, 0x33, 0xbb, 0x16, 0xbd, 0x5e, 0xd8, 0xe7, | 4343 | 0x63, 0x2c, 0xc1, 0xd9, 0xd9, 0xf4, 0xcd, 0xe4, 0xf2, 0x9d, 0xcf, 0x2a, |
| 4443 | 0x62, 0x2c, 0x03, 0x6f, 0x2c, 0x85, 0xd4, 0xed, 0x78, 0xcb, 0x43, 0x08, | 4344 | 0xc2, 0xdb, 0x23, 0x78, 0xbe, 0x20, 0x9c, 0x65, 0x6d, 0x5b, 0xd7, 0x89, |
| 4444 | 0x63, 0xb6, 0x70, 0x08, 0x0f, 0x9e, 0x90, 0xfd, 0xc5, 0x07, 0x5a, 0x7d, | 4345 | 0xe5, 0x78, 0x79, 0x3e, 0x82, 0xb3, 0x96, 0x4e, 0xce, 0x04, 0xa5, 0xda, |
| 4445 | 0x27, 0xac, 0xbf, 0x8b, 0xa4, 0xe6, 0x99, 0x17, 0x2d, 0xab, 0x62, 0x6d, | 4346 | 0xb4, 0x6b, 0x6b, 0x29, 0x6b, 0xb5, 0xd7, 0x8b, 0xed, 0x29, 0xa9, 0x19, |
| 4446 | 0x63, 0x84, 0xe5, 0x88, 0x18, 0xa3, 0x57, 0xb0, 0x7b, 0xff, 0x07, 0xa8, | 4347 | 0xf5, 0xc1, 0x90, 0x82, 0xe5, 0x95, 0xd0, 0x17, 0x1f, 0x06, 0x86, 0x82, |
| 4447 | 0xc1, 0xd9, 0xe9, 0xf4, 0xcd, 0xec, 0x25, 0x3b, 0x9f, 0x54, 0x21, 0x3c, | 4348 | 0x66, 0xe2, 0xc2, 0xb3, 0x4a, 0xa2, 0xef, 0x03, 0x6f, 0x04, 0xdf, 0x22, |
| 4448 | 0x4f, 0x19, 0x9f, 0x2e, 0x08, 0x4e, 0x79, 0xb0, 0x75, 0xcb, 0x89, 0x25, | 4349 | 0x16, 0x7d, 0xbd, 0x20, 0x67, 0xa5, 0x88, 0x37, 0xb3, 0x31, 0xae, 0x5b, |
| 4449 | 0x78, 0x61, 0x36, 0x8c, 0xb3, 0xa6, 0x4e, 0x9c, 0x04, 0x55, 0x99, 0xb2, | 4350 | 0x00, 0x9e, 0x86, 0x1a, 0x1c, 0x61, 0xec, 0xbc, 0x66, 0x54, 0x10, 0xaf, |
| 4450 | 0xaa, 0xab, 0xc9, 0x6b, 0xa5, 0xdb, 0x8d, 0x4d, 0x49, 0xe9, 0x0f, 0xf5, | 4351 | 0xe4, 0xec, 0x94, 0x60, 0x7d, 0xbd, 0x9c, 0x19, 0xb1, 0x5f, 0xd4, 0xdd, |
| 4451 | 0xfe, 0x80, 0xc2, 0x92, 0x72, 0xe8, 0x0b, 0xfb, 0x81, 0x01, 0x3f, 0xfb, | 4352 | 0x7a, 0xdf, 0x98, 0xbb, 0xf1, 0x4c, 0xb1, 0x4a, 0x8c, 0x6f, 0xea, 0x89, |
| 4452 | 0xd5, 0x27, 0x55, 0x3c, 0xf3, 0xbe, 0x3b, 0x8c, 0xe7, 0x99, 0x7f, 0x7e, | 4353 | 0x2a, 0x6f, 0xd8, 0xe9, 0x2f, 0x2a, 0xd4, 0xb3, 0xb7, 0x06, 0x55, 0x8e, |
| 4453 | 0x50, 0x90, 0x33, 0x53, 0xcc, 0x31, 0xd3, 0x51, 0xda, 0xca, 0x07, 0x57, | 4354 | 0xae, 0x18, 0xcd, 0x95, 0xf3, 0x4b, 0xad, 0xd4, 0x77, 0x3d, 0x99, 0x92, |
| 4454 | 0x7d, 0x15, 0x0e, 0x33, 0x5e, 0x5e, 0x32, 0xca, 0x98, 0xa3, 0xe4, 0x0c, | 4355 | 0x3f, 0x56, 0x33, 0xee, 0x8f, 0x32, 0x5f, 0x57, 0x9e, 0x90, 0xbc, 0x42, |
| 4455 | 0x95, 0xe4, 0xf7, 0x9d, 0x72, 0x56, 0xc4, 0x7a, 0x56, 0x77, 0xfa, 0x7d, | 4356 | 0xfe, 0xad, 0x6c, 0x26, 0x2f, 0x16, 0x0e, 0x11, 0xc0, 0x83, 0xaa, 0xf8, |
| 4456 | 0x63, 0xe6, 0xc6, 0x73, 0xc8, 0x21, 0xe6, 0xf5, 0xc6, 0xee, 0x88, 0x7a, | 4357 | 0x86, 0x4a, 0xfd, 0x36, 0xf9, 0xe4, 0x2c, 0xd4, 0x0b, 0x05, 0xc9, 0xeb, |
| 4457 | 0xc5, 0x4a, 0x7f, 0x5d, 0x51, 0xce, 0xdd, 0x55, 0xa8, 0xb0, 0x65, 0xc5, | 4358 | 0x82, 0x0b, 0xe5, 0xf9, 0xa2, 0xa8, 0x9b, 0x94, 0x35, 0x52, 0xdb, 0x3e, |
| 4458 | 0xf0, 0x44, 0xa9, 0xa6, 0x54, 0x4b, 0x2f, 0xd7, 0x9d, 0x2d, 0xfa, 0x60, | 4359 | 0x9a, 0x0c, 0xc9, 0xd9, 0xf7, 0x11, 0x0f, 0xeb, 0xef, 0x00, 0xfd, 0xeb, |
| 4459 | 0x25, 0x63, 0xfd, 0x28, 0x6b, 0x74, 0xf9, 0x09, 0xa9, 0x25, 0xec, 0x5f, | 4360 | 0x9e, 0x16, 0x7d, 0x70, 0xb3, 0x57, 0x63, 0x0d, 0x1e, 0x67, 0x2d, 0xa1, |
| 4460 | 0xd4, 0x7a, 0x62, 0x61, 0xc1, 0x0d, 0x3e, 0xdc, 0x1f, 0xd2, 0x5a, 0xe4, | 4361 | 0xb5, 0x4e, 0x28, 0x37, 0x8e, 0xf3, 0x6c, 0x8d, 0xc4, 0x4b, 0x86, 0x7a, |
| 4461 | 0x2c, 0xf6, 0xd3, 0x85, 0x0e, 0x8f, 0x9c, 0x89, 0x7a, 0xa6, 0x20, 0xb5, | 4362 | 0x3e, 0xe9, 0xe8, 0xb4, 0x86, 0x3a, 0x09, 0x5e, 0x27, 0x89, 0xd7, 0x35, |
| 4462 | 0x5c, 0x72, 0x41, 0x69, 0xbd, 0x08, 0x6a, 0xc7, 0xc4, 0x46, 0xdd, 0xad, | 4363 | 0xb8, 0x32, 0x05, 0x9d, 0x11, 0x8c, 0x57, 0x0d, 0x02, 0x95, 0x9a, 0x48, |
| 4463 | 0x1f, 0x8d, 0x05, 0xe4, 0xdc, 0xfc, 0x90, 0x8b, 0xbd, 0xb6, 0x6f, 0xcc, | 4364 | 0x77, 0x40, 0x62, 0x41, 0xeb, 0x17, 0x3e, 0x55, 0x4d, 0x7c, 0x9e, 0x9d, |
| 4464 | 0xb2, 0xee, 0x6e, 0xd6, 0xfb, 0xd7, 0xbb, 0x65, 0x3f, 0x39, 0xd6, 0x7b, | 4365 | 0x92, 0x7c, 0xa3, 0x08, 0x57, 0xc9, 0xd4, 0x9a, 0x43, 0xf8, 0x70, 0x03, |
| 4465 | 0x4e, 0x69, 0x2d, 0x47, 0xd4, 0x8d, 0x74, 0x9e, 0xab, 0x92, 0x18, 0xc9, | 4366 | 0xf0, 0xc6, 0xa4, 0xbb, 0xef, 0xde, 0x27, 0x67, 0x6f, 0x2b, 0xdd, 0x33, |
| 4466 | 0x52, 0xce, 0x47, 0x6d, 0x99, 0xf6, 0x53, 0xa6, 0xd2, 0x99, 0xa1, 0x2a, | 4367 | 0x0d, 0x8f, 0x39, 0x67, 0x15, 0x64, 0xfc, 0x43, 0x38, 0x93, 0x15, 0x7e, |
| 4467 | 0x5c, 0x1e, 0x87, 0xce, 0xa8, 0xc5, 0x79, 0x83, 0xc9, 0x29, 0x14, 0x4f, | 4368 | 0x39, 0x44, 0x7e, 0x19, 0x1f, 0x26, 0xf7, 0x6c, 0x2d, 0x40, 0x62, 0xb2, |
| 4468 | 0xb7, 0x43, 0xfc, 0x5f, 0xeb, 0x15, 0x0c, 0x55, 0xc9, 0x9c, 0x3c, 0x3d, | 4369 | 0xc9, 0xf8, 0x88, 0xbe, 0xff, 0x2c, 0x79, 0xeb, 0x11, 0xb8, 0xfb, 0xee, |
| 4469 | 0x2e, 0x35, 0x46, 0x09, 0x3e, 0xc9, 0x56, 0xa7, 0x06, 0x70, 0x65, 0x0d, | 4370 | 0x8d, 0xa5, 0xb3, 0x08, 0xf1, 0x7c, 0xa7, 0xb2, 0xd3, 0x39, 0xcf, 0x64, |
| 4470 | 0xf0, 0xca, 0x98, 0xb3, 0xdf, 0x5e, 0x3c, 0xe3, 0x6d, 0x9f, 0x65, 0x78, | 4371 | 0x30, 0xde, 0x3a, 0x94, 0x1d, 0xf3, 0xdb, 0x94, 0xae, 0xf9, 0x6e, 0x65, |
| 4471 | 0xc8, 0x3e, 0xa3, 0x20, 0xf4, 0x0f, 0xe2, 0x4c, 0x4e, 0x30, 0xe5, 0x00, | 4372 | 0x4f, 0x41, 0xea, 0xd8, 0xd5, 0x6d, 0x0f, 0x9e, 0xd8, 0xad, 0xec, 0x9c, |
| 4472 | 0x31, 0x65, 0x6c, 0x90, 0x78, 0xb3, 0xa5, 0xe0, 0x9c, 0xb7, 0x32, 0x3e, | 4373 | 0xed, 0x55, 0xc8, 0x6f, 0xd5, 0x80, 0xd9, 0xa7, 0x74, 0xcf, 0xbb, 0xfd, |
| 4473 | 0xa2, 0xcf, 0x3f, 0x49, 0xac, 0x7a, 0x18, 0xce, 0x7e, 0x7b, 0x43, 0xf1, | 4374 | 0xf4, 0x4e, 0xd6, 0x70, 0x3b, 0x2d, 0xf1, 0x07, 0xb5, 0xad, 0x6b, 0x52, |
| 4474 | 0x0c, 0x42, 0x2c, 0xdf, 0xa9, 0xb6, 0x16, 0xec, 0x33, 0x5a, 0x8c, 0xb1, | 4375 | 0xfe, 0x17, 0x2b, 0x22, 0xff, 0xf7, 0xd0, 0xbf, 0x55, 0xb1, 0xed, 0x55, |
| 4475 | 0x76, 0xb5, 0x79, 0xb6, 0x43, 0x6d, 0x99, 0xed, 0x52, 0x3b, 0x0a, 0xd2, | 4376 | 0xa9, 0xd7, 0x65, 0x3d, 0xec, 0xe7, 0x53, 0xcc, 0x93, 0x56, 0x0d, 0x06, |
| 4476 | 0xb3, 0x3e, 0xd0, 0x7a, 0xff, 0x89, 0xed, 0x6a, 0xeb, 0x74, 0x8f, 0x22, | 4377 | 0x58, 0x83, 0x8c, 0x1a, 0xb7, 0x94, 0xf6, 0xcf, 0x44, 0x27, 0x39, 0x2f, |
| 4477 | 0xa6, 0x0d, 0xf9, 0x52, 0x19, 0xd5, 0x35, 0xeb, 0xcc, 0xcf, 0x3b, 0xd9, | 4378 | 0x21, 0xfe, 0x8a, 0x4c, 0x25, 0x65, 0xf8, 0x07, 0xca, 0xbf, 0xbf, 0xa4, |
| 4478 | 0x77, 0x6d, 0x35, 0x4b, 0xfd, 0xbc, 0xfc, 0x1f, 0x57, 0x58, 0xfe, 0x67, | 4379 | 0x57, 0xb7, 0x9c, 0x27, 0xf0, 0x23, 0x23, 0x3a, 0xe4, 0xa9, 0xef, 0xb1, |
| 4479 | 0xa2, 0x77, 0xa3, 0xb2, 0xac, 0x5b, 0x93, 0x7f, 0x2d, 0xf6, 0xb0, 0x9e, | 4380 | 0xc9, 0xeb, 0x7a, 0xf9, 0x78, 0x6d, 0x9c, 0x5c, 0x75, 0xbf, 0xa2, 0x0d, |
| 4480 | 0x4e, 0xb2, 0x36, 0x9a, 0x55, 0xe8, 0x63, 0xdf, 0x31, 0x6c, 0x2c, 0x2b, | 4381 | 0x3f, 0xe7, 0xea, 0x75, 0xe1, 0x8a, 0xa2, 0x15, 0x47, 0x21, 0xb8, 0xe0, |
| 4481 | 0xee, 0x97, 0x89, 0x4c, 0x72, 0x4e, 0x42, 0xfc, 0x15, 0x59, 0xf6, 0x20, | 4382 | 0xea, 0xb5, 0xb6, 0xa4, 0xd7, 0x9a, 0x7c, 0xa7, 0x73, 0x4e, 0xab, 0x86, |
| 4482 | 0xf8, 0x7b, 0xf2, 0xbf, 0xb7, 0x28, 0x57, 0x97, 0x9c, 0x23, 0xf0, 0x5e, | 4383 | 0x7a, 0x2d, 0x4c, 0x76, 0x28, 0x9d, 0xf3, 0xd2, 0xcb, 0x14, 0xdd, 0x44, |
| 4483 | 0x3f, 0x47, 0x76, 0x6c, 0xec, 0xba, 0x5c, 0x1e, 0x5e, 0x1b, 0x25, 0x3e, | 4384 | 0x8f, 0x13, 0x76, 0x95, 0xde, 0xad, 0xdc, 0xee, 0x9c, 0x2b, 0x93, 0xb3, |
| 4484 | 0xdd, 0xab, 0xb4, 0xc1, 0xa7, 0x1c, 0xb9, 0x2e, 0x5e, 0x66, 0x0c, 0x0f, | 4385 | 0x5d, 0xb2, 0xdf, 0x5f, 0xd6, 0x4b, 0x72, 0xfa, 0xd2, 0xf0, 0xb6, 0x69, |
| 4485 | 0xdb, 0x31, 0xec, 0xc8, 0xb5, 0xb2, 0x28, 0xd7, 0x8a, 0x7c, 0xa7, 0x7d, | 4386 | 0x35, 0xbc, 0x75, 0xda, 0xb6, 0xbf, 0x6b, 0xfc, 0xb3, 0xa3, 0xcb, 0x59, |
| 4486 | 0x3e, 0x8b, 0x74, 0x5a, 0xe7, 0xc6, 0xe4, 0x1c, 0x99, 0xcc, 0x2e, 0x45, | 4387 | 0x43, 0x74, 0x91, 0x73, 0x23, 0x65, 0x7d, 0xbe, 0x50, 0xd2, 0x47, 0xd6, |
| 4487 | 0x36, 0x91, 0xe3, 0x84, 0x55, 0xa1, 0x77, 0xa9, 0x6d, 0xf6, 0xb9, 0x32, | 4388 | 0xea, 0xfa, 0x3a, 0x95, 0xff, 0x87, 0xef, 0xdd, 0xac, 0x7b, 0xa6, 0xa4, |
| 4488 | 0x39, 0xd3, 0x25, 0xfb, 0xfb, 0x25, 0xb9, 0xa4, 0x8e, 0x2f, 0x0a, 0x76, | 4389 | 0xac, 0x4f, 0xd8, 0x2c, 0x9f, 0x2f, 0x1b, 0xc2, 0x1b, 0xbc, 0xff, 0x93, |
| 4489 | 0x4c, 0xca, 0x39, 0x6b, 0xcb, 0xfa, 0x99, 0x51, 0x11, 0x14, 0x59, 0xce, | 4390 | 0x6c, 0x59, 0x2f, 0x2f, 0xe6, 0x66, 0xc5, 0xfe, 0x43, 0xf2, 0x3f, 0x7c, |
| 4490 | 0x1a, 0x22, 0x8b, 0x9c, 0x17, 0x29, 0xc9, 0xf3, 0xb5, 0xa2, 0x3c, 0x62, | 4391 | 0xc4, 0x91, 0xb8, 0x31, 0x46, 0x3f, 0x72, 0xf5, 0xd3, 0x86, 0x57, 0x7a, |
| 4491 | 0xab, 0xeb, 0x76, 0x2a, 0xfd, 0xff, 0xdf, 0xdb, 0x39, 0xe7, 0x2c, 0x49, | 4392 | 0x9b, 0x8a, 0x57, 0xa0, 0xf5, 0x2f, 0x2a, 0x89, 0x34, 0x6b, 0x70, 0x9c, |
| 4492 | 0x49, 0x9e, 0x60, 0x4a, 0xf8, 0xcf, 0xb7, 0x8e, 0x8e, 0x0f, 0xe0, 0x15, | 4393 | 0x2d, 0xfc, 0xea, 0xfa, 0x35, 0xe7, 0xab, 0x94, 0x6d, 0x39, 0x19, 0xfb, |
| 4493 | 0xde, 0xff, 0x65, 0xae, 0x24, 0x97, 0x1b, 0x33, 0xd3, 0xa5, 0x33, 0x72, | 4394 | 0x21, 0x8e, 0x2d, 0x67, 0x4a, 0x14, 0x3c, 0x37, 0x0b, 0xcc, 0x5a, 0x9c, |
| 4494 | 0x6c, 0x29, 0xcd, 0x98, 0x31, 0x42, 0x3f, 0x72, 0xe4, 0x93, 0x33, 0x72, | 4395 | 0xd6, 0x1c, 0xc1, 0xd3, 0x86, 0x6d, 0x3f, 0xdb, 0xa2, 0xcb, 0x59, 0xa0, |
| 4495 | 0x8d, 0xf3, 0x97, 0xed, 0xb9, 0x57, 0x3c, 0xcd, 0x7e, 0x19, 0x67, 0x0b, | 4396 | 0xf3, 0x6e, 0xaf, 0x08, 0x46, 0x8d, 0x2e, 0x7b, 0x79, 0x72, 0x9e, 0xa4, |
| 4496 | 0xbf, 0x6d, 0xbf, 0xa6, 0x7c, 0x05, 0x7b, 0x64, 0xa1, 0x3d, 0x47, 0xda, | 4397 | 0x97, 0x36, 0x10, 0xdd, 0xc5, 0x07, 0xca, 0x6b, 0x2f, 0xe7, 0xdc, 0x32, |
| 4497 | 0x72, 0x96, 0x44, 0xe1, 0xa9, 0x69, 0x60, 0xda, 0xe4, 0xb2, 0xa9, 0x21, | 4398 | 0xb4, 0x8f, 0xd8, 0xa6, 0x7c, 0xde, 0x4d, 0xfa, 0x30, 0x37, 0xda, 0x64, |
| 4498 | 0x3c, 0x6e, 0x58, 0xd6, 0x93, 0xcd, 0xba, 0x9c, 0x01, 0xba, 0x50, 0x6b, | 4399 | 0x6d, 0xd8, 0x59, 0x5f, 0x43, 0xfc, 0x95, 0xe8, 0x43, 0x5f, 0x9d, 0x23, |
| 4499 | 0xcf, 0x85, 0x60, 0x54, 0xe9, 0xb2, 0x77, 0x27, 0xe7, 0x48, 0x7a, 0xa8, | 4400 | 0x97, 0x18, 0x33, 0xfc, 0x0e, 0x6f, 0x3b, 0x42, 0xae, 0x32, 0xc1, 0xd8, |
| 4500 | 0x03, 0x91, 0x5d, 0x7c, 0xa0, 0x64, 0x7b, 0x39, 0xdf, 0x96, 0xa5, 0x7e, | 4401 | 0x79, 0xd2, 0xba, 0x80, 0x0b, 0xf9, 0xd7, 0xf0, 0xc6, 0xb5, 0xff, 0x67, |
| 4501 | 0x44, 0x37, 0xa5, 0x73, 0x6e, 0x32, 0x73, 0xb9, 0x51, 0x27, 0xb7, 0xd9, | 4402 | 0x13, 0x7f, 0xb9, 0xb8, 0xb1, 0xcb, 0x39, 0xd3, 0x74, 0xba, 0xf5, 0x96, |
| 4502 | 0x3a, 0x79, 0xda, 0x10, 0x7f, 0x65, 0xf6, 0xa1, 0xaf, 0xce, 0x10, 0x3f, | 4403 | 0x84, 0xe0, 0x50, 0x77, 0xb3, 0x9c, 0x71, 0xaa, 0x34, 0xf3, 0x9b, 0x64, |
| 4503 | 0x8c, 0x18, 0x5e, 0x1b, 0xab, 0x1d, 0x26, 0x3e, 0x39, 0xc2, 0xd8, 0x79, | 4404 | 0xbf, 0xab, 0xc2, 0x34, 0x6f, 0x3d, 0xaf, 0x8b, 0x6d, 0xfe, 0x62, 0xfd, |
| 4504 | 0xd4, 0xbc, 0x88, 0x8b, 0xf9, 0x97, 0xf0, 0xca, 0xb5, 0xff, 0x85, 0x13, | 4405 | 0x19, 0x5d, 0xf4, 0xfa, 0x9f, 0x6b, 0xc7, 0x9d, 0xff, 0xaf, 0xfc, 0xbb, |
| 4505 | 0x7f, 0xf1, 0xb5, 0x6c, 0xb1, 0xcf, 0x32, 0xfd, 0x75, 0xcb, 0xb2, 0xb8, | 4406 | 0x5b, 0xf7, 0xe9, 0x12, 0x3b, 0x67, 0x5b, 0xda, 0x1d, 0x4c, 0x68, 0x35, |
| 4506 | 0xe4, 0xa1, 0x93, 0x4d, 0x72, 0xb6, 0xa9, 0x3c, 0xf5, 0xde, 0x3a, 0xd9, | 4407 | 0x57, 0x39, 0x36, 0x68, 0x31, 0x6f, 0x71, 0x3e, 0x0d, 0x33, 0xe9, 0x7c, |
| 4507 | 0xdf, 0x2a, 0x4b, 0x0d, 0x7e, 0xf5, 0x82, 0x2e, 0xba, 0xf9, 0x64, 0xf5, | 4408 | 0x9a, 0xa6, 0x6b, 0x9b, 0x6e, 0xb3, 0xc1, 0xf9, 0xec, 0x30, 0xdd, 0xf3, |
| 4508 | 0x19, 0x5d, 0xe4, 0xd2, 0x8d, 0x51, 0xfb, 0x7f, 0x33, 0x43, 0x6b, 0x77, | 4409 | 0xcf, 0x69, 0x53, 0x77, 0x3e, 0x7b, 0xcc, 0xb8, 0xf3, 0xd9, 0x69, 0xae, |
| 4509 | 0xeb, 0x12, 0x3b, 0xef, 0x34, 0xb7, 0xd9, 0x39, 0x61, 0x30, 0x75, 0xab, | 4410 | 0xbc, 0x2e, 0x17, 0x7f, 0xfe, 0x1f, 0x9b, 0x97, 0x53, 0xd9, 0x78, 0x3a, |
| 4510 | 0xad, 0x83, 0x83, 0xa9, 0x65, 0x8e, 0x2e, 0x52, 0x09, 0xfb, 0xfb, 0xe1, | ||
| 4511 | 0x94, 0xa3, 0x9b, 0x5c, 0xaa, 0xde, 0xfe, 0x1e, 0x4d, 0x39, 0x67, 0xa2, | ||
| 4512 | 0xb3, 0x29, 0xdd, 0xfe, 0x1e, 0x4f, 0xc5, 0xec, 0xef, 0x23, 0xa9, 0x5b, | ||
| 4513 | 0xae, 0xf3, 0xc5, 0x9f, 0xff, 0x07, 0xd8, 0xc4, 0xd3, 0xb4, 0xb4, 0x3a, | ||
| 4514 | 0x00, 0x00, 0x00 }; | 4411 | 0x00, 0x00, 0x00 }; |
| 4515 | 4412 | ||
| 4516 | static const u32 bnx2_TXP_b06FwData[(0x0/4) + 1] = { 0x0 }; | 4413 | static const u32 bnx2_TXP_b06FwData[(0x0/4) + 1] = { 0x0 }; |
| 4517 | static const u32 bnx2_TXP_b06FwRodata[(0x0/4) + 1] = { 0x0 }; | 4414 | static const u32 bnx2_TXP_b06FwRodata[(0x0/4) + 1] = { 0x0 }; |
| 4518 | 4415 | ||
| 4519 | static struct fw_info bnx2_txp_fw_06 = { | 4416 | static struct fw_info bnx2_txp_fw_06 = { |
| 4520 | /* Firmware version: 4.4.2 */ | 4417 | /* Firmware version: 4.6.16 */ |
| 4521 | .ver_major = 0x4, | 4418 | .ver_major = 0x4, |
| 4522 | .ver_minor = 0x4, | 4419 | .ver_minor = 0x6, |
| 4523 | .ver_fix = 0x2, | 4420 | .ver_fix = 0x10, |
| 4524 | 4421 | ||
| 4525 | .start_addr = 0x08000098, | 4422 | .start_addr = 0x08000098, |
| 4526 | 4423 | ||
| 4527 | .text_addr = 0x08000000, | 4424 | .text_addr = 0x08000000, |
| 4528 | .text_len = 0x3ab0, | 4425 | .text_len = 0x3a74, |
| 4529 | .text_index = 0x0, | 4426 | .text_index = 0x0, |
| 4530 | .gz_text = bnx2_TXP_b06FwText, | 4427 | .gz_text = bnx2_TXP_b06FwText, |
| 4531 | .gz_text_len = sizeof(bnx2_TXP_b06FwText), | 4428 | .gz_text_len = sizeof(bnx2_TXP_b06FwText), |
| @@ -4535,11 +4432,11 @@ static struct fw_info bnx2_txp_fw_06 = { | |||
| 4535 | .data_index = 0x0, | 4432 | .data_index = 0x0, |
| 4536 | .data = bnx2_TXP_b06FwData, | 4433 | .data = bnx2_TXP_b06FwData, |
| 4537 | 4434 | ||
| 4538 | .sbss_addr = 0x08003ae0, | 4435 | .sbss_addr = 0x08003aa0, |
| 4539 | .sbss_len = 0x68, | 4436 | .sbss_len = 0x68, |
| 4540 | .sbss_index = 0x0, | 4437 | .sbss_index = 0x0, |
| 4541 | 4438 | ||
| 4542 | .bss_addr = 0x08003b48, | 4439 | .bss_addr = 0x08003b08, |
| 4543 | .bss_len = 0x14c, | 4440 | .bss_len = 0x14c, |
| 4544 | .bss_index = 0x0, | 4441 | .bss_index = 0x0, |
| 4545 | 4442 | ||
diff --git a/drivers/net/bnx2_fw2.h b/drivers/net/bnx2_fw2.h index fe753b6bcb41..c54e4886b8bb 100644 --- a/drivers/net/bnx2_fw2.h +++ b/drivers/net/bnx2_fw2.h | |||
| @@ -15,848 +15,847 @@ | |||
| 15 | */ | 15 | */ |
| 16 | 16 | ||
| 17 | static u8 bnx2_COM_b09FwText[] = { | 17 | static u8 bnx2_COM_b09FwText[] = { |
| 18 | 0xcd, 0x7c, 0x7f, 0x6c, 0x5c, 0xd7, 0x75, 0xe6, 0x79, 0x6f, 0xde, 0x90, | 18 | 0xcd, 0x7c, 0x7b, 0x6c, 0x5c, 0xd7, 0x99, 0xdf, 0x77, 0xef, 0xcc, 0x90, |
| 19 | 0x43, 0x8a, 0xa2, 0x1e, 0x99, 0x31, 0x33, 0x8e, 0xd8, 0x7a, 0x86, 0xf3, | 19 | 0x43, 0x6a, 0x44, 0x5d, 0x32, 0x13, 0x66, 0x1c, 0x33, 0xcd, 0x3c, 0x2e, |
| 20 | 0x48, 0xd1, 0x21, 0xe3, 0x3e, 0x33, 0x63, 0x99, 0x76, 0xa6, 0xd6, 0x64, | 20 | 0x29, 0xda, 0x64, 0x92, 0x31, 0x77, 0xa4, 0xd0, 0xc9, 0xad, 0x3d, 0x99, |
| 21 | 0x66, 0x28, 0x2b, 0x0e, 0x69, 0xd0, 0x8e, 0x82, 0x4d, 0x01, 0x03, 0xe5, | 21 | 0x19, 0xc9, 0x4c, 0xa8, 0x0d, 0xe8, 0x44, 0x2e, 0x52, 0x54, 0x28, 0xd8, |
| 22 | 0x0e, 0xa9, 0x54, 0xd9, 0xf5, 0x22, 0xda, 0x34, 0x45, 0x8a, 0xa2, 0x88, | 22 | 0x21, 0xe5, 0x28, 0x8b, 0xec, 0xae, 0xf2, 0x28, 0x9a, 0x2e, 0xd2, 0xd5, |
| 23 | 0x26, 0x24, 0xe5, 0x2a, 0xcd, 0x88, 0x1c, 0xcb, 0x34, 0x1b, 0x14, 0x5e, | 23 | 0x64, 0x48, 0x29, 0xca, 0x62, 0xc4, 0x19, 0xd3, 0x34, 0x93, 0xa2, 0x01, |
| 24 | 0x64, 0x3c, 0xa4, 0x14, 0xb7, 0x1d, 0x89, 0x72, 0xe2, 0x2d, 0xbc, 0x58, | 24 | 0x32, 0x19, 0x92, 0x72, 0x76, 0x31, 0x12, 0x15, 0xdb, 0xcd, 0x1a, 0x41, |
| 25 | 0x07, 0x66, 0xa9, 0x1f, 0x4e, 0x83, 0x14, 0xf0, 0x2e, 0xbc, 0x68, 0x60, | 25 | 0xe2, 0xb0, 0xd4, 0x23, 0xde, 0x20, 0x2d, 0xb4, 0x1b, 0x17, 0x4d, 0xd3, |
| 26 | 0xa4, 0x80, 0x20, 0xbb, 0x8d, 0xb3, 0xc8, 0x62, 0x83, 0xdd, 0x00, 0x71, | 26 | 0x45, 0x21, 0xc8, 0x4e, 0x6c, 0x6c, 0xb3, 0x6d, 0x50, 0x2c, 0x10, 0x77, |
| 27 | 0x02, 0x27, 0x6f, 0xbf, 0xef, 0xde, 0xfb, 0xc8, 0xd1, 0x88, 0x76, 0xd2, | 27 | 0x91, 0x64, 0xfa, 0xfb, 0x9d, 0x73, 0xee, 0x70, 0x44, 0x31, 0x4e, 0xba, |
| 28 | 0xfc, 0xb5, 0x04, 0x06, 0xf7, 0xfd, 0xb8, 0x3f, 0xce, 0x3d, 0xf7, 0xdc, | 28 | 0x7f, 0x95, 0xc0, 0xe0, 0xdc, 0x7b, 0x9e, 0xdf, 0xf9, 0xce, 0xf7, 0x3e, |
| 29 | 0x73, 0xbe, 0x73, 0xee, 0x79, 0x7c, 0x40, 0xa4, 0x53, 0xcc, 0xdf, 0x5e, | 29 | 0xdf, 0xe5, 0x43, 0x22, 0xbd, 0x62, 0xfe, 0xf6, 0xe3, 0x97, 0xf9, 0xfd, |
| 30 | 0xfc, 0x32, 0xff, 0xe1, 0xb3, 0xb3, 0x63, 0x77, 0x65, 0xee, 0xc2, 0xe5, | 30 | 0x3f, 0x9c, 0x7b, 0xe0, 0x9d, 0x87, 0xdf, 0x89, 0xc7, 0x43, 0xf6, 0x81, |
| 31 | 0x87, 0xed, 0xf7, 0x3b, 0x0e, 0x9f, 0x47, 0xf0, 0x8b, 0xe3, 0x37, 0x66, | 31 | 0xae, 0x20, 0xeb, 0x03, 0xf8, 0x45, 0xf1, 0x9b, 0x30, 0xcf, 0x7b, 0xfd, |
| 32 | 0xae, 0x77, 0xfb, 0x73, 0xf1, 0x3b, 0x68, 0x89, 0xcc, 0xfc, 0x4f, 0x11, | 32 | 0x39, 0xf8, 0x1d, 0xb6, 0x44, 0x66, 0xff, 0x46, 0xc4, 0xda, 0xd5, 0x16, |
| 33 | 0xab, 0xe5, 0x5d, 0xec, 0x5d, 0xda, 0xbc, 0xd7, 0x9f, 0xfd, 0x1b, 0xb4, | 33 | 0xfe, 0x35, 0x63, 0xde, 0xe8, 0xcf, 0xfe, 0x2d, 0xfb, 0x39, 0xff, 0x80, |
| 34 | 0xf9, 0xd7, 0xfe, 0x45, 0x34, 0xd9, 0x6a, 0xde, 0xfc, 0x49, 0xcc, 0xce, | 34 | 0xb9, 0xfd, 0xbf, 0x80, 0x19, 0xbe, 0xdf, 0xfc, 0x24, 0x6c, 0x7b, 0xb7, |
| 35 | 0xce, 0x4c, 0xe6, 0x3d, 0x89, 0x45, 0xb2, 0x47, 0xa7, 0x66, 0x3d, 0x91, | 35 | 0x3e, 0x90, 0x73, 0x25, 0x1c, 0xf0, 0x7e, 0x38, 0x3d, 0xe7, 0x8a, 0x64, |
| 36 | 0x5c, 0x63, 0x24, 0x59, 0x90, 0x5f, 0x04, 0xe5, 0xb8, 0x23, 0x7c, 0xfe, | 36 | 0x9b, 0x63, 0xf1, 0xbc, 0xfc, 0xb2, 0x55, 0x8a, 0x06, 0x85, 0xf5, 0x6f, |
| 37 | 0x5b, 0xd9, 0x77, 0xbe, 0xf6, 0xad, 0x7b, 0x53, 0x3f, 0xae, 0x45, 0x24, | 37 | 0xf3, 0x7e, 0xf1, 0x95, 0x6f, 0xbf, 0x3b, 0xf1, 0xb3, 0x7a, 0x40, 0xc2, |
| 38 | 0xe6, 0x66, 0xdf, 0x16, 0x77, 0x48, 0x62, 0xfd, 0x68, 0xf3, 0xcc, 0x81, | 38 | 0x8e, 0xf7, 0xba, 0x38, 0x23, 0x12, 0x1e, 0xc2, 0x98, 0x2f, 0x1f, 0x9c, |
| 39 | 0x57, 0x6d, 0xe9, 0x0e, 0xfb, 0x72, 0x67, 0x22, 0x59, 0x99, 0x3e, 0x56, | 39 | 0xb5, 0xa5, 0xcf, 0x9f, 0xeb, 0xb5, 0xd6, 0xb7, 0x0f, 0x4a, 0xc9, 0xf6, |
| 40 | 0x39, 0x19, 0xd8, 0x9e, 0x94, 0x9d, 0xac, 0x37, 0x5c, 0x97, 0xae, 0xf1, | 40 | 0x1c, 0xb9, 0xb2, 0x19, 0x95, 0xef, 0x6c, 0x8a, 0x35, 0x93, 0xe9, 0x11, |
| 41 | 0x73, 0x99, 0x7b, 0x05, 0xf7, 0xd3, 0xc7, 0x1a, 0x31, 0x99, 0x6f, 0x94, | 41 | 0x7b, 0xf9, 0xad, 0x92, 0x75, 0x2c, 0x09, 0xb8, 0x5c, 0x27, 0x2e, 0xb9, |
| 42 | 0xbb, 0x6c, 0xcf, 0x43, 0x29, 0xb1, 0xb6, 0xec, 0x62, 0xec, 0x9a, 0xc7, | 42 | 0xca, 0x20, 0xde, 0x13, 0x31, 0x91, 0x7f, 0xbe, 0x5f, 0x8f, 0x0d, 0x4b, |
| 43 | 0xb1, 0xbf, 0x8a, 0xb1, 0xf7, 0x4b, 0xd4, 0x0b, 0x82, 0x73, 0x18, 0xfb, | 43 | 0x60, 0x55, 0xc2, 0x5d, 0xde, 0x0b, 0xd3, 0x37, 0x56, 0x62, 0x12, 0x5c, |
| 44 | 0x70, 0xe3, 0x17, 0xc1, 0xb3, 0x8e, 0x1e, 0xd7, 0xce, 0x9e, 0x88, 0xb0, | 44 | 0x1a, 0x97, 0x72, 0x35, 0x22, 0xa1, 0x55, 0x19, 0x0a, 0xc8, 0x70, 0xec, |
| 45 | 0xb4, 0xb2, 0xb5, 0xc9, 0x81, 0x06, 0xef, 0x8b, 0xed, 0x9a, 0x4e, 0xbf, | 45 | 0x71, 0xf4, 0x28, 0x34, 0x83, 0x72, 0xa4, 0x69, 0x49, 0xd0, 0x0d, 0x03, |
| 46 | 0x13, 0x74, 0xc6, 0x9c, 0xec, 0x89, 0xce, 0x45, 0x94, 0xd1, 0x6c, 0x7c, | 46 | 0xb6, 0x08, 0x7e, 0x0e, 0x7e, 0x51, 0xfc, 0x62, 0xf8, 0x9d, 0xc5, 0x3c, |
| 47 | 0xec, 0x9c, 0xaa, 0xb7, 0x6e, 0xea, 0x3d, 0x1e, 0xd5, 0xed, 0xde, 0x9a, | 47 | 0x43, 0x92, 0x6f, 0x72, 0x4e, 0xac, 0x5b, 0xc5, 0xfa, 0xd5, 0x84, 0x33, |
| 48 | 0x1c, 0x6a, 0xb0, 0xfc, 0xc9, 0xe4, 0xa0, 0x2a, 0xdf, 0x99, 0x4c, 0xab, | 48 | 0x8b, 0x79, 0x6f, 0x05, 0x62, 0xf2, 0xed, 0x83, 0x84, 0xcb, 0x21, 0x3c, |
| 49 | 0x52, 0xa6, 0x06, 0x54, 0xe9, 0x4c, 0x79, 0xaa, 0x7c, 0xc6, 0x3c, 0x7f, | 49 | 0x80, 0x2d, 0x6c, 0xe5, 0x56, 0xe4, 0x74, 0x3e, 0x2d, 0x71, 0xdb, 0xed, |
| 50 | 0x6e, 0x32, 0xa9, 0xca, 0x86, 0x29, 0x2f, 0x99, 0xf2, 0x05, 0x53, 0xbe, | 50 | 0x95, 0xa2, 0x63, 0xc5, 0xe7, 0x47, 0x07, 0xa4, 0x74, 0x1c, 0xed, 0x55, |
| 51 | 0x68, 0xca, 0x97, 0x4c, 0xb9, 0x69, 0xca, 0x2b, 0x93, 0xba, 0x9f, 0x6f, | 51 | 0xc9, 0xda, 0x98, 0xbf, 0xe8, 0xc8, 0xac, 0x6e, 0x63, 0xdd, 0x17, 0x41, |
| 52 | 0x9b, 0xfb, 0xef, 0x9a, 0xf2, 0x55, 0x53, 0xbe, 0x66, 0xca, 0xef, 0x99, | 52 | 0x27, 0x09, 0x87, 0x08, 0xfb, 0x4e, 0xf5, 0x31, 0x3c, 0x73, 0xbe, 0x78, |
| 53 | 0xf2, 0xfb, 0x86, 0xae, 0xeb, 0xa6, 0x7c, 0xd3, 0x94, 0x3f, 0x32, 0xef, | 53 | 0x50, 0xc3, 0xbd, 0x8a, 0x77, 0xd6, 0xff, 0x41, 0x44, 0xbf, 0xf3, 0x99, |
| 54 | 0x7f, 0x6c, 0xe8, 0x7d, 0x1b, 0x74, 0xfd, 0x49, 0xd4, 0xc8, 0x2a, 0xe6, | 54 | 0x7d, 0xfd, 0x75, 0xfd, 0xfd, 0x72, 0xfd, 0x51, 0xec, 0x99, 0x30, 0xf8, |
| 55 | 0x9d, 0x94, 0xd9, 0x8a, 0x23, 0xf3, 0xcb, 0x11, 0x29, 0xa8, 0x35, 0xfc, | 55 | 0x7b, 0x96, 0x52, 0x08, 0xb0, 0x34, 0x56, 0x22, 0xd6, 0xda, 0xca, 0xb8, |
| 56 | 0xca, 0x5e, 0xe9, 0x74, 0x64, 0x61, 0x23, 0x26, 0xd7, 0x95, 0x88, 0xbe, | 56 | 0x9c, 0xab, 0x3e, 0x24, 0xb9, 0x74, 0xab, 0x35, 0x97, 0x96, 0xa8, 0x2d, |
| 57 | 0x15, 0x7c, 0xeb, 0x80, 0x94, 0xed, 0xac, 0x2b, 0x97, 0x36, 0xe2, 0xf2, | 57 | 0xc3, 0x4e, 0x1e, 0x1d, 0xb6, 0x9b, 0x62, 0x35, 0x2a, 0x12, 0xee, 0x06, |
| 58 | 0xf2, 0x86, 0x58, 0xd3, 0x99, 0x0e, 0xb1, 0xcf, 0x7e, 0x40, 0x72, 0xae, | 58 | 0x5e, 0x5e, 0x5d, 0xe1, 0xdc, 0x41, 0xd4, 0x0d, 0xa2, 0x7f, 0x9f, 0xb5, |
| 59 | 0x25, 0x11, 0xc5, 0xd3, 0xa4, 0xe4, 0x2b, 0x7d, 0xb8, 0x4f, 0x25, 0x44, | 59 | 0xbe, 0x02, 0xf8, 0x3d, 0xe2, 0xa7, 0xd5, 0x5a, 0x4c, 0x0f, 0xc7, 0xe6, |
| 60 | 0xae, 0xee, 0xd5, 0xeb, 0x17, 0x93, 0xc8, 0x2a, 0xd7, 0xe4, 0xfe, 0xa9, | 60 | 0xb1, 0xe6, 0xd5, 0xe6, 0xf0, 0xe4, 0x6d, 0x71, 0x30, 0xe7, 0x00, 0xfa, |
| 61 | 0x6b, 0x2b, 0x09, 0x71, 0x96, 0x46, 0x31, 0x46, 0x97, 0x44, 0x57, 0xa5, | 61 | 0x10, 0x57, 0x9c, 0x8b, 0x73, 0x72, 0xbe, 0x08, 0xc6, 0x46, 0xd1, 0x46, |
| 62 | 0x3f, 0x22, 0x83, 0x89, 0x4f, 0xa3, 0x46, 0xb1, 0xe1, 0xc8, 0x44, 0xc3, | 62 | 0xb8, 0x5a, 0xad, 0x5c, 0xda, 0xe1, 0xbb, 0x6c, 0x01, 0x7f, 0x5b, 0xc4, |
| 63 | 0x12, 0xc7, 0x8b, 0x41, 0x3e, 0xba, 0xf0, 0x73, 0xf1, 0x8b, 0xe3, 0x97, | 63 | 0x5f, 0xef, 0x90, 0x7c, 0xb7, 0xc9, 0x35, 0xda, 0xb0, 0x97, 0xba, 0xbc, |
| 64 | 0xc0, 0xef, 0x47, 0xe8, 0xa7, 0x5f, 0x0a, 0x0d, 0xf6, 0x89, 0x71, 0x97, | 64 | 0xe7, 0xed, 0xed, 0x0a, 0xcf, 0x2d, 0x2c, 0xef, 0x0b, 0x26, 0x46, 0x4b, |
| 65 | 0x31, 0xfe, 0x72, 0xca, 0x9d, 0x11, 0xd2, 0x95, 0x90, 0x6f, 0x1d, 0x20, | 65 | 0x8a, 0x4e, 0x66, 0xb1, 0x1f, 0x4b, 0xd1, 0x84, 0x85, 0xe7, 0x64, 0x93, |
| 66 | 0x5d, 0x2e, 0xe9, 0x01, 0x6d, 0x31, 0x2b, 0xbf, 0x22, 0x27, 0x0a, 0xbe, | 66 | 0xfd, 0x89, 0xeb, 0xb8, 0x2c, 0xe0, 0x5c, 0xcb, 0x2b, 0x25, 0xfb, 0x6a, |
| 67 | 0x24, 0x6d, 0xaf, 0x53, 0x4a, 0xae, 0x95, 0x9c, 0x1b, 0xee, 0x95, 0xf2, | 67 | 0xf3, 0x17, 0xad, 0x9c, 0xbb, 0x68, 0x6f, 0xaf, 0xb3, 0xff, 0x09, 0xf4, |
| 68 | 0x51, 0xbc, 0x5f, 0x96, 0x9c, 0x8d, 0xfe, 0x4b, 0xae, 0xcc, 0xe8, 0x77, | 68 | 0x0f, 0xca, 0x62, 0xa5, 0x4f, 0x08, 0x93, 0x1e, 0x77, 0x02, 0xe3, 0xc4, |
| 69 | 0x7c, 0xf6, 0x36, 0xf6, 0x6a, 0xca, 0xa5, 0xd0, 0xbe, 0xbc, 0xfc, 0xb7, | 69 | 0xb1, 0xbd, 0x73, 0xf6, 0xd5, 0xf5, 0xf3, 0xf6, 0x35, 0x75, 0x6e, 0x58, |
| 70 | 0xb8, 0x66, 0x7f, 0x3f, 0x77, 0x34, 0xdd, 0x3f, 0xc5, 0x3d, 0x9f, 0x0f, | 70 | 0xab, 0x3d, 0x57, 0x27, 0xde, 0xc6, 0xfe, 0x3f, 0xc4, 0x5b, 0x0c, 0xf3, |
| 71 | 0x99, 0x79, 0xf0, 0x9a, 0x75, 0xc3, 0x71, 0xc3, 0xf9, 0x72, 0xfc, 0x61, | 71 | 0x47, 0x51, 0xee, 0xb3, 0x1a, 0xb5, 0x16, 0xd6, 0x8f, 0xe1, 0x79, 0x2f, |
| 72 | 0xcc, 0x99, 0x34, 0x84, 0x73, 0x96, 0x72, 0x14, 0xb4, 0xd4, 0x57, 0xba, | 72 | 0x1c, 0xde, 0x52, 0x74, 0x77, 0x05, 0x74, 0xe7, 0x78, 0x31, 0x79, 0x66, |
| 73 | 0xac, 0xb5, 0x95, 0x51, 0x79, 0x62, 0xf9, 0x01, 0xc9, 0xfb, 0x41, 0x30, | 73 | 0x73, 0x08, 0xfb, 0x88, 0xca, 0xd7, 0xc1, 0x17, 0x03, 0x87, 0xf7, 0x49, |
| 74 | 0xeb, 0x4b, 0xdc, 0x96, 0x41, 0xb7, 0x80, 0x0a, 0x5b, 0x0d, 0xb1, 0xea, | 74 | 0x1e, 0x7c, 0x41, 0x7a, 0x7b, 0x74, 0xf5, 0x9f, 0x49, 0x31, 0x9a, 0x18, |
| 75 | 0x15, 0x89, 0xb5, 0x83, 0x2f, 0x3f, 0x58, 0x61, 0xdf, 0x0e, 0x9e, 0xf5, | 75 | 0xa5, 0xfc, 0x48, 0x4e, 0x80, 0x9e, 0x0d, 0x6b, 0xe7, 0x96, 0xb2, 0x29, |
| 76 | 0xa1, 0x7e, 0xb7, 0xb5, 0xbe, 0x02, 0xfa, 0xb3, 0xe4, 0x4f, 0x10, 0x2c, | 76 | 0x5b, 0x1e, 0x16, 0xdb, 0xc3, 0xba, 0x99, 0x31, 0xa7, 0x20, 0x41, 0xb4, |
| 77 | 0xfa, 0x83, 0x89, 0x39, 0x8c, 0x79, 0xb9, 0x31, 0x38, 0x7e, 0x43, 0x5c, | 77 | 0x65, 0x25, 0xe0, 0x45, 0x25, 0xb7, 0xfa, 0x5e, 0x0b, 0x74, 0x19, 0x5f, |
| 78 | 0xf4, 0xd9, 0x8b, 0x3a, 0xe4, 0x15, 0xfb, 0x62, 0x9f, 0xec, 0xaf, 0x0b, | 78 | 0xc0, 0xa0, 0xc0, 0x92, 0x58, 0xb6, 0xdb, 0x25, 0xc5, 0xe3, 0xac, 0x0f, |
| 79 | 0x6d, 0xe3, 0x78, 0x47, 0xba, 0x82, 0x20, 0xef, 0xbb, 0xbc, 0x97, 0x4d, | 79 | 0x83, 0xc6, 0xc1, 0xb3, 0x2b, 0x07, 0x00, 0x97, 0x0c, 0xdb, 0xc2, 0xba, |
| 80 | 0xf0, 0x6f, 0x93, 0xfc, 0xeb, 0xec, 0x97, 0x57, 0x1a, 0x1c, 0x63, 0x37, | 80 | 0x61, 0xa7, 0x2c, 0x25, 0xb1, 0x2f, 0xff, 0xa1, 0x65, 0x64, 0x9e, 0xc1, |
| 81 | 0xda, 0x47, 0xfe, 0x3f, 0xa4, 0x3d, 0x81, 0xfe, 0xe3, 0x28, 0xf7, 0x58, | 81 | 0xef, 0xa8, 0x59, 0xab, 0xcd, 0x87, 0x96, 0xbd, 0x1a, 0xb1, 0x02, 0xab, |
| 82 | 0xf5, 0x6a, 0x80, 0xf1, 0x13, 0xb8, 0xde, 0x6d, 0x1e, 0xd7, 0xd5, 0xda, | 82 | 0xe3, 0x72, 0x76, 0x0f, 0xbc, 0x36, 0x80, 0x57, 0x7b, 0xc9, 0xe7, 0xd3, |
| 83 | 0x5f, 0xc2, 0xda, 0xbb, 0xd9, 0xb8, 0x3c, 0xbf, 0xd1, 0x8f, 0x79, 0x24, | 83 | 0x20, 0xde, 0x07, 0xd1, 0xb7, 0xcf, 0x0a, 0xae, 0xde, 0x8d, 0xd3, 0xb5, |
| 84 | 0xe4, 0x1b, 0x90, 0xcd, 0x9e, 0x83, 0x7b, 0x24, 0x0d, 0xd9, 0xe4, 0x9a, | 84 | 0xe6, 0x70, 0x7a, 0x1b, 0x38, 0xb5, 0x57, 0x07, 0xd0, 0xe7, 0x6e, 0x9c, |
| 85 | 0x8f, 0xad, 0xce, 0x49, 0x29, 0x9e, 0x1a, 0xa6, 0x1e, 0xcd, 0x8f, 0xed, | 85 | 0x36, 0x80, 0x53, 0x7b, 0x55, 0xe3, 0xb3, 0x01, 0x7c, 0xda, 0x4b, 0x51, |
| 86 | 0xc3, 0x7c, 0xb5, 0xb6, 0x1a, 0x58, 0xca, 0xed, 0xb7, 0xe5, 0x90, 0xd8, | 86 | 0x94, 0xfb, 0x2c, 0x7b, 0x59, 0xe3, 0xb3, 0x61, 0x78, 0xfa, 0x62, 0x93, |
| 87 | 0x59, 0x8c, 0x9b, 0x19, 0x01, 0x2d, 0x11, 0xbc, 0x8b, 0x8b, 0xb7, 0x9a, | 87 | 0xb0, 0x66, 0x3b, 0x68, 0x2e, 0x4b, 0xda, 0x81, 0x9c, 0x2a, 0xc8, 0x5c, |
| 88 | 0xc3, 0xb3, 0x54, 0xa2, 0x04, 0x1a, 0xe7, 0x41, 0x63, 0x49, 0xca, 0x62, | 88 | 0xc5, 0x06, 0xbe, 0x82, 0xe2, 0x4e, 0x58, 0x32, 0xa7, 0xda, 0x0a, 0x92, |
| 89 | 0x5f, 0x7c, 0xce, 0x0a, 0xf7, 0x8a, 0xe6, 0xdd, 0xb0, 0xe9, 0x67, 0x5b, | 89 | 0x02, 0x0d, 0x95, 0x9c, 0xb1, 0x51, 0x5b, 0x12, 0xf1, 0xac, 0x0d, 0x7c, |
| 90 | 0xce, 0x2d, 0x7b, 0xb5, 0xcb, 0x8a, 0xac, 0x8e, 0xca, 0xa9, 0x5d, 0x78, | 90 | 0x57, 0x81, 0xf7, 0x2a, 0x70, 0xae, 0x64, 0xc2, 0x8b, 0xe0, 0xd7, 0x38, |
| 91 | 0x56, 0x07, 0xcf, 0xec, 0xa5, 0x70, 0x1f, 0x38, 0xb8, 0xef, 0x43, 0xdd, | 91 | 0xce, 0x65, 0x77, 0x7d, 0xc2, 0xa9, 0x2b, 0x9e, 0x8d, 0x9b, 0x33, 0x23, |
| 92 | 0x6e, 0xcb, 0x59, 0xbd, 0x95, 0x5f, 0x6b, 0x8d, 0x41, 0x7f, 0x0b, 0xfc, | 92 | 0xed, 0xf3, 0x9c, 0x62, 0x38, 0x2f, 0x75, 0x7e, 0xd6, 0x5f, 0x66, 0xf6, |
| 93 | 0xb2, 0x57, 0x7b, 0x51, 0xe7, 0x56, 0x7e, 0xd5, 0xc1, 0x2f, 0x7b, 0x55, | 93 | 0x49, 0x6a, 0x39, 0xa0, 0xce, 0x2b, 0xbd, 0xfa, 0xae, 0xf6, 0x79, 0xd9, |
| 94 | 0xf3, 0xaa, 0x0e, 0x5e, 0xd9, 0x4b, 0x71, 0x94, 0x7b, 0x2c, 0xfb, 0xac, | 94 | 0x13, 0x94, 0x65, 0x3c, 0x23, 0x91, 0xd4, 0x12, 0xcf, 0x29, 0x9b, 0x0a, |
| 95 | 0xe6, 0x55, 0xdd, 0xec, 0x99, 0xf3, 0x4a, 0x5f, 0xe5, 0x40, 0xab, 0x25, | 95 | 0x08, 0xcf, 0x2a, 0x24, 0xd9, 0x19, 0x9e, 0x4b, 0x54, 0x92, 0xab, 0x3c, |
| 96 | 0x5a, 0x67, 0xe5, 0x84, 0xba, 0x29, 0x92, 0x2d, 0x62, 0xaf, 0xdb, 0xe0, | 96 | 0xb3, 0x0d, 0x73, 0x5e, 0xfa, 0x9c, 0x92, 0x7b, 0x9c, 0x53, 0xd2, 0x9c, |
| 97 | 0x85, 0x23, 0xc5, 0x31, 0x4b, 0x66, 0xd5, 0xbb, 0xa2, 0xa4, 0x1b, 0x1f, | 97 | 0xd3, 0x76, 0xf3, 0x8a, 0x39, 0xa7, 0x7f, 0x2b, 0x86, 0xe6, 0xdf, 0x10, |
| 98 | 0x00, 0x23, 0x47, 0x86, 0x61, 0x29, 0xca, 0x6d, 0xd9, 0x17, 0xed, 0xad, | 98 | 0x07, 0x36, 0x70, 0x10, 0xbc, 0x03, 0x07, 0xdd, 0x6d, 0x1c, 0xc4, 0x6d, |
| 99 | 0x4a, 0x4c, 0x0a, 0x4e, 0x52, 0xbc, 0x25, 0xa5, 0xc7, 0x9b, 0xfa, 0x99, | 99 | 0xec, 0xe1, 0xae, 0xfd, 0x77, 0xd6, 0x75, 0xee, 0x5d, 0x4a, 0x41, 0x4f, |
| 100 | 0x41, 0x3f, 0xdf, 0x01, 0x3f, 0x2c, 0xe8, 0x56, 0xbe, 0x7b, 0x4c, 0xed, | 100 | 0xac, 0x85, 0x0a, 0xe1, 0x0e, 0x48, 0x71, 0x86, 0x30, 0x52, 0xae, 0x6b, |
| 101 | 0xfb, 0xf4, 0xaa, 0x23, 0x83, 0x4b, 0xac, 0x53, 0xb6, 0xaf, 0x34, 0xde, | 101 | 0x58, 0xf3, 0x2b, 0x94, 0x6d, 0x07, 0x04, 0x34, 0xf1, 0xb6, 0x80, 0x1a, |
| 102 | 0x09, 0x74, 0xbf, 0x8f, 0x71, 0x4c, 0xd7, 0xce, 0x2e, 0xda, 0x97, 0xd7, | 102 | 0x53, 0x92, 0x85, 0x26, 0xdb, 0x4a, 0x92, 0xcb, 0x80, 0x5e, 0x6b, 0xac, |
| 103 | 0x4f, 0xdb, 0x57, 0x1b, 0xe8, 0xb7, 0xc1, 0xb5, 0xc0, 0x5a, 0x2d, 0x63, | 103 | 0x03, 0x83, 0x6e, 0x6a, 0x3e, 0xde, 0xd1, 0x07, 0xd1, 0x36, 0x1e, 0xf3, |
| 104 | 0xad, 0x96, 0xb1, 0x6e, 0x66, 0x4f, 0xd7, 0xd4, 0xde, 0x4a, 0x9a, 0x75, | 104 | 0x95, 0x38, 0xe4, 0x74, 0x10, 0xe5, 0xd7, 0x50, 0xee, 0xb3, 0x66, 0x6a, |
| 105 | 0x25, 0x0d, 0x5c, 0xdb, 0x04, 0xd6, 0x94, 0x6b, 0x2b, 0xd6, 0xab, 0x99, | 105 | 0x7f, 0x65, 0x49, 0x5f, 0x4b, 0x9c, 0x09, 0xee, 0x31, 0x36, 0x9d, 0x73, |
| 106 | 0x3d, 0x12, 0x39, 0x1b, 0x51, 0x6b, 0xda, 0xb3, 0xfa, 0x91, 0xed, 0x35, | 106 | 0x4b, 0x31, 0x47, 0xde, 0x26, 0xce, 0x3b, 0x43, 0x22, 0x83, 0x09, 0xa7, |
| 107 | 0x1d, 0x68, 0x5a, 0x53, 0xfb, 0x5d, 0xd6, 0xd4, 0xd9, 0x65, 0x4d, 0xb7, | 107 | 0x28, 0xff, 0x05, 0xed, 0x89, 0x58, 0x56, 0xfe, 0xb7, 0x4f, 0xbb, 0xc0, |
| 108 | 0x1a, 0x3f, 0x31, 0x6b, 0xfa, 0x73, 0x31, 0xb2, 0xff, 0x9e, 0xfc, 0x1a, | 108 | 0x43, 0xcf, 0xeb, 0x59, 0xf5, 0xc4, 0x7a, 0x8e, 0xcb, 0xa0, 0x2e, 0x24, |
| 109 | 0x00, 0xbf, 0xbc, 0x5f, 0x83, 0x5f, 0xce, 0xae, 0xfc, 0xea, 0xb3, 0x5b, | 109 | 0xb3, 0xd0, 0x31, 0x05, 0x97, 0xeb, 0x71, 0xfe, 0xf8, 0x2c, 0xd7, 0xcd, |
| 110 | 0xf9, 0x15, 0x01, 0xbf, 0xa2, 0xbf, 0x36, 0xbf, 0xc0, 0x87, 0x5d, 0x79, | 110 | 0x37, 0x7d, 0x7d, 0x20, 0xd9, 0x80, 0xc7, 0x36, 0xf2, 0xe5, 0xa4, 0x95, |
| 111 | 0x15, 0x83, 0xde, 0x2b, 0x4b, 0x3e, 0x23, 0x92, 0xaf, 0x6a, 0x5d, 0x5d, | 111 | 0x6f, 0x12, 0x57, 0x19, 0x71, 0x9b, 0x1a, 0x66, 0x0d, 0x6b, 0x1b, 0x4e, |
| 112 | 0x56, 0x3a, 0x9b, 0xba, 0x2a, 0xd4, 0xd9, 0xd4, 0xd7, 0x6a, 0x9f, 0x58, | 112 | 0xf0, 0x6b, 0x16, 0x34, 0x49, 0xd8, 0xe2, 0xe0, 0x9b, 0x73, 0x01, 0xff, |
| 113 | 0x85, 0x4a, 0x12, 0xba, 0xd4, 0x41, 0xf9, 0x1c, 0xca, 0x3d, 0xd6, 0x74, | 113 | 0x1c, 0x82, 0xde, 0xa4, 0x2c, 0x42, 0x3f, 0x96, 0x2b, 0x9c, 0xef, 0x33, |
| 114 | 0xb5, 0x1f, 0x76, 0x36, 0x10, 0x77, 0x2c, 0xb4, 0x97, 0xe5, 0x84, 0x8b, | 114 | 0x56, 0xe0, 0xb2, 0x3f, 0x3f, 0xcf, 0x86, 0x73, 0xeb, 0xf9, 0xca, 0xcd, |
| 115 | 0xb5, 0x71, 0xef, 0x8a, 0x8a, 0xf4, 0xa5, 0xc0, 0xa7, 0x14, 0xde, 0xa7, | 115 | 0xd7, 0x0c, 0xef, 0x2b, 0x3d, 0x88, 0xf9, 0x4a, 0x1d, 0xf3, 0x95, 0xc8, |
| 116 | 0x12, 0x39, 0xc9, 0xda, 0x21, 0xae, 0xc9, 0x57, 0x3a, 0xde, 0xce, 0xa9, | 116 | 0xb3, 0x07, 0x94, 0xae, 0x39, 0x4e, 0xfc, 0x9d, 0x47, 0xdb, 0x2d, 0xd0, |
| 117 | 0x2b, 0x3e, 0x67, 0xbb, 0x0c, 0x9e, 0x45, 0x65, 0x06, 0x76, 0xa0, 0xe8, | 117 | 0x08, 0xf9, 0x81, 0xfc, 0x41, 0x5e, 0x7d, 0xb7, 0x8d, 0xfd, 0x76, 0xe0, |
| 118 | 0x71, 0x3c, 0xf6, 0x9f, 0x9c, 0xe1, 0xb8, 0x85, 0x46, 0xa8, 0xb3, 0x25, | 118 | 0x76, 0x06, 0x72, 0x98, 0xbc, 0x11, 0x96, 0x7c, 0x94, 0xf5, 0x8f, 0x1b, |
| 119 | 0x07, 0x1b, 0x8e, 0x77, 0xdc, 0xb7, 0xe3, 0x56, 0x41, 0xd9, 0xa0, 0x8c, | 119 | 0x98, 0x20, 0x13, 0xd4, 0xfb, 0xf1, 0x1e, 0x5f, 0x3e, 0x82, 0x16, 0x01, |
| 120 | 0x78, 0x8d, 0x66, 0xfb, 0xb2, 0x4d, 0x27, 0xf6, 0x73, 0x0e, 0x72, 0x4d, | 120 | 0xdb, 0xf3, 0x6a, 0x8f, 0xb6, 0xe7, 0x01, 0x37, 0x9d, 0x30, 0x72, 0xdf, |
| 121 | 0xda, 0x92, 0xd8, 0x7b, 0xc7, 0x22, 0xe1, 0xfa, 0x38, 0xd9, 0x71, 0x81, | 121 | 0x9e, 0x91, 0xdb, 0x3e, 0xbc, 0x3c, 0x2b, 0xca, 0x55, 0xb1, 0xd6, 0x33, |
| 122 | 0x5d, 0x96, 0xf9, 0x0a, 0xfb, 0xfb, 0x63, 0x2b, 0x72, 0x31, 0xec, 0x9f, | 122 | 0x61, 0xc8, 0x70, 0x5b, 0xf2, 0x69, 0xd0, 0x66, 0x3a, 0x60, 0xe4, 0xc3, |
| 123 | 0x7c, 0x64, 0xdf, 0xba, 0xbf, 0xf9, 0xc6, 0x5b, 0x46, 0x37, 0x28, 0x5b, | 123 | 0x8b, 0xc6, 0x56, 0xd2, 0x38, 0x0e, 0x2a, 0x3d, 0xbe, 0x88, 0x79, 0x4f, |
| 124 | 0x85, 0xfe, 0xca, 0x4d, 0xfd, 0x95, 0xad, 0xc8, 0x92, 0xec, 0x53, 0xf6, | 124 | 0x00, 0x46, 0xce, 0x19, 0xb4, 0xd6, 0x2a, 0x11, 0xe8, 0x6c, 0xc0, 0xe6, |
| 125 | 0xe0, 0x28, 0xf9, 0x77, 0x1a, 0xef, 0xae, 0x4b, 0x84, 0x32, 0xa3, 0xf6, | 125 | 0x24, 0xe2, 0x80, 0x09, 0xef, 0x7e, 0x9f, 0x88, 0x2c, 0x6c, 0xfa, 0xeb, |
| 126 | 0x18, 0xf7, 0xfb, 0x97, 0x38, 0xdf, 0x26, 0xde, 0x4e, 0xc3, 0xc6, 0x71, | 126 | 0x2e, 0xb6, 0xf5, 0x45, 0x49, 0xe1, 0xdb, 0x99, 0x0d, 0xec, 0xd0, 0xc6, |
| 127 | 0x7f, 0x61, 0x8d, 0xe3, 0x7c, 0x7e, 0xc8, 0xd0, 0xe4, 0x48, 0x4e, 0xdd, | 127 | 0xcc, 0xc9, 0xca, 0x99, 0x96, 0xed, 0x92, 0x06, 0xdd, 0xd1, 0x86, 0x44, |
| 128 | 0x7f, 0x63, 0x4f, 0xa8, 0x3f, 0xb1, 0x9f, 0x41, 0xdb, 0x8b, 0x6a, 0x8e, | 128 | 0x26, 0x37, 0x32, 0xef, 0x06, 0xbf, 0xa1, 0x1e, 0x63, 0xca, 0xcd, 0x52, |
| 129 | 0x76, 0x36, 0x0b, 0xde, 0x34, 0xd3, 0xc8, 0x79, 0x67, 0xb1, 0xc6, 0xa1, | 129 | 0xc4, 0x76, 0x5d, 0x94, 0x94, 0x3f, 0x27, 0xba, 0x6f, 0xb8, 0x3e, 0xbd, |
| 130 | 0x0e, 0x0b, 0xd7, 0x8a, 0xb8, 0xc6, 0xb1, 0x16, 0x2a, 0x5d, 0xb0, 0x8f, | 130 | 0x0c, 0x49, 0xc8, 0x6d, 0xb5, 0x36, 0x70, 0x26, 0x47, 0x9b, 0xbf, 0x6c, |
| 131 | 0x31, 0x63, 0x83, 0xd9, 0x7e, 0x11, 0xed, 0xf9, 0x9c, 0x6d, 0xbb, 0x60, | 131 | 0x7d, 0x35, 0xa8, 0xed, 0x15, 0xdb, 0xfb, 0xa9, 0xa5, 0xd7, 0x8c, 0x4f, |
| 132 | 0x8f, 0xd9, 0x7e, 0xd1, 0xb4, 0xdf, 0xb1, 0xcb, 0xdc, 0x2b, 0xb4, 0xc9, | 132 | 0x27, 0x15, 0x1e, 0x62, 0x5d, 0xfa, 0xdd, 0x35, 0xef, 0xd7, 0x22, 0x46, |
| 133 | 0x57, 0x32, 0xc0, 0x42, 0x2b, 0xb6, 0x14, 0x7c, 0xe0, 0x1c, 0xbf, 0xdf, | 133 | 0x87, 0x99, 0xf7, 0xf9, 0xa0, 0xb6, 0x7f, 0xc2, 0x3d, 0xe4, 0xa3, 0xa0, |
| 134 | 0xec, 0x0b, 0x2d, 0x9b, 0x1f, 0x75, 0x2c, 0x69, 0xf7, 0x76, 0x93, 0xcd, | 134 | 0xe7, 0xf4, 0xe0, 0x9c, 0xc3, 0x21, 0x6f, 0x6a, 0x7c, 0x43, 0xf5, 0x2b, |
| 135 | 0x7f, 0xb0, 0xb5, 0xad, 0xdb, 0x91, 0xcd, 0x05, 0xe8, 0xa8, 0x53, 0x90, | 135 | 0x99, 0x7e, 0xd1, 0x6e, 0x3d, 0xee, 0xd4, 0xf4, 0x88, 0xa2, 0xa1, 0x4f, |
| 136 | 0x95, 0xc5, 0xed, 0x7a, 0x94, 0x4b, 0x25, 0xa3, 0x90, 0xcd, 0xd4, 0x38, | 136 | 0x4f, 0x0f, 0xab, 0xf2, 0xb3, 0xd3, 0x29, 0x55, 0x2e, 0x4e, 0xbb, 0xaa, |
| 137 | 0xa7, 0x79, 0xa5, 0xd1, 0x2c, 0xa3, 0x61, 0x1f, 0x31, 0x25, 0x07, 0x7a, | 137 | 0x3c, 0xaf, 0xfa, 0x5b, 0xde, 0x90, 0xa9, 0x1f, 0x9d, 0x8e, 0xab, 0x72, |
| 138 | 0x9c, 0xc5, 0xa6, 0x71, 0x16, 0x9b, 0xc6, 0x59, 0x32, 0xd8, 0x8e, 0xfd, | 138 | 0xdc, 0x94, 0x69, 0x53, 0x66, 0x4c, 0x39, 0x69, 0x4a, 0xcf, 0x94, 0x59, |
| 139 | 0x68, 0xbb, 0x7a, 0xfd, 0x26, 0x7b, 0xce, 0x35, 0xfb, 0x24, 0xf6, 0xa4, | 139 | 0x53, 0x16, 0xcc, 0x7c, 0x53, 0xe6, 0xfd, 0x98, 0x29, 0x67, 0x4c, 0x79, |
| 140 | 0x96, 0x05, 0x60, 0x35, 0xbd, 0x06, 0x15, 0x57, 0xe6, 0x37, 0x2e, 0x84, | 140 | 0xdc, 0x94, 0x1f, 0x31, 0xe5, 0x09, 0x03, 0xd7, 0xbc, 0x29, 0x3f, 0x6e, |
| 141 | 0x7b, 0xb5, 0xdc, 0x8e, 0xe7, 0x3f, 0xc4, 0xf3, 0xe1, 0x33, 0x2e, 0xec, | 141 | 0xea, 0x4f, 0x1b, 0x38, 0x3f, 0x03, 0x78, 0x1e, 0x09, 0xed, 0xd0, 0xca, |
| 142 | 0x14, 0xb1, 0xda, 0x4b, 0x72, 0xae, 0x42, 0x19, 0x79, 0x11, 0x74, 0xa7, | 142 | 0x69, 0x4d, 0x5f, 0x15, 0x47, 0xca, 0x9b, 0xdc, 0x7f, 0x1c, 0x32, 0x25, |
| 143 | 0xfd, 0x36, 0x8b, 0x7c, 0x4d, 0x0d, 0x9f, 0x97, 0x54, 0x72, 0x5e, 0x46, | 143 | 0x88, 0xb3, 0x04, 0xbf, 0x3b, 0xa4, 0x09, 0x17, 0x72, 0x38, 0x88, 0x33, |
| 144 | 0x7c, 0x96, 0x4f, 0x88, 0xc2, 0x58, 0xa2, 0x31, 0xd0, 0x8b, 0x90, 0x3f, | 144 | 0xe4, 0xf3, 0x69, 0xf9, 0x53, 0xf4, 0x1d, 0xbd, 0xe0, 0xc8, 0x62, 0x95, |
| 145 | 0x91, 0x1f, 0x57, 0xda, 0xc5, 0x1e, 0xfb, 0x61, 0x40, 0x3b, 0x78, 0x7a, | 145 | 0xfa, 0xf5, 0x5b, 0xf2, 0x6a, 0x85, 0xe7, 0xf1, 0xbc, 0xdc, 0xa8, 0xa4, |
| 146 | 0xa3, 0xb5, 0x1f, 0x91, 0xa1, 0x33, 0xaa, 0x1f, 0xf4, 0x91, 0xf6, 0xbf, | 146 | 0xe2, 0x41, 0x8b, 0x74, 0x94, 0x98, 0x7c, 0x45, 0x12, 0x90, 0xfd, 0x63, |
| 147 | 0xad, 0xfa, 0x0b, 0xfb, 0xc2, 0x3c, 0xc7, 0x5a, 0xfb, 0x73, 0xe4, 0xba, | 147 | 0x71, 0x96, 0xd7, 0xa8, 0x54, 0xd0, 0xef, 0xa0, 0x5a, 0xfb, 0x79, 0x01, |
| 148 | 0x6b, 0xa3, 0xbf, 0xb4, 0x99, 0x23, 0xaf, 0x21, 0x23, 0xae, 0x83, 0xf2, | 148 | 0x4c, 0x72, 0xa5, 0xd2, 0x0d, 0x99, 0xf5, 0x4a, 0x8b, 0x7a, 0xfd, 0xfc, |
| 149 | 0x61, 0x3b, 0x94, 0x19, 0x7b, 0xec, 0x3b, 0x41, 0x6e, 0x9a, 0x73, 0x2b, | 149 | 0xa6, 0xc8, 0xc8, 0x05, 0xe2, 0xf9, 0x5b, 0xb2, 0x51, 0x21, 0xde, 0x9f, |
| 150 | 0x99, 0x67, 0xff, 0xc3, 0xc8, 0x9b, 0x54, 0xed, 0x2c, 0x78, 0x96, 0x19, | 150 | 0x87, 0xad, 0x90, 0x4a, 0xbf, 0x28, 0x89, 0xd1, 0x8b, 0xc2, 0xf9, 0xc6, |
| 151 | 0xc4, 0x78, 0xbc, 0x4f, 0x02, 0x1f, 0x49, 0x99, 0xf8, 0xac, 0x54, 0xf9, | 151 | 0xd2, 0x28, 0xe3, 0x65, 0xfc, 0xce, 0x41, 0xde, 0x76, 0x4f, 0xe8, 0xf9, |
| 152 | 0x65, 0x90, 0x73, 0x34, 0xa6, 0xd2, 0x6b, 0xcf, 0xf7, 0x96, 0x14, 0x50, | 152 | 0x86, 0xcd, 0x7c, 0x2e, 0xec, 0xc2, 0x5b, 0x0e, 0x65, 0xe0, 0x7f, 0xb5, |
| 153 | 0x77, 0xc1, 0xe8, 0x83, 0x62, 0xe3, 0xba, 0xe2, 0xdf, 0xf3, 0x6a, 0x1f, | 153 | 0xf4, 0x9e, 0xb4, 0x3c, 0xcc, 0x3a, 0x41, 0x96, 0xb6, 0xcf, 0x23, 0xf6, |
| 154 | 0xa5, 0x4e, 0x97, 0xa9, 0x37, 0x36, 0xdc, 0x08, 0xf7, 0xf8, 0x25, 0xff, | 154 | 0xc4, 0xf5, 0x16, 0xe4, 0x31, 0xf9, 0xdf, 0xd4, 0x6d, 0x1b, 0xfe, 0x92, |
| 155 | 0xa5, 0x60, 0x61, 0x39, 0x95, 0x4c, 0xda, 0x83, 0x52, 0xaa, 0x0e, 0x96, | 155 | 0x9a, 0xed, 0x81, 0x3e, 0x33, 0xc3, 0x58, 0x83, 0xef, 0x71, 0xd8, 0x9a, |
| 156 | 0x6d, 0x94, 0x27, 0x6a, 0x09, 0x39, 0x51, 0x61, 0x3f, 0xfb, 0x51, 0x07, | 156 | 0x52, 0x22, 0x1e, 0x8a, 0x95, 0x5f, 0xb5, 0xb2, 0x41, 0x6d, 0x9f, 0x6a, |
| 157 | 0x8a, 0xc8, 0xc6, 0x26, 0xef, 0xa3, 0xae, 0xe1, 0x98, 0x6f, 0x5b, 0x7a, | 157 | 0x19, 0xc1, 0x76, 0x4b, 0xf2, 0xe8, 0xbb, 0x60, 0x64, 0x66, 0xa1, 0x79, |
| 158 | 0x4c, 0xcc, 0xc1, 0xdb, 0xb4, 0xfe, 0x63, 0xe3, 0x8a, 0x55, 0xaa, 0x71, | 158 | 0x4b, 0xc9, 0x8d, 0xaf, 0x2b, 0x1a, 0x4e, 0x9c, 0x2f, 0x09, 0x75, 0x86, |
| 159 | 0xfd, 0xf1, 0xbc, 0xd1, 0xac, 0x8f, 0x42, 0x5d, 0xb4, 0x83, 0xc5, 0x22, | 159 | 0x1d, 0xa0, 0x4c, 0xbb, 0x92, 0xae, 0xb7, 0x16, 0xaa, 0x94, 0xc1, 0xc3, |
| 160 | 0xd9, 0x45, 0xab, 0xb4, 0x22, 0x76, 0xde, 0x8f, 0x12, 0x0f, 0x26, 0x45, | 160 | 0x52, 0xac, 0x0d, 0x97, 0x6c, 0x94, 0xa7, 0xeb, 0x31, 0x39, 0x5d, 0xe1, |
| 161 | 0xee, 0x75, 0xf5, 0x3c, 0x3f, 0x19, 0xa1, 0x1e, 0x74, 0xbc, 0xd3, 0xe8, | 161 | 0x3c, 0xfb, 0xd1, 0xc7, 0x45, 0x1d, 0x18, 0x6b, 0x90, 0xf2, 0x98, 0x6b, |
| 162 | 0xbb, 0x53, 0x72, 0x0e, 0xd7, 0x9f, 0xd7, 0x12, 0x44, 0xb2, 0x1e, 0x6d, | 162 | 0xbe, 0x6e, 0xe9, 0x35, 0xb1, 0x07, 0x77, 0xcb, 0xfa, 0x44, 0xf3, 0x9a, |
| 163 | 0xa5, 0x13, 0xc9, 0x3a, 0xd8, 0x63, 0xac, 0xf3, 0x52, 0xc0, 0xbd, 0x90, | 163 | 0x55, 0xac, 0xd3, 0x4e, 0x42, 0x7d, 0xb3, 0x53, 0x66, 0xfb, 0xf2, 0xfa, |
| 164 | 0xaf, 0x6a, 0x19, 0x29, 0xef, 0x60, 0x2f, 0xd0, 0x9b, 0x83, 0x8e, 0x11, | 164 | 0x79, 0xac, 0x5d, 0xc0, 0x7a, 0x59, 0x25, 0xb3, 0xba, 0x21, 0xf7, 0x7e, |
| 165 | 0x1b, 0x7b, 0xcc, 0x8d, 0x64, 0xf9, 0x7c, 0x1c, 0xd7, 0x9b, 0xa8, 0x4f, | 165 | 0x52, 0xf9, 0x72, 0xab, 0x5c, 0x1d, 0x95, 0x8b, 0x9b, 0x71, 0x39, 0x52, |
| 166 | 0x1d, 0x0b, 0x4c, 0x5a, 0x53, 0xbc, 0xc3, 0x58, 0x39, 0xab, 0x58, 0x09, | 166 | 0x19, 0x97, 0x8d, 0x4d, 0x4f, 0x0a, 0x95, 0xb4, 0xac, 0xa3, 0x4f, 0xbe, |
| 167 | 0x79, 0xf2, 0x52, 0xf0, 0xe4, 0x72, 0x88, 0x11, 0x94, 0x6c, 0xc9, 0xc0, | 167 | 0x92, 0x91, 0xb5, 0xcd, 0x63, 0xea, 0xac, 0x2f, 0x42, 0x2e, 0x6d, 0xa0, |
| 168 | 0xd9, 0xa4, 0xd9, 0xd7, 0x5d, 0xdc, 0x73, 0xe4, 0x3f, 0x9e, 0xf9, 0xe6, | 168 | 0x4f, 0x63, 0x73, 0x12, 0x3f, 0xdf, 0x1e, 0x88, 0xa1, 0xdf, 0x10, 0xfa, |
| 169 | 0x59, 0x7b, 0xd3, 0xb3, 0x70, 0xff, 0x7f, 0x09, 0xb4, 0xf5, 0x2b, 0xfe, | 169 | 0x88, 0xf5, 0xb3, 0xca, 0x3d, 0xc0, 0x21, 0xe6, 0xae, 0xfa, 0xb6, 0xc1, |
| 170 | 0xd8, 0xd9, 0x23, 0x56, 0x5e, 0xe1, 0x93, 0x20, 0x28, 0x78, 0x51, 0x29, | 170 | 0xb8, 0x2c, 0x54, 0x79, 0x4e, 0x2f, 0x4c, 0x6f, 0xac, 0xc4, 0xb2, 0xd4, |
| 171 | 0x8d, 0xfe, 0x09, 0xe6, 0xca, 0x77, 0x65, 0x30, 0x9c, 0x76, 0x63, 0x78, | 171 | 0x77, 0xa7, 0x9b, 0xc3, 0xe0, 0x53, 0xe8, 0xef, 0x2a, 0x65, 0x42, 0x50, |
| 172 | 0x72, 0xd6, 0x4b, 0x29, 0xfb, 0x9f, 0xc7, 0xfe, 0xd3, 0x3a, 0x53, 0xca, | 172 | 0x8a, 0x90, 0xb5, 0x0d, 0xc0, 0x46, 0x58, 0x1b, 0xb0, 0xdf, 0x8b, 0xcd, |
| 173 | 0x3d, 0xa0, 0xdd, 0x5b, 0xe2, 0x9a, 0xbc, 0x14, 0x9c, 0x05, 0x16, 0x9e, | 173 | 0x21, 0x94, 0x0e, 0x4a, 0xac, 0x03, 0xd8, 0x8b, 0x4d, 0x17, 0x65, 0x0c, |
| 174 | 0x5e, 0x2a, 0x5a, 0x03, 0xd8, 0x12, 0x76, 0x9f, 0x05, 0x3e, 0x77, 0x49, | 174 | 0xa5, 0xd6, 0xed, 0x27, 0x9b, 0x9c, 0x3f, 0xab, 0x74, 0x90, 0xc6, 0xf1, |
| 175 | 0xfe, 0x22, 0xd7, 0x82, 0x75, 0xf8, 0xbc, 0x4d, 0xa6, 0xe3, 0xad, 0xb6, | 175 | 0xd4, 0x1d, 0xb6, 0x7a, 0xc0, 0x5b, 0xb4, 0x8a, 0x2b, 0x62, 0xe7, 0xd2, |
| 176 | 0xf2, 0xdc, 0x3e, 0xe9, 0x24, 0xbf, 0x51, 0x77, 0xe9, 0xff, 0x46, 0xb4, | 176 | 0x21, 0xfa, 0x0b, 0x90, 0x2b, 0x37, 0x0f, 0x68, 0x58, 0x3e, 0x1b, 0xa0, |
| 177 | 0x5e, 0x76, 0x65, 0x60, 0x95, 0x7c, 0x2f, 0x5a, 0xb3, 0x15, 0xea, 0xb1, | 177 | 0xdc, 0x09, 0xba, 0xe7, 0x81, 0xaf, 0x5e, 0xc9, 0x06, 0x69, 0x73, 0xf1, |
| 178 | 0x0e, 0xd8, 0x47, 0x3e, 0x67, 0x9f, 0x78, 0x77, 0xbe, 0xb5, 0x8f, 0xdf, | 178 | 0x59, 0x5a, 0x01, 0xcf, 0xa5, 0xad, 0x12, 0x0c, 0x50, 0x5f, 0x45, 0xd9, |
| 179 | 0x8b, 0xe8, 0x3e, 0xd8, 0x2e, 0xec, 0xa3, 0x99, 0x1f, 0x7b, 0x94, 0x9e, | 179 | 0xa7, 0xde, 0xa2, 0x5c, 0xca, 0xd5, 0xb4, 0x6d, 0x5e, 0x6a, 0xdb, 0xe6, |
| 180 | 0xeb, 0xcd, 0xf6, 0xb6, 0xf4, 0x9b, 0x68, 0xea, 0x17, 0xef, 0xce, 0x7f, | 180 | 0xeb, 0xa8, 0xb7, 0x20, 0x3b, 0xe0, 0x9b, 0xd4, 0x79, 0x1e, 0x03, 0x98, |
| 181 | 0x37, 0x42, 0x5c, 0xf6, 0xf2, 0x32, 0xf8, 0xac, 0xe6, 0xc4, 0x77, 0x6c, | 181 | 0x33, 0x6b, 0x15, 0x2a, 0xfe, 0x79, 0xd6, 0x5b, 0x4f, 0x54, 0x69, 0xaf, |
| 182 | 0x53, 0xb4, 0x0a, 0x4b, 0x41, 0x30, 0xed, 0xdb, 0x12, 0xe9, 0x0b, 0xeb, | 182 | 0xd1, 0x6e, 0x53, 0xf2, 0x49, 0x92, 0xcb, 0x71, 0x23, 0x83, 0x23, 0x8a, |
| 183 | 0xea, 0x79, 0x15, 0x31, 0xaf, 0x3c, 0xe6, 0x65, 0xf7, 0xb5, 0xd2, 0xf4, | 183 | 0x37, 0x88, 0x83, 0xe4, 0x72, 0xda, 0xd4, 0x75, 0x77, 0xd4, 0xf9, 0xb2, |
| 184 | 0xfb, 0x86, 0xa6, 0xde, 0x26, 0x9a, 0xe2, 0xef, 0x31, 0xaf, 0xf8, 0x2e, | 184 | 0xfa, 0x73, 0x80, 0x61, 0x48, 0x9d, 0xad, 0xed, 0x4d, 0x59, 0x39, 0x65, |
| 185 | 0xf3, 0x7a, 0xa9, 0x57, 0xf7, 0x11, 0x6f, 0xea, 0xa3, 0xaf, 0xa5, 0x0f, | 185 | 0x2b, 0xb6, 0x5a, 0x79, 0x37, 0x24, 0xc5, 0xf1, 0x3f, 0xc2, 0x9e, 0xd8, |
| 186 | 0xe8, 0xfd, 0x38, 0xdb, 0xf7, 0xed, 0xd2, 0xfe, 0x87, 0x1d, 0xba, 0x3d, | 186 | 0x56, 0x72, 0x40, 0x5a, 0xe0, 0xbb, 0xca, 0x07, 0xe6, 0xdc, 0x84, 0xb2, |
| 187 | 0xdb, 0xb4, 0x41, 0xb7, 0xf7, 0x1b, 0xbd, 0x78, 0xa2, 0x49, 0x97, 0x9d, | 187 | 0xb3, 0x72, 0x15, 0xf8, 0x38, 0x5a, 0xd5, 0x95, 0xfa, 0xa1, 0x87, 0xdc, |
| 188 | 0x80, 0x2e, 0x6b, 0x6e, 0xd3, 0x2c, 0xff, 0xa1, 0x8f, 0x44, 0xff, 0x28, | 188 | 0x25, 0xd2, 0x53, 0xbd, 0xb5, 0x0c, 0x9c, 0xce, 0x2c, 0x15, 0xac, 0xe4, |
| 189 | 0xc4, 0x8a, 0x1f, 0x50, 0x18, 0x64, 0x07, 0x63, 0xc7, 0x80, 0x47, 0xba, | 189 | 0x12, 0xe8, 0x63, 0x10, 0xb6, 0x87, 0x1b, 0x91, 0xdc, 0x65, 0xd2, 0x11, |
| 190 | 0x60, 0xff, 0xbb, 0xe9, 0x07, 0x19, 0x4c, 0x48, 0xbf, 0x88, 0x38, 0x50, | 190 | 0xfb, 0xb0, 0xbe, 0x4b, 0x66, 0xa2, 0xbb, 0x6d, 0x9b, 0x87, 0x0e, 0x68, |
| 191 | 0x3c, 0xa0, 0x28, 0xe8, 0x96, 0xc1, 0xc4, 0x31, 0x11, 0xe5, 0x07, 0x11, | 191 | 0x9d, 0x8f, 0xbe, 0x4b, 0x70, 0xe6, 0x7a, 0xb5, 0x9f, 0x92, 0x5c, 0xa5, |
| 192 | 0x5f, 0xd3, 0x27, 0xe2, 0x38, 0xf4, 0x89, 0xb8, 0xee, 0xbc, 0x2f, 0x6c, | 192 | 0x9c, 0x2d, 0x40, 0xd7, 0x53, 0xe7, 0xf4, 0xc0, 0x9e, 0x61, 0x3d, 0xe7, |
| 193 | 0xfb, 0x48, 0xfd, 0xd8, 0xf7, 0xc4, 0xc7, 0xdc, 0x33, 0xa1, 0xad, 0x69, | 193 | 0x44, 0xdb, 0xc5, 0xac, 0x05, 0xfd, 0x66, 0x97, 0x95, 0x8d, 0x3e, 0x89, |
| 194 | 0xd6, 0xa7, 0xbb, 0xd1, 0xd4, 0xdf, 0x42, 0x13, 0x74, 0x12, 0x7c, 0xb3, | 194 | 0xf2, 0xde, 0x20, 0x6d, 0x5b, 0xea, 0x90, 0xe4, 0xaa, 0x3f, 0x47, 0x27, |
| 195 | 0x05, 0xc8, 0x23, 0x30, 0x29, 0x74, 0xe0, 0xfd, 0x53, 0xe7, 0x56, 0x44, | 195 | 0x3e, 0xf6, 0x29, 0x9d, 0x34, 0xe0, 0x0d, 0xa8, 0x79, 0x61, 0x97, 0x58, |
| 196 | 0x4a, 0x0d, 0xda, 0xc7, 0x51, 0x81, 0x5f, 0x05, 0xba, 0xd8, 0xb7, 0xb2, | 196 | 0x73, 0x6a, 0xde, 0x58, 0xc7, 0xbc, 0x68, 0xbb, 0xf8, 0xb7, 0x01, 0x3d, |
| 197 | 0x91, 0xd0, 0x4d, 0xdd, 0x39, 0x3b, 0x3b, 0x08, 0x3f, 0xdc, 0x91, 0x39, | 197 | 0x0f, 0xf0, 0xac, 0xf6, 0xc4, 0x36, 0x8e, 0x29, 0x58, 0x79, 0xd8, 0x4e, |
| 198 | 0x43, 0xdb, 0x8c, 0xf2, 0xe1, 0xba, 0x50, 0x26, 0x94, 0x5c, 0xcd, 0x80, | 198 | 0x33, 0x69, 0x5b, 0x02, 0x83, 0x7e, 0x5f, 0xbd, 0xaf, 0x02, 0xf6, 0x95, |
| 199 | 0x3e, 0x5e, 0xcf, 0x18, 0xec, 0x7e, 0xac, 0xd1, 0x4a, 0xdb, 0xf7, 0x40, | 199 | 0xc3, 0xbe, 0xec, 0xc1, 0xdd, 0xfb, 0x2a, 0x05, 0xf4, 0xbe, 0x06, 0x3a, |
| 200 | 0x9b, 0x07, 0x1a, 0x92, 0xf2, 0x02, 0xb0, 0xfb, 0x37, 0xd5, 0xbe, 0x0c, | 200 | 0x60, 0x8a, 0xee, 0x5a, 0xbf, 0x73, 0x5f, 0x68, 0xbb, 0xb8, 0x7b, 0x8e, |
| 201 | 0x75, 0x17, 0x65, 0x29, 0x55, 0x2d, 0xcb, 0x66, 0xb0, 0xb2, 0xcc, 0x7d, | 201 | 0xc7, 0x06, 0xf4, 0x1c, 0xd1, 0x8e, 0x39, 0x06, 0x77, 0xcd, 0x01, 0x7a, |
| 202 | 0x4b, 0x1b, 0xde, 0x25, 0x65, 0xac, 0xd7, 0xc0, 0x52, 0x2a, 0x99, 0xb3, | 202 | 0x8e, 0x72, 0xfc, 0xe0, 0x1e, 0xe3, 0x5f, 0xef, 0xd5, 0xe3, 0x39, 0xa6, |
| 203 | 0xc5, 0x7a, 0xdf, 0x41, 0xca, 0xd3, 0xe3, 0x32, 0x70, 0x51, 0x2c, 0x67, | 203 | 0x0b, 0x7a, 0x58, 0x9d, 0x75, 0x58, 0xc9, 0xd4, 0xb6, 0xad, 0x76, 0x1a, |
| 204 | 0x09, 0x7b, 0xbd, 0x3b, 0xc4, 0x57, 0x9c, 0xdf, 0x6f, 0x63, 0x7e, 0xe8, | 204 | 0x3a, 0xaf, 0x73, 0xcc, 0x9d, 0x76, 0xa6, 0xad, 0xec, 0xcc, 0x3b, 0xe8, |
| 205 | 0x7b, 0x39, 0x9c, 0x5f, 0x97, 0x94, 0x56, 0x39, 0xbf, 0xed, 0xb9, 0xc5, | 205 | 0xcc, 0x7a, 0x14, 0x3e, 0x73, 0x6a, 0x19, 0xbe, 0x73, 0xe5, 0xed, 0x58, |
| 206 | 0x19, 0x11, 0xf9, 0x1c, 0xf4, 0x35, 0xe6, 0x08, 0x1a, 0xc7, 0x81, 0x73, | 206 | 0xf7, 0xcf, 0xe0, 0x87, 0x42, 0x16, 0x8d, 0xd2, 0x2f, 0x98, 0x14, 0xe5, |
| 207 | 0xef, 0x30, 0x73, 0xea, 0xc2, 0x9c, 0x60, 0xa3, 0x97, 0xd8, 0x1e, 0x74, | 207 | 0x97, 0x8e, 0xc2, 0xff, 0x75, 0xf6, 0x29, 0x5b, 0xb4, 0x38, 0x3a, 0xee, |
| 208 | 0x81, 0xe6, 0x12, 0xea, 0xcd, 0x2f, 0x71, 0xcd, 0x41, 0x2b, 0xd6, 0xbd, | 208 | 0xfb, 0x0b, 0xd6, 0x2c, 0xe4, 0x46, 0x71, 0x14, 0x36, 0x7d, 0x14, 0xf8, |
| 209 | 0xd4, 0xe0, 0xda, 0x73, 0x6e, 0xda, 0xae, 0x3b, 0x1e, 0xe7, 0xc7, 0x79, | 209 | 0x72, 0x47, 0x30, 0x8e, 0xf0, 0xbc, 0x3b, 0x44, 0x9f, 0xf5, 0x99, 0xea, |
| 210 | 0x0e, 0x63, 0x5e, 0xac, 0xc3, 0x76, 0xad, 0x32, 0x32, 0xfc, 0x1e, 0xeb, | 210 | 0x2c, 0xde, 0xf7, 0xa1, 0xfd, 0xe7, 0x06, 0xce, 0x3e, 0xf4, 0xf9, 0x57, |
| 211 | 0xf1, 0xdb, 0x2d, 0xeb, 0x21, 0x66, 0x3d, 0x62, 0xd2, 0xb6, 0xaa, 0xfc, | 211 | 0xa8, 0x63, 0x1b, 0xfb, 0x70, 0x8a, 0x1f, 0xe0, 0xfd, 0x41, 0xf4, 0x01, |
| 212 | 0x65, 0x45, 0x03, 0x7d, 0x08, 0x07, 0xf4, 0x2f, 0xae, 0xc8, 0x68, 0x54, | 212 | 0x4f, 0x81, 0x53, 0x6c, 0xf7, 0x30, 0x7e, 0x2f, 0xa3, 0xee, 0xdd, 0xa8, |
| 213 | 0x48, 0x7b, 0x82, 0xcf, 0x32, 0x6d, 0x32, 0xe8, 0x5f, 0x81, 0x5c, 0x95, | 213 | 0xbb, 0x8e, 0xba, 0x43, 0x78, 0xff, 0xe1, 0xae, 0x79, 0xdf, 0x81, 0xf7, |
| 214 | 0x20, 0x0b, 0xf4, 0x07, 0x5e, 0x5e, 0xd6, 0x6b, 0x51, 0x6a, 0x74, 0xc2, | 214 | 0xcf, 0xa1, 0x1d, 0xfb, 0x77, 0x5e, 0x44, 0xfb, 0x83, 0xf8, 0xfd, 0xc5, |
| 215 | 0x47, 0xe7, 0xf8, 0xe4, 0x37, 0xe7, 0xe6, 0xaa, 0x75, 0x68, 0x5e, 0x97, | 215 | 0xae, 0x3e, 0x8d, 0x5d, 0xef, 0xbe, 0xbc, 0x79, 0xc9, 0xf0, 0xc0, 0x8e, |
| 216 | 0x4f, 0xdf, 0xb2, 0x2e, 0xd4, 0xbb, 0xd4, 0x03, 0xc4, 0x3d, 0xd4, 0x05, | 216 | 0x6f, 0x07, 0xfe, 0xb1, 0xa8, 0x8f, 0x0a, 0x15, 0xca, 0x9b, 0xb0, 0x3c, |
| 217 | 0x61, 0x4c, 0xa0, 0xe6, 0xea, 0xfd, 0x14, 0xda, 0x9f, 0xeb, 0xdb, 0xf8, | 217 | 0xb2, 0xe2, 0xcb, 0x1c, 0x91, 0x79, 0xc8, 0xfa, 0x42, 0x45, 0xbc, 0x6e, |
| 218 | 0x52, 0xaf, 0x59, 0xc2, 0xc4, 0x05, 0xba, 0xc4, 0x5e, 0xbd, 0x83, 0x7a, | 218 | 0x19, 0x9e, 0xfc, 0x31, 0x64, 0xfa, 0x3c, 0xf0, 0x5a, 0x80, 0x7d, 0x71, |
| 219 | 0x1f, 0xf6, 0x27, 0x9c, 0xdf, 0xef, 0xe0, 0x3e, 0x71, 0xd3, 0x7a, 0xd8, | 219 | 0x74, 0x25, 0x8c, 0xe7, 0x21, 0xc8, 0x3b, 0xc9, 0x74, 0x09, 0x79, 0x3e, |
| 220 | 0x98, 0x93, 0xa3, 0xe6, 0xa8, 0xd6, 0x62, 0x5b, 0xe6, 0xe6, 0x1a, 0x7a, | 220 | 0x02, 0xd9, 0xd2, 0x0b, 0x9e, 0x57, 0x3e, 0x88, 0x3c, 0x0e, 0xb9, 0x34, |
| 221 | 0x5e, 0xce, 0xd2, 0x1e, 0xb3, 0x1e, 0x31, 0x3c, 0xe3, 0xbc, 0x42, 0x9b, | 221 | 0x8b, 0xbe, 0xb3, 0xe8, 0xf3, 0xd1, 0xe6, 0xff, 0x31, 0xb4, 0xec, 0xc3, |
| 222 | 0xc3, 0x79, 0x91, 0x5e, 0xd7, 0xc8, 0x1c, 0xe7, 0xc3, 0xfd, 0xd7, 0x2c, | 222 | 0xf0, 0xec, 0x2e, 0x18, 0xc2, 0xe2, 0xae, 0x92, 0x1f, 0x5f, 0x98, 0x9e, |
| 223 | 0x6b, 0x2f, 0x05, 0xd5, 0xe5, 0xa8, 0x9a, 0x7b, 0xde, 0xef, 0x26, 0x46, | 223 | 0x5b, 0x89, 0xc8, 0xf0, 0xaa, 0x9d, 0xa4, 0xb3, 0x3f, 0xb2, 0xca, 0x98, |
| 224 | 0xa3, 0x8e, 0x34, 0xfa, 0x89, 0xcf, 0x69, 0x07, 0xf1, 0x2e, 0x43, 0x19, | 224 | 0x84, 0x8c, 0x04, 0x85, 0xb2, 0x5f, 0xc6, 0x43, 0xb0, 0xd1, 0x02, 0xde, |
| 225 | 0xc2, 0x7d, 0x9d, 0xf7, 0xcd, 0x36, 0xed, 0x79, 0x47, 0xeb, 0x01, 0xc6, | 225 | 0x30, 0x74, 0x94, 0x7a, 0x97, 0x2c, 0x60, 0xcb, 0x36, 0x77, 0x62, 0x13, |
| 226 | 0x9f, 0xde, 0xdb, 0xd6, 0x45, 0xb3, 0x62, 0xad, 0x57, 0xe8, 0x33, 0x07, | 226 | 0x47, 0xda, 0xb1, 0x89, 0x21, 0xe8, 0x88, 0xd7, 0x83, 0x5a, 0x5e, 0x45, |
| 227 | 0xc0, 0x5d, 0x77, 0x40, 0xaf, 0x1c, 0x92, 0x92, 0x0b, 0x7b, 0x3d, 0x7c, | 227 | 0x40, 0x27, 0x6f, 0x01, 0xfe, 0x29, 0x5b, 0x42, 0xe0, 0x1f, 0x07, 0xbc, |
| 228 | 0x3b, 0xe6, 0x3c, 0x2e, 0x2a, 0xde, 0x30, 0xbc, 0x17, 0xd7, 0x7b, 0x94, | 228 | 0xf3, 0x26, 0xda, 0x6f, 0xd4, 0x5b, 0xa0, 0x77, 0xc8, 0x38, 0x9b, 0xf5, |
| 229 | 0xef, 0x52, 0x1a, 0xfe, 0x90, 0xe4, 0xa6, 0x69, 0xd3, 0x7e, 0x5f, 0x66, | 229 | 0x2c, 0xd1, 0x96, 0x21, 0x0f, 0xe0, 0xbd, 0xd1, 0xc9, 0x6b, 0xe7, 0xb4, |
| 230 | 0x60, 0x5b, 0x4b, 0xc3, 0x77, 0x82, 0x3e, 0xde, 0x43, 0x27, 0x7a, 0x43, | 230 | 0x8d, 0x75, 0x97, 0x6f, 0xf3, 0xa0, 0xa3, 0x69, 0x91, 0xf6, 0xfa, 0xe1, |
| 231 | 0x8c, 0x51, 0xe0, 0xef, 0x71, 0x13, 0x9b, 0x39, 0x80, 0xfb, 0x3d, 0xa8, | 231 | 0xd0, 0x9d, 0x7b, 0xfc, 0xa3, 0x5d, 0x7b, 0x0c, 0x4a, 0x72, 0x89, 0xf8, |
| 232 | 0xf3, 0x49, 0x53, 0xa7, 0x1b, 0x75, 0x06, 0x5b, 0xea, 0x70, 0xbc, 0xfb, | 232 | 0x8d, 0xa8, 0xbd, 0xfa, 0xf8, 0x2d, 0x2a, 0x5b, 0x7e, 0x1c, 0x3e, 0x89, |
| 233 | 0x50, 0x07, 0xf6, 0x14, 0x56, 0xd2, 0xf6, 0x0e, 0xe2, 0x37, 0x81, 0x67, | 233 | 0x40, 0x9a, 0x2b, 0x5b, 0x14, 0x3a, 0xb1, 0x0f, 0xb2, 0x9e, 0x72, 0x9e, |
| 234 | 0xf7, 0xe2, 0xd9, 0x3d, 0x78, 0x76, 0x0f, 0xee, 0x7f, 0xd7, 0xc4, 0x3c, | 234 | 0xf8, 0x0e, 0x03, 0x87, 0x11, 0xfc, 0x1c, 0xfc, 0x76, 0x70, 0x7a, 0xb2, |
| 235 | 0xc2, 0x36, 0xdd, 0xb8, 0xff, 0x12, 0xde, 0x43, 0xc7, 0xb9, 0xdf, 0xc6, | 235 | 0xbd, 0x3f, 0x7f, 0x0f, 0xeb, 0x90, 0x55, 0x2c, 0x09, 0x3f, 0xf0, 0x71, |
| 236 | 0xfb, 0xfb, 0xf0, 0x1b, 0x6b, 0xa9, 0xe3, 0xb6, 0xdc, 0x9f, 0x76, 0x74, | 236 | 0x91, 0xcf, 0x90, 0xaf, 0x7d, 0x94, 0xb7, 0x3e, 0x4c, 0x8f, 0xed, 0x82, |
| 237 | 0x8c, 0x84, 0xcf, 0x82, 0xc8, 0xce, 0xf5, 0x7f, 0x35, 0xcf, 0xbd, 0xa6, | 237 | 0x89, 0xb8, 0x21, 0x4c, 0xf5, 0x16, 0x6c, 0x8b, 0x28, 0xa3, 0x60, 0xa7, |
| 238 | 0xf7, 0x1f, 0x37, 0xd7, 0xad, 0xb2, 0x94, 0x86, 0x2c, 0xf1, 0xfd, 0x57, | 238 | 0x9b, 0xd4, 0x29, 0x5c, 0x73, 0x92, 0xf6, 0xb6, 0x81, 0x93, 0x7a, 0xc5, |
| 239 | 0xf6, 0xe9, 0xb5, 0xb8, 0x43, 0xc7, 0x1f, 0x6e, 0xc2, 0x1b, 0x4a, 0xfc, | 239 | 0x93, 0x73, 0x95, 0xb7, 0x1b, 0xb8, 0x78, 0xbe, 0xb0, 0xf9, 0x96, 0xb8, |
| 240 | 0x71, 0xbd, 0x09, 0x9c, 0x41, 0xec, 0xd1, 0x8c, 0x3b, 0x48, 0x8b, 0xab, | 240 | 0x7e, 0x54, 0xe9, 0x1e, 0x0d, 0xd3, 0x6e, 0xfc, 0xd0, 0x3f, 0x27, 0x7e, |
| 241 | 0xe4, 0xf5, 0xe5, 0xe5, 0xd7, 0xba, 0xf5, 0x18, 0x62, 0xd5, 0x21, 0x73, | 241 | 0xa8, 0x0f, 0x88, 0x4b, 0xda, 0xd4, 0xc4, 0xe7, 0xef, 0x00, 0x9f, 0xec, |
| 242 | 0x13, 0x2a, 0x16, 0xf1, 0x33, 0xf3, 0xcc, 0xdb, 0xb7, 0xf3, 0x6e, 0xaf, | 242 | 0xeb, 0x1a, 0xdd, 0xf2, 0x2e, 0x03, 0xd7, 0xdd, 0xfa, 0xf8, 0xf4, 0x1d, |
| 243 | 0x4c, 0x54, 0xff, 0x68, 0xdf, 0x0e, 0x6d, 0x93, 0x4d, 0xd7, 0x3b, 0x98, | 243 | 0xfa, 0xd8, 0xc7, 0xf1, 0x5e, 0x67, 0xf1, 0xfb, 0x7d, 0xbe, 0xcc, 0x1d, |
| 244 | 0x02, 0xfe, 0x84, 0xbd, 0x83, 0x77, 0x72, 0xf6, 0x5c, 0xa3, 0x68, 0xeb, | 244 | 0x5e, 0xdd, 0xab, 0x7d, 0xd9, 0xb4, 0xb3, 0xad, 0xb3, 0xfe, 0xdb, 0x7d, |
| 245 | 0x71, 0x59, 0x07, 0xef, 0x1a, 0x9b, 0x3d, 0x8e, 0x92, 0xfd, 0x9c, 0x4d, | 245 | 0xfe, 0x19, 0x0e, 0x2f, 0xef, 0x6e, 0xeb, 0x3b, 0xb0, 0x33, 0x66, 0xf7, |
| 246 | 0x5f, 0xa3, 0xbc, 0xc6, 0xeb, 0xdb, 0x51, 0x36, 0xb7, 0xed, 0x87, 0x1e, | 246 | 0x7c, 0x3f, 0xee, 0xdb, 0xdb, 0xaf, 0xdd, 0xf1, 0xeb, 0xe0, 0xab, 0xd8, |
| 247 | 0xcf, 0xd9, 0x9a, 0xee, 0xd6, 0xf6, 0xe1, 0xbe, 0xf1, 0x65, 0xa1, 0x0a, | 247 | 0x3b, 0x7b, 0xc9, 0xda, 0xf3, 0xcd, 0x82, 0xad, 0xf7, 0xc2, 0x3e, 0x68, |
| 248 | 0x99, 0xf3, 0x52, 0xc3, 0x65, 0xac, 0xdd, 0xac, 0x9f, 0x9a, 0xa6, 0x4c, | 248 | 0x6b, 0x6e, 0xf5, 0x07, 0x95, 0x6e, 0xcc, 0xda, 0xf4, 0x63, 0x4a, 0x6b, |
| 249 | 0xc2, 0x9f, 0xfd, 0x94, 0xc8, 0xa4, 0xcc, 0x57, 0x1f, 0x06, 0xfe, 0x0e, | 249 | 0x7c, 0xbe, 0x07, 0x65, 0xe7, 0xd8, 0x21, 0xf0, 0x40, 0x16, 0x7d, 0x39, |
| 250 | 0xe4, 0x21, 0xe0, 0x8a, 0x7f, 0x0f, 0x5c, 0x52, 0x83, 0xac, 0xd7, 0x1a, | 250 | 0xc7, 0xee, 0xf1, 0xbe, 0x8d, 0x94, 0x96, 0x85, 0x5a, 0x08, 0xed, 0x89, |
| 251 | 0x1e, 0x7e, 0xfd, 0xf2, 0x57, 0x95, 0x84, 0x3c, 0x07, 0x7f, 0x02, 0xb2, | 251 | 0x6c, 0x49, 0x1e, 0x86, 0xaf, 0x98, 0x98, 0xa2, 0xdf, 0x00, 0x7f, 0x79, |
| 252 | 0x06, 0x3d, 0x9c, 0x76, 0x1f, 0x12, 0xe9, 0xb1, 0xe5, 0xf2, 0xbd, 0xb6, | 252 | 0x46, 0xe4, 0x98, 0x94, 0x6b, 0x1f, 0x94, 0x85, 0x95, 0x96, 0xbc, 0x1f, |
| 253 | 0x8c, 0x24, 0x07, 0xac, 0x74, 0x02, 0x3f, 0xb7, 0x0d, 0xbf, 0x22, 0x7c, | 253 | 0x7a, 0xf0, 0xf7, 0xa0, 0x47, 0xe5, 0x12, 0x84, 0xd7, 0x25, 0x1c, 0xc6, |
| 254 | 0xb8, 0xb5, 0x06, 0x63, 0x01, 0x71, 0xf9, 0xeb, 0xf5, 0x24, 0x7e, 0x7d, | 254 | 0xa5, 0xa8, 0xd8, 0x4f, 0xc1, 0x96, 0xbf, 0x10, 0x93, 0xe0, 0x05, 0xd2, |
| 255 | 0xf2, 0x37, 0xeb, 0x1c, 0x7f, 0xc0, 0x94, 0x6a, 0x1f, 0xc3, 0xe7, 0x28, | 255 | 0x5e, 0xca, 0x79, 0xbf, 0x48, 0xbf, 0x2d, 0x57, 0xe1, 0x08, 0x25, 0x26, |
| 256 | 0xcb, 0x62, 0x26, 0x21, 0x0b, 0x95, 0xe0, 0xa4, 0xf6, 0x99, 0x3d, 0xf8, | 256 | 0xb3, 0x92, 0x82, 0xfd, 0x37, 0xe6, 0x34, 0x50, 0x96, 0x25, 0x35, 0xfa, |
| 257 | 0xc8, 0xdc, 0xb3, 0x2f, 0x60, 0xcf, 0xe2, 0xb9, 0xc2, 0x9e, 0xa1, 0xdd, | 257 | 0xb4, 0xa0, 0xef, 0x25, 0xf4, 0xc5, 0xb8, 0x9e, 0x8d, 0x38, 0x7e, 0x83, |
| 258 | 0x7b, 0x01, 0x76, 0x2f, 0x5c, 0x23, 0xce, 0xb3, 0x75, 0x7d, 0xd8, 0x2f, | 258 | 0xd2, 0xbb, 0x41, 0x18, 0x92, 0xa6, 0x24, 0x2c, 0x3f, 0x6c, 0xd1, 0xd7, |
| 259 | 0xd7, 0x88, 0x7a, 0x9d, 0xba, 0x3c, 0x06, 0xfc, 0x10, 0xea, 0x76, 0xea, | 259 | 0x7d, 0x66, 0x33, 0x0c, 0xdd, 0x14, 0x97, 0xe7, 0x20, 0x67, 0x9f, 0x55, |
| 260 | 0x08, 0x6f, 0xdb, 0x0f, 0x7d, 0xe4, 0x60, 0x17, 0xb0, 0x86, 0xc4, 0xe2, | 260 | 0xf1, 0x17, 0xb7, 0xed, 0x8f, 0x3e, 0x7a, 0x18, 0x74, 0xb7, 0x2c, 0xe1, |
| 261 | 0xd9, 0x9f, 0xca, 0xca, 0x59, 0xee, 0x1b, 0xda, 0xe3, 0xbb, 0x21, 0x6f, | 261 | 0xa8, 0xf7, 0x73, 0x59, 0x59, 0x6e, 0xc1, 0xef, 0xa1, 0xac, 0x7f, 0x00, |
| 262 | 0xa9, 0xaf, 0x96, 0x89, 0x99, 0xbd, 0x0c, 0xf8, 0x51, 0x96, 0xe9, 0x83, | 262 | 0xf2, 0x2a, 0xf1, 0xa5, 0x12, 0x6d, 0x49, 0x37, 0x03, 0xd8, 0x4b, 0x32, |
| 263 | 0xab, 0xbd, 0x5a, 0x4e, 0x26, 0xc5, 0x39, 0xfb, 0x85, 0xa8, 0x74, 0x9f, | 263 | 0x73, 0xf8, 0x5d, 0x03, 0x9a, 0x3e, 0x8e, 0x49, 0x70, 0xb9, 0x00, 0xfb, |
| 264 | 0x94, 0x45, 0x1f, 0x7e, 0xa9, 0x5d, 0x0e, 0x22, 0x9e, 0x97, 0x28, 0x28, | 264 | 0xf9, 0x8c, 0x2c, 0xa6, 0xe1, 0x9f, 0xda, 0xa5, 0x56, 0xc0, 0x75, 0x63, |
| 265 | 0xbf, 0x69, 0x05, 0x74, 0xc6, 0x64, 0xe2, 0x2c, 0xeb, 0x9c, 0x84, 0x8c, | 265 | 0xd0, 0xdb, 0xd0, 0xa7, 0x2b, 0xf4, 0x87, 0xe5, 0xc8, 0x32, 0xfb, 0x9c, |
| 266 | 0xb5, 0x81, 0xe6, 0x76, 0x39, 0x15, 0x4f, 0x95, 0x0b, 0xf0, 0xf7, 0x6d, | 266 | 0x01, 0x6d, 0x75, 0x01, 0x77, 0xdd, 0x72, 0x36, 0x9a, 0x28, 0xe5, 0xc1, |
| 267 | 0xaf, 0x47, 0x06, 0xea, 0x2c, 0x89, 0x41, 0xfe, 0x37, 0xe4, 0x87, 0xd7, | 267 | 0x4f, 0xb6, 0xdb, 0x0f, 0x5e, 0x66, 0x49, 0xfd, 0xf6, 0x34, 0xe8, 0x87, |
| 268 | 0xf0, 0x03, 0x57, 0xf9, 0x7c, 0x00, 0x25, 0x9f, 0x7b, 0xd0, 0x2f, 0xe4, | 268 | 0xcf, 0x38, 0xce, 0x55, 0xd6, 0x27, 0x51, 0xb2, 0xde, 0x15, 0x7b, 0x29, |
| 269 | 0x07, 0x70, 0xc3, 0xc5, 0xb2, 0x9c, 0xca, 0x4c, 0x4a, 0xbd, 0x2a, 0xd6, | 269 | 0x8c, 0xb9, 0xa0, 0x93, 0x2e, 0x97, 0xe4, 0x6c, 0xe6, 0x98, 0x34, 0x6a, |
| 270 | 0x42, 0x06, 0x7b, 0xa0, 0x96, 0x95, 0x3a, 0x78, 0x51, 0x6a, 0x1c, 0x87, | 270 | 0xf0, 0xc9, 0x33, 0xb0, 0xa3, 0xea, 0x9e, 0x34, 0x2a, 0xb4, 0x9f, 0x4e, |
| 271 | 0xdf, 0xf9, 0x26, 0xca, 0x39, 0x94, 0xd7, 0x51, 0x3e, 0x8e, 0xf2, 0x2d, | 271 | 0x81, 0x1f, 0x5e, 0x41, 0x39, 0x8f, 0xf2, 0x16, 0xca, 0x8f, 0xa3, 0x7c, |
| 272 | 0x94, 0xa4, 0xfd, 0xb8, 0xd4, 0x6b, 0x7b, 0xda, 0xa4, 0x93, 0x7d, 0x6c, | 272 | 0x0d, 0x25, 0x61, 0x3f, 0x25, 0x8d, 0xfa, 0x55, 0xcc, 0xcd, 0x39, 0xa6, |
| 273 | 0x18, 0x9a, 0xe1, 0x3b, 0x1e, 0x3c, 0x0e, 0x2c, 0x1a, 0x3e, 0x3f, 0x2e, | 273 | 0x0c, 0xcc, 0xf0, 0x21, 0x0f, 0x9f, 0x82, 0x9d, 0xe3, 0xd7, 0x9f, 0x12, |
| 274 | 0x52, 0xff, 0x0c, 0x7e, 0x0f, 0xaa, 0x7b, 0xfa, 0x96, 0x0b, 0x99, 0x71, | 274 | 0x69, 0x7c, 0x0c, 0xbf, 0x96, 0x7a, 0xa7, 0x8f, 0xb9, 0x90, 0x99, 0x84, |
| 275 | 0xe0, 0x7a, 0xb1, 0x4e, 0x65, 0x1e, 0x37, 0xfd, 0x7c, 0x06, 0xe3, 0x5d, | 275 | 0xbd, 0x2b, 0xd6, 0xd9, 0xcc, 0xc7, 0xcd, 0x3c, 0x1f, 0xc3, 0x7a, 0xd7, |
| 276 | 0xc5, 0xd8, 0x31, 0xc8, 0x48, 0x20, 0x8f, 0xf8, 0x27, 0xe5, 0x73, 0xfe, | 276 | 0xb1, 0x76, 0x18, 0xe7, 0xd9, 0x92, 0x47, 0xd3, 0x67, 0xe4, 0x93, 0xe9, |
| 277 | 0x7e, 0x19, 0xeb, 0x8d, 0x95, 0x63, 0x59, 0xce, 0x9f, 0x7a, 0x6a, 0xb7, | 277 | 0x7b, 0x65, 0x62, 0x20, 0x5c, 0x0a, 0x7b, 0xdc, 0x3f, 0xed, 0xda, 0xbd, |
| 278 | 0xf9, 0x87, 0xf3, 0xe6, 0x9c, 0xa1, 0x5b, 0x97, 0xf6, 0x6a, 0xdc, 0x6d, | 278 | 0xf6, 0xef, 0xef, 0x9b, 0x7b, 0x8e, 0x60, 0x2f, 0xfb, 0xb5, 0xed, 0x66, |
| 279 | 0x7f, 0x39, 0xaa, 0x69, 0xb1, 0x64, 0x60, 0x88, 0xfd, 0x65, 0x25, 0x72, | 279 | 0xff, 0x13, 0xe3, 0x73, 0x58, 0x92, 0x1c, 0xe1, 0x7c, 0x9e, 0x04, 0x96, |
| 280 | 0x76, 0xc8, 0xcd, 0xd8, 0x23, 0xf0, 0x52, 0xd2, 0xf8, 0x9d, 0x84, 0xfc, | 280 | 0x47, 0x9c, 0x8c, 0x3d, 0x06, 0xeb, 0x3d, 0x85, 0xdf, 0x19, 0xd0, 0x8a, |
| 281 | 0x79, 0xa7, 0x07, 0xec, 0xdb, 0x40, 0x13, 0xde, 0xd5, 0x39, 0x0e, 0xec, | 281 | 0x7b, 0x3e, 0x69, 0xff, 0x47, 0xc0, 0x84, 0xb6, 0x06, 0xd7, 0x11, 0x2b, |
| 282 | 0xe9, 0x3d, 0xaf, 0x62, 0x6e, 0x65, 0x69, 0xbf, 0x27, 0x2b, 0x37, 0x1a, | 282 | 0x78, 0xe8, 0x26, 0xf6, 0x56, 0x92, 0xee, 0x43, 0x9e, 0xdc, 0x6e, 0xf2, |
| 283 | 0xbc, 0x86, 0x3d, 0xba, 0x30, 0x29, 0xff, 0x5c, 0xbd, 0x2a, 0x4f, 0x54, | 283 | 0x19, 0x92, 0xf2, 0xd2, 0x31, 0xf9, 0x71, 0xed, 0xba, 0x9c, 0xab, 0x1d, |
| 284 | 0x27, 0xe5, 0x0d, 0x94, 0x8b, 0xd5, 0x32, 0xf8, 0xc8, 0x58, 0x3c, 0xfb, | 284 | 0x93, 0x97, 0x51, 0x2e, 0xd6, 0x4a, 0xc0, 0x23, 0x7d, 0x46, 0xce, 0xd1, |
| 285 | 0x08, 0xb0, 0x2e, 0x83, 0xf0, 0x8d, 0x3e, 0x98, 0x98, 0xc3, 0xfa, 0xcd, | 285 | 0xc2, 0xb9, 0x50, 0x2e, 0xdf, 0x1f, 0x9b, 0xc7, 0xf9, 0xcd, 0x3a, 0x2d, |
| 286 | 0xb8, 0x81, 0x9c, 0xf3, 0xcb, 0x72, 0x6e, 0x1c, 0x6d, 0x6a, 0x1d, 0x12, | 286 | 0xd9, 0x48, 0x97, 0x64, 0x63, 0x12, 0x63, 0xea, 0x3d, 0x12, 0xfa, 0x2a, |
| 287 | 0x7d, 0x96, 0xf3, 0xed, 0x96, 0x02, 0x2c, 0x7a, 0x31, 0x43, 0x9d, 0xd9, | 287 | 0xf7, 0xdb, 0x27, 0xf9, 0x5a, 0x49, 0x0a, 0x19, 0xfa, 0x34, 0xbd, 0x92, |
| 288 | 0x29, 0x85, 0x5a, 0xab, 0xdc, 0x51, 0xde, 0xde, 0xb6, 0xea, 0xdb, 0x3a, | 288 | 0x87, 0x4d, 0x0e, 0x3b, 0xe8, 0x8c, 0x8e, 0xb3, 0xb9, 0xb1, 0x22, 0x6c, |
| 289 | 0x60, 0xd3, 0xfa, 0x66, 0x83, 0x36, 0x78, 0x37, 0x7b, 0xaa, 0xe5, 0xae, | 289 | 0xf8, 0x85, 0xe6, 0xeb, 0x56, 0xa3, 0x6d, 0xff, 0x6f, 0x59, 0xcf, 0xc2, |
| 290 | 0x5e, 0xa3, 0x4d, 0xdd, 0x91, 0xbd, 0x3a, 0xfc, 0xb9, 0x7a, 0xf5, 0xba, | 290 | 0x76, 0xfd, 0x0e, 0xe4, 0xc6, 0x73, 0xb0, 0x09, 0x9f, 0xbd, 0x83, 0xc7, |
| 291 | 0x91, 0x3f, 0x25, 0xb7, 0x58, 0x17, 0x62, 0xf1, 0x9f, 0x08, 0xb0, 0x1f, | 291 | 0x48, 0x23, 0xd7, 0xac, 0x46, 0x7d, 0x94, 0x7c, 0x66, 0xf8, 0x01, 0x63, |
| 292 | 0x78, 0x14, 0xc6, 0x09, 0xb5, 0x7f, 0x54, 0x03, 0xad, 0x85, 0x38, 0x71, | 292 | 0xe1, 0xe7, 0x34, 0x6a, 0xb7, 0x0c, 0xfd, 0x29, 0x5b, 0x00, 0xe7, 0x42, |
| 293 | 0x06, 0xac, 0x5b, 0xed, 0x0b, 0x8a, 0x57, 0xde, 0xd9, 0x7e, 0xa9, 0x2e, | 293 | 0xbd, 0xf2, 0x77, 0xf0, 0xaf, 0x28, 0x77, 0x7c, 0xbd, 0xaf, 0xfd, 0x86, |
| 294 | 0x93, 0xbf, 0x29, 0xd7, 0xb6, 0x95, 0x4f, 0x02, 0xbe, 0x7a, 0x58, 0x9f, | 294 | 0x3a, 0x60, 0xcd, 0x47, 0x13, 0x80, 0x4a, 0xa4, 0x5e, 0x2f, 0x28, 0x5c, |
| 295 | 0xf0, 0x7d, 0x0a, 0x7e, 0xd2, 0x49, 0x71, 0xc7, 0x3a, 0x31, 0x27, 0x5e, | 295 | 0xb9, 0xcb, 0x43, 0x52, 0xab, 0x12, 0xbf, 0x09, 0xc7, 0xb6, 0x95, 0x5d, |
| 296 | 0x8b, 0x4c, 0x5f, 0x6c, 0xc5, 0x91, 0xa1, 0x9d, 0x68, 0x83, 0x3f, 0x1e, | 296 | 0x0b, 0xbc, 0xba, 0x38, 0x1f, 0xbf, 0x3d, 0x01, 0xff, 0xe1, 0x8c, 0x38, |
| 297 | 0xc5, 0x5a, 0x76, 0xc1, 0x9f, 0x86, 0x9f, 0x0a, 0x39, 0xfa, 0x33, 0x60, | 297 | 0x13, 0xbd, 0xd8, 0x13, 0x9f, 0x45, 0x66, 0x2e, 0xff, 0x3a, 0x19, 0xd0, |
| 298 | 0xaf, 0xd3, 0xca, 0xb7, 0xe6, 0x9e, 0xea, 0x9e, 0x1a, 0x58, 0x67, 0xb9, | 298 | 0x05, 0xbf, 0x3e, 0x84, 0xb3, 0x8c, 0xc8, 0x59, 0xd8, 0xff, 0xe7, 0x40, |
| 299 | 0x77, 0x2a, 0x5d, 0x63, 0x19, 0x9f, 0xd2, 0xbe, 0x64, 0x62, 0x4a, 0xc7, | 299 | 0x47, 0x9f, 0xaf, 0x0c, 0xc9, 0xf9, 0x4a, 0x1c, 0xfe, 0x16, 0xed, 0x94, |
| 300 | 0xed, 0x93, 0x53, 0x07, 0x54, 0xe9, 0x4d, 0x0d, 0xab, 0x72, 0x78, 0x6a, | 300 | 0xe5, 0xe9, 0xe4, 0x3a, 0xcb, 0x27, 0xa6, 0x53, 0x75, 0x96, 0x5f, 0x32, |
| 301 | 0x27, 0x66, 0x42, 0x9e, 0x8a, 0x95, 0xcf, 0x64, 0xa4, 0x58, 0x21, 0x8d, | 301 | 0xfe, 0xe2, 0x97, 0x8d, 0x1f, 0xb9, 0x3e, 0xad, 0x7d, 0xb8, 0xaf, 0x4d, |
| 302 | 0xe2, 0x1c, 0x83, 0x3c, 0xcd, 0x01, 0xcb, 0xe4, 0x2b, 0xbe, 0x9c, 0xda, | 302 | 0x8f, 0xaa, 0xb2, 0x39, 0xbd, 0x13, 0x3b, 0x09, 0x1b, 0xbd, 0x9d, 0xa1, |
| 303 | 0xc8, 0x82, 0x66, 0xe8, 0x99, 0xac, 0x8f, 0x52, 0xcc, 0x5f, 0xd8, 0xb6, | 303 | 0x7e, 0x06, 0x8c, 0x12, 0x3c, 0x09, 0x7a, 0x9a, 0x87, 0xdc, 0xce, 0xc1, |
| 304 | 0x8d, 0x31, 0x32, 0xae, 0x99, 0xf1, 0x33, 0x7d, 0xfa, 0x99, 0xcd, 0x7f, | 304 | 0xf7, 0x38, 0x0b, 0x1f, 0xa4, 0xd8, 0x84, 0x4c, 0xf0, 0xd2, 0x28, 0xc5, |
| 305 | 0xec, 0x0f, 0xb2, 0x49, 0xfb, 0xf9, 0x0b, 0xf8, 0xc6, 0xe2, 0x94, 0x32, | 305 | 0xfc, 0xf9, 0x63, 0xbb, 0x18, 0xdf, 0xe4, 0x99, 0x19, 0xff, 0x2b, 0x4d, |
| 306 | 0x6c, 0xeb, 0xc3, 0x07, 0x17, 0xd9, 0x5a, 0x91, 0x58, 0x2c, 0xfb, 0x1d, | 306 | 0xff, 0xab, 0xf3, 0x8f, 0xf3, 0x81, 0x36, 0xa9, 0x2b, 0x7f, 0x09, 0x9f, |
| 307 | 0x89, 0x3d, 0x1d, 0x04, 0x3f, 0xf0, 0x53, 0x47, 0xca, 0x02, 0x5e, 0x59, | 307 | 0x51, 0x82, 0xc5, 0x0c, 0xc7, 0xa6, 0xe9, 0xaf, 0xca, 0x36, 0xec, 0x83, |
| 308 | 0x78, 0xbe, 0xce, 0x77, 0xd4, 0x4d, 0x23, 0xee, 0x0d, 0xc8, 0x5c, 0xee, | 308 | 0xb0, 0xf7, 0x3d, 0x09, 0x3f, 0xd5, 0x6a, 0xbd, 0x0a, 0x59, 0x53, 0x82, |
| 309 | 0xa8, 0xc8, 0x2b, 0x78, 0x56, 0x5f, 0xe1, 0x1a, 0x7c, 0x17, 0x6b, 0x60, | 309 | 0xcf, 0x68, 0x5b, 0xa8, 0x5f, 0x67, 0x1b, 0xe5, 0xc8, 0x98, 0x73, 0x1b, |
| 310 | 0xd6, 0x44, 0x3d, 0x63, 0x3d, 0xf8, 0x58, 0x71, 0xce, 0x63, 0xc4, 0x6d, | 310 | 0x34, 0x97, 0x3d, 0x2e, 0xf2, 0x5d, 0xd4, 0x35, 0x56, 0x78, 0x06, 0xdf, |
| 311 | 0x47, 0xfb, 0xda, 0x3a, 0xdb, 0xa4, 0xc6, 0x79, 0xe4, 0xf5, 0xca, 0xba, | 311 | 0xc7, 0x19, 0x98, 0x33, 0x51, 0x75, 0xec, 0x07, 0xfb, 0x3d, 0xca, 0x7d, |
| 312 | 0x9e, 0xdf, 0xe1, 0xcc, 0xb0, 0x5c, 0xae, 0xa8, 0x3e, 0x20, 0xeb, 0xbf, | 312 | 0x8c, 0x39, 0xdd, 0x18, 0x5f, 0x5f, 0xe7, 0x98, 0xc4, 0x24, 0xaf, 0x74, |
| 313 | 0x44, 0x9b, 0x4d, 0xc8, 0x2d, 0x63, 0x53, 0x59, 0x99, 0x07, 0x4e, 0x9b, | 313 | 0xbe, 0xbb, 0xae, 0xf7, 0x77, 0x34, 0x33, 0x2a, 0x57, 0x2b, 0x6a, 0x0e, |
| 314 | 0xaf, 0xa4, 0x21, 0x3b, 0x8e, 0xcc, 0x24, 0x48, 0xb6, 0x27, 0x5b, 0x95, | 314 | 0xd0, 0xfa, 0xaf, 0x30, 0x66, 0x0b, 0x74, 0xcb, 0x18, 0x95, 0x27, 0x65, |
| 315 | 0x37, 0xdb, 0x88, 0x85, 0xf3, 0x1e, 0xaf, 0xc7, 0x51, 0x67, 0x5a, 0x88, | 315 | 0xe8, 0xa4, 0x72, 0x25, 0x05, 0xda, 0x09, 0xca, 0x6c, 0x8c, 0x60, 0xbb, |
| 316 | 0xb7, 0xf2, 0x19, 0xce, 0xa9, 0x99, 0x17, 0xfa, 0xaf, 0x84, 0xb5, 0x30, | 316 | 0xb2, 0x5d, 0xf9, 0x72, 0x97, 0x8e, 0x8f, 0xf0, 0x19, 0x3a, 0xac, 0x39, |
| 317 | 0x73, 0x54, 0x7f, 0x7a, 0x1c, 0xb4, 0x37, 0xe3, 0x14, 0x01, 0x53, 0xe0, | 317 | 0x23, 0xbc, 0x1b, 0x81, 0x7d, 0x83, 0x3d, 0x75, 0xe2, 0x42, 0xff, 0x15, |
| 318 | 0x6b, 0x4a, 0xfa, 0x82, 0xe3, 0xe4, 0x2b, 0x8e, 0x0c, 0x5c, 0xc0, 0xb6, | 318 | 0x71, 0x16, 0x66, 0x8f, 0xea, 0x4f, 0xaf, 0x83, 0xf1, 0x66, 0x9d, 0x02, |
| 319 | 0xca, 0x1a, 0x5e, 0x34, 0x42, 0x59, 0x0b, 0x31, 0x10, 0x65, 0x8b, 0x3c, | 319 | 0x14, 0x77, 0x1e, 0xeb, 0xa7, 0x2e, 0x05, 0x83, 0x8c, 0xa9, 0x27, 0x2f, |
| 320 | 0x48, 0x95, 0x37, 0xc1, 0xec, 0xde, 0xec, 0x35, 0x79, 0x74, 0x55, 0xcf, | 320 | 0x81, 0xad, 0x3c, 0x83, 0x8b, 0xa6, 0x4f, 0x6b, 0xbe, 0x2f, 0x4a, 0xda, |
| 321 | 0xd9, 0x3e, 0x2f, 0x3c, 0x0b, 0x91, 0x1b, 0x2b, 0x29, 0xff, 0x3a, 0xf4, | 321 | 0x22, 0x0e, 0x12, 0xa5, 0x2d, 0x20, 0x7b, 0xc0, 0xbb, 0x21, 0x1f, 0x5a, |
| 322 | 0x7d, 0x21, 0xee, 0x43, 0x56, 0xfe, 0x4b, 0x1b, 0xf6, 0xf4, 0x78, 0xce, | 322 | 0xd5, 0x7b, 0xb6, 0x2f, 0x0a, 0xef, 0x5b, 0xe4, 0xf6, 0x4a, 0x22, 0x7d, |
| 323 | 0xde, 0xdf, 0xae, 0x6d, 0xac, 0x83, 0x3d, 0x01, 0xac, 0x59, 0xc9, 0xa1, | 323 | 0x0b, 0xb2, 0x39, 0x1f, 0x4d, 0x83, 0x56, 0x3e, 0xd1, 0x05, 0x9e, 0x9e, |
| 324 | 0x4d, 0xbb, 0xfc, 0x5b, 0x07, 0xd7, 0xc4, 0x9e, 0x78, 0x66, 0xec, 0x22, | 324 | 0xcc, 0xda, 0x3f, 0xe8, 0xd2, 0xb6, 0x20, 0x7c, 0x7e, 0xc6, 0x01, 0x2a, |
| 325 | 0xae, 0x75, 0x7f, 0xf3, 0x98, 0x87, 0x8e, 0x03, 0x5b, 0xf2, 0x28, 0x2c, | 325 | 0x59, 0x8c, 0xe9, 0x96, 0x7f, 0x11, 0xc4, 0x73, 0x93, 0xef, 0xb0, 0x73, |
| 326 | 0x88, 0xa0, 0xff, 0x01, 0x33, 0xd6, 0xc0, 0xf9, 0x50, 0x36, 0x40, 0xf7, | 326 | 0x82, 0x1a, 0xbe, 0xb2, 0xc1, 0x21, 0xfc, 0x04, 0xd1, 0xb1, 0x5c, 0x4b, |
| 327 | 0x6a, 0x16, 0xf8, 0xdd, 0x31, 0x7e, 0x2b, 0x75, 0x8c, 0xec, 0xe2, 0xf7, | 327 | 0x3e, 0x04, 0x29, 0x2f, 0x98, 0x3f, 0x69, 0xd6, 0x4a, 0x5e, 0x0c, 0xb7, |
| 328 | 0x34, 0xc7, 0x5e, 0x63, 0x2a, 0x4e, 0x47, 0x2c, 0x47, 0xd9, 0x3a, 0x62, | 328 | 0x6d, 0xba, 0xd4, 0xaa, 0x07, 0xdb, 0x22, 0x68, 0x7c, 0x22, 0xca, 0x18, |
| 329 | 0x64, 0xeb, 0x33, 0x90, 0xad, 0xe3, 0x4a, 0xb6, 0x02, 0xf9, 0x81, 0xef, | 329 | 0xd9, 0xc3, 0xa6, 0xee, 0xb4, 0x8f, 0xc3, 0x2a, 0x5e, 0xc7, 0x7b, 0x24, |
| 330 | 0xcb, 0x97, 0x77, 0x95, 0xaf, 0xd6, 0xbf, 0x2e, 0xd0, 0xcb, 0x5f, 0x9f, | 330 | 0xd2, 0xd6, 0x94, 0xa1, 0xad, 0x8f, 0x81, 0xb6, 0x4e, 0x29, 0xda, 0x6a, |
| 331 | 0x2c, 0xfc, 0x05, 0xc6, 0xbd, 0xe0, 0xe2, 0x3a, 0x95, 0x9b, 0x11, 0xf2, | 331 | 0xc9, 0xab, 0xe9, 0xb4, 0x7c, 0x61, 0x4f, 0xfa, 0xda, 0xfd, 0x17, 0x01, |
| 332 | 0x31, 0x81, 0xeb, 0x18, 0xca, 0x7e, 0x55, 0x67, 0xe0, 0x02, 0xec, 0x1a, | 332 | 0xbc, 0xfc, 0x0d, 0xca, 0xc2, 0x17, 0xb1, 0x2e, 0xf4, 0x4e, 0xb9, 0x92, |
| 333 | 0xe4, 0x8d, 0xfc, 0x9d, 0x87, 0x8d, 0x1b, 0xb8, 0x10, 0x85, 0x2d, 0xe4, | 333 | 0xc8, 0xce, 0xd2, 0x16, 0x82, 0x1e, 0x29, 0xc3, 0xe7, 0x4a, 0x5e, 0x1a, |
| 334 | 0x9e, 0x95, 0x5e, 0x1b, 0xba, 0x81, 0xf5, 0xeb, 0xd8, 0x3b, 0x03, 0x17, | 334 | 0x52, 0x7d, 0x92, 0xd0, 0x29, 0x0d, 0xd0, 0x1b, 0xf1, 0x5b, 0xae, 0x40, |
| 335 | 0xba, 0x50, 0x26, 0x55, 0x5f, 0xf5, 0x8a, 0xa7, 0xda, 0xd7, 0x2b, 0xc3, | 335 | 0x0e, 0x5f, 0x0a, 0x41, 0x6f, 0x91, 0x67, 0x65, 0xc0, 0x86, 0x6c, 0x60, |
| 336 | 0xaa, 0x5d, 0xbd, 0x32, 0x8a, 0x12, 0xfa, 0x3d, 0xe3, 0xcb, 0xd0, 0x85, | 336 | 0xff, 0x06, 0x78, 0x27, 0x79, 0x29, 0x82, 0x32, 0xae, 0xe6, 0x6a, 0x54, |
| 337 | 0x8c, 0x24, 0x2f, 0x58, 0x52, 0x9a, 0x0e, 0x82, 0x18, 0x68, 0x1f, 0xbe, | 337 | 0x5c, 0x35, 0xbe, 0x51, 0x19, 0x55, 0xe3, 0x1a, 0xb0, 0x5f, 0x93, 0x97, |
| 338 | 0xd0, 0x23, 0xd7, 0xa7, 0x39, 0x37, 0xea, 0x62, 0xb1, 0x16, 0x33, 0xd3, | 338 | 0x20, 0xdf, 0x33, 0x69, 0x19, 0xb9, 0x94, 0x91, 0xf8, 0x25, 0x4b, 0x8a, |
| 339 | 0xd8, 0x9b, 0xe4, 0x1f, 0xb0, 0xfe, 0x85, 0x22, 0x6c, 0x6e, 0x51, 0x4e, | 339 | 0x33, 0xad, 0x56, 0x18, 0xb0, 0x8f, 0x5e, 0xea, 0x97, 0x5b, 0x2a, 0xb6, |
| 340 | 0xad, 0x90, 0x3f, 0x8c, 0xb5, 0x6f, 0x25, 0x22, 0x92, 0x82, 0x2e, 0x3b, | 340 | 0x1a, 0x56, 0xf1, 0xd6, 0xc5, 0xcc, 0x0c, 0x78, 0x93, 0xf8, 0xf3, 0x30, |
| 341 | 0x2a, 0x73, 0xd5, 0x76, 0xe8, 0x32, 0xc7, 0xad, 0xcb, 0x13, 0x58, 0xa3, | 341 | 0xa6, 0x00, 0xfd, 0x58, 0x90, 0xb3, 0x2b, 0xc4, 0x0f, 0xe3, 0xe5, 0xdb, |
| 342 | 0x41, 0xca, 0x03, 0xf8, 0x92, 0x45, 0xdf, 0x45, 0x29, 0xa0, 0x4d, 0x71, | 342 | 0xb1, 0x80, 0x24, 0x20, 0xcb, 0x8e, 0xcb, 0x7c, 0xad, 0x1b, 0xb2, 0x2c, |
| 343 | 0x65, 0xa7, 0x7e, 0x49, 0xda, 0xb1, 0xa7, 0x8e, 0xca, 0xb1, 0x2a, 0xfb, | 343 | 0x08, 0x1d, 0xf8, 0x50, 0xb7, 0xf4, 0x0e, 0x93, 0x1e, 0x80, 0x17, 0x0f, |
| 344 | 0x71, 0xdc, 0x79, 0x39, 0x00, 0x19, 0xf2, 0xdc, 0x09, 0xf4, 0x03, 0x1b, | 344 | 0x73, 0x17, 0x24, 0x8f, 0x31, 0x85, 0x95, 0x9d, 0xfe, 0x45, 0xe9, 0x06, |
| 345 | 0xd9, 0xf4, 0xc7, 0xfd, 0x97, 0x7b, 0x0f, 0x99, 0x0c, 0xf7, 0x5d, 0xac, | 345 | 0x4f, 0x1d, 0x97, 0x93, 0x35, 0xce, 0x13, 0x74, 0xca, 0x72, 0x10, 0x34, |
| 346 | 0xdc, 0x96, 0x9d, 0xb6, 0xb6, 0x32, 0xe2, 0xcc, 0x66, 0x1e, 0xb2, 0x5e, | 346 | 0xe4, 0x3a, 0x47, 0x30, 0x0f, 0xf4, 0x76, 0xc7, 0x1f, 0xf9, 0x2f, 0xfb, |
| 347 | 0xc9, 0x64, 0xac, 0x2b, 0x99, 0x9c, 0x75, 0x35, 0x53, 0xb4, 0xae, 0xc1, | 347 | 0x06, 0x34, 0xe9, 0xf3, 0x5d, 0xb8, 0xd4, 0xe5, 0xcd, 0x58, 0xdb, 0x19, |
| 348 | 0x36, 0xd5, 0x37, 0xde, 0x81, 0xfc, 0x00, 0x4f, 0x10, 0x7b, 0x6f, 0xaf, | 348 | 0x09, 0xce, 0x65, 0x3e, 0x60, 0x7d, 0x37, 0x93, 0xb1, 0xae, 0x65, 0xb2, |
| 349 | 0x61, 0xdc, 0xf8, 0x39, 0x6f, 0xc9, 0xb9, 0x0a, 0xed, 0x74, 0x70, 0x68, | 349 | 0xd6, 0xf5, 0x4c, 0xc1, 0xba, 0x01, 0xdd, 0xd4, 0xd8, 0x7c, 0x0e, 0xf4, |
| 350 | 0xd6, 0x2f, 0xdf, 0x0e, 0xfa, 0x40, 0x07, 0xe3, 0x11, 0x3b, 0xb6, 0x23, | 350 | 0x03, 0xdd, 0xcf, 0x98, 0x79, 0xfb, 0x0c, 0xa3, 0x26, 0x66, 0xf0, 0x9a, |
| 351 | 0x9a, 0x1d, 0x06, 0x4e, 0xa0, 0xed, 0xe8, 0xa2, 0xed, 0xf0, 0x0b, 0xb2, | 351 | 0x6c, 0x54, 0x68, 0x3b, 0xb4, 0x1e, 0x9e, 0x4b, 0x97, 0xee, 0x01, 0x7c, |
| 352 | 0x57, 0xb6, 0xaa, 0x3a, 0x2e, 0x97, 0x07, 0x6e, 0xda, 0xaa, 0xc5, 0xe5, | 352 | 0x80, 0x83, 0xbe, 0xee, 0x8e, 0xee, 0x08, 0x79, 0xa3, 0xb2, 0xa6, 0x74, |
| 353 | 0xcb, 0xcb, 0xa1, 0x2c, 0x71, 0xbe, 0xf3, 0xef, 0xeb, 0x90, 0x88, 0x1c, | 353 | 0x47, 0x84, 0xba, 0x23, 0x9d, 0x97, 0xfd, 0xb2, 0x5d, 0x03, 0xff, 0x89, |
| 354 | 0x51, 0xf6, 0xba, 0x5b, 0x2e, 0xaf, 0x03, 0xd3, 0x02, 0x81, 0xd8, 0x77, | 354 | 0xb2, 0x83, 0x65, 0xbb, 0x1e, 0x95, 0x2f, 0x54, 0x7d, 0x5a, 0xe2, 0x7e, |
| 355 | 0x32, 0xce, 0x63, 0xab, 0xf8, 0x85, 0xf4, 0xf0, 0x3c, 0xf0, 0x1f, 0xc0, | 355 | 0xcb, 0x6f, 0xea, 0x91, 0x80, 0x4c, 0x29, 0x7d, 0xdd, 0x27, 0x57, 0xd7, |
| 356 | 0x2b, 0x9e, 0xd9, 0x61, 0x9e, 0x3d, 0x9c, 0x51, 0x78, 0x3f, 0x8a, 0x3d, | 356 | 0xe1, 0x0f, 0xc1, 0x5a, 0xb0, 0xef, 0x63, 0xac, 0xc0, 0x56, 0xbe, 0xb1, |
| 357 | 0xc9, 0x6b, 0x4b, 0x0a, 0xc0, 0xed, 0x5b, 0x15, 0x96, 0x09, 0x94, 0x26, | 357 | 0xf4, 0xf3, 0xee, 0xea, 0x2c, 0x70, 0xc5, 0xfb, 0x25, 0xec, 0xb3, 0x9f, |
| 358 | 0x56, 0x0f, 0x5d, 0x10, 0xc9, 0xfe, 0xa3, 0x7a, 0xdf, 0xee, 0x89, 0x35, | 358 | 0x3b, 0xf2, 0xdf, 0xc7, 0xc1, 0x93, 0x7c, 0xb6, 0x24, 0x0f, 0xbb, 0x91, |
| 359 | 0x0b, 0x3b, 0x5c, 0x5a, 0xa1, 0x4c, 0xa3, 0x5c, 0xd7, 0x63, 0x17, 0x7c, | 359 | 0xf7, 0x5c, 0x79, 0xd8, 0x3d, 0xdb, 0x95, 0x31, 0xc0, 0x15, 0x80, 0x4d, |
| 360 | 0x60, 0xe6, 0xd1, 0x0e, 0xda, 0x37, 0xe0, 0x27, 0xec, 0x7b, 0x85, 0xed, | 360 | 0x1e, 0x06, 0x1c, 0x55, 0xd5, 0xde, 0xed, 0x8a, 0x35, 0x07, 0x3d, 0x5c, |
| 361 | 0x33, 0xd8, 0x73, 0x3f, 0x68, 0xa7, 0x6d, 0x3f, 0xec, 0x8f, 0xcb, 0xb5, | 361 | 0x54, 0xf7, 0x57, 0x28, 0xd7, 0xf5, 0xda, 0x79, 0xf8, 0xab, 0xc5, 0xf1, |
| 362 | 0x0a, 0xaf, 0xf9, 0x3e, 0xe5, 0x8b, 0x8a, 0x1b, 0xc7, 0xa6, 0x16, 0x3d, | 362 | 0x1e, 0xea, 0xb7, 0xd1, 0x12, 0xf9, 0x5e, 0xd9, 0xf1, 0x19, 0xf0, 0xdc, |
| 363 | 0xdf, 0xec, 0x31, 0x15, 0xd3, 0xb1, 0x3e, 0x06, 0xcc, 0x38, 0x70, 0xa6, | 363 | 0x57, 0xba, 0xa9, 0xdb, 0x8f, 0xa6, 0x27, 0xe5, 0x46, 0x85, 0xcf, 0x6c, |
| 364 | 0x4d, 0xd2, 0x4f, 0xdb, 0x7d, 0xfa, 0x7c, 0xe5, 0x90, 0x14, 0xfd, 0x03, | 364 | 0x4f, 0xa4, 0x45, 0xc5, 0x8f, 0x2b, 0xd3, 0x8b, 0xee, 0x6b, 0x86, 0xc7, |
| 365 | 0x98, 0xc3, 0x3e, 0x99, 0x87, 0x2f, 0xb6, 0xb0, 0x31, 0x2c, 0xf3, 0xc3, | 365 | 0x6a, 0xa0, 0xf1, 0x53, 0xf2, 0x8d, 0xcd, 0x79, 0xf9, 0xf7, 0x9b, 0xb3, |
| 366 | 0xf0, 0xb9, 0xdd, 0xbb, 0x89, 0xd5, 0xf0, 0xeb, 0xc0, 0xf3, 0x41, 0x94, | 366 | 0xb0, 0x4f, 0x4e, 0xc0, 0x3e, 0xf9, 0x08, 0x78, 0xf8, 0x38, 0x78, 0xf8, |
| 367 | 0xed, 0x28, 0x6f, 0x97, 0xf9, 0xa7, 0xba, 0x63, 0xba, 0xbf, 0x68, 0xcb, | 367 | 0xe3, 0xa0, 0xfb, 0x19, 0x15, 0x77, 0xa8, 0x55, 0x12, 0x57, 0x4a, 0x2a, |
| 368 | 0xfd, 0xb3, 0x1c, 0x3b, 0x99, 0xb4, 0x7e, 0x15, 0x2e, 0x6c, 0xc6, 0x84, | 368 | 0xce, 0xfd, 0x1a, 0x68, 0x7e, 0x42, 0x82, 0xab, 0x43, 0xc0, 0x6b, 0xa9, |
| 369 | 0xa4, 0x23, 0x2a, 0xde, 0x93, 0x5d, 0x32, 0x78, 0xc6, 0x95, 0xa1, 0x33, | 369 | 0x15, 0x75, 0x5b, 0x0f, 0xc3, 0x06, 0xc1, 0x59, 0x97, 0x12, 0x41, 0x45, |
| 370 | 0x09, 0x39, 0x70, 0xa6, 0x5f, 0x86, 0xcf, 0x24, 0xe5, 0xce, 0x33, 0x21, | 370 | 0x23, 0xae, 0xf3, 0x69, 0xe0, 0xf2, 0x4d, 0x5e, 0xa2, 0xc6, 0x23, 0xde, |
| 371 | 0xfe, 0xea, 0x9e, 0x4a, 0x1b, 0x5b, 0xe1, 0xfd, 0x9a, 0xb6, 0xe2, 0xce, | 371 | 0xa8, 0x8d, 0x4a, 0xf1, 0x32, 0xfa, 0x2f, 0x47, 0x80, 0x37, 0xea, 0xc6, |
| 372 | 0x86, 0xc6, 0xa8, 0xf3, 0x6b, 0xc4, 0x74, 0xaf, 0x62, 0xef, 0x6e, 0xaa, | 372 | 0xc4, 0xf9, 0xa2, 0x6c, 0x81, 0x2e, 0xb2, 0xc0, 0xcf, 0x3b, 0xa4, 0x1c, |
| 373 | 0xf3, 0xca, 0x4b, 0x1b, 0x41, 0x70, 0xc9, 0x6f, 0x77, 0xa7, 0x85, 0xfc, | 373 | 0x4d, 0x7c, 0x4d, 0x64, 0x52, 0x0e, 0x2d, 0x81, 0xa6, 0x97, 0x6c, 0xec, |
| 374 | 0xce, 0x00, 0x9f, 0xf9, 0xd0, 0x61, 0xa3, 0xd0, 0x61, 0xe3, 0xca, 0x36, | 374 | 0x99, 0xb8, 0xc4, 0xf3, 0x65, 0x4f, 0xec, 0x65, 0xca, 0xa2, 0x03, 0xc6, |
| 375 | 0xd6, 0xbf, 0x2e, 0xd6, 0xb1, 0xcc, 0x03, 0xb2, 0x06, 0xd9, 0x7e, 0xd0, | 375 | 0x37, 0xd1, 0xfa, 0xbe, 0x2e, 0x5c, 0x97, 0xeb, 0x7d, 0x46, 0xe6, 0xa1, |
| 376 | 0x4f, 0x7d, 0x75, 0x53, 0xf1, 0x47, 0x62, 0x3d, 0xd0, 0x67, 0x77, 0xaf, | 376 | 0x53, 0x61, 0x7f, 0x43, 0x66, 0xbb, 0x31, 0xac, 0x19, 0x9e, 0xbb, 0xec, |
| 377 | 0xb6, 0xcb, 0x1b, 0xf1, 0x20, 0x38, 0x0b, 0x1d, 0x50, 0xaf, 0x68, 0xf9, | 377 | 0x84, 0xe7, 0x2f, 0x73, 0x9e, 0xb0, 0x04, 0x96, 0x78, 0xb6, 0x9c, 0x07, |
| 378 | 0xcd, 0x7b, 0xd4, 0x05, 0x0f, 0x61, 0xfe, 0xa3, 0x78, 0x96, 0x33, 0xba, | 378 | 0x3c, 0x80, 0xb9, 0x53, 0x4b, 0xc4, 0xdb, 0x18, 0xc6, 0xfd, 0x63, 0xe8, |
| 379 | 0xbd, 0x43, 0x6e, 0xc4, 0x13, 0xb2, 0x7e, 0x60, 0xbc, 0xa5, 0x5e, 0x06, | 379 | 0x63, 0x4d, 0x57, 0xb9, 0x65, 0x2d, 0x1f, 0x72, 0x8d, 0x4e, 0x9d, 0x88, |
| 380 | 0xf7, 0xc0, 0x3d, 0x8d, 0xdf, 0x23, 0xbf, 0xf0, 0xdc, 0x95, 0x73, 0xf0, | 380 | 0x33, 0x80, 0xfc, 0xc8, 0x36, 0xb4, 0x7e, 0x2b, 0x28, 0xfd, 0xa7, 0x75, |
| 381 | 0x99, 0xcf, 0x1f, 0x48, 0x8d, 0x27, 0x6d, 0xea, 0xc3, 0xa4, 0xd4, 0xbe, | 381 | 0xdf, 0x71, 0x81, 0x51, 0xd7, 0xeb, 0xaa, 0xfd, 0x04, 0x96, 0xb7, 0xa8, |
| 382 | 0x9e, 0x90, 0xb5, 0x65, 0x6d, 0x97, 0x66, 0xbd, 0x71, 0x29, 0x00, 0xfb, | 382 | 0xef, 0xb1, 0x06, 0xc7, 0x84, 0x3a, 0xe0, 0xce, 0x40, 0xee, 0xdc, 0x1b, |
| 383 | 0xae, 0x2d, 0x67, 0x51, 0xb2, 0x7e, 0xa8, 0x73, 0xb4, 0x5c, 0x16, 0x33, | 383 | 0x26, 0xee, 0x1f, 0x83, 0x7e, 0x4d, 0x2e, 0xe9, 0x98, 0x7c, 0xf2, 0x72, |
| 384 | 0x79, 0xec, 0x63, 0xee, 0x0f, 0x6d, 0x77, 0x6c, 0xbb, 0x1d, 0x72, 0xc4, | 384 | 0x1a, 0xfb, 0x91, 0x41, 0x46, 0x17, 0x6c, 0xec, 0xe1, 0x7d, 0x4a, 0x7e, |
| 385 | 0x3d, 0xf1, 0x30, 0x9e, 0xe7, 0xb1, 0xaf, 0x69, 0xc7, 0xd3, 0x90, 0xaf, | 385 | 0x4d, 0x40, 0x66, 0x39, 0xb2, 0x7e, 0x90, 0x67, 0x33, 0x28, 0x8d, 0xa7, |
| 386 | 0xcf, 0xc6, 0x28, 0x1f, 0x05, 0x9f, 0xf8, 0x9a, 0x6d, 0x52, 0x89, 0x34, | 386 | 0xf9, 0xce, 0x33, 0xe2, 0x79, 0x93, 0x17, 0xa3, 0xd0, 0x2f, 0x38, 0xa7, |
| 387 | 0x9e, 0x4f, 0x4b, 0x5a, 0x9d, 0x0b, 0xcd, 0xfa, 0x61, 0x7f, 0x59, 0xa3, | 387 | 0xbe, 0x21, 0xa9, 0x6f, 0xb2, 0x6d, 0x48, 0xd1, 0x72, 0x10, 0x67, 0xb0, |
| 388 | 0x17, 0x22, 0x8c, 0x81, 0xe1, 0xef, 0x64, 0x8c, 0xf2, 0x18, 0xf1, 0xc2, | 388 | 0x58, 0x69, 0x3d, 0x9c, 0x4b, 0x97, 0x40, 0x6d, 0xc4, 0x39, 0xf1, 0x41, |
| 389 | 0xe7, 0x23, 0xb0, 0x3d, 0x51, 0x35, 0xc6, 0xfc, 0x32, 0x9f, 0xa5, 0x5d, | 389 | 0xbc, 0x8f, 0x03, 0x36, 0xe2, 0xb8, 0x8f, 0xba, 0x18, 0x75, 0xfb, 0xa5, |
| 390 | 0xb6, 0x2f, 0xf8, 0xbc, 0x17, 0xf9, 0x44, 0x83, 0xf1, 0x9a, 0x98, 0x3c, | 390 | 0x58, 0x23, 0x3d, 0xa3, 0xac, 0xef, 0x37, 0xbe, 0xde, 0x67, 0x78, 0x27, |
| 391 | 0xda, 0xe8, 0x02, 0xbd, 0x6d, 0xbf, 0xc2, 0xf6, 0xec, 0xec, 0x73, 0x3b, | 391 | 0x84, 0xbd, 0x6b, 0x3a, 0x2e, 0x80, 0xa6, 0xca, 0xf0, 0xbb, 0xae, 0x2e, |
| 392 | 0xbb, 0x95, 0x70, 0x95, 0x6e, 0xa1, 0x1e, 0xa1, 0x0e, 0x69, 0x17, 0x67, | 392 | 0x49, 0xf8, 0x4d, 0x90, 0xcf, 0x9f, 0xa2, 0x0c, 0x05, 0x7d, 0x95, 0xd7, |
| 393 | 0x8c, 0xfb, 0x0c, 0x6b, 0xb2, 0x8c, 0x35, 0x5a, 0xc6, 0x1a, 0x2d, 0x63, | 393 | 0x27, 0x40, 0x6b, 0x7d, 0x90, 0x97, 0xad, 0xd6, 0x71, 0xd8, 0xc9, 0xa7, |
| 394 | 0x8d, 0x96, 0xb1, 0x7e, 0xcb, 0xd4, 0x2d, 0x83, 0xd8, 0xcf, 0x39, 0x73, | 394 | 0xd3, 0xc4, 0xd1, 0x4d, 0xe0, 0xa8, 0x3b, 0x76, 0x1a, 0xe7, 0xb5, 0xf6, |
| 395 | 0x86, 0x40, 0xfd, 0xf2, 0x1c, 0xd6, 0x76, 0x5a, 0xfe, 0x76, 0x63, 0x52, | 395 | 0xf4, 0x43, 0x4a, 0x5e, 0xc0, 0xd6, 0x51, 0x7a, 0x4b, 0xc7, 0x38, 0xd2, |
| 396 | 0xfe, 0xf3, 0xc6, 0x11, 0xe0, 0xee, 0x22, 0xd6, 0x35, 0x87, 0x75, 0xcd, | 396 | 0xb4, 0x8d, 0x14, 0x0f, 0xe7, 0x5c, 0xca, 0xc3, 0x3c, 0xf0, 0x30, 0xae, |
| 397 | 0x62, 0x5d, 0x8f, 0x62, 0x5d, 0xc7, 0x55, 0xcc, 0xb3, 0x5a, 0x49, 0x5d, | 397 | 0xe4, 0xb7, 0x96, 0x2d, 0x3d, 0x52, 0x3c, 0x9e, 0xc5, 0x7e, 0x27, 0x77, |
| 398 | 0x2a, 0x2b, 0x8c, 0xff, 0x16, 0xe4, 0x61, 0x4c, 0x9c, 0xd5, 0x7e, 0xe8, | 398 | 0xf5, 0xcb, 0xe0, 0x1d, 0xb6, 0x5f, 0xf3, 0x43, 0x61, 0xc6, 0x43, 0x03, |
| 399 | 0x8b, 0x72, 0x10, 0xf7, 0x82, 0x43, 0xc0, 0xd6, 0x18, 0xbb, 0x9c, 0x72, | 399 | 0xde, 0xa4, 0x6c, 0x1c, 0x9c, 0x92, 0x8b, 0x07, 0x13, 0x93, 0xb3, 0x36, |
| 400 | 0x94, 0xee, 0xf3, 0xdc, 0xcf, 0x63, 0xaf, 0xbc, 0x2f, 0x9b, 0xaa, 0x52, | 400 | 0x75, 0xc2, 0x94, 0xd4, 0x9f, 0xce, 0xca, 0x5a, 0x55, 0xeb, 0xe6, 0x39, |
| 401 | 0x75, 0x9d, 0xab, 0x0e, 0x4b, 0xe9, 0x22, 0xea, 0x9f, 0xed, 0x02, 0xad, | 401 | 0x77, 0x52, 0xf2, 0xcd, 0x02, 0xde, 0x3d, 0x94, 0xec, 0xef, 0xcb, 0x5d, |
| 402 | 0xc4, 0x7c, 0xa9, 0xd3, 0x25, 0xd9, 0x84, 0xbe, 0xcb, 0x81, 0xc6, 0x0f, | 402 | 0x7f, 0x4f, 0x39, 0xee, 0x09, 0x32, 0x42, 0xeb, 0x5e, 0xdb, 0xee, 0xc6, |
| 403 | 0xc9, 0x7c, 0x3c, 0xf5, 0x9c, 0xc8, 0xb8, 0xdc, 0x03, 0x3f, 0x9d, 0xf1, | 403 | 0xf9, 0x50, 0x2e, 0x7c, 0x10, 0xf5, 0x39, 0xc8, 0x36, 0x9e, 0x67, 0x0a, |
| 404 | 0xcc, 0x9c, 0x8a, 0xb1, 0xe1, 0xfa, 0x62, 0x16, 0xfe, 0x36, 0x6d, 0xec, | 404 | 0x67, 0x77, 0x4a, 0x9d, 0x53, 0x3e, 0x4d, 0x7f, 0x80, 0x63, 0x12, 0xb1, |
| 405 | 0x3e, 0xe3, 0x87, 0x6b, 0x1c, 0x5b, 0x13, 0x8e, 0xcb, 0xf1, 0xfe, 0x58, | 405 | 0x39, 0xd4, 0xcf, 0x08, 0x75, 0x28, 0xf7, 0xe6, 0xcf, 0xe7, 0x19, 0xf8, |
| 406 | 0xe6, 0x80, 0x15, 0xe1, 0xeb, 0x03, 0x8b, 0x78, 0x09, 0x8c, 0x19, 0x9b, | 406 | 0x03, 0x8c, 0x31, 0xe1, 0xef, 0x33, 0x61, 0xf2, 0x64, 0xc0, 0xf5, 0xeb, |
| 407 | 0xbd, 0xe8, 0xc6, 0xe6, 0x2e, 0xb2, 0x9f, 0x98, 0x44, 0x96, 0xa8, 0xb3, | 407 | 0xc7, 0xa0, 0x7f, 0x43, 0x6a, 0x8d, 0x72, 0x95, 0x75, 0x29, 0x87, 0xe3, |
| 408 | 0xd8, 0x0f, 0x74, 0x3b, 0xfa, 0x4e, 0xab, 0x33, 0xb3, 0x11, 0xb4, 0xfb, | 408 | 0xf3, 0x69, 0xbe, 0x8b, 0x3c, 0x66, 0xfc, 0xf2, 0xe3, 0xf0, 0x5b, 0xf3, |
| 409 | 0x5d, 0xe0, 0x4c, 0xcd, 0xc7, 0xfc, 0x59, 0x6d, 0xf7, 0xf2, 0xf5, 0x66, | 409 | 0xcd, 0xae, 0xdf, 0xa0, 0x7f, 0x77, 0x64, 0x9d, 0x96, 0xcb, 0xdb, 0x31, |
| 410 | 0xac, 0x07, 0xdd, 0x02, 0xbb, 0x98, 0xab, 0x6b, 0xdc, 0x56, 0x54, 0xb8, | 410 | 0xc7, 0xc8, 0xde, 0x93, 0x35, 0xc6, 0xac, 0x2d, 0xe9, 0x82, 0x2c, 0x3d, |
| 411 | 0x4e, 0x63, 0xba, 0xa3, 0x72, 0xa8, 0x43, 0x3a, 0x3d, 0x35, 0x9f, 0xc8, | 411 | 0x2a, 0xc3, 0x46, 0x8e, 0x72, 0x3f, 0x7d, 0x4a, 0xd7, 0xe5, 0x67, 0x62, |
| 412 | 0xd9, 0x4d, 0xe2, 0x58, 0x8c, 0xc1, 0x36, 0xd1, 0x26, 0xba, 0x33, 0xb0, | 412 | 0x72, 0x6e, 0xed, 0xff, 0x85, 0xae, 0x7f, 0xbd, 0x5d, 0x57, 0xd8, 0xc3, |
| 413 | 0xa7, 0xb7, 0x77, 0x50, 0x66, 0x3e, 0x09, 0xdc, 0x38, 0xb0, 0xa4, 0xcf, | 413 | 0xae, 0xbb, 0x79, 0x19, 0xf2, 0xa0, 0x0a, 0x59, 0x51, 0x85, 0xac, 0xa8, |
| 414 | 0x98, 0x06, 0x2e, 0xfa, 0x98, 0x8f, 0xf4, 0x31, 0xb2, 0x69, 0x63, 0x0e, | 414 | 0x42, 0x56, 0x54, 0x21, 0x2b, 0xaa, 0x90, 0x15, 0x55, 0xc8, 0x8a, 0xea, |
| 415 | 0x1f, 0x55, 0x76, 0x79, 0x0c, 0xb6, 0xd8, 0x85, 0xac, 0x53, 0xe7, 0xf4, | 415 | 0x8c, 0xd1, 0x9b, 0xa7, 0x21, 0x73, 0xe9, 0xf3, 0xd0, 0xcf, 0xe9, 0xb4, |
| 416 | 0x61, 0xff, 0xf0, 0x9e, 0xba, 0x87, 0x7a, 0x8c, 0x32, 0x13, 0x07, 0x6e, | 416 | 0x05, 0xe2, 0x90, 0x25, 0xf4, 0x67, 0x12, 0xa5, 0x5b, 0xc0, 0xcd, 0xd7, |
| 417 | 0x82, 0xfe, 0xe9, 0xee, 0x97, 0xda, 0x06, 0xdf, 0xf5, 0x2b, 0x1d, 0xed, | 417 | 0xd3, 0xf4, 0xb9, 0x5b, 0xf2, 0x57, 0xe9, 0xce, 0xdd, 0xab, 0xf8, 0x86, |
| 418 | 0x60, 0x0d, 0x16, 0x2b, 0xc1, 0xa1, 0xbc, 0x5f, 0x86, 0x16, 0x25, 0xcf, | 418 | 0x3c, 0x0a, 0x7c, 0x7d, 0x08, 0xf8, 0xfa, 0xf0, 0x5d, 0x39, 0x16, 0x7e, |
| 419 | 0xc9, 0x0f, 0xf2, 0x7d, 0x14, 0xb4, 0x91, 0xc7, 0xdd, 0x65, 0x7d, 0x6e, | 419 | 0x4c, 0x64, 0xb8, 0x14, 0x80, 0xff, 0x39, 0x73, 0x07, 0xee, 0xe8, 0x7b, |
| 420 | 0xb9, 0x57, 0x4a, 0x55, 0xea, 0x69, 0x94, 0xb5, 0xbd, 0xf0, 0x9d, 0x5c, | 420 | 0x63, 0x8d, 0xbb, 0x6c, 0x63, 0xfa, 0xdc, 0xa3, 0xea, 0xde, 0x7c, 0x03, |
| 421 | 0x85, 0x65, 0x73, 0xd3, 0x9c, 0x7b, 0xac, 0xec, 0x42, 0x6e, 0xdd, 0x83, | 421 | 0x76, 0xf9, 0x8d, 0x74, 0x29, 0x12, 0x50, 0xf7, 0x73, 0x2e, 0x69, 0x67, |
| 422 | 0x93, 0x2a, 0xa6, 0x72, 0x79, 0x29, 0xe5, 0xd7, 0x6c, 0x8c, 0x09, 0x9d, | 422 | 0x8f, 0xbf, 0x6f, 0x84, 0xb5, 0x5c, 0xd4, 0x67, 0x9f, 0xcf, 0xf4, 0x81, |
| 423 | 0x69, 0x9f, 0x1f, 0x93, 0xb9, 0x95, 0x6e, 0x19, 0x5c, 0xe5, 0xf9, 0xf2, | 423 | 0x0f, 0x68, 0xdf, 0xdd, 0x50, 0xf6, 0xdd, 0xd1, 0x74, 0x50, 0xb6, 0xa2, |
| 424 | 0x50, 0x4c, 0xba, 0x83, 0xe0, 0x9c, 0x9f, 0x57, 0xb1, 0xc7, 0x81, 0x55, | 424 | 0xd4, 0xa9, 0x3f, 0x92, 0x93, 0x2b, 0x91, 0x1e, 0xfa, 0xdf, 0x8b, 0xd5, |
| 425 | 0x60, 0x82, 0xa3, 0x9a, 0x77, 0x9c, 0x2f, 0x74, 0xc4, 0xbf, 0x82, 0x8f, | 425 | 0x83, 0xb2, 0xad, 0x64, 0xca, 0x07, 0xd1, 0xd7, 0x93, 0x79, 0xd0, 0xc4, |
| 426 | 0xef, 0x8e, 0x8f, 0x8b, 0xbb, 0xe0, 0xe3, 0x57, 0x2f, 0x42, 0xfe, 0x96, | 426 | 0x11, 0xf8, 0x8e, 0x17, 0x65, 0x2c, 0x76, 0x11, 0x7b, 0xfd, 0x3c, 0xc6, |
| 427 | 0x21, 0x9b, 0xcb, 0x90, 0xcd, 0x65, 0xc8, 0xe6, 0x32, 0x64, 0x73, 0x19, | 427 | 0xc0, 0x07, 0x68, 0x15, 0x50, 0x77, 0x1d, 0x7e, 0xc6, 0x6d, 0xe1, 0xf3, |
| 428 | 0xb2, 0x89, 0xfd, 0xf3, 0xfc, 0xf2, 0xb8, 0xc1, 0x1f, 0x9f, 0x82, 0x2c, | 428 | 0x98, 0x73, 0x1e, 0x88, 0xce, 0x3a, 0x29, 0xe7, 0x35, 0xf1, 0xe9, 0x8c, |
| 429 | 0x7f, 0xdb, 0xe0, 0x8f, 0x51, 0xc8, 0x70, 0x12, 0xb2, 0xeb, 0x43, 0x6e, | 429 | 0x34, 0xc5, 0xbb, 0xb6, 0x41, 0xc9, 0xaf, 0xd3, 0x2f, 0xeb, 0x03, 0x1f, |
| 430 | 0x87, 0x21, 0xcb, 0x1e, 0x64, 0xb9, 0x1f, 0x72, 0x9c, 0x50, 0xfe, 0xe3, | 430 | 0xfe, 0x08, 0x7a, 0x98, 0x6b, 0x50, 0x2e, 0x70, 0x0f, 0xff, 0x0d, 0xf0, |
| 431 | 0x04, 0xb0, 0xe8, 0x83, 0xf0, 0x41, 0xce, 0x57, 0xfb, 0x65, 0x51, 0xd1, | 431 | 0xc5, 0x67, 0xbb, 0xbd, 0xfb, 0xa1, 0x7b, 0x29, 0xf7, 0xb5, 0xef, 0x94, |
| 432 | 0x12, 0xc8, 0x96, 0xbf, 0x49, 0x1e, 0x62, 0x5f, 0xd0, 0x3f, 0x77, 0xe5, | 432 | 0xc7, 0x18, 0xa5, 0x1b, 0xd2, 0xbc, 0x77, 0xe0, 0xfe, 0xfe, 0x18, 0x76, |
| 433 | 0xfc, 0x5a, 0x48, 0xdb, 0xab, 0xf2, 0xcd, 0xca, 0x6b, 0xf2, 0x42, 0x85, | 433 | 0x4e, 0x14, 0x74, 0x80, 0xfa, 0x75, 0xdf, 0xce, 0xf5, 0xed, 0x19, 0x1d, |
| 434 | 0x34, 0xe6, 0x64, 0x11, 0xef, 0xd6, 0x9e, 0xa2, 0x1f, 0xa9, 0xe8, 0x83, | 434 | 0xeb, 0xbb, 0xa2, 0x6c, 0x9a, 0x1c, 0xf4, 0xd8, 0x31, 0xf4, 0x65, 0xac, |
| 435 | 0xcc, 0x9d, 0x94, 0xff, 0x03, 0x5e, 0xae, 0x6f, 0x7c, 0x58, 0x3e, 0xe7, | 435 | 0xbd, 0xd5, 0x3a, 0x95, 0x86, 0xdf, 0xf1, 0x24, 0x65, 0xd9, 0x7d, 0xe0, |
| 436 | 0x52, 0x86, 0xe3, 0xd0, 0x35, 0xb8, 0x3f, 0x40, 0xbd, 0x04, 0x3f, 0xb4, | 436 | 0x69, 0xda, 0x45, 0xd4, 0xb9, 0x62, 0xdd, 0xcc, 0x6c, 0x3b, 0x61, 0xe8, |
| 437 | 0x92, 0x2a, 0x97, 0xa0, 0x27, 0xaa, 0xf6, 0x08, 0x30, 0x58, 0x39, 0xe8, | 437 | 0xcb, 0x19, 0xd0, 0x5c, 0x0e, 0x74, 0x18, 0x78, 0x60, 0x0a, 0xfa, 0x57, |
| 438 | 0xa1, 0x0e, 0xab, 0x7a, 0xee, 0x80, 0x4d, 0xde, 0xec, 0x87, 0xbc, 0xa4, | 438 | 0xc5, 0x9c, 0x41, 0xeb, 0x5c, 0xf7, 0x83, 0xd6, 0x5f, 0x64, 0xc6, 0xa1, |
| 439 | 0xbe, 0x0a, 0xe1, 0xc5, 0x33, 0xda, 0x73, 0x94, 0x35, 0xe8, 0xcf, 0xa7, | 439 | 0x8f, 0x1f, 0x82, 0x3e, 0xe6, 0x7d, 0x74, 0x0e, 0x3a, 0x99, 0xfa, 0xd8, |
| 440 | 0xc8, 0x47, 0xfa, 0xb5, 0xb8, 0x56, 0xba, 0xf7, 0x27, 0x2a, 0x7e, 0x5c, | 440 | 0x91, 0x3f, 0xdd, 0xcc, 0x41, 0x76, 0xdd, 0xd7, 0x43, 0x5e, 0x9b, 0x6a, |
| 441 | 0x9a, 0x86, 0x2f, 0xbf, 0x46, 0x3e, 0x41, 0x56, 0x9e, 0x22, 0x1f, 0x49, | 441 | 0xf3, 0x54, 0xc1, 0xf0, 0xdc, 0x01, 0x13, 0xfb, 0x28, 0x28, 0xde, 0x2c, |
| 442 | 0x9f, 0xe6, 0xe3, 0x23, 0x12, 0xf2, 0x90, 0xef, 0x5a, 0x79, 0x08, 0x27, | 442 | 0xaf, 0xd3, 0x0e, 0x01, 0x9f, 0xae, 0x53, 0x46, 0xd0, 0xa6, 0xa4, 0xec, |
| 443 | 0xaa, 0x33, 0x8e, 0xb9, 0x7f, 0x2d, 0x66, 0x62, 0xc8, 0xc6, 0x26, 0xbf, | 443 | 0x80, 0xac, 0x59, 0xff, 0x00, 0xca, 0x29, 0x94, 0xda, 0x56, 0xbb, 0x52, |
| 444 | 0x2a, 0xd3, 0x0d, 0xce, 0xc7, 0x92, 0xdb, 0xbc, 0xab, 0xf0, 0xa9, 0x38, | 444 | 0x7d, 0x35, 0xec, 0xdf, 0x23, 0xef, 0xd8, 0x6b, 0x75, 0xec, 0xef, 0x18, |
| 445 | 0xf6, 0xab, 0xc1, 0xa3, 0x71, 0xce, 0x81, 0xeb, 0xba, 0x47, 0xea, 0x7d, | 445 | 0x73, 0x1b, 0x4a, 0xfd, 0xde, 0x47, 0xb0, 0xc7, 0xe3, 0xa0, 0xc1, 0x19, |
| 446 | 0xbe, 0x89, 0xaf, 0xfc, 0x2a, 0x5b, 0xc4, 0x7a, 0xe0, 0x3b, 0xf4, 0xcb, | 446 | 0xd0, 0xe0, 0x14, 0xf6, 0x7a, 0xde, 0x1a, 0x39, 0x1c, 0x80, 0x3e, 0x3f, |
| 447 | 0x0b, 0xcb, 0xe0, 0x37, 0xfc, 0xae, 0x6f, 0xc0, 0xef, 0x62, 0x9c, 0x53, | 447 | 0x23, 0x85, 0x34, 0x64, 0xee, 0x5a, 0xc9, 0x9a, 0x58, 0x12, 0xf5, 0x9e, |
| 448 | 0xaf, 0xcf, 0xb8, 0x89, 0xd9, 0xb6, 0xc6, 0x6a, 0x93, 0x58, 0x23, 0xfa, | 448 | 0x4f, 0xf3, 0x4e, 0xfd, 0xbd, 0x2a, 0x3e, 0xb8, 0xbc, 0x19, 0x34, 0x71, |
| 449 | 0xed, 0xa9, 0xf2, 0x75, 0xe8, 0xc1, 0xe7, 0x7d, 0xc6, 0xf8, 0x02, 0xf9, | 449 | 0xc4, 0x20, 0xea, 0xa8, 0xc3, 0x21, 0xb3, 0x1c, 0xcc, 0x55, 0xfd, 0x59, |
| 450 | 0xef, 0x7e, 0xb3, 0xa6, 0x53, 0xf1, 0x6d, 0x79, 0x04, 0xba, 0xf1, 0x51, | 450 | 0xaf, 0xf4, 0x62, 0xbe, 0xea, 0x34, 0xde, 0x19, 0x5b, 0x38, 0x66, 0xdd, |
| 451 | 0xe8, 0xc6, 0x4f, 0xdc, 0x92, 0xe7, 0x43, 0x79, 0xbb, 0x7f, 0x6a, 0x76, | 451 | 0x59, 0xcf, 0xd8, 0x45, 0xc2, 0xc9, 0xc1, 0x17, 0x0d, 0xba, 0x8c, 0x5f, |
| 452 | 0x65, 0xb0, 0x1c, 0xb1, 0xfb, 0x31, 0xa7, 0xe6, 0xb6, 0x8c, 0xf1, 0x25, | 452 | 0xb8, 0x38, 0x9f, 0xac, 0xe4, 0x47, 0x60, 0x93, 0x29, 0x99, 0xdc, 0x6b, |
| 453 | 0x4d, 0x2c, 0xb6, 0x19, 0xb3, 0x86, 0xf1, 0x56, 0xca, 0x74, 0x20, 0xd7, | 453 | 0x64, 0x32, 0xe4, 0x5d, 0xcd, 0x93, 0xb5, 0x4d, 0xda, 0x4e, 0x9e, 0xf2, |
| 454 | 0xfc, 0x72, 0x57, 0x44, 0x9d, 0x3f, 0x7b, 0xb4, 0x13, 0xbb, 0xfc, 0xbd, | 454 | 0xa7, 0x29, 0xc7, 0x8a, 0x35, 0xd8, 0x3f, 0xe9, 0xdf, 0xb3, 0xb2, 0x6a, |
| 455 | 0xd8, 0xa1, 0xed, 0xf3, 0x5b, 0x46, 0xc6, 0x76, 0x72, 0x99, 0x26, 0x32, | 455 | 0xce, 0xb0, 0xca, 0xd5, 0x28, 0xad, 0x89, 0xe5, 0x1c, 0xbe, 0x09, 0xff, |
| 456 | 0xe1, 0x99, 0x73, 0x37, 0x6c, 0x1e, 0xf7, 0x6d, 0x2a, 0x99, 0xc3, 0xde, | 456 | 0x35, 0x03, 0x1e, 0xf6, 0x20, 0x37, 0x1d, 0xc8, 0x45, 0xea, 0xb5, 0xaf, |
| 457 | 0x9e, 0xdf, 0xa0, 0x5d, 0x20, 0x9e, 0x6c, 0x63, 0x4c, 0x6f, 0xa6, 0x3d, | 457 | 0x76, 0x4b, 0x1f, 0xea, 0x2f, 0xc3, 0xe6, 0x79, 0x92, 0x7c, 0x7b, 0x5d, |
| 458 | 0xcb, 0xd8, 0x41, 0x37, 0xfc, 0x97, 0xd7, 0xe5, 0xdc, 0xca, 0x3f, 0x75, | 458 | 0xec, 0xc6, 0x1b, 0xc5, 0x47, 0x18, 0x1b, 0x19, 0x32, 0x77, 0xb3, 0xff, |
| 459 | 0xe8, 0xfd, 0xa4, 0x73, 0xcf, 0xec, 0x8b, 0xad, 0x71, 0x54, 0xbd, 0x46, | 459 | 0x0b, 0xf0, 0xea, 0x35, 0x42, 0xb0, 0xeb, 0xaf, 0xd6, 0xf6, 0xc1, 0x47, |
| 460 | 0x85, 0x4c, 0x37, 0x30, 0x0c, 0xfd, 0xa5, 0x6b, 0xca, 0x5f, 0x3a, 0xec, | 460 | 0x3c, 0x66, 0xe5, 0xa3, 0xac, 0x2b, 0xc9, 0x7a, 0x86, 0x76, 0x28, 0x63, |
| 461 | 0x3b, 0xb2, 0x19, 0x67, 0x9f, 0xaf, 0xcb, 0xb1, 0x95, 0xe1, 0x4e, 0xc6, | 461 | 0x24, 0x61, 0xd4, 0xef, 0xf6, 0x49, 0xa9, 0xff, 0x9f, 0x53, 0x77, 0x34, |
| 462 | 0x2b, 0x17, 0x97, 0x0f, 0xc8, 0x96, 0xd2, 0x65, 0x0f, 0xa3, 0x6e, 0x16, | 462 | 0x0b, 0x4a, 0xee, 0xfa, 0xf1, 0xe5, 0xe7, 0x24, 0xd9, 0xf4, 0xe3, 0x54, |
| 463 | 0x7b, 0x36, 0x08, 0x26, 0xfc, 0xb4, 0x7b, 0x5e, 0x46, 0x12, 0xe7, 0xc1, | 463 | 0x5c, 0x7f, 0xcb, 0x2a, 0x36, 0xff, 0x1c, 0xeb, 0x10, 0x06, 0xee, 0x45, |
| 464 | 0xd3, 0x3f, 0x43, 0x1b, 0xf8, 0xd4, 0x41, 0x11, 0xcf, 0xae, 0xc2, 0x6f, | 464 | 0xaf, 0x63, 0x2f, 0x4f, 0x98, 0x75, 0x1c, 0x2b, 0x74, 0x38, 0x86, 0xfd, |
| 465 | 0xbf, 0x21, 0xbc, 0x1e, 0x71, 0x4f, 0x43, 0x18, 0x72, 0x6e, 0xda, 0x7d, | 465 | 0xec, 0xef, 0x93, 0xbe, 0x00, 0xe4, 0xd9, 0x28, 0x9e, 0x6f, 0xa1, 0x6e, |
| 466 | 0x4b, 0x42, 0xdb, 0x45, 0x3b, 0xc5, 0x33, 0xeb, 0x3e, 0x29, 0xac, 0x6b, | 466 | 0xe7, 0xbd, 0x51, 0x15, 0x2b, 0x70, 0x18, 0xde, 0x33, 0xf4, 0x77, 0x03, |
| 467 | 0x5a, 0xe7, 0x41, 0xeb, 0xa9, 0x15, 0x8e, 0xc1, 0x79, 0x91, 0xde, 0x7f, | 467 | 0x32, 0xc7, 0x86, 0xfe, 0x6c, 0x54, 0x3f, 0x8e, 0x12, 0xe3, 0x9e, 0xbc, |
| 468 | 0xe2, 0x19, 0x07, 0xe6, 0xf2, 0x41, 0x60, 0x59, 0xe2, 0x28, 0x1d, 0x8b, | 468 | 0x2e, 0x73, 0xda, 0xdf, 0x86, 0x4d, 0x39, 0xac, 0x74, 0xf0, 0x4c, 0x9a, |
| 469 | 0x28, 0xa0, 0x8d, 0xc2, 0x5a, 0x3e, 0xcf, 0x2b, 0xc9, 0xc7, 0x2f, 0xc2, | 469 | 0xb1, 0x90, 0x33, 0x90, 0x8f, 0xf7, 0xa3, 0x8e, 0x7e, 0x53, 0x49, 0x9c, |
| 470 | 0x6f, 0x88, 0x43, 0x8e, 0xf1, 0x7c, 0xbd, 0x39, 0xe6, 0xcb, 0xfa, 0xfa, | 470 | 0xf7, 0x14, 0x8c, 0xbf, 0xaf, 0xcf, 0x25, 0xa0, 0xf4, 0xf5, 0x0a, 0xce, |
| 471 | 0x1c, 0xed, 0x92, 0xf2, 0x11, 0xf2, 0xc0, 0x85, 0x93, 0xa8, 0xcb, 0x78, | 471 | 0x83, 0x73, 0x50, 0xdf, 0xfd, 0x5c, 0x3e, 0xd5, 0x11, 0x47, 0xc9, 0xd9, |
| 472 | 0x67, 0x10, 0x1c, 0xf7, 0xe1, 0xc7, 0x3f, 0x45, 0xd9, 0xbb, 0x53, 0x4a, | 472 | 0xed, 0xb8, 0x41, 0x36, 0x0f, 0x1d, 0xbd, 0x56, 0x25, 0x0f, 0x66, 0x70, |
| 473 | 0xca, 0xe7, 0x20, 0x86, 0x65, 0xfe, 0xc6, 0x96, 0x1b, 0xc3, 0xfe, 0x9c, | 473 | 0xde, 0x59, 0xf9, 0xda, 0xe6, 0x3d, 0xc0, 0x75, 0x54, 0x02, 0x4f, 0xb5, |
| 474 | 0x86, 0x6d, 0xcb, 0xc3, 0xb6, 0x45, 0xee, 0x3e, 0x02, 0x3c, 0xab, 0xce, | 474 | 0x40, 0x3f, 0xd4, 0x0d, 0x63, 0x90, 0xc9, 0x8e, 0xb1, 0x25, 0xa2, 0x12, |
| 475 | 0xd9, 0x60, 0x3f, 0x39, 0xee, 0xc3, 0xd6, 0xdf, 0x67, 0x46, 0x81, 0x6f, | 475 | 0x7c, 0x6a, 0x48, 0xba, 0x2f, 0xc4, 0xa4, 0xeb, 0x02, 0xf3, 0x4f, 0x52, |
| 476 | 0x1f, 0x00, 0xbe, 0x65, 0x1e, 0x59, 0x1e, 0x18, 0x97, 0xf8, 0xd6, 0x95, | 476 | 0x71, 0xd8, 0xc5, 0xb4, 0x87, 0x78, 0x0f, 0xc9, 0xfb, 0xc3, 0xb8, 0xbe, |
| 477 | 0xbf, 0xda, 0xc8, 0x43, 0xb7, 0x4d, 0x74, 0x52, 0x17, 0x1f, 0xd9, 0xb6, | 477 | 0x8f, 0xe4, 0x5d, 0x24, 0xfa, 0xc1, 0x76, 0xef, 0xba, 0xe4, 0x00, 0x3f, |
| 478 | 0xd3, 0x45, 0x63, 0xc7, 0xf7, 0x49, 0x41, 0x9d, 0xbb, 0x15, 0x95, 0xbd, | 478 | 0x7a, 0xce, 0xdd, 0x63, 0xcb, 0x7a, 0x2c, 0xef, 0x31, 0x63, 0x25, 0x49, |
| 479 | 0x9f, 0x5f, 0x27, 0xae, 0x87, 0xed, 0x5f, 0x87, 0xef, 0x57, 0xa1, 0x8f, | 479 | 0x99, 0x7b, 0xcc, 0x14, 0xc6, 0xa6, 0x26, 0x5f, 0x6e, 0x8f, 0xe7, 0x58, |
| 480 | 0x96, 0xc3, 0xfd, 0x03, 0xb8, 0x7f, 0x08, 0xe5, 0x11, 0x94, 0xda, 0xf7, | 480 | 0xea, 0xc4, 0x28, 0xf8, 0xfb, 0xad, 0xd2, 0xf8, 0x22, 0xf9, 0xdc, 0xbf, |
| 481 | 0xb9, 0xb4, 0x1c, 0xe9, 0xd4, 0x31, 0xde, 0x44, 0x93, 0xff, 0x43, 0x39, | 481 | 0xeb, 0x1a, 0x32, 0x77, 0x5f, 0xec, 0x13, 0x37, 0xed, 0x49, 0xd3, 0xee, |
| 482 | 0x8c, 0x4f, 0xcd, 0x56, 0xc3, 0x38, 0xfd, 0x21, 0x39, 0xee, 0xeb, 0xb3, | 482 | 0x2a, 0x3d, 0x19, 0x6c, 0xc7, 0x5b, 0x78, 0x2f, 0x96, 0x38, 0xcf, 0xe4, |
| 483 | 0xf5, 0x09, 0xf8, 0xeb, 0x9d, 0xc0, 0x60, 0x0f, 0x3d, 0x0d, 0x9b, 0x71, | 483 | 0x11, 0x7d, 0x47, 0x46, 0x5f, 0x0a, 0xbe, 0xc5, 0x93, 0xb0, 0x31, 0xeb, |
| 484 | 0xdf, 0x21, 0xb1, 0xef, 0xb3, 0x64, 0x76, 0x14, 0x74, 0x8f, 0x0e, 0x42, | 484 | 0x2c, 0x7b, 0xa4, 0x5c, 0x3f, 0x25, 0xb3, 0xea, 0xf9, 0x43, 0xf2, 0xa8, |
| 485 | 0x3f, 0xf7, 0xc3, 0xdf, 0x56, 0x7e, 0xb0, 0xc1, 0x9c, 0xd4, 0xfb, 0x71, | 485 | 0x43, 0xdc, 0x9d, 0x91, 0xf4, 0x84, 0xb6, 0xc7, 0xc4, 0xd6, 0xb8, 0xed, |
| 486 | 0xf9, 0xf3, 0x8d, 0x10, 0x7b, 0xb6, 0x01, 0xa7, 0x32, 0x56, 0x98, 0x54, | 486 | 0x76, 0xcf, 0xc8, 0xd1, 0xb4, 0xd2, 0x21, 0xce, 0x23, 0xc0, 0x71, 0xb1, |
| 487 | 0xb8, 0xd9, 0xbe, 0x8d, 0xeb, 0xdf, 0x25, 0xf9, 0xdb, 0xc8, 0x53, 0x3e, | 487 | 0xd9, 0x45, 0x7a, 0x07, 0xec, 0x1e, 0x78, 0x2c, 0x2b, 0x17, 0x37, 0xd1, |
| 488 | 0x03, 0xa6, 0x51, 0xd7, 0x71, 0x49, 0x9f, 0xe1, 0xba, 0xb5, 0x9b, 0x18, | 488 | 0x17, 0x67, 0xf5, 0x08, 0xdf, 0xeb, 0xc0, 0x27, 0x63, 0x16, 0x4f, 0x11, |
| 489 | 0x2f, 0x6d, 0x06, 0xcb, 0xbf, 0xec, 0xdc, 0xc6, 0x96, 0x8c, 0x01, 0x59, | 489 | 0x9f, 0xdc, 0x3b, 0x75, 0x28, 0x71, 0x4a, 0x1c, 0x50, 0x2f, 0x33, 0xe6, |
| 490 | 0xe3, 0x9d, 0x3b, 0x79, 0x69, 0xa1, 0xdc, 0x87, 0xf9, 0x04, 0x94, 0xff, | 490 | 0x96, 0x98, 0xbc, 0x2d, 0xf4, 0x9b, 0x89, 0x33, 0xce, 0xe3, 0xef, 0x5b, |
| 491 | 0x4b, 0xa0, 0x9f, 0xf6, 0x9e, 0xb6, 0xc1, 0xb5, 0xa2, 0x07, 0x89, 0x05, | 491 | 0x8f, 0xb3, 0x37, 0x06, 0x85, 0xe6, 0x98, 0x7d, 0xc1, 0x11, 0xfb, 0x12, |
| 492 | 0x22, 0xd2, 0xe6, 0x71, 0x9f, 0xd2, 0x4e, 0x1d, 0xc1, 0x9c, 0x88, 0x0d, | 492 | 0xcb, 0x08, 0x4a, 0xb6, 0x01, 0xa4, 0x8d, 0xa4, 0x69, 0x73, 0x51, 0x07, |
| 493 | 0x3e, 0xdf, 0x2d, 0xdd, 0xc4, 0x07, 0x49, 0x3c, 0xbb, 0x8e, 0x7a, 0xbc, | 493 | 0x3b, 0xf2, 0x09, 0xf2, 0x96, 0xce, 0xff, 0x4b, 0x8e, 0x4c, 0xca, 0x95, |
| 494 | 0x67, 0x3d, 0xf8, 0x52, 0xcb, 0x62, 0x45, 0x0e, 0xce, 0x41, 0xae, 0x3d, | 494 | 0xb5, 0xbb, 0xf9, 0x2b, 0x70, 0x41, 0xdb, 0x25, 0x77, 0xf2, 0xd7, 0xe4, |
| 495 | 0x5c, 0x1f, 0x47, 0x39, 0x8c, 0xf2, 0x71, 0x94, 0xd4, 0x4f, 0x57, 0x65, | 495 | 0x3f, 0x80, 0xbf, 0xb8, 0xc6, 0x19, 0x95, 0xbb, 0xf0, 0xa9, 0x68, 0x22, |
| 496 | 0x56, 0xc7, 0x7f, 0x14, 0x0e, 0xa1, 0xed, 0x9c, 0xf6, 0xa9, 0x53, 0x4f, | 496 | 0x9e, 0xd5, 0xfe, 0x85, 0x93, 0xb2, 0x47, 0xe2, 0xb4, 0x47, 0x1b, 0x4f, |
| 497 | 0x8a, 0x3d, 0xf6, 0x41, 0x3c, 0xa3, 0x1f, 0x8f, 0x91, 0xee, 0xff, 0x82, | 497 | 0x8e, 0xe3, 0xdc, 0x5b, 0xf2, 0x44, 0xda, 0xa7, 0x2f, 0xe6, 0xf8, 0xb5, |
| 498 | 0x89, 0x3f, 0x6d, 0xc7, 0xac, 0x8c, 0x4e, 0x5e, 0x51, 0x31, 0xfc, 0xf5, | 498 | 0xa4, 0x06, 0xfd, 0x5c, 0x76, 0x2d, 0x59, 0x70, 0xcf, 0x28, 0x7b, 0xf2, |
| 499 | 0xa7, 0xe8, 0x23, 0xff, 0x54, 0x1e, 0xbd, 0x29, 0xb6, 0xb7, 0x1d, 0xcb, | 499 | 0xc3, 0xd1, 0x96, 0x9c, 0x4e, 0xeb, 0xb1, 0x0b, 0x32, 0x62, 0x68, 0x5c, |
| 500 | 0x1a, 0x2f, 0x28, 0x5d, 0x4c, 0x7e, 0x40, 0x0f, 0xbb, 0x19, 0xf9, 0xfa, | 500 | 0xf9, 0x6b, 0x90, 0xbf, 0x3c, 0x2f, 0xbe, 0xdf, 0x23, 0xe9, 0x81, 0x33, |
| 501 | 0x46, 0x0f, 0xf4, 0x5b, 0x5c, 0xde, 0x58, 0x09, 0x80, 0xd5, 0xb9, 0x37, | 501 | 0x92, 0x9c, 0xd8, 0x22, 0xbe, 0x70, 0x0e, 0x94, 0x3b, 0xbf, 0x36, 0x16, |
| 502 | 0x47, 0x60, 0x33, 0x5d, 0x83, 0x03, 0xe2, 0xf2, 0x2f, 0x90, 0xf3, 0x7f, | 502 | 0xa6, 0x72, 0x9e, 0xf2, 0x15, 0xc2, 0xb4, 0x0f, 0x74, 0x9b, 0x85, 0xbf, |
| 503 | 0xae, 0x24, 0xe4, 0xcd, 0x4a, 0x10, 0x5c, 0xf3, 0xd3, 0xfe, 0x61, 0x91, | 503 | 0xb4, 0x13, 0x0f, 0x4b, 0x8d, 0x94, 0x5a, 0x21, 0xac, 0x5d, 0x84, 0x3f, |
| 504 | 0xbb, 0xdb, 0x74, 0x0e, 0x00, 0x6a, 0xe8, 0x73, 0xfb, 0x79, 0x75, 0x76, | 504 | 0xf1, 0xe1, 0xa8, 0x1b, 0x1f, 0xb6, 0x47, 0x62, 0x67, 0xa5, 0xa6, 0x60, |
| 505 | 0x8f, 0x7a, 0xd0, 0x3b, 0x6f, 0x36, 0x7e, 0x01, 0xbe, 0xea, 0x3e, 0x5b, | 505 | 0xfd, 0x44, 0x5a, 0xd3, 0xcb, 0x62, 0x66, 0xaf, 0x18, 0x55, 0x67, 0x8c, |
| 506 | 0xdb, 0x6e, 0xe9, 0xb6, 0x3c, 0xfb, 0x4f, 0x6c, 0x4a, 0xda, 0xe4, 0x10, | 506 | 0x9a, 0x73, 0x6d, 0x59, 0x9f, 0x6c, 0xea, 0x78, 0xd4, 0x4e, 0x9c, 0x7a, |
| 507 | 0xa4, 0xd1, 0x36, 0x3d, 0xbc, 0xb6, 0xdd, 0x9e, 0x6d, 0x33, 0xca, 0x5e, | 507 | 0x47, 0xe6, 0x04, 0x8d, 0x2c, 0x28, 0xd7, 0xde, 0x25, 0xbe, 0xcc, 0xa9, |
| 508 | 0x94, 0xd6, 0x7b, 0xa5, 0xfe, 0x17, 0xdc, 0x2b, 0xf0, 0x63, 0xd5, 0x99, | 508 | 0x65, 0x70, 0x56, 0xcb, 0x3c, 0xa3, 0xb8, 0xb9, 0x47, 0x0a, 0x77, 0xd8, |
| 509 | 0x11, 0x4b, 0x9e, 0x55, 0xb0, 0x4e, 0xd2, 0xbc, 0x1f, 0x30, 0xef, 0x3d, | 509 | 0xca, 0x21, 0xe6, 0xfd, 0xc5, 0xb3, 0xf6, 0x32, 0x64, 0xc3, 0x93, 0x12, |
| 510 | 0x85, 0x5f, 0x9d, 0xed, 0x18, 0x20, 0x7c, 0xdb, 0xe5, 0xd4, 0x69, 0x65, | 510 | 0x72, 0xfd, 0xb9, 0x98, 0xd3, 0x19, 0x33, 0xf7, 0x11, 0xfb, 0x19, 0xb7, |
| 511 | 0x47, 0x18, 0xb7, 0x5d, 0xa6, 0x7f, 0x4f, 0x5d, 0x3e, 0x69, 0xec, 0x09, | 511 | 0x42, 0x9f, 0x07, 0xd1, 0x7e, 0x3f, 0xfa, 0x51, 0x57, 0xf2, 0x1e, 0x80, |
| 512 | 0x7c, 0x8f, 0xda, 0x71, 0x99, 0x51, 0xd7, 0x9f, 0x90, 0x47, 0x5c, 0xf2, | 512 | 0x7a, 0x93, 0xb1, 0xf6, 0x01, 0xf4, 0xeb, 0x91, 0x7c, 0x7d, 0xbf, 0xa9, |
| 513 | 0xee, 0xa4, 0xf8, 0x63, 0x1a, 0x4b, 0x89, 0x89, 0x09, 0x76, 0x78, 0x27, | 513 | 0xf3, 0xe7, 0x38, 0xdc, 0xd1, 0xdf, 0xaf, 0xd3, 0xf7, 0x07, 0x59, 0x1b, |
| 514 | 0xe1, 0x9b, 0x29, 0x7b, 0xec, 0x7e, 0x4c, 0xc8, 0xe3, 0x36, 0xda, 0x8f, | 514 | 0x32, 0x7e, 0x99, 0x7d, 0xe3, 0xed, 0x3b, 0x10, 0xbb, 0xf1, 0xa0, 0xa3, |
| 515 | 0x9c, 0x6d, 0x01, 0x83, 0x3d, 0x99, 0x91, 0xe7, 0x36, 0x50, 0x17, 0xeb, | 515 | 0xc7, 0xb3, 0x1f, 0x65, 0x3e, 0x74, 0x4b, 0x15, 0xfa, 0xa6, 0x3a, 0xc5, |
| 516 | 0xf5, 0x31, 0xc1, 0xfd, 0xb3, 0xb8, 0x67, 0x1c, 0xed, 0xe9, 0xb8, 0x44, | 516 | 0xbb, 0x40, 0x63, 0x57, 0xcc, 0x9a, 0x7c, 0x16, 0xda, 0x17, 0xaf, 0x19, |
| 517 | 0x9e, 0xee, 0x97, 0xf6, 0x33, 0xc4, 0x29, 0xe4, 0x69, 0x42, 0xda, 0xce, | 517 | 0x7d, 0xbb, 0x93, 0x8b, 0x7a, 0x24, 0xe3, 0xe7, 0xf5, 0x30, 0x17, 0x91, |
| 518 | 0x10, 0x2f, 0x33, 0xb6, 0x9c, 0x1a, 0xbf, 0x21, 0x8c, 0xe5, 0xa4, 0xfc, | 518 | 0xeb, 0xf2, 0x3c, 0x40, 0x53, 0x9b, 0xda, 0x96, 0xb6, 0x33, 0x5d, 0xbc, |
| 519 | 0x2b, 0xf8, 0x6d, 0x61, 0xde, 0xed, 0xf0, 0xc3, 0xdb, 0x2e, 0xe8, 0x76, | 519 | 0x6b, 0x83, 0x7e, 0xd7, 0xfa, 0xbf, 0x01, 0xfd, 0xbf, 0xb1, 0x02, 0x9d, |
| 520 | 0xf6, 0xb9, 0x3e, 0x00, 0xc3, 0x98, 0xd8, 0xf0, 0x59, 0xec, 0x0b, 0x2c, | 520 | 0xdf, 0x47, 0xdd, 0xaf, 0xf3, 0x4f, 0xec, 0x76, 0xbe, 0x8f, 0x7f, 0x8f, |
| 521 | 0xbb, 0x50, 0xf2, 0x1d, 0x48, 0x3a, 0x37, 0x60, 0xde, 0x41, 0x37, 0x5e, | 521 | 0xbc, 0xa5, 0xee, 0xf1, 0x7a, 0x3c, 0xca, 0xf4, 0x8c, 0xfc, 0x39, 0x6c, |
| 522 | 0xe0, 0xf8, 0xb0, 0x8f, 0xbe, 0xce, 0x17, 0x1d, 0x18, 0xf2, 0xe5, 0xd2, | 522 | 0xad, 0x67, 0x36, 0x27, 0xb1, 0x5e, 0x1a, 0x7e, 0xdd, 0x38, 0xfc, 0xba, |
| 523 | 0x1a, 0x65, 0x93, 0x71, 0x74, 0x62, 0x97, 0x57, 0xc5, 0x5e, 0xca, 0x48, | 523 | 0x51, 0xf8, 0x75, 0x2e, 0x74, 0xe1, 0x90, 0xca, 0x27, 0xa3, 0xde, 0x9f, |
| 524 | 0xe4, 0x4c, 0x06, 0x72, 0xe8, 0xc3, 0xee, 0x12, 0xf3, 0xd1, 0xd6, 0xe1, | 524 | 0x38, 0x24, 0xd6, 0xd7, 0x32, 0x62, 0x1d, 0xbc, 0x00, 0x1b, 0x61, 0xe9, |
| 525 | 0x39, 0xf0, 0x56, 0xfd, 0x29, 0xce, 0xe9, 0xaa, 0xd8, 0xf5, 0x5f, 0x65, | 525 | 0x25, 0xd0, 0x7f, 0xe2, 0x79, 0x11, 0xf2, 0x04, 0xf9, 0xef, 0x31, 0xc9, |
| 526 | 0xc3, 0xc2, 0x7d, 0xc1, 0x31, 0x4e, 0xc2, 0xfe, 0x46, 0xe5, 0x73, 0x71, | 526 | 0xc6, 0x86, 0xe4, 0xf3, 0x9b, 0x6c, 0x23, 0x3d, 0x65, 0xe5, 0x15, 0xf7, |
| 527 | 0xca, 0x8a, 0x96, 0xbd, 0xb4, 0x3d, 0xa4, 0x64, 0xb5, 0x48, 0xbb, 0xfc, | 527 | 0x25, 0xc5, 0x67, 0x17, 0x6b, 0xd7, 0x25, 0xf4, 0x84, 0x96, 0xb5, 0x3f, |
| 528 | 0xd4, 0xed, 0x7b, 0xe0, 0xa7, 0x9d, 0x2e, 0x6f, 0xcb, 0x18, 0xf3, 0x42, | 528 | 0x80, 0x3d, 0xd5, 0x48, 0x6b, 0xda, 0xbb, 0x2d, 0xa4, 0x3d, 0xe8, 0xa7, |
| 529 | 0x03, 0xa9, 0x02, 0xef, 0xcc, 0x7b, 0x96, 0x2c, 0x78, 0x27, 0x15, 0x1e, | 529 | 0x35, 0xca, 0xd8, 0x9b, 0x12, 0xbd, 0xf0, 0x92, 0xbc, 0xf9, 0x82, 0xab, |
| 530 | 0x7c, 0x14, 0xed, 0x4f, 0x98, 0xf6, 0x0b, 0x32, 0x64, 0x64, 0x5d, 0xc5, | 530 | 0xe2, 0x12, 0x6b, 0x4f, 0x2a, 0xdd, 0x07, 0xb9, 0x16, 0x95, 0xf5, 0xcd, |
| 531 | 0x11, 0xa0, 0xc7, 0xb8, 0x66, 0xbc, 0xff, 0x2d, 0xf1, 0x7b, 0xb9, 0x9e, | 531 | 0xdf, 0x91, 0x4f, 0x39, 0x89, 0x2b, 0x94, 0x99, 0x94, 0x5d, 0x5a, 0xa7, |
| 532 | 0x27, 0x65, 0x60, 0x4c, 0xe3, 0x90, 0x92, 0x4d, 0x1c, 0xf2, 0xae, 0x71, | 532 | 0x41, 0xc6, 0x56, 0x12, 0xa5, 0x32, 0x6c, 0xef, 0x2b, 0xf6, 0x98, 0x64, |
| 533 | 0x5a, 0x95, 0xcb, 0x57, 0xa8, 0xd0, 0xce, 0xec, 0x85, 0xfc, 0xc2, 0x27, | 533 | 0x83, 0xa5, 0x56, 0x3f, 0xfd, 0x82, 0x9a, 0xeb, 0x24, 0x6d, 0x9e, 0xef, |
| 534 | 0xda, 0x08, 0x63, 0xb5, 0x6a, 0x5f, 0x25, 0x06, 0x6c, 0x4b, 0xbc, 0xa1, | 534 | 0xbd, 0xb0, 0xad, 0x13, 0x75, 0x25, 0xa3, 0xa8, 0x27, 0x33, 0xd4, 0x9b, |
| 535 | 0xa1, 0xe1, 0x12, 0xf0, 0xc9, 0x3c, 0x7c, 0x5e, 0xd2, 0xb1, 0x00, 0x3b, | 535 | 0xd4, 0x7d, 0xd4, 0x3f, 0x8c, 0x97, 0xe3, 0x79, 0x8d, 0xba, 0xe9, 0xef, |
| 536 | 0xb7, 0xe6, 0xff, 0x4b, 0x70, 0x22, 0x9e, 0x3a, 0x3d, 0xf3, 0xae, 0xf1, | 536 | 0xd4, 0x9d, 0x67, 0x71, 0xc6, 0x91, 0xfa, 0x1a, 0xe5, 0x13, 0xf4, 0xfc, |
| 537 | 0xfb, 0x30, 0x6e, 0xdf, 0x7c, 0x9e, 0xb2, 0x69, 0xfd, 0x61, 0xe3, 0x88, | 537 | 0x93, 0xb4, 0x73, 0x45, 0xd1, 0x3f, 0xed, 0xdc, 0x47, 0xc5, 0xb7, 0x71, |
| 538 | 0xd2, 0x91, 0x37, 0xe3, 0xae, 0x30, 0x7e, 0x3f, 0x7d, 0x53, 0x1c, 0xb5, | 538 | 0xd9, 0xb6, 0xdb, 0xc6, 0xfd, 0x83, 0x7d, 0xd2, 0x1b, 0x05, 0x7e, 0xc8, |
| 539 | 0xd4, 0x08, 0x73, 0xf0, 0x42, 0x3d, 0x7f, 0x1a, 0xba, 0x3a, 0x22, 0x37, | 539 | 0xff, 0x3b, 0x36, 0x60, 0x2e, 0x73, 0x13, 0xb6, 0x26, 0xf7, 0x61, 0xc9, |
| 540 | 0x80, 0x41, 0x27, 0xc0, 0xbb, 0x73, 0x6b, 0x65, 0xeb, 0x4a, 0x45, 0xd4, | 540 | 0xa0, 0x7b, 0x1d, 0x74, 0xc4, 0xb5, 0x6f, 0xb6, 0x3e, 0x1c, 0xe5, 0x1e, |
| 541 | 0x7d, 0xc1, 0x67, 0x4e, 0xde, 0x47, 0xc0, 0x3b, 0xd8, 0x98, 0x0d, 0xc7, | 541 | 0x2c, 0x65, 0x23, 0x6c, 0x0f, 0xfe, 0xa6, 0x3b, 0x0a, 0xca, 0x88, 0x7d, |
| 542 | 0x9c, 0x29, 0x39, 0x78, 0x66, 0x2b, 0x9f, 0xb9, 0xa4, 0x74, 0xf3, 0xe1, | 542 | 0xb0, 0xcd, 0x6d, 0x43, 0xb3, 0x9f, 0x34, 0xbe, 0x04, 0xf8, 0x79, 0x95, |
| 543 | 0x2e, 0x9e, 0xb9, 0x5c, 0x5a, 0xfe, 0x28, 0xee, 0x79, 0xf6, 0x71, 0xa4, | 543 | 0x7b, 0x28, 0xf3, 0x4e, 0x04, 0x36, 0xd7, 0x22, 0x63, 0x52, 0x6a, 0xdd, |
| 544 | 0xe5, 0xf9, 0x66, 0x4f, 0x54, 0x63, 0x37, 0xf0, 0x5d, 0xf3, 0xcd, 0x01, | 544 | 0xf7, 0x67, 0x22, 0x92, 0xbc, 0xd0, 0x25, 0xa9, 0xa7, 0xec, 0x41, 0x9d, |
| 545 | 0xbf, 0x8b, 0x8c, 0xe7, 0x35, 0x88, 0x83, 0x3b, 0x0d, 0x0e, 0x26, 0xce, | 545 | 0xb7, 0xf8, 0x30, 0x74, 0xcf, 0x41, 0xb4, 0x1f, 0x90, 0xb2, 0x13, 0x85, |
| 546 | 0xc2, 0x7a, 0x6d, 0x30, 0x0e, 0x43, 0xac, 0x15, 0x57, 0x7e, 0xa1, 0xc2, | 546 | 0x3f, 0x33, 0x2a, 0xe5, 0xd1, 0x30, 0x78, 0xe6, 0x01, 0xde, 0x75, 0x28, |
| 547 | 0x5e, 0xfe, 0x31, 0x93, 0x7f, 0x71, 0xab, 0x5c, 0xcd, 0x56, 0x42, 0x3c, | 547 | 0x38, 0xca, 0xce, 0x30, 0xca, 0x6e, 0x94, 0xf7, 0x48, 0xf9, 0xc9, 0x4b, |
| 548 | 0xd7, 0x2c, 0x57, 0xee, 0x6f, 0x20, 0x57, 0x13, 0x5d, 0x3a, 0xdf, 0x81, | 548 | 0xfb, 0xb4, 0x2d, 0xbb, 0xfb, 0xfd, 0x9f, 0x76, 0xab, 0xd8, 0xb9, 0xf5, |
| 549 | 0x36, 0xcd, 0x92, 0x37, 0xaa, 0x7b, 0x64, 0xab, 0xfa, 0x20, 0x70, 0xb4, | 549 | 0x8e, 0x88, 0xb9, 0x47, 0xff, 0x2d, 0x60, 0xf7, 0xfb, 0x12, 0x9e, 0x90, |
| 550 | 0xca, 0xfb, 0x90, 0x2d, 0xac, 0xc5, 0x83, 0x95, 0x49, 0x99, 0xa8, 0xc6, | 550 | 0xb8, 0x4f, 0x44, 0x64, 0x18, 0xb2, 0x77, 0x04, 0x7a, 0xeb, 0xe0, 0x85, |
| 551 | 0xe4, 0x5a, 0xd5, 0x7e, 0xa0, 0x5d, 0x18, 0x07, 0x27, 0x36, 0xf9, 0x1b, | 551 | 0x21, 0x19, 0xbd, 0x10, 0x97, 0xfb, 0x2e, 0xf8, 0xf6, 0xc0, 0xf2, 0x74, |
| 552 | 0xa5, 0xdf, 0x7e, 0xe0, 0xef, 0xb4, 0xe7, 0xb9, 0xca, 0x0d, 0xb4, 0x9f, | 552 | 0xca, 0xc4, 0x71, 0xdd, 0xdf, 0x32, 0x8e, 0x7b, 0x9f, 0x9a, 0x1f, 0x30, |
| 553 | 0xad, 0xde, 0x2b, 0x25, 0xd5, 0xbe, 0x7e, 0xcb, 0x18, 0x51, 0x33, 0x46, | 553 | 0xae, 0x41, 0x1e, 0x46, 0x3f, 0xa7, 0xec, 0x06, 0x8d, 0xfb, 0x1f, 0xc9, |
| 554 | 0xbd, 0x7a, 0x97, 0x89, 0xdf, 0x95, 0xe5, 0x12, 0xb0, 0xaf, 0x7d, 0x96, | 554 | 0x91, 0x95, 0x90, 0x1c, 0x55, 0xbc, 0xe8, 0xdb, 0xf0, 0xff, 0x13, 0xfb, |
| 555 | 0xf3, 0xbd, 0xc3, 0xe4, 0x77, 0xc5, 0x9a, 0xfc, 0x91, 0xa8, 0xf1, 0x47, | 555 | 0x48, 0x80, 0x47, 0x4e, 0x18, 0xbf, 0xb3, 0x17, 0x78, 0x25, 0x0e, 0xa1, |
| 556 | 0x7e, 0x06, 0x3d, 0xfe, 0x94, 0x44, 0xbd, 0xb0, 0x2f, 0xe6, 0x6a, 0x27, | 556 | 0xeb, 0xe0, 0x8b, 0x32, 0x3f, 0xb5, 0x98, 0xee, 0x1c, 0xcf, 0xb1, 0x3f, |
| 557 | 0x4c, 0x6e, 0xc7, 0x5e, 0xf4, 0x75, 0x10, 0xef, 0xee, 0xc3, 0xef, 0x49, | 557 | 0xc5, 0x98, 0x2c, 0x6c, 0x0b, 0xb6, 0xcb, 0x60, 0x40, 0xf6, 0x6a, 0x7f, |
| 558 | 0xd4, 0xa3, 0xbd, 0xe2, 0xd9, 0x28, 0x31, 0x02, 0xcf, 0xeb, 0x7a, 0x51, | 558 | 0x1f, 0xda, 0x29, 0x73, 0x8e, 0x42, 0xe6, 0xec, 0x6e, 0xcf, 0xa1, 0x8d, |
| 559 | 0xaf, 0x03, 0x58, 0x72, 0xbf, 0x79, 0x16, 0xf6, 0x11, 0xd6, 0x0d, 0xef, | 559 | 0xeb, 0xdf, 0x83, 0x75, 0xc9, 0x8f, 0x5c, 0xd7, 0xc7, 0x09, 0xcf, 0x75, |
| 560 | 0x9b, 0xcf, 0x53, 0x59, 0x2f, 0xd9, 0x74, 0x9e, 0x0a, 0x45, 0xa5, 0xda, | 560 | 0x10, 0xfe, 0x07, 0xcf, 0xb5, 0x4b, 0x0a, 0x0e, 0x73, 0x37, 0x59, 0xf7, |
| 561 | 0x86, 0xb6, 0x36, 0xb4, 0x51, 0xc9, 0x26, 0x1b, 0xf5, 0x56, 0x53, 0x9e, | 561 | 0x16, 0x73, 0xd6, 0x13, 0xe6, 0xac, 0x05, 0xb6, 0x31, 0xed, 0x2d, 0x9d, |
| 562 | 0xa7, 0xc6, 0x61, 0x57, 0x33, 0x9c, 0x6b, 0x5f, 0x53, 0x0e, 0x4a, 0xaa, | 562 | 0xaf, 0x50, 0x88, 0x26, 0x4a, 0x22, 0x71, 0x15, 0xbf, 0x5b, 0xaf, 0xf8, |
| 563 | 0x4c, 0xfb, 0xc8, 0x78, 0xdf, 0x7a, 0x25, 0xb4, 0x1f, 0xb9, 0x1e, 0x9e, | 563 | 0xf6, 0x49, 0xb6, 0x9f, 0xf7, 0x10, 0x8b, 0x69, 0x15, 0x5b, 0x8b, 0x07, |
| 564 | 0x5b, 0x2c, 0xfa, 0x2a, 0x16, 0x97, 0x8c, 0x64, 0x69, 0x7f, 0xfc, 0xd8, | 564 | 0x3c, 0xda, 0x37, 0xe9, 0x30, 0xf3, 0x92, 0x1b, 0x2b, 0xbc, 0x93, 0x0c, |
| 565 | 0x16, 0x70, 0x65, 0x5d, 0x9d, 0xeb, 0x47, 0xf0, 0x83, 0x5d, 0x76, 0x2c, | 565 | 0xe0, 0x07, 0x3c, 0x07, 0x2d, 0x71, 0x5c, 0xd6, 0x95, 0xb4, 0x6e, 0x9b, |
| 566 | 0x71, 0x3d, 0x3e, 0x2b, 0x1b, 0xbd, 0x03, 0x5d, 0x6e, 0xab, 0x3a, 0xc9, | 566 | 0x01, 0xff, 0xda, 0xaa, 0x4f, 0x3c, 0x97, 0x1e, 0x34, 0xef, 0x31, 0x59, |
| 567 | 0xbc, 0xdf, 0x67, 0xee, 0x13, 0xb2, 0x56, 0xf9, 0x50, 0xbf, 0x9d, 0xfd, | 567 | 0xab, 0xbc, 0x63, 0xc8, 0xf6, 0xfe, 0xf6, 0x9e, 0x5c, 0xa6, 0x9f, 0xf7, |
| 568 | 0x5f, 0xb7, 0xe7, 0x33, 0x3d, 0x3c, 0x7f, 0xc2, 0x33, 0xe2, 0xf5, 0xd7, | 568 | 0x49, 0xa8, 0x23, 0x9f, 0xbc, 0xa4, 0x72, 0x15, 0xb5, 0xef, 0x10, 0xe4, |
| 569 | 0x54, 0x4e, 0xa3, 0xc6, 0x46, 0x0e, 0xcf, 0x2f, 0x81, 0x73, 0x7e, 0x04, | 569 | 0x3d, 0x24, 0xf6, 0xf9, 0x53, 0xd0, 0xf5, 0xee, 0x3d, 0x77, 0x99, 0x3d, |
| 570 | 0x9e, 0x84, 0xb8, 0xfb, 0x75, 0x99, 0x50, 0x98, 0xaa, 0x0d, 0xb6, 0xd2, | 570 | 0x73, 0xbf, 0xc4, 0x37, 0xc7, 0xfb, 0x7a, 0x8e, 0x38, 0x0f, 0x77, 0xf8, |
| 571 | 0x60, 0xaa, 0xee, 0x14, 0x30, 0x15, 0xdb, 0xb7, 0xe2, 0x40, 0xbd, 0x97, | 571 | 0x1b, 0x91, 0x81, 0x9d, 0xfb, 0x73, 0xca, 0x42, 0xca, 0xbf, 0x49, 0x95, |
| 572 | 0x22, 0x59, 0x1d, 0x57, 0x6d, 0x89, 0x15, 0x5b, 0x8f, 0x64, 0xc4, 0x3a, | 572 | 0xef, 0x72, 0xcb, 0x86, 0x1c, 0xaa, 0x42, 0x2e, 0x55, 0x21, 0x8b, 0xaa, |
| 573 | 0x81, 0x1f, 0x65, 0xd4, 0x5e, 0x7a, 0x4d, 0xbc, 0xa5, 0x54, 0x95, 0xf9, | 573 | 0x90, 0x45, 0xb0, 0x41, 0x9e, 0x85, 0x5c, 0x7d, 0x06, 0xbe, 0xda, 0xd7, |
| 574 | 0xb1, 0x0b, 0x1b, 0x3c, 0xc7, 0x03, 0x16, 0x4b, 0x50, 0x96, 0xf9, 0x6e, | 574 | 0xab, 0xbe, 0xfd, 0x9e, 0x85, 0x1c, 0x53, 0x36, 0x1d, 0xed, 0x9f, 0x9a, |
| 575 | 0x1a, 0x63, 0xbc, 0x06, 0xff, 0x73, 0x0f, 0xf8, 0x6d, 0x1b, 0x1e, 0xf9, | 575 | 0xed, 0x75, 0xff, 0xd6, 0xf9, 0x50, 0x01, 0xcf, 0x1f, 0xd7, 0x2d, 0x45, |
| 576 | 0x26, 0x46, 0x11, 0x63, 0x2c, 0x18, 0x7b, 0x71, 0x5e, 0x61, 0x89, 0x52, | 576 | 0x35, 0x26, 0x2e, 0xf3, 0xcd, 0xbd, 0xfa, 0x72, 0x7f, 0xa1, 0x8e, 0xfd, |
| 577 | 0x7c, 0x11, 0xe5, 0x0f, 0x0d, 0x76, 0x78, 0xbd, 0x2b, 0x3c, 0xb7, 0x2f, | 577 | 0x9a, 0xbb, 0x7e, 0x15, 0x8b, 0xa0, 0x0c, 0xfe, 0x4d, 0x3c, 0xd0, 0x99, |
| 578 | 0xc5, 0xbf, 0x84, 0xe7, 0xaf, 0xc3, 0x1f, 0x8c, 0x4a, 0x9b, 0x5a, 0xb3, | 578 | 0xa7, 0xc9, 0x33, 0x56, 0x39, 0x42, 0x38, 0x53, 0xe2, 0x9d, 0x76, 0x61, |
| 579 | 0x10, 0x3b, 0xff, 0x3d, 0xea, 0x90, 0xfe, 0x3b, 0x4d, 0x7e, 0x0d, 0xf3, | 579 | 0x59, 0x16, 0x26, 0x17, 0xa5, 0x3c, 0x69, 0xc9, 0xdc, 0x38, 0xce, 0x68, |
| 580 | 0x06, 0xd8, 0x1f, 0xec, 0x96, 0xca, 0xe1, 0xca, 0xa1, 0x64, 0x3b, 0xb6, | 580 | 0x7c, 0x18, 0x3a, 0x32, 0x0d, 0x5d, 0xbb, 0x80, 0x79, 0xc8, 0x7f, 0x0f, |
| 581 | 0x79, 0x05, 0x75, 0x73, 0x98, 0x37, 0x9f, 0x4b, 0x5f, 0x44, 0x9a, 0x9f, | 581 | 0xe2, 0x5c, 0x1c, 0x73, 0x27, 0xfe, 0xa5, 0xe9, 0x5c, 0x4d, 0xac, 0x6b, |
| 582 | 0x7f, 0x14, 0xcf, 0x29, 0x87, 0xef, 0x37, 0x72, 0x18, 0xbe, 0xcb, 0x1b, | 582 | 0x2a, 0x47, 0x7c, 0x79, 0xfa, 0xd5, 0x95, 0x87, 0x61, 0x3f, 0x4d, 0xc8, |
| 583 | 0x3e, 0xdd, 0x8e, 0x31, 0xc8, 0xab, 0x66, 0xba, 0x38, 0x9f, 0x70, 0xcd, | 583 | 0xd5, 0xc9, 0x87, 0x65, 0xfb, 0x8e, 0xf1, 0x38, 0x07, 0xc8, 0xe1, 0xcf, |
| 584 | 0xdb, 0x4c, 0xae, 0x01, 0x9f, 0xbd, 0xdf, 0x3c, 0x73, 0xcc, 0x1c, 0x3f, | 584 | 0x6f, 0xf2, 0x1e, 0xb4, 0x4b, 0x66, 0xa3, 0x8c, 0x81, 0xc1, 0xc6, 0x71, |
| 585 | 0xde, 0x65, 0xb0, 0x04, 0x76, 0x7b, 0xb8, 0x1f, 0x49, 0x67, 0xac, 0x09, | 585 | 0xfb, 0x65, 0x5b, 0xf9, 0xa1, 0x07, 0xe4, 0xb6, 0xa2, 0x2d, 0xd6, 0x85, |
| 586 | 0xb3, 0xfe, 0x61, 0xef, 0x4e, 0x1e, 0x26, 0x65, 0xce, 0x53, 0xb1, 0x23, | 586 | 0x50, 0xa7, 0xed, 0xd1, 0xb5, 0x8a, 0x6f, 0x5b, 0x28, 0x1c, 0x99, 0x98, |
| 587 | 0xe6, 0x8f, 0xe5, 0x6c, 0x9d, 0xb3, 0xf1, 0x8d, 0x9b, 0xe2, 0xdd, 0x4a, | 587 | 0x1f, 0xf5, 0x0d, 0xe3, 0x49, 0x8c, 0x2f, 0xad, 0x45, 0x76, 0x64, 0x01, |
| 588 | 0xd7, 0xf2, 0x0c, 0xa4, 0x6a, 0x67, 0xdb, 0x7f, 0xed, 0xbc, 0xbb, 0x48, | 588 | 0x4b, 0xff, 0x5c, 0x3b, 0xfd, 0xe3, 0xbf, 0x8e, 0xe8, 0x6f, 0x0b, 0xba, |
| 589 | 0x36, 0x6c, 0x07, 0x9c, 0xa6, 0xda, 0x24, 0x65, 0xae, 0xf1, 0x6e, 0x39, | 589 | 0xa4, 0x1c, 0x2d, 0xb5, 0xca, 0x6e, 0xd0, 0xba, 0xda, 0xce, 0x69, 0xf5, |
| 590 | 0x7a, 0xca, 0xbf, 0x30, 0x79, 0x10, 0xfb, 0x55, 0x1e, 0x04, 0xf5, 0xe2, | 590 | 0xdb, 0x48, 0xcb, 0x36, 0x60, 0x25, 0x1d, 0x24, 0x55, 0xee, 0xce, 0x77, |
| 591 | 0x5a, 0x35, 0x02, 0x5e, 0xf7, 0x31, 0x37, 0x0a, 0x7e, 0x4c, 0x0c, 0x73, | 591 | 0xaa, 0x03, 0xfb, 0xf4, 0x37, 0x0a, 0x01, 0x8c, 0xe3, 0xfb, 0x89, 0x88, |
| 592 | 0x45, 0x5f, 0xf1, 0xf7, 0xab, 0x5c, 0xa9, 0x88, 0x17, 0xe6, 0xf5, 0x72, | 592 | 0x7e, 0xf7, 0xef, 0xdd, 0xdf, 0x86, 0xbe, 0x31, 0x25, 0xaf, 0xd6, 0x6a, |
| 593 | 0x1f, 0xde, 0xa1, 0xde, 0x7f, 0x7d, 0xa5, 0x9d, 0xf9, 0xaa, 0x28, 0xb9, | 593 | 0x01, 0xf0, 0xf0, 0x20, 0x9e, 0x5f, 0x44, 0x9f, 0x30, 0xce, 0x86, 0xb1, |
| 594 | 0x47, 0x7f, 0x09, 0xfd, 0x18, 0x95, 0x42, 0xd5, 0x03, 0xfe, 0x89, 0x52, | 594 | 0xa4, 0xb7, 0xa8, 0xfc, 0x9b, 0x80, 0xeb, 0xe7, 0xf5, 0x52, 0x77, 0xff, |
| 595 | 0x2e, 0xf1, 0x7c, 0x3f, 0xfc, 0x61, 0xc1, 0x3e, 0x69, 0x83, 0x6f, 0xa2, | 595 | 0x67, 0xd5, 0xfe, 0xf4, 0x4a, 0x37, 0xf3, 0x55, 0x51, 0x52, 0xaf, 0xff, |
| 596 | 0x7c, 0x1d, 0xcc, 0x68, 0x87, 0x0e, 0x62, 0x70, 0x9d, 0x1f, 0x1a, 0x40, | 596 | 0x0a, 0xbe, 0x56, 0x48, 0xf2, 0x35, 0x17, 0xb6, 0x78, 0x88, 0xf4, 0x8b, |
| 597 | 0x87, 0xcf, 0xcb, 0xda, 0xf8, 0xa2, 0xd4, 0xc7, 0x9b, 0x31, 0x2c, 0x30, | 597 | 0xfa, 0x7b, 0xa1, 0xa3, 0x04, 0xfc, 0xd4, 0x05, 0xbd, 0xa9, 0x70, 0x0d, |
| 598 | 0xaa, 0x5b, 0x0e, 0xea, 0x9e, 0x8a, 0x65, 0x1a, 0xdd, 0x72, 0xc2, 0xe0, | 598 | 0x4a, 0xa2, 0x4f, 0xef, 0xe7, 0x99, 0x6a, 0x38, 0x42, 0xde, 0xf7, 0x98, |
| 599 | 0x4e, 0xae, 0x83, 0x2d, 0x85, 0xd1, 0x05, 0x25, 0x5f, 0x75, 0xb5, 0x1e, | 599 | 0x6f, 0x10, 0x0e, 0x78, 0x2f, 0x4d, 0xcf, 0x55, 0x68, 0x2b, 0xb5, 0x5a, |
| 600 | 0x8e, 0x75, 0x59, 0xe5, 0xf9, 0x72, 0x0c, 0xe6, 0xfa, 0x46, 0x0c, 0x0e, | 600 | 0xd0, 0x65, 0xd8, 0xc9, 0xcf, 0x94, 0x5f, 0xb1, 0x2d, 0xda, 0x57, 0x5b, |
| 601 | 0x3b, 0x65, 0xd6, 0xd5, 0xd9, 0x1b, 0xe6, 0xcc, 0x47, 0xb3, 0x87, 0x99, | 601 | 0x50, 0xf9, 0x96, 0x37, 0xa7, 0x35, 0x8d, 0x74, 0xde, 0x9f, 0xbc, 0xd1, |
| 602 | 0xdb, 0x01, 0x6c, 0x3d, 0x3d, 0x35, 0x5b, 0xa1, 0x2d, 0x0c, 0x82, 0xba, | 602 | 0xdd, 0x49, 0x58, 0xb6, 0xd3, 0x3d, 0x86, 0x2f, 0xc2, 0xc1, 0x62, 0x25, |
| 603 | 0xbf, 0x89, 0x1e, 0x7f, 0xac, 0x30, 0xe4, 0x96, 0x68, 0xdd, 0xbe, 0xa0, | 603 | 0x12, 0x9c, 0x53, 0xf7, 0x5b, 0x5b, 0x26, 0x1f, 0xf3, 0xda, 0x74, 0xaa, |
| 604 | 0x72, 0x66, 0x27, 0xa7, 0xf2, 0x2a, 0x5e, 0xd8, 0x7c, 0x76, 0xf3, 0x5e, | 604 | 0x19, 0x56, 0xb9, 0x00, 0xbc, 0x4b, 0xc8, 0x57, 0x78, 0x97, 0xa2, 0xdb, |
| 605 | 0xe7, 0x36, 0x31, 0xf8, 0xfe, 0x1d, 0x66, 0xfd, 0x63, 0x4e, 0xa9, 0xd2, | 605 | 0x53, 0xa6, 0x3d, 0xd9, 0x54, 0x6d, 0x2a, 0xde, 0xc5, 0x18, 0x57, 0x37, |
| 606 | 0xe5, 0xcc, 0xaa, 0xb3, 0xb5, 0xac, 0xf9, 0x16, 0x27, 0x37, 0x95, 0x6e, | 606 | 0xca, 0xdb, 0x15, 0xca, 0x07, 0xcc, 0xaf, 0x65, 0x09, 0x60, 0x7f, 0x71, |
| 607 | 0x7c, 0x76, 0x2f, 0xb1, 0x3e, 0xcf, 0x31, 0x0a, 0x15, 0x9e, 0xe3, 0xe8, | 607 | 0x7a, 0x6e, 0x85, 0xf0, 0x7d, 0x7f, 0x3a, 0xb7, 0xc2, 0x1c, 0xc8, 0xff, |
| 608 | 0xf7, 0x69, 0xf3, 0x7e, 0xa0, 0xa1, 0xde, 0xa9, 0x78, 0x23, 0x63, 0x8c, | 608 | 0x34, 0x7d, 0x63, 0xc5, 0x92, 0x0d, 0x37, 0xa1, 0xe2, 0x57, 0xeb, 0x8c, |
| 609 | 0xed, 0x28, 0x6f, 0x54, 0xa8, 0x6b, 0xd0, 0x7f, 0x5c, 0xcf, 0x21, 0x92, | 609 | 0xb1, 0x72, 0x9c, 0x9a, 0xf3, 0x45, 0x23, 0x93, 0xbf, 0x37, 0x3d, 0xbc, |
| 610 | 0x2d, 0xc2, 0x3f, 0x25, 0x7d, 0x47, 0xa6, 0xf2, 0x2b, 0xcc, 0xdb, 0x7a, | 610 | 0x1e, 0x90, 0x73, 0x66, 0x0e, 0xbe, 0xc7, 0xd7, 0xef, 0xa0, 0x6b, 0xd0, |
| 611 | 0x68, 0xea, 0x1a, 0xfc, 0xa5, 0x73, 0x9e, 0xce, 0x2b, 0x5f, 0x67, 0x1c, | 611 | 0xca, 0x15, 0xd0, 0x4a, 0x2f, 0x6c, 0x09, 0xd2, 0x37, 0x7d, 0xb2, 0x5e, |
| 612 | 0x8c, 0xed, 0x54, 0x9f, 0x45, 0x13, 0xab, 0x3d, 0x3c, 0x35, 0xb8, 0x1e, | 612 | 0xc8, 0x01, 0xae, 0xf3, 0x8c, 0x5a, 0x27, 0x80, 0x75, 0xe6, 0x54, 0xce, |
| 613 | 0x91, 0x27, 0x4c, 0x1f, 0xbc, 0x4f, 0x6e, 0xfb, 0x52, 0x4a, 0xff, 0xc1, | 613 | 0x78, 0x80, 0x79, 0xb7, 0xb0, 0x35, 0x61, 0x13, 0xba, 0x8c, 0x59, 0xdb, |
| 614 | 0x3f, 0x18, 0x85, 0x7f, 0xd0, 0x09, 0x5d, 0x4f, 0x3f, 0x83, 0xf8, 0xbb, | 614 | 0xd8, 0xf3, 0x28, 0xf4, 0x12, 0xf3, 0x3f, 0xfe, 0x7b, 0x64, 0x27, 0x6f, |
| 615 | 0x13, 0x7b, 0x85, 0xe3, 0xdc, 0xa5, 0xc6, 0x89, 0x60, 0x9c, 0x59, 0xf8, | 615 | 0xfc, 0x39, 0x33, 0xee, 0x9b, 0x18, 0xc7, 0x33, 0x51, 0xf9, 0xe6, 0x6f, |
| 616 | 0x38, 0x8c, 0x47, 0xe6, 0x3d, 0x07, 0x58, 0x02, 0xb6, 0xde, 0x63, 0xbc, | 616 | 0xb6, 0x65, 0x58, 0xd9, 0x90, 0x3a, 0x07, 0x89, 0x30, 0xd4, 0xb1, 0x57, |
| 617 | 0xdc, 0xc6, 0x9c, 0x87, 0xa1, 0x27, 0x98, 0xa3, 0x32, 0x11, 0xe6, 0x0d, | 617 | 0xea, 0xe2, 0x2e, 0xc9, 0xab, 0x7d, 0x7d, 0x53, 0x8d, 0xb3, 0xbc, 0x6f, |
| 618 | 0xa1, 0x9d, 0x6f, 0xda, 0x1d, 0x44, 0x3b, 0xfa, 0x07, 0x6c, 0x2b, 0xb7, | 618 | 0x00, 0x76, 0xda, 0x25, 0x98, 0xbb, 0xaa, 0xe3, 0x6d, 0x79, 0xc5, 0xd3, |
| 619 | 0xd9, 0x32, 0xa8, 0xb0, 0x81, 0xf6, 0x6b, 0x48, 0x43, 0x0d, 0x73, 0xa5, | 619 | 0xe0, 0x91, 0x49, 0x3f, 0x57, 0x4f, 0x8f, 0xf3, 0xfb, 0x27, 0xd7, 0x8f, |
| 620 | 0x5d, 0xc5, 0x9e, 0x53, 0xf3, 0x3a, 0xa8, 0xda, 0x59, 0xd9, 0x31, 0xd0, | 620 | 0x98, 0x9c, 0x8e, 0xbf, 0x6f, 0x65, 0x8f, 0xf7, 0x2a, 0x1b, 0x6c, 0xe7, |
| 621 | 0x4e, 0xfc, 0x87, 0xbe, 0x97, 0x75, 0xbc, 0xb3, 0xa0, 0xe4, 0x08, 0x72, | 621 | 0x9b, 0x08, 0x7f, 0x8c, 0xdf, 0xc7, 0xcf, 0x31, 0x7e, 0x74, 0xff, 0x0e, |
| 622 | 0x32, 0x1e, 0xe6, 0xbd, 0xe8, 0x76, 0x61, 0xfd, 0x81, 0xf5, 0x86, 0x19, | 622 | 0xcc, 0x5b, 0xe6, 0xcc, 0x39, 0x8e, 0xb1, 0x49, 0x95, 0xaf, 0xcb, 0xba, |
| 623 | 0xff, 0xe7, 0x41, 0xee, 0x68, 0xa7, 0xf2, 0xad, 0x5f, 0xbe, 0x29, 0x07, | 623 | 0xe0, 0x7c, 0x86, 0x73, 0x74, 0xde, 0xf7, 0x8c, 0x83, 0x47, 0xb5, 0xcd, |
| 624 | 0x8d, 0x6d, 0xc2, 0x3a, 0x91, 0x30, 0x2f, 0xb9, 0x89, 0xe6, 0xac, 0x59, | 624 | 0x57, 0x82, 0x9d, 0x55, 0x06, 0xbf, 0x04, 0x3c, 0xca, 0xf1, 0x61, 0x13, |
| 625 | 0x73, 0xb6, 0x63, 0x6c, 0x58, 0xe5, 0xe2, 0xf3, 0x99, 0x33, 0x97, 0x61, | 625 | 0x57, 0x7b, 0xa3, 0x38, 0x1f, 0xef, 0x12, 0xc7, 0x21, 0x7b, 0xfc, 0xf1, |
| 626 | 0x1f, 0xcd, 0x67, 0x4d, 0xa3, 0xc0, 0x19, 0xda, 0x86, 0x94, 0x37, 0x3c, | 626 | 0x3c, 0xc7, 0x6b, 0xd3, 0x37, 0x2a, 0xae, 0x9c, 0xad, 0xea, 0x7c, 0x47, |
| 627 | 0xd8, 0xeb, 0x36, 0xac, 0x1d, 0x6d, 0xc2, 0xa0, 0xf1, 0x2d, 0xde, 0x2b, | 627 | 0x8d, 0x07, 0xc6, 0x6e, 0x78, 0xb6, 0x71, 0x99, 0x73, 0xa9, 0x67, 0xe3, |
| 628 | 0xce, 0xca, 0x73, 0xcc, 0x51, 0xf8, 0xf5, 0x61, 0x7b, 0xae, 0x63, 0x6e, | 628 | 0xf2, 0x5d, 0xd7, 0x8f, 0xad, 0xf1, 0x7e, 0x0a, 0xfd, 0x61, 0xeb, 0x2d, |
| 629 | 0xea, 0x5a, 0xc5, 0x93, 0x53, 0xcb, 0x3a, 0x3f, 0x4c, 0xf3, 0x81, 0x3a, | 629 | 0x6c, 0x72, 0xff, 0xdf, 0xc4, 0xfe, 0xe9, 0x53, 0x68, 0x5a, 0x3a, 0x08, |
| 630 | 0x9b, 0x6b, 0x9b, 0x94, 0x59, 0x8f, 0xb1, 0x9c, 0xa4, 0xbc, 0xe2, 0x35, | 630 | 0xb9, 0xf5, 0x1f, 0x82, 0xf0, 0x19, 0xa0, 0xbb, 0x6f, 0x05, 0x3b, 0xf7, |
| 631 | 0xe7, 0x39, 0xa1, 0xfe, 0xc6, 0xa8, 0xc9, 0xc7, 0x3e, 0x88, 0xf9, 0x13, | 631 | 0xe7, 0xeb, 0x6b, 0x4d, 0x97, 0x41, 0xd0, 0xc8, 0x62, 0x1b, 0xef, 0x96, |
| 632 | 0x37, 0x6a, 0x59, 0x3a, 0x00, 0x3b, 0xf4, 0x77, 0x0e, 0x70, 0x21, 0xf6, | 632 | 0x04, 0xde, 0x39, 0x02, 0x1d, 0x64, 0x49, 0x61, 0xdc, 0x8d, 0x2d, 0xf0, |
| 633 | 0xd3, 0x75, 0xa7, 0x79, 0x7e, 0xdb, 0xf9, 0xdf, 0x4a, 0x2e, 0x1d, 0xc8, | 633 | 0x6e, 0xc1, 0x19, 0x73, 0x1c, 0x95, 0xc7, 0x16, 0x07, 0xbc, 0x7c, 0xe6, |
| 634 | 0xc8, 0xe2, 0x36, 0xdf, 0xe1, 0xb7, 0xdf, 0x35, 0x04, 0x7d, 0x6f, 0x49, | 634 | 0xb7, 0x02, 0xcc, 0x39, 0x8b, 0xab, 0x5c, 0xdd, 0x6c, 0xd4, 0x05, 0xbc, |
| 635 | 0x71, 0xd4, 0x4b, 0x2c, 0xf0, 0x5c, 0xc3, 0x1d, 0x01, 0xca, 0xa7, 0x1f, | 635 | 0x8e, 0xb2, 0x4f, 0xb4, 0x5e, 0xfe, 0x97, 0xfb, 0x29, 0x6b, 0xfa, 0x5d, |
| 636 | 0x9d, 0x04, 0xbd, 0xbc, 0x1e, 0x04, 0x3e, 0x62, 0x4e, 0x22, 0xee, 0x99, | 636 | 0xff, 0xec, 0x39, 0xf7, 0x8b, 0x98, 0x3b, 0x60, 0xda, 0x7d, 0x1a, 0x09, |
| 637 | 0x13, 0x18, 0xf7, 0x40, 0xaf, 0xab, 0xce, 0x2b, 0xb4, 0xce, 0xfe, 0xfe, | 637 | 0x30, 0xe5, 0x4d, 0x76, 0xbe, 0x01, 0xf1, 0xe3, 0x7c, 0xec, 0xff, 0x2d, |
| 638 | 0x5e, 0xe6, 0xc0, 0xf5, 0x78, 0xe1, 0xda, 0xab, 0xef, 0xda, 0xd0, 0x77, | 638 | 0x05, 0xcb, 0x1c, 0xf4, 0xd0, 0xbc, 0xda, 0xcf, 0x0b, 0xa0, 0x05, 0xca, |
| 639 | 0xc4, 0xbc, 0x9f, 0xd8, 0xe6, 0xbf, 0xf4, 0xb1, 0xdc, 0xce, 0x35, 0x33, | 639 | 0x15, 0x9f, 0x7e, 0x5f, 0x00, 0xfd, 0xee, 0x63, 0x0a, 0xdf, 0x1e, 0xb4, |
| 640 | 0xb1, 0x17, 0xd6, 0x1f, 0x57, 0xb4, 0xcc, 0x42, 0x57, 0xcf, 0xa9, 0xf9, | 640 | 0xe6, 0xd3, 0x18, 0xe9, 0x8b, 0xb4, 0xf5, 0x8a, 0xe2, 0xb9, 0x52, 0xfb, |
| 641 | 0xdc, 0x0f, 0x59, 0x88, 0xc8, 0xfc, 0xb6, 0xfc, 0xde, 0x0f, 0xf9, 0xdd, | 641 | 0xdc, 0x29, 0xb3, 0x12, 0x4e, 0xdc, 0xf6, 0xcf, 0x9d, 0xcf, 0x7b, 0xe5, |
| 642 | 0xc3, 0x14, 0xcf, 0x5d, 0x64, 0x2d, 0x94, 0x31, 0xca, 0x17, 0x65, 0xeb, | 642 | 0xb8, 0xfa, 0xfc, 0x91, 0xf9, 0x07, 0x9c, 0x6d, 0xda, 0x9c, 0x6d, 0xa6, |
| 643 | 0xe3, 0xdd, 0xdc, 0x73, 0xe5, 0xed, 0x75, 0x77, 0x94, 0xcd, 0x4d, 0xda, | 643 | 0xe3, 0x9b, 0x04, 0x7f, 0x3e, 0xfa, 0xfb, 0xd4, 0xaf, 0xbc, 0x0b, 0xe2, |
| 644 | 0xe1, 0xba, 0xf3, 0x7a, 0xb7, 0xdc, 0xaa, 0x70, 0x7f, 0x64, 0x7e, 0x83, | 644 | 0xf7, 0x12, 0xca, 0x44, 0x90, 0x72, 0x9a, 0x7c, 0x94, 0x8b, 0xf3, 0x3e, |
| 645 | 0xb5, 0xf5, 0xcd, 0xda, 0x66, 0x9a, 0xbe, 0x83, 0x08, 0xfb, 0x63, 0x0c, | 645 | 0xe5, 0xa4, 0x04, 0xfa, 0x60, 0xb7, 0x8c, 0x86, 0xc4, 0xff, 0x2e, 0xa9, |
| 646 | 0x94, 0x36, 0x88, 0xe7, 0x50, 0xed, 0x52, 0x56, 0x32, 0x68, 0x29, 0x6c, | 646 | 0x4b, 0xb6, 0x9c, 0x56, 0xeb, 0x06, 0xef, 0x8d, 0x2b, 0x41, 0xd9, 0x50, |
| 647 | 0x9d, 0x73, 0xf3, 0x49, 0xc6, 0xbc, 0x8f, 0xc9, 0xbf, 0x03, 0xcd, 0xb9, | 647 | 0x77, 0x9f, 0xe0, 0xd1, 0xde, 0xa0, 0x2c, 0xba, 0x6d, 0x3d, 0x27, 0x75, |
| 648 | 0xe1, 0xa8, 0xe8, 0xb6, 0x33, 0xe0, 0xf7, 0xa6, 0x0b, 0x7f, 0x90, 0x67, | 648 | 0xf4, 0x59, 0x43, 0xdb, 0xb9, 0x36, 0x6c, 0xd4, 0x07, 0xb0, 0x21, 0xdd, |
| 649 | 0xd6, 0x15, 0x47, 0xce, 0xa9, 0x73, 0x57, 0xec, 0xd1, 0x4e, 0x47, 0x16, | 649 | 0xbf, 0x6f, 0x15, 0xa3, 0x77, 0xf4, 0x35, 0x32, 0x96, 0xb1, 0x47, 0xc6, |
| 650 | 0xbd, 0xed, 0x73, 0x78, 0xa9, 0xa1, 0xce, 0x1a, 0xde, 0x3d, 0xb1, 0x4d, | 650 | 0xa7, 0x1d, 0xc9, 0xaf, 0x0f, 0xe0, 0x07, 0x19, 0xaf, 0xe4, 0x02, 0x63, |
| 651 | 0x1b, 0xfd, 0x09, 0xf8, 0x52, 0xde, 0xcf, 0x83, 0x52, 0xfc, 0xa6, 0xba, | 651 | 0x91, 0x8c, 0xe7, 0x96, 0xe0, 0x9f, 0x6a, 0x3f, 0x9f, 0xf6, 0xf6, 0x95, |
| 652 | 0x46, 0xaf, 0x33, 0x4e, 0xc3, 0xf3, 0x01, 0x57, 0x0a, 0xf0, 0x0b, 0x0b, | 652 | 0xcd, 0x44, 0xa9, 0x24, 0x6e, 0xfc, 0x91, 0xf6, 0x77, 0x3c, 0x7d, 0xa5, |
| 653 | 0xf0, 0x09, 0x0b, 0x4a, 0x2f, 0x30, 0x6e, 0xc3, 0x18, 0x5b, 0x19, 0x3e, | 653 | 0xb0, 0xd7, 0x19, 0xf3, 0x8d, 0xab, 0xfc, 0xd9, 0x1e, 0x2f, 0x11, 0x3b, |
| 654 | 0x48, 0x39, 0x68, 0xf7, 0x4e, 0xaa, 0x18, 0xe2, 0xa5, 0x8d, 0x54, 0xb9, | 654 | 0x05, 0xdf, 0xf5, 0xeb, 0x69, 0xc6, 0x7a, 0xef, 0x23, 0xbe, 0xbf, 0xc4, |
| 655 | 0x2c, 0x5e, 0xf2, 0xc1, 0xed, 0x7c, 0xba, 0xee, 0x72, 0x2c, 0xdb, 0x1c, | 655 | 0x4d, 0xda, 0x23, 0xe3, 0xe2, 0x5e, 0x72, 0x47, 0x1f, 0x11, 0xfa, 0xa7, |
| 656 | 0x87, 0x4b, 0xaa, 0x5c, 0xb4, 0x0e, 0x60, 0xe4, 0xe3, 0xd0, 0xd5, 0xcf, | 656 | 0x89, 0xf8, 0x14, 0xf1, 0xd6, 0xfe, 0xbe, 0x20, 0x68, 0xec, 0xa5, 0x71, |
| 657 | 0xfb, 0x8c, 0xbf, 0xdd, 0x49, 0x7e, 0x7f, 0x95, 0x93, 0xb4, 0x87, 0x46, | 657 | 0x19, 0xbe, 0xf4, 0x23, 0x15, 0x63, 0xff, 0x70, 0x7a, 0x37, 0x6d, 0xa8, |
| 658 | 0xc5, 0xbb, 0xe0, 0x0d, 0x3f, 0x28, 0xf4, 0x3f, 0x52, 0xc9, 0x23, 0xe4, | 658 | 0x58, 0xf1, 0x78, 0xbf, 0x0c, 0x8f, 0xae, 0x89, 0x40, 0x5b, 0xf0, 0x7b, |
| 659 | 0xdb, 0xf6, 0x37, 0x0d, 0xa1, 0x7d, 0x1d, 0x95, 0xc1, 0x0b, 0xaf, 0xab, | 659 | 0x03, 0x0b, 0x3e, 0xaa, 0x7a, 0x87, 0xbd, 0x1e, 0x57, 0xdf, 0x5c, 0x65, |
| 660 | 0x33, 0x8e, 0x4f, 0xf8, 0xad, 0xb2, 0xa1, 0xe2, 0x77, 0xa3, 0x3d, 0x32, | 660 | 0x55, 0xde, 0x23, 0x63, 0xc9, 0x3c, 0xd3, 0x88, 0xca, 0x85, 0x7b, 0x16, |
| 661 | 0x08, 0xdf, 0x57, 0x60, 0xa1, 0xf8, 0x8d, 0x83, 0x05, 0xdf, 0x43, 0xdd, | 661 | 0x67, 0x5b, 0x68, 0xf2, 0x7c, 0x19, 0x57, 0x66, 0xdc, 0x98, 0xb1, 0x65, |
| 662 | 0xcb, 0x74, 0x23, 0x69, 0xf2, 0x54, 0x69, 0x5f, 0x19, 0xdf, 0xd3, 0x79, | 662 | 0xc6, 0x88, 0xf5, 0xf7, 0x53, 0x47, 0x9a, 0x7b, 0xc5, 0x91, 0x89, 0x8b, |
| 663 | 0x7a, 0xcc, 0x4d, 0x65, 0xfe, 0x64, 0x51, 0xe5, 0xeb, 0x31, 0xd6, 0xc7, | 663 | 0x51, 0xf3, 0x4d, 0x9a, 0x58, 0xdb, 0xd0, 0xbb, 0xf9, 0x9a, 0xa3, 0xee, |
| 664 | 0x58, 0x1e, 0xe3, 0x7d, 0x8c, 0xdb, 0xe9, 0x5c, 0xbd, 0x89, 0xc6, 0x6e, | 664 | 0xfd, 0x8a, 0x4e, 0xbf, 0x9c, 0x1c, 0xed, 0x06, 0xce, 0x07, 0x54, 0x3e, |
| 665 | 0xb1, 0xbd, 0x30, 0x5f, 0x52, 0xdb, 0xad, 0xad, 0xcc, 0x3e, 0xd8, 0x3a, | 665 | 0xa4, 0xed, 0xbe, 0x07, 0x7e, 0x25, 0xfd, 0x38, 0xea, 0x5b, 0x1f, 0xcf, |
| 666 | 0x57, 0xc5, 0x4e, 0x4a, 0x6e, 0x8f, 0x1c, 0x1b, 0x6e, 0x07, 0xcf, 0x7b, | 666 | 0x87, 0x50, 0xf7, 0x0b, 0xe0, 0x9e, 0x75, 0xf0, 0x39, 0x95, 0xee, 0xfd, |
| 667 | 0x55, 0x3e, 0x9d, 0xed, 0xdd, 0x0f, 0x1c, 0xcb, 0xf8, 0x1c, 0xb1, 0x69, | 667 | 0xb4, 0x6c, 0x57, 0x98, 0x9f, 0x5d, 0x3f, 0x90, 0x53, 0xe7, 0xc1, 0x98, |
| 668 | 0xc8, 0xe7, 0x7b, 0xf0, 0xec, 0x1d, 0xf0, 0x9e, 0xcf, 0x80, 0x5b, 0x95, | 668 | 0x8d, 0x2f, 0x9b, 0xfc, 0x5c, 0x35, 0xfa, 0xcc, 0x8e, 0xb9, 0xab, 0x66, |
| 669 | 0x1d, 0xfa, 0xbc, 0x6c, 0x55, 0x98, 0x03, 0x5f, 0xdb, 0x97, 0x57, 0xeb, | 669 | 0xcc, 0x66, 0x40, 0x8a, 0xeb, 0x94, 0x3f, 0x96, 0x5a, 0xeb, 0x56, 0xe0, |
| 670 | 0x41, 0xdf, 0x3c, 0xd4, 0x4d, 0x61, 0xfe, 0x28, 0x7d, 0x2a, 0xd7, 0x9c, | 670 | 0xad, 0x52, 0xaa, 0xef, 0x75, 0xef, 0xde, 0x6a, 0x3d, 0x93, 0x56, 0xbe, |
| 671 | 0x93, 0xd3, 0x37, 0xef, 0x85, 0xbf, 0x4e, 0xfd, 0x63, 0xa9, 0xb1, 0xae, | 671 | 0xec, 0xf9, 0x92, 0x39, 0x63, 0xfd, 0x1d, 0x64, 0x70, 0x27, 0x7f, 0x38, |
| 672 | 0x47, 0x3e, 0x20, 0xe5, 0xda, 0x6e, 0x67, 0xfe, 0x41, 0xf0, 0x0d, 0x5f, | 672 | 0xaa, 0xe3, 0x09, 0xd9, 0x81, 0x5e, 0xfa, 0x0f, 0x7d, 0x1a, 0xbf, 0xf4, |
| 673 | 0xe5, 0xac, 0xc2, 0x9f, 0xd4, 0x6b, 0xac, 0xbf, 0x8f, 0x74, 0x76, 0xf2, | 673 | 0x7b, 0x7f, 0x65, 0x6c, 0x51, 0xfa, 0xbc, 0x03, 0x4a, 0x4f, 0xdb, 0x0d, |
| 674 | 0xcb, 0xe3, 0xda, 0x67, 0xcc, 0xf5, 0x02, 0xb3, 0x78, 0xa7, 0xbb, 0x77, | 674 | 0x9f, 0x4e, 0x98, 0x73, 0x43, 0x7f, 0xf8, 0xa0, 0x64, 0xeb, 0x90, 0x9b, |
| 675 | 0xb0, 0xf3, 0x2f, 0x0d, 0xae, 0x25, 0x6e, 0xee, 0x55, 0xd8, 0xc0, 0xae, | 675 | 0x83, 0x7c, 0x3f, 0x6b, 0xc6, 0xf2, 0xb9, 0x25, 0x47, 0x27, 0x76, 0xdf, |
| 676 | 0x87, 0x72, 0xc2, 0x7c, 0x1f, 0x62, 0xea, 0x03, 0x92, 0xab, 0x41, 0x6f, | 676 | 0xa7, 0x4f, 0x6a, 0x3f, 0xbb, 0xd7, 0xbf, 0x53, 0xf7, 0x73, 0x4d, 0x7d, |
| 677 | 0xf6, 0xf1, 0xfe, 0x47, 0xa6, 0x2d, 0xaf, 0x03, 0x39, 0x3c, 0xd6, 0x7a, | 677 | 0x78, 0x15, 0x9c, 0xa0, 0x27, 0x1f, 0x06, 0xbd, 0xd6, 0x11, 0xc0, 0xcb, |
| 678 | 0x96, 0x3f, 0xae, 0x71, 0x7d, 0x67, 0x78, 0x9e, 0x1f, 0xe6, 0xbc, 0xdf, | 678 | 0x18, 0xe4, 0x80, 0xcb, 0x5c, 0x9d, 0x80, 0x4c, 0x0c, 0x24, 0x98, 0xc3, |
| 679 | 0x94, 0x5b, 0x0b, 0x79, 0x0a, 0x69, 0xd0, 0x63, 0x4d, 0x80, 0xde, 0x7a, | 679 | 0xa7, 0xe0, 0x69, 0xd4, 0x43, 0x68, 0xf3, 0xe1, 0xd4, 0xfe, 0x79, 0xa3, |
| 680 | 0x35, 0x21, 0xbd, 0x1e, 0xf3, 0x84, 0x22, 0x32, 0xd6, 0x9b, 0x82, 0x13, | 680 | 0xce, 0xf6, 0x38, 0xd6, 0xea, 0x96, 0x89, 0x41, 0xe2, 0x79, 0x37, 0x1c, |
| 681 | 0xaf, 0xe9, 0xa9, 0xd7, 0x60, 0xf3, 0xab, 0x21, 0x9d, 0x1a, 0xe3, 0xd7, | 681 | 0x03, 0x81, 0xbd, 0x73, 0xd4, 0x1e, 0xec, 0x80, 0xef, 0xee, 0xef, 0x47, |
| 682 | 0x6b, 0x7c, 0x9f, 0xc4, 0x58, 0xed, 0x32, 0xd6, 0x47, 0x3e, 0xb7, 0xd2, | 682 | 0x73, 0xf0, 0xc3, 0x72, 0x2b, 0x8c, 0x15, 0x10, 0xc6, 0x01, 0xc8, 0x39, |
| 683 | 0x91, 0x34, 0xf9, 0xdc, 0xad, 0xcf, 0xef, 0x6b, 0xa2, 0xef, 0xd6, 0xef, | 683 | 0xec, 0x31, 0xed, 0xe7, 0x0e, 0xfb, 0x78, 0xf1, 0x63, 0x0c, 0x21, 0x45, |
| 684 | 0x4a, 0xf3, 0x8c, 0x8b, 0xad, 0xd0, 0x3f, 0x21, 0x8d, 0xbd, 0xd0, 0x73, | 684 | 0x17, 0x73, 0x19, 0xee, 0x25, 0x64, 0x62, 0x0e, 0x84, 0x2b, 0x61, 0xf2, |
| 685 | 0x98, 0xa3, 0x1f, 0xfa, 0x1a, 0x21, 0x5f, 0x42, 0x1f, 0x25, 0xaa, 0xe4, | 685 | 0x0f, 0x09, 0x9f, 0x7d, 0x40, 0x9f, 0xff, 0xfd, 0x66, 0xbf, 0x7e, 0xce, |
| 686 | 0x62, 0x36, 0xc3, 0xb9, 0x44, 0x8d, 0xcf, 0x42, 0xba, 0x14, 0x6d, 0x11, | 686 | 0x22, 0xe7, 0xba, 0x17, 0xe3, 0xbf, 0xd2, 0xc2, 0x5a, 0x34, 0xe8, 0xc0, |
| 687 | 0x9e, 0x25, 0x46, 0xbd, 0xcf, 0xec, 0xd3, 0xeb, 0xff, 0xa4, 0x99, 0xaf, | 687 | 0xff, 0xbe, 0xaf, 0x7f, 0xaf, 0x9e, 0xab, 0xd7, 0xff, 0xa6, 0x2f, 0x66, |
| 688 | 0x6b, 0xea, 0xb0, 0xaf, 0xfd, 0x68, 0xff, 0xb5, 0x00, 0x63, 0x31, 0x08, | 688 | 0xbe, 0xe3, 0x23, 0x9c, 0xe4, 0x2f, 0x1f, 0x87, 0x9c, 0x63, 0xc0, 0xdc, |
| 689 | 0x87, 0xfd, 0x1f, 0x62, 0xf7, 0xfd, 0xba, 0xaf, 0xce, 0x10, 0xbf, 0x87, | 689 | 0x23, 0x10, 0x86, 0x9e, 0x5d, 0x30, 0x24, 0xd2, 0x77, 0xca, 0xb8, 0x43, |
| 690 | 0xdf, 0xa1, 0x91, 0x4e, 0xee, 0xaf, 0x90, 0x87, 0xec, 0xa3, 0xd7, 0xc4, | 690 | 0x1d, 0x7b, 0x27, 0xad, 0xf5, 0xc9, 0x42, 0xad, 0x57, 0xca, 0x35, 0xe6, |
| 691 | 0x5c, 0x49, 0x43, 0x47, 0x0b, 0x0d, 0x29, 0xff, 0x66, 0x1d, 0x77, 0x4f, | 691 | 0x53, 0xf3, 0xfb, 0x32, 0xda, 0x59, 0xe4, 0x4b, 0x95, 0x37, 0x69, 0xf2, |
| 692 | 0xd3, 0xdc, 0x29, 0x6b, 0xdd, 0xb2, 0x50, 0xed, 0x94, 0xf9, 0xaa, 0xf2, | 692 | 0x15, 0x7d, 0xfe, 0xec, 0x43, 0x3f, 0xea, 0x10, 0x94, 0x75, 0x2d, 0x9f, |
| 693 | 0x75, 0x86, 0x45, 0x88, 0xed, 0xb8, 0x2f, 0x55, 0x2e, 0xb3, 0xc9, 0x99, | 693 | 0xea, 0x72, 0x77, 0xce, 0xe2, 0x7c, 0x3b, 0x67, 0x51, 0xe7, 0x25, 0x15, |
| 694 | 0x0c, 0xf7, 0x67, 0x37, 0xea, 0xd1, 0x86, 0xa0, 0xac, 0x69, 0xfd, 0x54, | 694 | 0xdb, 0x79, 0x22, 0xcc, 0x89, 0xeb, 0xcc, 0x41, 0x2a, 0xc9, 0xa3, 0x87, |
| 695 | 0x93, 0x5b, 0xbf, 0xd3, 0x98, 0x6b, 0xb4, 0xe6, 0xe3, 0x5d, 0x6f, 0xca, | 695 | 0x7b, 0x24, 0xb9, 0xdc, 0x6b, 0x68, 0xf4, 0x3d, 0x66, 0x1d, 0xac, 0xb7, |
| 696 | 0xc7, 0x6b, 0xce, 0x7f, 0x2a, 0xcb, 0x23, 0x07, 0x3b, 0x64, 0xe0, 0x6c, | 696 | 0x34, 0x29, 0xc9, 0xa5, 0x3f, 0x86, 0x6f, 0xaf, 0xf2, 0x22, 0x3b, 0xf2, |
| 697 | 0xa7, 0x91, 0xd1, 0xfb, 0xcd, 0x38, 0x18, 0x6f, 0x69, 0x5c, 0x06, 0x96, | 697 | 0xdb, 0x87, 0xcd, 0xb7, 0x48, 0x59, 0x8b, 0xf9, 0x28, 0xf9, 0x25, 0x9c, |
| 698 | 0xbe, 0x28, 0xa5, 0x69, 0x95, 0xff, 0xde, 0xf4, 0xfd, 0xc3, 0xa0, 0xf9, | 698 | 0xd7, 0xe1, 0xc4, 0x68, 0xdc, 0xe6, 0xb7, 0xb8, 0x27, 0x24, 0xb9, 0x3a, |
| 699 | 0xfe, 0x29, 0x67, 0x31, 0x17, 0xa6, 0xb0, 0x84, 0xf5, 0x3a, 0x98, 0x1a, | 699 | 0xa9, 0xbf, 0x89, 0x4b, 0xf3, 0x46, 0x3e, 0xa1, 0xec, 0xe9, 0xd4, 0x65, |
| 700 | 0x4e, 0xda, 0xfc, 0x46, 0xf7, 0x31, 0x19, 0x58, 0x1d, 0x97, 0xf4, 0x12, | 700 | 0x3d, 0x9f, 0xbb, 0xc4, 0xf6, 0x14, 0x6c, 0x47, 0xb6, 0xe7, 0x63, 0x01, |
| 701 | 0x31, 0x03, 0xb3, 0x01, 0x52, 0x2a, 0x2e, 0x9a, 0xbe, 0xa8, 0xfb, 0xf3, | 701 | 0x75, 0x6b, 0x7f, 0x3f, 0xe8, 0xa9, 0xcb, 0xd8, 0x03, 0xcc, 0xe9, 0xe4, |
| 702 | 0x96, 0xf8, 0x3e, 0x0d, 0xbc, 0xca, 0xf7, 0x85, 0x44, 0x44, 0x65, 0x0c, | 702 | 0x78, 0xda, 0x1e, 0xa7, 0x71, 0x66, 0xf9, 0xb8, 0x2d, 0x1c, 0xa3, 0xe6, |
| 703 | 0x7c, 0x10, 0xf2, 0xd4, 0x66, 0xf0, 0x80, 0x23, 0xf9, 0x25, 0xb6, 0x27, | 703 | 0xc3, 0xb3, 0x7f, 0x47, 0x44, 0x5c, 0x8f, 0xcb, 0x7a, 0xd3, 0x05, 0x4f, |
| 704 | 0xf6, 0xf8, 0x47, 0xac, 0x59, 0x21, 0x69, 0x0b, 0xdb, 0xa8, 0xfe, 0x70, | 704 | 0xe8, 0x9c, 0xf8, 0x62, 0xdd, 0xcf, 0xe5, 0x7c, 0xb4, 0x9d, 0xcb, 0x49, |
| 705 | 0x1d, 0xc6, 0xd3, 0xc9, 0xeb, 0x51, 0x59, 0x6f, 0x78, 0xd8, 0x13, 0xfa, | 705 | 0x18, 0x0b, 0x95, 0xdd, 0xb4, 0x77, 0xc8, 0xe4, 0x54, 0xf6, 0xa8, 0xfb, |
| 706 | 0x9b, 0x89, 0x52, 0x2d, 0xcc, 0x27, 0x7d, 0xc4, 0xc4, 0x00, 0x34, 0x8d, | 706 | 0xd9, 0x0e, 0xf9, 0x67, 0xfa, 0x3f, 0x73, 0x80, 0x77, 0xf7, 0x22, 0x6c, |
| 707 | 0xc5, 0x4a, 0xab, 0xec, 0x3d, 0x63, 0xbe, 0x9d, 0xe8, 0x50, 0x67, 0x68, | 707 | 0x1f, 0x34, 0xed, 0xb0, 0x8f, 0xa2, 0x51, 0xc5, 0x07, 0xc9, 0x86, 0xdf, |
| 708 | 0x4d, 0xfa, 0xcf, 0xd4, 0xbf, 0xdd, 0x65, 0xde, 0x80, 0x08, 0xdf, 0x37, | 708 | 0xef, 0xfa, 0x01, 0x9d, 0x0b, 0x4a, 0x3c, 0x79, 0x06, 0xe6, 0x09, 0xf8, |
| 709 | 0xf9, 0x24, 0xf1, 0xb8, 0xda, 0x07, 0x03, 0xf5, 0xb0, 0xde, 0xa8, 0xab, | 709 | 0xb1, 0xac, 0x3b, 0x88, 0xb1, 0x3c, 0x27, 0x94, 0x8d, 0x83, 0x2a, 0xd7, |
| 710 | 0x7d, 0x60, 0xf2, 0x29, 0x6b, 0x68, 0x1e, 0x83, 0xcf, 0xc3, 0x67, 0x07, | 710 | 0x30, 0xe0, 0x4d, 0x99, 0x7b, 0xc1, 0x41, 0xb5, 0x96, 0xe3, 0x71, 0x7e, |
| 711 | 0xd0, 0x96, 0xeb, 0x84, 0xb2, 0x7e, 0x40, 0xe5, 0x39, 0x46, 0xb2, 0x47, | 711 | 0x5f, 0x36, 0xf4, 0x74, 0xac, 0xbf, 0x1b, 0x5e, 0xc6, 0xe0, 0xfc, 0xdc, |
| 712 | 0xcc, 0x59, 0x5a, 0x9f, 0x1a, 0xcb, 0xcd, 0xb2, 0xff, 0x50, 0x37, 0x74, | 712 | 0x51, 0xb6, 0xf3, 0x7d, 0x77, 0x1f, 0x3f, 0x4f, 0x34, 0x6b, 0x05, 0xdb, |
| 713 | 0x34, 0x8d, 0xdf, 0x4a, 0x2f, 0x7d, 0xf8, 0x9f, 0x19, 0x79, 0xe1, 0x7b, | 713 | 0x39, 0xf6, 0xc4, 0x25, 0xef, 0x96, 0x51, 0x5e, 0xf6, 0x00, 0x23, 0x9f, |
| 714 | 0xde, 0xb7, 0xd6, 0xf9, 0xa3, 0x7d, 0xe1, 0x7b, 0x67, 0xfb, 0x1b, 0x0c, | 714 | 0x51, 0x9a, 0x6f, 0x07, 0x82, 0x4b, 0xfc, 0xed, 0x9e, 0x27, 0x88, 0xb9, |
| 715 | 0xf2, 0x92, 0x67, 0x80, 0x28, 0x2f, 0x32, 0x97, 0x9d, 0xd7, 0x28, 0xcd, | 715 | 0x7d, 0x9e, 0xdd, 0x3b, 0xa7, 0xb4, 0xcb, 0x3b, 0x6f, 0x6d, 0x57, 0x98, |
| 716 | 0xb7, 0x25, 0xce, 0x12, 0x7f, 0xad, 0xfd, 0x38, 0xe8, 0x3b, 0xdc, 0xb3, | 716 | 0x27, 0x51, 0x92, 0x93, 0x99, 0x3e, 0x99, 0xab, 0xd9, 0xfc, 0xc6, 0x93, |
| 717 | 0xbb, 0xe5, 0x06, 0x51, 0x17, 0x9f, 0xb6, 0xb6, 0x2a, 0x8c, 0x5d, 0x94, | 717 | 0x31, 0x7a, 0xde, 0x83, 0xcb, 0xbc, 0x92, 0x71, 0x23, 0xc6, 0xe7, 0xee, |
| 718 | 0xe5, 0x58, 0xa6, 0x5b, 0x66, 0xab, 0x36, 0xbf, 0x4d, 0x65, 0x2c, 0x96, | 718 | 0x81, 0x6f, 0x4e, 0x7a, 0x1e, 0x91, 0xf5, 0xfa, 0x4c, 0x47, 0xfe, 0x6d, |
| 719 | 0x67, 0x95, 0x32, 0xa7, 0x74, 0xdc, 0x90, 0xe8, 0xef, 0x76, 0x3b, 0xa4, | 719 | 0x97, 0xa1, 0xb3, 0x7f, 0x1d, 0x92, 0xde, 0x12, 0x7c, 0x32, 0x9f, 0xa7, |
| 720 | 0xe8, 0x52, 0x9e, 0x87, 0x64, 0xbd, 0x36, 0xdd, 0x94, 0x03, 0xdc, 0x66, | 720 | 0x47, 0xa4, 0x50, 0xef, 0xbc, 0x3b, 0x63, 0xae, 0x4f, 0xe7, 0x37, 0xb4, |
| 721 | 0xe4, 0xec, 0xef, 0xa2, 0xd2, 0xc9, 0x38, 0x52, 0xb8, 0xa7, 0x87, 0xa4, | 721 | 0x4a, 0x0f, 0xd6, 0x4a, 0xb4, 0xab, 0xa2, 0x8c, 0x4b, 0xb0, 0xdf, 0x7e, |
| 722 | 0x58, 0x6b, 0x3e, 0x67, 0x60, 0x9e, 0x11, 0xe5, 0xb6, 0xbf, 0x69, 0xef, | 722 | 0xa3, 0x6f, 0xe1, 0x08, 0xf5, 0xbe, 0xc5, 0x12, 0x97, 0xb0, 0x41, 0x47, |
| 723 | 0x31, 0x57, 0x0f, 0xb8, 0x2a, 0x4e, 0x9f, 0x95, 0xf5, 0xf6, 0x1a, 0x7b, | 723 | 0xa8, 0x75, 0x52, 0x72, 0x34, 0x5a, 0x82, 0x8f, 0x3a, 0x62, 0xd6, 0x7d, |
| 724 | 0xfb, 0x15, 0xac, 0xc7, 0xfb, 0x2d, 0xf1, 0x48, 0x1b, 0x6c, 0x84, 0xc9, | 724 | 0x3b, 0xde, 0xd9, 0xf7, 0x80, 0x69, 0xbf, 0xd7, 0xbc, 0xf7, 0x9a, 0xf7, |
| 725 | 0x35, 0x3e, 0x1c, 0x2f, 0xc3, 0x3f, 0x1b, 0x32, 0xe3, 0xde, 0x81, 0x7b, | 725 | 0x00, 0xde, 0xeb, 0xad, 0x5a, 0x95, 0x73, 0xb2, 0xe4, 0xf7, 0x22, 0xbc, |
| 726 | 0xd6, 0xdd, 0x67, 0xde, 0xef, 0x37, 0xf7, 0x9d, 0xe6, 0x3e, 0x82, 0x7b, | 726 | 0xdb, 0xf2, 0x24, 0x74, 0x59, 0xa0, 0xa7, 0x7a, 0xe5, 0xf1, 0xba, 0xc2, |
| 727 | 0xe6, 0x8d, 0xb3, 0x4f, 0x96, 0xfc, 0x9e, 0x88, 0xdf, 0xeb, 0x64, 0x25, | 727 | 0xaf, 0xe5, 0x2e, 0xd1, 0x20, 0xd8, 0x6f, 0x9e, 0xef, 0xe6, 0xc1, 0x4f, |
| 728 | 0x7a, 0x11, 0xe8, 0xa9, 0xd1, 0x29, 0x9f, 0xae, 0x29, 0xfe, 0x5a, 0xde, | 728 | 0xde, 0x91, 0x37, 0x3c, 0xec, 0x98, 0xdc, 0xec, 0x0e, 0x78, 0xb3, 0x80, |
| 729 | 0x12, 0x01, 0xc1, 0x7e, 0x73, 0x7d, 0xeb, 0x1e, 0xfc, 0xdc, 0x4d, 0xdf, | 729 | 0xf5, 0xd7, 0xe5, 0x41, 0x51, 0x47, 0x69, 0x5f, 0xb9, 0x50, 0xd1, 0xf9, |
| 730 | 0x4a, 0x55, 0x8c, 0xac, 0x34, 0xd3, 0x9b, 0x03, 0xad, 0xef, 0x96, 0x83, | 730 | 0x3e, 0x27, 0x2b, 0x80, 0xb5, 0xf6, 0x3f, 0x0e, 0xe8, 0xdc, 0x14, 0x3f, |
| 731 | 0x45, 0x1b, 0xa5, 0xfd, 0xc6, 0x62, 0x45, 0xe7, 0x1a, 0x1d, 0x83, 0xdf, | 731 | 0x9f, 0x91, 0xf9, 0xee, 0x23, 0x26, 0x27, 0x82, 0x63, 0x99, 0x57, 0xe9, |
| 732 | 0x78, 0xb8, 0xfa, 0xa8, 0xab, 0xf3, 0x62, 0xc2, 0x5c, 0xca, 0x4e, 0xcc, | 732 | 0xdf, 0x39, 0x76, 0xda, 0xaa, 0xd4, 0x45, 0xd4, 0x33, 0xfc, 0x6e, 0x25, |
| 733 | 0x6b, 0xc8, 0x9c, 0x5b, 0xb3, 0x2d, 0x73, 0x3a, 0xc3, 0xf3, 0x99, 0x66, | 733 | 0x8d, 0xbe, 0x8b, 0x94, 0x35, 0xd0, 0x53, 0xbe, 0x2d, 0xf1, 0x39, 0xe5, |
| 734 | 0xac, 0x4a, 0x5b, 0x44, 0x3b, 0xc3, 0xef, 0x9a, 0x7c, 0xd4, 0x5d, 0xa4, | 734 | 0x1f, 0x76, 0x7e, 0xf7, 0x73, 0x0e, 0xb0, 0xfe, 0x65, 0x93, 0x71, 0xe1, |
| 735 | 0xae, 0x69, 0xca, 0xcd, 0xff, 0x52, 0x4b, 0x6e, 0x3e, 0xbf, 0xfb, 0x16, | 735 | 0x1e, 0x09, 0x2c, 0xfb, 0x79, 0x50, 0x3c, 0x63, 0xda, 0x61, 0xfc, 0xb6, |
| 736 | 0xf9, 0x6f, 0x0d, 0xc6, 0x95, 0x3a, 0x24, 0x72, 0x36, 0xcc, 0xc1, 0xe2, | 736 | 0xfa, 0x77, 0x77, 0xc5, 0x8c, 0x7d, 0x5b, 0x81, 0x74, 0x3e, 0xe7, 0x30, |
| 737 | 0x1a, 0x13, 0x87, 0xf1, 0x7b, 0xef, 0xa9, 0x5d, 0x62, 0x4e, 0xa1, 0x9c, | 737 | 0xc7, 0xd4, 0xf1, 0xfc, 0x38, 0x33, 0x73, 0x6b, 0x68, 0x73, 0x1d, 0x14, |
| 738 | 0x7f, 0xc7, 0x65, 0x7e, 0xab, 0x9b, 0x0d, 0xe3, 0x54, 0xcc, 0xeb, 0x21, | 738 | 0x5b, 0xc5, 0x8d, 0xd8, 0x56, 0x92, 0xfe, 0xc3, 0xbf, 0x4b, 0xde, 0xf8, |
| 739 | 0xe6, 0x3a, 0x60, 0x62, 0x0a, 0x7c, 0x57, 0x96, 0x9e, 0x83, 0x53, 0xdc, | 739 | 0x47, 0xfc, 0x16, 0x46, 0xe7, 0x79, 0xab, 0x75, 0xa2, 0xda, 0x86, 0xe4, |
| 740 | 0x1b, 0xbf, 0x1d, 0xd9, 0xce, 0xfd, 0x57, 0xe3, 0xc4, 0x35, 0x86, 0xe4, | 740 | 0x37, 0xda, 0x69, 0xf0, 0xd5, 0xbe, 0x2d, 0x9d, 0xf3, 0x1d, 0xc1, 0x7b, |
| 741 | 0x77, 0xe3, 0x3e, 0xf6, 0xd5, 0x9e, 0xcd, 0xf0, 0x9b, 0x8c, 0xcb, 0x8d, | 741 | 0x06, 0x74, 0x0c, 0x99, 0x2a, 0xfc, 0x1e, 0x9b, 0x7c, 0xc7, 0xef, 0xb1, |
| 742 | 0x8c, 0xfa, 0xf6, 0x83, 0x67, 0x1e, 0x5b, 0x0d, 0xee, 0x3b, 0x7e, 0x23, | 742 | 0x3d, 0x95, 0x6f, 0xb2, 0x6d, 0xbe, 0x2f, 0xba, 0xde, 0x0c, 0x8a, 0xbd, |
| 743 | 0x9e, 0x55, 0x39, 0x01, 0x5b, 0xe6, 0x9b, 0xe7, 0xab, 0x0d, 0xfd, 0x1d, | 743 | 0x34, 0xce, 0x6f, 0xd5, 0xf8, 0x6d, 0x23, 0x6c, 0xb5, 0x38, 0xda, 0x99, |
| 744 | 0xcb, 0xe2, 0xb2, 0xca, 0xcb, 0x07, 0x56, 0x4b, 0xe2, 0x3d, 0x73, 0xe8, | 744 | 0xc7, 0x36, 0xa4, 0xf2, 0x54, 0xca, 0xcd, 0x8f, 0xa0, 0xfc, 0x34, 0xfc, |
| 745 | 0xfa, 0x55, 0x2e, 0xc1, 0x7c, 0xe3, 0x53, 0x28, 0x3f, 0x2f, 0x6b, 0x15, | 745 | 0x75, 0x1d, 0x9f, 0x2f, 0x37, 0x99, 0xaf, 0xe2, 0xa8, 0x7b, 0xcf, 0xe4, |
| 746 | 0x1d, 0x7f, 0x9d, 0x6f, 0x30, 0xa7, 0xc0, 0x55, 0x67, 0x44, 0x03, 0x4b, | 746 | 0x52, 0x01, 0xeb, 0xf9, 0xdf, 0x3e, 0x47, 0x51, 0x47, 0xf8, 0x4a, 0x86, |
| 747 | 0x45, 0x8c, 0x17, 0x7e, 0xb3, 0x1d, 0xc7, 0x33, 0xd2, 0x57, 0x36, 0x7b, | 747 | 0x47, 0xfd, 0x5c, 0x84, 0x0d, 0x87, 0x3a, 0xa1, 0xd4, 0x8c, 0xa8, 0x1c, |
| 748 | 0x34, 0xcc, 0x05, 0xe9, 0xea, 0xa1, 0x4d, 0x28, 0x37, 0xba, 0x54, 0x1e, | 748 | 0x17, 0x6d, 0x8f, 0xd0, 0xd6, 0x0b, 0xa3, 0x2f, 0xf7, 0xda, 0x4b, 0x7d, |
| 749 | 0x82, 0xc6, 0x23, 0xc4, 0x7a, 0x31, 0xd4, 0xe5, 0x5c, 0x3b, 0x69, 0xaf, | 749 | 0xd5, 0xa2, 0x4c, 0x4a, 0x61, 0x9d, 0x86, 0xca, 0x0f, 0x24, 0x9e, 0x5d, |
| 750 | 0x02, 0xea, 0xa4, 0x34, 0xc6, 0xa9, 0xab, 0xdc, 0x44, 0xf2, 0xd9, 0x73, | 750 | 0xa7, 0x48, 0x7f, 0x4d, 0xc9, 0xf8, 0xc4, 0xe8, 0xac, 0xe4, 0x9d, 0x10, |
| 751 | 0x4b, 0xf4, 0xd7, 0x94, 0x8e, 0x4f, 0x0d, 0xcf, 0x48, 0xc1, 0x8d, 0xc2, | 751 | 0x7c, 0xb1, 0xb2, 0xf2, 0x73, 0x5e, 0x80, 0x0d, 0x1d, 0xd9, 0x0a, 0x78, |
| 752 | 0x17, 0x9b, 0x57, 0x7e, 0xce, 0xfd, 0xc0, 0xd0, 0x5d, 0x9b, 0x91, 0x2c, | 752 | 0xdc, 0x1b, 0xd7, 0xa6, 0x1f, 0xa2, 0xf7, 0xa3, 0xef, 0x8e, 0xc4, 0x2a, |
| 753 | 0xe7, 0xc6, 0xb1, 0xe9, 0x87, 0xe8, 0xf9, 0xe8, 0x33, 0x02, 0xb1, 0xe6, | 753 | 0xab, 0xef, 0xf5, 0x58, 0xcf, 0x7b, 0x01, 0xff, 0x7b, 0x6c, 0xe6, 0xef, |
| 754 | 0xd5, 0xf7, 0x8f, 0x7c, 0xce, 0x78, 0x6f, 0xf8, 0xcd, 0x90, 0xfe, 0x26, | 754 | 0xc3, 0x4f, 0x68, 0x4e, 0xc9, 0xd9, 0xca, 0x7e, 0xe6, 0xc6, 0xa7, 0xb7, |
| 755 | 0x64, 0xa6, 0x71, 0x44, 0x4e, 0x55, 0xf6, 0xf2, 0x5b, 0x09, 0x7f, 0x0b, | 755 | 0x81, 0xb7, 0x93, 0xed, 0x7c, 0x7d, 0xe6, 0xb0, 0xf9, 0xba, 0x87, 0x67, |
| 756 | 0x7c, 0x3b, 0xd6, 0xe8, 0x52, 0xdf, 0xa5, 0xcc, 0x34, 0x98, 0x3f, 0x17, | 756 | 0xc5, 0x5c, 0x79, 0xd2, 0x19, 0xf3, 0xe5, 0x69, 0x87, 0x0d, 0xc9, 0xe3, |
| 757 | 0xda, 0x1e, 0xae, 0x55, 0xdc, 0x7c, 0x37, 0x91, 0x30, 0xdf, 0x4d, 0xf0, | 757 | 0x4d, 0x3f, 0x47, 0x7e, 0x2f, 0x3b, 0x9c, 0x34, 0xf8, 0x59, 0xf8, 0x86, |
| 758 | 0xdb, 0x8f, 0x1f, 0xed, 0x0d, 0xf7, 0xfb, 0xad, 0x38, 0x9c, 0x32, 0xf8, | 758 | 0x7e, 0x2e, 0x24, 0x73, 0x36, 0x5b, 0xad, 0x93, 0x69, 0xde, 0xc7, 0xce, |
| 759 | 0xa7, 0xf0, 0x0d, 0xc3, 0x3c, 0x4c, 0xe6, 0x8b, 0x06, 0xc1, 0x31, 0x9f, | 759 | 0x1c, 0x5d, 0xc3, 0x1e, 0xaf, 0xd5, 0x81, 0xc3, 0xe3, 0xac, 0x63, 0xee, |
| 760 | 0xf1, 0xdb, 0xe9, 0xc3, 0x6b, 0x98, 0xe3, 0x95, 0x1a, 0x78, 0x78, 0x94, | 760 | 0x56, 0xb7, 0xe4, 0xc6, 0x55, 0xbc, 0xaf, 0x77, 0xcd, 0xdd, 0x2f, 0x57, |
| 761 | 0xcf, 0x98, 0x37, 0xd6, 0x2e, 0xf9, 0xd1, 0x76, 0xea, 0xf2, 0xce, 0x35, | 761 | 0x6b, 0x51, 0x95, 0x87, 0x56, 0x84, 0x9d, 0xdf, 0x90, 0xdb, 0x0e, 0xef, |
| 762 | 0x6f, 0xaf, 0x5c, 0xae, 0xc6, 0x55, 0x0e, 0x5c, 0x09, 0x38, 0xbf, 0x2e, | 762 | 0xa3, 0x8f, 0xa8, 0xf1, 0x3e, 0xbf, 0x73, 0x9d, 0xa8, 0x1c, 0x59, 0xd7, |
| 763 | 0x1f, 0xeb, 0xe1, 0xd9, 0xdd, 0x84, 0x6a, 0x1f, 0xee, 0x77, 0x1d, 0x37, | 763 | 0xf2, 0xe4, 0x54, 0x06, 0x76, 0xcb, 0x25, 0xb1, 0x3e, 0x9a, 0x19, 0x82, |
| 764 | 0x98, 0x58, 0xd7, 0xfa, 0xe4, 0x78, 0x06, 0xb8, 0xe5, 0x82, 0x58, 0x7f, | 764 | 0xef, 0xcd, 0xb5, 0x52, 0x18, 0x07, 0xda, 0x89, 0x91, 0xd7, 0x7f, 0xd1, |
| 765 | 0x90, 0xe9, 0x87, 0xef, 0xcd, 0xb1, 0xd2, 0x68, 0x07, 0xd9, 0x49, 0x70, | 765 | 0x6a, 0x00, 0xde, 0xdb, 0x4d, 0xda, 0xeb, 0xb0, 0xa1, 0x66, 0x38, 0xc6, |
| 766 | 0xaf, 0xbf, 0x13, 0xd4, 0x41, 0xef, 0x8d, 0x06, 0xf1, 0x3a, 0x30, 0xd4, | 766 | 0x13, 0xfb, 0x02, 0xfb, 0x0c, 0x80, 0xfe, 0x42, 0xfa, 0x7b, 0xb4, 0xca, |
| 767 | 0x34, 0xdb, 0x64, 0xc5, 0x3e, 0xc3, 0x3a, 0xbd, 0x90, 0xbf, 0x28, 0xe6, | 767 | 0x01, 0x69, 0x38, 0x6c, 0xe3, 0x73, 0x4c, 0x1a, 0x51, 0xdf, 0x4f, 0xf9, |
| 768 | 0xe3, 0xc0, 0x17, 0xd8, 0x27, 0x75, 0x97, 0xef, 0x1c, 0x7d, 0xa6, 0x12, | 768 | 0x21, 0xf0, 0x17, 0x57, 0x32, 0xc9, 0xbf, 0xc3, 0x67, 0x4e, 0xe9, 0x5c, |
| 769 | 0x0f, 0xfd, 0x94, 0xef, 0x81, 0x7f, 0x49, 0xa5, 0x93, 0xc2, 0xf3, 0x4e, | 769 | 0xed, 0x18, 0x78, 0x28, 0x68, 0x6c, 0xb3, 0x20, 0xe6, 0xf8, 0xbe, 0xa3, |
| 770 | 0xe6, 0xb3, 0xce, 0x56, 0x27, 0xb1, 0x87, 0x1c, 0x83, 0xcd, 0x1c, 0xf4, | 770 | 0x6d, 0x05, 0xde, 0xf1, 0x6b, 0x5b, 0x44, 0xeb, 0x18, 0xde, 0xfb, 0x05, |
| 771 | 0xf1, 0xe1, 0x1e, 0x8d, 0x15, 0x78, 0x1e, 0xaa, 0xb1, 0x88, 0xb6, 0x31, | 771 | 0xe1, 0x0b, 0xf8, 0x7c, 0x79, 0xc8, 0xd8, 0x14, 0x9d, 0xbe, 0x7c, 0x2a, |
| 772 | 0x3c, 0xdf, 0x71, 0xe0, 0x0b, 0x84, 0xfb, 0xf2, 0x99, 0x7d, 0x37, 0x7f, | 772 | 0x76, 0x91, 0xff, 0x0f, 0x62, 0xf3, 0x83, 0x32, 0x0b, 0x98, 0xcf, 0x9b, |
| 773 | 0x0b, 0x43, 0x1c, 0x93, 0x4e, 0x9c, 0xe7, 0x79, 0xdc, 0xc6, 0xc3, 0x32, | 773 | 0x7d, 0x3e, 0x92, 0x71, 0xe5, 0x56, 0x9d, 0x77, 0xf0, 0x07, 0x51, 0x32, |
| 774 | 0x03, 0x9a, 0x4f, 0x9b, 0x79, 0x3e, 0x98, 0xf1, 0xe4, 0x7a, 0x8d, 0xe7, | 774 | 0xdf, 0x90, 0x30, 0x8f, 0x99, 0x9c, 0x4a, 0x0f, 0x7b, 0x3d, 0x21, 0x2f, |
| 775 | 0x95, 0x07, 0x50, 0x32, 0xd7, 0x91, 0x34, 0x8f, 0x98, 0x7c, 0xce, 0x2c, | 775 | 0xc3, 0xbe, 0x7e, 0xa5, 0x92, 0x4a, 0x1f, 0x51, 0x71, 0xe7, 0x44, 0xec, |
| 776 | 0xe6, 0xfa, 0x98, 0xbc, 0x01, 0x7c, 0xfd, 0x66, 0x25, 0xed, 0x4f, 0xa8, | 776 | 0xaa, 0x8c, 0xc5, 0xe9, 0x03, 0x96, 0x9c, 0x44, 0xec, 0x16, 0xe8, 0xe1, |
| 777 | 0x3c, 0xa4, 0x54, 0xe2, 0xb2, 0x8c, 0x24, 0xe9, 0x03, 0x96, 0xdd, 0x54, | 777 | 0x76, 0xe5, 0x50, 0x3f, 0xff, 0x27, 0x45, 0x03, 0xfa, 0xf0, 0xb6, 0xca, |
| 778 | 0xe2, 0x3a, 0xe4, 0xe1, 0x46, 0xe5, 0x99, 0x1e, 0xfe, 0xaf, 0x8a, 0x3a, | 778 | 0x81, 0x49, 0x30, 0x66, 0x82, 0xf7, 0x21, 0x93, 0x87, 0xc3, 0x75, 0xd8, |
| 779 | 0xec, 0xe1, 0x0d, 0x95, 0x83, 0x94, 0x62, 0xcc, 0x04, 0xf7, 0xfd, 0x26, | 779 | 0x36, 0x24, 0x2f, 0x57, 0xda, 0xfa, 0x97, 0xeb, 0xe8, 0xdc, 0x36, 0xa5, |
| 780 | 0x0f, 0x8a, 0xe3, 0xf0, 0x5d, 0xbf, 0xbc, 0x51, 0xd9, 0xb6, 0xbf, 0x1c, | 780 | 0x5f, 0x8f, 0xf6, 0x53, 0x0e, 0x71, 0x3d, 0x3d, 0x87, 0xdf, 0x87, 0x78, |
| 781 | 0xc7, 0x7c, 0x03, 0xcf, 0xb1, 0x2e, 0xf4, 0x50, 0x0f, 0x71, 0x3c, 0xdd, | 781 | 0xf5, 0x63, 0x91, 0x8e, 0xfe, 0xbe, 0xc1, 0x62, 0xde, 0x0b, 0xf7, 0xfe, |
| 782 | 0x47, 0x58, 0x87, 0x7c, 0x0d, 0xe3, 0x9a, 0xea, 0x5b, 0xcb, 0xa4, 0x58, | 782 | 0x13, 0x47, 0xdb, 0x40, 0x1c, 0x97, 0x72, 0x8e, 0xaa, 0xf9, 0x78, 0xdf, |
| 783 | 0x96, 0xb4, 0x79, 0x9c, 0xfb, 0x54, 0x8f, 0xc6, 0x40, 0x6c, 0x97, 0x76, | 783 | 0x3b, 0x24, 0x3f, 0x6e, 0xfa, 0xf3, 0x30, 0x1f, 0x87, 0x39, 0x3f, 0x94, |
| 784 | 0x0f, 0xab, 0xfe, 0x78, 0xb6, 0xc7, 0xf3, 0xaf, 0xb0, 0x1f, 0xe6, 0x43, | 784 | 0x7d, 0x9d, 0x30, 0x68, 0xfd, 0xff, 0xb2, 0x8a, 0xeb, 0x4d, 0xa2, 0x3f, |
| 785 | 0x31, 0xe7, 0x8a, 0xba, 0xaf, 0x99, 0x06, 0x6d, 0xff, 0xdf, 0x50, 0xb1, | 785 | 0x75, 0x34, 0xe8, 0xa5, 0x1e, 0xd3, 0xff, 0xdf, 0xa1, 0x2d, 0xe3, 0xf8, |
| 786 | 0xf4, 0x71, 0xd4, 0xa7, 0x8d, 0x86, 0xbc, 0xd4, 0x12, 0xdb, 0xdf, 0x7c, | 786 | 0x4c, 0x7c, 0x72, 0x1d, 0xd8, 0xf8, 0x0f, 0x38, 0xa6, 0xdd, 0xb7, 0x4b, |
| 787 | 0x68, 0x5e, 0xf2, 0xfa, 0x99, 0xed, 0x6f, 0x32, 0xec, 0xbb, 0x5d, 0xf3, | 787 | 0x87, 0xc0, 0xaf, 0x27, 0xa4, 0xb1, 0x92, 0x8a, 0x3d, 0x2e, 0xfe, 0xbc, |
| 788 | 0x3e, 0xc4, 0xa5, 0xfd, 0xd8, 0xaf, 0x8f, 0x49, 0x7d, 0x25, 0x9d, 0xf8, | 788 | 0xad, 0x87, 0x79, 0x2f, 0x56, 0xc8, 0x8c, 0x39, 0x0b, 0x0a, 0x1e, 0xde, |
| 789 | 0xb4, 0x84, 0xfd, 0x06, 0x87, 0x78, 0xde, 0x51, 0xcc, 0x8c, 0xb8, 0x0b, | 789 | 0xdd, 0x26, 0x9c, 0xab, 0x58, 0xaf, 0xd1, 0xdc, 0x1d, 0x7b, 0x48, 0x64, |
| 790 | 0x8a, 0x9e, 0x54, 0x82, 0x39, 0xc8, 0x97, 0x31, 0x5e, 0xbd, 0xd1, 0x1a, | 790 | 0xb7, 0x24, 0x95, 0xd6, 0x67, 0x33, 0x22, 0x5b, 0x38, 0x9b, 0x3f, 0x31, |
| 791 | 0x7b, 0x48, 0xe5, 0x36, 0x25, 0xed, 0xeb, 0xb5, 0x19, 0x92, 0x4d, 0xac, | 791 | 0x67, 0xf3, 0x7e, 0xcc, 0xed, 0x5e, 0x18, 0x97, 0xd4, 0x85, 0x54, 0xfc, |
| 792 | 0xcd, 0x9f, 0x9b, 0xb5, 0xf9, 0x18, 0xfa, 0xf6, 0xce, 0x8c, 0x4a, 0xfa, | 792 | 0xbc, 0xf0, 0x8e, 0xf9, 0x00, 0xef, 0x98, 0xad, 0x47, 0x32, 0x71, 0xec, |
| 793 | 0x4c, 0x3a, 0x79, 0x5a, 0x78, 0x96, 0xb8, 0x8f, 0x31, 0x2c, 0xeb, 0xc1, | 793 | 0x37, 0x81, 0xfd, 0xa2, 0x6c, 0xf2, 0x99, 0xdf, 0xf7, 0xef, 0x23, 0x6f, |
| 794 | 0x4c, 0x12, 0xf3, 0x4d, 0x61, 0xbe, 0x28, 0x1b, 0xbc, 0x1e, 0x81, 0x6f, | 794 | 0x3f, 0x4c, 0x99, 0x49, 0x5c, 0x14, 0x54, 0x1b, 0xec, 0x93, 0xa7, 0x08, |
| 795 | 0xbe, 0x87, 0x7b, 0xfb, 0x10, 0x75, 0x26, 0x79, 0x51, 0x54, 0xef, 0x80, | 795 | 0xd3, 0xbf, 0xe3, 0xf9, 0xa8, 0x58, 0xe8, 0xad, 0x26, 0xbf, 0x5b, 0xd5, |
| 796 | 0x4f, 0x9e, 0x26, 0x4d, 0x00, 0xca, 0x9d, 0x29, 0x15, 0x07, 0xbc, 0xde, | 796 | 0xf0, 0xe5, 0x01, 0xdf, 0xbc, 0x86, 0x2f, 0x3e, 0xdb, 0xb6, 0x5d, 0x13, |
| 797 | 0xe0, 0xf9, 0xa2, 0xa6, 0xaf, 0x00, 0xfa, 0xe6, 0x34, 0x7d, 0xc9, 0x99, | 797 | 0xb1, 0xb3, 0x42, 0x7b, 0x89, 0xf6, 0x0b, 0xed, 0xfa, 0xbf, 0xe9, 0xd7, |
| 798 | 0x6d, 0xec, 0x9a, 0x4a, 0x9c, 0x12, 0xe2, 0x25, 0xe2, 0x17, 0xe2, 0xfa, | 798 | 0xb1, 0x3d, 0xf8, 0xb1, 0x0f, 0x64, 0xdb, 0x7b, 0xef, 0x42, 0xdf, 0x6b, |
| 799 | 0x47, 0x7a, 0xc3, 0x6f, 0x5a, 0xf2, 0x77, 0xe7, 0xb6, 0xe7, 0xde, 0x86, | 799 | 0x19, 0x95, 0x63, 0xec, 0x4c, 0xc9, 0x7b, 0x25, 0xfb, 0x91, 0x44, 0x3c, |
| 800 | 0xba, 0x57, 0x32, 0x2a, 0xbf, 0xd9, 0x3d, 0x22, 0x1f, 0x91, 0xdc, 0xa7, | 800 | 0x6b, 0xb9, 0xc6, 0x06, 0x44, 0x59, 0xe7, 0x33, 0x65, 0xae, 0x6b, 0x6c, |
| 801 | 0x52, 0xc9, 0x9c, 0xe5, 0x19, 0x0c, 0x88, 0xb2, 0xc6, 0x6b, 0xea, 0x5c, | 801 | 0x0b, 0x9e, 0x4d, 0x06, 0x6b, 0x29, 0xdc, 0xc2, 0x67, 0x1a, 0x02, 0xcd, |
| 802 | 0xcf, 0x60, 0x0b, 0xae, 0x4d, 0x06, 0x63, 0x29, 0xde, 0xc2, 0x67, 0xea, | 802 | 0x93, 0xd6, 0xde, 0x05, 0x1e, 0xd2, 0xff, 0x13, 0xe3, 0x2a, 0xf0, 0x58, |
| 803 | 0x87, 0xcc, 0x53, 0xd6, 0x7e, 0x07, 0x7b, 0x48, 0xff, 0x9f, 0x8e, 0xcb, | 803 | 0x06, 0x1e, 0x4f, 0xdd, 0x65, 0x83, 0x85, 0xda, 0x36, 0xd8, 0xb6, 0x5a, |
| 804 | 0xe0, 0xe3, 0x3c, 0xf8, 0x78, 0xfc, 0x16, 0x0c, 0x16, 0xdd, 0xc6, 0x60, | 804 | 0xef, 0x26, 0x60, 0xca, 0x3b, 0xb4, 0xbf, 0xca, 0x6d, 0x5a, 0x21, 0x4c, |
| 805 | 0x5b, 0x6a, 0xbc, 0x7b, 0x41, 0x53, 0xc1, 0x25, 0xfe, 0x9a, 0xdf, 0x96, | 805 | 0xe3, 0xfc, 0x2e, 0x5b, 0xae, 0x67, 0x78, 0x1e, 0xb0, 0xc1, 0x30, 0xdf, |
| 806 | 0x15, 0xd2, 0x34, 0xca, 0xff, 0xb5, 0x23, 0x57, 0x33, 0x5c, 0x0f, 0x60, | 806 | 0xda, 0x0e, 0x2d, 0x61, 0xff, 0x8a, 0x7e, 0x41, 0xbb, 0x09, 0x27, 0x68, |
| 807 | 0x30, 0xf4, 0xb7, 0xb6, 0x23, 0x4b, 0x98, 0xbf, 0x92, 0x5f, 0xc8, 0x6e, | 807 | 0xf1, 0x2c, 0x38, 0x9f, 0x58, 0x37, 0x00, 0xcb, 0xb6, 0xa2, 0x03, 0x4d, |
| 808 | 0xca, 0x75, 0x2c, 0xae, 0x05, 0xfb, 0x13, 0xeb, 0x1a, 0x68, 0xd9, 0x52, | 808 | 0x03, 0xdb, 0xf5, 0xde, 0x37, 0xa0, 0x01, 0xee, 0x93, 0xf4, 0xe7, 0xd3, |
| 809 | 0x72, 0xa0, 0x65, 0x60, 0xab, 0xd6, 0xf9, 0x1e, 0x32, 0xc0, 0x79, 0x52, | 809 | 0x5e, 0xfb, 0xbb, 0x75, 0xf8, 0xb7, 0x25, 0xb9, 0xff, 0x90, 0x27, 0xb9, |
| 810 | 0xfe, 0x42, 0xd9, 0xdb, 0xc9, 0xa7, 0xe8, 0x00, 0x4f, 0x3e, 0x78, 0x4f, | 810 | 0x0b, 0x2d, 0x59, 0x48, 0x8b, 0x35, 0x76, 0x88, 0x34, 0x49, 0x3b, 0x01, |
| 811 | 0x56, 0xf2, 0x67, 0x78, 0x16, 0x26, 0xd6, 0xc8, 0x3d, 0x94, 0x49, 0xe2, | 811 | 0x36, 0x64, 0x8c, 0x38, 0xd6, 0xf6, 0xe0, 0xec, 0x57, 0xf7, 0xe3, 0xf7, |
| 812 | 0x04, 0x60, 0xc8, 0x04, 0x79, 0xac, 0xf1, 0xe0, 0xcc, 0xb3, 0x7b, 0xf1, | 812 | 0x6f, 0xfa, 0x79, 0xbf, 0x94, 0xdb, 0xa0, 0xbc, 0x12, 0xeb, 0xbe, 0x43, |
| 813 | 0x7b, 0xb3, 0x87, 0x39, 0x33, 0xf9, 0x73, 0xd4, 0x57, 0x62, 0xdd, 0x79, | 813 | 0xda, 0x3f, 0xbc, 0x1d, 0x05, 0xce, 0xd1, 0x9e, 0x7c, 0xa2, 0xcb, 0xc4, |
| 814 | 0x8f, 0xf6, 0x0f, 0x6f, 0xc4, 0xc1, 0x73, 0xbc, 0x1f, 0x78, 0xb2, 0x0d, | 814 | 0x51, 0xb5, 0x5e, 0x4e, 0x3e, 0x41, 0xbc, 0xa2, 0xfc, 0xea, 0x4f, 0x1c, |
| 815 | 0xfa, 0xca, 0x31, 0xf3, 0xe6, 0x3d, 0xf9, 0x8a, 0xf2, 0xd9, 0x29, 0xa3, | 815 | 0x3f, 0x27, 0x49, 0xc7, 0x04, 0xc9, 0x17, 0x25, 0x99, 0xcf, 0x30, 0x27, |
| 816 | 0x03, 0xa8, 0x47, 0xc4, 0xec, 0x8b, 0xb2, 0xcc, 0x31, 0x46, 0x9f, 0xe9, | 816 | 0xb4, 0x57, 0x8e, 0x40, 0xae, 0x4d, 0x55, 0x26, 0xe5, 0x0b, 0x95, 0x88, |
| 817 | 0x94, 0x09, 0xe8, 0xb5, 0x23, 0x95, 0x71, 0xf9, 0x72, 0xa5, 0x4b, 0xe1, | 817 | 0xb2, 0x1b, 0xfe, 0x2c, 0x9d, 0x8a, 0x8d, 0x5a, 0x2d, 0x79, 0x04, 0xf6, |
| 818 | 0x86, 0xbf, 0xf6, 0xd3, 0x89, 0x61, 0x2b, 0x90, 0x07, 0x81, 0x7f, 0x66, | 818 | 0xcf, 0xec, 0x50, 0x97, 0xbc, 0x32, 0xae, 0xf3, 0x6f, 0x6f, 0x33, 0xb9, |
| 819 | 0xfa, 0xdb, 0xe4, 0xcd, 0x51, 0x9d, 0xfb, 0x7b, 0x83, 0xc9, 0x8d, 0x2e, | 819 | 0xce, 0x61, 0xce, 0x28, 0xf7, 0x03, 0xb9, 0x6f, 0xc1, 0x17, 0xb0, 0xba, |
| 820 | 0xf3, 0x55, 0x39, 0x1f, 0xe8, 0x7d, 0x0b, 0xbe, 0x80, 0xd5, 0x2e, 0x33, | 820 | 0x65, 0x36, 0x1a, 0x91, 0xe9, 0x34, 0xca, 0x37, 0xa7, 0xd5, 0x37, 0xa4, |
| 821 | 0xf1, 0x2e, 0xf9, 0xb8, 0x8f, 0xf2, 0x36, 0x5f, 0x7d, 0x63, 0x9c, 0x8b, | 821 | 0xd9, 0x68, 0xa7, 0x1c, 0x21, 0xcc, 0x2c, 0xdf, 0x62, 0xca, 0x9f, 0xf5, |
| 822 | 0x37, 0xeb, 0x91, 0x37, 0xcd, 0xd8, 0x5f, 0x34, 0xe5, 0xbf, 0xe9, 0x6d, | 822 | 0x77, 0xc0, 0x62, 0xcd, 0x67, 0x02, 0x6a, 0x7f, 0xe5, 0x3a, 0xe5, 0x1b, |
| 823 | 0xa2, 0xc5, 0x9a, 0xcb, 0x44, 0xd4, 0xfc, 0xe6, 0x6b, 0xd4, 0x6f, 0x6c, | 823 | 0xc7, 0x40, 0x9e, 0x34, 0x79, 0x0f, 0x59, 0x92, 0x35, 0xc8, 0x97, 0x62, |
| 824 | 0x03, 0x7d, 0xd2, 0xe0, 0x39, 0x51, 0x59, 0xd6, 0xa0, 0x5f, 0x4a, 0x55, | 824 | 0x4d, 0xac, 0x8d, 0x0c, 0x2c, 0x6a, 0x57, 0xdb, 0x9f, 0x45, 0xd0, 0xd7, |
| 825 | 0xb1, 0xce, 0x65, 0x80, 0xa8, 0x3d, 0x8d, 0x3f, 0x4b, 0x90, 0xaf, 0xd9, | 825 | 0x5c, 0x8d, 0xf2, 0x6f, 0x4a, 0xe5, 0x4e, 0xcf, 0xc1, 0xd6, 0x85, 0x4f, |
| 826 | 0xaa, 0x8a, 0x59, 0xaa, 0xbc, 0xed, 0x59, 0x60, 0x5d, 0xf8, 0xc4, 0xc0, | 826 | 0x3c, 0xdb, 0xed, 0x99, 0x7b, 0xce, 0x5e, 0xc6, 0x43, 0x3a, 0x65, 0x98, |
| 827 | 0x10, 0x26, 0x7f, 0xa5, 0x93, 0xf1, 0x90, 0x66, 0x1d, 0x16, 0xfe, 0x2f, | 827 | 0xff, 0x3f, 0x73, 0x0e, 0x0f, 0x48, 0x5f, 0x09, 0xe7, 0xe2, 0xdb, 0xdc, |
| 828 | 0x9d, 0xff, 0xd4, 0x2b, 0xdd, 0x65, 0xac, 0x4b, 0x88, 0xb9, 0xc1, 0x53, | 828 | 0xc0, 0x29, 0xd6, 0xcc, 0xa9, 0x73, 0xf2, 0xcf, 0x84, 0xb2, 0xa7, 0x33, |
| 829 | 0x8c, 0x99, 0x57, 0xeb, 0x14, 0xae, 0x09, 0x75, 0x4f, 0x73, 0xbe, 0x78, | 829 | 0x67, 0xdb, 0xb7, 0x39, 0xc8, 0xb3, 0xd4, 0x17, 0x52, 0x0a, 0xc3, 0xa6, |
| 830 | 0x88, 0x39, 0xb8, 0x67, 0x69, 0x2f, 0xa4, 0x1c, 0x03, 0xa6, 0xed, 0x38, | 830 | 0xed, 0xb9, 0x00, 0xdd, 0x5d, 0xf3, 0x40, 0x2b, 0x93, 0xd0, 0x87, 0x93, |
| 831 | 0x03, 0xdb, 0x5d, 0xcd, 0x42, 0x56, 0xc6, 0x55, 0xde, 0xe7, 0x3c, 0xb0, | 831 | 0x52, 0x86, 0xed, 0xf6, 0xd1, 0xf4, 0x67, 0xc5, 0x7e, 0xea, 0xa0, 0xac, |
| 832 | 0xdb, 0x1f, 0xf8, 0x7f, 0x2a, 0xf6, 0xd3, 0x07, 0x64, 0xad, 0xda, 0x01, | 832 | 0xd5, 0x7a, 0x80, 0x0f, 0xea, 0x85, 0x90, 0xf2, 0xaf, 0x6f, 0x1f, 0xa7, |
| 833 | 0x7e, 0xd0, 0x2e, 0x44, 0x95, 0x7f, 0x7d, 0xe3, 0x28, 0xed, 0x1d, 0x6d, | 833 | 0xbe, 0xa3, 0x2e, 0xd1, 0x67, 0xb1, 0x5d, 0xff, 0xc4, 0x80, 0xfe, 0x7e, |
| 834 | 0x89, 0x5e, 0x8b, 0xad, 0xda, 0xf7, 0x7a, 0xf5, 0xb7, 0x33, 0x7b, 0x65, | 834 | 0x65, 0xbf, 0x6c, 0xd5, 0x7d, 0x5d, 0x08, 0xff, 0xb0, 0x16, 0x32, 0x7a, |
| 835 | 0xb3, 0x16, 0xda, 0x42, 0xf8, 0x87, 0xd5, 0xa8, 0xb1, 0xcb, 0x9d, 0xd0, | 835 | 0xb9, 0x17, 0xb2, 0xfb, 0xaf, 0x43, 0x0d, 0xe5, 0xab, 0x73, 0xff, 0xd4, |
| 836 | 0xdd, 0xdf, 0x8f, 0xd6, 0x95, 0xaf, 0xce, 0xf9, 0xd3, 0x06, 0x45, 0x99, | 836 | 0x41, 0xea, 0xff, 0x70, 0xf4, 0x36, 0x5c, 0xee, 0xbd, 0x53, 0x07, 0x69, |
| 837 | 0x17, 0xd7, 0x59, 0xf7, 0x38, 0xf7, 0x66, 0x1b, 0xa4, 0x71, 0x87, 0x7b, | 837 | 0xbb, 0xc3, 0x39, 0xcc, 0xf5, 0x78, 0x1f, 0xc7, 0x3d, 0x46, 0x25, 0x74, |
| 838 | 0x90, 0xe3, 0x31, 0x87, 0x82, 0x73, 0x8c, 0x4b, 0xf4, 0xfc, 0x63, 0x62, | 838 | 0xf1, 0x84, 0xd8, 0xf0, 0x5b, 0x02, 0x4b, 0xb4, 0xf5, 0xee, 0xf4, 0x5d, |
| 839 | 0xc3, 0x6f, 0x89, 0x2c, 0x11, 0xeb, 0xdd, 0xec, 0xbb, 0x44, 0x2e, 0xba, | 839 | 0x02, 0x97, 0x6d, 0xf3, 0xad, 0xed, 0xb0, 0xb6, 0x65, 0x32, 0x28, 0x1b, |
| 840 | 0xe6, 0x5b, 0xec, 0x41, 0x8d, 0x65, 0x32, 0x28, 0xeb, 0xe1, 0xf7, 0xd9, | 840 | 0xfe, 0xf7, 0xb7, 0xfc, 0xdd, 0xe1, 0xdb, 0x1d, 0x78, 0x03, 0x5d, 0x8a, |
| 841 | 0xfc, 0x35, 0xdb, 0xcd, 0xd0, 0xb7, 0xd8, 0xd5, 0x96, 0xe2, 0xef, 0xff, | 841 | 0xbf, 0xff, 0x0b, 0xc4, 0xbf, 0x6d, 0x24, 0x80, 0x4a, 0x00, 0x00, 0x00 }; |
| 842 | 0x01, 0x37, 0x64, 0x26, 0x2b, 0x1c, 0x4c, 0x00, 0x00, 0x00 }; | ||
| 843 | 842 | ||
| 844 | static const u32 bnx2_COM_b09FwData[(0x0/4) + 1] = { 0x0 }; | 843 | static const u32 bnx2_COM_b09FwData[(0x0/4) + 1] = { 0x0 }; |
| 845 | static const u32 bnx2_COM_b09FwRodata[(0x30/4) + 1] = { | 844 | static const u32 bnx2_COM_b09FwRodata[(0x30/4) + 1] = { |
| 846 | 0x80080100, 0x80080080, 0x80080000, 0x80080240, 0x08000e20, 0x08000e78, | 845 | 0x80080100, 0x80080080, 0x80080000, 0x80080240, 0x08000ea4, 0x08000efc, |
| 847 | 0x08000ebc, 0x08000f50, 0x08000f94, 0x80080100, 0x80080080, 0x80080000, | 846 | 0x08000f40, 0x08000fd4, 0x08001018, 0x80080100, 0x80080080, 0x80080000, |
| 848 | 0x00000000 }; | 847 | 0x00000000 }; |
| 849 | 848 | ||
| 850 | static struct fw_info bnx2_com_fw_09 = { | 849 | static struct fw_info bnx2_com_fw_09 = { |
| 851 | /* Firmware version: 4.4.23 */ | 850 | /* Firmware version: 4.6.15 */ |
| 852 | .ver_major = 0x4, | 851 | .ver_major = 0x4, |
| 853 | .ver_minor = 0x4, | 852 | .ver_minor = 0x6, |
| 854 | .ver_fix = 0x17, | 853 | .ver_fix = 0xf, |
| 855 | 854 | ||
| 856 | .start_addr = 0x080000f8, | 855 | .start_addr = 0x080000f8, |
| 857 | 856 | ||
| 858 | .text_addr = 0x08000000, | 857 | .text_addr = 0x08000000, |
| 859 | .text_len = 0x4c18, | 858 | .text_len = 0x4a7c, |
| 860 | .text_index = 0x0, | 859 | .text_index = 0x0, |
| 861 | .gz_text = bnx2_COM_b09FwText, | 860 | .gz_text = bnx2_COM_b09FwText, |
| 862 | .gz_text_len = sizeof(bnx2_COM_b09FwText), | 861 | .gz_text_len = sizeof(bnx2_COM_b09FwText), |
| @@ -866,1210 +865,1189 @@ static struct fw_info bnx2_com_fw_09 = { | |||
| 866 | .data_index = 0x0, | 865 | .data_index = 0x0, |
| 867 | .data = bnx2_COM_b09FwData, | 866 | .data = bnx2_COM_b09FwData, |
| 868 | 867 | ||
| 869 | .sbss_addr = 0x08004c60, | 868 | .sbss_addr = 0x08004ae0, |
| 870 | .sbss_len = 0x38, | 869 | .sbss_len = 0x38, |
| 871 | .sbss_index = 0x0, | 870 | .sbss_index = 0x0, |
| 872 | 871 | ||
| 873 | .bss_addr = 0x08004c98, | 872 | .bss_addr = 0x08004b18, |
| 874 | .bss_len = 0xbc, | 873 | .bss_len = 0xc0, |
| 875 | .bss_index = 0x0, | 874 | .bss_index = 0x0, |
| 876 | 875 | ||
| 877 | .rodata_addr = 0x08004c18, | 876 | .rodata_addr = 0x08004a7c, |
| 878 | .rodata_len = 0x30, | 877 | .rodata_len = 0x30, |
| 879 | .rodata_index = 0x0, | 878 | .rodata_index = 0x0, |
| 880 | .rodata = bnx2_COM_b09FwRodata, | 879 | .rodata = bnx2_COM_b09FwRodata, |
| 881 | }; | 880 | }; |
| 882 | 881 | ||
| 883 | static u8 bnx2_CP_b09FwText[] = { | 882 | static u8 bnx2_CP_b09FwText[] = { |
| 884 | 0xad, 0xbc, 0x0b, 0x74, 0x1c, 0xd5, 0x95, 0x2e, 0xfc, 0x55, 0x75, 0xb7, | 883 | 0xa5, 0xbc, 0x0d, 0x74, 0x1c, 0xe5, 0x95, 0x26, 0xfc, 0x54, 0x75, 0xb7, |
| 885 | 0xd4, 0x92, 0xda, 0x52, 0x4b, 0x6e, 0xcb, 0x6d, 0xd0, 0xe0, 0x6a, 0xab, | 884 | 0xd4, 0x92, 0x5a, 0x52, 0x49, 0x6e, 0x8b, 0x36, 0x68, 0x70, 0xb5, 0x55, |
| 886 | 0xda, 0x6a, 0x2c, 0x01, 0xd5, 0xb2, 0x0c, 0x4d, 0xa6, 0xc0, 0x1d, 0x5b, | 885 | 0x2d, 0x0b, 0x4b, 0x40, 0xb5, 0x24, 0x3b, 0xed, 0x6c, 0x83, 0x3b, 0xb6, |
| 887 | 0x80, 0x0c, 0x26, 0x11, 0xc6, 0xb9, 0x23, 0xe6, 0x7a, 0xfe, 0xf4, 0x18, | 886 | 0x6c, 0x64, 0x63, 0x40, 0x36, 0x06, 0xc4, 0xb7, 0xfe, 0x3e, 0x7a, 0xfc, |
| 888 | 0x03, 0x86, 0x90, 0x5c, 0x33, 0x93, 0x9b, 0x71, 0xb8, 0x9e, 0xeb, 0x8a, | 887 | 0x03, 0x86, 0x38, 0x19, 0x91, 0xcd, 0xce, 0x0a, 0xd6, 0x59, 0x55, 0xe4, |
| 889 | 0xe4, 0x87, 0xc0, 0xa5, 0xee, 0x96, 0x90, 0x1f, 0xac, 0x35, 0xeb, 0xa7, | 888 | 0x3f, 0xd9, 0x6e, 0x75, 0x4b, 0x42, 0xfe, 0xe1, 0xec, 0x9c, 0xa5, 0x2d, |
| 890 | 0x2d, 0xcb, 0x92, 0x21, 0xad, 0x16, 0x49, 0x98, 0x19, 0xe7, 0xe6, 0x81, | 889 | 0xcb, 0x96, 0x21, 0xad, 0x16, 0x24, 0x6c, 0xc6, 0x39, 0x27, 0x09, 0x1a, |
| 891 | 0xc6, 0xd8, 0x60, 0x93, 0xf0, 0xc8, 0x6b, 0xfd, 0x4c, 0xfe, 0xb9, 0x7f, | 890 | 0x63, 0x83, 0x0d, 0x18, 0xc8, 0x24, 0xf9, 0x86, 0xc9, 0xd9, 0x5d, 0x34, |
| 892 | 0x3c, 0xb6, 0x79, 0x83, 0xe3, 0x3c, 0x47, 0x9e, 0xc1, 0xa9, 0xff, 0xdb, | 891 | 0xc6, 0xfc, 0x19, 0x70, 0x1c, 0x92, 0xc9, 0x9a, 0x19, 0x4c, 0xed, 0x73, |
| 893 | 0xd5, 0xdd, 0xb6, 0xec, 0x40, 0x1e, 0xeb, 0x8e, 0xd6, 0xaa, 0xa5, 0xee, | 892 | 0xab, 0xd5, 0xb6, 0xec, 0x30, 0xc9, 0xcc, 0x59, 0x9d, 0xd3, 0xa7, 0xab, |
| 894 | 0xaa, 0x73, 0xf6, 0x39, 0x67, 0x9f, 0xbd, 0xbf, 0xfd, 0xed, 0x73, 0x4e, | 893 | 0xab, 0xde, 0x9f, 0xfb, 0xde, 0xf7, 0xde, 0xe7, 0x3e, 0xf7, 0x7d, 0xdf, |
| 895 | 0xb5, 0x06, 0x54, 0xa3, 0xf4, 0x37, 0x8b, 0xd7, 0xd5, 0x1d, 0x1b, 0xee, | 894 | 0x92, 0x0e, 0x14, 0x63, 0xf2, 0xaf, 0x94, 0x9f, 0x9b, 0x9a, 0x3b, 0xd6, |
| 896 | 0x5e, 0xdc, 0x7e, 0x75, 0x87, 0x7c, 0xf7, 0xce, 0xf5, 0x7a, 0xf1, 0x61, | 895 | 0xce, 0x0d, 0xdf, 0x34, 0x4f, 0x7e, 0xbb, 0xcb, 0x0b, 0xdc, 0xf8, 0xb2, |
| 897 | 0x7f, 0x26, 0x12, 0x97, 0xde, 0xd2, 0x3e, 0xb4, 0xe0, 0x47, 0xfc, 0x25, | 896 | 0xbf, 0x28, 0x22, 0x57, 0xdf, 0xd2, 0xbf, 0xb4, 0xe0, 0xbf, 0xf0, 0x17, |
| 898 | 0x10, 0x91, 0x7f, 0xad, 0xa5, 0xaf, 0x1e, 0x20, 0x58, 0x6e, 0x5f, 0x2e, | 897 | 0x41, 0x50, 0xe1, 0x57, 0xfd, 0xe4, 0x4f, 0x17, 0xa0, 0xe5, 0xfb, 0x97, |
| 899 | 0xf8, 0x55, 0xb3, 0xf3, 0xbf, 0x2e, 0xd3, 0xe1, 0xf7, 0x98, 0x9f, 0xff, | 898 | 0x0f, 0xbc, 0x6a, 0xd4, 0xb8, 0x77, 0xa1, 0x01, 0xaf, 0x2b, 0xba, 0xaa, |
| 900 | 0x8b, 0xbb, 0x75, 0x20, 0x99, 0x6f, 0xd5, 0x96, 0xe3, 0x9c, 0x63, 0x85, | 899 | 0x7d, 0xad, 0x01, 0xc4, 0x32, 0xf5, 0xfa, 0x22, 0x5c, 0xb4, 0x2d, 0xbf, |
| 901 | 0xbc, 0x90, 0xfb, 0x7f, 0x62, 0x7e, 0xf0, 0xc4, 0xb7, 0xae, 0x8b, 0x9c, | 900 | 0x1b, 0x72, 0xff, 0xcf, 0xa2, 0x9f, 0x3f, 0xf5, 0x93, 0xaf, 0x04, 0xcf, |
| 902 | 0xc9, 0x79, 0xe0, 0x0f, 0x9a, 0x16, 0x82, 0x0b, 0xe1, 0x6f, 0x62, 0x9d, | 901 | 0xa7, 0x5d, 0xf0, 0x6a, 0x51, 0x0b, 0x5a, 0x2d, 0xbc, 0xd5, 0xac, 0xf3, |
| 903 | 0xbf, 0x6b, 0xd9, 0xa6, 0xa2, 0xb6, 0x2c, 0x2b, 0x12, 0xce, 0x21, 0x12, | 902 | 0x57, 0xb3, 0xb7, 0xa9, 0x28, 0xcb, 0xb7, 0x15, 0x0c, 0xa4, 0x11, 0xd4, |
| 904 | 0xb4, 0x10, 0x89, 0x59, 0x40, 0xca, 0x6b, 0x22, 0x55, 0x69, 0xfa, 0x51, | 903 | 0x2c, 0x04, 0xeb, 0x2c, 0x20, 0xee, 0x8e, 0x22, 0x5e, 0x18, 0xf5, 0xa2, |
| 905 | 0xa1, 0x57, 0x20, 0x15, 0xdc, 0xa8, 0x6d, 0xe1, 0x18, 0x97, 0xd9, 0x7e, | 904 | 0xc0, 0x28, 0x40, 0x5c, 0xeb, 0xd4, 0xb7, 0x34, 0x03, 0x0b, 0x13, 0x5e, |
| 906 | 0xed, 0x44, 0x1e, 0xb8, 0xdb, 0xf6, 0xe3, 0xb8, 0x27, 0xa0, 0x9d, 0xcc, | 905 | 0xfd, 0x74, 0x06, 0x58, 0x9b, 0xf0, 0x62, 0xc2, 0xe5, 0xd3, 0xdf, 0xc9, |
| 907 | 0xef, 0xab, 0x2b, 0xea, 0x23, 0x09, 0x8f, 0x8e, 0x94, 0x6a, 0xca, 0x7d, | 906 | 0x44, 0xca, 0x72, 0xfa, 0x88, 0xc1, 0x65, 0x20, 0xae, 0x46, 0xe5, 0x3e, |
| 908 | 0x68, 0xcb, 0xf3, 0x48, 0xf9, 0xcc, 0xcf, 0x6b, 0xe3, 0x36, 0xd0, 0x9b, | 907 | 0xf4, 0x45, 0x19, 0xa9, 0x0b, 0x6c, 0x4b, 0x7d, 0x5b, 0x7f, 0x37, 0x11, |
| 909 | 0x69, 0x36, 0x4e, 0xa0, 0x35, 0x7c, 0x18, 0x95, 0x48, 0x85, 0x22, 0x31, | 908 | 0xd4, 0xb6, 0xa1, 0x3e, 0x30, 0x84, 0x42, 0xc4, 0xfd, 0xc1, 0x3a, 0xe0, |
| 910 | 0xe0, 0x83, 0x73, 0x8f, 0x66, 0x14, 0xf8, 0xf4, 0xd9, 0xe8, 0xdc, 0x0b, | 909 | 0xf3, 0x8b, 0x3b, 0x53, 0x0a, 0x3c, 0xc6, 0x34, 0xb4, 0xec, 0x07, 0x76, |
| 911 | 0x3c, 0x92, 0x89, 0x24, 0x75, 0x05, 0xe8, 0x9f, 0x94, 0xba, 0x91, 0x60, | 910 | 0xa4, 0x82, 0x31, 0x83, 0xc3, 0xeb, 0x19, 0x93, 0xba, 0x41, 0x2d, 0xcd, |
| 912 | 0x8e, 0xcf, 0xb7, 0x64, 0x80, 0xad, 0x99, 0xd9, 0xd8, 0x96, 0x75, 0xf0, | 911 | 0xe7, 0x5b, 0x52, 0xc0, 0xd6, 0xd4, 0x34, 0x6c, 0xeb, 0xb3, 0xf1, 0xa2, |
| 913 | 0x9c, 0xd1, 0x1c, 0xdc, 0xc7, 0x16, 0x7a, 0xdd, 0xe7, 0xb3, 0x61, 0xe5, | 912 | 0x59, 0xa3, 0x1d, 0x60, 0x0f, 0xdd, 0xce, 0xf3, 0x69, 0xb0, 0xd2, 0xf2, |
| 914 | 0xe4, 0xf9, 0x5b, 0xce, 0xb7, 0x5a, 0x82, 0x78, 0x7a, 0x32, 0x84, 0x67, | 913 | 0xfc, 0x03, 0xfb, 0x27, 0xb3, 0x35, 0x3c, 0x3b, 0xe6, 0xc7, 0x0b, 0x63, |
| 915 | 0x27, 0xeb, 0xf1, 0x48, 0xb6, 0x1e, 0xdb, 0xb3, 0x31, 0xa8, 0xba, 0x83, | 914 | 0x15, 0xd8, 0xd1, 0x57, 0x81, 0xed, 0x7d, 0x75, 0x50, 0x0d, 0x1b, 0x75, |
| 916 | 0x58, 0x3c, 0x86, 0x8a, 0xeb, 0x1d, 0x9c, 0x34, 0xda, 0xb0, 0x95, 0x82, | 915 | 0xe1, 0x3a, 0x14, 0xcc, 0xb7, 0xf1, 0x8e, 0xd9, 0x80, 0xad, 0x6c, 0xf8, |
| 917 | 0x5f, 0x6d, 0x6b, 0xc4, 0xda, 0x60, 0x13, 0xb6, 0xe8, 0xd7, 0xa1, 0x38, | 916 | 0xcd, 0x86, 0x2a, 0xac, 0xd1, 0xaa, 0xb1, 0xc5, 0xf8, 0x0a, 0x72, 0x63, |
| 918 | 0xd6, 0x0f, 0xce, 0x65, 0x32, 0xd2, 0x3f, 0xaf, 0xaa, 0xea, 0x37, 0xe2, | 917 | 0xfd, 0xfc, 0x62, 0x2a, 0x85, 0xb8, 0x27, 0xea, 0x56, 0x55, 0xe3, 0x56, |
| 919 | 0xf4, 0x4e, 0x13, 0xef, 0xef, 0xc4, 0x9a, 0x5a, 0x38, 0x4e, 0x3e, 0x1e, | 918 | 0x9c, 0xdb, 0x1d, 0xc5, 0x27, 0xbb, 0xb1, 0xba, 0x0c, 0xb6, 0x9d, 0x09, |
| 920 | 0xed, 0x7e, 0x50, 0x09, 0x6a, 0x4f, 0xe5, 0xd9, 0xa1, 0x55, 0x5e, 0xca, | 919 | 0x87, 0xda, 0x36, 0x2a, 0x9a, 0xfe, 0x4c, 0x86, 0x02, 0xad, 0x74, 0xb3, |
| 921 | 0x83, 0x36, 0x92, 0x9f, 0x39, 0x15, 0x6c, 0x2f, 0xc3, 0x76, 0x33, 0xd2, | 920 | 0x3d, 0xe8, 0x43, 0x99, 0xa9, 0x53, 0xc1, 0xfe, 0x52, 0xec, 0x37, 0x25, |
| 922 | 0x97, 0x30, 0xbe, 0xd5, 0xf2, 0xdf, 0x68, 0x0f, 0xc5, 0x31, 0x6d, 0xcd, | 921 | 0xb2, 0x04, 0xf0, 0x93, 0xd9, 0x7f, 0x41, 0x7b, 0xc8, 0x8d, 0x69, 0x6b, |
| 923 | 0xbc, 0xc6, 0x3e, 0x69, 0xec, 0x4f, 0x13, 0xbe, 0x36, 0x19, 0xc6, 0x57, | 922 | 0xea, 0x2d, 0xca, 0xa4, 0x53, 0x9e, 0x6a, 0xfc, 0x60, 0x2c, 0x80, 0xef, |
| 924 | 0xd9, 0xb7, 0xaf, 0x4c, 0x4a, 0x1f, 0x23, 0x7b, 0x2c, 0xd4, 0x63, 0x34, | 923 | 0x53, 0xb6, 0xe7, 0xc6, 0x44, 0xc6, 0xe0, 0x3e, 0x0b, 0x15, 0x18, 0xee, |
| 925 | 0xdb, 0x84, 0xa7, 0xf5, 0x36, 0x7c, 0x85, 0x7d, 0xec, 0x33, 0x62, 0x58, | 924 | 0xab, 0xc6, 0xb3, 0x46, 0x03, 0x9e, 0xa3, 0x8c, 0x9b, 0xcd, 0x3a, 0xac, |
| 926 | 0x9b, 0xb8, 0x8b, 0xfd, 0x51, 0xb0, 0xaa, 0xed, 0x2f, 0x4b, 0xfd, 0x8a, | 925 | 0x89, 0xdc, 0x4f, 0x79, 0x14, 0xac, 0x6c, 0xf8, 0xf3, 0x49, 0xb9, 0x82, |
| 927 | 0x68, 0x50, 0x55, 0x24, 0x1b, 0x22, 0x31, 0x4d, 0x15, 0x99, 0x17, 0xfa, | 926 | 0x3a, 0x54, 0x15, 0xb1, 0xca, 0x60, 0x9d, 0xae, 0x4a, 0x9b, 0x97, 0xe5, |
| 928 | 0x3b, 0x90, 0x81, 0xe5, 0x37, 0xa5, 0xcf, 0x37, 0x22, 0xcf, 0xfe, 0x7e, | 927 | 0xed, 0x4d, 0xc1, 0xf2, 0x46, 0x45, 0xe6, 0x5b, 0x91, 0xa1, 0xbc, 0xdf, |
| 929 | 0x79, 0x67, 0xd4, 0x58, 0xaf, 0x62, 0x65, 0x80, 0x7d, 0x7e, 0x20, 0x1e, | 928 | 0xdb, 0x1d, 0x32, 0x37, 0xa8, 0x58, 0xee, 0xa3, 0xcc, 0x8f, 0x84, 0x43, |
| 930 | 0x4d, 0x2c, 0x62, 0x9f, 0xc7, 0xf3, 0x2a, 0xc7, 0x13, 0xd2, 0xc6, 0xd8, | 929 | 0x91, 0x39, 0x94, 0x79, 0x24, 0xa3, 0x72, 0x3c, 0x7e, 0xfd, 0x10, 0x65, |
| 931 | 0xf7, 0xe4, 0x2a, 0x95, 0x7d, 0x67, 0x5f, 0x32, 0xec, 0x4b, 0x86, 0x7d, | 930 | 0x8f, 0xad, 0x54, 0x29, 0x3b, 0x65, 0x49, 0x51, 0x96, 0x14, 0x65, 0x49, |
| 932 | 0xc9, 0xb0, 0x2f, 0x6e, 0xbf, 0x63, 0xec, 0x73, 0x71, 0x8e, 0x46, 0xf2, | 931 | 0x51, 0x16, 0x47, 0xee, 0x3a, 0xca, 0x9c, 0x9b, 0xa3, 0xa1, 0xcc, 0x04, |
| 933 | 0xc7, 0xd9, 0xdf, 0x99, 0xfd, 0x6c, 0x62, 0xdf, 0x91, 0xaa, 0xe7, 0xbc, | 932 | 0xe5, 0x9d, 0x2a, 0x67, 0x35, 0x65, 0x47, 0xbc, 0x22, 0xfa, 0x6d, 0xbd, |
| 934 | 0x35, 0xa7, 0x65, 0xde, 0x1c, 0xe7, 0x55, 0xc3, 0x71, 0x7e, 0x6e, 0x04, | 933 | 0x26, 0x49, 0x7d, 0xa7, 0x6c, 0xfb, 0x4d, 0xd3, 0xb6, 0x3f, 0x35, 0x7d, |
| 935 | 0xa8, 0xbf, 0x0c, 0xed, 0xa0, 0xdc, 0x9f, 0xf9, 0x56, 0x85, 0x89, 0x4e, | 934 | 0xd4, 0x5f, 0x8a, 0x76, 0x90, 0x97, 0x67, 0xa6, 0x55, 0x10, 0x45, 0x0b, |
| 936 | 0x9a, 0xa0, 0x73, 0xa4, 0x23, 0x9a, 0x68, 0x50, 0x54, 0x78, 0xf5, 0xa0, | 935 | 0x4d, 0xd0, 0x3e, 0xde, 0x1c, 0x8a, 0x54, 0x2a, 0x2a, 0xdc, 0x86, 0xa6, |
| 937 | 0xd6, 0x52, 0x88, 0x18, 0xd4, 0x8f, 0x16, 0x2d, 0x40, 0xd3, 0x0b, 0x94, | 936 | 0xcf, 0xce, 0x06, 0x4d, 0xea, 0x47, 0x0f, 0x65, 0xa1, 0x1b, 0x59, 0xb6, |
| 938 | 0x75, 0x51, 0xbb, 0x91, 0xe0, 0x14, 0xa4, 0x5d, 0x8d, 0xed, 0x1f, 0x2f, | 937 | 0x75, 0x45, 0xbf, 0x41, 0x6d, 0x1c, 0xd2, 0xaf, 0xce, 0xfe, 0x27, 0x26, |
| 939 | 0xcd, 0x9d, 0xc8, 0x0f, 0xb3, 0x4d, 0x69, 0x5f, 0x64, 0x3b, 0xce, 0xcf, | 938 | 0xe7, 0x4e, 0xda, 0x0f, 0xb0, 0x4f, 0xe9, 0x5f, 0xda, 0xb6, 0xed, 0xdf, |
| 940 | 0x0c, 0xe8, 0x41, 0x44, 0xad, 0x41, 0xda, 0x9f, 0xc7, 0x0c, 0x6a, 0x1b, | 939 | 0x98, 0x30, 0x34, 0x84, 0xac, 0x7e, 0xda, 0x9f, 0x2b, 0xaa, 0xe9, 0x1d, |
| 941 | 0xf2, 0x7c, 0x7e, 0x5e, 0x46, 0x71, 0x3e, 0xd6, 0xe6, 0xb5, 0xd2, 0x18, | 940 | 0x19, 0x3e, 0xbf, 0xd4, 0x46, 0x6e, 0x3e, 0xd6, 0x64, 0xf4, 0xc9, 0x31, |
| 942 | 0x22, 0xec, 0x82, 0xd8, 0x41, 0x38, 0x15, 0x30, 0x83, 0xd2, 0xf7, 0xee, | 941 | 0x04, 0x29, 0x82, 0xd8, 0x41, 0x20, 0xee, 0x8b, 0x6a, 0x22, 0x7b, 0xdb, |
| 943 | 0x3d, 0x03, 0x9b, 0x9d, 0x79, 0xba, 0xe8, 0x4a, 0xdf, 0x38, 0xcf, 0x13, | 942 | 0xbe, 0xde, 0x2e, 0x7b, 0x86, 0x21, 0xba, 0x32, 0x3a, 0x67, 0xb8, 0x7c, |
| 944 | 0x48, 0x9c, 0x5e, 0xf2, 0x90, 0x35, 0xab, 0x23, 0x8e, 0x6a, 0x1d, 0x81, | 943 | 0x91, 0x73, 0x73, 0x1f, 0xb5, 0x4a, 0x9b, 0xc3, 0x28, 0x36, 0xe0, 0x2b, |
| 945 | 0x2a, 0x1d, 0xdd, 0xe9, 0x89, 0x6a, 0xab, 0xc6, 0xfc, 0xe6, 0x9d, 0x03, | 944 | 0x32, 0xd0, 0x96, 0x1c, 0x2d, 0xb6, 0x4a, 0xa2, 0x3f, 0xbe, 0xbb, 0x77, |
| 946 | 0x13, 0x7e, 0x54, 0x4f, 0xe8, 0xa8, 0x9a, 0x78, 0xdc, 0x8b, 0x5a, 0x03, | 945 | 0xd4, 0x8b, 0xe2, 0x51, 0x03, 0x45, 0xa3, 0x4f, 0xbb, 0x51, 0xd6, 0x80, |
| 947 | 0x3b, 0x26, 0xff, 0xcc, 0x5b, 0x1c, 0xdb, 0xcd, 0xa5, 0x31, 0xba, 0xb6, | 946 | 0x5d, 0x63, 0x0f, 0xb9, 0x73, 0x63, 0x5b, 0x32, 0x39, 0x46, 0xc7, 0xf6, |
| 948 | 0xef, 0x7f, 0xdd, 0x3e, 0xe3, 0x54, 0xe8, 0x55, 0x7f, 0xe6, 0x31, 0x75, | 947 | 0xbd, 0xef, 0x26, 0xce, 0xdb, 0x05, 0x46, 0xd1, 0x7d, 0xae, 0xa8, 0xa1, |
| 949 | 0x6d, 0x0c, 0x38, 0xb3, 0xb6, 0x63, 0x39, 0x7a, 0x83, 0x0a, 0xe6, 0xeb, | 948 | 0x1f, 0x02, 0xce, 0xaf, 0x69, 0x5e, 0x84, 0x6e, 0x4d, 0xc1, 0x4c, 0xe3, |
| 950 | 0x7f, 0x32, 0x0b, 0xb5, 0x26, 0xac, 0xc9, 0xc6, 0x54, 0x85, 0x19, 0x4a, | 949 | 0x95, 0x12, 0x94, 0x45, 0x60, 0x8d, 0x55, 0xc5, 0x0b, 0xa2, 0xfe, 0x38, |
| 951 | 0x71, 0x6e, 0xf0, 0x82, 0x9d, 0x83, 0x6f, 0xc0, 0x71, 0xa4, 0xec, 0x49, | 950 | 0xe7, 0x06, 0x2f, 0x27, 0xd2, 0xf0, 0xf4, 0xda, 0xb6, 0x94, 0x7d, 0x07, |
| 952 | 0xdc, 0x79, 0xa7, 0x6a, 0x1e, 0xba, 0xc6, 0x87, 0x4e, 0x96, 0xc7, 0xa6, | 951 | 0x77, 0xdf, 0xad, 0x46, 0x8f, 0xde, 0xec, 0x41, 0x0b, 0xcb, 0x63, 0xd3, |
| 953 | 0xa3, 0x1d, 0x3f, 0x57, 0xd4, 0x9d, 0xdd, 0xb0, 0xc6, 0x3d, 0x48, 0x06, | 952 | 0x89, 0xe6, 0x4f, 0x15, 0x75, 0x77, 0x1b, 0xac, 0x11, 0x17, 0x62, 0x5a, |
| 954 | 0x53, 0xfc, 0x7f, 0xc5, 0x15, 0x2b, 0x13, 0xdd, 0xb0, 0xc7, 0xa7, 0x79, | 953 | 0x9c, 0xdf, 0xd7, 0x5f, 0xbf, 0x3c, 0xd2, 0x86, 0xc4, 0xc8, 0x05, 0xde, |
| 955 | 0xdf, 0xcb, 0x7b, 0x26, 0xd2, 0x99, 0x2b, 0xae, 0xb8, 0x3d, 0x91, 0xc2, | 954 | 0x77, 0xf3, 0x5e, 0x04, 0xc9, 0xd4, 0xf5, 0xd7, 0xdf, 0x11, 0x89, 0xa3, |
| 956 | 0xc0, 0xb8, 0x7c, 0xf6, 0x62, 0xaa, 0x3e, 0x85, 0xed, 0xbb, 0x35, 0xd4, | 955 | 0x77, 0x44, 0xae, 0xdd, 0x18, 0xaf, 0x88, 0x63, 0xfb, 0x5e, 0x1d, 0xe5, |
| 957 | 0xe9, 0xdd, 0xc8, 0x8c, 0xcb, 0x67, 0xc7, 0x39, 0x65, 0x7c, 0x09, 0x7b, | 956 | 0x46, 0x1b, 0x52, 0x23, 0x72, 0x6d, 0xdb, 0x67, 0xcc, 0xef, 0x62, 0x5f, |
| 958 | 0xda, 0xe8, 0xff, 0x73, 0xbb, 0xb1, 0x6d, 0xb7, 0x85, 0x4a, 0xdd, 0xa2, | 957 | 0x03, 0xfd, 0xff, 0x9a, 0x36, 0x6c, 0xdb, 0x6b, 0xa1, 0xd0, 0xb0, 0xa8, |
| 959 | 0xee, 0x15, 0xef, 0x3f, 0xb7, 0x29, 0xd0, 0xee, 0x84, 0xb7, 0x42, 0x17, | 958 | 0x7b, 0xc5, 0xfd, 0xf7, 0x0d, 0x0a, 0xf4, 0xbb, 0xe1, 0x2e, 0x30, 0x44, |
| 960 | 0xbd, 0x25, 0xbc, 0xf7, 0xd8, 0x66, 0x70, 0xbe, 0xee, 0x38, 0x23, 0xc6, | 959 | 0x6f, 0x11, 0xf7, 0xfa, 0x44, 0x54, 0x9b, 0x69, 0xd8, 0xf6, 0x90, 0x39, |
| 961 | 0x22, 0x7c, 0xba, 0x7b, 0x2d, 0xac, 0x7d, 0x01, 0x58, 0xab, 0xe5, 0x7f, | 960 | 0x07, 0x0f, 0xb4, 0xad, 0x81, 0x75, 0xc0, 0x07, 0x6b, 0x95, 0x7c, 0xb7, |
| 962 | 0x37, 0x75, 0xb8, 0x16, 0xbd, 0xfb, 0xd6, 0xa2, 0xff, 0x31, 0x3a, 0x6e, | 961 | 0x51, 0x87, 0x6b, 0xd0, 0x7d, 0x60, 0x0d, 0x7a, 0x9e, 0xa0, 0xe3, 0x56, |
| 963 | 0x7d, 0xd0, 0x9d, 0xa7, 0x6f, 0xb5, 0x48, 0x9f, 0xa4, 0x7f, 0x3d, 0xbc, | 962 | 0x68, 0xce, 0x3c, 0xfd, 0x64, 0xb6, 0xc8, 0x24, 0xf2, 0xb5, 0xf3, 0x23, |
| 964 | 0x44, 0xb7, 0x5f, 0xe0, 0x7f, 0x29, 0x33, 0xed, 0x60, 0xce, 0x85, 0x32, | 963 | 0xba, 0xfd, 0x4b, 0x7e, 0x4b, 0x99, 0x0b, 0x36, 0xa6, 0x5f, 0x2e, 0xb3, |
| 965 | 0xdb, 0x59, 0x66, 0xdb, 0x45, 0x65, 0x4c, 0x3c, 0x31, 0x29, 0xba, 0x10, | 964 | 0x9d, 0x65, 0xb6, 0x5d, 0x51, 0x26, 0x82, 0xa7, 0xc6, 0x44, 0x17, 0xa2, |
| 966 | 0x95, 0xfd, 0x3e, 0x5d, 0x7c, 0xdb, 0xe9, 0x0d, 0x89, 0x2e, 0xac, 0x1e, | 965 | 0xb2, 0x3f, 0xa5, 0x8b, 0x9f, 0xda, 0xdd, 0x7e, 0xd1, 0x85, 0xd5, 0xee, |
| 967 | 0x1f, 0x22, 0xdd, 0xf7, 0x2a, 0x5e, 0xac, 0x18, 0x00, 0xeb, 0xd0, 0x09, | 966 | 0x41, 0xb0, 0xed, 0x41, 0xc5, 0x8d, 0xa5, 0xbd, 0x60, 0x1d, 0x3a, 0x41, |
| 968 | 0xaa, 0x23, 0xc9, 0x85, 0x8a, 0x89, 0xea, 0x01, 0x05, 0x2b, 0xe2, 0x55, | 967 | 0x71, 0x30, 0x56, 0xab, 0x44, 0x51, 0xdc, 0xab, 0x60, 0x69, 0xb8, 0x08, |
| 969 | 0xd0, 0xea, 0x45, 0xde, 0x8f, 0x1c, 0x2b, 0x28, 0xfd, 0x3d, 0x8a, 0x1a, | 968 | 0x7a, 0x85, 0xb4, 0xf7, 0x4b, 0xdb, 0xd2, 0x44, 0xde, 0x13, 0x28, 0xe1, |
| 970 | 0xde, 0x5f, 0x17, 0xff, 0x01, 0xf1, 0x4c, 0xfa, 0x14, 0x67, 0xf9, 0x3b, | 969 | 0xfd, 0x75, 0xe1, 0x9f, 0x13, 0xcf, 0x44, 0xa6, 0x30, 0xcb, 0xaf, 0xe0, |
| 971 | 0x78, 0xff, 0x95, 0x19, 0xdf, 0xa5, 0x9c, 0xe3, 0xf4, 0x19, 0x06, 0xfa, | 970 | 0xfd, 0x37, 0xa6, 0xfc, 0x96, 0x72, 0xb6, 0xbd, 0x99, 0x3e, 0xdf, 0x43, |
| 972 | 0x33, 0x6d, 0xd8, 0x9e, 0x49, 0x46, 0xa8, 0x25, 0xcb, 0x67, 0xf2, 0xbe, | 971 | 0x1b, 0xdf, 0x9e, 0x8a, 0x05, 0xa9, 0x25, 0xcb, 0x13, 0xe5, 0xfd, 0x68, |
| 973 | 0x19, 0xed, 0xea, 0x85, 0xb4, 0x03, 0xa5, 0xda, 0x84, 0x37, 0xdf, 0x71, | 972 | 0xa8, 0xb5, 0x1b, 0xd2, 0x0f, 0x94, 0xe2, 0x28, 0xdc, 0x99, 0xe6, 0x09, |
| 974 | 0xdc, 0xff, 0x92, 0xad, 0xf7, 0x3c, 0xa5, 0xf8, 0x68, 0xec, 0xd2, 0xce, | 973 | 0xef, 0xa9, 0x84, 0xd1, 0xfe, 0x8c, 0xe2, 0xa1, 0xb1, 0x4b, 0x3f, 0x13, |
| 975 | 0x71, 0xff, 0x2b, 0xb6, 0x82, 0x37, 0xf5, 0xe8, 0x86, 0x77, 0x94, 0xe3, | 974 | 0xde, 0x37, 0x12, 0x0a, 0xde, 0x37, 0x42, 0x1d, 0x67, 0x95, 0x09, 0xef, |
| 976 | 0xfe, 0x97, 0xf3, 0x41, 0xcc, 0x1b, 0x88, 0xf4, 0x58, 0x4a, 0x02, 0x5f, | 975 | 0xeb, 0x19, 0x0d, 0x33, 0x7a, 0x83, 0xed, 0x96, 0x12, 0xc1, 0x8f, 0x32, |
| 977 | 0xcf, 0x87, 0x10, 0x1e, 0x30, 0x71, 0x30, 0x6f, 0xe0, 0xc9, 0x8b, 0x70, | 976 | 0x7e, 0x04, 0x7a, 0xa3, 0x38, 0x92, 0x31, 0xf1, 0xf4, 0x15, 0x38, 0xf0, |
| 978 | 0xe0, 0x43, 0xff, 0x2c, 0x0f, 0xc7, 0xbe, 0xce, 0xd6, 0xd0, 0x6b, 0x9c, | 977 | 0xa5, 0x7f, 0x96, 0x8b, 0x63, 0x5f, 0x97, 0xd0, 0xd1, 0x6d, 0x5e, 0xb4, |
| 979 | 0x73, 0x92, 0x41, 0xa4, 0xea, 0xcc, 0xe3, 0xfe, 0xf7, 0x07, 0xa0, 0xd4, | 978 | 0x63, 0x1a, 0xe2, 0xe5, 0xd1, 0x09, 0xef, 0x27, 0xbd, 0x50, 0xca, 0xa2, |
| 980 | 0x9a, 0x7a, 0xb8, 0xa0, 0xfc, 0xab, 0x93, 0x0a, 0x49, 0x31, 0xf6, 0xcf, | 979 | 0x46, 0x20, 0xab, 0xfc, 0x83, 0x1d, 0xf7, 0x4b, 0x31, 0xca, 0xe7, 0x60, |
| 981 | 0xc5, 0xb2, 0x24, 0xed, 0xce, 0x20, 0xce, 0x9d, 0x71, 0x6a, 0x68, 0xb3, | 980 | 0x59, 0x94, 0x76, 0x47, 0x8c, 0x4a, 0x9d, 0xb7, 0x4b, 0x68, 0xb3, 0x05, |
| 982 | 0x15, 0xe6, 0x65, 0x18, 0x1f, 0xd6, 0xf1, 0xa4, 0xed, 0x38, 0xef, 0x19, | 981 | 0xd1, 0x6b, 0x31, 0x32, 0x68, 0xe0, 0xe9, 0x84, 0x6d, 0x7f, 0x6c, 0x8e, |
| 983 | 0x53, 0x89, 0x00, 0xf4, 0xee, 0x77, 0x11, 0x49, 0x2e, 0xa2, 0x5e, 0x8e, | 982 | 0x47, 0x7c, 0x30, 0xda, 0x3e, 0x42, 0x30, 0x36, 0x87, 0x7a, 0x39, 0x91, |
| 984 | 0xe6, 0x75, 0x8c, 0xda, 0x26, 0x9e, 0xb3, 0x9b, 0x83, 0x7d, 0x58, 0x8c, | 983 | 0x31, 0x30, 0x9c, 0x88, 0xe2, 0xc5, 0x44, 0x8d, 0xb6, 0x19, 0x4d, 0x88, |
| 985 | 0x64, 0xb8, 0x18, 0x43, 0x26, 0xd8, 0xef, 0x91, 0x68, 0x37, 0xea, 0xcc, | 984 | 0x05, 0x72, 0x31, 0x64, 0x94, 0x72, 0x0f, 0x85, 0xda, 0x50, 0x1e, 0x8d, |
| 986 | 0x04, 0x0e, 0xb1, 0xdf, 0xa7, 0x97, 0x88, 0x1c, 0x03, 0x2f, 0xff, 0x01, | 985 | 0xe0, 0x28, 0xe5, 0x3e, 0x37, 0x57, 0xda, 0x31, 0xf1, 0xfa, 0xbf, 0x42, |
| 987 | 0x7d, 0x25, 0xbe, 0xe3, 0x71, 0xf6, 0x35, 0xb1, 0xf8, 0x9c, 0x83, 0xd9, | 986 | 0x56, 0xe2, 0x3b, 0x9e, 0xa4, 0xac, 0x91, 0xa6, 0x8b, 0x36, 0xa6, 0x79, |
| 988 | 0x7e, 0x9c, 0x30, 0xe6, 0xd2, 0x0e, 0x61, 0x55, 0x99, 0x7e, 0x6f, 0xbf, | 987 | 0x71, 0xda, 0xbc, 0x86, 0x76, 0x08, 0xab, 0x28, 0xea, 0x75, 0xf7, 0x24, |
| 989 | 0x1d, 0xc4, 0x81, 0x7c, 0xc0, 0xdb, 0x67, 0x87, 0xb0, 0x8f, 0xfe, 0x36, | 988 | 0x34, 0x1c, 0xce, 0xf8, 0xdc, 0x9b, 0x13, 0x7e, 0x1c, 0xa0, 0xbf, 0xcd, |
| 990 | 0x8f, 0xa6, 0x1e, 0xa6, 0xdc, 0x79, 0xc4, 0xb5, 0xc2, 0x70, 0x13, 0x26, | 989 | 0x88, 0xc2, 0x0a, 0xb0, 0xdd, 0x19, 0xc4, 0xb5, 0xec, 0x60, 0x35, 0xc6, |
| 991 | 0x87, 0x23, 0xc6, 0x2b, 0x4a, 0x18, 0x63, 0xa3, 0x97, 0x61, 0x62, 0x58, | 990 | 0x06, 0x83, 0xe6, 0x1b, 0x4a, 0x00, 0x87, 0x86, 0xaf, 0xc5, 0xe8, 0xa0, |
| 992 | 0xc1, 0x78, 0x94, 0x7d, 0xe7, 0xe7, 0x2f, 0x0f, 0x5f, 0x81, 0xfc, 0xb0, | 991 | 0x82, 0x91, 0x10, 0x65, 0xe7, 0xf5, 0xf7, 0x06, 0xaf, 0x47, 0x66, 0xd0, |
| 993 | 0x07, 0x3b, 0x5c, 0xbd, 0xba, 0x38, 0x53, 0xfa, 0x7f, 0x19, 0x72, 0xa3, | 992 | 0x85, 0x5d, 0x8e, 0x5e, 0x1d, 0x9c, 0x99, 0xfc, 0xbe, 0x16, 0xe9, 0x61, |
| 994 | 0xf0, 0x2e, 0x1a, 0x08, 0xe2, 0xa9, 0xbc, 0xd7, 0xab, 0x0f, 0x84, 0x30, | 993 | 0xb8, 0xe7, 0xf4, 0x6a, 0x78, 0x26, 0xe3, 0x76, 0x1b, 0xbd, 0x7e, 0x0c, |
| 995 | 0x9a, 0xff, 0x36, 0xe7, 0x4d, 0x64, 0x6b, 0x18, 0xb1, 0xc7, 0xdc, 0x39, | 994 | 0x67, 0x7e, 0xca, 0x79, 0x93, 0xb6, 0x75, 0x0c, 0x25, 0x0e, 0x39, 0x73, |
| 996 | 0xac, 0x33, 0x29, 0xac, 0x18, 0x5f, 0x19, 0xcb, 0x34, 0xc6, 0x99, 0x04, | 995 | 0x58, 0x1e, 0x65, 0x63, 0xb9, 0xf8, 0xca, 0x58, 0xa6, 0x33, 0xce, 0x34, |
| 997 | 0x71, 0x48, 0x7c, 0xdc, 0x4f, 0x0c, 0x12, 0x1f, 0x7f, 0x4d, 0x41, 0x6d, | 996 | 0x13, 0x87, 0xc4, 0xc7, 0xbd, 0xc4, 0x20, 0xf1, 0xf1, 0xb7, 0x14, 0x94, |
| 998 | 0x02, 0x7d, 0x93, 0xe5, 0xe7, 0x0a, 0xed, 0xdf, 0x8b, 0x75, 0x41, 0x03, | 997 | 0x35, 0x63, 0xf3, 0x58, 0xfe, 0xb9, 0x42, 0xfb, 0x77, 0x63, 0x9d, 0xd6, |
| 999 | 0x76, 0x46, 0xec, 0xb4, 0x8c, 0xcb, 0xf2, 0x59, 0xe6, 0xbf, 0x1a, 0xd6, | 998 | 0x80, 0x44, 0x4a, 0xec, 0x34, 0x8f, 0xcb, 0x72, 0x2d, 0xf3, 0x5f, 0x0c, |
| 1000 | 0xfe, 0x6a, 0xec, 0xa0, 0x8f, 0x3d, 0xba, 0x53, 0xee, 0x3b, 0xce, 0x7d, | 999 | 0xeb, 0x60, 0x31, 0x76, 0xd1, 0xc7, 0x76, 0xee, 0x96, 0xfb, 0xb6, 0xfd, |
| 1001 | 0xf1, 0x3a, 0xda, 0x18, 0x6e, 0xaa, 0x42, 0xd4, 0x78, 0xcb, 0xed, 0x9b, | 1000 | 0x50, 0xb8, 0x9c, 0x36, 0x86, 0xc5, 0x45, 0x08, 0x99, 0x1f, 0x38, 0xb2, |
| 1002 | 0x85, 0xb1, 0xbc, 0xc4, 0x50, 0x8d, 0xf1, 0xed, 0x28, 0xdb, 0xea, 0x60, | 1001 | 0x59, 0x38, 0x94, 0x91, 0x18, 0xaa, 0x33, 0xbe, 0x9d, 0x60, 0x5f, 0xcd, |
| 1003 | 0x3b, 0x06, 0xbe, 0x3d, 0xd9, 0x86, 0x7f, 0x9c, 0x8c, 0xe1, 0x1f, 0x26, | 1002 | 0xec, 0xc7, 0xc4, 0x4f, 0x39, 0x37, 0x7f, 0x3d, 0x56, 0x87, 0x1f, 0x8e, |
| 1004 | 0x75, 0xfc, 0xfd, 0xa4, 0x86, 0x67, 0x2e, 0xc2, 0xf5, 0x3b, 0xa9, 0x2b, | 1003 | 0x19, 0xf8, 0xef, 0x63, 0x3a, 0x9e, 0xbf, 0x02, 0xd7, 0xef, 0xa6, 0xae, |
| 1005 | 0xc1, 0x30, 0x03, 0x5b, 0x32, 0x15, 0xd8, 0x36, 0x5c, 0x8d, 0xbe, 0xe1, | 1004 | 0x04, 0xc3, 0x1a, 0xb0, 0x25, 0x55, 0x80, 0x6d, 0x83, 0xc5, 0xd8, 0x3c, |
| 1006 | 0xe6, 0xd8, 0x73, 0xc4, 0xe3, 0x7f, 0x30, 0x6e, 0xc7, 0x54, 0x43, 0x87, | 1005 | 0x58, 0x53, 0xf7, 0x22, 0xf1, 0xf8, 0x87, 0xe6, 0x1d, 0x18, 0xaf, 0x6c, |
| 1007 | 0xeb, 0x33, 0x8f, 0xf0, 0xfe, 0xa3, 0xc3, 0xcd, 0x9c, 0x43, 0xc7, 0x51, | 1006 | 0x76, 0x7c, 0x66, 0x07, 0xef, 0xef, 0x1c, 0xac, 0xe1, 0x1c, 0xda, 0xb6, |
| 1008 | 0xe3, 0xad, 0x89, 0x43, 0xc4, 0xf7, 0xe3, 0xa1, 0x88, 0x36, 0xa5, 0x46, | 1007 | 0x1a, 0xae, 0x8f, 0x1c, 0x25, 0xbe, 0x4f, 0xf8, 0x83, 0xfa, 0xb8, 0x1a, |
| 1009 | 0xb4, 0x24, 0x7c, 0xb0, 0xdb, 0x54, 0x58, 0x73, 0x22, 0x39, 0x7a, 0x31, | 1008 | 0xd4, 0x63, 0xf0, 0x20, 0xd1, 0xa0, 0xc2, 0x9a, 0x1e, 0x4c, 0xd3, 0x8b, |
| 1010 | 0x42, 0xfa, 0x7d, 0x1c, 0x5b, 0x44, 0xb3, 0x54, 0x83, 0xf6, 0xcb, 0x98, | 1009 | 0xe1, 0x37, 0x1e, 0xe2, 0xd8, 0x82, 0xba, 0xa5, 0x36, 0xd0, 0x7e, 0x19, |
| 1011 | 0xa1, 0x76, 0x10, 0x5f, 0xaa, 0xf1, 0xfe, 0x70, 0xa4, 0xdf, 0x52, 0xef, | 1010 | 0x33, 0x54, 0x93, 0xf8, 0x52, 0x8c, 0x4f, 0x06, 0x83, 0x3d, 0x96, 0xba, |
| 1012 | 0x80, 0xd5, 0xe0, 0x38, 0x5f, 0x8d, 0x63, 0xc3, 0x5c, 0x13, 0xc9, 0x39, | 1011 | 0x02, 0x56, 0xa5, 0x6d, 0x7f, 0x3f, 0x8c, 0x8e, 0x6b, 0xa2, 0x88, 0x4d, |
| 1013 | 0x8c, 0x05, 0x57, 0x98, 0x49, 0x30, 0x8e, 0xe1, 0xf4, 0x80, 0x1e, 0xfe, | 1012 | 0x67, 0x2c, 0xb8, 0x3e, 0x1a, 0x05, 0xe3, 0x18, 0xce, 0xf5, 0x1a, 0x81, |
| 1014 | 0x7f, 0x94, 0x3b, 0xf1, 0xdf, 0xbb, 0x23, 0x9a, 0xa6, 0xb6, 0x5a, 0xfb, | 1013 | 0xbf, 0x53, 0xee, 0xc6, 0x7f, 0x6c, 0x0b, 0xea, 0xba, 0x5a, 0x6f, 0x1d, |
| 1015 | 0x54, 0x92, 0x8d, 0x46, 0x68, 0x61, 0xf3, 0x56, 0x6c, 0x74, 0x79, 0x82, | 1014 | 0x50, 0x49, 0x36, 0xaa, 0xa0, 0x07, 0xa2, 0xcb, 0xd0, 0xe9, 0xf0, 0x04, |
| 1016 | 0x82, 0xa0, 0xde, 0x81, 0xbe, 0x0c, 0x2b, 0x85, 0x9a, 0x7b, 0x06, 0xd5, | 1015 | 0x05, 0x9a, 0x61, 0x62, 0x73, 0x8a, 0x95, 0xfc, 0x35, 0xed, 0xfd, 0x6a, |
| 1017 | 0xe6, 0x69, 0x43, 0x8d, 0x1c, 0xed, 0x56, 0x89, 0xb7, 0x8b, 0x4f, 0x3b, | 1016 | 0xcd, 0x05, 0x53, 0x0d, 0x9e, 0x68, 0x53, 0x89, 0xb7, 0x4d, 0xe7, 0x6c, |
| 1018 | 0x5a, 0xa3, 0xe3, 0xb4, 0x2f, 0x96, 0x36, 0x35, 0x34, 0x70, 0x9e, 0xeb, | 1017 | 0xbd, 0xca, 0xb6, 0x1b, 0x9b, 0xa4, 0x4f, 0x1d, 0x95, 0x9c, 0xe7, 0x0a, |
| 1019 | 0x39, 0xcf, 0xed, 0x85, 0x6a, 0xbc, 0x33, 0x0c, 0x6b, 0xae, 0x19, 0xe9, | 1018 | 0xce, 0x73, 0x63, 0xb6, 0x18, 0x67, 0x07, 0x61, 0x5d, 0x13, 0x0d, 0xb6, |
| 1020 | 0x7a, 0x40, 0xad, 0xc6, 0xdb, 0xa3, 0xd5, 0x38, 0x39, 0xec, 0xc5, 0x5b, | 1019 | 0x3e, 0xa2, 0x16, 0xe3, 0xc3, 0xe1, 0x62, 0xbc, 0x33, 0xe8, 0xc6, 0x07, |
| 1021 | 0xc3, 0x8e, 0x73, 0x8f, 0x51, 0x87, 0x8a, 0x38, 0xe6, 0x54, 0x20, 0x7a, | 1020 | 0x83, 0xb6, 0xbd, 0xde, 0x2c, 0x47, 0x41, 0x18, 0xd3, 0x0b, 0x10, 0x3a, |
| 1022 | 0x66, 0x04, 0x16, 0x7e, 0xc3, 0xb2, 0xbf, 0x1c, 0x0e, 0xe3, 0x57, 0xc3, | 1021 | 0x3f, 0x04, 0x0b, 0x5f, 0xb0, 0xec, 0xef, 0x06, 0x03, 0xf8, 0xc7, 0xc1, |
| 1023 | 0x1f, 0xc3, 0x33, 0x0d, 0xc9, 0x63, 0xb3, 0x19, 0x23, 0xa7, 0x69, 0x3f, | 1022 | 0xaf, 0xe2, 0xf9, 0xca, 0xd8, 0xc9, 0x69, 0x8c, 0x91, 0x17, 0x68, 0x3f, |
| 1024 | 0xa7, 0xed, 0x48, 0xcf, 0x3c, 0x4f, 0x64, 0x23, 0x79, 0xcb, 0xfa, 0x2f, | 1023 | 0xe7, 0x12, 0xc1, 0xf6, 0x19, 0xae, 0x60, 0x27, 0x79, 0xcb, 0x86, 0xc7, |
| 1025 | 0x2a, 0x91, 0xd4, 0x2b, 0x4a, 0x44, 0x1b, 0x50, 0x42, 0x78, 0x97, 0x76, | 1024 | 0x94, 0x60, 0xfc, 0x0d, 0x25, 0xa8, 0xf7, 0x2a, 0x7e, 0x7c, 0x44, 0x3b, |
| 1026 | 0x7a, 0x2a, 0xdf, 0x9c, 0xf8, 0x01, 0xdb, 0xff, 0xb5, 0xf1, 0x0f, 0xce, | 1025 | 0x3d, 0x93, 0xa9, 0x89, 0xfc, 0x9c, 0xfd, 0xff, 0xde, 0xfc, 0xa1, 0x3d, |
| 1027 | 0x54, 0xa3, 0xe8, 0x50, 0xf4, 0x45, 0x9d, 0xd3, 0x77, 0xff, 0x91, 0x31, | 1026 | 0x5e, 0x25, 0x3a, 0x14, 0x7d, 0x51, 0xe7, 0x29, 0xea, 0x9c, 0xfe, 0xfb, |
| 1028 | 0xea, 0x1f, 0x32, 0xd4, 0x39, 0xfb, 0xf3, 0xcc, 0x6f, 0xc5, 0x2f, 0x99, | 1027 | 0xc3, 0x14, 0x75, 0x4e, 0x79, 0x9e, 0xff, 0x83, 0xf8, 0x25, 0xf3, 0x15, |
| 1029 | 0xaf, 0x04, 0xe7, 0xf1, 0x72, 0xfc, 0x4f, 0x77, 0x6c, 0xc7, 0x9c, 0xbf, | 1028 | 0xe1, 0x3c, 0x5e, 0x87, 0xff, 0xe2, 0x8c, 0xed, 0xa4, 0xfd, 0x9f, 0xfc, |
| 1030 | 0x09, 0xc9, 0xf8, 0x3a, 0x1b, 0x8b, 0x18, 0x24, 0xe3, 0x3c, 0xea, 0xa4, | 1029 | 0x32, 0xbe, 0xcf, 0xfd, 0x39, 0x0c, 0x92, 0x71, 0x9e, 0xb0, 0xe3, 0x9a, |
| 1031 | 0x82, 0x32, 0x46, 0x19, 0xab, 0xab, 0x4b, 0x6d, 0x83, 0xf2, 0x90, 0x8a, | 1030 | 0x8c, 0x51, 0xc6, 0xea, 0xe8, 0x52, 0xef, 0x50, 0x1e, 0x55, 0x51, 0x6c, |
| 1032 | 0x6a, 0xc7, 0x79, 0xcc, 0x28, 0x3d, 0x0f, 0x95, 0xc7, 0xfa, 0x31, 0xde, | 1031 | 0xdb, 0x4f, 0x98, 0x93, 0xcf, 0xfd, 0xf9, 0xb1, 0x7e, 0x95, 0xf7, 0x65, |
| 1033 | 0x97, 0xf1, 0xbe, 0xe3, 0x11, 0xdd, 0x6b, 0xea, 0xd5, 0xfc, 0x1e, 0xb1, | 1032 | 0xbc, 0x67, 0x5d, 0xa2, 0x7b, 0x5d, 0xbd, 0x89, 0xbf, 0x83, 0x56, 0x0c, |
| 1034 | 0x92, 0xb8, 0x33, 0xc0, 0xef, 0xb1, 0xe4, 0xf9, 0xef, 0xde, 0xba, 0x8b, | 1033 | 0xa7, 0x0b, 0xf9, 0xbb, 0x2e, 0x76, 0xe9, 0xf7, 0x93, 0xa5, 0x57, 0x3e, |
| 1035 | 0x9f, 0xd3, 0x4e, 0xdd, 0xf6, 0xee, 0xe4, 0x77, 0x19, 0xcb, 0xab, 0xb4, | 1034 | 0xa7, 0x9d, 0x3a, 0xfd, 0xdd, 0xcd, 0xdf, 0x32, 0x96, 0x37, 0x69, 0x37, |
| 1036 | 0x9b, 0x0f, 0xb3, 0x13, 0xb1, 0x91, 0x18, 0xed, 0xe9, 0x94, 0xc4, 0x15, | 1035 | 0x5f, 0x66, 0x27, 0x62, 0x23, 0x75, 0xb4, 0xa7, 0x33, 0x12, 0x57, 0x2c, |
| 1037 | 0x2b, 0x64, 0xfa, 0x2d, 0xd5, 0x84, 0x46, 0x9c, 0xf0, 0x2b, 0xe6, 0x06, | 1036 | 0x7f, 0xd4, 0x6b, 0xa9, 0x51, 0xe8, 0x74, 0x7d, 0xaf, 0x12, 0xed, 0x80, |
| 1038 | 0x68, 0x79, 0x0b, 0x9f, 0xea, 0xf0, 0xe0, 0xaf, 0x3a, 0x14, 0xcc, 0xd6, | 1037 | 0x9e, 0xb1, 0x70, 0x4f, 0xb3, 0x0b, 0xdf, 0x6a, 0x56, 0x30, 0xcd, 0xe8, |
| 1039 | 0x37, 0x20, 0x7b, 0xad, 0xe5, 0xd4, 0xeb, 0x7b, 0x55, 0xf1, 0x81, 0x8a, | 1038 | 0x40, 0xdf, 0x3c, 0xcb, 0xae, 0x30, 0xf6, 0xab, 0xe2, 0x03, 0x05, 0x49, |
| 1040 | 0x34, 0x2c, 0xfa, 0x1d, 0x12, 0xe4, 0x4a, 0x75, 0x7f, 0xaa, 0xe0, 0x44, | 1039 | 0x58, 0xf4, 0x3b, 0x44, 0xc8, 0x95, 0xca, 0xff, 0x9d, 0x82, 0xd3, 0xe1, |
| 1041 | 0x3c, 0x4a, 0x9b, 0xdb, 0x82, 0x6d, 0x9c, 0xf3, 0x59, 0x69, 0xf8, 0x03, | 1040 | 0x10, 0x6d, 0x6e, 0x0b, 0x39, 0x15, 0x50, 0x98, 0x84, 0xb7, 0x94, 0xf3, |
| 1042 | 0xa6, 0x09, 0x7b, 0x00, 0xfe, 0x2a, 0xfa, 0xfe, 0x95, 0x03, 0xcd, 0x1b, | 1041 | 0x3f, 0xda, 0x0b, 0x6f, 0x31, 0x7d, 0x7f, 0x59, 0x6f, 0x4d, 0xc7, 0x7b, |
| 1043 | 0xc6, 0x94, 0x48, 0x22, 0xad, 0x44, 0xba, 0xa9, 0x6f, 0xe3, 0xb4, 0x8b, | 1042 | 0xc4, 0x8a, 0xac, 0x12, 0x6c, 0xa7, 0xbe, 0xcd, 0x32, 0x25, 0xd8, 0x7a, |
| 1044 | 0x1b, 0x11, 0xad, 0x42, 0x91, 0x76, 0x4c, 0xb4, 0xe4, 0xb7, 0x60, 0x60, | 1043 | 0x3b, 0xf5, 0x5d, 0xab, 0x48, 0x3f, 0x51, 0xd4, 0x65, 0xb6, 0x10, 0x73, |
| 1045 | 0x52, 0x3e, 0x27, 0xa0, 0xe7, 0x7f, 0x5c, 0xea, 0x3b, 0xfc, 0x3e, 0xf6, | 1044 | 0xe4, 0x3a, 0x02, 0x23, 0xf3, 0xab, 0x49, 0xd9, 0xe1, 0xf5, 0x50, 0x86, |
| 1046 | 0x61, 0xbf, 0xfd, 0xba, 0x93, 0x0b, 0x46, 0xb4, 0x9c, 0xfb, 0x7d, 0x3d, | 1045 | 0x83, 0x89, 0x77, 0xed, 0xb4, 0x16, 0xd4, 0xd3, 0xce, 0xef, 0x0d, 0xfc, |
| 1047 | 0xbf, 0xc3, 0x5f, 0x61, 0x3e, 0x88, 0xe7, 0xed, 0x37, 0xe7, 0x94, 0xcb, | 1046 | 0x0d, 0x6f, 0x41, 0x74, 0x23, 0x5e, 0x4a, 0x3c, 0xe5, 0xcf, 0x97, 0xcb, |
| 1048 | 0x15, 0xfb, 0x7a, 0x69, 0x7f, 0xfe, 0xb7, 0x93, 0x0c, 0xb9, 0xfd, 0xf1, | 1047 | 0xc9, 0x7a, 0xb5, 0x3c, 0xff, 0xd3, 0x8e, 0xf9, 0x73, 0xf2, 0xf8, 0x92, |
| 1049 | 0xd7, 0xb0, 0x8d, 0xcf, 0x0c, 0xb0, 0x8d, 0x4c, 0xb9, 0x3f, 0x40, 0x20, | 1048 | 0x5b, 0x40, 0x8e, 0xe2, 0x2d, 0x64, 0x5f, 0xef, 0x3b, 0xf5, 0x23, 0xac, |
| 1050 | 0x2d, 0x71, 0x38, 0xa2, 0x2d, 0x50, 0x9a, 0x8d, 0x01, 0x25, 0x12, 0xbb, | 1049 | 0x5f, 0xd3, 0xde, 0xab, 0x04, 0xeb, 0x3e, 0x42, 0xbd, 0xfe, 0x3d, 0x04, |
| 1051 | 0x57, 0x69, 0x4d, 0x8c, 0x91, 0x5f, 0x6e, 0x47, 0xb1, 0x4f, 0xd1, 0x7c, | 1050 | 0x5b, 0x8f, 0x92, 0x5b, 0x1a, 0x93, 0xf2, 0x84, 0x32, 0x0e, 0x9f, 0x71, |
| 1052 | 0xb1, 0x3f, 0x0b, 0xf2, 0x50, 0x3c, 0x03, 0x08, 0xcc, 0xd7, 0x17, 0x62, | 1051 | 0xe4, 0x99, 0x95, 0x81, 0xe2, 0xea, 0x85, 0x6f, 0xa6, 0x51, 0x8b, 0x2e, |
| 1053 | 0xb3, 0x3b, 0xa7, 0x50, 0xc2, 0x03, 0x1a, 0x6a, 0xc9, 0x5f, 0xc2, 0x13, | 1052 | 0x67, 0x4e, 0xa1, 0x04, 0x7a, 0x75, 0x94, 0x91, 0xbf, 0x04, 0x46, 0x81, |
| 1054 | 0xc0, 0xe4, 0x10, 0xb9, 0x5c, 0xbc, 0x19, 0x9f, 0x63, 0x2c, 0x98, 0xc7, | 1053 | 0xb1, 0x01, 0x72, 0xb9, 0x70, 0x0d, 0xbe, 0xc9, 0x58, 0x30, 0x83, 0x65, |
| 1055 | 0x32, 0x5f, 0x0c, 0x9e, 0xc7, 0x2f, 0xa5, 0xdf, 0x26, 0xc0, 0xcc, 0x29, | 1054 | 0x1e, 0xd3, 0x2e, 0xe1, 0x97, 0xd2, 0x93, 0x20, 0xc0, 0x4c, 0xcf, 0xf1, |
| 1056 | 0xf2, 0xb2, 0xd4, 0x7f, 0x41, 0x52, 0xee, 0x3d, 0x6e, 0x43, 0xc9, 0xd8, | 1055 | 0xb2, 0xf8, 0xbd, 0x88, 0xc9, 0xbd, 0x27, 0x13, 0x50, 0x52, 0x89, 0xe0, |
| 1057 | 0x91, 0x3d, 0x80, 0x3e, 0x15, 0xf7, 0x24, 0xef, 0x0f, 0x63, 0x33, 0x4e, | 1056 | 0x3e, 0xc0, 0x18, 0x0f, 0xbb, 0x62, 0x0f, 0x07, 0xd0, 0x85, 0x73, 0xe1, |
| 1058 | 0xc7, 0xa3, 0xa9, 0x82, 0x12, 0x35, 0x86, 0x14, 0xc3, 0xbf, 0x8d, 0xed, | 1057 | 0x50, 0x3c, 0xab, 0x84, 0xda, 0x07, 0x14, 0xd3, 0xbb, 0x8b, 0xfd, 0x6d, |
| 1059 | 0xed, 0x60, 0x99, 0xed, 0xbc, 0x1e, 0x88, 0xea, 0x5d, 0x77, 0x28, 0xc9, | 1058 | 0x67, 0x99, 0x1d, 0xfc, 0x9c, 0x35, 0x0c, 0x73, 0x85, 0x12, 0xbb, 0xa1, |
| 1060 | 0x2b, 0xab, 0x58, 0xe6, 0xa4, 0x11, 0x25, 0xcf, 0x8c, 0x4e, 0xaf, 0x82, | 1059 | 0x80, 0x65, 0x6a, 0xc2, 0x21, 0xf2, 0xcc, 0xd0, 0x85, 0x95, 0x30, 0xbd, |
| 1061 | 0xe1, 0x7f, 0x22, 0x2f, 0xb2, 0x12, 0xca, 0x96, 0xc2, 0xe3, 0x6a, 0x11, | 1060 | 0x4f, 0x65, 0xa4, 0xad, 0x88, 0xb2, 0x25, 0xfb, 0xa4, 0x9a, 0xc3, 0xa3, |
| 1062 | 0x8f, 0x7e, 0x5d, 0xd2, 0xd9, 0x49, 0xf9, 0xee, 0xb6, 0xed, 0x1d, 0x68, | 1061 | 0xdf, 0x4f, 0xea, 0xec, 0x1d, 0xf9, 0xed, 0xf4, 0xed, 0xee, 0xfd, 0xaf, |
| 1063 | 0xaa, 0xf9, 0xed, 0x7b, 0xda, 0x9c, 0x8b, 0xef, 0xb5, 0x06, 0x47, 0xe9, | 1062 | 0x85, 0x7f, 0x78, 0xef, 0xaf, 0xa7, 0x5d, 0x79, 0xaf, 0x5e, 0x1b, 0xa6, |
| 1064 | 0x7f, 0x1e, 0xbd, 0x8a, 0x73, 0x27, 0xfc, 0x28, 0x19, 0xf3, 0x41, 0xee, | 1063 | 0xff, 0xb9, 0x8c, 0x22, 0xce, 0x9d, 0xf0, 0xa3, 0x58, 0x9d, 0x07, 0x72, |
| 1065 | 0x79, 0x90, 0xf3, 0x26, 0xc3, 0x1e, 0x7c, 0xe0, 0x24, 0x57, 0xcb, 0xbd, | 1064 | 0xcf, 0x85, 0xb4, 0x3b, 0x16, 0x70, 0xe1, 0x73, 0x3b, 0xb6, 0x4a, 0xee, |
| 1066 | 0x6a, 0xa4, 0xba, 0x5b, 0xc3, 0x5e, 0xb4, 0x26, 0xb6, 0x12, 0x0b, 0x8e, | 1065 | 0x15, 0x23, 0xde, 0x56, 0x1f, 0x70, 0xa3, 0x3e, 0xb2, 0x95, 0x58, 0x30, |
| 1067 | 0xaf, 0x5e, 0xc6, 0x67, 0x51, 0xe3, 0x39, 0x34, 0x6b, 0x5b, 0x21, 0x9f, | 1066 | 0xb1, 0x6a, 0x21, 0x9f, 0x85, 0xcc, 0x17, 0x51, 0xa3, 0x6f, 0x85, 0x5c, |
| 1068 | 0xcf, 0xd2, 0x66, 0x97, 0x49, 0x5d, 0x96, 0x29, 0x72, 0x1f, 0xc1, 0x9a, | 1067 | 0x7f, 0x46, 0x9b, 0x5d, 0x28, 0x75, 0x59, 0x26, 0xc7, 0x7d, 0x04, 0x6b, |
| 1069 | 0x2d, 0x86, 0x83, 0xe7, 0x0d, 0x58, 0x95, 0xe6, 0x41, 0xe5, 0x84, 0xfd, | 1068 | 0xb6, 0x98, 0x36, 0x5e, 0x22, 0x4c, 0x14, 0x46, 0x8f, 0x28, 0xa7, 0x13, |
| 1070 | 0x1b, 0x27, 0xe9, 0xc5, 0x4a, 0xfa, 0xa5, 0x41, 0xda, 0xab, 0xf9, 0xcd, | 1069 | 0x5f, 0xd8, 0x31, 0x37, 0x96, 0xd3, 0x2f, 0x4d, 0xea, 0x59, 0xf7, 0x46, |
| 1071 | 0xa8, 0x76, 0x94, 0x99, 0x82, 0xc7, 0xb4, 0x94, 0xe3, 0xf9, 0x2d, 0xca, | 1070 | 0x43, 0xfa, 0x09, 0x66, 0x0a, 0xae, 0xa8, 0xa5, 0x4c, 0x64, 0xb6, 0x28, |
| 1072 | 0xeb, 0xf9, 0x7e, 0xe5, 0x54, 0x5e, 0xea, 0x1e, 0x54, 0x4e, 0xe6, 0x25, | 1071 | 0xef, 0x66, 0x7a, 0x94, 0x33, 0x19, 0xa9, 0x7b, 0x44, 0x79, 0x27, 0x23, |
| 1073 | 0x1e, 0x36, 0x69, 0x47, 0xc8, 0x6f, 0xc8, 0xa9, 0xd4, 0x3e, 0x03, 0xca, | 1072 | 0xf1, 0xb0, 0x5a, 0x3f, 0x4e, 0x7e, 0x43, 0x4e, 0xa5, 0x6e, 0x36, 0xa1, |
| 1074 | 0x36, 0xa3, 0x96, 0x3c, 0x5f, 0x8f, 0x8d, 0xb0, 0xbf, 0xfb, 0x3b, 0x60, | 1073 | 0x6c, 0x33, 0xcb, 0xc8, 0xf3, 0x8d, 0xba, 0x21, 0xca, 0x7b, 0xb0, 0x19, |
| 1075 | 0x6c, 0x37, 0x7c, 0x38, 0x1e, 0x44, 0xa0, 0xcf, 0xf0, 0xca, 0x77, 0xe6, | 1074 | 0xe6, 0x76, 0xd3, 0x83, 0x09, 0x0d, 0xbe, 0xcd, 0xa6, 0x5b, 0x7e, 0x33, |
| 1076 | 0x03, 0x52, 0xb7, 0x49, 0xdb, 0x9a, 0x3f, 0x47, 0xff, 0x2a, 0x7e, 0xdf, | 1075 | 0x1f, 0x90, 0xba, 0xd5, 0xfa, 0xd6, 0xcc, 0x45, 0xfa, 0x57, 0xee, 0xf7, |
| 1077 | 0xdf, 0x51, 0xbe, 0xf7, 0x0b, 0x67, 0x6a, 0xb5, 0xca, 0xef, 0x7f, 0xea, | 1076 | 0xc1, 0xe6, 0xfc, 0xbd, 0xdf, 0xda, 0xe3, 0xab, 0x54, 0xfe, 0xfe, 0x77, |
| 1078 | 0xe1, 0x50, 0x58, 0x77, 0x26, 0x3f, 0x17, 0x2e, 0xa5, 0x92, 0x3f, 0xd6, | 1077 | 0x2e, 0x0e, 0x85, 0x75, 0xa7, 0xf2, 0x73, 0xe1, 0x52, 0x2a, 0xf9, 0x63, |
| 1079 | 0xc3, 0x0a, 0x46, 0xac, 0x1c, 0x73, 0x85, 0xbe, 0x4c, 0x3b, 0xfd, 0x2d, | 1078 | 0x05, 0x2c, 0x2d, 0x68, 0xa5, 0x99, 0x0e, 0x6d, 0x4e, 0x35, 0xd2, 0xdf, |
| 1080 | 0xcc, 0x58, 0x99, 0x24, 0xbe, 0x93, 0xf7, 0xb2, 0xcd, 0x0a, 0x3d, 0x80, | 1079 | 0x02, 0x8c, 0x95, 0x51, 0xe2, 0x3b, 0x79, 0x2f, 0xfb, 0x2c, 0x30, 0x7c, |
| 1081 | 0x9b, 0xec, 0x66, 0x4f, 0x51, 0x7f, 0x2a, 0x31, 0xcc, 0xc3, 0x98, 0x2e, | 1080 | 0x58, 0x9c, 0xa8, 0x71, 0xe5, 0xf4, 0xa7, 0x12, 0xc3, 0x5c, 0x8c, 0xe9, |
| 1082 | 0x1c, 0xef, 0x52, 0xce, 0xdd, 0xa4, 0xbd, 0xc5, 0x7e, 0x57, 0xe9, 0x7a, | 1081 | 0xc2, 0xf1, 0xae, 0xe6, 0xdc, 0xd5, 0xfa, 0x07, 0x94, 0xbb, 0xc8, 0x30, |
| 1083 | 0xac, 0x4a, 0x69, 0xd2, 0x5e, 0xcf, 0x27, 0xe9, 0xe3, 0x3d, 0x6c, 0x37, | 1082 | 0xea, 0x8a, 0x94, 0x6a, 0xfd, 0xdd, 0x4c, 0x94, 0x3e, 0xde, 0xce, 0x7e, |
| 1084 | 0x80, 0xd7, 0xed, 0x5a, 0xe6, 0x20, 0x91, 0xa4, 0x45, 0x81, 0x37, 0x77, | 1083 | 0x7d, 0x78, 0x37, 0x51, 0xc6, 0x1c, 0x24, 0x18, 0xb3, 0xd8, 0xe0, 0x92, |
| 1085 | 0x84, 0x41, 0xce, 0x37, 0xe3, 0xaf, 0x1b, 0x8c, 0xff, 0x12, 0xa3, 0xd5, | 1084 | 0xe6, 0x00, 0xc8, 0xf9, 0xa6, 0xfc, 0xb5, 0x81, 0xf1, 0x5f, 0x62, 0xb4, |
| 1086 | 0x5b, 0x96, 0x24, 0xb0, 0x3e, 0x0f, 0xef, 0xba, 0x0e, 0x13, 0xf7, 0x30, | 1085 | 0x7a, 0xdb, 0xdc, 0x08, 0x36, 0x64, 0xe0, 0x5e, 0xd7, 0x1c, 0xc5, 0x7a, |
| 1087 | 0xb6, 0xdf, 0xc7, 0x78, 0xf9, 0x20, 0x63, 0xe1, 0x8e, 0x38, 0xc7, 0x56, | 1086 | 0xc6, 0xf6, 0x87, 0x18, 0x2f, 0x37, 0x32, 0x16, 0xee, 0x0a, 0x73, 0x6c, |
| 1088 | 0xef, 0x38, 0x95, 0xfa, 0x66, 0xc9, 0x67, 0x30, 0xc0, 0x58, 0x7c, 0x37, | 1087 | 0x15, 0xb6, 0x5d, 0x68, 0x74, 0x49, 0x3e, 0x83, 0x5e, 0xc6, 0xe2, 0xb5, |
| 1089 | 0xe3, 0xcb, 0x16, 0x7e, 0x7e, 0x29, 0xff, 0x1f, 0xce, 0x7d, 0xcc, 0xa7, | 1088 | 0x8c, 0x2f, 0x5b, 0x78, 0x7d, 0x2a, 0xf3, 0xcf, 0xf6, 0x43, 0xcc, 0xa7, |
| 1090 | 0x9e, 0xbf, 0x48, 0x26, 0xd4, 0x51, 0xbd, 0x35, 0xb6, 0x95, 0xb1, 0x98, | 1089 | 0x5e, 0xba, 0xa2, 0x4d, 0xa8, 0xc3, 0x46, 0x7d, 0xdd, 0x56, 0xc6, 0x62, |
| 1091 | 0x72, 0xad, 0x5a, 0xd3, 0x71, 0xae, 0x8c, 0x46, 0x92, 0x3e, 0xc5, 0xc0, | 1090 | 0xb6, 0x6b, 0x95, 0x45, 0x6d, 0xfb, 0x86, 0x50, 0x30, 0xe6, 0x51, 0x4c, |
| 1092 | 0x73, 0x13, 0xc7, 0x1d, 0x6d, 0x8e, 0xe4, 0x52, 0xe5, 0x38, 0x28, 0x63, | 1091 | 0xbc, 0x38, 0x3a, 0x61, 0xeb, 0xd3, 0x25, 0x97, 0xca, 0xc7, 0x41, 0x19, |
| 1093 | 0x95, 0x1c, 0x41, 0xf0, 0x41, 0xf2, 0x84, 0x99, 0x18, 0xa1, 0xe2, 0xe6, | 1092 | 0xab, 0xe4, 0x08, 0x82, 0x0f, 0x92, 0x27, 0x4c, 0xc5, 0x08, 0x15, 0x4b, |
| 1094 | 0x61, 0xc9, 0x13, 0xc2, 0x58, 0x65, 0x7f, 0x09, 0xcf, 0xb5, 0x79, 0xd1, | 1093 | 0x06, 0x25, 0x4f, 0x08, 0x60, 0x65, 0xe2, 0xbb, 0x78, 0xb1, 0xc1, 0x8d, |
| 1095 | 0xc5, 0x1c, 0xeb, 0x16, 0x3b, 0x80, 0x3b, 0x88, 0xa5, 0x2b, 0x6c, 0xe6, | 1094 | 0x56, 0xe6, 0x58, 0xb7, 0x25, 0x7c, 0x58, 0x41, 0x2c, 0x5d, 0x9a, 0x60, |
| 1096 | 0x4e, 0xc1, 0x10, 0x6e, 0xb5, 0xbd, 0x38, 0xdc, 0xc6, 0x1c, 0x28, 0x54, | 1095 | 0xee, 0xa4, 0xf9, 0xb1, 0x2c, 0xe1, 0xc6, 0xb1, 0x06, 0xe6, 0x40, 0xfe, |
| 1097 | 0x89, 0x77, 0x0d, 0x0f, 0x8e, 0x18, 0x41, 0xe4, 0x5c, 0x7f, 0xd8, 0x41, | 1096 | 0x42, 0x7c, 0x64, 0xba, 0x70, 0xdc, 0xd4, 0x90, 0x76, 0xfc, 0x61, 0x17, |
| 1098 | 0x0c, 0xa4, 0x1e, 0x55, 0xc9, 0x1d, 0x44, 0x87, 0x1e, 0xea, 0x53, 0x45, | 1097 | 0x31, 0x90, 0x7a, 0x54, 0x25, 0x77, 0x10, 0x1d, 0xba, 0xa8, 0x4f, 0x15, |
| 1099 | 0xea, 0xbc, 0x0e, 0x3f, 0x2c, 0x17, 0x90, 0x7e, 0x49, 0x3e, 0xf0, 0x33, | 1098 | 0xf1, 0x4b, 0x3a, 0xfc, 0xb2, 0x5c, 0x40, 0xe4, 0x92, 0x7c, 0xe0, 0x37, |
| 1100 | 0x27, 0x35, 0x47, 0xea, 0xc3, 0x0a, 0x98, 0x32, 0x0e, 0xe1, 0xb7, 0x06, | 1099 | 0x76, 0x7c, 0xba, 0xd4, 0x87, 0xe5, 0x8b, 0xca, 0x38, 0x84, 0xdf, 0x12, |
| 1101 | 0xfa, 0x26, 0x3a, 0xc8, 0xed, 0x66, 0x0e, 0xf5, 0x0c, 0xb9, 0x75, 0x1d, | 1100 | 0x27, 0x47, 0x4d, 0x72, 0xbb, 0xa9, 0x43, 0x3d, 0x4f, 0x6e, 0x5d, 0x8e, |
| 1102 | 0x5e, 0xd3, 0x85, 0x5b, 0xbf, 0x8a, 0x20, 0x7d, 0xb7, 0x7f, 0x22, 0xba, | 1101 | 0xb7, 0x0c, 0xe1, 0xd6, 0x6f, 0x42, 0xa3, 0xef, 0xf6, 0x8c, 0x86, 0x3a, |
| 1103 | 0xe1, 0x8c, 0xe2, 0xc1, 0x4b, 0x7a, 0x2d, 0x79, 0x9f, 0x89, 0xed, 0x13, | 1102 | 0xce, 0x2b, 0x2e, 0x9c, 0x32, 0xca, 0xc8, 0xfb, 0x38, 0x0f, 0xa3, 0x70, |
| 1104 | 0xf0, 0x6e, 0x5d, 0x62, 0x20, 0x3d, 0xd1, 0x9b, 0x98, 0xc5, 0xb4, 0xd7, | 1103 | 0x6f, 0x9d, 0x6b, 0x22, 0x39, 0xda, 0x1d, 0x29, 0xe5, 0x78, 0xdd, 0x73, |
| 1105 | 0xbb, 0xa4, 0xc8, 0x89, 0x3e, 0x43, 0xdd, 0xae, 0x8d, 0xbb, 0x9c, 0xa8, | 1104 | 0x73, 0x9c, 0xe8, 0xeb, 0xd4, 0xed, 0x9a, 0xb0, 0xc3, 0x89, 0x72, 0x7c, |
| 1106 | 0xc8, 0x07, 0x82, 0x8e, 0x73, 0x52, 0x17, 0x3d, 0x03, 0x07, 0x4a, 0x3a, | 1105 | 0x40, 0xb3, 0xed, 0x77, 0x0c, 0xd1, 0x33, 0x70, 0x78, 0x52, 0xc7, 0x07, |
| 1107 | 0xde, 0xcf, 0xcf, 0xfd, 0x25, 0x1d, 0x6f, 0xa1, 0x3c, 0xfa, 0x1f, 0xb6, | 1106 | 0x79, 0xdd, 0x33, 0xa9, 0xe3, 0x2d, 0x6c, 0x8f, 0xfe, 0x87, 0x6d, 0x57, |
| 1108 | 0x5d, 0xc4, 0x63, 0x34, 0x54, 0x9a, 0xc2, 0x6f, 0x88, 0xc3, 0xc4, 0x93, | 1107 | 0xf0, 0x18, 0x1d, 0xcc, 0x29, 0xc9, 0x6f, 0x88, 0xc3, 0xc4, 0x95, 0x18, |
| 1109 | 0x24, 0x75, 0xfc, 0x42, 0x7e, 0xbd, 0xe0, 0x36, 0xa7, 0xbb, 0xdd, 0xc5, | 1108 | 0x75, 0xfc, 0x72, 0x66, 0x83, 0xe0, 0x36, 0xa7, 0xbb, 0xd1, 0xc1, 0xef, |
| 1110 | 0xef, 0xa4, 0x7a, 0x80, 0x76, 0x20, 0x7a, 0x78, 0xad, 0x94, 0xdb, 0x38, | 1109 | 0x98, 0x7a, 0x98, 0x76, 0x20, 0x7a, 0x78, 0x6b, 0x32, 0xb7, 0xb1, 0xed, |
| 1111 | 0xce, 0x90, 0x21, 0x3a, 0x2e, 0xe7, 0x65, 0xa2, 0xeb, 0x36, 0xc9, 0xb1, | 1110 | 0x01, 0x53, 0x74, 0x9c, 0xcf, 0xcb, 0x44, 0xd7, 0x37, 0x4a, 0x8e, 0xd5, |
| 1112 | 0xfa, 0x81, 0xdf, 0xb0, 0xac, 0x87, 0xb8, 0x6b, 0xe2, 0x6b, 0xdd, 0x62, | 1111 | 0x03, 0x7c, 0xc1, 0xb2, 0x2e, 0xe2, 0xee, 0x42, 0xfc, 0xa0, 0x4d, 0x6c, |
| 1113 | 0x3b, 0xb3, 0xdc, 0x58, 0x79, 0xd5, 0x42, 0xc7, 0xf9, 0x4a, 0x5c, 0xc3, | 1112 | 0xa7, 0xd4, 0x89, 0x95, 0xf3, 0x6b, 0x6d, 0x3b, 0xdc, 0xa4, 0xe3, 0x82, |
| 1114 | 0x7b, 0x7a, 0x6b, 0xa2, 0x5d, 0x8d, 0xb0, 0xaf, 0x49, 0xd8, 0x93, 0x1d, | 1113 | 0x51, 0x1f, 0x69, 0x54, 0x67, 0x51, 0xd6, 0x28, 0xf6, 0x91, 0x0f, 0x74, |
| 1115 | 0x9c, 0xbb, 0x2b, 0x90, 0x0c, 0x89, 0xad, 0x61, 0x43, 0x45, 0x11, 0xc3, | 1114 | 0xa7, 0x66, 0x22, 0xe6, 0x17, 0x5b, 0x43, 0x47, 0x41, 0x0e, 0xc3, 0x71, |
| 1116 | 0x71, 0xca, 0xd6, 0x63, 0xdb, 0x38, 0x67, 0xfb, 0x42, 0x5d, 0xe4, 0x71, | 1115 | 0x26, 0x61, 0xd4, 0x6d, 0xc3, 0x0c, 0x1c, 0xf0, 0xb7, 0x90, 0xc7, 0xa9, |
| 1117 | 0x6a, 0x27, 0xd3, 0x7f, 0xf2, 0x27, 0xdd, 0x7a, 0x04, 0xef, 0x38, 0xb9, | 1116 | 0x2d, 0x4c, 0xff, 0xc9, 0x9f, 0x0c, 0x6b, 0x07, 0xce, 0xda, 0x69, 0xbf, |
| 1118 | 0x90, 0xc3, 0x38, 0x29, 0xb9, 0xd1, 0x7c, 0x1c, 0x0e, 0x7a, 0xf0, 0x62, | 1117 | 0xcd, 0x38, 0x49, 0x18, 0xa0, 0x2e, 0x5f, 0xd1, 0x5c, 0x78, 0xb5, 0xee, |
| 1119 | 0xac, 0x11, 0xc9, 0x7a, 0x05, 0x35, 0xfa, 0x9b, 0xce, 0x77, 0x42, 0xd2, | 1118 | 0x9a, 0x49, 0xbe, 0x29, 0x9c, 0xe5, 0x3d, 0xfb, 0x98, 0x5f, 0xfa, 0x62, |
| 1120 | 0x0e, 0x73, 0x3c, 0xf5, 0x56, 0x8f, 0xe4, 0x80, 0x5e, 0x5d, 0xe4, 0x76, | 1119 | 0x9e, 0xa7, 0x2e, 0x73, 0x49, 0x1e, 0xe8, 0x36, 0xa4, 0x6d, 0xe6, 0x0b, |
| 1121 | 0x31, 0xc7, 0xbd, 0xb4, 0xfd, 0x7f, 0x75, 0x8e, 0x87, 0xa4, 0xfd, 0x48, | 1120 | 0x63, 0x57, 0xcb, 0x30, 0x61, 0x4f, 0xf8, 0x45, 0x86, 0xa0, 0xa6, 0xab, |
| 1122 | 0x50, 0x53, 0x7f, 0xd7, 0x1c, 0x7e, 0xdf, 0xf9, 0x81, 0x2b, 0x33, 0xe3, | 1121 | 0x7f, 0x6c, 0x1e, 0xaf, 0xc3, 0xcf, 0x35, 0x37, 0x7c, 0xe4, 0xc5, 0xaf, |
| 1123 | 0xea, 0x01, 0xaa, 0xc8, 0x23, 0x54, 0x54, 0x8b, 0xcc, 0x72, 0x3b, 0xe2, | 1122 | 0xf9, 0x73, 0x6d, 0xf4, 0x9a, 0xe3, 0x33, 0x4a, 0x1d, 0xac, 0x3c, 0xa2, |
| 1124 | 0x67, 0x73, 0x79, 0x4f, 0x9e, 0x89, 0x8d, 0x6c, 0x61, 0xbb, 0xcf, 0x39, | 1123 | 0x24, 0x89, 0x0f, 0xe3, 0x1e, 0x68, 0xe5, 0x51, 0xb7, 0xae, 0x11, 0x13, |
| 1125 | 0x68, 0x94, 0xef, 0xd3, 0x1e, 0x29, 0x6b, 0x4d, 0x1e, 0x5a, 0xe1, 0xc5, | 1124 | 0x36, 0x13, 0x13, 0x2c, 0x62, 0x42, 0x5f, 0xe6, 0x88, 0x92, 0xca, 0x7c, |
| 1126 | 0x52, 0xb4, 0xc4, 0x97, 0x2d, 0x97, 0xb1, 0xa8, 0x66, 0x52, 0xf3, 0xc3, | 1125 | 0x46, 0x5d, 0x48, 0x1d, 0xb1, 0x9d, 0x2d, 0x94, 0xe5, 0x27, 0x36, 0xaa, |
| 1127 | 0x6a, 0xf4, 0x10, 0x8b, 0xdf, 0x68, 0x6b, 0xc3, 0x72, 0xe6, 0x8c, 0xef, | 1126 | 0x44, 0x9e, 0x0b, 0xbc, 0xdf, 0x42, 0x1e, 0x92, 0x97, 0x53, 0x7c, 0x95, |
| 1128 | 0x10, 0x5c, 0x7a, 0x75, 0x0f, 0xa6, 0x38, 0xbe, 0x27, 0x0d, 0x59, 0x2f, | 1127 | 0x10, 0x54, 0x2c, 0xcf, 0x52, 0xb9, 0xdf, 0xaa, 0x5c, 0xcf, 0x70, 0x4b, |
| 1129 | 0x70, 0x70, 0x4b, 0xdc, 0x4a, 0xd1, 0x63, 0xad, 0x59, 0xb4, 0x9d, 0x6a, | 1128 | 0xb9, 0xee, 0xb1, 0xa3, 0x4b, 0xdd, 0x58, 0x80, 0xd9, 0xe1, 0x85, 0x8b, |
| 1130 | 0x5d, 0xe2, 0x7c, 0x2d, 0x6a, 0x4c, 0x6f, 0xec, 0x1d, 0x44, 0x8c, 0x1d, | 1129 | 0x44, 0x17, 0x6a, 0x34, 0xa6, 0x7b, 0x61, 0x55, 0xb9, 0x88, 0xe5, 0xef, |
| 1131 | 0xe4, 0x39, 0x5a, 0x7d, 0x4b, 0xc2, 0x47, 0xed, 0xbe, 0x6c, 0x47, 0x13, | 1130 | 0x35, 0x34, 0x60, 0x11, 0x73, 0xce, 0xb3, 0x04, 0xa7, 0x6e, 0xc3, 0x85, |
| 1132 | 0x47, 0x94, 0xa2, 0x3f, 0xbc, 0xc0, 0xb9, 0x7d, 0xcd, 0xd6, 0x37, 0x56, | 1131 | 0x71, 0xea, 0xe7, 0x69, 0x53, 0xd6, 0x1b, 0x6c, 0xdc, 0x16, 0xb6, 0xe2, |
| 1133 | 0x7a, 0x8a, 0xdf, 0x5f, 0x71, 0xf3, 0xd1, 0xb2, 0x3f, 0x84, 0x4b, 0xb8, | 1132 | 0xf4, 0x78, 0xab, 0x94, 0xb6, 0x57, 0x6c, 0x08, 0x4f, 0x28, 0x43, 0x49, |
| 1134 | 0xe1, 0xf7, 0x9f, 0xb2, 0x71, 0x86, 0x54, 0x88, 0x79, 0x29, 0xce, 0xf4, | 1133 | 0xd4, 0x5d, 0x77, 0x16, 0x41, 0x73, 0x17, 0x79, 0x92, 0x5e, 0x31, 0x3b, |
| 1135 | 0x19, 0x53, 0x8a, 0x4f, 0xaf, 0x25, 0xae, 0x0a, 0x96, 0x56, 0x90, 0x13, | 1134 | 0xe2, 0xa1, 0xe6, 0x5e, 0x4f, 0x84, 0x22, 0xc7, 0x95, 0x9c, 0x3f, 0xbd, |
| 1136 | 0x4a, 0xec, 0xf7, 0xfb, 0xdf, 0x61, 0x19, 0x72, 0xba, 0xe3, 0xb1, 0xeb, | 1135 | 0x4c, 0xdb, 0x78, 0x2b, 0x61, 0x74, 0x16, 0xba, 0x72, 0xbf, 0xdf, 0x70, |
| 1137 | 0x5b, 0x13, 0x7e, 0x24, 0xad, 0x4a, 0xfa, 0xe5, 0x2c, 0x33, 0xe4, 0xbf, | 1136 | 0xf2, 0xd9, 0xbc, 0x3f, 0x05, 0x26, 0x71, 0xc7, 0xeb, 0x3d, 0x93, 0xc0, |
| 1138 | 0xaa, 0x60, 0x35, 0x06, 0x68, 0xd7, 0x35, 0xcc, 0x57, 0x5b, 0xd2, 0x13, | 1137 | 0x79, 0xb5, 0x59, 0xf2, 0x5a, 0x9c, 0xdf, 0x6c, 0x8e, 0x2b, 0x1e, 0xa3, |
| 1139 | 0x8c, 0xe1, 0x6d, 0x78, 0x70, 0x82, 0x23, 0x6b, 0x18, 0x6c, 0x54, 0x4d, | 1138 | 0x8c, 0xfa, 0x10, 0x2c, 0x2e, 0x20, 0xa7, 0x14, 0xee, 0xe0, 0xf5, 0x9e, |
| 1140 | 0x59, 0x83, 0x08, 0xc2, 0xd7, 0xf0, 0xe0, 0x0d, 0xaa, 0x79, 0x1c, 0x3d, | 1139 | 0x65, 0x19, 0x72, 0xc2, 0x89, 0xba, 0xf9, 0xf5, 0x11, 0x2f, 0x62, 0x56, |
| 1141 | 0x1d, 0xfe, 0xce, 0x44, 0x01, 0xfe, 0x7a, 0x73, 0x13, 0xe2, 0x69, 0xc9, | 1140 | 0x21, 0xfd, 0xba, 0x34, 0xea, 0xf7, 0xde, 0x98, 0xb5, 0xaa, 0x7c, 0xf4, |
| 1142 | 0x3b, 0x05, 0x23, 0x93, 0x5b, 0x89, 0x5a, 0x8d, 0x75, 0xd7, 0x96, 0xf5, | 1141 | 0x8b, 0x12, 0xe6, 0xbb, 0xb3, 0x93, 0x0b, 0xcb, 0x24, 0x57, 0xdc, 0x38, |
| 1143 | 0x0d, 0xb5, 0xd6, 0x94, 0xfc, 0x53, 0xeb, 0x7c, 0xc5, 0xc5, 0xd2, 0x20, | 1142 | 0xca, 0x91, 0x55, 0xf6, 0x57, 0xa9, 0x51, 0x59, 0xc3, 0xd0, 0xe0, 0xa9, |
| 1144 | 0xf3, 0x85, 0x1f, 0x87, 0xff, 0xcf, 0xea, 0x27, 0x38, 0x27, 0xd2, 0x17, | 1143 | 0xdc, 0x78, 0x8b, 0x1a, 0x9d, 0x40, 0x7b, 0xb3, 0xb7, 0x25, 0x92, 0x85, |
| 1145 | 0xf9, 0x2f, 0x79, 0x3f, 0xbc, 0x2a, 0xb1, 0xb0, 0x77, 0xdc, 0xcb, 0xfc, | 1144 | 0xb7, 0x22, 0xba, 0x09, 0xe1, 0xa4, 0xe4, 0xad, 0x82, 0xb1, 0xb1, 0xad, |
| 1146 | 0x4a, 0xe6, 0x4c, 0xe2, 0xf1, 0x6b, 0xff, 0xf5, 0x79, 0xfa, 0x8b, 0x8f, | 1145 | 0x44, 0xbd, 0xaa, 0xf2, 0x79, 0xf9, 0xb9, 0x82, 0x5a, 0x16, 0x95, 0xfc, |
| 1147 | 0xba, 0x7f, 0x44, 0xb7, 0x08, 0xf3, 0x8e, 0xa3, 0xc7, 0x23, 0xe1, 0x0a, | 1146 | 0x55, 0x6f, 0x79, 0xc3, 0xc1, 0x62, 0x8d, 0xf9, 0xc6, 0xaf, 0x02, 0xff, |
| 1148 | 0x45, 0xc3, 0xf6, 0xb6, 0x7f, 0xa7, 0x8d, 0x80, 0x38, 0x06, 0x12, 0xeb, | 1147 | 0x77, 0xf5, 0x5b, 0xdd, 0x32, 0x77, 0x1e, 0x43, 0xbe, 0x65, 0xdd, 0x00, |
| 1149 | 0x5a, 0x6c, 0x19, 0xaf, 0x98, 0x51, 0xaf, 0x67, 0x4d, 0xb9, 0xde, 0x80, | 1148 | 0x6e, 0x95, 0x58, 0xda, 0x3d, 0xe2, 0x66, 0x7e, 0x26, 0xf3, 0x25, 0xf1, |
| 1150 | 0x6e, 0xa5, 0xa4, 0xde, 0x68, 0x3c, 0xd2, 0xb3, 0x8d, 0xf5, 0x1e, 0x65, | 1149 | 0xf8, 0xc8, 0xbd, 0x2f, 0xd1, 0xdf, 0x3c, 0xd4, 0xfd, 0x0e, 0xc3, 0x62, |
| 1151 | 0xbd, 0x24, 0x63, 0xe7, 0x3d, 0x13, 0x41, 0x37, 0x9f, 0xb3, 0xc6, 0xab, | 1150 | 0x98, 0xb0, 0x6d, 0x23, 0x1c, 0x0c, 0x14, 0x28, 0x3a, 0xb6, 0x37, 0xfc, |
| 1152 | 0x67, 0xb6, 0x77, 0xbe, 0xde, 0xe3, 0xba, 0x35, 0xe5, 0xb6, 0xb7, 0x38, | 1151 | 0x13, 0xed, 0x0b, 0xc4, 0x41, 0x90, 0x98, 0x97, 0x61, 0xcb, 0x48, 0xc1, |
| 1153 | 0xb2, 0xb1, 0xc2, 0xe3, 0x45, 0x9a, 0xf5, 0xa6, 0x58, 0xef, 0xf5, 0x09, | 1152 | 0x94, 0x7a, 0x91, 0xfb, 0xf2, 0xf5, 0x7a, 0x0d, 0x2b, 0x2e, 0xf5, 0x86, |
| 1154 | 0x59, 0x8f, 0xc0, 0x0d, 0xe3, 0x76, 0xe6, 0xb8, 0x47, 0xd7, 0x83, 0x27, | 1153 | 0xc3, 0xc1, 0xf6, 0x6d, 0xac, 0xb7, 0x93, 0xf5, 0x62, 0x8c, 0xbd, 0xeb, |
| 1155 | 0x91, 0x24, 0xe6, 0xba, 0x73, 0x79, 0xc3, 0x58, 0x7e, 0x33, 0xb6, 0xeb, | 1154 | 0x47, 0x35, 0x27, 0x1f, 0xb4, 0x46, 0x8a, 0xa7, 0xf6, 0x77, 0xa9, 0xde, |
| 1156 | 0x87, 0xe2, 0x95, 0xac, 0x77, 0x44, 0x3f, 0x14, 0xf6, 0xd1, 0xaf, 0xd6, | 1155 | 0x93, 0x86, 0x35, 0xee, 0xf4, 0xd7, 0x14, 0xec, 0x2c, 0x70, 0xb9, 0x91, |
| 1157 | 0x51, 0x5e, 0x2f, 0xf3, 0x1a, 0x95, 0xfe, 0xb2, 0x65, 0x5c, 0x62, 0xbf, | 1156 | 0x64, 0xbd, 0x71, 0xd6, 0x7b, 0x77, 0x54, 0xd6, 0x33, 0x70, 0xcb, 0x48, |
| 1158 | 0x41, 0x5e, 0x12, 0xa2, 0xcd, 0xc9, 0x98, 0xa5, 0x5d, 0x99, 0x53, 0x19, | 1157 | 0x22, 0x35, 0xe1, 0x32, 0x0c, 0xed, 0x1d, 0xc4, 0x88, 0xd9, 0xce, 0x5c, |
| 1159 | 0x5f, 0x24, 0x36, 0xee, 0x8e, 0x4f, 0x99, 0x7b, 0x40, 0x72, 0xdd, 0x7a, | 1158 | 0xde, 0x72, 0x28, 0xd3, 0x85, 0xed, 0xc6, 0xd1, 0x70, 0x21, 0xeb, 0x1d, |
| 1160 | 0x0b, 0x7d, 0x6d, 0x12, 0xff, 0x14, 0x62, 0x6f, 0x03, 0xf3, 0x4f, 0x69, | 1159 | 0x37, 0x8e, 0x06, 0x3c, 0xf4, 0x99, 0x75, 0x6c, 0xaf, 0x9b, 0x79, 0x91, |
| 1161 | 0x23, 0x84, 0x6d, 0xf4, 0xed, 0xfd, 0x86, 0xe3, 0x3c, 0x6f, 0xcc, 0xc7, | 1160 | 0x4a, 0x8c, 0xdc, 0x32, 0x22, 0xdc, 0xc1, 0xc4, 0x6c, 0xe6, 0x67, 0x8e, |
| 1162 | 0x01, 0x23, 0x92, 0x12, 0x3b, 0x7c, 0xd3, 0x58, 0x76, 0xa5, 0xe4, 0x96, | 1161 | 0x6d, 0xca, 0xda, 0x09, 0x64, 0x4e, 0x65, 0x7c, 0xc1, 0xba, 0x11, 0x67, |
| 1163 | 0xc0, 0x9f, 0x60, 0x8a, 0xb6, 0x51, 0xa5, 0x8b, 0xbf, 0x29, 0x08, 0x47, | 1162 | 0x7c, 0xca, 0x35, 0x87, 0x25, 0x57, 0xae, 0xb0, 0xb0, 0xb9, 0x41, 0xe2, |
| 1164 | 0xbd, 0x5a, 0x8d, 0xe2, 0xc0, 0xbf, 0x78, 0xe1, 0xc6, 0x85, 0x1c, 0x7b, | 1163 | 0xa7, 0x42, 0xec, 0x0e, 0xd6, 0x8d, 0x33, 0x9e, 0x6c, 0x1b, 0xfb, 0x33, |
| 1165 | 0xed, 0xf5, 0x0a, 0xde, 0xbf, 0x4a, 0xc1, 0xa1, 0xab, 0xa2, 0xe1, 0x11, | 1164 | 0x8c, 0x6b, 0x95, 0xcc, 0x65, 0x6d, 0xfb, 0x15, 0x63, 0x61, 0x05, 0x43, |
| 1166 | 0x65, 0x16, 0xb1, 0x35, 0xda, 0xdd, 0xa9, 0x58, 0x47, 0x59, 0x37, 0xd9, | 1165 | 0xbc, 0xd7, 0x4b, 0x99, 0xbd, 0xa1, 0x62, 0x89, 0xd3, 0x4e, 0x5b, 0x31, |
| 1167 | 0xe6, 0x89, 0x84, 0xa1, 0xd4, 0xd1, 0xef, 0x5b, 0x34, 0x09, 0xfd, 0xde, | 1166 | 0x08, 0x3e, 0x29, 0x48, 0x1a, 0xd6, 0x06, 0x91, 0xff, 0x58, 0x38, 0x18, |
| 1168 | 0x81, 0x68, 0xf8, 0x51, 0xfe, 0xf7, 0x4c, 0x28, 0x98, 0xd0, 0x23, 0x49, | 1167 | 0x3f, 0xac, 0xd4, 0xb7, 0x6f, 0xc3, 0x3f, 0x11, 0x2f, 0x41, 0xac, 0x9b, |
| 1169 | 0xb8, 0xf2, 0xd9, 0x36, 0xd3, 0xce, 0xab, 0xa3, 0x8e, 0x73, 0x2c, 0xde, | 1168 | 0x89, 0x21, 0x93, 0xd6, 0xd2, 0x66, 0x31, 0x42, 0x4a, 0x8c, 0x77, 0x9f, |
| 1170 | 0x1a, 0x3c, 0x86, 0x37, 0x89, 0x6d, 0xd2, 0x4e, 0x19, 0xeb, 0xc1, 0x5c, | 1169 | 0x58, 0xc4, 0x08, 0xe7, 0x46, 0xb0, 0xb3, 0x95, 0xe5, 0x23, 0xb9, 0x75, |
| 1171 | 0x56, 0x4f, 0x76, 0x2a, 0x8e, 0x57, 0xf8, 0xc3, 0xfa, 0xbc, 0xc4, 0xc3, | 1170 | 0x16, 0x5c, 0x18, 0x0d, 0x32, 0x0e, 0x8b, 0x2e, 0x80, 0xad, 0x99, 0x7c, |
| 1172 | 0x72, 0x7f, 0xcb, 0x71, 0xd1, 0x71, 0xde, 0x34, 0x8a, 0xb2, 0x82, 0x1d, | 1171 | 0x2c, 0xb0, 0xed, 0x83, 0xa6, 0x6d, 0xbf, 0x64, 0xce, 0xc4, 0x61, 0x33, |
| 1173 | 0x91, 0x14, 0x30, 0x1f, 0x93, 0x7a, 0xa4, 0x6b, 0x8a, 0x3a, 0x08, 0xd3, | 1172 | 0x18, 0x17, 0x1f, 0x78, 0xdf, 0x5c, 0x78, 0x83, 0xe4, 0xc5, 0x80, 0xc8, |
| 1174 | 0xdf, 0xe6, 0xe9, 0x8d, 0x38, 0xee, 0x8b, 0x04, 0x8f, 0x2b, 0xcb, 0xcf, | 1173 | 0xa6, 0x30, 0x76, 0x29, 0x28, 0xe1, 0x27, 0x10, 0x72, 0xeb, 0x25, 0x8a, |
| 1175 | 0xaa, 0x58, 0xb4, 0xfe, 0x09, 0xa5, 0x75, 0x43, 0x15, 0xf4, 0x64, 0x41, | 1174 | 0x0d, 0x6f, 0x53, 0x6d, 0x67, 0x2d, 0xf5, 0x5e, 0x36, 0x5f, 0xc1, 0x27, |
| 1176 | 0x99, 0x2b, 0x3a, 0x09, 0x07, 0xc8, 0xa5, 0xd6, 0xc1, 0x8d, 0xd1, 0xb8, | 1175 | 0x37, 0x2a, 0x38, 0x7a, 0x63, 0x28, 0x30, 0xa4, 0x94, 0x32, 0x2e, 0x84, |
| 1177 | 0xcd, 0xf6, 0x26, 0xa7, 0xd1, 0x4c, 0xdb, 0xd7, 0x7b, 0xee, 0x23, 0x0f, | 1176 | 0xda, 0x5a, 0x14, 0xeb, 0x04, 0xeb, 0xc6, 0x1a, 0x5c, 0xc1, 0x00, 0x94, |
| 1178 | 0x04, 0x3e, 0xce, 0x24, 0x41, 0xfa, 0xda, 0x88, 0xd4, 0xa7, 0x1c, 0xe7, | 1177 | 0x72, 0x62, 0xd6, 0x6c, 0x5d, 0x68, 0x8b, 0xbb, 0x37, 0x14, 0xd8, 0xc9, |
| 1179 | 0x7e, 0xf6, 0x75, 0x07, 0xfb, 0xfa, 0x60, 0xfc, 0x3d, 0xe7, 0x5f, 0x5d, | 1178 | 0x6f, 0xd7, 0xa8, 0x82, 0x51, 0x23, 0x18, 0x83, 0xd3, 0x3e, 0xfb, 0x66, |
| 1180 | 0x99, 0x37, 0x62, 0x44, 0xbf, 0x54, 0xee, 0xbb, 0xcc, 0xf5, 0x45, 0xae, | 1179 | 0xca, 0x7c, 0x53, 0xc8, 0xb6, 0x4f, 0x86, 0xeb, 0xb5, 0x93, 0x78, 0x9f, |
| 1181 | 0x0f, 0x37, 0xcf, 0x61, 0xbe, 0xd2, 0x21, 0xb8, 0x71, 0xd2, 0x4b, 0xdc, | 1180 | 0xb8, 0x2c, 0xfd, 0xe4, 0x65, 0x03, 0xf3, 0x70, 0x23, 0xd6, 0xa2, 0xdc, |
| 1182 | 0xa0, 0x3c, 0xc6, 0x10, 0xf5, 0xd2, 0x38, 0xec, 0x01, 0xe3, 0x5b, 0x38, | 1181 | 0x24, 0xb4, 0x84, 0x71, 0x52, 0x62, 0x79, 0x5e, 0xde, 0x7c, 0x4c, 0xb7, |
| 1183 | 0xa5, 0xa8, 0x24, 0x42, 0x41, 0xf8, 0x75, 0x07, 0x0f, 0x90, 0x33, 0x24, | 1182 | 0xed, 0xf7, 0xcd, 0x5c, 0x5b, 0x5a, 0x73, 0x30, 0x0e, 0xcc, 0xc4, 0x98, |
| 1184 | 0xe7, 0xd4, 0xe1, 0x73, 0x86, 0x1f, 0xb3, 0xa2, 0xea, 0x65, 0x1e, 0xce, | 1183 | 0x11, 0x6c, 0x1d, 0xa7, 0x1e, 0x02, 0xf4, 0xf5, 0x19, 0x46, 0x15, 0x26, |
| 1185 | 0xc9, 0x81, 0xb8, 0x7c, 0xf7, 0x61, 0x6a, 0x8e, 0x07, 0x9b, 0xc9, 0x25, | 1184 | 0x3c, 0x41, 0x6d, 0x42, 0x59, 0xf4, 0x99, 0x8a, 0x39, 0x1b, 0x9e, 0x52, |
| 1186 | 0x82, 0x51, 0x75, 0x9e, 0xdc, 0xf7, 0xb7, 0xcb, 0x77, 0xf6, 0x7f, 0xae, | 1185 | 0xea, 0x3b, 0x8a, 0x60, 0x90, 0x9f, 0x5e, 0x23, 0xf3, 0x11, 0xf0, 0x91, |
| 1187 | 0x82, 0xfb, 0x69, 0x15, 0x6a, 0xb4, 0x37, 0x2c, 0xf7, 0xbb, 0x0c, 0xf9, | 1186 | 0x0b, 0xae, 0x83, 0xc3, 0x2f, 0x70, 0x7b, 0xc2, 0x1d, 0xbb, 0x80, 0x1a, |
| 1188 | 0xae, 0xa0, 0x39, 0xee, 0xe5, 0xbc, 0x38, 0xf0, 0x48, 0x7a, 0x1f, 0xe5, | 1187 | 0xfa, 0x9d, 0xd1, 0xfe, 0x90, 0x12, 0x64, 0xf2, 0xf2, 0x35, 0x26, 0x38, |
| 1189 | 0xfd, 0xb8, 0x7c, 0x4e, 0xde, 0xcf, 0x71, 0x27, 0xf7, 0x29, 0x82, 0x33, | 1188 | 0x22, 0x6b, 0x15, 0xe2, 0xf7, 0xd8, 0xf6, 0xc3, 0x94, 0x75, 0x17, 0x65, |
| 1190 | 0x3f, 0x72, 0x5e, 0x64, 0x1c, 0x09, 0xf2, 0xf9, 0xe7, 0xd8, 0xf6, 0xd1, | 1189 | 0xdd, 0x18, 0xfe, 0xd8, 0xfe, 0x07, 0xa7, 0xcd, 0x5b, 0x31, 0x64, 0x5c, |
| 1191 | 0xf8, 0xf3, 0xce, 0x3c, 0xe2, 0xeb, 0xb1, 0x84, 0x86, 0xf9, 0x57, 0x35, | 1190 | 0xdd, 0xee, 0x47, 0x36, 0xa6, 0x4b, 0xbb, 0x1e, 0x2c, 0x99, 0xce, 0x5c, |
| 1192 | 0xe1, 0xf8, 0x9d, 0x32, 0x66, 0x05, 0xb3, 0xf4, 0x2f, 0xf8, 0x24, 0xcf, | 1191 | 0xab, 0x59, 0xf0, 0xaa, 0xd2, 0x43, 0x7c, 0x62, 0x7b, 0x8c, 0x7f, 0xea, |
| 1193 | 0xac, 0xd5, 0xe7, 0xe2, 0xe6, 0x3b, 0x8a, 0xf7, 0xaa, 0xa2, 0xb2, 0x4e, | 1192 | 0xd5, 0x1c, 0xc2, 0x05, 0xc6, 0xe6, 0x40, 0x5c, 0x51, 0xab, 0x4b, 0xa0, |
| 1194 | 0xa8, 0xa1, 0xea, 0xaa, 0x06, 0x68, 0xa5, 0x7b, 0xcb, 0xa3, 0xde, 0xee, | 1193 | 0xc1, 0x6b, 0xd8, 0x78, 0x84, 0x7c, 0x27, 0x36, 0xbd, 0x1c, 0xdf, 0xe4, |
| 1195 | 0x59, 0x8a, 0x1e, 0xbc, 0x4d, 0x91, 0xe7, 0xbf, 0x24, 0xb7, 0x75, 0x9c, | 1194 | 0x9c, 0x96, 0x86, 0xd4, 0x6b, 0x5d, 0x9c, 0x93, 0xc3, 0x61, 0xf9, 0xed, |
| 1196 | 0x07, 0x38, 0x5f, 0x2d, 0xf1, 0x00, 0x4e, 0xb3, 0x9d, 0x5e, 0xea, 0x6f, | 1195 | 0xc1, 0xf8, 0x74, 0x17, 0xba, 0x38, 0xcb, 0x5a, 0x48, 0x9d, 0x21, 0xf7, |
| 1197 | 0xe5, 0xf9, 0xf9, 0x2a, 0xd7, 0xff, 0xb9, 0xa3, 0x7d, 0x4a, 0xea, 0x8a, | 1196 | 0xbd, 0x8d, 0xf2, 0x9b, 0xf2, 0x5f, 0xa3, 0xe0, 0x61, 0x5a, 0xa4, 0x1a, |
| 1198 | 0x8c, 0x85, 0x5d, 0x37, 0x2b, 0x1c, 0x50, 0xb5, 0xe8, 0xd9, 0xd5, 0x19, | 1197 | 0xea, 0x0e, 0xc8, 0xfd, 0x56, 0x53, 0x7e, 0x2b, 0xe4, 0x92, 0x6e, 0xce, |
| 1199 | 0xcb, 0xf6, 0xba, 0xdf, 0x83, 0x1d, 0xaf, 0x9d, 0x5f, 0xf3, 0x3a, 0xe3, | 1198 | 0x8b, 0x0d, 0x97, 0x2c, 0x4d, 0x84, 0x78, 0x3f, 0x2c, 0xd7, 0xb1, 0x87, |
| 1200 | 0xc6, 0xa3, 0x65, 0xd7, 0x07, 0x71, 0xdc, 0xa9, 0x6f, 0xb7, 0x82, 0x95, | 1199 | 0x39, 0xee, 0xd8, 0x01, 0x45, 0x30, 0xee, 0x97, 0xf6, 0x2b, 0x8c, 0x81, |
| 1201 | 0x90, 0xb8, 0xd4, 0x1c, 0xfb, 0x0a, 0xe5, 0xfe, 0xc0, 0x28, 0xc6, 0xac, | 1200 | 0x1a, 0x9f, 0x7f, 0x93, 0x7d, 0x9f, 0x08, 0xbf, 0x64, 0xcf, 0xa8, 0x50, |
| 1202 | 0xfd, 0x46, 0x24, 0x6b, 0xd1, 0x1f, 0x52, 0xcc, 0x13, 0x3b, 0x25, 0x76, | 1201 | 0x70, 0x32, 0xa2, 0x63, 0xe6, 0x8d, 0xd5, 0x98, 0xb8, 0x5b, 0xc6, 0xac, |
| 1203 | 0x4f, 0xd6, 0xfa, 0x50, 0x3b, 0x1f, 0x95, 0xed, 0x91, 0xfe, 0x05, 0xcc, | 1202 | 0xa0, 0xd4, 0x38, 0xe8, 0x91, 0x1c, 0xb9, 0xcc, 0xb8, 0x06, 0x4b, 0x56, |
| 1204 | 0x9b, 0x3c, 0x1d, 0x12, 0xeb, 0x64, 0x7e, 0xdc, 0x32, 0x6c, 0xab, 0x0a, | 1203 | 0xe4, 0xee, 0x15, 0x85, 0x64, 0x8d, 0x53, 0x47, 0xd1, 0x8d, 0x95, 0xd0, |
| 1205 | 0xcb, 0xd9, 0xc7, 0x78, 0xfb, 0xef, 0x8b, 0x13, 0x22, 0x47, 0xac, 0x33, | 1204 | 0x27, 0xef, 0x2d, 0x0a, 0xb9, 0xdb, 0x4a, 0x15, 0x43, 0xbb, 0x5d, 0x91, |
| 1206 | 0xd2, 0x9f, 0xc4, 0xef, 0x2b, 0x0b, 0x46, 0x65, 0x59, 0x4f, 0xf2, 0xdf, | 1205 | 0xe7, 0xbf, 0x23, 0x2f, 0xb7, 0xed, 0x47, 0x38, 0x5f, 0xb3, 0xc3, 0x3e, |
| 1207 | 0x90, 0xca, 0xab, 0xe4, 0x19, 0x15, 0xc1, 0xde, 0x8e, 0x46, 0x5e, 0xf2, | 1206 | 0x9c, 0x63, 0x3f, 0xdd, 0xd4, 0xdf, 0xf2, 0x4b, 0xf3, 0x95, 0xaf, 0xff, |
| 1208 | 0xdc, 0x7b, 0xc3, 0xda, 0xfc, 0xf9, 0x75, 0x3c, 0x64, 0x8d, 0x0a, 0xa8, | 1207 | 0xa9, 0xad, 0xdf, 0x23, 0x75, 0xa5, 0x8d, 0xda, 0xd6, 0x25, 0xca, 0x03, |
| 1209 | 0x57, 0x0b, 0x66, 0x13, 0x7d, 0x83, 0x32, 0x3e, 0x8b, 0x56, 0x2e, 0x39, | 1208 | 0x1e, 0xc9, 0x91, 0x36, 0x86, 0x1d, 0x9d, 0xb1, 0xec, 0x73, 0xce, 0x6f, |
| 1210 | 0x7a, 0xe7, 0x5d, 0x77, 0xd3, 0x9f, 0x9f, 0x63, 0x8b, 0xa3, 0xe4, 0x33, | 1209 | 0xad, 0xf9, 0xad, 0x4b, 0xeb, 0x75, 0xe7, 0x9d, 0x58, 0xba, 0x70, 0xbe, |
| 1211 | 0x96, 0xeb, 0x19, 0xe2, 0xeb, 0x33, 0xd7, 0xf5, 0x24, 0x86, 0x94, 0xd7, | 1210 | 0x86, 0x09, 0xbb, 0xa2, 0xd1, 0xd2, 0x0a, 0x21, 0x31, 0xb5, 0xa6, 0xee, |
| 1212 | 0x06, 0x1b, 0x30, 0xb8, 0xfb, 0x0e, 0x68, 0x8d, 0x45, 0x1c, 0x52, 0xcd, | 1211 | 0x39, 0xb6, 0xfb, 0x73, 0x33, 0x17, 0x6f, 0x0f, 0x9a, 0xc1, 0x3e, 0x8b, |
| 1213 | 0xc5, 0x58, 0x96, 0x7d, 0xdb, 0x57, 0xe4, 0xe0, 0xb5, 0x18, 0xd8, 0x1d, | 1212 | 0xfe, 0x13, 0x67, 0x8e, 0xdb, 0x22, 0xbc, 0x63, 0xec, 0x16, 0xce, 0xc3, |
| 1214 | 0x47, 0x6e, 0x8e, 0x3c, 0x93, 0x7b, 0x7e, 0x08, 0x4e, 0x6e, 0xdf, 0x7d, | 1213 | 0x4c, 0x14, 0x36, 0x06, 0x7b, 0x66, 0x31, 0xe7, 0x73, 0x35, 0x4b, 0x9c, |
| 1215 | 0x99, 0xe4, 0xd4, 0x61, 0x91, 0x9b, 0xa2, 0xef, 0xa8, 0xfa, 0xdb, 0x8e, | 1214 | 0x96, 0xf9, 0x71, 0xca, 0xb0, 0xaf, 0x22, 0x2c, 0xa2, 0x8c, 0xe1, 0xc6, |
| 1216 | 0x15, 0x14, 0xf9, 0x87, 0xae, 0xf4, 0x52, 0x87, 0x37, 0xa1, 0xb5, 0x67, | 1215 | 0x3f, 0x15, 0xdf, 0xa4, 0x1d, 0xb1, 0xce, 0x60, 0x4f, 0x0c, 0x7f, 0xaa, |
| 1217 | 0x0c, 0xa7, 0xc8, 0xeb, 0xdc, 0x35, 0x54, 0xad, 0xd2, 0x9c, 0xba, 0xdf, | 1216 | 0x2c, 0xc8, 0x28, 0x64, 0x2d, 0xcc, 0x7b, 0x4b, 0x3c, 0xa3, 0x92, 0x23, |
| 1218 | 0x87, 0x68, 0x6a, 0x9c, 0x38, 0x10, 0x98, 0xf0, 0x93, 0x9f, 0xcc, 0x77, | 1217 | 0x15, 0x68, 0xdd, 0xcd, 0x55, 0xfc, 0xc8, 0x73, 0xf7, 0x2d, 0x6b, 0x32, |
| 1219 | 0xd7, 0x8e, 0x96, 0x91, 0x7f, 0xa4, 0xc8, 0x6d, 0x3f, 0xee, 0xf5, 0xe2, | 1218 | 0x97, 0xd6, 0x20, 0xd1, 0x67, 0x16, 0x40, 0xbd, 0x49, 0xe2, 0x05, 0x7d, |
| 1220 | 0x6e, 0x62, 0xc6, 0x7e, 0xbd, 0x75, 0xc3, 0x18, 0x7e, 0x45, 0xac, 0x93, | 1219 | 0x59, 0x93, 0xf1, 0x59, 0xb4, 0x72, 0x59, 0x5f, 0x30, 0x56, 0xad, 0x25, |
| 1221 | 0xf2, 0x3f, 0x60, 0x7b, 0x22, 0xd3, 0xcb, 0xf6, 0xe0, 0xf7, 0x12, 0x8f, | 1220 | 0x5e, 0xbc, 0xc8, 0x1e, 0x87, 0xc9, 0xc5, 0x2c, 0xc7, 0x33, 0x9c, 0xf8, |
| 1222 | 0xc9, 0x09, 0xbd, 0x3e, 0x3d, 0xed, 0x93, 0xf8, 0x2d, 0xdc, 0x75, 0xc7, | 1221 | 0x37, 0x65, 0x4d, 0x52, 0xe2, 0x57, 0x7e, 0x5d, 0xb3, 0x12, 0xfd, 0x7b, |
| 1223 | 0x6e, 0x05, 0x9d, 0x94, 0xf3, 0x28, 0x6d, 0xe6, 0xfe, 0x28, 0xbc, 0x5d, | 1222 | 0x57, 0x40, 0xaf, 0xca, 0x61, 0xa0, 0x1a, 0x6d, 0xc2, 0xc2, 0xbe, 0x40, |
| 1224 | 0x57, 0x91, 0xa3, 0x90, 0xf3, 0x61, 0x4e, 0x00, 0x8f, 0x8c, 0x23, 0x91, | 1223 | 0x41, 0x2e, 0x7f, 0x28, 0x43, 0xef, 0xde, 0x30, 0xd2, 0xd3, 0x9d, 0xfa, |
| 1225 | 0xd7, 0xa7, 0xe6, 0x05, 0xf0, 0x26, 0xe5, 0x08, 0xae, 0x57, 0x94, 0xe4, | 1224 | 0xbc, 0xe7, 0x85, 0x60, 0xf4, 0xf6, 0xbd, 0xd7, 0xca, 0x7a, 0x40, 0x40, |
| 1226 | 0xf4, 0xac, 0xb9, 0x58, 0x4e, 0x2d, 0x1e, 0x2f, 0xc9, 0xd9, 0x43, 0x39, | 1225 | 0xda, 0x8d, 0xd3, 0x77, 0x54, 0xe3, 0x43, 0xdb, 0xd2, 0xa4, 0xfd, 0xa3, |
| 1227 | 0xd7, 0xb4, 0xc0, 0x5b, 0x7b, 0x8d, 0xcc, 0x55, 0x1b, 0xfd, 0xa7, 0x16, | 1226 | 0x37, 0x10, 0x47, 0xcc, 0xc5, 0xa8, 0x6f, 0x3f, 0x84, 0x33, 0xe4, 0xa4, |
| 1228 | 0x19, 0x17, 0xdb, 0xc9, 0xe9, 0x3e, 0x06, 0x45, 0x5f, 0x28, 0xfc, 0xff, | 1227 | 0x4e, 0xbe, 0xa4, 0x17, 0x46, 0xc7, 0x1f, 0xf6, 0x20, 0x14, 0x1f, 0x21, |
| 1229 | 0x1b, 0x6e, 0xbd, 0x9b, 0xda, 0xa6, 0xa6, 0xeb, 0x09, 0x9e, 0x67, 0x5a, | 1228 | 0x0e, 0xf8, 0x46, 0xbd, 0xe4, 0x56, 0x33, 0x9d, 0x75, 0xaf, 0x85, 0xc4, |
| 1230 | 0xa6, 0xe8, 0xa8, 0x65, 0xdd, 0x34, 0x62, 0xeb, 0xee, 0xea, 0x72, 0x7f, | 1229 | 0x96, 0x38, 0x79, 0xf9, 0xd7, 0xdc, 0x6e, 0xac, 0x25, 0x66, 0x1c, 0x34, |
| 1231 | 0xd9, 0x4e, 0xb9, 0x8d, 0x06, 0xde, 0x0b, 0xe1, 0x11, 0xe6, 0x71, 0x37, | 1230 | 0xea, 0x3b, 0x0e, 0xe1, 0x1f, 0x89, 0xb3, 0x52, 0x5e, 0x65, 0x7f, 0xd2, |
| 1232 | 0xb1, 0x9d, 0x03, 0x86, 0x70, 0xb1, 0x56, 0xa3, 0x4a, 0x91, 0xbc, 0x36, | 1231 | 0xa6, 0x9b, 0xfd, 0xc1, 0x4b, 0x2e, 0x70, 0x2f, 0xf9, 0xac, 0xdb, 0x63, |
| 1233 | 0xcc, 0xb8, 0xde, 0x80, 0x3e, 0x37, 0x16, 0x84, 0x59, 0x7f, 0x77, 0x5d, | 1232 | 0xfc, 0xc4, 0x23, 0xbc, 0x43, 0x78, 0xf7, 0xae, 0xbd, 0x0a, 0x5a, 0xd8, |
| 1234 | 0x91, 0x4f, 0xc0, 0x77, 0x2b, 0xcb, 0x76, 0xc6, 0x8b, 0xed, 0xf9, 0x74, | 1233 | 0xce, 0x4e, 0xda, 0xcc, 0xc3, 0x21, 0xb8, 0x5b, 0x6f, 0x24, 0xbf, 0x02, |
| 1235 | 0xc9, 0x15, 0xdb, 0xb1, 0x7f, 0xf8, 0xfc, 0xf3, 0xc8, 0x4d, 0xfa, 0xcc, | 1234 | 0x5d, 0x70, 0xba, 0x0f, 0x3b, 0x46, 0x10, 0xc9, 0x18, 0xe3, 0x33, 0x7c, |
| 1236 | 0xf9, 0x9a, 0x8a, 0x10, 0x4b, 0x2b, 0x50, 0x5d, 0x21, 0x58, 0x7f, 0xd1, | 1235 | 0xa8, 0x62, 0x3b, 0x12, 0x53, 0x0a, 0x26, 0xdb, 0x89, 0xdc, 0x77, 0x65, |
| 1237 | 0xd8, 0xb7, 0x8c, 0xff, 0x29, 0xef, 0x57, 0x63, 0xeb, 0xb8, 0x83, 0x2d, | 1236 | 0x3b, 0x65, 0x78, 0x72, 0xb2, 0x9d, 0x7d, 0x6c, 0xe7, 0xe6, 0xd9, 0x70, |
| 1238 | 0x6e, 0x9e, 0x50, 0x81, 0xde, 0x36, 0xc1, 0x43, 0xb1, 0xa5, 0x39, 0x92, | 1237 | 0x97, 0xdd, 0x2c, 0x73, 0xd5, 0x40, 0xff, 0x29, 0x43, 0xca, 0x89, 0x2b, |
| 1239 | 0x27, 0x25, 0x72, 0x90, 0x18, 0x27, 0xf6, 0xb3, 0xc6, 0xb5, 0x1f, 0x8f, | 1238 | 0xe4, 0xa3, 0x5f, 0x85, 0x62, 0xd4, 0x4a, 0xee, 0x72, 0xd6, 0xa9, 0xb7, |
| 1240 | 0x32, 0xd3, 0x7e, 0x36, 0xe3, 0xbb, 0xfa, 0xa1, 0x3b, 0x2a, 0x71, 0xe8, | 1239 | 0xb8, 0x61, 0xfc, 0x02, 0x69, 0x91, 0x72, 0x7e, 0xf6, 0x38, 0x1d, 0x35, |
| 1241 | 0x2e, 0x59, 0xff, 0xde, 0x10, 0xc7, 0xe1, 0x5b, 0xe8, 0x9b, 0xaf, 0x13, | 1240 | 0xaf, 0x9b, 0x2a, 0x6c, 0xdd, 0x5b, 0x9c, 0x97, 0x97, 0xfd, 0xe4, 0xfb, |
| 1242 | 0x5b, 0xb6, 0xb4, 0x30, 0x86, 0xb8, 0x98, 0xa5, 0xa0, 0x92, 0xb1, 0x7d, | 1241 | 0xa8, 0xe4, 0x3d, 0x3f, 0x76, 0x30, 0x07, 0x5d, 0xcc, 0x7e, 0x0e, 0x9b, |
| 1243 | 0xdb, 0x6e, 0xe6, 0xc0, 0x6a, 0x90, 0x6d, 0x5e, 0x8a, 0x5d, 0xd2, 0x7f, | 1242 | 0xc2, 0x23, 0xeb, 0xcd, 0x22, 0x45, 0x72, 0xf2, 0x00, 0x39, 0x45, 0x25, |
| 1244 | 0x83, 0xb9, 0xee, 0xa1, 0x2f, 0x56, 0x22, 0x20, 0x39, 0xc7, 0x4f, 0x4e, | 1243 | 0x36, 0x3b, 0x71, 0x28, 0xc0, 0xfa, 0x0d, 0x65, 0x39, 0x7e, 0x02, 0xcf, |
| 1245 | 0x51, 0xc6, 0x4d, 0x46, 0x59, 0x57, 0xa2, 0xa7, 0xb2, 0x9c, 0x06, 0xa4, | 1244 | 0x32, 0x96, 0x6d, 0x09, 0xe7, 0xfa, 0x23, 0x0e, 0x33, 0xcf, 0x6d, 0xc4, |
| 1246 | 0x77, 0x97, 0xeb, 0x2b, 0x78, 0x29, 0x1a, 0x2e, 0xad, 0x3f, 0x37, 0x60, | 1245 | 0xc1, 0xc1, 0x4b, 0xcf, 0x83, 0x8b, 0x8d, 0xa9, 0xf3, 0x35, 0x1e, 0xf4, |
| 1247 | 0x60, 0xfc, 0xd0, 0x31, 0x72, 0x0d, 0x27, 0xd1, 0x72, 0x68, 0x63, 0x98, | 1246 | 0xa0, 0x8d, 0xdf, 0x05, 0x12, 0x67, 0xae, 0x18, 0xfb, 0x96, 0x91, 0x47, |
| 1248 | 0x7d, 0x39, 0x13, 0x2f, 0xcf, 0xa9, 0xf8, 0xe6, 0x4c, 0x19, 0x62, 0xbb, | 1247 | 0xf8, 0x5d, 0x8c, 0xad, 0x23, 0x36, 0xb6, 0x38, 0x39, 0x4e, 0x01, 0xba, |
| 1249 | 0x50, 0x6a, 0x17, 0x62, 0x4b, 0x2d, 0x6d, 0x34, 0x1f, 0x45, 0xaa, 0xc6, | 1248 | 0x1b, 0x04, 0x0f, 0xc5, 0x96, 0xa6, 0x4b, 0xec, 0x88, 0xa4, 0x21, 0xf1, |
| 1250 | 0xac, 0x85, 0x3d, 0x4e, 0xdf, 0x9a, 0xa8, 0x80, 0xf7, 0x5a, 0x89, 0x7d, | 1249 | 0x55, 0xec, 0x27, 0xea, 0xd8, 0x8f, 0x4b, 0x99, 0x6a, 0x3f, 0x5d, 0x78, |
| 1251 | 0xc2, 0x77, 0xbc, 0x37, 0x9c, 0xb0, 0x2b, 0xf0, 0x69, 0xe3, 0x9c, 0x23, | 1250 | 0xcd, 0x38, 0xba, 0xa2, 0x10, 0x47, 0xef, 0x97, 0xb5, 0xfb, 0x8e, 0x30, |
| 1252 | 0xb8, 0x78, 0x4c, 0xc7, 0xe5, 0x15, 0xc4, 0xc4, 0x85, 0xf1, 0x68, 0x72, | 1251 | 0x8e, 0xdd, 0x46, 0xdf, 0x7c, 0x97, 0xd8, 0xb2, 0x65, 0x36, 0xe3, 0x97, |
| 1253 | 0x1d, 0xf3, 0xc2, 0x23, 0x6d, 0xde, 0x1b, 0xde, 0xca, 0xff, 0x9a, 0xdc, | 1252 | 0x83, 0x59, 0x0a, 0x0a, 0xc9, 0x2b, 0xb6, 0xed, 0x0d, 0xea, 0x05, 0xaa, |
| 1254 | 0xf2, 0xd2, 0xf1, 0x88, 0x3e, 0x70, 0x74, 0x45, 0x54, 0xda, 0x94, 0xf6, | 1253 | 0xc6, 0x3e, 0xaf, 0xc6, 0x2e, 0x91, 0xdf, 0x64, 0x9e, 0x7e, 0xf4, 0xb1, |
| 1255 | 0xca, 0x36, 0x2a, 0xed, 0x3b, 0x4e, 0x34, 0x1e, 0x70, 0xe7, 0xbc, 0x3c, | 1254 | 0x42, 0xf8, 0x24, 0x5f, 0x7a, 0xfb, 0x0c, 0xdb, 0x58, 0x6c, 0xe6, 0x75, |
| 1256 | 0x86, 0x37, 0xf4, 0xf2, 0x18, 0x02, 0x8c, 0xa7, 0x49, 0x72, 0x57, 0xe1, | 1255 | 0xe5, 0xe8, 0x69, 0xb2, 0x9d, 0x4a, 0x24, 0xf7, 0xe6, 0xeb, 0x2b, 0x38, |
| 1257 | 0xd5, 0x7e, 0xe6, 0x91, 0x5e, 0xf2, 0xf1, 0x6e, 0x08, 0xdf, 0x3b, 0x4a, | 1256 | 0x15, 0x0a, 0x4c, 0xae, 0x9d, 0x57, 0xa2, 0x77, 0xe4, 0xe8, 0x49, 0xf2, |
| 1258 | 0x7e, 0xf2, 0xa4, 0x0d, 0xbc, 0x93, 0x75, 0xb0, 0x2c, 0x3e, 0x8b, 0xf8, | 1257 | 0x1c, 0xc6, 0xa9, 0xa3, 0x9d, 0x01, 0xca, 0x72, 0x3e, 0x9c, 0x9f, 0x53, |
| 1259 | 0xd2, 0x4f, 0xd9, 0xb2, 0xa6, 0x76, 0x50, 0x19, 0x67, 0xae, 0x79, 0xdc, | 1258 | 0xf1, 0xcd, 0xa9, 0x6d, 0x88, 0xed, 0x42, 0x29, 0xab, 0xc5, 0x96, 0x32, |
| 1260 | 0x5b, 0x95, 0x54, 0x99, 0x5b, 0x1e, 0xc8, 0x47, 0xc3, 0x87, 0x98, 0x67, | 1259 | 0xda, 0x68, 0x26, 0x84, 0x78, 0x49, 0xb4, 0x0c, 0x89, 0x11, 0xfa, 0xd6, |
| 1261 | 0xfa, 0x99, 0xeb, 0x72, 0x06, 0x94, 0x27, 0x99, 0x67, 0xee, 0x2b, 0xe5, | 1260 | 0x68, 0x01, 0xdc, 0xf3, 0x24, 0xee, 0x0a, 0xd7, 0x72, 0xdf, 0x72, 0x3a, |
| 1262 | 0x99, 0x07, 0xf2, 0x01, 0xe4, 0xb3, 0xc4, 0xc6, 0x38, 0xf3, 0x5b, 0x37, | 1261 | 0x51, 0x80, 0x07, 0xcc, 0x8b, 0xb6, 0xe0, 0xe2, 0x49, 0x03, 0xd7, 0x15, |
| 1263 | 0x4f, 0x0f, 0x60, 0x32, 0xab, 0x32, 0x1f, 0x7f, 0xdf, 0x99, 0xaa, 0x77, | 1262 | 0x10, 0x13, 0x6b, 0xc3, 0xa1, 0xd8, 0x3a, 0xe6, 0xb4, 0xc7, 0x1b, 0xdc, |
| 1264 | 0xf7, 0x0b, 0xf0, 0x75, 0xbb, 0x01, 0x07, 0x87, 0x9b, 0x70, 0x36, 0x3f, | 1263 | 0xb7, 0x7c, 0x90, 0xf9, 0x3d, 0x79, 0xf1, 0xd5, 0xe3, 0x11, 0x7d, 0xe0, |
| 1265 | 0x45, 0xbb, 0xb8, 0x0c, 0xd3, 0xa3, 0xb5, 0x98, 0x18, 0x7e, 0x95, 0x9f, | 1264 | 0xc4, 0xd2, 0x90, 0xf4, 0x29, 0xfd, 0xe5, 0x6d, 0x54, 0xfa, 0xb7, 0xed, |
| 1266 | 0xdb, 0xf0, 0xfe, 0xa8, 0x9b, 0xe3, 0x12, 0x0f, 0xa5, 0x7f, 0x07, 0x95, | 1265 | 0x50, 0xd8, 0xe7, 0xcc, 0x79, 0x7e, 0x0c, 0xef, 0x19, 0xf9, 0x31, 0xf8, |
| 1267 | 0x43, 0x6e, 0x8e, 0x6b, 0x25, 0x99, 0xdb, 0x26, 0xfa, 0x4b, 0xb9, 0xed, | 1266 | 0x9c, 0xf8, 0xcd, 0x1c, 0x98, 0x98, 0x23, 0x79, 0xc1, 0x11, 0xe5, 0xa8, |
| 1268 | 0x14, 0x73, 0xdb, 0x23, 0x6c, 0xf3, 0x85, 0x52, 0x9b, 0xcf, 0xb9, 0xff, | 1267 | 0x93, 0x03, 0x5b, 0x31, 0xe6, 0xbe, 0x91, 0x9e, 0xc9, 0xdc, 0x77, 0x9c, |
| 1269 | 0xa5, 0x2f, 0x52, 0x77, 0x66, 0xbd, 0x44, 0x52, 0xd6, 0xa6, 0xc7, 0xed, | 1268 | 0x3c, 0xf7, 0x38, 0x79, 0xee, 0xcb, 0x93, 0xb9, 0xef, 0x8b, 0x19, 0xa9, |
| 1270 | 0x68, 0xac, 0x5c, 0xf7, 0x05, 0xd6, 0x3b, 0x72, 0xbe, 0xde, 0x6a, 0x0c, | 1269 | 0x33, 0xb5, 0x7c, 0x24, 0x26, 0x6b, 0xd6, 0x23, 0x89, 0x50, 0x5d, 0xbe, |
| 1271 | 0x64, 0xd6, 0x90, 0xe7, 0xcb, 0xda, 0xca, 0x7b, 0x6b, 0x6c, 0xea, 0xf2, | 1270 | 0xce, 0xcb, 0x2c, 0x7f, 0xfc, 0x52, 0xf9, 0xd5, 0xcc, 0x57, 0x57, 0x61, |
| 1272 | 0xcb, 0xd1, 0xa9, 0xee, 0x59, 0xa8, 0xc3, 0xfa, 0xb8, 0x70, 0xa2, 0xb7, | 1271 | 0x5b, 0xaa, 0x04, 0x0f, 0x6a, 0x4e, 0x6e, 0xe9, 0x2d, 0x8c, 0x9e, 0xb8, |
| 1273 | 0xc8, 0x89, 0x22, 0x89, 0x95, 0x8c, 0x0f, 0x9e, 0x68, 0x84, 0x58, 0x0f, | 1272 | 0xef, 0x7d, 0x63, 0xbc, 0xce, 0x45, 0x1c, 0x1a, 0xe1, 0xe0, 0x5b, 0x12, |
| 1274 | 0x44, 0x27, 0x98, 0x03, 0xe4, 0xeb, 0x70, 0x37, 0x73, 0x31, 0xb5, 0x7e, | 1273 | 0x0a, 0xfd, 0xce, 0x83, 0x1e, 0xad, 0x1c, 0x6b, 0xcd, 0x7f, 0xb2, 0x1f, |
| 1275 | 0x75, 0x69, 0x0f, 0xab, 0x94, 0xe3, 0x78, 0xd6, 0xa0, 0x6f, 0x52, 0xe4, | 1274 | 0x5c, 0x25, 0xcf, 0xf2, 0x7b, 0x14, 0x52, 0xfe, 0x35, 0x96, 0x0f, 0x9a, |
| 1276 | 0xad, 0x26, 0xbf, 0xae, 0xc1, 0x2d, 0xc5, 0x75, 0x0b, 0xbf, 0x9f, 0xb2, | 1275 | 0x23, 0x93, 0xb9, 0xe0, 0xd1, 0x04, 0xfa, 0x24, 0xcf, 0x5a, 0xd3, 0x1c, |
| 1277 | 0xfd, 0xd1, 0xa9, 0x18, 0x5d, 0xc6, 0x38, 0xc0, 0x1b, 0xcf, 0xd9, 0x0a, | 1276 | 0xd2, 0xbb, 0x9d, 0x75, 0x63, 0x1d, 0xeb, 0x32, 0x3a, 0xd6, 0x53, 0x9e, |
| 1278 | 0x96, 0xe9, 0x3e, 0xac, 0x0b, 0xd6, 0x61, 0x99, 0xf1, 0xef, 0xce, 0x2d, | 1277 | 0xb4, 0x7b, 0x32, 0x47, 0xca, 0xc5, 0x62, 0x4b, 0x78, 0xe6, 0x22, 0x96, |
| 1279 | 0xab, 0xe5, 0xd9, 0x79, 0x1e, 0xe1, 0xaf, 0x64, 0xbb, 0x6f, 0x92, 0x53, | 1278 | 0xdb, 0x3c, 0x89, 0x33, 0x2d, 0x97, 0x78, 0xae, 0x6d, 0xf7, 0x9b, 0x79, |
| 1280 | 0x8f, 0xf3, 0xcb, 0x54, 0xbe, 0x78, 0xdf, 0xca, 0x53, 0x36, 0xe5, 0x6e, | 1279 | 0xae, 0xcb, 0x58, 0x50, 0x29, 0xb9, 0x35, 0x68, 0x17, 0x15, 0x48, 0xfb, |
| 1281 | 0xa3, 0xdc, 0x7b, 0x83, 0x6e, 0xbe, 0x5b, 0x2a, 0x37, 0x15, 0xf3, 0x10, | 1280 | 0x65, 0x4f, 0x66, 0xea, 0x18, 0x11, 0x2b, 0x8c, 0x86, 0xf4, 0xd9, 0xea, |
| 1282 | 0xd7, 0xa5, 0x6c, 0x27, 0xe5, 0xde, 0x4d, 0xb9, 0xfd, 0x41, 0xe9, 0xdf, | 1281 | 0x54, 0xec, 0x92, 0xb1, 0x0a, 0x6e, 0x59, 0x8e, 0x7e, 0x8e, 0x5d, 0x1a, |
| 1283 | 0xbf, 0x3b, 0xf7, 0xae, 0x96, 0x67, 0xe5, 0x7d, 0x13, 0x29, 0xff, 0x9e, | 1282 | 0x6f, 0x7d, 0xa1, 0x60, 0xd6, 0xc1, 0x44, 0x77, 0x01, 0x6d, 0x4b, 0x2d, |
| 1284 | 0xc8, 0x35, 0xc6, 0x4b, 0x6d, 0x1d, 0xb2, 0x91, 0x95, 0xdc, 0x6f, 0x6d, | 1283 | 0x10, 0x7b, 0x40, 0xee, 0x1e, 0xb2, 0xb6, 0xbd, 0xfd, 0x0a, 0xdd, 0x15, |
| 1285 | 0x47, 0x54, 0xeb, 0x75, 0xd7, 0xb2, 0x35, 0xac, 0xcb, 0x6b, 0xb8, 0x87, | 1284 | 0xc4, 0x98, 0x0a, 0xe0, 0xe9, 0x44, 0x28, 0x76, 0x16, 0x96, 0x72, 0x32, |
| 1286 | 0xba, 0xcb, 0x79, 0xcb, 0x63, 0x72, 0xfb, 0x64, 0x09, 0x77, 0x5e, 0xce, | 1285 | 0xe3, 0xa6, 0xad, 0x4b, 0xbb, 0x5b, 0xd8, 0x5e, 0x8f, 0x72, 0xe2, 0x52, |
| 1287 | 0x72, 0x7d, 0x25, 0xdc, 0xee, 0xcc, 0x8b, 0x0d, 0xcd, 0xdc, 0x4f, 0x6a, | 1286 | 0x9b, 0x17, 0x2e, 0x6e, 0x76, 0xd6, 0x71, 0xf3, 0xbe, 0xe2, 0xc5, 0x43, |
| 1288 | 0x2a, 0xf9, 0xb3, 0x17, 0x4f, 0xdb, 0x1f, 0x9c, 0x1b, 0xcc, 0x48, 0x3c, | 1287 | 0x7d, 0xf9, 0xbd, 0xc6, 0x18, 0xde, 0x33, 0x05, 0x17, 0xbd, 0xe4, 0x3d, |
| 1289 | 0x93, 0xf5, 0x10, 0x0d, 0xd9, 0xfc, 0xe5, 0x68, 0x1e, 0x0a, 0x62, 0xad, | 1288 | 0xcc, 0xd2, 0x13, 0xdb, 0x90, 0xf3, 0x4b, 0xf9, 0xe4, 0xe7, 0xfd, 0xa0, |
| 1290 | 0x31, 0x9b, 0xbe, 0xfe, 0xa5, 0xf3, 0x36, 0x75, 0x80, 0xed, 0xc0, 0xe7, | 1289 | 0x5b, 0x30, 0xec, 0x27, 0xb3, 0x63, 0x93, 0x6b, 0x2e, 0x7f, 0xac, 0x4c, |
| 1291 | 0x8a, 0x57, 0x9e, 0xce, 0xb7, 0x06, 0x1b, 0x70, 0xe9, 0x1e, 0xd2, 0xfc, | 1290 | 0x1e, 0xdb, 0x2f, 0x5c, 0xec, 0x4b, 0x55, 0x4f, 0xc9, 0xb3, 0x69, 0x5f, |
| 1292 | 0x64, 0x8d, 0x19, 0xed, 0xfe, 0x0e, 0xe7, 0xae, 0xca, 0xe5, 0xd0, 0x5b, | 1291 | 0x03, 0xc1, 0x1e, 0x0b, 0x95, 0x6c, 0xc3, 0x8d, 0xbf, 0x65, 0xfc, 0x76, |
| 1293 | 0x94, 0x1c, 0xe7, 0xef, 0xa9, 0xd2, 0xfc, 0x3d, 0x99, 0xbf, 0xae, 0xb2, | 1292 | 0x0f, 0x1c, 0xbd, 0x41, 0x52, 0x32, 0xcf, 0xa1, 0x18, 0x36, 0x37, 0x7b, |
| 1294 | 0x88, 0x45, 0x97, 0xa3, 0x65, 0x48, 0xfe, 0x07, 0xf1, 0x46, 0xc7, 0xc7, | 1293 | 0xe0, 0x1a, 0xaa, 0x2e, 0xcc, 0xad, 0xf3, 0x91, 0x3c, 0x3b, 0xdf, 0x8a, |
| 1295 | 0x79, 0xef, 0x72, 0x2c, 0x1c, 0xf9, 0x54, 0x25, 0xb9, 0xb5, 0x51, 0xcc, | 1294 | 0x83, 0xd3, 0x6a, 0x56, 0xf2, 0x6a, 0xd2, 0x88, 0x43, 0xa2, 0xd7, 0x4a, |
| 1296 | 0xc1, 0x2f, 0xcd, 0x33, 0x22, 0xfd, 0x16, 0x16, 0xb0, 0x5c, 0x13, 0x75, | 1295 | 0x7e, 0x8b, 0x5e, 0xfc, 0xfc, 0x16, 0x1d, 0x55, 0xf1, 0xbb, 0x1c, 0xb1, |
| 1297 | 0x26, 0x18, 0x28, 0xfd, 0x7a, 0xe4, 0x7c, 0xbf, 0xbe, 0xcc, 0x7e, 0xa5, | 1296 | 0x2a, 0xd9, 0xf3, 0x6a, 0x47, 0x82, 0x98, 0x55, 0x12, 0xed, 0xc4, 0xd7, |
| 1298 | 0x7c, 0xb2, 0xd6, 0x2a, 0xfd, 0x52, 0x92, 0xb5, 0x66, 0x13, 0xde, 0x1f, | 1297 | 0x7b, 0x6d, 0xbb, 0x87, 0x7e, 0x59, 0xc4, 0x18, 0xff, 0x48, 0xa8, 0x3e, |
| 1299 | 0x40, 0x30, 0x68, 0x46, 0x53, 0x2f, 0xd3, 0xde, 0x27, 0xd8, 0xd7, 0x7a, | 1298 | 0x32, 0x47, 0x29, 0x20, 0xdf, 0x69, 0x47, 0xcf, 0x48, 0x41, 0xbc, 0x3c, |
| 1300 | 0xf4, 0x2b, 0x79, 0x77, 0xaf, 0xea, 0x20, 0xcb, 0xcc, 0x8c, 0xa3, 0xd2, | 1299 | 0x5a, 0xc5, 0x98, 0xae, 0xe1, 0x93, 0xb9, 0x6d, 0xc8, 0x8e, 0x5e, 0xbd, |
| 1301 | 0x4f, 0xaf, 0xe4, 0x59, 0x3e, 0xd9, 0x67, 0xf2, 0xe9, 0x22, 0xff, 0x6d, | 1300 | 0x57, 0x36, 0x75, 0x9f, 0x2c, 0xbf, 0x3f, 0x26, 0xe3, 0x11, 0xb9, 0x45, |
| 1302 | 0x72, 0xc5, 0x3e, 0xca, 0x4f, 0x72, 0xfe, 0xfc, 0x6c, 0x03, 0x56, 0xb5, | 1301 | 0xfe, 0x0b, 0x17, 0xb7, 0xa6, 0x44, 0x36, 0x0f, 0x0e, 0xf4, 0x89, 0xbc, |
| 1303 | 0xd9, 0xed, 0x72, 0x55, 0x2f, 0xfd, 0x6e, 0x19, 0x6d, 0xea, 0xc9, 0x9c, | 1302 | 0x36, 0x3a, 0xcc, 0x5b, 0x29, 0x27, 0x91, 0xbe, 0x72, 0xea, 0xfc, 0xe6, |
| 1304 | 0x82, 0x51, 0x2a, 0xfd, 0x68, 0x56, 0xd6, 0x89, 0xc3, 0x38, 0x90, 0xf3, | 1303 | 0xdb, 0x91, 0x75, 0xf0, 0x4e, 0x65, 0x98, 0xf3, 0x65, 0xb9, 0x0b, 0xc5, |
| 1305 | 0xe1, 0x85, 0xec, 0x3c, 0x8c, 0xe7, 0x2a, 0xf0, 0x5c, 0xf6, 0x32, 0xec, | 1304 | 0xbf, 0x34, 0xe6, 0x15, 0xca, 0x73, 0x19, 0x69, 0xa3, 0x45, 0x19, 0x49, |
| 1306 | 0xcb, 0x11, 0xfd, 0xb2, 0x97, 0x63, 0x24, 0xe7, 0xc7, 0x4f, 0xb2, 0xd4, | 1305 | 0x4f, 0xad, 0xd3, 0xa9, 0x1c, 0xca, 0x3c, 0x5c, 0x28, 0x9c, 0xe3, 0xb2, |
| 1307 | 0x53, 0xae, 0x0a, 0xff, 0x9c, 0xfd, 0x13, 0x7c, 0x3d, 0x57, 0x8d, 0xd7, | 1306 | 0x1e, 0xf3, 0x32, 0x90, 0xdc, 0xd2, 0x5e, 0x2a, 0x92, 0xa2, 0x7f, 0xd1, |
| 1308 | 0xb2, 0x57, 0xe0, 0x60, 0xae, 0x06, 0xaf, 0x64, 0xc9, 0x27, 0x73, 0x01, | 1307 | 0x8f, 0x0e, 0x77, 0x96, 0xbf, 0xb3, 0x5f, 0xd6, 0xe7, 0xd5, 0x3e, 0x36, |
| 1309 | 0xbc, 0x9c, 0xd5, 0x50, 0xc8, 0xcd, 0xc2, 0x4b, 0xd9, 0x08, 0x26, 0x72, | 1308 | 0xf7, 0x0a, 0x9f, 0x3c, 0x4e, 0x9f, 0x1c, 0xff, 0xa3, 0x3e, 0x39, 0xef, |
| 1310 | 0xb5, 0xf8, 0x6e, 0x76, 0x01, 0xf2, 0xb9, 0x3a, 0x7c, 0x27, 0xdb, 0x8c, | 1309 | 0x4f, 0x94, 0xcf, 0xaf, 0xb7, 0xda, 0xf6, 0x6e, 0x53, 0xd6, 0xe8, 0x65, |
| 1311 | 0x2f, 0xe7, 0x82, 0x78, 0x31, 0xab, 0xe3, 0xa9, 0x5c, 0x3d, 0x8e, 0x65, | 1310 | 0xdd, 0xb5, 0xe1, 0x4b, 0xf6, 0x5e, 0x65, 0x3d, 0x7e, 0x36, 0xd2, 0x95, |
| 1312 | 0xa3, 0x6c, 0x37, 0x84, 0xa3, 0xc3, 0x31, 0x1c, 0x18, 0x6d, 0xc4, 0x0b, | 1311 | 0xc1, 0xb4, 0xac, 0xbf, 0x0c, 0xa4, 0x80, 0x45, 0x49, 0xe9, 0x27, 0x46, |
| 1313 | 0xc3, 0x8b, 0x30, 0x3e, 0x1a, 0xc6, 0x73, 0xc3, 0x6d, 0xd8, 0x37, 0xfa, | 1312 | 0x7d, 0xa9, 0xb7, 0x32, 0x1a, 0x31, 0x43, 0xe8, 0xc2, 0x19, 0xd3, 0xd8, |
| 1314 | 0x6f, 0x15, 0xa2, 0x9f, 0x23, 0xf6, 0xff, 0x38, 0xaf, 0xc7, 0x6d, 0x1f, | 1313 | 0xf7, 0x20, 0x79, 0x77, 0x37, 0x73, 0xd2, 0x83, 0xe6, 0x72, 0xfa, 0x7b, |
| 1315 | 0x31, 0xdf, 0xaf, 0xda, 0xa2, 0x37, 0xbf, 0x55, 0xcf, 0x39, 0x7a, 0x3a, | 1314 | 0x31, 0x36, 0x34, 0xd0, 0x18, 0x57, 0x98, 0xf4, 0x7b, 0xab, 0x9d, 0xae, |
| 1316 | 0xef, 0xce, 0x3b, 0xf4, 0x21, 0x77, 0x7f, 0x06, 0x7d, 0xc6, 0x65, 0xcc, | 1315 | 0xe8, 0xf5, 0x45, 0xdb, 0x57, 0x25, 0x42, 0xc1, 0xb6, 0x8d, 0xc4, 0xf3, |
| 1317 | 0xd9, 0xfa, 0x25, 0x7e, 0xd0, 0x16, 0x0e, 0x2a, 0xdb, 0x5d, 0x1c, 0xa9, | 1316 | 0xa5, 0xbd, 0x5e, 0xe8, 0x8a, 0xc3, 0x07, 0x5a, 0x7f, 0xa1, 0x0a, 0x46, |
| 1318 | 0x4d, 0xce, 0xa2, 0x2e, 0x39, 0xec, 0x60, 0x0d, 0x7d, 0x32, 0x4b, 0x7f, | 1317 | 0x9d, 0x29, 0xc8, 0xe5, 0xcd, 0xb2, 0xe6, 0x22, 0xfd, 0x2c, 0x67, 0x5e, |
| 1319 | 0xb6, 0x38, 0xaf, 0x76, 0xfe, 0xa0, 0xb2, 0x83, 0x39, 0xe2, 0x95, 0x43, | 1318 | 0x22, 0x75, 0x75, 0xb4, 0xd7, 0x2a, 0x48, 0xd5, 0x06, 0xfb, 0xe0, 0xb2, |
| 1320 | 0x96, 0x53, 0xed, 0xe2, 0x69, 0x34, 0xb9, 0x88, 0x3e, 0x17, 0x1b, 0x11, | 1319 | 0xed, 0xdf, 0x91, 0x17, 0x8e, 0x3b, 0xb9, 0x7c, 0x7d, 0xdd, 0x6e, 0xf5, |
| 1321 | 0x7d, 0xde, 0x59, 0x21, 0xfa, 0xac, 0xd0, 0x3f, 0xcc, 0x4e, 0xca, 0x7a, | 1320 | 0x7f, 0x10, 0x0b, 0x9d, 0x36, 0x34, 0x59, 0xf3, 0x7f, 0xe1, 0x4f, 0xae, |
| 1322 | 0x0f, 0x94, 0xec, 0xe1, 0xfb, 0x95, 0xc5, 0xbc, 0xaa, 0x3c, 0xef, 0x8e, | 1321 | 0x7b, 0x9b, 0x90, 0xbd, 0x89, 0x42, 0x63, 0x89, 0x32, 0xe2, 0xcf, 0x71, |
| 1323 | 0x33, 0x68, 0x94, 0xe7, 0x9e, 0xfc, 0xaf, 0x41, 0xd6, 0xa4, 0xc0, 0x58, | 1322 | 0x8a, 0xdb, 0x06, 0x3e, 0xbf, 0xf8, 0x64, 0x4a, 0xec, 0x1c, 0x55, 0x01, |
| 1324 | 0x50, 0x8f, 0x5c, 0x48, 0xf2, 0xf5, 0x99, 0x98, 0x81, 0x64, 0xa5, 0x19, | 1323 | 0x63, 0x06, 0x66, 0x1f, 0x28, 0xc5, 0xb2, 0x01, 0xe1, 0x0a, 0x3e, 0xab, |
| 1325 | 0xd5, 0x5a, 0xd4, 0x99, 0x7c, 0x45, 0xb0, 0x43, 0xe4, 0x5b, 0x2e, 0xee, | 1324 | 0x30, 0x1a, 0xc0, 0x9c, 0x03, 0x95, 0x68, 0xd9, 0x23, 0xfb, 0x50, 0x76, |
| 1326 | 0x1c, 0x3e, 0x8f, 0x1f, 0x67, 0x2b, 0x85, 0xa7, 0xec, 0xb7, 0xa5, 0x6f, | 1325 | 0x57, 0x45, 0x74, 0x35, 0xdc, 0x87, 0x34, 0x3c, 0xb0, 0xc7, 0xb6, 0x67, |
| 1327 | 0x50, 0x2b, 0xa4, 0xcf, 0x28, 0xde, 0x43, 0xa1, 0xac, 0xaf, 0x99, 0x76, | 1326 | 0xcd, 0x23, 0xb5, 0x63, 0x4c, 0x7c, 0xb7, 0x69, 0x15, 0x3c, 0xd9, 0x6a, |
| 1328 | 0xa7, 0x52, 0xb7, 0x62, 0x7b, 0x5e, 0xfa, 0xc2, 0x72, 0x89, 0x7b, 0xec, | 1327 | 0x2c, 0x49, 0xd6, 0x39, 0x6b, 0xad, 0x1f, 0x26, 0x5a, 0x5b, 0xce, 0xf5, |
| 1329 | 0x47, 0x13, 0x5e, 0xb0, 0x8b, 0x7b, 0x33, 0xe3, 0x79, 0xd1, 0xb7, 0x86, | 1328 | 0xd6, 0x6e, 0xa8, 0x55, 0x82, 0xe6, 0x29, 0x25, 0x82, 0x82, 0x6c, 0x04, |
| 1330 | 0xad, 0xe4, 0x5e, 0x87, 0x87, 0x15, 0xea, 0xee, 0x2f, 0x51, 0xdc, 0x3f, | 1329 | 0xae, 0xa4, 0x82, 0x57, 0x0d, 0x74, 0x95, 0x45, 0xa3, 0x70, 0x65, 0xa3, |
| 1331 | 0xf2, 0xd2, 0x57, 0xd7, 0xb2, 0x3c, 0x63, 0x7c, 0x61, 0xda, 0xdd, 0x1b, | 1330 | 0xf0, 0x25, 0xdd, 0x68, 0xa0, 0xbe, 0x4b, 0x38, 0xf7, 0xd3, 0x92, 0xd5, |
| 1332 | 0xae, 0x73, 0xf3, 0xee, 0x30, 0x0a, 0x03, 0x1f, 0x9c, 0xdb, 0x96, 0xf9, | 1331 | 0x98, 0x96, 0xbd, 0x0e, 0xfa, 0x81, 0x06, 0xfa, 0x48, 0x25, 0xfb, 0xf3, |
| 1333 | 0xe5, 0xb9, 0x3d, 0x99, 0x68, 0x4a, 0xf6, 0x67, 0xf2, 0x13, 0x3e, 0xe4, | 1332 | 0xa3, 0x25, 0xd9, 0x86, 0x69, 0x46, 0x33, 0x6d, 0xa3, 0x19, 0x33, 0x93, |
| 1334 | 0xf6, 0x06, 0xf0, 0xd4, 0x84, 0x1f, 0x35, 0x69, 0xc9, 0xf3, 0x83, 0x78, | 1333 | 0x7e, 0x2c, 0xe0, 0x7c, 0x2c, 0x4e, 0xb6, 0xb2, 0x1f, 0x1f, 0xda, 0x07, |
| 1335 | 0x6a, 0xff, 0xa1, 0x15, 0x35, 0x68, 0xe0, 0xff, 0x10, 0xaf, 0x46, 0x5e, | 1334 | 0xee, 0x44, 0x60, 0xc8, 0x8b, 0xf2, 0x01, 0x1d, 0x1f, 0xce, 0xf5, 0xa2, |
| 1336 | 0x01, 0x1c, 0x1b, 0xf5, 0xe3, 0x2d, 0x5b, 0x7c, 0x58, 0xfc, 0xa3, 0x8d, | 1335 | 0x68, 0x28, 0x80, 0xd2, 0xa4, 0xec, 0x8d, 0x21, 0xb6, 0xb1, 0x39, 0x00, |
| 1337 | 0xd8, 0x1f, 0x60, 0xbc, 0x55, 0x19, 0x47, 0x9a, 0x70, 0x38, 0x1f, 0xc4, | 1336 | 0x5f, 0x16, 0x28, 0x19, 0xb0, 0xf1, 0xad, 0xf0, 0xa8, 0x7a, 0x77, 0xa5, |
| 1338 | 0xf2, 0x6c, 0x3d, 0x9e, 0xcb, 0x25, 0xf1, 0x44, 0xa6, 0x1e, 0x67, 0x1f, | 1337 | 0x65, 0x4f, 0x73, 0x62, 0x41, 0x6b, 0xfb, 0x16, 0xe3, 0xce, 0x49, 0xbf, |
| 1339 | 0xf3, 0x63, 0xde, 0x3e, 0xf1, 0x87, 0x06, 0x9c, 0x1e, 0xfc, 0x04, 0x0a, | 1338 | 0x77, 0x33, 0xcf, 0x52, 0xc8, 0xd7, 0x25, 0x06, 0xb6, 0xb6, 0x1f, 0x4c, |
| 1340 | 0x7b, 0x93, 0xb0, 0x33, 0xb3, 0xb1, 0x63, 0xb0, 0x01, 0xdf, 0x61, 0x99, | 1339 | 0xc8, 0xda, 0x46, 0x88, 0x7e, 0xeb, 0x81, 0x77, 0xa8, 0x53, 0xe9, 0xa3, |
| 1341 | 0x7e, 0xea, 0xa9, 0x7a, 0xa7, 0x89, 0x17, 0x69, 0x43, 0x55, 0x3b, 0x6f, | 1340 | 0xed, 0xa0, 0x40, 0xf4, 0xaf, 0xd2, 0xbf, 0xa0, 0x95, 0xd2, 0xce, 0xb7, |
| 1342 | 0xa4, 0xec, 0x30, 0x7c, 0x03, 0x21, 0x1c, 0xc9, 0x7b, 0x85, 0xd7, 0x71, | 1341 | 0x66, 0x5a, 0x94, 0x64, 0xba, 0x53, 0xe9, 0xcd, 0x94, 0x78, 0x51, 0x2c, |
| 1343 | 0x1e, 0x7f, 0x5a, 0x9c, 0x17, 0x08, 0x6f, 0xbd, 0x98, 0x07, 0x1e, 0x3f, | 1342 | 0xf3, 0xf2, 0x15, 0x8c, 0x36, 0x3c, 0x69, 0xa7, 0x2b, 0x9c, 0xb9, 0xb5, |
| 1344 | 0xcf, 0x03, 0x81, 0x5c, 0x5e, 0xd6, 0x18, 0xdb, 0x3a, 0xfb, 0xec, 0x89, | 1343 | 0x3c, 0x90, 0x9c, 0xdb, 0x5a, 0x15, 0xae, 0x0d, 0x76, 0x56, 0xa8, 0xb2, |
| 1345 | 0xff, 0xcf, 0x6f, 0xfe, 0xf4, 0xdb, 0x15, 0x4b, 0x0c, 0x62, 0x9d, 0x8c, | 1344 | 0x9f, 0x42, 0x1c, 0x52, 0x72, 0x7d, 0x69, 0x46, 0x12, 0xcf, 0xfa, 0x65, |
| 1346 | 0x7f, 0xed, 0x83, 0xd5, 0xe6, 0x86, 0x2f, 0xae, 0x58, 0x52, 0x89, 0xfb, | 1345 | 0x7d, 0x55, 0xe6, 0xbf, 0xb5, 0x3d, 0xd1, 0x7b, 0xe1, 0xa2, 0xcc, 0xe9, |
| 1347 | 0xdd, 0xf9, 0xea, 0x81, 0xbd, 0xbb, 0x9b, 0xf1, 0xb5, 0xb5, 0x67, 0x40, | 1346 | 0xc7, 0xb4, 0xc3, 0xdb, 0x93, 0x9f, 0x5f, 0xdc, 0x97, 0x6a, 0x63, 0x9e, |
| 1348 | 0xb9, 0x02, 0xa9, 0xfa, 0x21, 0xde, 0x53, 0x4b, 0x3e, 0x07, 0x55, 0x6c, | 1347 | 0x66, 0xe2, 0x55, 0xfe, 0x5e, 0xc4, 0x71, 0xbf, 0x98, 0xf1, 0x61, 0x61, |
| 1349 | 0xad, 0x8e, 0xfa, 0x54, 0x0b, 0x1a, 0x4e, 0xd0, 0xc8, 0x6a, 0xd3, 0x11, | 1348 | 0xb2, 0xd9, 0xd9, 0x8b, 0x5b, 0x96, 0x8c, 0xe0, 0x15, 0x7e, 0xb7, 0x24, |
| 1350 | 0x4c, 0xd5, 0xcb, 0x38, 0x63, 0xcc, 0xb3, 0x3c, 0xb2, 0x77, 0x8d, 0x4f, | 1349 | 0x57, 0xe1, 0x18, 0xf3, 0xd4, 0x07, 0x92, 0x51, 0xbc, 0x9d, 0x09, 0xe0, |
| 1351 | 0x33, 0xc6, 0x9d, 0x5d, 0xac, 0x20, 0xf1, 0x67, 0xe2, 0x83, 0xb7, 0x96, | 1350 | 0x7e, 0xea, 0x6f, 0x06, 0xed, 0xf4, 0xae, 0xa4, 0x8e, 0x37, 0x32, 0xc0, |
| 1352 | 0xf6, 0x80, 0x65, 0x3f, 0x4c, 0xe6, 0xad, 0xac, 0xff, 0xbd, 0xb2, 0xee, | 1351 | 0xcf, 0xfa, 0x6c, 0x84, 0x1a, 0xbf, 0xa3, 0x3e, 0xed, 0xac, 0x8d, 0x35, |
| 1353 | 0xc9, 0x3f, 0xc1, 0x0a, 0x2f, 0x0e, 0xdb, 0x39, 0xe6, 0x08, 0x32, 0x07, | 1352 | 0xe3, 0x67, 0x09, 0x13, 0x6f, 0x24, 0x6a, 0xcc, 0x9b, 0xd5, 0xdf, 0x62, |
| 1354 | 0x32, 0xa6, 0xed, 0xac, 0x27, 0xe3, 0x92, 0xe7, 0xad, 0x89, 0xfa, 0x8f, | 1353 | 0xdc, 0x9d, 0xa0, 0x4d, 0x9d, 0x47, 0xbc, 0x52, 0xd6, 0xf1, 0x72, 0xf2, |
| 1355 | 0x1c, 0x97, 0x8c, 0x67, 0xad, 0x1f, 0xd5, 0x32, 0x86, 0xb2, 0x2e, 0xfa, | 1354 | 0x77, 0x8f, 0x79, 0x98, 0x63, 0x6d, 0xc0, 0x11, 0xbf, 0xb3, 0x2e, 0x71, |
| 1356 | 0x58, 0xf7, 0x51, 0xde, 0x93, 0x7a, 0x8e, 0xb3, 0xfd, 0xa2, 0x98, 0x55, | 1355 | 0x85, 0x5c, 0xb2, 0x36, 0xb1, 0x88, 0x72, 0x3d, 0x95, 0x22, 0x57, 0x34, |
| 1357 | 0x91, 0xac, 0x66, 0xdf, 0x9f, 0xb4, 0xa3, 0xc9, 0x77, 0x88, 0x8b, 0xc7, | 1356 | 0xaa, 0x29, 0x8f, 0x17, 0x0b, 0x07, 0xbc, 0xa8, 0xa4, 0x6d, 0x9c, 0x3e, |
| 1358 | 0xa8, 0xc3, 0x51, 0x5b, 0xec, 0x6f, 0x0b, 0xed, 0xae, 0x5f, 0x39, 0x7a, | 1357 | 0x10, 0xc5, 0xce, 0x54, 0x11, 0x5a, 0xfa, 0x03, 0x38, 0xc3, 0xeb, 0xad, |
| 1359 | 0xde, 0xf6, 0x80, 0x83, 0xb6, 0xcc, 0xaf, 0xf0, 0x29, 0x19, 0xaf, 0x86, | 1358 | 0xb4, 0xf1, 0x1f, 0xb1, 0x6f, 0xa3, 0x49, 0xc3, 0x80, 0x56, 0x84, 0x9e, |
| 1360 | 0xe9, 0x89, 0xa0, 0xcb, 0xc7, 0xdf, 0xb6, 0xc5, 0x26, 0x62, 0xcc, 0xcf, | 1359 | 0xba, 0x1f, 0x93, 0xef, 0xa9, 0xcc, 0x39, 0x98, 0x1b, 0x18, 0x25, 0xd8, |
| 1361 | 0xa6, 0xcf, 0xf5, 0x66, 0x0c, 0x1c, 0xe3, 0xdc, 0x9e, 0xb6, 0xab, 0x88, | 1360 | 0xc1, 0xb4, 0xbe, 0xb0, 0x39, 0x88, 0xfe, 0x3a, 0xda, 0x7a, 0x15, 0xe3, |
| 1362 | 0x37, 0x1d, 0x90, 0xbd, 0xce, 0xf7, 0xed, 0x04, 0x5e, 0x22, 0x66, 0xbd, | 1361 | 0x87, 0x11, 0x43, 0x39, 0x31, 0x26, 0xc5, 0x5c, 0xb1, 0x30, 0x6a, 0x51, |
| 1363 | 0x47, 0x5b, 0xfb, 0x2e, 0x31, 0xec, 0x5d, 0x5b, 0xc7, 0x77, 0x68, 0x7b, | 1362 | 0x06, 0x15, 0xfb, 0x34, 0x55, 0xd6, 0xe4, 0xf8, 0x2c, 0x80, 0x63, 0x09, |
| 1364 | 0xef, 0xd8, 0x31, 0xbc, 0x98, 0xaf, 0xc7, 0x51, 0xe2, 0xd0, 0x49, 0x7e, | 1363 | 0xd8, 0xc5, 0x51, 0xe3, 0xc2, 0x4e, 0x84, 0x4e, 0xbc, 0xcf, 0xb8, 0xfe, |
| 1365 | 0x5e, 0x9e, 0xf7, 0xc1, 0x0a, 0xc9, 0xbe, 0xda, 0x1e, 0x3f, 0x6a, 0x7b, | 1364 | 0xf7, 0x99, 0x12, 0x7c, 0xbf, 0x6f, 0x36, 0xfe, 0x36, 0x2d, 0xeb, 0xbd, |
| 1366 | 0xd9, 0xe7, 0x48, 0x97, 0x1c, 0x44, 0x79, 0x96, 0xe3, 0xd3, 0x94, 0x32, | 1365 | 0x3e, 0xac, 0x1f, 0x0c, 0xab, 0xb9, 0xb5, 0x4a, 0x1f, 0x1e, 0x1a, 0x84, |
| 1367 | 0x0f, 0x29, 0xe7, 0x04, 0x49, 0x64, 0x33, 0x33, 0xb1, 0x21, 0xd2, 0x9f, | 1366 | 0x35, 0x93, 0xf6, 0xf8, 0xf2, 0x70, 0x19, 0xd6, 0xf4, 0xbd, 0x60, 0x33, |
| 1368 | 0xa3, 0xdd, 0xfa, 0xd2, 0xe5, 0x38, 0xc0, 0xd8, 0x59, 0x10, 0xdb, 0xf6, | 1367 | 0x77, 0xa6, 0x5d, 0x7b, 0x71, 0x34, 0x2d, 0x32, 0x96, 0x53, 0xc6, 0x22, |
| 1369 | 0xc0, 0x33, 0x24, 0xf6, 0x7f, 0x0d, 0x75, 0x3d, 0x7d, 0x4e, 0xf6, 0xd2, | 1368 | 0x1c, 0xe3, 0x75, 0x0f, 0x6d, 0xbf, 0xb2, 0xf7, 0xdb, 0xf8, 0x2c, 0x55, |
| 1370 | 0x54, 0x7d, 0x8a, 0xfe, 0x5e, 0x85, 0xde, 0xdc, 0xe5, 0xa8, 0x19, 0x5a, | 1369 | 0x53, 0x77, 0xbf, 0xda, 0x8e, 0xe3, 0xce, 0x7e, 0x6c, 0x03, 0xde, 0xa2, |
| 1371 | 0x8a, 0xfb, 0xe3, 0xe2, 0xf7, 0x7e, 0xf4, 0xe7, 0x3c, 0xa8, 0x1c, 0x22, | 1370 | 0x1e, 0xcb, 0x77, 0xdb, 0xf6, 0x6f, 0xc2, 0x31, 0xfc, 0x2c, 0x73, 0x2d, |
| 1372 | 0x77, 0x61, 0xd9, 0xa9, 0x50, 0x31, 0x1e, 0xa9, 0x69, 0xc3, 0xf5, 0x83, | 1371 | 0x8a, 0x78, 0x6d, 0x86, 0x5b, 0xf0, 0x66, 0xa6, 0x1a, 0x65, 0xbd, 0xad, |
| 1373 | 0x05, 0x85, 0x0f, 0xce, 0xd9, 0x99, 0x43, 0xf3, 0x54, 0x4c, 0x9f, 0x4b, | 1372 | 0x78, 0x9d, 0x9c, 0xbf, 0x74, 0x77, 0x27, 0x4e, 0xb1, 0x7d, 0x5f, 0xbf, |
| 1374 | 0x67, 0x02, 0xe8, 0xa3, 0x4d, 0xab, 0x69, 0x05, 0x75, 0x7a, 0x88, 0xf9, | 1373 | 0x17, 0xaf, 0xa5, 0xbd, 0x78, 0xb5, 0xcf, 0xd0, 0xd6, 0x2a, 0x7f, 0xa7, |
| 1375 | 0x5f, 0x1b, 0x7a, 0xa9, 0x8b, 0xf9, 0xe9, 0x26, 0x3c, 0x31, 0xd1, 0x88, | 1374 | 0xc4, 0x2b, 0x73, 0xfd, 0x0c, 0xa4, 0x72, 0xfa, 0xdc, 0x3e, 0x56, 0x00, |
| 1376 | 0x79, 0xbb, 0x4c, 0x3c, 0x4e, 0xdb, 0x0f, 0xef, 0xba, 0x11, 0x7b, 0x58, | 1375 | 0xc1, 0xf2, 0x43, 0x7e, 0x59, 0xbf, 0x95, 0xf3, 0x31, 0xad, 0xed, 0x5a, |
| 1377 | 0xee, 0x15, 0x3e, 0x7b, 0x65, 0x7f, 0x03, 0xaf, 0x10, 0xaf, 0x46, 0x5e, | 1376 | 0xf2, 0x77, 0x17, 0x13, 0xd4, 0xe7, 0x9b, 0xa3, 0x01, 0xdc, 0x91, 0x14, |
| 1378 | 0xf5, 0x18, 0xd8, 0xab, 0x97, 0xce, 0x61, 0x78, 0xd0, 0x30, 0x24, 0xf8, | 1377 | 0xdd, 0x7e, 0x7e, 0x71, 0x17, 0xb1, 0xa3, 0x77, 0x34, 0x82, 0x13, 0x09, |
| 1379 | 0xa2, 0xe2, 0x8e, 0x76, 0x05, 0xc6, 0xd5, 0x6c, 0x73, 0xe1, 0x87, 0x61, | 1378 | 0x8f, 0xb3, 0xe7, 0xd8, 0x33, 0x2a, 0xfb, 0xb1, 0xdf, 0xe5, 0xdc, 0x00, |
| 1380 | 0x4d, 0xc3, 0x1f, 0xd0, 0xef, 0x1f, 0x38, 0x53, 0xe7, 0xed, 0xc7, 0x0f, | 1379 | 0x6b, 0x47, 0x73, 0x6d, 0x6d, 0x19, 0x2b, 0xa4, 0xee, 0x6e, 0xc7, 0xd3, |
| 1381 | 0x6f, 0xfa, 0xfb, 0xae, 0xfd, 0x2c, 0x28, 0x48, 0x3b, 0xef, 0x12, 0x33, | 1380 | 0x5a, 0x81, 0xc4, 0xdf, 0x9c, 0x8d, 0x1a, 0x41, 0xda, 0xee, 0x77, 0x9d, |
| 1382 | 0xc4, 0x86, 0x7e, 0x17, 0x9e, 0x95, 0xf5, 0xfe, 0xdb, 0x67, 0x2b, 0x70, | 1381 | 0xf5, 0xbd, 0x81, 0x54, 0xbd, 0x36, 0x0d, 0xf9, 0x79, 0xac, 0xc1, 0x4c, |
| 1383 | 0xde, 0xbe, 0x2e, 0x5a, 0x77, 0x47, 0x9e, 0x36, 0xb1, 0xc3, 0x3d, 0x3b, | 1382 | 0xe3, 0xf7, 0xf6, 0x0b, 0x7e, 0x59, 0x77, 0x15, 0xbe, 0xd8, 0xda, 0xbe, |
| 1384 | 0x22, 0xb9, 0x4e, 0xa4, 0x2b, 0x47, 0xfd, 0xf4, 0x33, 0x87, 0xb9, 0x87, | 1383 | 0x36, 0x21, 0xfd, 0xe8, 0xd8, 0x3c, 0x7a, 0xe1, 0x62, 0x3f, 0xf9, 0xfa, |
| 1385 | 0x38, 0xb1, 0x3d, 0x13, 0xb1, 0x2c, 0xb6, 0xe5, 0x23, 0x36, 0x3c, 0x30, | 1384 | 0x12, 0xda, 0xc8, 0xba, 0x90, 0x1f, 0x8b, 0x6b, 0xeb, 0x50, 0x9b, 0x95, |
| 1386 | 0xe8, 0x97, 0xf5, 0x6e, 0xcd, 0xa7, 0xcf, 0xc3, 0x3b, 0x39, 0xb1, 0xf9, | 1385 | 0x35, 0xdd, 0x08, 0x39, 0xab, 0x89, 0x8e, 0x50, 0xd4, 0xd9, 0xd7, 0x82, |
| 1387 | 0x2a, 0x1c, 0xce, 0x86, 0x71, 0xca, 0xfd, 0x5c, 0xcd, 0x58, 0xe3, 0xa0, | 1386 | 0x9a, 0xbf, 0xe7, 0xc5, 0xbb, 0x7f, 0xe0, 0x2b, 0xc0, 0xac, 0x81, 0x36, |
| 1388 | 0xd3, 0x98, 0x85, 0xbe, 0x60, 0x15, 0x06, 0x62, 0x37, 0x22, 0x77, 0x07, | 1387 | 0xf6, 0x6b, 0x63, 0x99, 0xf9, 0x0f, 0x76, 0xcb, 0x3d, 0xd2, 0x7f, 0x4d, |
| 1389 | 0x73, 0x6c, 0xfa, 0x58, 0xad, 0xee, 0x47, 0x3a, 0x28, 0xf9, 0x8b, 0x07, | 1388 | 0x59, 0xee, 0x19, 0x27, 0xbc, 0x58, 0x7e, 0x37, 0xd1, 0x97, 0x1a, 0x71, |
| 1390 | 0x99, 0xd8, 0xed, 0x38, 0x5e, 0xef, 0xc5, 0x3c, 0x59, 0x6f, 0xe1, 0xb3, | 1389 | 0xd8, 0x2f, 0x3c, 0x43, 0xfc, 0xa0, 0xb5, 0x3d, 0x4c, 0xfb, 0xd9, 0x41, |
| 1391 | 0x3d, 0x41, 0x28, 0xf4, 0xbd, 0xa4, 0x8f, 0xb8, 0x34, 0x6b, 0x00, 0x4e, | 1390 | 0x19, 0x56, 0xd0, 0x76, 0x96, 0x11, 0x17, 0xca, 0x8d, 0x0b, 0x17, 0x7b, |
| 1392 | 0xad, 0xa9, 0xcb, 0x1e, 0x4c, 0xcf, 0x56, 0xe2, 0x52, 0xcd, 0x44, 0x0d, | 1391 | 0x53, 0x26, 0xe6, 0x8c, 0xfa, 0x68, 0xcb, 0x45, 0xec, 0xaf, 0x19, 0xc6, |
| 1393 | 0xe3, 0x4e, 0x0b, 0xaa, 0xf7, 0xca, 0x5e, 0x40, 0x00, 0xeb, 0x86, 0xaf, | 1392 | 0x28, 0x71, 0x84, 0xf6, 0xbd, 0x60, 0xd4, 0x4f, 0x7b, 0xd6, 0x31, 0x7f, |
| 1394 | 0x95, 0xbd, 0x81, 0x98, 0xa6, 0x04, 0x70, 0xef, 0xb0, 0xc4, 0x8f, 0x35, | 1393 | 0x54, 0x7c, 0xdc, 0x40, 0x88, 0xb1, 0xac, 0x9d, 0x75, 0x22, 0xa3, 0x15, |
| 1395 | 0xa8, 0xd8, 0x5f, 0x8b, 0x2f, 0x66, 0xbd, 0xc4, 0x78, 0xe2, 0x0d, 0xcb, | 1394 | 0xb8, 0x79, 0xbf, 0x1b, 0x77, 0x26, 0xc3, 0xd4, 0x4f, 0x1d, 0x63, 0xdc, |
| 1396 | 0xed, 0xc9, 0xd4, 0xa1, 0xee, 0xb1, 0x67, 0x9d, 0x30, 0x75, 0x5c, 0xb7, | 1395 | 0x65, 0x7d, 0x6f, 0x1b, 0x9b, 0x85, 0x0a, 0xe3, 0x88, 0xfd, 0x9c, 0x83, |
| 1397 | 0x57, 0xb0, 0x88, 0xb6, 0x9b, 0xf9, 0x3c, 0x0a, 0x76, 0x33, 0xe5, 0xf6, | 1396 | 0x61, 0x85, 0x8e, 0x9e, 0x02, 0xec, 0x37, 0x90, 0x82, 0x55, 0xce, 0xf8, |
| 1398 | 0x70, 0x7c, 0x21, 0xbc, 0x4b, 0xec, 0xaa, 0x99, 0x08, 0xe3, 0x9d, 0xdd, | 1397 | 0x72, 0x61, 0xf4, 0xb9, 0x2f, 0xe2, 0xf7, 0x8a, 0x2e, 0xa7, 0x8e, 0x47, |
| 1399 | 0x92, 0xab, 0x24, 0xe1, 0x9d, 0xb8, 0x0c, 0x6f, 0xf2, 0xf3, 0x09, 0xa3, | 1398 | 0x30, 0xe5, 0x02, 0xb1, 0x0e, 0x68, 0x7c, 0xc2, 0xc6, 0xe2, 0xc6, 0x8d, |
| 1400 | 0x13, 0xea, 0x44, 0x13, 0x4e, 0x66, 0xba, 0xe0, 0x99, 0xa8, 0x2d, 0x62, | 1399 | 0xca, 0x0f, 0x1c, 0x5b, 0x92, 0x76, 0x85, 0x3b, 0xe4, 0xf5, 0x9f, 0xd7, |
| 1401 | 0xd8, 0x5e, 0x3f, 0xea, 0x06, 0xf5, 0xd8, 0x34, 0xe7, 0xc8, 0xb7, 0x97, | 1400 | 0xf9, 0x6f, 0x0a, 0x72, 0x3a, 0xcf, 0x8f, 0x33, 0xb8, 0x4f, 0x70, 0x7a, |
| 1402 | 0x04, 0xa7, 0x51, 0xda, 0x3f, 0x6f, 0xdb, 0xc6, 0x85, 0x7d, 0x87, 0xf2, | 1401 | 0x7d, 0x63, 0x1e, 0xa7, 0xa5, 0xbc, 0xdc, 0x5f, 0x61, 0xf7, 0x6a, 0x70, |
| 1403 | 0xd9, 0x15, 0xb1, 0xef, 0xef, 0x3a, 0x4f, 0x04, 0xd9, 0xbf, 0x8e, 0x08, | 1402 | 0x17, 0x1a, 0x2e, 0x6c, 0xaf, 0x7b, 0x46, 0x99, 0xd0, 0xc4, 0xe7, 0x15, |
| 1404 | 0xfa, 0x62, 0xc7, 0x64, 0x3f, 0x9f, 0xe3, 0x4b, 0x72, 0xee, 0x9f, 0x77, | 1403 | 0x62, 0xc7, 0xed, 0x36, 0xdd, 0x96, 0x76, 0xfd, 0x12, 0xcb, 0x41, 0x29, |
| 1405 | 0xe4, 0x5c, 0x88, 0xcf, 0x94, 0x33, 0x19, 0xcf, 0x39, 0xdb, 0x57, 0xcb, | 1404 | 0xbc, 0x34, 0x97, 0xc2, 0x3f, 0xba, 0x27, 0xe7, 0x52, 0x78, 0x6f, 0x7e, |
| 1406 | 0xfd, 0xdb, 0xab, 0x50, 0xcd, 0xc4, 0xc9, 0x14, 0x99, 0x3b, 0x64, 0x6e, | 1405 | 0x4c, 0x79, 0x59, 0x23, 0xe4, 0x76, 0x22, 0xaf, 0xd8, 0x86, 0x94, 0x79, |
| 1407 | 0x19, 0x75, 0x3e, 0x4c, 0xe6, 0x3f, 0x3a, 0x8f, 0x9f, 0x2f, 0x8f, 0xa0, | 1406 | 0xb0, 0xc8, 0x59, 0x8f, 0x46, 0xf7, 0x14, 0x7b, 0xc8, 0x73, 0x18, 0xa7, |
| 1408 | 0xcf, 0x5d, 0x13, 0xbf, 0xe0, 0xcb, 0x35, 0x9c, 0xbb, 0xf5, 0x25, 0x5f, | 1407 | 0x0d, 0x0d, 0x97, 0xec, 0xc1, 0x8d, 0xb6, 0xa4, 0xcc, 0x3b, 0xac, 0x62, |
| 1409 | 0x7e, 0xc7, 0x96, 0xf9, 0x93, 0xf3, 0x4b, 0x01, 0x72, 0x30, 0x03, 0xd5, | 1408 | 0xea, 0xa1, 0x6d, 0xd4, 0xc3, 0xf9, 0x13, 0x2e, 0xae, 0x62, 0x89, 0xb9, |
| 1410 | 0x9c, 0xbb, 0xf7, 0x6d, 0x28, 0xb7, 0x76, 0x74, 0x63, 0xd6, 0x44, 0x80, | 1409 | 0x5d, 0x19, 0xf7, 0xef, 0x64, 0x1b, 0x9f, 0x5f, 0x64, 0x1d, 0xde, 0xeb, |
| 1411 | 0xbe, 0x1e, 0x59, 0x6f, 0xc1, 0x66, 0x5b, 0x1d, 0xa8, 0x62, 0x9d, 0x93, | 1410 | 0xe5, 0xf5, 0x75, 0xb8, 0x9d, 0x38, 0xba, 0x36, 0x6c, 0x29, 0xb9, 0x73, |
| 1412 | 0xb6, 0x87, 0x7e, 0x9e, 0xe0, 0x98, 0x83, 0x70, 0x5c, 0x5e, 0xbf, 0x1a, | 1411 | 0x05, 0x45, 0xb8, 0x71, 0xa0, 0x12, 0x3e, 0x43, 0xd6, 0x2d, 0xfe, 0xb3, |
| 1413 | 0xf3, 0xa9, 0xa7, 0xb3, 0xb6, 0x89, 0x79, 0xd4, 0xd3, 0xb4, 0xed, 0x25, | 1412 | 0xe2, 0xab, 0x90, 0xf1, 0x3b, 0x9c, 0x81, 0x76, 0x72, 0x1d, 0x16, 0x0f, |
| 1414 | 0x4e, 0x34, 0x11, 0x0f, 0x34, 0xd4, 0x12, 0x1b, 0x2b, 0x06, 0x1d, 0x1c, | 1413 | 0x30, 0x64, 0x3b, 0x7b, 0x04, 0x0b, 0xf1, 0x74, 0xf3, 0x75, 0x58, 0xea, |
| 1415 | 0x32, 0xea, 0xc8, 0xf5, 0xc5, 0x4e, 0x3b, 0x10, 0x1e, 0x30, 0x30, 0x6f, | 1414 | 0x70, 0x9d, 0x10, 0x6e, 0x1a, 0x12, 0x0c, 0xed, 0x54, 0xfa, 0x89, 0x9d, |
| 1416 | 0xa0, 0x79, 0xe3, 0x3c, 0x8f, 0x07, 0xc7, 0x7d, 0xc5, 0xd8, 0x93, 0x9b, | 1415 | 0x4c, 0x38, 0xe8, 0xd7, 0x31, 0xa5, 0x8f, 0x98, 0xb9, 0xcf, 0xf1, 0x11, |
| 1417 | 0x23, 0xfa, 0x91, 0x31, 0xb9, 0xb9, 0xfc, 0x87, 0x60, 0xc0, 0x6a, 0x80, | 1416 | 0x59, 0x2f, 0xee, 0x54, 0x52, 0x99, 0x0a, 0x8e, 0x43, 0x6c, 0xf7, 0xb2, |
| 1418 | 0xb2, 0x0a, 0xc4, 0x8c, 0xcf, 0xb1, 0xad, 0x37, 0xec, 0x57, 0x71, 0xf3, | 1417 | 0x8c, 0x33, 0x29, 0xe3, 0x79, 0x62, 0xd1, 0xfc, 0x49, 0x19, 0x67, 0x37, |
| 1419 | 0x84, 0xe0, 0xcb, 0x0f, 0xb1, 0x92, 0xfd, 0x78, 0x97, 0xb8, 0x76, 0x5f, | 1418 | 0x49, 0x2e, 0x2b, 0x32, 0x16, 0xa1, 0x96, 0x72, 0x54, 0x52, 0x8e, 0x63, |
| 1420 | 0xf4, 0x1b, 0x1c, 0x6b, 0x13, 0x6e, 0x99, 0x98, 0x3e, 0xd7, 0xe7, 0x8e, | 1419 | 0x66, 0x85, 0x32, 0xa0, 0xe5, 0x64, 0xab, 0x61, 0xff, 0x8c, 0x39, 0x58, |
| 1421 | 0xb3, 0x9c, 0xff, 0xf9, 0x71, 0x5f, 0xb6, 0x7c, 0x06, 0x2d, 0x49, 0x9f, | 1420 | 0x63, 0xfa, 0x94, 0x65, 0xce, 0xbd, 0xbc, 0x6c, 0x9f, 0x5f, 0xec, 0x49, |
| 1422 | 0x91, 0x38, 0xe1, 0x87, 0xf8, 0x4d, 0xb7, 0xbd, 0x0d, 0xc5, 0x78, 0x2e, | 1421 | 0x7d, 0x61, 0xfb, 0x8c, 0x9c, 0x9c, 0x65, 0xfd, 0x3a, 0x4e, 0xcd, 0xbd, |
| 1423 | 0x57, 0x59, 0x8f, 0x3b, 0xbd, 0x92, 0x97, 0x17, 0x7d, 0x43, 0xfa, 0xf3, | 1422 | 0x0e, 0xa5, 0xfb, 0x8b, 0xd0, 0x48, 0x5c, 0xaf, 0x1f, 0x30, 0xfa, 0x36, |
| 1424 | 0xbb, 0xca, 0x14, 0x7d, 0x43, 0xfc, 0xe2, 0xcb, 0xae, 0x7e, 0x85, 0x77, | 1423 | 0x2a, 0x22, 0xab, 0x87, 0xbf, 0x9d, 0x75, 0x03, 0xea, 0xf3, 0xff, 0x2f, |
| 1425 | 0x69, 0xb8, 0x6d, 0xe2, 0x97, 0xc4, 0xc7, 0x48, 0x32, 0x47, 0xcc, 0x7e, | 1424 | 0xbc, 0xd2, 0x8e, 0xdd, 0x58, 0x91, 0xcc, 0xd9, 0xb0, 0xe3, 0xbf, 0xb5, |
| 1426 | 0x9d, 0xfa, 0xdd, 0x4e, 0xfd, 0x32, 0x07, 0x60, 0xbc, 0x4a, 0x50, 0x9f, | 1425 | 0x62, 0xbf, 0xb2, 0x46, 0x48, 0x7b, 0xce, 0xb8, 0xb0, 0x84, 0x7d, 0x1f, |
| 1427 | 0x3e, 0x72, 0x15, 0x2f, 0x31, 0xd3, 0xa4, 0x2e, 0x41, 0x0c, 0x64, 0xee, | 1426 | 0x33, 0x1f, 0x56, 0x2c, 0xed, 0xc2, 0x45, 0xd9, 0xaf, 0x57, 0x29, 0x63, |
| 1428 | 0x1e, 0x2c, 0x8e, 0x37, 0x77, 0x7e, 0xfe, 0xd8, 0x96, 0x92, 0xc0, 0x09, | 1427 | 0x77, 0xfa, 0x3a, 0xdc, 0x31, 0x30, 0x6e, 0x7b, 0x8d, 0x05, 0xc8, 0x84, |
| 1429 | 0xfb, 0x87, 0x55, 0x72, 0x26, 0xe8, 0xa4, 0xed, 0x3e, 0x97, 0x35, 0xcd, | 1428 | 0x43, 0xed, 0x3d, 0x8a, 0x17, 0xbb, 0xd2, 0x2e, 0x2c, 0x1a, 0x20, 0x5f, |
| 1430 | 0x19, 0x65, 0x2e, 0xb4, 0xbd, 0xcf, 0x16, 0xfe, 0x5c, 0x49, 0xbb, 0xd6, | 1429 | 0x33, 0xe3, 0x4a, 0x6c, 0x7a, 0x8e, 0x87, 0x2f, 0x4c, 0x32, 0x1f, 0xcd, |
| 1431 | 0x28, 0xaf, 0xa6, 0x84, 0xa9, 0x52, 0x57, 0xf6, 0x60, 0xa5, 0xfd, 0x6e, | 1430 | 0x4a, 0x7e, 0xd8, 0xd6, 0xbe, 0x30, 0xf1, 0x80, 0x12, 0xd3, 0x3e, 0xbf, |
| 1432 | 0xe1, 0x20, 0x78, 0x83, 0x3e, 0x77, 0xc4, 0xa8, 0xc0, 0xa8, 0x3b, 0x17, | 1431 | 0x98, 0x4c, 0x1d, 0xfd, 0xae, 0xea, 0xf0, 0x30, 0x1f, 0xde, 0x3c, 0xe8, |
| 1433 | 0x62, 0x8f, 0xc5, 0x76, 0x2f, 0xd8, 0x4d, 0xba, 0xae, 0x74, 0x1e, 0xab, | 1432 | 0xa3, 0x2f, 0x28, 0xf4, 0x13, 0x3f, 0x7d, 0xbf, 0x01, 0x6f, 0xd3, 0x37, |
| 1434 | 0xba, 0xc8, 0xc9, 0x2e, 0x6d, 0xa3, 0xe2, 0x3f, 0xb1, 0x8d, 0x44, 0xa9, | 1433 | 0xee, 0x67, 0x5c, 0xfc, 0xfb, 0xd1, 0x2a, 0xdc, 0xb6, 0x27, 0x8a, 0x97, |
| 1435 | 0x8d, 0x8f, 0x3a, 0xe3, 0x06, 0x3c, 0x65, 0x4b, 0xec, 0x97, 0xfd, 0x0f, | 1434 | 0x0f, 0xfa, 0xd1, 0xbe, 0xe7, 0x56, 0xbc, 0xc5, 0x72, 0x63, 0x8c, 0x07, |
| 1436 | 0x0d, 0x8b, 0x26, 0x04, 0x5f, 0xe8, 0xbb, 0x03, 0xd3, 0x2e, 0xf7, 0xcf, | 1435 | 0x63, 0xc3, 0x95, 0xfc, 0xf8, 0xf9, 0xa9, 0xe2, 0x67, 0x2d, 0xf1, 0xa8, |
| 1437 | 0x41, 0xf6, 0xb6, 0x42, 0xf0, 0x45, 0x35, 0x9c, 0xd2, 0x63, 0x58, 0x58, | 1436 | 0x02, 0x27, 0xf7, 0xbb, 0xd0, 0x32, 0xa0, 0x62, 0xc0, 0x54, 0x70, 0xf7, |
| 1438 | 0x90, 0xfd, 0xa9, 0x7d, 0x75, 0xc2, 0xe1, 0xce, 0xe8, 0xc2, 0x3b, 0x64, | 1437 | 0x4d, 0x32, 0x1e, 0x2f, 0xd6, 0xd4, 0x5e, 0xb6, 0x8b, 0x25, 0x49, 0xe1, |
| 1439 | 0xbe, 0xca, 0xf7, 0xfc, 0xd8, 0xaf, 0x17, 0xfb, 0x9a, 0x54, 0x8b, 0xdc, | 1438 | 0x70, 0x5e, 0xce, 0x93, 0x8e, 0x43, 0xf4, 0xcb, 0xdb, 0xc8, 0xc1, 0x76, |
| 1440 | 0xd1, 0x43, 0xee, 0xd8, 0x6b, 0xf8, 0x69, 0x97, 0xad, 0xc1, 0xd9, 0xbf, | 1439 | 0xf4, 0xb5, 0xd1, 0x8f, 0x6c, 0xcc, 0x0a, 0xff, 0x18, 0x2b, 0xb4, 0x1e, |
| 1441 | 0x73, 0x2f, 0xab, 0xdc, 0xdf, 0xdf, 0x57, 0xee, 0xc2, 0x7a, 0x5c, 0xf6, | 1440 | 0xc9, 0x6b, 0x9d, 0x75, 0xfe, 0x14, 0xe7, 0x71, 0xc2, 0x53, 0x6f, 0x4d, |
| 1442 | 0xa2, 0xfd, 0x21, 0x19, 0xd3, 0x5c, 0xa0, 0x41, 0xe2, 0x55, 0x91, 0xa3, | 1441 | 0x43, 0x51, 0x2c, 0x10, 0x0d, 0x69, 0x47, 0xb0, 0x1c, 0x7d, 0x63, 0xd0, |
| 1443 | 0x6e, 0x3d, 0x9f, 0xff, 0x58, 0xca, 0x60, 0xfe, 0x31, 0xd4, 0xeb, 0x0b, | 1442 | 0x64, 0xcd, 0x7f, 0x1b, 0x79, 0xd4, 0x76, 0xf2, 0xa8, 0xee, 0xcc, 0x11, |
| 1444 | 0x50, 0xdf, 0x50, 0xc3, 0xb8, 0x1c, 0xed, 0xa2, 0x7b, 0x4b, 0x2c, 0xb3, | 1443 | 0xce, 0xb1, 0xcf, 0x2b, 0x7b, 0xdf, 0xdb, 0xa8, 0xbb, 0xc5, 0x0e, 0x27, |
| 1445 | 0x82, 0xa6, 0xe4, 0xbf, 0xc2, 0x5b, 0xa5, 0xcd, 0x7e, 0xa5, 0xaa, 0x20, | 1444 | 0xf2, 0x5a, 0x45, 0x6c, 0xff, 0x38, 0x63, 0xd2, 0x82, 0xfe, 0x1c, 0x6e, |
| 1446 | 0xed, 0x1e, 0x54, 0xfc, 0x85, 0x0f, 0x6b, 0x5b, 0xce, 0xfb, 0x4d, 0x9f, | 1445 | 0x7c, 0xd6, 0xf4, 0x3c, 0x8c, 0x69, 0x3d, 0xf4, 0xf9, 0x5c, 0xdb, 0x3b, |
| 1447 | 0x1b, 0xca, 0x74, 0xbb, 0x7b, 0x8c, 0xcb, 0x86, 0x1c, 0xdc, 0x69, 0x34, | 1446 | 0x85, 0x9b, 0x79, 0xca, 0x62, 0x65, 0xd1, 0xd0, 0x86, 0xd7, 0xa9, 0x7c, |
| 1448 | 0xe1, 0xee, 0x06, 0x69, 0xa3, 0x98, 0xc3, 0x68, 0xea, 0x34, 0x39, 0xdc, | 1447 | 0x2f, 0xdb, 0xdc, 0x3a, 0xb9, 0x8f, 0xd0, 0xcb, 0x36, 0x7b, 0x58, 0xb7, |
| 1449 | 0x6f, 0x1c, 0x55, 0x97, 0xcf, 0x3e, 0x78, 0x1e, 0xd3, 0xa7, 0xd7, 0x42, | 1448 | 0xbe, 0xdf, 0xe2, 0x5c, 0xba, 0x59, 0x3f, 0x14, 0xd8, 0xa8, 0x98, 0xac, |
| 1450 | 0xc5, 0xd9, 0xeb, 0x24, 0x9f, 0xf1, 0x91, 0x7f, 0x6d, 0xaa, 0x2e, 0xee, | 1449 | 0xeb, 0xe4, 0x11, 0xa8, 0xd9, 0x7f, 0x79, 0xae, 0xda, 0x88, 0x31, 0xfd, |
| 1451 | 0x2f, 0x8b, 0x1d, 0x4b, 0x3f, 0xfc, 0xf4, 0xb3, 0x0b, 0xfd, 0xd8, 0xf6, | 1450 | 0x93, 0xfe, 0x7e, 0x7e, 0xf4, 0x3a, 0x84, 0x68, 0x24, 0x4f, 0x9b, 0x9b, |
| 1452 | 0x07, 0xf5, 0xc3, 0x8f, 0x9b, 0x86, 0x92, 0x18, 0x35, 0x4e, 0x38, 0x56, | 1451 | 0xa0, 0xd3, 0x66, 0x5d, 0x93, 0x7d, 0x6d, 0x97, 0x71, 0xb8, 0x67, 0xc6, |
| 1453 | 0x68, 0x66, 0xdb, 0x3e, 0xac, 0x1c, 0xfa, 0x8d, 0x33, 0xcb, 0x6d, 0x5b, | 1452 | 0x66, 0xb2, 0x8f, 0xbe, 0x4c, 0x48, 0xeb, 0x42, 0xfd, 0x89, 0x69, 0x90, |
| 1454 | 0x27, 0xa7, 0x52, 0xf1, 0xc0, 0x12, 0x1f, 0x6e, 0x1d, 0x89, 0x62, 0xc5, | 1453 | 0x71, 0x48, 0x7f, 0xcb, 0xf1, 0xe4, 0xd8, 0xd5, 0xe3, 0xa8, 0x26, 0x3e, |
| 1455 | 0x90, 0x8a, 0xd8, 0x12, 0xe9, 0x43, 0x14, 0x5d, 0x23, 0xbb, 0xbd, 0xc5, | 1454 | 0x5d, 0x2c, 0x98, 0x3c, 0x33, 0xe7, 0xe4, 0xe2, 0x31, 0xc7, 0xc7, 0x76, |
| 1456 | 0xf2, 0xc0, 0x2d, 0x1c, 0xc3, 0x1b, 0x46, 0x0d, 0x7e, 0x40, 0x0c, 0xac, | 1455 | 0x38, 0xf2, 0x7b, 0xd8, 0x66, 0x36, 0xb7, 0x07, 0x22, 0x69, 0x95, 0x32, |
| 1457 | 0x75, 0xb9, 0xfd, 0x46, 0x25, 0x23, 0xdc, 0xde, 0xa7, 0x62, 0xb6, 0x8e, | 1456 | 0xc2, 0x58, 0xd1, 0x96, 0x54, 0x62, 0x15, 0xd1, 0xfa, 0xce, 0x69, 0x08, |
| 1458 | 0x60, 0x83, 0x99, 0xa4, 0xee, 0x3a, 0x95, 0xc7, 0x72, 0x1b, 0x95, 0xa1, | 1457 | 0x45, 0x7e, 0xc6, 0xb6, 0xa7, 0xb1, 0xed, 0x67, 0xd9, 0x76, 0x8a, 0x6d, |
| 1459 | 0x7c, 0xb9, 0xef, 0x01, 0x7c, 0xa2, 0x10, 0xc4, 0x27, 0xc6, 0x1a, 0x78, | 1458 | 0x8f, 0xb0, 0xed, 0x1f, 0x5c, 0x6a, 0x5b, 0xc5, 0xfd, 0x7b, 0xf2, 0xb6, |
| 1460 | 0x85, 0x78, 0x35, 0xf2, 0x7a, 0xf1, 0xfc, 0xb8, 0xca, 0x67, 0x3c, 0x9f, | 1459 | 0xe5, 0x46, 0xa4, 0x89, 0x59, 0xdf, 0x34, 0xd9, 0x03, 0xad, 0xe6, 0xdc, |
| 1461 | 0x65, 0x4e, 0xb1, 0xcd, 0xf5, 0x4b, 0x89, 0x0b, 0x9a, 0x9c, 0xd5, 0xc1, | 1460 | 0x8b, 0xee, 0x74, 0xc6, 0xf6, 0x9c, 0xbd, 0x2d, 0x60, 0xec, 0xb9, 0x6b, |
| 1462 | 0x5b, 0x59, 0xc9, 0x27, 0xb6, 0xd1, 0x86, 0x65, 0x4d, 0xb8, 0x92, 0x39, | 1461 | 0x8f, 0x82, 0xf7, 0xc3, 0xef, 0x63, 0xc2, 0x9f, 0xe3, 0x11, 0x79, 0x1b, |
| 1463 | 0x45, 0x24, 0x36, 0x85, 0xbf, 0xaa, 0x2e, 0xce, 0x7d, 0xd1, 0x86, 0x71, | 1462 | 0xd2, 0x68, 0x43, 0x5a, 0xf2, 0x7f, 0xd2, 0xf4, 0xa5, 0x8e, 0xd8, 0x8f, |
| 1464 | 0xde, 0x86, 0x7d, 0x78, 0x3b, 0xab, 0xa2, 0x25, 0xfe, 0x6f, 0xce, 0xf1, | 1463 | 0xec, 0x3f, 0x90, 0x3f, 0x27, 0x44, 0x1f, 0xbf, 0x23, 0xee, 0x86, 0x4e, |
| 1465 | 0xa0, 0xe0, 0xc9, 0xa5, 0xcf, 0xcb, 0x9c, 0x65, 0xfa, 0x5c, 0x36, 0xd3, | 1464 | 0xbc, 0xc7, 0xd8, 0xf9, 0xa3, 0x8c, 0x07, 0xe9, 0xb4, 0x0f, 0xcf, 0x66, |
| 1466 | 0x34, 0x63, 0x5f, 0x56, 0x41, 0xc5, 0x90, 0xf0, 0xf3, 0xeb, 0x5c, 0xbe, | 1465 | 0x04, 0x1b, 0xdb, 0x88, 0x8d, 0x82, 0xf7, 0xe4, 0x81, 0xc3, 0x47, 0x1f, |
| 1467 | 0xf7, 0x7d, 0xc3, 0x07, 0xef, 0xd0, 0xa1, 0x2b, 0xe5, 0x68, 0x93, 0x6f, | 1466 | 0x0b, 0xb0, 0xf2, 0xb3, 0xb4, 0x9f, 0x67, 0x69, 0x3f, 0xcf, 0x0e, 0xfb, |
| 1468 | 0x8c, 0x71, 0xab, 0x83, 0xf3, 0x32, 0xf2, 0xf1, 0x92, 0xce, 0xca, 0xba, | 1467 | 0x70, 0xf3, 0x21, 0x2f, 0xce, 0x11, 0x6b, 0x7a, 0x59, 0x26, 0x91, 0x6a, |
| 1469 | 0x50, 0xdc, 0x35, 0x49, 0xd5, 0x8d, 0xe9, 0x41, 0xa8, 0x63, 0xc2, 0x43, | 1468 | 0xc0, 0x4d, 0xe4, 0x59, 0x87, 0x7b, 0x19, 0x97, 0x19, 0xff, 0xeb, 0xb2, |
| 1470 | 0xc9, 0x0d, 0xc6, 0x24, 0x1f, 0x08, 0xf1, 0xbf, 0xe4, 0x06, 0x8d, 0xfc, | 1469 | 0x1a, 0x76, 0xf5, 0x57, 0xa0, 0x7e, 0x48, 0x62, 0x70, 0x05, 0x1e, 0xe9, |
| 1471 | 0xcf, 0xc4, 0xa2, 0x51, 0xe2, 0x78, 0x0f, 0xfa, 0x19, 0x9f, 0x2a, 0xa3, | 1470 | 0xf3, 0x62, 0xce, 0x7e, 0xd9, 0x87, 0x24, 0x2f, 0xec, 0xbb, 0x13, 0xc3, |
| 1472 | 0x3d, 0xd8, 0x3e, 0xfe, 0x61, 0x31, 0xbf, 0x98, 0x63, 0x3d, 0x7b, 0xde, | 1471 | 0x8e, 0x8f, 0x4f, 0xa3, 0x7f, 0x54, 0xa2, 0x76, 0x48, 0xae, 0xc9, 0x53, |
| 1473 | 0xcf, 0xdc, 0x39, 0x62, 0x9f, 0xa6, 0xcf, 0x89, 0xcf, 0xc8, 0x5c, 0xed, | 1472 | 0x68, 0xb3, 0x0b, 0x0e, 0x55, 0x71, 0xbc, 0xb7, 0x62, 0xfe, 0xa1, 0x00, |
| 1474 | 0xcb, 0x4a, 0x1f, 0x1c, 0x6c, 0x30, 0x6e, 0x64, 0xdb, 0x3e, 0xa8, 0x0d, | 1473 | 0xf1, 0xdc, 0x8f, 0x48, 0x76, 0xf9, 0x45, 0xc1, 0xe4, 0xed, 0x63, 0x53, |
| 1475 | 0x33, 0xb9, 0xe7, 0x79, 0x3e, 0x4d, 0xdd, 0x6d, 0x54, 0x46, 0x39, 0x27, | 1474 | 0x63, 0x9a, 0xf8, 0xa1, 0x83, 0x61, 0x91, 0x3c, 0x86, 0x5d, 0x7e, 0x3e, |
| 1476 | 0x96, 0xb7, 0x52, 0xd6, 0x87, 0x82, 0x15, 0x9c, 0x93, 0xaf, 0xe4, 0x45, | 1475 | 0x15, 0x27, 0x7f, 0xcb, 0x67, 0x52, 0x26, 0x1f, 0x7b, 0xa6, 0xe2, 0xe2, |
| 1477 | 0x46, 0xa7, 0x32, 0x9e, 0x9b, 0x59, 0x67, 0xa3, 0x32, 0x96, 0xff, 0x55, | 1476 | 0x65, 0x7c, 0x6a, 0x1c, 0x90, 0x6f, 0x0d, 0xed, 0xf3, 0xc4, 0xd7, 0xaf, |
| 1478 | 0xb5, 0xac, 0x99, 0x5f, 0xd0, 0x4d, 0xb9, 0x0f, 0x62, 0x63, 0x1a, 0xea, | 1477 | 0x43, 0xc4, 0x91, 0xe7, 0xfe, 0x62, 0x96, 0x0b, 0xe4, 0xfc, 0x7d, 0x2a, |
| 1479 | 0xd3, 0xa2, 0x67, 0x19, 0xb3, 0x06, 0x2f, 0x79, 0x5c, 0x7d, 0xe1, 0x43, | 1478 | 0x9e, 0xfb, 0x26, 0xfd, 0xd4, 0x85, 0x58, 0x45, 0x8e, 0x0b, 0xdf, 0xbe, |
| 1480 | 0xdb, 0x6c, 0xac, 0x72, 0xcf, 0x62, 0xc6, 0x18, 0x8b, 0x02, 0x56, 0x25, | 1479 | 0xa7, 0x01, 0xbb, 0xa8, 0x8f, 0x56, 0xfa, 0x91, 0x2f, 0x1c, 0xb5, 0xad, |
| 1481 | 0x39, 0x1f, 0x6d, 0x34, 0xe5, 0x33, 0xbb, 0x3a, 0xf7, 0xd9, 0x0b, 0x83, | 1480 | 0x0a, 0xc9, 0x5b, 0x2b, 0x71, 0xe7, 0x1e, 0x3f, 0x63, 0xf8, 0xb5, 0x48, |
| 1482 | 0x87, 0x4b, 0x6b, 0x11, 0x6b, 0x21, 0xbc, 0x54, 0x71, 0x71, 0xd6, 0xa3, | 1481 | 0x0e, 0xcf, 0x66, 0x5b, 0xd5, 0xe8, 0x9d, 0xcc, 0xe7, 0xb7, 0xa7, 0x96, |
| 1483 | 0x47, 0xb1, 0x9c, 0xb9, 0xee, 0x4d, 0xb9, 0x62, 0x7f, 0xc7, 0xd8, 0xdf, | 1482 | 0xd9, 0x0f, 0x39, 0x7b, 0xf2, 0xb2, 0xf6, 0xff, 0xda, 0x7d, 0xde, 0xd0, |
| 1484 | 0x29, 0xd7, 0xf7, 0x92, 0xca, 0x68, 0x5e, 0x75, 0xfb, 0xed, 0x35, 0xa5, | 1483 | 0xb8, 0xce, 0x7c, 0xde, 0x64, 0xce, 0x41, 0x0e, 0x76, 0x02, 0xa1, 0x4a, |
| 1485 | 0xbf, 0x52, 0x97, 0xe3, 0xc9, 0xbf, 0x56, 0xca, 0xa9, 0x92, 0x18, 0xcc, | 1484 | 0xe6, 0xe7, 0x46, 0x39, 0x16, 0x31, 0x9f, 0x7f, 0xc8, 0x2f, 0xcf, 0x6e, |
| 1486 | 0xcc, 0xf4, 0x61, 0xe9, 0x73, 0x2d, 0xda, 0x86, 0x3e, 0xa0, 0x9f, 0xc9, | 1485 | 0x15, 0x59, 0x9c, 0xf2, 0x97, 0xc7, 0xb8, 0x6b, 0xca, 0x18, 0xeb, 0x23, |
| 1487 | 0xbc, 0x0a, 0xfe, 0xcc, 0xc3, 0xca, 0x91, 0x59, 0x68, 0x1d, 0x0a, 0xe3, | 1486 | 0xd3, 0x90, 0xe7, 0x63, 0x5f, 0xd8, 0x7f, 0x6f, 0x40, 0xe9, 0x0f, 0xd1, |
| 1488 | 0xb6, 0x91, 0x06, 0x2c, 0xda, 0xb5, 0x06, 0xd5, 0x63, 0x41, 0x5c, 0xb9, | 1487 | 0x6a, 0x1b, 0x83, 0x7d, 0x0f, 0x29, 0x86, 0xd6, 0xa4, 0x12, 0xba, 0x46, |
| 1489 | 0x4b, 0xd6, 0xf8, 0x57, 0xa3, 0xb2, 0x70, 0x5b, 0x8d, 0xe4, 0xb8, 0x7a, | 1488 | 0xdf, 0xc4, 0x92, 0xec, 0x2f, 0x10, 0xcb, 0xae, 0xf6, 0x8a, 0x2c, 0xf7, |
| 1490 | 0x3a, 0xc1, 0xf9, 0x4b, 0xa0, 0x22, 0x1d, 0x49, 0x24, 0x21, 0x6b, 0xa4, | 1489 | 0x67, 0x57, 0x61, 0x9c, 0x73, 0x5c, 0xc4, 0x3a, 0x37, 0xf4, 0xfa, 0x68, |
| 1491 | 0x26, 0x2a, 0x0a, 0x26, 0xf9, 0xa4, 0xb3, 0x79, 0xbe, 0xe9, 0x73, 0xcf, | 1490 | 0xa3, 0x50, 0x0e, 0x37, 0xd7, 0xe1, 0x43, 0xf2, 0x9c, 0xb6, 0xe4, 0x9b, |
| 1492 | 0x9b, 0x2d, 0x2b, 0xd0, 0xe6, 0x39, 0x6e, 0x1f, 0x2f, 0x4f, 0xda, 0x71, | 1491 | 0xd0, 0x18, 0x5f, 0xef, 0x4c, 0xfe, 0x02, 0x65, 0xc4, 0x94, 0x3b, 0x92, |
| 1493 | 0xce, 0x5e, 0x87, 0xcd, 0x35, 0x66, 0x13, 0x3c, 0x85, 0xcb, 0x91, 0x1c, | 1492 | 0x5f, 0xd8, 0x23, 0xa1, 0x7d, 0x4e, 0xbd, 0xc2, 0xd1, 0x03, 0x17, 0xfb, |
| 1494 | 0x69, 0xc3, 0xbc, 0x42, 0x03, 0x3a, 0x47, 0x42, 0x88, 0xa5, 0xc5, 0xc7, | 1493 | 0x2e, 0xc7, 0x27, 0xad, 0xd0, 0x78, 0xe5, 0x2a, 0x3c, 0x6c, 0x68, 0xd9, |
| 1495 | 0x23, 0x5a, 0x4a, 0xed, 0x80, 0xbf, 0xc0, 0x78, 0x9a, 0xfe, 0x8d, 0xf3, | 1494 | 0x9c, 0x18, 0xfd, 0x5f, 0x9e, 0xe8, 0xaf, 0x7f, 0xfa, 0xfd, 0xe6, 0x9c, |
| 1496 | 0x16, 0xed, 0xa0, 0x87, 0xfa, 0xba, 0x26, 0xdd, 0x85, 0xba, 0x42, 0x00, | 1495 | 0x5d, 0xea, 0x99, 0xbb, 0xf0, 0x2d, 0x07, 0x77, 0xd7, 0x6c, 0x74, 0x47, |
| 1497 | 0x57, 0x0f, 0x7d, 0x02, 0xb5, 0x23, 0x7e, 0xcc, 0x1a, 0xd2, 0x90, 0x5f, | 1496 | 0x3b, 0x1e, 0x93, 0xb5, 0xd0, 0x35, 0xce, 0x3a, 0x41, 0x3b, 0x76, 0xee, |
| 1498 | 0xe2, 0x47, 0x60, 0x24, 0x8c, 0xea, 0xb4, 0xde, 0x75, 0x9b, 0x82, 0xe4, | 1497 | 0x6d, 0xc3, 0xe6, 0xbd, 0x82, 0xad, 0xf5, 0xad, 0x8b, 0x94, 0x19, 0xf4, |
| 1499 | 0xc2, 0x25, 0x61, 0xb6, 0x4d, 0x7b, 0xa3, 0x7f, 0x8d, 0x90, 0x7f, 0x2d, | 1498 | 0xc3, 0x01, 0x27, 0x97, 0x71, 0x1b, 0x9f, 0xca, 0x9a, 0xab, 0xea, 0x71, |
| 1500 | 0xef, 0x06, 0x36, 0xa7, 0x05, 0x1b, 0x45, 0x27, 0x9f, 0x72, 0xcf, 0x9f, | 1499 | 0xf6, 0xc0, 0x74, 0xac, 0x19, 0xcd, 0xb5, 0x35, 0x2b, 0x53, 0x4a, 0xff, |
| 1501 | 0xac, 0x4b, 0x7f, 0x18, 0xce, 0x95, 0xed, 0x5b, 0xfc, 0xdc, 0x72, 0xcf, | 1500 | 0x8a, 0x22, 0xc9, 0x9c, 0xc5, 0xc7, 0xd8, 0xc9, 0x79, 0xc1, 0xa9, 0x7e, |
| 1502 | 0xc4, 0x32, 0x07, 0x52, 0xa6, 0x5b, 0xf4, 0xec, 0x3c, 0xde, 0xfb, 0x39, | 1501 | 0x89, 0x3b, 0x0a, 0x7c, 0xf7, 0xc8, 0x5e, 0xe6, 0x32, 0xe4, 0xf9, 0x7a, |
| 1503 | 0xe3, 0xf3, 0x43, 0xe9, 0x80, 0x55, 0x6b, 0x6e, 0xc6, 0x55, 0xed, 0x11, | 1502 | 0x4c, 0xdb, 0xcc, 0xdf, 0x3b, 0x8a, 0x73, 0x72, 0x6d, 0xbe, 0x8a, 0x17, |
| 1504 | 0xab, 0xa0, 0xbc, 0xca, 0xf1, 0xff, 0x90, 0x41, 0xbb, 0x89, 0xfd, 0xfc, | 1503 | 0xe5, 0xed, 0x41, 0x74, 0x97, 0xb7, 0xa1, 0x4f, 0x39, 0x06, 0xe6, 0xd8, |
| 1505 | 0x63, 0xe5, 0x5f, 0xba, 0xce, 0xb6, 0xe4, 0xa2, 0xf5, 0xb9, 0x23, 0xcc, | 1504 | 0xe4, 0x83, 0x97, 0xfd, 0xf9, 0x8b, 0x22, 0x67, 0x5d, 0x30, 0x3b, 0x35, |
| 1506 | 0xe7, 0xa7, 0x2e, 0x5a, 0x9f, 0x13, 0xbc, 0x2f, 0x9f, 0x83, 0x90, 0xb9, | 1505 | 0xbe, 0x6f, 0x9f, 0xd4, 0xfd, 0x75, 0xc5, 0xf9, 0xd8, 0x94, 0x93, 0xd7, |
| 1507 | 0xd2, 0x66, 0xd8, 0xb7, 0xac, 0x17, 0x09, 0x36, 0xca, 0x7c, 0x95, 0xd7, | 1506 | 0x24, 0x16, 0x5e, 0x83, 0x98, 0x3f, 0xef, 0xff, 0xdf, 0xe4, 0xf3, 0xcd, |
| 1508 | 0x8b, 0x7c, 0x58, 0x3e, 0x24, 0xb9, 0x92, 0xca, 0x3c, 0xa1, 0x05, 0xc9, | 1507 | 0x82, 0x01, 0x93, 0x75, 0xef, 0x2e, 0x41, 0xf1, 0x76, 0x87, 0xc3, 0x5d, |
| 1509 | 0xd0, 0xa3, 0x9c, 0x03, 0x77, 0x4d, 0x89, 0xf7, 0x06, 0xf8, 0x59, 0xd6, | 1508 | 0x6e, 0x9f, 0x64, 0xf8, 0x8a, 0xf6, 0xa7, 0xda, 0xaf, 0xb4, 0x2f, 0x71, |
| 1510 | 0x7b, 0x34, 0xe2, 0x8f, 0x56, 0xca, 0x0b, 0xaa, 0x70, 0xeb, 0x50, 0x83, | 1509 | 0x5a, 0x74, 0xda, 0xc8, 0xba, 0xa2, 0x3f, 0x07, 0xa3, 0x65, 0x4d, 0x96, |
| 1511 | 0xbb, 0x1f, 0xb5, 0x22, 0x7e, 0x39, 0x62, 0xf5, 0x5f, 0x62, 0x99, 0x0b, | 1510 | 0xdc, 0xad, 0xcd, 0xd9, 0xa7, 0x29, 0x26, 0x6f, 0xee, 0x66, 0x0e, 0x55, |
| 1512 | 0x6b, 0x43, 0x57, 0x31, 0xdf, 0xa8, 0x71, 0xcf, 0x4a, 0x2c, 0xa3, 0xbe, | 1511 | 0xb2, 0x9f, 0xd7, 0xe4, 0x3e, 0x4b, 0x07, 0x02, 0x28, 0xda, 0xef, 0x21, |
| 1513 | 0x2f, 0x47, 0xdb, 0x48, 0x11, 0xcf, 0x6e, 0x1b, 0x29, 0xe2, 0x56, 0x5a, | 1512 | 0xae, 0xcf, 0x80, 0x7b, 0x7f, 0x01, 0xed, 0x55, 0x38, 0xc2, 0x6b, 0xf7, |
| 1514 | 0x6c, 0xce, 0x57, 0xb4, 0xb9, 0x2c, 0x6d, 0x2e, 0xa8, 0x77, 0x2a, 0xd9, | 1513 | 0x6d, 0x31, 0xae, 0x85, 0x6b, 0x7f, 0x21, 0x79, 0xb9, 0x70, 0xbe, 0x13, |
| 1515 | 0xdc, 0x47, 0xc5, 0x13, 0x04, 0xeb, 0xcc, 0xf2, 0x99, 0x6a, 0x62, 0x5e, | 1514 | 0xf7, 0xad, 0x65, 0x1c, 0x57, 0xf7, 0x7b, 0x19, 0x9f, 0xab, 0xe1, 0x61, |
| 1516 | 0xfe, 0x48, 0xcd, 0x1f, 0x16, 0x7f, 0x2e, 0xd5, 0xd9, 0xb5, 0x7f, 0xa4, | 1515 | 0xcc, 0x5b, 0x32, 0xf0, 0x67, 0x28, 0xd8, 0x5f, 0x8c, 0x07, 0x06, 0xae, |
| 1517 | 0xce, 0xca, 0x31, 0xeb, 0x82, 0xce, 0x06, 0x2f, 0xd1, 0xd9, 0x02, 0xea, | 1516 | 0xc7, 0xcc, 0xfd, 0x25, 0xb8, 0x7f, 0x60, 0x26, 0x66, 0xec, 0x97, 0xdc, |
| 1518 | 0xa0, 0x41, 0x2f, 0xea, 0x6d, 0xb9, 0x71, 0x19, 0x52, 0xae, 0xde, 0xaa, | 1517 | 0x49, 0x47, 0x60, 0x7f, 0x29, 0x56, 0x0c, 0x04, 0x51, 0xb1, 0xbf, 0x0c, |
| 1519 | 0x64, 0x6d, 0x8c, 0xf7, 0x04, 0xaf, 0xe7, 0xe0, 0xfb, 0xc1, 0x2f, 0xb9, | 1518 | 0x6d, 0x03, 0xb3, 0xa0, 0xed, 0x2f, 0xc7, 0x5d, 0x03, 0x35, 0x28, 0xdf, |
| 1520 | 0xf7, 0x16, 0x51, 0x27, 0x45, 0x7d, 0x05, 0xa9, 0xaf, 0x0b, 0xb1, 0x00, | 1519 | 0xaf, 0xe1, 0xce, 0x01, 0x03, 0x65, 0xfb, 0x2b, 0x18, 0xd3, 0x42, 0x8c, |
| 1521 | 0xea, 0x07, 0xcc, 0xa7, 0x8a, 0xb1, 0x40, 0x74, 0xf7, 0xda, 0xa0, 0x86, | 1520 | 0x9d, 0x7e, 0x2c, 0xdf, 0xc3, 0xb9, 0x39, 0x58, 0x45, 0xbf, 0x58, 0x45, |
| 1522 | 0xba, 0xeb, 0x2e, 0xc7, 0x2b, 0x7b, 0xab, 0xd0, 0x3e, 0xe2, 0xa3, 0x7f, | 1521 | 0x4e, 0xbd, 0x1a, 0xfb, 0x52, 0x73, 0x50, 0x72, 0x30, 0x80, 0xa5, 0x7b, |
| 1523 | 0x49, 0x7c, 0x28, 0xc6, 0xa4, 0xd6, 0x11, 0x77, 0x3f, 0x8a, 0xf8, 0xda, | 1522 | 0xc6, 0x35, 0x52, 0x1a, 0x2c, 0x0e, 0x35, 0xa0, 0xe8, 0xa0, 0xe4, 0x7e, |
| 1524 | 0x10, 0xf8, 0xc3, 0x63, 0xb0, 0x8c, 0x47, 0xce, 0xe5, 0xc9, 0xb9, 0x39, | 1523 | 0xc1, 0x13, 0x2d, 0x08, 0x5e, 0x58, 0x84, 0x72, 0xe6, 0xbe, 0xc0, 0x7b, |
| 1525 | 0x19, 0x97, 0x3e, 0xc3, 0x16, 0x1c, 0xe7, 0x19, 0xce, 0x77, 0xaa, 0x21, | 1524 | 0x63, 0xc0, 0xec, 0x31, 0x17, 0x8e, 0x68, 0xab, 0xb0, 0x75, 0xec, 0x9b, |
| 1526 | 0x92, 0x95, 0xf5, 0xa6, 0x2c, 0x39, 0x99, 0x27, 0x2d, 0x3a, 0x13, 0xbe, | 1525 | 0x93, 0x36, 0x2f, 0xfb, 0x47, 0xe5, 0x9c, 0x5f, 0xb9, 0x96, 0x7b, 0xab, |
| 1527 | 0xad, 0xde, 0xe8, 0x81, 0xda, 0xe6, 0xc1, 0x66, 0x9c, 0x32, 0xf4, 0xfe, | 1526 | 0xd1, 0x33, 0x96, 0x5f, 0x07, 0x0b, 0xf6, 0x6d, 0xa7, 0x06, 0xc7, 0x33, |
| 1528 | 0x7b, 0xf1, 0x27, 0xe8, 0x0d, 0x39, 0xd8, 0x6f, 0xac, 0x64, 0x3e, 0x51, | 1527 | 0xf2, 0x4c, 0x7c, 0x04, 0xb4, 0x6f, 0xa5, 0x5b, 0xce, 0x8f, 0xbb, 0xa2, |
| 1529 | 0x8d, 0xf5, 0x6d, 0x34, 0xcf, 0x3b, 0x3a, 0x88, 0x09, 0x56, 0x8f, 0x07, | 1528 | 0x6a, 0x59, 0x77, 0xf3, 0x86, 0x5b, 0xe2, 0x99, 0x4d, 0xcc, 0xbb, 0x24, |
| 1530 | 0xb2, 0x9e, 0xbb, 0xf1, 0x2e, 0x3b, 0x1a, 0xe9, 0x7e, 0x50, 0x01, 0x56, | 1529 | 0x87, 0xdd, 0x78, 0xcb, 0x9a, 0xcc, 0x07, 0x97, 0xf6, 0x13, 0xfa, 0xcc, |
| 1531 | 0x0c, 0xf8, 0xa1, 0x29, 0x2e, 0xdf, 0x89, 0x0d, 0xa9, 0xb2, 0xb6, 0xfc, | 1530 | 0x85, 0x01, 0x0d, 0x5f, 0xc3, 0x1a, 0x67, 0x0d, 0x55, 0xe5, 0x9c, 0xc9, |
| 1532 | 0x2f, 0x15, 0xc5, 0xb3, 0x10, 0x2a, 0xb4, 0x46, 0x69, 0x67, 0x25, 0xac, | 1531 | 0x79, 0x56, 0xe7, 0x2c, 0x39, 0xed, 0x2c, 0x0e, 0xd3, 0xc1, 0xd4, 0x75, |
| 1533 | 0xc9, 0x0e, 0x17, 0x4f, 0x6a, 0x16, 0x2a, 0xb8, 0x75, 0x61, 0xc4, 0x4a, | 1532 | 0xa8, 0xc9, 0x38, 0x6b, 0xb5, 0x75, 0x71, 0xbc, 0xa0, 0xb6, 0x1a, 0xd6, |
| 1534 | 0x29, 0x8e, 0xb3, 0x2a, 0xee, 0x75, 0x9f, 0xef, 0x98, 0x6c, 0x4d, 0xdd, | 1533 | 0xe4, 0xd9, 0x0f, 0x6b, 0xbe, 0x86, 0x98, 0xa9, 0x5d, 0x3a, 0x1f, 0x12, |
| 1535 | 0xa9, 0xfe, 0x8b, 0x63, 0xb9, 0xeb, 0xd9, 0x91, 0x60, 0x52, 0x65, 0x9f, | 1534 | 0xd4, 0x47, 0x10, 0x0c, 0x6c, 0xc3, 0x3a, 0xe7, 0x7c, 0xa0, 0x12, 0x6d, |
| 1536 | 0x3f, 0xf2, 0xac, 0xa2, 0x8c, 0x93, 0x5c, 0x9c, 0xbc, 0xfb, 0xc9, 0xd2, | 1535 | 0x97, 0x73, 0x46, 0xfc, 0x5e, 0x0d, 0x23, 0x93, 0x5f, 0x6b, 0x94, 0xb3, |
| 1537 | 0xfa, 0xaf, 0xcf, 0x5c, 0xff, 0x17, 0xfb, 0x75, 0xc9, 0xf7, 0xbe, 0xe4, | 1536 | 0xd7, 0xb2, 0x8f, 0x65, 0x33, 0xe7, 0x97, 0x3c, 0xf9, 0x88, 0xa2, 0xf6, |
| 1538 | 0x9e, 0xfb, 0xc8, 0x66, 0x64, 0xfd, 0xf0, 0xe1, 0x00, 0xaa, 0x57, 0xa2, | 1537 | 0x3a, 0xeb, 0x63, 0xab, 0x5c, 0x8c, 0x01, 0x2d, 0x0a, 0xe2, 0x45, 0xd1, |
| 1539 | 0x77, 0xf2, 0x3a, 0x4c, 0xb4, 0xfd, 0xab, 0x93, 0x2b, 0xf6, 0x5d, 0xcc, | 1538 | 0x90, 0xfe, 0xe1, 0xe4, 0xba, 0x83, 0x67, 0x74, 0x8b, 0x52, 0x30, 0xda, |
| 1540 | 0xd0, 0x3f, 0xcf, 0xcc, 0xdd, 0x75, 0x7d, 0x4b, 0x84, 0x1c, 0x5c, 0xce, | 1539 | 0xa3, 0xb8, 0x47, 0x73, 0xeb, 0x0e, 0x2e, 0xf2, 0xd8, 0x6d, 0xa9, 0x4a, |
| 1541 | 0x7a, 0x92, 0x0b, 0x2b, 0x45, 0x1e, 0x3e, 0x5f, 0xbf, 0x09, 0xcf, 0x5e, | 1540 | 0x96, 0xd1, 0x30, 0x7b, 0xae, 0x1b, 0xaf, 0x26, 0xca, 0x9c, 0xb3, 0xc7, |
| 1542 | 0x24, 0x53, 0xd6, 0x12, 0xca, 0x32, 0x77, 0x51, 0x9e, 0xc8, 0x65, 0x3c, | 1541 | 0x5b, 0xe7, 0x16, 0xe0, 0x11, 0xda, 0x7e, 0xeb, 0x8d, 0xc7, 0xf0, 0x41, |
| 1543 | 0xd0, 0xff, 0xcd, 0x19, 0x09, 0xcd, 0x2c, 0x17, 0xab, 0x2a, 0xc6, 0x2a, | 1542 | 0x86, 0x5c, 0x23, 0x61, 0x85, 0x87, 0xd9, 0xe7, 0xd1, 0x84, 0x8a, 0x17, |
| 1544 | 0x29, 0x57, 0x6e, 0xb7, 0x82, 0xf5, 0xde, 0x77, 0x46, 0x2f, 0x2a, 0xf7, | 1543 | 0x07, 0xb7, 0x84, 0x87, 0x9c, 0xfe, 0xbf, 0x8d, 0xcd, 0x23, 0x92, 0x77, |
| 1545 | 0xd3, 0x52, 0xb9, 0x67, 0x02, 0x72, 0x66, 0x24, 0x9b, 0x11, 0xce, 0x7a, | 1544 | 0xb5, 0xd9, 0xdb, 0x53, 0xed, 0xb6, 0xc4, 0xdd, 0x6c, 0xa2, 0x92, 0xb9, |
| 1546 | 0xca, 0x19, 0xbb, 0xa8, 0x4c, 0x4b, 0xf5, 0xc5, 0x65, 0x9a, 0x89, 0xd1, | 1545 | 0xb9, 0x86, 0x0f, 0xe6, 0x6e, 0xc0, 0x39, 0x96, 0x19, 0x4d, 0x6c, 0xc4, |
| 1547 | 0xff, 0xaf, 0x33, 0x7e, 0x51, 0x99, 0xe4, 0x25, 0x65, 0x16, 0x10, 0x13, | 1546 | 0x27, 0xe4, 0x08, 0x99, 0xc4, 0x72, 0xbc, 0xc6, 0x5c, 0xf2, 0x7b, 0x89, |
| 1548 | 0xbf, 0xef, 0xec, 0xbb, 0xa8, 0x4c, 0xed, 0x25, 0x65, 0x16, 0xd3, 0x1e, | 1547 | 0x56, 0xe6, 0x96, 0xab, 0xf0, 0xca, 0xa0, 0xf0, 0x8f, 0x16, 0x2c, 0x4c, |
| 1549 | 0x9f, 0x71, 0x0e, 0x5c, 0x54, 0x66, 0xcc, 0x7f, 0x71, 0x19, 0xd9, 0xe3, | 1548 | 0x28, 0x58, 0x1a, 0x5a, 0x85, 0x93, 0xc3, 0xcc, 0x29, 0x07, 0xe5, 0xbc, |
| 1550 | 0x58, 0xff, 0x17, 0x5b, 0xf4, 0x75, 0x25, 0x9f, 0xbb, 0x70, 0xbf, 0x58, | 1549 | 0xeb, 0x35, 0x58, 0x93, 0x3b, 0x0f, 0xc5, 0xe7, 0x31, 0x3e, 0x5f, 0x89, |
| 1551 | 0xfe, 0xf1, 0x4b, 0xfa, 0x1f, 0xb1, 0x64, 0xbe, 0x7d, 0xed, 0xe5, 0xf9, | 1550 | 0xa3, 0xc3, 0x01, 0x1c, 0x60, 0x0e, 0xf9, 0x0e, 0x31, 0x64, 0x28, 0xd1, |
| 1552 | 0x7e, 0xb8, 0x74, 0xff, 0x7b, 0x35, 0x17, 0x97, 0xbb, 0x22, 0x70, 0x69, | 1551 | 0x80, 0xd3, 0xcc, 0x95, 0x7e, 0x94, 0x88, 0xe0, 0x33, 0xfe, 0x3e, 0x92, |
| 1553 | 0x3b, 0x45, 0x79, 0x47, 0x2f, 0x69, 0xff, 0xe6, 0xca, 0x8b, 0xbf, 0xbf, | 1552 | 0x90, 0xf5, 0xef, 0x66, 0x5c, 0xc8, 0xfc, 0x18, 0x05, 0xbd, 0x33, 0x70, |
| 1554 | 0x5d, 0x51, 0xfc, 0x5e, 0xd6, 0xe9, 0xa1, 0x4b, 0x9e, 0xff, 0x7d, 0xc5, | 1553 | 0xbc, 0xed, 0x79, 0x52, 0xc9, 0x23, 0xfc, 0xb4, 0xe2, 0xf4, 0x70, 0x2b, |
| 1555 | 0xc5, 0xdf, 0x37, 0x54, 0x7e, 0x78, 0x3b, 0xb5, 0x97, 0xb4, 0xa3, 0xf4, | 1554 | 0xce, 0x0c, 0x2e, 0xc3, 0x99, 0xe1, 0x5f, 0xe1, 0x83, 0x41, 0x91, 0x57, |
| 1556 | 0xca, 0xbb, 0x38, 0x1e, 0x53, 0xad, 0xed, 0xed, 0x58, 0x7f, 0x43, 0x2a, | 1555 | 0xce, 0x2c, 0x3a, 0xef, 0x16, 0xb0, 0x5d, 0xe2, 0xd4, 0xf0, 0xbf, 0xa5, |
| 1557 | 0xbf, 0x89, 0xf6, 0x29, 0xb6, 0xf5, 0xe0, 0x0d, 0x6b, 0xf3, 0x6f, 0xcd, | 1556 | 0xed, 0x8f, 0xec, 0xe3, 0xab, 0xa4, 0xdd, 0xe7, 0xff, 0x48, 0xdb, 0xa2, |
| 1558 | 0xe0, 0xb1, 0xcb, 0xc2, 0x41, 0x7c, 0x1c, 0x6b, 0xdd, 0xbd, 0x34, 0x95, | 1557 | 0x4b, 0x89, 0xf5, 0x5e, 0x9c, 0x4c, 0x78, 0x99, 0x57, 0x8d, 0xdf, 0x50, |
| 1559 | 0x38, 0x69, 0xb9, 0xb6, 0x40, 0x8e, 0xe9, 0x57, 0xcc, 0x14, 0x0c, 0xf7, | 1558 | 0x84, 0xf1, 0xf9, 0xcc, 0x36, 0xb1, 0x3d, 0x53, 0x88, 0x17, 0xfb, 0xdc, |
| 1560 | 0xbc, 0xe5, 0x3a, 0x34, 0xe7, 0xdd, 0x3d, 0xbb, 0x58, 0x0a, 0xcf, 0xaa, | 1559 | 0xe4, 0x8a, 0x5f, 0x25, 0x7e, 0x74, 0xd2, 0x0e, 0x0b, 0x99, 0xbf, 0x79, |
| 1561 | 0x5d, 0xba, 0x55, 0x3a, 0x47, 0x67, 0x5d, 0x1f, 0x44, 0x72, 0x66, 0x7e, | 1560 | 0xa9, 0xe3, 0xf9, 0xc4, 0xfb, 0x55, 0xd4, 0x9f, 0x0f, 0xa7, 0x12, 0x7e, |
| 1562 | 0xaa, 0x8d, 0x23, 0x12, 0xde, 0x86, 0x75, 0xee, 0x59, 0x6b, 0xc5, 0xec, | 1561 | 0xbc, 0x9e, 0xa8, 0x8f, 0x67, 0x95, 0x46, 0x58, 0x15, 0xb9, 0xbc, 0xf2, |
| 1563 | 0x29, 0x9d, 0xd7, 0x5c, 0x03, 0x3d, 0x5f, 0xe6, 0x4d, 0xb2, 0x9e, 0x2b, | 1562 | 0x68, 0xa2, 0xc3, 0x91, 0xe9, 0xd5, 0x44, 0x9b, 0xbd, 0x95, 0x3a, 0xee, |
| 1564 | 0xe7, 0x19, 0x1c, 0xfa, 0xa0, 0xc4, 0xf9, 0x83, 0x8a, 0x3a, 0xe0, 0xae, | 1563 | 0x49, 0x7d, 0xdb, 0x39, 0x6f, 0xf8, 0x4a, 0xe2, 0x82, 0x2d, 0xe7, 0x88, |
| 1565 | 0x99, 0xae, 0xf6, 0x20, 0x9a, 0xe8, 0x54, 0x90, 0xaa, 0x32, 0xa3, 0xda, | 1564 | 0x9f, 0xa1, 0x4e, 0x4f, 0x26, 0xe2, 0x28, 0x62, 0x9e, 0x72, 0x2c, 0x31, |
| 1566 | 0xdb, 0x25, 0x4c, 0xf3, 0x4d, 0x6c, 0x51, 0x2a, 0x26, 0xfa, 0x15, 0xef, | 1565 | 0x8e, 0x61, 0xda, 0xe5, 0x3b, 0x7d, 0xc6, 0x89, 0x35, 0xd8, 0x84, 0xcf, |
| 1567 | 0x44, 0x11, 0xd3, 0x3c, 0x13, 0xb2, 0xb6, 0xd0, 0xc0, 0x32, 0x41, 0xb4, | 1566 | 0xd2, 0x85, 0x78, 0x8b, 0x7d, 0x94, 0x37, 0xb9, 0x31, 0xe1, 0xb4, 0xb7, |
| 1568 | 0x2c, 0xf1, 0xe2, 0x3b, 0x76, 0xad, 0xfb, 0x1e, 0xc7, 0xd6, 0x25, 0x15, | 1567 | 0x09, 0x9f, 0xf4, 0x29, 0xc8, 0xcc, 0xdd, 0x84, 0x8f, 0xf9, 0xec, 0x0d, |
| 1569 | 0x78, 0x20, 0xae, 0xa0, 0xeb, 0xaa, 0xc3, 0x78, 0x2b, 0x2f, 0xeb, 0x6c, | 1568 | 0x5e, 0x9f, 0x0b, 0x53, 0xc2, 0xc9, 0x67, 0x67, 0xfa, 0x54, 0x27, 0x07, |
| 1570 | 0x56, 0x7c, 0x94, 0x6d, 0x1e, 0xb2, 0x65, 0xbd, 0x74, 0x4b, 0x7c, 0xc4, | 1569 | 0xee, 0x6e, 0xde, 0x84, 0xd3, 0xe9, 0x8f, 0x71, 0x80, 0xb9, 0xf4, 0x63, |
| 1571 | 0x6d, 0xff, 0xf3, 0xe8, 0x73, 0xf7, 0xad, 0xba, 0x9d, 0xed, 0x99, 0x1e, | 1570 | 0xe6, 0x34, 0x44, 0xa6, 0x11, 0x70, 0x8d, 0x42, 0x9c, 0xe4, 0xf3, 0x5a, |
| 1572 | 0x67, 0x1b, 0x73, 0x8d, 0x82, 0xdd, 0x90, 0xaa, 0x63, 0xfd, 0xb7, 0x96, | 1571 | 0x59, 0xef, 0xd1, 0x72, 0xe5, 0x3f, 0xe2, 0x78, 0x1e, 0x61, 0x5b, 0x67, |
| 1573 | 0xac, 0xc7, 0x69, 0x96, 0x99, 0xb0, 0x1f, 0xc4, 0xfb, 0xf9, 0x20, 0xf2, | 1572 | 0xd3, 0xdf, 0x61, 0xbb, 0xc2, 0x39, 0xbf, 0xc3, 0x76, 0x7f, 0x85, 0x91, |
| 1574 | 0xf6, 0x4a, 0x7c, 0x37, 0x1f, 0x60, 0xce, 0xd7, 0x85, 0xef, 0xe4, 0x57, | 1573 | 0x49, 0x7d, 0x9c, 0x36, 0x65, 0x5c, 0x1b, 0x7c, 0x28, 0xf6, 0x73, 0x1c, |
| 1575 | 0xe3, 0xc5, 0x61, 0xf7, 0x7d, 0x29, 0x2c, 0xb3, 0x15, 0xac, 0x88, 0xae, | 1574 | 0x0f, 0xf3, 0xbb, 0x03, 0x13, 0x99, 0x9d, 0xfc, 0x7e, 0x0d, 0x87, 0x33, |
| 1576 | 0xc6, 0xb1, 0xd1, 0xd5, 0x38, 0x3c, 0x2c, 0xef, 0x0e, 0xcc, 0x25, 0x8f, | 1575 | 0x12, 0xdb, 0xf3, 0x67, 0x87, 0x64, 0x7d, 0x4b, 0xfc, 0x47, 0x9f, 0x5c, |
| 1577 | 0x2c, 0xda, 0x9b, 0x4a, 0x8c, 0x59, 0x66, 0xaf, 0xc2, 0xa1, 0xd1, 0x30, | 1576 | 0x97, 0x9b, 0x8e, 0x54, 0x7f, 0x59, 0x7c, 0x1a, 0xed, 0xe8, 0x3f, 0xcc, |
| 1578 | 0x73, 0x29, 0x03, 0x27, 0xf3, 0x21, 0x8c, 0xd8, 0x6d, 0x38, 0x91, 0x0f, | 1577 | 0x2b, 0xc7, 0x47, 0x61, 0x0b, 0xbb, 0x0e, 0xb8, 0x91, 0xea, 0x25, 0x9f, |
| 1579 | 0xe3, 0xeb, 0x76, 0x02, 0x67, 0xf9, 0xfd, 0xa0, 0x2d, 0x9c, 0xa5, 0x03, | 1578 | 0xed, 0xad, 0xc4, 0x53, 0xbb, 0x35, 0x3c, 0xb9, 0xfb, 0x5a, 0x6c, 0xd9, |
| 1580 | 0xd3, 0xf9, 0x6f, 0x32, 0xcf, 0x99, 0x87, 0x23, 0xdd, 0xcf, 0x30, 0x1c, | 1579 | 0x7d, 0x3d, 0xf6, 0xed, 0xae, 0x46, 0x92, 0xb9, 0xf2, 0x27, 0x4d, 0xb6, |
| 1581 | 0x1d, 0xe4, 0xd5, 0x85, 0x13, 0xa3, 0x5d, 0x38, 0x35, 0x7c, 0x2b, 0x4e, | 1580 | 0x3d, 0x87, 0x9f, 0x1d, 0xf4, 0x05, 0x2f, 0xbf, 0x5f, 0x0e, 0x8b, 0x9f, |
| 1582 | 0x8d, 0xfe, 0x18, 0x6f, 0x0d, 0x4b, 0x7f, 0xe5, 0xfc, 0xb7, 0xc8, 0xd5, | 1581 | 0x18, 0xb8, 0xd1, 0xf1, 0x97, 0x16, 0xdc, 0xe0, 0x7c, 0xc7, 0x30, 0x27, |
| 1583 | 0x29, 0x77, 0x35, 0xa6, 0x46, 0xff, 0x18, 0xd9, 0xef, 0x3a, 0x47, 0x56, | 1582 | 0xd3, 0x19, 0xde, 0x90, 0xdd, 0x14, 0x7e, 0x28, 0x3b, 0x1d, 0x5b, 0xfb, |
| 1584 | 0x8b, 0xdc, 0x67, 0x7e, 0x87, 0x6c, 0xd1, 0xa5, 0x60, 0xbf, 0x1f, 0xc7, | 1583 | 0xab, 0xd0, 0xbf, 0xbb, 0x32, 0x5e, 0xc9, 0x7e, 0x56, 0xce, 0xb3, 0x31, |
| 1585 | 0x6c, 0x3f, 0x8e, 0xda, 0x53, 0x57, 0x56, 0x61, 0xea, 0x7a, 0x22, 0x1d, | 1584 | 0xc4, 0xba, 0x66, 0x63, 0x4f, 0x78, 0x4d, 0xf6, 0x79, 0xb4, 0x65, 0xfd, |
| 1586 | 0xb6, 0xe7, 0x2b, 0xf1, 0x5c, 0x56, 0xd6, 0xd8, 0x3e, 0x86, 0x64, 0x70, | 1585 | 0xd8, 0xdc, 0x1f, 0x60, 0x5f, 0xb2, 0x86, 0xef, 0x3e, 0xf1, 0x20, 0x6c, |
| 1587 | 0x23, 0xb6, 0x4e, 0x56, 0xe2, 0x3b, 0x59, 0x3f, 0x75, 0x7c, 0x3d, 0x92, | 1586 | 0xfb, 0x42, 0xd3, 0x11, 0xc6, 0xb7, 0x1f, 0xa3, 0x9d, 0xcf, 0x92, 0xfd, |
| 1588 | 0xf5, 0xab, 0xa9, 0xbf, 0x00, 0x5e, 0xb2, 0x43, 0x78, 0xd9, 0x6e, 0x4d, | 1587 | 0x1b, 0xc8, 0xa9, 0x0a, 0xe2, 0xde, 0xa8, 0x8d, 0x53, 0xe1, 0x71, 0xdc, |
| 1589 | 0x15, 0x94, 0x76, 0x58, 0x2e, 0xfe, 0x07, 0xa8, 0xef, 0x0d, 0x6e, 0x9f, | 1588 | 0xc1, 0xf6, 0x76, 0xf6, 0x97, 0x51, 0xa6, 0xe2, 0x78, 0x21, 0xef, 0x2d, |
| 1590 | 0xbe, 0x63, 0x77, 0x3b, 0x5b, 0xa9, 0xe3, 0xfe, 0xcc, 0xe7, 0xdd, 0xb3, | 1589 | 0x0d, 0x6f, 0xc4, 0xae, 0x31, 0x59, 0x03, 0x3c, 0x81, 0xa5, 0xe4, 0x2c, |
| 1591 | 0xdb, 0x2f, 0xda, 0xd3, 0x8e, 0xbc, 0x93, 0xf1, 0x14, 0x75, 0x7a, 0xcc, | 1590 | 0x15, 0x73, 0x7f, 0x56, 0x82, 0x32, 0xcd, 0x7d, 0xbe, 0x59, 0xec, 0x2f, |
| 1592 | 0x4e, 0x91, 0xdb, 0x35, 0x71, 0x8e, 0xa6, 0x30, 0x4a, 0xbb, 0x3c, 0x99, | 1591 | 0x4e, 0xfb, 0x13, 0xac, 0x5c, 0x87, 0xb5, 0xce, 0xd9, 0xc2, 0x76, 0xbc, |
| 1593 | 0xd5, 0x8f, 0xae, 0xc5, 0x26, 0x9c, 0xcd, 0x55, 0xe2, 0x35, 0xb6, 0x51, | 1592 | 0x94, 0x10, 0x9c, 0x5e, 0x8d, 0x83, 0x89, 0x75, 0xd8, 0x92, 0x92, 0x7d, |
| 1594 | 0xb7, 0xd8, 0x8b, 0xe3, 0xae, 0xbc, 0x4d, 0x78, 0x3f, 0xab, 0x30, 0xde, | 1593 | 0xc0, 0xe5, 0xa8, 0xc9, 0xfe, 0x55, 0x78, 0x3d, 0xe3, 0xa9, 0x2b, 0xfb, |
| 1595 | 0x6e, 0xc2, 0x7b, 0x7c, 0xf6, 0x0a, 0x3f, 0x9f, 0x8e, 0xb3, 0x87, 0xa5, | 1594 | 0x3f, 0xb0, 0x38, 0x9b, 0xa6, 0x5c, 0xc3, 0xe1, 0xb5, 0xd9, 0x7d, 0xe1, |
| 1596 | 0x67, 0xa7, 0xc8, 0xcf, 0x65, 0xcd, 0xa8, 0xb7, 0x63, 0x13, 0x4e, 0xe4, | 1595 | 0x07, 0xb3, 0xad, 0x98, 0x95, 0x95, 0xf5, 0xb4, 0x36, 0xe2, 0xbb, 0xac, |
| 1597 | 0xde, 0x23, 0xa7, 0x75, 0xf0, 0x45, 0x63, 0x36, 0x12, 0xb3, 0xc9, 0x9b, | 1596 | 0xa7, 0x4d, 0x60, 0x61, 0xf6, 0x0c, 0x16, 0x65, 0xdf, 0x62, 0x2c, 0x16, |
| 1598 | 0xf4, 0x4a, 0x1c, 0xe3, 0xf3, 0x85, 0xc4, 0xdf, 0xe2, 0xfa, 0xd9, 0x26, | 1597 | 0xdc, 0x90, 0x75, 0xb6, 0x5f, 0x31, 0x39, 0x91, 0x7d, 0xc3, 0xbf, 0xc4, |
| 1599 | 0xbc, 0xcb, 0xf1, 0x3c, 0x40, 0x59, 0xef, 0xe4, 0xfe, 0x96, 0x72, 0x97, | 1598 | 0xd6, 0xbd, 0x71, 0xc6, 0xc2, 0x3c, 0x46, 0xd5, 0x6b, 0x07, 0x04, 0x5f, |
| 1600 | 0x22, 0x1f, 0xff, 0x5b, 0xca, 0xfd, 0x31, 0xc6, 0x4b, 0xfa, 0x38, 0x61, | 1599 | 0xc6, 0x3c, 0x4e, 0x2c, 0xe8, 0x4b, 0xdd, 0x43, 0x7b, 0x54, 0xc9, 0xf3, |
| 1601 | 0xc8, 0xb8, 0xbe, 0x31, 0x0b, 0xd5, 0x21, 0x8e, 0xe3, 0x9b, 0xfc, 0xbf, | 1600 | 0x25, 0xce, 0xac, 0xa3, 0x2f, 0x77, 0x92, 0x9f, 0x4b, 0xfc, 0xbb, 0x6b, |
| 1602 | 0x01, 0xc7, 0xf3, 0xff, 0x9b, 0xff, 0xbf, 0x8b, 0x03, 0x79, 0x59, 0xaf, | 1601 | 0xf2, 0xbe, 0xf0, 0x3a, 0x89, 0x7d, 0x3a, 0x8e, 0x66, 0x9c, 0xbd, 0x0c, |
| 1603 | 0x9e, 0x19, 0x4b, 0xc5, 0x7f, 0xca, 0x1c, 0x64, 0x0e, 0x32, 0x83, 0xb5, | 1602 | 0xdd, 0x6b, 0xdc, 0xc1, 0x67, 0x52, 0xff, 0x2f, 0x91, 0xdc, 0xbb, 0xca, |
| 1604 | 0xa9, 0xd9, 0xb4, 0xa3, 0xbf, 0xbe, 0xb6, 0x0e, 0xef, 0xc6, 0x2d, 0xec, | 1603 | 0xde, 0xe9, 0xac, 0x19, 0x29, 0x38, 0x1e, 0x62, 0x5f, 0xa4, 0x91, 0x4b, |
| 1605 | 0xd8, 0xe7, 0x45, 0x86, 0xb8, 0xbb, 0x63, 0xa0, 0x01, 0x4f, 0xec, 0x0c, | 1604 | 0xf7, 0xcb, 0x59, 0xce, 0x75, 0x72, 0x96, 0xd3, 0x72, 0x19, 0x6d, 0xf6, |
| 1606 | 0xe2, 0xf1, 0x9d, 0x97, 0x61, 0xcb, 0xce, 0x2b, 0xb0, 0x67, 0x67, 0x13, | 1605 | 0x96, 0x14, 0x1e, 0x2c, 0x45, 0x00, 0xcb, 0x47, 0x0b, 0x10, 0x3b, 0x58, |
| 1607 | 0xd2, 0x3b, 0x1d, 0xe7, 0xfd, 0xc5, 0x8e, 0xb3, 0x88, 0xd7, 0x23, 0xf4, | 1606 | 0x8c, 0xdb, 0x77, 0xb7, 0xd3, 0x96, 0x2d, 0xda, 0xaf, 0x61, 0xae, 0x55, |
| 1608 | 0x05, 0x3f, 0xff, 0xbf, 0x10, 0x17, 0x3f, 0xd1, 0x71, 0x95, 0xeb, 0x2f, | 1607 | 0x8a, 0xb1, 0x84, 0xf7, 0x1e, 0xe8, 0x0f, 0xb6, 0x02, 0xa1, 0x13, 0xa7, |
| 1609 | 0x9d, 0xb8, 0xd2, 0xfd, 0x9f, 0xc4, 0xa2, 0xfc, 0xc6, 0xf8, 0xfa, 0xc2, | 1608 | 0x5d, 0xc5, 0xb8, 0x9f, 0xb1, 0x23, 0x9d, 0x5e, 0x8e, 0xd8, 0xfe, 0xe3, |
| 1610 | 0xa6, 0xf8, 0x7d, 0x85, 0x39, 0xd8, 0x3a, 0xd8, 0x88, 0xc1, 0x9d, 0x0d, | 1609 | 0xb0, 0xd2, 0xb4, 0xc9, 0x3d, 0xc4, 0x99, 0xbd, 0x6e, 0xa8, 0xd1, 0x5f, |
| 1611 | 0xa9, 0x06, 0xb6, 0xb3, 0xea, 0x5a, 0xe1, 0x76, 0x8e, 0x63, 0xb4, 0xf7, | 1610 | 0x61, 0xdf, 0xb0, 0x8a, 0xf2, 0x3d, 0x2f, 0xd8, 0x01, 0x43, 0x31, 0xce, |
| 1612 | 0xc7, 0xd7, 0x16, 0x9e, 0x41, 0x77, 0x21, 0x84, 0xbe, 0xc1, 0x30, 0xdb, | 1611 | 0x85, 0xb2, 0xe4, 0x40, 0x6e, 0x94, 0x26, 0x5b, 0x30, 0x4a, 0xac, 0xf1, |
| 1613 | 0x92, 0xbd, 0x5c, 0xef, 0xd1, 0x7b, 0xe1, 0x38, 0xd3, 0x8b, 0x0f, 0xe2, | 1612 | 0x25, 0x63, 0xc8, 0x64, 0xda, 0x90, 0x26, 0x96, 0xa4, 0xc9, 0x9b, 0x4a, |
| 1614 | 0xae, 0xc2, 0x37, 0xc9, 0x1b, 0x43, 0x48, 0x0f, 0xae, 0x47, 0x66, 0xb2, | 1613 | 0x92, 0x26, 0x63, 0x79, 0x1d, 0x76, 0xd1, 0x5f, 0x0a, 0x98, 0xcb, 0x6f, |
| 1615 | 0x22, 0xe5, 0x37, 0x1d, 0xbc, 0x14, 0x9f, 0xc2, 0xed, 0x94, 0xf7, 0xe8, | 1614 | 0xcb, 0xdc, 0x0a, 0x6b, 0xf8, 0x4e, 0x6c, 0x1f, 0x6e, 0xe3, 0x87, 0xfc, |
| 1616 | 0x60, 0x2d, 0xfb, 0x54, 0x9d, 0xaa, 0x34, 0x25, 0x86, 0x3f, 0xc8, 0x18, | 1615 | 0x71, 0xf8, 0xdb, 0x58, 0x38, 0x7a, 0x02, 0x3d, 0x99, 0x38, 0xed, 0xf1, |
| 1617 | 0x25, 0xfc, 0xe2, 0x28, 0x56, 0x30, 0xbf, 0xaa, 0x5f, 0xa2, 0xcf, 0x42, | 1616 | 0x63, 0x6c, 0x4f, 0x1f, 0xc3, 0x53, 0x7d, 0x5d, 0xcc, 0x11, 0x8e, 0xe1, |
| 1618 | 0x6d, 0xd0, 0x7b, 0xa6, 0x43, 0xec, 0x2f, 0x45, 0xfb, 0x93, 0x7d, 0xf5, | 1617 | 0x49, 0x5e, 0xf7, 0xf5, 0x19, 0x9d, 0x01, 0xf5, 0x18, 0x52, 0xe9, 0x4d, |
| 1619 | 0x75, 0xb8, 0xdb, 0x3d, 0xe7, 0xdd, 0x83, 0xe7, 0x6d, 0xc1, 0x9d, 0x35, | 1618 | 0xb8, 0xb3, 0x5f, 0x61, 0x0e, 0xb7, 0x09, 0x77, 0xec, 0xa7, 0x2d, 0x3e, |
| 1620 | 0xd8, 0x6f, 0xaf, 0x63, 0xce, 0x25, 0xf1, 0x7a, 0x25, 0x9a, 0x0b, 0x7f, | 1619 | 0xd1, 0x81, 0xd6, 0xd1, 0xd7, 0x90, 0xc8, 0xbc, 0xc4, 0xfc, 0x6a, 0x23, |
| 1621 | 0x17, 0xbf, 0xa7, 0xb0, 0x9a, 0x7c, 0xf6, 0x5f, 0x70, 0x53, 0x21, 0xc7, | 1620 | 0x7a, 0x52, 0x1b, 0xc8, 0xbd, 0x9e, 0x67, 0x3b, 0x47, 0xe8, 0xe7, 0x9d, |
| 1622 | 0x7e, 0x8d, 0xc6, 0xef, 0x2e, 0xec, 0x89, 0xdf, 0x5b, 0xe8, 0xc2, 0x02, | 1621 | 0x1c, 0xe3, 0xe3, 0xfc, 0x5c, 0xc2, 0x70, 0x4d, 0x57, 0xf2, 0x58, 0x4d, |
| 1623 | 0x37, 0xa7, 0x64, 0xfe, 0x55, 0x90, 0x38, 0x77, 0x9c, 0x5c, 0xf8, 0x14, | 1622 | 0xbf, 0x4f, 0x49, 0xee, 0xb0, 0x8e, 0x38, 0x71, 0x6f, 0x29, 0x8a, 0x45, |
| 1624 | 0x96, 0x17, 0x5e, 0xc3, 0xcd, 0x05, 0xc1, 0x0d, 0x89, 0x7f, 0x2f, 0x7a, | 1623 | 0xbf, 0xf9, 0x35, 0x69, 0x99, 0x0b, 0xb1, 0x7d, 0x59, 0x9b, 0x76, 0xa3, |
| 1625 | 0x51, 0x2d, 0x71, 0xef, 0x0b, 0xd8, 0xba, 0x3b, 0x85, 0xbe, 0xdd, 0x65, | 1624 | 0x28, 0x29, 0xeb, 0xd1, 0xe3, 0xc1, 0x22, 0x72, 0x00, 0x6f, 0x52, 0x74, |
| 1626 | 0x8c, 0x6a, 0x0d, 0xee, 0x13, 0x7c, 0x99, 0xf4, 0x95, 0x62, 0xd4, 0xa7, | 1625 | 0xd8, 0x6e, 0x77, 0xa7, 0x04, 0x4b, 0x72, 0xdc, 0xfc, 0xe5, 0xcc, 0xaf, |
| 1627 | 0x68, 0x8f, 0x2a, 0x63, 0xa3, 0xac, 0xd3, 0xaf, 0xa3, 0x2f, 0x6f, 0x24, | 1626 | 0xb0, 0x75, 0x70, 0x1a, 0x16, 0xf5, 0x55, 0x23, 0xee, 0xb7, 0xed, 0xe7, |
| 1628 | 0x66, 0xca, 0x7a, 0xfc, 0x27, 0x4b, 0xf7, 0x25, 0xd6, 0xcb, 0x5a, 0xbc, | 1627 | 0xe8, 0x6b, 0x09, 0xe6, 0x58, 0xbb, 0xfa, 0x63, 0xc4, 0x94, 0x12, 0xe4, |
| 1629 | 0x86, 0x43, 0x79, 0x77, 0x4f, 0x5b, 0xf3, 0xeb, 0xb7, 0xf3, 0x99, 0xd4, | 1628 | 0x72, 0x3d, 0xd1, 0x4d, 0xd0, 0xd4, 0xaf, 0xd8, 0x23, 0x99, 0xc5, 0x79, |
| 1630 | 0xff, 0x02, 0xd2, 0xbb, 0x57, 0x3b, 0x8f, 0x66, 0x8a, 0xfb, 0x66, 0x47, | 1629 | 0x13, 0xee, 0x3a, 0x7e, 0x43, 0x29, 0xce, 0x97, 0xe4, 0xd6, 0xc5, 0xff, |
| 1631 | 0xa2, 0x6c, 0x6b, 0x9c, 0xb1, 0x7d, 0x2f, 0xfc, 0xb3, 0x38, 0xb6, 0x89, | 1630 | 0xfc, 0x12, 0xb7, 0xf9, 0xd7, 0x95, 0xbf, 0xff, 0xdf, 0x58, 0x7e, 0x62, |
| 1632 | 0x01, 0x58, 0x1e, 0xbd, 0xdb, 0xd9, 0x92, 0xc1, 0xbd, 0xb3, 0x10, 0xc6, | 1631 | 0xca, 0xd9, 0xb5, 0xfc, 0x7b, 0x39, 0x32, 0xd6, 0xeb, 0xe5, 0xdc, 0x9a, |
| 1633 | 0xca, 0x89, 0x0a, 0x24, 0xf7, 0x57, 0xe3, 0xb6, 0x9d, 0x3d, 0xb4, 0x65, | 1632 | 0x25, 0x7c, 0x49, 0xce, 0xdc, 0x1e, 0x4f, 0x14, 0x30, 0x4e, 0xaa, 0x0b, |
| 1634 | 0x8b, 0xf6, 0xab, 0x1b, 0x77, 0x2b, 0xd5, 0xb8, 0x99, 0xf7, 0x3e, 0x3d, | 1633 | 0x3c, 0x50, 0xfd, 0x1e, 0x14, 0x32, 0x9e, 0x55, 0x61, 0xb3, 0xdf, 0xc6, |
| 1635 | 0x28, 0x6b, 0x58, 0xd1, 0xa3, 0x27, 0x3c, 0xd5, 0xb8, 0x6b, 0xaf, 0x1f, | 1634 | 0x62, 0xb3, 0x00, 0x87, 0x1b, 0x62, 0x72, 0xce, 0xa2, 0xdd, 0xe3, 0xf0, |
| 1636 | 0xb9, 0xdc, 0x4a, 0x24, 0xf7, 0x1e, 0x81, 0x95, 0xa3, 0x4d, 0xee, 0x22, | 1635 | 0xd1, 0xd5, 0xf7, 0xfc, 0xe1, 0xba, 0xf5, 0x26, 0x72, 0x37, 0x39, 0x5f, |
| 1637 | 0xce, 0x30, 0xcd, 0x51, 0xcd, 0x1f, 0x63, 0xcf, 0xa8, 0x8a, 0xba, 0x5d, | 1636 | 0xd0, 0x86, 0x53, 0x15, 0xf2, 0xae, 0xd0, 0x26, 0xe7, 0xdc, 0x59, 0x51, |
| 1638 | 0xb2, 0xfe, 0xa8, 0xe8, 0xa7, 0xa3, 0x05, 0xa4, 0x47, 0xbd, 0x98, 0x95, | 1637 | 0xad, 0xac, 0xa3, 0xe9, 0x38, 0x61, 0xd4, 0xeb, 0x95, 0x2a, 0xe3, 0xb9, |
| 1639 | 0xee, 0xc4, 0x04, 0xb1, 0x26, 0x90, 0x4e, 0x22, 0x9f, 0xef, 0x46, 0x8e, | 1638 | 0xf2, 0xae, 0x6d, 0xf9, 0xa3, 0x8c, 0xf5, 0x72, 0x86, 0xe2, 0x5f, 0xda, |
| 1640 | 0x58, 0x92, 0x1b, 0x0d, 0xa0, 0x26, 0x6d, 0x20, 0xa0, 0xc7, 0xb0, 0x83, | 1639 | 0xa7, 0x58, 0x83, 0xed, 0x4f, 0x34, 0x63, 0x62, 0x95, 0xc4, 0xff, 0xff, |
| 1641 | 0xfe, 0x52, 0x91, 0xd6, 0xb1, 0x2d, 0x7f, 0x23, 0xac, 0xd1, 0x4f, 0x60, | 1640 | 0xe6, 0xcb, 0x73, 0xba, 0x6d, 0xa9, 0x1f, 0x96, 0xca, 0xb9, 0x24, 0x69, |
| 1642 | 0xfb, 0x68, 0x37, 0x2f, 0x13, 0x7d, 0xa3, 0x9f, 0xc7, 0xb2, 0x89, 0xa3, | 1641 | 0x7b, 0x3b, 0xf3, 0x27, 0x8f, 0x11, 0xc6, 0xbb, 0xc2, 0xd2, 0x9c, 0xfd, |
| 1643 | 0xe8, 0xcf, 0xa7, 0x68, 0x8f, 0xef, 0x61, 0x7b, 0xee, 0x30, 0x9e, 0xc8, | 1642 | 0xa4, 0x1c, 0xa7, 0x28, 0x34, 0xce, 0x4f, 0xbe, 0x3b, 0xf2, 0xd7, 0xa5, |
| 1644 | 0x6e, 0xc6, 0xd9, 0xc5, 0x87, 0xf1, 0x38, 0x3f, 0x67, 0xb3, 0xfa, 0xc6, | 1643 | 0xc2, 0x0f, 0xb7, 0xa5, 0x36, 0x91, 0x9b, 0x8b, 0x3c, 0xbf, 0xb7, 0xd7, |
| 1645 | 0xb0, 0x7a, 0x18, 0x99, 0xdc, 0x26, 0x7c, 0x62, 0x50, 0xc1, 0x4b, 0xb4, | 1644 | 0xf8, 0x2b, 0x59, 0xf6, 0xee, 0xc9, 0xf6, 0xc4, 0x16, 0xe4, 0x4c, 0x8e, |
| 1646 | 0xf5, 0xdb, 0xf7, 0xd2, 0x16, 0x1f, 0xdb, 0x80, 0xae, 0x89, 0xef, 0xc2, | 1645 | 0xdc, 0x93, 0x3a, 0xa2, 0xb3, 0xa9, 0x75, 0x5c, 0xcc, 0x85, 0x6f, 0xc0, |
| 1647 | 0xce, 0x3f, 0x8f, 0x1d, 0xb9, 0x07, 0xd1, 0x9f, 0x59, 0xcf, 0xfc, 0xff, | 1646 | 0xa3, 0xf4, 0xc1, 0x99, 0xc6, 0xeb, 0x76, 0x97, 0x9c, 0x9f, 0xa9, 0xd5, |
| 1648 | 0x19, 0xca, 0x39, 0x48, 0x3f, 0xdf, 0xc8, 0x31, 0x3e, 0xcc, 0xeb, 0xc2, | 1647 | 0xa6, 0xf4, 0xf5, 0x0b, 0x47, 0x96, 0x42, 0xca, 0xd2, 0x9f, 0x92, 0xb3, |
| 1649 | 0x1a, 0xe3, 0x85, 0x35, 0x39, 0xfa, 0x7d, 0x46, 0x72, 0xcf, 0x75, 0xc4, | 1648 | 0xa8, 0x9f, 0xd9, 0xb5, 0x55, 0xf2, 0xfc, 0xc2, 0x64, 0xfb, 0x35, 0xce, |
| 1650 | 0x89, 0x27, 0x6b, 0x65, 0x5d, 0xb2, 0x4a, 0x9f, 0xb9, 0x56, 0x2f, 0xb6, | 1649 | 0xd9, 0xbe, 0x7d, 0xa9, 0xbc, 0xdc, 0xb2, 0xde, 0xea, 0xcf, 0xf7, 0x55, |
| 1651 | 0x1f, 0x76, 0x73, 0xed, 0xaa, 0xb4, 0xe4, 0x75, 0x53, 0x91, 0x2a, 0x72, | 1650 | 0x77, 0x79, 0x3c, 0x22, 0x5b, 0xbc, 0xf4, 0x4a, 0x99, 0xe1, 0xcb, 0x9f, |
| 1652 | 0x0c, 0x7f, 0x5a, 0x74, 0xd8, 0xe3, 0xf4, 0x66, 0x04, 0x4b, 0x64, 0x3e, | 1651 | 0x59, 0x9d, 0xe1, 0xd4, 0xc9, 0xf7, 0x29, 0x32, 0x6e, 0x62, 0x9e, 0x7a, |
| 1653 | 0x34, 0xbc, 0x90, 0xff, 0x31, 0xb6, 0x0e, 0xcf, 0xc6, 0xf2, 0x6c, 0x1b, | 1652 | 0xf5, 0x18, 0xb5, 0x29, 0x63, 0x92, 0x3a, 0x32, 0x2e, 0x6d, 0xd2, 0x0e, |
| 1654 | 0x39, 0xa5, 0xe3, 0x7c, 0x85, 0xbe, 0x66, 0x93, 0xeb, 0xec, 0x18, 0x4c, | 1653 | 0x4a, 0xcb, 0x50, 0x2c, 0x75, 0x84, 0xbb, 0x6a, 0x0e, 0x07, 0x2f, 0x17, |
| 1655 | 0x12, 0x53, 0x66, 0x23, 0x39, 0xa7, 0xc8, 0x4f, 0xc2, 0x69, 0x69, 0xcb, | 1654 | 0x5e, 0x2e, 0xb6, 0x51, 0x66, 0xdb, 0xef, 0x39, 0x31, 0x53, 0xda, 0xe1, |
| 1656 | 0x57, 0xda, 0xab, 0x9b, 0xba, 0x32, 0xcc, 0x7b, 0x75, 0x69, 0x99, 0xb7, | 1655 | 0x38, 0xc6, 0x56, 0xd1, 0xce, 0xed, 0x2e, 0xe2, 0xa7, 0xfd, 0x5e, 0x73, |
| 1657 | 0x88, 0xa1, 0xb9, 0xfb, 0x69, 0x8e, 0xf3, 0x52, 0xb4, 0xcc, 0x95, 0xa6, | 1656 | 0x00, 0x5b, 0x13, 0xa2, 0x6b, 0x23, 0x70, 0x88, 0xd8, 0xb1, 0xd9, 0xe1, |
| 1658 | 0xae, 0xac, 0xc3, 0x6c, 0x59, 0x77, 0x4d, 0xc8, 0x39, 0xdf, 0x6f, 0xb5, | 1657 | 0x1b, 0x1e, 0x74, 0xa7, 0xf3, 0xfb, 0xa3, 0x85, 0x72, 0xf6, 0x36, 0x20, |
| 1659 | 0x2c, 0xa7, 0xaf, 0x7e, 0x01, 0x03, 0xe3, 0xe5, 0x77, 0x23, 0xff, 0xb3, | 1658 | 0x3a, 0xef, 0x36, 0xc9, 0xb3, 0xb4, 0x85, 0xba, 0x9b, 0x5c, 0x69, 0x3d, |
| 1660 | 0xe4, 0xdd, 0xf5, 0x9f, 0x2c, 0xaf, 0xbc, 0x07, 0x2a, 0xe7, 0x8c, 0xcb, | 1659 | 0xfe, 0x99, 0xf3, 0x2b, 0xe7, 0x8f, 0x73, 0x7b, 0x95, 0x71, 0xda, 0x51, |
| 1661 | 0xef, 0x50, 0x8a, 0x2e, 0xaf, 0x90, 0xfd, 0x03, 0xab, 0xb8, 0x4f, 0x0a, | 1660 | 0x2e, 0x5e, 0x81, 0xf1, 0x9d, 0x3c, 0x69, 0xf2, 0x5c, 0x66, 0x77, 0xe6, |
| 1662 | 0x1c, 0xb1, 0x2b, 0x18, 0x87, 0xd5, 0xa5, 0x64, 0x63, 0x21, 0x1f, 0x2a, | 1661 | 0x9f, 0xed, 0x71, 0xe7, 0x5c, 0xe6, 0xe5, 0x77, 0x3a, 0xd2, 0x9a, 0x6d, |
| 1663 | 0x19, 0x2f, 0x1b, 0xd1, 0x47, 0xbe, 0x7a, 0x93, 0x51, 0x81, 0x03, 0x6d, | 1662 | 0x1f, 0xe0, 0xb3, 0xcb, 0x67, 0x34, 0x19, 0xd3, 0x0d, 0x39, 0xcb, 0xf9, |
| 1664 | 0x49, 0x39, 0xcf, 0xd7, 0xe3, 0x73, 0x79, 0xea, 0xa6, 0x3f, 0xff, 0x6d, | 1663 | 0x4f, 0x9c, 0xbb, 0xa9, 0x65, 0xc7, 0x2b, 0x72, 0x67, 0x96, 0x63, 0xea, |
| 1665 | 0x9e, 0xba, 0x09, 0xe9, 0x8c, 0x9c, 0x63, 0xeb, 0xc6, 0x4b, 0xf5, 0xf2, | 1664 | 0x42, 0x23, 0x8f, 0xab, 0x41, 0xcb, 0x72, 0x70, 0xf5, 0x0e, 0x67, 0x0f, |
| 1666 | 0x5e, 0xe7, 0x26, 0xf7, 0x9c, 0x70, 0xd5, 0x42, 0x62, 0x46, 0x5c, 0xc3, | 1665 | 0x3e, 0x8d, 0x60, 0x6b, 0x1b, 0x2c, 0xbb, 0xd8, 0xc8, 0xe3, 0x80, 0x61, |
| 1667 | 0x51, 0xbd, 0x55, 0x6b, 0x50, 0x23, 0x06, 0x94, 0xd7, 0x1d, 0x2b, 0x94, | 1666 | 0xce, 0x51, 0xba, 0x30, 0x3b, 0x5c, 0x2c, 0x1c, 0x3b, 0xe8, 0x8e, 0x06, |
| 1668 | 0x44, 0xff, 0xa4, 0x9c, 0xd5, 0xfb, 0xa8, 0x3d, 0x84, 0xb5, 0xd8, 0xfe, | 1667 | 0xb5, 0x0f, 0x10, 0xaa, 0x3b, 0xe6, 0xec, 0x95, 0x0a, 0x36, 0x18, 0x58, |
| 1669 | 0x58, 0x07, 0x8e, 0xaf, 0x96, 0xb5, 0xbc, 0x9f, 0x95, 0xde, 0xdb, 0x93, | 1668 | 0x9f, 0x21, 0xdf, 0x1e, 0x93, 0x77, 0x1d, 0xe5, 0xda, 0x69, 0x9f, 0xd7, |
| 1670 | 0x3e, 0x46, 0xea, 0xe4, 0x0c, 0xaa, 0xc8, 0xde, 0x9e, 0x51, 0x19, 0x7b, | 1669 | 0x82, 0xa5, 0xed, 0xc4, 0x52, 0xeb, 0xcf, 0x3d, 0x4e, 0x7b, 0xc1, 0xf6, |
| 1671 | 0xe2, 0x78, 0x3d, 0xe8, 0x8e, 0x37, 0x56, 0x3e, 0x97, 0x59, 0xa9, 0x2f, | 1670 | 0x61, 0x25, 0xd8, 0xba, 0x51, 0xc9, 0xb7, 0xe7, 0xfb, 0x92, 0xf6, 0xea, |
| 1672 | 0x2f, 0x95, 0x5f, 0x50, 0x27, 0xbc, 0x64, 0x5b, 0x66, 0x13, 0xb9, 0xb6, | 1671 | 0x58, 0xbf, 0x7a, 0xf2, 0xfd, 0x42, 0x83, 0x6d, 0x5c, 0xbd, 0x9f, 0x3c, |
| 1673 | 0xf4, 0xe7, 0xd7, 0xce, 0xda, 0x50, 0x03, 0xcb, 0x8e, 0x95, 0x9e, 0x8b, | 1672 | 0x3d, 0x2e, 0x7b, 0x51, 0x87, 0x27, 0x39, 0xe1, 0xb1, 0x3f, 0xd8, 0x8b, |
| 1674 | 0xad, 0x45, 0x8c, 0x24, 0xe4, 0x9e, 0xd4, 0x11, 0x9d, 0xcd, 0xac, 0xe3, | 1673 | 0xfa, 0xd2, 0x3e, 0x63, 0xec, 0xb3, 0xb5, 0x58, 0x89, 0x91, 0x31, 0x74, |
| 1675 | 0x41, 0xbd, 0x7e, 0x25, 0x1e, 0xa2, 0x8f, 0xcf, 0xd7, 0x5f, 0x76, 0x36, | 1674 | 0xa1, 0x30, 0x1c, 0xaa, 0x7b, 0x19, 0xd0, 0xdd, 0xd1, 0x50, 0x60, 0xd8, |
| 1676 | 0xcb, 0x39, 0xcd, 0x85, 0xc1, 0x19, 0x6d, 0x2d, 0x75, 0xfb, 0x52, 0xc9, | 1675 | 0xd9, 0xd3, 0x35, 0xbd, 0x8b, 0x9c, 0xfa, 0xd5, 0xe4, 0xc5, 0x7f, 0x5c, |
| 1677 | 0xbe, 0x0c, 0x66, 0xe4, 0xbd, 0x81, 0xb3, 0xce, 0xc2, 0x46, 0x79, 0x7e, | 1676 | 0x27, 0x25, 0x86, 0xd1, 0x56, 0xaf, 0xc4, 0xe6, 0x17, 0xb3, 0x9d, 0xba, |
| 1678 | 0x5b, 0x6d, 0x51, 0x7e, 0xb3, 0x7b, 0x0e, 0x7b, 0x4f, 0xa6, 0xdc, 0x6f, | 1677 | 0x30, 0xf4, 0x82, 0x68, 0x5e, 0x47, 0xa1, 0xba, 0x0f, 0x38, 0x9f, 0x47, |
| 1679 | 0x39, 0xe3, 0x1e, 0x2a, 0xb7, 0x15, 0xbb, 0x30, 0x1e, 0xe9, 0xdb, 0xd7, | 1678 | 0x9b, 0x43, 0x81, 0x21, 0xe7, 0x8c, 0xa7, 0xe8, 0xc5, 0xf4, 0xe6, 0xe6, |
| 1680 | 0x6a, 0x2f, 0xee, 0xf3, 0x9d, 0xb3, 0xca, 0xef, 0x17, 0xcc, 0x73, 0xeb, | 1679 | 0x5e, 0x17, 0xbe, 0xcd, 0x7c, 0x32, 0x8e, 0x91, 0x84, 0x97, 0x63, 0xa9, |
| 1681 | 0x94, 0xdb, 0x94, 0x3e, 0x6e, 0xc2, 0xe3, 0x93, 0x97, 0x8e, 0xf1, 0xee, | 1680 | 0xd7, 0xb6, 0xa3, 0x82, 0x36, 0x8e, 0xd8, 0xe6, 0x06, 0xe2, 0x77, 0x02, |
| 1682 | 0x19, 0x63, 0x92, 0x3a, 0x32, 0xae, 0x60, 0xc9, 0x0e, 0x36, 0xb2, 0x8c, | 1681 | 0x31, 0xd7, 0x8d, 0xe5, 0x88, 0x93, 0x40, 0xbb, 0x8c, 0x38, 0x39, 0x51, |
| 1683 | 0xd4, 0x91, 0x75, 0x82, 0xa0, 0x9b, 0x3f, 0xd4, 0xed, 0x16, 0x79, 0x22, | 1682 | 0x7d, 0xdd, 0x0e, 0xda, 0x6f, 0xda, 0x1f, 0x0c, 0x58, 0x88, 0xe3, 0xc5, |
| 1684 | 0xc3, 0x71, 0xde, 0x70, 0x63, 0xf2, 0x02, 0xb7, 0xcc, 0xe0, 0xe4, 0x6a, | 1683 | 0xc4, 0xc2, 0xff, 0xc7, 0x05, 0xcb, 0x2c, 0x81, 0xbc, 0x5f, 0x90, 0xbe, |
| 1685 | 0xfa, 0x91, 0xb3, 0x99, 0xf8, 0xec, 0xbc, 0xd1, 0x11, 0xc6, 0x56, 0x5b, | 1684 | 0x67, 0x59, 0x28, 0xa8, 0xbf, 0x32, 0xb9, 0x27, 0xdd, 0x9d, 0xf8, 0xad, |
| 1686 | 0x74, 0xad, 0x87, 0xc7, 0x88, 0x4d, 0x7d, 0x2e, 0x9f, 0xf1, 0xa1, 0x37, | 1685 | 0xbc, 0xc7, 0xc4, 0x7a, 0x7f, 0xac, 0x8c, 0xf4, 0xed, 0xc5, 0xa1, 0xbe, |
| 1687 | 0x57, 0x3e, 0xeb, 0x52, 0x29, 0x7b, 0x21, 0x61, 0xd1, 0x79, 0xaf, 0x41, | 1686 | 0x3e, 0x6c, 0x79, 0x82, 0x32, 0x1a, 0x36, 0x16, 0x9a, 0x5d, 0xcc, 0xa5, |
| 1688 | 0x1e, 0x17, 0x5c, 0xa6, 0x79, 0xc9, 0xc5, 0xee, 0xc1, 0x7f, 0xc8, 0xfc, | 1687 | 0x7d, 0x58, 0xa7, 0xcd, 0x8e, 0xa8, 0x2c, 0x37, 0x94, 0xce, 0xad, 0x3b, |
| 1689 | 0xc6, 0x7c, 0xa5, 0x75, 0x93, 0x14, 0xed, 0xa8, 0x18, 0x0f, 0x41, 0xfe, | 1688 | 0x6e, 0x75, 0xf6, 0xbc, 0x7b, 0x98, 0xa3, 0x38, 0xf1, 0x53, 0xf3, 0x46, |
| 1690 | 0x40, 0x1e, 0x56, 0x3a, 0x43, 0xdf, 0x9b, 0xff, 0x0f, 0x67, 0xca, 0x3d, | 1689 | 0x63, 0xca, 0xce, 0x4c, 0x8b, 0xb2, 0x23, 0x2d, 0x6d, 0x75, 0x2a, 0x3d, |
| 1691 | 0x43, 0x7f, 0xe1, 0x2c, 0x4a, 0x2e, 0xe8, 0x38, 0xfb, 0xf8, 0xec, 0xc2, | 1690 | 0x99, 0xbf, 0xa5, 0x4f, 0x58, 0x38, 0x6d, 0xca, 0xbb, 0x39, 0xd2, 0xae, |
| 1692 | 0x79, 0x7a, 0x72, 0x06, 0x5d, 0xce, 0xdd, 0xff, 0x3b, 0xe7, 0x6e, 0x66, | 1691 | 0x85, 0xe1, 0xe6, 0x7f, 0xcd, 0x3b, 0x3a, 0xa2, 0xd3, 0x4e, 0x6c, 0x1e, |
| 1693 | 0xd9, 0xa9, 0xfa, 0xe2, 0xfb, 0x25, 0x49, 0x75, 0x99, 0x5e, 0xc6, 0x6d, | 1692 | 0x7c, 0x1c, 0xdd, 0x83, 0xa7, 0x9c, 0x33, 0x46, 0x1e, 0xc3, 0x6b, 0x5d, |
| 1694 | 0xd9, 0x27, 0x12, 0xdc, 0x3e, 0x58, 0x57, 0x5c, 0x3f, 0x8e, 0x74, 0x75, | 1693 | 0x1f, 0x0d, 0x1e, 0xb1, 0x90, 0x2d, 0x97, 0xf3, 0xf9, 0x55, 0xd1, 0x13, |
| 1695 | 0x43, 0xf6, 0xe4, 0xcb, 0x38, 0xa3, 0x1b, 0x8b, 0x94, 0xcd, 0x68, 0x89, | 1694 | 0xd8, 0xa9, 0xc9, 0xbb, 0x27, 0x3d, 0xe4, 0x11, 0xb2, 0x6f, 0xbb, 0x1a, |
| 1696 | 0x57, 0xcb, 0xf9, 0xba, 0x88, 0xd7, 0x8c, 0x04, 0xdf, 0x42, 0x34, 0x76, | 1695 | 0x5f, 0xef, 0x95, 0x39, 0x2c, 0xb3, 0x0a, 0xa3, 0xc1, 0xd8, 0x3a, 0x67, |
| 1697 | 0xd8, 0x3d, 0x43, 0x22, 0xd8, 0xa3, 0xe3, 0x9e, 0xbc, 0x4e, 0x9b, 0x95, | 1696 | 0x0e, 0x1b, 0x70, 0x32, 0xfb, 0x38, 0xde, 0xdb, 0xd3, 0x05, 0x35, 0x1c, |
| 1698 | 0xf7, 0xd2, 0xe5, 0x73, 0xf1, 0xdd, 0xc7, 0x64, 0x5e, 0xb0, 0xba, 0x87, | 1697 | 0x0c, 0xdc, 0x06, 0xbb, 0xeb, 0xb8, 0x19, 0xb3, 0x3c, 0x08, 0x1e, 0x76, |
| 1699 | 0x58, 0x6d, 0xfd, 0xa5, 0xcf, 0x95, 0x17, 0xe9, 0x19, 0x55, 0x22, 0x5d, | 1698 | 0xa9, 0xc0, 0x0b, 0x7b, 0xe0, 0x9d, 0xc1, 0xf9, 0x9f, 0xcf, 0x18, 0x5d, |
| 1700 | 0x0f, 0x2a, 0x65, 0x79, 0x81, 0x0f, 0x91, 0x17, 0x63, 0x7d, 0xad, 0xf4, | 1699 | 0x6e, 0xd8, 0x0b, 0xfe, 0xb1, 0x29, 0xd8, 0x63, 0xb8, 0xac, 0xbf, 0x99, |
| 1701 | 0x2e, 0xb8, 0x4e, 0x19, 0x97, 0x9e, 0x0d, 0x9a, 0x93, 0x92, 0x3c, 0xfa, | 1700 | 0x8e, 0x60, 0x5f, 0x44, 0x35, 0xda, 0xef, 0x52, 0xa1, 0xf8, 0xa2, 0xf2, |
| 1702 | 0x40, 0x89, 0x73, 0x1e, 0xfe, 0xad, 0x3c, 0xfa, 0x43, 0xdb, 0x4c, 0xb2, | 1701 | 0x5e, 0x69, 0x17, 0xee, 0x6c, 0xf4, 0x59, 0xa5, 0xd1, 0x60, 0xdf, 0x29, |
| 1703 | 0xcd, 0xae, 0x6a, 0x25, 0x19, 0x97, 0xf7, 0x80, 0x2a, 0xe3, 0xd1, 0xd8, | 1702 | 0x25, 0x58, 0x67, 0xa9, 0x6d, 0x9c, 0xe7, 0x3a, 0xbc, 0x42, 0x0e, 0xd2, |
| 1704 | 0x0b, 0x74, 0x72, 0xaf, 0x19, 0x0d, 0x8f, 0xba, 0x67, 0x5d, 0x0c, 0xff, | 1703 | 0xca, 0xd8, 0xbb, 0x34, 0xa9, 0x3b, 0xeb, 0x4c, 0xaa, 0x51, 0x13, 0x29, |
| 1705 | 0xf2, 0x7c, 0xd1, 0x7f, 0xac, 0xc9, 0xdf, 0xad, 0x93, 0x1a, 0x5d, 0xef, | 1704 | 0x52, 0x34, 0xdc, 0x96, 0x05, 0x8e, 0xa6, 0x57, 0xe3, 0x9d, 0x3d, 0x26, |
| 1706 | 0x6e, 0x55, 0x92, 0xd7, 0x57, 0x53, 0x4e, 0x2c, 0x0e, 0xad, 0xc2, 0x2c, | 1705 | 0xf3, 0x54, 0x9d, 0xb8, 0xf5, 0xbd, 0x32, 0xc1, 0x80, 0x0e, 0xd3, 0xaa, |
| 1707 | 0xeb, 0x28, 0x1a, 0x7b, 0x8b, 0xf3, 0x79, 0xa8, 0x23, 0x1a, 0x1e, 0x71, | 1706 | 0x57, 0x19, 0xfb, 0x3d, 0x2a, 0x16, 0xce, 0x8c, 0x86, 0xc6, 0x17, 0xb8, |
| 1708 | 0x73, 0x74, 0xd1, 0x8b, 0xe1, 0x2f, 0xce, 0xbd, 0x2e, 0x7c, 0xde, 0xf2, | 1707 | 0xdc, 0x88, 0x64, 0x65, 0xfd, 0x53, 0x97, 0xb3, 0xc9, 0xb8, 0x2b, 0xe9, |
| 1709 | 0x31, 0x36, 0x8f, 0xdb, 0x7e, 0x8e, 0xa5, 0x35, 0xb8, 0x1d, 0xf5, 0xb4, | 1708 | 0x25, 0xff, 0xac, 0xc6, 0x6f, 0xc8, 0x83, 0x7f, 0x4d, 0xbe, 0x3b, 0xc1, |
| 1710 | 0x71, 0x24, 0xfb, 0xda, 0x18, 0x1f, 0x6c, 0x24, 0x3d, 0x57, 0xd5, 0x21, | 1709 | 0x78, 0x3e, 0x91, 0x29, 0x66, 0xbe, 0xe8, 0x91, 0x1c, 0x78, 0xdc, 0xc3, |
| 1711 | 0x45, 0x82, 0xee, 0xd1, 0x53, 0xe4, 0x5c, 0xad, 0xb1, 0x47, 0x68, 0xbf, | 1710 | 0xb9, 0x28, 0x6b, 0xf4, 0xe3, 0xdc, 0xb0, 0x17, 0x77, 0xec, 0x09, 0xee, |
| 1712 | 0xb9, 0x50, 0x24, 0x6c, 0x21, 0x85, 0xe7, 0xec, 0x65, 0x7f, 0xee, 0x81, | 1711 | 0x9b, 0x50, 0xab, 0xf0, 0xc9, 0x70, 0x31, 0x96, 0x0f, 0x78, 0x29, 0x9b, |
| 1713 | 0x65, 0xd4, 0x70, 0xa2, 0xab, 0xcd, 0xa9, 0x3f, 0xbf, 0x35, 0x1a, 0xd1, | 1712 | 0x8d, 0x5d, 0xc4, 0xff, 0x8f, 0xf8, 0xac, 0x65, 0x0f, 0x94, 0xcc, 0xdc, |
| 1714 | 0x5e, 0x2c, 0x9d, 0xd5, 0xe9, 0xb5, 0x7f, 0xe1, 0xee, 0x51, 0x79, 0xf4, | 1713 | 0x59, 0xe4, 0xec, 0x06, 0xeb, 0x97, 0x60, 0xd9, 0x80, 0xf0, 0x34, 0x15, |
| 1715 | 0xdf, 0x55, 0x46, 0xda, 0xf6, 0x63, 0x2c, 0x9b, 0xc5, 0x96, 0xc7, 0xd8, | 1714 | 0x1f, 0x0e, 0x2b, 0xf8, 0x20, 0x6d, 0x62, 0x21, 0xfb, 0xdb, 0x9c, 0x7a, |
| 1716 | 0x47, 0xdd, 0xc1, 0x32, 0x63, 0x33, 0x96, 0x1b, 0x01, 0xac, 0x0b, 0xb6, | 1715 | 0xc1, 0xf6, 0xd2, 0xcf, 0xd7, 0x64, 0x4c, 0x3c, 0x98, 0xd6, 0x19, 0x53, |
| 1717 | 0x24, 0xe4, 0x2c, 0xd2, 0x48, 0xae, 0xb8, 0x36, 0x52, 0x5c, 0x0b, 0xef, | 1716 | 0xde, 0xb6, 0x5d, 0x46, 0x23, 0xde, 0xde, 0x6d, 0x9c, 0x78, 0xd7, 0x15, |
| 1718 | 0xc7, 0xa3, 0x19, 0x37, 0x3e, 0x07, 0xfd, 0x66, 0x52, 0x79, 0x34, 0xdf, | 1717 | 0x1a, 0x9f, 0xeb, 0x6a, 0xc4, 0x5b, 0x07, 0x1b, 0xf1, 0xb3, 0xfe, 0x05, |
| 1719 | 0xa9, 0x3c, 0x52, 0x5a, 0x8f, 0xeb, 0xcf, 0xdf, 0x10, 0x44, 0xb5, 0x85, | 1718 | 0xb8, 0xb9, 0x31, 0x86, 0xf3, 0x73, 0x1b, 0xf1, 0xe6, 0x7e, 0x1d, 0x3b, |
| 1720 | 0x13, 0x86, 0xbc, 0x47, 0x29, 0x72, 0x2d, 0x8c, 0x76, 0xfc, 0x21, 0xef, | 1719 | 0x52, 0xcd, 0xd0, 0x47, 0xc7, 0xc9, 0x4f, 0x23, 0xa8, 0x67, 0x4e, 0x65, |
| 1721 | 0x53, 0x8a, 0x4e, 0x37, 0xa2, 0x6f, 0xf8, 0x61, 0xf4, 0x0e, 0xbf, 0xe4, | 1720 | 0xf4, 0xdb, 0x5d, 0x25, 0xd1, 0x2e, 0xec, 0x34, 0xa3, 0x98, 0xb3, 0x5f, |
| 1722 | 0x9e, 0x65, 0xf5, 0xe9, 0x7e, 0xeb, 0x0a, 0x33, 0x72, 0xd0, 0xc2, 0xbc, | 1721 | 0xf4, 0x60, 0xdb, 0xeb, 0xe6, 0x46, 0xf1, 0x72, 0x9f, 0x41, 0x3f, 0x8d, |
| 1723 | 0x7a, 0x59, 0x13, 0x6e, 0x34, 0x8f, 0xe2, 0xd1, 0xa0, 0xbc, 0x27, 0xd8, | 1722 | 0x52, 0x0f, 0x3a, 0x9e, 0x24, 0x36, 0x87, 0x9e, 0x30, 0x2e, 0x1c, 0xe0, |
| 1724 | 0x4f, 0x9e, 0x22, 0xef, 0x9c, 0xad, 0xc1, 0x67, 0x06, 0x64, 0x0e, 0x6b, | 1723 | 0xef, 0x05, 0x07, 0x9a, 0xd1, 0xce, 0xfe, 0x13, 0xa9, 0x18, 0xf6, 0x8d, |
| 1725 | 0xad, 0x4a, 0x33, 0x92, 0x5c, 0xe7, 0xce, 0x61, 0x1b, 0x8e, 0x15, 0x1e, | 1724 | 0x36, 0x70, 0xcc, 0x26, 0xc7, 0x5f, 0x63, 0xfd, 0x46, 0x69, 0x41, 0xdf, |
| 1726 | 0xc6, 0x1b, 0xbb, 0x36, 0x43, 0x8d, 0x47, 0xc2, 0xb7, 0xc0, 0xd9, 0x7c, | 1725 | 0x68, 0x2b, 0xf9, 0x66, 0x17, 0x79, 0x66, 0x2b, 0x7a, 0xd9, 0xd6, 0xd6, |
| 1727 | 0xc4, 0x48, 0x5a, 0x3e, 0x44, 0x0e, 0x78, 0x54, 0xe0, 0xd9, 0x5d, 0x92, | 1726 | 0x94, 0x89, 0x65, 0xc9, 0x56, 0x3c, 0x9d, 0x90, 0x33, 0x8d, 0x46, 0x64, |
| 1728 | 0x4f, 0xf7, 0xe0, 0x7a, 0x72, 0x80, 0x3a, 0xdd, 0x59, 0xfa, 0xab, 0xc5, | 1727 | 0x9e, 0x22, 0xef, 0x7d, 0xb5, 0xe2, 0x10, 0x75, 0xb2, 0x70, 0x60, 0x39, |
| 1729 | 0x91, 0x7e, 0xdd, 0x63, 0xfd, 0xd3, 0x1c, 0x44, 0xb2, 0x09, 0x55, 0xef, | 1728 | 0xed, 0xd0, 0x8b, 0x45, 0x7b, 0x74, 0x3c, 0x95, 0xba, 0x13, 0xef, 0x8c, |
| 1730 | 0xf9, 0xa4, 0x0a, 0x25, 0x60, 0xca, 0x6f, 0x00, 0x6c, 0xc6, 0x27, 0xda, | 1729 | 0x98, 0x68, 0x4b, 0x8a, 0xbe, 0xe5, 0x5c, 0x4d, 0x1c, 0xc7, 0x19, 0x5b, |
| 1731 | 0x03, 0xd6, 0x2c, 0x33, 0x92, 0x7d, 0x49, 0x89, 0xc4, 0x2c, 0xf5, 0x1b, | 1730 | 0x7e, 0x33, 0x10, 0xfb, 0x1b, 0x4e, 0xf3, 0x49, 0x15, 0xc1, 0xce, 0x19, |
| 1732 | 0x9c, 0xe7, 0x18, 0x5e, 0x24, 0xc7, 0xe9, 0x62, 0x6c, 0x5f, 0x21, 0x31, | 1731 | 0x9c, 0xf0, 0x9b, 0x1a, 0xe5, 0x6c, 0x94, 0x8b, 0xa8, 0x16, 0xb4, 0xca, |
| 1733 | 0xdd, 0xc5, 0xbe, 0xe6, 0x44, 0x95, 0x12, 0xc4, 0x2d, 0x05, 0xe0, 0x50, | 1732 | 0x55, 0x4b, 0xe7, 0x7d, 0xcb, 0xad, 0x6e, 0xc2, 0x37, 0x06, 0xdc, 0xe4, |
| 1734 | 0x6e, 0x0d, 0x4e, 0xee, 0x32, 0xd0, 0xc9, 0x67, 0x83, 0x19, 0x02, 0x16, | 1733 | 0xf4, 0x2a, 0x73, 0x11, 0xab, 0x83, 0xb6, 0x61, 0x95, 0xa9, 0xb9, 0x79, |
| 1735 | 0x31, 0x60, 0x83, 0x61, 0xb5, 0xaa, 0xe4, 0x16, 0x3e, 0x15, 0xcb, 0xe6, | 1734 | 0xdb, 0x2e, 0xef, 0xa1, 0x19, 0x2e, 0xec, 0x32, 0x6b, 0xda, 0x4a, 0x58, |
| 1736 | 0x9b, 0xd1, 0xa9, 0xa5, 0x1e, 0x2f, 0x12, 0x05, 0x2f, 0xee, 0x60, 0x99, | 1735 | 0x6f, 0x69, 0x38, 0x18, 0x2b, 0x52, 0x9b, 0x99, 0x27, 0x3e, 0x8e, 0x75, |
| 1737 | 0xed, 0x8c, 0x0b, 0x9f, 0x4c, 0xfb, 0xc9, 0x6f, 0x9b, 0xf0, 0x33, 0xf2, | 1736 | 0x7b, 0x1e, 0xc7, 0x1a, 0x7e, 0x3a, 0xf6, 0xd8, 0x5d, 0x4b, 0x4c, 0x05, |
| 1738 | 0xec, 0x9f, 0x92, 0x4f, 0x1f, 0x27, 0x5f, 0x38, 0x9e, 0xaf, 0x46, 0xf7, | 1737 | 0x2f, 0x1a, 0x76, 0x57, 0x97, 0x69, 0x70, 0x6e, 0x65, 0x5e, 0x1f, 0x47, |
| 1739 | 0x90, 0x4f, 0xce, 0x1f, 0x4d, 0xf9, 0x38, 0x17, 0xb5, 0xed, 0x21, 0x9c, | 1738 | 0xe7, 0xa1, 0xc7, 0xf1, 0x28, 0xed, 0xab, 0x92, 0x7e, 0xbc, 0x32, 0x69, |
| 1740 | 0x1e, 0xf5, 0xe3, 0xf6, 0x5d, 0x91, 0x3d, 0xc7, 0xd5, 0x46, 0xbc, 0x3f, | 1739 | 0x77, 0xdd, 0xdc, 0x58, 0x87, 0x4f, 0x9d, 0xfc, 0x43, 0xec, 0x75, 0xab, |
| 1741 | 0x5a, 0x8d, 0x95, 0x43, 0x7e, 0xf6, 0xcd, 0xc1, 0x0e, 0xe2, 0xff, 0xbb, | 1740 | 0x93, 0x13, 0xa7, 0x55, 0xb9, 0xde, 0xed, 0x5c, 0x5b, 0xea, 0x2b, 0x65, |
| 1742 | 0x7c, 0xd6, 0xb9, 0x0b, 0x4a, 0x7e, 0xc9, 0x02, 0xe6, 0x04, 0x3a, 0xeb, | 1741 | 0xf9, 0xd8, 0xf2, 0x5b, 0xb6, 0xfb, 0xbb, 0x3d, 0xe5, 0x78, 0xa2, 0x52, |
| 1743 | 0xd7, 0xe0, 0xd6, 0x21, 0xe1, 0x81, 0x2a, 0xde, 0x1e, 0x55, 0xf0, 0x56, | 1742 | 0xe2, 0x87, 0xac, 0xed, 0x42, 0x31, 0xe6, 0x32, 0xcf, 0x7a, 0xe2, 0x38, |
| 1744 | 0xce, 0xc0, 0x32, 0xb6, 0xd7, 0x97, 0x79, 0xd6, 0xf1, 0xd3, 0xcf, 0xd7, | 1743 | 0xb6, 0x93, 0xb7, 0xf9, 0xc3, 0x92, 0x03, 0xd7, 0x9b, 0x5b, 0xd4, 0x5b, |
| 1745 | 0xe6, 0x0d, 0xdc, 0x9b, 0xd3, 0x19, 0x53, 0x7e, 0xe2, 0x78, 0xf4, 0x76, | 1744 | 0x89, 0xed, 0x0a, 0x76, 0xd6, 0xf6, 0xa1, 0x97, 0xbe, 0xba, 0xab, 0x36, |
| 1746 | 0xfc, 0x64, 0xa7, 0x7e, 0xf4, 0x75, 0x4f, 0x74, 0x6a, 0x89, 0xa7, 0x1d, | 1745 | 0x18, 0xef, 0x45, 0xd4, 0xde, 0x35, 0xbd, 0xe7, 0xdf, 0xf0, 0x5e, 0x96, |
| 1747 | 0xaf, 0xed, 0x6f, 0xc7, 0xf7, 0x06, 0x97, 0xe2, 0x9a, 0xf6, 0x24, 0xce, | 1746 | 0xbc, 0xb7, 0x9d, 0x7f, 0x37, 0xeb, 0x71, 0x74, 0xed, 0x91, 0xf9, 0x7f, |
| 1748 | 0x2c, 0x69, 0xc7, 0xab, 0x7b, 0x75, 0x3c, 0x92, 0xe9, 0x80, 0x36, 0x31, | 1747 | 0x1c, 0x8f, 0x51, 0xfe, 0xce, 0x81, 0xc7, 0xf1, 0x4d, 0xda, 0x4e, 0x45, |
| 1749 | 0x45, 0xfe, 0x9b, 0x40, 0xeb, 0x84, 0x09, 0x7d, 0xd0, 0xd9, 0x5c, 0x63, | 1748 | 0xd3, 0xd1, 0xc7, 0x2a, 0x30, 0xbb, 0xaf, 0x1c, 0xe3, 0x0f, 0x57, 0xca, |
| 1750 | 0x6e, 0xc6, 0xa3, 0x86, 0x89, 0x45, 0x7b, 0x45, 0x0f, 0x8e, 0xb3, 0x6e, | 1749 | 0x39, 0x28, 0x62, 0x62, 0xaf, 0xf2, 0x38, 0xd6, 0x0f, 0x1d, 0xa0, 0x2f, |
| 1751 | 0x89, 0x89, 0x17, 0xb2, 0x3a, 0xfd, 0xd4, 0xa4, 0x1e, 0x74, 0x3c, 0x9e, | 1750 | 0x3a, 0xfe, 0x47, 0x2c, 0xce, 0xc7, 0xab, 0x00, 0xd6, 0x11, 0x93, 0x73, |
| 1752 | 0x31, 0x11, 0x7d, 0x4c, 0x9f, 0xde, 0xc7, 0xef, 0x4b, 0xf7, 0x75, 0xa0, | 1751 | 0xb8, 0xee, 0xc7, 0x9a, 0xc4, 0x61, 0xc7, 0xf7, 0x0b, 0xa2, 0xab, 0xe8, |
| 1753 | 0x87, 0xed, 0xdb, 0xc4, 0xeb, 0x3d, 0x13, 0x6d, 0x1c, 0xb3, 0xc1, 0xf1, | 1752 | 0xf7, 0x6d, 0xf4, 0xfb, 0xe5, 0xf4, 0xfb, 0x56, 0xfa, 0x7d, 0x0b, 0xfd, |
| 1754 | 0x37, 0x5b, 0x3f, 0x53, 0x3a, 0x91, 0x9d, 0xe8, 0x22, 0x9f, 0xdd, 0x4c, | 1753 | 0x3e, 0x46, 0xbf, 0x8f, 0xd2, 0xef, 0x23, 0xf4, 0xfb, 0x66, 0xfa, 0xbd, |
| 1755 | 0x1e, 0xdb, 0xe5, 0xee, 0xb9, 0x6f, 0xcd, 0x18, 0xb8, 0x35, 0xdd, 0x85, | 1754 | 0x49, 0xbf, 0x87, 0x72, 0xa2, 0xf9, 0x38, 0x3c, 0xfd, 0x5e, 0xda, 0x50, |
| 1756 | 0x27, 0x6d, 0x39, 0x3b, 0xaf, 0x27, 0xae, 0x55, 0xe4, 0x1d, 0xdd, 0x2e, | 1755 | 0xee, 0x3d, 0x99, 0x83, 0xc4, 0x9f, 0xd3, 0xe6, 0x9c, 0xc0, 0x62, 0xc6, |
| 1757 | 0x8c, 0x51, 0x27, 0xcb, 0x86, 0x56, 0xba, 0xe7, 0x9d, 0x96, 0xef, 0xd2, | 1756 | 0xd5, 0x61, 0x62, 0x44, 0x7a, 0xe4, 0xaf, 0x9c, 0x77, 0x2a, 0xd2, 0xc4, |
| 1758 | 0xf1, 0x44, 0xe6, 0x13, 0x38, 0x39, 0x6e, 0xa0, 0x3b, 0x2d, 0xfa, 0x96, | 1757 | 0xfd, 0x57, 0xa8, 0x8f, 0xa5, 0xe1, 0x1a, 0xf3, 0x69, 0xc6, 0xb0, 0x5f, |
| 1759 | 0xf3, 0x9b, 0x29, 0x1c, 0x61, 0x6c, 0xf9, 0xd9, 0x50, 0xf2, 0x9f, 0x38, | 1758 | 0x18, 0xf5, 0x3d, 0x7e, 0x96, 0xf9, 0x41, 0xaa, 0xbe, 0x6f, 0x1a, 0x0c, |
| 1760 | 0xcd, 0xc7, 0x54, 0xc8, 0x7a, 0x89, 0x8a, 0xab, 0xdb, 0xe5, 0x0c, 0xae, | 1759 | 0xab, 0x51, 0xdd, 0x0a, 0xac, 0xf4, 0x73, 0xcc, 0x72, 0xde, 0x6e, 0x25, |
| 1761 | 0x87, 0xa8, 0x16, 0xb1, 0xea, 0x54, 0x4b, 0xe3, 0x7d, 0xcb, 0xab, 0x6e, | 1760 | 0x1e, 0x1b, 0x6c, 0xc3, 0x7f, 0x19, 0xd4, 0xa8, 0x8b, 0x9a, 0xf1, 0x5b, |
| 1762 | 0xc2, 0x67, 0x87, 0xbc, 0xcc, 0x19, 0x54, 0xe6, 0x3a, 0xd6, 0x06, 0xda, | 1761 | 0x5d, 0xf8, 0x71, 0x00, 0x2e, 0xff, 0x35, 0xc0, 0xe7, 0x55, 0x98, 0x73, |
| 1763 | 0x86, 0x55, 0xab, 0x16, 0xe7, 0xcd, 0xdd, 0x63, 0xd0, 0x3d, 0xd8, 0x61, | 1762 | 0x58, 0xde, 0xef, 0x4b, 0x57, 0xb9, 0x1a, 0x66, 0x42, 0x6c, 0x04, 0x44, |
| 1764 | 0x34, 0x77, 0xd7, 0xb0, 0xde, 0x8a, 0x78, 0x24, 0x59, 0xa5, 0x76, 0x30, | 1763 | 0x6a, 0x17, 0x33, 0xc1, 0x39, 0xce, 0x3b, 0x40, 0xb1, 0x55, 0x82, 0xe9, |
| 1765 | 0x0f, 0x7d, 0x18, 0xeb, 0x76, 0x3d, 0x8c, 0xb5, 0xbc, 0x36, 0xec, 0x72, | 1764 | 0x45, 0xd8, 0x5a, 0xe7, 0xe0, 0xec, 0xb3, 0x72, 0x6e, 0xb0, 0x8a, 0x78, |
| 1766 | 0x36, 0xdf, 0x6c, 0x28, 0x78, 0x4e, 0x77, 0x36, 0x6f, 0x36, 0x74, 0xce, | 1765 | 0xe4, 0x8b, 0xb6, 0x62, 0x5b, 0xaf, 0x75, 0x7f, 0x15, 0x96, 0xa3, 0xa7, |
| 1767 | 0xad, 0xcc, 0xeb, 0xc3, 0xd8, 0x38, 0xf6, 0x30, 0x1e, 0xa2, 0x7d, 0x35, | 1766 | 0x37, 0xa7, 0x83, 0x87, 0xc3, 0x1a, 0xa9, 0x42, 0x48, 0x9f, 0xa3, 0xc0, |
| 1768 | 0xd0, 0x8f, 0x57, 0xa5, 0x9d, 0xcd, 0xd7, 0xb4, 0xc7, 0xf0, 0x73, 0x37, | 1767 | 0xdd, 0xd1, 0x1c, 0xc1, 0x83, 0x99, 0x04, 0xfa, 0x38, 0xc6, 0x0d, 0xf4, |
| 1769 | 0xbf, 0x11, 0x7b, 0x3d, 0xe3, 0xe6, 0xdc, 0x39, 0xd5, 0xb5, 0xdd, 0xa0, | 1768 | 0xb3, 0x75, 0x7f, 0xfa, 0xdd, 0x4e, 0x7c, 0x33, 0xa1, 0xd3, 0xfe, 0x2f, |
| 1770 | 0x7c, 0xb6, 0xd4, 0x25, 0xc1, 0x72, 0x6c, 0xf9, 0x05, 0xe5, 0xfe, 0x72, | 1769 | 0xda, 0xe9, 0x8a, 0x39, 0x7d, 0x55, 0x30, 0x3a, 0x57, 0xa8, 0xf3, 0x98, |
| 1771 | 0x57, 0x1d, 0x1e, 0x6b, 0x90, 0xf8, 0xe1, 0xb7, 0xaa, 0x4c, 0x28, 0xfa, | 1770 | 0xd3, 0x06, 0x8f, 0xc8, 0xc2, 0xf7, 0xf4, 0xa8, 0xd7, 0xaa, 0x20, 0x36, |
| 1772 | 0x12, 0xe6, 0x71, 0x8f, 0x1d, 0xc1, 0x76, 0xf2, 0xc2, 0x50, 0x5c, 0x72, | 1771 | 0xcf, 0x1a, 0x80, 0x32, 0x9c, 0x94, 0xf7, 0x20, 0xba, 0xf0, 0xff, 0x99, |
| 1773 | 0xec, 0x56, 0x63, 0x8b, 0x7a, 0x23, 0xb1, 0x5d, 0xc1, 0xa3, 0x0b, 0xb3, | 1772 | 0x6d, 0x8e, 0xfd, 0x8c, 0xbb, 0x34, 0xcc, 0x4c, 0xca, 0x7d, 0x7b, 0xc1, |
| 1774 | 0x18, 0xa0, 0xaf, 0xee, 0x58, 0x18, 0x49, 0x0d, 0xc0, 0x74, 0x76, 0xcc, | 1773 | 0x67, 0x4d, 0xc1, 0x3a, 0xdd, 0xb5, 0x81, 0xf7, 0xab, 0xf1, 0x23, 0xc6, |
| 1775 | 0xe9, 0xff, 0x23, 0xde, 0xa1, 0x2d, 0xef, 0x4b, 0xca, 0x7b, 0xb4, 0x0f, | 1774 | 0xd9, 0xc0, 0xc0, 0x02, 0xa8, 0x4d, 0x5e, 0xdc, 0xdd, 0x50, 0x8a, 0xf8, |
| 1776 | 0x63, 0xf3, 0x2e, 0x99, 0xff, 0x87, 0xf1, 0x45, 0xf6, 0x7f, 0xe3, 0xd0, | 1775 | 0x4a, 0xe1, 0xa1, 0x92, 0xef, 0xbb, 0xa9, 0xcf, 0xff, 0x17, 0x0f, 0x99, |
| 1777 | 0xc3, 0xf8, 0x1c, 0x6d, 0xa7, 0x7e, 0xf1, 0xa1, 0x2f, 0xd6, 0xa3, 0x25, | 1776 | 0xcf, 0x61, 0xc2, 0x9f, 0x70, 0xf6, 0xdd, 0xd7, 0x99, 0x77, 0x28, 0x16, |
| 1778 | 0x5b, 0x87, 0xa9, 0xfb, 0x1b, 0xe4, 0xbc, 0x2d, 0x31, 0x71, 0x40, 0x79, | 1777 | 0xaf, 0xb7, 0xa5, 0x2c, 0x6c, 0x30, 0x99, 0x0b, 0xdd, 0x53, 0xc9, 0x9c, |
| 1779 | 0x18, 0xf7, 0x8c, 0xd4, 0xd2, 0x17, 0xdd, 0x31, 0x10, 0x8b, 0xcb, 0xf1, | 1778 | 0x44, 0xca, 0x4b, 0xbb, 0x5b, 0x9d, 0xf6, 0x0e, 0xa6, 0xe4, 0x7a, 0xf7, |
| 1780 | 0x2a, 0x8c, 0x75, 0xf9, 0xa6, 0x12, 0xae, 0x87, 0xb0, 0xd6, 0x3e, 0xe0, | 1779 | 0x64, 0x9f, 0x77, 0x01, 0x95, 0x5e, 0xe2, 0xad, 0x82, 0x33, 0xb5, 0x09, |
| 1781 | 0xfa, 0x7e, 0x85, 0xb9, 0x9a, 0x7e, 0xdf, 0x4d, 0xbf, 0x5f, 0x49, 0xbf, | 1780 | 0xfa, 0x34, 0x7e, 0xec, 0x46, 0x4d, 0xba, 0x5f, 0x75, 0xfd, 0xf8, 0x1a, |
| 1782 | 0xef, 0xa2, 0xdf, 0x77, 0xd2, 0xef, 0x93, 0xf4, 0x7b, 0x93, 0x7e, 0x9f, | 1781 | 0xcc, 0x31, 0x7f, 0xaf, 0xca, 0x7c, 0xc4, 0xf0, 0x54, 0x48, 0x41, 0xa5, |
| 1783 | 0xa0, 0xdf, 0x77, 0xd0, 0xef, 0x0d, 0xd9, 0x3b, 0x54, 0x8e, 0x76, 0x1c, | 1782 | 0x61, 0x9c, 0xff, 0x19, 0x7d, 0x6b, 0xc2, 0x95, 0xc0, 0x53, 0x63, 0xa7, |
| 1784 | 0x81, 0x6f, 0xd0, 0x4f, 0x1b, 0x2a, 0xbe, 0xd3, 0xb8, 0x9f, 0xf8, 0x73, | 1783 | 0xec, 0xf1, 0x6b, 0xfc, 0x9c, 0x73, 0xa9, 0xdb, 0x86, 0x0f, 0x06, 0x65, |
| 1785 | 0xc2, 0x58, 0x14, 0xbe, 0x89, 0xaa, 0x1a, 0x25, 0x46, 0xe4, 0xc6, 0xff, | 1784 | 0xce, 0x64, 0x9d, 0x9f, 0xb1, 0x5d, 0xd5, 0x51, 0xca, 0x7b, 0xa7, 0x87, |
| 1786 | 0xce, 0x7d, 0xff, 0x2d, 0x47, 0xdc, 0x7f, 0x91, 0xfa, 0x58, 0x11, 0x6f, | 1785 | 0x4d, 0xe6, 0x3a, 0x6d, 0xf8, 0xc7, 0xc1, 0x95, 0xf8, 0xfd, 0x60, 0x4d, |
| 1787 | 0x36, 0x9e, 0x64, 0x0c, 0xfb, 0xa1, 0xde, 0xda, 0x1f, 0x62, 0x99, 0xaf, | 1786 | 0xdb, 0x7f, 0x52, 0x6d, 0x7b, 0x69, 0xf8, 0x6b, 0xf8, 0x65, 0xa5, 0x86, |
| 1788 | 0x65, 0x5a, 0xb3, 0xb3, 0xa1, 0x5b, 0xed, 0xea, 0x56, 0x60, 0x55, 0x88, | 1787 | 0xa7, 0x69, 0x43, 0xbf, 0x4f, 0x58, 0x4b, 0xaf, 0x21, 0x16, 0xfc, 0xef, |
| 1789 | 0x63, 0x96, 0x73, 0xdd, 0xab, 0xf0, 0xc5, 0xe1, 0x6e, 0xfc, 0xcf, 0xe1, | 1788 | 0x44, 0xf0, 0xc2, 0x49, 0x67, 0x5f, 0xa9, 0xde, 0xfc, 0xd0, 0x15, 0x8c, |
| 1790 | 0x20, 0x75, 0xd1, 0x3c, 0x75, 0xa3, 0x07, 0xdf, 0x0c, 0xc3, 0x13, 0x9a, | 1789 | 0x9f, 0x51, 0x83, 0xd6, 0x36, 0x65, 0x39, 0xec, 0x4c, 0x2b, 0xce, 0x67, |
| 1791 | 0x0b, 0x7c, 0xd0, 0x88, 0x45, 0x07, 0xe4, 0x5d, 0xec, 0x5c, 0xa3, 0xa7, | 1790 | 0xa6, 0xda, 0x42, 0x97, 0x8d, 0x2a, 0xb1, 0x03, 0xb1, 0x07, 0xda, 0x22, |
| 1792 | 0x6d, 0x3e, 0xc4, 0x46, 0x40, 0xa4, 0xf6, 0x30, 0xd3, 0x5c, 0xe4, 0xbe, | 1791 | 0x73, 0xb9, 0x9f, 0x92, 0x47, 0x77, 0x7f, 0x95, 0xf6, 0x98, 0xa2, 0x3d, |
| 1793 | 0xaf, 0x99, 0x5c, 0x2d, 0x98, 0x5e, 0x85, 0xad, 0x31, 0x17, 0x67, 0x9f, | 1792 | 0xa6, 0x68, 0x8f, 0xc4, 0xa4, 0xe7, 0x89, 0x55, 0x3f, 0x48, 0xd1, 0x1e, |
| 1794 | 0x96, 0xf3, 0xe9, 0x8d, 0xc4, 0xa3, 0x80, 0xd9, 0x85, 0x6d, 0x03, 0xd6, | 1793 | 0xe9, 0x3f, 0xcf, 0xd1, 0x7f, 0x72, 0x5c, 0xb9, 0xdd, 0x39, 0xb7, 0xf6, |
| 1795 | 0x5d, 0x8d, 0x58, 0x89, 0xfe, 0x81, 0xa2, 0x0e, 0xee, 0x8f, 0x13, 0xf2, | 1794 | 0x06, 0x63, 0x62, 0xe2, 0x09, 0x79, 0x27, 0xad, 0x66, 0x43, 0x16, 0xc1, |
| 1796 | 0xcc, 0xa8, 0xb6, 0x48, 0x81, 0x77, 0x43, 0x47, 0x02, 0xf7, 0xe6, 0x6d, | 1795 | 0xf6, 0x5e, 0xe5, 0xb3, 0x72, 0x39, 0x67, 0xfb, 0xed, 0x90, 0xf8, 0x40, |
| 1797 | 0x64, 0x39, 0xc6, 0xf5, 0xf4, 0xb3, 0x75, 0xbf, 0xff, 0x3d, 0x7c, 0x7c, | 1796 | 0x6e, 0x3f, 0xe0, 0xc8, 0xc8, 0x63, 0x65, 0xf2, 0x7e, 0xd4, 0xc1, 0xbd, |
| 1798 | 0xce, 0xd6, 0x68, 0xff, 0xe7, 0x9c, 0x5c, 0xfd, 0xa2, 0x6c, 0x23, 0xf4, | 1797 | 0xff, 0x92, 0xce, 0xfe, 0x3b, 0xe5, 0x10, 0x7d, 0xfd, 0x5b, 0xc7, 0x2e, |
| 1799 | 0x8d, 0x77, 0xa8, 0xd7, 0x32, 0x67, 0x8e, 0x1c, 0xe4, 0x23, 0x6b, 0x8e, | 1798 | 0xba, 0xfc, 0x1b, 0xfb, 0x97, 0x55, 0x32, 0xfe, 0x55, 0xf8, 0x62, 0xb0, |
| 1800 | 0x7b, 0x8e, 0xce, 0x8f, 0x05, 0x43, 0x50, 0x46, 0xd3, 0xf2, 0xce, 0xda, | 1799 | 0x05, 0xe7, 0x19, 0x7f, 0xdf, 0x6a, 0x1a, 0xef, 0x0c, 0x20, 0xd8, 0x51, |
| 1801 | 0x66, 0xfc, 0x5f, 0xc6, 0x37, 0x5c, 0x5b, 0x9a, 0xf2, 0xc8, 0x99, 0x16, | 1800 | 0xae, 0x46, 0x91, 0xcd, 0xb4, 0xe0, 0xb3, 0x44, 0x14, 0x07, 0x12, 0x35, |
| 1802 | 0xb9, 0xef, 0x2c, 0x3d, 0xbb, 0x38, 0x12, 0xd3, 0x3c, 0x3f, 0xa8, 0x93, | 1801 | 0xed, 0x35, 0xae, 0xb3, 0x6a, 0x7c, 0x86, 0x58, 0x54, 0x0c, 0x9f, 0x92, |
| 1803 | 0xfd, 0x8b, 0xaf, 0x33, 0xce, 0x86, 0x87, 0x96, 0x42, 0x5d, 0xec, 0xc7, | 1802 | 0x5f, 0x2e, 0xac, 0x8d, 0x60, 0x88, 0x6d, 0x7a, 0xa2, 0x1a, 0x46, 0x9a, |
| 1804 | 0x9d, 0x6d, 0xb3, 0x90, 0x5a, 0x25, 0x3c, 0xd4, 0xdd, 0x5f, 0xa1, 0x3e, | 1803 | 0xc5, 0x56, 0x73, 0xef, 0x4e, 0xfd, 0xa9, 0xbf, 0x2e, 0xda, 0xe3, 0x7b, |
| 1805 | 0xff, 0x02, 0xf7, 0x19, 0x5f, 0xc1, 0xf1, 0x90, 0x8d, 0x21, 0xe2, 0xd7, | 1804 | 0x4d, 0x17, 0xed, 0x71, 0xcd, 0x6b, 0x69, 0xf4, 0xe1, 0xd2, 0x3d, 0xf2, |
| 1806 | 0x3a, 0xe3, 0x76, 0xc5, 0xe2, 0x67, 0xe6, 0x44, 0x58, 0x6f, 0x30, 0xd7, | 1805 | 0x6e, 0xa9, 0xf8, 0xb3, 0x82, 0x1f, 0x84, 0xc7, 0xdb, 0xa6, 0x21, 0xf8, |
| 1807 | 0xfa, 0x54, 0x03, 0x1a, 0x76, 0x49, 0x79, 0x91, 0x7b, 0xc6, 0x95, 0xb7, | 1806 | 0xec, 0x7d, 0xb4, 0xf5, 0x93, 0x49, 0x59, 0x53, 0x6c, 0xc1, 0xfb, 0x2c, |
| 1808 | 0x3f, 0x23, 0x9f, 0x8b, 0x36, 0x3b, 0xe5, 0xf9, 0x24, 0xd0, 0x20, 0xe7, | 1807 | 0xef, 0xa6, 0x5f, 0x9c, 0xcc, 0xb8, 0xdd, 0xbf, 0x4c, 0x2a, 0xcc, 0x4b, |
| 1809 | 0x84, 0x15, 0xbc, 0xbd, 0xd0, 0xc6, 0x63, 0x19, 0x7c, 0xb3, 0x0a, 0xcd, | 1808 | 0x97, 0xe3, 0x97, 0x99, 0x37, 0xd5, 0x8f, 0x35, 0x13, 0x67, 0xb2, 0x2b, |
| 1810 | 0xb9, 0x41, 0xd5, 0xf3, 0xcd, 0xb9, 0x58, 0x64, 0xfc, 0x5a, 0x95, 0xf9, | 1809 | 0x69, 0x4f, 0x92, 0xff, 0xc7, 0x98, 0xff, 0x07, 0x3b, 0x8f, 0x60, 0x25, |
| 1811 | 0x48, 0xe2, 0xbe, 0x85, 0x72, 0x1e, 0x4d, 0x3f, 0xf3, 0x3d, 0xfa, 0xd6, | 1810 | 0xca, 0x0f, 0xad, 0x42, 0xd9, 0x1e, 0xe2, 0x67, 0x88, 0xf9, 0x3f, 0xaf, |
| 1812 | 0x71, 0xd8, 0xd8, 0x3e, 0xf9, 0x92, 0x33, 0x35, 0x37, 0x84, 0xa7, 0x26, | 1811 | 0x67, 0xec, 0x91, 0xf7, 0x0d, 0xca, 0xed, 0xed, 0xab, 0x44, 0x2f, 0x82, |
| 1813 | 0xa5, 0x6e, 0x37, 0x4e, 0x70, 0x4e, 0xbe, 0xec, 0xee, 0xe7, 0x45, 0x92, | 1812 | 0x27, 0x7f, 0x57, 0x8e, 0xb2, 0x55, 0xc0, 0x21, 0xa9, 0x67, 0xb0, 0xde, |
| 1814 | 0x27, 0x54, 0x79, 0xe7, 0xb0, 0x1b, 0x6f, 0x8d, 0x1a, 0xd8, 0xc7, 0x1c, | 1813 | 0x4a, 0x54, 0xee, 0xa9, 0x89, 0x2c, 0x46, 0xcd, 0xf9, 0xdb, 0xd4, 0x95, |
| 1815 | 0xea, 0x57, 0xc3, 0xab, 0xf0, 0xeb, 0xe1, 0x66, 0xed, 0x6f, 0x14, 0x39, | 1814 | 0xb8, 0xfe, 0xd0, 0x3f, 0x73, 0x0e, 0xa4, 0x6c, 0x35, 0x9e, 0xa0, 0xdd, |
| 1816 | 0x03, 0xff, 0x71, 0xfc, 0xa8, 0x21, 0x88, 0x83, 0xb4, 0xa1, 0x69, 0xbb, | 1815 | 0x16, 0x92, 0x13, 0xb6, 0x24, 0x7f, 0x6d, 0xcf, 0xa4, 0x2f, 0x7e, 0xf6, |
| 1817 | 0x0b, 0x6f, 0xdb, 0x56, 0x64, 0x2e, 0x22, 0x7b, 0xbc, 0x9e, 0xc8, 0x01, | 1816 | 0x15, 0x60, 0x5d, 0xd6, 0x60, 0xbc, 0x2b, 0x46, 0x7c, 0xe8, 0x29, 0xbb, |
| 1818 | 0x79, 0xcf, 0x79, 0x9d, 0x1a, 0x39, 0xb8, 0x44, 0x89, 0x58, 0x6f, 0xa8, | 1817 | 0x3c, 0xea, 0xc6, 0x9a, 0x6c, 0x03, 0x16, 0x0f, 0xd8, 0xf6, 0xb9, 0xb9, |
| 1819 | 0x2b, 0xf1, 0x8b, 0x7c, 0x17, 0xce, 0xe4, 0x67, 0xda, 0xc2, 0x66, 0x07, | 1818 | 0x31, 0xf8, 0xa2, 0x3e, 0x62, 0x98, 0x0f, 0x8f, 0x26, 0x4b, 0xf8, 0x2d, |
| 1820 | 0x8d, 0x62, 0x07, 0x62, 0x0f, 0xb4, 0x45, 0xe6, 0x8a, 0xdf, 0x26, 0x8f, | 1819 | 0xc7, 0x4f, 0x42, 0xe3, 0xb3, 0x55, 0x63, 0xc3, 0x0c, 0x97, 0xd1, 0x9e, |
| 1821 | 0xee, 0xfd, 0x18, 0xed, 0x31, 0x43, 0x7b, 0xcc, 0xd0, 0x1e, 0x89, 0x49, | 1820 | 0x55, 0x24, 0xee, 0xfb, 0xf0, 0x08, 0xe3, 0xf3, 0xd2, 0x64, 0x00, 0xf1, |
| 1822 | 0xcf, 0x10, 0xab, 0xbe, 0x96, 0xa1, 0x3d, 0xd2, 0x7f, 0xbe, 0x42, 0xff, | 1821 | 0xac, 0x6d, 0xbf, 0xd9, 0xec, 0xc7, 0xc3, 0xac, 0xdf, 0x9a, 0xec, 0x41, |
| 1823 | 0x29, 0x72, 0xe5, 0x1e, 0x77, 0x4d, 0xff, 0x15, 0xc6, 0x44, 0xfb, 0x31, | 1822 | 0x37, 0xed, 0x22, 0x7e, 0xc8, 0xd0, 0x35, 0xc6, 0xfb, 0x75, 0x59, 0x2f, |
| 1824 | 0x79, 0x7f, 0xb8, 0x79, 0x7d, 0x01, 0x91, 0x9e, 0x01, 0x65, 0x5d, 0xbd, | 1823 | 0x63, 0x58, 0x25, 0x6e, 0x63, 0x2c, 0x7a, 0x54, 0xce, 0xca, 0xd0, 0x07, |
| 1825 | 0xbc, 0xcf, 0xf1, 0xf9, 0xa8, 0xf8, 0x80, 0xbc, 0x7b, 0x46, 0xbf, 0x1a, | 1824 | 0xdf, 0x31, 0xad, 0x1b, 0x5c, 0x30, 0xd0, 0x99, 0xf5, 0x63, 0x79, 0x32, |
| 1826 | 0x3f, 0x55, 0x27, 0xef, 0xb2, 0xee, 0xdf, 0xfd, 0x51, 0x3a, 0xfb, 0x7b, | 1825 | 0x78, 0x41, 0xde, 0xcd, 0xfb, 0xcc, 0xac, 0xc3, 0xc6, 0x6c, 0x00, 0xb7, |
| 1827 | 0xf6, 0x43, 0xf4, 0xf5, 0xc7, 0x8e, 0x5d, 0x74, 0xf9, 0x4f, 0xce, 0x8f, | 1826 | 0x27, 0x8f, 0x3e, 0x3a, 0x13, 0xd6, 0x7f, 0x9e, 0x81, 0x06, 0x7c, 0x3d, |
| 1828 | 0x1a, 0x65, 0xfc, 0xab, 0xf1, 0xf3, 0xe1, 0x4e, 0x9c, 0x65, 0xfc, 0xfd, | 1827 | 0x5b, 0xcd, 0xf6, 0x83, 0x1b, 0xde, 0x50, 0xaa, 0xf1, 0x8d, 0x43, 0x26, |
| 1829 | 0x74, 0xfb, 0x94, 0x45, 0x9b, 0xdd, 0x68, 0x78, 0x4c, 0x4c, 0xe6, 0x3b, | 1828 | 0xdb, 0x57, 0xb1, 0x8c, 0xed, 0x2c, 0x49, 0x5e, 0x8f, 0x47, 0x0e, 0x35, |
| 1830 | 0x71, 0xda, 0x36, 0x91, 0xb7, 0x9b, 0xd7, 0x7f, 0x57, 0x79, 0x53, 0xcd, | 1829 | 0xe3, 0xc1, 0x6c, 0x13, 0x16, 0x31, 0x3e, 0x75, 0x30, 0x37, 0xc4, 0xbd, |
| 1831 | 0xcd, 0x2b, 0xf2, 0xf9, 0xdf, 0x90, 0x5f, 0x1e, 0x6a, 0x91, 0xf7, 0x5d, | 1830 | 0xc0, 0xed, 0x03, 0xa2, 0x7b, 0x28, 0x6f, 0x36, 0x8f, 0x33, 0x5f, 0x36, |
| 1832 | 0x13, 0x18, 0xc9, 0x8b, 0x9d, 0x06, 0x71, 0xd3, 0x12, 0x43, 0xde, 0x11, | 1831 | 0x41, 0x43, 0x74, 0xf6, 0x92, 0x77, 0xd2, 0x56, 0x6f, 0xdf, 0xdf, 0x84, |
| 1833 | 0xfb, 0xbd, 0x7f, 0xf7, 0xd9, 0xb2, 0x97, 0x72, 0xce, 0x99, 0x0a, 0xfa, | 1832 | 0xa5, 0x03, 0x2a, 0x6a, 0xc2, 0x85, 0x88, 0xb7, 0x29, 0x68, 0x19, 0x90, |
| 1834 | 0xad, 0x20, 0x7d, 0xd8, 0xb3, 0x4b, 0x7e, 0x07, 0x40, 0xfc, 0x59, 0xc1, | 1833 | 0x38, 0x2b, 0xdc, 0xc6, 0x64, 0x5c, 0x0d, 0xb1, 0x0f, 0x93, 0x71, 0x35, |
| 1835 | 0x67, 0x8c, 0x29, 0xad, 0x06, 0x91, 0xa7, 0x77, 0x33, 0x81, 0x7a, 0x2d, | 1834 | 0x77, 0xbf, 0x3b, 0x25, 0x6b, 0x0b, 0x6f, 0x93, 0x2f, 0x85, 0xd1, 0xe2, |
| 1836 | 0x2d, 0x67, 0x88, 0x3b, 0xf1, 0x26, 0xcb, 0x57, 0xd1, 0x2f, 0x5e, 0xcb, | 1835 | 0xc4, 0x68, 0x59, 0x13, 0xb7, 0xe0, 0x66, 0xec, 0x0e, 0xd3, 0xc6, 0x17, |
| 1837 | 0x7b, 0xbd, 0x3f, 0x4a, 0xcb, 0x7b, 0xec, 0x2b, 0xf1, 0xa3, 0xfc, 0xcb, | 1836 | 0x34, 0x4a, 0xac, 0xd6, 0x9d, 0xbd, 0xa9, 0xb1, 0x7e, 0xa3, 0xe3, 0x82, |
| 1838 | 0xea, 0x2f, 0x82, 0x06, 0xde, 0x2e, 0xac, 0xc2, 0xfc, 0x5d, 0xb2, 0xbe, | 1837 | 0x42, 0xfb, 0xda, 0x2f, 0x31, 0xd1, 0x8f, 0x8d, 0xc9, 0x28, 0xde, 0xe9, |
| 1839 | 0x90, 0xc4, 0x7e, 0x3b, 0x72, 0xf4, 0x59, 0xac, 0xc2, 0xbc, 0xb1, 0xd5, | 1838 | 0x63, 0xbc, 0xb9, 0x31, 0xb6, 0xb4, 0x04, 0x86, 0xf9, 0x08, 0x42, 0xd6, |
| 1840 | 0xcc, 0xa3, 0x15, 0xbc, 0x17, 0x5d, 0x8d, 0x00, 0x3f, 0xd7, 0xee, 0x72, | 1839 | 0x49, 0xc6, 0xf6, 0xf3, 0xe9, 0x4a, 0x2c, 0xde, 0x23, 0x65, 0x1a, 0xf1, |
| 1841 | 0x9c, 0xc3, 0xf1, 0x3a, 0x67, 0xfb, 0x6a, 0x99, 0x3b, 0xc1, 0x93, 0x65, | 1840 | 0xee, 0xb0, 0xec, 0x4d, 0x6e, 0xc2, 0x53, 0x7d, 0x2e, 0x0c, 0x99, 0x35, |
| 1842 | 0xf5, 0xa8, 0x5d, 0x0d, 0x8c, 0x09, 0x57, 0xd1, 0x71, 0xeb, 0xc0, 0x2a, | 1841 | 0x3d, 0x2a, 0xe3, 0xe7, 0xfc, 0xc6, 0xa0, 0xf6, 0x23, 0x72, 0xd5, 0x0b, |
| 1843 | 0x5c, 0xb1, 0xab, 0x39, 0x76, 0x2b, 0x9a, 0xb3, 0x47, 0x3c, 0xab, 0xd0, | 1842 | 0x4d, 0x8c, 0xca, 0xd7, 0x34, 0xa3, 0x85, 0x72, 0xb5, 0x18, 0xe2, 0x93, |
| 1844 | 0x30, 0x76, 0x2f, 0xe7, 0x40, 0xca, 0x6a, 0xb4, 0x3f, 0x0b, 0x95, 0xe4, | 1843 | 0x16, 0x1e, 0x6c, 0xde, 0x84, 0x93, 0x7d, 0x86, 0xf5, 0xb4, 0xac, 0x03, |
| 1845 | 0x84, 0x9d, 0xe9, 0x9f, 0x3a, 0xf3, 0x4d, 0x77, 0x1f, 0x0e, 0xeb, 0x0a, | 1844 | 0x34, 0xf2, 0xf9, 0x74, 0x37, 0x36, 0x1b, 0xc2, 0x69, 0x75, 0xfa, 0x16, |
| 1846 | 0x3a, 0xe3, 0x5d, 0x35, 0x52, 0x23, 0x4f, 0x38, 0x75, 0xa6, 0x17, 0x6b, | 1845 | 0x59, 0xa7, 0xd1, 0x8c, 0x77, 0x68, 0xaf, 0x3d, 0xe9, 0x05, 0x8c, 0xfd, |
| 1847 | 0x0b, 0x6d, 0xb8, 0x69, 0xc8, 0x71, 0x4e, 0x2f, 0x49, 0x22, 0x60, 0x06, | 1846 | 0x12, 0xf3, 0xbd, 0x56, 0x80, 0xf5, 0xca, 0xbf, 0xa2, 0xe0, 0xf4, 0x01, |
| 1848 | 0x88, 0x61, 0x01, 0x3c, 0x94, 0xae, 0xe1, 0x7f, 0x07, 0x15, 0x8c, 0xc9, | 1847 | 0xe1, 0x58, 0x0b, 0x70, 0xff, 0x80, 0xec, 0x0b, 0xa8, 0x98, 0x7f, 0x68, |
| 1849 | 0x2d, 0xaa, 0xbe, 0x7e, 0x9e, 0x47, 0xef, 0x29, 0x28, 0x12, 0xf7, 0x03, | 1848 | 0x35, 0xce, 0xed, 0xce, 0x71, 0xae, 0x37, 0xc3, 0xd6, 0xd7, 0xc9, 0xb9, |
| 1850 | 0x78, 0x80, 0xf1, 0x79, 0x45, 0x3a, 0x8c, 0x54, 0xc1, 0x71, 0x5e, 0xed, | 1849 | 0xda, 0x4b, 0xc9, 0xb9, 0xc8, 0xe5, 0xea, 0x36, 0x2a, 0x6e, 0x84, 0xb2, |
| 1851 | 0x08, 0xe1, 0x7e, 0xd6, 0xef, 0x4a, 0xf7, 0xa3, 0x97, 0x76, 0x91, 0x1a, | 1850 | 0x11, 0xf2, 0x0a, 0xe1, 0x17, 0x01, 0x3c, 0x93, 0x69, 0xc6, 0x6d, 0xc9, |
| 1852 | 0xd3, 0xb5, 0x20, 0xe3, 0xfd, 0xba, 0x82, 0x9f, 0x31, 0xac, 0x01, 0xb7, | 1851 | 0x6a, 0x8c, 0x90, 0x6f, 0xa5, 0x89, 0x17, 0xe9, 0x0c, 0xe3, 0xca, 0x70, |
| 1853 | 0xec, 0xd2, 0xf0, 0x50, 0x21, 0xc0, 0xf8, 0xe6, 0x2c, 0x3d, 0x69, 0x58, | 1852 | 0x15, 0x3f, 0x3a, 0x3f, 0xb3, 0xf8, 0x31, 0x9c, 0x7b, 0x6b, 0x68, 0xcb, |
| 1854 | 0x57, 0x7a, 0xa0, 0x63, 0x63, 0x21, 0x84, 0x95, 0xe9, 0xc8, 0xb4, 0xbc, | 1853 | 0xb1, 0x36, 0xc5, 0xd9, 0xdb, 0x18, 0xca, 0x48, 0xac, 0x56, 0x98, 0xb7, |
| 1855 | 0x47, 0x7d, 0xd6, 0x88, 0xe1, 0xc1, 0x42, 0x18, 0xb7, 0xa5, 0x0f, 0x3d, | 1854 | 0xde, 0xa5, 0x49, 0x6e, 0x2a, 0xe7, 0x0e, 0x7e, 0xde, 0xa7, 0xe3, 0x5b, |
| 1856 | 0x34, 0x1f, 0xd6, 0xff, 0x98, 0x87, 0x36, 0x7c, 0xa6, 0xd0, 0x44, 0xf9, | 1855 | 0x8d, 0x3b, 0x95, 0x58, 0xa5, 0xf3, 0x5e, 0x92, 0x55, 0x4c, 0xd9, 0x6e, |
| 1857 | 0x91, 0xf5, 0xaf, 0x28, 0x4d, 0xf8, 0xec, 0x98, 0x41, 0xf9, 0x2a, 0x6e, | 1856 | 0x9b, 0x2b, 0x6b, 0x94, 0x62, 0x97, 0x6c, 0x83, 0x39, 0xfa, 0xc3, 0x66, |
| 1858 | 0xa5, 0x9c, 0x9b, 0xd3, 0x57, 0xe0, 0x81, 0xb1, 0x0e, 0xdc, 0x5b, 0x58, | 1857 | 0x05, 0xf4, 0x0a, 0x5d, 0xce, 0x50, 0xd2, 0xdf, 0xfd, 0x78, 0x35, 0x11, |
| 1859 | 0x8c, 0xe5, 0x8c, 0x4f, 0x1b, 0x98, 0x1b, 0xe2, 0xbf, 0x00, 0xb7, 0x0d, | 1858 | 0x47, 0x26, 0x51, 0xdf, 0xb3, 0x51, 0x71, 0xc9, 0xd9, 0xf3, 0xba, 0xb8, |
| 1860 | 0x89, 0xee, 0xa1, 0xbc, 0xda, 0x31, 0xc5, 0x7c, 0xdc, 0x00, 0x0d, 0x91, | 1859 | 0x22, 0x3e, 0x16, 0x87, 0x27, 0xe9, 0xb5, 0xca, 0x59, 0xff, 0x9d, 0xb9, |
| 1861 | 0xf7, 0x74, 0x72, 0x30, 0x03, 0xb7, 0xed, 0x5d, 0xec, 0xee, 0xc9, 0x37, | 1860 | 0x1d, 0x8c, 0x07, 0xf5, 0x9c, 0x62, 0xd5, 0x39, 0x7f, 0x9e, 0x46, 0x07, |
| 1862 | 0xc7, 0x2b, 0x91, 0xea, 0x56, 0xd0, 0x39, 0x24, 0x71, 0x56, 0xb8, 0x8d, | 1861 | 0xd6, 0x25, 0x0c, 0xc6, 0xc0, 0xd5, 0x76, 0x37, 0xe7, 0xe1, 0x58, 0xa2, |
| 1863 | 0xc1, 0xb8, 0x1a, 0x65, 0x1b, 0x06, 0xe3, 0x6a, 0xf1, 0x7e, 0x6f, 0x46, | 1862 | 0x03, 0xf7, 0x27, 0xea, 0xc7, 0x9f, 0xa4, 0x6d, 0xe1, 0xee, 0x0e, 0xb4, |
| 1864 | 0xd6, 0x2e, 0x7e, 0x42, 0xbe, 0x14, 0x47, 0xa7, 0x1b, 0xa3, 0xfd, 0xe4, | 1863 | 0xf0, 0xd9, 0x50, 0xaa, 0xe6, 0x42, 0x37, 0x75, 0x3d, 0x31, 0xad, 0xce, |
| 1865 | 0xd7, 0x16, 0xbc, 0x8c, 0xdd, 0x71, 0xda, 0xf8, 0xd2, 0x76, 0x89, 0xd5, | 1864 | 0x59, 0x97, 0x77, 0x1b, 0x3a, 0xcb, 0xeb, 0xc4, 0xb3, 0xfa, 0xd8, 0x80, |
| 1866 | 0x3a, 0x06, 0xe8, 0x0f, 0x93, 0x83, 0xfa, 0x86, 0x69, 0xc5, 0x44, 0x61, | 1865 | 0xfa, 0xef, 0x15, 0x4c, 0x97, 0x5c, 0x32, 0x82, 0xe3, 0x09, 0x1f, 0xbe, |
| 1867 | 0xaf, 0xc4, 0xc4, 0x10, 0x1e, 0x4c, 0x9b, 0x38, 0x29, 0xe7, 0xf8, 0xaf, | 1866 | 0x9e, 0xb4, 0xe8, 0x03, 0xc0, 0xfa, 0x6c, 0x33, 0xf3, 0x88, 0xa7, 0xec, |
| 1868 | 0x4a, 0xae, 0xa8, 0x81, 0x6e, 0x3c, 0x80, 0xa8, 0x75, 0x8c, 0xb1, 0xfd, | 1867 | 0x0a, 0x87, 0xeb, 0xba, 0x69, 0x83, 0x0b, 0x70, 0x82, 0xb1, 0xb7, 0x66, |
| 1869 | 0x4c, 0xae, 0x01, 0x37, 0xed, 0x92, 0x32, 0xed, 0x78, 0x7d, 0xd4, 0x8b, | 1868 | 0x9e, 0xa1, 0x2d, 0x52, 0xe4, 0x7d, 0xeb, 0x5f, 0xdb, 0xee, 0x68, 0x09, |
| 1870 | 0x9b, 0xd2, 0x9b, 0xf0, 0x44, 0xd6, 0x83, 0x11, 0xa3, 0xb9, 0x5f, 0x65, | 1869 | 0x36, 0x0c, 0x85, 0x22, 0x2b, 0x19, 0x67, 0x9f, 0x6a, 0x36, 0xc6, 0x6d, |
| 1871 | 0xfc, 0xbc, 0xbe, 0x3d, 0x12, 0xfc, 0x3a, 0xb9, 0xea, 0xf4, 0x62, 0x46, | 1870 | 0xc6, 0xc0, 0x19, 0xd1, 0x04, 0xe7, 0x3a, 0x24, 0xff, 0xaf, 0x03, 0x7f, |
| 1872 | 0xe5, 0xb9, 0x1d, 0xe8, 0x64, 0xbf, 0x3a, 0x75, 0xf1, 0x49, 0x0b, 0xf7, | 1871 | 0x41, 0x3b, 0xff, 0x24, 0x21, 0x7e, 0x62, 0x10, 0x37, 0xfd, 0xf8, 0x06, |
| 1873 | 0x76, 0x6c, 0xc2, 0xb1, 0xac, 0x6e, 0x3d, 0x29, 0xeb, 0x0c, 0xed, 0x7c, | 1872 | 0xed, 0xfc, 0x7c, 0xa2, 0x0e, 0x59, 0xfa, 0x65, 0x07, 0xfd, 0xe3, 0xdd, |
| 1874 | 0x3e, 0xc7, 0x8b, 0x3e, 0x5d, 0x38, 0xad, 0x4e, 0xdf, 0x22, 0xeb, 0xd4, | 1873 | 0x44, 0x30, 0x7e, 0x93, 0xca, 0x7c, 0x8f, 0xfe, 0xf1, 0x51, 0x22, 0x42, |
| 1875 | 0x3b, 0x70, 0x92, 0xf6, 0xda, 0x9f, 0x5b, 0xca, 0xd8, 0x2f, 0x31, 0xdf, | 1874 | 0xdf, 0xf9, 0x2a, 0x3f, 0x0d, 0xf4, 0x87, 0x3a, 0xd6, 0xd1, 0xe9, 0x07, |
| 1876 | 0x6f, 0x85, 0x59, 0xaf, 0xee, 0x3a, 0x05, 0x27, 0xf6, 0x09, 0xc7, 0x5a, | 1875 | 0x7e, 0x9c, 0x65, 0xf9, 0x03, 0xa9, 0x9a, 0xd6, 0x15, 0x4a, 0x8d, 0x59, |
| 1877 | 0x8a, 0xbb, 0xa8, 0xa7, 0xce, 0xb4, 0x8a, 0xeb, 0xc7, 0xd6, 0xe0, 0xf4, | 1876 | 0xa3, 0x54, 0x30, 0x9f, 0xd5, 0x68, 0xff, 0xb7, 0xe0, 0x43, 0x59, 0x4f, |
| 1878 | 0xce, 0x22, 0xe7, 0x7a, 0x35, 0x6e, 0x7d, 0x86, 0x9c, 0xab, 0x67, 0x16, | 1877 | 0x4e, 0x12, 0x8b, 0x92, 0xe8, 0x2f, 0x22, 0x97, 0x5b, 0xe9, 0x9c, 0xe5, |
| 1879 | 0x39, 0x17, 0xb9, 0x5c, 0xec, 0x41, 0xc5, 0x8b, 0x68, 0x21, 0x41, 0x5e, | 1878 | 0xaf, 0x3f, 0xf1, 0xa9, 0x12, 0x1c, 0x3f, 0xe3, 0x0a, 0x76, 0xcc, 0x20, |
| 1880 | 0x21, 0xfc, 0x22, 0x8c, 0xa7, 0xf2, 0x1d, 0xb8, 0x25, 0xdd, 0x84, 0x71, | 1879 | 0x8f, 0xfe, 0x0b, 0xfa, 0xc1, 0x37, 0x59, 0xf6, 0x93, 0xbe, 0x62, 0x7c, |
| 1881 | 0xf2, 0xad, 0x1c, 0xf1, 0x22, 0x97, 0x67, 0x5c, 0x19, 0x6d, 0xe4, 0xa5, | 1880 | 0x63, 0x88, 0x31, 0x37, 0x55, 0x80, 0x82, 0x3d, 0x5e, 0x3c, 0x78, 0x48, |
| 1882 | 0xf1, 0x5a, 0xc0, 0x4b, 0x77, 0xef, 0xad, 0xa5, 0x2d, 0x27, 0xbb, 0x25, | 1881 | 0xc7, 0x3e, 0x27, 0x57, 0x17, 0x9d, 0x52, 0x77, 0xc4, 0x88, 0x73, 0x73, |
| 1883 | 0x4f, 0x23, 0xff, 0xcd, 0x4b, 0xac, 0x56, 0x98, 0xb7, 0xfe, 0xaf, 0x7a, | 1882 | 0x81, 0x19, 0x07, 0x56, 0xe3, 0xd4, 0x6e, 0x9d, 0x71, 0x2f, 0x67, 0x27, |
| 1884 | 0xc9, 0x4d, 0x83, 0xba, 0x82, 0xaf, 0x65, 0x35, 0xfc, 0x55, 0xfb, 0x76, | 1883 | 0xcf, 0x86, 0x1d, 0x6e, 0x1e, 0x17, 0x6e, 0x5e, 0xc0, 0x71, 0x6d, 0x4d, |
| 1885 | 0x25, 0xd9, 0xe0, 0xbe, 0x83, 0x4a, 0xdf, 0xb6, 0x70, 0x92, 0x63, 0xba, | 1884 | 0x85, 0xda, 0xb7, 0x51, 0x17, 0xb7, 0x67, 0xc5, 0xfe, 0x22, 0x78, 0x8e, |
| 1886 | 0x37, 0x2b, 0x76, 0x49, 0x19, 0xcc, 0xd1, 0x8f, 0x19, 0xf5, 0xd0, 0xea, | 1885 | 0x63, 0xeb, 0xa7, 0xad, 0x1c, 0x48, 0x54, 0x33, 0x47, 0xf7, 0xc1, 0xa2, |
| 1887 | 0x35, 0x39, 0xd7, 0xc4, 0xd8, 0xc1, 0xf8, 0x6b, 0xa7, 0xc8, 0xa3, 0x5a, | 1886 | 0xad, 0x58, 0xf2, 0x0e, 0x13, 0x6d, 0xc5, 0xa2, 0xad, 0x58, 0xb4, 0x15, |
| 1888 | 0xbb, 0x5b, 0x55, 0x8f, 0xbc, 0x9f, 0x67, 0x68, 0xaa, 0xf8, 0x58, 0x0a, | 1887 | 0x8b, 0xb6, 0x62, 0x65, 0x16, 0xe0, 0x99, 0x3e, 0x03, 0x23, 0xec, 0x73, |
| 1889 | 0x15, 0x69, 0xbf, 0x55, 0x27, 0xf5, 0x97, 0x6c, 0x60, 0x3c, 0x68, 0x5d, | 1888 | 0xe7, 0x30, 0x39, 0xbc, 0xf3, 0x3e, 0x50, 0x9d, 0xe4, 0x29, 0xca, 0xc4, |
| 1890 | 0xff, 0xb2, 0xf0, 0xfb, 0x39, 0x11, 0x6d, 0x0a, 0x1b, 0xb0, 0xce, 0xd6, | 1889 | 0xdd, 0xb7, 0x60, 0xa8, 0xef, 0x56, 0x7e, 0x14, 0xb4, 0xd2, 0x66, 0x7a, |
| 1891 | 0x19, 0x03, 0xd7, 0x38, 0xbd, 0x9c, 0x87, 0x51, 0x7b, 0x03, 0xee, 0xb2, | 1890 | 0xd2, 0x62, 0x83, 0x22, 0x93, 0x17, 0xc3, 0x99, 0x9b, 0x2b, 0x51, 0x2c, |
| 1892 | 0x5b, 0xa7, 0x1e, 0xa7, 0x6d, 0xe1, 0xce, 0x0d, 0xe8, 0xe4, 0xb3, 0x91, | 1891 | 0xf1, 0x5d, 0xc1, 0x0e, 0xe7, 0x7e, 0xde, 0xd6, 0xe4, 0x9e, 0x85, 0x9a, |
| 1893 | 0x4c, 0xf3, 0x74, 0x2f, 0x75, 0x7d, 0x7c, 0x76, 0xcc, 0x5d, 0xf7, 0x97, | 1892 | 0x79, 0x9b, 0xf0, 0x48, 0x9f, 0x8a, 0xdb, 0xc2, 0xf2, 0x7f, 0x08, 0x9a, |
| 1894 | 0x33, 0xe4, 0xa3, 0xe4, 0xd7, 0x5f, 0xcd, 0xb4, 0x26, 0x87, 0xd4, 0x1e, | 1893 | 0x99, 0x0f, 0xc8, 0xfe, 0x7c, 0x82, 0xfe, 0x99, 0xb3, 0x15, 0x19, 0x53, |
| 1895 | 0x05, 0x73, 0x24, 0x97, 0x4c, 0x90, 0x53, 0x05, 0xf0, 0x99, 0xb4, 0x45, | 1894 | 0xa6, 0x7f, 0x13, 0x4e, 0xf4, 0x1b, 0x8c, 0x59, 0x26, 0x32, 0xe9, 0x04, |
| 1896 | 0x1f, 0x00, 0x6d, 0xae, 0x83, 0x79, 0xc5, 0x13, 0x4e, 0xbd, 0x19, 0x35, | 1895 | 0x7d, 0x42, 0xfc, 0xdc, 0xc0, 0x33, 0x6c, 0x6b, 0xf6, 0x80, 0x0b, 0x95, |
| 1897 | 0x44, 0x3f, 0xeb, 0x0b, 0x4b, 0xf1, 0x14, 0x63, 0x6f, 0xf3, 0xb5, 0x7a, | 1896 | 0x8d, 0x6e, 0x94, 0xd0, 0xdf, 0x6f, 0x4b, 0xd7, 0x04, 0xbe, 0xa5, 0x24, |
| 1898 | 0xf0, 0x39, 0x68, 0xf0, 0x99, 0x3f, 0x75, 0x1a, 0xcc, 0x1a, 0x3c, 0x30, | 1897 | 0x9c, 0xf5, 0xd7, 0x5d, 0x29, 0x8c, 0xcf, 0x34, 0x2a, 0xb1, 0x6f, 0xb0, |
| 1899 | 0x12, 0x4d, 0xdc, 0xc4, 0x38, 0xdb, 0x79, 0xad, 0x7e, 0xf4, 0x14, 0x63, | 1898 | 0x11, 0x8f, 0xed, 0x76, 0xd1, 0x46, 0xed, 0x05, 0xe5, 0x4d, 0x46, 0xc7, |
| 1900 | 0xe0, 0x7c, 0xd3, 0x96, 0xf3, 0x26, 0xe4, 0x3b, 0x01, 0xd7, 0xce, 0x4f, | 1899 | 0x02, 0x97, 0xe0, 0x45, 0x23, 0xbe, 0xc1, 0x1c, 0x60, 0x7d, 0x7f, 0xd0, |
| 1901 | 0xdb, 0xe2, 0x27, 0x3a, 0x71, 0x33, 0x84, 0xcf, 0xd1, 0xce, 0xdf, 0xb7, | 1900 | 0x7c, 0x05, 0x41, 0xf3, 0x24, 0x16, 0xe0, 0x59, 0x93, 0xb8, 0x39, 0xaf, |
| 1902 | 0x63, 0x98, 0x24, 0xdf, 0xf8, 0x2c, 0xfd, 0xe3, 0x8c, 0x1d, 0x49, 0x5d, | 1901 | 0x11, 0x1b, 0xf7, 0x1b, 0xb4, 0x29, 0x37, 0xf3, 0x63, 0xf9, 0xbf, 0x37, |
| 1903 | 0xa3, 0xea, 0xd8, 0x40, 0xff, 0x78, 0xd7, 0x4e, 0xd0, 0x77, 0x3e, 0xc6, | 1902 | 0xba, 0xb3, 0xc6, 0xf3, 0x32, 0xe4, 0x9c, 0x43, 0xb3, 0xfc, 0x4f, 0x06, |
| 1904 | 0xab, 0x8d, 0xfe, 0x10, 0x63, 0x1d, 0x8d, 0x7e, 0x10, 0x72, 0xcf, 0x95, | 1903 | 0xa5, 0x87, 0xf8, 0x34, 0xa3, 0xd7, 0xe0, 0xb8, 0x5f, 0xb0, 0x4b, 0x0d, |
| 1905 | 0x8e, 0x65, 0x9a, 0xbb, 0x1f, 0x42, 0x73, 0xec, 0x66, 0xa5, 0x8e, 0x79, | 1904 | 0xf9, 0x7f, 0x1c, 0xc4, 0x11, 0x8e, 0xfb, 0xc2, 0xcd, 0x6f, 0xdb, 0x95, |
| 1906 | 0x6a, 0x10, 0xf7, 0x14, 0x6e, 0xc0, 0x89, 0x6c, 0x64, 0x9a, 0x39, 0xf9, | 1905 | 0x86, 0xc4, 0x50, 0xe2, 0x49, 0x5a, 0xfa, 0x8f, 0xed, 0x08, 0x10, 0x3b, |
| 1907 | 0xc6, 0xa5, 0x0a, 0xee, 0x20, 0x67, 0x5b, 0x5f, 0xad, 0xb4, 0x4e, 0x3d, | 1906 | 0x3a, 0xfa, 0x8d, 0x78, 0x29, 0x63, 0xd8, 0x46, 0x07, 0x63, 0x04, 0x5f, |
| 1908 | 0xa5, 0x44, 0x68, 0x93, 0x8c, 0x97, 0xf4, 0xcf, 0xcf, 0xb2, 0xcc, 0x99, | 1907 | 0x8c, 0xb6, 0x6f, 0x21, 0xa4, 0xad, 0x20, 0xee, 0x9c, 0xe6, 0x58, 0x7a, |
| 1909 | 0x6c, 0x35, 0x36, 0x8c, 0xd8, 0xe8, 0xcf, 0x54, 0xa0, 0x6a, 0xa7, 0x1f, | 1908 | 0x52, 0x82, 0x51, 0x3a, 0x8a, 0x7a, 0x63, 0xb8, 0x81, 0x39, 0x63, 0x41, |
| 1910 | 0xf7, 0x8f, 0xe9, 0xc8, 0x64, 0x64, 0x1d, 0xd9, 0x6f, 0xd5, 0x12, 0x37, | 1909 | 0x6f, 0x0b, 0x6a, 0x99, 0x3f, 0xba, 0x7b, 0x5b, 0x61, 0x30, 0x97, 0x9c, |
| 1911 | 0x46, 0x89, 0x0d, 0x2f, 0x2d, 0x01, 0xa6, 0xf7, 0xae, 0xc1, 0x81, 0x9d, | 1910 | 0xd9, 0xbb, 0x1c, 0x0b, 0xc6, 0xf2, 0x1c, 0x5a, 0xc7, 0x11, 0x67, 0xdd, |
| 1912 | 0x3a, 0xe3, 0x5d, 0xd1, 0x3e, 0x82, 0x71, 0x97, 0x93, 0xa7, 0x84, 0x93, | 1911 | 0xea, 0x29, 0x78, 0xee, 0xd3, 0x69, 0x53, 0x72, 0xe6, 0xc5, 0x6b, 0x55, |
| 1913 | 0x57, 0x99, 0x12, 0xfb, 0xa2, 0x3d, 0x8f, 0x50, 0x07, 0xb7, 0x15, 0xc4, | 1912 | 0x12, 0x37, 0xcf, 0x50, 0xd7, 0xed, 0x03, 0xab, 0xed, 0x81, 0x94, 0xf0, |
| 1914 | 0xee, 0x12, 0x9c, 0xa3, 0x30, 0x06, 0x69, 0x23, 0xfb, 0xec, 0x26, 0xe6, | 1913 | 0xa6, 0x2e, 0x78, 0x9a, 0x24, 0xf7, 0xd1, 0x31, 0x46, 0x8e, 0x3c, 0xcc, |
| 1915 | 0xe6, 0x01, 0x58, 0xb4, 0x11, 0x4b, 0xde, 0x53, 0xa5, 0x8d, 0x58, 0xb4, | 1914 | 0x1c, 0xec, 0x8d, 0xfd, 0xab, 0x71, 0xff, 0x9e, 0xcb, 0x39, 0x9b, 0xd9, |
| 1916 | 0x11, 0x8b, 0x36, 0x62, 0xd1, 0x46, 0xac, 0xfc, 0x52, 0xe6, 0x4c, 0x3a, | 1915 | 0x64, 0xfd, 0x7b, 0xda, 0xc5, 0x86, 0x12, 0xda, 0x85, 0x97, 0x76, 0xb1, |
| 1917 | 0xc6, 0xd9, 0xe6, 0xb6, 0x51, 0x72, 0xf7, 0xa0, 0xd8, 0x4a, 0x0c, 0x5f, | 1916 | 0x2b, 0x15, 0x32, 0x0f, 0xd3, 0x2e, 0x6a, 0x89, 0x21, 0x1d, 0xbd, 0x92, |
| 1918 | 0xcf, 0xf4, 0x2b, 0xda, 0x9d, 0x37, 0x60, 0x24, 0x7b, 0x23, 0x2f, 0x05, | 1917 | 0xef, 0x38, 0xef, 0xed, 0x55, 0x78, 0x10, 0xc0, 0x9b, 0xb4, 0x8f, 0x8d, |
| 1919 | 0xb7, 0xd2, 0x56, 0x1e, 0xcd, 0x89, 0xed, 0xe9, 0xee, 0xef, 0xd3, 0x3c, | 1918 | 0xbd, 0x76, 0x97, 0x9b, 0xb1, 0xa7, 0xa7, 0xb9, 0x1a, 0xaf, 0x65, 0x6e, |
| 1920 | 0x9b, 0xdf, 0x33, 0x1b, 0xd5, 0xe2, 0x03, 0x8c, 0x45, 0xee, 0x7d, 0x39, | 1919 | 0xc5, 0xa3, 0xfd, 0xd5, 0x78, 0x85, 0xb6, 0xf3, 0x76, 0x02, 0xf3, 0x2b, |
| 1921 | 0x73, 0xec, 0xc7, 0x68, 0xfe, 0x82, 0x5f, 0x7c, 0x4f, 0xce, 0xab, 0xb4, | 1920 | 0xa0, 0xce, 0xac, 0x60, 0xac, 0xbe, 0x4d, 0x09, 0xb5, 0x2e, 0x42, 0xfd, |
| 1922 | 0xcb, 0x6f, 0xc5, 0x74, 0x30, 0x0f, 0x90, 0x73, 0xee, 0x32, 0x4e, 0x19, | 1921 | 0xf8, 0xcb, 0x4a, 0xb0, 0x93, 0x9c, 0xe5, 0xc4, 0x05, 0x62, 0xff, 0xeb, |
| 1923 | 0x57, 0x71, 0x4c, 0x55, 0x83, 0x9b, 0xf0, 0xf5, 0x41, 0x9d, 0xb1, 0xca, | 1922 | 0x19, 0x39, 0x77, 0xe7, 0xc3, 0x38, 0xed, 0x6a, 0x9c, 0xf5, 0xbe, 0xd1, |
| 1924 | 0xc0, 0x93, 0x39, 0x89, 0xe5, 0xe2, 0xdf, 0x32, 0x0f, 0xe2, 0xeb, 0x1e, | 1923 | 0x5f, 0xc7, 0x79, 0xf3, 0xa0, 0xd0, 0xf0, 0xe3, 0x14, 0xb1, 0xb4, 0x63, |
| 1925 | 0xd4, 0xb4, 0x7b, 0x11, 0x70, 0xfd, 0xbc, 0x39, 0xbc, 0x43, 0xb1, 0xe9, | 1924 | 0x37, 0xc6, 0x03, 0x86, 0x71, 0xa2, 0x55, 0xa9, 0xc2, 0x9b, 0xc3, 0xb7, |
| 1926 | 0x3b, 0xba, 0x9c, 0x03, 0x9d, 0x0a, 0xeb, 0x0d, 0x38, 0xbd, 0xbb, 0x1d, | 1925 | 0x62, 0x63, 0x7f, 0x50, 0x8f, 0xd1, 0x37, 0x5f, 0xe3, 0xb3, 0xf5, 0xbb, |
| 1927 | 0xff, 0x6d, 0xa7, 0x87, 0x3c, 0xc0, 0x59, 0xfa, 0x52, 0x5c, 0x4f, 0x4e, | 1926 | 0x67, 0xe1, 0x38, 0x6d, 0x6f, 0x9c, 0xb6, 0xb7, 0xb6, 0x5f, 0xc5, 0x8b, |
| 1928 | 0x2b, 0xd1, 0xd8, 0x2c, 0xa5, 0x1d, 0xf7, 0x90, 0xfb, 0x6f, 0x18, 0x8c, | 1927 | 0xc3, 0xb7, 0xb0, 0x5f, 0x05, 0xb3, 0x6a, 0x15, 0x27, 0xff, 0xda, 0x91, |
| 1929 | 0x74, 0x33, 0x66, 0x1b, 0xb7, 0x28, 0x4b, 0x51, 0xc5, 0x1c, 0xa0, 0x8d, | 1928 | 0x72, 0xfe, 0x77, 0x81, 0xf3, 0x8e, 0xde, 0x9c, 0x51, 0x13, 0xb3, 0xf7, |
| 1930 | 0x39, 0xc0, 0x83, 0xc4, 0x80, 0xaf, 0x66, 0xbc, 0x68, 0x59, 0x2c, 0xbf, | 1929 | 0xcb, 0xf8, 0xc8, 0xc3, 0x9c, 0xb5, 0xe9, 0x46, 0xdc, 0xbc, 0xa7, 0x12, |
| 1931 | 0x4d, 0xa6, 0xbb, 0x6b, 0x3b, 0x2f, 0x90, 0xa3, 0xce, 0x37, 0x3b, 0xe4, | 1930 | 0xe7, 0xf6, 0x1a, 0x56, 0xb9, 0xcb, 0x5e, 0x70, 0x2a, 0x1c, 0xe2, 0x3c, |
| 1932 | 0x2c, 0x8e, 0x72, 0xf6, 0xba, 0x29, 0x24, 0x28, 0x7f, 0xcc, 0xcd, 0x2f, | 1931 | 0x34, 0xa2, 0xe1, 0x50, 0x23, 0x42, 0x03, 0xb9, 0x18, 0xa1, 0x19, 0x0b, |
| 1933 | 0x12, 0x38, 0x98, 0x27, 0x6e, 0x70, 0xdc, 0xaf, 0xb4, 0xfd, 0x84, 0xf9, | 1932 | 0xf0, 0x3d, 0xce, 0xfb, 0x5a, 0xe6, 0x80, 0x35, 0x43, 0x82, 0xbd, 0x36, |
| 1934 | 0xb0, 0x70, 0x7b, 0x13, 0x13, 0x39, 0x97, 0xff, 0x47, 0xea, 0x88, 0x19, | 1933 | 0x73, 0xc5, 0x66, 0x4c, 0x8c, 0x8d, 0x73, 0x6c, 0x11, 0x9c, 0x25, 0xbf, |
| 1935 | 0xd9, 0x41, 0xbd, 0xcb, 0xaf, 0x9a, 0x78, 0x64, 0xaf, 0xf8, 0xb0, 0x89, | 1934 | 0x7d, 0x9f, 0x31, 0xe3, 0x43, 0xe6, 0x80, 0x1f, 0x3a, 0x31, 0x43, 0xde, |
| 1936 | 0xf6, 0x21, 0x3d, 0x7c, 0x9b, 0x1a, 0x0d, 0xae, 0xe3, 0xb3, 0x05, 0x9c, | 1935 | 0xa5, 0xbd, 0x32, 0x6e, 0xec, 0xe2, 0x9c, 0x6e, 0xec, 0x37, 0xea, 0xfa, |
| 1937 | 0xcf, 0xc7, 0x33, 0x32, 0x8f, 0x1a, 0x5a, 0x18, 0x9b, 0xdf, 0x9c, 0xd0, | 1936 | 0xf8, 0x7b, 0xbd, 0x33, 0xc7, 0x31, 0xe2, 0xb9, 0x60, 0x85, 0xe0, 0x7f, |
| 1938 | 0xb1, 0x88, 0x71, 0xfa, 0x9d, 0x89, 0x18, 0x96, 0x32, 0x66, 0x3b, 0xcc, | 1937 | 0x0b, 0x73, 0xde, 0x56, 0x9c, 0xed, 0x0b, 0x99, 0x0b, 0x95, 0x56, 0xbc, |
| 1939 | 0x1f, 0x12, 0x19, 0xf1, 0x45, 0xf2, 0x81, 0x09, 0x8d, 0x71, 0x56, 0xd6, | 1938 | 0x47, 0x99, 0xfb, 0x28, 0x5f, 0x92, 0xbc, 0x6c, 0x66, 0xd2, 0x18, 0xff, |
| 1940 | 0x87, 0x9e, 0xc0, 0xd8, 0x6a, 0x0d, 0xfb, 0xdc, 0xf3, 0x7c, 0x7e, 0xab, | 1939 | 0xd0, 0x25, 0x18, 0xd3, 0x8a, 0xf2, 0xec, 0xad, 0x38, 0xd5, 0xbf, 0x1c, |
| 1941 | 0x81, 0x58, 0xd9, 0x39, 0xe0, 0xc7, 0xa7, 0x87, 0x36, 0xe3, 0xf5, 0xc5, | 1940 | 0xa5, 0x43, 0xc2, 0x35, 0xa5, 0x4d, 0x37, 0xb6, 0xee, 0xbe, 0x13, 0xeb, |
| 1942 | 0xc2, 0x95, 0xd6, 0x38, 0xa2, 0x9f, 0xc7, 0x29, 0x73, 0x8c, 0xbc, 0x78, | 1941 | 0x0f, 0xe6, 0x72, 0xbe, 0xf5, 0x89, 0x4d, 0xcc, 0x75, 0x85, 0xbf, 0xd7, |
| 1943 | 0x94, 0x79, 0xd7, 0xc2, 0x7d, 0x6b, 0xf0, 0xc9, 0x5d, 0x17, 0xf2, 0xb4, | 1942 | 0xe1, 0x50, 0x2a, 0x26, 0x47, 0x42, 0x77, 0x30, 0x9f, 0x8b, 0xac, 0x20, |
| 1944 | 0x33, 0x71, 0xeb, 0x6e, 0xda, 0xc4, 0xfa, 0x00, 0x6d, 0xa2, 0x96, 0x36, | 1943 | 0x7e, 0x2e, 0x0d, 0x13, 0x63, 0x2b, 0x82, 0x81, 0x97, 0x61, 0xe9, 0xbc, |
| 1945 | 0x61, 0x67, 0xa2, 0xc9, 0x02, 0x6d, 0x22, 0x46, 0xdc, 0xc8, 0x0e, 0x48, | 1944 | 0x17, 0x58, 0x07, 0xd1, 0x89, 0x85, 0x65, 0x8c, 0x3b, 0xb7, 0xf5, 0xbb, |
| 1946 | 0x39, 0xf7, 0x9d, 0x99, 0xbb, 0xe4, 0xdd, 0x65, 0x83, 0xbe, 0xb3, 0x75, | 1945 | 0x29, 0xbb, 0x3c, 0xaf, 0xc3, 0x8f, 0x52, 0x56, 0x5c, 0x9e, 0x6f, 0x84, |
| 1947 | 0xc0, 0xd9, 0xec, 0x65, 0xbc, 0x79, 0xa4, 0xa3, 0x89, 0xd8, 0x72, 0x23, | 1946 | 0xf8, 0x8a, 0xe8, 0xc9, 0x05, 0xb3, 0xa9, 0x26, 0xd6, 0x41, 0x8c, 0x2e, |
| 1948 | 0xf6, 0x0c, 0x36, 0xa1, 0x85, 0x31, 0x63, 0x61, 0x1a, 0x77, 0x84, 0xa1, | 1947 | 0x0d, 0x07, 0xcd, 0x6f, 0xa0, 0x99, 0x73, 0x2f, 0x32, 0x47, 0xb0, 0xfe, |
| 1949 | 0xce, 0x0f, 0x23, 0xb2, 0xe1, 0x1d, 0x44, 0xa7, 0xef, 0x56, 0x5a, 0x8f, | 1948 | 0x10, 0x9c, 0x7d, 0x7f, 0x79, 0x47, 0xe4, 0x3f, 0xf4, 0xed, 0x76, 0xec, |
| 1950 | 0xbe, 0xa8, 0x44, 0x36, 0xfe, 0x84, 0x36, 0x7c, 0x56, 0x91, 0xb6, 0x9b, | 1949 | 0x69, 0x7d, 0xe3, 0x65, 0x1b, 0x3c, 0x90, 0xaa, 0xef, 0x74, 0xa1, 0xc6, |
| 1951 | 0x70, 0x35, 0xfd, 0xe4, 0x2a, 0xfa, 0x84, 0xc6, 0x5c, 0x52, 0x63, 0xdd, | 1950 | 0x2a, 0x87, 0x91, 0xee, 0x23, 0x2f, 0x8d, 0x23, 0xd8, 0x13, 0x87, 0xc4, |
| 1952 | 0xfe, 0x41, 0x1f, 0xe6, 0x33, 0xd7, 0x93, 0xb3, 0xca, 0xb1, 0x31, 0x2f, | 1951 | 0x8c, 0x7a, 0x4b, 0x43, 0x35, 0xdb, 0x8e, 0xe0, 0xad, 0x84, 0x4b, 0xb0, |
| 1953 | 0xb2, 0x3b, 0xf5, 0xa9, 0x47, 0xd0, 0x08, 0x63, 0xec, 0x46, 0x6c, 0x1d, | 1952 | 0x09, 0xf2, 0x4f, 0x8a, 0x22, 0xc4, 0xe1, 0x37, 0x12, 0xc5, 0xd0, 0x87, |
| 1954 | 0xd4, 0x10, 0xe5, 0xbd, 0xbe, 0x9d, 0x0b, 0xd0, 0x4c, 0xfb, 0xd6, 0xe8, | 1953 | 0x12, 0xce, 0xff, 0x11, 0xba, 0x39, 0x6b, 0x91, 0xaf, 0x2d, 0xc0, 0xab, |
| 1955 | 0xa7, 0xbd, 0x83, 0x2a, 0x16, 0x8c, 0xdd, 0x80, 0x1d, 0x83, 0x0a, 0xee, | 1954 | 0xfd, 0x3e, 0xcc, 0x27, 0x4f, 0xa9, 0x4b, 0x3e, 0x65, 0x97, 0x12, 0x87, |
| 1956 | 0x8b, 0x2a, 0x68, 0x19, 0x91, 0x1c, 0x2c, 0x86, 0xa7, 0x32, 0xc2, 0x15, | 1955 | 0xeb, 0x87, 0x42, 0x9a, 0x47, 0xb1, 0xed, 0x03, 0x73, 0x7f, 0x6d, 0x4f, |
| 1957 | 0xa1, 0xb4, 0x5c, 0x4b, 0x8e, 0x4c, 0xee, 0xf9, 0x93, 0x9c, 0xcc, 0xb9, | 1956 | 0x8b, 0x4a, 0x59, 0x23, 0xb2, 0x48, 0xfe, 0x9f, 0xd4, 0x3c, 0xa3, 0xf5, |
| 1958 | 0xe8, 0x53, 0x7e, 0x53, 0xa6, 0x1d, 0x9f, 0xdb, 0xd9, 0x80, 0xab, 0x76, | 1957 | 0x2c, 0x7c, 0xb8, 0x81, 0x58, 0x7a, 0xac, 0xb7, 0x12, 0x6f, 0xed, 0xee, |
| 1959 | 0xeb, 0xd6, 0x69, 0xc5, 0x59, 0x7a, 0x80, 0x7c, 0xde, 0xaf, 0x16, 0xe7, | 1958 | 0x91, 0x35, 0x4b, 0x18, 0xfc, 0xfd, 0x5a, 0x6f, 0x00, 0x3a, 0xb1, 0x4c, |
| 1960 | 0xfc, 0xc1, 0xc1, 0x67, 0x19, 0x2f, 0x7e, 0xe2, 0x04, 0xf5, 0xa5, 0xe8, | 1959 | 0xe7, 0x75, 0x03, 0x31, 0x5a, 0x27, 0x3e, 0xbf, 0xdd, 0x6b, 0x2f, 0xf0, |
| 1961 | 0x8b, 0x27, 0xb1, 0xb6, 0xa3, 0x1d, 0x6b, 0xf7, 0x8a, 0xbe, 0x1c, 0xe6, | 1960 | 0x35, 0x59, 0x6c, 0xbd, 0x0e, 0x0b, 0x88, 0xd1, 0x6f, 0xf4, 0x06, 0x4f, |
| 1962 | 0x87, 0xcc, 0xfd, 0x26, 0xa7, 0xf0, 0x0e, 0xfd, 0x77, 0x11, 0x39, 0xed, | 1961 | 0x2c, 0x51, 0x15, 0x94, 0x34, 0x99, 0xec, 0xdb, 0x87, 0x17, 0x69, 0xdf, |
| 1963 | 0x52, 0xc6, 0x89, 0x37, 0x16, 0x9b, 0xd4, 0x9f, 0xee, 0x9e, 0xf5, 0x9b, | 1962 | 0x4f, 0xa4, 0x8e, 0x7e, 0x6d, 0x06, 0xac, 0xfa, 0x12, 0x04, 0x37, 0x78, |
| 1964 | 0x67, 0x9a, 0xa8, 0x1d, 0xd4, 0x19, 0x67, 0x4c, 0xcc, 0xda, 0x2b, 0xed, | 1963 | 0x14, 0x59, 0xe3, 0x90, 0xd8, 0x56, 0x8d, 0x1b, 0xc9, 0x4d, 0x74, 0xe2, |
| 1965 | 0x99, 0xb8, 0x67, 0x50, 0x4f, 0x3d, 0xcd, 0xb9, 0x14, 0xbb, 0x11, 0xcc, | 1964 | 0x77, 0x4d, 0x56, 0xe2, 0x1c, 0xb0, 0x66, 0x68, 0x35, 0x3e, 0x1c, 0x14, |
| 1966 | 0xae, 0x61, 0xec, 0x3f, 0x39, 0x29, 0x38, 0xd5, 0x89, 0x13, 0xcc, 0x03, | 1965 | 0x1f, 0xc5, 0x42, 0xb1, 0xff, 0x05, 0xe1, 0x90, 0x79, 0x86, 0xb8, 0x5c, |
| 1967 | 0xde, 0x7c, 0x2c, 0xda, 0xfd, 0x33, 0xe6, 0x74, 0xef, 0x50, 0x46, 0x96, | 1966 | 0x3b, 0x96, 0x20, 0xfe, 0xca, 0xb9, 0x3c, 0x8c, 0xab, 0xc4, 0x81, 0xca, |
| 1968 | 0xfd, 0x1b, 0xe0, 0xbc, 0x56, 0xa4, 0xf5, 0x8d, 0xff, 0x8c, 0x28, 0xfd, | 1967 | 0x94, 0x60, 0x57, 0x00, 0x8d, 0xcc, 0xf7, 0xca, 0x53, 0xe2, 0x93, 0x96, |
| 1969 | 0xbb, 0x0b, 0xb5, 0xd4, 0xc9, 0x81, 0xc1, 0x95, 0xf0, 0xd3, 0x16, 0x1e, | 1968 | 0x9c, 0x1b, 0xc1, 0xcd, 0x63, 0x3e, 0xe8, 0x63, 0x1a, 0x3f, 0x7e, 0xe8, |
| 1970 | 0xc9, 0x88, 0xdd, 0x10, 0xbf, 0x77, 0x7e, 0x02, 0x5b, 0xf7, 0x17, 0xf3, | 1969 | 0x23, 0x55, 0xfc, 0x50, 0xd6, 0x91, 0x59, 0xfc, 0x50, 0x56, 0xc6, 0x31, |
| 1971 | 0xbc, 0x7b, 0x06, 0x36, 0xd1, 0xc6, 0x85, 0xb3, 0xc7, 0x68, 0xef, 0x98, | 1970 | 0x73, 0x44, 0xc1, 0x4d, 0x8e, 0x6d, 0x89, 0x0f, 0x7a, 0xf1, 0xec, 0x28, |
| 1972 | 0xe7, 0x43, 0xb2, 0x9e, 0x18, 0x91, 0x58, 0x4e, 0xcc, 0x7c, 0xd4, 0x20, | 1971 | 0xb0, 0xa1, 0xdf, 0xc4, 0xe1, 0xfd, 0x39, 0x9c, 0xdb, 0xcc, 0x3e, 0x42, |
| 1973 | 0xae, 0xd6, 0x47, 0xc2, 0x2d, 0xaa, 0x95, 0x60, 0x5e, 0x17, 0xbe, 0x0f, | 1972 | 0x03, 0x61, 0xac, 0x4f, 0x8b, 0x7d, 0x36, 0xe2, 0xb7, 0x7b, 0x8d, 0xb6, |
| 1974 | 0xd2, 0xbe, 0x85, 0x75, 0x4b, 0x36, 0x61, 0x4f, 0xd6, 0x8b, 0xaa, 0xc5, | 1973 | 0x35, 0x6a, 0x28, 0xb2, 0x9c, 0x18, 0xf6, 0xfe, 0x48, 0x23, 0x3e, 0x7c, |
| 1975 | 0x1e, 0xe2, 0xb1, 0x60, 0x94, 0x15, 0x94, 0xe7, 0x6b, 0x21, 0x7e, 0x22, | 1974 | 0x62, 0x01, 0x8c, 0x70, 0x23, 0xce, 0x1c, 0xd8, 0x84, 0xf2, 0x27, 0x54, |
| 1976 | 0xf3, 0xeb, 0xc1, 0x99, 0x78, 0xf3, 0x86, 0xac, 0xfc, 0x96, 0x05, 0x73, | 1975 | 0xe2, 0x8f, 0x8a, 0xf1, 0xe9, 0x82, 0xed, 0x82, 0xa3, 0x5e, 0xab, 0x8c, |
| 1977 | 0xbe, 0xcf, 0xa2, 0x83, 0x73, 0x2f, 0xfe, 0x98, 0xc0, 0x3d, 0x63, 0xc2, | 1976 | 0xb8, 0xb5, 0x8d, 0xb8, 0xf5, 0xb3, 0xb9, 0xe3, 0x98, 0x9f, 0x94, 0x73, |
| 1978 | 0xd5, 0xc8, 0xe7, 0x6c, 0x3f, 0xfe, 0x3a, 0x2b, 0x9c, 0x6e, 0x33, 0xee, | 1977 | 0xad, 0xcc, 0xaf, 0xd4, 0x08, 0x9e, 0x24, 0x6e, 0xed, 0xea, 0x93, 0xf9, |
| 1979 | 0x69, 0x2f, 0xe7, 0x6e, 0x62, 0x77, 0xad, 0xd3, 0x1e, 0x34, 0x93, 0x93, | 1978 | 0xe2, 0xdc, 0x12, 0xb3, 0xb6, 0xa6, 0x73, 0x9c, 0xe8, 0x70, 0xbf, 0xa1, |
| 1980 | 0xe9, 0xb9, 0xac, 0x1a, 0xb1, 0x52, 0x88, 0xf4, 0xa7, 0x20, 0x71, 0xa2, | 1979 | 0xb9, 0x68, 0xcb, 0x43, 0x93, 0x78, 0xf5, 0x5b, 0xc6, 0xff, 0x47, 0xe6, |
| 1981 | 0xd5, 0xe2, 0x0c, 0x53, 0x36, 0xb9, 0xa5, 0xed, 0x41, 0x1d, 0x7d, 0x5c, | 1980 | 0x45, 0x71, 0x36, 0x2d, 0x7e, 0x25, 0x71, 0x45, 0xc7, 0x87, 0xb4, 0xf1, |
| 1982 | 0x7e, 0x44, 0xae, 0x9d, 0xf6, 0xf3, 0xac, 0x5d, 0x0d, 0xcd, 0xb5, 0x75, | 1981 | 0xa5, 0xd4, 0xf5, 0x19, 0xe6, 0x16, 0x2d, 0x8c, 0x73, 0x1f, 0xd3, 0x9e, |
| 1983 | 0x2f, 0x96, 0x16, 0x2c, 0xe2, 0xed, 0x52, 0xb4, 0x3d, 0x16, 0xc0, 0x35, | 1982 | 0x97, 0x93, 0x3f, 0xbe, 0x97, 0x12, 0x1b, 0x59, 0x8e, 0x25, 0x59, 0xb1, |
| 1984 | 0xe4, 0x26, 0x57, 0xa7, 0x9f, 0x70, 0x66, 0x11, 0x7b, 0xdb, 0x46, 0xa2, | 1983 | 0x05, 0x67, 0x9d, 0x95, 0xdf, 0x31, 0x9c, 0x4e, 0xfc, 0xb1, 0xb8, 0xb0, |
| 1985 | 0xc1, 0x23, 0xe4, 0x81, 0x07, 0x96, 0xfc, 0xd4, 0xf1, 0x98, 0xae, 0x5f, | 1984 | 0x12, 0xaf, 0x0e, 0xca, 0x79, 0x17, 0x03, 0xde, 0xde, 0xa0, 0x56, 0xa2, |
| 1986 | 0x68, 0xf4, 0x00, 0xe7, 0x33, 0x1d, 0xfa, 0xd4, 0x0e, 0x04, 0x90, 0x20, | 1985 | 0xc8, 0x9e, 0x6e, 0x9e, 0xfb, 0x4e, 0x38, 0x39, 0x76, 0x69, 0x34, 0xbf, |
| 1987 | 0x7e, 0x5e, 0x99, 0x69, 0x40, 0xfb, 0xee, 0x7e, 0xce, 0x7f, 0x10, 0x57, | 1986 | 0xbf, 0x98, 0xdf, 0x77, 0xb0, 0xf0, 0xfd, 0xb9, 0x01, 0xf2, 0x4f, 0x28, |
| 1988 | 0xf2, 0xfb, 0x62, 0xc6, 0x37, 0x8d, 0xd8, 0xaa, 0xc9, 0xe7, 0x82, 0xd8, | 1987 | 0x87, 0xe7, 0x16, 0xe0, 0xf6, 0x3d, 0x6d, 0x18, 0xd9, 0xfd, 0x31, 0x8a, |
| 1989 | 0x4b, 0x98, 0x7e, 0xe4, 0x2c, 0xbd, 0xb3, 0xdd, 0xba, 0x63, 0x36, 0xf5, | 1988 | 0xfa, 0xd5, 0x7b, 0x7d, 0xa8, 0xa9, 0x7b, 0x48, 0xe9, 0xc2, 0xa2, 0xb0, |
| 1990 | 0xd5, 0x42, 0x5c, 0x5e, 0x9a, 0x89, 0x6c, 0xbc, 0x59, 0x51, 0xb0, 0xb2, | 1989 | 0xbc, 0xe7, 0x23, 0x6b, 0xe6, 0x7d, 0xd8, 0x7c, 0x80, 0x79, 0xcc, 0xd8, |
| 1991 | 0xdd, 0x60, 0xdb, 0x01, 0xc4, 0x32, 0xb2, 0x36, 0x70, 0xe8, 0xa1, 0x3a, | 1990 | 0x75, 0x38, 0xaa, 0x31, 0x1e, 0x9a, 0x1f, 0xa3, 0xa0, 0xdf, 0xe3, 0x9c, |
| 1992 | 0x58, 0xad, 0x01, 0xda, 0xe9, 0x11, 0x45, 0xd6, 0x35, 0x44, 0x6f, 0x4d, | 1991 | 0x05, 0x3c, 0x6a, 0x36, 0x61, 0xe5, 0xe4, 0x59, 0x40, 0x54, 0x5d, 0xbd, |
| 1993 | 0xb8, 0x8a, 0x7c, 0x44, 0x23, 0x66, 0xc7, 0x0a, 0xa2, 0x43, 0x60, 0x6d, | 1992 | 0x97, 0x00, 0x5f, 0xe9, 0xe4, 0xff, 0x1f, 0xc8, 0xbd, 0xdb, 0x63, 0xa0, |
| 1994 | 0x6e, 0x0d, 0xf6, 0x0c, 0x8b, 0x7f, 0x0a, 0x76, 0x3a, 0x4e, 0xe5, 0xe2, | 1993 | 0x77, 0xf4, 0x7f, 0x95, 0xe7, 0xce, 0x06, 0xfd, 0x6b, 0xca, 0x76, 0xa2, |
| 1995 | 0xa8, 0xf1, 0x36, 0x75, 0xf8, 0xc6, 0x84, 0x60, 0x90, 0x82, 0x79, 0xb4, | 1994 | 0x7d, 0xcf, 0xe3, 0x58, 0xb1, 0xe7, 0x3b, 0xb8, 0x73, 0xa0, 0xb6, 0x33, |
| 1996 | 0x63, 0x55, 0x97, 0x58, 0x2b, 0xb8, 0x15, 0xa6, 0xdf, 0x76, 0xe0, 0xd3, | 1995 | 0xc2, 0x5c, 0xe7, 0x83, 0xf0, 0x38, 0x8e, 0x85, 0x8b, 0x60, 0xf9, 0xc9, |
| 1997 | 0x8c, 0x6d, 0xd5, 0x9c, 0x83, 0x55, 0x4b, 0x9a, 0xe8, 0xbf, 0xc4, 0xc9, | 1996 | 0xb1, 0x6e, 0xfc, 0x8a, 0xbc, 0x4e, 0xca, 0xbf, 0xd3, 0xb6, 0x7e, 0xaf, |
| 1998 | 0x89, 0x20, 0xaf, 0x10, 0x8e, 0xef, 0x6f, 0xe4, 0xa5, 0xf1, 0x5a, 0xc0, | 1997 | 0xb4, 0xf7, 0xf6, 0xa4, 0x7f, 0xfd, 0x7c, 0x9a, 0x9c, 0xa7, 0x79, 0x21, |
| 1999 | 0x4b, 0xe7, 0x3d, 0x15, 0x67, 0xf6, 0x93, 0x33, 0xed, 0x15, 0x0e, 0x22, | 1998 | 0xf5, 0x2b, 0x5b, 0x77, 0x9e, 0xe7, 0xef, 0xbf, 0x65, 0xc7, 0xfc, 0x72, |
| 2000 | 0x3e, 0xe8, 0xc7, 0xd3, 0x13, 0x20, 0x8f, 0x31, 0xc8, 0x43, 0x04, 0xff, | 1999 | 0x7f, 0xd6, 0x64, 0xbd, 0xef, 0xe0, 0x01, 0xe6, 0xbf, 0xa7, 0x9b, 0xbe, |
| 2001 | 0x64, 0x9e, 0x98, 0xc7, 0x0c, 0xc6, 0x11, 0x1d, 0x29, 0x72, 0x8e, 0x93, | 2000 | 0x83, 0x85, 0x43, 0x97, 0xea, 0xa0, 0x68, 0xf7, 0x3a, 0x07, 0xbb, 0xe9, |
| 2002 | 0xc3, 0x7a, 0xcf, 0x5a, 0x44, 0xb5, 0xbf, 0x26, 0x7e, 0x9d, 0x1a, 0x6d, | 2001 | 0x61, 0xe4, 0x48, 0xb2, 0x57, 0x25, 0xfb, 0x27, 0x7f, 0x89, 0xcd, 0x7b, |
| 2003 | 0xc7, 0x74, 0x96, 0xb8, 0xb5, 0xb8, 0x1d, 0x6f, 0xe7, 0x36, 0xd1, 0xff, | 2002 | 0x65, 0x6d, 0xd3, 0xb6, 0xd7, 0x1b, 0xb2, 0xc7, 0x97, 0x3f, 0x37, 0x27, |
| 2004 | 0x55, 0x9c, 0x25, 0x66, 0x69, 0x73, 0x05, 0xd7, 0x05, 0x43, 0xfd, 0xb4, | 2003 | 0xed, 0x58, 0x8a, 0x95, 0x91, 0xba, 0x5b, 0x94, 0xbe, 0xcc, 0xd4, 0x31, |
| 2005 | 0xd7, 0x0e, 0x59, 0x03, 0x55, 0xe2, 0xc4, 0xac, 0x6b, 0xd2, 0xcf, 0x3a, | 2004 | 0x4d, 0x93, 0xff, 0x97, 0xa7, 0x95, 0x44, 0xa7, 0x8e, 0xad, 0x47, 0xd9, |
| 2006 | 0xb5, 0x3a, 0x73, 0x2a, 0x35, 0x81, 0x0c, 0x31, 0xcb, 0xce, 0xca, 0x7c, | 2005 | 0x9e, 0x39, 0xa2, 0xec, 0xca, 0x5c, 0xad, 0x8f, 0xe7, 0xec, 0x58, 0x9b, |
| 2007 | 0x6d, 0xc6, 0x56, 0xe2, 0xd5, 0xd6, 0x9c, 0xd8, 0x37, 0x6d, 0x7a, 0x50, | 2006 | 0xb4, 0x21, 0x32, 0xc1, 0x8f, 0x62, 0x91, 0x2b, 0xff, 0xec, 0x99, 0x49, |
| 2008 | 0x0f, 0x16, 0x68, 0xdb, 0xea, 0x5e, 0x91, 0x61, 0xa2, 0x8f, 0xb1, 0xfd, | 2007 | 0xb9, 0x0b, 0xa1, 0x57, 0xe6, 0xe4, 0xbe, 0x9f, 0x72, 0x9b, 0x4d, 0x31, |
| 2009 | 0x33, 0x1d, 0x26, 0x76, 0xe4, 0x24, 0x0e, 0x0a, 0x07, 0xd3, 0x98, 0x97, | 2008 | 0xa8, 0xf3, 0xa6, 0xca, 0x9e, 0x1f, 0xe7, 0x7f, 0xbb, 0xd4, 0x56, 0xae, |
| 2010 | 0x24, 0xd1, 0x43, 0x9c, 0x7a, 0xdb, 0xee, 0xc4, 0x0a, 0xe2, 0xd4, 0x2f, | 2009 | 0xdc, 0xcd, 0x7e, 0xb1, 0x21, 0x75, 0xde, 0xd4, 0x35, 0xfb, 0x02, 0xe2, |
| 2011 | 0x98, 0xa7, 0xdc, 0x49, 0x9c, 0x7a, 0xc3, 0x2e, 0xe2, 0xd4, 0xcd, 0x13, | 2010 | 0x47, 0x48, 0xdb, 0x8a, 0x5c, 0xbe, 0xb7, 0xe6, 0xca, 0x7c, 0x4f, 0xb0, |
| 2012 | 0x62, 0x0b, 0x45, 0x5e, 0x7e, 0xc2, 0x6e, 0x6b, 0x90, 0xdf, 0x39, 0xab, | 2011 | 0x0b, 0x23, 0x09, 0x0d, 0xef, 0x99, 0x92, 0xdf, 0xc9, 0xad, 0x28, 0xbe, |
| 2013 | 0x36, 0x7f, 0x57, 0x5c, 0x58, 0x85, 0x97, 0x86, 0xcb, 0x7b, 0xc5, 0x91, | 2012 | 0xc7, 0xfc, 0xf1, 0x99, 0x44, 0xb0, 0x75, 0x9d, 0x52, 0x1f, 0x9b, 0xc3, |
| 2014 | 0xe4, 0xed, 0xe4, 0xcc, 0x47, 0x47, 0xcb, 0x9c, 0xf7, 0xb8, 0x9b, 0x5b, | 2013 | 0x38, 0x87, 0x0a, 0x59, 0x4f, 0x8f, 0x38, 0xff, 0xaf, 0x2a, 0x13, 0x8a, |
| 2015 | 0xcf, 0x32, 0xcb, 0xfb, 0x96, 0xe5, 0xfd, 0x06, 0x0b, 0x5f, 0x5d, 0x22, | 2014 | 0x20, 0x43, 0x7f, 0x78, 0x23, 0x11, 0xec, 0x38, 0xa3, 0xe4, 0xfe, 0x0f, |
| 2016 | 0x3c, 0x53, 0xd6, 0x81, 0x2a, 0xc8, 0x27, 0xbb, 0x31, 0xbe, 0xf3, 0x3d, | 2015 | 0xd6, 0xeb, 0xce, 0xfb, 0x1c, 0x79, 0xbb, 0x13, 0xce, 0x39, 0x75, 0x3d, |
| 2017 | 0x3c, 0x32, 0xa8, 0xde, 0x5c, 0xc3, 0xd8, 0x7a, 0x8b, 0xb2, 0x19, 0x9e, | 2016 | 0x57, 0x6c, 0x30, 0xd8, 0x97, 0x46, 0xa5, 0xac, 0x9b, 0x58, 0x16, 0xf3, |
| 2018 | 0xb8, 0xbc, 0x47, 0x2a, 0x6b, 0xe5, 0xcc, 0x5d, 0x26, 0xb3, 0xe8, 0xdb, | 2017 | 0xa1, 0xee, 0x94, 0x15, 0x50, 0xf1, 0x15, 0xc4, 0xfd, 0xb2, 0x47, 0x72, |
| 2019 | 0x57, 0x83, 0x43, 0x41, 0xc7, 0x79, 0xda, 0x98, 0x27, 0x3f, 0x13, 0x20, | 2018 | 0xcb, 0xe4, 0xff, 0xa9, 0x11, 0x7e, 0xf4, 0x2f, 0xaf, 0x4f, 0xc9, 0xff, |
| 2020 | 0xb8, 0x19, 0xa8, 0xa0, 0x2f, 0xdc, 0xfc, 0x5b, 0xbf, 0xdd, 0x58, 0xde, | 2019 | 0x06, 0xca, 0xdb, 0x8b, 0x35, 0x76, 0x3d, 0xd2, 0x9a, 0xac, 0x7d, 0xc0, |
| 2021 | 0x3b, 0xd8, 0x88, 0xbb, 0x76, 0x3d, 0x8c, 0x9e, 0x5d, 0x7f, 0x8b, 0x4f, | 2020 | 0x9a, 0x46, 0x5d, 0xfb, 0x8d, 0x4d, 0x1c, 0xb7, 0x07, 0xd3, 0x99, 0xdb, |
| 2022 | 0x0e, 0x2d, 0xec, 0x9f, 0xe7, 0x71, 0x9c, 0xab, 0xdb, 0xa7, 0x70, 0x2a, | 2021 | 0x85, 0x6b, 0xeb, 0xdb, 0x1a, 0xd5, 0x6b, 0x10, 0xab, 0x08, 0x6a, 0x31, |
| 2023 | 0xce, 0xd8, 0x18, 0x52, 0xf0, 0xbd, 0xab, 0x16, 0x8a, 0x1c, 0xfe, 0xbd, | 2022 | 0x72, 0xcd, 0x1e, 0xe7, 0xff, 0xed, 0xc8, 0xb9, 0x14, 0xab, 0xd5, 0x4b, |
| 2024 | 0xef, 0x68, 0xae, 0xbc, 0x5b, 0x4b, 0x3e, 0x92, 0x98, 0xc3, 0xf1, 0x53, | 2023 | 0x4c, 0x6f, 0x52, 0x14, 0x14, 0x84, 0xe0, 0x7e, 0x28, 0xe3, 0x86, 0x56, |
| 2025 | 0xf6, 0x8a, 0xfa, 0xd2, 0xbb, 0xc2, 0x7f, 0x40, 0x5b, 0x3f, 0x16, 0x19, | 2024 | 0xfb, 0x5b, 0xfb, 0x17, 0x7e, 0x03, 0xdb, 0xc6, 0x6e, 0xb9, 0xf4, 0xff, |
| 2026 | 0xfc, 0x2b, 0xcb, 0x78, 0xcd, 0x49, 0xae, 0x96, 0x7a, 0x15, 0xa5, 0x36, | 2025 | 0x87, 0xfe, 0x63, 0xf6, 0xea, 0xec, 0x37, 0xdf, 0xe6, 0xc7, 0x76, 0x6c, |
| 2027 | 0xfe, 0x96, 0x9c, 0x90, 0xbc, 0xd0, 0xe0, 0xff, 0x91, 0xeb, 0x44, 0x3e, | 2026 | 0xba, 0xf4, 0x2d, 0xed, 0xfe, 0x31, 0x59, 0xf3, 0xef, 0x7a, 0xd4, 0xe8, |
| 2028 | 0x9f, 0x95, 0xe5, 0xbf, 0xe4, 0x24, 0xbb, 0xe5, 0xbb, 0x94, 0x59, 0xc7, | 2027 | 0x2e, 0x94, 0x63, 0xab, 0xb9, 0xde, 0x2f, 0x67, 0xe5, 0xd6, 0x43, 0xf6, |
| 2029 | 0x67, 0x52, 0xae, 0xfc, 0xec, 0xf9, 0x92, 0x9c, 0x4a, 0x68, 0x0d, 0x45, | 2028 | 0xff, 0x65, 0x0e, 0xe4, 0x1d, 0xc3, 0x08, 0xf3, 0x6e, 0xd1, 0x4b, 0x14, |
| 2030 | 0x39, 0x9f, 0xa6, 0x9c, 0x33, 0x8b, 0x93, 0x50, 0xaf, 0x9d, 0x29, 0xab, | 2029 | 0x0f, 0x66, 0xe4, 0x9d, 0xa0, 0x59, 0x90, 0xff, 0xfb, 0xf5, 0x60, 0x26, |
| 2031 | 0xdc, 0xee, 0xff, 0x3a, 0x2f, 0xab, 0x58, 0xee, 0x6f, 0xe6, 0xc8, 0xbe, | 2030 | 0xa7, 0xbf, 0x47, 0x33, 0x3e, 0xe6, 0x00, 0x3e, 0xda, 0x60, 0x07, 0xf9, |
| 2032 | 0x80, 0x7a, 0xed, 0xcc, 0x75, 0xf2, 0x0a, 0xfa, 0x6f, 0x34, 0xb8, 0xd5, | 2031 | 0x0b, 0xf9, 0xd3, 0x25, 0x5d, 0xde, 0xeb, 0x97, 0x75, 0x85, 0xef, 0xd3, |
| 2033 | 0x5d, 0x9f, 0x36, 0xb0, 0xf6, 0xe2, 0x1c, 0x4b, 0xb0, 0x03, 0xe3, 0x76, | 2032 | 0xa7, 0xdd, 0xb5, 0x72, 0x6d, 0xc9, 0xb9, 0x51, 0x25, 0x77, 0x7d, 0xde, |
| 2034 | 0xb0, 0x94, 0x53, 0xc9, 0x2d, 0x13, 0x5f, 0x66, 0xce, 0xf6, 0x94, 0x1d, | 2033 | 0x79, 0x37, 0x52, 0x8d, 0xae, 0xc3, 0xc2, 0xc4, 0x34, 0x39, 0x3f, 0x29, |
| 2035 | 0xe9, 0x5a, 0xa7, 0xb4, 0x26, 0x17, 0x31, 0xce, 0xa0, 0x5e, 0xd6, 0xb0, | 2034 | 0x6b, 0x36, 0x96, 0x3f, 0x2a, 0xef, 0x61, 0xf8, 0x88, 0xb1, 0x5f, 0xf5, |
| 2036 | 0x13, 0xee, 0xef, 0xf9, 0xe5, 0xa3, 0x09, 0xe4, 0x69, 0x8f, 0xaf, 0xd8, | 2035 | 0x4f, 0xbe, 0x73, 0xd5, 0xba, 0x82, 0x38, 0x36, 0x27, 0x6c, 0xc4, 0x9a, |
| 2037 | 0x91, 0x0d, 0xa7, 0xdc, 0xfd, 0x3b, 0x13, 0x2f, 0xe7, 0x5f, 0x2d, 0xed, | 2036 | 0x94, 0xa0, 0xbe, 0x52, 0x69, 0x63, 0xbd, 0x3a, 0xf4, 0x64, 0xa5, 0x0d, |
| 2038 | 0x33, 0x95, 0x7f, 0x4f, 0x6c, 0xe6, 0x1a, 0xaa, 0xcc, 0xbf, 0x9c, 0xb1, | 2037 | 0xc5, 0xf9, 0xdf, 0x92, 0x1e, 0xb6, 0x71, 0x30, 0x51, 0xaf, 0x7b, 0xd4, |
| 2039 | 0x6e, 0x90, 0xb5, 0x0a, 0xcb, 0xa2, 0x9f, 0xf7, 0x66, 0xac, 0xb0, 0x8a, | 2038 | 0x4f, 0x6d, 0xcb, 0x39, 0x03, 0x29, 0xfb, 0xf6, 0x71, 0xbc, 0x94, 0x98, |
| 2040 | 0xeb, 0x90, 0x0a, 0xc9, 0xbe, 0xc4, 0xd6, 0xd2, 0x6f, 0x52, 0xb1, 0xde, | 2039 | 0x4e, 0x94, 0xba, 0xba, 0xdd, 0x4b, 0xeb, 0xe7, 0x7f, 0xa3, 0x21, 0xc6, |
| 2041 | 0xef, 0x58, 0x13, 0x02, 0x8c, 0xd2, 0x39, 0xb6, 0x18, 0xac, 0xc9, 0x2b, | 2040 | 0xb6, 0x82, 0x9d, 0x61, 0x57, 0x70, 0xc3, 0x05, 0xe2, 0x4a, 0x36, 0x6c, |
| 2042 | 0xc8, 0xc5, 0x64, 0xbd, 0x01, 0xd6, 0x6c, 0x53, 0x43, 0x48, 0x3f, 0xcc, | 2041 | 0xc4, 0x7f, 0xc0, 0x3e, 0xfe, 0x56, 0xa9, 0x43, 0x62, 0x4a, 0xfb, 0xb9, |
| 2043 | 0x71, 0xfb, 0x30, 0x87, 0xf9, 0x54, 0x7c, 0x61, 0x6b, 0x77, 0xbb, 0x3a, | 2042 | 0xb6, 0xea, 0xdb, 0x0b, 0xd4, 0xf3, 0xce, 0xbb, 0xf8, 0xd2, 0xbe, 0x16, |
| 2044 | 0x57, 0x70, 0x36, 0x98, 0x54, 0x63, 0x12, 0x07, 0x50, 0x99, 0x96, 0xb3, | 2043 | 0x5d, 0x0d, 0x2d, 0x69, 0xd9, 0x7e, 0xb6, 0x39, 0x33, 0x1a, 0xdc, 0x57, |
| 2045 | 0x26, 0x56, 0x97, 0x9f, 0x98, 0xba, 0x98, 0xd8, 0x52, 0x11, 0x85, 0xf7, | 2044 | 0x41, 0x30, 0xfa, 0xb6, 0xda, 0x85, 0x35, 0x72, 0x3c, 0x24, 0x1a, 0xd4, |
| 2046 | 0xbe, 0xbc, 0x17, 0xc1, 0x85, 0xbf, 0x70, 0x7e, 0x18, 0x8a, 0x61, 0xdb, | 2045 | 0x1f, 0xa0, 0x7d, 0x34, 0x3a, 0x6d, 0xc4, 0xea, 0x0a, 0x20, 0x9c, 0xf2, |
| 2047 | 0x64, 0xb9, 0x0f, 0x06, 0xfe, 0x7b, 0xe1, 0xd2, 0x8c, 0xb3, 0x2c, 0xf3, | 2046 | 0x4b, 0xed, 0x84, 0x39, 0x81, 0x70, 0x31, 0x96, 0x73, 0xce, 0x03, 0xc8, |
| 2048 | 0x3d, 0x27, 0x39, 0x47, 0xda, 0x2e, 0xca, 0xfd, 0xe8, 0xbe, 0x4a, 0x1f, | 2047 | 0xb9, 0x49, 0xe6, 0x0d, 0x09, 0xf9, 0xbf, 0x7d, 0x4e, 0x37, 0x93, 0x7b, |
| 2049 | 0xa5, 0xaf, 0xcd, 0x1a, 0x51, 0x15, 0x5b, 0x8d, 0x89, 0x39, 0xf2, 0x9b, | 2048 | 0x5a, 0xcc, 0xd7, 0x19, 0xaf, 0xd7, 0xcb, 0xff, 0x48, 0x2a, 0xf6, 0xe1, |
| 2050 | 0x3f, 0xf7, 0xb8, 0x67, 0xd3, 0x65, 0x0e, 0xe4, 0xfd, 0xf1, 0x04, 0xee, | 2049 | 0xc1, 0x84, 0xac, 0x81, 0xfc, 0x1f, 0x05, 0x3f, 0x96, 0xb4, 0x1c, 0x54, |
| 2051 | 0x93, 0xf7, 0x30, 0x19, 0xb3, 0xee, 0xcd, 0xbb, 0xef, 0x77, 0x42, 0x7e, | 2050 | 0x00, 0x00, 0x00 }; |
| 2052 | 0x17, 0xf1, 0xde, 0x7c, 0x51, 0x7f, 0x0f, 0xe5, 0x03, 0xe4, 0xdd, 0x01, | ||
| 2053 | 0xcb, 0x6b, 0x6e, 0x80, 0x4f, 0x97, 0x33, 0x67, 0x65, 0x5d, 0xfe, 0xdf, | ||
| 2054 | 0x73, 0x24, 0x97, 0xff, 0x2a, 0xfd, 0xc9, 0xbb, 0x50, 0x3e, 0x5b, 0xf2, | ||
| 2055 | 0xae, 0xa2, 0x52, 0xfc, 0x7c, 0xc6, 0x7d, 0xef, 0x5d, 0x35, 0xd7, 0xd1, | ||
| 2056 | 0x2f, 0x67, 0xbb, 0xef, 0xeb, 0x89, 0x7e, 0x42, 0xa6, 0xe5, 0xcc, 0xd6, | ||
| 2057 | 0x03, 0xb4, 0x91, 0xde, 0x39, 0xa5, 0x77, 0x0f, 0xba, 0xee, 0x20, 0x8e, | ||
| 2058 | 0x2c, 0x22, 0xb7, 0x5a, 0xac, 0x44, 0xb4, 0x55, 0x4a, 0x37, 0xeb, 0x51, | ||
| 2059 | 0x4f, 0x05, 0x91, 0xa1, 0xb8, 0xbf, 0xbd, 0xeb, 0xa3, 0x8c, 0xfd, 0x76, | ||
| 2060 | 0xab, 0xe6, 0x53, 0x7f, 0x5e, 0x3a, 0x7b, 0x2d, 0x7b, 0xf1, 0x29, 0x3c, | ||
| 2061 | 0x6f, 0xcf, 0xc1, 0xd4, 0x6f, 0xc9, 0x3d, 0xbf, 0x66, 0xfd, 0x4f, 0x41, | ||
| 2062 | 0x62, 0x88, 0x4f, 0x8f, 0x6c, 0x8c, 0x7b, 0x22, 0xeb, 0xa7, 0xe9, 0xd3, | ||
| 2063 | 0x85, 0xb8, 0x9e, 0xfa, 0x1a, 0xdb, 0xf8, 0x3e, 0xb9, 0x85, 0x3d, 0x43, | ||
| 2064 | 0x7e, 0x51, 0x56, 0x6b, 0x4f, 0x85, 0x7a, 0xc6, 0x29, 0xbe, 0x77, 0x2d, | ||
| 2065 | 0xbf, 0xfb, 0xbb, 0x06, 0xc1, 0xb4, 0xe5, 0x84, 0x28, 0x73, 0xbe, 0x19, | ||
| 2066 | 0xd9, 0x53, 0xaf, 0xea, 0xd9, 0xcf, 0xab, 0x9b, 0xb1, 0x56, 0x8e, 0x7c, | ||
| 2067 | 0x98, 0x11, 0xed, 0xd3, 0xb4, 0x8f, 0x76, 0x57, 0x46, 0x32, 0x56, 0x81, | ||
| 2068 | 0x8f, 0x3a, 0xd3, 0xc6, 0xf1, 0x41, 0xd6, 0x28, 0x59, 0xce, 0xdd, 0xe3, | ||
| 2069 | 0x97, 0xf7, 0x77, 0x98, 0x63, 0xdb, 0xf2, 0xbb, 0xa6, 0x6e, 0x33, 0xa5, | ||
| 2070 | 0x7d, 0x24, 0xe6, 0xc8, 0x8c, 0x97, 0xf7, 0xc8, 0x6f, 0xc8, 0x55, 0x07, | ||
| 2071 | 0x70, 0xaf, 0x2d, 0xeb, 0x0e, 0xff, 0x3f, 0x45, 0x18, 0xff, 0x64, 0x3c, | ||
| 2072 | 0x59, 0x00, 0x00, 0x00 }; | ||
| 2073 | 2051 | ||
| 2074 | static const u32 bnx2_CP_b09FwData[(0x84/4) + 1] = { | 2052 | static const u32 bnx2_CP_b09FwData[(0x84/4) + 1] = { |
| 2075 | 0x00000000, 0x0000001b, 0x0000000f, 0x0000000a, 0x00000008, 0x00000006, | 2053 | 0x00000000, 0x0000001b, 0x0000000f, 0x0000000a, 0x00000008, 0x00000006, |
| @@ -2079,1076 +2057,1088 @@ static const u32 bnx2_CP_b09FwData[(0x84/4) + 1] = { | |||
| 2079 | 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, | 2057 | 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, |
| 2080 | 0x00000001, 0x00000001, 0x00000001, 0x00000000 }; | 2058 | 0x00000001, 0x00000001, 0x00000001, 0x00000000 }; |
| 2081 | static const u32 bnx2_CP_b09FwRodata[(0x16c/4) + 1] = { | 2059 | static const u32 bnx2_CP_b09FwRodata[(0x16c/4) + 1] = { |
| 2082 | 0x80080100, 0x80080080, 0x80080000, 0x08001744, 0x08001744, 0x0800177c, | 2060 | 0x80080100, 0x80080080, 0x80080000, 0x08001800, 0x08001800, 0x08001838, |
| 2083 | 0x0800177c, 0x08001790, 0x08001760, 0x080019b8, 0x08001984, 0x08001a10, | 2061 | 0x08001838, 0x0800184c, 0x0800181c, 0x08001a74, 0x08001a40, 0x08001acc, |
| 2084 | 0x08001a10, 0x08001a98, 0x080019c8, 0x80080240, 0x08003260, 0x080031cc, | 2062 | 0x08001acc, 0x08001b54, 0x08001a84, 0x80080240, 0x080021c4, 0x08002010, |
| 2085 | 0x08003288, 0x080032b0, 0x080032d8, 0x080032fc, 0x08003344, 0x08003320, | 2063 | 0x080021ec, 0x08002284, 0x080023d4, 0x08002420, 0x08002544, 0x0800244c, |
| 2086 | 0x08003368, 0x08003234, 0x0800345c, 0x0800344c, 0x080031e8, 0x080031e8, | 2064 | 0x080024d0, 0x08002080, 0x080029f8, 0x0800299c, 0x0800202c, 0x0800202c, |
| 2087 | 0x080031e8, 0x080033bc, 0x080033bc, 0x080031e8, 0x080031e8, 0x0800343c, | 2065 | 0x0800202c, 0x080025b8, 0x080025b8, 0x0800202c, 0x0800202c, 0x08002874, |
| 2088 | 0x080031e8, 0x080031e8, 0x080031e8, 0x080031e8, 0x0800342c, 0x080031e8, | 2066 | 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x080028d4, 0x0800202c, |
| 2089 | 0x080031e8, 0x080031e8, 0x080031e8, 0x080031e8, 0x080031e8, 0x080031e8, | 2067 | 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, |
| 2090 | 0x080031e8, 0x080031e8, 0x080031e8, 0x080031e8, 0x080031e8, 0x080031e8, | 2068 | 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, |
| 2091 | 0x080031e8, 0x0800341c, 0x080031e8, 0x080031e8, 0x0800340c, 0x080031e8, | 2069 | 0x0800202c, 0x08002440, 0x0800202c, 0x0800202c, 0x08002944, 0x0800202c, |
| 2092 | 0x080031e8, 0x080031e8, 0x080031e8, 0x080031e8, 0x080031e8, 0x080031e8, | 2070 | 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, |
| 2093 | 0x080031e8, 0x080031e8, 0x080031e8, 0x080031e8, 0x080031e8, 0x080031e8, | 2071 | 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, |
| 2094 | 0x080031e8, 0x080031e8, 0x080031e8, 0x080031e8, 0x080033f4, 0x080031e8, | 2072 | 0x0800202c, 0x0800202c, 0x0800202c, 0x0800202c, 0x08002798, 0x0800202c, |
| 2095 | 0x080031e8, 0x080033e4, 0x080033d4, 0x08003d6c, 0x08003d40, 0x08003d0c, | 2073 | 0x0800202c, 0x08002700, 0x0800265c, 0x080037c0, 0x08003794, 0x08003760, |
| 2096 | 0x08003ce0, 0x08003cc0, 0x08003c74, 0x80080100, 0x80080080, 0x80080000, | 2074 | 0x08003734, 0x08003714, 0x080036c8, 0x80080100, 0x80080080, 0x80080000, |
| 2097 | 0x80080080, 0x00000000 }; | 2075 | 0x80080080, 0x00000000 }; |
| 2098 | 2076 | ||
| 2099 | static struct fw_info bnx2_cp_fw_09 = { | 2077 | static struct fw_info bnx2_cp_fw_09 = { |
| 2100 | /* Firmware version: 4.4.23 */ | 2078 | /* Firmware version: 4.6.15 */ |
| 2101 | .ver_major = 0x4, | 2079 | .ver_major = 0x4, |
| 2102 | .ver_minor = 0x4, | 2080 | .ver_minor = 0x6, |
| 2103 | .ver_fix = 0x17, | 2081 | .ver_fix = 0xf, |
| 2104 | 2082 | ||
| 2105 | .start_addr = 0x08000080, | 2083 | .start_addr = 0x08000080, |
| 2106 | 2084 | ||
| 2107 | .text_addr = 0x08000000, | 2085 | .text_addr = 0x08000000, |
| 2108 | .text_len = 0x5938, | 2086 | .text_len = 0x5418, |
| 2109 | .text_index = 0x0, | 2087 | .text_index = 0x0, |
| 2110 | .gz_text = bnx2_CP_b09FwText, | 2088 | .gz_text = bnx2_CP_b09FwText, |
| 2111 | .gz_text_len = sizeof(bnx2_CP_b09FwText), | 2089 | .gz_text_len = sizeof(bnx2_CP_b09FwText), |
| 2112 | 2090 | ||
| 2113 | .data_addr = 0x08005ac0, | 2091 | .data_addr = 0x080055a0, |
| 2114 | .data_len = 0x84, | 2092 | .data_len = 0x84, |
| 2115 | .data_index = 0x0, | 2093 | .data_index = 0x0, |
| 2116 | .data = bnx2_CP_b09FwData, | 2094 | .data = bnx2_CP_b09FwData, |
| 2117 | 2095 | ||
| 2118 | .sbss_addr = 0x08005b44, | 2096 | .sbss_addr = 0x08005624, |
| 2119 | .sbss_len = 0x91, | 2097 | .sbss_len = 0x91, |
| 2120 | .sbss_index = 0x0, | 2098 | .sbss_index = 0x0, |
| 2121 | 2099 | ||
| 2122 | .bss_addr = 0x08005bd8, | 2100 | .bss_addr = 0x080056b8, |
| 2123 | .bss_len = 0x19c, | 2101 | .bss_len = 0x19c, |
| 2124 | .bss_index = 0x0, | 2102 | .bss_index = 0x0, |
| 2125 | 2103 | ||
| 2126 | .rodata_addr = 0x08005938, | 2104 | .rodata_addr = 0x08005418, |
| 2127 | .rodata_len = 0x16c, | 2105 | .rodata_len = 0x16c, |
| 2128 | .rodata_index = 0x0, | 2106 | .rodata_index = 0x0, |
| 2129 | .rodata = bnx2_CP_b09FwRodata, | 2107 | .rodata = bnx2_CP_b09FwRodata, |
| 2130 | }; | 2108 | }; |
| 2131 | 2109 | ||
| 2132 | static u8 bnx2_RXP_b09FwText[] = { | 2110 | static u8 bnx2_RXP_b09FwText[] = { |
| 2133 | 0xec, 0x5c, 0x7f, 0x70, 0x1c, 0xd5, 0x7d, 0xff, 0xbc, 0xbd, 0xbd, 0xbb, | 2111 | 0xec, 0x5c, 0x7d, 0x70, 0x1c, 0xe5, 0x79, 0xff, 0xbd, 0x7b, 0x7b, 0xd2, |
| 2134 | 0x95, 0x74, 0x3e, 0xed, 0x9d, 0x4e, 0xb2, 0x04, 0x06, 0xef, 0xa2, 0x95, | 2112 | 0x4a, 0x3a, 0x9d, 0x56, 0xa7, 0x93, 0x7c, 0x22, 0x04, 0xef, 0xa2, 0x3d, |
| 2135 | 0x74, 0x58, 0xc6, 0xec, 0x9d, 0x4e, 0xb6, 0x48, 0xb7, 0xc9, 0xd5, 0x36, | 2113 | 0xf9, 0xb0, 0x0c, 0xec, 0x9d, 0x4f, 0xb6, 0xa0, 0xdb, 0xb2, 0x83, 0x0d, |
| 2136 | 0x20, 0x17, 0x52, 0x84, 0xa1, 0xc1, 0xcc, 0x30, 0x9d, 0x1b, 0x63, 0x8c, | 2114 | 0x11, 0x21, 0x13, 0x84, 0x4d, 0x52, 0x33, 0x49, 0x27, 0x37, 0xc6, 0x18, |
| 2137 | 0xb0, 0x1d, 0xa2, 0x00, 0x33, 0xc8, 0x29, 0x13, 0x16, 0xfc, 0xb3, 0xf8, | 2115 | 0x81, 0x4d, 0x70, 0x0d, 0x6d, 0x55, 0x86, 0x19, 0x6f, 0x2c, 0x7f, 0x01, |
| 2138 | 0xa4, 0x93, 0x8d, 0x8c, 0xc9, 0xf4, 0xd7, 0x21, 0xcb, 0x8a, 0x81, 0x93, | 2116 | 0x27, 0x9d, 0x62, 0x64, 0x63, 0xd2, 0x0e, 0x68, 0x6c, 0x59, 0x08, 0x7c, |
| 2139 | 0xce, 0x04, 0xda, 0x98, 0x69, 0xa8, 0x15, 0x6c, 0x53, 0x87, 0x5f, 0x21, | 2117 | 0xd2, 0x61, 0x20, 0xad, 0xe8, 0x84, 0xfa, 0x26, 0xd8, 0xe0, 0x94, 0xcf, |
| 2140 | 0x19, 0x68, 0x4d, 0x9b, 0x99, 0xa8, 0x06, 0x1c, 0xd3, 0xa6, 0xd4, 0xb4, | 2118 | 0x21, 0x0c, 0xc3, 0x1f, 0xcd, 0xa0, 0x62, 0x3e, 0xcc, 0x94, 0xa1, 0x26, |
| 2141 | 0x0e, 0xb5, 0x8b, 0xeb, 0xd7, 0xef, 0x77, 0x4f, 0x97, 0x50, 0x42, 0xcb, | 2119 | 0x38, 0xa9, 0xdd, 0xb8, 0x7e, 0xfb, 0x3c, 0x7b, 0x3a, 0x9b, 0x90, 0x26, |
| 2142 | 0x64, 0xa6, 0x7f, 0xee, 0x77, 0xe6, 0xe6, 0xf6, 0xde, 0xfb, 0xbe, 0xef, | 2120 | 0x9d, 0xfc, 0xd1, 0xff, 0xf6, 0x99, 0xb9, 0xb9, 0xbd, 0x77, 0xdf, 0xf7, |
| 2143 | 0x7b, 0xdf, 0xdf, 0x9f, 0xb7, 0x1a, 0xfb, 0xbe, 0x08, 0x6a, 0x31, 0x4b, | 2121 | 0xf9, 0xfe, 0x7c, 0x3d, 0xf2, 0x5f, 0x47, 0x50, 0x8f, 0x39, 0x68, 0xa4, |
| 2144 | 0x73, 0xe8, 0x93, 0x19, 0x18, 0xbc, 0x27, 0xbd, 0x28, 0xb3, 0x88, 0x1e, | 2122 | 0x4f, 0x76, 0xc3, 0xc0, 0xc6, 0xf4, 0x65, 0x4b, 0x2e, 0xa3, 0xc7, 0xee, |
| 2145 | 0xbb, 0x02, 0x73, 0x55, 0x95, 0xc7, 0x05, 0x7c, 0xf2, 0xc9, 0x27, 0x9f, | 2123 | 0x50, 0x53, 0x8d, 0xca, 0xeb, 0x02, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, |
| 2146 | 0x7c, 0xf2, 0xc9, 0x27, 0x9f, 0x7c, 0xf2, 0xc9, 0x27, 0x9f, 0x7c, 0xf2, | 2124 | 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, |
| 2147 | 0xc9, 0x27, 0x9f, 0x7c, 0xf2, 0xc9, 0x27, 0x9f, 0x7c, 0xf2, 0xc9, 0x27, | 2125 | 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, |
| 2148 | 0x9f, 0x7c, 0xf2, 0xc9, 0x27, 0x9f, 0x7c, 0xf2, 0xc9, 0x27, 0x9f, 0x7c, | 2126 | 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, |
| 2149 | 0xf2, 0xc9, 0x27, 0x9f, 0x7c, 0xf2, 0xc9, 0x27, 0x9f, 0x7c, 0xf2, 0xc9, | 2127 | 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, |
| 2150 | 0x27, 0x9f, 0x7c, 0xf2, 0xc9, 0x27, 0x9f, 0x7c, 0xfa, 0xff, 0xa4, 0x00, | 2128 | 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0xfc, 0x7f, 0x40, 0x08, 0xd0, |
| 2151 | 0xa0, 0xf3, 0xf7, 0x9c, 0xd9, 0x0f, 0x34, 0xc5, 0x71, 0x37, 0x2e, 0xb5, | 2129 | 0xf9, 0xbb, 0x71, 0xee, 0x03, 0x4d, 0x71, 0xdc, 0x7b, 0xaf, 0xb6, 0xa0, |
| 2152 | 0xa0, 0x05, 0x9c, 0x33, 0x1b, 0x6f, 0xb7, 0x80, 0x6c, 0xa9, 0xd3, 0x58, | 2130 | 0x85, 0x9c, 0x99, 0x7b, 0x6f, 0xb1, 0x00, 0xb7, 0xd8, 0x65, 0x2c, 0xc3, |
| 2153 | 0x86, 0xff, 0x92, 0x6e, 0x42, 0x05, 0x8f, 0x5f, 0xe2, 0x9c, 0xff, 0xf3, | 2131 | 0x7f, 0x4b, 0x2f, 0xae, 0x82, 0xd7, 0xbf, 0xea, 0x9c, 0x79, 0xec, 0xf9, |
| 2154 | 0x17, 0x96, 0x98, 0xa7, 0x8b, 0x01, 0x68, 0xba, 0xf3, 0x46, 0x4a, 0x6f, | 2132 | 0xa5, 0xe6, 0x89, 0xb1, 0x10, 0x34, 0xdd, 0x79, 0x27, 0xad, 0x77, 0x42, |
| 2155 | 0x87, 0x36, 0x8f, 0xd6, 0xfc, 0x49, 0xc7, 0x95, 0x71, 0x44, 0xab, 0xb2, | 2133 | 0xbb, 0x90, 0xce, 0xfc, 0xfd, 0x82, 0x95, 0x31, 0x44, 0xab, 0xb8, 0xe0, |
| 2156 | 0xe0, 0x2a, 0x8e, 0x94, 0xfb, 0x6c, 0x89, 0x97, 0x6c, 0x57, 0xf4, 0x66, | 2134 | 0x29, 0x8e, 0x94, 0xfb, 0x6d, 0x89, 0x17, 0x6d, 0x4f, 0x2c, 0xcb, 0xc2, |
| 2157 | 0xe0, 0x06, 0x9c, 0x83, 0xe2, 0xae, 0xfc, 0x05, 0x69, 0x04, 0x2b, 0x3b, | 2135 | 0xd3, 0x9c, 0x19, 0x51, 0x37, 0x74, 0x56, 0x1a, 0xe1, 0x0a, 0xe5, 0x35, |
| 2158 | 0xab, 0x93, 0x1a, 0x82, 0xfb, 0xa0, 0xab, 0x8e, 0x82, 0xa0, 0x55, 0x8b, | 2136 | 0x45, 0x05, 0xaa, 0xa5, 0xe1, 0xd6, 0xf1, 0x7a, 0xac, 0x1d, 0x6b, 0xc0, |
| 2159 | 0xd0, 0x13, 0x75, 0x08, 0x3e, 0xd1, 0x8c, 0xf0, 0xe4, 0x01, 0x91, 0x2b, | 2137 | 0x9a, 0xb1, 0x04, 0x6e, 0x2b, 0x42, 0x0f, 0x39, 0x1a, 0x66, 0x43, 0x33, |
| 2160 | 0x6a, 0x98, 0x09, 0x1c, 0x14, 0x6b, 0x4a, 0xc8, 0x05, 0x9d, 0xb3, 0x37, | 2138 | 0x22, 0x34, 0x85, 0x5c, 0xd8, 0x39, 0x75, 0xc3, 0xde, 0xfc, 0x59, 0xe9, |
| 2161 | 0x8c, 0xd1, 0xba, 0xac, 0xf7, 0xef, 0x4b, 0xa6, 0x6f, 0x18, 0x2f, 0x41, | 2139 | 0xfa, 0x7f, 0x63, 0x52, 0xbe, 0x61, 0xdc, 0x7f, 0x0f, 0x45, 0x75, 0x0e, |
| 2162 | 0x0f, 0x38, 0x50, 0x54, 0xe7, 0x08, 0x3d, 0x33, 0xdf, 0xd9, 0x1b, 0xf6, | 2140 | 0xd3, 0x33, 0xef, 0x3b, 0x75, 0xc3, 0xbe, 0xe2, 0x71, 0xf9, 0xfc, 0x82, |
| 2163 | 0x96, 0x4e, 0xc9, 0x17, 0x3a, 0x12, 0x38, 0x54, 0xd6, 0x71, 0xa0, 0xfc, | 2141 | 0x38, 0x0e, 0x95, 0x74, 0x3c, 0x55, 0xda, 0x4f, 0x3c, 0x98, 0x9e, 0x07, |
| 2164 | 0x10, 0x9d, 0xc3, 0x74, 0x5d, 0x68, 0xae, 0xea, 0xb8, 0xd8, 0x92, 0x09, | 2142 | 0xcd, 0x53, 0x1d, 0x0f, 0x5b, 0xb3, 0x61, 0x4c, 0x8c, 0x9c, 0x95, 0x21, |
| 2165 | 0x62, 0x62, 0xe4, 0x82, 0x0c, 0x58, 0xa6, 0x01, 0xc5, 0xd2, 0x0f, 0x83, | 2143 | 0xcb, 0x34, 0xa0, 0x58, 0xfa, 0x0b, 0xa0, 0x7d, 0x05, 0xda, 0x57, 0x08, |
| 2166 | 0xf8, 0x0a, 0xc4, 0x57, 0x08, 0x62, 0xac, 0xb8, 0x23, 0x8e, 0xda, 0x66, | 2144 | 0x63, 0xef, 0x58, 0x29, 0x86, 0xfa, 0x04, 0x9e, 0x5f, 0xc0, 0xe7, 0xf9, |
| 2167 | 0xbc, 0xd0, 0xc1, 0xeb, 0x79, 0x2d, 0xcb, 0xf8, 0x38, 0x5a, 0x5d, 0x1f, | 2145 | 0x2c, 0xe3, 0x78, 0x3b, 0x5a, 0x3d, 0x5f, 0x43, 0xe7, 0x8f, 0x64, 0x81, |
| 2168 | 0xa2, 0xf5, 0x47, 0x33, 0xc0, 0xf8, 0x48, 0x1f, 0x2d, 0x95, 0xd8, 0x64, | 2146 | 0xf1, 0x91, 0x3e, 0x3a, 0x2a, 0x31, 0x68, 0xd7, 0x62, 0xb5, 0x0e, 0xaf, |
| 2169 | 0x87, 0xb1, 0x5a, 0x87, 0x5b, 0xe3, 0xb0, 0xac, 0xaa, 0x1c, 0x57, 0x18, | 2147 | 0xce, 0x61, 0x5c, 0x55, 0x3c, 0x9e, 0x30, 0xa6, 0x8e, 0x34, 0x55, 0xf0, |
| 2170 | 0x93, 0xff, 0x5c, 0x5f, 0x91, 0x03, 0xa1, 0x59, 0x70, 0xc3, 0x9f, 0x9a, | 2148 | 0x40, 0x68, 0x16, 0xbc, 0xda, 0x2f, 0xbd, 0x3f, 0x5e, 0xac, 0xbe, 0xdf, |
| 2171 | 0x3f, 0x55, 0xaa, 0xce, 0x6f, 0xa7, 0x7d, 0x34, 0x9a, 0xef, 0xc7, 0x5f, | 2149 | 0x41, 0x74, 0x34, 0xd2, 0xc3, 0x06, 0xfc, 0x73, 0xa9, 0x1f, 0xff, 0x50, |
| 2172 | 0x96, 0xd7, 0xe0, 0x2f, 0xca, 0xb7, 0xe1, 0xd9, 0x72, 0x1f, 0xed, 0x7b, | 2150 | 0xca, 0xe1, 0xd9, 0x52, 0x1f, 0xd1, 0xbd, 0x87, 0xe8, 0xae, 0xc7, 0x3f, |
| 2173 | 0x1f, 0xed, 0x3b, 0x80, 0xbf, 0x2e, 0x6f, 0xc0, 0x77, 0xcb, 0x39, 0x3c, | 2151 | 0x96, 0xd6, 0xe0, 0xc7, 0xa5, 0xef, 0xe2, 0x99, 0xd2, 0x2a, 0x3c, 0x5d, |
| 2174 | 0x57, 0x5e, 0x85, 0xef, 0x94, 0x6f, 0xc6, 0x33, 0x65, 0x78, 0x67, 0x38, | 2152 | 0xba, 0x09, 0x07, 0x4b, 0x1e, 0xc2, 0xdd, 0x8c, 0x2f, 0x25, 0x3e, 0xcb, |
| 2175 | 0x95, 0x49, 0x8a, 0x1f, 0xe5, 0x6b, 0xa0, 0xee, 0xdc, 0x8c, 0xe9, 0x52, | 2153 | 0xd7, 0x11, 0x1f, 0x5b, 0x30, 0x5b, 0x64, 0x79, 0x24, 0x46, 0x6c, 0x73, |
| 2176 | 0x10, 0xc1, 0x9d, 0x12, 0x23, 0xb6, 0xf9, 0x38, 0xd0, 0xa1, 0x07, 0x21, | 2154 | 0x0c, 0x58, 0x90, 0xa8, 0x81, 0xc0, 0x6a, 0xdb, 0x7c, 0x0a, 0xb8, 0x0d, |
| 2177 | 0xb0, 0xcc, 0x36, 0xf7, 0x03, 0x5f, 0x40, 0x2e, 0x61, 0x1e, 0x00, 0x9a, | 2155 | 0x6e, 0xdc, 0x3c, 0xc1, 0x5a, 0x7a, 0x62, 0xc4, 0x40, 0x98, 0xf8, 0xb5, |
| 2178 | 0xc4, 0x8f, 0x47, 0x9b, 0xc4, 0x6b, 0xa3, 0xaa, 0x78, 0x3d, 0x2f, 0x50, | 2156 | 0xd2, 0x6d, 0xd8, 0xaa, 0xf7, 0xa1, 0xde, 0x1a, 0xc2, 0x03, 0xbe, 0x8d, |
| 2179 | 0xef, 0x20, 0xf2, 0x72, 0x46, 0xca, 0xeb, 0xd2, 0x52, 0x96, 0x52, 0x56, | 2157 | 0xa1, 0x45, 0x9c, 0x7f, 0x45, 0x7e, 0x48, 0xe0, 0xc1, 0x24, 0x34, 0x41, |
| 2180 | 0xef, 0x0f, 0x85, 0x69, 0x3f, 0x22, 0x2e, 0x85, 0xd1, 0x68, 0x66, 0xd7, | 2158 | 0xcf, 0x5d, 0xc5, 0xbf, 0x6b, 0xa9, 0xd8, 0x8c, 0x78, 0x28, 0x10, 0x5f, |
| 2181 | 0x09, 0xcd, 0xad, 0x25, 0xf9, 0x2b, 0xba, 0x01, 0x6b, 0xa7, 0x41, 0x7e, | 2159 | 0x05, 0xe2, 0xa3, 0x40, 0xbc, 0x15, 0x88, 0x97, 0x02, 0xf1, 0x57, 0x20, |
| 2182 | 0x60, 0x1d, 0x37, 0xe1, 0x0e, 0x2f, 0x26, 0xfa, 0xd0, 0x60, 0x2d, 0xc5, | 2160 | 0x7e, 0x0a, 0xc4, 0x4f, 0x81, 0xf8, 0x29, 0x10, 0xaf, 0x05, 0xd6, 0xf9, |
| 2183 | 0xbd, 0x7d, 0x36, 0x8a, 0x65, 0x68, 0x31, 0xe7, 0x0c, 0x52, 0xc3, 0x02, | 2161 | 0x00, 0xc9, 0x52, 0xb1, 0x71, 0xab, 0x63, 0x63, 0xac, 0xd4, 0x26, 0xf6, |
| 2184 | 0x36, 0xf9, 0x5b, 0xd0, 0xb3, 0x5d, 0x5a, 0xdf, 0x50, 0xf1, 0x37, 0x9d, | 2162 | 0xee, 0x56, 0xc5, 0x73, 0xc3, 0x06, 0xe6, 0x3b, 0x88, 0x3c, 0xbd, 0xc4, |
| 2185 | 0xbd, 0x40, 0x67, 0x2f, 0xd0, 0xd9, 0x0b, 0xa4, 0x57, 0x81, 0xf4, 0x2a, | 2163 | 0x2a, 0x5f, 0x15, 0xea, 0x9a, 0x49, 0xc0, 0x4d, 0xcf, 0x83, 0x8d, 0x89, |
| 2186 | 0x90, 0x0e, 0x05, 0xd2, 0xad, 0x40, 0x7a, 0x14, 0x48, 0x8f, 0x02, 0xe9, | 2164 | 0x92, 0x2a, 0xa6, 0x87, 0xa5, 0x5c, 0x69, 0xbb, 0x68, 0x72, 0xcc, 0x9e, |
| 2187 | 0x58, 0x60, 0x5f, 0x0d, 0x92, 0x0d, 0x22, 0xf8, 0xbb, 0xfc, 0x3c, 0x9c, | 2165 | 0x8d, 0x8a, 0xd5, 0xff, 0xba, 0x68, 0xc4, 0x2f, 0x47, 0x7a, 0x31, 0xd6, |
| 2188 | 0xe1, 0xcf, 0x4a, 0x1d, 0xc7, 0xe9, 0x8c, 0x8a, 0xf5, 0x9b, 0xca, 0xf8, | 2166 | 0xec, 0xe2, 0x70, 0xd6, 0xc0, 0xb2, 0x8c, 0x82, 0x5c, 0xdc, 0xc3, 0xb6, |
| 2189 | 0x6e, 0x84, 0x7c, 0x64, 0xfc, 0xe6, 0x7b, 0x2f, 0xc4, 0xc9, 0xfc, 0xbb, | 2167 | 0xac, 0x69, 0x7b, 0x18, 0x45, 0x39, 0xce, 0xe7, 0x34, 0xd2, 0xb5, 0x87, |
| 2190 | 0x32, 0x34, 0x97, 0xf7, 0xfc, 0x22, 0xe4, 0x28, 0x70, 0xe9, 0x6e, 0x29, | 2168 | 0x64, 0xb7, 0x86, 0xc9, 0x11, 0x17, 0x35, 0xe9, 0x1a, 0x94, 0xfb, 0x58, |
| 2191 | 0xcf, 0x75, 0xcd, 0xc8, 0xb7, 0x6f, 0x61, 0x59, 0x0e, 0x4e, 0x8c, 0x2a, | 2169 | 0x7f, 0x2a, 0xc9, 0xb4, 0x0f, 0xf5, 0xb1, 0x18, 0x1a, 0xac, 0x4b, 0xd0, |
| 2192 | 0x08, 0xd0, 0xd8, 0xb5, 0xf6, 0xdf, 0xcb, 0x3b, 0x13, 0xcc, 0xf7, 0x51, | 2170 | 0x10, 0xe3, 0x35, 0x88, 0x56, 0xd2, 0xd5, 0x3c, 0xe7, 0x02, 0xf1, 0xf9, |
| 2193 | 0x04, 0xb5, 0x6c, 0x27, 0x68, 0x0d, 0xce, 0xbb, 0x1b, 0xef, 0x6d, 0x87, | 2171 | 0xee, 0x28, 0x3e, 0x1d, 0xd5, 0x50, 0xda, 0xa9, 0xe2, 0x1b, 0x19, 0x29, |
| 2194 | 0x1b, 0x75, 0x54, 0xf1, 0xe6, 0x90, 0x81, 0xb9, 0x4e, 0x16, 0x73, 0x1c, | 2172 | 0xff, 0x2a, 0xa3, 0xf6, 0x7f, 0x2a, 0x1c, 0x4c, 0x95, 0x54, 0x7c, 0x9e, |
| 2195 | 0x6b, 0x64, 0x8f, 0xd2, 0x39, 0x18, 0x47, 0xf6, 0xf2, 0x7a, 0xd8, 0xd8, | 2173 | 0x4f, 0xc3, 0x6b, 0xd6, 0xf0, 0x9f, 0x79, 0x0f, 0x21, 0xc2, 0x3b, 0x40, |
| 2196 | 0x57, 0x56, 0xc5, 0xab, 0x43, 0x73, 0x10, 0xdf, 0x69, 0xad, 0x1a, 0x12, | 2174 | 0x78, 0x6b, 0x17, 0xa7, 0x30, 0x1b, 0x67, 0x71, 0xfa, 0xb0, 0x31, 0xdf, |
| 2197 | 0x0a, 0x72, 0x8d, 0x59, 0x8c, 0x67, 0x4c, 0xa3, 0x08, 0x03, 0xab, 0xd2, | 2175 | 0xb1, 0x63, 0xa3, 0x52, 0x03, 0xa3, 0x06, 0x64, 0xff, 0x2c, 0x36, 0xe5, |
| 2198 | 0x0a, 0x30, 0xd7, 0xc5, 0xd6, 0x8c, 0x69, 0xbb, 0x78, 0x08, 0xd3, 0x09, | 2176 | 0x3b, 0x8e, 0x6e, 0x52, 0xb6, 0xe0, 0xe2, 0x5a, 0x0d, 0x9b, 0x87, 0x79, |
| 2199 | 0x1b, 0x13, 0x65, 0x8d, 0x72, 0xc3, 0xc5, 0x9d, 0x19, 0x0d, 0x72, 0x24, | 2177 | 0x6d, 0x39, 0xca, 0x45, 0x41, 0xfe, 0xf0, 0xc7, 0xea, 0x6b, 0x26, 0x42, |
| 2200 | 0x8b, 0x93, 0x5d, 0x21, 0x4c, 0xf7, 0x71, 0x8c, 0xa8, 0xb4, 0xf7, 0x56, | 2178 | 0x7e, 0x65, 0xfc, 0xf1, 0x7a, 0x4e, 0x34, 0xa2, 0xde, 0x34, 0xca, 0x58, |
| 2201 | 0x28, 0xf1, 0x38, 0xf9, 0xe5, 0xb0, 0x0c, 0xc6, 0x79, 0x0c, 0xe2, 0x5f, | 2179 | 0x1f, 0xe7, 0xf3, 0x39, 0xe5, 0x5d, 0xe9, 0xc6, 0x99, 0x0f, 0xcd, 0x0b, |
| 2202 | 0x32, 0xbc, 0xff, 0x45, 0xe2, 0xd5, 0xdd, 0x51, 0xd4, 0xee, 0xd6, 0xf0, | 2180 | 0x91, 0x6e, 0x6e, 0xc9, 0x66, 0xb1, 0x26, 0xdf, 0xa1, 0xaf, 0x51, 0x48, |
| 2203 | 0xf4, 0x4e, 0x15, 0x2b, 0xc8, 0xb7, 0x7b, 0x52, 0xaa, 0xb1, 0x4e, 0x38, | 2181 | 0xdb, 0x6a, 0xc5, 0xc6, 0x71, 0x07, 0xe9, 0xd1, 0x61, 0x81, 0x91, 0x4e, |
| 2204 | 0x18, 0x2f, 0xab, 0x48, 0x0c, 0xb5, 0xc0, 0x88, 0x69, 0xb8, 0x74, 0xc8, | 2182 | 0xb6, 0x31, 0xd2, 0x76, 0xd1, 0x8f, 0x09, 0xc3, 0x50, 0x2a, 0x31, 0xf1, |
| 2205 | 0xc5, 0x3b, 0x24, 0x77, 0x90, 0xe4, 0xd6, 0x77, 0xe9, 0x98, 0x69, 0xac, | 2183 | 0x58, 0x36, 0x89, 0xb3, 0x0f, 0xf1, 0x6f, 0x15, 0x3f, 0x5b, 0x9a, 0xc4, |
| 2206 | 0xf8, 0xf5, 0xeb, 0xf9, 0x56, 0x77, 0xa7, 0x12, 0x02, 0x42, 0x70, 0x35, | 2184 | 0xc7, 0xfb, 0x4a, 0x73, 0x71, 0xfb, 0x68, 0xa4, 0xb2, 0xef, 0x1a, 0xa2, |
| 2207 | 0x27, 0x83, 0xfb, 0xf3, 0xad, 0xa4, 0xc3, 0xad, 0x58, 0x1a, 0xd2, 0xb0, | 2185 | 0xc9, 0x32, 0x32, 0xae, 0xc9, 0x7b, 0x47, 0x3b, 0x6b, 0xe9, 0x77, 0xc5, |
| 2208 | 0x7a, 0x98, 0xc7, 0x96, 0x03, 0x93, 0x73, 0xe7, 0xa0, 0x96, 0xf5, 0xe7, | 2186 | 0xd6, 0xfd, 0xf9, 0x0e, 0xbb, 0x5f, 0xd1, 0x50, 0x4e, 0x44, 0x48, 0xf7, |
| 2209 | 0x7c, 0x5e, 0x4a, 0xcf, 0x1c, 0x07, 0xbf, 0x9d, 0x60, 0xbb, 0xbb, 0xca, | 2187 | 0xd0, 0xea, 0x08, 0xff, 0x25, 0x43, 0x67, 0xb0, 0x22, 0x63, 0x4e, 0xf2, |
| 2210 | 0x7f, 0xc8, 0x6c, 0x82, 0xf9, 0x2a, 0x39, 0x72, 0x38, 0x93, 0xc1, 0xc6, | 2188 | 0xdf, 0x80, 0x25, 0x93, 0x15, 0x9a, 0xc9, 0xa2, 0x8d, 0x03, 0x25, 0x1b, |
| 2211 | 0x7c, 0x6b, 0xf6, 0x5b, 0x4a, 0x03, 0x10, 0x34, 0x0d, 0x43, 0x81, 0x96, | 2189 | 0x77, 0xe4, 0x3b, 0xdc, 0x95, 0x62, 0x16, 0x68, 0x5f, 0x98, 0x9b, 0x54, |
| 2212 | 0x70, 0x90, 0x1a, 0xa5, 0x78, 0x79, 0xd4, 0x8b, 0x17, 0xa4, 0xba, 0x4a, | 2190 | 0x7e, 0x21, 0xbd, 0x56, 0xa6, 0xb3, 0x10, 0x93, 0xb1, 0x8e, 0x81, 0x49, |
| 2213 | 0x9c, 0x97, 0x9a, 0xab, 0x13, 0xff, 0xfc, 0xc5, 0x6d, 0xf8, 0xe8, 0x51, | 2191 | 0xc5, 0xdc, 0xd3, 0xaf, 0x48, 0xf9, 0xab, 0xb4, 0x82, 0xaf, 0x65, 0xb2, |
| 2214 | 0xe6, 0x53, 0xf1, 0x03, 0x7a, 0x7e, 0x7f, 0xef, 0x8e, 0xd9, 0xda, 0xf1, | 2192 | 0x98, 0xd5, 0x75, 0xdc, 0x9c, 0xd1, 0xbc, 0x16, 0xe2, 0x71, 0xc3, 0x12, |
| 2215 | 0xa7, 0x9e, 0x5f, 0x0d, 0xa5, 0xba, 0xb7, 0x8d, 0x3b, 0xf3, 0xad, 0x67, | 2193 | 0x0d, 0x17, 0xed, 0x74, 0xf1, 0xf6, 0xe2, 0x9f, 0xa3, 0xbc, 0x82, 0x75, |
| 2216 | 0xb7, 0x29, 0xe4, 0xbf, 0x8b, 0x23, 0xa8, 0xa1, 0xfa, 0x13, 0x24, 0x59, | 2194 | 0xcf, 0x7c, 0xb1, 0x1c, 0x09, 0xc4, 0xac, 0x3a, 0xc4, 0xf6, 0x86, 0x31, |
| 2217 | 0xfb, 0xf2, 0xe7, 0xb1, 0x32, 0x6d, 0x1e, 0xe4, 0x7f, 0x6f, 0x36, 0x66, | 2195 | 0x6f, 0xe7, 0x59, 0x99, 0xb0, 0x78, 0xdd, 0x9a, 0x3c, 0xa5, 0xb0, 0x0c, |
| 2218 | 0x55, 0xe4, 0x5f, 0x56, 0xb2, 0xf1, 0x64, 0xd9, 0xc6, 0xed, 0x74, 0x8e, | 2196 | 0x61, 0xb4, 0xee, 0xbd, 0x82, 0x72, 0x8a, 0x99, 0x02, 0xbe, 0x16, 0xe7, |
| 2219 | 0xfb, 0xf0, 0x8f, 0x40, 0xcb, 0x02, 0xe3, 0x94, 0x72, 0x42, 0xba, 0x37, | 2197 | 0xbd, 0x35, 0x56, 0x55, 0x96, 0x08, 0x76, 0xef, 0xac, 0xc8, 0xff, 0x68, |
| 2220 | 0xb3, 0xbc, 0x79, 0x38, 0x15, 0x6f, 0xcd, 0x9d, 0x52, 0xcc, 0xe2, 0x76, | 2198 | 0xb6, 0x07, 0x2f, 0x15, 0xb0, 0xaf, 0x0d, 0x3f, 0xc0, 0xc8, 0x12, 0xce, |
| 2221 | 0x85, 0x6d, 0xa5, 0xe0, 0xcb, 0xe9, 0x0c, 0x8a, 0x31, 0x1d, 0xb7, 0xa6, | 2199 | 0x4f, 0x8c, 0x63, 0x88, 0x64, 0xff, 0xc1, 0x89, 0x70, 0xa6, 0x6a, 0xe3, |
| 2222 | 0x35, 0xf7, 0x52, 0x3a, 0xd3, 0x1b, 0x4b, 0x34, 0x34, 0xed, 0xca, 0xe2, | 2200 | 0xea, 0x39, 0x81, 0x6f, 0x5e, 0x29, 0xf0, 0x6a, 0x7a, 0x5a, 0x8e, 0xb5, |
| 2223 | 0xad, 0xf4, 0x9b, 0x28, 0xae, 0x64, 0x3b, 0xf0, 0x3a, 0x3e, 0x73, 0x33, | 2201 | 0x32, 0xbf, 0x0f, 0x37, 0x56, 0xfe, 0x16, 0xae, 0xee, 0x94, 0x8b, 0x36, |
| 2224 | 0xe2, 0x56, 0x0d, 0xe2, 0x63, 0x41, 0xd4, 0xef, 0xba, 0x20, 0x9b, 0x2d, | 2202 | 0xa2, 0x55, 0xdd, 0xc7, 0x38, 0x2e, 0x69, 0x25, 0xfd, 0xa5, 0x66, 0xf1, |
| 2225 | 0x1e, 0xb7, 0x06, 0xce, 0x0a, 0x3e, 0x73, 0x10, 0xd1, 0xb1, 0xab, 0xa0, | 2203 | 0x5f, 0x11, 0xd4, 0xb3, 0x9d, 0xef, 0x96, 0x46, 0x4b, 0x85, 0xe6, 0xfd, |
| 2226 | 0x5a, 0x66, 0x92, 0x1c, 0x9b, 0x60, 0xde, 0x90, 0x55, 0x3d, 0xbb, 0xc0, | 2204 | 0x44, 0xb3, 0x63, 0x48, 0xc5, 0xe6, 0x7c, 0xc7, 0xa9, 0xf7, 0x94, 0xef, |
| 2227 | 0x75, 0x5f, 0x10, 0x58, 0x97, 0xfa, 0xbe, 0xcc, 0x36, 0xf2, 0x9a, 0x67, | 2205 | 0xcb, 0xd9, 0xf9, 0x4c, 0xa7, 0xc3, 0x3e, 0xa6, 0x08, 0xfc, 0x54, 0x35, |
| 2228 | 0x68, 0x9c, 0xcf, 0x50, 0x73, 0x36, 0x8b, 0x26, 0x5a, 0x53, 0xe5, 0x8b, | 2206 | 0x67, 0x72, 0x48, 0x60, 0xb2, 0x04, 0xaf, 0xdd, 0xd1, 0x29, 0xfe, 0xe3, |
| 2229 | 0xa0, 0x7f, 0x57, 0xe5, 0x0c, 0x6f, 0x2f, 0xc1, 0xb3, 0x1a, 0x7a, 0xd0, | 2207 | 0x94, 0x07, 0x0c, 0xd1, 0xf9, 0xb0, 0x8d, 0x85, 0x43, 0xdf, 0x85, 0xb5, |
| 2230 | 0x51, 0x78, 0x08, 0x6f, 0x2d, 0xf6, 0xf6, 0x3f, 0xbd, 0x2f, 0xbd, 0x83, | 2208 | 0xcb, 0xc1, 0x4c, 0xc1, 0xc6, 0x54, 0x41, 0xca, 0xed, 0xb6, 0x94, 0xef, |
| 2231 | 0x6c, 0xc2, 0x75, 0xf4, 0xd3, 0x7e, 0xe1, 0xf9, 0xff, 0x64, 0x7f, 0x24, | 2209 | 0xda, 0xe6, 0x86, 0xe3, 0x21, 0xb8, 0x97, 0x2f, 0xed, 0x4a, 0xd5, 0x86, |
| 2232 | 0x21, 0x9a, 0x69, 0x8c, 0xe3, 0x77, 0xa7, 0x34, 0x6e, 0xaa, 0xf8, 0x25, | 2210 | 0x54, 0xd6, 0x4d, 0xee, 0x75, 0x91, 0x5c, 0xb5, 0x5f, 0xf4, 0xe2, 0x89, |
| 2233 | 0x4c, 0xf2, 0xde, 0xcf, 0xf4, 0xa0, 0x75, 0x48, 0x85, 0xcc, 0xb7, 0xda, | 2211 | 0x92, 0x81, 0x62, 0x29, 0x85, 0x27, 0x4b, 0xac, 0x7f, 0x8b, 0xbe, 0x17, |
| 2234 | 0x3f, 0x0d, 0x3c, 0x22, 0xa7, 0x6f, 0xe3, 0xb9, 0x56, 0xfd, 0x70, 0x40, | 2212 | 0x51, 0x7c, 0x66, 0x29, 0xb7, 0x30, 0xbf, 0x3a, 0xc6, 0x17, 0xd8, 0x98, |
| 2235 | 0x60, 0xa9, 0x6a, 0x9e, 0xce, 0xa1, 0x19, 0xfb, 0xa9, 0xc6, 0xb4, 0x38, | 2213 | 0x2c, 0x28, 0x08, 0x91, 0xce, 0x73, 0x3a, 0xed, 0x2f, 0x9c, 0x25, 0xdb, |
| 2236 | 0x3a, 0xd5, 0x9c, 0x04, 0xd5, 0x1e, 0x43, 0x74, 0xec, 0xb1, 0xb1, 0x60, | 2214 | 0x69, 0xe8, 0xf8, 0xa1, 0x8b, 0xdb, 0xed, 0x16, 0x18, 0x37, 0x5a, 0x18, |
| 2237 | 0xe8, 0x36, 0x7c, 0x69, 0xb7, 0x83, 0x83, 0x05, 0x1b, 0x4f, 0x17, 0xa4, | 2215 | 0x2f, 0x68, 0x94, 0xbb, 0x55, 0xf4, 0xe6, 0xc7, 0x31, 0xaf, 0x39, 0x4e, |
| 2238 | 0x3c, 0x69, 0x4b, 0xf9, 0xaf, 0x5d, 0x66, 0xff, 0x31, 0x6a, 0x07, 0x8b, | 2216 | 0xb1, 0x26, 0xb0, 0x2a, 0x13, 0x01, 0x56, 0xf2, 0xbb, 0x08, 0xda, 0xad, |
| 2239 | 0x96, 0x74, 0xe6, 0xea, 0x03, 0x2a, 0xd9, 0xa7, 0xcd, 0xd8, 0x20, 0xcc, | 2217 | 0x32, 0xda, 0x63, 0x8d, 0x98, 0xbf, 0xf0, 0x9f, 0x30, 0xdb, 0x12, 0x25, |
| 2240 | 0xe6, 0x29, 0x61, 0x53, 0xcc, 0xf5, 0x92, 0xed, 0x0d, 0xec, 0x2d, 0x27, | 2218 | 0x1d, 0xd7, 0x93, 0x1e, 0x04, 0x54, 0xb2, 0x53, 0x9b, 0x65, 0x11, 0x4e, |
| 2241 | 0xf1, 0x54, 0xd9, 0xa2, 0xcf, 0x42, 0x8a, 0x95, 0x0c, 0xd5, 0x33, 0xd6, | 2219 | 0x01, 0x2b, 0x49, 0x7b, 0x29, 0x7e, 0x13, 0x24, 0x7b, 0x78, 0x69, 0x1c, |
| 2242 | 0x55, 0xc7, 0x78, 0x07, 0xe5, 0x45, 0x41, 0xc1, 0x7e, 0x9b, 0xe2, 0x3f, | 2220 | 0x8f, 0x13, 0xff, 0xa5, 0xbc, 0x94, 0x91, 0xac, 0xb9, 0x61, 0x3b, 0xe5, |
| 2243 | 0x46, 0xbc, 0x85, 0x0b, 0xe4, 0x3f, 0x0d, 0xc9, 0x9d, 0x59, 0xd4, 0xa4, | 2221 | 0x84, 0xe9, 0x62, 0x0f, 0x4a, 0xa5, 0x6f, 0x62, 0x6a, 0x84, 0xf8, 0xcc, |
| 2244 | 0x1a, 0x60, 0xdc, 0x68, 0x61, 0xbc, 0xa0, 0xb9, 0x41, 0x8a, 0xf9, 0xb1, | 2222 | 0x3b, 0xc4, 0x93, 0xaa, 0x17, 0x85, 0xd9, 0xb7, 0x5a, 0x64, 0xf1, 0x24, |
| 2245 | 0xfc, 0x38, 0xfe, 0x40, 0x4f, 0xa0, 0x96, 0xec, 0xb7, 0x2a, 0x1d, 0x01, | 2223 | 0xf9, 0xce, 0x44, 0xc1, 0x34, 0x8e, 0x93, 0x9f, 0xbd, 0x60, 0x37, 0x10, |
| 2246 | 0x6e, 0xe2, 0xb9, 0x08, 0x5a, 0xac, 0xef, 0xa3, 0x25, 0x3e, 0x07, 0xa1, | 2224 | 0x9f, 0x2e, 0xe1, 0x32, 0xf0, 0x5c, 0xbe, 0x00, 0xab, 0x85, 0xed, 0x15, |
| 2247 | 0x05, 0x7f, 0x85, 0x69, 0x3d, 0x8a, 0x30, 0xf5, 0x8c, 0xf9, 0xc4, 0x33, | 2225 | 0xc1, 0xfd, 0x3b, 0xb3, 0x84, 0x13, 0x83, 0x75, 0xf0, 0xa0, 0x2e, 0xf1, |
| 2248 | 0x9f, 0x7c, 0xd5, 0x68, 0x59, 0x24, 0x53, 0xc0, 0x6a, 0x23, 0x5e, 0xca, | 2226 | 0x4e, 0x6c, 0xb5, 0x87, 0x22, 0x55, 0x1f, 0xaf, 0x27, 0x9a, 0x7d, 0xdd, |
| 2249 | 0xa7, 0x66, 0xd2, 0x3d, 0xb8, 0x24, 0x81, 0x32, 0x9d, 0x7f, 0x2a, 0x2f, | 2227 | 0x36, 0x42, 0xc3, 0x3d, 0x84, 0x97, 0xfc, 0x15, 0xb7, 0x92, 0xbf, 0x7a, |
| 2250 | 0x65, 0x24, 0x63, 0xf6, 0x17, 0x28, 0x37, 0x27, 0x4b, 0x3d, 0x98, 0x2a, | 2228 | 0xb8, 0x9c, 0xe2, 0x21, 0xea, 0xec, 0x49, 0xbf, 0x36, 0xe4, 0xc9, 0x5a, |
| 2251 | 0xff, 0x1e, 0xd5, 0x73, 0x1b, 0x7b, 0xf3, 0x0e, 0xc6, 0x0a, 0xea, 0xaa, | 2229 | 0xcb, 0xea, 0xff, 0x48, 0x6c, 0xc2, 0x27, 0x69, 0xb6, 0x83, 0x4a, 0xf2, |
| 2252 | 0x3c, 0xcc, 0xbe, 0xf5, 0xc8, 0xe0, 0x29, 0x8a, 0x9f, 0x89, 0x82, 0x69, | 2230 | 0xea, 0x78, 0x39, 0x3d, 0x82, 0x57, 0x8b, 0x7f, 0x82, 0x5c, 0xb3, 0x99, |
| 2253 | 0xbc, 0x18, 0xd0, 0x70, 0xcc, 0xae, 0xa3, 0x73, 0x52, 0xde, 0x92, 0x4e, | 2231 | 0xda, 0x2c, 0xd6, 0x61, 0x66, 0xe4, 0x0a, 0xe0, 0xcf, 0xd9, 0x7e, 0x02, |
| 2254 | 0xcf, 0xe7, 0x47, 0x60, 0x35, 0xb0, 0xfd, 0xd9, 0x4f, 0x19, 0x7c, 0xbb, | 2232 | 0xf3, 0xad, 0x75, 0x38, 0x34, 0x76, 0x2f, 0x8e, 0x8c, 0xd6, 0xe3, 0x39, |
| 2255 | 0xe0, 0xc5, 0xf7, 0x75, 0x1a, 0x5c, 0xd8, 0xdd, 0xec, 0x1b, 0xf7, 0x74, | 2233 | 0x2b, 0x86, 0xf6, 0x89, 0x0a, 0x9d, 0x6b, 0xe6, 0x72, 0x93, 0x9e, 0xa6, |
| 2256 | 0x30, 0x5d, 0xa9, 0xa3, 0x7d, 0xdd, 0x36, 0xc2, 0xc3, 0x3d, 0x24, 0xb7, | 2234 | 0xe0, 0x6b, 0xe3, 0x98, 0x14, 0xb8, 0x3e, 0xb3, 0x0e, 0x39, 0xdf, 0xcf, |
| 2257 | 0xd5, 0x3e, 0x81, 0x3b, 0x30, 0xdd, 0xec, 0x62, 0x11, 0xc5, 0xbf, 0xea, | 2235 | 0x3d, 0xac, 0xa1, 0xdc, 0x96, 0xcf, 0xbb, 0x14, 0xd7, 0x75, 0xd8, 0xd9, |
| 2258 | 0x3c, 0x9e, 0xda, 0x9c, 0x77, 0x65, 0xbd, 0x65, 0xf5, 0xff, 0x50, 0x3c, | 2236 | 0x0c, 0x71, 0x0b, 0xd5, 0x93, 0x3b, 0x29, 0x5e, 0xef, 0x54, 0x62, 0x70, |
| 2259 | 0x88, 0x57, 0x53, 0x5c, 0xd7, 0x55, 0xca, 0x7b, 0x1d, 0x3b, 0xec, 0x11, | 2237 | 0x13, 0x2e, 0xd9, 0x55, 0xe0, 0x22, 0xcb, 0xc0, 0x9e, 0x22, 0x70, 0x77, |
| 2260 | 0xbc, 0x56, 0xfa, 0x2d, 0xe4, 0x62, 0x66, 0x72, 0x93, 0x58, 0x8f, 0x83, | 2238 | 0x51, 0xc5, 0xdf, 0x14, 0x2f, 0x45, 0xb9, 0x8d, 0xcf, 0x2e, 0x40, 0x79, |
| 2261 | 0x23, 0x57, 0x01, 0xb7, 0x70, 0x9e, 0x90, 0x6e, 0xd6, 0x7a, 0x1c, 0x2a, | 2239 | 0x1e, 0x7f, 0x87, 0x31, 0x16, 0x33, 0x13, 0x20, 0x9d, 0xed, 0x2f, 0xa8, |
| 2262 | 0x7e, 0x03, 0x47, 0x47, 0x6b, 0xf1, 0xbc, 0x15, 0x47, 0xcb, 0x44, 0x65, | 2240 | 0xf8, 0xb1, 0xbd, 0xeb, 0xec, 0xd8, 0x0a, 0x53, 0xcf, 0x51, 0xac, 0x85, |
| 2263 | 0x9f, 0xab, 0xbb, 0x35, 0x8c, 0x51, 0x4e, 0x5f, 0x6b, 0xab, 0x98, 0x49, | 2241 | 0xac, 0xd3, 0xe4, 0x67, 0xfc, 0x0c, 0x7c, 0x3f, 0xff, 0x99, 0xfc, 0xb9, |
| 2264 | 0x70, 0xfd, 0xa0, 0x58, 0x4b, 0x6f, 0xa0, 0x5a, 0xe3, 0xb5, 0x5e, 0xac, | 2242 | 0x4f, 0x53, 0xc5, 0x6d, 0xf9, 0x8e, 0x81, 0x8f, 0x94, 0x8f, 0xe5, 0xbf, |
| 2265 | 0xc9, 0x18, 0xc8, 0xe7, 0xb3, 0x54, 0xff, 0x6a, 0xb0, 0x2b, 0x06, 0x71, | 2243 | 0x85, 0x19, 0xff, 0x77, 0xa2, 0x15, 0x7f, 0xdd, 0xc3, 0x79, 0xc4, 0xad, |
| 2266 | 0x3b, 0xf5, 0xb0, 0xbb, 0xf3, 0xad, 0xfd, 0xc3, 0x4a, 0x1c, 0xc5, 0x96, | 2244 | 0xf8, 0xed, 0xbc, 0x2f, 0xf8, 0x6d, 0xc5, 0x3f, 0x47, 0xb2, 0xcc, 0x47, |
| 2267 | 0x2c, 0xf9, 0x42, 0xa0, 0xc9, 0x32, 0xb0, 0xa5, 0x44, 0x15, 0xb4, 0xa4, | 2245 | 0x35, 0xc6, 0x62, 0xb8, 0x68, 0x22, 0x89, 0xba, 0x9d, 0xfc, 0x9b, 0xd7, |
| 2268 | 0xe2, 0x9b, 0xa5, 0x2b, 0x50, 0x6c, 0xe2, 0xb5, 0x1d, 0x98, 0xf6, 0xbe, | 2246 | 0x05, 0x2e, 0xee, 0xe6, 0xf8, 0x4a, 0x42, 0xd9, 0x7b, 0x2d, 0xe1, 0x63, |
| 2269 | 0x83, 0x98, 0x89, 0x9b, 0xcd, 0x20, 0x9b, 0x8d, 0x17, 0x54, 0xec, 0xb6, | 2247 | 0xd9, 0xab, 0xb9, 0xe2, 0x7b, 0x73, 0xf8, 0xcf, 0xe7, 0x98, 0x76, 0xc2, |
| 2270 | 0xf7, 0x5c, 0x28, 0xae, 0x34, 0xf5, 0x1c, 0xe5, 0x5b, 0xc0, 0x8b, 0x5b, | 2248 | 0xb7, 0x74, 0x29, 0x3f, 0xf3, 0x99, 0x3a, 0xfc, 0x7a, 0xaf, 0x69, 0x97, |
| 2271 | 0x7e, 0x06, 0xbe, 0x96, 0xff, 0x50, 0x9e, 0xf1, 0xf6, 0x54, 0x39, 0xff, | 2249 | 0x95, 0xa5, 0x44, 0x93, 0x63, 0x92, 0x63, 0xf3, 0x2f, 0xe6, 0xce, 0x24, |
| 2272 | 0xa7, 0xdf, 0x0e, 0xbc, 0x2f, 0x45, 0x98, 0xe5, 0xdf, 0x1f, 0xad, 0xfc, | 2250 | 0xc8, 0xce, 0xd3, 0xb2, 0xbc, 0x8a, 0xf1, 0x55, 0xcf, 0x27, 0x11, 0x3a, |
| 2273 | 0x5b, 0xd1, 0x67, 0x99, 0x37, 0x0b, 0x70, 0x1c, 0xcc, 0xfd, 0x44, 0xcc, | 2251 | 0x47, 0x57, 0xc5, 0xea, 0xec, 0x97, 0xe9, 0xda, 0x94, 0xf7, 0x5b, 0xd1, |
| 2274 | 0x57, 0xea, 0x80, 0xbe, 0x98, 0xcf, 0x51, 0xcd, 0xb3, 0x38, 0x9a, 0x26, | 2252 | 0xb0, 0xd0, 0x22, 0x3b, 0xb5, 0xa1, 0x91, 0xe2, 0x3a, 0x62, 0xad, 0x92, |
| 2275 | 0xda, 0x50, 0xb3, 0x8b, 0x7f, 0xf3, 0xb8, 0xc0, 0x65, 0xdd, 0x9c, 0x63, | 2253 | 0x91, 0x6f, 0xb3, 0x8f, 0x6a, 0x5e, 0xd8, 0xf9, 0x0a, 0x4a, 0x23, 0xcf, |
| 2276 | 0x6d, 0x50, 0xc6, 0x56, 0x47, 0x2b, 0x35, 0xb8, 0x5a, 0x1f, 0xfe, 0x70, | 2254 | 0x93, 0x7d, 0xa3, 0xec, 0x8b, 0x1b, 0x3e, 0x12, 0x5f, 0xc1, 0xf4, 0x98, |
| 2277 | 0x56, 0xbe, 0xd7, 0xeb, 0xe9, 0x77, 0xa5, 0x86, 0x7e, 0x33, 0xc3, 0xcf, | 2255 | 0x88, 0xb2, 0xac, 0xab, 0x28, 0xb6, 0xe7, 0x53, 0x7d, 0xf8, 0xe0, 0xe1, |
| 2278 | 0xbc, 0xa6, 0x06, 0x6f, 0xed, 0x35, 0xed, 0xa2, 0xb2, 0x84, 0xf7, 0xac, | 2256 | 0xbb, 0xe4, 0x58, 0x9f, 0x8e, 0x17, 0xb3, 0x49, 0x5a, 0x67, 0x5f, 0xb2, |
| 2279 | 0xe4, 0x08, 0x36, 0xce, 0xae, 0xa1, 0x98, 0x2f, 0x4c, 0x49, 0xdc, 0xca, | 2257 | 0xf1, 0x4c, 0x5e, 0xc3, 0xee, 0xe1, 0x84, 0xef, 0xc7, 0xf7, 0x74, 0xd6, |
| 2280 | 0xf2, 0xaa, 0xeb, 0xdb, 0x10, 0xfa, 0xe5, 0xbe, 0x2a, 0x5e, 0xcc, 0x7c, | 2258 | 0x9d, 0x2a, 0x2b, 0x36, 0x9e, 0x25, 0x3f, 0x3c, 0x58, 0x60, 0x1d, 0xab, |
| 2281 | 0x7a, 0xdf, 0xdb, 0x64, 0xed, 0xca, 0x38, 0xc5, 0x59, 0x23, 0xd4, 0x05, | 2259 | 0xb8, 0x38, 0xf3, 0x75, 0x59, 0xd3, 0xc6, 0xbe, 0x1d, 0xa1, 0x33, 0x3a, |
| 2282 | 0xd4, 0xe0, 0xf5, 0x26, 0xd4, 0x51, 0xde, 0x06, 0xac, 0x5b, 0x64, 0xe0, | 2260 | 0xe1, 0x8e, 0x42, 0xb7, 0x96, 0xcb, 0x37, 0x56, 0xf0, 0x73, 0x03, 0xad, |
| 2283 | 0x2b, 0x1c, 0xa7, 0x9a, 0x1b, 0x71, 0x2e, 0xc6, 0xf0, 0xce, 0x17, 0xc8, | 2261 | 0xb5, 0xd1, 0xf7, 0x12, 0xd9, 0xf8, 0x3b, 0x7c, 0xe8, 0xff, 0x1b, 0x1f, |
| 2284 | 0xc7, 0x51, 0x8e, 0x47, 0xf2, 0xf3, 0xc5, 0x18, 0x7a, 0xe2, 0x92, 0x28, | 2262 | 0xf4, 0x1d, 0xa3, 0x75, 0x90, 0xbf, 0xcc, 0x88, 0xd5, 0x95, 0xfe, 0x46, |
| 2285 | 0xeb, 0xbb, 0x2a, 0x0d, 0x77, 0x3e, 0xd5, 0xec, 0xf7, 0xf6, 0xdc, 0x2d, | 2263 | 0x53, 0xad, 0x19, 0xb1, 0xc6, 0xef, 0x69, 0xfc, 0x34, 0x4e, 0x38, 0x7a, |
| 2286 | 0x8b, 0x7d, 0x3a, 0x5e, 0xca, 0xfc, 0x0e, 0x8d, 0x73, 0x3c, 0xd9, 0x78, | 2264 | 0xb1, 0x77, 0x54, 0xca, 0x2d, 0x76, 0x3b, 0x5c, 0x3d, 0x86, 0x2d, 0x16, |
| 2287 | 0x2e, 0xaf, 0xe1, 0xfe, 0xe1, 0x66, 0x3a, 0x27, 0xd7, 0xca, 0x9a, 0xb3, | 2265 | 0xc5, 0xeb, 0x28, 0x9f, 0x91, 0x32, 0x95, 0x5e, 0xd8, 0xa3, 0x8a, 0x16, |
| 2288 | 0x33, 0x8a, 0x8d, 0x67, 0x29, 0x16, 0x9f, 0x29, 0xb0, 0xad, 0x54, 0x5c, | 2266 | 0xca, 0x99, 0x9e, 0x58, 0x9b, 0x35, 0xc4, 0x9d, 0xa3, 0x2a, 0xf2, 0x85, |
| 2289 | 0x96, 0x5e, 0x21, 0xc3, 0x4d, 0x1c, 0xdf, 0x49, 0x5a, 0xa3, 0x93, 0xec, | 2267 | 0x0b, 0x28, 0x27, 0x4b, 0xf9, 0x64, 0x1a, 0xee, 0x60, 0xba, 0x01, 0x2f, |
| 2290 | 0x28, 0x74, 0x6b, 0x99, 0x3c, 0xb0, 0x92, 0x9f, 0x3b, 0x68, 0xac, 0x89, | 2268 | 0x8f, 0xe9, 0x14, 0x3b, 0x67, 0xe5, 0xf2, 0x64, 0x2f, 0x4a, 0x84, 0xe7, |
| 2291 | 0xbe, 0xbb, 0x65, 0xdd, 0xaf, 0x9d, 0x43, 0xff, 0xac, 0x73, 0x50, 0xdc, | 2269 | 0xd3, 0x74, 0x57, 0xea, 0xb0, 0x88, 0x60, 0x2c, 0x1e, 0xc1, 0x9e, 0x42, |
| 2292 | 0x9b, 0xf6, 0x5a, 0x74, 0x12, 0x0e, 0x52, 0x91, 0xa5, 0x3e, 0x3f, 0x41, | 2270 | 0x1c, 0x87, 0xc7, 0x23, 0xd8, 0x46, 0xfe, 0xf7, 0xd3, 0x2c, 0xd3, 0x8c, |
| 2293 | 0x31, 0xb0, 0x8d, 0x7a, 0xf0, 0x7b, 0x84, 0xf5, 0xb6, 0x78, 0x78, 0xca, | 2271 | 0x60, 0x73, 0x89, 0x7b, 0x8d, 0x10, 0xe9, 0xc0, 0x13, 0xef, 0xf9, 0x6b, |
| 2294 | 0x83, 0x67, 0x1e, 0x5e, 0x5b, 0x5d, 0xc1, 0x5d, 0x9a, 0x6a, 0x31, 0x16, | 2272 | 0x0d, 0x58, 0x3e, 0xc6, 0x7b, 0xcf, 0xca, 0x76, 0xcb, 0xd2, 0xdb, 0x43, |
| 2295 | 0xab, 0xce, 0x71, 0x9e, 0xf6, 0x62, 0x6c, 0x54, 0xca, 0xcd, 0x76, 0x0b, | 2273 | 0xd5, 0x7d, 0xef, 0x50, 0x1f, 0x63, 0x50, 0xef, 0x72, 0x21, 0xe5, 0xaa, |
| 2296 | 0xc9, 0x88, 0x63, 0xb3, 0x45, 0x39, 0x3d, 0xca, 0x6b, 0xa4, 0x4c, 0xa6, | 2274 | 0x04, 0xf5, 0x2a, 0x71, 0xea, 0x55, 0xac, 0xb9, 0xfe, 0xcb, 0xa4, 0x48, |
| 2297 | 0x16, 0xf4, 0xa8, 0xa2, 0x01, 0x33, 0xba, 0x2b, 0xd6, 0x66, 0x0c, 0xf1, | 2275 | 0x93, 0xf2, 0x19, 0xca, 0x53, 0x6f, 0xd2, 0xe7, 0xa4, 0x4d, 0xe5, 0x96, |
| 2298 | 0xd5, 0x51, 0x15, 0xf9, 0xc2, 0x45, 0x64, 0x2f, 0x29, 0x9f, 0x4a, 0x21, | 2276 | 0x64, 0xbc, 0x78, 0x98, 0x65, 0xf4, 0x84, 0xbd, 0x84, 0x3a, 0xce, 0x69, |
| 2299 | 0xbb, 0x29, 0x55, 0x87, 0x57, 0x8a, 0x3a, 0x72, 0xfa, 0x05, 0xb9, 0xbc, | 2277 | 0xd3, 0x70, 0x95, 0x5f, 0x50, 0x9f, 0x65, 0xa0, 0x63, 0x9a, 0x79, 0x50, |
| 2300 | 0xad, 0x17, 0x65, 0x92, 0xf3, 0x41, 0xaa, 0x33, 0x79, 0x44, 0x44, 0x50, | 2278 | 0xb1, 0xb5, 0x00, 0x0c, 0x16, 0xe0, 0x1d, 0xa6, 0xd8, 0x6e, 0x99, 0x88, |
| 2301 | 0x4c, 0x44, 0xf0, 0x78, 0x21, 0x81, 0x23, 0xe3, 0x11, 0x6c, 0xa5, 0x18, | 2279 | 0x22, 0x36, 0xa1, 0x23, 0x3c, 0x91, 0xa2, 0xbd, 0x1a, 0xe2, 0xf4, 0xdb, |
| 2302 | 0x7d, 0x31, 0xc3, 0x7b, 0x46, 0xf0, 0x70, 0x99, 0x31, 0x55, 0x80, 0x6c, | 2280 | 0xa3, 0xbe, 0xab, 0xc9, 0x69, 0x13, 0x8b, 0x76, 0x9f, 0x91, 0x0f, 0x52, |
| 2303 | 0xe4, 0x8a, 0x13, 0xde, 0x58, 0x1d, 0x96, 0x17, 0x99, 0xf7, 0x82, 0x6c, | 2281 | 0xac, 0xdd, 0x91, 0x34, 0x7b, 0x6f, 0x14, 0x70, 0x53, 0x43, 0x52, 0xd6, |
| 2304 | 0xb1, 0x2c, 0xbd, 0x25, 0x50, 0xe5, 0x3b, 0x4e, 0xf8, 0xca, 0xa0, 0x5a, | 2282 | 0xa6, 0x6b, 0xa9, 0x7e, 0xcb, 0x43, 0x71, 0x92, 0x3d, 0xea, 0xc8, 0x4d, |
| 2305 | 0x36, 0x8f, 0x70, 0x55, 0x33, 0x61, 0xa8, 0x04, 0x61, 0x28, 0x6b, 0x16, | 2283 | 0xaf, 0x76, 0x5b, 0xf6, 0xab, 0x20, 0xbc, 0x25, 0x3e, 0xc3, 0xeb, 0x9e, |
| 2306 | 0x17, 0x9a, 0x94, 0x8d, 0x52, 0x3e, 0x4b, 0xb5, 0xec, 0xc7, 0xf4, 0x39, | 2284 | 0xf8, 0xac, 0xdb, 0xda, 0xf3, 0x16, 0x3a, 0xb1, 0x78, 0x42, 0x15, 0xbf, |
| 2307 | 0x43, 0xf5, 0x34, 0x46, 0x3a, 0x5e, 0x36, 0xcc, 0x3a, 0xba, 0xc2, 0xa6, | 2285 | 0x1c, 0x5a, 0x84, 0xcc, 0x34, 0xf4, 0x1a, 0xe2, 0xeb, 0xc3, 0x29, 0xe2, |
| 2308 | 0x7a, 0x9b, 0x55, 0x94, 0x7a, 0xee, 0x43, 0x81, 0x29, 0xde, 0x5f, 0xc5, | 2286 | 0xbb, 0x40, 0xb2, 0x14, 0x48, 0x96, 0x02, 0xc9, 0x42, 0x7a, 0x39, 0xe8, |
| 2309 | 0x96, 0x02, 0xb0, 0xa9, 0x00, 0xf7, 0x08, 0xe5, 0x7e, 0xc3, 0x44, 0x14, | 2287 | 0xf7, 0x6d, 0x2c, 0x6b, 0x8a, 0xea, 0xef, 0x3b, 0x7e, 0x6f, 0x79, 0xb0, |
| 2310 | 0xf1, 0x09, 0x1d, 0xc1, 0x89, 0x24, 0xcd, 0x6b, 0x48, 0xd0, 0x6f, 0x97, | 2288 | 0xc4, 0x72, 0x98, 0xae, 0x07, 0x96, 0x9b, 0xe5, 0x94, 0xf2, 0x2d, 0x9b, |
| 2311 | 0xb0, 0x60, 0xbd, 0xd3, 0x24, 0x16, 0x3e, 0x76, 0x5e, 0xee, 0x48, 0xa9, | 2289 | 0xe5, 0x31, 0x0d, 0x4f, 0x21, 0x6b, 0x4d, 0x1b, 0x48, 0x4d, 0x57, 0xf5, |
| 2312 | 0x58, 0xd7, 0x66, 0xf6, 0xde, 0x28, 0x90, 0x4d, 0x0e, 0x49, 0x19, 0x4e, | 2290 | 0x21, 0xe5, 0xe7, 0x36, 0xeb, 0x83, 0x65, 0x94, 0xf2, 0x69, 0x92, 0x69, |
| 2313 | 0x85, 0x29, 0x37, 0xe5, 0xa1, 0x04, 0xe9, 0x1d, 0x75, 0xe4, 0x83, 0xaf, | 2291 | 0x2b, 0xc9, 0x38, 0x58, 0x90, 0x87, 0x6a, 0x2c, 0xcb, 0x98, 0x20, 0xde, |
| 2314 | 0x75, 0x5b, 0xf6, 0x6b, 0x20, 0xb9, 0x65, 0x5e, 0xc3, 0xe3, 0xae, 0xf8, | 2292 | 0x62, 0x24, 0x53, 0x7c, 0x42, 0x23, 0x59, 0x3b, 0xa1, 0x92, 0xac, 0xa1, |
| 2315 | 0xb0, 0xdb, 0x7a, 0xfc, 0x4d, 0xb4, 0xa3, 0x6b, 0x42, 0x15, 0xff, 0x36, | 2293 | 0x09, 0xe8, 0x0a, 0xeb, 0x69, 0xfa, 0xff, 0xe2, 0x87, 0xfb, 0x6a, 0x4f, |
| 2316 | 0xb4, 0x10, 0xe9, 0x29, 0xe8, 0x21, 0xe7, 0x80, 0x98, 0x79, 0xe2, 0xa0, | 2294 | 0x5c, 0x43, 0xfd, 0xb4, 0x4a, 0xfb, 0x07, 0xc9, 0x77, 0x72, 0x2a, 0x8c, |
| 2317 | 0x38, 0x39, 0x49, 0xe7, 0x2e, 0x90, 0x2e, 0x05, 0xd2, 0xa5, 0x40, 0xba, | 2295 | 0x5a, 0x4b, 0xa1, 0x3c, 0xac, 0xe1, 0xf1, 0xf1, 0x06, 0x4c, 0x90, 0xdd, |
| 2318 | 0x90, 0x5d, 0x9e, 0xf1, 0xf0, 0x24, 0xeb, 0x9a, 0x24, 0x2c, 0x73, 0xdc, | 2296 | 0xc7, 0xc6, 0xa1, 0x87, 0xe9, 0xfd, 0xd6, 0x73, 0xfe, 0x04, 0xf2, 0xa7, |
| 2319 | 0xc3, 0xbc, 0x8c, 0x11, 0x63, 0x8e, 0x99, 0x75, 0xc1, 0x7a, 0xb3, 0x9e, | 2297 | 0x0d, 0x18, 0xa7, 0xfc, 0xf3, 0x40, 0x3e, 0x26, 0x26, 0x46, 0x54, 0x6c, |
| 2320 | 0x52, 0xbe, 0x69, 0x57, 0xf4, 0x71, 0xa9, 0xdc, 0x6a, 0x53, 0x55, 0x5b, | 2298 | 0x29, 0x9c, 0x20, 0xd9, 0x24, 0xe5, 0xd8, 0xcd, 0x09, 0xda, 0x22, 0x36, |
| 2321 | 0x48, 0xf9, 0xef, 0x36, 0xdb, 0x82, 0x75, 0x94, 0xf2, 0x3b, 0xa4, 0xd3, | 2299 | 0xdb, 0x66, 0x0f, 0x70, 0x05, 0xf9, 0x5a, 0x08, 0x6b, 0x2d, 0xb8, 0xdb, |
| 2322 | 0x16, 0xd2, 0x71, 0x53, 0x41, 0x1e, 0x0a, 0x59, 0x96, 0x31, 0x41, 0x67, | 2300 | 0xed, 0x2b, 0x30, 0xdb, 0x07, 0x63, 0x87, 0xed, 0xe9, 0x35, 0x30, 0x8f, |
| 2323 | 0x8b, 0x93, 0x4e, 0x89, 0x09, 0x8d, 0x74, 0x6d, 0x87, 0x4a, 0xba, 0x06, | 2301 | 0x5e, 0x43, 0xa3, 0xc0, 0xe5, 0x24, 0xc7, 0x80, 0xe5, 0x6d, 0xa0, 0x84, |
| 2324 | 0x26, 0xa0, 0x2b, 0x74, 0x1e, 0x63, 0x8c, 0xec, 0x34, 0xf5, 0x79, 0xe7, | 2302 | 0x44, 0xf9, 0xdb, 0xec, 0x3f, 0x42, 0x36, 0x28, 0x52, 0x5d, 0x2b, 0x52, |
| 2325 | 0x61, 0xcc, 0xef, 0x8a, 0xab, 0x09, 0x9f, 0xa8, 0x64, 0xd7, 0x4d, 0x14, | 2303 | 0x0f, 0x78, 0x60, 0xf4, 0x8c, 0xbc, 0x3d, 0x6d, 0xba, 0x49, 0x5a, 0x0b, |
| 2326 | 0x3b, 0x39, 0x15, 0x46, 0xd8, 0x52, 0xa8, 0x27, 0x6a, 0xf8, 0xf6, 0x78, | 2304 | 0x0f, 0x69, 0xd8, 0x5f, 0xd2, 0x28, 0x5e, 0x4c, 0x1b, 0xe0, 0x98, 0x87, |
| 2327 | 0x1d, 0x26, 0xc8, 0xef, 0xc5, 0x71, 0xe8, 0x41, 0x92, 0xe9, 0x16, 0x0f, | 2305 | 0x56, 0x4b, 0x3d, 0xda, 0x47, 0xd6, 0xa3, 0xd4, 0x0b, 0x6b, 0xa0, 0x3e, |
| 2328 | 0x8a, 0x4f, 0xc6, 0x5b, 0xd0, 0x19, 0x20, 0x9c, 0x04, 0x3c, 0x92, 0x8f, | 2306 | 0x19, 0x57, 0x8f, 0x08, 0xec, 0xa7, 0xf8, 0x9d, 0x5a, 0x64, 0x1e, 0x5d, |
| 2329 | 0x8b, 0x89, 0x11, 0x15, 0x9b, 0x0b, 0xa7, 0x49, 0x3f, 0x89, 0xc3, 0xf6, | 2307 | 0x0d, 0xaf, 0xdc, 0x0e, 0x73, 0xa0, 0x96, 0x18, 0xf9, 0x74, 0xa8, 0x86, |
| 2330 | 0xc3, 0xcd, 0xc4, 0x22, 0x1e, 0xb6, 0xcd, 0x1e, 0xe0, 0x2a, 0x8a, 0xb7, | 2308 | 0xfa, 0xc2, 0x4e, 0xfb, 0x35, 0x98, 0xfa, 0xfe, 0xd0, 0xaf, 0xe4, 0x64, |
| 2331 | 0x00, 0xd6, 0x5a, 0xc8, 0x6e, 0xb3, 0xaf, 0xc2, 0x4c, 0x1f, 0x8c, 0xed, | 2309 | 0x1c, 0x17, 0x84, 0x71, 0x52, 0x1a, 0xdf, 0xe2, 0x33, 0x2c, 0xf7, 0x06, |
| 2332 | 0xb6, 0xab, 0x87, 0x60, 0x1e, 0xbb, 0x9a, 0x7a, 0xd3, 0x95, 0xa4, 0xcf, | 2310 | 0x6c, 0xcf, 0x42, 0x0b, 0x3b, 0x6a, 0x7a, 0x7f, 0x1e, 0x38, 0x96, 0x37, |
| 2333 | 0xa0, 0xe5, 0x0e, 0x50, 0xe1, 0x42, 0xb9, 0x6c, 0xf6, 0x1f, 0x25, 0x5f, | 2311 | 0x30, 0xb9, 0xa8, 0x0e, 0x68, 0xee, 0xe8, 0xb9, 0x03, 0xde, 0xaa, 0xb0, |
| 2334 | 0x94, 0xa8, 0xff, 0x95, 0xca, 0x4d, 0xe2, 0xe9, 0xd1, 0xf3, 0xf2, 0xae, | 2312 | 0xdf, 0xe7, 0x6a, 0xe9, 0x3c, 0xf9, 0xc8, 0x7a, 0x21, 0xf0, 0x24, 0xd1, |
| 2335 | 0x94, 0x99, 0x6d, 0xa3, 0xb1, 0xe0, 0x90, 0x46, 0x38, 0x4d, 0xa3, 0x9c, | 2313 | 0x5a, 0x30, 0xc5, 0x7d, 0x89, 0x9a, 0x5e, 0x48, 0x79, 0x76, 0x5b, 0x49, |
| 2336 | 0x32, 0x6d, 0x80, 0x6b, 0x03, 0xb4, 0x30, 0xd5, 0xe2, 0x9f, 0x59, 0x47, | 2314 | 0xa0, 0xd6, 0x32, 0xf5, 0x59, 0xb0, 0x6e, 0x74, 0xd2, 0xe9, 0x19, 0x89, |
| 2337 | 0x08, 0xa7, 0x6b, 0x20, 0x0c, 0x8f, 0xa5, 0x23, 0x02, 0xfb, 0x28, 0xc7, | 2315 | 0x66, 0x96, 0xdd, 0xcb, 0x91, 0x9c, 0xab, 0xb6, 0x12, 0xff, 0x6b, 0x48, |
| 2338 | 0x27, 0x17, 0x9a, 0xc7, 0x56, 0xc3, 0x9d, 0x6e, 0x81, 0x39, 0x18, 0x0e, | 2316 | 0xa6, 0xdb, 0x2d, 0xaf, 0x87, 0xb0, 0x52, 0xed, 0x31, 0x13, 0x1f, 0x90, |
| 2339 | 0x9c, 0xc6, 0x07, 0x43, 0x21, 0xc2, 0x0d, 0xed, 0xf6, 0xeb, 0x30, 0xf5, | 2317 | 0xec, 0x6b, 0x29, 0x47, 0x8c, 0x95, 0x86, 0x9b, 0x38, 0x1f, 0x4c, 0x94, |
| 2340 | 0x7d, 0x81, 0x5f, 0xc8, 0xfd, 0x09, 0x5c, 0x14, 0xc4, 0x19, 0x69, 0xfc, | 2318 | 0x78, 0x4e, 0xea, 0xc1, 0xd5, 0xf9, 0x6a, 0x2c, 0xb0, 0xdd, 0xd9, 0xe6, |
| 2341 | 0x3e, 0xaf, 0x61, 0xdd, 0x07, 0xb0, 0x2d, 0xc3, 0x38, 0x45, 0x25, 0x9c, | 2319 | 0x17, 0xfa, 0xf5, 0xfb, 0xa0, 0xef, 0x23, 0xdc, 0x3f, 0xf5, 0x60, 0xb4, |
| 2342 | 0x02, 0xbc, 0x93, 0x37, 0xb0, 0x7f, 0x61, 0x0d, 0xf5, 0x93, 0xd6, 0x9e, | 2320 | 0x53, 0xa1, 0xde, 0x5c, 0xca, 0x15, 0x96, 0x39, 0xc2, 0xf9, 0x99, 0x7c, |
| 2343 | 0x75, 0x70, 0x57, 0xd1, 0xf5, 0x47, 0x8b, 0xd0, 0x5e, 0x79, 0x8a, 0x95, | 2321 | 0xdd, 0xdd, 0x67, 0x37, 0x51, 0x6c, 0xc2, 0x7b, 0xc2, 0x36, 0x50, 0xe3, |
| 2344 | 0x0d, 0x42, 0xe0, 0x29, 0xeb, 0xac, 0xdd, 0x31, 0xc9, 0x18, 0x46, 0x4d, | 2322 | 0xb0, 0x4f, 0x34, 0x90, 0x8f, 0x47, 0xb0, 0x9d, 0x7c, 0x44, 0xb3, 0xac, |
| 2345 | 0x2d, 0xa0, 0x5c, 0xdc, 0x5a, 0x16, 0xd4, 0xdb, 0x4c, 0x7d, 0x06, 0x6c, | 2323 | 0x14, 0x35, 0x53, 0xfa, 0xb1, 0x2c, 0xed, 0x2d, 0xc1, 0x28, 0xd9, 0xf5, |
| 2346 | 0x1b, 0x9d, 0xec, 0x7a, 0x5e, 0x22, 0xc6, 0xba, 0xbb, 0x39, 0xd2, 0x73, | 2324 | 0x98, 0x6d, 0x55, 0xd1, 0xec, 0x1c, 0x92, 0x2d, 0xd6, 0x7f, 0x10, 0x7d, |
| 2347 | 0xd5, 0x16, 0x3a, 0xff, 0x1a, 0xd2, 0xe9, 0x2e, 0xcb, 0xed, 0x21, 0xa9, | 2325 | 0x4b, 0xbf, 0x1b, 0xab, 0x61, 0xb4, 0x1a, 0x68, 0x70, 0xf8, 0xfd, 0x69, |
| 2348 | 0xd4, 0xa3, 0xcc, 0xe6, 0xf7, 0x48, 0xf7, 0xb5, 0x54, 0x47, 0x8a, 0xe5, | 2326 | 0x39, 0xdb, 0x1c, 0x21, 0xff, 0xe2, 0x3d, 0x96, 0x77, 0x10, 0xbf, 0x96, |
| 2349 | 0xe7, 0xea, 0xb9, 0x66, 0x4c, 0x94, 0xf9, 0x1e, 0xd7, 0x83, 0xa5, 0xf9, | 2327 | 0x88, 0xf1, 0x5e, 0x97, 0xf2, 0x27, 0xc4, 0x0c, 0xd1, 0x42, 0x0b, 0xc7, |
| 2350 | 0x6a, 0x3e, 0xb0, 0xff, 0xd9, 0xf7, 0x1c, 0x0b, 0x1c, 0x33, 0x1c, 0x27, | 2328 | 0x2d, 0xf7, 0xe7, 0xd6, 0xd1, 0x43, 0x54, 0x53, 0x8c, 0x16, 0x50, 0x2e, |
| 2351 | 0x8c, 0xd1, 0x7a, 0x30, 0xda, 0xae, 0x20, 0x9b, 0x90, 0x72, 0xa5, 0x65, | 2329 | 0x55, 0x11, 0x72, 0x2c, 0x7d, 0x1f, 0x8e, 0x92, 0xcd, 0xd9, 0x45, 0x2e, |
| 2352 | 0x8e, 0x70, 0x1d, 0xa7, 0x98, 0xcf, 0xee, 0xb5, 0xeb, 0x29, 0x3f, 0xe1, | 2330 | 0x12, 0xd7, 0xed, 0xba, 0x50, 0xf4, 0xee, 0x92, 0xb2, 0x33, 0x0d, 0x9a, |
| 2353 | 0x3e, 0x69, 0x1b, 0x08, 0x39, 0x1c, 0x1b, 0x75, 0x14, 0xeb, 0x11, 0x6c, | 2331 | 0xc2, 0x92, 0xc6, 0x4b, 0xb4, 0xba, 0x85, 0x7c, 0xbf, 0xd1, 0x89, 0x88, |
| 2354 | 0xa3, 0x58, 0xd1, 0x2c, 0x2b, 0x49, 0x97, 0x0d, 0xfd, 0x9d, 0x0c, 0xf1, | 2332 | 0xe2, 0x2e, 0xe8, 0x07, 0x6c, 0x8d, 0xf2, 0xae, 0x94, 0xdb, 0xd2, 0x06, |
| 2355 | 0x96, 0x61, 0x94, 0xed, 0x5a, 0xc2, 0x95, 0x2a, 0x62, 0xce, 0x21, 0xd9, | 2333 | 0xa6, 0x6d, 0xea, 0xc7, 0x5b, 0xc3, 0x68, 0xb6, 0xa0, 0xeb, 0x8e, 0x35, |
| 2356 | 0x60, 0x35, 0xea, 0xd4, 0xb8, 0xf5, 0x7b, 0xb1, 0x9a, 0xee, 0x17, 0x06, | 2334 | 0xf0, 0x14, 0xee, 0x26, 0x3e, 0x11, 0x99, 0x4f, 0x35, 0x90, 0xd6, 0xc4, |
| 2357 | 0xea, 0x1c, 0x9e, 0x3f, 0x27, 0x67, 0x62, 0x11, 0x8a, 0x33, 0xe6, 0xb1, | 2335 | 0x5e, 0xbb, 0x0e, 0xee, 0x4d, 0x02, 0x11, 0x27, 0x4e, 0xbc, 0xd5, 0x20, |
| 2358 | 0xdc, 0x67, 0xf0, 0x91, 0x44, 0x9c, 0x79, 0xb3, 0x58, 0x9d, 0x81, 0x38, | 2336 | 0xe7, 0x3f, 0xb3, 0x8c, 0x70, 0xdf, 0xb7, 0x7f, 0x44, 0xf2, 0x8a, 0xf9, |
| 2359 | 0x48, 0x7b, 0xa1, 0x81, 0x73, 0xd7, 0xc0, 0x7c, 0xc7, 0x3a, 0x76, 0x88, | 2337 | 0xf5, 0x0e, 0xaf, 0x59, 0x76, 0x11, 0xeb, 0xa9, 0xe7, 0xa7, 0x25, 0x7a, |
| 2360 | 0x7a, 0x8f, 0xd1, 0x00, 0xaa, 0xb9, 0x2a, 0x02, 0x8e, 0xa5, 0xef, 0xc5, | 2338 | 0xbf, 0x85, 0xde, 0x3f, 0x44, 0xb8, 0x73, 0x31, 0x7f, 0xd6, 0x6b, 0x6a, |
| 2361 | 0x51, 0xaf, 0x4e, 0x11, 0x52, 0x17, 0x2b, 0x76, 0xcf, 0x13, 0xbd, 0x84, | 2339 | 0x77, 0xac, 0xf2, 0x73, 0x78, 0x90, 0x64, 0xe0, 0xfc, 0xcd, 0x6b, 0xcc, |
| 2362 | 0xcd, 0xdb, 0x53, 0x70, 0x34, 0xb4, 0x19, 0x7f, 0x43, 0xa3, 0x9b, 0x29, | 2340 | 0xf3, 0x22, 0xe6, 0x99, 0x6a, 0x37, 0xfb, 0x95, 0x8d, 0x8f, 0xf2, 0x77, |
| 2363 | 0xfe, 0xe7, 0x38, 0x11, 0x51, 0xda, 0x0d, 0xfd, 0x69, 0x5b, 0xa3, 0x3e, | 2341 | 0x73, 0x0f, 0xef, 0xee, 0xb0, 0x21, 0x26, 0xec, 0x3d, 0x28, 0xeb, 0x68, |
| 2364 | 0x2a, 0xe5, 0xd6, 0x94, 0x81, 0x29, 0x9b, 0x70, 0x74, 0x63, 0x10, 0x31, | 2342 | 0x8a, 0x3a, 0x56, 0xff, 0x34, 0xa0, 0x44, 0x9c, 0x51, 0x14, 0x9b, 0x81, |
| 2365 | 0x0b, 0xba, 0xee, 0x58, 0x83, 0x07, 0x30, 0xc0, 0xf8, 0x37, 0x3a, 0x9f, | 2343 | 0x87, 0x0a, 0x96, 0xb7, 0x51, 0x31, 0x07, 0xe2, 0xd4, 0xf7, 0x9e, 0xfc, |
| 2366 | 0x7a, 0x25, 0x8d, 0x89, 0x31, 0xbb, 0x06, 0xd9, 0x9b, 0x05, 0x22, 0x4e, | 2344 | 0xa1, 0x8a, 0x9d, 0x9d, 0x65, 0x33, 0x46, 0x46, 0x8f, 0x3a, 0x51, 0xf1, |
| 2367 | 0x82, 0xce, 0x16, 0x42, 0xce, 0x7b, 0x66, 0x1d, 0x91, 0x7d, 0xd7, 0xde, | 2345 | 0xe2, 0x2e, 0x05, 0x0b, 0x96, 0xa8, 0x78, 0x8b, 0x72, 0xc8, 0x36, 0x9a, |
| 2368 | 0x43, 0xfa, 0x8a, 0xf9, 0xb5, 0x0e, 0x8f, 0x59, 0x76, 0x09, 0x77, 0x11, | 2346 | 0x45, 0xc2, 0x96, 0xda, 0x54, 0xe9, 0x89, 0x7f, 0x5f, 0x3c, 0x9a, 0xa4, |
| 2369 | 0x56, 0xa7, 0x21, 0x9a, 0xdf, 0x4c, 0xf3, 0x8f, 0x92, 0xec, 0x5c, 0xdc, | 2347 | 0xb1, 0x6a, 0x4c, 0x5a, 0x7d, 0x07, 0xf0, 0xa8, 0x74, 0x9b, 0xd9, 0x16, |
| 2370 | 0xbb, 0x87, 0xd6, 0xb7, 0x38, 0xd6, 0xf4, 0xf3, 0xd8, 0x4e, 0x3a, 0x70, | 2348 | 0x11, 0xca, 0xc3, 0xe7, 0xf2, 0x50, 0x6a, 0x8a, 0xf0, 0x0f, 0x76, 0xbf, |
| 2371 | 0x8d, 0xe7, 0x31, 0x3e, 0xf3, 0x42, 0x3e, 0x33, 0xf5, 0x78, 0x8e, 0x2b, | 2349 | 0xeb, 0xfb, 0x0c, 0xd9, 0xd2, 0x7d, 0x23, 0x0f, 0xd1, 0x94, 0x71, 0x30, |
| 2372 | 0x1b, 0x3f, 0xcb, 0xd3, 0xde, 0x09, 0x64, 0xb7, 0xdb, 0x10, 0x13, 0xf6, | 2350 | 0xdb, 0xcc, 0x76, 0xe1, 0xf9, 0x99, 0x94, 0x37, 0x4c, 0xc3, 0x47, 0x8b, |
| 2373 | 0x6e, 0xc2, 0x2f, 0xa8, 0x8f, 0x3a, 0x56, 0xff, 0x14, 0xa0, 0x44, 0x9c, | 2351 | 0x8a, 0xc5, 0x19, 0x34, 0x29, 0x8e, 0x75, 0x6a, 0x2f, 0xf1, 0xdc, 0xee, |
| 2374 | 0x9d, 0x28, 0xc5, 0x80, 0x47, 0x0b, 0x96, 0x7b, 0x8f, 0x62, 0x0e, 0x26, | 2352 | 0x34, 0xe1, 0x74, 0x0b, 0xe7, 0xc4, 0xa8, 0xf8, 0xd9, 0xa8, 0xd9, 0x43, |
| 2375 | 0x08, 0x13, 0x9f, 0x21, 0x4c, 0xbf, 0xab, 0x7d, 0xda, 0x8c, 0x83, 0xb1, | 2353 | 0x3d, 0xee, 0xaa, 0x8d, 0x30, 0xfb, 0xee, 0x11, 0xd4, 0x97, 0x11, 0xef, |
| 2376 | 0x7e, 0x54, 0xbc, 0xb4, 0x5b, 0x41, 0xc7, 0x62, 0xea, 0x4b, 0x54, 0x4b, | 2354 | 0x56, 0x92, 0xf8, 0xb4, 0x55, 0xc4, 0x93, 0x65, 0x33, 0x8e, 0x2a, 0xbf, |
| 2377 | 0xae, 0xb1, 0xf9, 0xbe, 0x7c, 0x79, 0x7d, 0x05, 0x2f, 0xff, 0x6f, 0x39, | 2355 | 0x67, 0x65, 0xcc, 0xb2, 0xbc, 0x98, 0xf2, 0x1b, 0x99, 0xce, 0xb0, 0x8f, |
| 2378 | 0x69, 0x92, 0xc5, 0xaa, 0x79, 0x69, 0xf5, 0x3d, 0x8d, 0x3f, 0x93, 0xd9, | 2356 | 0xdf, 0x85, 0xda, 0x98, 0x40, 0x4d, 0x66, 0xc4, 0xd7, 0x6d, 0x94, 0xec, |
| 2379 | 0x18, 0xfb, 0x22, 0x42, 0xb5, 0xf8, 0x97, 0xf5, 0x28, 0x39, 0x49, 0xf2, | 2357 | 0xdd, 0x94, 0x51, 0x89, 0xb6, 0x4a, 0x39, 0x9d, 0x68, 0x2f, 0x1e, 0xa0, |
| 2380 | 0x37, 0x75, 0x07, 0x75, 0x8e, 0x19, 0xf2, 0x65, 0xf6, 0x8d, 0x3c, 0x44, | 2358 | 0x9e, 0x85, 0x75, 0xfa, 0x92, 0xcc, 0x7d, 0x9b, 0xe5, 0xbc, 0x65, 0x4e, |
| 2381 | 0x7d, 0x9a, 0xf2, 0x2a, 0xc6, 0x7e, 0xe1, 0xfb, 0x3d, 0x19, 0x6f, 0x38, | 2359 | 0x66, 0xd2, 0x6c, 0x3d, 0xff, 0x96, 0x0d, 0xac, 0xfb, 0x43, 0x94, 0xcf, |
| 2382 | 0x41, 0xba, 0xa9, 0xe8, 0x4a, 0xa3, 0x5e, 0x71, 0xac, 0xb3, 0x63, 0x74, | 2360 | 0x17, 0x2f, 0xed, 0xda, 0x31, 0xa0, 0x3c, 0x20, 0x8d, 0x15, 0x6c, 0xdb, |
| 2383 | 0xe6, 0x16, 0xa7, 0x1e, 0xe7, 0x1a, 0xb8, 0x36, 0x46, 0xc5, 0x0f, 0x46, | 2361 | 0x46, 0x7a, 0xef, 0xdb, 0x9d, 0xfa, 0xa9, 0x77, 0xf0, 0xda, 0x50, 0x54, |
| 2384 | 0xcd, 0x1e, 0xc2, 0xc3, 0xab, 0xee, 0x21, 0x1c, 0x75, 0x9f, 0x50, 0xd1, | 2362 | 0x34, 0xed, 0xf6, 0xfc, 0xda, 0xf9, 0x2a, 0xf1, 0xf5, 0x61, 0x9a, 0xf9, |
| 2385 | 0x4b, 0x67, 0xb7, 0xda, 0xc8, 0x07, 0x84, 0x4d, 0x12, 0x6d, 0xd3, 0x66, | 2363 | 0xe1, 0x78, 0x7b, 0x07, 0x97, 0x16, 0xff, 0x94, 0xf6, 0x86, 0x88, 0x17, |
| 2386 | 0x02, 0xd5, 0xf3, 0x5e, 0x90, 0x71, 0xcb, 0x72, 0xe3, 0xca, 0xc7, 0x32, | 2364 | 0x68, 0x31, 0x92, 0x75, 0x05, 0xcd, 0x25, 0x57, 0x67, 0x0e, 0x48, 0x57, |
| 2387 | 0x95, 0xe6, 0x18, 0xdf, 0x80, 0x70, 0x5c, 0x20, 0x94, 0x1e, 0xf2, 0x6c, | 2365 | 0x67, 0xfc, 0xa4, 0xf7, 0x51, 0xd6, 0x3b, 0xcf, 0x45, 0x55, 0xdd, 0xf3, |
| 2388 | 0x4b, 0x77, 0x2a, 0xd4, 0xa7, 0x1f, 0x62, 0x1f, 0x11, 0x7e, 0x7b, 0x59, | 2366 | 0x7e, 0x3e, 0x3f, 0x4c, 0x31, 0xc9, 0xb6, 0x44, 0x53, 0x83, 0xc3, 0xfa, |
| 2389 | 0xe6, 0xbe, 0xc2, 0xba, 0x6d, 0x9f, 0xd5, 0x73, 0x2d, 0xc7, 0x15, 0xfd, | 2367 | 0x85, 0xa8, 0x73, 0xba, 0x8c, 0x85, 0x62, 0x87, 0xf4, 0xe2, 0xd5, 0x7c, |
| 2390 | 0x96, 0x73, 0xd8, 0xde, 0x87, 0xa8, 0x8e, 0x77, 0x2d, 0xe9, 0xdc, 0x3e, | 2368 | 0x16, 0x15, 0x13, 0xfe, 0x79, 0xa6, 0xfd, 0xe5, 0xf3, 0x6d, 0xe2, 0xd8, |
| 2391 | 0xa8, 0x0c, 0x49, 0x63, 0x25, 0xfb, 0x93, 0x2e, 0x37, 0xb5, 0x9e, 0xaf, | 2369 | 0xc3, 0x54, 0x7c, 0xeb, 0x7d, 0x7f, 0xe9, 0x7d, 0x92, 0xe2, 0x49, 0x73, |
| 2392 | 0xb5, 0xa8, 0x73, 0x1c, 0xaf, 0x0f, 0x45, 0x45, 0xfd, 0x63, 0xae, 0xd7, | 2370 | 0x6e, 0x95, 0xa9, 0x56, 0xf6, 0x37, 0x28, 0x2f, 0xdb, 0xb7, 0xc8, 0x5c, |
| 2393 | 0x53, 0x5f, 0xa3, 0xb3, 0x9c, 0x4c, 0xf1, 0x19, 0x38, 0xc7, 0x8e, 0xe3, | 2371 | 0x2b, 0xfb, 0x1d, 0xbc, 0x38, 0xe1, 0xd9, 0xb9, 0xfb, 0x3c, 0x1f, 0xd7, |
| 2394 | 0x8a, 0xd2, 0xed, 0xc4, 0x1b, 0xa0, 0xfd, 0xa1, 0x51, 0xbc, 0x41, 0x52, | 2372 | 0x74, 0x4a, 0x39, 0x61, 0x5f, 0x45, 0xba, 0x60, 0x3c, 0x55, 0x5d, 0xfc, |
| 2395 | 0x9f, 0x39, 0xd7, 0x35, 0x25, 0x8d, 0x06, 0x96, 0x4f, 0xb6, 0x1e, 0x65, | 2373 | 0xe5, 0x9c, 0x6e, 0xa8, 0x89, 0xae, 0xaf, 0xd4, 0x2b, 0xce, 0x69, 0x35, |
| 2396 | 0x5b, 0xf3, 0xdd, 0xb2, 0x6a, 0x6f, 0xe6, 0xe7, 0xf5, 0x74, 0xe9, 0x8e, | 2374 | 0xce, 0x1b, 0x78, 0x31, 0xaf, 0xb4, 0x85, 0xd1, 0x84, 0x3e, 0x5b, 0xe0, |
| 2397 | 0xb1, 0xff, 0x50, 0x5f, 0xe7, 0xb0, 0x4d, 0x21, 0x6a, 0x9c, 0x4e, 0x63, | 2375 | 0xdd, 0x1e, 0x81, 0xd3, 0x97, 0x47, 0x10, 0xba, 0xcc, 0x2a, 0x77, 0x84, |
| 2398 | 0x81, 0xd8, 0x21, 0xdd, 0x44, 0xb5, 0x86, 0x45, 0xc5, 0x84, 0xb7, 0x9e, | 2376 | 0xfa, 0x25, 0xe6, 0x95, 0xc9, 0x51, 0xce, 0x48, 0xad, 0x53, 0x45, 0xed, |
| 2399 | 0xf7, 0xfe, 0xf4, 0xfa, 0x26, 0xf1, 0xce, 0x9e, 0xdf, 0xa5, 0x67, 0x2f, | 2377 | 0xa5, 0x5c, 0xa7, 0xd8, 0x0e, 0x0a, 0xfe, 0x85, 0xf6, 0x5d, 0x77, 0xa9, |
| 2400 | 0x46, 0x7a, 0x9f, 0xa2, 0x1c, 0xd2, 0x9c, 0x7e, 0x99, 0x6c, 0xe4, 0x18, | 2378 | 0x65, 0x74, 0x50, 0x4b, 0xe0, 0xf5, 0x5d, 0x9d, 0x09, 0x9f, 0xf3, 0x43, |
| 2401 | 0x83, 0xf2, 0x8a, 0xbd, 0x56, 0xe6, 0x1a, 0x39, 0xd6, 0xe0, 0x26, 0x48, | 2379 | 0xe6, 0xe1, 0x4a, 0x5f, 0x06, 0xf6, 0xc7, 0xc5, 0x64, 0xc7, 0xdc, 0x0a, |
| 2402 | 0xce, 0xae, 0xc7, 0x7e, 0x75, 0x8e, 0xab, 0xdb, 0xa5, 0x9c, 0xb0, 0xd7, | 2380 | 0x05, 0xe9, 0x25, 0xf0, 0x22, 0xf4, 0x7e, 0xdb, 0x2e, 0xf6, 0x85, 0x47, |
| 2403 | 0x90, 0x2d, 0x58, 0x4e, 0xd5, 0x16, 0x7b, 0x66, 0x6d, 0xd3, 0x5e, 0xf1, | 2381 | 0x74, 0x9e, 0x09, 0x81, 0xae, 0x84, 0x0e, 0x6b, 0xd5, 0x0b, 0x44, 0x9b, |
| 2404 | 0x5f, 0xc1, 0x3b, 0x83, 0x16, 0x72, 0xde, 0xc0, 0x4b, 0x79, 0xa5, 0x89, | 2382 | 0xfa, 0x4d, 0xd2, 0x07, 0xd3, 0xaa, 0xe2, 0xa9, 0xe2, 0x88, 0x8a, 0xd3, |
| 2405 | 0x6e, 0x2b, 0xe8, 0xb3, 0x05, 0x7e, 0xda, 0x43, 0xfa, 0x5d, 0x49, 0x58, | 2383 | 0x0f, 0xf3, 0x19, 0x08, 0xd6, 0x51, 0x7a, 0x01, 0xc5, 0x76, 0x46, 0x9d, |
| 2406 | 0x65, 0x91, 0x35, 0xdd, 0x1a, 0x58, 0x2f, 0x31, 0x77, 0x9a, 0x82, 0xe3, | 2384 | 0x93, 0x6d, 0x40, 0xaf, 0xf4, 0x61, 0x51, 0x31, 0x35, 0xca, 0xf8, 0x7c, |
| 2407 | 0xbc, 0xd4, 0xda, 0x55, 0x84, 0xaf, 0xe0, 0x1e, 0xc5, 0xb6, 0x57, 0xf0, | 2385 | 0x3f, 0x42, 0x91, 0x7d, 0x2b, 0xcd, 0x7b, 0x7e, 0x23, 0x17, 0x64, 0xfe, |
| 2408 | 0x32, 0xf1, 0xad, 0xb8, 0xc2, 0x32, 0x5a, 0x05, 0xf5, 0xb5, 0xbe, 0xa5, | 2386 | 0x9d, 0xf6, 0x30, 0xde, 0xa8, 0x38, 0xe2, 0xd3, 0xae, 0xe8, 0x68, 0x8a, |
| 2409 | 0xe9, 0xe0, 0x2f, 0x63, 0x8f, 0xcf, 0x90, 0xf3, 0x74, 0xe0, 0x18, 0xec, | 2387 | 0x74, 0x3d, 0x91, 0xae, 0xe2, 0xd9, 0x48, 0x7b, 0xd8, 0xe7, 0x98, 0x87, |
| 2410 | 0x22, 0xdf, 0xe5, 0x56, 0x2a, 0x48, 0x2d, 0x06, 0x61, 0x8d, 0xa8, 0xd8, | 2388 | 0x5e, 0xf1, 0x78, 0x9e, 0xf2, 0x0a, 0xd5, 0xdc, 0x89, 0xac, 0x62, 0xd5, |
| 2411 | 0xba, 0x9b, 0xfd, 0xff, 0x3d, 0x9a, 0x67, 0xbe, 0xce, 0x66, 0x1d, 0xd6, | 2389 | 0x42, 0x62, 0xb3, 0xad, 0x63, 0x99, 0x5e, 0xa9, 0x57, 0xf7, 0xe7, 0xab, |
| 2412 | 0xaa, 0xc3, 0x74, 0xb1, 0x24, 0x2c, 0x4a, 0xf6, 0xe0, 0xbd, 0xaa, 0x72, | 2390 | 0xf7, 0x3f, 0xbd, 0xa2, 0x90, 0x57, 0xa8, 0x7f, 0x83, 0x5e, 0xef, 0x28, |
| 2413 | 0xaa, 0x32, 0xa2, 0x62, 0x72, 0x94, 0x79, 0x59, 0x17, 0xaa, 0xcd, 0x1c, | 2391 | 0xf7, 0x34, 0x51, 0x2c, 0xbd, 0x46, 0xb5, 0xeb, 0xd5, 0xb1, 0x5e, 0x91, |
| 2414 | 0x2b, 0x29, 0x8e, 0x8f, 0x8f, 0x65, 0x47, 0x3a, 0x1a, 0x43, 0x2d, 0xaf, | 2392 | 0xcf, 0xeb, 0x78, 0x65, 0x7c, 0xb9, 0x78, 0x30, 0x6f, 0xe1, 0xe5, 0x62, |
| 2415 | 0x89, 0x0a, 0x7d, 0x0f, 0xcb, 0x85, 0x60, 0x3b, 0xc6, 0x48, 0xff, 0xf6, | 2393 | 0xe5, 0x2e, 0xe8, 0x81, 0xa2, 0x2b, 0xc6, 0xf3, 0xdc, 0xfb, 0x98, 0xa9, |
| 2416 | 0xf4, 0xe5, 0xb3, 0xfa, 0xff, 0xb1, 0x5e, 0xc1, 0x71, 0x51, 0x71, 0xd4, | 2394 | 0x32, 0x66, 0xc4, 0x5a, 0xc2, 0x53, 0x56, 0x2f, 0xf4, 0xeb, 0xc8, 0x78, |
| 2417 | 0xdb, 0xbb, 0x62, 0xa3, 0x49, 0xb2, 0xf5, 0x44, 0xaa, 0xca, 0xf3, 0x38, | 2395 | 0xb1, 0x01, 0x93, 0x63, 0x95, 0x7a, 0x77, 0xeb, 0xb9, 0x7a, 0xf7, 0xc5, |
| 2418 | 0xf1, 0x70, 0x9c, 0x7d, 0x66, 0x4f, 0x22, 0xea, 0x15, 0x8f, 0xe4, 0xe9, | 2396 | 0x3b, 0x9d, 0x48, 0x4e, 0x77, 0xd0, 0xd7, 0x38, 0xbc, 0x49, 0x46, 0xad, |
| 2419 | 0x92, 0x6a, 0x29, 0xd7, 0xd7, 0x52, 0x9e, 0x3c, 0x49, 0xbd, 0x69, 0x7f, | 2397 | 0x10, 0xd5, 0x49, 0x2b, 0x37, 0x2d, 0x22, 0x3d, 0x3b, 0xba, 0x99, 0x5f, |
| 2420 | 0xb1, 0x57, 0x6c, 0xcb, 0xeb, 0xd4, 0xa7, 0x96, 0x8b, 0xad, 0x79, 0x8b, | 2398 | 0xf4, 0x69, 0xd4, 0x63, 0x4c, 0x14, 0xd9, 0x5f, 0x0d, 0x18, 0xc5, 0x6f, |
| 2421 | 0x71, 0xd1, 0x6c, 0x9f, 0xaa, 0xbc, 0x8b, 0xda, 0x52, 0xfa, 0xe4, 0x3b, | 2399 | 0xb5, 0x56, 0xec, 0xdc, 0x96, 0xd3, 0x1c, 0xa0, 0x9e, 0xfa, 0x8b, 0x06, |
| 2422 | 0xa2, 0x48, 0x4e, 0x77, 0xd0, 0x37, 0x7f, 0xf8, 0x41, 0xa9, 0x58, 0xfc, | 2400 | 0x9a, 0x0d, 0xea, 0x9c, 0x1b, 0xbd, 0x8e, 0x6e, 0xe4, 0x54, 0xc7, 0xea, |
| 2423 | 0x3e, 0xc8, 0x3a, 0x76, 0x22, 0x10, 0xe9, 0xe9, 0x59, 0x12, 0x40, 0xbd, | 2401 | 0xb9, 0x5e, 0xac, 0x5c, 0xa9, 0x38, 0xf7, 0xad, 0x0c, 0x4d, 0x1b, 0xc6, |
| 2424 | 0x85, 0xbe, 0x66, 0xc2, 0x07, 0x57, 0x7a, 0x35, 0xdd, 0x80, 0x51, 0x6a, | 2402 | 0x16, 0xbf, 0x0e, 0x9d, 0x1c, 0xd8, 0x4f, 0x33, 0x50, 0x0d, 0xcd, 0xa5, |
| 2425 | 0x6f, 0xac, 0xf8, 0x89, 0xf3, 0x0e, 0x6a, 0xad, 0x83, 0x5c, 0x0d, 0xd5, | 2403 | 0xef, 0xe9, 0xb8, 0x2f, 0xd4, 0x7d, 0x1f, 0x36, 0xe5, 0x07, 0xf0, 0xb7, |
| 2426 | 0x91, 0x6b, 0xba, 0x43, 0xda, 0xd1, 0xee, 0xde, 0x96, 0xf6, 0xc9, 0xa6, | 2404 | 0x79, 0xce, 0x13, 0x3a, 0x1e, 0x63, 0x1e, 0x0a, 0x7c, 0xff, 0x73, 0xb0, |
| 2427 | 0x5c, 0xad, 0x73, 0x7d, 0x4b, 0xdb, 0xa4, 0xdb, 0xb2, 0x70, 0x08, 0xf8, | 2405 | 0x85, 0x6b, 0xdf, 0x23, 0x25, 0x8a, 0xc3, 0x21, 0xe4, 0x12, 0x8e, 0x9f, |
| 2428 | 0xf2, 0x90, 0x0e, 0xcd, 0xb9, 0xd1, 0x0d, 0x74, 0x23, 0xa7, 0x52, 0x5c, | 2406 | 0x47, 0x12, 0xa7, 0xc4, 0xf9, 0xfd, 0xbf, 0xbb, 0x97, 0xf5, 0x46, 0xfd, |
| 2429 | 0xec, 0xe8, 0xb6, 0x7a, 0xa6, 0xc4, 0x4d, 0x37, 0x91, 0x1e, 0x2d, 0x9d, | 2407 | 0x1c, 0xcd, 0x4e, 0x4a, 0xf6, 0x4a, 0xbe, 0x7f, 0xf2, 0x03, 0x74, 0x3b, |
| 2430 | 0x93, 0x86, 0xb1, 0x39, 0xf3, 0xc0, 0x4d, 0x81, 0x29, 0xee, 0x2f, 0x1b, | 2408 | 0xe5, 0x91, 0x0f, 0x6c, 0x13, 0x63, 0x7a, 0xc5, 0x7e, 0xdb, 0x47, 0xb9, |
| 2431 | 0x06, 0xf7, 0xf1, 0x7b, 0x33, 0xba, 0x9b, 0x9e, 0xd0, 0xf1, 0xc0, 0xb2, | 2409 | 0x1e, 0x7d, 0x42, 0xf5, 0x28, 0x2a, 0xb6, 0xd2, 0x73, 0xa3, 0xf3, 0x4a, |
| 2432 | 0xee, 0x41, 0x0c, 0xe4, 0x1f, 0x40, 0x7f, 0x9e, 0xdf, 0x3b, 0x69, 0x18, | 2410 | 0x7a, 0x8a, 0x78, 0x3f, 0x46, 0x39, 0x26, 0xe1, 0x1c, 0x47, 0xa2, 0xc0, |
| 2433 | 0xe1, 0x1a, 0x5f, 0xe0, 0x77, 0x4e, 0x0f, 0x35, 0x30, 0x6e, 0xdc, 0x5e, | 2411 | 0xb3, 0xfa, 0x51, 0x9a, 0xd5, 0xcd, 0xdc, 0x32, 0x8a, 0xe7, 0x03, 0x76, |
| 2434 | 0x56, 0x71, 0xed, 0x10, 0xcf, 0x99, 0xcd, 0xef, 0xa3, 0xca, 0xfb, 0x59, | 2412 | 0xd7, 0xc0, 0xa0, 0x30, 0x8f, 0x52, 0x6d, 0x4e, 0x1c, 0xa0, 0xb9, 0x8b, |
| 2435 | 0x7c, 0x9f, 0xd4, 0x93, 0x6b, 0x1e, 0xb2, 0x81, 0x61, 0x29, 0x95, 0x0c, | 2413 | 0xbe, 0x37, 0xb4, 0x87, 0xba, 0xec, 0x75, 0x30, 0xdd, 0x85, 0xc2, 0x34, |
| 2436 | 0xdf, 0x63, 0x4e, 0x13, 0xd6, 0xe3, 0xbd, 0x7f, 0x4e, 0xbd, 0x71, 0x2e, | 2414 | 0x5e, 0x17, 0xa6, 0x5e, 0x23, 0x58, 0x27, 0x9f, 0x60, 0x91, 0xaf, 0x9b, |
| 2437 | 0xbf, 0x0b, 0x63, 0xca, 0x86, 0x87, 0x79, 0xee, 0xd4, 0xec, 0xdc, 0xbb, | 2415 | 0xe3, 0xb0, 0xfc, 0xef, 0x57, 0xd2, 0x1d, 0xfe, 0xf7, 0xd1, 0xf4, 0xc5, |
| 2438 | 0x34, 0x07, 0x71, 0x92, 0xea, 0xfa, 0x74, 0x25, 0x2f, 0xb2, 0xb5, 0xc3, | 2416 | 0xe7, 0x7b, 0x0b, 0x77, 0x07, 0xd5, 0xc6, 0x7c, 0x21, 0x83, 0x48, 0x33, |
| 2439 | 0x1a, 0xfe, 0xa8, 0xc0, 0x3c, 0x33, 0xb3, 0x3c, 0x3f, 0x21, 0x9e, 0x04, | 2417 | 0xd7, 0x8a, 0xa8, 0x38, 0xb0, 0x0b, 0x5a, 0xbd, 0xf3, 0x3e, 0xbe, 0x3e, |
| 2440 | 0x56, 0xc4, 0xb8, 0x76, 0x53, 0xce, 0xec, 0xae, 0xbe, 0x2b, 0x93, 0xf2, | 2418 | 0x04, 0x4d, 0x73, 0xa8, 0xd2, 0x12, 0x2f, 0xd4, 0x1b, 0xa4, 0xae, 0x13, |
| 2441 | 0x25, 0xfb, 0xc3, 0x68, 0xe5, 0x5d, 0x59, 0x54, 0x68, 0x8f, 0xd1, 0x33, | 2419 | 0xdc, 0x0f, 0x74, 0xe5, 0x9e, 0x80, 0xd9, 0x53, 0x43, 0x34, 0x3e, 0x01, |
| 2442 | 0x61, 0x95, 0x50, 0x2a, 0x2a, 0x42, 0x8f, 0xf1, 0xfa, 0x57, 0x53, 0x95, | 2420 | 0xe3, 0x7a, 0x1f, 0x49, 0x1f, 0xe7, 0x2c, 0xce, 0xe3, 0x8c, 0x8a, 0xc1, |
| 2443 | 0xf5, 0xc7, 0x52, 0xbc, 0xfe, 0xd7, 0xd7, 0xa8, 0xd9, 0xc8, 0x30, 0xdd, | 2421 | 0xd1, 0xa8, 0xd8, 0x4c, 0xb2, 0xb4, 0x3b, 0x27, 0x71, 0x85, 0xcf, 0xff, |
| 2444 | 0xa9, 0x0a, 0xff, 0x24, 0x77, 0x34, 0x56, 0x64, 0x57, 0xd6, 0x7d, 0x6f, | 2422 | 0x2b, 0xc4, 0x3f, 0xe7, 0x9c, 0x13, 0x94, 0x73, 0x18, 0xef, 0xd1, 0x34, |
| 2445 | 0x76, 0xdd, 0x41, 0x5a, 0xb7, 0x8f, 0x62, 0x8c, 0xd7, 0xb2, 0x9e, 0x1c, | 2423 | 0xe3, 0x1d, 0xa0, 0x3e, 0xf3, 0x7a, 0xdb, 0x4c, 0xf5, 0x84, 0xcc, 0x44, |
| 2446 | 0xa3, 0xd5, 0xf7, 0x86, 0x49, 0x71, 0x80, 0x7a, 0xf5, 0x81, 0x92, 0x2a, | 2424 | 0x97, 0x30, 0x29, 0xa9, 0xb1, 0x3c, 0x5d, 0xfd, 0x33, 0xe0, 0xb9, 0xd8, |
| 2447 | 0xf6, 0x52, 0x1d, 0x1c, 0xcf, 0x13, 0x36, 0xf2, 0xde, 0x05, 0x52, 0xcd, | 2425 | 0x97, 0xa9, 0xa7, 0x9e, 0x64, 0x1a, 0x22, 0x7a, 0x1f, 0xfa, 0xf4, 0x4e, |
| 2448 | 0x2f, 0x7f, 0x23, 0x56, 0xf1, 0x21, 0xf7, 0xd5, 0x69, 0xea, 0xab, 0xed, | 2426 | 0xce, 0xd1, 0x3b, 0xf1, 0x07, 0x64, 0x52, 0xdd, 0xfb, 0xc9, 0x1e, 0xdb, |
| 2449 | 0x54, 0xdf, 0x55, 0x4f, 0xa7, 0xb0, 0x73, 0x84, 0xea, 0xbb, 0xc0, 0x49, | 2427 | 0x0a, 0xaf, 0xc8, 0xce, 0xd6, 0x8a, 0x4c, 0x83, 0x3e, 0x2f, 0x3f, 0x49, |
| 2450 | 0xaf, 0xbe, 0x1c, 0x41, 0x7b, 0x89, 0xfb, 0x80, 0x25, 0xce, 0x15, 0x8c, | 2428 | 0x33, 0x2f, 0x51, 0x67, 0x86, 0xe6, 0x48, 0xa6, 0x6d, 0xae, 0x22, 0xba, |
| 2451 | 0x5c, 0x33, 0xc9, 0x6e, 0x29, 0x57, 0x6a, 0x03, 0xf5, 0x82, 0x2c, 0xf5, | 2429 | 0x44, 0xb3, 0xcb, 0x18, 0x10, 0x66, 0x3f, 0xe9, 0xad, 0x6f, 0xdc, 0xd7, |
| 2452 | 0x64, 0xf1, 0x62, 0x89, 0x7f, 0x52, 0xf1, 0x8c, 0xf3, 0x19, 0xb2, 0x62, | 2430 | 0xdb, 0x4f, 0xd2, 0x5d, 0x3e, 0xce, 0x19, 0xea, 0x39, 0xbe, 0xe8, 0x93, |
| 2453 | 0x4e, 0xbb, 0x8b, 0xfa, 0x76, 0x97, 0x71, 0xec, 0xc0, 0xf3, 0xc2, 0x9a, | 2431 | 0xec, 0x73, 0xd5, 0xbb, 0xca, 0x94, 0x78, 0x8a, 0x7a, 0x97, 0xa7, 0x8a, |
| 2454 | 0x3e, 0x27, 0xb2, 0xb7, 0x36, 0xe3, 0x41, 0xfc, 0x3c, 0x95, 0x5d, 0x11, | 2432 | 0xaa, 0xd8, 0x47, 0xf6, 0x1c, 0xa7, 0xb8, 0x19, 0xf4, 0xef, 0x1f, 0xa9, |
| 2455 | 0xa5, 0x6f, 0xc2, 0xcc, 0x86, 0xc6, 0xef, 0x48, 0xbb, 0xdb, 0x7a, 0x36, | 2433 | 0x06, 0x96, 0xbe, 0xd7, 0x3c, 0x97, 0x6f, 0xc8, 0xae, 0x65, 0xb2, 0x6b, |
| 2456 | 0x88, 0x36, 0xaa, 0x37, 0x6d, 0xee, 0x16, 0xb4, 0x51, 0xcf, 0xb7, 0xb5, | 2434 | 0x27, 0x65, 0x65, 0xee, 0xd9, 0xb8, 0xde, 0x1d, 0xa6, 0x7a, 0x27, 0xf0, |
| 2457 | 0xc3, 0x25, 0x5b, 0x7b, 0xa3, 0x54, 0xb5, 0x03, 0xc7, 0x29, 0xdb, 0x80, | 2435 | 0xa1, 0x9f, 0x63, 0x0f, 0xa3, 0xb3, 0xc8, 0x3d, 0xa1, 0x25, 0x96, 0xe7, |
| 2458 | 0x42, 0xdf, 0xb1, 0xb2, 0x0b, 0x04, 0xf5, 0x55, 0xea, 0xbb, 0xc3, 0xd4, | 2436 | 0x8d, 0xdc, 0x7c, 0xc2, 0xfd, 0x7e, 0xa9, 0x92, 0x1f, 0xa9, 0x36, 0xba, |
| 2459 | 0xb3, 0x2b, 0xf7, 0xce, 0x30, 0xe1, 0x16, 0xde, 0x7b, 0xdd, 0xec, 0xbb, | 2437 | 0x21, 0xa7, 0x47, 0xbc, 0x50, 0xe4, 0x9f, 0x54, 0x4c, 0x62, 0xec, 0x5b, |
| 2460 | 0x96, 0x7f, 0x90, 0x95, 0x1e, 0xf5, 0x0a, 0xd9, 0x83, 0xcf, 0xfc, 0xa3, | 2438 | 0xae, 0x68, 0xea, 0xf4, 0xd0, 0xde, 0xe9, 0x49, 0xd5, 0xb2, 0xca, 0xef, |
| 2461 | 0x48, 0x65, 0xfc, 0x4c, 0x6c, 0xf6, 0xff, 0xf9, 0x21, 0x9c, 0x42, 0xf7, | 2439 | 0x0b, 0xeb, 0x94, 0x15, 0x72, 0x6f, 0x9f, 0x8f, 0x4d, 0xb8, 0x6c, 0xb1, |
| 2462 | 0xc8, 0x21, 0x81, 0x1d, 0x6d, 0x95, 0x58, 0xee, 0xe4, 0xf7, 0x98, 0xde, | 2440 | 0x7b, 0x73, 0x02, 0xfe, 0x4c, 0x6c, 0x50, 0x4c, 0xa2, 0xb7, 0x3b, 0xd9, |
| 2463 | 0x7b, 0xb7, 0x2a, 0x4f, 0xc5, 0x86, 0x0a, 0xe1, 0x99, 0x43, 0xe5, 0xac, | 2441 | 0x33, 0x2d, 0x92, 0xd4, 0x43, 0x25, 0xbd, 0x94, 0x48, 0xa6, 0x8e, 0xc3, |
| 2464 | 0xb8, 0x26, 0x8f, 0x01, 0xea, 0x89, 0xd9, 0x20, 0xf1, 0x5e, 0x53, 0xea, | 2442 | 0xd6, 0x8e, 0x14, 0x6d, 0xed, 0x8d, 0x62, 0xf5, 0x6e, 0x93, 0xe5, 0x62, |
| 2465 | 0x15, 0xcb, 0xf3, 0x96, 0xb1, 0x89, 0x74, 0xdd, 0xa2, 0x77, 0xea, 0xe3, | 2443 | 0x5f, 0xe5, 0xf8, 0xb0, 0xdc, 0xfb, 0x29, 0x0f, 0xc1, 0xef, 0x43, 0xe4, |
| 2466 | 0x84, 0x21, 0x68, 0x3f, 0x23, 0x4c, 0xf1, 0xaf, 0x39, 0x73, 0xb1, 0x7d, | 2444 | 0xa1, 0x46, 0x8a, 0xb1, 0x3b, 0x51, 0x4b, 0x4d, 0xb3, 0xdc, 0xde, 0x44, |
| 2467 | 0x36, 0x76, 0x28, 0x1f, 0x28, 0x7f, 0x06, 0xc5, 0x82, 0x49, 0xfe, 0xa9, | 2445 | 0xf3, 0xcf, 0x5d, 0x44, 0xbf, 0xdc, 0x9a, 0x03, 0xd7, 0x93, 0x47, 0xf8, |
| 2468 | 0x7b, 0xb1, 0x5b, 0xd1, 0xe3, 0x9c, 0xdc, 0x76, 0x33, 0xcf, 0x5f, 0x31, | 2446 | 0xc2, 0xb9, 0x85, 0x79, 0x7a, 0x33, 0x52, 0x91, 0x91, 0xca, 0x70, 0xe5, |
| 2469 | 0x6b, 0xfb, 0xa6, 0x38, 0xed, 0x49, 0xbf, 0x47, 0x66, 0xcf, 0xff, 0x7f, | 2447 | 0xff, 0x17, 0xd2, 0x1a, 0x28, 0x06, 0xd7, 0x0d, 0x09, 0xea, 0xef, 0x2b, |
| 2470 | 0xad, 0xbd, 0xf6, 0x92, 0xff, 0xb9, 0x66, 0x86, 0xce, 0xc9, 0x18, 0x08, | 2448 | 0xf1, 0xb8, 0x90, 0xef, 0x4e, 0xfd, 0x7b, 0xb3, 0x57, 0x64, 0xa5, 0xde, |
| 2471 | 0x6e, 0xdc, 0x61, 0xfc, 0x33, 0x6f, 0xd6, 0xe7, 0xd4, 0x15, 0xa3, 0x03, | 2449 | 0x7f, 0xdc, 0xcc, 0x77, 0x51, 0x8a, 0x33, 0x1c, 0xfb, 0xed, 0xb3, 0x15, |
| 2472 | 0xb8, 0x71, 0x31, 0xdd, 0x7c, 0xe9, 0x0e, 0xb6, 0x8d, 0x7c, 0x95, 0x1c, | 2450 | 0xdd, 0xf2, 0x1c, 0x7f, 0xa8, 0xe4, 0x8a, 0x6b, 0xf3, 0xd8, 0x40, 0xbd, |
| 2473 | 0x66, 0xbd, 0xcf, 0x93, 0xde, 0xd0, 0x6a, 0x9c, 0xb3, 0xb8, 0x7c, 0xa8, | 2451 | 0x83, 0x1b, 0x26, 0x1c, 0xd7, 0x16, 0x7b, 0x49, 0x37, 0x96, 0x31, 0x48, |
| 2474 | 0xb5, 0x3f, 0x2c, 0xcc, 0xe4, 0x90, 0x30, 0xfb, 0xa8, 0xbe, 0xd9, 0x93, | 2452 | 0x44, 0xb7, 0xea, 0x5d, 0xfa, 0x38, 0xf5, 0x5a, 0x84, 0xcb, 0xa0, 0x7e, |
| 2475 | 0x30, 0x9b, 0x17, 0x08, 0xd3, 0x58, 0x0b, 0xb6, 0xc9, 0x79, 0xb4, 0x95, | 2453 | 0x94, 0x62, 0x7c, 0x1e, 0x76, 0xcc, 0xc5, 0x54, 0xbd, 0xc3, 0x77, 0xbb, |
| 2476 | 0xf8, 0xfb, 0x2c, 0x2c, 0xf2, 0x6b, 0xdf, 0x70, 0x00, 0x4a, 0xfa, 0x03, | 2454 | 0x03, 0x62, 0xe1, 0x54, 0x25, 0xcd, 0x1f, 0x3a, 0x27, 0xdf, 0x69, 0xb9, |
| 2477 | 0xb2, 0x2b, 0xe1, 0x35, 0xd1, 0x4c, 0xb9, 0xc4, 0xb1, 0x77, 0x1e, 0x9b, | 2455 | 0xfd, 0x26, 0x7e, 0x5f, 0x3f, 0x67, 0x93, 0x2b, 0x99, 0x26, 0xfd, 0x7e, |
| 2478 | 0xf3, 0xd0, 0x5a, 0x88, 0xe7, 0x2a, 0xaa, 0xd1, 0xad, 0xc3, 0xe6, 0x59, | 2456 | 0x76, 0x8e, 0x87, 0x3f, 0x74, 0xf6, 0x8e, 0xaf, 0xfe, 0xf6, 0x99, 0x59, |
| 2479 | 0xc2, 0x9c, 0x83, 0x5f, 0x0a, 0xb4, 0x26, 0xfb, 0x61, 0x0e, 0x6c, 0x41, | 2457 | 0xe2, 0x93, 0x7b, 0x45, 0x78, 0x31, 0x87, 0xfb, 0xc4, 0x0b, 0xe7, 0x7c, |
| 2480 | 0xe7, 0xf4, 0x51, 0x61, 0x66, 0xcf, 0x12, 0x16, 0x0c, 0xa7, 0x2b, 0x32, | 2458 | 0xe1, 0x52, 0xc2, 0xbd, 0x01, 0x37, 0xd2, 0x7c, 0xd4, 0x49, 0x73, 0x28, |
| 2481 | 0x17, 0xcd, 0xca, 0x4c, 0x32, 0x3e, 0xf6, 0x72, 0x88, 0x30, 0x74, 0xfa, | 2459 | 0xcd, 0x2e, 0x48, 0x0d, 0xb3, 0x3e, 0xce, 0x90, 0x3e, 0xd8, 0xe6, 0xa7, |
| 2482 | 0x6f, 0xe5, 0xb4, 0x67, 0xb3, 0xe0, 0xac, 0xfe, 0x4b, 0xe2, 0x15, 0x1f, | 2460 | 0xc8, 0xe6, 0x1d, 0x39, 0x8a, 0x99, 0xd4, 0x7a, 0x61, 0xf6, 0x92, 0xbf, |
| 2483 | 0x3c, 0x37, 0x6b, 0x1f, 0x42, 0x24, 0xb5, 0xcc, 0xc7, 0xf7, 0x30, 0x88, | 2461 | 0x51, 0xed, 0x32, 0x13, 0x1f, 0xc3, 0x34, 0xd6, 0xfa, 0x3e, 0x7d, 0x66, |
| 2484 | 0x35, 0xf9, 0x2f, 0xe2, 0x61, 0xc2, 0x43, 0x59, 0x6f, 0x7d, 0x2f, 0x72, | 2462 | 0xce, 0xa7, 0x4f, 0xb1, 0x4f, 0xa3, 0x6f, 0x38, 0x04, 0x25, 0xf3, 0x29, |
| 2485 | 0x25, 0x88, 0xb5, 0xf9, 0xe9, 0xf0, 0x51, 0x3b, 0x88, 0xa2, 0x27, 0xe7, | 2463 | 0xe9, 0x8c, 0xe2, 0x4d, 0x30, 0x4e, 0xce, 0x53, 0x67, 0x40, 0xfd, 0xb2, |
| 2486 | 0x7a, 0x1a, 0xeb, 0xa3, 0x0f, 0xdb, 0x8c, 0xef, 0xe4, 0x37, 0xd3, 0x73, | 2464 | 0x36, 0x9f, 0xf6, 0xc8, 0x42, 0x47, 0xe2, 0x28, 0xf5, 0xdb, 0xfb, 0xc0, |
| 2487 | 0xd6, 0xe3, 0xeb, 0xcf, 0xa3, 0x27, 0x9c, 0x22, 0xdc, 0xe6, 0xf1, 0x79, | 2465 | 0x25, 0xa3, 0xeb, 0xe8, 0x31, 0x61, 0x96, 0xdf, 0x0b, 0x71, 0x0e, 0x10, |
| 2488 | 0xf7, 0x75, 0xe2, 0x59, 0xce, 0x73, 0x23, 0xfc, 0xae, 0x61, 0x75, 0xa6, | 2466 | 0x68, 0xcc, 0x54, 0xf0, 0x5d, 0x5e, 0x4c, 0x60, 0x47, 0xa9, 0x82, 0xf3, |
| 2489 | 0xcd, 0x78, 0xd8, 0xbb, 0x23, 0x1a, 0x58, 0x53, 0x32, 0x70, 0x07, 0xd5, | 2467 | 0x32, 0xf2, 0xe1, 0x31, 0xff, 0x7e, 0x41, 0x81, 0x96, 0x79, 0x9b, 0x6b, |
| 2490 | 0xd5, 0xa2, 0x57, 0x57, 0x7f, 0x85, 0xe7, 0x15, 0xe2, 0x5b, 0x46, 0x7c, | 2468 | 0x33, 0xc1, 0x25, 0x73, 0xf2, 0x7f, 0x67, 0xce, 0x06, 0x6f, 0xce, 0xe9, |
| 2491 | 0x9b, 0xbc, 0x31, 0x03, 0xcb, 0x4b, 0xc7, 0xbd, 0x58, 0x51, 0x1d, 0xf6, | 2469 | 0x67, 0x4b, 0x8c, 0x6b, 0x8f, 0x96, 0xe1, 0x7c, 0x0d, 0xb1, 0x26, 0xff, |
| 2492 | 0x03, 0xdb, 0x9e, 0xf1, 0x68, 0xf5, 0xae, 0xc6, 0x3e, 0xc9, 0x8a, 0x47, | 2470 | 0x67, 0x54, 0x03, 0x34, 0xea, 0x81, 0xfd, 0xbc, 0x8f, 0x5c, 0x11, 0x94, |
| 2493 | 0xf3, 0xbd, 0x62, 0x67, 0x3e, 0x4a, 0xfb, 0xb9, 0x62, 0x24, 0xa3, 0x8c, | 2471 | 0xbf, 0xcb, 0xb5, 0x47, 0xec, 0xf0, 0x5c, 0xfe, 0xfa, 0x06, 0xad, 0xf5, |
| 2494 | 0xc6, 0x20, 0xb1, 0x2c, 0x7d, 0x35, 0xd5, 0x19, 0x2b, 0x69, 0xd1, 0xb5, | 2472 | 0xd1, 0x87, 0x75, 0xc6, 0x77, 0x12, 0x37, 0xd1, 0xb3, 0xeb, 0xef, 0xeb, |
| 2495 | 0x65, 0x6d, 0x72, 0x2e, 0x61, 0xa7, 0x25, 0x58, 0x97, 0x0c, 0x51, 0xff, | 2473 | 0xcf, 0xa3, 0xa7, 0x36, 0x4d, 0xfd, 0xad, 0xbf, 0xcf, 0xbf, 0xaf, 0xa0, |
| 2496 | 0xfe, 0x16, 0xee, 0xd4, 0xc3, 0xe8, 0x4f, 0xde, 0x0b, 0xdc, 0x58, 0x43, | 2474 | 0x3d, 0xcb, 0xf9, 0xdd, 0x08, 0xdf, 0xb5, 0xac, 0xce, 0x26, 0x8d, 0xcd, |
| 2497 | 0xfd, 0xf6, 0x61, 0x0f, 0xb3, 0x86, 0x68, 0xdf, 0x1a, 0xaa, 0x0d, 0x77, | 2475 | 0x60, 0x3a, 0x06, 0xd6, 0x14, 0x0d, 0xdc, 0x4a, 0x75, 0x61, 0xcc, 0xbf, |
| 2498 | 0x79, 0x7a, 0x4f, 0xb1, 0xae, 0x74, 0xce, 0xe5, 0x62, 0x84, 0xea, 0x7d, | 2476 | 0x07, 0x3d, 0x3f, 0xf7, 0x28, 0xb4, 0x6f, 0x19, 0xed, 0x1b, 0xf4, 0xd7, |
| 2499 | 0xa2, 0x82, 0x01, 0x36, 0x66, 0x8a, 0xfc, 0x3d, 0xb3, 0xb1, 0xcb, 0xb3, | 2477 | 0x0c, 0x2c, 0x2f, 0x9e, 0x9f, 0xe9, 0x54, 0x3a, 0x77, 0xe8, 0xdc, 0x1c, |
| 2500 | 0xf3, 0x4f, 0x36, 0xda, 0xa5, 0x5f, 0xc4, 0x2b, 0x3d, 0x75, 0x29, 0xb2, | 2478 | 0xcb, 0x76, 0x70, 0xc5, 0xce, 0x7c, 0xaf, 0x18, 0xc9, 0x47, 0x89, 0x96, |
| 2501 | 0x8d, 0xdd, 0x58, 0x9f, 0xec, 0xc1, 0x1c, 0x6b, 0x39, 0xbe, 0xaa, 0xbb, | 2479 | 0x42, 0x19, 0x40, 0xa2, 0x23, 0x73, 0x33, 0xe5, 0x5d, 0x2b, 0xa5, 0x2a, |
| 2502 | 0x88, 0x5a, 0x63, 0xb8, 0xdb, 0x93, 0xc1, 0xf2, 0xbc, 0xbf, 0x6d, 0x10, | 2480 | 0x4d, 0x58, 0x9b, 0x22, 0x3f, 0xd6, 0x97, 0xe2, 0x8e, 0x54, 0x0d, 0xf5, |
| 2503 | 0x4d, 0x13, 0xc8, 0xf9, 0xbc, 0xfb, 0x50, 0xe5, 0xdd, 0x42, 0x4e, 0x09, | 2481 | 0x34, 0xc3, 0xb8, 0x4d, 0xaf, 0x45, 0x7f, 0xea, 0x52, 0xe0, 0xc6, 0x3a, |
| 2504 | 0x62, 0xd3, 0x2e, 0xfe, 0x56, 0x71, 0x77, 0xa6, 0xf2, 0xce, 0x70, 0x78, | 2482 | 0xea, 0x41, 0x06, 0xfc, 0x9e, 0xbe, 0x86, 0xe8, 0xd5, 0x59, 0x4f, 0xe1, |
| 2505 | 0x2c, 0x88, 0xa1, 0x5d, 0xd4, 0xfb, 0x52, 0x21, 0xb8, 0x8d, 0x9f, 0x96, | 2483 | 0xf6, 0x73, 0xff, 0xae, 0x42, 0x34, 0x7e, 0xef, 0x3c, 0x77, 0x33, 0xdc, |
| 2506 | 0xdd, 0x4f, 0xb2, 0x2b, 0xf7, 0xef, 0xaf, 0x91, 0x5d, 0x67, 0x82, 0x41, | 2484 | 0xe6, 0x1e, 0xaa, 0x83, 0xdd, 0x58, 0x97, 0x0a, 0x53, 0x6f, 0xcd, 0xf9, |
| 2507 | 0x34, 0x13, 0x0c, 0x4b, 0x10, 0x4f, 0xc3, 0x54, 0x1d, 0x9a, 0xc7, 0xf8, | 2485 | 0x61, 0x3e, 0x22, 0xd6, 0x67, 0x72, 0xfd, 0xb9, 0x3e, 0x67, 0x46, 0xcc, |
| 2508 | 0xef, 0x23, 0x07, 0xc5, 0x7d, 0xa5, 0x0a, 0xcf, 0x46, 0xfe, 0x9b, 0x4a, | 2486 | 0x90, 0x5c, 0xa8, 0xf5, 0xc4, 0x73, 0x34, 0xbf, 0x65, 0x4a, 0x7c, 0x1f, |
| 2509 | 0x58, 0xc1, 0x7c, 0x8b, 0xd5, 0x55, 0x89, 0x47, 0xa3, 0x7b, 0x5c, 0x2d, | 2487 | 0xa5, 0x20, 0x66, 0xf1, 0xcc, 0x48, 0xc3, 0x1f, 0xcd, 0x59, 0xe9, 0xc7, |
| 2510 | 0xe6, 0x8f, 0xd5, 0xd1, 0x47, 0x47, 0x6c, 0x82, 0x26, 0xa6, 0x96, 0x8b, | 2488 | 0xeb, 0x71, 0xd5, 0xbe, 0x06, 0x64, 0xf6, 0xe9, 0xb0, 0x1f, 0xb7, 0x68, |
| 2511 | 0xaf, 0xe7, 0x93, 0x88, 0xd1, 0xfd, 0x32, 0xee, 0x54, 0xd6, 0xdf, 0x53, | 2489 | 0x2d, 0x45, 0x9f, 0x19, 0xb1, 0xb7, 0xf8, 0x87, 0x68, 0x77, 0x60, 0x8d, |
| 2512 | 0xfa, 0xbc, 0xf3, 0x07, 0xff, 0xbb, 0xb2, 0x6f, 0x01, 0x8e, 0xea, 0xbc, | 2490 | 0xfe, 0x3f, 0x95, 0x7d, 0x0b, 0x70, 0x54, 0xe7, 0x95, 0xe6, 0x77, 0xfb, |
| 2513 | 0xd2, 0xfc, 0x6e, 0x3f, 0xa4, 0xd6, 0x93, 0xab, 0x27, 0x2d, 0x1e, 0xa6, | 2491 | 0x21, 0xb5, 0x9e, 0x5c, 0x09, 0x09, 0x5a, 0x20, 0x9b, 0x6e, 0xf7, 0x6d, |
| 2514 | 0x9b, 0xbe, 0x2d, 0xb5, 0xad, 0x4e, 0xb8, 0x0d, 0xa2, 0x90, 0x3d, 0xbd, | 2492 | 0xa9, 0x8d, 0x3a, 0xe1, 0x36, 0x88, 0xb5, 0x9c, 0xed, 0x2d, 0x1a, 0x2c, |
| 2515 | 0xa5, 0x06, 0x0b, 0x5b, 0x04, 0x63, 0xcb, 0xb6, 0x32, 0x83, 0x67, 0x53, | 2493 | 0x8c, 0x08, 0x60, 0xcb, 0xb6, 0x3c, 0x83, 0x77, 0x32, 0x6b, 0xc5, 0x36, |
| 2516 | 0x63, 0x05, 0x03, 0xc6, 0xd8, 0x33, 0x91, 0x09, 0x35, 0x25, 0xef, 0xce, | 2494 | 0x18, 0x3f, 0x92, 0x91, 0x09, 0x5b, 0x25, 0x53, 0x53, 0xd1, 0x1d, 0x01, |
| 2517 | 0x44, 0x77, 0x25, 0x10, 0x02, 0xf5, 0x4b, 0x12, 0x04, 0x98, 0xaa, 0x2d, | 2495 | 0x42, 0x40, 0xbf, 0x24, 0xc1, 0x00, 0x33, 0x53, 0xe3, 0x46, 0x0f, 0x20, |
| 2518 | 0x37, 0x92, 0x40, 0xd8, 0x69, 0x49, 0x78, 0x92, 0xec, 0x90, 0x4c, 0xd5, | 2496 | 0xb8, 0x5b, 0xc2, 0x71, 0x66, 0x4a, 0xc9, 0xd4, 0x56, 0x34, 0x20, 0x0c, |
| 2519 | 0x58, 0x01, 0x61, 0x20, 0x04, 0xe3, 0xec, 0x4e, 0x6d, 0x91, 0x5d, 0xcf, | 2497 | 0x04, 0x63, 0x3c, 0x93, 0x99, 0x29, 0xb2, 0xeb, 0x2d, 0x13, 0x1c, 0xc0, |
| 2520 | 0x98, 0xc2, 0x06, 0x9c, 0x18, 0x3f, 0x33, 0x59, 0x8b, 0x78, 0xe2, 0xbb, | 2498 | 0x0f, 0xfc, 0x4c, 0xb2, 0x16, 0xf1, 0xc4, 0x77, 0xbf, 0x73, 0xbb, 0x1b, |
| 2521 | 0xdf, 0xb9, 0xdd, 0x0d, 0x82, 0x21, 0x99, 0x1a, 0x57, 0x75, 0x89, 0xee, | 2499 | 0x04, 0x45, 0x3c, 0x35, 0x54, 0x75, 0xb5, 0x6e, 0xdf, 0xff, 0xfe, 0x8f, |
| 2522 | 0x7b, 0xff, 0xff, 0x9e, 0xff, 0xfc, 0xe7, 0x7c, 0xe7, 0x3b, 0xe7, 0xfc, | 2500 | 0xf3, 0x9f, 0xf3, 0x9d, 0xef, 0x9c, 0xf3, 0xdf, 0xa2, 0x84, 0xfe, 0xfb, |
| 2523 | 0xb7, 0x4c, 0x2e, 0x2d, 0xfb, 0xb5, 0x08, 0xc5, 0xda, 0x94, 0xf9, 0x42, | 2501 | 0xdf, 0xcc, 0x75, 0x8c, 0x4f, 0xdc, 0x0b, 0x69, 0x66, 0xb3, 0x65, 0xbc, |
| 2524 | 0x96, 0xe3, 0x48, 0x1c, 0xed, 0xbe, 0xd9, 0x8f, 0x11, 0x99, 0x84, 0xcb, | 2502 | 0x0b, 0x5f, 0x0e, 0x24, 0x9c, 0xe8, 0xea, 0x77, 0xe0, 0xda, 0xa2, 0x73, |
| 2525 | 0x41, 0xad, 0x08, 0x4b, 0x9e, 0xc7, 0x1f, 0xad, 0x3c, 0x51, 0x64, 0x90, | 2503 | 0xa6, 0x67, 0xf6, 0x8d, 0xfc, 0x4e, 0xc4, 0xe6, 0xc4, 0x33, 0xfd, 0xf2, |
| 2526 | 0xb9, 0x0b, 0x91, 0x3f, 0x2c, 0x73, 0x17, 0x21, 0xef, 0xa6, 0x2c, 0xf2, | 2504 | 0xed, 0x40, 0x60, 0x71, 0x36, 0xe7, 0xba, 0x61, 0xd0, 0x89, 0xa7, 0xd9, |
| 2527 | 0x1c, 0xa6, 0x5c, 0x13, 0x12, 0x5b, 0xe5, 0x79, 0xc7, 0x95, 0xa1, 0xb4, | 2505 | 0xf6, 0xa2, 0x6e, 0xcb, 0xed, 0xb1, 0x55, 0x1b, 0xc0, 0x73, 0xfd, 0x8c, |
| 2528 | 0xc8, 0x90, 0x7b, 0xee, 0x59, 0x73, 0xa3, 0x5a, 0xc4, 0x18, 0x3e, 0x62, | 2506 | 0x6d, 0x34, 0x13, 0xcf, 0x86, 0x8a, 0x71, 0x7f, 0x75, 0x76, 0x1d, 0xc3, |
| 2529 | 0x6e, 0x62, 0x5e, 0xe2, 0x5f, 0xfa, 0x86, 0x99, 0x6a, 0x93, 0xb5, 0xba, | 2507 | 0x5c, 0x87, 0xe1, 0x30, 0x94, 0x4c, 0xa3, 0x13, 0xe5, 0x9c, 0x3f, 0xb9, |
| 2530 | 0xcd, 0xbd, 0x09, 0x27, 0xfa, 0xa9, 0xb7, 0xad, 0xa1, 0xa3, 0xc2, 0x67, | 2508 | 0x18, 0x7e, 0x98, 0x29, 0xc1, 0xe8, 0x81, 0x71, 0x25, 0x9d, 0xce, 0xb6, |
| 2531 | 0xb3, 0xff, 0xe5, 0xf4, 0xf6, 0x97, 0xd4, 0xdb, 0xa9, 0xec, 0x3e, 0x1e, | 2509 | 0x19, 0xb2, 0x62, 0x5a, 0x43, 0x19, 0x6b, 0xb4, 0x61, 0x26, 0xfd, 0xfb, |
| 2532 | 0x57, 0x4e, 0xde, 0x8c, 0xf5, 0x22, 0xa3, 0xc8, 0xa5, 0xa0, 0x42, 0x13, | 2510 | 0x85, 0x8c, 0x03, 0x9f, 0x65, 0x5c, 0xf8, 0x74, 0xa4, 0x18, 0xbf, 0x3e, |
| 2533 | 0xb9, 0x6c, 0x28, 0x67, 0xdc, 0xac, 0xa0, 0x7e, 0xca, 0x2d, 0x99, 0x9a, | 2511 | 0x50, 0xc2, 0x8f, 0x8a, 0x4f, 0x46, 0x34, 0xfe, 0xde, 0xac, 0xbc, 0x12, |
| 2534 | 0x95, 0x9f, 0x47, 0xa1, 0xce, 0x21, 0x17, 0x2c, 0x9b, 0xc8, 0xc8, 0x35, | 2512 | 0x95, 0xd8, 0x23, 0x80, 0x4f, 0x33, 0xe3, 0xca, 0xd1, 0xaf, 0x5c, 0x6b, |
| 2535 | 0x45, 0xfd, 0x5c, 0xb8, 0x69, 0x13, 0xb3, 0xf5, 0x2c, 0x74, 0x46, 0x7c, | 2513 | 0xc6, 0xfc, 0x8e, 0x6a, 0x70, 0xcc, 0xbf, 0x36, 0xbf, 0x3b, 0x4d, 0xae, |
| 2536 | 0xfa, 0xe2, 0x4b, 0x3b, 0x92, 0x32, 0xaf, 0x5d, 0xf2, 0x04, 0x2b, 0xdf, | 2514 | 0xd3, 0xc7, 0xaa, 0xd4, 0x4a, 0xf0, 0xd9, 0x01, 0x19, 0x47, 0xfa, 0x6f, |
| 2537 | 0xb3, 0xd1, 0x9e, 0x56, 0x45, 0x33, 0x3a, 0xb0, 0x59, 0x7b, 0x20, 0x3e, | 2515 | 0x56, 0x5e, 0x8d, 0x8a, 0x7c, 0x2b, 0xf1, 0xeb, 0x11, 0x91, 0xe3, 0x27, |
| 2538 | 0x20, 0xeb, 0xcf, 0xad, 0xbd, 0x59, 0x79, 0x3a, 0x2a, 0xe3, 0x35, 0x2c, | 2516 | 0xd4, 0x69, 0xe9, 0x7f, 0x5c, 0x39, 0x9e, 0x7b, 0xe6, 0xe7, 0xdc, 0x8b, |
| 2539 | 0xb2, 0xc6, 0x59, 0xfb, 0xce, 0x71, 0x6f, 0x73, 0x5c, 0x80, 0x63, 0x32, | 2517 | 0x8d, 0xa3, 0x0e, 0x90, 0x4c, 0xf0, 0x59, 0x17, 0x5e, 0x38, 0x68, 0x23, |
| 2540 | 0xb6, 0xe9, 0x49, 0x7d, 0x26, 0x7e, 0xcd, 0x7d, 0x3a, 0xae, 0x74, 0xf2, | 2518 | 0x27, 0x2e, 0xc6, 0xc6, 0xc1, 0x12, 0xbc, 0x30, 0xa8, 0xa2, 0xe3, 0x60, |
| 2541 | 0x99, 0xb0, 0xf6, 0xf6, 0xfd, 0xac, 0xaf, 0x1f, 0xa7, 0x6f, 0xf2, 0x37, | 2519 | 0xb3, 0x42, 0xbe, 0xaf, 0xce, 0x20, 0xef, 0xed, 0x18, 0x0d, 0xb0, 0xdd, |
| 2542 | 0xa7, 0x8d, 0xf6, 0x5e, 0x04, 0xc7, 0xb0, 0xcb, 0xaa, 0x49, 0xc8, 0xdc, | 2520 | 0xb8, 0x72, 0x2e, 0xdd, 0x30, 0x33, 0xdb, 0x4f, 0x36, 0xf7, 0x93, 0xe5, |
| 2543 | 0xcf, 0x45, 0xcb, 0x51, 0x70, 0x24, 0x37, 0x36, 0x13, 0xc3, 0x33, 0xbd, | 2521 | 0x31, 0x86, 0xc2, 0x38, 0x8d, 0x5c, 0x72, 0xdf, 0xe6, 0xd7, 0x18, 0x21, |
| 2544 | 0xac, 0x9c, 0x3f, 0x0a, 0x3e, 0x0a, 0x76, 0x1b, 0x4a, 0xe4, 0x66, 0x3f, | 2522 | 0x3e, 0x9c, 0xb6, 0x53, 0xc7, 0x24, 0x1e, 0x15, 0xbb, 0x4f, 0x6d, 0xbe, |
| 2545 | 0x4a, 0x6a, 0x38, 0xd2, 0xa7, 0xcb, 0xa7, 0x3c, 0x52, 0xef, 0x53, 0x88, | 2523 | 0x12, 0x95, 0xb9, 0x1a, 0xca, 0x91, 0x46, 0x9b, 0xc5, 0xb1, 0x5f, 0x67, |
| 2546 | 0x19, 0xcc, 0x07, 0xd5, 0x55, 0x1e, 0x07, 0x71, 0x6e, 0x13, 0xbe, 0x20, | 2524 | 0x5c, 0xb8, 0x82, 0xb6, 0xf2, 0x10, 0xe5, 0xb1, 0x9a, 0xf2, 0x68, 0xa6, |
| 2547 | 0xb7, 0x8d, 0x04, 0x9c, 0x96, 0x0f, 0x4b, 0xcd, 0x2f, 0x1f, 0x19, 0x0c, | 2525 | 0x3c, 0x5a, 0x39, 0xdf, 0x97, 0xa3, 0x82, 0x93, 0xde, 0x40, 0x44, 0xd1, |
| 2548 | 0x02, 0x86, 0xa3, 0x8c, 0xbb, 0x5c, 0x2b, 0x63, 0x3d, 0xba, 0xd3, 0x5f, | 2526 | 0xb0, 0x2a, 0x23, 0x7d, 0x58, 0xe3, 0xb8, 0x1c, 0xe1, 0xbf, 0xd9, 0xbc, |
| 2549 | 0x98, 0x53, 0x95, 0xcc, 0xd9, 0xb5, 0x9b, 0x35, 0x22, 0xfa, 0x9d, 0x69, | 2527 | 0x35, 0x7a, 0xab, 0x5c, 0xa0, 0x96, 0x87, 0xc5, 0xaf, 0x89, 0x6c, 0x02, |
| 2550 | 0x8e, 0xf0, 0x5a, 0x6f, 0x3a, 0xb7, 0x4f, 0xe4, 0x10, 0xe4, 0x68, 0xcf, | 2528 | 0xe4, 0x50, 0xe3, 0xca, 0xa8, 0x15, 0x23, 0xef, 0xdb, 0xec, 0x49, 0xe5, |
| 2551 | 0x68, 0xbf, 0x35, 0x37, 0xdc, 0x76, 0x6f, 0x0e, 0x9b, 0x73, 0x79, 0xa9, | 2529 | 0x6d, 0xa7, 0x44, 0xec, 0x53, 0xf2, 0xe1, 0xca, 0x3e, 0x72, 0xb5, 0x1a, |
| 2552 | 0x60, 0x73, 0x31, 0x7a, 0xf7, 0x7a, 0x93, 0x29, 0x54, 0x22, 0xa9, 0xd9, | 2530 | 0x2d, 0x7b, 0xff, 0xde, 0x94, 0x7c, 0xa7, 0x36, 0x2f, 0xb4, 0xf0, 0xe6, |
| 2553 | 0xe6, 0xd3, 0x4b, 0x98, 0xf5, 0x7b, 0xfb, 0x9a, 0x61, 0xe5, 0xeb, 0x9e, | 2531 | 0x6f, 0x36, 0x37, 0x5d, 0x5f, 0xd3, 0xb8, 0xf2, 0x36, 0xd7, 0x73, 0x81, |
| 2554 | 0x14, 0xfa, 0x2b, 0xc4, 0x8f, 0x9c, 0x5a, 0xbd, 0xa7, 0xcc, 0x56, 0x2e, | 2532 | 0x7a, 0x7a, 0x92, 0x73, 0x2d, 0x92, 0xbd, 0x4b, 0x73, 0xef, 0x38, 0xd7, |
| 2555 | 0xb2, 0x5b, 0x52, 0xd9, 0x07, 0x0b, 0xb0, 0x89, 0xb9, 0x76, 0xaa, 0x95, | 2533 | 0x4f, 0x87, 0x8b, 0xf1, 0x5e, 0xaa, 0x84, 0x1f, 0xca, 0x76, 0x98, 0x7b, |
| 2556 | 0x98, 0x35, 0x68, 0xb4, 0x70, 0x7a, 0x57, 0x61, 0x38, 0xd5, 0xf9, 0x35, | 2534 | 0x97, 0x6e, 0x56, 0x4e, 0x59, 0xf2, 0x0d, 0xe0, 0x5d, 0x8e, 0x7d, 0xec, |
| 2557 | 0xbf, 0x97, 0xf1, 0x10, 0xc8, 0x67, 0xde, 0x7f, 0x09, 0x59, 0x4c, 0x1b, | 2535 | 0x7a, 0x1f, 0x59, 0xde, 0x96, 0xad, 0xc3, 0xe5, 0xed, 0x57, 0xf0, 0x54, |
| 2558 | 0xf4, 0x1a, 0x36, 0x9b, 0x8c, 0xff, 0xcc, 0x34, 0xda, 0x64, 0xac, 0xcc, | 2536 | 0xd6, 0x66, 0x28, 0x91, 0xeb, 0xb5, 0x34, 0xc9, 0x8b, 0x49, 0x7d, 0x91, |
| 2559 | 0xc1, 0x67, 0xff, 0x1b, 0x5f, 0xf0, 0x50, 0x4f, 0x87, 0x2b, 0xa4, 0x7e, | 2537 | 0x3e, 0x46, 0x95, 0xfc, 0xa8, 0x42, 0x8c, 0xa1, 0xfe, 0xa9, 0xcb, 0x3c, |
| 2560 | 0xa6, 0xd6, 0x92, 0xab, 0x0f, 0x16, 0xa3, 0x88, 0xb9, 0x6b, 0x7f, 0x95, | 2538 | 0x0e, 0xe2, 0xe2, 0x3a, 0x7c, 0xc1, 0x38, 0x21, 0x42, 0x8b, 0x92, 0xb5, |
| 2561 | 0xaf, 0x43, 0xb7, 0x15, 0xe2, 0xfc, 0x57, 0xfe, 0x13, 0x52, 0x55, 0x79, | 2539 | 0x48, 0x8e, 0xb4, 0x50, 0x62, 0x42, 0xeb, 0xdf, 0x20, 0xb9, 0xd4, 0x6b, |
| 2562 | 0x70, 0xd5, 0x02, 0x0f, 0xc6, 0x6d, 0xb0, 0xd5, 0x12, 0x7b, 0x1b, 0x80, | 2540 | 0xe4, 0xb9, 0x54, 0x21, 0x74, 0xa7, 0xbf, 0x30, 0x27, 0xaa, 0xe8, 0x57, |
| 2563 | 0xe6, 0x09, 0xee, 0xdb, 0xa0, 0x82, 0xa7, 0x92, 0x36, 0x3c, 0x9a, 0xb4, | 2541 | 0xb5, 0xeb, 0x79, 0x37, 0xae, 0xd9, 0x34, 0x87, 0x78, 0xaf, 0x27, 0x8d, |
| 2564 | 0x63, 0x6d, 0x12, 0xdf, 0x59, 0x04, 0x4c, 0xd7, 0xc0, 0xdf, 0x3e, 0xa3, | 2542 | 0xdc, 0x3f, 0x72, 0x2f, 0xf2, 0xdd, 0x27, 0xb5, 0xdf, 0x99, 0x4f, 0xdc, |
| 2565 | 0x60, 0x6b, 0x29, 0xfc, 0xad, 0x31, 0xc5, 0xdf, 0xb2, 0x96, 0x39, 0xd3, | 2543 | 0xd4, 0x36, 0x8f, 0xe5, 0xf9, 0x78, 0x5f, 0xb0, 0xbc, 0x14, 0x3d, 0xbb, |
| 2566 | 0x9a, 0x09, 0xe2, 0x19, 0xef, 0x75, 0x0e, 0x70, 0x5f, 0x07, 0xec, 0xa8, | 2544 | 0xbd, 0xc9, 0x14, 0xaa, 0x90, 0xd4, 0x6c, 0x73, 0x0b, 0x38, 0x3b, 0x3b, |
| 2567 | 0x19, 0xc0, 0x3d, 0xf9, 0x40, 0x83, 0x13, 0xfe, 0x19, 0xc6, 0x99, 0x72, | 2545 | 0xbc, 0xbd, 0xcd, 0xb0, 0xf2, 0x20, 0x9e, 0x14, 0xfe, 0x61, 0xa6, 0xd8, |
| 2568 | 0x07, 0xfc, 0x53, 0x97, 0xed, 0xfe, 0xce, 0x1a, 0x3b, 0x37, 0xb7, 0x56, | 2546 | 0x8c, 0x53, 0x6b, 0xf0, 0x54, 0xd8, 0x2a, 0x65, 0xee, 0xd6, 0xac, 0xec, |
| 2569 | 0x64, 0x71, 0xe1, 0x31, 0xda, 0xf3, 0xa2, 0x41, 0xde, 0xcf, 0xfc, 0x5d, | 2547 | 0xfd, 0x45, 0x58, 0x17, 0x2c, 0x42, 0xaa, 0x95, 0x18, 0xd7, 0x6f, 0xb4, |
| 2570 | 0x65, 0x9e, 0xf3, 0xc9, 0x9f, 0x48, 0xfd, 0x52, 0xae, 0x49, 0xef, 0x52, | 2548 | 0xb0, 0x7b, 0xf2, 0xa7, 0xc0, 0x8b, 0xdf, 0xf4, 0x0b, 0x1f, 0x03, 0x0a, |
| 2571 | 0x41, 0xe9, 0xa0, 0x9d, 0x18, 0x76, 0xce, 0x3c, 0x5f, 0x25, 0xf8, 0x0d, | 2549 | 0x63, 0x1c, 0x13, 0x39, 0x0c, 0xec, 0xf7, 0x1a, 0x36, 0x9b, 0x3c, 0xff, |
| 2572 | 0x3c, 0x45, 0xd9, 0xdc, 0xfc, 0x4d, 0xad, 0x25, 0x37, 0x5d, 0xa1, 0x62, | 2550 | 0x99, 0x69, 0xb4, 0xc9, 0xb3, 0xd2, 0x47, 0xad, 0xc5, 0x1b, 0x6f, 0xd6, |
| 2573 | 0xfd, 0xb0, 0xdc, 0x0b, 0x6b, 0x1e, 0x27, 0x7d, 0x2a, 0x8f, 0x3e, 0x7e, | 2551 | 0x7b, 0x0f, 0xe5, 0xf4, 0xaf, 0x33, 0x25, 0xe7, 0xa8, 0xd6, 0x31, 0xee, |
| 2574 | 0xc4, 0xea, 0x77, 0xd9, 0xb8, 0x46, 0x3b, 0x8a, 0x06, 0x81, 0x35, 0x71, | 2552 | 0xe9, 0x97, 0x9a, 0x4d, 0x04, 0xbb, 0xaa, 0x7d, 0x1d, 0xba, 0xad, 0x18, |
| 2575 | 0x3c, 0x51, 0x0c, 0x7f, 0x44, 0x64, 0xac, 0x5b, 0xee, 0xe0, 0xd8, 0x62, | 2553 | 0x67, 0xbf, 0xf6, 0xdf, 0x88, 0xe9, 0x05, 0x70, 0xd5, 0x01, 0xf7, 0xc5, |
| 2576 | 0xb4, 0x4c, 0x64, 0xc6, 0x3d, 0x3c, 0xf1, 0xa3, 0x8a, 0x4c, 0x2d, 0xf7, | 2554 | 0x6d, 0xb0, 0xd5, 0x11, 0xab, 0xa9, 0xd3, 0xcd, 0xa3, 0x36, 0xcc, 0xeb, |
| 2577 | 0xf7, 0xf7, 0x5e, 0x7b, 0x1a, 0xfc, 0xd8, 0x94, 0xa4, 0xcd, 0xd9, 0x3c, | 2555 | 0x57, 0xf0, 0x58, 0xd2, 0x86, 0x07, 0x92, 0x76, 0xac, 0x4a, 0xe2, 0xfb, |
| 2578 | 0x18, 0xce, 0xd6, 0x54, 0x37, 0xa4, 0xbc, 0xb3, 0x7a, 0xa3, 0xff, 0xbd, | 2556 | 0xf3, 0x80, 0xc9, 0x1a, 0xf8, 0xdb, 0xa7, 0xe8, 0x9a, 0xcb, 0xe1, 0x6f, |
| 2579 | 0x38, 0xdb, 0x37, 0xa5, 0x2f, 0xcc, 0x70, 0x1e, 0x43, 0xd9, 0x40, 0xdd, | 2557 | 0x8d, 0x91, 0x17, 0xac, 0x62, 0x2c, 0xba, 0x72, 0x94, 0x38, 0xc8, 0xb6, |
| 2580 | 0x0d, 0x4f, 0x9a, 0x88, 0xea, 0x26, 0xc6, 0xf9, 0x79, 0x53, 0x87, 0x51, | 2558 | 0xce, 0x3e, 0xea, 0x66, 0x9f, 0x1d, 0x35, 0x7d, 0xb8, 0xb3, 0x10, 0xa0, |
| 2581 | 0x44, 0x5f, 0xd8, 0x18, 0xfb, 0xd2, 0x34, 0xb2, 0xfe, 0xfc, 0x4a, 0x22, | 2559 | 0x75, 0xfb, 0xa7, 0xe8, 0x97, 0x2a, 0x1d, 0xf0, 0xd3, 0xaf, 0xf8, 0x3b, |
| 2582 | 0xa0, 0x6c, 0x21, 0x57, 0x7e, 0x95, 0xf1, 0x74, 0x8c, 0x9f, 0x51, 0xe6, | 2560 | 0x6b, 0xec, 0x0c, 0xc4, 0xea, 0xfe, 0xd5, 0xe2, 0xb4, 0x0f, 0xd2, 0x5e, |
| 2583 | 0x70, 0x4e, 0xca, 0x6d, 0xa3, 0x5f, 0xef, 0x4c, 0x01, 0x23, 0xcc, 0xd1, | 2561 | 0xe6, 0xf5, 0xb3, 0x7d, 0x9d, 0x0d, 0x2a, 0xf5, 0xf9, 0x93, 0x3f, 0x96, |
| 2584 | 0x0f, 0x2e, 0x17, 0xfe, 0x5e, 0xc4, 0xe7, 0xd1, 0x6b, 0x78, 0x4f, 0x9a, | 2562 | 0x7c, 0xaf, 0xdc, 0x93, 0xba, 0xab, 0x82, 0xf2, 0x7e, 0x3b, 0xf1, 0xf0, |
| 2585 | 0x9f, 0x23, 0xfc, 0x4c, 0x72, 0x4f, 0xf9, 0x3c, 0x04, 0xc6, 0x1d, 0x88, | 2563 | 0x8c, 0x79, 0xb6, 0xda, 0xaa, 0x41, 0xe1, 0x31, 0xce, 0xcd, 0xcd, 0xdf, |
| 2586 | 0x8c, 0x13, 0x68, 0xc7, 0x03, 0x98, 0x62, 0x0c, 0xbc, 0x31, 0xaa, 0xa2, | 2564 | 0xd4, 0x3a, 0x17, 0x16, 0xdc, 0xa3, 0x62, 0xed, 0xa0, 0xb4, 0x85, 0xd5, |
| 2587 | 0x64, 0xac, 0x1c, 0x1f, 0x1d, 0x26, 0x3e, 0x1e, 0xca, 0x70, 0xfe, 0x4d, | 2565 | 0x8f, 0x93, 0xb8, 0x53, 0xa0, 0x4d, 0x98, 0x07, 0xab, 0xa4, 0xad, 0x8d, |
| 2588 | 0xe3, 0xd2, 0xdf, 0x92, 0xf5, 0x49, 0x1f, 0x58, 0xfc, 0xa9, 0x00, 0x63, | 2566 | 0x6b, 0xb4, 0xa3, 0xa4, 0x1f, 0x58, 0x19, 0xc7, 0xc3, 0xa5, 0xf0, 0x47, |
| 2589 | 0xa4, 0x1f, 0xd2, 0x0b, 0x7e, 0x57, 0xe7, 0xdc, 0xaa, 0xf4, 0xf1, 0x5a, | 2567 | 0x64, 0x8e, 0xf5, 0x8b, 0x1d, 0x7c, 0xb6, 0x14, 0x2d, 0xa3, 0xd9, 0xe7, |
| 2590 | 0x71, 0x34, 0xea, 0xf3, 0xf4, 0xd1, 0xe6, 0x0d, 0x87, 0xf8, 0x58, 0x03, | 2568 | 0x56, 0x8c, 0xbe, 0x37, 0x33, 0x9b, 0xfb, 0xfe, 0xc3, 0x75, 0xe3, 0x2d, |
| 2591 | 0x5e, 0x8d, 0xe6, 0x7a, 0x42, 0xbe, 0x96, 0x9f, 0x4a, 0x3d, 0x83, 0x21, | 2569 | 0x8d, 0x7e, 0xac, 0x4b, 0x52, 0xe7, 0x6c, 0x1e, 0x0c, 0xe6, 0x72, 0xd0, |
| 2592 | 0x3b, 0x4f, 0x93, 0x6b, 0xb9, 0x58, 0x2a, 0x6b, 0x96, 0xba, 0x74, 0x8e, | 2570 | 0x4f, 0xa4, 0xbc, 0xd3, 0xea, 0xba, 0x7f, 0x5b, 0x9a, 0xab, 0xf9, 0xd2, |
| 2593 | 0xb7, 0xcc, 0xfe, 0xfd, 0x8c, 0x29, 0x7d, 0xca, 0xd7, 0x26, 0xbd, 0x7d, | 2571 | 0x8e, 0xa7, 0xd8, 0x8f, 0x65, 0xc3, 0x18, 0x1c, 0x33, 0x11, 0xd5, 0x4d, |
| 2594 | 0x29, 0xe8, 0x56, 0xac, 0x3c, 0x5c, 0xe7, 0x4d, 0x1a, 0x90, 0xfd, 0x6d, | 2572 | 0x64, 0xf8, 0x79, 0x43, 0x87, 0x51, 0x42, 0x1b, 0x7f, 0x2a, 0x26, 0x98, |
| 2595 | 0xa0, 0x0c, 0xdf, 0xa5, 0xed, 0x07, 0x44, 0xd7, 0x8c, 0xed, 0x52, 0xef, | 2573 | 0x97, 0xd5, 0xa4, 0x1f, 0x24, 0x02, 0xca, 0x86, 0x18, 0x70, 0x84, 0xf1, |
| 2596 | 0x2d, 0x43, 0xff, 0x40, 0x39, 0xf6, 0x0c, 0x18, 0xe8, 0x5d, 0xde, 0x86, | 2574 | 0xe3, 0x21, 0x7e, 0x86, 0x13, 0x5c, 0x03, 0xe7, 0x6d, 0x23, 0x6e, 0x6c, |
| 2597 | 0x33, 0x51, 0x13, 0x9b, 0x42, 0x26, 0xd6, 0x84, 0xbc, 0x81, 0x57, 0x50, | 2575 | 0x4b, 0x01, 0x43, 0x09, 0x44, 0xf6, 0x2f, 0x96, 0x58, 0xa6, 0x84, 0xe3, |
| 2598 | 0xdf, 0x78, 0x14, 0x8f, 0x91, 0x43, 0xa8, 0xd4, 0xc9, 0x37, 0xf0, 0xce, | 2576 | 0x01, 0xe3, 0x6c, 0x93, 0xe6, 0xe7, 0x20, 0x3f, 0x63, 0xdc, 0x53, 0x8e, |
| 2599 | 0x5e, 0x07, 0x36, 0xeb, 0x7f, 0x4c, 0x1f, 0x36, 0xcd, 0xf7, 0x96, 0x2d, | 2577 | 0x87, 0x00, 0xf1, 0x30, 0x92, 0xd1, 0x60, 0x64, 0x02, 0x98, 0xa0, 0x6d, |
| 2600 | 0xc0, 0x70, 0xa2, 0x5e, 0xed, 0xa6, 0x7c, 0x91, 0x36, 0xee, 0x55, 0xd0, | 2578 | 0x5d, 0x1b, 0x56, 0x51, 0x76, 0xa8, 0x12, 0x1f, 0x8d, 0x64, 0x63, 0xa5, |
| 2601 | 0x81, 0x67, 0xf5, 0xef, 0xf0, 0x5e, 0xb7, 0xcd, 0xa1, 0xc9, 0x77, 0x1b, | 2579 | 0x75, 0x19, 0xa9, 0x5d, 0xcb, 0xda, 0xa4, 0x7e, 0x2d, 0xb6, 0x54, 0x84, |
| 2602 | 0xe3, 0xa9, 0xec, 0xa5, 0x41, 0xfb, 0xca, 0xc4, 0xb2, 0x48, 0xb6, 0xce, | 2580 | 0x43, 0xc9, 0x4a, 0xab, 0x86, 0xfd, 0x8e, 0xce, 0x7e, 0x55, 0xa9, 0xb1, |
| 2603 | 0xbe, 0xb9, 0x41, 0x30, 0xbf, 0x18, 0xa7, 0xa9, 0xb7, 0x13, 0xc9, 0x08, | 2581 | 0xb6, 0xe2, 0x70, 0xd4, 0xe7, 0xe9, 0xa5, 0xbe, 0x1b, 0x0e, 0xb1, 0xaf, |
| 2604 | 0xc3, 0x2e, 0x94, 0x67, 0x1b, 0xba, 0xf0, 0x34, 0xf9, 0xc6, 0x3b, 0x24, | 2582 | 0x46, 0x1c, 0x89, 0xe6, 0x6b, 0x67, 0xbe, 0x96, 0x9f, 0x49, 0x8e, 0xc8, |
| 2605 | 0x02, 0xf7, 0xc7, 0x15, 0x34, 0xd6, 0xe9, 0xb8, 0x98, 0xfe, 0x06, 0xde, | 2583 | 0x59, 0x49, 0xd9, 0xca, 0xbd, 0xbc, 0xdf, 0x95, 0xf5, 0x4a, 0x0e, 0x3f, |
| 2606 | 0x1a, 0x0d, 0xe3, 0x4d, 0xc6, 0xf4, 0x25, 0xdf, 0xf5, 0x92, 0x83, 0x7a, | 2584 | 0xcf, 0x71, 0xa6, 0xff, 0x7e, 0x8a, 0xe3, 0x05, 0x69, 0x07, 0xde, 0xde, |
| 2607 | 0x70, 0x3e, 0x1d, 0xc6, 0xb9, 0xa8, 0xb7, 0xf5, 0x05, 0x65, 0x01, 0x7e, | 2585 | 0x14, 0x74, 0xcb, 0x97, 0x8e, 0xd4, 0x7b, 0x93, 0x06, 0x64, 0x6f, 0x1b, |
| 2608 | 0x9a, 0x76, 0xe0, 0xde, 0x38, 0xf0, 0x4b, 0xce, 0xe3, 0x8f, 0x3b, 0x70, | 2586 | 0x39, 0x87, 0xd7, 0xa8, 0xf7, 0x01, 0xca, 0xf9, 0x2f, 0xe8, 0x23, 0x5c, |
| 2609 | 0x25, 0xad, 0xe2, 0x28, 0xf7, 0xc7, 0x11, 0x5a, 0x02, 0xa3, 0xcd, 0x83, | 2587 | 0x8c, 0x65, 0x2b, 0xb0, 0xab, 0xaf, 0x12, 0x3b, 0xfb, 0x0c, 0xf4, 0x2c, |
| 2610 | 0x23, 0x43, 0x8f, 0x62, 0x2a, 0xf5, 0x28, 0x4e, 0x25, 0xdf, 0x31, 0x5d, | 2588 | 0x6e, 0xc3, 0xa9, 0xa8, 0x89, 0x75, 0x21, 0x13, 0x2b, 0x19, 0x23, 0xfc, |
| 2611 | 0x9a, 0xf4, 0x75, 0x5c, 0xb8, 0xc2, 0x7c, 0x6c, 0x9a, 0xda, 0x28, 0x5e, | 2589 | 0x00, 0x0d, 0x4d, 0x87, 0xf1, 0x20, 0x63, 0x65, 0x95, 0xf2, 0xf8, 0x16, |
| 2612 | 0xd1, 0xca, 0x38, 0xaf, 0x19, 0xa2, 0xf7, 0xb7, 0xf8, 0xdb, 0xfd, 0xf1, | 2590 | 0xde, 0xde, 0xed, 0xc0, 0x7a, 0xfd, 0x8f, 0x68, 0xbf, 0xa6, 0xf9, 0xab, |
| 2613 | 0x46, 0x1c, 0x1c, 0xa7, 0x4a, 0x13, 0x3a, 0x12, 0x31, 0x79, 0x56, 0x03, | 2591 | 0x45, 0xb5, 0x18, 0x4c, 0x34, 0xa8, 0xdd, 0x9c, 0x5f, 0xa4, 0x8d, 0xfb, |
| 2614 | 0x62, 0xe4, 0x85, 0xfd, 0x4c, 0xdb, 0xb7, 0x86, 0xee, 0x95, 0x5c, 0x43, | 2592 | 0x14, 0x74, 0xe0, 0x69, 0xfd, 0xfb, 0x6c, 0xeb, 0xb6, 0x39, 0x34, 0xb9, |
| 2615 | 0x69, 0xa9, 0xed, 0xcf, 0xae, 0xa3, 0x71, 0x56, 0xcf, 0x4e, 0x72, 0x28, | 2593 | 0x96, 0xba, 0x96, 0xec, 0xa3, 0x41, 0xdd, 0xca, 0xfb, 0xac, 0x6c, 0xad, |
| 2616 | 0xea, 0x95, 0xe3, 0xfe, 0x36, 0x11, 0xb4, 0x62, 0xd3, 0xb1, 0x9b, 0xfb, | 2594 | 0x74, 0x7d, 0xa3, 0xe4, 0x44, 0x4a, 0x71, 0x92, 0x32, 0x3b, 0x96, 0x8c, |
| 2617 | 0xd1, 0xc8, 0xfd, 0xf8, 0x06, 0x2e, 0xee, 0x6d, 0xc3, 0x5b, 0xc4, 0xbb, | 2595 | 0xd0, 0x55, 0x43, 0x79, 0xba, 0xb1, 0x0b, 0x8f, 0x93, 0x9b, 0xbc, 0x4d, |
| 2618 | 0xd2, 0x65, 0xbe, 0x4e, 0xa7, 0xad, 0x9e, 0x73, 0xa7, 0xcd, 0x54, 0x95, | 2596 | 0xd2, 0x70, 0x6f, 0x5c, 0x41, 0x53, 0xbd, 0x8e, 0xf3, 0xe9, 0x6f, 0xe1, |
| 2619 | 0xe8, 0xb4, 0x0d, 0xbf, 0x88, 0x8a, 0x4e, 0xd3, 0xc4, 0x3f, 0x9f, 0xc7, | 2597 | 0xcd, 0xe1, 0x30, 0xde, 0x20, 0x07, 0x58, 0xf0, 0x97, 0xc2, 0xe9, 0x3d, |
| 2620 | 0x6f, 0xff, 0xcb, 0x4a, 0xda, 0xb3, 0xad, 0x3b, 0x98, 0xe9, 0x41, 0x15, | 2598 | 0x38, 0x9b, 0x0e, 0xe3, 0x4c, 0xd4, 0xdb, 0xfa, 0xbc, 0x52, 0x8b, 0x9f, |
| 2621 | 0xaf, 0x70, 0xe1, 0xaa, 0x25, 0x9b, 0xc8, 0xfa, 0x87, 0xe4, 0xfb, 0x85, | 2599 | 0x11, 0xd3, 0xee, 0x8e, 0x03, 0xef, 0xb1, 0x1f, 0x7f, 0xdc, 0x81, 0x4b, |
| 2622 | 0xb9, 0xa6, 0x4a, 0xe4, 0x33, 0xcc, 0x3c, 0x4d, 0x0b, 0xe4, 0x29, 0x12, | 2600 | 0x69, 0x15, 0x87, 0xb9, 0x37, 0x8e, 0xd0, 0x02, 0x18, 0x6d, 0x1e, 0x1c, |
| 2623 | 0x67, 0x03, 0x56, 0x3d, 0xbe, 0x2e, 0xde, 0x05, 0x7b, 0xa8, 0x98, 0x79, | 2601 | 0x1c, 0x78, 0x00, 0x13, 0xa9, 0x07, 0x70, 0x22, 0xf9, 0xb6, 0xe9, 0xd2, |
| 2624 | 0x98, 0x77, 0xa6, 0x03, 0x6f, 0xe1, 0xda, 0xa4, 0x0b, 0x8b, 0xe3, 0x1a, | 2602 | 0xa4, 0x06, 0xe6, 0xc2, 0x25, 0x62, 0xea, 0x24, 0xa5, 0x51, 0x7a, 0x4f, |
| 2625 | 0x5e, 0x9e, 0x7c, 0x8d, 0xcf, 0xfa, 0x47, 0x5c, 0xe6, 0x77, 0x5f, 0x3c, | 2603 | 0x2b, 0x71, 0x51, 0x33, 0x44, 0xee, 0x6f, 0xf2, 0xb7, 0x7b, 0xe3, 0x4d, |
| 2626 | 0xe3, 0x6f, 0xdd, 0x0d, 0x6d, 0x78, 0x30, 0x2d, 0xeb, 0xcb, 0xe3, 0x83, | 2604 | 0xd8, 0x9f, 0xa1, 0x48, 0x13, 0x3a, 0x12, 0x31, 0x19, 0xab, 0x11, 0x31, |
| 2627 | 0x74, 0x44, 0xd2, 0xb2, 0xce, 0x18, 0x7d, 0x43, 0xd6, 0x59, 0xfe, 0xef, | 2605 | 0x72, 0xc8, 0x5d, 0x7d, 0xe2, 0x37, 0xef, 0xc6, 0xca, 0x0a, 0x28, 0x2d, |
| 2628 | 0xac, 0xf3, 0xbf, 0x72, 0xbe, 0x05, 0xf4, 0xa5, 0x5c, 0xec, 0x28, 0xc1, | 2606 | 0x75, 0x63, 0xb9, 0x75, 0x34, 0x4d, 0xab, 0x6d, 0x4a, 0xbc, 0x49, 0xb9, |
| 2629 | 0x91, 0xa4, 0x8a, 0xd3, 0x7a, 0x31, 0x2e, 0xa9, 0x52, 0x5f, 0x76, 0x31, | 2607 | 0xf2, 0xb9, 0x1f, 0x26, 0x28, 0xf7, 0x04, 0x65, 0x7b, 0x7d, 0x3f, 0x9a, |
| 2630 | 0x86, 0x38, 0xd0, 0xcc, 0x9c, 0x71, 0x84, 0x9f, 0x8d, 0xcc, 0x7f, 0xce, | 2608 | 0xb8, 0x1f, 0xdf, 0xc2, 0xf9, 0xdd, 0x6d, 0x78, 0x93, 0x58, 0x57, 0xbe, |
| 2631 | 0xea, 0x0e, 0x9c, 0xd2, 0x17, 0x10, 0xeb, 0xef, 0xb4, 0x61, 0xb9, 0x46, | 2609 | 0xc8, 0xd7, 0xe9, 0xb4, 0x35, 0xb0, 0xef, 0xb4, 0x99, 0xaa, 0x16, 0x99, |
| 2632 | 0xb2, 0x5f, 0x56, 0x8e, 0x73, 0x52, 0xff, 0xb3, 0xae, 0xbb, 0xa4, 0x2f, | 2610 | 0xb6, 0xe1, 0x17, 0x51, 0x91, 0x69, 0x9a, 0xd8, 0xe7, 0xf3, 0xf8, 0xed, |
| 2633 | 0x89, 0x31, 0xea, 0x2b, 0x2f, 0xf6, 0x1b, 0xf3, 0xaa, 0x85, 0x35, 0x77, | 2611 | 0x23, 0x55, 0xd4, 0x65, 0x5b, 0x77, 0x30, 0x5b, 0xaf, 0x2b, 0xbd, 0xc7, |
| 2634 | 0xca, 0x77, 0xe7, 0x3c, 0x12, 0x82, 0x7f, 0x69, 0x6e, 0xad, 0xca, 0xc6, | 2612 | 0x85, 0xcb, 0xd6, 0xdc, 0x64, 0xae, 0x5f, 0x35, 0xbf, 0x5f, 0x98, 0x2b, |
| 2635 | 0x2e, 0xe5, 0x4f, 0x2b, 0x33, 0x78, 0x21, 0x71, 0xec, 0xef, 0x72, 0xd8, | 2613 | 0xab, 0x65, 0x7e, 0x86, 0xc9, 0x98, 0x3a, 0xc0, 0x78, 0x91, 0xb6, 0x13, |
| 2636 | 0x21, 0xf9, 0x64, 0x1b, 0xe3, 0x10, 0xe3, 0xf2, 0xf1, 0x6d, 0x92, 0xe7, | 2614 | 0x80, 0xe4, 0x9c, 0xeb, 0xe3, 0x5d, 0xb0, 0x87, 0x4a, 0x0d, 0x35, 0xec, |
| 2637 | 0xd9, 0xc2, 0xef, 0xb5, 0xad, 0xd2, 0xf2, 0x60, 0xb7, 0xf8, 0xde, 0x7b, | 2615 | 0x9d, 0xea, 0xc0, 0x9b, 0xb8, 0x42, 0x8e, 0x72, 0x57, 0x5c, 0x63, 0x7c, |
| 2638 | 0x2f, 0x65, 0x38, 0xfa, 0xfb, 0x2f, 0x69, 0xd6, 0xdf, 0xeb, 0x2f, 0x2d, | 2616 | 0x7b, 0x81, 0x63, 0xfd, 0x0b, 0x2e, 0xf2, 0xda, 0x17, 0xcf, 0xda, 0x5a, |
| 2639 | 0xb6, 0xfe, 0x7e, 0xf2, 0x92, 0x2f, 0x75, 0x2b, 0x5e, 0x65, 0x38, 0xb0, | 2617 | 0x77, 0x63, 0x1b, 0xee, 0x4b, 0xcb, 0xfa, 0xfe, 0x0b, 0x07, 0xd2, 0x11, |
| 2640 | 0x75, 0x6e, 0x05, 0x7d, 0xba, 0xa1, 0x3c, 0xdc, 0x20, 0x5c, 0x72, 0x36, | 2618 | 0x49, 0xcb, 0x3a, 0x63, 0xb4, 0x0b, 0x59, 0x67, 0xe5, 0x7f, 0xb0, 0xce, |
| 2641 | 0x8f, 0x08, 0x28, 0x67, 0xa3, 0x92, 0xa7, 0x15, 0x1a, 0xcc, 0xe3, 0x95, | 2619 | 0x23, 0xec, 0xaf, 0x96, 0x76, 0x94, 0xf7, 0x1b, 0x65, 0x38, 0x98, 0x54, |
| 2642 | 0x46, 0xbf, 0x46, 0x3c, 0xee, 0x42, 0xc9, 0x32, 0x0d, 0x17, 0xa8, 0x73, | 2620 | 0x71, 0x52, 0x2f, 0xc5, 0x05, 0x55, 0xf2, 0xf5, 0xd9, 0x5a, 0x66, 0x33, |
| 2643 | 0xc2, 0x28, 0xed, 0xf8, 0xff, 0x20, 0xba, 0x17, 0xed, 0x85, 0x16, 0xf6, | 2621 | 0xe3, 0xd3, 0x21, 0x7e, 0x9e, 0x62, 0x0c, 0x75, 0x5a, 0x77, 0xe0, 0x84, |
| 2644 | 0x98, 0x66, 0x7f, 0x48, 0x6a, 0x0c, 0x32, 0xaf, 0x03, 0x1f, 0x70, 0x2f, | 2622 | 0x5e, 0x4b, 0x9c, 0xbf, 0x55, 0x87, 0xe5, 0x1e, 0x03, 0x83, 0x8a, 0x4a, |
| 2645 | 0x7f, 0x35, 0x5a, 0x84, 0xf7, 0x53, 0x1a, 0x2e, 0xa5, 0xdb, 0xb0, 0x7b, | 2623 | 0x9c, 0x91, 0x9c, 0xaa, 0x75, 0x5f, 0xce, 0x16, 0xb8, 0x20, 0x39, 0x8d, |
| 2646 | 0x32, 0xc3, 0x33, 0x4e, 0x59, 0xfc, 0x5b, 0x63, 0x8e, 0xe9, 0xc0, 0xc1, | 2624 | 0x82, 0xd8, 0x6f, 0xcd, 0xcb, 0x16, 0xce, 0xdc, 0x3a, 0xbf, 0x5b, 0xfb, |
| 2647 | 0xa8, 0x86, 0x58, 0xe2, 0x75, 0xb3, 0x40, 0xf3, 0x4d, 0xf9, 0xed, 0x0e, | 2625 | 0x21, 0x55, 0xd0, 0xde, 0x33, 0x9f, 0xad, 0xce, 0xf9, 0x2d, 0x65, 0x47, |
| 2648 | 0x1c, 0x48, 0x4f, 0x63, 0x72, 0xe0, 0x63, 0xd3, 0xae, 0x75, 0xe1, 0xa3, | 2626 | 0x55, 0x16, 0x2b, 0xc4, 0x87, 0x8d, 0xe7, 0x71, 0x83, 0x7c, 0x7c, 0xdf, |
| 2649 | 0xd0, 0x34, 0x26, 0x0e, 0x49, 0x5f, 0x4f, 0x47, 0xff, 0x90, 0x86, 0xde, | 2627 | 0xa3, 0xf4, 0x41, 0xf4, 0xcf, 0xcd, 0xdf, 0xdb, 0xaa, 0x49, 0x9c, 0x97, |
| 2650 | 0x84, 0x0d, 0x7b, 0x96, 0xb7, 0xa0, 0x7f, 0xb2, 0x19, 0xc6, 0x98, 0x07, | 2628 | 0x7a, 0x74, 0x99, 0x56, 0x00, 0xbb, 0xe5, 0x67, 0x0f, 0x6f, 0xce, 0xf2, |
| 2651 | 0x7b, 0xd2, 0x69, 0x4c, 0x8d, 0x4e, 0xe3, 0x4c, 0x52, 0x6b, 0x2c, 0x50, | 2629 | 0xf9, 0xf4, 0xe6, 0x6c, 0x8c, 0x7a, 0x74, 0xf3, 0x5d, 0xd6, 0xf7, 0x8f, |
| 2652 | 0xa6, 0x71, 0x9a, 0xcf, 0xd9, 0x91, 0x78, 0x1b, 0x06, 0xe7, 0xd8, 0x99, | 2630 | 0x36, 0xfb, 0x52, 0x37, 0x7c, 0x55, 0x96, 0x2f, 0x5b, 0x67, 0x6d, 0xd0, |
| 2653 | 0x94, 0x9a, 0xa4, 0x3c, 0x67, 0x1a, 0xdd, 0xa9, 0xbb, 0xd5, 0x44, 0x28, | 2631 | 0xab, 0x1b, 0xca, 0x8a, 0x46, 0xf1, 0xd7, 0x79, 0x8e, 0x22, 0x6d, 0x02, |
| 2654 | 0x4f, 0xa2, 0xa7, 0x3d, 0x53, 0xab, 0x27, 0xbe, 0xa6, 0x35, 0xa5, 0x8f, | 2632 | 0xca, 0x89, 0xa8, 0x61, 0xba, 0xb5, 0x62, 0xfa, 0x7a, 0x28, 0x63, 0x8c, |
| 2655 | 0xfb, 0x74, 0x34, 0x9d, 0xab, 0xdb, 0xdf, 0x59, 0x0b, 0xd1, 0xd1, 0x37, | 2633 | 0xc5, 0xa6, 0xac, 0xba, 0xa7, 0x86, 0x37, 0xd2, 0x12, 0x13, 0x83, 0xfa, |
| 2656 | 0xd4, 0xc2, 0x31, 0x1a, 0xba, 0x13, 0xd2, 0x1b, 0xf5, 0xf1, 0x99, 0x26, | 2634 | 0xfb, 0xbf, 0xb1, 0x6b, 0x37, 0xda, 0x8b, 0x16, 0x93, 0xb3, 0xd3, 0xcf, |
| 2657 | 0x7e, 0xa9, 0x7b, 0xdd, 0x8b, 0xf9, 0xf7, 0xb0, 0xde, 0x89, 0x2d, 0x9c, | 2635 | 0x3d, 0x1b, 0x72, 0xe0, 0xfd, 0x74, 0x76, 0x3d, 0xef, 0x0d, 0x97, 0xe0, |
| 2658 | 0x6b, 0x8a, 0x79, 0x90, 0xa6, 0x78, 0x1b, 0x0d, 0xd8, 0xf1, 0x9e, 0x4e, | 2636 | 0xdd, 0x94, 0xf8, 0x6b, 0xa8, 0x85, 0xec, 0xf7, 0x64, 0x5a, 0x63, 0x6c, |
| 2659 | 0xce, 0x53, 0x69, 0xc7, 0xab, 0x7a, 0x09, 0x22, 0x65, 0x76, 0xd4, 0x87, | 2637 | 0x2a, 0xe3, 0xb6, 0x61, 0xdb, 0x98, 0x03, 0xfb, 0xa3, 0x1a, 0x62, 0x89, |
| 2660 | 0x18, 0xa7, 0xb3, 0x71, 0xfb, 0xc3, 0xa4, 0x82, 0x47, 0x89, 0xa9, 0x27, | 2638 | 0x9f, 0x9a, 0x45, 0x9a, 0x6f, 0xc2, 0x6f, 0x77, 0x60, 0x5f, 0x7a, 0x12, |
| 2661 | 0x42, 0xf5, 0xed, 0xab, 0x85, 0xd1, 0x1d, 0x52, 0x70, 0x4d, 0xbb, 0x61, | 2639 | 0x63, 0x7d, 0x1f, 0x9b, 0x76, 0xad, 0x0b, 0x1f, 0x85, 0x26, 0xc9, 0xeb, |
| 2662 | 0x1a, 0x8c, 0x5d, 0x2e, 0x7f, 0x6e, 0x8f, 0x7e, 0x6d, 0x66, 0xfa, 0x9b, | 2640 | 0xa4, 0xfe, 0xa9, 0x63, 0xd7, 0x80, 0xc6, 0x58, 0xda, 0x86, 0x9d, 0x8b, |
| 2663 | 0x5f, 0x98, 0xb9, 0x71, 0x33, 0x94, 0xf1, 0x29, 0x8e, 0x5b, 0xbc, 0xac, | 2641 | 0x5b, 0xb0, 0x6b, 0xac, 0x19, 0xc6, 0x21, 0x0f, 0x76, 0x92, 0xf0, 0x4d, |
| 2664 | 0xbe, 0x53, 0xc6, 0xb9, 0x89, 0xe9, 0x32, 0x4e, 0xea, 0xd1, 0xb7, 0xc6, | 2642 | 0x0c, 0x4f, 0xe2, 0x54, 0x52, 0x6b, 0x2a, 0x52, 0x26, 0x71, 0x92, 0xe3, |
| 2665 | 0xe9, 0xd8, 0x39, 0x14, 0xb1, 0xe4, 0xdd, 0x95, 0xc0, 0x52, 0x07, 0xc4, | 2643 | 0x6c, 0x4d, 0xbc, 0x05, 0x83, 0x7d, 0x6c, 0x4b, 0x4a, 0x8e, 0x57, 0xc6, |
| 2666 | 0x9f, 0xea, 0xd5, 0x2b, 0x40, 0xd7, 0xb4, 0x3e, 0x87, 0x5c, 0xc7, 0x1f, | 2644 | 0x99, 0x44, 0x77, 0xea, 0x76, 0x35, 0x8f, 0x36, 0xec, 0x48, 0x6c, 0x69, |
| 2667 | 0xd8, 0x08, 0xd1, 0x95, 0xe4, 0x92, 0x6f, 0x63, 0x4f, 0x74, 0x14, 0xcc, | 2645 | 0xcf, 0xd6, 0x3d, 0x88, 0xab, 0x69, 0x4d, 0xe9, 0xe5, 0x1e, 0x1d, 0x4e, |
| 2668 | 0x27, 0x89, 0x73, 0xfe, 0xf5, 0x23, 0x48, 0xe1, 0xf9, 0x74, 0x0a, 0x2f, | 2646 | 0xe7, 0x6b, 0x20, 0x82, 0xa1, 0x59, 0x3c, 0xdc, 0x96, 0xd6, 0xd1, 0x3b, |
| 2669 | 0x50, 0x47, 0x86, 0x75, 0x6e, 0x29, 0x8d, 0x3f, 0x8f, 0xbe, 0x8d, 0x98, | 2647 | 0xd0, 0xc2, 0xf6, 0x1a, 0xba, 0x13, 0x52, 0x3f, 0xf6, 0x71, 0x3c, 0x13, |
| 2670 | 0xb5, 0x67, 0x47, 0xb1, 0x21, 0xfa, 0xf7, 0x55, 0xc2, 0x11, 0x77, 0x24, | 2648 | 0xef, 0xe9, 0x5e, 0xf7, 0x5d, 0xfc, 0x1e, 0xd1, 0x3b, 0xb1, 0x81, 0xfd, |
| 2671 | 0x56, 0x72, 0x7e, 0xd1, 0xab, 0xb7, 0xd5, 0xc0, 0x97, 0x9c, 0x7f, 0x25, | 2649 | 0x08, 0xe7, 0xd2, 0x14, 0x6f, 0x93, 0x01, 0x3b, 0x7e, 0xa5, 0xdb, 0x61, |
| 2672 | 0x7a, 0x46, 0x4c, 0xf3, 0x7b, 0x8c, 0x5f, 0x3f, 0x23, 0xbf, 0xba, 0x96, | 2650 | 0x54, 0xd9, 0x71, 0x44, 0x2f, 0x23, 0x3f, 0xb7, 0xa3, 0x21, 0x44, 0xdf, |
| 2673 | 0x3d, 0x03, 0x55, 0x40, 0x7d, 0x6b, 0x56, 0x1c, 0x6b, 0xe3, 0x3e, 0x57, | 2651 | 0x9c, 0xf3, 0xd5, 0x1f, 0x26, 0x15, 0x3c, 0x40, 0x2c, 0x3d, 0x16, 0x6a, |
| 2674 | 0x0b, 0xaf, 0x47, 0xc9, 0xb8, 0xa6, 0x2c, 0x8e, 0xc9, 0xbe, 0x93, 0x37, | 2652 | 0x68, 0x5f, 0x2e, 0x6c, 0xf7, 0x80, 0x82, 0x2b, 0xda, 0x35, 0xd3, 0xa0, |
| 2675 | 0x8e, 0x7b, 0xf0, 0x14, 0x39, 0x4a, 0xfe, 0xe1, 0x1f, 0x28, 0x12, 0xcb, | 2653 | 0xbf, 0x72, 0xf9, 0xf3, 0x7b, 0xf3, 0x6b, 0x33, 0x5b, 0x03, 0xfe, 0xc2, |
| 2676 | 0x6a, 0x0e, 0x91, 0xef, 0x1f, 0xf2, 0x28, 0x4b, 0xf6, 0xb9, 0xf0, 0x68, | 2654 | 0xcc, 0x3f, 0x37, 0xc5, 0xf9, 0x3d, 0xc6, 0xe7, 0xee, 0x5a, 0xd4, 0xd0, |
| 2677 | 0x4c, 0xea, 0x37, 0xcd, 0xe8, 0xd9, 0xaf, 0xf1, 0x1e, 0xaf, 0x7e, 0x81, | 2655 | 0x29, 0xcf, 0xb9, 0x89, 0xe3, 0xf2, 0x9c, 0xe4, 0xf6, 0x6f, 0x3c, 0xa7, |
| 2678 | 0x39, 0xe9, 0x69, 0xf8, 0x3c, 0x23, 0xe4, 0x55, 0x6e, 0x62, 0xb1, 0xe3, | 2656 | 0x63, 0xdb, 0x40, 0xc4, 0x9a, 0xef, 0xf6, 0x04, 0x16, 0x3a, 0x20, 0x76, |
| 2679 | 0x70, 0x29, 0x8a, 0x0e, 0xab, 0xb0, 0x1d, 0x2e, 0x47, 0xf1, 0x61, 0x37, | 2657 | 0xd4, 0xa0, 0x5e, 0x02, 0xba, 0x26, 0xf5, 0x19, 0xe4, 0x37, 0xfe, 0xc0, |
| 2680 | 0x6a, 0x18, 0xdb, 0xdc, 0xe3, 0x17, 0x31, 0xb9, 0x0f, 0x6a, 0x51, 0xf8, | 2658 | 0x53, 0x10, 0x39, 0x49, 0xbc, 0xf9, 0x16, 0x76, 0x46, 0x87, 0xc1, 0x98, |
| 2681 | 0x73, 0x33, 0x5f, 0x93, 0x3e, 0x5b, 0x00, 0xa5, 0xe3, 0xdb, 0x91, 0x8e, | 2659 | 0x93, 0xf8, 0xe6, 0x5f, 0x3b, 0x84, 0x14, 0x9e, 0x4b, 0xa7, 0xf0, 0xbc, |
| 2682 | 0x05, 0x51, 0x3c, 0x4e, 0x2a, 0x35, 0x7e, 0x5c, 0xa9, 0xe7, 0x33, 0x1f, | 2660 | 0x70, 0x6c, 0x2b, 0xc7, 0x96, 0xc6, 0x77, 0xa2, 0x6f, 0x21, 0x66, 0xc5, |
| 2683 | 0x8a, 0x69, 0x9c, 0x2b, 0xc3, 0x75, 0x56, 0x73, 0x5c, 0x5f, 0xc2, 0xbb, | 2661 | 0x55, 0x87, 0xf1, 0x44, 0xf4, 0xdd, 0x6a, 0xc9, 0x65, 0x6e, 0x4d, 0x2c, |
| 2684 | 0x5e, 0x7a, 0x65, 0xd7, 0xf4, 0x37, 0x50, 0x30, 0x70, 0xeb, 0x2c, 0x97, | 2662 | 0x65, 0xff, 0x22, 0x53, 0x6f, 0xab, 0x81, 0x2f, 0xd9, 0xff, 0x52, 0x6c, |
| 2685 | 0x16, 0xc2, 0x3c, 0x72, 0x91, 0xd6, 0x67, 0x91, 0x39, 0xd7, 0xf5, 0x70, | 2663 | 0x19, 0x92, 0x9c, 0x90, 0x89, 0xd7, 0xc9, 0xa9, 0xae, 0x50, 0x8f, 0x5a, |
| 2686 | 0x76, 0x4d, 0x41, 0x59, 0x93, 0xb3, 0x8d, 0xb6, 0x30, 0x57, 0xea, 0x5f, | 2664 | 0x1a, 0xa5, 0xff, 0x71, 0x45, 0xb3, 0x7c, 0x57, 0x1b, 0xf7, 0x78, 0x16, |
| 2687 | 0xb8, 0x4c, 0xfb, 0xb9, 0x9f, 0xf2, 0xde, 0x60, 0x6e, 0xd8, 0x19, 0x13, | 2665 | 0xdc, 0x94, 0x73, 0x59, 0x46, 0x53, 0xee, 0x8a, 0xc9, 0x9e, 0x3b, 0x60, |
| 2688 | 0xbb, 0xff, 0x81, 0x42, 0xbf, 0xc1, 0x4c, 0xaa, 0x08, 0x1f, 0xa7, 0x3c, | 2666 | 0xcb, 0x78, 0xf0, 0x18, 0x79, 0x49, 0xe1, 0xc8, 0x8f, 0x14, 0xf1, 0x5f, |
| 2689 | 0x8a, 0x8f, 0xeb, 0xf9, 0x0b, 0x5e, 0xff, 0x73, 0xae, 0x67, 0xc7, 0x7e, | 2667 | 0x35, 0xe4, 0xa2, 0xee, 0x03, 0x1e, 0x65, 0xc1, 0x1e, 0x17, 0x1e, 0x88, |
| 2690 | 0x6f, 0xeb, 0x49, 0xc5, 0xdb, 0xbe, 0x4e, 0xf1, 0xa9, 0x3b, 0x94, 0x62, | 2668 | 0x91, 0xa3, 0xc6, 0x9a, 0xb1, 0x65, 0xaf, 0xc6, 0x36, 0x5e, 0xfd, 0x1c, |
| 2691 | 0x5c, 0x1e, 0x2d, 0xc5, 0x15, 0xc6, 0xe2, 0x1b, 0xa3, 0xe5, 0xb8, 0x3a, | 2669 | 0xe3, 0xd6, 0x93, 0xf0, 0x79, 0x86, 0xc8, 0xa5, 0xdc, 0xc4, 0x60, 0xc7, |
| 2692 | 0x5a, 0x49, 0x5f, 0xd1, 0x38, 0x87, 0x69, 0x96, 0x68, 0x6e, 0xcc, 0xa4, | 2670 | 0x48, 0x39, 0x4a, 0xc8, 0xb3, 0xa5, 0xdc, 0x5c, 0x3a, 0xe2, 0x46, 0x0d, |
| 2693 | 0x5f, 0xc0, 0x9c, 0xd8, 0x02, 0x7c, 0x9c, 0xde, 0x82, 0xd2, 0x98, 0x70, | 2671 | 0xfd, 0x99, 0x3b, 0x73, 0x1e, 0x63, 0x7b, 0xa0, 0x96, 0x84, 0x3f, 0x37, |
| 2694 | 0x76, 0x0f, 0x3e, 0xe2, 0xf5, 0x0f, 0xd3, 0x13, 0x28, 0xdc, 0xf7, 0x39, | 2672 | 0x0b, 0x35, 0xa9, 0x57, 0x06, 0x50, 0x9e, 0xd9, 0x84, 0x74, 0x2c, 0x88, |
| 2695 | 0xef, 0x31, 0xcd, 0x87, 0xb8, 0xc6, 0xab, 0xe9, 0x0e, 0x14, 0xef, 0xdb, | 2673 | 0x52, 0xf2, 0xfb, 0x06, 0x8e, 0x77, 0x7f, 0x4c, 0x63, 0x3f, 0x59, 0x6e, |
| 2696 | 0x06, 0xc7, 0x3e, 0xb3, 0xab, 0x27, 0x84, 0x9f, 0xda, 0xb9, 0x96, 0x6e, | 2674 | 0xb3, 0x9c, 0xcf, 0xf4, 0x26, 0xbc, 0x6b, 0xa5, 0xde, 0x78, 0x45, 0x7f, |
| 2697 | 0xdd, 0x3b, 0xb5, 0xd8, 0x1e, 0xe4, 0x1c, 0x3a, 0xe7, 0x3c, 0xae, 0x2c, | 2675 | 0x0d, 0x45, 0x7d, 0x37, 0xce, 0x9c, 0x69, 0x21, 0xcc, 0x21, 0xf7, 0x68, |
| 2698 | 0x19, 0xdf, 0x86, 0xd2, 0x7d, 0x1e, 0x6c, 0xa5, 0x2e, 0x27, 0xa0, 0x05, | 2676 | 0x7d, 0x1a, 0xd9, 0xf3, 0x67, 0x2b, 0x72, 0xeb, 0x09, 0xca, 0x7a, 0x9c, |
| 2699 | 0xd6, 0x29, 0xdb, 0x90, 0x77, 0x38, 0xa3, 0x83, 0x4d, 0xe3, 0x19, 0x1f, | 2677 | 0x6d, 0xd4, 0x83, 0xd9, 0x98, 0xc1, 0xf5, 0x5c, 0xa4, 0xde, 0xdc, 0xcb, |
| 2700 | 0x79, 0xa8, 0x41, 0xea, 0x43, 0xc7, 0x95, 0x11, 0xcb, 0x47, 0xdc, 0x72, | 2678 | 0xb9, 0x5e, 0x63, 0xec, 0xd0, 0xc9, 0xb5, 0xbc, 0x3f, 0xfc, 0x23, 0xa5, |
| 2701 | 0xfe, 0x04, 0xd3, 0xe9, 0x22, 0x9c, 0x4d, 0x89, 0x8e, 0xe4, 0xec, 0xda, | 2679 | 0x86, 0x6b, 0x99, 0x22, 0x57, 0xfd, 0x38, 0xe5, 0x51, 0x7c, 0x5c, 0xcb, |
| 2702 | 0x04, 0xf2, 0xf7, 0x11, 0x23, 0x47, 0x75, 0x8b, 0x43, 0x88, 0x6f, 0x8c, | 2680 | 0x77, 0x79, 0xff, 0x3b, 0x5c, 0xcb, 0xd6, 0xbd, 0xde, 0xd6, 0xe3, 0x8a, |
| 2703 | 0xa6, 0xef, 0xe6, 0x5f, 0x41, 0xec, 0x49, 0xd4, 0xd0, 0xb7, 0x16, 0x60, | 2681 | 0xb7, 0x7d, 0x8d, 0xe2, 0x53, 0xb7, 0x2a, 0xa5, 0xb8, 0x38, 0x5c, 0x8e, |
| 2704 | 0xcd, 0x3e, 0xe9, 0x91, 0x4e, 0xdd, 0xef, 0xa2, 0x35, 0x8d, 0xa5, 0xef, | 2682 | 0x4b, 0xf4, 0xbd, 0xd7, 0x86, 0x2b, 0x71, 0x79, 0xb8, 0x8a, 0x36, 0xa2, |
| 2705 | 0xe6, 0x5b, 0x0d, 0xb4, 0x53, 0x6f, 0x8b, 0x01, 0x39, 0xab, 0x61, 0x62, | 2683 | 0xb1, 0x0f, 0xd3, 0x2c, 0xd3, 0xdc, 0x98, 0x4a, 0x3f, 0x8f, 0x19, 0xb1, |
| 2706 | 0x5a, 0x3f, 0xae, 0xd8, 0x62, 0x92, 0x6f, 0xb5, 0xd1, 0xe7, 0x5b, 0xd1, | 2684 | 0x5a, 0x7c, 0x9c, 0xde, 0x80, 0xf2, 0x98, 0xc4, 0x00, 0x1e, 0x7c, 0xc4, |
| 2707 | 0x33, 0x84, 0xf6, 0x83, 0x0d, 0xd2, 0xb7, 0x75, 0x62, 0x84, 0xf9, 0xd3, | 2685 | 0xfb, 0x1f, 0xa6, 0x47, 0x51, 0xbc, 0xe7, 0x73, 0xb6, 0x31, 0xcd, 0xfb, |
| 2708 | 0x65, 0xe6, 0x1c, 0xd4, 0xb9, 0x9a, 0x17, 0xce, 0xc3, 0xf0, 0xa8, 0x0b, | 2686 | 0xb9, 0xbe, 0xcb, 0xe9, 0x0e, 0x94, 0xee, 0xd9, 0x08, 0xc7, 0x1e, 0xb3, |
| 2709 | 0x3f, 0x1a, 0xf5, 0xa0, 0x31, 0xf6, 0x39, 0x31, 0xa3, 0x10, 0xc7, 0xa9, | 2687 | 0x6b, 0x4b, 0x08, 0x3f, 0xb3, 0x73, 0x2d, 0xdd, 0xba, 0x77, 0xe2, 0x2e, |
| 2710 | 0xef, 0x49, 0xf2, 0x9f, 0x8f, 0xa2, 0x2a, 0x26, 0x18, 0x6b, 0x3f, 0x8c, | 2688 | 0x7b, 0x90, 0x7d, 0x8c, 0x2b, 0x0b, 0x32, 0x1b, 0x51, 0xbe, 0xc7, 0x83, |
| 2711 | 0x56, 0x62, 0x9c, 0xb9, 0xd6, 0x75, 0xe2, 0x4c, 0x9a, 0x7b, 0xf3, 0x01, | 2689 | 0x67, 0x29, 0xc3, 0x51, 0x68, 0x81, 0x35, 0xca, 0x46, 0x14, 0x8c, 0x64, |
| 2712 | 0xf3, 0x8e, 0xef, 0xa5, 0x83, 0xf8, 0x55, 0x34, 0x88, 0x57, 0xa9, 0xc7, | 2690 | 0xd7, 0xbf, 0x2e, 0x93, 0xb5, 0x8b, 0xfb, 0x1b, 0xa7, 0xc7, 0x32, 0x6e, |
| 2713 | 0xba, 0x98, 0x9b, 0x32, 0x1d, 0x53, 0x70, 0xe8, 0xb8, 0x92, 0x47, 0xbb, | 2691 | 0x8b, 0x77, 0x4f, 0xa6, 0x4b, 0x70, 0x3a, 0x25, 0xf2, 0x81, 0xea, 0x08, |
| 2714 | 0xf0, 0xc7, 0x34, 0xcf, 0x48, 0xd6, 0x2e, 0xb4, 0xf1, 0x56, 0xfa, 0x91, | 2692 | 0x8f, 0xa2, 0x70, 0x0f, 0x31, 0x71, 0x58, 0xb7, 0xf8, 0x82, 0xd8, 0xc4, |
| 2715 | 0xf4, 0xff, 0x25, 0x3e, 0x38, 0xf4, 0x11, 0x90, 0xd3, 0x05, 0x73, 0x75, | 2693 | 0x70, 0xfa, 0x76, 0x36, 0x15, 0xc4, 0xce, 0x44, 0x0d, 0xed, 0xa9, 0x16, |
| 2716 | 0x42, 0xaf, 0x7b, 0x0a, 0x15, 0xf4, 0xa5, 0x2f, 0x4d, 0x55, 0x93, 0x9a, | 2694 | 0x2b, 0xf7, 0x48, 0x8d, 0x79, 0xe2, 0x5e, 0x17, 0xb5, 0xe8, 0x50, 0xfa, |
| 2717 | 0x58, 0x32, 0x74, 0x2d, 0xaa, 0xa9, 0x57, 0xad, 0x35, 0x18, 0x8a, 0x73, | 2695 | 0x56, 0x7b, 0x6a, 0xa4, 0x6e, 0x0a, 0xb6, 0x9a, 0x98, 0xd4, 0xb3, 0x78, |
| 2718 | 0x39, 0x39, 0x46, 0xe5, 0x0e, 0xae, 0x5f, 0x23, 0x66, 0x38, 0xe8, 0x32, | 2696 | 0x73, 0xcc, 0xaa, 0x61, 0x8b, 0x4d, 0xb6, 0x62, 0xcb, 0x00, 0xda, 0xf7, |
| 2719 | 0x26, 0xef, 0xbb, 0x8e, 0xfb, 0x0e, 0xfd, 0x69, 0x75, 0x86, 0x03, 0xd1, | 2697 | 0x37, 0x8a, 0x4d, 0x3a, 0x31, 0x44, 0xbe, 0x7f, 0x91, 0xb1, 0xc3, 0x0c, |
| 2720 | 0x9f, 0x6d, 0x77, 0xd6, 0xb1, 0xa4, 0x96, 0xbd, 0x37, 0xf4, 0x46, 0x34, | 2698 | 0xed, 0x73, 0x62, 0x42, 0x01, 0x06, 0x87, 0x5d, 0xf8, 0xf1, 0xb0, 0x07, |
| 2721 | 0x56, 0x2d, 0x3d, 0xa5, 0x93, 0x08, 0x52, 0x2f, 0x77, 0xcb, 0x15, 0x4c, | 2699 | 0xee, 0x58, 0x31, 0xc6, 0x29, 0xe3, 0x31, 0x72, 0x9c, 0x8f, 0x18, 0x65, |
| 2722 | 0xbc, 0x45, 0x4c, 0xb9, 0x9a, 0x14, 0xbe, 0x24, 0x3c, 0xa9, 0x8b, 0x31, | 2700 | 0x8f, 0xd2, 0xa7, 0x7e, 0x18, 0xad, 0x42, 0x26, 0x5d, 0x8b, 0xab, 0xc4, |
| 2723 | 0xa9, 0x84, 0x3c, 0x41, 0xc3, 0x4e, 0x72, 0x79, 0x5f, 0x7c, 0x8a, 0xb9, | 2701 | 0x94, 0x34, 0xf7, 0xe3, 0x83, 0x68, 0x00, 0x2f, 0xa7, 0x83, 0x78, 0x3f, |
| 2724 | 0xca, 0x57, 0xc9, 0xd5, 0x4a, 0x39, 0x8d, 0xc1, 0xe7, 0xb5, 0x62, 0x0f, | 2702 | 0x2a, 0xd8, 0x13, 0xc4, 0x11, 0xca, 0xaf, 0x28, 0xe6, 0x66, 0xbf, 0x82, |
| 2725 | 0x7d, 0xb3, 0x40, 0x5b, 0x8c, 0x35, 0xe4, 0x41, 0x0e, 0x8d, 0xa1, 0xe4, | 2703 | 0x43, 0x1e, 0x38, 0x63, 0x9a, 0x67, 0x28, 0xa7, 0x0b, 0x8e, 0x4c, 0x2b, |
| 2726 | 0x09, 0x89, 0x27, 0x40, 0x6d, 0x5c, 0x95, 0x7e, 0xcf, 0xfa, 0x9f, 0xe1, | 2704 | 0xed, 0x46, 0xce, 0x44, 0x88, 0x1f, 0x70, 0xe8, 0x43, 0x8c, 0xb9, 0x07, |
| 2727 | 0x7e, 0xb4, 0x57, 0xb9, 0x20, 0x3d, 0x9a, 0x37, 0xd1, 0x84, 0xd4, 0xd7, | 2705 | 0x83, 0xf9, 0xfc, 0xaf, 0xd7, 0x3d, 0x81, 0x99, 0xb4, 0x9d, 0x2f, 0x4d, |
| 2728 | 0xad, 0xde, 0x30, 0xdc, 0x61, 0xcd, 0xb8, 0x88, 0x45, 0x16, 0x23, 0x2f, | 2706 | 0x55, 0x93, 0x98, 0x2a, 0x19, 0xba, 0x12, 0xd5, 0x24, 0x17, 0x48, 0x6c, |
| 2729 | 0x0c, 0x8b, 0x3c, 0x95, 0xd4, 0xbf, 0x8a, 0x77, 0xa9, 0xd7, 0x2b, 0x51, | 2707 | 0x37, 0x14, 0xe7, 0x62, 0x72, 0x89, 0xaa, 0xad, 0x92, 0x17, 0xe6, 0xfc, |
| 2730 | 0xdf, 0xcc, 0x83, 0xa8, 0x3f, 0x73, 0xc5, 0x2e, 0xfd, 0x2b, 0xb9, 0x3f, | 2708 | 0xe5, 0x6c, 0x99, 0xc9, 0x76, 0x57, 0x31, 0xff, 0xc0, 0xd6, 0x59, 0xb9, |
| 2731 | 0x08, 0x8d, 0xf3, 0x7d, 0x1a, 0x0d, 0x61, 0x40, 0x95, 0xef, 0xc2, 0x1b, | 2709 | 0x1c, 0x93, 0x7a, 0x83, 0xf7, 0xe5, 0x31, 0x5e, 0xe2, 0xb5, 0xdd, 0xa1, |
| 2732 | 0x5b, 0xd1, 0x3d, 0x22, 0x32, 0x98, 0x66, 0x39, 0xf1, 0xf1, 0x09, 0xeb, | 2710 | 0xd7, 0xa2, 0x7f, 0x3f, 0x4b, 0xea, 0x71, 0xc7, 0x11, 0xa4, 0x4c, 0x6e, |
| 2733 | 0xf9, 0xf2, 0xec, 0x3b, 0xf3, 0x0e, 0xaf, 0x6a, 0x20, 0x97, 0x7b, 0x4c, | 2711 | 0x17, 0x0f, 0x98, 0x78, 0x93, 0x18, 0x72, 0x39, 0x29, 0xbc, 0x48, 0xf8, |
| 2734 | 0xe3, 0x68, 0xd2, 0x03, 0xc7, 0xf2, 0xff, 0x41, 0x3d, 0x4c, 0x63, 0x34, | 2712 | 0x50, 0x17, 0x7d, 0x4f, 0x19, 0xf9, 0x80, 0x86, 0x6d, 0xe4, 0xeb, 0xbe, |
| 2735 | 0xa5, 0x91, 0x53, 0x16, 0xc1, 0x53, 0x15, 0x44, 0x3f, 0xe3, 0x78, 0x8c, | 2713 | 0xf8, 0x04, 0xe3, 0x91, 0xaf, 0x93, 0x93, 0x95, 0xb3, 0x9b, 0x1f, 0x70, |
| 2736 | 0xf7, 0xa7, 0x63, 0x45, 0x30, 0xaa, 0x32, 0xcf, 0xfc, 0x6a, 0xfc, 0xba, | 2714 | 0xbc, 0x56, 0xec, 0xa4, 0x2d, 0x16, 0x69, 0x77, 0x61, 0x25, 0xf9, 0x8e, |
| 2737 | 0x39, 0xf5, 0xb8, 0xcc, 0x29, 0xdf, 0x7f, 0xce, 0x31, 0x73, 0xe5, 0xd8, | 2715 | 0x43, 0xa3, 0xcb, 0x78, 0x58, 0xfc, 0x86, 0xe4, 0x70, 0x54, 0xa9, 0x95, |
| 2738 | 0x23, 0x36, 0xc7, 0xae, 0x9a, 0x53, 0xad, 0xb3, 0x7f, 0x2f, 0xb3, 0xce, | 2716 | 0xad, 0x7d, 0x1d, 0xf7, 0xa2, 0xbd, 0xda, 0x05, 0xa9, 0x6f, 0xbd, 0x81, |
| 2739 | 0x10, 0x45, 0x6c, 0x55, 0x52, 0x6f, 0xb1, 0xf4, 0xd2, 0x4d, 0xbd, 0xcc, | 2717 | 0x25, 0x48, 0x3d, 0x2a, 0xbe, 0x93, 0x1c, 0x39, 0xac, 0x19, 0xe7, 0x31, |
| 2740 | 0xd1, 0xde, 0x36, 0x1f, 0xb3, 0xe4, 0x9a, 0xaa, 0x16, 0x9e, 0x5f, 0x1b, | 2718 | 0xcf, 0x62, 0xdd, 0xc5, 0x61, 0x99, 0x4f, 0x15, 0x65, 0xaf, 0xe2, 0x1d, |
| 2741 | 0xff, 0xbc, 0x5a, 0xea, 0xa5, 0x12, 0xc3, 0x5c, 0x61, 0xad, 0xf1, 0x0c, | 2719 | 0xca, 0xf5, 0x52, 0xd4, 0x37, 0x75, 0x1f, 0x1a, 0x4e, 0x5d, 0xb2, 0x4b, |
| 2742 | 0xfe, 0xd1, 0xbc, 0x74, 0xdb, 0x3c, 0x15, 0xbc, 0x26, 0xf1, 0xe8, 0x52, | 2720 | 0xed, 0x4f, 0xda, 0x07, 0xa1, 0xb1, 0xbf, 0x4f, 0xa3, 0x21, 0xf4, 0xa9, |
| 2743 | 0xb6, 0x1f, 0xed, 0xce, 0xe6, 0x02, 0xd3, 0x38, 0x99, 0x94, 0x58, 0xe0, | 2721 | 0x72, 0x2d, 0xfc, 0xb0, 0x15, 0xdd, 0x43, 0x32, 0x07, 0xd3, 0xac, 0x24, |
| 2744 | 0xc1, 0x06, 0xa9, 0x43, 0xa9, 0xde, 0x3e, 0x03, 0x53, 0xe4, 0x7e, 0xef, | 2722 | 0x1e, 0x3e, 0x6c, 0x8d, 0x2f, 0x63, 0xdf, 0x1a, 0x5b, 0x78, 0x19, 0x49, |
| 2745 | 0x50, 0xf7, 0x4c, 0x80, 0xfc, 0x53, 0xe4, 0x7f, 0xb3, 0xe3, 0x55, 0x04, | 2723 | 0xe7, 0xe3, 0x8b, 0x49, 0x1c, 0x4e, 0x52, 0xfe, 0x8b, 0xdf, 0xa6, 0x1c, |
| 2746 | 0xa9, 0x4a, 0xe9, 0x29, 0x08, 0x9e, 0x4e, 0x63, 0x57, 0xf2, 0x75, 0xe2, | 2724 | 0x26, 0x31, 0x9c, 0xd2, 0xc8, 0x1d, 0x4b, 0xe0, 0xa9, 0x0e, 0x62, 0x17, |
| 2747 | 0xda, 0xc7, 0xe4, 0x43, 0x5d, 0xe4, 0xda, 0xd3, 0xe8, 0x49, 0x35, 0xe3, | 2725 | 0xfd, 0x75, 0x8c, 0xed, 0xd3, 0xb1, 0x12, 0x18, 0xd5, 0xd9, 0x31, 0xbf, |
| 2748 | 0xe5, 0xfd, 0x2d, 0xc4, 0x18, 0xc1, 0x4a, 0xdf, 0x99, 0xcb, 0xf6, 0x66, | 2726 | 0x1e, 0xbf, 0x6a, 0x4e, 0x3c, 0x64, 0xc5, 0xa9, 0xbc, 0xfe, 0x1d, 0x9f, |
| 2749 | 0x1c, 0x1c, 0x4b, 0x23, 0x75, 0x58, 0x62, 0xa4, 0x9c, 0xc7, 0x92, 0xf8, | 2727 | 0x99, 0x2d, 0xc7, 0x32, 0xb1, 0x3e, 0x76, 0xd9, 0x9c, 0x68, 0x9d, 0xfe, |
| 2750 | 0xa8, 0x21, 0x9a, 0x38, 0x0d, 0x83, 0x7f, 0xf7, 0x24, 0xb6, 0x21, 0x72, | 2728 | 0x7b, 0x85, 0x75, 0xa6, 0x2a, 0x62, 0xab, 0xe6, 0x77, 0x56, 0x2e, 0xdd, |
| 2751 | 0xf8, 0x6d, 0x72, 0xfc, 0x69, 0xac, 0x1e, 0xd0, 0xd6, 0x1f, 0xc1, 0x34, | 2729 | 0x94, 0xcb, 0x0c, 0xed, 0x2d, 0xf3, 0x41, 0x6b, 0x5e, 0xef, 0xcd, 0x12, |
| 2752 | 0xd6, 0x32, 0x7e, 0x26, 0x13, 0x2d, 0x9c, 0xbf, 0x19, 0xbd, 0xfb, 0xbd, | 2730 | 0x2e, 0x5f, 0x17, 0xf7, 0xcc, 0x46, 0x71, 0x15, 0xdb, 0x10, 0x43, 0xc3, |
| 2753 | 0x01, 0x87, 0x6d, 0x0e, 0x63, 0x94, 0x07, 0x3b, 0x27, 0x23, 0x30, 0x46, | 2731 | 0x5a, 0xd3, 0x29, 0xfc, 0x8b, 0x79, 0xe1, 0xa6, 0x7e, 0x66, 0xf2, 0x9e, |
| 2754 | 0xe4, 0x8c, 0x81, 0x0b, 0xc1, 0xb8, 0x47, 0xf9, 0x90, 0x3c, 0xb9, 0x3e, | 2732 | 0xf8, 0x9e, 0x0b, 0xb9, 0x9c, 0x8f, 0x3b, 0xc7, 0xf7, 0x27, 0x71, 0x3c, |
| 2755 | 0xee, 0x65, 0x7e, 0xe6, 0x35, 0xd6, 0x2a, 0x3e, 0x4f, 0x9e, 0x4d, 0xfa, | 2733 | 0x29, 0xd8, 0xef, 0xc1, 0x13, 0x92, 0x9b, 0x52, 0xbd, 0xbd, 0x06, 0x26, |
| 2756 | 0x59, 0x73, 0x70, 0x46, 0x57, 0x50, 0x70, 0xbf, 0x82, 0x10, 0x63, 0x97, | 2734 | 0xc8, 0xf1, 0xde, 0xa6, 0xec, 0x25, 0xff, 0x38, 0x41, 0x9e, 0x37, 0xdd, |
| 2757 | 0xa7, 0x9a, 0x31, 0x65, 0x44, 0x47, 0xef, 0x10, 0xd7, 0x7b, 0x73, 0xdf, | 2735 | 0x37, 0x45, 0x90, 0xaa, 0x92, 0x1a, 0x8c, 0xe0, 0xe7, 0x24, 0xb6, 0x27, |
| 2758 | 0x64, 0xbf, 0x1e, 0xe1, 0x7c, 0xb2, 0x77, 0x2d, 0xe8, 0x9d, 0xf4, 0x75, | 2736 | 0x7f, 0x4a, 0x1c, 0xfb, 0x98, 0xbc, 0xa7, 0x8b, 0x9c, 0x7a, 0x12, 0x5b, |
| 2759 | 0x9c, 0x81, 0xdb, 0xe2, 0x5c, 0xbd, 0x43, 0xb9, 0x7b, 0x50, 0xfc, 0x71, | 2737 | 0x52, 0xcd, 0x78, 0x69, 0x6f, 0x0b, 0x71, 0x45, 0xb0, 0xd1, 0x77, 0xea, |
| 2760 | 0x83, 0x37, 0x30, 0x47, 0x91, 0x7b, 0x77, 0x10, 0xbf, 0x66, 0xdf, 0x6f, | 2738 | 0xa2, 0xbd, 0x19, 0xfb, 0x0f, 0xa5, 0x91, 0x1a, 0x11, 0x7f, 0x28, 0x3e, |
| 2761 | 0x28, 0xc9, 0xe5, 0xe4, 0xa5, 0x36, 0xf1, 0x8b, 0x6e, 0xcb, 0x5f, 0x44, | 2739 | 0x57, 0x7c, 0xa1, 0x86, 0x68, 0xe2, 0x24, 0x0c, 0x7e, 0xef, 0x4c, 0x6c, |
| 2762 | 0x17, 0xbd, 0xc9, 0x08, 0x6d, 0xfa, 0xc7, 0x66, 0xaa, 0xb5, 0x95, 0x72, | 2740 | 0x44, 0x64, 0xe4, 0x2d, 0xf2, 0xf8, 0x49, 0x2c, 0xef, 0xd3, 0xd6, 0x1e, |
| 2763 | 0x36, 0x48, 0xaf, 0xc7, 0xe2, 0x26, 0xe7, 0xa5, 0xee, 0xe6, 0x94, 0xd8, | 2741 | 0xc4, 0x24, 0x56, 0xd1, 0x57, 0x26, 0x13, 0x2d, 0xec, 0xbf, 0x19, 0x3d, |
| 2764 | 0xdd, 0xdd, 0xee, 0xa2, 0x3d, 0xe5, 0x13, 0x9f, 0x0a, 0x26, 0x5c, 0x70, | 2742 | 0x7b, 0xbd, 0x56, 0xbe, 0x49, 0x62, 0xf8, 0x6d, 0x63, 0x11, 0x18, 0x43, |
| 2765 | 0x1d, 0x29, 0x42, 0xfe, 0xb0, 0xf0, 0x34, 0xa8, 0xa5, 0xcc, 0xfb, 0xe5, | 2743 | 0x72, 0x36, 0xc3, 0x85, 0x60, 0xdc, 0xa3, 0x7c, 0x48, 0x3e, 0xdc, 0x10, |
| 2766 | 0x3c, 0xc3, 0x30, 0x6d, 0xd4, 0x36, 0x41, 0x1f, 0x8b, 0xba, 0xb1, 0x68, | 2744 | 0xf7, 0x32, 0x06, 0xf3, 0x1a, 0xab, 0x14, 0x9f, 0xa7, 0xc0, 0x26, 0xb5, |
| 2767 | 0xc2, 0x8d, 0x1f, 0x11, 0x03, 0x6a, 0x26, 0x34, 0x1c, 0x27, 0x06, 0xb8, | 2745 | 0xc0, 0x19, 0x38, 0xa5, 0x2b, 0x28, 0xba, 0x57, 0x41, 0x88, 0xbe, 0xca, |
| 2768 | 0x27, 0x02, 0x98, 0x24, 0x06, 0xcc, 0xc9, 0xd6, 0x3e, 0xde, 0x4c, 0xcf, | 2746 | 0x33, 0x8b, 0x3e, 0x64, 0x48, 0x47, 0xcf, 0x00, 0xd7, 0x7b, 0x7d, 0xdf, |
| 2769 | 0x9f, 0x8b, 0x42, 0x79, 0x96, 0xe8, 0x31, 0xb7, 0xaf, 0xb2, 0xa7, 0x2d, | 2747 | 0x64, 0xbf, 0x56, 0xb3, 0x3f, 0xd9, 0xbb, 0x16, 0xf4, 0x8c, 0xf9, 0x3a, |
| 2770 | 0xc4, 0x3d, 0xd9, 0xdf, 0x00, 0x76, 0x0f, 0xa5, 0xb1, 0x6a, 0x9f, 0x89, | 2748 | 0x4e, 0xc1, 0x6d, 0x71, 0xab, 0x9e, 0x81, 0xeb, 0x79, 0x81, 0xd2, 0x8f, |
| 2771 | 0x9f, 0xeb, 0xf5, 0xee, 0x02, 0x45, 0xf2, 0x04, 0x13, 0x69, 0x5d, 0xce, | 2749 | 0x1b, 0xbd, 0x81, 0x19, 0x8a, 0xb4, 0xdd, 0x4a, 0xcc, 0x9a, 0xde, 0xde, |
| 2772 | 0x4d, 0x7a, 0xd7, 0xcb, 0xb9, 0xe2, 0xf6, 0x4a, 0x13, 0x79, 0x21, 0xaf, | 2750 | 0x50, 0x92, 0x8b, 0xc9, 0x3f, 0x6d, 0x62, 0x17, 0xdd, 0x96, 0xbd, 0x88, |
| 2773 | 0x4e, 0xb4, 0x5f, 0x5f, 0xa0, 0x48, 0xdc, 0xaa, 0xf7, 0x6c, 0xc1, 0x7c, | 2751 | 0x2c, 0x7a, 0x92, 0x11, 0xea, 0xf4, 0x4f, 0xcc, 0x54, 0x6b, 0x2b, 0xe7, |
| 2774 | 0x64, 0x7a, 0x65, 0x0f, 0x62, 0x8b, 0xaa, 0xd0, 0x1f, 0x5b, 0xb0, 0xa7, | 2752 | 0xd9, 0x28, 0xb5, 0x31, 0x0b, 0x13, 0xce, 0x4a, 0x2e, 0xce, 0x29, 0x98, |
| 2775 | 0xcc, 0x70, 0x5d, 0x6b, 0x30, 0xcd, 0x4d, 0xa1, 0xdf, 0x56, 0x59, 0xb5, | 2753 | 0xd0, 0xdd, 0xee, 0xa2, 0x3e, 0x15, 0x12, 0x97, 0x8a, 0x46, 0x5d, 0x70, |
| 2776 | 0x65, 0xdb, 0x1f, 0x71, 0xed, 0x6d, 0x5c, 0xb7, 0xac, 0xbd, 0x03, 0xb1, | 2754 | 0x1d, 0x2c, 0x41, 0xe1, 0xa0, 0xf0, 0x31, 0xc9, 0x41, 0xa8, 0xb0, 0x8f, |
| 2777 | 0xbd, 0x0a, 0xd2, 0xfe, 0x0e, 0x44, 0x47, 0x3b, 0xd0, 0xbf, 0x57, 0x30, | 2755 | 0x96, 0xd2, 0x06, 0xb8, 0x87, 0xa3, 0xb4, 0xb1, 0xa8, 0x1b, 0xf3, 0x46, |
| 2778 | 0xa1, 0x8f, 0x98, 0x60, 0x76, 0x3d, 0x1b, 0x7a, 0x0c, 0x57, 0x2d, 0x16, | 2756 | 0xdd, 0xf8, 0x31, 0x31, 0xa0, 0x66, 0x54, 0xc3, 0x38, 0x31, 0xc0, 0x3d, |
| 2779 | 0x20, 0x63, 0xbc, 0x01, 0x8f, 0x6d, 0xf6, 0x3e, 0xe4, 0x53, 0xfe, 0x8c, | 2757 | 0x1a, 0xc0, 0x58, 0x34, 0x88, 0x19, 0xa3, 0xe3, 0xca, 0x1b, 0xe9, 0x66, |
| 2780 | 0xef, 0x34, 0x0f, 0x08, 0xa7, 0xf6, 0xf7, 0xf5, 0x72, 0xff, 0x1f, 0x3f, | 2758 | 0xee, 0xb7, 0x8c, 0x23, 0x32, 0xcc, 0xef, 0xa9, 0xec, 0x67, 0x0b, 0xb1, |
| 2781 | 0x24, 0xf1, 0xc6, 0x34, 0xfb, 0xc8, 0x59, 0x51, 0x26, 0x6b, 0xd0, 0xa4, | 2759 | 0x4e, 0xf6, 0x36, 0x80, 0x1d, 0x03, 0x69, 0x2c, 0xdb, 0x63, 0xe2, 0x9f, |
| 2782 | 0x3e, 0xfe, 0x71, 0x8d, 0xe6, 0x9b, 0xe9, 0x67, 0x6c, 0xbf, 0xb8, 0xaf, | 2760 | 0xf4, 0x06, 0x77, 0x91, 0x22, 0xb1, 0x80, 0x89, 0x34, 0xfd, 0xda, 0x0a, |
| 2783 | 0x7e, 0xcb, 0x16, 0xe1, 0x31, 0xcb, 0x84, 0xdb, 0xa5, 0x71, 0xe1, 0xf0, | 2761 | 0xdd, 0xbb, 0x56, 0xce, 0x3b, 0xb7, 0x57, 0x99, 0x28, 0x08, 0x79, 0x75, |
| 2784 | 0x7d, 0x48, 0x3d, 0xce, 0xf5, 0x70, 0xaf, 0x9c, 0xf1, 0x2f, 0x4c, 0xe1, | 2762 | 0xa2, 0xfb, 0xda, 0x22, 0x45, 0x7c, 0x54, 0x83, 0x67, 0x03, 0xe6, 0x22, |
| 2785 | 0x72, 0x76, 0x4d, 0x53, 0x8f, 0x12, 0xfb, 0x6c, 0x13, 0x7e, 0xf4, 0x94, | 2763 | 0x5b, 0x57, 0xbc, 0x0f, 0x1b, 0x54, 0x85, 0xb6, 0xd8, 0x82, 0x9d, 0x15, |
| 2786 | 0xc1, 0xb8, 0xd6, 0x20, 0xcf, 0xbf, 0x29, 0x3f, 0xd7, 0xdb, 0x8c, 0xfe, | 2764 | 0x86, 0xeb, 0x4a, 0xa3, 0x69, 0xae, 0x0b, 0xd5, 0xcd, 0xb2, 0x72, 0xd0, |
| 2787 | 0xfd, 0xc2, 0x35, 0x84, 0x97, 0xf9, 0x8c, 0x0f, 0xd0, 0x82, 0xe4, 0x64, | 2765 | 0xb6, 0xf5, 0xfc, 0x6e, 0xe3, 0x9a, 0x65, 0xdd, 0x1d, 0x88, 0xed, 0x56, |
| 2788 | 0xe6, 0x59, 0xd1, 0xc4, 0x9d, 0xb6, 0x22, 0xfb, 0x7e, 0x1a, 0xbb, 0x69, | 2766 | 0x90, 0xf6, 0x77, 0x20, 0x3a, 0xdc, 0x21, 0xfc, 0x89, 0x78, 0xd0, 0x4b, |
| 2789 | 0x97, 0x2e, 0xce, 0xcf, 0xf8, 0xc2, 0xf9, 0xb4, 0x40, 0x81, 0x3c, 0x6f, | 2767 | 0x3c, 0x30, 0xbb, 0x9e, 0x0e, 0x3d, 0x88, 0xcb, 0x96, 0xc7, 0x97, 0x67, |
| 2790 | 0xe2, 0xc7, 0xe6, 0x9e, 0x2a, 0xd1, 0x8d, 0xcc, 0x7f, 0xba, 0x4a, 0x30, | 2768 | 0xbc, 0x01, 0x8f, 0x6d, 0xfa, 0x1e, 0xe8, 0xb3, 0x25, 0xcf, 0x21, 0x76, |
| 2791 | 0x63, 0x53, 0xe8, 0x0f, 0xad, 0xf5, 0x75, 0xfe, 0xf5, 0xb6, 0x64, 0xf4, | 2769 | 0xd3, 0xdc, 0x27, 0xbc, 0xd9, 0xdf, 0xdb, 0xc3, 0xbd, 0x7f, 0xe8, 0x80, |
| 2792 | 0x21, 0xf7, 0x9e, 0xfe, 0x3d, 0xf2, 0x5c, 0xe0, 0x7d, 0x22, 0x53, 0x07, | 2770 | 0xf8, 0x17, 0xd3, 0xec, 0x25, 0x2f, 0x45, 0x85, 0xac, 0x41, 0x43, 0x3c, |
| 2793 | 0x76, 0xef, 0x85, 0x51, 0xa8, 0x49, 0xaf, 0xa0, 0x03, 0x7d, 0xd4, 0xef, | 2771 | 0x61, 0x7e, 0x5c, 0xa3, 0xf9, 0xa6, 0x76, 0xd1, 0x8f, 0x9f, 0xdf, 0xd3, |
| 2794 | 0xce, 0x64, 0x07, 0x0e, 0xd2, 0x67, 0x87, 0xf5, 0x13, 0x35, 0x36, 0xd4, | 2772 | 0xb0, 0x61, 0x83, 0x70, 0x96, 0x45, 0x1a, 0x63, 0xe9, 0x34, 0xce, 0x8d, |
| 2795 | 0xcd, 0xd8, 0x31, 0xf5, 0x93, 0x45, 0xc4, 0xd3, 0x25, 0xcb, 0xfc, 0xf4, | 2773 | 0xcc, 0x47, 0xea, 0x21, 0xae, 0x87, 0xfb, 0xe4, 0x8c, 0x7f, 0xc1, 0x38, |
| 2796 | 0xaf, 0x0e, 0xc4, 0x53, 0x63, 0x73, 0xad, 0x3e, 0x9f, 0x4d, 0xe2, 0x9f, | 2774 | 0x43, 0xb0, 0x4f, 0x53, 0x0f, 0x13, 0xf7, 0x6c, 0xa3, 0x7e, 0x6c, 0xa9, |
| 2797 | 0xe8, 0xa2, 0x13, 0x85, 0x03, 0xa7, 0xe1, 0x1c, 0xe8, 0x44, 0x81, 0xbf, | 2775 | 0x80, 0x71, 0xa5, 0x51, 0xc6, 0xbf, 0x3e, 0x7f, 0xae, 0xb7, 0x19, 0xbb, |
| 2798 | 0x09, 0x0f, 0x87, 0x2e, 0x99, 0x57, 0x35, 0x87, 0xfb, 0x24, 0xf5, 0x73, | 2776 | 0xf6, 0x0a, 0xaf, 0x10, 0xfe, 0xe5, 0x33, 0x3e, 0x40, 0x0b, 0x92, 0x63, |
| 2799 | 0x22, 0x58, 0xc3, 0x7c, 0x92, 0x39, 0xcc, 0xc8, 0x3c, 0xfa, 0x7e, 0x03, | 2777 | 0xd9, 0xb1, 0xa2, 0x89, 0x5b, 0xf5, 0x44, 0xf6, 0xfc, 0x24, 0x76, 0x50, |
| 2800 | 0xf9, 0xae, 0xf4, 0xf4, 0x6d, 0x58, 0xbb, 0x5c, 0x72, 0x75, 0x85, 0xb6, | 2778 | 0x27, 0x5d, 0xec, 0x9f, 0x3e, 0x85, 0xfd, 0x69, 0x81, 0x22, 0x19, 0x6f, |
| 2801 | 0x5d, 0xcd, 0x5c, 0x53, 0x53, 0x9f, 0xb7, 0xce, 0x5f, 0x90, 0x87, 0x55, | 2779 | 0xf4, 0x27, 0xe6, 0xce, 0x6a, 0x91, 0x8d, 0xf4, 0xff, 0x9b, 0x6a, 0xc1, |
| 2802 | 0x7a, 0xf0, 0x8c, 0x75, 0xee, 0x40, 0xae, 0x6f, 0x67, 0x8e, 0xb0, 0x1d, | 2780 | 0x8b, 0x75, 0xa1, 0xaf, 0x5a, 0xeb, 0x15, 0x7e, 0x4b, 0xce, 0x3a, 0x3f, |
| 2803 | 0x35, 0x31, 0xc3, 0x14, 0x7d, 0x9f, 0x44, 0xe4, 0x25, 0x1b, 0xe5, 0x68, | 2781 | 0x1f, 0x79, 0xe6, 0x76, 0xf3, 0xf9, 0x9c, 0xed, 0x64, 0x4e, 0x1d, 0xd8, |
| 2804 | 0x5c, 0xe6, 0xdf, 0x32, 0xa3, 0x88, 0x4d, 0xfb, 0xdb, 0x27, 0x14, 0xdd, | 2782 | 0xb1, 0x1b, 0x46, 0xb1, 0xa6, 0x45, 0xe6, 0x2b, 0x1d, 0xe8, 0xa5, 0x7c, |
| 2805 | 0xf5, 0xc8, 0xb8, 0x82, 0xc0, 0x00, 0xe7, 0x0a, 0xfd, 0xf5, 0xdc, 0x4c, | 2783 | 0xb7, 0x25, 0x3b, 0xb0, 0x9f, 0xf6, 0x3a, 0xa8, 0x1f, 0xab, 0xb1, 0xa1, |
| 2806 | 0x7d, 0x2c, 0xc7, 0xf9, 0xb6, 0x93, 0x27, 0x6c, 0x47, 0x09, 0xc7, 0xbb, | 2784 | 0x7e, 0xca, 0x8e, 0x89, 0x7f, 0x94, 0x9a, 0xc5, 0x82, 0x45, 0x7e, 0xda, |
| 2807 | 0x35, 0xc1, 0x86, 0xc8, 0x4a, 0xe9, 0xa5, 0xa4, 0x43, 0xfe, 0xd6, 0x62, | 2785 | 0x56, 0x07, 0xe2, 0xa9, 0x73, 0xb3, 0xad, 0x9a, 0xa8, 0x4d, 0x7c, 0x9e, |
| 2808 | 0x45, 0xf8, 0x90, 0xbf, 0x71, 0xad, 0x22, 0xdc, 0x45, 0xc6, 0xe9, 0xae, | 2786 | 0xc8, 0xa2, 0x13, 0xc5, 0x7d, 0x27, 0xe1, 0xec, 0xeb, 0x44, 0x91, 0x7f, |
| 2809 | 0xba, 0xf1, 0x8b, 0xd9, 0x9e, 0x57, 0x03, 0xf1, 0xc1, 0x63, 0x9d, 0x85, | 2787 | 0x09, 0x56, 0x84, 0x2e, 0x98, 0x97, 0x35, 0x87, 0xfb, 0x38, 0xe5, 0x73, |
| 2810 | 0x7c, 0xed, 0xe6, 0x79, 0x89, 0x4c, 0xbd, 0xda, 0x19, 0x97, 0xbc, 0xe2, | 2788 | 0x2c, 0x58, 0xc3, 0x98, 0x91, 0x71, 0xca, 0xd0, 0x1c, 0xda, 0x7d, 0x23, |
| 2811 | 0x58, 0x68, 0x55, 0xb4, 0x91, 0x58, 0x67, 0x36, 0x8d, 0xd1, 0xee, 0x2f, | 2789 | 0x76, 0x8c, 0xc9, 0x59, 0x08, 0x1b, 0x56, 0x2d, 0x96, 0x58, 0x5c, 0xa1, |
| 2812 | 0xa3, 0x12, 0xff, 0x33, 0x2a, 0xb8, 0xe6, 0xc1, 0xff, 0x8a, 0xe6, 0x4b, | 2790 | 0x5e, 0xcf, 0x62, 0x3c, 0xa9, 0xa9, 0xcf, 0x59, 0xe7, 0x56, 0xc8, 0xb9, |
| 2813 | 0xbe, 0x9c, 0x92, 0x7a, 0xe4, 0xb9, 0xa4, 0x61, 0x52, 0xaf, 0x2d, 0x6b, | 2791 | 0xaa, 0x3c, 0x78, 0xd2, 0x3a, 0xaf, 0x21, 0xf7, 0x37, 0x31, 0x0e, 0xd8, |
| 2814 | 0x69, 0x4b, 0x81, 0x50, 0x31, 0x50, 0xd5, 0xfd, 0x8c, 0xd3, 0xca, 0xdf, | 2792 | 0x84, 0x9a, 0x98, 0x61, 0x8a, 0xbc, 0x8f, 0x23, 0xf2, 0xa2, 0x8d, 0xf3, |
| 2815 | 0x4b, 0x50, 0xc6, 0x18, 0x30, 0x30, 0xf2, 0xfb, 0x6a, 0xaf, 0xc4, 0xe1, | 2793 | 0x68, 0x5a, 0xe4, 0xdf, 0x30, 0xa5, 0x88, 0x3e, 0xfb, 0xdb, 0x47, 0x15, |
| 2816 | 0x42, 0xa9, 0x81, 0xda, 0xb1, 0x33, 0xf4, 0x2f, 0x66, 0x2a, 0x7b, 0x76, | 2794 | 0xdd, 0xb5, 0x3a, 0xa3, 0x20, 0xd0, 0xc7, 0xbe, 0x42, 0x23, 0xb3, 0xb3, |
| 2817 | 0xf5, 0xc2, 0x5e, 0xb1, 0xd3, 0x00, 0xf2, 0xe3, 0x17, 0x69, 0x93, 0x2a, | 2795 | 0xb9, 0xf1, 0x3c, 0xbf, 0xdb, 0x44, 0x5e, 0xb0, 0x09, 0x65, 0x31, 0xe1, |
| 2818 | 0xce, 0x47, 0x7d, 0xfa, 0x3a, 0xdb, 0x37, 0x68, 0xff, 0x8b, 0x6e, 0xc3, | 2796 | 0xe4, 0x82, 0x0b, 0x91, 0xa5, 0xe5, 0x7c, 0x3e, 0x1d, 0xf2, 0xb7, 0x96, |
| 2819 | 0xee, 0x45, 0xda, 0xa3, 0x78, 0xda, 0xc2, 0xee, 0x30, 0x7a, 0x18, 0x1b, | 2797 | 0x2a, 0xc2, 0x7d, 0xfc, 0x4d, 0xab, 0x14, 0xe1, 0x2a, 0xf2, 0x9c, 0xee, |
| 2820 | 0xc8, 0xe3, 0x0e, 0x3c, 0x63, 0x53, 0x51, 0x10, 0xf3, 0xa9, 0x3e, 0xe6, | 2798 | 0xaa, 0xcf, 0x9c, 0xcf, 0xd5, 0x31, 0x1b, 0x89, 0x0d, 0x72, 0xce, 0x24, |
| 2821 | 0xdb, 0x3d, 0x7c, 0x86, 0x70, 0xcc, 0x0a, 0x72, 0xc0, 0x67, 0xa3, 0xf5, | 2799 | 0x7f, 0xd6, 0xea, 0x46, 0xce, 0xda, 0x19, 0x97, 0xd8, 0xe1, 0x68, 0x68, |
| 2822 | 0x9e, 0x5f, 0x63, 0x03, 0xfd, 0x51, 0x9e, 0x21, 0x6b, 0xd2, 0x50, 0xcc, | 2800 | 0x59, 0xb4, 0x89, 0x38, 0x67, 0x2e, 0x39, 0x44, 0xbd, 0xbf, 0x88, 0x2a, |
| 2823 | 0xbc, 0xf2, 0x14, 0xd7, 0xb1, 0xb3, 0x2c, 0xf3, 0xdc, 0xd2, 0xec, 0xdc, | 2801 | 0xfc, 0x73, 0x54, 0x30, 0xcd, 0x83, 0x9f, 0x47, 0x0b, 0x25, 0x26, 0x4e, |
| 2824 | 0xf1, 0x11, 0xe1, 0x5f, 0x2b, 0xb0, 0xce, 0x9a, 0x3b, 0x68, 0xf9, 0xe6, | 2802 | 0x49, 0x5e, 0xf6, 0x4c, 0xd2, 0x30, 0x29, 0xd7, 0x96, 0x55, 0xd4, 0xa5, |
| 2825 | 0x01, 0x39, 0x5b, 0x5e, 0xa7, 0x21, 0x91, 0x6e, 0xc6, 0xb6, 0xf2, 0x05, | 2803 | 0x40, 0xa8, 0x14, 0xa8, 0xee, 0x7e, 0xd2, 0x69, 0xc5, 0xe8, 0x65, 0xa8, |
| 2826 | 0x38, 0x98, 0xd8, 0x8e, 0xa5, 0xe4, 0xc1, 0x4f, 0x96, 0x1b, 0x8c, 0x8d, | 2804 | 0x20, 0xfe, 0xf7, 0x0d, 0xfd, 0xa1, 0xf3, 0x0e, 0xc4, 0xe0, 0x62, 0xc9, |
| 2827 | 0xc4, 0xa1, 0xb8, 0xa6, 0xde, 0xa7, 0x3c, 0x90, 0xed, 0x3f, 0x54, 0xc2, | 2805 | 0x15, 0xda, 0xb1, 0x2d, 0xf4, 0x1b, 0x33, 0xd5, 0x26, 0xcf, 0xd4, 0xe2, |
| 2828 | 0x11, 0x97, 0x98, 0x97, 0x87, 0x41, 0x75, 0x3e, 0x8a, 0xac, 0x33, 0x7f, | 2806 | 0xdc, 0x6e, 0xd1, 0xd3, 0x00, 0x0a, 0xe3, 0xe7, 0xa9, 0x93, 0x2a, 0xce, |
| 2829 | 0x99, 0xb9, 0xfb, 0x47, 0xbc, 0xd9, 0x38, 0x48, 0xd4, 0x88, 0x5b, 0xe7, | 2807 | 0x46, 0x7d, 0xfa, 0x1a, 0xdb, 0xb7, 0xa8, 0xff, 0xf3, 0x6e, 0xc2, 0xed, |
| 2830 | 0x2d, 0x02, 0x2f, 0x90, 0x4b, 0xa4, 0x18, 0x01, 0xf3, 0xc2, 0x5a, 0x6a, | 2808 | 0x79, 0xda, 0x03, 0x78, 0xdc, 0xc2, 0xed, 0x30, 0xb6, 0xd0, 0x2f, 0x90, |
| 2831 | 0x33, 0x0a, 0x60, 0x54, 0x0b, 0x26, 0xca, 0x98, 0x79, 0x77, 0xc8, 0x54, | 2809 | 0xb7, 0xed, 0x7b, 0xd2, 0xa6, 0xd2, 0x9f, 0xfb, 0x54, 0x1f, 0x63, 0xea, |
| 2832 | 0x9e, 0x95, 0x29, 0x77, 0x3d, 0xc5, 0x6b, 0x62, 0x5b, 0xc2, 0x2f, 0xe4, | 2810 | 0x2d, 0x1c, 0x43, 0xf8, 0xe4, 0x4c, 0xf2, 0xbd, 0xa7, 0xa3, 0x0d, 0x9e, |
| 2833 | 0xf7, 0x42, 0xb4, 0xd2, 0x9e, 0x2a, 0x29, 0x73, 0xc2, 0x3a, 0xb7, 0xe9, | 2811 | 0x5f, 0xe3, 0x09, 0xda, 0xa3, 0x8c, 0x21, 0x6b, 0xd2, 0x50, 0xca, 0xd8, |
| 2834 | 0xd5, 0x0d, 0x5b, 0x03, 0x3e, 0xdb, 0x97, 0xb1, 0xc1, 0xf5, 0xb5, 0xdc, | 2812 | 0xf1, 0x04, 0xd7, 0xb1, 0xad, 0x22, 0x3b, 0x6e, 0x79, 0xae, 0xef, 0xf8, |
| 2835 | 0xff, 0xd2, 0x06, 0xcc, 0x1c, 0x96, 0x78, 0xf6, 0xfb, 0xcf, 0x52, 0x18, | 2813 | 0x90, 0xf0, 0xad, 0x7b, 0xb0, 0xc6, 0xea, 0x3b, 0x68, 0xd9, 0xe6, 0xbe, |
| 2836 | 0x37, 0xcf, 0x52, 0x88, 0x5e, 0xbd, 0x67, 0xde, 0x45, 0xfd, 0xd4, 0x53, | 2814 | 0xa8, 0x82, 0x19, 0xf5, 0x1a, 0x12, 0xe9, 0x66, 0x6c, 0xac, 0xac, 0xc5, |
| 2837 | 0xb6, 0xa3, 0x26, 0x2a, 0x44, 0xc7, 0x9b, 0xdd, 0x92, 0x87, 0xda, 0xc8, | 2815 | 0xfe, 0xc4, 0x26, 0x2c, 0x24, 0xe7, 0x7d, 0xa4, 0xd2, 0xa0, 0x5f, 0x24, |
| 2838 | 0x23, 0x8c, 0x74, 0xd2, 0x2d, 0xb1, 0xd2, 0x11, 0x07, 0x16, 0xc5, 0x0d, | 2816 | 0x06, 0xc5, 0x35, 0x75, 0xbe, 0xf2, 0x8d, 0x5c, 0xae, 0xba, 0x0a, 0x8e, |
| 2839 | 0xe4, 0x87, 0xb5, 0x03, 0xd7, 0xec, 0x37, 0xcc, 0xf6, 0xea, 0x79, 0xcc, | 2817 | 0xb8, 0xf8, 0xbb, 0x02, 0xf4, 0xab, 0x73, 0x51, 0x62, 0x9d, 0x81, 0xcc, |
| 2840 | 0x03, 0x6f, 0xad, 0xb9, 0x8f, 0xb2, 0xdb, 0xb5, 0x1f, 0x9b, 0x0f, 0x56, | 2818 | 0xf6, 0xbd, 0x6b, 0xc8, 0x9b, 0xf3, 0x81, 0x44, 0x8d, 0xb8, 0x75, 0x4e, |
| 2841 | 0x8a, 0x8c, 0x3f, 0x72, 0x67, 0xea, 0xcc, 0x0b, 0xa9, 0x97, 0x9c, 0x4e, | 2819 | 0x25, 0xf0, 0x3c, 0x79, 0x44, 0x8a, 0xde, 0xaf, 0x20, 0xac, 0xa5, 0xd6, |
| 2842 | 0x4c, 0xda, 0xcf, 0xdf, 0x98, 0x5f, 0xbb, 0xed, 0xba, 0xf0, 0x19, 0xb1, | 2820 | 0xa3, 0x08, 0xc6, 0x2c, 0xc1, 0x43, 0x79, 0x66, 0xce, 0x2d, 0x73, 0xaa, |
| 2843 | 0xd3, 0xd9, 0x67, 0xdb, 0xc4, 0x66, 0x3d, 0xb4, 0xd3, 0x69, 0x8c, 0x25, | 2821 | 0xcc, 0xcd, 0x29, 0x7f, 0xff, 0x34, 0xef, 0x89, 0x6e, 0x09, 0xb7, 0x90, |
| 2844 | 0x1b, 0x30, 0x90, 0x10, 0x1d, 0x47, 0x70, 0x99, 0xfc, 0xb0, 0x76, 0x70, | 2822 | 0xdf, 0x8b, 0xd1, 0x4a, 0x7d, 0xaa, 0xe2, 0x9c, 0x13, 0x09, 0xb9, 0xef, |
| 2845 | 0x1a, 0xc3, 0xe4, 0x87, 0xbe, 0xb8, 0xf7, 0x00, 0x35, 0x89, 0x6d, 0x6a, | 2823 | 0xd5, 0x0d, 0x5b, 0x23, 0x3e, 0xdb, 0x93, 0xd5, 0xc1, 0xb5, 0x75, 0xdc, |
| 2846 | 0x93, 0xc5, 0x93, 0x5c, 0x5a, 0x4e, 0x86, 0xaf, 0x5a, 0x7a, 0x97, 0x18, | 2824 | 0xff, 0xf2, 0x46, 0x4c, 0x8d, 0x88, 0x2f, 0xfb, 0xc3, 0x67, 0x50, 0x8c, |
| 2847 | 0xb3, 0x87, 0xeb, 0xbd, 0x97, 0x3c, 0xa9, 0x39, 0x96, 0x0f, 0xad, 0xac, | 2825 | 0xeb, 0x67, 0x50, 0x44, 0xae, 0xde, 0x53, 0xef, 0xa0, 0x61, 0xe2, 0x31, |
| 2848 | 0x14, 0xc5, 0x9a, 0xf4, 0x2b, 0x32, 0xf7, 0x45, 0x29, 0x4b, 0x91, 0xe6, | 2826 | 0xdb, 0x61, 0x13, 0x33, 0x45, 0xc6, 0x71, 0xb7, 0xc4, 0x9a, 0x36, 0x72, |
| 2849 | 0xc3, 0x5a, 0xeb, 0x5e, 0x8f, 0x75, 0xae, 0xc1, 0x51, 0x2e, 0x31, 0x58, | 2827 | 0x08, 0x23, 0x3d, 0xee, 0x16, 0x3f, 0xe9, 0x88, 0x03, 0xf3, 0xe2, 0x06, |
| 2850 | 0xe2, 0x2e, 0xf9, 0xf7, 0x72, 0x89, 0xbb, 0x61, 0xca, 0xb6, 0x98, 0x7b, | 2828 | 0x0a, 0xc3, 0xda, 0xbe, 0x2b, 0xf6, 0x6b, 0x66, 0xfb, 0xac, 0x39, 0x8c, |
| 2851 | 0xb6, 0x14, 0xee, 0x07, 0x3c, 0xa8, 0x79, 0x80, 0x31, 0x72, 0x89, 0x82, | 2829 | 0xf9, 0x6e, 0xac, 0xb9, 0x97, 0x73, 0xb7, 0x6b, 0x3f, 0x31, 0xef, 0xab, |
| 2852 | 0xf2, 0x25, 0x7e, 0x63, 0xa9, 0xad, 0x19, 0xa8, 0xd6, 0x88, 0x3f, 0x6e, | 2830 | 0x92, 0x39, 0xfe, 0xd2, 0x9d, 0x3d, 0xfb, 0x70, 0x07, 0xe5, 0x92, 0x97, |
| 2853 | 0xb3, 0x27, 0xf1, 0x3b, 0xce, 0xd1, 0x01, 0x73, 0x6f, 0x21, 0x36, 0xec, | 2831 | 0x89, 0x49, 0xfd, 0xf9, 0x2b, 0xf3, 0x9b, 0x37, 0xdd, 0x17, 0x2e, 0x23, |
| 2854 | 0x9d, 0x43, 0x5b, 0xf5, 0x48, 0x7d, 0xdd, 0xe5, 0x0a, 0x47, 0x43, 0xae, | 2832 | 0x7a, 0x3a, 0xfd, 0x3c, 0xa0, 0xe8, 0xac, 0xd4, 0x56, 0x26, 0x71, 0x28, |
| 2855 | 0x58, 0xbd, 0xee, 0x54, 0x16, 0x33, 0x1e, 0xcb, 0xfe, 0xc9, 0xf3, 0xbf, | 2833 | 0x29, 0xba, 0x2b, 0x32, 0x8e, 0xe0, 0x22, 0x79, 0x61, 0x41, 0xff, 0x24, |
| 2856 | 0x72, 0x1b, 0x5f, 0xaa, 0x60, 0x7c, 0x7b, 0xd2, 0x92, 0x41, 0x6a, 0xc0, | 2834 | 0x06, 0xc9, 0x0b, 0xed, 0x71, 0xef, 0x3e, 0x4a, 0x12, 0x1b, 0xd5, 0x25, |
| 2857 | 0x32, 0xee, 0xdf, 0xee, 0xd3, 0xd4, 0xcd, 0x7d, 0xba, 0x0f, 0x8e, 0x27, | 2835 | 0xc4, 0xea, 0x32, 0xce, 0x23, 0x3f, 0x87, 0x3a, 0x4b, 0xee, 0xe2, 0x5f, |
| 2858 | 0x2a, 0xc9, 0xbf, 0xee, 0x1e, 0x43, 0x0a, 0x18, 0x43, 0xee, 0x8d, 0x99, | 2836 | 0x76, 0x72, 0xbd, 0x45, 0xe4, 0x48, 0xcd, 0xb1, 0x42, 0x68, 0x15, 0xe5, |
| 2859 | 0x5d, 0x5b, 0x43, 0x45, 0x52, 0x17, 0xb2, 0x62, 0x48, 0xbb, 0x8d, 0x38, | 2837 | 0x28, 0xd5, 0xe4, 0x0c, 0x7c, 0xb6, 0x5d, 0x94, 0x73, 0x29, 0xd1, 0xe6, |
| 2860 | 0x5a, 0x2a, 0x76, 0xe1, 0xab, 0x21, 0xc6, 0xe9, 0x99, 0xdf, 0xc4, 0x3e, | 2838 | 0x62, 0x95, 0xd5, 0xd6, 0x63, 0x9d, 0x01, 0xd1, 0x2a, 0xc5, 0xff, 0x8a, |
| 2861 | 0xac, 0x3a, 0x5e, 0xf6, 0xb7, 0x0e, 0xec, 0x22, 0x66, 0xca, 0xd9, 0x6e, | 2839 | 0xcf, 0x25, 0xdf, 0x5e, 0x2c, 0x3e, 0x37, 0xcc, 0xb9, 0xcd, 0xc9, 0xd5, |
| 2862 | 0xa7, 0xa6, 0xd1, 0xff, 0x3b, 0xd0, 0xc3, 0x39, 0x5f, 0x26, 0x6e, 0x0e, | 2840 | 0x99, 0x56, 0x59, 0xf7, 0xf7, 0x25, 0x2e, 0x7c, 0xd9, 0x9f, 0xf8, 0x3d, |
| 2863 | 0x10, 0x37, 0x6f, 0x2c, 0x3b, 0xf1, 0x93, 0x1a, 0xd4, 0xd1, 0x08, 0xa6, | 2841 | 0x9f, 0xe9, 0x80, 0xba, 0xb7, 0x18, 0x0f, 0xfd, 0x65, 0x09, 0xf4, 0xca, |
| 2864 | 0xfe, 0x5b, 0xb9, 0xe0, 0xe6, 0x52, 0x7f, 0xc7, 0x27, 0x16, 0x6e, 0xca, | 2842 | 0x6c, 0xae, 0x7c, 0x5e, 0x38, 0x1a, 0x32, 0x13, 0xc2, 0x93, 0xee, 0x84, |
| 2865 | 0xdc, 0x32, 0xdf, 0xec, 0xb9, 0x17, 0xf2, 0xdf, 0x85, 0x52, 0x4b, 0x34, | 2843 | 0x67, 0xb6, 0x8c, 0x25, 0x18, 0x20, 0x7b, 0x21, 0x7b, 0x27, 0x39, 0xdc, |
| 2866 | 0x9d, 0xda, 0xff, 0x36, 0x77, 0x56, 0x8a, 0xac, 0x77, 0x93, 0x43, 0xb0, | 2844 | 0xdb, 0xd5, 0x18, 0xbc, 0xea, 0xc4, 0xf5, 0x7d, 0x98, 0x0f, 0xed, 0xe1, |
| 2867 | 0x76, 0x76, 0x4f, 0x7e, 0x9a, 0x98, 0x6b, 0xe5, 0x08, 0x8c, 0xb9, 0x11, | 2845 | 0x2a, 0xae, 0x2d, 0xeb, 0x23, 0x76, 0xd0, 0x47, 0x04, 0xfc, 0x59, 0x0c, |
| 2868 | 0xac, 0x59, 0xae, 0xe2, 0x6a, 0x74, 0x1a, 0x05, 0x87, 0x72, 0xf8, 0x64, | 2846 | 0x93, 0x1a, 0xbd, 0x93, 0x3e, 0x62, 0x84, 0x3e, 0xe2, 0xa2, 0x5e, 0x8e, |
| 2869 | 0x36, 0x9d, 0x22, 0x36, 0x0d, 0x43, 0xf0, 0xa8, 0x91, 0xfb, 0x62, 0xd0, | 2847 | 0xe5, 0x39, 0x1f, 0xd1, 0x6e, 0xd3, 0xad, 0xfe, 0x9d, 0xda, 0x7d, 0x35, |
| 2870 | 0x4f, 0x4a, 0x30, 0x91, 0xd4, 0x88, 0x99, 0x26, 0xfa, 0x43, 0x2e, 0x72, | 2848 | 0xc4, 0x30, 0x8e, 0xf1, 0xb5, 0x9b, 0xb8, 0xd8, 0x4c, 0xed, 0x97, 0xe6, |
| 2871 | 0xdb, 0xee, 0x93, 0x79, 0x56, 0x9c, 0x28, 0x21, 0x86, 0xe7, 0x78, 0xb7, | 2849 | 0x23, 0x55, 0xb2, 0xc6, 0xe6, 0x9a, 0x6c, 0x8e, 0xbc, 0x03, 0xfb, 0x88, |
| 2872 | 0x70, 0x6e, 0xc1, 0x1f, 0xe6, 0x18, 0x23, 0x76, 0xe4, 0x2d, 0x93, 0xbc, | 2850 | 0x8f, 0x35, 0x9a, 0x3c, 0xa3, 0x25, 0x6b, 0xec, 0x1d, 0xe8, 0x67, 0xff, |
| 2873 | 0xe2, 0x73, 0xf3, 0x42, 0x9b, 0xdc, 0xb7, 0x00, 0xc3, 0x7b, 0xc5, 0xfe, | 2851 | 0x7d, 0xc4, 0xc8, 0x18, 0x31, 0x52, 0x5f, 0x78, 0xec, 0x45, 0x15, 0xf5, |
| 2874 | 0x7c, 0xa8, 0xd1, 0x2e, 0x32, 0xcf, 0x00, 0xde, 0x8f, 0xda, 0xee, 0x71, | 2852 | 0x1d, 0x64, 0x0f, 0xdf, 0x16, 0x6c, 0x79, 0x99, 0xd8, 0xf2, 0x3c, 0x31, |
| 2875 | 0x91, 0x1b, 0x77, 0xe9, 0xcb, 0x71, 0xa3, 0xa2, 0x87, 0x3e, 0xef, 0xe6, | 2853 | 0x72, 0x67, 0x4a, 0xc6, 0x91, 0xf1, 0xf2, 0xe3, 0x48, 0x9f, 0xff, 0x66, |
| 2876 | 0x6f, 0x53, 0x38, 0x12, 0x75, 0x21, 0xcf, 0xd2, 0x69, 0x29, 0xd7, 0x90, | 2854 | 0xae, 0xaf, 0x92, 0xb9, 0xde, 0x6e, 0x1e, 0xf2, 0xdb, 0x9f, 0xf2, 0xef, |
| 2877 | 0xb1, 0xa1, 0x9d, 0xb4, 0xa1, 0x7c, 0xe6, 0x6f, 0x0f, 0x5b, 0xbe, 0x2a, | 2855 | 0x62, 0x8b, 0x43, 0xf5, 0x26, 0xa6, 0x9f, 0xa9, 0x98, 0x24, 0xbe, 0x5a, |
| 2878 | 0xf3, 0x4c, 0xe3, 0x15, 0x72, 0x5a, 0x6d, 0xb9, 0xf0, 0xd9, 0x20, 0xe3, | 2856 | 0x71, 0x00, 0xfd, 0x6b, 0x04, 0x2b, 0x17, 0xab, 0xb8, 0x1c, 0x9d, 0x44, |
| 2879 | 0x62, 0x09, 0xe2, 0x03, 0x5d, 0x38, 0x1f, 0x2a, 0x41, 0xec, 0x90, 0xf8, | 2857 | 0xd1, 0x81, 0x3c, 0x16, 0x99, 0x4b, 0x4e, 0x10, 0x87, 0x06, 0x21, 0xd8, |
| 2880 | 0xd8, 0x02, 0xc1, 0x52, 0x3e, 0xb7, 0x91, 0x3a, 0x51, 0x89, 0x35, 0xf5, | 2858 | 0xd3, 0xc4, 0x3d, 0x30, 0x68, 0x13, 0x65, 0x18, 0x4d, 0xca, 0xd9, 0x0b, |
| 2881 | 0x9d, 0x76, 0x7b, 0x09, 0x2e, 0x95, 0x31, 0xaf, 0xb5, 0xde, 0xe3, 0x69, | 2859 | 0x13, 0xbb, 0x42, 0x2e, 0x72, 0xd8, 0xee, 0xe3, 0x05, 0x96, 0x4f, 0x28, |
| 2882 | 0xc5, 0xc1, 0xac, 0x5d, 0xa8, 0xb4, 0x8b, 0xd6, 0x9b, 0x3c, 0x3a, 0xb7, | 2860 | 0x23, 0x5e, 0xe7, 0xf9, 0xb5, 0x70, 0x6b, 0xc1, 0x1a, 0xc6, 0x11, 0x43, |
| 2883 | 0x96, 0x9c, 0xcf, 0x66, 0xfa, 0xe1, 0xbd, 0xe4, 0x36, 0x2f, 0x4b, 0xfd, | 2861 | 0x76, 0x14, 0x2c, 0xca, 0xc6, 0x0e, 0xe7, 0xda, 0xa4, 0x5d, 0x2d, 0x06, |
| 2884 | 0xc8, 0xe6, 0x63, 0x2c, 0x61, 0xce, 0x34, 0x29, 0xfa, 0xfd, 0xeb, 0xb9, | 2862 | 0x77, 0x8b, 0xae, 0xf9, 0x50, 0xa3, 0x9d, 0x67, 0x2c, 0x01, 0xbc, 0x1b, |
| 2885 | 0x19, 0xac, 0x78, 0xa5, 0x26, 0x73, 0x76, 0x25, 0xa7, 0xf7, 0xdc, 0x77, | 2863 | 0xb5, 0xdd, 0xe9, 0x22, 0x07, 0xee, 0xd2, 0x17, 0xe3, 0xda, 0xcc, 0x2d, |
| 2886 | 0x6d, 0x7d, 0xa1, 0xf2, 0x0b, 0x73, 0x6b, 0x95, 0xc8, 0x77, 0x9d, 0x79, | 2864 | 0xb4, 0x6f, 0x37, 0x7f, 0x9b, 0xc0, 0xc1, 0xa8, 0x0b, 0x05, 0x56, 0x8d, |
| 2887 | 0xda, 0x77, 0xf9, 0xfb, 0x2a, 0xf4, 0x8e, 0xcc, 0x8e, 0x15, 0xe2, 0x87, | 2865 | 0xb2, 0x9c, 0xeb, 0xc9, 0xea, 0xcb, 0x36, 0xea, 0x4b, 0x21, 0x63, 0xb3, |
| 2888 | 0x9e, 0xdb, 0xce, 0xd5, 0x95, 0xc5, 0xe5, 0xdd, 0xa9, 0x63, 0xa1, 0x67, | 2866 | 0x15, 0x96, 0x5d, 0x4a, 0x3f, 0x93, 0xd6, 0xbb, 0x32, 0xda, 0x62, 0xe1, |
| 2889 | 0xb8, 0x0f, 0xfe, 0xa5, 0xf5, 0x56, 0xdd, 0x85, 0xdc, 0x97, 0x79, 0x89, | 2867 | 0xad, 0x41, 0xfa, 0xc0, 0x32, 0xc4, 0xfb, 0xba, 0x70, 0x36, 0x54, 0x86, |
| 2890 | 0x60, 0xac, 0xc1, 0x18, 0x5f, 0x82, 0x9f, 0x26, 0x25, 0xe6, 0x9a, 0xc8, | 2868 | 0xd8, 0x01, 0xb1, 0xa7, 0x5a, 0xc1, 0x4d, 0x8e, 0xdb, 0x44, 0xf9, 0xa8, |
| 2891 | 0xa7, 0xfd, 0x5d, 0xaa, 0xec, 0x7e, 0xbe, 0xcc, 0xe2, 0xd2, 0x25, 0x28, | 2869 | 0xc4, 0x95, 0x86, 0x4e, 0xbb, 0xbd, 0x0c, 0x17, 0x2a, 0x18, 0xaf, 0x5a, |
| 2892 | 0xa7, 0xbd, 0x0f, 0x8e, 0xdc, 0xcd, 0xb6, 0x6f, 0xc5, 0x85, 0x74, 0x48, | 2870 | 0xef, 0x13, 0xb5, 0x62, 0x7f, 0x6e, 0x8f, 0x54, 0xf2, 0x9b, 0xd6, 0xeb, |
| 2893 | 0x21, 0x4e, 0xfc, 0x8b, 0xd9, 0xff, 0xf5, 0xcc, 0x98, 0x0b, 0x49, 0x17, | 2871 | 0x7c, 0x39, 0xbf, 0x96, 0xbc, 0x7d, 0x66, 0x6b, 0xe4, 0x3d, 0xe4, 0x30, |
| 2894 | 0x3e, 0x0a, 0xb5, 0x63, 0xaa, 0x2c, 0x8c, 0xa1, 0x44, 0x01, 0xda, 0xab, | 2872 | 0x2f, 0x49, 0x3e, 0xc8, 0xe6, 0xa3, 0xdf, 0x60, 0x5c, 0x34, 0x26, 0xb2, |
| 2895 | 0xeb, 0xac, 0x77, 0x0a, 0x6a, 0xe2, 0x1e, 0x5c, 0x8c, 0x3a, 0xd1, 0x38, | 2873 | 0xce, 0xeb, 0xd6, 0xeb, 0x35, 0xd9, 0x33, 0x3d, 0xf9, 0x3d, 0xc8, 0x5f, |
| 2896 | 0xd7, 0x63, 0xd5, 0xd3, 0x6c, 0xf4, 0x85, 0x77, 0xa2, 0x11, 0xcb, 0xe7, | 2874 | 0x6b, 0x6b, 0x8b, 0x95, 0x5f, 0x98, 0xcf, 0x56, 0xcb, 0xfc, 0xae, 0x32, |
| 2897 | 0x66, 0xc7, 0x8c, 0x3c, 0x6d, 0x19, 0x1e, 0xca, 0xe2, 0xfa, 0xc1, 0xc4, | 2875 | 0x0e, 0xfb, 0x31, 0x7f, 0x5f, 0x86, 0x9e, 0xa1, 0xe9, 0x7e, 0x41, 0x6c, |
| 2898 | 0xe7, 0xc4, 0x9d, 0x52, 0xa3, 0x22, 0x5c, 0x82, 0x7b, 0x87, 0x0c, 0xc1, | 2876 | 0xce, 0x73, 0xd3, 0xd9, 0xc3, 0x8a, 0xb8, 0xbc, 0xbf, 0x75, 0x34, 0xf4, |
| 2899 | 0x64, 0xa3, 0x24, 0xac, 0xcd, 0xdc, 0xa7, 0x94, 0xa0, 0x69, 0x44, 0x30, | 2877 | 0x24, 0xf7, 0xc1, 0xbf, 0xb0, 0xc1, 0xca, 0xa5, 0x90, 0xe3, 0x32, 0xfe, |
| 2900 | 0x5e, 0x7c, 0x35, 0x4d, 0x5f, 0x6d, 0xe3, 0x1e, 0x75, 0xa2, 0x6e, 0xbf, | 2878 | 0x10, 0x3c, 0x35, 0xe8, 0xcf, 0xcb, 0xf0, 0xb3, 0xa4, 0xf8, 0x57, 0x13, |
| 2901 | 0xa5, 0x57, 0xd5, 0xae, 0x98, 0x5d, 0x57, 0xf4, 0x88, 0xce, 0x18, 0xd7, | 2879 | 0x85, 0xa1, 0x12, 0xfa, 0xbb, 0xee, 0xe7, 0x2a, 0x2c, 0xce, 0x5c, 0x86, |
| 2902 | 0xf9, 0x10, 0xed, 0x7e, 0x26, 0xe4, 0x6d, 0xaf, 0xb0, 0x6b, 0x1d, 0xef, | 2880 | 0x4a, 0xea, 0x5e, 0xff, 0xd0, 0xed, 0xf4, 0xfc, 0x86, 0x0f, 0x48, 0x87, |
| 2903 | 0x29, 0x41, 0x4c, 0x8c, 0x03, 0x03, 0x87, 0x03, 0xf8, 0x20, 0x21, 0x9c, | 2881 | 0x14, 0x62, 0xc2, 0x6f, 0xcc, 0x5d, 0x8f, 0x66, 0x9f, 0x39, 0x97, 0x74, |
| 2904 | 0x3f, 0x80, 0x5f, 0x4d, 0x06, 0xf1, 0x2e, 0x63, 0x53, 0x41, 0xdc, 0x1b, | 2882 | 0xe1, 0xa3, 0x50, 0x3b, 0x26, 0x2a, 0xc2, 0x18, 0x48, 0x14, 0xa1, 0x7d, |
| 2905 | 0x79, 0x8e, 0x39, 0xdd, 0xfb, 0xfc, 0x9e, 0x1f, 0xd7, 0x71, 0x8d, 0xfa, | 2883 | 0x56, 0xbd, 0xf5, 0xce, 0x45, 0x4d, 0xdc, 0x83, 0xf3, 0x51, 0x27, 0x9a, |
| 2906 | 0x73, 0xc6, 0x1b, 0x70, 0x65, 0xf2, 0x01, 0x5c, 0xdd, 0xaf, 0xe0, 0x84, | 2884 | 0x66, 0x7b, 0xac, 0x7c, 0x92, 0x8d, 0x76, 0xf1, 0x76, 0x34, 0x42, 0x5f, |
| 2907 | 0xf6, 0x00, 0x2e, 0x8f, 0x75, 0x62, 0xd9, 0x7e, 0x39, 0x87, 0x76, 0x2c, | 2885 | 0xe0, 0xb9, 0xc9, 0x3f, 0x14, 0x68, 0x8b, 0x70, 0x7f, 0x0e, 0xc3, 0xf7, |
| 2908 | 0xa4, 0x32, 0x36, 0x3c, 0x53, 0x6b, 0x76, 0xbd, 0xa8, 0xd7, 0x41, 0x2f, | 2886 | 0x27, 0x3e, 0x27, 0xc6, 0x94, 0x1b, 0x33, 0xc3, 0x65, 0xb8, 0x7b, 0x40, |
| 2909 | 0xf7, 0xea, 0xed, 0xcc, 0x99, 0x04, 0xd3, 0x23, 0x36, 0xd9, 0x33, 0xd9, | 2887 | 0xce, 0x29, 0x48, 0x9d, 0x4a, 0x9b, 0x9a, 0xaf, 0x94, 0x61, 0xc9, 0x90, |
| 2910 | 0xbb, 0x4e, 0x5c, 0xb5, 0x70, 0xfc, 0xee, 0xd8, 0x70, 0x0b, 0xc3, 0xe5, | 2888 | 0xe0, 0xb9, 0x9c, 0xfd, 0x48, 0x87, 0x5c, 0xb1, 0x36, 0xee, 0x51, 0x27, |
| 2911 | 0x39, 0x82, 0x27, 0x0b, 0xf1, 0x7d, 0x26, 0xab, 0x3d, 0xbc, 0xcf, 0x45, | 2889 | 0xea, 0xf7, 0x5a, 0x72, 0x55, 0xed, 0x8a, 0xd9, 0x75, 0x49, 0x8f, 0xe8, |
| 2912 | 0xec, 0x7b, 0x36, 0x5a, 0x80, 0xfc, 0xaa, 0x52, 0x2b, 0x97, 0x29, 0x8c, | 2890 | 0xf4, 0x67, 0x9d, 0xf7, 0x53, 0xef, 0xa7, 0x42, 0xde, 0xf6, 0x99, 0x76, |
| 2913 | 0x07, 0x70, 0x96, 0xba, 0x5b, 0x53, 0xe5, 0xe5, 0x77, 0x89, 0xbb, 0x41, | 2891 | 0xad, 0xe3, 0x57, 0x4a, 0x10, 0xa3, 0x19, 0xa0, 0x6f, 0x24, 0x80, 0x0f, |
| 2914 | 0xe6, 0x2d, 0x15, 0xf8, 0xe0, 0xb6, 0x78, 0xfb, 0x7d, 0xf3, 0x49, 0x0b, | 2892 | 0x12, 0xc2, 0xed, 0x03, 0x78, 0x7f, 0x2c, 0x88, 0x77, 0xe8, 0x87, 0x8a, |
| 2915 | 0x9f, 0xeb, 0xe7, 0x09, 0xff, 0x7a, 0x3d, 0xf1, 0xeb, 0x1a, 0xc1, 0x69, | 2893 | 0xe2, 0xde, 0xc8, 0x33, 0x8c, 0xdd, 0xde, 0xe5, 0x75, 0x61, 0x5c, 0xc7, |
| 2916 | 0xa9, 0x21, 0x96, 0x6a, 0xda, 0x96, 0xbf, 0x80, 0xbc, 0x6f, 0x75, 0xe2, | 2894 | 0x15, 0xca, 0xcf, 0x19, 0x6f, 0xc4, 0xa5, 0xb1, 0x6f, 0xe0, 0xf2, 0x5e, |
| 2917 | 0x3f, 0x17, 0x93, 0x17, 0xbf, 0x18, 0xaa, 0x33, 0xca, 0xa0, 0xf1, 0xbe, | 2895 | 0x05, 0xc7, 0xb4, 0x6f, 0xe0, 0xe2, 0xa1, 0x4e, 0x2c, 0xda, 0x2b, 0x67, |
| 2918 | 0xa9, 0x65, 0x2a, 0x56, 0xf1, 0xaf, 0x9f, 0xf7, 0x05, 0x29, 0xc7, 0x75, | 2896 | 0xf5, 0x8e, 0x86, 0x54, 0xfa, 0x81, 0x27, 0xeb, 0xcc, 0xae, 0x17, 0xf4, |
| 2919 | 0x33, 0xa5, 0xfa, 0xf8, 0xef, 0x05, 0x8c, 0xef, 0xdb, 0x71, 0x3e, 0x56, | 2897 | 0x7a, 0x62, 0x86, 0x57, 0x6f, 0x67, 0x6c, 0x24, 0xf8, 0x1d, 0xb1, 0xc9, |
| 2920 | 0xdf, 0x7e, 0x58, 0xb9, 0x66, 0x1a, 0x55, 0xb5, 0xfc, 0xad, 0x12, 0x17, | 2898 | 0x9e, 0xc9, 0xde, 0x75, 0xe2, 0xb2, 0x85, 0xd9, 0xb7, 0xc7, 0x89, 0x1b, |
| 2921 | 0xa2, 0xde, 0xa9, 0x31, 0xd4, 0x7b, 0x66, 0x94, 0x83, 0xa6, 0xa1, 0xca, | 2899 | 0x78, 0x2d, 0xe3, 0x88, 0x6d, 0xdf, 0x81, 0x57, 0x19, 0x94, 0x6e, 0x61, |
| 2922 | 0xfe, 0xc8, 0x7a, 0x65, 0xfc, 0x62, 0x5e, 0xbf, 0x34, 0xcb, 0x0e, 0x6f, | 2900 | 0x3b, 0x17, 0x71, 0xee, 0xe9, 0x68, 0x11, 0x0a, 0xab, 0xcb, 0x2d, 0x7b, |
| 2923 | 0xe5, 0x5d, 0xce, 0x9b, 0xf6, 0x27, 0xbc, 0xc4, 0x6c, 0x1a, 0xd5, 0xeb, | 2901 | 0x2b, 0x8e, 0x07, 0x70, 0x9a, 0xb2, 0x5b, 0x59, 0xed, 0xe5, 0xb5, 0xf8, |
| 2924 | 0xd5, 0x1e, 0x62, 0x41, 0x44, 0xbd, 0x9b, 0xfd, 0x15, 0xd0, 0xfe, 0xc2, | 2902 | 0xd8, 0x20, 0xe3, 0x93, 0x99, 0xf8, 0xe0, 0x26, 0xdf, 0xfa, 0xaa, 0x85, |
| 2925 | 0xcc, 0x23, 0x4b, 0xa0, 0x5a, 0xf1, 0xa9, 0x15, 0xc9, 0x91, 0xd9, 0xdc, | 2903 | 0x0d, 0x0e, 0xed, 0x81, 0x39, 0x59, 0x6c, 0x20, 0xa0, 0x13, 0x93, 0x25, |
| 2926 | 0x52, 0xec, 0x2e, 0xc3, 0x53, 0xdb, 0xcb, 0xba, 0x4f, 0x3a, 0x89, 0x45, | 2904 | 0x27, 0x58, 0xae, 0x69, 0x1b, 0xbe, 0x4b, 0x1b, 0x4f, 0x87, 0x8e, 0xfd, |
| 2927 | 0x09, 0xe2, 0x78, 0x9c, 0x38, 0x9e, 0x4f, 0x1c, 0xbf, 0xbe, 0xaf, 0x10, | 2905 | 0x49, 0x29, 0x39, 0xf0, 0x0b, 0xa1, 0x7a, 0xa3, 0x02, 0x2b, 0x78, 0x7f, |
| 2928 | 0xe7, 0xf7, 0x35, 0x22, 0x5d, 0x26, 0x63, 0xec, 0x70, 0x72, 0x75, 0xa9, | 2906 | 0x62, 0x91, 0x8a, 0x75, 0xfc, 0xf6, 0xb3, 0x5d, 0x90, 0xf3, 0xb8, 0x6a, |
| 2929 | 0xec, 0x79, 0x85, 0x9a, 0xc1, 0x95, 0x72, 0x8e, 0x13, 0x82, 0x5f, 0x79, | 2907 | 0xa6, 0x54, 0x1f, 0xff, 0xae, 0xa5, 0x2f, 0xdf, 0x84, 0xb3, 0xb1, 0x86, |
| 2930 | 0x71, 0xe6, 0x59, 0xad, 0x76, 0x38, 0xac, 0x33, 0xf6, 0x73, 0x6e, 0xb3, | 2908 | 0xf6, 0x11, 0xe5, 0x8a, 0x69, 0x54, 0xd7, 0xf1, 0xb7, 0x2a, 0x9c, 0x8b, |
| 2931 | 0x3f, 0x97, 0x96, 0x8f, 0x96, 0x4a, 0xc1, 0x87, 0xd7, 0xe7, 0x49, 0x1c, | 2909 | 0x7a, 0x27, 0x0e, 0xa1, 0xc1, 0x33, 0xa5, 0xec, 0x37, 0x0d, 0x55, 0xf6, |
| 2932 | 0x7d, 0x9d, 0xb2, 0x9c, 0xa4, 0x4d, 0x6f, 0xd4, 0x57, 0x48, 0x5f, 0x8f, | 2910 | 0x47, 0xd6, 0x2b, 0xcf, 0xdf, 0xc5, 0xfb, 0x17, 0xa6, 0xe9, 0xe1, 0x8d, |
| 2933 | 0xf7, 0xcb, 0x38, 0xc9, 0x6d, 0x4c, 0xec, 0xa6, 0x85, 0xd5, 0x55, 0x99, | 2911 | 0xf8, 0xca, 0x79, 0x5d, 0xff, 0x84, 0x83, 0x98, 0x4b, 0x86, 0xf5, 0x06, |
| 2934 | 0x48, 0xe8, 0x61, 0xc6, 0xac, 0x10, 0x22, 0x65, 0x41, 0xc6, 0x2a, 0xf9, | 2912 | 0x75, 0x0b, 0xb1, 0x20, 0xa2, 0xde, 0x4e, 0xff, 0x8a, 0xa8, 0x7f, 0x61, |
| 2935 | 0xae, 0xe2, 0x0a, 0xf3, 0xb2, 0xf1, 0xa0, 0x82, 0x8f, 0xbe, 0x22, 0x5c, | 2913 | 0xc6, 0x8b, 0x65, 0x50, 0x2d, 0x5f, 0xd4, 0x8a, 0xe4, 0xd0, 0x74, 0x1e, |
| 2936 | 0xc0, 0xaf, 0x9f, 0x57, 0x84, 0x0b, 0xc8, 0x78, 0xc1, 0x88, 0x52, 0x0b, | 2914 | 0x29, 0x7a, 0x97, 0xe5, 0xa4, 0xed, 0x15, 0xdd, 0xc7, 0x9d, 0xf4, 0x87, |
| 2937 | 0x23, 0xf2, 0x2d, 0x5e, 0x34, 0xd7, 0xc2, 0x16, 0x79, 0x47, 0xa9, 0x86, | 2915 | 0x09, 0x62, 0x78, 0x9c, 0x18, 0x5e, 0x48, 0x0c, 0xbf, 0xba, 0xa7, 0x18, |
| 2938 | 0x71, 0xe7, 0xfe, 0x44, 0xfd, 0x94, 0xcf, 0x4e, 0x8e, 0xf6, 0x27, 0x5f, | 2916 | 0x67, 0xf7, 0x34, 0x21, 0x5d, 0x21, 0xcf, 0xd8, 0xe1, 0xe4, 0xea, 0x52, |
| 2939 | 0x21, 0x37, 0xb3, 0x38, 0x02, 0xf1, 0x3e, 0x87, 0x0d, 0x72, 0xee, 0x76, | 2917 | 0x96, 0x6f, 0xb7, 0xa1, 0xa6, 0x7f, 0xa9, 0x9c, 0x75, 0x85, 0xf8, 0xd0, |
| 2940 | 0xb6, 0x3e, 0x72, 0xe7, 0x72, 0x3d, 0x19, 0xac, 0x2c, 0x15, 0x2e, 0xf7, | 2918 | 0x82, 0x38, 0x11, 0xb1, 0xd5, 0x0e, 0x87, 0xf5, 0x7e, 0xc1, 0x8c, 0x9b, |
| 2941 | 0xff, 0xcc, 0xd6, 0xdb, 0xe4, 0xcf, 0xe1, 0xc8, 0x3f, 0xf0, 0xbb, 0x8c, | 2919 | 0xf4, 0xcf, 0xa5, 0x15, 0xa2, 0xa5, 0x4a, 0xf0, 0xe1, 0xe2, 0x1c, 0xf1, |
| 2942 | 0x17, 0xbf, 0xa3, 0x5d, 0xc4, 0x7f, 0x62, 0x3e, 0x6d, 0xf1, 0xb9, 0x97, | 2920 | 0x99, 0x3f, 0xe5, 0x5c, 0x8e, 0x53, 0xa7, 0x9f, 0xd2, 0xef, 0x91, 0x1a, |
| 2943 | 0xe7, 0xc9, 0xf9, 0x43, 0xc7, 0xe0, 0xd0, 0x3c, 0x39, 0x6f, 0x65, 0x9b, | 2921 | 0x1d, 0xdb, 0xcb, 0x73, 0x12, 0xc3, 0x98, 0xd8, 0x41, 0x0d, 0xab, 0xaf, |
| 2944 | 0xc5, 0x0b, 0x32, 0xb1, 0xf6, 0x5d, 0x73, 0xad, 0x25, 0xeb, 0x91, 0xec, | 2922 | 0x36, 0x91, 0xd0, 0xc3, 0xf4, 0x4f, 0x21, 0x44, 0x2a, 0x82, 0xf4, 0x4b, |
| 2945 | 0x7d, 0x92, 0x43, 0x8b, 0x2c, 0x0a, 0x5e, 0xd1, 0xea, 0xd5, 0xb3, 0x28, | 2923 | 0x72, 0xad, 0xe2, 0x12, 0xe3, 0xaf, 0x4c, 0x50, 0xc1, 0x47, 0x5f, 0x13, |
| 2946 | 0x16, 0x3c, 0x89, 0x48, 0x0f, 0xb3, 0x50, 0xf3, 0xb9, 0x8f, 0xf0, 0x6f, | 2924 | 0xbf, 0xef, 0xd7, 0xcf, 0x2a, 0xa7, 0x67, 0x65, 0xdf, 0x6b, 0x10, 0x8c, |
| 2947 | 0x3f, 0xaf, 0xbf, 0xa1, 0x39, 0x1a, 0xb7, 0x42, 0xfa, 0xb6, 0x36, 0xee, | 2925 | 0x28, 0xb7, 0x30, 0xa2, 0xd0, 0xe2, 0x40, 0xb3, 0x2d, 0x6c, 0xf1, 0xd8, |
| 2948 | 0x55, 0xbd, 0xfb, 0x2c, 0xfc, 0x91, 0x7c, 0x65, 0xc6, 0x6c, 0xaf, 0x94, | 2926 | 0xe4, 0x4c, 0x51, 0x34, 0x74, 0x6f, 0xa2, 0x61, 0xc2, 0x67, 0x27, 0x1f, |
| 2949 | 0x7b, 0x32, 0xfd, 0x5b, 0x28, 0x17, 0xad, 0xfa, 0x49, 0xc6, 0x66, 0x16, | 2927 | 0xfb, 0xe3, 0xaf, 0x91, 0x87, 0x59, 0x7c, 0x60, 0xba, 0xdf, 0x69, 0x02, |
| 2950 | 0xd0, 0x66, 0x04, 0xbb, 0x84, 0x8b, 0x2c, 0xe1, 0xda, 0x55, 0x8c, 0x4c, | 2928 | 0xa6, 0xcb, 0x23, 0x7f, 0x76, 0xd9, 0x93, 0xc5, 0xca, 0x72, 0xe1, 0x6d, |
| 2951 | 0x02, 0x79, 0x83, 0x2e, 0x8b, 0x1b, 0xa9, 0xb5, 0xb5, 0x9e, 0xcd, 0xf8, | 2929 | 0xff, 0xcf, 0x6c, 0xbd, 0x69, 0xfe, 0x79, 0x1c, 0xf9, 0x25, 0xaf, 0xe5, |
| 2952 | 0xe7, 0x79, 0xf2, 0xee, 0xd1, 0x0e, 0x1d, 0xf7, 0xd8, 0xf0, 0xf6, 0x3d, | 2930 | 0x79, 0xb1, 0x3b, 0xea, 0x45, 0xfc, 0x1f, 0xcd, 0xc7, 0x2d, 0xee, 0x76, |
| 2953 | 0xb6, 0xf0, 0xca, 0x6f, 0x3d, 0xd4, 0x90, 0x37, 0x5f, 0xde, 0xff, 0x20, | 2931 | 0x6c, 0x8e, 0x9c, 0xcb, 0x74, 0xf4, 0xff, 0xfd, 0x1c, 0x79, 0x9f, 0xc1, |
| 2954 | 0xc3, 0x93, 0xfa, 0xad, 0x5b, 0x7a, 0x8d, 0xab, 0x19, 0xc3, 0x86, 0x99, | 2932 | 0x36, 0x8d, 0x03, 0x64, 0xfd, 0xea, 0x3b, 0xe6, 0x2a, 0x6b, 0xae, 0xa7, |
| 2955 | 0xe3, 0xaf, 0x0e, 0xfe, 0xd6, 0xfc, 0xa6, 0x23, 0xe2, 0xb1, 0xa3, 0xd6, | 2933 | 0x73, 0xed, 0x24, 0x56, 0x96, 0xb9, 0x28, 0xf8, 0x81, 0xd6, 0xa0, 0x9e, |
| 2956 | 0xd3, 0x8b, 0x1b, 0x66, 0xaa, 0x52, 0xae, 0xcb, 0x1c, 0xf2, 0x6e, 0xa1, | 2934 | 0x46, 0xa9, 0xe0, 0x49, 0x44, 0xea, 0x91, 0xc5, 0x9a, 0xcf, 0x7d, 0x90, |
| 2957 | 0xf4, 0x4b, 0x4c, 0xf3, 0xde, 0x5a, 0x93, 0xf9, 0xb3, 0x6d, 0x95, 0x9d, | 2935 | 0xdf, 0xbb, 0x78, 0xff, 0x35, 0xcd, 0xd1, 0xf4, 0x2c, 0xa4, 0x06, 0x6b, |
| 2958 | 0x7e, 0x91, 0xaf, 0x5d, 0x36, 0xeb, 0xaa, 0x6b, 0xdd, 0x36, 0xa5, 0x8e, | 2936 | 0xe3, 0x5e, 0x35, 0xb8, 0x4f, 0xc3, 0x1f, 0x29, 0x54, 0xa6, 0xcc, 0xf6, |
| 2959 | 0xd6, 0x51, 0x89, 0x57, 0x69, 0xbf, 0xaf, 0x4e, 0x4a, 0xcc, 0x53, 0x71, | 2937 | 0x2a, 0x69, 0x93, 0xad, 0xc5, 0x42, 0x39, 0x6f, 0xe5, 0x49, 0xb2, 0x3a, |
| 2960 | 0x94, 0x7e, 0x3a, 0x56, 0xe7, 0xeb, 0xbc, 0xca, 0x5c, 0xf2, 0x43, 0x72, | 2938 | 0x53, 0x4b, 0x9d, 0x11, 0xec, 0x12, 0xde, 0xb1, 0x80, 0x6b, 0x57, 0x31, |
| 2961 | 0xfc, 0x37, 0x35, 0x6f, 0xfb, 0x19, 0xa9, 0x3b, 0x86, 0x1c, 0x38, 0x17, | 2939 | 0x34, 0x26, 0x1c, 0xc1, 0x65, 0xf1, 0x20, 0xb5, 0xae, 0xce, 0xb3, 0x1e, |
| 2962 | 0xbc, 0x61, 0xd5, 0x82, 0x63, 0x87, 0x54, 0x0c, 0x27, 0x32, 0xfe, 0xfe, | 2940 | 0xca, 0x5c, 0x62, 0x2c, 0xb6, 0xea, 0xb8, 0xd3, 0x86, 0xb7, 0xee, 0xb4, |
| 2963 | 0x1a, 0xfd, 0xf8, 0xd6, 0xd9, 0x05, 0x1d, 0x3d, 0x43, 0xe2, 0x1f, 0x0d, | 2941 | 0x85, 0x97, 0xfe, 0xd9, 0xfd, 0x8d, 0x77, 0xcf, 0x95, 0x77, 0x5f, 0xc8, |
| 2964 | 0x96, 0x1f, 0xdd, 0xaa, 0x15, 0x09, 0x5e, 0x8b, 0x5f, 0x6c, 0x90, 0xde, | 2942 | 0xe6, 0x24, 0x2f, 0xeb, 0x96, 0xba, 0xe1, 0x72, 0xf2, 0xaa, 0x41, 0xc6, |
| 2965 | 0x9d, 0x91, 0x02, 0xb9, 0xcc, 0xe0, 0x6a, 0x72, 0x60, 0x89, 0xb1, 0x01, | 2943 | 0xf2, 0xcb, 0x83, 0xbf, 0x33, 0xbf, 0xed, 0x88, 0x78, 0xec, 0xa8, 0xf3, |
| 2966 | 0xe6, 0xbb, 0x0e, 0xfa, 0xcf, 0x19, 0xe6, 0x1e, 0x94, 0x2d, 0x6c, 0x9a, | 2944 | 0xf4, 0xe0, 0x9a, 0x99, 0xaa, 0xb2, 0xee, 0xcf, 0x95, 0xf7, 0x0d, 0x9c, |
| 2967 | 0xef, 0x32, 0x17, 0x1b, 0x41, 0xbd, 0x7a, 0x0a, 0xeb, 0xc8, 0x63, 0xc9, | 2945 | 0xd2, 0x3f, 0xb9, 0xc8, 0xdd, 0x75, 0x26, 0xe3, 0x64, 0xdb, 0x32, 0x3b, |
| 2968 | 0x71, 0x26, 0x9b, 0xb1, 0xc7, 0xca, 0xa5, 0x7c, 0xea, 0xc3, 0xca, 0x52, | 2946 | 0xed, 0x82, 0x32, 0x33, 0xeb, 0x67, 0xd5, 0xb9, 0x6d, 0x4a, 0x3d, 0xb5, |
| 2969 | 0xae, 0xbf, 0x19, 0xdd, 0x63, 0x0b, 0x70, 0x80, 0xeb, 0x7a, 0x44, 0xff, | 2947 | 0xa3, 0x0a, 0x47, 0xa8, 0xbf, 0x47, 0xc6, 0xc4, 0xff, 0xa9, 0x38, 0x4c, |
| 2970 | 0x2b, 0x94, 0x0f, 0x75, 0x77, 0x96, 0x53, 0x1f, 0x9f, 0x86, 0x8c, 0x0e, | 2948 | 0x3b, 0x3d, 0x54, 0xef, 0xeb, 0xbc, 0xcc, 0xb8, 0xf1, 0x43, 0xf2, 0xf9, |
| 2971 | 0x62, 0xfa, 0x96, 0x53, 0x4a, 0xfd, 0xfa, 0x98, 0xf2, 0x4d, 0xee, 0x87, | 2949 | 0x37, 0x34, 0x6f, 0xfb, 0x29, 0xc9, 0x29, 0x86, 0x1c, 0x38, 0x13, 0xbc, |
| 2972 | 0xd4, 0x47, 0x3c, 0xcc, 0xd3, 0x1f, 0x61, 0x3c, 0xfb, 0x33, 0xec, 0x56, | 2950 | 0x66, 0xe5, 0x78, 0x63, 0x07, 0x54, 0x0c, 0x26, 0xb2, 0xf6, 0xfe, 0x0a, |
| 2973 | 0x95, 0x26, 0x5b, 0x58, 0x38, 0x22, 0xfc, 0xaa, 0x75, 0x76, 0xf0, 0xbf, | 2951 | 0xed, 0xf8, 0xc6, 0x99, 0x03, 0x1d, 0x5b, 0x06, 0xc4, 0x3e, 0x1a, 0x2d, |
| 2974 | 0x40, 0x9f, 0xdb, 0xc0, 0x6b, 0x12, 0xd7, 0xe5, 0x5e, 0x39, 0x37, 0xde, | 2952 | 0x3b, 0xba, 0x91, 0x13, 0x12, 0xbc, 0x16, 0xbb, 0x78, 0x42, 0x6a, 0x71, |
| 2975 | 0x89, 0x93, 0x69, 0xda, 0x75, 0xb4, 0x0f, 0xa7, 0xd2, 0xf2, 0x4c, 0xe1, | 2953 | 0x46, 0x0a, 0x0e, 0xca, 0x77, 0x39, 0xf9, 0xae, 0xf8, 0xd8, 0x00, 0x63, |
| 2976 | 0x58, 0x01, 0xc4, 0x86, 0xec, 0x98, 0xd0, 0x7d, 0x91, 0x52, 0xea, 0xa5, | 2954 | 0x5b, 0x07, 0xed, 0xe7, 0x14, 0xe3, 0x0c, 0xce, 0x2d, 0x6c, 0x9a, 0xef, |
| 2977 | 0x30, 0xe4, 0x8d, 0xac, 0x53, 0x02, 0xe4, 0x72, 0x69, 0x9c, 0xdb, 0xeb, | 2955 | 0x30, 0xee, 0x1a, 0x42, 0x83, 0x7a, 0x02, 0x6b, 0xc8, 0x59, 0xc9, 0x67, |
| 2978 | 0x6d, 0xaf, 0x63, 0xde, 0x18, 0x9d, 0x84, 0xfa, 0xdc, 0xf2, 0x34, 0xce, | 2956 | 0xc6, 0x9a, 0xb1, 0xd3, 0x8a, 0x9b, 0x7c, 0xea, 0x0a, 0x65, 0x21, 0xd7, |
| 2979 | 0x8e, 0x3e, 0x0e, 0x4f, 0xb5, 0xd7, 0xb3, 0x5a, 0x69, 0xc1, 0x8e, 0xc9, | 2957 | 0xdf, 0x8c, 0xee, 0x43, 0xb5, 0xe4, 0x35, 0xa6, 0xb9, 0x5a, 0xff, 0x73, |
| 2980 | 0x7f, 0xaf, 0xc6, 0xe4, 0xe1, 0xb3, 0x5b, 0x60, 0x50, 0xf7, 0xbb, 0xf0, | 2958 | 0x54, 0x0e, 0x74, 0x77, 0x56, 0x52, 0x1e, 0x9f, 0x86, 0x8c, 0x0e, 0x62, |
| 2981 | 0xad, 0xf9, 0xe2, 0xf3, 0xbd, 0x93, 0xc5, 0x58, 0xc4, 0x78, 0xf4, 0xb2, | 2959 | 0xfa, 0x86, 0x13, 0x4a, 0xc3, 0xda, 0x98, 0xf2, 0x6d, 0xee, 0x87, 0xe4, |
| 2982 | 0x15, 0x67, 0x33, 0x7e, 0x54, 0xa3, 0x7d, 0x64, 0x3e, 0x95, 0x8d, 0xe1, | 2960 | 0x41, 0x3c, 0x8c, 0xc7, 0x57, 0xd3, 0x9f, 0xfd, 0x0f, 0xec, 0x50, 0x95, |
| 2983 | 0x7f, 0x58, 0x5f, 0x3f, 0x34, 0x23, 0xaa, 0xe8, 0x4b, 0xc6, 0xd5, 0xa0, | 2961 | 0x25, 0xb6, 0xb0, 0xf0, 0x41, 0xf8, 0xd5, 0xb0, 0x76, 0xea, 0xa2, 0x7d, |
| 2984 | 0x80, 0xf3, 0xec, 0xce, 0xc6, 0xeb, 0x32, 0xed, 0x9f, 0xcc, 0xc7, 0xad, | 2962 | 0x33, 0xbd, 0x4f, 0x23, 0xef, 0x89, 0x5f, 0x97, 0xb6, 0x72, 0xb6, 0xbe, |
| 2985 | 0x39, 0x56, 0xce, 0x97, 0x44, 0x61, 0xa7, 0x95, 0xe7, 0xcb, 0xba, 0x75, | 2963 | 0x13, 0xc7, 0xd3, 0xd4, 0xeb, 0x68, 0x2f, 0x4e, 0xa4, 0x65, 0x4c, 0xe1, |
| 2986 | 0x7c, 0x16, 0x95, 0x5a, 0x87, 0x8a, 0x53, 0xba, 0xe0, 0x48, 0x0b, 0x7d, | 2964 | 0x53, 0x01, 0xc4, 0x06, 0xec, 0x18, 0xd5, 0x7d, 0x91, 0x72, 0xca, 0xa5, |
| 2987 | 0xd5, 0x89, 0x2d, 0x41, 0xba, 0xa3, 0x55, 0xf7, 0x9f, 0xc6, 0x9e, 0xe4, | 2965 | 0x38, 0xe4, 0x8d, 0xac, 0x51, 0x02, 0xe4, 0x6d, 0x69, 0x9c, 0xd9, 0xed, |
| 2988 | 0xbf, 0x9a, 0xcf, 0xd3, 0x8e, 0xd6, 0x90, 0xc3, 0x78, 0x88, 0x03, 0x1b, | 2966 | 0x6d, 0xaf, 0x67, 0x8c, 0x18, 0x1d, 0x83, 0xfa, 0xcc, 0xe2, 0x34, 0x4e, |
| 2989 | 0x43, 0x8f, 0x90, 0x87, 0x72, 0xcd, 0x09, 0x07, 0x31, 0x48, 0x41, 0xa2, | 2967 | 0x0f, 0x3f, 0x04, 0xcf, 0x2c, 0xaf, 0x67, 0xb9, 0xd2, 0x82, 0xad, 0x63, |
| 2990 | 0x91, 0xfe, 0x1f, 0x5a, 0x82, 0x29, 0xeb, 0xfe, 0x4f, 0xe7, 0x65, 0x6a, | 2968 | 0xff, 0x51, 0x2e, 0xc9, 0xc3, 0xb1, 0x5b, 0x60, 0x50, 0xf6, 0xdb, 0xd1, |
| 2991 | 0x8b, 0x67, 0xe6, 0x67, 0x72, 0x43, 0xd1, 0xff, 0x7f, 0x44, 0x7f, 0xaf, | 2969 | 0x3f, 0x57, 0x6c, 0xbe, 0x67, 0xac, 0x14, 0xf3, 0xe8, 0x8f, 0x5e, 0xb2, |
| 2992 | 0x99, 0x9e, 0x72, 0xd1, 0x9f, 0x03, 0x6e, 0xc6, 0xad, 0x03, 0xbc, 0xe7, | 2970 | 0xfc, 0x6c, 0xd6, 0x8e, 0x6a, 0xb4, 0x8f, 0xcc, 0xc7, 0x72, 0x3e, 0xfc, |
| 2993 | 0xc2, 0x5e, 0x07, 0x06, 0xb5, 0x16, 0x0c, 0x4e, 0xc2, 0xf3, 0x29, 0xef, | 2971 | 0xab, 0xe5, 0xf5, 0x77, 0x66, 0x44, 0x15, 0x79, 0xc9, 0x73, 0x35, 0x28, |
| 2994 | 0xf9, 0xf9, 0x68, 0xc7, 0xfc, 0x0c, 0x57, 0x78, 0x1b, 0xdd, 0xd1, 0x17, | 2972 | 0x62, 0x3f, 0x3b, 0x72, 0xfe, 0xba, 0x42, 0xfb, 0xbf, 0xe6, 0x43, 0x56, |
| 2995 | 0xcc, 0x55, 0xe5, 0xb2, 0x5e, 0x39, 0xaf, 0xd3, 0xca, 0xfb, 0x73, 0x75, | 2973 | 0x1f, 0x4f, 0xcd, 0x95, 0xa0, 0x60, 0x9b, 0x15, 0xd3, 0xcb, 0xba, 0x75, |
| 2996 | 0xbe, 0xcd, 0xe6, 0x13, 0x56, 0x9c, 0x78, 0x71, 0xbe, 0xf4, 0xd7, 0x5e, | 2974 | 0x7c, 0x16, 0x95, 0x9c, 0x86, 0x8a, 0x13, 0xba, 0xe0, 0x48, 0x0b, 0x6d, |
| 2997 | 0x4f, 0x98, 0xb8, 0xa2, 0xf7, 0x58, 0xb9, 0xb9, 0x60, 0x43, 0x6f, 0x42, | 2975 | 0xd5, 0x89, 0x0d, 0x41, 0x9a, 0xa3, 0x95, 0xcf, 0x9f, 0xc4, 0xce, 0xe4, |
| 2998 | 0xf6, 0x56, 0x64, 0xfb, 0x66, 0x56, 0x1f, 0x13, 0x55, 0xb7, 0xcb, 0xbd, | 2976 | 0xbf, 0x9b, 0xcf, 0x51, 0x8f, 0x56, 0x92, 0xc3, 0x78, 0x88, 0x03, 0x4f, |
| 2999 | 0x2a, 0x6b, 0xcb, 0xd2, 0xdf, 0xce, 0xf1, 0x7e, 0xb1, 0x65, 0xb1, 0x63, | 2977 | 0x85, 0x56, 0x93, 0x73, 0x72, 0xcd, 0x09, 0x07, 0x31, 0x48, 0x41, 0xa2, |
| 3000 | 0xeb, 0xbd, 0x96, 0xa4, 0xbc, 0xd3, 0xb9, 0x41, 0xfd, 0x1d, 0x9f, 0x21, | 2978 | 0x89, 0xf6, 0x1f, 0x5a, 0x80, 0x09, 0xab, 0x7d, 0xd5, 0xdc, 0x6c, 0x0e, |
| 3001 | 0x75, 0x96, 0x16, 0xce, 0x61, 0x9a, 0x9b, 0xf5, 0x7a, 0xcf, 0x29, 0xfc, | 2979 | 0xf1, 0x83, 0xb9, 0xd9, 0x38, 0x50, 0xe4, 0xff, 0x9f, 0x91, 0xdf, 0x2b, |
| 3002 | 0x31, 0x6d, 0x5b, 0xc7, 0xae, 0x21, 0xa9, 0xc3, 0x7a, 0x14, 0xc7, 0xbe, | 2980 | 0xa6, 0xa7, 0x52, 0xe4, 0xe7, 0x80, 0x9b, 0x7e, 0x6b, 0x1f, 0xdb, 0x9c, |
| 3003 | 0x75, 0xb8, 0xc2, 0xf8, 0xbf, 0xc7, 0xb2, 0x43, 0xc1, 0x15, 0x91, 0x43, | 2981 | 0xdb, 0xed, 0x40, 0xbf, 0xd6, 0x82, 0xfe, 0x31, 0x78, 0x3e, 0x65, 0x9b, |
| 3004 | 0xb0, 0xa5, 0x8d, 0x71, 0x5c, 0x6a, 0xdd, 0x46, 0xa4, 0x26, 0xdc, 0xa9, | 2982 | 0x7f, 0x1a, 0x1e, 0x98, 0x9b, 0xe5, 0x0a, 0x6f, 0xa1, 0x3b, 0xfa, 0xbc, |
| 3005 | 0x7c, 0x58, 0xd7, 0x89, 0x63, 0x21, 0xc3, 0x2c, 0xd5, 0xfc, 0xeb, 0x6b, | 2983 | 0xb9, 0xac, 0x52, 0xd6, 0xeb, 0x84, 0x9b, 0xeb, 0xdd, 0x77, 0x3d, 0x9f, |
| 3006 | 0x6c, 0x28, 0x98, 0x6c, 0xc8, 0xc7, 0xf1, 0x90, 0xf0, 0x47, 0xb8, 0xd2, | 2984 | 0xb7, 0xde, 0x7c, 0xd8, 0xf2, 0x13, 0xbb, 0xe7, 0x4a, 0xbd, 0xec, 0xa7, |
| 3007 | 0x69, 0xaf, 0x31, 0xc7, 0xae, 0xba, 0xbe, 0x97, 0xce, 0x62, 0xa5, 0xad, | 2985 | 0x09, 0x13, 0x97, 0xf4, 0xa3, 0x56, 0x1c, 0x2e, 0xd8, 0xd0, 0x93, 0x90, |
| 3008 | 0x7e, 0xbe, 0xe4, 0x50, 0x49, 0x0b, 0x47, 0xbe, 0x8a, 0x07, 0xad, 0xbd, | 2986 | 0xbd, 0x95, 0xb9, 0x6d, 0xcd, 0xc9, 0xe3, 0xff, 0x54, 0xdf, 0x3c, 0xef, |
| 3009 | 0x55, 0x19, 0x43, 0xa5, 0x0e, 0x7c, 0x2c, 0x74, 0x2d, 0x2a, 0x98, 0x62, | 2987 | 0x65, 0x39, 0x5d, 0x96, 0x5a, 0x75, 0x9e, 0xe3, 0x8b, 0x2e, 0x8b, 0x1e, |
| 3010 | 0x36, 0x35, 0x87, 0xea, 0xd5, 0x5d, 0xb8, 0x87, 0xd8, 0xd5, 0x84, 0x73, | 2988 | 0x5b, 0xef, 0xfd, 0x24, 0xe5, 0xfd, 0xd9, 0x27, 0xd4, 0xdf, 0x73, 0x0c, |
| 3011 | 0xba, 0xf4, 0x3f, 0x8c, 0x6f, 0x3a, 0xac, 0xb3, 0x34, 0x47, 0x43, 0x3b, | 2989 | 0xc9, 0xa9, 0xb4, 0xb0, 0x0f, 0xd3, 0x5c, 0xaf, 0x37, 0x78, 0x4e, 0xe0, |
| 3012 | 0xa2, 0x2b, 0x71, 0x60, 0xc8, 0x50, 0x9c, 0x61, 0x6f, 0x24, 0x46, 0x2e, | 2990 | 0x8f, 0xa8, 0xdb, 0x3a, 0xb6, 0x0f, 0x48, 0xbe, 0xd5, 0xa3, 0x38, 0xf6, |
| 3013 | 0xc4, 0x1c, 0xdd, 0xaa, 0x03, 0x4a, 0x8d, 0x61, 0xb8, 0xa1, 0x13, 0xbb, | 2991 | 0xac, 0xc1, 0x25, 0xfa, 0xff, 0x9d, 0x96, 0x1e, 0x0a, 0xae, 0xc8, 0x3c, |
| 3014 | 0xf4, 0x7c, 0xf4, 0xea, 0x91, 0x82, 0x9e, 0xe5, 0x5d, 0x38, 0xa8, 0x17, | 2992 | 0x04, 0x5b, 0xda, 0xe8, 0xc7, 0xad, 0xb3, 0x2e, 0x91, 0x9a, 0x70, 0xa7, |
| 3015 | 0x1b, 0x8b, 0xc2, 0x06, 0x31, 0x5d, 0xdb, 0x92, 0x84, 0xbf, 0xe5, 0x32, | 2993 | 0xf2, 0x61, 0x7d, 0x27, 0x8e, 0x86, 0x0c, 0xb3, 0x5c, 0xf3, 0xaf, 0x65, |
| 3016 | 0x39, 0xc7, 0x49, 0x78, 0x3b, 0x9a, 0xec, 0xc4, 0xdc, 0x15, 0x0e, 0x57, | 2994 | 0xd0, 0x5f, 0x34, 0xd6, 0x58, 0x88, 0xf1, 0x90, 0xf0, 0x47, 0xb8, 0xd2, |
| 3017 | 0x6c, 0xbc, 0x11, 0x89, 0xc9, 0x4a, 0xd7, 0xee, 0xf1, 0x20, 0xe2, 0x93, | 2995 | 0x69, 0xaf, 0x31, 0xc3, 0xae, 0xba, 0x5e, 0x4e, 0xe7, 0xb0, 0xd2, 0xf6, |
| 3018 | 0xdc, 0x6f, 0xe6, 0xba, 0x8e, 0xf1, 0x95, 0xe4, 0xa0, 0xa2, 0x47, 0x3b, | 2996 | 0xc0, 0x5c, 0x89, 0x97, 0x92, 0x16, 0x8e, 0x7c, 0x1d, 0xf7, 0x59, 0x7b, |
| 3019 | 0x6d, 0xb1, 0x0e, 0xcf, 0xb5, 0x5e, 0x32, 0x9f, 0xf1, 0x0b, 0x7e, 0x2e, | 2997 | 0xab, 0xd2, 0x87, 0x4a, 0xbe, 0xf7, 0x68, 0xe8, 0x4a, 0x54, 0x30, 0xc5, |
| 3020 | 0xc0, 0x56, 0xd5, 0x67, 0x71, 0xca, 0x88, 0xed, 0x0f, 0xf9, 0x87, 0x9d, | 2998 | 0x5c, 0xd2, 0x1c, 0x6a, 0x50, 0xb7, 0xe3, 0x4e, 0x62, 0xd7, 0x12, 0x9c, |
| 3021 | 0x36, 0xf7, 0x7d, 0xd3, 0xf3, 0x75, 0xd1, 0x9b, 0x63, 0x01, 0x0a, 0x1f, | 2999 | 0xd1, 0xa5, 0xae, 0x61, 0x7c, 0xdb, 0x01, 0xa9, 0xc1, 0x1d, 0x0e, 0x6d, |
| 3022 | 0x21, 0x7e, 0xca, 0xbf, 0x45, 0x77, 0xa2, 0x43, 0x13, 0x9b, 0x74, 0xa9, | 3000 | 0x8d, 0x2e, 0xc5, 0xbe, 0x01, 0x43, 0x71, 0x86, 0xbd, 0x91, 0x18, 0xb9, |
| 3023 | 0xf1, 0x35, 0xd0, 0x67, 0xdc, 0x78, 0x47, 0xbd, 0xb5, 0x0f, 0xcf, 0xea, | 3001 | 0x10, 0xe3, 0x71, 0x2b, 0xdf, 0x27, 0xf9, 0x84, 0xc1, 0xc6, 0x4e, 0x6c, |
| 3024 | 0x3e, 0x7d, 0x0c, 0x52, 0xdb, 0x5b, 0xc1, 0x71, 0x52, 0x83, 0x69, 0xc4, | 3002 | 0xd7, 0x0b, 0xd1, 0xa3, 0x47, 0x8a, 0xb6, 0x2c, 0xee, 0xc2, 0x7e, 0xbd, |
| 3025 | 0x4b, 0xd9, 0x9c, 0xc3, 0x63, 0x2b, 0x22, 0xee, 0xe6, 0xe2, 0x88, 0x5c, | 3003 | 0xd4, 0x98, 0x17, 0x36, 0x88, 0xe9, 0xda, 0x86, 0x24, 0xfc, 0x2d, 0x17, |
| 3026 | 0xf7, 0x26, 0x23, 0xb4, 0xd3, 0x6d, 0xc1, 0x19, 0x33, 0x52, 0x6e, 0x74, | 3004 | 0xc9, 0x39, 0x8e, 0xc3, 0xdb, 0xb1, 0xc4, 0x4e, 0xcc, 0xbd, 0xc7, 0xe1, |
| 3027 | 0xca, 0xf9, 0x15, 0x77, 0x78, 0xba, 0xd3, 0x5d, 0xe7, 0xed, 0x98, 0x51, | 3005 | 0x8a, 0x65, 0x9a, 0x90, 0x18, 0xab, 0x72, 0xed, 0xc8, 0x04, 0x11, 0x1f, |
| 3028 | 0x80, 0x73, 0x31, 0xc6, 0x61, 0xeb, 0x7f, 0xb1, 0x28, 0x73, 0x3b, 0x31, | 3006 | 0xe3, 0x7e, 0x33, 0xae, 0x75, 0x64, 0x96, 0x92, 0x83, 0x8a, 0x1c, 0xed, |
| 3029 | 0x12, 0x5c, 0x88, 0xf6, 0x36, 0x79, 0x56, 0x33, 0xfa, 0xf6, 0x9b, 0x66, | 3007 | 0xd4, 0xc5, 0x7a, 0x3c, 0xd3, 0x7a, 0xc1, 0x7c, 0xd2, 0x2f, 0xf8, 0x59, |
| 3030 | 0x71, 0xc8, 0xa7, 0xa6, 0xe1, 0xc4, 0xc3, 0x41, 0x3b, 0x2e, 0xa9, 0x26, | 3008 | 0x8b, 0x67, 0x55, 0x9f, 0xc5, 0x29, 0x23, 0xb6, 0xaf, 0xb2, 0x0f, 0x3b, |
| 3031 | 0x1c, 0xa1, 0x7f, 0x35, 0xc7, 0x19, 0x1f, 0x47, 0xe9, 0x27, 0xbb, 0x69, | 3009 | 0x75, 0xee, 0x55, 0xd3, 0xf3, 0xa8, 0xc8, 0x8d, 0xc1, 0x56, 0xf1, 0x6a, |
| 3032 | 0x63, 0xf2, 0xbe, 0x8f, 0x9f, 0x7e, 0x12, 0xa7, 0x9f, 0x9c, 0x0b, 0xdd, | 3010 | 0xe2, 0xa7, 0xfc, 0x2d, 0xb2, 0x13, 0x19, 0x9a, 0x58, 0xa7, 0x4b, 0x2e, |
| 3033 | 0x97, 0x7d, 0x5f, 0x50, 0x23, 0xaf, 0x98, 0x46, 0xd3, 0x90, 0x8a, 0x4f, | 3011 | 0xaf, 0x91, 0x36, 0xe3, 0xc6, 0xdb, 0xea, 0x8d, 0x7d, 0x78, 0x5a, 0xf7, |
| 3034 | 0x57, 0x4c, 0x23, 0x34, 0x92, 0x93, 0x5d, 0xfc, 0x32, 0x27, 0xbf, 0xf4, | 3012 | 0xe9, 0x87, 0x20, 0x39, 0xbc, 0xff, 0xce, 0xe7, 0x24, 0xdf, 0xd2, 0x84, |
| 3035 | 0x11, 0x45, 0x76, 0x91, 0x51, 0xd6, 0x22, 0xff, 0xce, 0x5d, 0xcb, 0xfd, | 3013 | 0x17, 0x2b, 0xb2, 0xf1, 0x87, 0xc7, 0x56, 0x42, 0xdc, 0xcd, 0xfb, 0x11, |
| 3036 | 0x26, 0x71, 0xd6, 0x89, 0x56, 0x6b, 0x6d, 0x7f, 0x56, 0x93, 0xc1, 0x8c, | 3014 | 0xb9, 0xef, 0x4d, 0x46, 0xa8, 0xa7, 0x1b, 0x83, 0x53, 0x66, 0xa4, 0xd2, |
| 3037 | 0xdc, 0x9a, 0x2e, 0xb9, 0x6f, 0xff, 0x7e, 0xe2, 0x8e, 0xeb, 0x2b, 0xee, | 3015 | 0xe8, 0x94, 0xb3, 0x28, 0xee, 0xf0, 0xea, 0x17, 0xdd, 0xf5, 0xde, 0x8e, |
| 3038 | 0xb8, 0xbe, 0x71, 0xde, 0xed, 0xdf, 0x73, 0x3e, 0x71, 0x4b, 0xaf, 0x1d, | 3016 | 0x29, 0x05, 0x38, 0x13, 0xa3, 0x1f, 0xb6, 0xfe, 0xbb, 0x47, 0xe9, 0xdb, |
| 3039 | 0xba, 0x6f, 0xea, 0x18, 0xd7, 0x3a, 0x67, 0xc9, 0x98, 0x79, 0xa9, 0x4c, | 3017 | 0x89, 0xa1, 0xe0, 0x1d, 0x68, 0x6f, 0x93, 0xb1, 0x9a, 0xd1, 0xbb, 0xd7, |
| 3040 | 0x64, 0x91, 0x3c, 0x36, 0x23, 0xeb, 0xaa, 0xf1, 0xd9, 0xb2, 0xbe, 0x95, | 3018 | 0x34, 0x4b, 0x43, 0x3e, 0x35, 0x0d, 0x27, 0x56, 0x04, 0xed, 0xb8, 0xa0, |
| 3041 | 0xed, 0x19, 0x58, 0x67, 0x7c, 0xe9, 0x37, 0x1a, 0x7e, 0x78, 0xdb, 0xb9, | 3019 | 0x9a, 0x70, 0x84, 0xfe, 0xdd, 0xcc, 0xd0, 0x3f, 0x0e, 0xd3, 0x4e, 0x76, |
| 3042 | 0x43, 0xb1, 0xb5, 0x80, 0xd2, 0x17, 0x93, 0xf7, 0x33, 0x0b, 0xad, 0x77, | 3020 | 0x50, 0xc7, 0xe4, 0x5d, 0x28, 0x3f, 0xed, 0x24, 0x4e, 0x3b, 0x39, 0x13, |
| 3043 | 0xac, 0x55, 0xbf, 0x81, 0x22, 0xbf, 0xb6, 0x65, 0x8e, 0xad, 0x0b, 0xce, | 3021 | 0x9a, 0x9f, 0x7b, 0x57, 0x52, 0x23, 0xaf, 0x98, 0xc4, 0x92, 0x01, 0x15, |
| 3044 | 0xa5, 0x5a, 0xc7, 0xb7, 0x94, 0x24, 0xe2, 0xe3, 0xde, 0xc0, 0x18, 0x75, | 3022 | 0x9f, 0xde, 0x33, 0x89, 0xd0, 0x50, 0x7e, 0xee, 0x62, 0x97, 0xf9, 0xf9, |
| 3045 | 0x15, 0x1b, 0xbf, 0xce, 0x5c, 0xbb, 0x0b, 0xcf, 0x85, 0x1c, 0x46, 0x61, | 3023 | 0x4b, 0x6d, 0x50, 0xe6, 0x2e, 0x73, 0x94, 0xb5, 0xc8, 0xdf, 0xf9, 0x7b, |
| 3046 | 0x58, 0xce, 0x82, 0xae, 0xc2, 0xae, 0x91, 0xbf, 0xc2, 0xe6, 0xa4, 0x70, | 3024 | 0xf9, 0xdf, 0xc4, 0xcf, 0x3a, 0xd1, 0x6a, 0xad, 0xed, 0x2f, 0x6a, 0xb2, |
| 3047 | 0xfc, 0x05, 0xe8, 0x99, 0xb4, 0xe1, 0x04, 0xed, 0xbb, 0x8f, 0xcf, 0x21, | 3025 | 0x98, 0x91, 0x5f, 0x93, 0xeb, 0x96, 0xeb, 0x4b, 0xb7, 0x5c, 0x3f, 0xee, |
| 3048 | 0xfe, 0xb9, 0x53, 0x90, 0xf7, 0x6b, 0x1a, 0x98, 0x37, 0xeb, 0xd6, 0x67, | 3026 | 0xbe, 0xf9, 0x7a, 0xfb, 0x9c, 0x9b, 0xaf, 0xf3, 0x36, 0x71, 0x43, 0xae, |
| 3049 | 0xc7, 0xc8, 0xcf, 0xb0, 0x39, 0x6a, 0xe2, 0x53, 0x9d, 0xb1, 0x47, 0x13, | 3027 | 0x1d, 0xba, 0x6f, 0xe2, 0x28, 0xd7, 0x3a, 0x63, 0xc1, 0x21, 0xf3, 0x42, |
| 3050 | 0xf9, 0x1c, 0xd0, 0xca, 0x5b, 0x2d, 0x2c, 0x7d, 0x32, 0xce, 0xfd, 0xac, | 3028 | 0x85, 0xcc, 0x45, 0x62, 0xd6, 0xec, 0x5c, 0x97, 0x65, 0xa6, 0xcf, 0xf5, |
| 3051 | 0x16, 0x5f, 0x5d, 0x49, 0x9f, 0x55, 0xf0, 0x99, 0xf4, 0x27, 0xcb, 0x29, | 3029 | 0xcd, 0x5c, 0x6d, 0xc0, 0x3a, 0xf7, 0x4b, 0xbb, 0xd1, 0xe4, 0x1d, 0xdf, |
| 3052 | 0x33, 0xb9, 0xe1, 0xf1, 0xe8, 0x76, 0x8c, 0x5a, 0xfd, 0x67, 0xad, 0xaf, | 3030 | 0xdc, 0x3b, 0x74, 0xd9, 0xb3, 0x88, 0xa5, 0xe1, 0x80, 0xd2, 0x1b, 0x33, |
| 3053 | 0xc6, 0x1e, 0x79, 0xb1, 0x8c, 0x3c, 0x3b, 0xa1, 0xfb, 0xdb, 0x2f, 0x28, | 3031 | 0xcc, 0x19, 0x5a, 0xb1, 0x21, 0xef, 0x4a, 0xa9, 0x7e, 0x03, 0x25, 0x7e, |
| 3054 | 0xf0, 0x94, 0x84, 0xfd, 0x8c, 0x33, 0x5f, 0xe2, 0x37, 0xba, 0xd4, 0xd8, | 3032 | 0x6d, 0xc3, 0x0c, 0x5b, 0x17, 0x9c, 0x0b, 0xb5, 0x8e, 0x3f, 0x53, 0x92, |
| 3055 | 0x74, 0xd7, 0x5a, 0xda, 0xfb, 0xbe, 0x91, 0x80, 0x55, 0x33, 0xf8, 0xe1, | 3033 | 0x88, 0x67, 0xbc, 0x81, 0x43, 0x94, 0x55, 0x2c, 0x73, 0x95, 0x71, 0x75, |
| 3056 | 0x5d, 0x6b, 0x1a, 0x99, 0x77, 0xab, 0x33, 0xf5, 0xc7, 0x9f, 0xe1, 0x48, | 3034 | 0x17, 0x9e, 0x09, 0x39, 0x8c, 0xe2, 0xb0, 0xd7, 0x3d, 0x5f, 0x59, 0x86, |
| 3057 | 0xda, 0x85, 0xa7, 0xe2, 0x1e, 0x65, 0xd1, 0x3e, 0x15, 0x0f, 0xc5, 0xbd, | 3035 | 0xed, 0x43, 0x7f, 0x8e, 0xf5, 0x49, 0xe1, 0xf8, 0xb5, 0xd8, 0x32, 0x66, |
| 3058 | 0x53, 0x4d, 0x76, 0xf2, 0x8f, 0x65, 0x73, 0x38, 0x9f, 0x82, 0x1f, 0x2c, | 3036 | 0xc3, 0x31, 0xea, 0x77, 0x2f, 0xc7, 0x21, 0xfe, 0xb9, 0x53, 0x90, 0xb3, |
| 3059 | 0x95, 0x58, 0xf0, 0x47, 0x30, 0xaa, 0x23, 0x9c, 0x13, 0xc5, 0x79, 0xcb, | 3037 | 0x79, 0x8d, 0x8c, 0x91, 0x75, 0xeb, 0xb3, 0x75, 0xe8, 0x75, 0xac, 0x8f, |
| 3060 | 0xbd, 0xea, 0x11, 0x9b, 0xcf, 0xfd, 0x1b, 0xec, 0x80, 0x7d, 0xfc, 0x11, | 3038 | 0x9a, 0xf8, 0x54, 0xa7, 0xef, 0xd1, 0x64, 0x7e, 0x12, 0x3b, 0xb7, 0x5a, |
| 3061 | 0x74, 0x53, 0xfe, 0x35, 0x71, 0xe9, 0x69, 0xd5, 0x03, 0x65, 0xcd, 0xd8, | 3039 | 0x58, 0xfa, 0x48, 0x9c, 0xfb, 0x39, 0x4b, 0x6c, 0x75, 0x29, 0x6d, 0x56, |
| 3062 | 0x3d, 0x26, 0xbe, 0x09, 0xa3, 0x2a, 0x0c, 0x4f, 0x65, 0xd8, 0xbf, 0x10, | 3040 | 0xc1, 0x67, 0x52, 0x77, 0xac, 0xe4, 0x9c, 0xc9, 0x0d, 0xc7, 0xa3, 0x9b, |
| 3063 | 0x85, 0x5f, 0x92, 0x6b, 0x4f, 0x4b, 0xfe, 0xb9, 0xa5, 0xd4, 0x66, 0x32, | 3041 | 0x30, 0x1c, 0x35, 0xe4, 0x7d, 0xc0, 0xde, 0x1a, 0x7b, 0xe4, 0x85, 0x0a, |
| 3064 | 0x7f, 0xb9, 0x2f, 0xdb, 0xab, 0x58, 0x89, 0x1d, 0x43, 0x52, 0x87, 0x27, | 3042 | 0xf2, 0xec, 0x84, 0xee, 0x6f, 0x3f, 0xa7, 0xc0, 0x53, 0x16, 0xf6, 0xd3, |
| 3065 | 0x6e, 0xeb, 0xcc, 0x83, 0xca, 0xb4, 0xc0, 0x46, 0x9b, 0xf4, 0x87, 0xb6, | 3043 | 0xcf, 0x7c, 0x89, 0xdf, 0xea, 0x92, 0x4f, 0xd3, 0x5d, 0xab, 0xa8, 0xef, |
| 3066 | 0xc3, 0x17, 0xdb, 0x8e, 0x40, 0x4c, 0x7c, 0x56, 0x53, 0x3b, 0x10, 0x39, | 3044 | 0x7b, 0x86, 0x02, 0x56, 0x7e, 0xe0, 0xef, 0x6e, 0x9b, 0xbf, 0x90, 0x1a, |
| 3067 | 0x2b, 0xb5, 0xbf, 0x45, 0x21, 0x3f, 0xe5, 0xf2, 0xf7, 0x55, 0xda, 0x75, | 3045 | 0xb3, 0x9e, 0xcb, 0x35, 0xbe, 0x8e, 0x83, 0x69, 0x17, 0x1e, 0x8b, 0x7b, |
| 3068 | 0xd7, 0x6b, 0x13, 0x2a, 0xa6, 0xd4, 0x4c, 0x1e, 0x39, 0x96, 0xd4, 0xd6, | 3046 | 0x94, 0x79, 0x7b, 0x54, 0xdc, 0x1f, 0xf7, 0x4e, 0x2c, 0xb1, 0x93, 0x7f, |
| 3069 | 0xe7, 0xdb, 0xe4, 0x0c, 0xc5, 0x55, 0xeb, 0x3d, 0xeb, 0x88, 0xed, 0x9f, | 3047 | 0x2c, 0x9a, 0xc1, 0xfe, 0x14, 0xfc, 0x68, 0xa1, 0xf8, 0x82, 0xff, 0x0a, |
| 3070 | 0x89, 0x47, 0xcd, 0x18, 0xd8, 0xff, 0x3e, 0x63, 0x90, 0x3c, 0xe3, 0x77, | 3048 | 0x63, 0x56, 0x84, 0x7d, 0xa2, 0xb4, 0x60, 0xb1, 0x57, 0x3d, 0x68, 0xf3, |
| 3071 | 0xcc, 0xaf, 0x9d, 0x58, 0xdd, 0xe6, 0xc1, 0x83, 0x71, 0xa9, 0x9d, 0xae, | 3049 | 0xb9, 0x7f, 0x8b, 0xad, 0xb0, 0x67, 0x56, 0xa3, 0x9b, 0xf3, 0x5f, 0x19, |
| 3072 | 0xaf, 0xca, 0x9c, 0x01, 0x91, 0xef, 0x0e, 0x74, 0xe8, 0x04, 0xd9, 0xea, | 3050 | 0x97, 0x9a, 0x55, 0x03, 0x50, 0xd1, 0x8c, 0x1d, 0x87, 0xc4, 0x36, 0xe5, |
| 3073 | 0x2f, 0xcc, 0x4a, 0x2b, 0x2f, 0xfd, 0xbf, 0x19, 0x9b, 0x49, 0xe4, 0x2d, | 3051 | 0x9d, 0x75, 0x78, 0xaa, 0xc2, 0x2d, 0x77, 0xa0, 0xf8, 0x4b, 0x72, 0xed, |
| 3074 | 0x14, 0x1f, 0xef, 0x9d, 0x64, 0x02, 0x69, 0xd9, 0x5d, 0x15, 0xbf, 0xcb, | 3052 | 0x49, 0x89, 0x3f, 0x37, 0x94, 0xdb, 0x4c, 0xc6, 0x2f, 0xf3, 0x73, 0x35, |
| 3075 | 0x5c, 0xda, 0x81, 0xed, 0xd8, 0x56, 0x25, 0x7c, 0xe6, 0xc9, 0x89, 0xd9, | 3053 | 0x89, 0xa5, 0xd8, 0x3a, 0x20, 0xf9, 0x76, 0xe2, 0xb6, 0xce, 0x38, 0xa8, |
| 3076 | 0xf7, 0xe7, 0xea, 0x32, 0x95, 0x59, 0x4e, 0x95, 0xb3, 0x37, 0xe9, 0x05, | 3054 | 0x42, 0x0b, 0x3c, 0x65, 0x93, 0x3a, 0xd0, 0x26, 0xf8, 0x62, 0x9b, 0x10, |
| 3077 | 0x46, 0x94, 0x27, 0xa2, 0x2d, 0xca, 0xda, 0xa8, 0xf4, 0x03, 0x6d, 0xd1, | 3055 | 0x88, 0x89, 0xcd, 0x6a, 0x6a, 0x07, 0x22, 0xa7, 0x25, 0xcf, 0x37, 0x2f, |
| 3078 | 0x22, 0x72, 0x18, 0xdf, 0x52, 0x13, 0xdf, 0x0e, 0x1d, 0x57, 0x76, 0x5a, | 3056 | 0xe4, 0xe7, 0xbc, 0xfc, 0xbd, 0x55, 0x76, 0xdd, 0xf5, 0xca, 0xa8, 0x8a, |
| 3079 | 0xe7, 0x66, 0xe5, 0xac, 0x2b, 0x50, 0x3e, 0xd1, 0xac, 0xec, 0x8a, 0x7e, | 3057 | 0x09, 0x35, 0x1b, 0x47, 0x1e, 0x4a, 0x6a, 0x6b, 0x0b, 0x6d, 0x72, 0x26, |
| 3080 | 0x62, 0x6e, 0xb4, 0x7a, 0xf0, 0x79, 0xd6, 0x79, 0x9c, 0xfc, 0x09, 0x17, | 3058 | 0xe2, 0xb2, 0x19, 0xb1, 0xfa, 0x55, 0x6a, 0x51, 0xde, 0x8c, 0xbe, 0xbd, |
| 3081 | 0xca, 0x8e, 0xc8, 0xf9, 0x41, 0x0d, 0x15, 0x13, 0x8f, 0x91, 0xb7, 0x0a, | 3059 | 0xef, 0xd2, 0x07, 0xc9, 0x18, 0xbf, 0x37, 0x9d, 0xd4, 0xcb, 0xe5, 0x6d, |
| 3082 | 0xd7, 0x31, 0x5a, 0x1c, 0xd6, 0xb9, 0xb6, 0xe6, 0x97, 0x72, 0xe7, 0xda, | 3060 | 0x1e, 0xdc, 0x17, 0x97, 0x3c, 0x69, 0x4f, 0x75, 0xf6, 0x4c, 0x87, 0x5c, |
| 3083 | 0x1c, 0x31, 0x79, 0x1b, 0xd9, 0xfa, 0x8f, 0xb9, 0xd2, 0x51, 0xe6, 0x4a, | 3061 | 0x3b, 0xd0, 0xa1, 0x13, 0x64, 0x67, 0x7d, 0x61, 0x56, 0x59, 0x71, 0xe9, |
| 3084 | 0x66, 0xd3, 0xb7, 0x43, 0xc6, 0xee, 0x0a, 0x78, 0x03, 0xe5, 0x36, 0xc3, | 3062 | 0x97, 0x59, 0x9d, 0x49, 0xdc, 0x7d, 0x87, 0xd8, 0x78, 0xcf, 0x58, 0x83, |
| 3085 | 0x94, 0x7a, 0xce, 0x6b, 0x24, 0x8c, 0xeb, 0x6a, 0x0d, 0x3c, 0x5c, 0x2b, | 3063 | 0x3b, 0xab, 0x77, 0x4d, 0xbc, 0x96, 0xbe, 0xb4, 0x7d, 0x9b, 0xe4, 0x34, |
| 3086 | 0xef, 0x1f, 0xca, 0xbb, 0xc7, 0x5d, 0x38, 0x1a, 0xea, 0xc2, 0x2f, 0xf5, | 3064 | 0x2e, 0xf9, 0xcc, 0x23, 0xa3, 0xd3, 0xdb, 0xe7, 0x73, 0x30, 0x55, 0x39, |
| 3087 | 0x2e, 0xec, 0xd1, 0xe5, 0x4c, 0x43, 0x31, 0x65, 0xd5, 0xa6, 0xa2, 0xd0, | 3065 | 0x4e, 0x95, 0xd7, 0x37, 0xa9, 0xf5, 0x45, 0x94, 0x87, 0xa3, 0x2d, 0xca, |
| 3088 | 0xf4, 0xb4, 0xa2, 0x9d, 0xb9, 0x0e, 0xef, 0x01, 0x9f, 0xe2, 0x35, 0x56, | 3066 | 0xaa, 0xa8, 0xd4, 0xfb, 0x6c, 0xd1, 0x12, 0xeb, 0x5c, 0xab, 0x89, 0xef, |
| 3089 | 0x29, 0x1a, 0xae, 0x8e, 0x7b, 0x67, 0x4a, 0xe9, 0x03, 0x37, 0xc6, 0x03, | 3067 | 0x85, 0xc6, 0x95, 0x6d, 0xd6, 0x99, 0x59, 0x43, 0x49, 0x36, 0x02, 0x95, |
| 3090 | 0x98, 0x21, 0xae, 0x26, 0x27, 0xe5, 0xfc, 0xc9, 0x02, 0x0c, 0x4d, 0x7e, | 3068 | 0xa3, 0xcd, 0xca, 0xf6, 0xe8, 0x27, 0xe6, 0x53, 0x56, 0x5d, 0x7d, 0xa6, |
| 3091 | 0x4d, 0xb8, 0x81, 0x41, 0x4c, 0xb2, 0xce, 0x48, 0x3e, 0x2f, 0xbd, 0x4e, | 3069 | 0x75, 0xbe, 0xa6, 0x70, 0xd4, 0x85, 0x8a, 0x83, 0x25, 0x28, 0x18, 0xd4, |
| 3092 | 0x67, 0x30, 0xcb, 0x61, 0x0c, 0x65, 0x53, 0x43, 0x09, 0x6e, 0x30, 0x3a, | 3070 | 0x30, 0x73, 0xf4, 0x41, 0xf2, 0x56, 0xe1, 0x3a, 0x46, 0x8b, 0xc3, 0x3a, |
| 3093 | 0xfd, 0x6d, 0xba, 0x93, 0xf9, 0x1c, 0xde, 0xa8, 0x81, 0xfd, 0x3b, 0x6e, | 3071 | 0xa3, 0xf6, 0xfa, 0xf5, 0x33, 0x6a, 0x0e, 0xe2, 0x82, 0x01, 0xeb, 0x1f, |
| 3094 | 0xd4, 0x25, 0xe7, 0xe0, 0x44, 0x5d, 0x39, 0xf2, 0x70, 0x6c, 0xf4, 0x45, | 3072 | 0x63, 0xa5, 0xc3, 0x8c, 0x95, 0xcc, 0x25, 0xdf, 0x0b, 0x19, 0x3b, 0x66, |
| 3095 | 0x72, 0xfc, 0xee, 0xf6, 0x52, 0xe6, 0xa7, 0x13, 0xa3, 0x4e, 0xa4, 0x52, | 3073 | 0xc2, 0x1b, 0xa8, 0xb4, 0x19, 0xa6, 0xe4, 0x6e, 0x5e, 0x21, 0x61, 0x5c, |
| 3096 | 0x52, 0x73, 0xb0, 0x7a, 0x96, 0xd3, 0x0e, 0xfa, 0x52, 0x7f, 0x02, 0x75, | 3074 | 0x53, 0x67, 0x60, 0x45, 0x9d, 0xbc, 0x9b, 0xe9, 0x30, 0xec, 0xe1, 0x2e, |
| 3097 | 0x35, 0x61, 0x7f, 0xb2, 0xc6, 0xae, 0x72, 0x8e, 0x4a, 0xa4, 0xd2, 0x1a, | 3075 | 0x1c, 0x0e, 0x75, 0xe1, 0x3d, 0xbd, 0x0b, 0x3b, 0xf5, 0x62, 0xa3, 0x3c, |
| 3098 | 0x3f, 0x01, 0x7e, 0x82, 0xfc, 0x34, 0xe2, 0xdb, 0xf4, 0xd9, 0x32, 0xe2, | 3076 | 0x5c, 0x2a, 0x67, 0xd9, 0x27, 0xa2, 0xd0, 0xf4, 0xb4, 0xa2, 0x9d, 0xba, |
| 3099 | 0xed, 0xf7, 0xd3, 0x25, 0xf8, 0x24, 0xa9, 0x05, 0x74, 0xda, 0xc1, 0x28, | 3077 | 0x0a, 0xef, 0x3e, 0x9f, 0xe2, 0x35, 0x96, 0x29, 0x1a, 0x2e, 0x67, 0xbc, |
| 3100 | 0x73, 0x04, 0xc3, 0xd2, 0x53, 0x09, 0xae, 0xd3, 0x4f, 0x5f, 0x0e, 0x95, | 3078 | 0x53, 0xe5, 0xb4, 0x81, 0x6b, 0x99, 0x00, 0xa6, 0x88, 0xab, 0xc9, 0x31, |
| 3101 | 0xc0, 0x4c, 0xdd, 0x2d, 0x27, 0x94, 0xdc, 0x16, 0x6a, 0x61, 0x58, 0xf8, | 3079 | 0x39, 0x4f, 0x52, 0x8b, 0x81, 0xb1, 0xff, 0x29, 0xdc, 0xc0, 0x20, 0x26, |
| 3102 | 0xe2, 0x31, 0x25, 0x95, 0x3d, 0xf3, 0xf5, 0xea, 0x38, 0xda, 0xcb, 0xc3, | 3080 | 0x59, 0x67, 0x2a, 0x9f, 0x93, 0x5a, 0xa6, 0x33, 0x98, 0xe3, 0x30, 0x86, |
| 3103 | 0xae, 0xe0, 0xea, 0xb8, 0xfd, 0x13, 0x79, 0x9f, 0x75, 0x43, 0x83, 0xbc, | 3081 | 0xb2, 0xae, 0xb1, 0x0c, 0xd7, 0xe8, 0x9d, 0x7e, 0x98, 0xee, 0x64, 0x3c, |
| 3104 | 0xf3, 0xe4, 0x0a, 0x3e, 0x3d, 0xe1, 0x0a, 0xae, 0x8f, 0x1f, 0x53, 0x28, | 3082 | 0x87, 0xd7, 0x6a, 0x60, 0xff, 0xbe, 0x1b, 0xf5, 0xc9, 0x19, 0x38, 0x56, |
| 3105 | 0xcf, 0x81, 0x1a, 0xbb, 0x2b, 0xf8, 0xe4, 0xc4, 0xb1, 0x85, 0x99, 0xbc, | 3083 | 0x5f, 0x89, 0x02, 0x1c, 0x1d, 0xee, 0x20, 0xc7, 0xef, 0x6e, 0x2f, 0x67, |
| 3106 | 0x0f, 0xca, 0xd3, 0xb5, 0x06, 0x6d, 0x8c, 0x79, 0xef, 0x32, 0xe9, 0xcb, | 3084 | 0x7c, 0x3a, 0x3a, 0xec, 0x44, 0x2a, 0x25, 0x39, 0x07, 0xab, 0x36, 0x39, |
| 3107 | 0x68, 0x9d, 0x57, 0xec, 0x85, 0x46, 0x4d, 0xd8, 0xeb, 0xa9, 0xb1, 0xcb, | 3085 | 0xe9, 0xa0, 0x2d, 0xed, 0x4a, 0xa0, 0xbe, 0x26, 0xec, 0x4f, 0xd6, 0xd8, |
| 3108 | 0xd9, 0x90, 0x69, 0xc4, 0x93, 0xf2, 0xae, 0x97, 0xd8, 0xfe, 0x3f, 0x99, | 3086 | 0x55, 0xf6, 0x51, 0x85, 0x54, 0x5a, 0xe3, 0x27, 0xc0, 0x4f, 0x90, 0x9f, |
| 3109 | 0x46, 0x99, 0x9c, 0xf5, 0xe8, 0x44, 0x5c, 0x2b, 0x67, 0xee, 0x24, 0x67, | 3087 | 0x26, 0x7c, 0x8f, 0x36, 0x5b, 0x41, 0xbc, 0x7d, 0x35, 0x5d, 0x86, 0x4f, |
| 3110 | 0xcd, 0x8f, 0x86, 0xa2, 0xb1, 0x62, 0x79, 0x77, 0xb6, 0xe9, 0x7b, 0x21, | 3088 | 0x92, 0x5a, 0x40, 0xa7, 0x1e, 0x0c, 0x33, 0x46, 0x30, 0x2c, 0x39, 0x95, |
| 3111 | 0x6f, 0xcb, 0xa0, 0x62, 0x3c, 0x5e, 0x04, 0xd9, 0xd7, 0x2e, 0xe2, 0xb7, | 3089 | 0xe1, 0x2a, 0xed, 0xf4, 0xa5, 0x50, 0x19, 0xcc, 0xd4, 0xed, 0x62, 0x42, |
| 3112 | 0xa6, 0x3a, 0x15, 0x6f, 0x63, 0x0f, 0x02, 0x38, 0x91, 0x16, 0x5d, 0x07, | 3090 | 0x79, 0xff, 0x25, 0x7f, 0x0e, 0x33, 0x5b, 0x5f, 0x3d, 0x92, 0x81, 0xf2, |
| 3113 | 0xe5, 0x8c, 0xba, 0xa5, 0xeb, 0x5b, 0x67, 0xae, 0x33, 0xb6, 0xb3, 0x2d, | 3091 | 0x78, 0x9d, 0x41, 0x7d, 0x61, 0x0c, 0xbb, 0x48, 0x6a, 0x29, 0x5a, 0xe7, |
| 3114 | 0xea, 0xe0, 0x5f, 0xb1, 0x17, 0x1b, 0x63, 0x0a, 0xe3, 0x8a, 0x65, 0x33, | 3092 | 0x25, 0x7b, 0xb1, 0x51, 0x13, 0xf6, 0x7a, 0x6a, 0xec, 0x1a, 0xce, 0xa5, |
| 3115 | 0xb7, 0x64, 0x5c, 0x57, 0xdb, 0x85, 0xc9, 0x50, 0xa1, 0xbc, 0x77, 0xcd, | 3093 | 0x27, 0x11, 0x4f, 0xca, 0xbb, 0x6d, 0xa2, 0xc7, 0xef, 0x9b, 0x46, 0x85, |
| 3116 | 0xb8, 0xee, 0x0d, 0x7c, 0xa2, 0x58, 0xf1, 0xdc, 0x28, 0x62, 0x9c, 0x7d, | 3094 | 0x9c, 0xc9, 0xe8, 0x44, 0x5c, 0xab, 0x64, 0x1c, 0x24, 0xef, 0x3e, 0x1e, |
| 3117 | 0x61, 0xfc, 0xef, 0xcc, 0xf6, 0x6a, 0xc1, 0x2b, 0x3b, 0xc7, 0x5e, 0xc7, | 3095 | 0x0e, 0x45, 0x63, 0xa5, 0xf2, 0x9e, 0xf0, 0x92, 0x97, 0x43, 0xde, 0x96, |
| 3118 | 0x6b, 0xa9, 0x5b, 0xe3, 0x5a, 0x38, 0xae, 0x90, 0xe3, 0x8a, 0xc2, 0x92, | 3096 | 0x7e, 0xc5, 0x78, 0xa8, 0xc4, 0x7a, 0xaf, 0xa3, 0x8b, 0x58, 0xac, 0xa9, |
| 3119 | 0x3b, 0x7a, 0xf5, 0xb5, 0x8a, 0xe6, 0x29, 0x50, 0xa4, 0x57, 0xa6, 0xe1, | 3097 | 0x4e, 0xc5, 0xdb, 0xb4, 0x05, 0x01, 0x1c, 0x4b, 0x8b, 0xdc, 0x28, 0xa7, |
| 3120 | 0xbd, 0xf4, 0xe4, 0x42, 0xc9, 0x79, 0x7b, 0x27, 0xcb, 0xb1, 0x6e, 0xaf, | 3098 | 0xb1, 0xac, 0xdc, 0x6e, 0x9c, 0x9d, 0xce, 0xea, 0xc1, 0xc6, 0xa8, 0x83, |
| 3121 | 0xd9, 0xb4, 0x68, 0xa9, 0xd9, 0x94, 0x0e, 0x45, 0xcd, 0x97, 0xab, 0x64, | 3099 | 0xdf, 0xb2, 0xf7, 0x72, 0xae, 0x95, 0x3e, 0xc2, 0xda, 0xff, 0x9f, 0xdf, |
| 3122 | 0x4f, 0xa5, 0xff, 0x27, 0x63, 0x34, 0xd5, 0xc7, 0x5c, 0xf3, 0x6b, 0x7a, | 3100 | 0x91, 0x3b, 0xbf, 0xda, 0x5e, 0x19, 0x76, 0x05, 0x97, 0xc7, 0xed, 0x9f, |
| 3123 | 0x6f, 0xf6, 0xcc, 0x2e, 0xed, 0x9a, 0xcf, 0x38, 0x9d, 0x12, 0x3b, 0xd9, | 3101 | 0xc8, 0xfb, 0xc8, 0x4f, 0x34, 0xca, 0x7b, 0x6b, 0xae, 0xe0, 0xe3, 0xa3, |
| 3124 | 0xd1, 0xee, 0x62, 0x3e, 0x2a, 0xef, 0x87, 0x1e, 0xe5, 0xfe, 0x1f, 0x49, | 3102 | 0xae, 0xe0, 0xda, 0xf8, 0x51, 0x85, 0xf2, 0xda, 0x57, 0x63, 0x77, 0x05, |
| 3125 | 0xfd, 0xcd, 0x42, 0x39, 0xc3, 0x2e, 0x67, 0x08, 0x80, 0xff, 0x0f, 0x1d, | 3103 | 0x1f, 0xb9, 0xd1, 0x9e, 0xfb, 0xde, 0x85, 0xb1, 0x50, 0xb1, 0xa1, 0x86, |
| 3126 | 0xab, 0x22, 0x97, 0x70, 0x78, 0x00, 0x00, 0x00 }; | 3104 | 0xc5, 0xa7, 0x7b, 0x03, 0x9f, 0x28, 0x96, 0x2f, 0x37, 0x4a, 0xe8, 0x63, |
| 3105 | 0x9f, 0xcf, 0x8c, 0x9b, 0xed, 0xb3, 0x04, 0xab, 0xec, 0x1c, 0xeb, 0x2a, | ||
| 3106 | 0x5e, 0x49, 0xdd, 0x78, 0xae, 0x85, 0xcf, 0x15, 0xf3, 0xb9, 0x92, 0xb0, | ||
| 3107 | 0xc4, 0x8d, 0x5e, 0x7d, 0x95, 0xa2, 0x79, 0x8a, 0x14, 0xa9, 0x87, 0x69, | ||
| 3108 | 0xf8, 0x55, 0xfa, 0x9f, 0xef, 0x90, 0x78, 0xb7, 0x67, 0xac, 0x12, 0x6b, | ||
| 3109 | 0x76, 0x9b, 0x4b, 0xe6, 0x2d, 0x34, 0x97, 0xa4, 0x43, 0x31, 0xf3, 0xa5, | ||
| 3110 | 0x6a, 0xd9, 0x4f, 0xa9, 0xf1, 0xc9, 0x33, 0x9a, 0xea, 0x63, 0x9c, 0xf9, | ||
| 3111 | 0x4d, 0x7d, 0xbb, 0xbc, 0xa3, 0x07, 0x79, 0x7f, 0xa9, 0x90, 0x63, 0x9c, | ||
| 3112 | 0x4c, 0x89, 0x8e, 0x6c, 0x6d, 0x77, 0x31, 0x16, 0x95, 0x77, 0x67, 0x0f, | ||
| 3113 | 0x73, 0xef, 0x0f, 0xa6, 0xfe, 0xd7, 0x1d, 0x72, 0x76, 0x5d, 0xce, 0x06, | ||
| 3114 | 0x00, 0xff, 0x1f, 0x17, 0x23, 0xca, 0x76, 0xf8, 0x78, 0x00, 0x00, 0x00 }; | ||
| 3127 | 3115 | ||
| 3128 | static const u32 bnx2_RXP_b09FwData[(0x0/4) + 1] = { 0x0 }; | 3116 | static const u32 bnx2_RXP_b09FwData[(0x0/4) + 1] = { 0x0 }; |
| 3129 | static const u32 bnx2_RXP_b09FwRodata[(0xf0/4) + 1] = { | 3117 | static const u32 bnx2_RXP_b09FwRodata[(0x124/4) + 1] = { |
| 3130 | 0x5f865437, 0xe4ac62cc, 0x50103a45, 0x36621985, 0xbf14c0e8, 0x1bc27a1e, | 3118 | 0x5f865437, 0xe4ac62cc, 0x50103a45, 0x36621985, 0xbf14c0e8, 0x1bc27a1e, |
| 3131 | 0x84f4b556, 0x094ea6fe, 0x7dda01e7, 0xc04d7481, 0x80080100, 0x80080080, | 3119 | 0x84f4b556, 0x094ea6fe, 0x7dda01e7, 0xc04d7481, 0x80080100, 0x80080080, |
| 3132 | 0x80080000, 0x08004efc, 0x08004efc, 0x08004fd8, 0x08004fac, 0x08004f90, | 3120 | 0x80080000, 0x08004fbc, 0x08004fbc, 0x08005098, 0x0800506c, 0x08005050, |
| 3133 | 0x08004ecc, 0x08004ecc, 0x08004ecc, 0x08004f04, 0x08007220, 0x0800726c, | 3121 | 0x08004f8c, 0x08004f8c, 0x08004f8c, 0x08004fc4, 0x080072ac, 0x080072f8, |
| 3134 | 0x0800722c, 0x08007150, 0x0800722c, 0x0800725c, 0x0800722c, 0x08007150, | 3122 | 0x080072b8, 0x080071dc, 0x080072b8, 0x080072e8, 0x080072b8, 0x080071dc, |
| 3135 | 0x08007150, 0x08007150, 0x08007150, 0x08007150, 0x08007150, 0x08007150, | 3123 | 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc, |
| 3136 | 0x08007150, 0x08007150, 0x08007150, 0x0800724c, 0x0800723c, 0x08007150, | 3124 | 0x080071dc, 0x080071dc, 0x080071dc, 0x080072d8, 0x080072c8, 0x080071dc, |
| 3137 | 0x08007150, 0x08007150, 0x08007150, 0x08007150, 0x08007150, 0x08007150, | 3125 | 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc, |
| 3138 | 0x08007150, 0x08007150, 0x08007150, 0x08007150, 0x08007150, 0x0800723c, | 3126 | 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc, 0x080071dc, 0x080072c8, |
| 3139 | 0x080077f4, 0x080076bc, 0x080077bc, 0x08007718, 0x080076e8, 0x080075a4, | 3127 | 0x0800787c, 0x08007748, 0x08007844, 0x08007748, 0x08007814, 0x08007630, |
| 3140 | 0x00000000 }; | 3128 | 0x08007748, 0x08007748, 0x08007748, 0x08007748, 0x08007748, 0x08007748, |
| 3129 | 0x08007748, 0x08007748, 0x08007748, 0x08007748, 0x08007748, 0x08007748, | ||
| 3130 | 0x08007770, 0x00000000 }; | ||
| 3141 | 3131 | ||
| 3142 | static struct fw_info bnx2_rxp_fw_09 = { | 3132 | static struct fw_info bnx2_rxp_fw_09 = { |
| 3143 | /* Firmware version: 4.4.23 */ | 3133 | /* Firmware version: 4.6.15 */ |
| 3144 | .ver_major = 0x4, | 3134 | .ver_major = 0x4, |
| 3145 | .ver_minor = 0x4, | 3135 | .ver_minor = 0x6, |
| 3146 | .ver_fix = 0x17, | 3136 | .ver_fix = 0xf, |
| 3147 | 3137 | ||
| 3148 | .start_addr = 0x080031d0, | 3138 | .start_addr = 0x080031d8, |
| 3149 | 3139 | ||
| 3150 | .text_addr = 0x08000000, | 3140 | .text_addr = 0x08000000, |
| 3151 | .text_len = 0x786c, | 3141 | .text_len = 0x78f4, |
| 3152 | .text_index = 0x0, | 3142 | .text_index = 0x0, |
| 3153 | .gz_text = bnx2_RXP_b09FwText, | 3143 | .gz_text = bnx2_RXP_b09FwText, |
| 3154 | .gz_text_len = sizeof(bnx2_RXP_b09FwText), | 3144 | .gz_text_len = sizeof(bnx2_RXP_b09FwText), |
| @@ -3158,548 +3148,492 @@ static struct fw_info bnx2_rxp_fw_09 = { | |||
| 3158 | .data_index = 0x0, | 3148 | .data_index = 0x0, |
| 3159 | .data = bnx2_RXP_b09FwData, | 3149 | .data = bnx2_RXP_b09FwData, |
| 3160 | 3150 | ||
| 3161 | .sbss_addr = 0x08007980, | 3151 | .sbss_addr = 0x08007a40, |
| 3162 | .sbss_len = 0x58, | 3152 | .sbss_len = 0x58, |
| 3163 | .sbss_index = 0x0, | 3153 | .sbss_index = 0x0, |
| 3164 | 3154 | ||
| 3165 | .bss_addr = 0x080079d8, | 3155 | .bss_addr = 0x08007a98, |
| 3166 | .bss_len = 0x1c, | 3156 | .bss_len = 0x20, |
| 3167 | .bss_index = 0x0, | 3157 | .bss_index = 0x0, |
| 3168 | 3158 | ||
| 3169 | .rodata_addr = 0x0800786c, | 3159 | .rodata_addr = 0x080078f4, |
| 3170 | .rodata_len = 0xf0, | 3160 | .rodata_len = 0x124, |
| 3171 | .rodata_index = 0x0, | 3161 | .rodata_index = 0x0, |
| 3172 | .rodata = bnx2_RXP_b09FwRodata, | 3162 | .rodata = bnx2_RXP_b09FwRodata, |
| 3173 | }; | 3163 | }; |
| 3174 | 3164 | ||
| 3175 | static u8 bnx2_xi_rv2p_proc1[] = { | 3165 | static u8 bnx2_xi_rv2p_proc1[] = { |
| 3176 | /* Date: 06/17/2008 16:52 */ | 3166 | /* Date: 01/27/2009 19:01 */ |
| 3177 | 0xbd, 0x56, 0xcf, 0x6b, 0x1c, 0x75, 0x14, 0x7f, 0x3b, 0xbb, 0x33, 0x3b, | 3167 | #define XI_RV2P_PROC1_POST_WAIT_TIMEOUT_MSK 0xffff |
| 3178 | 0x99, 0x9d, 0xdd, 0x99, 0xda, 0x34, 0x4c, 0xb7, 0x2b, 0xd9, 0x86, 0x5e, | 3168 | 0xa5, 0x56, 0xdd, 0x6b, 0x1c, 0x55, 0x14, 0x3f, 0x33, 0xbb, 0x33, 0xb3, |
| 3179 | 0x36, 0x99, 0x62, 0xa2, 0x11, 0x0a, 0x46, 0x5b, 0x72, 0x09, 0xd8, 0x9e, | 3169 | 0xd9, 0x9d, 0xd9, 0x5d, 0x9a, 0x34, 0x8e, 0xb1, 0x34, 0xdb, 0x20, 0xca, |
| 3180 | 0x02, 0x95, 0x22, 0x82, 0x71, 0xa9, 0x3d, 0xd8, 0x96, 0xe2, 0x5f, 0xe0, | 3170 | 0xa6, 0x13, 0xdd, 0x68, 0x1f, 0x04, 0x03, 0x2d, 0x01, 0x29, 0x98, 0xe2, |
| 3181 | 0x90, 0x9a, 0x08, 0x45, 0x0f, 0x0b, 0x36, 0x90, 0x20, 0x1a, 0x7b, 0x50, | 3171 | 0x43, 0xa0, 0x52, 0x8a, 0x60, 0x5c, 0xb4, 0x08, 0xf6, 0x2f, 0x10, 0xc1, |
| 3182 | 0x09, 0x0a, 0x3b, 0x07, 0x41, 0x44, 0x2d, 0xa8, 0x88, 0x60, 0x3d, 0x08, | 3172 | 0x21, 0x31, 0x11, 0xc4, 0xaf, 0x7d, 0xe8, 0x42, 0x02, 0x6a, 0x40, 0x50, |
| 3183 | 0x85, 0xda, 0x8b, 0x51, 0x8b, 0x8a, 0x07, 0x0f, 0x01, 0x8f, 0x9a, 0xf1, | 3173 | 0x09, 0x11, 0x77, 0xdf, 0x24, 0x16, 0x7c, 0x68, 0xf1, 0x41, 0xda, 0xa7, |
| 3184 | 0xfb, 0x7e, 0x7c, 0x37, 0x33, 0x93, 0xdd, 0x24, 0x27, 0x03, 0xed, 0x87, | 3174 | 0x16, 0xd4, 0x97, 0x46, 0x11, 0xbf, 0x5e, 0x04, 0xd1, 0xc7, 0x9a, 0xf1, |
| 3185 | 0xf7, 0x9d, 0xf7, 0x7d, 0xdf, 0xf7, 0xde, 0xf7, 0xf3, 0x3e, 0xdf, 0xf5, | 3175 | 0x9e, 0x8f, 0xbb, 0x3b, 0x73, 0xb3, 0x9b, 0x14, 0x5c, 0x48, 0x7e, 0x9c, |
| 3186 | 0x01, 0xc0, 0x80, 0x28, 0x1e, 0x55, 0x08, 0x87, 0x8c, 0xa2, 0xad, 0xa0, | 3176 | 0x7b, 0xcf, 0x39, 0xf7, 0x7c, 0x9f, 0xa9, 0x02, 0x80, 0x0d, 0x71, 0x77, |
| 3187 | 0x00, 0xf0, 0x21, 0xf0, 0x9f, 0xe9, 0x92, 0x1d, 0x3d, 0x22, 0xf6, 0x04, | 3177 | 0x52, 0x21, 0x58, 0xb9, 0x5c, 0x01, 0x01, 0x60, 0x1b, 0xf8, 0xe7, 0xf8, |
| 3188 | 0x43, 0x34, 0xe1, 0xab, 0xff, 0xaf, 0xc2, 0xe9, 0x26, 0x62, 0x11, 0x4e, | 3178 | 0x44, 0xc7, 0x8f, 0x0a, 0x7d, 0x92, 0x21, 0x3e, 0x59, 0x55, 0xff, 0x2f, |
| 3189 | 0x1f, 0x47, 0x7c, 0x12, 0x6e, 0x37, 0x03, 0x85, 0xff, 0x26, 0x10, 0xa1, | 3179 | 0xc3, 0xe9, 0x1a, 0x62, 0x0e, 0x4e, 0x9f, 0x40, 0x7c, 0x12, 0xbe, 0xae, |
| 3190 | 0x3d, 0xdc, 0xfd, 0x24, 0xae, 0x50, 0xfc, 0x4d, 0xd9, 0xff, 0x63, 0x91, | 3180 | 0x85, 0x0a, 0xff, 0x4d, 0x20, 0x46, 0xfa, 0x68, 0xe7, 0xcb, 0x6e, 0x89, |
| 3191 | 0xf1, 0x54, 0x68, 0x73, 0x1c, 0x41, 0x38, 0xe9, 0x13, 0xdc, 0xed, 0xa0, | 3181 | 0xf4, 0xef, 0x8a, 0xfc, 0xf7, 0x39, 0xc6, 0x27, 0xa2, 0x02, 0xeb, 0x11, |
| 3192 | 0x7d, 0xfe, 0x3c, 0x58, 0x18, 0xe7, 0x6d, 0xe5, 0x80, 0x76, 0xa3, 0x10, | 3182 | 0x84, 0x99, 0x2a, 0xc1, 0xed, 0x16, 0xd2, 0xe7, 0xcf, 0x83, 0x8b, 0x7a, |
| 3193 | 0x9d, 0x94, 0xbc, 0x0c, 0xf6, 0xfb, 0xa9, 0xe3, 0xe1, 0x3a, 0xfc, 0x3c, | 3183 | 0xde, 0x53, 0x0c, 0x48, 0x1f, 0xb3, 0xe2, 0x19, 0xb1, 0xcb, 0x66, 0xbe, |
| 3194 | 0x8b, 0xf6, 0x51, 0xe7, 0xd5, 0x0e, 0x62, 0x00, 0x97, 0x6c, 0x97, 0xeb, | 3184 | 0x3b, 0xad, 0x0a, 0x9e, 0xc3, 0x8f, 0xf3, 0x48, 0xdf, 0x57, 0x7c, 0xa3, |
| 3195 | 0x19, 0xe5, 0xb0, 0x9b, 0xe3, 0xb8, 0x4f, 0xf9, 0x8e, 0x4b, 0x5c, 0x13, | 3185 | 0x85, 0x38, 0x0e, 0x97, 0x0a, 0x3e, 0xfb, 0x53, 0x17, 0x9c, 0x64, 0xf5, |
| 3196 | 0xe3, 0xfe, 0x99, 0x70, 0x5c, 0x8c, 0x97, 0x8e, 0xd3, 0x50, 0x71, 0x70, | 3186 | 0xbb, 0xd3, 0x28, 0xaf, 0x64, 0xa6, 0x45, 0xbf, 0x83, 0xfa, 0x7f, 0x4f, |
| 3197 | 0xdd, 0x92, 0xbc, 0xac, 0x5c, 0x5e, 0x96, 0xca, 0x43, 0xfa, 0x00, 0x3a, | 3187 | 0x58, 0x3f, 0xea, 0x4d, 0xeb, 0xbb, 0x5f, 0xe9, 0xc3, 0x73, 0x57, 0xec, |
| 3198 | 0x0f, 0xc4, 0x23, 0xea, 0x5c, 0x8c, 0xbb, 0x25, 0x75, 0x03, 0x3c, 0xdf, | 3188 | 0x73, 0x0d, 0xfb, 0x5c, 0x65, 0x0f, 0xca, 0xaf, 0x00, 0xfb, 0x39, 0xaa, |
| 3199 | 0x94, 0xf8, 0x31, 0xa2, 0x5b, 0xe0, 0x78, 0xea, 0x9f, 0xd4, 0xb1, 0x3b, | 3189 | 0xde, 0x45, 0xfa, 0xaf, 0xbe, 0xbe, 0x2e, 0xa2, 0x6f, 0xb1, 0xbc, 0xfa, |
| 3200 | 0x8e, 0xee, 0x53, 0x36, 0xff, 0x72, 0xa8, 0xbf, 0xeb, 0xfb, 0xc0, 0x73, | 3190 | 0x13, 0xfb, 0x59, 0xee, 0x35, 0x25, 0xa7, 0xe3, 0x92, 0xb5, 0xd3, 0x8b, |
| 3201 | 0x7e, 0x50, 0xe7, 0xa4, 0xfd, 0x61, 0x1f, 0xff, 0xef, 0x94, 0x7f, 0x36, | 3191 | 0xb4, 0x7f, 0x3a, 0xfe, 0xc8, 0x7f, 0x2b, 0xc9, 0xf2, 0xc3, 0x21, 0xfc, |
| 3202 | 0x2e, 0xaf, 0x7f, 0xbb, 0xb3, 0xde, 0xea, 0xd7, 0x37, 0x33, 0xd7, 0xb7, | 3192 | 0x37, 0x15, 0x7f, 0x56, 0x2f, 0x9f, 0x7f, 0xdb, 0x3f, 0x1f, 0x18, 0x1f, |
| 3203 | 0x2f, 0xa5, 0x6f, 0x73, 0x70, 0xc2, 0x08, 0xc8, 0xaf, 0x04, 0x88, 0xc7, | 3193 | 0xc7, 0x88, 0xcf, 0x75, 0xf1, 0xe7, 0x29, 0x78, 0xd0, 0x0e, 0x89, 0x2f, |
| 3204 | 0x54, 0x02, 0x88, 0x0f, 0x0b, 0x5e, 0x13, 0xbc, 0x25, 0xf8, 0xae, 0xe0, | 3194 | 0x0f, 0x21, 0xc5, 0x09, 0x62, 0xc4, 0xe3, 0x82, 0x2f, 0x09, 0x7e, 0x2e, |
| 3205 | 0x11, 0xc1, 0x61, 0xc1, 0xc3, 0x82, 0x0f, 0x09, 0x6e, 0x09, 0xfa, 0x82, | 3195 | 0xb8, 0x2d, 0x08, 0xff, 0x13, 0xff, 0x1e, 0x72, 0x7e, 0x54, 0xf0, 0x01, |
| 3206 | 0x9e, 0x60, 0x4d, 0xf0, 0x2f, 0x41, 0x57, 0xb0, 0x92, 0x8b, 0x57, 0x17, | 3196 | 0xe3, 0xfc, 0x9a, 0xe0, 0x23, 0x86, 0xfc, 0x71, 0x8b, 0xf1, 0x0f, 0xa1, |
| 3207 | 0xb4, 0x05, 0x3f, 0x17, 0x7c, 0x22, 0xb7, 0xff, 0x68, 0x81, 0xf1, 0x81, | 3197 | 0xe7, 0x85, 0x7e, 0xc6, 0x90, 0x8f, 0x81, 0xe3, 0x63, 0x19, 0x71, 0xfb, |
| 3208 | 0xd8, 0x4f, 0x89, 0x7d, 0x41, 0x6c, 0x6c, 0xa8, 0xf0, 0x3e, 0xd3, 0xaf, | 3198 | 0x58, 0xea, 0x19, 0xf3, 0x2f, 0xf7, 0x75, 0xcd, 0x57, 0xa0, 0x38, 0xc2, |
| 3209 | 0x5b, 0xbd, 0xfb, 0xbd, 0xdb, 0x91, 0xef, 0x2d, 0xed, 0x67, 0x53, 0xff, | 3199 | 0x74, 0x9a, 0xff, 0x83, 0x03, 0xf8, 0x99, 0x6d, 0xbe, 0x3e, 0x48, 0xae, |
| 3210 | 0x60, 0x3c, 0xed, 0xff, 0xd6, 0x1e, 0xfe, 0xec, 0x36, 0xdb, 0xea, 0xb7, | 3200 | 0x9d, 0xb0, 0x1d, 0x57, 0x44, 0xbe, 0xd8, 0xb9, 0x3a, 0xa4, 0x7f, 0xe6, |
| 3211 | 0xef, 0x66, 0xc2, 0x79, 0xbc, 0x29, 0xfb, 0x83, 0xee, 0x67, 0x03, 0xe6, | 3201 | 0xa2, 0x41, 0xfd, 0x52, 0x17, 0x3f, 0xbe, 0x92, 0xba, 0xdc, 0xb1, 0x9a, |
| 3212 | 0x68, 0x26, 0xcc, 0xf3, 0xab, 0xdf, 0x1c, 0x3d, 0x2e, 0x73, 0x34, 0xbd, | 3202 | 0x51, 0xc8, 0x79, 0xa5, 0x3c, 0x06, 0x52, 0x8f, 0x23, 0x46, 0x3d, 0x7b, |
| 3213 | 0x8b, 0xbf, 0xcc, 0xd3, 0x33, 0xb2, 0x7f, 0x46, 0xf8, 0xd9, 0x18, 0xe0, | 3203 | 0xaa, 0x9e, 0xa5, 0xae, 0xea, 0xba, 0xbe, 0xb2, 0x75, 0xc5, 0xf5, 0xe1, |
| 3214 | 0x17, 0xa5, 0xe6, 0x95, 0xce, 0x1b, 0x30, 0x0f, 0x1f, 0x15, 0xda, 0x61, | 3204 | 0x1a, 0xf5, 0x11, 0x1f, 0x12, 0x97, 0x92, 0xe1, 0xdf, 0xab, 0x09, 0x86, |
| 3215 | 0xc0, 0xfc, 0x89, 0xf6, 0xca, 0x0f, 0xf7, 0x0b, 0x7f, 0x5b, 0x9a, 0xc7, | 3205 | 0x18, 0x7f, 0xb6, 0xcd, 0xb8, 0xc1, 0x18, 0xf9, 0x6e, 0x1e, 0xf1, 0x94, |
| 3216 | 0x59, 0xfe, 0x32, 0x0f, 0xad, 0x1c, 0x0f, 0x5f, 0xde, 0xe7, 0x1e, 0x2a, | 3206 | 0xff, 0x0d, 0xeb, 0x9b, 0x04, 0x44, 0x3f, 0x6c, 0x53, 0x1f, 0xe5, 0xa1, |
| 3217 | 0xb9, 0x7e, 0x5e, 0x56, 0xfe, 0x6c, 0x1a, 0x06, 0xe3, 0x1a, 0x63, 0xe8, | 3207 | 0xed, 0x2a, 0x9b, 0xe1, 0x6e, 0xf2, 0x0e, 0xf3, 0x4d, 0x38, 0x37, 0x09, |
| 3218 | 0x5a, 0x25, 0xc4, 0x69, 0xf7, 0x1b, 0x8e, 0x37, 0x4a, 0x75, 0xb8, 0xc1, | 3208 | 0xc3, 0x8d, 0x1b, 0xcc, 0xff, 0x5d, 0x8d, 0xed, 0x7e, 0x56, 0xe6, 0x53, |
| 3219 | 0x0a, 0xcd, 0x6d, 0x09, 0x56, 0xac, 0x21, 0x85, 0xff, 0x24, 0x6f, 0xb0, | 3209 | 0xff, 0xa7, 0xef, 0xa5, 0xff, 0x2a, 0x48, 0xff, 0x63, 0xc5, 0x5d, 0xfd, |
| 3220 | 0x5f, 0xdd, 0xfc, 0x9e, 0x30, 0x58, 0xbb, 0xc3, 0xfe, 0xf7, 0x9a, 0x9c, | 3210 | 0x8e, 0xc8, 0xbd, 0xa2, 0xeb, 0x9b, 0x7f, 0xcb, 0x6e, 0x95, 0xfc, 0x7d, |
| 3221 | 0xf7, 0x33, 0x13, 0x90, 0xfb, 0xd3, 0xdf, 0x65, 0xde, 0x3d, 0xb4, 0xff, | 3211 | 0xab, 0x4b, 0xe4, 0x98, 0xbf, 0x56, 0xa5, 0xdb, 0xb7, 0xbb, 0xda, 0x1f, |
| 3222 | 0x2e, 0x44, 0xb1, 0x3e, 0x47, 0xf6, 0x5d, 0xd6, 0x73, 0xc4, 0x7f, 0x8b, | 3212 | 0xe9, 0xf3, 0x69, 0xed, 0x3f, 0xcb, 0x07, 0x72, 0x6d, 0x3b, 0x3a, 0x7e, |
| 3223 | 0x96, 0x4f, 0xf5, 0xde, 0x88, 0xc9, 0x1c, 0x76, 0x97, 0x7d, 0xfa, 0xfa, | 3213 | 0x7c, 0x5e, 0x24, 0x3b, 0x46, 0x3b, 0x9b, 0x46, 0x3e, 0x6b, 0xf7, 0x34, |
| 3224 | 0x7a, 0xac, 0xeb, 0x11, 0x5d, 0x19, 0xd7, 0xf5, 0xf3, 0xfe, 0x2a, 0x9d, | 3214 | 0x07, 0xff, 0x4c, 0xfa, 0x73, 0x30, 0x1d, 0x1f, 0x3d, 0x07, 0x0b, 0xb0, |
| 3225 | 0x77, 0xb8, 0xbb, 0x9e, 0xe3, 0x49, 0xf3, 0x40, 0x3a, 0xbb, 0x95, 0xec, | 3215 | 0x74, 0xb6, 0x42, 0xf6, 0x94, 0x5d, 0x56, 0x73, 0xa1, 0xc2, 0xf8, 0x62, |
| 3226 | 0xe8, 0x6c, 0xba, 0x0f, 0x5a, 0x67, 0x6d, 0x58, 0x98, 0xf3, 0xe8, 0xdc, | 3216 | 0x91, 0xf1, 0x97, 0x22, 0xc6, 0x2f, 0x49, 0x2e, 0x95, 0x98, 0x7e, 0x21, |
| 3227 | 0x9a, 0xc5, 0x61, 0x2e, 0x78, 0x8c, 0x17, 0x1d, 0xc6, 0xdf, 0x1c, 0xec, | 3217 | 0x40, 0xbd, 0xa3, 0xea, 0x61, 0x2d, 0xaf, 0xed, 0x3a, 0xc8, 0x1e, 0x7c, |
| 3228 | 0x53, 0x92, 0x5c, 0xaa, 0xb0, 0xfd, 0x42, 0x55, 0xcf, 0xb7, 0xde, 0xaf, | 3218 | 0x5f, 0xbf, 0xa3, 0xed, 0xd0, 0xef, 0x65, 0xeb, 0x65, 0xf8, 0xbb, 0x8c, |
| 3229 | 0xf3, 0xda, 0x2b, 0x1f, 0x3c, 0x5f, 0x9f, 0xa3, 0xf3, 0xd0, 0xe7, 0x65, | 3219 | 0x4d, 0x3b, 0x1b, 0x87, 0xfc, 0x2c, 0xe3, 0x46, 0x03, 0xed, 0xba, 0x9a, |
| 3230 | 0x79, 0x31, 0xf8, 0x5c, 0xc6, 0xb6, 0x91, 0xed, 0xc3, 0xda, 0x24, 0x63, | 3220 | 0xf4, 0xfa, 0xb0, 0x5e, 0x25, 0xbe, 0x29, 0x60, 0x7a, 0x51, 0xea, 0x73, |
| 3231 | 0x69, 0x0a, 0xf3, 0xba, 0x9d, 0xf4, 0xe6, 0xbb, 0xe5, 0x93, 0xdf, 0x18, | 3221 | 0x91, 0xfa, 0xa7, 0xac, 0xae, 0x10, 0x27, 0x20, 0xa6, 0xbd, 0x60, 0x17, |
| 3232 | 0xb0, 0x3d, 0x2f, 0x3c, 0x9c, 0xa7, 0xb9, 0x54, 0xba, 0x63, 0x20, 0xd6, | 3222 | 0xaf, 0x53, 0xbd, 0xe4, 0xe4, 0x5c, 0xe5, 0x67, 0x2a, 0xdb, 0x77, 0xbb, |
| 3233 | 0x21, 0xa2, 0x77, 0xc7, 0x70, 0xbe, 0x26, 0x5e, 0x14, 0x65, 0x5d, 0xdd, | 3223 | 0x5c, 0x8f, 0x85, 0x6c, 0x1d, 0x3f, 0x9c, 0x9a, 0xaf, 0x69, 0x7f, 0xad, |
| 3234 | 0xc3, 0x58, 0x76, 0x9e, 0x37, 0x99, 0x77, 0x76, 0x96, 0xaf, 0xc7, 0x84, | 3224 | 0x5e, 0xfd, 0xee, 0xcf, 0x53, 0x36, 0x1f, 0xb7, 0x5b, 0xda, 0x7f, 0x73, |
| 3235 | 0xaf, 0x4e, 0x77, 0xbd, 0xb3, 0xdf, 0x3c, 0x48, 0xc1, 0xbd, 0xfe, 0x6b, | 3225 | 0x6f, 0x30, 0x7b, 0xdc, 0x90, 0x40, 0xcd, 0xca, 0xfd, 0x8c, 0xd9, 0x2f, |
| 3236 | 0x3d, 0xd4, 0xef, 0xb2, 0xd6, 0x3d, 0xfa, 0xdc, 0x8d, 0x8a, 0x99, 0x3a, | 3226 | 0x83, 0xfa, 0xad, 0x6a, 0xf4, 0xcf, 0x11, 0xe9, 0xb7, 0x91, 0xce, 0x66, |
| 3237 | 0xcf, 0x40, 0xd8, 0xef, 0x7e, 0x3f, 0x16, 0x3d, 0x99, 0x16, 0x7d, 0x53, | 3227 | 0xeb, 0xb0, 0x7e, 0x46, 0xfe, 0x2f, 0x64, 0x9e, 0x54, 0xa1, 0xb7, 0x97, |
| 3238 | 0x97, 0x18, 0x65, 0xf6, 0xd5, 0x80, 0xf2, 0x29, 0xe7, 0xe6, 0xac, 0xd4, | 3228 | 0xb6, 0x91, 0x2e, 0x81, 0xf4, 0x61, 0x27, 0xce, 0x65, 0xf2, 0x70, 0x06, |
| 3239 | 0x9b, 0x9b, 0x45, 0x6b, 0x80, 0xde, 0x99, 0xfc, 0x7e, 0x2e, 0xcc, 0xe1, | 3229 | 0x06, 0xce, 0x95, 0x0f, 0x45, 0x4f, 0x43, 0xe6, 0x8b, 0x9b, 0xda, 0x5f, |
| 3240 | 0xb9, 0x76, 0xe3, 0x06, 0xcd, 0x7f, 0x19, 0xfe, 0x70, 0xf9, 0x5e, 0xda, | 3230 | 0xc4, 0x5e, 0x06, 0xb2, 0xc3, 0x33, 0xe6, 0xc3, 0xdd, 0x3d, 0xdd, 0xef, |
| 3241 | 0x26, 0xda, 0xe6, 0xf0, 0x95, 0x4f, 0x33, 0xfd, 0x01, 0x38, 0xae, 0xdf, | 3231 | 0xcb, 0xee, 0x20, 0x7f, 0x3d, 0xf8, 0xcd, 0xe7, 0xfa, 0x68, 0x52, 0xbf, |
| 3242 | 0x97, 0xf4, 0x1c, 0x07, 0xd0, 0x9e, 0x3a, 0xe8, 0x7b, 0x99, 0xe6, 0x7d, | 3232 | 0x38, 0x63, 0x97, 0x77, 0x32, 0x79, 0x02, 0x38, 0xa1, 0xf7, 0x52, 0xda, |
| 3243 | 0x6d, 0x17, 0xef, 0xb5, 0x3e, 0x36, 0xc3, 0xf4, 0x9c, 0xe0, 0x3b, 0xc1, | 3233 | 0xae, 0xf4, 0x5e, 0x45, 0x7d, 0x21, 0x34, 0x67, 0xd3, 0xfb, 0xf5, 0xfd, |
| 3244 | 0xf7, 0xcd, 0xfa, 0x54, 0xc9, 0xf7, 0x41, 0xbd, 0x9f, 0xba, 0xbe, 0x7e, | 3234 | 0x44, 0xcf, 0xf5, 0x80, 0xfa, 0xa4, 0xbc, 0xaf, 0xef, 0xf4, 0x1c, 0xad, |
| 3245 | 0xef, 0xe8, 0xaf, 0xdb, 0x07, 0xd3, 0xb3, 0x74, 0x9f, 0xfa, 0xe9, 0x99, | 3235 | 0x45, 0xe9, 0xfe, 0x1d, 0x93, 0xb9, 0x69, 0x03, 0xcf, 0xcd, 0x92, 0xe9, |
| 3246 | 0x93, 0xd3, 0xa7, 0x7b, 0xdb, 0x3d, 0x7d, 0x32, 0xfb, 0xd5, 0xff, 0x7f, | 3236 | 0xa7, 0xda, 0xb7, 0x83, 0xf3, 0xc5, 0xfe, 0xde, 0xd9, 0xbb, 0xb7, 0x39, |
| 3247 | 0xe8, 0x36, 0xf7, 0xd3, 0x81, 0x74, 0x3d, 0x1b, 0x1b, 0xcc, 0x9f, 0xab, | 3237 | 0x7b, 0x58, 0xde, 0x8b, 0x46, 0xde, 0x6f, 0xf5, 0xe2, 0x68, 0x3b, 0x83, |
| 3248 | 0xa9, 0x79, 0x49, 0xdf, 0xff, 0x90, 0xf0, 0x45, 0xf9, 0x51, 0x1d, 0x5f, | 3238 | 0xbe, 0x2b, 0x4e, 0x29, 0xbd, 0xc2, 0x2f, 0x73, 0xe1, 0x79, 0x9a, 0x77, |
| 3249 | 0x6c, 0xef, 0xe8, 0x72, 0x9a, 0x7f, 0x2f, 0x0a, 0xff, 0x8d, 0x99, 0x75, | 3239 | 0x67, 0x84, 0x6f, 0x2e, 0x55, 0xaf, 0x83, 0xf8, 0x62, 0xa3, 0xae, 0x0b, |
| 3250 | 0xe6, 0x47, 0xfb, 0xf7, 0xdc, 0x7d, 0x4d, 0x85, 0xc8, 0x97, 0x57, 0x20, | 3240 | 0xfb, 0xf8, 0xb2, 0x73, 0x4c, 0xfb, 0xb3, 0xb5, 0xc5, 0xf5, 0x71, 0x31, |
| 3251 | 0x96, 0x3c, 0xef, 0x67, 0xf2, 0xad, 0x8a, 0x2e, 0x95, 0xe1, 0x83, 0x58, | 3241 | 0xd5, 0xaf, 0xe9, 0xf9, 0x3f, 0x22, 0xf5, 0xa0, 0xf8, 0xc8, 0x8f, 0x9d, |
| 3252 | 0xd7, 0xc5, 0x9f, 0x9b, 0x21, 0xe3, 0xfb, 0xe4, 0xef, 0xef, 0xf3, 0x2e, | 3242 | 0xbd, 0xfe, 0xbe, 0x48, 0xd7, 0xd7, 0xa2, 0xd4, 0xb5, 0x3d, 0xb7, 0x49, |
| 3253 | 0xf9, 0xf0, 0x5e, 0x4f, 0x7f, 0x3d, 0x8a, 0x37, 0x29, 0x3a, 0xb6, 0x20, | 3243 | 0x7d, 0xe4, 0x35, 0x7f, 0x35, 0xf2, 0x35, 0x1b, 0x61, 0x9d, 0xbc, 0x0e, |
| 3254 | 0x7a, 0xf2, 0x8b, 0xc3, 0x7a, 0xd5, 0x3e, 0x4b, 0xfc, 0x85, 0x11, 0xd1, | 3244 | 0x5d, 0xb1, 0xf3, 0x87, 0x8c, 0xbd, 0x81, 0xf4, 0xa1, 0x0b, 0x9f, 0x75, |
| 3255 | 0x95, 0x76, 0x95, 0xed, 0x7a, 0x95, 0x7f, 0xef, 0x4e, 0x96, 0x5d, 0xf2, | 3245 | 0xb5, 0x5f, 0x7c, 0x5d, 0x8b, 0x18, 0x3f, 0x8d, 0xa4, 0x9f, 0x7a, 0xfe, |
| 3256 | 0xab, 0x57, 0x19, 0x47, 0x2a, 0xb8, 0x2f, 0x80, 0x07, 0xe7, 0xc8, 0x3d, | 3246 | 0xe1, 0xbb, 0x0b, 0xf2, 0x6e, 0x15, 0x3e, 0xe9, 0xed, 0x03, 0x9c, 0x6f, |
| 3257 | 0x5c, 0x75, 0xf9, 0x5d, 0x59, 0xbd, 0x23, 0x7a, 0xe7, 0xe9, 0xfe, 0x49, | 3247 | 0x1e, 0x34, 0x64, 0x7e, 0x2e, 0xc9, 0x1c, 0xfb, 0xa9, 0xc8, 0x73, 0xb2, |
| 3258 | 0xbd, 0x8f, 0xe1, 0xfa, 0x88, 0xd2, 0x0f, 0xb6, 0x99, 0x17, 0x6e, 0x6f, | 3248 | 0xb9, 0x40, 0xf5, 0x0a, 0xe3, 0x32, 0xcf, 0x9a, 0x01, 0xd3, 0x13, 0x01, |
| 3259 | 0x1e, 0xde, 0x91, 0xec, 0x9b, 0x5e, 0xba, 0xdf, 0x7a, 0x2e, 0x3b, 0xb9, | 3249 | 0x7f, 0x07, 0x37, 0x3c, 0x9f, 0xf8, 0x26, 0x02, 0xc6, 0xf1, 0x12, 0xca, |
| 3260 | 0x3e, 0xeb, 0x7b, 0x3a, 0x95, 0x68, 0xbd, 0x1d, 0x9b, 0xc3, 0x7c, 0x3d, | 3250 | 0x85, 0xf0, 0xf3, 0x39, 0x62, 0x8f, 0xd6, 0x7d, 0xde, 0x73, 0xeb, 0x37, |
| 3261 | 0xa8, 0x95, 0x99, 0x47, 0x8c, 0x2a, 0x8e, 0x51, 0xc6, 0x6d, 0x8d, 0x25, | 3251 | 0x64, 0x9e, 0x54, 0x74, 0xdc, 0xc4, 0xcf, 0xc7, 0xf1, 0x7c, 0x5c, 0xcd, |
| 3262 | 0xd1, 0xaf, 0xa5, 0x45, 0x0a, 0x73, 0x6e, 0x49, 0xaf, 0xcf, 0xd2, 0xe0, | 3252 | 0x2d, 0xa6, 0xb9, 0x1e, 0xfc, 0x5e, 0xfd, 0x7f, 0x24, 0x59, 0xa9, 0x55, |
| 3263 | 0xcc, 0x6f, 0x7c, 0x45, 0xeb, 0xb5, 0xb8, 0xc8, 0xeb, 0xe5, 0xb3, 0xba, | 3253 | 0xd2, 0x71, 0xd6, 0xfd, 0xf6, 0xae, 0x11, 0x5f, 0x9d, 0x9f, 0x87, 0x12, |
| 3264 | 0x5f, 0x1e, 0xd5, 0xbf, 0xc2, 0xfd, 0x7a, 0xee, 0x26, 0xe3, 0xb3, 0xf0, | 3254 | 0x3d, 0xe7, 0xa7, 0xce, 0xa2, 0xbd, 0x15, 0x28, 0x7b, 0x5c, 0x3f, 0x8c, |
| 3265 | 0x34, 0xa1, 0xb3, 0x22, 0x73, 0xbf, 0xea, 0xda, 0x84, 0x40, 0xfd, 0x32, | 3255 | 0x4a, 0x8f, 0xed, 0xa1, 0xd8, 0xb1, 0x55, 0x99, 0x9b, 0xab, 0xcb, 0xa4, |
| 3266 | 0x1e, 0xe5, 0xf7, 0xd4, 0x94, 0x77, 0x70, 0x28, 0x75, 0x8f, 0xf9, 0xf7, | 3256 | 0xe6, 0xdc, 0xaa, 0x3e, 0x9f, 0xa7, 0x86, 0x59, 0xdc, 0xba, 0x46, 0xe7, |
| 3267 | 0xea, 0xa0, 0xf7, 0x99, 0xd6, 0x6f, 0xfd, 0x9e, 0x16, 0x72, 0xbf, 0x5f, | 3257 | 0xe5, 0x6e, 0x8e, 0xcf, 0xbd, 0x05, 0x1d, 0xaf, 0x0a, 0xf9, 0xdf, 0xe6, |
| 3268 | 0xab, 0x39, 0x7e, 0xbe, 0x34, 0x80, 0x9f, 0x87, 0x06, 0xf0, 0x3b, 0xaf, | 3258 | 0x78, 0x3d, 0x77, 0x85, 0xf1, 0x22, 0x3c, 0x4d, 0x58, 0x6c, 0x4b, 0x9f, |
| 3269 | 0x87, 0x6d, 0x99, 0xff, 0x12, 0x98, 0x45, 0x7a, 0x08, 0xdd, 0xd2, 0x75, | 3259 | 0xaf, 0xfb, 0x05, 0x42, 0xa0, 0x78, 0xd9, 0x8f, 0xf1, 0x7e, 0x77, 0x64, |
| 3270 | 0xba, 0x5f, 0x63, 0x89, 0x7f, 0x4f, 0xb8, 0xe6, 0x72, 0x81, 0xfa, 0xe6, | 3260 | 0x2f, 0x17, 0x52, 0xf9, 0x33, 0xf7, 0xe4, 0x41, 0x79, 0x3c, 0x62, 0xec, |
| 3271 | 0x2e, 0xb3, 0x5f, 0x89, 0xd7, 0x03, 0x8d, 0xaf, 0x5d, 0xe7, 0x39, 0x33, | 3261 | 0x0b, 0xbd, 0xd7, 0x2d, 0xe3, 0xfb, 0x36, 0x30, 0xea, 0xf1, 0xe5, 0x21, |
| 3272 | 0xe0, 0x3f, 0xdd, 0xd1, 0x99, 0x07, 0x78, 0x0d, 0x00, 0x00, 0x00 }; | 3262 | 0xf5, 0x08, 0x43, 0xea, 0xd9, 0x9c, 0x6f, 0x4b, 0xd2, 0xef, 0x79, 0x70, |
| 3263 | 0x72, 0xb4, 0x78, 0xfd, 0xfc, 0x0a, 0xe5, 0xd5, 0x5e, 0xe5, 0xef, 0x1a, | ||
| 3264 | 0xdf, 0x59, 0xb3, 0x28, 0x5e, 0xfe, 0x1a, 0xf3, 0xe5, 0xf9, 0x3c, 0xd4, | ||
| 3265 | 0xf8, 0xe6, 0x0a, 0xf7, 0x95, 0x0d, 0xff, 0x01, 0xd7, 0x0e, 0x41, 0x60, | ||
| 3266 | 0x88, 0x0d, 0x00, 0x00, 0x00 }; | ||
| 3273 | 3267 | ||
| 3274 | static u8 bnx2_xi_rv2p_proc2[] = { | 3268 | static u8 bnx2_xi_rv2p_proc2[] = { |
| 3275 | /* Date: 06/17/2008 16:52 */ | 3269 | /* Date: 01/27/2009 19:01 */ |
| 3276 | #define XI_RV2P_PROC2_MAX_BD_PAGE_LOC 5 | 3270 | #define XI_RV2P_PROC2_MAX_BD_PAGE_LOC 5 |
| 3277 | #define XI_RV2P_PROC2_BD_PAGE_SIZE_MSK 0xffff | 3271 | #define XI_RV2P_PROC2_BD_PAGE_SIZE_MSK 0xffff |
| 3278 | #define XI_RV2P_PROC2_BD_PAGE_SIZE ((BCM_PAGE_SIZE / 16) - 1) | 3272 | #define XI_RV2P_PROC2_BD_PAGE_SIZE ((BCM_PAGE_SIZE / 16) - 1) |
| 3279 | 0xad, 0x58, 0x4d, 0x4c, 0x54, 0x57, 0x14, 0xbe, 0xf3, 0xc3, 0xcc, 0x30, | 3273 | 0xad, 0x57, 0x4d, 0x68, 0x5c, 0x55, 0x14, 0xbe, 0x33, 0x6f, 0x7e, 0xde, |
| 3280 | 0xbc, 0x99, 0x41, 0x98, 0x0e, 0x7f, 0xa6, 0x22, 0x28, 0x82, 0x1d, 0x14, | 3274 | 0xcc, 0xbc, 0xc9, 0x4c, 0x93, 0x38, 0x99, 0x26, 0xc5, 0xa4, 0x09, 0x8d, |
| 3281 | 0x06, 0xd4, 0xb6, 0x36, 0xa9, 0xc1, 0x06, 0xb5, 0xb5, 0x11, 0x69, 0x63, | 3275 | 0x4e, 0x9d, 0x69, 0x27, 0x3f, 0x44, 0xb0, 0x42, 0x43, 0x90, 0xb4, 0xb5, |
| 3282 | 0xba, 0x68, 0x8a, 0x60, 0x45, 0x06, 0xc1, 0x10, 0x31, 0x2e, 0xdc, 0x74, | 3276 | 0x4a, 0xd3, 0x28, 0xc5, 0x5d, 0x92, 0xa9, 0x1d, 0x8c, 0x69, 0x23, 0x18, |
| 3283 | 0x02, 0x16, 0xbb, 0x98, 0x85, 0x98, 0xe2, 0x60, 0xd3, 0x18, 0x52, 0x37, | 3277 | 0x70, 0xe1, 0xc6, 0x47, 0x5a, 0xd3, 0xcd, 0x2c, 0x4c, 0x31, 0x3f, 0x8a, |
| 3284 | 0xa6, 0x3b, 0x92, 0xb6, 0x62, 0xbb, 0x30, 0x31, 0x2d, 0xb1, 0xb6, 0x89, | 3278 | 0xa0, 0xd8, 0x9d, 0xb8, 0x19, 0x50, 0xdb, 0x8a, 0x22, 0x14, 0x0c, 0x52, |
| 3285 | 0x36, 0xb1, 0x7f, 0x9b, 0xa6, 0xa6, 0x5a, 0x8a, 0x4a, 0x2d, 0xda, 0xb2, | 3279 | 0x17, 0x45, 0xb0, 0x58, 0x37, 0x8a, 0x58, 0x1b, 0x1a, 0x11, 0x8d, 0x8b, |
| 3286 | 0xaa, 0xd0, 0x77, 0xcf, 0x77, 0xee, 0x9b, 0x37, 0x33, 0x6f, 0x44, 0x53, | 3280 | 0xae, 0x24, 0xe3, 0xbd, 0xe7, 0x3b, 0xf7, 0xcd, 0xbc, 0xc9, 0x8b, 0x89, |
| 3287 | 0xd9, 0x1c, 0xee, 0x7d, 0xe7, 0x9e, 0x7b, 0xce, 0x77, 0x7e, 0xef, 0xe4, | 3281 | 0x62, 0x36, 0x27, 0xe7, 0xbe, 0x73, 0xcf, 0x39, 0xf7, 0x9c, 0xef, 0x7c, |
| 3288 | 0x0b, 0x21, 0x9c, 0x22, 0x36, 0xbe, 0x4c, 0xa7, 0x62, 0x89, 0xdd, 0xe1, | 3282 | 0xf7, 0x4e, 0x52, 0x08, 0x11, 0x10, 0x76, 0xb9, 0x5d, 0x4a, 0xe1, 0x33, |
| 3289 | 0xd1, 0xc9, 0x82, 0x10, 0x39, 0xc5, 0x72, 0x2d, 0xec, 0x82, 0xff, 0x56, | 3283 | 0x0c, 0x53, 0x8a, 0x8a, 0x10, 0xc1, 0xb4, 0xd2, 0x85, 0x5f, 0xf0, 0xdf, |
| 3290 | 0xe7, 0x13, 0xb9, 0x36, 0x2e, 0xbf, 0xbb, 0xc5, 0xeb, 0x76, 0x7c, 0x77, | 3284 | 0xfe, 0x24, 0x89, 0x6f, 0xcb, 0x96, 0x32, 0x13, 0x76, 0x46, 0xd9, 0x45, |
| 3291 | 0x0a, 0x49, 0x03, 0x42, 0xc4, 0x24, 0xcd, 0x67, 0xba, 0x9d, 0xe9, 0x4a, | 3285 | 0xc4, 0xb3, 0xfe, 0x88, 0x94, 0x87, 0xc5, 0x68, 0x06, 0xf6, 0x01, 0xa1, |
| 3292 | 0x1b, 0xe8, 0x46, 0xa6, 0x51, 0xa6, 0x2b, 0x98, 0xd6, 0xdb, 0x41, 0x57, | 3286 | 0xa4, 0xb4, 0xb5, 0x95, 0xdc, 0xc5, 0xf2, 0x38, 0xcb, 0xc7, 0x7d, 0x90, |
| 3293 | 0x31, 0xad, 0xe6, 0x7d, 0x8d, 0xcf, 0xd7, 0xf2, 0xfe, 0x7b, 0x4c, 0x8f, | 3287 | 0x87, 0x58, 0x3e, 0x56, 0x27, 0x05, 0xdb, 0x3d, 0xcd, 0xfa, 0x00, 0x4b, |
| 3294 | 0xf2, 0xbe, 0xa6, 0xf3, 0x29, 0xbd, 0xe4, 0x7a, 0x66, 0x41, 0xc4, 0xf4, | 3288 | 0x8b, 0xd7, 0x47, 0x59, 0xff, 0x90, 0xa5, 0xcd, 0xeb, 0x61, 0xd6, 0x1f, |
| 3295 | 0x33, 0x42, 0xdf, 0xae, 0x51, 0xfb, 0x1a, 0x91, 0x58, 0x0d, 0xf4, 0x7e, | 3289 | 0xf0, 0xa9, 0x25, 0xe4, 0xab, 0xf4, 0xb5, 0x4a, 0x55, 0xb7, 0xe0, 0x3e, |
| 3296 | 0xad, 0x5c, 0xf2, 0xfd, 0x61, 0xc1, 0x27, 0xf7, 0x6f, 0x2e, 0x28, 0x79, | 3290 | 0x83, 0x73, 0x3c, 0xd3, 0xa1, 0xbe, 0xdf, 0xad, 0xb8, 0xed, 0xef, 0x38, |
| 3297 | 0x03, 0x0e, 0xb9, 0xfe, 0x55, 0x5f, 0xdb, 0xe4, 0x32, 0x18, 0x82, 0x98, | 3291 | 0xfa, 0xac, 0xa1, 0xf4, 0x1f, 0xa5, 0xee, 0x53, 0x6a, 0x73, 0x0a, 0xdb, |
| 3298 | 0x60, 0x71, 0x5c, 0xca, 0x71, 0x88, 0xd1, 0x61, 0x0f, 0xa1, 0x72, 0x52, | 3292 | 0x9b, 0xd3, 0x25, 0xb5, 0xdf, 0x10, 0xcb, 0xf3, 0x26, 0x55, 0x67, 0xd1, |
| 3299 | 0xc3, 0x3a, 0x46, 0x78, 0xd8, 0xf4, 0x35, 0xcb, 0x63, 0x5a, 0xe2, 0xc3, | 3293 | 0x82, 0x6e, 0x97, 0x4d, 0xaa, 0xcb, 0xa2, 0xc5, 0xfe, 0x58, 0xee, 0x8e, |
| 3300 | 0xbd, 0xbb, 0xca, 0x71, 0xdf, 0x8f, 0xcf, 0x80, 0x2f, 0x16, 0x50, 0x80, | 3294 | 0x23, 0xde, 0xa9, 0x0e, 0xd4, 0xed, 0xbb, 0x47, 0x60, 0x67, 0x27, 0x74, |
| 3301 | 0xe2, 0xfb, 0x32, 0xc1, 0xdf, 0xf7, 0xcb, 0xf5, 0xac, 0xad, 0xd0, 0x06, | 3295 | 0x61, 0xf1, 0xbd, 0x5d, 0xf0, 0xf7, 0x29, 0xa5, 0xaf, 0xfb, 0x9a, 0x7c, |
| 3302 | 0x5c, 0xdd, 0xcc, 0x65, 0xcf, 0x91, 0xfb, 0xcb, 0x1b, 0x4f, 0x0e, 0x83, | 3296 | 0xa8, 0x47, 0x98, 0xad, 0xfc, 0x41, 0xb5, 0xbe, 0xb7, 0x7f, 0x71, 0x1e, |
| 3303 | 0xbf, 0xad, 0x1c, 0xfb, 0x4f, 0x87, 0xa5, 0x3c, 0x97, 0x88, 0x31, 0x15, | 3297 | 0xf6, 0x63, 0x1d, 0x58, 0x7f, 0x30, 0xab, 0xfc, 0x85, 0x84, 0xcd, 0x52, |
| 3304 | 0xb5, 0xa4, 0x97, 0x2d, 0x56, 0x9b, 0x2a, 0xff, 0x97, 0x61, 0xac, 0xda, | 3298 | 0xe4, 0x28, 0x2f, 0x9f, 0x9d, 0x73, 0xfb, 0xff, 0x61, 0x1e, 0xda, 0x44, |
| 3305 | 0x7d, 0x90, 0xeb, 0x4d, 0x91, 0x1b, 0xca, 0x90, 0xfb, 0x53, 0xae, 0x59, | 3299 | 0x1c, 0x7e, 0xa3, 0x2e, 0xbf, 0xa9, 0x4d, 0x7e, 0x6f, 0x47, 0x6a, 0xfd, |
| 3306 | 0xbe, 0xdf, 0x06, 0xf9, 0xde, 0x45, 0xe5, 0x77, 0xf8, 0x40, 0x0b, 0xc3, | 3300 | 0x37, 0xf8, 0xe0, 0x3f, 0xba, 0xad, 0xff, 0x42, 0x1c, 0xb2, 0x29, 0xeb, |
| 3307 | 0x56, 0xf7, 0xe4, 0x2e, 0xa2, 0x7f, 0xf7, 0xa2, 0xf2, 0x8f, 0x18, 0xfa, | 3301 | 0x15, 0x27, 0xb2, 0x4d, 0xfe, 0x2f, 0x6e, 0xeb, 0xff, 0x55, 0x27, 0x7f, |
| 3308 | 0x2b, 0xff, 0xa9, 0xef, 0xe9, 0x38, 0xd2, 0xf2, 0xe3, 0xd8, 0x5a, 0x16, | 3302 | 0xbd, 0x5e, 0x5f, 0x3f, 0x52, 0x3f, 0xb0, 0x0f, 0xf2, 0xf6, 0xfd, 0xfa, |
| 3309 | 0xb3, 0x5a, 0xd9, 0xcf, 0x7a, 0x3a, 0x40, 0x37, 0x85, 0x89, 0xc4, 0xf7, | 3303 | 0xdc, 0x9c, 0x9f, 0x01, 0x39, 0x98, 0x25, 0x51, 0x3a, 0xcd, 0x00, 0x1f, |
| 3310 | 0x70, 0x80, 0x37, 0x57, 0xc9, 0xfb, 0x0b, 0x84, 0xd3, 0x2e, 0xe5, 0xd5, | 3304 | 0xee, 0x56, 0x71, 0x1b, 0x45, 0xc0, 0xaf, 0xfc, 0x1d, 0x30, 0x43, 0xd7, |
| 3311 | 0x79, 0x5c, 0xe7, 0xb1, 0xff, 0x06, 0xfb, 0xeb, 0x6d, 0x36, 0xe8, 0xa6, | 3305 | 0xb0, 0xfe, 0x1c, 0xf7, 0xe9, 0x79, 0x3e, 0xc8, 0x2f, 0x51, 0x55, 0x98, |
| 3312 | 0x57, 0x02, 0xb4, 0xb0, 0xd0, 0x99, 0xc7, 0xf2, 0xd9, 0xdf, 0xb1, 0x3c, | 3306 | 0x4a, 0xa5, 0x18, 0x63, 0xff, 0xdc, 0x67, 0x3b, 0x86, 0xfd, 0x2b, 0x96, |
| 3313 | 0x9c, 0x9f, 0xd4, 0xa4, 0x9e, 0x5f, 0xeb, 0xf1, 0x63, 0xe5, 0x7f, 0xc7, | 3307 | 0xca, 0xef, 0x86, 0xc4, 0x8d, 0x57, 0xdf, 0x8d, 0x7f, 0xe8, 0x3b, 0xf6, |
| 3314 | 0x43, 0xfc, 0x8f, 0xf3, 0x4b, 0x56, 0xe1, 0xeb, 0xf1, 0x4e, 0xac, 0xcb, | 3308 | 0xef, 0x7a, 0x08, 0x5f, 0xdf, 0x28, 0x42, 0x6f, 0xbb, 0x9c, 0xa4, 0xfa, |
| 3315 | 0xce, 0xe4, 0x13, 0x4e, 0xa3, 0xe3, 0x56, 0xf1, 0x92, 0x2e, 0x5f, 0xcf, | 3309 | 0x2c, 0x97, 0xbd, 0x70, 0x52, 0xef, 0x5f, 0xce, 0x71, 0x02, 0x71, 0x44, |
| 3316 | 0xe3, 0x00, 0xee, 0x11, 0x15, 0x1e, 0x52, 0x0e, 0xf8, 0xea, 0x3c, 0xb5, | 3310 | 0xa7, 0x49, 0xc9, 0xa1, 0xae, 0xd2, 0x26, 0xe7, 0x59, 0x27, 0xb1, 0xb8, |
| 3317 | 0x96, 0x38, 0x89, 0x93, 0x2b, 0xe5, 0xbe, 0x5d, 0xb4, 0x3a, 0x34, 0xba, | 3311 | 0x4f, 0xcf, 0x05, 0xf4, 0x62, 0x88, 0x44, 0x7a, 0x62, 0x4e, 0x9d, 0x33, |
| 3318 | 0xa7, 0x35, 0xaa, 0xf2, 0x06, 0xdf, 0x3b, 0x5d, 0x44, 0x8a, 0xdb, 0x87, | 3312 | 0x21, 0xc6, 0xfd, 0x2a, 0x61, 0x3f, 0xd7, 0xc5, 0x30, 0xad, 0x4f, 0x60, |
| 3319 | 0xa4, 0xdd, 0x01, 0xb1, 0xdb, 0x1e, 0x20, 0x7e, 0xe0, 0xe4, 0xf0, 0x68, | 3313 | 0xff, 0x45, 0xbb, 0x45, 0x67, 0x28, 0xf6, 0x61, 0x5f, 0x73, 0x2f, 0xe4, |
| 3320 | 0x9f, 0x81, 0xff, 0xc2, 0x32, 0x8d, 0x6c, 0xea, 0x6c, 0xc0, 0xb9, 0x60, | 3314 | 0x42, 0x6f, 0x50, 0x89, 0x6c, 0x71, 0x86, 0xd4, 0x03, 0x3f, 0xf7, 0x98, |
| 3321 | 0x04, 0x74, 0x24, 0x92, 0x23, 0x49, 0xb8, 0xb3, 0x9f, 0x96, 0x6b, 0x7e, | 3315 | 0x64, 0x67, 0xe7, 0xf4, 0xdc, 0xe9, 0xbe, 0xa9, 0x3a, 0xbd, 0x52, 0x9d, |
| 3322 | 0xab, 0xf7, 0x10, 0x5f, 0xac, 0x56, 0xe5, 0xa5, 0xf2, 0xa3, 0xc4, 0xed, | 3316 | 0xbf, 0x2e, 0xd4, 0xf5, 0xee, 0x3e, 0x65, 0x2f, 0x8b, 0xdb, 0x89, 0x38, |
| 3323 | 0x90, 0x91, 0x87, 0xa2, 0x12, 0x38, 0xff, 0xbe, 0x52, 0xf2, 0xeb, 0x60, | 3317 | 0xa3, 0x93, 0x5e, 0x73, 0xfb, 0x92, 0x53, 0xdf, 0x9d, 0xf6, 0x7f, 0x90, |
| 3324 | 0x57, 0xe0, 0x9e, 0xa4, 0x7e, 0xe6, 0xbc, 0xee, 0x35, 0xe5, 0xf5, 0xe3, | 3318 | 0xea, 0x30, 0xc8, 0xf5, 0xe8, 0x60, 0x9c, 0xed, 0xf1, 0xc0, 0x59, 0x82, |
| 3325 | 0xc5, 0xc5, 0x26, 0xc2, 0x67, 0x13, 0xe3, 0x54, 0xce, 0x71, 0xb8, 0xd4, | 3319 | 0xfe, 0x5f, 0x1b, 0x4a, 0x52, 0x3d, 0x4f, 0x60, 0xfd, 0xd2, 0xf0, 0x15, |
| 3326 | 0x22, 0x0e, 0x03, 0xf4, 0xff, 0xad, 0xa6, 0x7c, 0xc2, 0x79, 0x07, 0xf6, | 3320 | 0xf4, 0xe3, 0x18, 0xd5, 0x41, 0x44, 0x2f, 0x7c, 0x8c, 0x5d, 0x13, 0x34, |
| 3327 | 0x4f, 0x34, 0x9f, 0x83, 0x9f, 0xb6, 0x11, 0x1e, 0xc2, 0x7b, 0xf4, 0x53, | 3321 | 0xdf, 0xe7, 0xfa, 0x8b, 0x9f, 0x42, 0x2f, 0x18, 0x4a, 0x9f, 0xb2, 0x4e, |
| 3328 | 0x9c, 0x6a, 0xa7, 0xfc, 0xef, 0x6d, 0xec, 0xfc, 0x1c, 0xeb, 0x0e, 0x87, | 3322 | 0x5f, 0x85, 0x7d, 0xf0, 0x7c, 0x92, 0xea, 0x77, 0x82, 0xa3, 0x1c, 0x33, |
| 3329 | 0x5c, 0xef, 0xd7, 0xf6, 0x4c, 0x80, 0x3f, 0x67, 0x10, 0xb8, 0xef, 0xe0, | 3323 | 0x88, 0x4f, 0x4a, 0xa1, 0xf3, 0xa4, 0x5a, 0x2b, 0xf4, 0x3d, 0x29, 0x2e, |
| 3330 | 0x5b, 0xb6, 0x39, 0xa8, 0xde, 0xc4, 0x5d, 0x83, 0xb4, 0xd4, 0x26, 0xe9, | 3324 | 0x96, 0xf1, 0x7d, 0x3a, 0xa6, 0xce, 0x37, 0xe2, 0xf0, 0xce, 0x64, 0x08, |
| 3331 | 0x7b, 0xbe, 0x38, 0x36, 0x8e, 0xef, 0x07, 0xf2, 0xa4, 0x9d, 0xaf, 0x1a, | 3325 | 0xfb, 0x4b, 0xf3, 0xe0, 0x8d, 0x7b, 0x1f, 0x29, 0x7d, 0x2c, 0x7b, 0x0f, |
| 3332 | 0x75, 0x29, 0xea, 0xc2, 0xf9, 0xf8, 0x30, 0xea, 0xca, 0xf4, 0x27, 0x72, | 3326 | 0xf6, 0xd9, 0xc9, 0x39, 0x76, 0xec, 0x47, 0xfd, 0xd6, 0xfc, 0xb0, 0x67, |
| 3333 | 0xdd, 0x16, 0x9e, 0x06, 0x7f, 0x38, 0x3a, 0xc4, 0x82, 0xed, 0xc0, 0xf1, | 3327 | 0x58, 0x46, 0x03, 0xd4, 0x3f, 0x9f, 0xb0, 0x86, 0x21, 0x5f, 0xa7, 0xef, |
| 3334 | 0x96, 0x1d, 0xfc, 0x1c, 0xae, 0x5e, 0x27, 0xf9, 0xd1, 0x26, 0xb4, 0x66, | 3328 | 0x7f, 0xf9, 0x4a, 0x54, 0xb7, 0x53, 0x0d, 0x81, 0x2b, 0xba, 0x3e, 0x2c, |
| 3335 | 0xd0, 0x77, 0xe9, 0xfb, 0xbf, 0xb6, 0x38, 0xe1, 0xb6, 0xcb, 0xef, 0x3c, | 3329 | 0x13, 0xfa, 0x5c, 0x90, 0x3b, 0xc5, 0xfd, 0x9c, 0xb5, 0x15, 0xde, 0xb9, |
| 3336 | 0xa7, 0xf0, 0x61, 0x1a, 0x50, 0x76, 0x81, 0x3e, 0x6a, 0x3e, 0x0c, 0x69, | 3330 | 0x8f, 0x99, 0xed, 0xf0, 0x0e, 0x39, 0xdc, 0x0d, 0x19, 0xea, 0x22, 0xbe, |
| 3337 | 0xd9, 0xf2, 0x80, 0xfd, 0x59, 0xb3, 0x58, 0x1e, 0x80, 0x36, 0x57, 0x81, | 3331 | 0xf8, 0x17, 0xb8, 0xe7, 0xbc, 0x36, 0xcd, 0x15, 0x56, 0xab, 0xf8, 0x24, |
| 3338 | 0xba, 0x2a, 0xa9, 0x9e, 0x3c, 0x46, 0x3e, 0xb0, 0x5e, 0x19, 0xf9, 0x86, | 3332 | 0x21, 0x71, 0xe9, 0xc2, 0xa9, 0x9c, 0x03, 0xe2, 0x57, 0xd9, 0x07, 0x8d, |
| 3339 | 0xdd, 0x64, 0x9c, 0x12, 0xd1, 0xe3, 0x33, 0x25, 0x5e, 0x39, 0x3f, 0x96, | 3333 | 0x37, 0xe5, 0x30, 0x2c, 0xa6, 0xd8, 0xef, 0x24, 0xd7, 0xe3, 0x2c, 0xd7, |
| 3340 | 0xeb, 0x7e, 0x50, 0x71, 0x27, 0x05, 0xba, 0xc5, 0x7e, 0x96, 0x1b, 0x65, | 3334 | 0xe3, 0x37, 0x96, 0xd3, 0x31, 0x5d, 0x07, 0xc8, 0x8b, 0x34, 0xff, 0x69, |
| 3341 | 0x3c, 0x7a, 0x18, 0x8f, 0x19, 0xa6, 0x07, 0xf2, 0x14, 0x0e, 0xa0, 0xc7, | 3335 | 0x8f, 0x7b, 0x43, 0xdf, 0x0f, 0xe8, 0xcf, 0x32, 0xf7, 0xf3, 0x2d, 0xe7, |
| 3342 | 0x34, 0xdc, 0xdb, 0x1a, 0x95, 0x7e, 0x0c, 0x5a, 0xf4, 0x17, 0xd5, 0x47, | 3336 | 0x9e, 0xd0, 0x75, 0xdd, 0xea, 0xbe, 0xd0, 0xf8, 0xc7, 0xfa, 0xe8, 0xa4, |
| 3343 | 0xe0, 0xa7, 0x51, 0xf6, 0xeb, 0x29, 0xa3, 0x9f, 0x28, 0x7c, 0xb3, 0xf5, | 3337 | 0xe7, 0x39, 0x4b, 0x5f, 0x76, 0xc2, 0x4d, 0x63, 0x17, 0xa4, 0x53, 0xdf, |
| 3344 | 0x95, 0xd4, 0x7c, 0x4a, 0xb3, 0x33, 0xfe, 0x55, 0x05, 0x8e, 0x17, 0x54, | 3338 | 0x6e, 0x9a, 0xdf, 0x86, 0x96, 0xab, 0xfa, 0x7c, 0x2a, 0xcf, 0x5f, 0xf5, |
| 3345 | 0x82, 0x1a, 0xf8, 0x56, 0x51, 0x1e, 0xfb, 0x8b, 0x26, 0x94, 0x7d, 0x52, | 3339 | 0xfc, 0x35, 0x2c, 0xcd, 0x92, 0x8c, 0x36, 0x5e, 0x56, 0xf1, 0x5a, 0x3d, |
| 3346 | 0xbf, 0x3b, 0x2a, 0x0f, 0xfd, 0x89, 0x01, 0xa2, 0xde, 0x82, 0x33, 0xf2, | 3340 | 0xf8, 0xc3, 0x3d, 0xc7, 0xf5, 0xf5, 0x9d, 0x8e, 0x13, 0xb1, 0xf6, 0xdf, |
| 3347 | 0x9e, 0x52, 0x8b, 0xba, 0x92, 0x9a, 0xcf, 0xe9, 0xf8, 0x1e, 0xf0, 0x51, | 3341 | 0x5c, 0x75, 0xcf, 0x2b, 0xe6, 0x33, 0xec, 0xe0, 0xbb, 0x79, 0x80, 0xfb, |
| 3348 | 0xc1, 0x6d, 0xbc, 0x32, 0x95, 0x9a, 0xb7, 0xc8, 0x4f, 0xb7, 0x11, 0xdf, | 3342 | 0xc0, 0x32, 0xf5, 0xa8, 0xf2, 0x3b, 0xc2, 0x71, 0xf2, 0x1c, 0xc7, 0xaa, |
| 3349 | 0xc1, 0xf5, 0xec, 0x07, 0xa6, 0xa1, 0x0d, 0x52, 0x6e, 0x0b, 0xdf, 0x53, | 3343 | 0xe1, 0x0b, 0x95, 0xe7, 0xfa, 0x86, 0xe6, 0x09, 0x8d, 0x8f, 0x2a, 0x5f, |
| 3350 | 0xc7, 0xf7, 0x68, 0xa6, 0xba, 0x21, 0xf5, 0xfc, 0x73, 0x5e, 0xd5, 0x0b, | 3344 | 0xe8, 0x3e, 0x50, 0xfc, 0xec, 0xcd, 0x55, 0xb5, 0xbf, 0x6d, 0x1b, 0xfe, |
| 3351 | 0x15, 0x1f, 0xc9, 0xba, 0xa1, 0xfc, 0x40, 0xf7, 0x87, 0xaf, 0x4c, 0xc9, | 3345 | 0x58, 0x75, 0xfc, 0xdd, 0x72, 0x78, 0x22, 0x49, 0x71, 0x0f, 0xb3, 0xea, |
| 3352 | 0xf3, 0x65, 0x8b, 0xd4, 0x91, 0x1b, 0x86, 0xbc, 0xef, 0x8d, 0x3a, 0x21, | 3346 | 0xe6, 0xc1, 0x3f, 0x24, 0x0f, 0xaa, 0xef, 0xa6, 0x69, 0x39, 0xf3, 0xc2, |
| 3353 | 0xbf, 0xe7, 0x89, 0x17, 0x79, 0x99, 0x5a, 0x0f, 0xff, 0xd2, 0xeb, 0x21, | 3347 | 0xfc, 0x37, 0xa3, 0xe2, 0xa5, 0x39, 0xff, 0xb4, 0xbe, 0xbf, 0x64, 0xfe, |
| 3354 | 0xd9, 0xe1, 0xd1, 0xce, 0x71, 0xfd, 0xeb, 0x97, 0xf7, 0x14, 0xb3, 0xde, | 3348 | 0xcc, 0x93, 0x63, 0xb5, 0x7c, 0x77, 0xdb, 0x23, 0xee, 0x7f, 0xf5, 0xc7, |
| 3355 | 0xc5, 0xaa, 0xaf, 0xe9, 0x7a, 0x73, 0x9d, 0x6c, 0x33, 0xd7, 0xbb, 0x1f, | 3349 | 0xf3, 0x95, 0x65, 0xbe, 0xcf, 0x51, 0x9e, 0x95, 0xf1, 0x3c, 0xe3, 0x25, |
| 3356 | 0xe6, 0x93, 0x75, 0x4b, 0xae, 0xaf, 0xcd, 0x67, 0xce, 0x27, 0x96, 0xb8, | 3350 | 0x57, 0xdf, 0x07, 0xf4, 0x15, 0xf6, 0xb2, 0xbf, 0x9a, 0xf7, 0xfa, 0xb4, |
| 3357 | 0xc6, 0x44, 0x00, 0x73, 0x58, 0x2c, 0x20, 0xcf, 0xe5, 0xd8, 0x32, 0xeb, | 3351 | 0x7f, 0xa8, 0x76, 0x4f, 0xad, 0x7d, 0x7d, 0xff, 0x03, 0x5b, 0xf0, 0xf8, |
| 3358 | 0x5f, 0xba, 0x1d, 0xc0, 0xa5, 0xdd, 0xee, 0x23, 0xbe, 0xeb, 0x7d, 0xf2, | 3352 | 0xe7, 0x1b, 0x78, 0x7f, 0x7d, 0xb6, 0x51, 0x7d, 0x4f, 0x79, 0xe2, 0xc4, |
| 3359 | 0xdc, 0xb4, 0x50, 0xf6, 0xa2, 0x0e, 0x96, 0x73, 0xbf, 0x5f, 0xca, 0x7a, | 3353 | 0x16, 0x74, 0x3f, 0x85, 0x25, 0x9e, 0xe9, 0xbd, 0x26, 0xb4, 0xbd, 0x3f, |
| 3360 | 0xeb, 0xf2, 0x6a, 0x29, 0x1f, 0x3c, 0xd7, 0xfb, 0xcc, 0x7a, 0x5f, 0x98, | 3354 | 0x88, 0xf7, 0xa4, 0x60, 0xfc, 0x9e, 0x7b, 0x98, 0xfd, 0x64, 0xc0, 0xc7, |
| 3361 | 0xcf, 0x7e, 0x9f, 0x75, 0x1c, 0xf4, 0x71, 0x9f, 0xe5, 0x39, 0xc1, 0xb3, | 3355 | 0x2f, 0x9c, 0xa1, 0xfe, 0xbe, 0x79, 0xf6, 0x3e, 0xf1, 0xf2, 0x7b, 0x2f, |
| 3362 | 0xe7, 0x0b, 0xa5, 0x17, 0xdf, 0x1f, 0x50, 0x7a, 0x68, 0xe4, 0xa7, 0xa9, | 3356 | 0x5f, 0x53, 0x7e, 0x77, 0x8b, 0xd5, 0x19, 0x8b, 0xf2, 0x1a, 0xda, 0x0b, |
| 3363 | 0x7e, 0x29, 0xa7, 0x50, 0x70, 0xd8, 0x88, 0xde, 0x6a, 0xd4, 0xdf, 0x99, | 3357 | 0xf3, 0xfb, 0x87, 0xea, 0xfb, 0xad, 0xfc, 0x9a, 0x8c, 0x07, 0x69, 0x37, |
| 3364 | 0xbd, 0xb0, 0xa3, 0xb7, 0x4a, 0xea, 0xa1, 0x7b, 0x25, 0x86, 0x3c, 0x17, | 3358 | 0xe1, 0x7e, 0x97, 0x6c, 0xce, 0x13, 0x73, 0x7f, 0x24, 0x81, 0x7d, 0x9a, |
| 3365 | 0xdc, 0x8f, 0xbe, 0x1c, 0xb6, 0xf2, 0xeb, 0xb7, 0xcc, 0x17, 0x64, 0xfb, | 3359 | 0xbf, 0xdc, 0xf8, 0x79, 0x77, 0xa3, 0x7a, 0xff, 0xc0, 0xcd, 0xad, 0x83, |
| 3366 | 0xf2, 0xd9, 0xbe, 0xb0, 0x48, 0xaf, 0xf3, 0x6d, 0xe5, 0xd4, 0x0f, 0x98, | 3360 | 0xde, 0x73, 0x71, 0xb2, 0xaf, 0x36, 0x4e, 0x46, 0xac, 0x94, 0xe1, 0x7f, |
| 3367 | 0xef, 0x05, 0xd5, 0x0f, 0x74, 0x3e, 0xc2, 0x99, 0xe5, 0x58, 0xe1, 0x64, | 3361 | 0x84, 0x79, 0x65, 0x9c, 0x13, 0xf9, 0x29, 0x9a, 0xa0, 0x78, 0x85, 0xe3, |
| 3368 | 0x25, 0x67, 0x82, 0xe3, 0xa0, 0x8b, 0xf9, 0x9c, 0x59, 0xe7, 0x9b, 0xb9, | 3362 | 0x84, 0x6b, 0x91, 0x8a, 0xe1, 0xdc, 0x85, 0xa7, 0xf0, 0xbd, 0x10, 0xc7, |
| 3369 | 0x55, 0xd4, 0x57, 0x4e, 0x1f, 0xa1, 0xfe, 0xe0, 0x33, 0xe2, 0x34, 0xd5, | 3363 | 0x7a, 0x6b, 0x1c, 0xef, 0xcd, 0x91, 0xb0, 0x45, 0xf6, 0xad, 0x71, 0xc8, |
| 3370 | 0x8e, 0xe3, 0x4f, 0x10, 0x77, 0x9a, 0xff, 0xc4, 0x3e, 0x7f, 0x36, 0x7c, | 3364 | 0x14, 0xf3, 0xcf, 0x8a, 0xc3, 0xcb, 0x90, 0xcb, 0xa1, 0xad, 0x78, 0x19, |
| 3371 | 0x9d, 0x72, 0x7b, 0x6c, 0x76, 0x42, 0xf9, 0x47, 0x23, 0x7b, 0xa7, 0xfa, | 3365 | 0xf7, 0xdb, 0xf5, 0x90, 0x5a, 0x97, 0x8f, 0xa0, 0x0c, 0x78, 0x69, 0xa8, |
| 3372 | 0xd5, 0x9c, 0x6f, 0xc6, 0xdd, 0x6e, 0xc2, 0x1d, 0xfc, 0x98, 0xef, 0xfe, | 3366 | 0xdb, 0xa2, 0xef, 0xa3, 0x19, 0xe0, 0x48, 0x74, 0x7a, 0x9f, 0xab, 0x0d, |
| 3373 | 0x0f, 0xde, 0x56, 0xf3, 0x41, 0x9f, 0x91, 0x9f, 0x03, 0x2e, 0xab, 0xfa, | 3367 | 0xfc, 0xd2, 0x5a, 0xe5, 0xef, 0x5a, 0x9e, 0xb7, 0x7a, 0x97, 0x1c, 0x1e, |
| 3374 | 0xbf, 0xd6, 0x88, 0x97, 0x83, 0x3c, 0xe7, 0xcd, 0x69, 0xf4, 0x4f, 0x64, | 3368 | 0x75, 0xe7, 0x01, 0xfe, 0x52, 0xfe, 0x49, 0x95, 0x7c, 0xb5, 0x13, 0x7e, |
| 3375 | 0x26, 0x4e, 0x4b, 0xad, 0xe4, 0xac, 0xe4, 0x5b, 0x1d, 0x39, 0xc8, 0x76, | 3369 | 0x37, 0x18, 0x2f, 0xbf, 0xf3, 0xbd, 0xdf, 0x24, 0xbe, 0x2a, 0xa3, 0x0e, |
| 3376 | 0x5d, 0x76, 0xc0, 0xee, 0xae, 0xbd, 0x58, 0x5f, 0xe1, 0x7a, 0x7d, 0x8f, | 3370 | 0x2b, 0xe5, 0xfa, 0xfe, 0xe8, 0x3c, 0x74, 0x1c, 0x9c, 0x4b, 0x9f, 0xb3, |
| 3377 | 0xeb, 0xe3, 0x4e, 0x0f, 0xe8, 0x4c, 0x35, 0xe1, 0x11, 0x39, 0x78, 0x5e, | 3371 | 0x1a, 0x17, 0x79, 0x9d, 0xe1, 0xfc, 0xef, 0xd0, 0xfb, 0x2f, 0xc5, 0xe7, |
| 3378 | 0xc9, 0x27, 0xb9, 0xda, 0x1c, 0xe3, 0xf9, 0x92, 0x83, 0xed, 0xac, 0x20, | 3372 | 0x55, 0x7e, 0xb1, 0x7e, 0x94, 0xee, 0xa1, 0xa0, 0x7c, 0xdf, 0x6b, 0xdd, |
| 3379 | 0x3f, 0x46, 0xee, 0x52, 0x3d, 0x70, 0x8a, 0xa6, 0xe5, 0x92, 0x96, 0xe8, | 3373 | 0x7d, 0x3f, 0x8c, 0x50, 0x5e, 0x8d, 0x72, 0x41, 0xef, 0x77, 0x9f, 0xbb, |
| 3380 | 0xb8, 0xb1, 0x3e, 0x1b, 0x41, 0x5b, 0xd5, 0x80, 0x5f, 0x93, 0xee, 0x67, | 3374 | 0x39, 0x0f, 0xb9, 0x90, 0xd7, 0x7d, 0xd3, 0xfd, 0xd5, 0xfd, 0x44, 0xdf, |
| 3381 | 0x6c, 0xbb, 0x2a, 0xf8, 0x7c, 0x3b, 0xd6, 0x6e, 0xae, 0x67, 0x09, 0xd6, | 3375 | 0x53, 0x3d, 0x64, 0xd6, 0x5f, 0xe8, 0x21, 0x9c, 0xe7, 0x0b, 0xeb, 0xee, |
| 3382 | 0xeb, 0xfd, 0x6a, 0x50, 0x7f, 0x0d, 0xe6, 0x84, 0x29, 0xea, 0x0b, 0x81, | 3376 | 0x77, 0xf2, 0xc9, 0xac, 0xb2, 0x7f, 0x4d, 0x7c, 0x43, 0xf3, 0x28, 0xc4, |
| 3383 | 0x48, 0xff, 0x04, 0xec, 0xe9, 0xd9, 0x0c, 0x7b, 0xef, 0x33, 0x0e, 0x4c, | 3377 | 0xf7, 0x2c, 0xab, 0x7c, 0x29, 0xf8, 0xaf, 0x96, 0x77, 0x0d, 0x71, 0x3d, |
| 3384 | 0xfd, 0xa7, 0x06, 0xa9, 0xef, 0xf8, 0x87, 0x30, 0x67, 0xf8, 0x5d, 0x83, | 3378 | 0xc8, 0xcb, 0x7d, 0x7a, 0xee, 0xdc, 0xf3, 0x5b, 0xad, 0xbb, 0x3a, 0xc7, |
| 3385 | 0xb0, 0xa3, 0x67, 0x0e, 0xeb, 0xfb, 0xcf, 0x81, 0xfe, 0xf3, 0x3c, 0xce, | 3379 | 0x13, 0x1e, 0xfc, 0xa4, 0xcf, 0xa9, 0xec, 0xf3, 0x8c, 0x5f, 0x53, 0x0c, |
| 3386 | 0x1d, 0x3a, 0xc2, 0xf8, 0x6c, 0xb6, 0x3e, 0xd7, 0xf5, 0x37, 0xf8, 0x7a, | 3380 | 0x1d, 0xc1, 0xfb, 0xb0, 0x21, 0x8c, 0x39, 0x69, 0x08, 0x7b, 0xdd, 0xef, |
| 3387 | 0xab, 0xe5, 0xfd, 0x6f, 0x8d, 0xf1, 0xfc, 0x21, 0xa2, 0x34, 0xef, 0xbc, | 3381 | 0x12, 0x3f, 0x11, 0xfa, 0x05, 0xb3, 0xa7, 0x31, 0x42, 0xe7, 0xba, 0x74, |
| 3388 | 0xa9, 0xcd, 0xf1, 0xba, 0x9b, 0xfb, 0xe2, 0x6d, 0x9e, 0x17, 0x7a, 0xd2, | 3382 | 0xe3, 0x6b, 0x32, 0x7b, 0x7f, 0x29, 0x86, 0xf5, 0x96, 0x21, 0x84, 0x09, |
| 3389 | 0xe6, 0x85, 0x69, 0xd4, 0xe9, 0xb1, 0xb9, 0xb8, 0xdc, 0xd0, 0xeb, 0x65, | 3383 | 0x10, 0xde, 0x0d, 0x71, 0x01, 0xf3, 0xf0, 0xce, 0x02, 0xe4, 0xdb, 0xe2, |
| 3390 | 0xae, 0x95, 0x7f, 0x7d, 0x91, 0x22, 0xf6, 0x5b, 0x70, 0x1d, 0xe8, 0xc8, | 3384 | 0x49, 0xf8, 0x69, 0x9c, 0xa5, 0xfb, 0xd4, 0x6c, 0x41, 0x79, 0x4b, 0x4b, |
| 3391 | 0x3a, 0xf4, 0xeb, 0x9e, 0xc3, 0x8c, 0x4f, 0x23, 0xf9, 0x69, 0xcd, 0xec, | 3385 | 0x8c, 0xf3, 0xb4, 0x9f, 0x7e, 0xaf, 0x56, 0x44, 0x9c, 0x7f, 0x47, 0xf0, |
| 3392 | 0x44, 0xfa, 0x79, 0x19, 0x3f, 0xed, 0xf3, 0x78, 0x3f, 0x6e, 0xd6, 0xa9, | 3386 | 0xbc, 0x02, 0xcf, 0x81, 0x9a, 0xbe, 0xef, 0x14, 0xdf, 0x4a, 0x8f, 0x4b, |
| 3393 | 0xba, 0x0f, 0xe7, 0x3a, 0xe8, 0x7d, 0x71, 0xcf, 0x98, 0x3f, 0xa7, 0x49, | 3387 | 0xfc, 0xc2, 0x0d, 0xe3, 0xdc, 0xac, 0xc7, 0xb9, 0xee, 0x6f, 0xda, 0xef, |
| 3394 | 0xff, 0xb2, 0xb1, 0x39, 0x92, 0x53, 0x2a, 0x0a, 0x29, 0x0e, 0x4b, 0xfc, | 3388 | 0x89, 0xeb, 0x81, 0xcd, 0xb8, 0xd6, 0xf9, 0xa9, 0x3a, 0xff, 0xe9, 0xbc, |
| 3395 | 0xb3, 0xb0, 0x27, 0x92, 0x60, 0x1c, 0xfa, 0x9e, 0x05, 0x3d, 0xcc, 0x71, | 3389 | 0x7b, 0x37, 0xfb, 0x57, 0xfb, 0x62, 0x12, 0xdf, 0xff, 0x17, 0xae, 0x21, |
| 3396 | 0xa0, 0xfc, 0x7b, 0x75, 0x83, 0x46, 0xe7, 0xa6, 0xfa, 0x71, 0x8f, 0xca, | 3390 | 0x8f, 0x76, 0xa9, 0xf8, 0x2d, 0x35, 0xf8, 0xf4, 0x9e, 0x3b, 0xf0, 0x9b, |
| 3397 | 0xa3, 0xf4, 0xb9, 0x58, 0xc5, 0x45, 0x49, 0x03, 0xad, 0x45, 0xd7, 0x21, | 3391 | 0x21, 0x79, 0xfc, 0x6f, 0x6a, 0x8c, 0x09, 0xd0, 0x18, 0x10, 0x00, 0x00, |
| 3398 | 0xb2, 0x53, 0xf7, 0xa7, 0x8c, 0x27, 0x1d, 0x2b, 0xee, 0xdb, 0xa9, 0xf1, | 3392 | 0x00 }; |
| 3399 | 0x22, 0xe3, 0x49, 0xc5, 0xad, 0x39, 0xce, 0xcc, 0x71, 0x94, 0x1a, 0x3f, | ||
| 3400 | 0x7e, 0xea, 0x2f, 0x7a, 0x31, 0xa0, 0x77, 0x89, 0x2b, 0x92, 0x18, 0x7e, | ||
| 3401 | 0x38, 0x8e, 0xa7, 0x80, 0x63, 0x84, 0xf5, 0xd6, 0xa2, 0x34, 0x8f, 0x3e, | ||
| 3402 | 0x25, 0x86, 0xd8, 0x9f, 0xd3, 0xd5, 0x9c, 0xff, 0x15, 0xf0, 0x67, 0xdf, | ||
| 3403 | 0x0a, 0xe8, 0xd3, 0xc7, 0x79, 0x74, 0x87, 0xe7, 0x0c, 0xc4, 0x81, 0x5b, | ||
| 3404 | 0xeb, 0x9c, 0x60, 0xbf, 0x73, 0x3c, 0x76, 0x33, 0x0e, 0xb7, 0x81, 0x83, | ||
| 3405 | 0xa6, 0x70, 0x88, 0x1a, 0x38, 0xa8, 0x7a, 0x63, 0x96, 0x53, 0xa0, 0xc7, | ||
| 3406 | 0x93, 0xa4, 0x4b, 0xb4, 0xab, 0x34, 0x8f, 0xe5, 0xb0, 0xdd, 0x3a, 0x5f, | ||
| 3407 | 0x83, 0xb4, 0xcf, 0xcf, 0xf6, 0xf9, 0xc4, 0xbe, 0x35, 0xe6, 0x73, 0x79, | ||
| 3408 | 0x7c, 0xce, 0xab, 0x9f, 0xc3, 0x3e, 0xf2, 0x55, 0xcb, 0x82, 0xaf, 0xc4, | ||
| 3409 | 0x51, 0xc9, 0x4d, 0xcf, 0x4b, 0x33, 0x9e, 0x54, 0xa9, 0xe9, 0x0f, 0xf5, | ||
| 3410 | 0x48, 0xf7, 0x1b, 0xd5, 0x2d, 0xcd, 0xa8, 0x43, 0xf7, 0xa8, 0xae, 0x7b, | ||
| 3411 | 0x4f, 0xf7, 0xa2, 0x6e, 0x9c, 0xee, 0x3d, 0xcb, 0x7d, 0x98, 0x71, 0x69, | ||
| 3412 | 0xa1, 0xf7, 0x83, 0x8e, 0x5d, 0x45, 0x6a, 0x1d, 0x4a, 0xd5, 0xa3, 0xcc, | ||
| 3413 | 0xa4, 0x87, 0xba, 0x77, 0xb1, 0x39, 0x01, 0x73, 0xea, 0x16, 0x9a, 0x13, | ||
| 3414 | 0x3c, 0xc6, 0xbc, 0x9d, 0xda, 0x4f, 0x26, 0x1f, 0x3c, 0x6e, 0x3f, 0xd9, | ||
| 3415 | 0xd9, 0x60, 0xbe, 0xaf, 0x46, 0x4c, 0x8e, 0xe3, 0x9e, 0x16, 0xee, 0xdf, | ||
| 3416 | 0xbb, 0x39, 0xcf, 0xaf, 0x7b, 0x03, 0x74, 0x6f, 0xc7, 0x2b, 0x64, 0xaf, | ||
| 3417 | 0x08, 0xe5, 0xc1, 0xbe, 0x8e, 0xed, 0xf8, 0xde, 0xe1, 0xc3, 0x7e, 0xa9, | ||
| 3418 | 0x0f, 0xbf, 0xa3, 0xb4, 0xb8, 0x35, 0xe2, 0x2f, 0xf5, 0x81, 0x86, 0xb8, | ||
| 3419 | 0x3e, 0x4c, 0x1a, 0xef, 0x09, 0xd0, 0x51, 0x57, 0xb6, 0xf7, 0x04, 0xde, | ||
| 3420 | 0x65, 0x17, 0x5d, 0xa8, 0x1f, 0xa2, 0x06, 0x73, 0x74, 0x53, 0x95, 0x46, | ||
| 3421 | 0xdf, 0x5b, 0x6b, 0xd0, 0xa7, 0x51, 0x9f, 0x33, 0xed, 0x2a, 0x43, 0xbc, | ||
| 3422 | 0x96, 0x26, 0xdf, 0x1d, 0xe6, 0xf7, 0x89, 0x16, 0x49, 0x18, 0xf3, 0x7f, | ||
| 3423 | 0xaa, 0x1e, 0xc8, 0x33, 0x29, 0x9f, 0x96, 0xfa, 0x9c, 0xfd, 0x28, 0xef, | ||
| 3424 | 0x12, 0x07, 0xcf, 0x6d, 0x77, 0xf9, 0x77, 0x82, 0x42, 0x71, 0x69, 0x1c, | ||
| 3425 | 0x38, 0x4c, 0x8e, 0x5b, 0xe5, 0xb1, 0xd4, 0x43, 0xdd, 0x03, 0xbb, 0x94, | ||
| 3426 | 0x9d, 0xc9, 0x7b, 0xa1, 0xd7, 0x5e, 0xd6, 0xff, 0x06, 0xfd, 0x9e, 0x11, | ||
| 3427 | 0x62, 0x7b, 0xa5, 0x5c, 0xec, 0x6f, 0xa5, 0xf7, 0x53, 0x8e, 0x88, 0x19, | ||
| 3428 | 0xeb, 0xd4, 0x77, 0x4d, 0x0b, 0xe9, 0x55, 0xc0, 0xfd, 0x3d, 0x64, 0x9a, | ||
| 3429 | 0x43, 0xc0, 0x1f, 0xac, 0x03, 0x1d, 0xa9, 0x53, 0x7e, 0x53, 0xfe, 0x55, | ||
| 3430 | 0xfe, 0x84, 0xdf, 0x43, 0xf5, 0xc4, 0xd6, 0xd8, 0x51, 0x4f, 0x09, 0x5f, | ||
| 3431 | 0xd7, 0x31, 0xab, 0xfa, 0x3d, 0xce, 0xef, 0x0c, 0x4b, 0xfe, 0x77, 0xc4, | ||
| 3432 | 0x77, 0x61, 0x34, 0xd8, 0x9f, 0x99, 0x26, 0xe7, 0x7c, 0xc1, 0x7f, 0xe6, | ||
| 3433 | 0xf7, 0x82, 0x43, 0x5c, 0xcc, 0xe1, 0xed, 0x06, 0x35, 0xff, 0x66, 0x7b, | ||
| 3434 | 0xf7, 0x48, 0x3b, 0xba, 0x1f, 0xa4, 0xcf, 0xd3, 0xc9, 0x79, 0x58, 0xd9, | ||
| 3435 | 0x2b, 0xcf, 0xd5, 0x71, 0x1c, 0x7b, 0x44, 0xd3, 0x16, 0xfc, 0xce, 0xe1, | ||
| 3436 | 0x77, 0x23, 0x6f, 0xfc, 0x6e, 0xab, 0xf7, 0xa9, 0x1e, 0x47, 0xb9, 0x54, | ||
| 3437 | 0x30, 0x96, 0x16, 0xe4, 0x92, 0x7d, 0x27, 0x2e, 0x7f, 0x43, 0x6c, 0x1f, | ||
| 3438 | 0x25, 0xf2, 0xb0, 0x5f, 0xd4, 0x84, 0x6b, 0x9c, 0x14, 0xf7, 0x0e, 0x71, | ||
| 3439 | 0x14, 0x79, 0xf1, 0xe1, 0x08, 0xe8, 0x07, 0xe2, 0x65, 0xc8, 0x29, 0x18, | ||
| 3440 | 0xa0, 0xbe, 0xea, 0x29, 0x02, 0xcc, 0xf1, 0x04, 0xc7, 0x7b, 0xb1, 0x9d, | ||
| 3441 | 0x7e, 0x87, 0x5d, 0x10, 0x3e, 0xfe, 0x9d, 0x8c, 0xf3, 0x17, 0x71, 0xed, | ||
| 3442 | 0x34, 0xf9, 0xff, 0x51, 0xe3, 0x1c, 0xfd, 0x33, 0xc1, 0x7e, 0xe7, 0x78, | ||
| 3443 | 0xf7, 0xa4, 0xc7, 0xbb, 0xc2, 0xa9, 0xd8, 0x6e, 0x19, 0xdf, 0xeb, 0x33, | ||
| 3444 | 0xe3, 0x5b, 0xe9, 0x97, 0xda, 0x3f, 0x33, 0xe5, 0xe3, 0x1d, 0x75, 0xe9, | ||
| 3445 | 0x89, 0xc5, 0x37, 0xe8, 0xd6, 0x4a, 0x79, 0x7f, 0x51, 0xc6, 0xbc, 0x9c, | ||
| 3446 | 0x9e, 0x7f, 0xa8, 0x77, 0xd5, 0x7a, 0x3c, 0xfc, 0x07, 0xd7, 0x0d, 0x36, | ||
| 3447 | 0x4f, 0xf0, 0x16, 0x00, 0x00, 0x00 }; | ||
| 3448 | 3393 | ||
| 3449 | static u8 bnx2_TPAT_b09FwText[] = { | 3394 | static u8 bnx2_TPAT_b09FwText[] = { |
| 3450 | 0xbd, 0x58, 0x5d, 0x6c, 0x1c, 0x57, 0x15, 0x3e, 0x73, 0xe7, 0xee, 0x7a, | 3395 | 0xbd, 0x58, 0x5d, 0x6c, 0x1c, 0x57, 0x15, 0x3e, 0x73, 0xe7, 0xee, 0xee, |
| 3451 | 0x6d, 0x39, 0xf1, 0xb8, 0x99, 0x96, 0x4d, 0x63, 0xd4, 0x99, 0x78, 0xfc, | 3396 | 0x78, 0xb1, 0xe3, 0x71, 0x3b, 0xa4, 0xdb, 0x62, 0xc8, 0x8c, 0x7d, 0xfd, |
| 3452 | 0x43, 0x6d, 0x95, 0x69, 0x59, 0x15, 0x17, 0x56, 0x68, 0xba, 0xbb, 0x71, | 3397 | 0x03, 0xb6, 0xc2, 0x94, 0x6e, 0xdb, 0xad, 0x18, 0x45, 0xc3, 0xec, 0xda, |
| 3453 | 0xad, 0xaa, 0xaa, 0x5c, 0x29, 0x88, 0x4a, 0x8d, 0x90, 0x59, 0x37, 0x6d, | 3398 | 0xb1, 0xa2, 0x3c, 0xb8, 0x52, 0xa4, 0x46, 0x6a, 0x04, 0x66, 0x1d, 0x93, |
| 3454 | 0x79, 0x4b, 0x11, 0x0f, 0x48, 0x45, 0xca, 0xb2, 0x76, 0xd2, 0x08, 0x2d, | 3399 | 0x3e, 0xa6, 0x88, 0x07, 0xa4, 0x3e, 0x64, 0x59, 0x3b, 0xa9, 0x1f, 0x96, |
| 3455 | 0x99, 0xd6, 0x85, 0x44, 0x42, 0x7d, 0x88, 0x9c, 0x3a, 0xee, 0xc3, 0xca, | 3400 | 0x2c, 0xb8, 0xc8, 0x7e, 0x41, 0x28, 0x72, 0x6a, 0xbb, 0x48, 0x8b, 0x37, |
| 3456 | 0x9b, 0x8a, 0x07, 0x24, 0xa4, 0xa8, 0x55, 0x80, 0xc0, 0x1b, 0x7d, 0xa8, | 3401 | 0x11, 0x48, 0x3c, 0x45, 0x8d, 0x1c, 0x14, 0x55, 0xea, 0x0b, 0x0f, 0xfc, |
| 3457 | 0xf8, 0x79, 0x22, 0x12, 0x0f, 0x54, 0x08, 0x90, 0x85, 0x04, 0x2a, 0xa5, | 3402 | 0x3d, 0x46, 0x6a, 0x45, 0xfb, 0x50, 0x90, 0x55, 0xa9, 0xa8, 0x82, 0xe0, |
| 3458 | 0xe4, 0xf2, 0x7d, 0x77, 0x67, 0x92, 0xc5, 0x4d, 0x41, 0xe5, 0x81, 0x95, | 3403 | 0xcb, 0x77, 0x66, 0x67, 0x9c, 0x4d, 0xec, 0x08, 0x9e, 0xb0, 0xb4, 0xba, |
| 3459 | 0x56, 0x77, 0xe6, 0xde, 0x73, 0xce, 0x3d, 0xf7, 0xfc, 0x7c, 0xe7, 0xdc, | 3404 | 0x33, 0x73, 0xef, 0x39, 0xf7, 0xdc, 0x73, 0xbe, 0xef, 0x9c, 0x73, 0x3d, |
| 3460 | 0x39, 0xec, 0xc8, 0x88, 0x64, 0xbf, 0x7d, 0xf8, 0x57, 0xbe, 0x72, 0xe2, | 3405 | 0x64, 0x50, 0x9e, 0x92, 0xbf, 0x3e, 0xfc, 0x8a, 0xdf, 0xbd, 0xf8, 0x83, |
| 3461 | 0xeb, 0x0f, 0xdc, 0x57, 0xb9, 0x0f, 0x8f, 0x0f, 0x3a, 0x77, 0x6b, 0x2d, | 3406 | 0x67, 0x8f, 0xbf, 0x70, 0x1c, 0x8f, 0xcf, 0x1b, 0xfd, 0x59, 0x49, 0xff, |
| 3462 | 0xff, 0xc7, 0x9f, 0x2b, 0xe2, 0xe5, 0x7a, 0xf0, 0x2f, 0x25, 0x55, 0x4d, | 3407 | 0xc7, 0x3f, 0x93, 0xc8, 0x4e, 0xed, 0xe0, 0x1f, 0x59, 0x22, 0xb8, 0xfd, |
| 3463 | 0x0e, 0xd6, 0x22, 0x29, 0xb9, 0xd5, 0xea, 0xfc, 0x6a, 0x24, 0x92, 0x74, | 3408 | 0x54, 0xa4, 0xc8, 0x32, 0x83, 0xdf, 0x7c, 0x6d, 0x5e, 0x11, 0x85, 0xad, |
| 3464 | 0xe7, 0x82, 0xba, 0xfc, 0xd3, 0xb4, 0x7c, 0x2d, 0x9c, 0xff, 0x64, 0xf5, | 3409 | 0x09, 0xb7, 0x4c, 0xff, 0xd6, 0x35, 0x47, 0x12, 0x7f, 0xff, 0x72, 0x70, |
| 3465 | 0x83, 0x4f, 0x5f, 0xf9, 0x6c, 0xb8, 0x7b, 0xc1, 0x95, 0x92, 0x57, 0x3d, | 3410 | 0xff, 0xeb, 0xb7, 0x5e, 0xf4, 0x76, 0xaf, 0x99, 0x64, 0xd9, 0xc1, 0xb2, |
| 3466 | 0xa3, 0xbd, 0x69, 0x29, 0x4d, 0x80, 0xe7, 0xd5, 0x99, 0x6f, 0x17, 0x64, | 3411 | 0xb4, 0x47, 0xc9, 0x1a, 0x84, 0xcc, 0xcf, 0xc7, 0xbe, 0x2d, 0xe8, 0x48, |
| 3467 | 0x7f, 0x2e, 0xab, 0x65, 0x54, 0x74, 0xdd, 0x5c, 0x99, 0x89, 0xbc, 0x36, | 3412 | 0xaa, 0xab, 0xa6, 0x85, 0xba, 0xa7, 0x6f, 0x8d, 0x29, 0xbb, 0x8e, 0x0d, |
| 3468 | 0x36, 0xb8, 0xdc, 0x0b, 0xa4, 0xd6, 0x2b, 0xcb, 0x9b, 0x3d, 0x5f, 0xde, | 3413 | 0x6e, 0xb4, 0x5d, 0x8a, 0xda, 0x05, 0x7a, 0xb7, 0xed, 0xd0, 0xcd, 0xb6, |
| 3469 | 0xe8, 0x69, 0x39, 0xfe, 0xca, 0x49, 0x59, 0x8f, 0xc3, 0x72, 0xc3, 0x2d, | 3414 | 0xa4, 0x85, 0xb7, 0x2e, 0xd1, 0x92, 0xef, 0x15, 0x2a, 0xa6, 0x45, 0x22, |
| 3470 | 0x89, 0xaa, 0x86, 0xe5, 0xa6, 0x04, 0xb2, 0x15, 0x87, 0xad, 0x15, 0x77, | 3415 | 0xf0, 0x0a, 0x55, 0x72, 0x69, 0xc3, 0xf7, 0x6a, 0x73, 0xe6, 0x80, 0x61, |
| 3471 | 0xdc, 0x29, 0x55, 0x4b, 0xf2, 0xc2, 0x8c, 0x92, 0x0b, 0xfe, 0x31, 0x79, | 3416 | 0x05, 0x16, 0xbd, 0x31, 0x26, 0xe8, 0x9a, 0x73, 0x8e, 0xbe, 0xa7, 0xce, |
| 3472 | 0x26, 0x7a, 0x12, 0x7f, 0x2d, 0x6a, 0x43, 0x3b, 0xf5, 0xf3, 0x5a, 0xf4, | 3417 | 0xe2, 0x27, 0x49, 0xac, 0x48, 0xa3, 0xbc, 0x26, 0x49, 0xae, 0xf4, 0xd3, |
| 3473 | 0xc6, 0x98, 0x3c, 0x12, 0x1b, 0xb3, 0x1a, 0x27, 0xe0, 0x9f, 0x9c, 0x7d, | 3418 | 0x49, 0x5f, 0xeb, 0x79, 0x3f, 0x84, 0xfc, 0xf0, 0xf8, 0x05, 0xea, 0xa1, |
| 3474 | 0x56, 0x86, 0xa5, 0xe5, 0x85, 0x4b, 0x22, 0x05, 0xd2, 0x48, 0x2d, 0x2e, | 3419 | 0x9a, 0xed, 0xcd, 0x10, 0x65, 0x78, 0x0d, 0x45, 0x7e, 0x86, 0x42, 0xbb, |
| 3475 | 0x48, 0xe2, 0xf5, 0xcf, 0x75, 0xc1, 0x8e, 0x1f, 0x98, 0x2d, 0xf0, 0x0f, | 3420 | 0x73, 0xae, 0x6b, 0xf1, 0x78, 0x5f, 0x6f, 0x40, 0xbe, 0x47, 0xa5, 0xf3, |
| 3476 | 0x47, 0xf9, 0xfa, 0x1d, 0xd9, 0xba, 0x97, 0xad, 0x2b, 0x51, 0xe7, 0xc2, | 3421 | 0x4f, 0x24, 0xf3, 0x76, 0x32, 0x2f, 0x48, 0xac, 0x7a, 0xee, 0x16, 0x8d, |
| 3477 | 0x60, 0x5b, 0xa6, 0x12, 0xed, 0xdc, 0x30, 0xb5, 0xe8, 0x2e, 0xaf, 0xb6, | 3422 | 0x84, 0xd2, 0xd8, 0xd3, 0x91, 0x3a, 0x6a, 0x47, 0x5b, 0x92, 0xcc, 0x15, |
| 3478 | 0xad, 0xc5, 0xdd, 0xa0, 0xfe, 0x91, 0x57, 0x17, 0x03, 0x1e, 0x97, 0x3c, | 3423 | 0xb6, 0x5f, 0xd9, 0x65, 0xd2, 0x90, 0x31, 0x59, 0x46, 0x8a, 0xe0, 0xfb, |
| 3479 | 0x5a, 0x55, 0xbf, 0x06, 0xbf, 0x4d, 0x25, 0xca, 0x11, 0xb9, 0xda, 0x29, | 3424 | 0x88, 0xdb, 0x48, 0x28, 0x0c, 0xa2, 0x9d, 0x46, 0xc1, 0x8e, 0xda, 0x3f, |
| 3480 | 0x7b, 0xb5, 0xde, 0x37, 0x9c, 0x5a, 0x7a, 0xc3, 0x24, 0x7a, 0x44, 0x54, | 3425 | 0x34, 0xa2, 0xe6, 0x9e, 0x0e, 0x65, 0x9e, 0x84, 0x0a, 0x8d, 0x68, 0x8b, |
| 3481 | 0x94, 0x38, 0xb5, 0x6d, 0xca, 0x1a, 0x16, 0x1d, 0x0d, 0x81, 0x67, 0xd2, | 3426 | 0x75, 0xf5, 0x90, 0x54, 0x39, 0xc8, 0x0c, 0xdb, 0x82, 0x78, 0x8c, 0x92, |
| 3482 | 0x53, 0xc2, 0xb1, 0x96, 0xcd, 0x53, 0x76, 0x03, 0xcf, 0x8b, 0x4e, 0xb2, | 3427 | 0xef, 0xac, 0xbb, 0x82, 0xe7, 0x69, 0x23, 0xdc, 0x92, 0x46, 0xb4, 0x36, |
| 3483 | 0xad, 0x9d, 0xda, 0xf9, 0x25, 0x3c, 0x97, 0xc0, 0x0f, 0xbb, 0xc4, 0x8e, | 3428 | 0x83, 0x67, 0x0b, 0xf2, 0xf0, 0x8b, 0x6f, 0x50, 0x38, 0x6b, 0x40, 0x8e, |
| 3484 | 0x24, 0xcb, 0x0e, 0xf8, 0x78, 0x4e, 0x0f, 0xef, 0x4a, 0x12, 0xdf, 0x93, | 3429 | 0xcf, 0x69, 0xe3, 0x5d, 0x50, 0xe8, 0xd8, 0xb4, 0x58, 0xf4, 0x0a, 0x35, |
| 3485 | 0xb5, 0x4a, 0x58, 0x6e, 0xc9, 0xa3, 0x4e, 0x7d, 0xfb, 0x43, 0x4e, 0xf3, | 3430 | 0x3a, 0x65, 0x94, 0xb7, 0x0e, 0x04, 0xcd, 0x9e, 0x69, 0x1f, 0xfc, 0xc6, |
| 3486 | 0x96, 0x7a, 0x1f, 0x9e, 0xa3, 0x2e, 0x0f, 0x6b, 0x63, 0xd4, 0xfd, 0x43, | 3431 | 0xb6, 0x7c, 0x4b, 0x6a, 0x2d, 0x9e, 0xcd, 0x25, 0x67, 0x64, 0x7d, 0x61, |
| 3487 | 0xd9, 0x19, 0x29, 0x2f, 0xe9, 0xeb, 0xef, 0xf3, 0x1d, 0x3a, 0xa7, 0xd0, | 3432 | 0xc7, 0x7e, 0x87, 0xdf, 0x61, 0x73, 0x13, 0xb6, 0xb7, 0xb2, 0xb0, 0x47, |
| 3488 | 0xbd, 0x5b, 0x84, 0x3e, 0xc6, 0x70, 0x9f, 0x5a, 0x54, 0x87, 0x9e, 0x09, | 3433 | 0x6b, 0xde, 0x27, 0x52, 0x65, 0xd8, 0x19, 0xe2, 0xe7, 0x2d, 0x57, 0x01, |
| 3489 | 0xfe, 0xe1, 0x99, 0x26, 0x42, 0xe1, 0xf0, 0xb9, 0x7d, 0x12, 0x8c, 0x1b, | 3434 | 0x85, 0xa1, 0xd5, 0x3e, 0x72, 0x07, 0xb4, 0xae, 0xf8, 0x9e, 0xbd, 0x45, |
| 3490 | 0xd3, 0x88, 0x43, 0x6f, 0x5b, 0x26, 0x64, 0x2d, 0x9d, 0xf0, 0x8e, 0xa4, | 3435 | 0x01, 0x2d, 0x36, 0x07, 0xed, 0xa9, 0x66, 0x1d, 0xf3, 0x35, 0x5e, 0x03, |
| 3491 | 0x6d, 0xac, 0xb7, 0x48, 0x03, 0x7b, 0x88, 0x1c, 0xe9, 0x1a, 0x73, 0x29, | 3436 | 0x7f, 0x10, 0x4d, 0xb5, 0xb4, 0xde, 0xf4, 0x7f, 0x9b, 0xa1, 0x23, 0x62, |
| 3492 | 0x3e, 0x50, 0x94, 0xfd, 0x6a, 0xbe, 0x20, 0x61, 0x90, 0x60, 0xee, 0xf0, | 3437 | 0x32, 0x43, 0x9e, 0x1b, 0xe2, 0xdb, 0xd0, 0xe6, 0xa3, 0x3e, 0x3b, 0x96, |
| 3493 | 0xa5, 0xbd, 0x36, 0xbb, 0x27, 0xd3, 0x81, 0x76, 0xc7, 0x3e, 0xf1, 0xa1, | 3438 | 0xd8, 0xc0, 0x7e, 0xc7, 0x3e, 0xfe, 0x97, 0x92, 0xf7, 0x5e, 0x3b, 0x5a, |
| 3494 | 0xec, 0x7d, 0xd4, 0xab, 0x9d, 0xcf, 0xed, 0x6c, 0xf5, 0x86, 0x5d, 0x63, | 3439 | 0x4b, 0xfd, 0x1c, 0xdb, 0x0d, 0xbf, 0xfa, 0x14, 0x15, 0x61, 0xff, 0x63, |
| 3495 | 0xa9, 0x55, 0xa0, 0xff, 0x47, 0x9e, 0x29, 0xe7, 0xa3, 0x2e, 0xd4, 0x1b, | 3440 | 0xcf, 0x94, 0xca, 0xb1, 0x2d, 0x6c, 0x37, 0xd6, 0xab, 0x07, 0x36, 0xbd, |
| 3496 | 0xf4, 0xd1, 0x2d, 0x9d, 0x9e, 0xfa, 0x90, 0x4e, 0xd4, 0x47, 0x89, 0x3e, | 3441 | 0x7a, 0xc0, 0x26, 0xb6, 0x47, 0x90, 0x5c, 0xb5, 0x68, 0x49, 0x7d, 0x64, |
| 3497 | 0x57, 0x92, 0xf5, 0xe8, 0x71, 0x25, 0xfb, 0x8d, 0x59, 0x8f, 0xb5, 0xd3, | 3442 | 0xd0, 0x11, 0xad, 0x97, 0x7c, 0x69, 0x54, 0xd6, 0x3e, 0x4b, 0x9e, 0x81, |
| 3498 | 0x38, 0x7f, 0x2c, 0x7b, 0x46, 0x1c, 0xa6, 0x88, 0xc3, 0x14, 0x71, 0x99, | 3443 | 0xc3, 0x26, 0x70, 0xd8, 0x04, 0x2e, 0x9b, 0x64, 0x8b, 0xc0, 0xa5, 0x5b, |
| 3499 | 0x8a, 0xa7, 0xaa, 0x81, 0x5c, 0x99, 0x29, 0xc9, 0x75, 0x17, 0xfe, 0xec, | 3444 | 0x63, 0x16, 0xdd, 0x33, 0x11, 0xcf, 0x36, 0xcf, 0xe7, 0xa8, 0xee, 0x2b, |
| 3500 | 0xcd, 0x79, 0xaf, 0x21, 0xa6, 0x12, 0xcf, 0x11, 0x37, 0x4a, 0x66, 0x0b, | 3445 | 0xba, 0xdc, 0x64, 0xcf, 0xe4, 0x68, 0x51, 0x7d, 0xae, 0xcf, 0xc3, 0x1f, |
| 3501 | 0xc2, 0x77, 0xc4, 0x92, 0x4e, 0xca, 0x2e, 0x62, 0x29, 0x39, 0xca, 0xb9, | 3446 | 0x6f, 0x93, 0x3e, 0x16, 0x01, 0xb3, 0x11, 0xdc, 0xf9, 0x86, 0x1a, 0xa7, |
| 3502 | 0x21, 0x59, 0xb1, 0x67, 0x99, 0xf3, 0x4e, 0x09, 0x7d, 0x55, 0xc3, 0xda, | 3447 | 0xcb, 0x6d, 0x45, 0xf5, 0x36, 0xcb, 0x2d, 0x51, 0x47, 0xae, 0x1f, 0x72, |
| 3503 | 0x64, 0x70, 0x4a, 0x76, 0x11, 0x1f, 0x35, 0xac, 0x53, 0x56, 0xe8, 0xb5, | 3448 | 0x93, 0x90, 0x2b, 0xd2, 0x95, 0x58, 0xb6, 0x1f, 0xb2, 0xbb, 0x89, 0xec, |
| 3504 | 0x40, 0xd1, 0x4e, 0xdf, 0x45, 0x0e, 0xf8, 0x88, 0xfb, 0x99, 0xb2, 0x12, | 3449 | 0x44, 0x61, 0x9a, 0x7c, 0xc8, 0x0c, 0xbb, 0xd3, 0xc0, 0xdc, 0x9c, 0x33, |
| 3505 | 0x47, 0x56, 0xe7, 0x61, 0x8b, 0xf9, 0x29, 0xd8, 0x88, 0x39, 0xc1, 0xb8, | 3450 | 0x09, 0xd9, 0x49, 0x5a, 0xc2, 0xaf, 0xde, 0xa4, 0x9a, 0x2c, 0xb2, 0x5e, |
| 3506 | 0xfa, 0xeb, 0xb4, 0x8e, 0x4e, 0x22, 0x7e, 0x40, 0x8b, 0xf3, 0x9f, 0x4a, | 3451 | 0xaf, 0x70, 0x9e, 0x7d, 0x1e, 0xeb, 0xac, 0x41, 0xa7, 0x83, 0x39, 0x0b, |
| 3507 | 0x67, 0xc0, 0x1f, 0x15, 0xa9, 0xe7, 0x56, 0xac, 0x65, 0x3d, 0xbd, 0xa2, | 3452 | 0x7a, 0x24, 0xc6, 0x0f, 0x75, 0xbd, 0x09, 0x6c, 0x3b, 0xfc, 0xfc, 0xae, |
| 3508 | 0x0a, 0xd1, 0xef, 0x1d, 0xd9, 0x1f, 0xb6, 0x12, 0x09, 0x5b, 0x4a, 0x29, | 3453 | 0x16, 0x01, 0xfc, 0x50, 0x54, 0x6e, 0x9d, 0xf8, 0x3d, 0x4b, 0x65, 0xc4, |
| 3509 | 0x9f, 0x5b, 0xbf, 0x84, 0x3c, 0x7a, 0xd3, 0xea, 0xaf, 0xc1, 0x57, 0xce, | 3454 | 0x52, 0xa8, 0x7e, 0xaa, 0xda, 0x86, 0x21, 0x02, 0x93, 0xaa, 0xf0, 0x42, |
| 3510 | 0xf4, 0xa7, 0xdd, 0x45, 0x36, 0x3b, 0x61, 0xbc, 0x08, 0xdd, 0xae, 0xc2, | 3455 | 0x38, 0x2b, 0xe3, 0x6f, 0x73, 0xb6, 0x01, 0x8e, 0x1d, 0x17, 0x9d, 0x9c, |
| 3511 | 0xff, 0xb4, 0xf9, 0xa5, 0x2e, 0x64, 0x77, 0x1c, 0xe6, 0xae, 0xb4, 0xbb, | 3456 | 0x93, 0xc1, 0x1a, 0xc4, 0x5f, 0xf5, 0x52, 0xd5, 0x19, 0xc0, 0x5a, 0x10, |
| 3512 | 0xa4, 0xb3, 0x69, 0xbe, 0xa2, 0xab, 0xb2, 0xdc, 0xee, 0x9c, 0x34, 0x6e, | 3457 | 0x2d, 0x3f, 0x02, 0x8e, 0x0e, 0x60, 0x0d, 0x8f, 0x1c, 0x07, 0xac, 0x57, |
| 3513 | 0x24, 0x2b, 0x85, 0x2a, 0xfd, 0x36, 0xba, 0x00, 0x3f, 0x2c, 0xb7, 0xbb, | 3458 | 0xbc, 0xbe, 0x17, 0x36, 0xa6, 0xdf, 0x7a, 0xa9, 0xf6, 0x50, 0x7c, 0xd8, |
| 3514 | 0x13, 0x8f, 0x6d, 0x76, 0xa4, 0x75, 0x77, 0x55, 0x5a, 0x6e, 0x45, 0xdd, | 3459 | 0xc6, 0x38, 0x2e, 0xd8, 0x5f, 0x26, 0xb1, 0xed, 0x8e, 0x57, 0x3a, 0x6f, |
| 3515 | 0xa5, 0x64, 0x0c, 0x72, 0xab, 0xd8, 0x87, 0x71, 0x15, 0x06, 0x75, 0x77, | 3460 | 0x63, 0x7e, 0xe7, 0xab, 0x82, 0x76, 0xf5, 0x75, 0x15, 0x15, 0xf0, 0xe9, |
| 3516 | 0xe2, 0xb1, 0x8b, 0x9d, 0x7b, 0x90, 0xb7, 0xf2, 0x41, 0xad, 0x12, 0x21, | 3461 | 0xf3, 0x8a, 0x0a, 0x07, 0xcc, 0x18, 0x4b, 0x29, 0xa6, 0x78, 0xe4, 0x7c, |
| 3517 | 0x77, 0xaf, 0x1e, 0x74, 0x25, 0x92, 0xb5, 0x5e, 0x49, 0x6a, 0xe9, 0x84, | 3462 | 0x43, 0x85, 0x79, 0x65, 0x98, 0x4b, 0x93, 0x4f, 0x52, 0xcd, 0xf1, 0xfc, |
| 3518 | 0xac, 0xf7, 0x24, 0x79, 0x6a, 0x06, 0xfb, 0x55, 0xf0, 0xde, 0x9b, 0x97, | 3463 | 0x32, 0x15, 0x68, 0xa9, 0x39, 0x01, 0xdf, 0xf5, 0xe3, 0xdc, 0x9e, 0x4f, |
| 3519 | 0x56, 0x6f, 0x62, 0x45, 0x55, 0x5b, 0x92, 0xf4, 0xd6, 0xf1, 0x2f, 0x49, | 3464 | 0x34, 0x8c, 0xe7, 0xf0, 0x69, 0xc8, 0x20, 0x5f, 0xd4, 0xa0, 0x8b, 0xc7, |
| 3520 | 0xa3, 0x53, 0x2a, 0x5d, 0xec, 0xb4, 0xc8, 0x5f, 0x72, 0xaa, 0x81, 0x3e, | 3465 | 0x41, 0xe8, 0xf7, 0x60, 0x23, 0xfc, 0xa1, 0x26, 0xec, 0x29, 0xf8, 0x23, |
| 3521 | 0xdc, 0xdd, 0x65, 0xdc, 0x40, 0xce, 0xf0, 0x97, 0x54, 0x55, 0x4b, 0xd3, | 3466 | 0x74, 0x78, 0x8e, 0xf3, 0x98, 0xf3, 0x4c, 0xa4, 0x3c, 0xbf, 0x1a, 0xdb, |
| 3522 | 0xf7, 0x21, 0xc3, 0x81, 0x4d, 0xa8, 0xeb, 0x2c, 0xf6, 0xed, 0x8f, 0xad, | 3467 | 0xe2, 0xd9, 0xb7, 0x89, 0xf3, 0x51, 0x9a, 0x83, 0x38, 0x27, 0x59, 0x73, |
| 3523 | 0x1e, 0x7d, 0x37, 0x24, 0xed, 0x78, 0x1e, 0x76, 0x62, 0xd4, 0x0e, 0xc9, | 3468 | 0x32, 0xa0, 0xd9, 0x7a, 0xe3, 0x92, 0x36, 0x15, 0xcd, 0x65, 0x03, 0xc6, |
| 3524 | 0x5a, 0xf4, 0x9e, 0x79, 0x1a, 0xb1, 0xfa, 0x9a, 0x98, 0x7b, 0x6a, 0xc0, | 3469 | 0x6e, 0x6f, 0x09, 0x58, 0x9c, 0xad, 0xb7, 0x06, 0x4f, 0xef, 0x34, 0xa8, |
| 3525 | 0x93, 0x1a, 0x4c, 0xfa, 0x42, 0x54, 0x96, 0x53, 0xd8, 0xb7, 0xcf, 0xb7, | 3470 | 0xf6, 0x4c, 0x20, 0x8e, 0x0a, 0xec, 0x1f, 0xf9, 0xcc, 0x29, 0xec, 0xd5, |
| 3526 | 0x0e, 0x1d, 0xc8, 0x37, 0x06, 0xbe, 0x06, 0xf8, 0x7c, 0x39, 0x6d, 0x79, | 3471 | 0x1e, 0x3c, 0x7d, 0xa7, 0x71, 0x0c, 0xbe, 0xa2, 0xfb, 0xf0, 0x3f, 0xf6, |
| 3527 | 0xc7, 0xc0, 0xbb, 0x9b, 0xf1, 0xce, 0x95, 0x17, 0x25, 0x06, 0xcf, 0x64, | 3472 | 0xdf, 0x79, 0xda, 0x84, 0x9d, 0x1c, 0x33, 0x70, 0x2b, 0x7c, 0x75, 0xcc, |
| 3528 | 0xb0, 0x08, 0x7f, 0xae, 0xf8, 0x0d, 0xf0, 0x36, 0xa0, 0x03, 0xc6, 0x54, | 3473 | 0x00, 0x96, 0xf1, 0x0c, 0x6c, 0xd4, 0xda, 0x83, 0x73, 0x22, 0xa8, 0x51, |
| 3529 | 0x5a, 0xba, 0x42, 0xb9, 0x61, 0xf9, 0x69, 0xe6, 0x83, 0x95, 0xd9, 0x82, | 3474 | 0xd8, 0x5e, 0xc2, 0xcf, 0xa2, 0xa9, 0x86, 0x65, 0xdd, 0x81, 0x4e, 0x51, |
| 3530 | 0x4c, 0xe8, 0x95, 0x96, 0x20, 0x67, 0x01, 0xe3, 0x3b, 0xa6, 0x9d, 0x02, | 3475 | 0xf4, 0xdc, 0xc8, 0xdc, 0x65, 0xae, 0xf0, 0x39, 0x58, 0x97, 0x65, 0x04, |
| 3531 | 0x77, 0x7c, 0x3e, 0xbf, 0x69, 0x54, 0x15, 0x31, 0x5a, 0x89, 0x82, 0xb6, | 3476 | 0xae, 0x1c, 0x6a, 0xf5, 0xbc, 0x22, 0x82, 0x00, 0x98, 0x90, 0x88, 0x4d, |
| 3532 | 0xf0, 0xbd, 0x28, 0x75, 0xe4, 0x99, 0x8a, 0xc6, 0xa4, 0xe9, 0x39, 0x8e, | 3477 | 0x11, 0x58, 0xe1, 0x38, 0x5c, 0x45, 0x1c, 0x80, 0x03, 0xd8, 0x0c, 0xff, |
| 3533 | 0xaa, 0xba, 0xd2, 0x44, 0x84, 0x26, 0xcb, 0xda, 0xce, 0xad, 0x20, 0xce, | 3478 | 0xd7, 0x44, 0x70, 0x91, 0x2a, 0x45, 0xa2, 0xc5, 0x06, 0x61, 0x3f, 0xec, |
| 3534 | 0x54, 0xf5, 0x7b, 0xaa, 0x5f, 0x0f, 0x0a, 0xa0, 0x41, 0x6e, 0x46, 0xa3, | 3479 | 0x55, 0xc2, 0x0f, 0x78, 0x0e, 0xed, 0x12, 0x6c, 0xf0, 0xc2, 0x1a, 0x79, |
| 3535 | 0xb0, 0xc1, 0x38, 0x68, 0xcf, 0x62, 0x7e, 0x0a, 0xf8, 0x39, 0x0e, 0x1a, | 3480 | 0xfe, 0x1c, 0xbc, 0x9e, 0xfb, 0x31, 0x59, 0x99, 0xe0, 0x9c, 0xdc, 0x68, |
| 3536 | 0x8e, 0xcc, 0x11, 0xda, 0x85, 0xf4, 0x15, 0xe8, 0x98, 0xcf, 0x55, 0x60, | 3481 | 0x90, 0x25, 0x83, 0xb3, 0x72, 0xa9, 0x31, 0xec, 0xff, 0x15, 0xbe, 0x26, |
| 3537 | 0x9b, 0xc1, 0xb4, 0xc9, 0x7d, 0x0c, 0x9a, 0x54, 0x67, 0x79, 0x37, 0x98, | 3482 | 0xf2, 0xc6, 0x37, 0x69, 0xc2, 0xdf, 0x04, 0x6f, 0xeb, 0xf8, 0x5d, 0x21, |
| 3538 | 0x4b, 0xf9, 0x7a, 0x80, 0xf5, 0xab, 0x9f, 0x52, 0xb2, 0x6b, 0x2e, 0x46, | 3483 | 0xde, 0xfb, 0x9c, 0x1c, 0x69, 0xf1, 0x78, 0x56, 0xaa, 0x56, 0xb7, 0xde, |
| 3539 | 0x8c, 0x61, 0x79, 0xaf, 0x11, 0x25, 0xe3, 0xae, 0xcd, 0xf3, 0x3c, 0xdf, | 3484 | 0xbf, 0x69, 0xf6, 0xfb, 0x3d, 0x2a, 0xd1, 0x9b, 0xc9, 0xde, 0xf0, 0x0d, |
| 3540 | 0x39, 0xb2, 0x16, 0x9c, 0x39, 0xb8, 0x1a, 0x39, 0xee, 0xfa, 0xfc, 0x01, | 3485 | 0x9d, 0x6c, 0x94, 0x80, 0xef, 0x03, 0xfa, 0x4b, 0xa9, 0xfe, 0xad, 0x58, |
| 3541 | 0x69, 0xf9, 0x61, 0x5c, 0x87, 0xbf, 0xd7, 0x53, 0xe6, 0xc6, 0x18, 0xce, | 3486 | 0x37, 0x63, 0x77, 0xc2, 0xdf, 0x3a, 0x74, 0x8f, 0xa3, 0x69, 0x7e, 0x42, |
| 3542 | 0x1d, 0x22, 0xea, 0x26, 0xf1, 0x9c, 0x1c, 0x04, 0x0f, 0xfc, 0xd8, 0x82, | 3487 | 0x1e, 0xec, 0xe4, 0xeb, 0xc5, 0x66, 0x0e, 0x9c, 0xd0, 0xba, 0xaa, 0x7e, |
| 3543 | 0x2c, 0x8e, 0x88, 0x99, 0x34, 0x84, 0x8e, 0xb0, 0x47, 0x34, 0xe7, 0x1d, | 3488 | 0x8f, 0xf3, 0xe6, 0x81, 0x5f, 0x1b, 0x3f, 0xc4, 0x72, 0x96, 0xe7, 0x0c, |
| 3544 | 0x61, 0x3c, 0xfa, 0x5c, 0x63, 0x8d, 0x79, 0xf5, 0x50, 0x2d, 0x0a, 0xe3, | 3489 | 0xaa, 0xa2, 0x0e, 0xd5, 0xdb, 0xfc, 0xcc, 0x73, 0x9c, 0xcf, 0x72, 0x18, |
| 3545 | 0x66, 0x96, 0x2b, 0x6f, 0xc1, 0xb6, 0xed, 0x94, 0xf5, 0x22, 0xaf, 0x11, | 3490 | 0xff, 0x8c, 0xb5, 0x1f, 0xea, 0x5a, 0x9b, 0xb9, 0xc6, 0xbe, 0x02, 0x47, |
| 3546 | 0xcc, 0x0f, 0xc6, 0x4a, 0x8e, 0xb1, 0xe0, 0x89, 0x98, 0x9f, 0xa5, 0x0c, | 3491 | 0xda, 0x96, 0x51, 0x6e, 0x92, 0x51, 0x69, 0x92, 0x5b, 0xf5, 0x65, 0x1c, |
| 3547 | 0x6b, 0x6b, 0x19, 0x8e, 0x2e, 0x40, 0x0f, 0x63, 0x9e, 0x00, 0x86, 0xb6, | 3492 | 0x97, 0xd0, 0xb6, 0xe1, 0x53, 0xc6, 0xc3, 0xa4, 0x8c, 0x1a, 0x46, 0x5c, |
| 3548 | 0x63, 0x1b, 0x9f, 0xad, 0x40, 0xdd, 0x30, 0x93, 0xd3, 0xb4, 0xb9, 0x31, | 3493 | 0xc3, 0x0c, 0x3c, 0x0f, 0xb5, 0x7e, 0x9d, 0x01, 0x27, 0x42, 0xf8, 0x5f, |
| 3549 | 0x27, 0xe2, 0x45, 0xd0, 0xfe, 0x16, 0xf6, 0x5a, 0x02, 0x8e, 0x12, 0x7b, | 3494 | 0x2c, 0x20, 0x47, 0x5e, 0x73, 0xa8, 0x5f, 0xa8, 0x39, 0x51, 0x77, 0xa8, |
| 3550 | 0xb9, 0x77, 0x55, 0xd7, 0x3a, 0xfb, 0xa0, 0x4b, 0x00, 0x7c, 0x83, 0x0d, | 3495 | 0x4f, 0x28, 0xb6, 0xed, 0x3d, 0x01, 0xdb, 0x78, 0x3e, 0xac, 0xfa, 0xbf, |
| 3551 | 0x2c, 0xde, 0x0e, 0x23, 0xdf, 0x99, 0xf3, 0x61, 0xb0, 0x22, 0x9c, 0x97, | 3496 | 0xc2, 0x9e, 0x41, 0xcc, 0xc7, 0x4a, 0x23, 0xcd, 0xfb, 0xd0, 0xa9, 0x38, |
| 3552 | 0x61, 0x85, 0xf7, 0x26, 0xfc, 0xb4, 0x5e, 0x79, 0xd4, 0x69, 0x6c, 0xbf, | 3497 | 0x67, 0x58, 0x49, 0xfe, 0x8f, 0x92, 0xdc, 0x2e, 0x81, 0x5b, 0xad, 0x5f, |
| 3553 | 0x9f, 0xf9, 0x48, 0xc6, 0x14, 0x6a, 0x49, 0xd3, 0x27, 0x5f, 0x11, 0x7c, | 3498 | 0x46, 0x5e, 0xaf, 0xc7, 0xb8, 0xf1, 0x6a, 0xae, 0xd8, 0xd3, 0xc3, 0xa3, |
| 3554 | 0xfb, 0xc0, 0xf3, 0x77, 0xac, 0x15, 0x30, 0x0e, 0xca, 0xb1, 0xb8, 0x8d, | 3499 | 0xcc, 0x51, 0xad, 0x2f, 0xfa, 0xd3, 0x58, 0x2b, 0x4d, 0xca, 0xcf, 0x20, |
| 3555 | 0xbd, 0x02, 0xec, 0xb5, 0x24, 0xba, 0xfa, 0x3c, 0xb0, 0x67, 0x2a, 0x68, | 3500 | 0xb7, 0x73, 0x3d, 0x60, 0xdb, 0x02, 0xd8, 0xd6, 0xd7, 0xc9, 0xfb, 0xa8, |
| 3556 | 0xc8, 0xf7, 0x55, 0xbf, 0x46, 0xd2, 0x37, 0x5f, 0x18, 0xf0, 0x4d, 0x20, | 3501 | 0x09, 0xf5, 0xb8, 0x06, 0xf4, 0x90, 0xa9, 0x0c, 0xfc, 0x3c, 0x77, 0x8e, |
| 3557 | 0xae, 0xcd, 0xc1, 0x87, 0xb2, 0x98, 0x22, 0x66, 0x3e, 0x98, 0xad, 0xfb, | 3502 | 0xf8, 0x3b, 0xf5, 0x08, 0xbc, 0x57, 0xc1, 0xeb, 0xa5, 0xe2, 0x29, 0xa3, |
| 3558 | 0xc0, 0xbe, 0xcf, 0x64, 0x18, 0x5e, 0x22, 0x0e, 0xca, 0x19, 0x8b, 0x83, | 3503 | 0xb2, 0x75, 0xcc, 0x4c, 0xfa, 0x08, 0xd8, 0x0d, 0x5e, 0x3b, 0x2c, 0x97, |
| 3559 | 0x45, 0xe2, 0x20, 0x70, 0xa5, 0xb5, 0x00, 0x7b, 0xc7, 0xef, 0x02, 0x5f, | 3504 | 0x85, 0x5c, 0x1f, 0x64, 0xbe, 0x82, 0xb9, 0x0c, 0xc6, 0x6e, 0x3d, 0x71, |
| 3560 | 0xea, 0xf0, 0xc4, 0x4f, 0x3a, 0x1a, 0x71, 0xe5, 0x82, 0x9f, 0x75, 0xf8, | 3505 | 0x2d, 0xc1, 0x5e, 0x2e, 0xf6, 0x9a, 0x21, 0x19, 0xe4, 0x51, 0xaf, 0x47, |
| 3561 | 0xf3, 0xae, 0x8c, 0x84, 0xde, 0xbb, 0xc0, 0x9b, 0xe4, 0x28, 0xf3, 0xc0, | 3506 | 0xdc, 0x0a, 0x3d, 0x97, 0xd4, 0x6d, 0xe6, 0xf2, 0x89, 0x2e, 0x2e, 0xbb, |
| 3562 | 0x18, 0xe4, 0x3a, 0xb0, 0x6a, 0xba, 0x7c, 0x0a, 0x71, 0xef, 0x02, 0x27, | 3507 | 0x64, 0xc6, 0x9c, 0x78, 0x29, 0xc9, 0x41, 0x9c, 0xc7, 0x5f, 0x48, 0xe6, |
| 3563 | 0xb4, 0x70, 0xdf, 0xbc, 0x6e, 0xe6, 0xf5, 0x9b, 0xbf, 0xb7, 0x1d, 0xb8, | 3508 | 0x1d, 0xe4, 0xe3, 0xe7, 0x92, 0xba, 0x62, 0xe1, 0x39, 0xa0, 0xe5, 0x38, |
| 3564 | 0x19, 0xb5, 0xee, 0x73, 0x90, 0x31, 0x15, 0x1c, 0x81, 0x1f, 0xd7, 0x16, | 3509 | 0x37, 0x67, 0x39, 0x37, 0x17, 0x90, 0x9b, 0x4b, 0xe0, 0xa7, 0xff, 0x31, |
| 3565 | 0xfe, 0x1b, 0xcf, 0x6f, 0x32, 0x1e, 0xd4, 0x90, 0x0a, 0xf7, 0x15, 0x69, | 3510 | 0x19, 0xc8, 0x4d, 0x44, 0xbf, 0x6b, 0x48, 0xe4, 0x21, 0x13, 0xf2, 0xdc, |
| 3566 | 0x74, 0x69, 0x87, 0x18, 0x76, 0xb0, 0x18, 0x84, 0x9c, 0x8f, 0x91, 0xf3, | 3511 | 0x1b, 0xcc, 0xc1, 0x36, 0xcf, 0xfe, 0x18, 0x67, 0x0a, 0xcf, 0x70, 0xde, |
| 3567 | 0x22, 0x4d, 0x62, 0x05, 0x30, 0x8c, 0xb8, 0xb7, 0x06, 0x7a, 0x55, 0x19, | 3512 | 0xd4, 0x3a, 0x13, 0x28, 0xf7, 0x32, 0x8d, 0x16, 0x2e, 0x23, 0x4f, 0x9a, |
| 3568 | 0x82, 0x5d, 0x11, 0x4b, 0x4a, 0x4a, 0xba, 0x7a, 0x54, 0xaf, 0x83, 0xb6, | 3513 | 0x34, 0x81, 0xdd, 0x78, 0xdf, 0xb4, 0x96, 0xa7, 0x3d, 0x05, 0xff, 0xbd, |
| 3569 | 0x50, 0x5d, 0xd6, 0x5b, 0xd1, 0x31, 0x37, 0xef, 0x97, 0xda, 0x1d, 0x71, | 3514 | 0x6f, 0x90, 0xe2, 0xfa, 0xfb, 0x1d, 0xe8, 0x18, 0x71, 0xa7, 0xc0, 0xfb, |
| 3570 | 0x6a, 0x7d, 0x3f, 0x67, 0x74, 0x8f, 0x65, 0x74, 0x4b, 0x83, 0x74, 0x98, | 3515 | 0xc5, 0xd2, 0x7f, 0x93, 0xf9, 0x43, 0x22, 0x83, 0xba, 0x56, 0xe4, 0x7d, |
| 3571 | 0x6f, 0x64, 0xf3, 0x09, 0xe6, 0x3f, 0x91, 0xd9, 0x9c, 0xb5, 0xa0, 0x84, | 3516 | 0x89, 0x2a, 0x2d, 0xf6, 0x83, 0xdf, 0x85, 0x07, 0x1f, 0x78, 0x20, 0xaa, |
| 3572 | 0x3a, 0xcb, 0x3a, 0x10, 0x06, 0x81, 0xfa, 0x4f, 0x75, 0x60, 0x61, 0x00, | 3517 | 0x36, 0xc1, 0x3f, 0xc4, 0x38, 0xc6, 0x1a, 0xd6, 0x8b, 0x22, 0x72, 0xaa, |
| 3573 | 0xbb, 0x45, 0xd9, 0xbe, 0xc2, 0x67, 0x4c, 0x0e, 0x9e, 0x75, 0x58, 0x49, | 3518 | 0xc3, 0xb8, 0x66, 0xbc, 0x9f, 0x49, 0xf0, 0x3e, 0x0b, 0xbc, 0x7b, 0xe3, |
| 3574 | 0x74, 0x33, 0x3e, 0xf1, 0xdb, 0xcc, 0xf6, 0x21, 0x2d, 0xf1, 0x7a, 0x90, | 3519 | 0x37, 0xc0, 0xa3, 0x1b, 0x0f, 0xf1, 0xe8, 0x4c, 0x82, 0xf1, 0x59, 0x60, |
| 3575 | 0x16, 0x69, 0x04, 0xbb, 0xa8, 0xb3, 0xb7, 0xb3, 0xd9, 0x01, 0xac, 0x21, | 3520 | 0xfc, 0x97, 0xc0, 0x96, 0x85, 0x9a, 0x0e, 0xdc, 0x36, 0xc8, 0x88, 0x50, |
| 3576 | 0xe7, 0x53, 0x57, 0x1e, 0xd6, 0xcc, 0xef, 0x7b, 0xb5, 0x3d, 0xc7, 0x0e, | 3521 | 0x1b, 0x80, 0x83, 0x44, 0xcf, 0xe9, 0x44, 0xcf, 0xcc, 0x63, 0xf4, 0x9c, |
| 3577 | 0xe8, 0x77, 0x26, 0x2c, 0xce, 0x2c, 0x75, 0x86, 0x20, 0x7e, 0x54, 0x8e, | 3522 | 0x4e, 0xf4, 0xcc, 0x74, 0xeb, 0x81, 0x5c, 0x25, 0x91, 0x0b, 0x1f, 0x23, |
| 3578 | 0x23, 0x9f, 0x9f, 0x86, 0xef, 0x2f, 0xc6, 0x0a, 0xdd, 0x02, 0x6b, 0x8e, | 3523 | 0x57, 0x49, 0xe4, 0xc2, 0x2e, 0x39, 0x0b, 0x67, 0xe2, 0x73, 0x71, 0x1e, |
| 3579 | 0x41, 0x1c, 0x86, 0xd6, 0x17, 0xb5, 0x68, 0x0d, 0x91, 0xfc, 0x2d, 0xb9, | 3524 | 0xdb, 0x45, 0x2c, 0x7c, 0x8a, 0xb1, 0x62, 0x87, 0x18, 0xef, 0x61, 0x04, |
| 3580 | 0x3a, 0x3f, 0x22, 0x85, 0x4b, 0xd4, 0x01, 0xfd, 0xd2, 0xe6, 0xe0, 0x3e, | 3525 | 0x66, 0x9a, 0x37, 0xb1, 0x96, 0xfd, 0x90, 0x61, 0x0e, 0x3c, 0xe2, 0xbb, |
| 3581 | 0x73, 0xd8, 0x67, 0x02, 0x18, 0x78, 0x3f, 0xea, 0x8b, 0x2f, 0x7a, 0x1a, | 3526 | 0x3d, 0xf8, 0x6e, 0x1f, 0xef, 0xf8, 0xfb, 0x66, 0x82, 0x15, 0xae, 0x45, |
| 3582 | 0x58, 0x9b, 0x96, 0x9c, 0x3a, 0xe4, 0xab, 0x4b, 0x3c, 0x3f, 0x31, 0xb8, | 3527 | 0x5e, 0x2d, 0x7c, 0x68, 0x6d, 0x46, 0xb0, 0x9f, 0xc5, 0xd5, 0xc3, 0x62, |
| 3583 | 0x94, 0xd5, 0x36, 0xe6, 0xd6, 0x10, 0x6a, 0xfa, 0x1f, 0x91, 0xbb, 0x4a, | 3528 | 0x60, 0x61, 0x0e, 0x35, 0xa7, 0x69, 0x52, 0x59, 0x32, 0x57, 0x5f, 0x91, |
| 3584 | 0x56, 0x2b, 0xc6, 0x1c, 0x89, 0x7f, 0x00, 0xfb, 0x62, 0x6e, 0x93, 0x6b, | 3529 | 0x31, 0x76, 0xb7, 0xb1, 0x7e, 0xbb, 0xc3, 0xab, 0x99, 0x46, 0x8e, 0x68, |
| 3585 | 0xbb, 0x98, 0xe7, 0x1c, 0x65, 0x30, 0x16, 0x0f, 0xa0, 0xae, 0x61, 0xcf, | 3530 | 0xbd, 0x97, 0x16, 0x50, 0x4f, 0xce, 0x03, 0x4b, 0xd7, 0x7d, 0xb0, 0x90, |
| 3586 | 0xa3, 0xe4, 0x19, 0x42, 0xcd, 0x27, 0xfe, 0x63, 0xdc, 0xe4, 0x3b, 0xcf, | 3531 | 0x86, 0x81, 0x0b, 0x0d, 0x5c, 0x7b, 0x71, 0x6c, 0x23, 0xb5, 0x08, 0x66, |
| 3587 | 0x44, 0x6c, 0x73, 0x31, 0x8e, 0x60, 0xe4, 0x99, 0x7e, 0x91, 0xf9, 0x8a, | 3532 | 0xfc, 0x88, 0x76, 0x26, 0xf3, 0x94, 0xd9, 0xec, 0xd4, 0x43, 0xb9, 0xde, |
| 3588 | 0xcf, 0xc6, 0xe8, 0xea, 0xa8, 0xd4, 0x3b, 0x11, 0x30, 0x76, 0xaa, 0x7c, | 3533 | 0xbd, 0x8f, 0x8b, 0x7d, 0x02, 0xd4, 0xe0, 0x3f, 0xa2, 0x17, 0x70, 0x48, |
| 3589 | 0x5c, 0xb8, 0x86, 0xf7, 0x2e, 0xe7, 0xbd, 0x81, 0x79, 0x3c, 0x77, 0xad, | 3534 | 0x8e, 0x22, 0x97, 0x36, 0x39, 0x27, 0x80, 0xa3, 0x9b, 0x5c, 0xeb, 0x39, |
| 3590 | 0xce, 0xa8, 0xed, 0x79, 0xff, 0xb2, 0x06, 0xc3, 0xa2, 0xc7, 0xd8, 0x64, | 3535 | 0xe7, 0x5a, 0xc0, 0x62, 0x9a, 0x7f, 0x72, 0xe8, 0x5b, 0x3e, 0x41, 0xed, |
| 3591 | 0xaf, 0xc2, 0xfa, 0x67, 0x71, 0x6b, 0x96, 0x7d, 0xca, 0xeb, 0x1d, 0xd6, | 3536 | 0x10, 0x34, 0x5f, 0xd4, 0x7a, 0xca, 0xff, 0x04, 0xb8, 0xc2, 0xb7, 0x75, |
| 3592 | 0x42, 0xcd, 0xbc, 0x44, 0x00, 0x1c, 0x92, 0xba, 0x9f, 0x9f, 0x0b, 0x71, | 3537 | 0x9e, 0xdb, 0xc5, 0x77, 0xfe, 0x66, 0x51, 0x76, 0xf5, 0x49, 0xec, 0x89, |
| 3593 | 0x1c, 0x53, 0x36, 0x65, 0x4c, 0xc2, 0x76, 0xec, 0x47, 0xa2, 0xb2, 0x76, | 3538 | 0xfd, 0xce, 0xf0, 0xfa, 0x1c, 0x7a, 0x1a, 0xce, 0xf3, 0x18, 0xd7, 0xf9, |
| 3594 | 0xa6, 0x92, 0x26, 0xf9, 0xba, 0x05, 0x29, 0x6c, 0xcc, 0x8b, 0x7b, 0xd6, | 3539 | 0xdd, 0x48, 0x7c, 0x6a, 0x62, 0xfc, 0x02, 0x46, 0x3e, 0x4f, 0x0f, 0xce, |
| 3595 | 0xc8, 0x66, 0x5f, 0x9e, 0xb7, 0x2c, 0xbe, 0xd4, 0x5e, 0xa2, 0x1e, 0x98, | 3540 | 0xa7, 0xf5, 0x5d, 0x9f, 0x9f, 0xb5, 0x96, 0x41, 0x2f, 0x95, 0x1b, 0x0a, |
| 3596 | 0xdf, 0x61, 0x3d, 0x0c, 0x81, 0x67, 0xc5, 0x6c, 0xdf, 0xb2, 0x34, 0x3b, | 3541 | 0xf5, 0x7d, 0xa4, 0xb0, 0x00, 0x9e, 0x95, 0x5b, 0xe9, 0x3c, 0xcf, 0xd9, |
| 3597 | 0x91, 0xd7, 0x10, 0x8c, 0xdd, 0x3b, 0xe0, 0xbb, 0x22, 0xce, 0xac, 0xe5, | 3542 | 0x5d, 0x73, 0x78, 0x6e, 0xf1, 0x77, 0x41, 0x3b, 0x6a, 0x11, 0x75, 0x11, |
| 3598 | 0x62, 0xa7, 0xbf, 0x17, 0x73, 0xee, 0xb9, 0xb8, 0xbf, 0x57, 0x43, 0x7e, | 3543 | 0xfd, 0xd3, 0x3a, 0xf7, 0x61, 0xdc, 0x53, 0xc5, 0xf5, 0x72, 0x9c, 0x7b, |
| 3599 | 0x89, 0xbd, 0xc4, 0x57, 0xc2, 0x3e, 0x12, 0x7d, 0xe3, 0x39, 0x8d, 0xfd, | 3544 | 0xb0, 0x77, 0x90, 0xff, 0xd7, 0xc1, 0x29, 0xf0, 0xfb, 0x29, 0x41, 0x4f, |
| 3600 | 0x68, 0xa3, 0x02, 0x7a, 0xdb, 0xd9, 0xec, 0x3c, 0x21, 0xe8, 0x34, 0x6c, | 3545 | 0x50, 0xd9, 0x49, 0xcf, 0xa3, 0x35, 0x38, 0x5b, 0x30, 0x0d, 0xe6, 0xe2, |
| 3601 | 0x4e, 0x5b, 0x73, 0x0f, 0xc6, 0xe2, 0x3f, 0x0c, 0xf1, 0x05, 0x75, 0x05, | 3546 | 0xb0, 0x3d, 0x4d, 0xdc, 0x6b, 0x8d, 0x84, 0x55, 0x96, 0x69, 0x21, 0x1f, |
| 3602 | 0xfa, 0xe2, 0xbd, 0xc7, 0x3d, 0x26, 0xe4, 0xc5, 0xd4, 0x62, 0xad, 0x77, | 3547 | 0xac, 0x68, 0xaa, 0x76, 0xf4, 0xd8, 0xb3, 0xc8, 0xd1, 0xd1, 0x4f, 0xb8, |
| 3603 | 0x02, 0x98, 0xd5, 0xe8, 0xfc, 0x2d, 0xaf, 0x3d, 0x49, 0x1b, 0xf8, 0xfb, | 3548 | 0xb6, 0xb1, 0x6f, 0x4f, 0xc0, 0x1e, 0xf4, 0x05, 0xeb, 0x92, 0xde, 0x6e, |
| 3604 | 0xac, 0x8c, 0x8a, 0xde, 0x19, 0x95, 0xe7, 0xd0, 0xef, 0x15, 0x36, 0x50, | 3549 | 0xb0, 0x9e, 0x3c, 0x99, 0xe8, 0x11, 0x97, 0xfd, 0x54, 0xcf, 0x9f, 0xa0, |
| 3605 | 0xe7, 0x61, 0x63, 0x75, 0xb6, 0x35, 0xcb, 0x9e, 0xed, 0x32, 0x72, 0x79, | 3550 | 0x87, 0x1c, 0x41, 0xdc, 0xff, 0x4a, 0xe8, 0x62, 0x1f, 0x64, 0xd0, 0x8f, |
| 3606 | 0xb5, 0x12, 0xc5, 0xae, 0x33, 0x2d, 0x67, 0xbe, 0x1b, 0xce, 0x6e, 0xdb, | 3551 | 0x8f, 0xd3, 0xbc, 0x5a, 0x8c, 0x6b, 0xf1, 0x79, 0xd4, 0xde, 0xa8, 0x98, |
| 3607 | 0x7c, 0xc6, 0xfa, 0x4e, 0x20, 0xa7, 0xbb, 0x91, 0x9c, 0xe9, 0x7a, 0xd0, | 3552 | 0x85, 0xef, 0x72, 0xb1, 0x9e, 0x7a, 0xf3, 0x5f, 0x9a, 0xf3, 0x0f, 0xea, |
| 3608 | 0xcb, 0xbb, 0xd5, 0xd7, 0x46, 0xc4, 0xdb, 0x06, 0xfe, 0xc4, 0x53, 0x9e, | 3553 | 0x24, 0xf4, 0xe3, 0xbd, 0x8d, 0xb9, 0x95, 0x80, 0xde, 0x6c, 0xc6, 0xb5, |
| 3609 | 0x0b, 0x3e, 0xa8, 0xd2, 0x6e, 0xec, 0x63, 0xe9, 0x5f, 0xe2, 0xdb, 0xa3, | 3554 | 0xdb, 0xbe, 0x88, 0x9e, 0xbf, 0xd2, 0xf8, 0x47, 0xda, 0xcb, 0x84, 0xc0, |
| 3610 | 0x78, 0x1e, 0x11, 0xf7, 0x1c, 0xfb, 0x4e, 0xc6, 0x24, 0xfd, 0x33, 0xd8, | 3555 | 0x71, 0xe1, 0x02, 0x7c, 0x23, 0xb7, 0x7b, 0xe9, 0x35, 0xf4, 0xa8, 0x99, |
| 3611 | 0x0b, 0x13, 0xfb, 0x20, 0x73, 0x87, 0xb9, 0x9f, 0xe7, 0x66, 0x9e, 0xab, | 3556 | 0x15, 0xd4, 0x65, 0xf8, 0x4d, 0x5c, 0xad, 0x8d, 0x73, 0x9f, 0x79, 0x03, |
| 3612 | 0xc4, 0x01, 0xed, 0x2c, 0xc2, 0x5e, 0xd7, 0x62, 0xe6, 0xeb, 0x0d, 0x73, | 3557 | 0x5c, 0x9f, 0x2f, 0x2a, 0xdf, 0x34, 0x46, 0x69, 0xf9, 0x67, 0x5c, 0x67, |
| 3613 | 0xcd, 0xf6, 0x6e, 0x1e, 0xfb, 0xe2, 0x81, 0xde, 0x2d, 0xef, 0x7b, 0x18, | 3558 | 0xe2, 0x7a, 0x0d, 0xfc, 0xb8, 0x74, 0xa5, 0xa5, 0x68, 0xb9, 0x65, 0xc3, |
| 3614 | 0xaf, 0xe5, 0x81, 0x7c, 0xbd, 0x6e, 0x73, 0xf5, 0x0d, 0xe4, 0xed, 0xcb, | 3559 | 0x2e, 0xfb, 0x41, 0x2f, 0xae, 0x38, 0x1f, 0x57, 0xf0, 0x8b, 0xf3, 0x2d, |
| 3615 | 0x69, 0xd9, 0xe6, 0xec, 0xe1, 0x07, 0x6e, 0x97, 0xb3, 0x97, 0x3f, 0x46, | 3560 | 0xce, 0x04, 0x3e, 0x04, 0xec, 0x0f, 0xee, 0xbd, 0x39, 0x66, 0x9c, 0xff, |
| 3616 | 0xce, 0xfe, 0x30, 0xcb, 0xd9, 0xa2, 0x8d, 0x6b, 0xb5, 0x31, 0xb8, 0xf6, | 3561 | 0x4e, 0xe1, 0x99, 0xcf, 0xca, 0xbd, 0x32, 0xfb, 0x81, 0x7b, 0xe2, 0xee, |
| 3617 | 0x23, 0xac, 0x0d, 0x65, 0x77, 0x0a, 0x6d, 0x3b, 0xe8, 0xc3, 0x0f, 0xd2, | 3562 | 0xfe, 0x9d, 0x73, 0x23, 0x74, 0x6e, 0x33, 0x87, 0xb8, 0x47, 0xa9, 0xc8, |
| 3618 | 0x47, 0xb9, 0x7f, 0xfa, 0x71, 0x5a, 0xd7, 0xa4, 0x81, 0x0f, 0x37, 0x46, | 3563 | 0xf9, 0x86, 0x1d, 0xf3, 0xaa, 0xde, 0xee, 0xf8, 0x3b, 0xf2, 0x59, 0xa7, |
| 3619 | 0x11, 0x4f, 0xcc, 0xe9, 0x3c, 0x9e, 0x02, 0xc4, 0x72, 0xce, 0x8f, 0x7e, | 3564 | 0x57, 0x0a, 0xe9, 0xce, 0x8b, 0x22, 0xee, 0x3b, 0x42, 0xe4, 0x15, 0x3e, |
| 3620 | 0xf3, 0x28, 0x63, 0xa1, 0x60, 0xf3, 0xc6, 0xad, 0xe6, 0x34, 0x65, 0x59, | 3565 | 0xcb, 0x04, 0xee, 0x27, 0x1e, 0x7c, 0xe7, 0xa1, 0x2f, 0xe9, 0xf0, 0x73, |
| 3621 | 0x44, 0x2f, 0xf7, 0x63, 0x8e, 0xdd, 0x7e, 0xac, 0x14, 0x37, 0x4a, 0xf2, | 3566 | 0x38, 0xe1, 0xe7, 0x50, 0xeb, 0x44, 0x26, 0xed, 0xc7, 0x0e, 0x72, 0xee, |
| 3622 | 0xfc, 0x0c, 0xb1, 0x2b, 0x8c, 0xaf, 0x42, 0xe7, 0x6b, 0x91, 0x2f, 0x85, | 3567 | 0x17, 0xe2, 0x7f, 0xe7, 0xdc, 0x46, 0xc2, 0xb9, 0x6c, 0x8c, 0x4d, 0xb1, |
| 3623 | 0x69, 0xe6, 0x33, 0xab, 0x51, 0x11, 0x31, 0x84, 0xbb, 0x55, 0x6a, 0x4e, | 3568 | 0xd2, 0x3d, 0xf7, 0x0e, 0xe6, 0x72, 0x5d, 0xf7, 0xa2, 0xc3, 0x62, 0x12, |
| 3624 | 0xa2, 0xdf, 0x0a, 0x34, 0xfc, 0xfc, 0x32, 0xe2, 0x88, 0xd8, 0x8a, 0x98, | 3569 | 0xf3, 0x03, 0x9c, 0xe4, 0x75, 0x88, 0xff, 0x4a, 0x2f, 0x99, 0x57, 0x99, |
| 3625 | 0x98, 0xdd, 0x44, 0x4c, 0x1c, 0xe7, 0xbb, 0xdd, 0xb7, 0x60, 0x69, 0x5d, | 3570 | 0x97, 0x29, 0x46, 0x5c, 0xe0, 0x31, 0xd5, 0xd1, 0x83, 0x3d, 0x70, 0xd7, |
| 3626 | 0xbb, 0xbf, 0x0f, 0xfd, 0x4b, 0x32, 0x74, 0xce, 0xe0, 0x4e, 0x75, 0x8b, | 3571 | 0x59, 0xcd, 0xc4, 0xf8, 0x37, 0x83, 0x74, 0x4d, 0x81, 0xa6, 0x1b, 0x9e, |
| 3627 | 0xef, 0xb4, 0x8d, 0x5f, 0x60, 0x09, 0xe6, 0x57, 0x6d, 0xfc, 0xd2, 0xa7, | 3572 | 0x7f, 0x87, 0xc7, 0x16, 0xcf, 0x4b, 0xca, 0xae, 0x58, 0xf4, 0xfa, 0x98, |
| 3628 | 0x8c, 0x7b, 0x63, 0x7e, 0x67, 0xf3, 0xe6, 0xd7, 0x16, 0x03, 0xae, 0xc5, | 3573 | 0xe7, 0xba, 0xc2, 0xf3, 0x77, 0x60, 0xf7, 0x5d, 0xe5, 0x50, 0x66, 0x94, |
| 3629 | 0x36, 0x9e, 0x63, 0xf6, 0x9b, 0xa7, 0xbb, 0x3f, 0xd7, 0x16, 0x23, 0x36, | 3574 | 0x39, 0xc9, 0x15, 0x2a, 0x0b, 0xdc, 0xe0, 0x0e, 0xd8, 0xd4, 0x97, 0xd0, |
| 3630 | 0x8c, 0x9c, 0x8a, 0x6d, 0xac, 0xcd, 0xbe, 0x81, 0x63, 0xbf, 0xd6, 0xcf, | 3575 | 0x1f, 0xb9, 0x12, 0xb1, 0xfd, 0x29, 0x6c, 0xe1, 0x7c, 0x0b, 0xbb, 0xc6, |
| 3631 | 0x85, 0x01, 0x39, 0x93, 0xde, 0x23, 0x90, 0x83, 0x9a, 0x17, 0xac, 0xb1, | 3576 | 0xd7, 0x81, 0x83, 0x05, 0x7e, 0xdf, 0xc7, 0x18, 0xdf, 0x2d, 0x78, 0x7f, |
| 3632 | 0x3f, 0x88, 0xa7, 0xd0, 0x2f, 0x81, 0xae, 0xbb, 0x17, 0x2f, 0xc6, 0x31, | 3577 | 0x07, 0x67, 0xb0, 0x28, 0xb7, 0xaa, 0x71, 0xf7, 0x7b, 0x20, 0x77, 0x25, |
| 3633 | 0xd2, 0xde, 0x7f, 0x80, 0x5c, 0x0f, 0x36, 0xa4, 0x1c, 0xea, 0x4d, 0xbd, | 3578 | 0xc1, 0x6b, 0x06, 0xdf, 0xe7, 0x63, 0xbc, 0x72, 0x1c, 0xd9, 0xe7, 0x5a, |
| 3634 | 0x46, 0x25, 0x3a, 0x9b, 0xeb, 0xf4, 0x17, 0xab, 0xcb, 0xbf, 0xcb, 0xc3, | 3579 | 0x7f, 0x80, 0x38, 0x96, 0xe9, 0x2f, 0x31, 0x8f, 0xef, 0xfa, 0x31, 0x7e, |
| 3635 | 0xfa, 0xce, 0xed, 0xf8, 0xbc, 0x01, 0xbe, 0x3f, 0xdf, 0x86, 0x0f, 0xeb, | 3580 | 0x61, 0x0f, 0x64, 0x5a, 0x9f, 0xca, 0x98, 0xe7, 0xe0, 0xc3, 0x65, 0x3f, |
| 3636 | 0x3b, 0xe4, 0x19, 0xb9, 0xd9, 0x6b, 0xd4, 0x6f, 0xc6, 0x75, 0x82, 0xb8, | 3581 | 0xc6, 0xd7, 0xf8, 0x4d, 0x1c, 0xbb, 0x83, 0xfd, 0x6e, 0x3d, 0xc3, 0xf6, |
| 3637 | 0x27, 0xef, 0xde, 0xbb, 0xdc, 0x60, 0x0e, 0xe4, 0x35, 0x9e, 0x71, 0xce, | 3582 | 0x49, 0x8a, 0x39, 0xe5, 0x2e, 0x72, 0x8f, 0xe9, 0x8f, 0x20, 0xdf, 0x62, |
| 3638 | 0x3d, 0xf3, 0x58, 0xcf, 0x63, 0x3c, 0x8f, 0xf9, 0x3c, 0xd6, 0xc3, 0xf8, | 3583 | 0x5d, 0x2b, 0xe5, 0x7d, 0x16, 0x7c, 0x67, 0x5f, 0x33, 0xf7, 0x07, 0x92, |
| 3639 | 0x19, 0xe9, 0xfb, 0x57, 0x6f, 0x84, 0xd8, 0x7f, 0xe4, 0x7f, 0xb8, 0xb7, | 3584 | 0xe7, 0x2f, 0x22, 0xb6, 0x36, 0xfc, 0xd8, 0xe9, 0x05, 0xcc, 0x15, 0xb6, |
| 3640 | 0x10, 0x23, 0x24, 0xb9, 0x75, 0xd7, 0xfb, 0x69, 0xd6, 0xaf, 0x94, 0x98, | 3585 | 0xad, 0x97, 0xd4, 0xd5, 0xd4, 0xae, 0x4f, 0x63, 0x7b, 0x1e, 0xd6, 0x89, |
| 3641 | 0x6b, 0xf8, 0xb3, 0x8f, 0xdf, 0x45, 0x7f, 0x10, 0x67, 0xb6, 0x4d, 0xb2, | 3586 | 0xf9, 0xed, 0xc3, 0xe4, 0xec, 0x2e, 0xb9, 0xbf, 0x1f, 0x22, 0x87, 0xf9, |
| 3642 | 0xb1, 0x4f, 0xd3, 0xef, 0x07, 0xbf, 0x9a, 0x61, 0xf2, 0x17, 0xfb, 0xf5, | 3587 | 0x6d, 0x96, 0xc9, 0xef, 0xf7, 0x20, 0xe5, 0x7d, 0x3c, 0x87, 0xc0, 0x3b, |
| 3643 | 0x47, 0xf2, 0x9c, 0x62, 0x0e, 0xd9, 0x9c, 0xe2, 0x79, 0x70, 0x0f, 0x37, | 3588 | 0xcb, 0x3e, 0x7a, 0xef, 0xec, 0xc6, 0x7e, 0x5a, 0xfb, 0x19, 0xdf, 0xbc, |
| 3644 | 0x66, 0x19, 0x7e, 0x7c, 0x3e, 0xce, 0xf3, 0x08, 0xf1, 0xf4, 0x40, 0x9e, | 3589 | 0xa7, 0xe7, 0x72, 0xef, 0xde, 0xc1, 0x76, 0x1e, 0x79, 0x2f, 0xf6, 0x03, |
| 3645 | 0xe3, 0xb0, 0x53, 0x74, 0xc3, 0xe8, 0xe9, 0x04, 0x36, 0xe3, 0xdd, 0xb7, | 3590 | 0x72, 0xa6, 0x37, 0x3e, 0x47, 0x29, 0xfe, 0x1f, 0x60, 0x7c, 0x01, 0x76, |
| 3646 | 0x81, 0xde, 0x89, 0x76, 0x5a, 0x72, 0x9e, 0xb8, 0x79, 0xdf, 0xdd, 0xdb, | 3591 | 0x55, 0x68, 0xa2, 0xc4, 0xe3, 0xc9, 0x03, 0x18, 0xe7, 0xfb, 0x3a, 0xd7, |
| 3647 | 0x27, 0xd1, 0x6e, 0xb4, 0xeb, 0xa0, 0xdd, 0xc2, 0x78, 0x5c, 0x11, 0x03, | 3592 | 0xa6, 0x3c, 0xee, 0x61, 0x5c, 0xe7, 0xf9, 0x2e, 0xd6, 0xc9, 0x53, 0x95, |
| 3648 | 0x6e, 0x87, 0x13, 0x79, 0x3d, 0x07, 0x06, 0x4d, 0xe7, 0x76, 0xfa, 0xd8, | 3593 | 0x35, 0x7e, 0xff, 0x2c, 0x79, 0xe7, 0xbc, 0xcc, 0x7d, 0xd4, 0x0d, 0x9c, |
| 3649 | 0x35, 0x3d, 0xe9, 0x7f, 0x2b, 0xd8, 0x8b, 0x0f, 0xdb, 0xee, 0x00, 0x3e, | 3594 | 0x9f, 0xeb, 0xd1, 0x18, 0xd5, 0x1d, 0xf8, 0xd5, 0x67, 0x1b, 0x2e, 0xd0, |
| 3650 | 0xdc, 0xa6, 0xe7, 0xa4, 0x0c, 0xda, 0x00, 0xf5, 0xcd, 0xf6, 0x21, 0xec, | 3595 | 0x83, 0x1e, 0xec, 0xb0, 0xba, 0xb2, 0x6a, 0x76, 0x71, 0xe5, 0xb0, 0x7e, |
| 3651 | 0x31, 0x6f, 0x18, 0xd7, 0xf6, 0x9b, 0xc4, 0x46, 0xf6, 0x99, 0xdf, 0x2c, | 3596 | 0x8c, 0xef, 0x27, 0x46, 0x79, 0xcd, 0x48, 0x7a, 0x78, 0xee, 0xbf, 0xf6, |
| 3652 | 0xc8, 0xc8, 0x3e, 0xfb, 0x9e, 0x6c, 0x73, 0x64, 0x4c, 0x48, 0xbf, 0x6e, | 3597 | 0xb4, 0x19, 0xf7, 0x62, 0x9c, 0x17, 0xb8, 0x07, 0x7b, 0x0d, 0xfb, 0xf6, |
| 3653 | 0x59, 0xfd, 0x1f, 0xcf, 0xf4, 0xef, 0xeb, 0x2c, 0xea, 0xa3, 0x30, 0x8d, | 3598 | 0xc5, 0xef, 0xe1, 0x16, 0x8f, 0xec, 0x17, 0x8a, 0x79, 0xd1, 0xe1, 0x79, |
| 3654 | 0xba, 0x7a, 0xd0, 0x35, 0xcc, 0xed, 0xd2, 0x52, 0xd5, 0x13, 0xd2, 0xa8, | 3599 | 0x6a, 0x77, 0x84, 0x75, 0xf0, 0x8f, 0x88, 0x52, 0x9b, 0xa8, 0xfa, 0x16, |
| 3655 | 0xb0, 0x5f, 0x12, 0xdc, 0xb5, 0xa0, 0xc3, 0x02, 0xf5, 0x28, 0x43, 0x8f, | 3600 | 0xd7, 0x54, 0x3b, 0xc9, 0xff, 0x17, 0x31, 0x3e, 0x9f, 0x60, 0x20, 0x3d, |
| 3656 | 0x51, 0xdc, 0x4d, 0xc2, 0xa5, 0x96, 0x84, 0xc9, 0x0a, 0x08, 0x67, 0xbe, | 3601 | 0x4b, 0xec, 0x57, 0xec, 0xaf, 0xf5, 0x2c, 0x30, 0xf5, 0xba, 0x9f, 0xda, |
| 3657 | 0x43, 0xbb, 0x1d, 0xd3, 0x5b, 0x1d, 0xda, 0xed, 0x49, 0xbd, 0xde, 0x99, | 3602 | 0x0a, 0x6c, 0x7f, 0x23, 0xcd, 0x31, 0x88, 0x97, 0xda, 0xd3, 0x72, 0x34, |
| 3658 | 0x44, 0x7f, 0x18, 0xc2, 0xdb, 0xe1, 0xec, 0x25, 0x61, 0x8c, 0xcd, 0xc5, | 3603 | 0x84, 0x2d, 0xfc, 0xff, 0x82, 0x0a, 0x7a, 0x3b, 0xb6, 0x65, 0xc6, 0x78, |
| 3659 | 0x1c, 0x4f, 0x0b, 0xfb, 0xb1, 0x63, 0x7a, 0xaa, 0xcb, 0xf1, 0x49, 0x1d, | 3604 | 0x79, 0xff, 0x7f, 0x04, 0x8f, 0xf6, 0x71, 0x1c, 0x3f, 0x8e, 0xef, 0x7e, |
| 3660 | 0x75, 0x07, 0xe5, 0xfe, 0xc9, 0x00, 0x13, 0x93, 0xeb, 0xc8, 0xa3, 0x17, | 3605 | 0xfc, 0xac, 0x1c, 0x7c, 0xff, 0x51, 0xc3, 0xb3, 0x07, 0x04, 0xe7, 0x23, |
| 3661 | 0x7b, 0xfd, 0xbd, 0x71, 0x3f, 0xcc, 0xe4, 0x62, 0x2e, 0xcd, 0x65, 0x0b, | 3606 | 0xb2, 0xb2, 0x88, 0xc1, 0x5d, 0xc4, 0x28, 0x24, 0xaf, 0xf4, 0x41, 0xdc, |
| 3662 | 0x71, 0x8a, 0xb2, 0x21, 0x77, 0x32, 0xfe, 0x99, 0xdd, 0x83, 0xf7, 0xa3, | 3607 | 0x9b, 0x13, 0x38, 0x37, 0x11, 0xe2, 0x19, 0x1c, 0xc0, 0xd9, 0x46, 0x3d, |
| 3663 | 0x8f, 0xda, 0xe3, 0xae, 0xfc, 0xfb, 0x04, 0x72, 0xa7, 0x60, 0xb1, 0x67, | 3608 | 0xff, 0x3d, 0xe2, 0x38, 0x58, 0xb8, 0x6b, 0x74, 0x62, 0x37, 0x96, 0xc4, |
| 3664 | 0x2d, 0xc5, 0x9d, 0xda, 0x37, 0xa6, 0x19, 0xbd, 0x0d, 0xdb, 0xa1, 0x47, | 3609 | 0x6e, 0xb4, 0xf5, 0xf0, 0x99, 0x5d, 0xf1, 0x52, 0xf2, 0xce, 0x67, 0xe2, |
| 3665 | 0x98, 0xf7, 0xf0, 0x07, 0xae, 0x2e, 0x73, 0x0d, 0x7d, 0x38, 0xee, 0x82, | 3610 | 0x5e, 0xc1, 0xe5, 0x1e, 0x09, 0x3e, 0x28, 0x19, 0x9d, 0x7b, 0x7b, 0x93, |
| 3666 | 0xbc, 0xcf, 0xad, 0xa5, 0x5c, 0x63, 0x8c, 0xa3, 0x57, 0x9c, 0xff, 0x15, | 3611 | 0xef, 0x97, 0x35, 0xce, 0xe5, 0xdc, 0xcf, 0x81, 0x6b, 0xa8, 0x96, 0x23, |
| 3667 | 0x68, 0xdf, 0x31, 0xad, 0x9e, 0xb2, 0xf7, 0x75, 0x15, 0xe1, 0x1e, 0xd6, | 3612 | 0xb8, 0x6b, 0x68, 0x5d, 0x2f, 0x31, 0x76, 0x27, 0xc6, 0xa7, 0x62, 0x0c, |
| 3668 | 0x63, 0x3f, 0x23, 0x4e, 0x23, 0x95, 0xa0, 0x19, 0x2f, 0xd8, 0xfb, 0x5a, | 3613 | 0x8b, 0x41, 0x41, 0x29, 0xb7, 0xba, 0x9f, 0x31, 0x96, 0xf8, 0x9e, 0xc6, |
| 3669 | 0xe2, 0x05, 0xbc, 0x93, 0xa2, 0x07, 0x9d, 0x1f, 0xe8, 0x41, 0xe7, 0xd1, | 3614 | 0xef, 0x1d, 0x1d, 0x1b, 0xc0, 0x1d, 0x6e, 0x32, 0xb8, 0x1d, 0xb2, 0x7e, |
| 3670 | 0x83, 0x8e, 0x15, 0x11, 0xe7, 0x09, 0xee, 0xa1, 0xaa, 0xd9, 0xcf, 0x9b, | 3615 | 0xa3, 0xd3, 0x13, 0xdb, 0x11, 0xf3, 0x1e, 0xb8, 0x7b, 0x1f, 0x76, 0x85, |
| 3671 | 0x31, 0xde, 0x39, 0xdb, 0xbe, 0xec, 0x43, 0x77, 0x05, 0xdd, 0x22, 0xec, | 3616 | 0xe0, 0x6d, 0xe7, 0x6e, 0x37, 0x87, 0x9c, 0x72, 0x1b, 0xb1, 0xbd, 0xab, |
| 3672 | 0xcf, 0xf5, 0x3b, 0xb3, 0xef, 0x5a, 0xa3, 0xa0, 0x4f, 0x6c, 0x3f, 0xd6, | 3617 | 0x3a, 0x75, 0x71, 0x83, 0xfb, 0xae, 0x16, 0xf2, 0x4d, 0x1e, 0xbd, 0xb2, |
| 3673 | 0xf6, 0x8b, 0xd2, 0x8c, 0x49, 0x73, 0x28, 0xa3, 0xf9, 0xf2, 0x1e, 0x9a, | 3618 | 0x4a, 0xef, 0xa2, 0x16, 0x5d, 0xc3, 0x9a, 0xeb, 0x98, 0xbb, 0xd2, 0x4a, |
| 3674 | 0x3b, 0x79, 0x46, 0xca, 0x96, 0xe6, 0x2b, 0xcc, 0x3b, 0xd6, 0xd2, 0x62, | 3619 | 0x71, 0x84, 0x1e, 0x0f, 0xd8, 0x9c, 0x57, 0xff, 0xd4, 0x55, 0xa7, 0x7b, |
| 3675 | 0x96, 0x6f, 0x27, 0xf0, 0x3c, 0x94, 0x3d, 0xe7, 0xf4, 0xf7, 0xee, 0xe1, | 3620 | 0x2d, 0xff, 0xfd, 0x07, 0x5d, 0xe7, 0x92, 0xbb, 0xa8, 0x13, 0x00, 0x00, |
| 3676 | 0x7f, 0xc8, 0xe9, 0xbf, 0xf3, 0x99, 0x3a, 0x27, 0xec, 0x93, 0x21, 0x6f, | 3621 | 0x00 }; |
| 3677 | 0xc1, 0xe9, 0x7f, 0x27, 0xc1, 0x85, 0x73, 0x84, 0x3e, 0xe9, 0xf7, 0x17, | ||
| 3678 | 0xc0, 0x60, 0x74, 0x5f, 0x53, 0xb0, 0xbb, 0x31, 0xed, 0x05, 0xe2, 0xda, | ||
| 3679 | 0xdc, 0xec, 0x11, 0x8b, 0x6f, 0x6a, 0x42, 0x49, 0x8e, 0xb9, 0x83, 0xcf, | ||
| 3680 | 0x18, 0x17, 0xec, 0x37, 0x03, 0xbc, 0xf7, 0x65, 0x6c, 0xe1, 0xfe, 0x2c, | ||
| 3681 | 0xc8, 0xe1, 0x96, 0xd5, 0xcb, 0xe9, 0xdf, 0x8b, 0xbc, 0x1a, 0xeb, 0x01, | ||
| 3682 | 0xea, 0xc6, 0x0c, 0xf5, 0xba, 0xf9, 0x6d, 0x63, 0x05, 0xb5, 0xe6, 0x2d, | ||
| 3683 | 0xc4, 0x3e, 0xf2, 0xd3, 0xf6, 0x58, 0x5b, 0xf6, 0xdb, 0x02, 0xea, 0xd0, | ||
| 3684 | 0x08, 0xee, 0x4b, 0xd1, 0xcd, 0x6f, 0x0c, 0x72, 0x01, 0x34, 0x17, 0xb1, | ||
| 3685 | 0x76, 0xba, 0x9b, 0xf7, 0xbc, 0xe8, 0xf3, 0x81, 0x7b, 0xab, 0xd1, 0xfb, | ||
| 3686 | 0xa6, 0xe9, 0x0f, 0xd2, 0xf2, 0xf7, 0x2f, 0x97, 0xa2, 0x15, 0x3a, 0x18, | ||
| 3687 | 0x15, 0x00, 0x00, 0x00 }; | ||
| 3688 | 3622 | ||
| 3689 | static const u32 bnx2_TPAT_b09FwData[(0x0/4) + 1] = { 0x0 }; | 3623 | static const u32 bnx2_TPAT_b09FwData[(0x0/4) + 1] = { 0x0 }; |
| 3690 | static const u32 bnx2_TPAT_b09FwRodata[(0x4/4) + 1] = { | 3624 | static const u32 bnx2_TPAT_b09FwRodata[(0x4/4) + 1] = { |
| 3691 | 0x00000001, 0x00000000 }; | 3625 | 0x00000001, 0x00000000 }; |
| 3692 | 3626 | ||
| 3693 | static struct fw_info bnx2_tpat_fw_09 = { | 3627 | static struct fw_info bnx2_tpat_fw_09 = { |
| 3694 | /* Firmware version: 4.4.26 */ | 3628 | /* Firmware version: 4.6.15 */ |
| 3695 | .ver_major = 0x4, | 3629 | .ver_major = 0x4, |
| 3696 | .ver_minor = 0x4, | 3630 | .ver_minor = 0x6, |
| 3697 | .ver_fix = 0x1a, | 3631 | .ver_fix = 0xf, |
| 3698 | 3632 | ||
| 3699 | .start_addr = 0x08000488, | 3633 | .start_addr = 0x08000488, |
| 3700 | 3634 | ||
| 3701 | .text_addr = 0x08000400, | 3635 | .text_addr = 0x08000400, |
| 3702 | .text_len = 0x1514, | 3636 | .text_len = 0x13a4, |
| 3703 | .text_index = 0x0, | 3637 | .text_index = 0x0, |
| 3704 | .gz_text = bnx2_TPAT_b09FwText, | 3638 | .gz_text = bnx2_TPAT_b09FwText, |
| 3705 | .gz_text_len = sizeof(bnx2_TPAT_b09FwText), | 3639 | .gz_text_len = sizeof(bnx2_TPAT_b09FwText), |
| @@ -3709,871 +3643,868 @@ static struct fw_info bnx2_tpat_fw_09 = { | |||
| 3709 | .data_index = 0x0, | 3643 | .data_index = 0x0, |
| 3710 | .data = bnx2_TPAT_b09FwData, | 3644 | .data = bnx2_TPAT_b09FwData, |
| 3711 | 3645 | ||
| 3712 | .sbss_addr = 0x08001940, | 3646 | .sbss_addr = 0x080017c0, |
| 3713 | .sbss_len = 0x48, | 3647 | .sbss_len = 0x40, |
| 3714 | .sbss_index = 0x0, | 3648 | .sbss_index = 0x0, |
| 3715 | 3649 | ||
| 3716 | .bss_addr = 0x08001988, | 3650 | .bss_addr = 0x08001800, |
| 3717 | .bss_len = 0x12b4, | 3651 | .bss_len = 0x12b4, |
| 3718 | .bss_index = 0x0, | 3652 | .bss_index = 0x0, |
| 3719 | 3653 | ||
| 3720 | .rodata_addr = 0x08001914, | 3654 | .rodata_addr = 0x080017a4, |
| 3721 | .rodata_len = 0x4, | 3655 | .rodata_len = 0x4, |
| 3722 | .rodata_index = 0x0, | 3656 | .rodata_index = 0x0, |
| 3723 | .rodata = bnx2_TPAT_b09FwRodata, | 3657 | .rodata = bnx2_TPAT_b09FwRodata, |
| 3724 | }; | 3658 | }; |
| 3725 | 3659 | ||
| 3726 | static u8 bnx2_TXP_b09FwText[] = { | 3660 | static u8 bnx2_TXP_b09FwText[] = { |
| 3727 | 0xc5, 0x7b, 0x7b, 0x74, 0x1c, 0x55, 0x9a, 0xdf, 0xef, 0x56, 0x3f, 0x54, | 3661 | 0xc5, 0x7b, 0x7d, 0x70, 0x1b, 0xe7, 0x79, 0xe7, 0xef, 0xc5, 0x02, 0xe4, |
| 3728 | 0xdd, 0x6a, 0xb5, 0x4a, 0x72, 0xdb, 0x6e, 0xed, 0x68, 0xc6, 0x5d, 0xee, | 3662 | 0x02, 0x04, 0x41, 0x90, 0x82, 0x64, 0xf0, 0xca, 0x44, 0x58, 0x61, 0x41, |
| 3729 | 0x6a, 0xb9, 0xb1, 0x84, 0x5d, 0x2d, 0xb5, 0xec, 0x66, 0x5d, 0xb1, 0x7b, | 3663 | 0xc1, 0x26, 0x2d, 0x2f, 0x28, 0x50, 0x82, 0xcb, 0x55, 0x85, 0x4a, 0xb4, |
| 3730 | 0x8c, 0xb0, 0x65, 0x10, 0x3b, 0xc2, 0xeb, 0x9d, 0x88, 0x09, 0x27, 0xf4, | 3664 | 0x44, 0xc7, 0x74, 0x43, 0x3b, 0x6a, 0x4b, 0x67, 0x3c, 0x09, 0x2a, 0x51, |
| 3731 | 0x18, 0x19, 0x64, 0x63, 0x40, 0x30, 0x64, 0xa3, 0xd9, 0x25, 0xeb, 0x1a, | 3665 | 0x16, 0x2d, 0xcb, 0x16, 0xed, 0xf8, 0x7a, 0xec, 0x9c, 0x27, 0xda, 0x50, |
| 3732 | 0xf9, 0x81, 0x1f, 0xad, 0xee, 0xd6, 0xc3, 0xc8, 0xec, 0xd9, 0x13, 0x64, | 3666 | 0x1f, 0x96, 0x25, 0x10, 0x00, 0x3f, 0x64, 0xca, 0x9d, 0xce, 0x19, 0x26, |
| 3733 | 0x49, 0xb6, 0xcc, 0xd0, 0x0f, 0x33, 0xc0, 0xcc, 0x30, 0x27, 0x13, 0x77, | 3667 | 0x29, 0x51, 0xb6, 0xf1, 0x21, 0xc7, 0x4a, 0x6a, 0xcf, 0x24, 0x11, 0x4e, |
| 3734 | 0x8c, 0x01, 0x03, 0x63, 0x98, 0xdd, 0x6c, 0x92, 0x99, 0x3d, 0x49, 0xd6, | 3668 | 0x96, 0x65, 0xd9, 0x89, 0x3f, 0x92, 0xf8, 0x7a, 0x4e, 0xa7, 0x37, 0xd5, |
| 3735 | 0x07, 0xf3, 0xb0, 0xc1, 0x60, 0x32, 0x43, 0x12, 0xb1, 0xcb, 0x4c, 0xe5, | 3669 | 0x48, 0xfe, 0x90, 0x2c, 0xf9, 0xa3, 0x69, 0x6f, 0x2a, 0xb5, 0x4e, 0xf7, |
| 3736 | 0xfb, 0xaa, 0x25, 0x63, 0x58, 0xb2, 0x9b, 0x6c, 0xfe, 0x88, 0xce, 0xd1, | 3670 | 0x9e, 0x67, 0x17, 0x94, 0x15, 0xd7, 0x9d, 0x9b, 0xf6, 0xfe, 0x38, 0xce, |
| 3737 | 0xe9, 0xee, 0xaa, 0x5b, 0xf7, 0x7e, 0xef, 0xef, 0xf7, 0x7d, 0xf7, 0x56, | 3671 | 0x70, 0x00, 0xec, 0xbe, 0xfb, 0xbe, 0xcf, 0xf7, 0xf3, 0x7b, 0x9e, 0xf7, |
| 3738 | 0x04, 0xf0, 0x62, 0xee, 0xaf, 0x86, 0xfe, 0xe3, 0xfd, 0x03, 0x0f, 0xb7, | 3672 | 0xdd, 0x56, 0xc0, 0x83, 0xea, 0x5f, 0x3d, 0xfd, 0xc7, 0x87, 0x86, 0x1f, |
| 3739 | 0xae, 0x88, 0xaf, 0xa0, 0xaf, 0x6d, 0x58, 0xec, 0x74, 0xf2, 0xcd, 0x55, | 3673 | 0x8e, 0x2d, 0x5b, 0xb1, 0x8c, 0xbe, 0x76, 0xa2, 0xa1, 0xc6, 0xc9, 0x37, |
| 3740 | 0x02, 0x48, 0xbd, 0x87, 0x7f, 0xd4, 0xdf, 0x57, 0xff, 0x71, 0x8f, 0xc1, | 3674 | 0x57, 0x08, 0x20, 0xf5, 0x21, 0xfe, 0x43, 0x7f, 0x5f, 0xf9, 0x8f, 0x3d, |
| 3741 | 0x01, 0x28, 0xf3, 0x34, 0xf1, 0x3f, 0x64, 0xc9, 0x30, 0xd7, 0xac, 0xd7, | 3675 | 0x66, 0xfd, 0x49, 0x80, 0x7f, 0x9e, 0x2e, 0xfe, 0x87, 0xec, 0xd0, 0x93, |
| 3742 | 0x20, 0x3b, 0x8c, 0xc4, 0xda, 0xbb, 0x34, 0x20, 0x99, 0x6f, 0x0e, 0xdd, | 3676 | 0x5d, 0x6b, 0x54, 0xc8, 0x92, 0x7e, 0x79, 0xd5, 0x26, 0x15, 0x48, 0x16, |
| 3743 | 0x88, 0xdf, 0x58, 0x66, 0xc0, 0x09, 0xbe, 0xfe, 0x55, 0xe3, 0xd3, 0x5d, | 3677 | 0xda, 0x42, 0x6b, 0xf1, 0x1b, 0xd3, 0x08, 0x38, 0xc1, 0xd7, 0xbf, 0xa2, |
| 3744 | 0x3f, 0x5d, 0xad, 0x7e, 0x34, 0xe1, 0x80, 0xac, 0x18, 0x63, 0x50, 0x9a, | 3678 | 0x7f, 0xb6, 0xe3, 0xc7, 0x2b, 0x95, 0x4f, 0xf3, 0x12, 0x64, 0xbf, 0x7e, |
| 3745 | 0x20, 0x37, 0xd2, 0x33, 0x7f, 0xb6, 0xec, 0x79, 0x27, 0xfc, 0xf3, 0x73, | 3679 | 0x10, 0xfe, 0x56, 0xc8, 0x2d, 0xf4, 0xcc, 0x5f, 0x2c, 0x2d, 0x39, 0xe1, |
| 3746 | 0xc1, 0x74, 0x19, 0x3a, 0x76, 0x67, 0xfb, 0x31, 0x13, 0x07, 0x2e, 0xa6, | 3680 | 0x9b, 0x9f, 0x0b, 0x86, 0x4b, 0xd7, 0xb0, 0x33, 0x3b, 0x84, 0x23, 0x71, |
| 3747 | 0x23, 0xfa, 0x6e, 0x20, 0x27, 0x19, 0x91, 0xd0, 0x69, 0x84, 0x30, 0x9d, | 3681 | 0xa0, 0x76, 0x34, 0xa2, 0xed, 0x04, 0x72, 0x0e, 0x3d, 0x12, 0x3a, 0x81, |
| 3748 | 0x87, 0x59, 0x65, 0x68, 0xd8, 0x5f, 0x0a, 0xe1, 0x52, 0xfa, 0xb7, 0x56, | 3682 | 0x10, 0x66, 0x0b, 0x2a, 0x1e, 0x2d, 0xc3, 0x70, 0xea, 0x21, 0x3c, 0x96, |
| 3749 | 0xc8, 0xd5, 0x8f, 0xb7, 0xe2, 0x90, 0x83, 0xc6, 0x23, 0x08, 0x66, 0x21, | 3683 | 0xfe, 0x17, 0x33, 0xe4, 0xe2, 0x47, 0x86, 0xb0, 0x8b, 0xc6, 0xee, 0x4e, |
| 3750 | 0xd7, 0x18, 0x03, 0x28, 0x0c, 0x01, 0x7b, 0xd3, 0x6a, 0x3f, 0xa0, 0xf6, | 3684 | 0x43, 0x0e, 0xea, 0x8f, 0x20, 0x98, 0x85, 0x5c, 0xaf, 0x0f, 0xa3, 0x38, |
| 3751 | 0x14, 0x45, 0xf8, 0xec, 0x09, 0xa8, 0xdd, 0x0d, 0x8e, 0xe6, 0xd4, 0xed, | 3685 | 0x1a, 0x3e, 0x3d, 0x07, 0xa5, 0xaf, 0x59, 0x52, 0x86, 0x80, 0xb6, 0xd4, |
| 3752 | 0x42, 0x4d, 0xee, 0x14, 0x90, 0x05, 0x8d, 0x5d, 0x9e, 0xe7, 0xcf, 0x01, | 3686 | 0x5d, 0x42, 0xe9, 0x2f, 0x09, 0x25, 0xb1, 0x4d, 0x40, 0x16, 0x34, 0xee, |
| 3753 | 0x44, 0xf3, 0x32, 0xce, 0x3b, 0x78, 0x59, 0x83, 0xe4, 0x2c, 0xe0, 0xd4, | 3687 | 0x86, 0x02, 0x7f, 0x0e, 0x63, 0x69, 0x41, 0xc6, 0x19, 0x89, 0xe7, 0x59, |
| 3754 | 0x74, 0xec, 0xcd, 0xc2, 0x74, 0x1a, 0x02, 0xbb, 0xe3, 0x11, 0x65, 0x0a, | 3688 | 0x45, 0xf2, 0x16, 0x70, 0xaa, 0x1a, 0x76, 0x67, 0x79, 0x0d, 0x81, 0x9d, |
| 3755 | 0x7c, 0x3f, 0x84, 0x41, 0x7b, 0x9c, 0x4a, 0x1c, 0x5b, 0xd6, 0x1e, 0xdd, | 3689 | 0xf1, 0x88, 0x7f, 0x06, 0x7c, 0x3f, 0x84, 0x11, 0x6b, 0x9c, 0x42, 0x5c, |
| 3756 | 0xb2, 0x8e, 0xe9, 0x55, 0x30, 0x15, 0x35, 0x08, 0x08, 0x0c, 0xea, 0x12, | 3690 | 0x9b, 0xe6, 0x2e, 0xcd, 0x34, 0x0f, 0x69, 0xb5, 0x30, 0xfc, 0x4a, 0x10, |
| 3757 | 0x92, 0xca, 0xfa, 0x90, 0x13, 0x6a, 0x70, 0x1b, 0xfe, 0x96, 0xf8, 0x4d, | 3691 | 0x10, 0x18, 0xd1, 0x1c, 0x48, 0xfa, 0xd7, 0x84, 0x9c, 0x50, 0x82, 0x9b, |
| 3758 | 0x46, 0x5d, 0xa8, 0x8c, 0x4f, 0xa1, 0x0a, 0x65, 0xa5, 0x22, 0xb1, 0xc9, | 3692 | 0xf1, 0xcf, 0xc4, 0x73, 0x32, 0xea, 0x82, 0x3d, 0x3e, 0x85, 0x5a, 0x54, |
| 3759 | 0xb4, 0x65, 0xbd, 0xa4, 0x39, 0x71, 0x8c, 0x64, 0x33, 0x98, 0xff, 0x5b, | 3693 | 0xfc, 0xb6, 0xd4, 0xa6, 0xd3, 0xa6, 0x79, 0x4a, 0x75, 0xe2, 0x10, 0xc9, |
| 3760 | 0xab, 0x4c, 0x72, 0xd9, 0xa3, 0xcd, 0xaf, 0x2f, 0x63, 0x42, 0xb1, 0xac, | 3694 | 0x67, 0xa4, 0xf0, 0xcf, 0x66, 0x85, 0x64, 0xb3, 0x4b, 0x9d, 0x5f, 0x5f, |
| 3761 | 0x29, 0xba, 0xb7, 0x2f, 0x3f, 0x2f, 0x63, 0xcb, 0x92, 0x34, 0xcb, 0xba, | 3695 | 0x46, 0xde, 0x6f, 0x9a, 0x33, 0x74, 0x6f, 0x4f, 0x61, 0x5e, 0xce, 0xa6, |
| 3762 | 0x4b, 0xfb, 0x1b, 0x6b, 0xeb, 0xe7, 0xc6, 0xc6, 0xf0, 0xfd, 0x9c, 0x82, | 3696 | 0xe9, 0x50, 0x4d, 0x73, 0x93, 0xfa, 0x4f, 0xe6, 0xc6, 0xdf, 0x1a, 0x1b, |
| 3763 | 0xa7, 0xb2, 0x49, 0xe4, 0xd3, 0x16, 0x1c, 0x86, 0x13, 0x7d, 0x43, 0x21, | 3697 | 0xc3, 0x33, 0x39, 0x3f, 0x9e, 0xcd, 0x26, 0x51, 0x48, 0x9b, 0x90, 0x74, |
| 3764 | 0xec, 0x2c, 0x74, 0xa0, 0x90, 0x56, 0x53, 0xe7, 0xe9, 0xb9, 0xad, 0x71, | 3698 | 0x27, 0x06, 0x47, 0x43, 0xd8, 0x56, 0xec, 0x46, 0x31, 0xad, 0xa4, 0xce, |
| 3765 | 0x0d, 0xf7, 0x15, 0x3a, 0x31, 0x93, 0x86, 0xe5, 0x31, 0xb4, 0xb2, 0x47, | 3699 | 0xd0, 0x73, 0x1b, 0xe3, 0x2a, 0xee, 0x2f, 0xf6, 0x60, 0x2e, 0x0d, 0xd3, |
| 3766 | 0x44, 0x71, 0x4f, 0xa1, 0x0b, 0xc5, 0xb4, 0x76, 0x76, 0x50, 0x44, 0x06, | 3700 | 0xad, 0xab, 0x15, 0xb7, 0x88, 0x62, 0x4b, 0xb1, 0x17, 0xa5, 0xb4, 0x7a, |
| 3767 | 0x1a, 0x1c, 0x4e, 0x3c, 0x50, 0x68, 0xc1, 0xfd, 0x85, 0x04, 0x3d, 0x63, | 3701 | 0x7a, 0x44, 0x44, 0x86, 0x9b, 0x25, 0x27, 0xb6, 0x17, 0xdb, 0xf1, 0x40, |
| 3768 | 0xe1, 0xe6, 0x58, 0x23, 0x8d, 0x6f, 0xc5, 0x93, 0x63, 0x96, 0x15, 0x8d, | 3702 | 0x31, 0x41, 0xcf, 0x98, 0xf8, 0x5a, 0xac, 0x85, 0xc6, 0x77, 0xe0, 0xe9, |
| 3769 | 0x29, 0xe8, 0x2b, 0xe8, 0x98, 0xc9, 0x49, 0x48, 0x1d, 0x73, 0x22, 0x75, | 3703 | 0x49, 0xd3, 0x8c, 0xc6, 0xfc, 0x18, 0x2c, 0x6a, 0x98, 0xcb, 0x39, 0x90, |
| 3770 | 0x14, 0xb8, 0xe7, 0x68, 0x2b, 0xa6, 0x72, 0x16, 0xb6, 0xea, 0x83, 0x0d, | 3704 | 0x3a, 0xe4, 0x44, 0xea, 0x29, 0x60, 0xcb, 0x53, 0x1d, 0x98, 0xc9, 0x99, |
| 3771 | 0x12, 0x5c, 0x48, 0x29, 0x02, 0x2e, 0xcd, 0x8f, 0x6d, 0x4a, 0x85, 0xf6, | 3705 | 0xd8, 0xa8, 0x8d, 0x34, 0x3b, 0xe0, 0x42, 0xca, 0x2f, 0xe0, 0x52, 0x7d, |
| 3772 | 0xf3, 0x0e, 0x81, 0x1d, 0x47, 0xa3, 0xf8, 0x45, 0xda, 0xc4, 0xcd, 0xed, | 3706 | 0xd8, 0xec, 0xb7, 0x69, 0x3f, 0x23, 0x09, 0x6c, 0x7d, 0x2a, 0x8a, 0x77, |
| 3773 | 0x41, 0x0c, 0x14, 0x02, 0x78, 0x23, 0x1d, 0xa0, 0x35, 0x74, 0xbc, 0x9e, | 3707 | 0xd2, 0x06, 0xbe, 0xd6, 0x19, 0xc4, 0x70, 0x31, 0x80, 0x37, 0xd3, 0x01, |
| 3774 | 0x96, 0x69, 0x9d, 0x16, 0x9c, 0x49, 0xf3, 0x18, 0x1e, 0xeb, 0x43, 0x6f, | 3708 | 0x5a, 0x43, 0xc3, 0x1b, 0x69, 0x99, 0xd6, 0x69, 0xc7, 0xc9, 0x34, 0x8f, |
| 3775 | 0xa1, 0x11, 0xe7, 0xd2, 0x41, 0x5a, 0x33, 0x80, 0x57, 0x68, 0xdc, 0xf6, | 3709 | 0xe1, 0xb1, 0x5e, 0x0c, 0x14, 0x5b, 0xf0, 0x7a, 0x3a, 0x48, 0x6b, 0x06, |
| 3776 | 0x82, 0x86, 0xb3, 0x34, 0xae, 0xaf, 0x10, 0xc2, 0xcb, 0x69, 0x1f, 0xd1, | 3710 | 0xf0, 0x2a, 0x8d, 0xbb, 0xb7, 0xa8, 0xe2, 0x34, 0x8d, 0x1b, 0x2c, 0x86, |
| 3777 | 0x1a, 0xc0, 0xe9, 0x74, 0x3f, 0x76, 0xa7, 0x9b, 0xcf, 0xde, 0x48, 0x32, | 3711 | 0xf0, 0x4a, 0xda, 0x4b, 0xb4, 0x06, 0x70, 0x22, 0x3d, 0x84, 0x9d, 0xe9, |
| 3778 | 0x0c, 0x2d, 0xe0, 0x75, 0xf8, 0xda, 0x5b, 0x56, 0x57, 0xc0, 0x36, 0x13, | 3712 | 0xb6, 0xd3, 0x6b, 0x49, 0x86, 0xa1, 0x05, 0xbc, 0x0e, 0x5f, 0x7b, 0xd7, |
| 3779 | 0x5a, 0x67, 0x7e, 0xdd, 0x7e, 0x0c, 0xa6, 0xcf, 0xcc, 0xf9, 0x89, 0x8e, | 3713 | 0xec, 0x0d, 0x58, 0xa6, 0x42, 0xeb, 0xcc, 0xaf, 0x3b, 0x84, 0x91, 0xf4, |
| 3780 | 0x03, 0xb9, 0x59, 0xeb, 0xa7, 0xcb, 0x1a, 0x71, 0x22, 0x0b, 0x3c, 0x39, | 3714 | 0xa9, 0xaa, 0xbf, 0x68, 0x78, 0x2c, 0x77, 0xd9, 0xfc, 0xf1, 0xd2, 0x16, |
| 3781 | 0x05, 0x4c, 0x65, 0x4d, 0xab, 0xc6, 0xb0, 0xac, 0xc9, 0xf6, 0x16, 0x92, | 3715 | 0x1c, 0xc9, 0x02, 0x4f, 0xcf, 0x00, 0x33, 0x59, 0xc3, 0xac, 0xd7, 0x4d, |
| 3782 | 0x97, 0xd6, 0xb3, 0x95, 0x46, 0x3d, 0x55, 0x72, 0x02, 0x47, 0xd5, 0x9e, | 3716 | 0x73, 0xba, 0xb3, 0x9d, 0xe4, 0xa5, 0xf6, 0x6f, 0xa4, 0x51, 0xcf, 0x96, |
| 3783 | 0x32, 0x24, 0x4c, 0xcc, 0x38, 0xe1, 0x1e, 0x52, 0x3b, 0x27, 0xa0, 0x9e, | 3717 | 0x9d, 0xc0, 0x53, 0x4a, 0x7f, 0x05, 0x0e, 0xe4, 0xe7, 0x9c, 0xa8, 0x19, |
| 3784 | 0xbd, 0x87, 0x3c, 0xe9, 0x58, 0x56, 0xed, 0x36, 0xb1, 0xcb, 0x0a, 0x1a, | 3718 | 0x55, 0x7a, 0xf2, 0x50, 0x4e, 0x6f, 0x21, 0x8f, 0x3a, 0x94, 0x55, 0xfa, |
| 3785 | 0x4d, 0xa1, 0x16, 0x87, 0x05, 0x3f, 0xd9, 0x42, 0xba, 0xc5, 0xb2, 0x6a, | 3719 | 0x0c, 0xec, 0x30, 0x83, 0x7a, 0x6b, 0xa8, 0x5d, 0x32, 0xe1, 0x23, 0x5b, |
| 3786 | 0x57, 0x5b, 0xd6, 0xb9, 0x76, 0x58, 0x92, 0xa1, 0x9d, 0x2d, 0x41, 0x2b, | 3720 | 0x48, 0xb7, 0x9b, 0x66, 0xc3, 0x4a, 0xd3, 0x7c, 0xbd, 0x13, 0xa6, 0x43, |
| 3787 | 0x7f, 0x00, 0x6d, 0xe0, 0x34, 0xca, 0x5f, 0xf5, 0x21, 0xd2, 0x17, 0x76, | 3721 | 0x57, 0x4f, 0x97, 0xa1, 0x56, 0x3e, 0x82, 0x3a, 0x7c, 0x02, 0x95, 0xaf, |
| 3788 | 0x44, 0xfa, 0x67, 0xe9, 0xd9, 0x9a, 0x02, 0x99, 0x32, 0xf1, 0xa2, 0x91, | 3722 | 0x78, 0x11, 0x19, 0x0c, 0x4b, 0x91, 0xa1, 0xcb, 0xf4, 0x6c, 0x7d, 0x91, |
| 3789 | 0x0d, 0x16, 0x4a, 0x32, 0x9c, 0xc4, 0x4f, 0xcb, 0x90, 0x65, 0x39, 0x35, | 3723 | 0xcc, 0x99, 0x78, 0x51, 0x47, 0x81, 0x62, 0x59, 0x86, 0x93, 0xf8, 0x69, |
| 3790 | 0x1f, 0x7c, 0x24, 0xdf, 0x8d, 0x87, 0x2d, 0xeb, 0x1d, 0x5d, 0x81, 0x9b, | 3724 | 0x1f, 0x35, 0x4d, 0xa7, 0xea, 0x85, 0x97, 0xe4, 0xbb, 0xfe, 0x80, 0x69, |
| 3791 | 0x74, 0x73, 0xd3, 0xb0, 0x85, 0x49, 0xfd, 0x34, 0xc9, 0x53, 0x20, 0xd5, | 3725 | 0xbe, 0xaf, 0xf9, 0x51, 0x43, 0xba, 0xb9, 0x65, 0xcc, 0xc4, 0xb4, 0x76, |
| 3792 | 0x1d, 0xa7, 0x67, 0x02, 0x34, 0x3e, 0x81, 0x8d, 0x43, 0x41, 0x7c, 0x3f, | 3726 | 0x82, 0xe4, 0x29, 0x90, 0xea, 0x8b, 0xd3, 0x33, 0x01, 0x1a, 0x9f, 0xc0, |
| 3793 | 0x2b, 0xe3, 0xa7, 0xcb, 0xa2, 0xa8, 0xa6, 0xb9, 0xbc, 0x24, 0xab, 0x2a, | 3727 | 0xfa, 0xd1, 0x20, 0x9e, 0xc9, 0xca, 0xf8, 0xf1, 0xd2, 0x28, 0xea, 0x68, |
| 3794 | 0x92, 0x1f, 0x0a, 0x64, 0x6e, 0x85, 0x8a, 0x3d, 0xa2, 0x70, 0x9e, 0x78, | 3728 | 0x2e, 0x0f, 0xc9, 0xaa, 0x96, 0xe4, 0x87, 0x22, 0x99, 0x5b, 0xd1, 0xb6, |
| 3795 | 0x0c, 0xe2, 0x07, 0xa5, 0x00, 0x9e, 0x2e, 0x29, 0x38, 0x59, 0x6a, 0xc4, | 3729 | 0x47, 0x14, 0xcf, 0x10, 0x8f, 0x41, 0x7c, 0xbf, 0x1c, 0xc0, 0x73, 0x65, |
| 3796 | 0xa9, 0x92, 0x8e, 0x6c, 0x4e, 0xdd, 0x5f, 0x86, 0x85, 0x1a, 0x32, 0xe7, | 3730 | 0x3f, 0x8e, 0x96, 0x5b, 0x70, 0xbc, 0xac, 0xe1, 0x60, 0x4e, 0xd9, 0x5b, |
| 3797 | 0x37, 0x26, 0x62, 0xc8, 0xe4, 0x2c, 0x2b, 0x4f, 0x34, 0x7b, 0x89, 0x87, | 3731 | 0x81, 0x89, 0x7a, 0x7d, 0x07, 0x1a, 0x96, 0x03, 0x6f, 0xe6, 0x63, 0xc8, |
| 3798 | 0xd7, 0x27, 0xbe, 0x86, 0xe3, 0x63, 0x4e, 0x84, 0x26, 0x03, 0x78, 0x2a, | 3732 | 0xe4, 0x4c, 0xb3, 0x40, 0x74, 0x7b, 0x88, 0x8f, 0x37, 0xf2, 0x5f, 0xc5, |
| 3799 | 0xed, 0xc4, 0x75, 0x19, 0xd5, 0x9c, 0x80, 0x16, 0xdd, 0x29, 0xb4, 0xe4, | 3733 | 0xe1, 0x49, 0x27, 0x42, 0xd3, 0x01, 0x3c, 0x9b, 0x76, 0xe2, 0xfa, 0x8c, |
| 3800 | 0x72, 0xa1, 0xe6, 0x4c, 0x44, 0x42, 0x2e, 0x21, 0xa1, 0xe9, 0xb8, 0x13, | 3734 | 0x62, 0xe4, 0xa1, 0x46, 0xb7, 0x09, 0x35, 0x79, 0x83, 0x50, 0x72, 0x06, |
| 3801 | 0x5a, 0x31, 0x04, 0x57, 0x93, 0x0c, 0xad, 0x89, 0xdc, 0xc8, 0x2f, 0xc1, | 3735 | 0x22, 0x21, 0x97, 0x70, 0xa0, 0xf5, 0xb0, 0x13, 0x6a, 0x29, 0x04, 0x57, |
| 3802 | 0x4d, 0x7e, 0xb1, 0x71, 0x24, 0x4a, 0xd7, 0x02, 0x74, 0x0d, 0x5f, 0xab, | 3736 | 0xab, 0x0c, 0xb5, 0xf5, 0x21, 0xc0, 0xe7, 0x40, 0x0d, 0xf9, 0xc6, 0xfa, |
| 3803 | 0x82, 0x63, 0x91, 0x03, 0x24, 0x37, 0xcd, 0x81, 0xa4, 0xd3, 0xb2, 0x1c, | 3737 | 0xf1, 0x28, 0x5d, 0x0b, 0xd0, 0x35, 0x7c, 0xb5, 0x16, 0xd2, 0x22, 0x09, |
| 3804 | 0x5a, 0x2b, 0x7a, 0x1e, 0xa3, 0xcf, 0x36, 0x1e, 0xaf, 0x20, 0x5c, 0x24, | 3738 | 0x24, 0x3b, 0x55, 0x42, 0xd2, 0x69, 0x9a, 0x92, 0xda, 0x81, 0xbb, 0x1e, |
| 3805 | 0x19, 0x34, 0x11, 0x4d, 0x59, 0xa2, 0x31, 0x4b, 0x34, 0x66, 0x89, 0xc6, | 3739 | 0x37, 0xcd, 0xf0, 0x72, 0x1e, 0xef, 0x47, 0xb8, 0x44, 0x72, 0x68, 0x25, |
| 3806 | 0xac, 0x83, 0x6c, 0x46, 0xd5, 0x81, 0x3f, 0x22, 0x5d, 0x85, 0x88, 0xbf, | 3740 | 0xba, 0xb2, 0x44, 0x67, 0x96, 0xe8, 0xcc, 0x12, 0x9d, 0x59, 0x89, 0xec, |
| 3807 | 0x5f, 0xd8, 0x7a, 0x7a, 0xba, 0x14, 0x24, 0xfa, 0x43, 0x36, 0xfd, 0x4f, | 3741 | 0x46, 0xd1, 0x80, 0x47, 0x48, 0x5f, 0x21, 0xe2, 0xf1, 0x1d, 0x4b, 0x57, |
| 3808 | 0xe6, 0x04, 0x24, 0x4d, 0xed, 0x3e, 0x8f, 0x75, 0x08, 0xc7, 0xd4, 0xe4, | 3742 | 0xcf, 0x95, 0x83, 0xc4, 0x43, 0xc8, 0xe2, 0xe1, 0xe9, 0x9c, 0x80, 0x43, |
| 3809 | 0x04, 0x92, 0xf4, 0x9c, 0xba, 0xdf, 0x84, 0xda, 0x59, 0x26, 0xfd, 0x6f, | 3743 | 0x55, 0xfa, 0xce, 0x60, 0x35, 0xc2, 0x31, 0x25, 0x99, 0x47, 0x92, 0x9e, |
| 3810 | 0x55, 0x12, 0x98, 0xc9, 0xba, 0x50, 0xad, 0xa9, 0x21, 0xd2, 0x57, 0xb4, | 3744 | 0x53, 0xf6, 0x1a, 0x50, 0x7a, 0x2a, 0x64, 0x03, 0x1b, 0xfd, 0x09, 0xcc, |
| 3811 | 0x8c, 0x05, 0xb8, 0x57, 0xa1, 0x39, 0x25, 0xb7, 0xa8, 0xc4, 0x90, 0x47, | 3745 | 0x65, 0x5d, 0xa8, 0x53, 0x95, 0x10, 0xe9, 0x2c, 0x5a, 0xc1, 0x02, 0xdc, |
| 3812 | 0x10, 0x19, 0x91, 0x30, 0xad, 0x3b, 0xc8, 0x3f, 0x75, 0x38, 0x9a, 0x68, | 3746 | 0xe7, 0xa7, 0x39, 0x1d, 0xb2, 0xb0, 0x63, 0xc9, 0x23, 0x88, 0x8c, 0x3b, |
| 3813 | 0xb9, 0x62, 0x9c, 0x3e, 0x69, 0xfe, 0x2c, 0xad, 0x45, 0xf4, 0xd0, 0x7c, | 3747 | 0x30, 0xab, 0x49, 0xe4, 0xa3, 0x1a, 0xa4, 0x56, 0x5a, 0xae, 0x14, 0xa7, |
| 3814 | 0xe4, 0x97, 0x2c, 0xc7, 0x28, 0xd1, 0xb0, 0xd7, 0xa6, 0xf7, 0x64, 0xa9, | 3748 | 0x4f, 0x9a, 0x3f, 0x4b, 0x6b, 0x11, 0x3d, 0x34, 0x1f, 0xf9, 0x26, 0xcb, |
| 3815 | 0x4b, 0x54, 0xec, 0xc7, 0x20, 0x7b, 0x51, 0x43, 0x10, 0x6a, 0x34, 0x24, | 3749 | 0x32, 0x4a, 0x34, 0x3c, 0x6a, 0xd1, 0x7b, 0xb4, 0xfc, 0x75, 0x61, 0xdb, |
| 3816 | 0x54, 0x3d, 0x29, 0x14, 0x4c, 0x95, 0x7e, 0x46, 0x63, 0x02, 0xd7, 0x8c, | 3750 | 0x90, 0x4e, 0x36, 0xa3, 0x84, 0x20, 0x94, 0x68, 0x48, 0x28, 0x5a, 0x52, |
| 3817 | 0xe9, 0xc6, 0x60, 0x56, 0xe0, 0x46, 0xcd, 0xc2, 0x7a, 0xbd, 0x1b, 0xbb, | 3751 | 0xf8, 0x31, 0x53, 0x7e, 0x83, 0xc6, 0x04, 0xae, 0x19, 0xd3, 0x87, 0x91, |
| 3818 | 0x4b, 0xf3, 0x7e, 0xc9, 0xb1, 0x4b, 0xf1, 0x4f, 0xa5, 0x3b, 0xb0, 0x27, | 3752 | 0xac, 0xc0, 0x5a, 0xd5, 0xc4, 0x1a, 0xad, 0x0f, 0x3b, 0xcb, 0xf3, 0xbe, |
| 3819 | 0x1b, 0xc2, 0xee, 0x7c, 0xd0, 0x3f, 0x99, 0xe6, 0x7b, 0x1a, 0xf9, 0x3b, | 3753 | 0xc9, 0x31, 0xcc, 0xef, 0x9b, 0x49, 0x77, 0x63, 0x57, 0x36, 0x84, 0x9d, |
| 3820 | 0xdf, 0x0b, 0x5c, 0x73, 0xaf, 0xf1, 0x9a, 0x7b, 0x09, 0x0c, 0x8e, 0x7e, | 3754 | 0x85, 0xa0, 0x6f, 0x3a, 0xcd, 0xf7, 0x54, 0xf2, 0x79, 0xbe, 0x17, 0xb8, |
| 3821 | 0x85, 0x62, 0x48, 0x2d, 0x76, 0x6b, 0x1f, 0x91, 0xad, 0x68, 0x89, 0x5e, | 3755 | 0xe6, 0x5e, 0xcb, 0x35, 0xf7, 0x12, 0x18, 0x99, 0xf8, 0x1d, 0x8a, 0x23, |
| 3822 | 0x34, 0xe0, 0xbc, 0xd2, 0x82, 0x43, 0xe3, 0x5d, 0xd8, 0x33, 0xbe, 0x02, | 3756 | 0x0d, 0xd8, 0xa9, 0x7e, 0x4a, 0xf6, 0xa2, 0x26, 0x06, 0xd0, 0x8c, 0x33, |
| 3823 | 0x07, 0x46, 0x1b, 0x53, 0x5e, 0x63, 0x88, 0xd6, 0x0f, 0x27, 0x7b, 0x85, | 3757 | 0xfe, 0x76, 0xec, 0x9f, 0xea, 0xc5, 0xae, 0xa9, 0x65, 0x78, 0x6c, 0xa2, |
| 3824 | 0xda, 0xef, 0x10, 0xe1, 0x68, 0x2f, 0xd9, 0x6e, 0x53, 0x9d, 0x65, 0x9d, | 3758 | 0x25, 0xe5, 0xd1, 0x49, 0x38, 0x9e, 0x70, 0x72, 0x40, 0x28, 0x43, 0x92, |
| 3825 | 0x8e, 0x91, 0x6d, 0xeb, 0xcd, 0xfa, 0x46, 0x12, 0x40, 0xb9, 0x5b, 0xed, | 3759 | 0x08, 0x47, 0x07, 0xc8, 0x7e, 0x5b, 0x1b, 0x4d, 0xf3, 0x44, 0x8c, 0xec, |
| 3826 | 0x7c, 0x0b, 0x3e, 0xdc, 0x4a, 0x36, 0x37, 0x15, 0x43, 0xaf, 0x03, 0x8e, | 3760 | 0x5b, 0x6b, 0xd3, 0xd6, 0x93, 0x00, 0x2a, 0x7d, 0x4a, 0xcf, 0xbb, 0xf0, |
| 3827 | 0x16, 0x1f, 0x7e, 0x6d, 0x1d, 0x75, 0xb2, 0xdc, 0xad, 0x5d, 0x77, 0xe9, | 3761 | 0xe2, 0x76, 0xb2, 0xbb, 0x99, 0x18, 0x06, 0x24, 0x48, 0xed, 0x5e, 0xfc, |
| 3828 | 0x7b, 0x05, 0xc7, 0x39, 0xf7, 0xd5, 0x58, 0xc2, 0xf3, 0xf3, 0x33, 0x96, | 3762 | 0xbd, 0xf9, 0x94, 0x93, 0xe5, 0x6e, 0xee, 0xd8, 0xa4, 0xed, 0x15, 0x1c, |
| 3829 | 0x15, 0xa6, 0x79, 0xfa, 0x62, 0xcd, 0x89, 0x3e, 0xcc, 0x5a, 0xe7, 0xb7, | 3763 | 0xeb, 0x6a, 0xae, 0xc6, 0x13, 0x9e, 0x9f, 0x9f, 0x21, 0xdd, 0xd1, 0x3c, |
| 3830 | 0x74, 0x61, 0xf7, 0xcc, 0x0a, 0x1c, 0x1c, 0x75, 0x21, 0x59, 0x27, 0x50, | 3764 | 0x83, 0xb1, 0xb6, 0xc4, 0x20, 0x2e, 0x9b, 0x67, 0x36, 0xf4, 0x62, 0xe7, |
| 3831 | 0xab, 0x85, 0xcb, 0xf7, 0x62, 0x05, 0xcc, 0x29, 0x7e, 0xae, 0x0b, 0x47, | 3765 | 0xdc, 0x32, 0xec, 0x9b, 0x70, 0x21, 0xd9, 0x28, 0xd0, 0xa0, 0x86, 0x2b, |
| 3832 | 0x66, 0x2a, 0xbf, 0xb3, 0x57, 0x7f, 0xcf, 0xcf, 0x77, 0x91, 0x74, 0xca, | 3766 | 0xf7, 0x61, 0x19, 0x8c, 0x19, 0x7e, 0xae, 0x17, 0x07, 0xe7, 0xec, 0xdf, |
| 3833 | 0xf2, 0xe4, 0x38, 0x49, 0x2a, 0x30, 0x9a, 0x71, 0x62, 0x34, 0x40, 0xba, | 3767 | 0xd9, 0xab, 0xbf, 0xe7, 0xe7, 0x3b, 0x4f, 0x3a, 0x65, 0x79, 0x72, 0xac, |
| 3834 | 0xed, 0x10, 0xce, 0xe3, 0x8b, 0xfc, 0xde, 0xc7, 0x2c, 0xbc, 0xa4, 0x93, | 3768 | 0x24, 0x15, 0xe8, 0x6d, 0x38, 0x32, 0x11, 0x20, 0xdd, 0x76, 0x0b, 0xe7, |
| 3835 | 0x9e, 0xb3, 0x1b, 0x84, 0xf7, 0x78, 0xa7, 0x70, 0x15, 0x37, 0x0b, 0xf7, | 3769 | 0xe1, 0x45, 0x3e, 0xcf, 0xe3, 0x26, 0x4e, 0x69, 0xa4, 0xe7, 0xec, 0x3a, |
| 3836 | 0xe4, 0xb7, 0x84, 0x7c, 0x3c, 0x25, 0xaa, 0x8a, 0x2d, 0x24, 0xfb, 0x1e, | 3770 | 0xe1, 0x39, 0xdc, 0x23, 0x5c, 0xa5, 0x3b, 0x45, 0xcd, 0xf4, 0x37, 0x85, |
| 3837 | 0xe1, 0x39, 0xae, 0x86, 0x42, 0xe2, 0xbb, 0xa4, 0xcf, 0x2d, 0xc2, 0x51, | 3771 | 0x7c, 0x38, 0x25, 0x6a, 0x4b, 0xed, 0x24, 0xfb, 0x7e, 0xe1, 0x3e, 0xac, |
| 3838 | 0x84, 0x22, 0x19, 0x03, 0x42, 0x2a, 0xd2, 0x1c, 0xb6, 0x0d, 0xf1, 0x3a, | 3772 | 0x84, 0x42, 0xe2, 0x11, 0xd2, 0xe7, 0x06, 0x21, 0x95, 0xe0, 0x77, 0xe8, |
| 3839 | 0x41, 0xd2, 0x1b, 0x4c, 0x87, 0xd1, 0x8f, 0xad, 0x94, 0x23, 0x6e, 0x49, | 3773 | 0xc3, 0xc2, 0x51, 0xa2, 0x39, 0x2c, 0x1b, 0xe2, 0x75, 0x82, 0xa4, 0x37, |
| 3840 | 0x1b, 0x38, 0x98, 0xad, 0xa2, 0xf8, 0xc8, 0x7e, 0x3f, 0x4b, 0xeb, 0x6a, | 3774 | 0x18, 0x92, 0x3e, 0x84, 0x8d, 0x14, 0xff, 0x6f, 0x4d, 0xeb, 0x78, 0x34, |
| 3841 | 0x38, 0x54, 0x82, 0xe9, 0x31, 0x0e, 0x62, 0x05, 0xf9, 0xdb, 0xb9, 0x18, | 3775 | 0x5b, 0x4b, 0x31, 0x92, 0x7d, 0xff, 0x32, 0xad, 0xab, 0xe2, 0x31, 0xca, |
| 3842 | 0xfb, 0x22, 0x90, 0xcf, 0x86, 0x93, 0x07, 0x85, 0x65, 0x55, 0x45, 0xac, | 3776 | 0x15, 0xb2, 0xbe, 0x0f, 0x3e, 0xf2, 0xb9, 0xd7, 0x63, 0xec, 0x8f, 0x40, |
| 3843 | 0x25, 0xef, 0xe8, 0xcd, 0xd1, 0x33, 0xf8, 0x9f, 0xd6, 0x44, 0xa0, 0x1f, | 3777 | 0x21, 0x1b, 0xee, 0x7f, 0x54, 0x98, 0xe6, 0xd6, 0x88, 0xb9, 0x78, 0x5d, |
| 3844 | 0xd1, 0x76, 0xc8, 0x55, 0xc6, 0x1e, 0xbc, 0x9b, 0x86, 0xec, 0x36, 0x4c, | 3778 | 0xac, 0x2d, 0x7a, 0x12, 0xff, 0x68, 0xe6, 0x03, 0x43, 0xa8, 0xef, 0xa4, |
| 3845 | 0xbc, 0x94, 0x06, 0x7c, 0x43, 0x83, 0x8a, 0x17, 0x64, 0x07, 0x08, 0x07, | 3779 | 0x7b, 0xa3, 0x90, 0x5d, 0xfa, 0x2e, 0x1c, 0xa2, 0x5c, 0xe2, 0xd1, 0x29, |
| 3846 | 0x0f, 0x09, 0xb5, 0xfb, 0x02, 0xa5, 0xb3, 0x44, 0xbb, 0x39, 0x20, 0x81, | 3780 | 0xbe, 0x8c, 0x86, 0xfb, 0x1f, 0x13, 0x1c, 0xf3, 0x95, 0xca, 0xb3, 0x18, |
| 3847 | 0xe2, 0x91, 0x50, 0x7b, 0xce, 0x90, 0x3d, 0x7e, 0x57, 0xa8, 0xca, 0xac, | 3781 | 0x39, 0x5d, 0x0b, 0x25, 0xb4, 0x46, 0xb4, 0x69, 0x75, 0x92, 0x91, 0x68, |
| 3848 | 0x60, 0x3f, 0xe5, 0x5c, 0xb2, 0x67, 0x2e, 0xa7, 0x98, 0xb8, 0xee, 0x9a, | 3782 | 0xa6, 0x14, 0xe7, 0xee, 0x54, 0x86, 0xf7, 0x40, 0xf1, 0x5f, 0x00, 0xfb, |
| 3849 | 0x9c, 0x32, 0x48, 0x74, 0xed, 0x23, 0xba, 0x5e, 0xd4, 0xd5, 0xe0, 0x24, | 3783 | 0x2a, 0xe7, 0x93, 0x5d, 0x48, 0x58, 0x79, 0xc5, 0xc0, 0x4d, 0x57, 0xf3, |
| 3850 | 0xac, 0x25, 0xbd, 0x3a, 0xdf, 0x33, 0xb0, 0xa7, 0x64, 0x85, 0x1c, 0x06, | 3784 | 0x8a, 0x4e, 0x76, 0x52, 0x8b, 0x3d, 0x44, 0xd7, 0xcb, 0x9a, 0x12, 0x9c, |
| 3851 | 0xcb, 0x0a, 0xa9, 0x2a, 0x03, 0xa6, 0x6c, 0x28, 0xe4, 0x1b, 0xbf, 0xb1, | 3785 | 0x86, 0xb9, 0x78, 0x40, 0xe3, 0x7b, 0x3a, 0x76, 0x95, 0xcd, 0x90, 0xa4, |
| 3852 | 0x7a, 0xe3, 0xb2, 0xfe, 0x76, 0x5e, 0x21, 0x79, 0xc1, 0xef, 0x2c, 0x7c, | 3786 | 0xb3, 0xac, 0x90, 0xaa, 0xd5, 0x99, 0x56, 0x3f, 0xf9, 0xc6, 0x6f, 0xcc, |
| 3853 | 0x59, 0xde, 0xb5, 0x20, 0x19, 0xbf, 0xb1, 0xee, 0x8c, 0xc3, 0xbf, 0xa4, | 3787 | 0x81, 0xb8, 0xac, 0xbd, 0x57, 0xf0, 0x93, 0xbc, 0xe0, 0x73, 0x16, 0xbf, |
| 3854 | 0xe0, 0x4c, 0x55, 0x1b, 0xe8, 0x1e, 0x18, 0xda, 0x65, 0x35, 0x68, 0x12, | 3788 | 0x2c, 0xff, 0x9a, 0x70, 0xe8, 0xbf, 0x31, 0xbf, 0x1d, 0x87, 0x6f, 0x71, |
| 3855 | 0xc5, 0x29, 0x8d, 0xe2, 0xba, 0x2f, 0x71, 0xb9, 0xdd, 0x23, 0xce, 0xb5, | 3789 | 0xd1, 0x99, 0xaa, 0xd3, 0xd1, 0x37, 0x3c, 0xba, 0xc3, 0x6c, 0x56, 0x1d, |
| 3856 | 0x07, 0xbb, 0x3e, 0xc8, 0x7b, 0x48, 0xcf, 0xe8, 0xde, 0x59, 0x48, 0x38, | 3790 | 0x14, 0xab, 0x54, 0x8a, 0xed, 0xde, 0xc4, 0xa5, 0x4e, 0xb7, 0x78, 0xbd, |
| 3857 | 0xdf, 0x23, 0x5b, 0x73, 0x53, 0x4c, 0x45, 0xa1, 0xb1, 0xeb, 0x12, 0xe5, | 3791 | 0x33, 0xd8, 0xfb, 0x51, 0xc1, 0x4d, 0x7a, 0x46, 0xdf, 0xb6, 0x62, 0xc2, |
| 3858 | 0xa1, 0x9b, 0x62, 0x9e, 0x7f, 0xea, 0x36, 0xa4, 0xaf, 0x79, 0xf0, 0xe0, | 3792 | 0xf9, 0x21, 0xd9, 0x5a, 0x0d, 0xc5, 0x55, 0x14, 0x5b, 0x7a, 0x2f, 0x50, |
| 3859 | 0xca, 0xe9, 0x44, 0x2d, 0xc5, 0x75, 0x05, 0x67, 0xe3, 0x9d, 0x18, 0x2c, | 3793 | 0x2e, 0xba, 0x25, 0xe6, 0xfe, 0xe3, 0x1a, 0xdd, 0xf1, 0x55, 0x37, 0x1e, |
| 3860 | 0x55, 0x91, 0x1d, 0x3e, 0x53, 0xde, 0xab, 0x35, 0x76, 0xbd, 0x9f, 0x5e, | 3794 | 0xbc, 0x69, 0x36, 0xd1, 0x40, 0xb1, 0xdd, 0x8f, 0xd3, 0xf1, 0x1e, 0x8c, |
| 3861 | 0xc2, 0x71, 0xe4, 0xd3, 0x7c, 0xbb, 0xd6, 0xbd, 0x53, 0x9c, 0xde, 0xe4, | 3795 | 0x94, 0x6b, 0xc9, 0x0e, 0x9f, 0xaf, 0xec, 0x56, 0x5b, 0x7a, 0x2f, 0xa6, |
| 3862 | 0x45, 0x1c, 0x07, 0x4a, 0xb2, 0xfc, 0x49, 0x1a, 0x1f, 0x2d, 0xd1, 0xb4, | 3796 | 0x17, 0x53, 0x2c, 0xc1, 0x67, 0x85, 0x4e, 0xb5, 0x6f, 0x9b, 0x38, 0x71, |
| 3863 | 0xf2, 0x3a, 0x47, 0x53, 0xbf, 0xec, 0x68, 0x1a, 0x70, 0x53, 0x0c, 0xbe, | 3797 | 0xab, 0x07, 0x71, 0x92, 0xab, 0x2c, 0x5f, 0x49, 0xe3, 0xd3, 0xc5, 0xaa, |
| 3864 | 0x78, 0xbd, 0xc0, 0x4b, 0xd7, 0x47, 0x12, 0x6e, 0xe1, 0xc1, 0xf9, 0xee, | 3798 | 0x5a, 0x59, 0x2d, 0xb5, 0x0e, 0xc9, 0x52, 0xeb, 0x70, 0x0d, 0xc5, 0xe1, |
| 3865 | 0x04, 0xd9, 0x49, 0x63, 0xca, 0x63, 0x50, 0xfc, 0x20, 0x93, 0x75, 0x68, | 3799 | 0xf3, 0x37, 0x0a, 0x9c, 0xba, 0x31, 0x92, 0xa8, 0x11, 0x6e, 0x9c, 0xe9, |
| 3866 | 0x09, 0xec, 0x9e, 0xc2, 0x23, 0x83, 0x7a, 0x17, 0xcc, 0x19, 0xb6, 0xa1, | 3800 | 0x4b, 0x90, 0x9d, 0xb4, 0xa4, 0xdc, 0x3a, 0xc5, 0x8f, 0x51, 0x01, 0x49, |
| 3867 | 0x16, 0x0c, 0xce, 0x74, 0xc3, 0x2c, 0x39, 0x30, 0x11, 0x20, 0xe6, 0x4b, | 3801 | 0x4d, 0x60, 0xe7, 0x0c, 0x1e, 0x19, 0xd1, 0x7a, 0x61, 0xcc, 0xb1, 0x0d, |
| 3868 | 0x48, 0xb9, 0x8c, 0x96, 0x8e, 0x89, 0x7c, 0xaf, 0xab, 0xe2, 0xc3, 0xc4, | 3802 | 0xb5, 0x63, 0x64, 0xae, 0x0f, 0x46, 0x59, 0x42, 0x3e, 0x40, 0xcc, 0x97, |
| 3869 | 0x7f, 0xf6, 0xa8, 0x1f, 0x5e, 0xd6, 0xf3, 0x59, 0x92, 0x51, 0x0b, 0x9e, | 3803 | 0x91, 0x72, 0xe9, 0xed, 0xdd, 0xf9, 0xc2, 0x5d, 0x2e, 0xdb, 0x87, 0x89, |
| 3870 | 0x29, 0x45, 0x29, 0xd6, 0xe9, 0x24, 0x17, 0x8d, 0xe2, 0x45, 0x88, 0xec, | 3804 | 0xff, 0xec, 0xa4, 0x0f, 0x1e, 0xd6, 0xf3, 0x69, 0x92, 0x51, 0x3b, 0x9e, |
| 3871 | 0x4b, 0xc6, 0xd6, 0x51, 0xf5, 0x08, 0xc5, 0x85, 0xdc, 0x04, 0xda, 0x91, | 3805 | 0x2f, 0x47, 0x29, 0xde, 0x69, 0x24, 0x17, 0x95, 0xe2, 0x45, 0x88, 0xec, |
| 3872 | 0x0c, 0x28, 0x94, 0xbb, 0x5f, 0x9a, 0x8b, 0x01, 0xdb, 0xe8, 0x53, 0x35, | 3806 | 0x4b, 0xc6, 0xc6, 0x09, 0xe5, 0x20, 0xc5, 0x85, 0x5c, 0x9e, 0x40, 0x51, |
| 3873 | 0x93, 0xc0, 0x19, 0x09, 0x68, 0x6d, 0x30, 0x22, 0xfb, 0x1b, 0x48, 0x1f, | 3807 | 0x32, 0xe0, 0xa7, 0xfc, 0xfd, 0x6a, 0x35, 0x06, 0x0c, 0xd2, 0xa7, 0x62, |
| 3874 | 0x75, 0x45, 0x0f, 0x1e, 0x18, 0xad, 0xc7, 0xfd, 0xe3, 0x5e, 0xec, 0x18, | 3808 | 0x24, 0x81, 0x93, 0x0e, 0xa0, 0xa3, 0x59, 0x8f, 0xec, 0x6d, 0x26, 0x7d, |
| 3875 | 0xb5, 0x70, 0x39, 0xc6, 0xb6, 0xa1, 0xf6, 0x10, 0x89, 0x1d, 0xd5, 0x24, | 3809 | 0x34, 0x96, 0xdc, 0xd8, 0x3e, 0xd1, 0x84, 0x07, 0xa6, 0x3c, 0xd8, 0x3a, |
| 3876 | 0xd7, 0x4d, 0xb1, 0x48, 0xc2, 0x23, 0x9c, 0xa8, 0x2a, 0x76, 0x13, 0x06, | 3810 | 0x61, 0xe2, 0x52, 0x8c, 0x6d, 0x43, 0xe9, 0x27, 0x12, 0xbb, 0xeb, 0x48, |
| 3877 | 0x48, 0xb2, 0x5f, 0xe8, 0x34, 0x47, 0x68, 0xb7, 0x7e, 0x2b, 0x52, 0x01, | 3811 | 0xae, 0xb7, 0xc6, 0x22, 0x09, 0xb7, 0x70, 0xa2, 0xb6, 0xd4, 0x47, 0x38, |
| 3878 | 0x19, 0xae, 0xa2, 0x8f, 0x62, 0x09, 0xfb, 0x31, 0xdf, 0xfb, 0x06, 0xb6, | 3812 | 0x20, 0xc9, 0x7e, 0xa1, 0xd1, 0x1c, 0xa1, 0x9d, 0xda, 0xed, 0x48, 0x05, |
| 3879 | 0xba, 0x7d, 0x70, 0x64, 0x64, 0xe4, 0x28, 0xff, 0x63, 0x91, 0x1b, 0x9d, | 3813 | 0x64, 0xb8, 0x4a, 0x5e, 0x8a, 0x25, 0xec, 0xc7, 0x7c, 0xef, 0xeb, 0xd8, |
| 3880 | 0x4d, 0x12, 0xfd, 0x07, 0xfc, 0xd3, 0x63, 0x8d, 0xfe, 0x63, 0x14, 0x5f, | 3814 | 0x58, 0xe3, 0x85, 0x94, 0x91, 0x91, 0x23, 0x0c, 0x80, 0x45, 0x35, 0xe8, |
| 3881 | 0xef, 0xc9, 0x4a, 0xbc, 0x0e, 0xe3, 0x05, 0x9a, 0x5b, 0xc1, 0x93, 0x14, | 3815 | 0x69, 0x75, 0xd0, 0x7f, 0xc0, 0x37, 0x3b, 0xd9, 0xe2, 0x3b, 0x44, 0xf1, |
| 3882 | 0xab, 0x1f, 0xa2, 0xf8, 0x73, 0xa2, 0x94, 0x17, 0x1c, 0x4f, 0x6c, 0x7e, | 3816 | 0x75, 0x4b, 0xd6, 0xc1, 0xeb, 0x30, 0x66, 0xa0, 0xb9, 0xfd, 0x78, 0x9a, |
| 3883 | 0xb2, 0xc4, 0x5b, 0x96, 0x78, 0xcb, 0x12, 0x5f, 0x14, 0x17, 0x4e, 0x66, | 3817 | 0xe2, 0xf5, 0x43, 0x14, 0x7f, 0x8e, 0x94, 0xcb, 0x82, 0xe3, 0x89, 0xc5, |
| 3884 | 0x99, 0x8f, 0x2b, 0xe4, 0xa3, 0x09, 0xe2, 0xdd, 0x83, 0x6d, 0x44, 0xef, | 3818 | 0x4f, 0x96, 0x78, 0xcb, 0x12, 0x6f, 0x59, 0xe2, 0x8b, 0xe2, 0xc2, 0xd1, |
| 3885 | 0x83, 0xe3, 0xd5, 0xb8, 0x8f, 0xe8, 0x2d, 0xea, 0x6a, 0xcf, 0x9f, 0x0b, | 3819 | 0x2c, 0xf3, 0xf1, 0x6b, 0xf2, 0xd1, 0x04, 0xf1, 0xee, 0xc6, 0x66, 0xa2, |
| 3886 | 0x0b, 0xf9, 0x98, 0x6a, 0xee, 0x14, 0x5e, 0x48, 0x4d, 0x96, 0xd5, 0xad, | 3820 | 0xf7, 0xc1, 0xa9, 0x3a, 0x6c, 0x23, 0x7a, 0x8b, 0x9a, 0xa2, 0x3d, 0x27, |
| 3887 | 0x33, 0xcf, 0x64, 0xa7, 0x92, 0xcd, 0xf3, 0xfe, 0x24, 0x3c, 0xe8, 0xa3, | 3821 | 0x4c, 0xec, 0x8f, 0x29, 0xc6, 0x4f, 0x29, 0x10, 0x39, 0x5a, 0x4d, 0xb3, |
| 3888 | 0x67, 0x7a, 0xc7, 0xf1, 0xa9, 0x44, 0x3c, 0x79, 0x88, 0xc7, 0x83, 0xba, | 3822 | 0x4f, 0x63, 0x9e, 0x29, 0x5e, 0x39, 0x2c, 0x9e, 0xf7, 0x26, 0xe1, 0xc6, |
| 3889 | 0x9a, 0x58, 0x4e, 0x71, 0xfd, 0x82, 0x16, 0x29, 0x5f, 0x70, 0xe0, 0xeb, | 3823 | 0x20, 0x3d, 0x33, 0x30, 0x85, 0xcf, 0x1c, 0xc4, 0x93, 0x9b, 0x78, 0xdc, |
| 3890 | 0x24, 0x0f, 0x9d, 0xe5, 0xd1, 0x44, 0xfc, 0x3c, 0x40, 0x58, 0xc7, 0x6f, | 3824 | 0xa7, 0x29, 0x89, 0x1b, 0x28, 0xae, 0x9f, 0x53, 0x23, 0x95, 0x73, 0x12, |
| 3891 | 0x30, 0x9f, 0x91, 0xe8, 0xaf, 0x89, 0xf7, 0x48, 0x31, 0xe0, 0x3f, 0x77, | 3825 | 0x7e, 0x9f, 0xe4, 0x31, 0xcc, 0xf2, 0xb8, 0x89, 0xf8, 0x79, 0x80, 0xf0, |
| 3892 | 0xb8, 0xd1, 0xff, 0xe2, 0x50, 0x85, 0xfe, 0x9d, 0x44, 0xff, 0x74, 0xcc, | 3826 | 0x4e, 0x3d, 0xc5, 0xa5, 0xc2, 0x81, 0x48, 0xf4, 0x97, 0xc4, 0x7b, 0xa4, |
| 3893 | 0xc2, 0x21, 0xa2, 0xff, 0x29, 0xa2, 0xbf, 0x8f, 0xe3, 0xf9, 0x1c, 0xfd, | 3827 | 0x44, 0xb4, 0x8f, 0xda, 0xb4, 0xdf, 0xc7, 0xb4, 0xc7, 0x4c, 0xdc, 0x43, |
| 3894 | 0x27, 0x4a, 0xbc, 0xee, 0x97, 0xf1, 0x30, 0x4f, 0x7f, 0x3d, 0xb6, 0x8e, | 3828 | 0xb4, 0x1f, 0x26, 0xda, 0x07, 0xb3, 0x2c, 0x0f, 0xce, 0x3b, 0x36, 0xfd, |
| 3895 | 0xcf, 0xcb, 0xcb, 0xb2, 0xee, 0xd4, 0x9f, 0xb5, 0xbe, 0x4d, 0x32, 0x5b, | 3829 | 0x47, 0xca, 0xbc, 0xee, 0x97, 0xf1, 0x30, 0x4f, 0x7f, 0x13, 0x36, 0x4e, |
| 3896 | 0x52, 0x64, 0xb9, 0x31, 0x8e, 0x8b, 0x1c, 0xb9, 0x07, 0x7d, 0x12, 0xbc, | 3830 | 0xcd, 0xcb, 0xcb, 0x34, 0xbf, 0xad, 0x1d, 0x33, 0xff, 0x84, 0x64, 0xb6, |
| 3897 | 0x3e, 0x2c, 0x28, 0x72, 0x2e, 0x08, 0xe1, 0x59, 0xd2, 0xef, 0x29, 0xca, | 3831 | 0xb8, 0xc4, 0x72, 0x83, 0x51, 0xab, 0x47, 0x0e, 0x6e, 0xc1, 0x7d, 0x0e, |
| 3898 | 0x65, 0xcf, 0x94, 0xae, 0xcd, 0x6d, 0xac, 0xeb, 0x31, 0xd2, 0xb1, 0x3a, | 3832 | 0x78, 0xbc, 0x58, 0x50, 0xe2, 0x5c, 0x10, 0xc2, 0x31, 0xd2, 0xef, 0x71, |
| 3899 | 0x61, 0x52, 0x6c, 0x4b, 0x95, 0x92, 0xd8, 0x3b, 0x8e, 0xe4, 0xb4, 0xfe, | 3833 | 0xca, 0x67, 0xcf, 0x97, 0xaf, 0xcd, 0x6f, 0xac, 0xeb, 0x49, 0xd2, 0xb1, |
| 3900 | 0xaf, 0x29, 0xc0, 0x2c, 0x22, 0xfb, 0xaa, 0x4a, 0x2a, 0x9a, 0x17, 0x77, | 3834 | 0x92, 0x37, 0x28, 0xb6, 0xa5, 0xca, 0x49, 0xec, 0x9e, 0x42, 0x72, 0x56, |
| 3901 | 0x4d, 0x05, 0xd0, 0x5f, 0x5a, 0x8f, 0x2c, 0xc5, 0x9b, 0x9d, 0x14, 0x9f, | 3835 | 0xfb, 0x6f, 0x14, 0x60, 0x16, 0x91, 0x7d, 0xd5, 0x26, 0xfd, 0xaa, 0x07, |
| 3902 | 0x3f, 0x8c, 0x25, 0x77, 0xf8, 0x11, 0x21, 0xfd, 0x06, 0x70, 0x2f, 0x3d, | 3836 | 0x9b, 0x66, 0x02, 0x18, 0x2a, 0xaf, 0x41, 0x96, 0xe2, 0xcd, 0x36, 0x8a, |
| 3903 | 0x73, 0x70, 0x9c, 0xe9, 0x57, 0xe6, 0xf4, 0x1c, 0xc0, 0x3d, 0x74, 0x6d, | 3837 | 0xcf, 0x1f, 0xc7, 0x92, 0x5b, 0x7d, 0x88, 0x90, 0x7e, 0x03, 0xb8, 0x8f, |
| 3904 | 0xdf, 0xb8, 0x8c, 0x17, 0xf4, 0x27, 0x08, 0xcf, 0x54, 0xf0, 0xc5, 0xdd, | 3838 | 0x9e, 0xd9, 0x37, 0xc5, 0x3c, 0xf8, 0xab, 0x7a, 0x0e, 0x60, 0x0b, 0x5d, |
| 3905 | 0x59, 0x28, 0xe4, 0x9e, 0x84, 0xff, 0x22, 0xd1, 0x17, 0xe8, 0xf7, 0xb6, | 3839 | 0xdb, 0x33, 0x25, 0xe3, 0x25, 0xed, 0x49, 0xc2, 0x34, 0x36, 0xc6, 0xb8, |
| 3906 | 0x92, 0xd7, 0x3f, 0x38, 0x86, 0xef, 0x2d, 0x31, 0xfc, 0x58, 0x40, 0x58, | 3840 | 0x27, 0x0b, 0x3f, 0xb9, 0x27, 0x61, 0xc0, 0x48, 0xf4, 0x25, 0xfa, 0xbd, |
| 3907 | 0xec, 0x76, 0x3d, 0x42, 0x76, 0xef, 0xc4, 0x40, 0x49, 0xc2, 0x77, 0xa6, | 3841 | 0xb9, 0xec, 0xf1, 0x8d, 0x4c, 0xe2, 0x7b, 0x8b, 0x75, 0x1f, 0x16, 0x10, |
| 3908 | 0xbc, 0x78, 0x68, 0xf4, 0x53, 0xcb, 0x1d, 0x77, 0xe2, 0xb6, 0x26, 0x2f, | 3842 | 0x1e, 0xbb, 0x4b, 0x8b, 0x90, 0xdd, 0x3b, 0x31, 0x5c, 0x76, 0xe0, 0x3b, |
| 3909 | 0x1e, 0x9c, 0x4a, 0x62, 0xff, 0x38, 0x42, 0x55, 0xb1, 0x61, 0x8a, 0xdd, | 3843 | 0x33, 0x1e, 0x3c, 0x34, 0xf1, 0x99, 0x59, 0x13, 0x77, 0xe2, 0x8e, 0x56, |
| 3910 | 0x95, 0x7c, 0x50, 0x4d, 0xbc, 0x1f, 0x18, 0xf7, 0xf9, 0xfb, 0x0e, 0xb3, | 3844 | 0x0f, 0x1e, 0x9c, 0x49, 0x62, 0xef, 0x14, 0x42, 0xb5, 0xb1, 0x31, 0x8a, |
| 3911 | 0x0c, 0xd6, 0x07, 0x3d, 0x40, 0xb9, 0x2a, 0xe6, 0xc0, 0x36, 0xdd, 0xb1, | 3845 | 0xdd, 0x76, 0x3e, 0xa8, 0x23, 0xde, 0x1f, 0x9b, 0xf2, 0xfa, 0x06, 0x0f, |
| 3912 | 0xa0, 0x8a, 0x0c, 0xfd, 0x09, 0x9a, 0x6f, 0x12, 0x8e, 0x57, 0x97, 0x20, | 3846 | 0xb0, 0x0c, 0xd6, 0x04, 0xdd, 0x40, 0xa5, 0x36, 0x26, 0x61, 0xb3, 0x26, |
| 3913 | 0x72, 0xa4, 0xc1, 0x51, 0xce, 0x2d, 0x40, 0x3d, 0x1e, 0x9a, 0x49, 0x62, | 3847 | 0x2d, 0xa8, 0x25, 0x43, 0x7f, 0x92, 0xe6, 0x9b, 0x86, 0xf4, 0xda, 0x62, |
| 3914 | 0x98, 0x6c, 0xf4, 0x81, 0xd1, 0xc1, 0xef, 0xd5, 0x51, 0x0c, 0xf1, 0xb7, | 3848 | 0x44, 0x0e, 0x36, 0x4b, 0x95, 0xdc, 0x02, 0x34, 0xe1, 0xa1, 0xb9, 0x24, |
| 3915 | 0xaa, 0x7d, 0x6f, 0x08, 0x03, 0xf9, 0x88, 0x07, 0x3b, 0xa7, 0x7c, 0xfe, | 3849 | 0xc6, 0xc8, 0x46, 0xb7, 0x4f, 0x8c, 0x7c, 0xaf, 0x91, 0x62, 0x88, 0xaf, |
| 3916 | 0x1d, 0x87, 0xad, 0x75, 0x6c, 0x4f, 0xdb, 0x67, 0xea, 0x71, 0xdf, 0x38, | 3850 | 0x43, 0x19, 0x7c, 0x53, 0xe8, 0x28, 0x44, 0xdc, 0xd8, 0x36, 0xe3, 0xf5, |
| 3917 | 0x5d, 0x1b, 0x65, 0x1b, 0x26, 0x5b, 0x8b, 0x54, 0x11, 0x6f, 0xe1, 0xa4, | 3851 | 0x6d, 0x3d, 0x60, 0xae, 0x66, 0x7b, 0xba, 0x77, 0xae, 0x09, 0xf7, 0x4f, |
| 3918 | 0x87, 0xf0, 0x92, 0x23, 0x56, 0x4d, 0xf2, 0xf0, 0xe0, 0x1e, 0xdb, 0x16, | 3852 | 0xd1, 0xb5, 0x09, 0xb6, 0x61, 0xb2, 0xb5, 0x48, 0x2d, 0xf1, 0x16, 0x4e, |
| 3919 | 0x14, 0x6c, 0x1b, 0xb7, 0xf0, 0xa6, 0x1e, 0x45, 0x8e, 0xec, 0xfa, 0xc8, | 3853 | 0xba, 0x09, 0x33, 0x49, 0xb1, 0x3a, 0x92, 0x87, 0x1b, 0x5b, 0x2c, 0x5b, |
| 3920 | 0xb8, 0x3a, 0xdb, 0x41, 0x58, 0xe7, 0x6d, 0x87, 0x7a, 0xa4, 0xc9, 0x91, | 3854 | 0xf0, 0x63, 0xf3, 0x94, 0x89, 0xb3, 0x5a, 0x14, 0x39, 0xb2, 0xeb, 0x83, |
| 3921 | 0x44, 0x7d, 0x1b, 0xc5, 0xf8, 0x7a, 0xcb, 0xba, 0xbb, 0xb5, 0xb9, 0xff, | 3855 | 0x53, 0xca, 0xe5, 0x6e, 0xc2, 0x3b, 0xef, 0x49, 0xca, 0xc1, 0x56, 0x29, |
| 3922 | 0xe7, 0x44, 0x73, 0x9d, 0xb1, 0x08, 0xe5, 0x3a, 0x35, 0x07, 0x34, 0x0f, | 3856 | 0x89, 0xa6, 0xe5, 0x14, 0xe3, 0x9b, 0x4c, 0xf3, 0x9e, 0x8e, 0xb6, 0xa1, |
| 3923 | 0xb8, 0xa5, 0xeb, 0x71, 0x7e, 0x21, 0xc7, 0x41, 0x8e, 0xe5, 0x01, 0x7f, | 3857 | 0xb7, 0x88, 0xe6, 0x46, 0x7d, 0x11, 0x2a, 0x8d, 0x4a, 0x8e, 0xb0, 0xf3, |
| 3924 | 0x7d, 0xa6, 0x92, 0xe3, 0xea, 0x8b, 0x8d, 0xfe, 0xba, 0x4c, 0xd0, 0x5f, | 3858 | 0x70, 0x8d, 0xe3, 0x46, 0x9c, 0x59, 0x48, 0x7a, 0x06, 0xc7, 0xf2, 0x80, |
| 3925 | 0x57, 0x84, 0xdf, 0x5d, 0x04, 0x7e, 0x4c, 0xf1, 0x65, 0x41, 0xdb, 0x6f, | 3859 | 0xaf, 0x29, 0x63, 0xe7, 0xb8, 0x26, 0xb2, 0x93, 0xc6, 0x4c, 0xd0, 0xd7, |
| 3926 | 0xac, 0x54, 0xbd, 0x8d, 0x07, 0xfd, 0xcf, 0x8f, 0xa9, 0x66, 0x19, 0xea, | 3860 | 0x58, 0x82, 0xaf, 0xa6, 0x04, 0xbc, 0x40, 0xf1, 0x65, 0xc1, 0xf2, 0xdf, |
| 3927 | 0x7e, 0x0a, 0x9b, 0x78, 0x7c, 0xc6, 0xe9, 0x3f, 0x4e, 0xd8, 0xaf, 0x5e, | 3861 | 0x98, 0xa9, 0x26, 0x0b, 0x13, 0xfa, 0x5e, 0x9c, 0x54, 0x8c, 0x0a, 0x94, |
| 3928 | 0x8b, 0x62, 0x1f, 0xe9, 0x73, 0x17, 0xd9, 0xc2, 0xaf, 0xdb, 0x80, 0x03, | 3862 | 0xbd, 0x14, 0x2a, 0xf1, 0xc4, 0x9c, 0xd3, 0x77, 0x98, 0xf0, 0x5f, 0x93, |
| 3929 | 0x99, 0x70, 0x48, 0x17, 0x3d, 0x34, 0x31, 0xb0, 0xa7, 0x48, 0x31, 0x5f, | 3863 | 0x1a, 0xc5, 0x1e, 0xd2, 0xe7, 0x0e, 0xb2, 0x85, 0xbf, 0x27, 0x7c, 0xf2, |
| 3930 | 0x4a, 0x52, 0x10, 0x53, 0xa3, 0x94, 0xd6, 0x90, 0xce, 0xb8, 0x60, 0x2e, | 3864 | 0x58, 0x26, 0x1c, 0xd2, 0x44, 0x3f, 0x4d, 0x0c, 0xec, 0x2a, 0x51, 0xcc, |
| 3931 | 0xac, 0xe8, 0xe4, 0xbe, 0xec, 0x29, 0xcb, 0xaf, 0x69, 0x13, 0x45, 0xd2, | 3865 | 0x77, 0xac, 0xa5, 0x20, 0xa6, 0x44, 0x29, 0xad, 0x21, 0x9d, 0x71, 0xc1, |
| 3932 | 0xd9, 0xc3, 0x25, 0x1f, 0x06, 0x08, 0x0f, 0x2c, 0x20, 0x0c, 0xf9, 0x20, | 3866 | 0x58, 0x68, 0xeb, 0xe4, 0xfe, 0xec, 0x71, 0xd3, 0xa7, 0xaa, 0xf9, 0x12, |
| 3933 | 0xd9, 0xc5, 0x03, 0xa3, 0x0e, 0xa2, 0x8f, 0xc7, 0x25, 0x91, 0x5c, 0x54, | 3867 | 0xe9, 0xec, 0xe1, 0xb2, 0x17, 0xc3, 0x84, 0x07, 0x16, 0x10, 0x8e, 0x7c, |
| 3934 | 0xc1, 0xa2, 0x0f, 0x4d, 0xb1, 0x5d, 0x92, 0x1d, 0x91, 0x2d, 0x3e, 0x4b, | 3868 | 0x90, 0xec, 0x62, 0xfb, 0x84, 0x44, 0xf4, 0xf1, 0xb8, 0x24, 0x92, 0x8b, |
| 3935 | 0x39, 0xff, 0x99, 0xcf, 0x61, 0x10, 0x55, 0x31, 0xaf, 0xe6, 0xfe, 0x8a, | 3869 | 0x6c, 0x3c, 0xfa, 0xd0, 0x0c, 0xdb, 0x25, 0xd9, 0x11, 0xd9, 0xe2, 0x31, |
| 3936 | 0x3c, 0x06, 0xc7, 0x99, 0x67, 0xf5, 0x08, 0xa4, 0x24, 0x6e, 0xd2, 0x7f, | 3870 | 0xca, 0xf9, 0xcf, 0xff, 0x16, 0x06, 0x51, 0xfc, 0xc6, 0xd5, 0xdc, 0x6f, |
| 3937 | 0x49, 0x39, 0x81, 0x79, 0x27, 0x0c, 0x3c, 0x1e, 0xc5, 0xa3, 0x59, 0xc2, | 3871 | 0xcb, 0x63, 0x64, 0x8a, 0x79, 0x56, 0x0e, 0xc2, 0x91, 0xc4, 0x2d, 0xda, |
| 3938 | 0x34, 0xb1, 0xcb, 0xd6, 0x3d, 0x01, 0x96, 0x01, 0xf3, 0xb3, 0xca, 0xc1, | 3872 | 0xaf, 0x28, 0x27, 0x30, 0xef, 0x84, 0x83, 0xa7, 0xa2, 0x94, 0x57, 0x08, |
| 3939 | 0xf9, 0xb3, 0x9e, 0xb0, 0xef, 0xff, 0xbb, 0xdd, 0xdd, 0x65, 0xa5, 0x6c, | 3873 | 0xdb, 0xc4, 0x2e, 0x99, 0x5b, 0x02, 0x2c, 0x03, 0xe6, 0xe7, 0x66, 0x89, |
| 3940 | 0x2c, 0x4b, 0x18, 0x9b, 0xec, 0x29, 0x75, 0xd5, 0x7e, 0x1e, 0xb4, 0xce, | 3874 | 0xf3, 0x67, 0x13, 0xe1, 0xdf, 0xff, 0x77, 0xbb, 0xdb, 0x64, 0xa6, 0x2c, |
| 3941 | 0x07, 0x38, 0x5f, 0xd7, 0x23, 0x75, 0xd5, 0x16, 0xd8, 0x96, 0xb0, 0x44, | 3875 | 0x3c, 0x4b, 0x38, 0x9b, 0xec, 0x29, 0x75, 0xd5, 0x7e, 0x1e, 0x34, 0xcf, |
| 3942 | 0x6f, 0xdd, 0xfd, 0xa0, 0x02, 0xb6, 0x87, 0xe8, 0x35, 0xf6, 0x50, 0x45, | 3876 | 0x04, 0x38, 0x5f, 0x37, 0x21, 0x75, 0xd5, 0x16, 0xd8, 0x96, 0xb0, 0x58, |
| 3943 | 0x34, 0x29, 0xd8, 0x31, 0xc3, 0xf6, 0x6b, 0x5d, 0x59, 0x62, 0xfc, 0xd6, | 3877 | 0xeb, 0xd8, 0xf9, 0xa0, 0x1f, 0x6c, 0x0f, 0xd1, 0x6b, 0xec, 0xc1, 0x43, |
| 3944 | 0xfa, 0x64, 0xb5, 0x76, 0xe4, 0x97, 0xe8, 0xa2, 0xeb, 0x01, 0x7c, 0x87, | 3878 | 0x34, 0xf9, 0xb1, 0x75, 0x8e, 0xed, 0xd7, 0xfc, 0x64, 0xb1, 0xfe, 0x2f, |
| 3945 | 0xfc, 0xe8, 0x5e, 0xe2, 0x73, 0x47, 0xfb, 0xbd, 0xb6, 0xdf, 0xee, 0x28, | 3879 | 0xe6, 0x95, 0x95, 0xea, 0xc1, 0x5f, 0xe1, 0xeb, 0x74, 0x3d, 0x80, 0xef, |
| 3946 | 0xad, 0xa1, 0xeb, 0x2c, 0xef, 0x0e, 0xec, 0xcf, 0xea, 0x48, 0x67, 0xcb, | 3880 | 0x90, 0x1f, 0xdd, 0x47, 0x7c, 0x6e, 0xed, 0x7c, 0xc0, 0xf2, 0xdb, 0xad, |
| 3947 | 0x9c, 0x87, 0xc8, 0xe6, 0xe3, 0xf8, 0x11, 0xc5, 0xd9, 0x67, 0x4b, 0x8c, | 3881 | 0xe5, 0xdf, 0xa3, 0xeb, 0x2c, 0xef, 0x6e, 0x8a, 0x73, 0x1a, 0xf6, 0x65, |
| 3948 | 0xc9, 0x12, 0x36, 0x1e, 0xfb, 0x61, 0xa9, 0x05, 0xcf, 0x91, 0x4f, 0x3e, | 3882 | 0x2b, 0x9c, 0x87, 0xc8, 0xe6, 0xe3, 0xf8, 0x4b, 0x8a, 0xb3, 0xc7, 0xca, |
| 3949 | 0x43, 0x31, 0xf7, 0x07, 0x36, 0x4e, 0x73, 0x8a, 0x43, 0x69, 0xc2, 0xa4, | 3883 | 0x8c, 0xc9, 0x12, 0x16, 0x1e, 0xfb, 0x61, 0xb9, 0x1d, 0x3f, 0x20, 0x9f, |
| 3950 | 0x43, 0x26, 0xd2, 0xf9, 0x10, 0x3c, 0x87, 0xc3, 0xfb, 0x77, 0x08, 0xf5, | 3884 | 0x7c, 0x9e, 0x62, 0xee, 0xf7, 0x2d, 0x9c, 0xe6, 0x14, 0x8f, 0xa6, 0x55, |
| 3951 | 0xc7, 0x24, 0x2f, 0xff, 0x81, 0xe9, 0xa5, 0xa8, 0x3a, 0xac, 0x4e, 0x10, | 3885 | 0x3c, 0x4d, 0x58, 0x7f, 0x5f, 0x21, 0x84, 0x23, 0xe9, 0xf0, 0xde, 0x0b, |
| 3952 | 0xdd, 0xfe, 0x47, 0xa7, 0x35, 0xc2, 0xd4, 0x41, 0xff, 0xbe, 0xbc, 0xe2, | 3886 | 0x50, 0x5e, 0x20, 0x79, 0xf9, 0xf6, 0x52, 0x8d, 0x76, 0x38, 0xad, 0xe4, |
| 3953 | 0xdf, 0x3b, 0x16, 0xf0, 0xef, 0x9d, 0xae, 0x27, 0x3f, 0x5a, 0xe4, 0x1f, | 3887 | 0x81, 0xa0, 0x6f, 0x4f, 0xc1, 0xef, 0x1b, 0x49, 0x07, 0x7c, 0x23, 0x84, |
| 3954 | 0x9c, 0x0e, 0xfa, 0x77, 0xa7, 0x1b, 0xfd, 0xbb, 0xf3, 0x6d, 0x08, 0xd5, | 3888 | 0x81, 0x76, 0xa6, 0x5b, 0x7c, 0x3b, 0x0b, 0xcb, 0x11, 0x6a, 0x82, 0xb1, |
| 3955 | 0xc3, 0x5c, 0x44, 0x39, 0xe2, 0xbe, 0xd1, 0x6f, 0x62, 0xa2, 0xae, 0x12, | 3889 | 0x88, 0x72, 0xc2, 0x7d, 0x13, 0x1b, 0x90, 0x6a, 0xb4, 0xe3, 0xfc, 0x03, |
| 3956 | 0xf7, 0xfb, 0xc9, 0x36, 0x6a, 0xc9, 0x0e, 0x57, 0x4a, 0xb7, 0xa1, 0xbc, | 3890 | 0x53, 0x1c, 0x83, 0xdb, 0x52, 0x37, 0x3a, 0xbe, 0x5e, 0xd5, 0xb7, 0x1f, |
| 3957 | 0xb0, 0x72, 0xed, 0x3b, 0x74, 0xed, 0xa1, 0x56, 0xf8, 0xff, 0xc2, 0x8e, | 3891 | 0x43, 0x74, 0xad, 0xa1, 0x03, 0xbe, 0x37, 0xad, 0x58, 0x0b, 0x3c, 0x4f, |
| 3958 | 0xbd, 0xc0, 0x73, 0x64, 0x6b, 0xcf, 0xb6, 0x52, 0x5d, 0x79, 0xd5, 0xd6, | 3892 | 0xb6, 0xf5, 0x50, 0xc7, 0x6f, 0xcc, 0x64, 0xd5, 0xb6, 0x7e, 0x30, 0xe9, |
| 3959 | 0x9c, 0x14, 0x6f, 0x2d, 0x4b, 0x6f, 0x13, 0x08, 0xb6, 0x6e, 0x00, 0x16, | 3893 | 0xa4, 0xf8, 0x6a, 0x9a, 0x47, 0x3b, 0x04, 0x02, 0x1d, 0xdd, 0x30, 0x9a, |
| 3960 | 0xcc, 0xd7, 0x92, 0xc9, 0x09, 0x67, 0x6b, 0x12, 0x4b, 0xb4, 0x8d, 0x78, | 3894 | 0xe6, 0x6b, 0xc8, 0x64, 0xbe, 0xb9, 0x83, 0x22, 0x94, 0x7a, 0x0b, 0x12, |
| 3961 | 0x42, 0xa1, 0x54, 0xd3, 0xfa, 0x75, 0xcc, 0x3d, 0x83, 0xef, 0x8c, 0x7a, | 3895 | 0x0b, 0x28, 0xb5, 0x74, 0xac, 0xae, 0xde, 0x93, 0xf1, 0x9d, 0x09, 0x37, |
| 3962 | 0x90, 0xda, 0xac, 0x60, 0x9a, 0xb0, 0xca, 0x76, 0x9a, 0x7f, 0x59, 0xac, | 3896 | 0x52, 0x4d, 0x7e, 0xcc, 0x12, 0x36, 0xd9, 0x68, 0xc5, 0xa2, 0xb6, 0xd3, |
| 3963 | 0x59, 0x99, 0x21, 0x3d, 0x24, 0x15, 0xbe, 0x46, 0x3e, 0xd1, 0xba, 0x8a, | 3897 | 0xc7, 0xa9, 0x96, 0x09, 0x7d, 0xc3, 0x4f, 0xbc, 0x26, 0x21, 0x77, 0x10, |
| 3964 | 0x7c, 0xa2, 0xb2, 0xfe, 0xd3, 0xa4, 0xaf, 0xdc, 0x4c, 0x14, 0x7b, 0x4b, | 3898 | 0x90, 0xa8, 0xd2, 0xc4, 0xbf, 0x73, 0x73, 0x51, 0xec, 0x2e, 0xff, 0xd8, |
| 3965 | 0x3f, 0x91, 0x2a, 0xf9, 0x45, 0x9d, 0x48, 0xe2, 0xac, 0x3d, 0xf6, 0xe9, | 3899 | 0x61, 0xe7, 0x13, 0x25, 0x9f, 0xc4, 0x4f, 0x28, 0x2f, 0xd2, 0xbd, 0xec, |
| 3966 | 0xec, 0x1b, 0x56, 0xc8, 0xb6, 0x3b, 0x81, 0xc7, 0x56, 0x44, 0xf6, 0xff, | 3900 | 0x9b, 0x66, 0xc8, 0xb2, 0x33, 0x81, 0xc7, 0x97, 0x45, 0xf6, 0xfe, 0x4f, |
| 3967 | 0x27, 0xa9, 0x81, 0xf8, 0x22, 0xd9, 0x65, 0xed, 0x3a, 0xb2, 0x76, 0xb1, | 3901 | 0xc7, 0x75, 0xc4, 0x17, 0xc9, 0x2a, 0x6b, 0xd5, 0x8e, 0x0d, 0xd7, 0xa9, |
| 3968 | 0xf6, 0x2f, 0xf0, 0x23, 0x85, 0x65, 0x3b, 0x20, 0xf6, 0x53, 0xbd, 0x4a, | 3902 | 0x0f, 0xe2, 0x2f, 0xfd, 0x2c, 0xcb, 0x61, 0x91, 0xa5, 0x3a, 0xf5, 0x8c, |
| 3969 | 0xa5, 0x53, 0xed, 0x02, 0xed, 0x30, 0x9e, 0xe9, 0xe6, 0x6b, 0x01, 0xff, | 3903 | 0x0b, 0x0d, 0x41, 0x35, 0x8b, 0x17, 0xfa, 0xf8, 0x5a, 0xc0, 0xf7, 0x44, |
| 3970 | 0x81, 0xb1, 0xa4, 0x14, 0xd0, 0xa0, 0xb8, 0x8c, 0x0e, 0x71, 0x60, 0x7a, | 3904 | 0x3a, 0xe9, 0x08, 0xa8, 0xf0, 0xbb, 0xf4, 0x6e, 0xf1, 0x04, 0x61, 0xc0, |
| 3971 | 0x91, 0xff, 0xd1, 0xb1, 0x0d, 0xe2, 0xd1, 0xe9, 0x46, 0xff, 0x60, 0xba, | 3905 | 0x89, 0x74, 0x8f, 0x98, 0x28, 0xdc, 0x29, 0x8c, 0xfc, 0x37, 0x85, 0x31, |
| 3972 | 0x53, 0x0c, 0xe6, 0x37, 0x0b, 0x73, 0xe2, 0x5b, 0xc2, 0x9c, 0x4e, 0x09, | 3906 | 0x9b, 0x12, 0x46, 0xa1, 0x9f, 0x3e, 0x37, 0x88, 0xc9, 0xc2, 0xb0, 0xd8, |
| 3973 | 0x33, 0xdf, 0x43, 0x9f, 0x5b, 0xc4, 0x58, 0x7e, 0x40, 0xec, 0xcd, 0xf3, | 3907 | 0x5d, 0xe0, 0x79, 0x49, 0x27, 0x34, 0xf7, 0x0f, 0x29, 0xc6, 0xfe, 0x80, |
| 3974 | 0xfc, 0xa4, 0x2b, 0x5a, 0xe3, 0x87, 0x14, 0x7b, 0x9f, 0xa3, 0xd8, 0xfb, | 3908 | 0x62, 0xec, 0x31, 0x8a, 0xb1, 0xcf, 0x93, 0x5d, 0x7f, 0xff, 0x2a, 0x96, |
| 3975 | 0x2c, 0xc5, 0xde, 0x67, 0xc8, 0xde, 0x7f, 0x70, 0x15, 0xe3, 0xb2, 0x8d, | 3909 | 0x65, 0x5b, 0x4e, 0x32, 0x06, 0xf1, 0xfd, 0xbc, 0xf4, 0x12, 0xe9, 0x95, |
| 3976 | 0x27, 0x19, 0x9b, 0xf8, 0xff, 0xbc, 0x78, 0x86, 0xf4, 0xcd, 0xb2, 0xfb, | 3910 | 0x65, 0xf6, 0x13, 0xb2, 0x61, 0x96, 0xc5, 0x7f, 0xe6, 0x9c, 0x40, 0xfa, |
| 3977 | 0x37, 0x64, 0xdb, 0x2c, 0x93, 0x87, 0x38, 0x57, 0x90, 0x9e, 0xde, 0xb7, | 3911 | 0xf8, 0xd0, 0xb2, 0xd9, 0xc7, 0x97, 0x31, 0x66, 0x1a, 0x16, 0x3b, 0x98, |
| 3978 | 0x6d, 0xf9, 0xb1, 0x15, 0x8c, 0xa5, 0x06, 0xc4, 0x56, 0xa2, 0x2f, 0xe9, | 3912 | 0xae, 0x5a, 0xaa, 0xdb, 0x55, 0xc2, 0x21, 0xd9, 0x61, 0xb1, 0xb1, 0xc0, |
| 3979 | 0x24, 0x0c, 0xa4, 0x11, 0x3e, 0xc9, 0x0e, 0x88, 0xbb, 0xf3, 0x7c, 0xfd, | 3913 | 0xd7, 0xf7, 0xe1, 0x3e, 0xaa, 0xff, 0xb6, 0xc6, 0xc2, 0x89, 0x6e, 0xc2, |
| 3980 | 0x20, 0x76, 0x52, 0x4d, 0x78, 0x28, 0x16, 0xee, 0xee, 0x25, 0xec, 0xb4, | 3914 | 0x48, 0x17, 0x54, 0x73, 0x71, 0x34, 0x46, 0x98, 0xe1, 0xc6, 0x2b, 0x54, |
| 3981 | 0x89, 0xb0, 0xd3, 0xb2, 0x98, 0x8c, 0x8b, 0x2d, 0x9f, 0x58, 0x58, 0x88, | 3915 | 0xab, 0x22, 0xb9, 0x2d, 0xae, 0xe4, 0xf3, 0x76, 0x5e, 0xcd, 0xa5, 0xc1, |
| 3982 | 0xe4, 0xfd, 0x71, 0x75, 0x62, 0xa2, 0x92, 0x6f, 0x73, 0x19, 0x70, 0xdd, | 3916 | 0x75, 0x3a, 0x1a, 0x9c, 0xaa, 0x72, 0x24, 0x89, 0xf0, 0xde, 0xb8, 0x03, |
| 3983 | 0x8e, 0xda, 0x1a, 0x4d, 0x3d, 0x91, 0x44, 0x78, 0x7f, 0x5c, 0x82, 0xe9, | 3917 | 0x46, 0x8d, 0xee, 0xc2, 0x80, 0x55, 0x17, 0xae, 0x41, 0x66, 0x42, 0xe0, |
| 3984 | 0x36, 0x5c, 0xb8, 0xcf, 0xae, 0x15, 0xd7, 0x63, 0x74, 0x54, 0x60, 0x5b, | 3918 | 0x65, 0xf2, 0x01, 0x17, 0xc9, 0xe8, 0x50, 0x27, 0x3e, 0x23, 0xb5, 0x0a, |
| 3985 | 0x6b, 0xf2, 0x8f, 0x5c, 0x24, 0xab, 0xb7, 0xdb, 0x11, 0x20, 0xf5, 0x0a, | 3919 | 0xaa, 0xe3, 0x4f, 0x9f, 0xa5, 0x9c, 0x73, 0x17, 0xe5, 0xd6, 0x89, 0xec, |
| 3986 | 0x99, 0xea, 0xfa, 0x4e, 0x92, 0x5e, 0x07, 0xe5, 0xdc, 0x27, 0xb2, 0xab, | 3920 | 0x0a, 0x04, 0x3b, 0x64, 0x34, 0x74, 0x38, 0xf1, 0x8d, 0xd2, 0xef, 0xe3, |
| 3987 | 0xd0, 0xd0, 0x2a, 0x93, 0x0e, 0x9d, 0xb8, 0xb3, 0x78, 0x13, 0xe9, 0x31, | 3921 | 0x4c, 0x63, 0xe4, 0xe0, 0x0b, 0xf0, 0xf8, 0x5e, 0x9a, 0x64, 0x7a, 0xf0, |
| 3988 | 0x72, 0xe4, 0x79, 0x78, 0xfd, 0x2f, 0x8c, 0x19, 0x18, 0xca, 0xe2, 0x7b, | 3922 | 0xbd, 0x3a, 0xaa, 0xd7, 0xb6, 0x12, 0x4e, 0x1a, 0x27, 0x1a, 0x7a, 0x3a, |
| 3989 | 0x3e, 0xaa, 0xe1, 0xee, 0x25, 0xfc, 0xf4, 0x03, 0xa2, 0x61, 0x63, 0x6b, | 3923 | 0x22, 0x3d, 0xb7, 0x09, 0xf8, 0x6b, 0xf5, 0x1a, 0x8c, 0xb7, 0xfa, 0xe0, |
| 3990 | 0xa4, 0x93, 0x6a, 0x79, 0xc5, 0x6b, 0xb8, 0x31, 0xd2, 0xe4, 0x87, 0xa2, | 3924 | 0x57, 0x53, 0xe2, 0xd5, 0x02, 0xe5, 0x0d, 0xc7, 0x37, 0xc5, 0x5b, 0xb3, |
| 3991 | 0xa5, 0xc4, 0x2b, 0xf9, 0xc8, 0x91, 0x1d, 0xd2, 0xb7, 0xc4, 0xcf, 0xa7, | 3925 | 0x3a, 0xf6, 0x96, 0xfb, 0xc5, 0x2f, 0x66, 0x65, 0x90, 0x4e, 0x28, 0x3e, |
| 3992 | 0x0d, 0x3c, 0x5a, 0xea, 0x11, 0x7f, 0x31, 0x2d, 0x83, 0x74, 0x43, 0x71, | 3926 | 0x69, 0xc8, 0x10, 0x5d, 0x2e, 0xc2, 0x42, 0x2f, 0xdf, 0x21, 0x70, 0x9d, |
| 3993 | 0x4b, 0xc7, 0x11, 0xa2, 0xcb, 0x45, 0x18, 0xc9, 0xf5, 0xfb, 0x02, 0x8b, | 3927 | 0x9a, 0xc4, 0x77, 0x56, 0xb0, 0xcd, 0xdb, 0xb1, 0x2b, 0x98, 0x51, 0x42, |
| 3994 | 0xb5, 0x24, 0xbe, 0xb3, 0x8a, 0x7d, 0xa1, 0x12, 0xd3, 0x9c, 0xab, 0x80, | 3928 | 0x49, 0x47, 0xb7, 0x08, 0x52, 0xec, 0x6a, 0xc8, 0xf4, 0x88, 0x06, 0xc2, |
| 3995 | 0xfd, 0x64, 0x93, 0x0d, 0x99, 0x0e, 0xb1, 0x84, 0xbe, 0x5f, 0xa4, 0xbc, | 3929 | 0x9e, 0x0b, 0xa7, 0x37, 0x88, 0x05, 0x25, 0xc6, 0x9a, 0xf0, 0x2f, 0x24, |
| 3996 | 0x96, 0x94, 0x3a, 0x45, 0x03, 0x61, 0xd3, 0x85, 0x93, 0x5b, 0xc4, 0x82, | 3930 | 0xd9, 0x2c, 0x2c, 0x7d, 0x20, 0xd9, 0x18, 0xdf, 0xc5, 0xb6, 0x43, 0x39, |
| 3997 | 0x22, 0x63, 0x51, 0x28, 0x0b, 0x49, 0x46, 0x0b, 0x8b, 0x17, 0x1d, 0x95, | 3931 | 0x4a, 0xf6, 0xfd, 0x7a, 0x32, 0x89, 0x5b, 0x3b, 0xd6, 0x20, 0x64, 0xd9, |
| 3998 | 0x1a, 0xc0, 0xc5, 0xb6, 0x64, 0xfa, 0x0c, 0xd9, 0x7f, 0x88, 0x62, 0xfb, | 3932 | 0xc7, 0xb0, 0xd8, 0x47, 0xf2, 0x4b, 0x5a, 0xfd, 0x07, 0xbf, 0xef, 0xc0, |
| 3999 | 0x8e, 0x58, 0x27, 0xe1, 0x64, 0xbe, 0x3e, 0x20, 0x86, 0x48, 0x8e, 0x13, | 3933 | 0x24, 0x5c, 0x7e, 0x1d, 0x21, 0x89, 0x72, 0x43, 0xa9, 0x23, 0x32, 0xf8, |
| 4000 | 0x2e, 0xdb, 0x76, 0xfc, 0x4f, 0x8c, 0xc1, 0xd5, 0x60, 0x20, 0xe4, 0xa6, | 3934 | 0x96, 0xe8, 0x15, 0xa3, 0x85, 0x80, 0x2f, 0x9d, 0x86, 0xbf, 0x8e, 0x74, |
| 4001 | 0xdc, 0xf1, 0xdf, 0xdb, 0x22, 0xe6, 0xf3, 0x52, 0x97, 0xc8, 0xe5, 0x03, | 3935 | 0x9c, 0x26, 0x1d, 0xef, 0x21, 0x1d, 0xef, 0xf9, 0x12, 0x1d, 0xef, 0x24, |
| 4002 | 0xfe, 0x23, 0x63, 0x9c, 0x67, 0x3a, 0xc4, 0x11, 0xd2, 0x79, 0x96, 0x74, | 3936 | 0x1d, 0xef, 0x2f, 0xfc, 0x9d, 0xa5, 0x33, 0xa7, 0xae, 0x63, 0x94, 0x72, |
| 4003 | 0x9e, 0x25, 0x9d, 0x67, 0x48, 0xe7, 0x99, 0x2f, 0xd1, 0xf9, 0x3e, 0xd2, | 3937 | 0xee, 0x78, 0xab, 0xcd, 0x4f, 0x81, 0x30, 0xea, 0x9e, 0x58, 0xaf, 0x13, |
| 4004 | 0xf9, 0xee, 0xfc, 0xaf, 0x6c, 0x1d, 0x3a, 0x0d, 0x03, 0x59, 0xca, 0xcb, | 3938 | 0x1e, 0x9d, 0x62, 0x66, 0x2f, 0x3d, 0xd3, 0x5c, 0xb5, 0x65, 0xbf, 0xef, |
| 4005 | 0x23, 0x4d, 0x15, 0xfe, 0x3e, 0x24, 0x59, 0xbc, 0x14, 0xfb, 0x86, 0x13, | 3939 | 0xc9, 0x74, 0xb7, 0x78, 0xd2, 0xf2, 0x2b, 0xc6, 0x8d, 0x49, 0x34, 0xaa, |
| 4006 | 0x5e, 0x83, 0x62, 0x6b, 0x17, 0x3d, 0xf3, 0x95, 0x39, 0x1b, 0x57, 0xfc, | 3940 | 0x3d, 0x34, 0x17, 0xdb, 0xca, 0x9d, 0x02, 0x4f, 0xb1, 0xbd, 0x7c, 0x93, |
| 4007 | 0xc3, 0x63, 0x1d, 0x62, 0x98, 0xfc, 0x6e, 0x84, 0xe6, 0x1f, 0x21, 0xbf, | 3941 | 0x04, 0xcf, 0x36, 0x93, 0x12, 0x28, 0xb2, 0xdd, 0xf4, 0xd3, 0x6f, 0xb6, |
| 4008 | 0x1b, 0x4c, 0xff, 0x9f, 0xd8, 0x0d, 0xdb, 0x1d, 0x4c, 0x2f, 0xe5, 0xad, | 3942 | 0x9d, 0x0d, 0xa2, 0xb1, 0xf8, 0x45, 0xfb, 0x81, 0xdf, 0xa9, 0xb3, 0xfd, |
| 4009 | 0x6a, 0xb2, 0x4b, 0xa7, 0xc1, 0x36, 0xb4, 0x59, 0x24, 0x8f, 0x7e, 0x4b, | 3943 | 0xb0, 0x1d, 0x0d, 0x0b, 0x67, 0x91, 0x7c, 0x96, 0xe6, 0x1f, 0x21, 0xba, |
| 4010 | 0x24, 0x8f, 0xa5, 0x44, 0xb2, 0xd0, 0x43, 0x9f, 0x5b, 0xc4, 0x2d, 0x76, | 3944 | 0x77, 0xa6, 0xf7, 0x3b, 0x99, 0x36, 0x59, 0x67, 0x3b, 0x62, 0xfb, 0xb9, |
| 4011 | 0x1d, 0x3a, 0x20, 0x3a, 0x0a, 0x01, 0xff, 0x38, 0xad, 0x33, 0x4e, 0x7c, | 3945 | 0x48, 0xb4, 0xb2, 0xcd, 0x5f, 0xed, 0xd9, 0xd0, 0xdf, 0xef, 0x4a, 0x50, |
| 4012 | 0x3c, 0x46, 0xeb, 0x3c, 0x66, 0xdb, 0x2e, 0x15, 0x99, 0x5e, 0x5e, 0x8b, | 3946 | 0xb7, 0x38, 0x6d, 0x1e, 0x38, 0x87, 0x73, 0xce, 0xe6, 0x78, 0xea, 0xb7, |
| 4013 | 0xed, 0x8c, 0xed, 0xeb, 0x32, 0xd1, 0xce, 0xbe, 0x71, 0xb5, 0xc7, 0x43, | 3947 | 0x6a, 0xba, 0x63, 0x57, 0x73, 0x39, 0xe7, 0x75, 0xc8, 0x0b, 0xf4, 0x80, |
| 4014 | 0x7f, 0x37, 0x38, 0xa0, 0xed, 0x74, 0x56, 0x78, 0xe2, 0xdc, 0xcf, 0xb9, | 3948 | 0xfe, 0x9d, 0xd6, 0x2b, 0x34, 0xdf, 0x10, 0xb4, 0x15, 0x90, 0x03, 0xfa, |
| 4015 | 0x9e, 0xe3, 0xb0, 0x62, 0xd7, 0x82, 0xcf, 0x5e, 0xc5, 0x00, 0x8c, 0x07, | 3949 | 0xa4, 0x3e, 0xd9, 0x4a, 0xf1, 0x96, 0xe6, 0x94, 0x33, 0x80, 0x9a, 0x11, |
| 4016 | 0x20, 0x2f, 0x30, 0xb6, 0x18, 0xdf, 0x69, 0xfa, 0x1f, 0x34, 0x5f, 0x3f, | 3950 | 0xd8, 0x99, 0x10, 0x84, 0x47, 0x17, 0x91, 0xbf, 0xc1, 0xf0, 0xe8, 0x4a, |
| 4017 | 0xf4, 0x55, 0x90, 0x03, 0xc6, 0x5f, 0x1a, 0x63, 0x4d, 0x14, 0xa7, 0x69, | 3951 | 0x4f, 0x92, 0xee, 0x2d, 0x25, 0x7c, 0xbe, 0x58, 0xdf, 0x06, 0x33, 0x0b, |
| 4018 | 0x4e, 0x39, 0x03, 0x68, 0x19, 0x81, 0xdd, 0x09, 0x41, 0x38, 0x76, 0x11, | 3952 | 0xb9, 0x41, 0x1f, 0xc4, 0x27, 0xa3, 0x61, 0xff, 0x79, 0x28, 0xa9, 0xb3, |
| 4019 | 0xf9, 0x25, 0xd3, 0xaf, 0x76, 0x52, 0x36, 0xc1, 0xd2, 0x21, 0xc8, 0x4b, | 3953 | 0x92, 0x52, 0xa1, 0x3c, 0x35, 0x34, 0x22, 0x94, 0xc1, 0xcb, 0x42, 0x49, |
| 4020 | 0x8c, 0x9d, 0xb0, 0xb2, 0x90, 0x6b, 0x8d, 0x3e, 0x5c, 0x19, 0x0a, 0x07, | 3954 | 0x96, 0xac, 0x1e, 0xcf, 0x36, 0xb4, 0x5b, 0x58, 0x7c, 0x10, 0xd1, 0x02, |
| 4021 | 0x3b, 0xa1, 0xa6, 0x2e, 0x38, 0xd4, 0x32, 0xe5, 0xb7, 0xfe, 0xdd, 0x42, | 3955 | 0x70, 0x1b, 0x01, 0xbc, 0x7b, 0x6e, 0x26, 0x9b, 0xd4, 0x3e, 0xe2, 0xd8, |
| 4022 | 0xed, 0x9b, 0x15, 0xdc, 0x27, 0x62, 0xec, 0xbe, 0x13, 0x2d, 0x36, 0x86, | 3956 | 0x9e, 0x3c, 0x43, 0x54, 0x2f, 0xce, 0x70, 0xcf, 0x68, 0x5b, 0xb5, 0x67, |
| 4023 | 0xef, 0x43, 0x73, 0x1e, 0x54, 0x87, 0x0b, 0xbc, 0x43, 0x73, 0xbe, 0xa8, | 3957 | 0x34, 0x68, 0xf5, 0x8c, 0xce, 0x4b, 0x4a, 0x62, 0xbe, 0x67, 0x74, 0x05, |
| 4024 | 0x7f, 0xc0, 0x39, 0x21, 0x49, 0x58, 0xf0, 0x0b, 0x73, 0x81, 0x70, 0x0c, | 3958 | 0x3c, 0x97, 0xd2, 0xef, 0xad, 0xce, 0xb7, 0xb4, 0x3a, 0x5f, 0x5b, 0x01, |
| 4025 | 0xcf, 0xc3, 0x73, 0x84, 0x95, 0x3e, 0x9a, 0xf7, 0x4d, 0x47, 0x73, 0xff, | 3959 | 0x22, 0x9a, 0x31, 0xcc, 0x1a, 0xd5, 0x43, 0xfc, 0x26, 0x1d, 0xae, 0x88, |
| 4026 | 0xa0, 0x50, 0x13, 0x5f, 0x9c, 0x6f, 0x59, 0x1e, 0x62, 0x59, 0xc6, 0xb4, | 3960 | 0xda, 0x73, 0x18, 0x21, 0x44, 0xa9, 0xde, 0xbd, 0x9e, 0xf2, 0xa0, 0x3b, |
| 4027 | 0xaa, 0x35, 0x2f, 0xe3, 0x21, 0xe9, 0x1d, 0x4d, 0x4b, 0xbe, 0x86, 0x10, | 3961 | 0xb3, 0x03, 0x33, 0x9a, 0xd2, 0x37, 0x00, 0xb6, 0x9d, 0x6e, 0xec, 0xa3, |
| 4028 | 0x96, 0x51, 0x9d, 0x1c, 0x2d, 0x32, 0x0f, 0xbb, 0x70, 0x46, 0x57, 0xbb, | 3962 | 0x18, 0xba, 0xb7, 0xcc, 0xf5, 0xc8, 0xb0, 0x38, 0xcb, 0x76, 0xe3, 0xb4, |
| 4029 | 0xa9, 0x1a, 0xa5, 0xba, 0xa5, 0x03, 0x07, 0x29, 0xf6, 0x3e, 0x5a, 0xe2, | 3963 | 0xa5, 0x66, 0xaf, 0xff, 0x70, 0x75, 0xfd, 0x21, 0x6b, 0xfd, 0x0b, 0x92, |
| 4030 | 0x3e, 0xd7, 0x80, 0x58, 0x3e, 0x44, 0x7e, 0x69, 0xdb, 0x13, 0xe4, 0x06, | 3964 | 0xd2, 0x5f, 0x5d, 0x5f, 0xfb, 0x33, 0xa1, 0xa4, 0x68, 0xfd, 0x9e, 0x3d, |
| 4031 | 0xe3, 0x61, 0xdc, 0x40, 0xeb, 0xfb, 0xa9, 0xf6, 0x79, 0x9d, 0xd6, 0x97, | 3965 | 0xb4, 0xbe, 0x4b, 0xe5, 0xb5, 0x1f, 0xe6, 0xb5, 0xe9, 0x73, 0x08, 0xd7, |
| 4032 | 0x32, 0xea, 0x00, 0xad, 0x9f, 0x7a, 0x43, 0x84, 0x67, 0x89, 0xaf, 0x9e, | 3966 | 0x93, 0xdd, 0xbc, 0x57, 0x90, 0xc5, 0xbb, 0xb9, 0x35, 0xd8, 0x35, 0xb3, |
| 4033 | 0x75, 0x8e, 0xe6, 0xbe, 0x5d, 0x42, 0x4d, 0x12, 0xe9, 0xe4, 0xc7, 0xbc, | 3967 | 0x06, 0x3b, 0xc9, 0xdf, 0xb6, 0x6a, 0x0d, 0x54, 0xa7, 0xa1, 0xde, 0xa7, |
| 4034 | 0xf6, 0xc3, 0xcc, 0x0b, 0x7d, 0x52, 0x9d, 0x43, 0x76, 0xd4, 0x54, 0x90, | 3968 | 0xe2, 0xb2, 0x23, 0x22, 0xa4, 0xf5, 0xed, 0x2d, 0x84, 0x41, 0x4e, 0x34, |
| 4035 | 0x45, 0x64, 0x78, 0x3d, 0xf6, 0x4e, 0xad, 0xc7, 0x1e, 0xf2, 0xc7, 0x03, | 3969 | 0xcb, 0xf8, 0xd4, 0x1c, 0x50, 0xd7, 0xf4, 0x39, 0x91, 0xfc, 0x7d, 0x0f, |
| 4036 | 0x7a, 0x2d, 0x42, 0x75, 0xa8, 0xa9, 0xd5, 0x30, 0x7b, 0x41, 0x13, 0x8e, | 3970 | 0xfe, 0x5c, 0x22, 0xff, 0x7d, 0x67, 0x81, 0x40, 0xd2, 0x63, 0xd5, 0x1c, |
| 4037 | 0x1d, 0x2d, 0x8d, 0x64, 0xc7, 0xa7, 0x1b, 0xaa, 0xf0, 0x91, 0xd5, 0xab, | 3971 | 0x09, 0xe1, 0x29, 0xfe, 0xd8, 0x69, 0xdb, 0x7b, 0x2b, 0x7c, 0x8d, 0x68, |
| 4038 | 0xad, 0xef, 0xa4, 0x88, 0x78, 0x83, 0x07, 0xe3, 0x0e, 0xf2, 0xef, 0x5f, | 3972 | 0x68, 0x50, 0x6f, 0x40, 0x43, 0xa3, 0x6c, 0x38, 0xa8, 0x8e, 0x59, 0x4f, |
| 4039 | 0xfc, 0x9a, 0x02, 0xaa, 0xc7, 0x60, 0xdc, 0x96, 0x10, 0x97, 0xf2, 0x67, | 3973 | 0x21, 0xd1, 0xcc, 0xf5, 0x51, 0x3c, 0x35, 0x71, 0x65, 0xf9, 0xdf, 0x9b, |
| 4040 | 0x9d, 0x15, 0x3f, 0x68, 0xc2, 0x15, 0x05, 0xb5, 0x41, 0x6d, 0x39, 0x66, | 3974 | 0x89, 0xeb, 0xf8, 0x39, 0x02, 0x15, 0x56, 0x4c, 0xfc, 0xb2, 0x39, 0xe2, |
| 4041 | 0x15, 0x99, 0xe2, 0x85, 0x69, 0xd7, 0x64, 0x37, 0xe7, 0xba, 0xd1, 0x40, | 3975 | 0xe4, 0xbf, 0x6d, 0x54, 0x97, 0xd6, 0x51, 0xf0, 0xed, 0xc1, 0x9e, 0xac, |
| 4042 | 0xf5, 0xf1, 0x9d, 0xb1, 0x5f, 0x5b, 0x9f, 0x2c, 0xe6, 0xe7, 0x4e, 0x7a, | 3976 | 0x92, 0xda, 0x43, 0x75, 0xe5, 0xfe, 0x48, 0x5b, 0xcf, 0x26, 0x51, 0x83, |
| 4043 | 0x2a, 0xb1, 0xf3, 0xcb, 0xe6, 0x88, 0x53, 0xbc, 0x69, 0xa6, 0x7a, 0xb6, | 3977 | 0xd0, 0xc2, 0xf0, 0xe0, 0x00, 0x92, 0xcd, 0xf5, 0x55, 0x3a, 0x1e, 0x46, |
| 4044 | 0x9a, 0x82, 0x74, 0x27, 0xe5, 0x23, 0xb5, 0x27, 0x4d, 0xf5, 0x68, 0x5f, | 3978 | 0xb3, 0x8b, 0x9e, 0xe3, 0x79, 0xae, 0xb1, 0xa7, 0x22, 0xd9, 0x13, 0xdf, |
| 4045 | 0xa4, 0x59, 0x77, 0x08, 0x37, 0xca, 0x81, 0x70, 0x7f, 0x2f, 0x92, 0xdb, | 3979 | 0xe7, 0xef, 0x57, 0xef, 0xcb, 0xbf, 0xa3, 0x4f, 0xae, 0xfa, 0xaf, 0x4b, |
| 4046 | 0xfd, 0x73, 0x74, 0x3c, 0x2b, 0x34, 0x17, 0x3d, 0xc7, 0xf3, 0x5c, 0x63, | 3980 | 0xbf, 0xec, 0xfa, 0xb1, 0x2f, 0xb9, 0xfe, 0x6f, 0xd5, 0xe7, 0x95, 0x46, |
| 4047 | 0x4f, 0x27, 0xc9, 0x9e, 0xf8, 0x3e, 0x7f, 0xbf, 0x7a, 0x5f, 0xfe, 0x8a, | 3981 | 0xa7, 0x95, 0xfb, 0x93, 0x0e, 0xee, 0x4b, 0x3a, 0xf5, 0x42, 0xd7, 0x2e, |
| 4048 | 0xf1, 0x97, 0xff, 0xe4, 0x8f, 0x97, 0x7d, 0xd9, 0xf5, 0x8f, 0xbf, 0xe4, | 3982 | 0xf5, 0x3f, 0x51, 0xcc, 0xe2, 0x7e, 0x04, 0xe7, 0xdb, 0x33, 0x56, 0x3f, |
| 4049 | 0xfa, 0xff, 0xae, 0xae, 0x2f, 0xd7, 0x39, 0x6d, 0xcc, 0x90, 0x94, 0xb8, | 3983 | 0xe2, 0xf8, 0x6f, 0x61, 0x4f, 0x8e, 0x1d, 0x6e, 0x51, 0x37, 0x6e, 0x98, |
| 4050 | 0x8f, 0xe9, 0x34, 0x2e, 0xaf, 0xd9, 0xa3, 0xfd, 0x0e, 0xc5, 0x34, 0xee, | 3984 | 0x4d, 0xea, 0x1f, 0x51, 0x7d, 0xb2, 0x03, 0x03, 0x31, 0x0d, 0x63, 0x59, |
| 4051 | 0x63, 0x70, 0x9e, 0x3e, 0x6f, 0xf7, 0x31, 0x4e, 0x7d, 0x0e, 0xb3, 0x72, | 3985 | 0xa5, 0xef, 0x0e, 0xa8, 0xc9, 0x3b, 0x05, 0x4d, 0x54, 0x72, 0x0b, 0x69, |
| 4052 | 0x6c, 0xf1, 0x88, 0xea, 0x11, 0xd3, 0xaa, 0xd7, 0xbe, 0x4d, 0x75, 0xcd, | 3986 | 0xbc, 0x7a, 0x4f, 0x33, 0xa8, 0xe6, 0xaa, 0xa0, 0x96, 0x62, 0x8f, 0x53, |
| 4053 | 0x2e, 0xf4, 0xc6, 0x74, 0x0c, 0x67, 0xd5, 0xee, 0xdb, 0xa0, 0x25, 0x37, | 3987 | 0xf5, 0xcb, 0x28, 0x05, 0x64, 0x67, 0x29, 0x28, 0xd7, 0x94, 0x5a, 0xe4, |
| 4054 | 0x0b, 0x9a, 0xa8, 0xe8, 0x11, 0x8e, 0x91, 0xb9, 0x7b, 0xba, 0x49, 0xb5, | 3988 | 0x5a, 0x1a, 0xe7, 0x1d, 0x57, 0x2e, 0xdf, 0x81, 0x1d, 0xb8, 0xbc, 0xdc, |
| 4055 | 0x5a, 0x19, 0x55, 0x14, 0x9b, 0x9c, 0x9a, 0x22, 0xa3, 0x18, 0x90, 0x9d, | 3989 | 0x63, 0x34, 0xeb, 0x8a, 0xbf, 0x59, 0xda, 0x81, 0x5d, 0x31, 0x7e, 0xb6, |
| 4056 | 0xc5, 0xa0, 0xec, 0x2e, 0x36, 0xca, 0x55, 0x34, 0xce, 0x37, 0xa2, 0xce, | 3990 | 0x9b, 0x6a, 0x2f, 0x88, 0xc6, 0x0c, 0x21, 0x5c, 0x5d, 0x60, 0x37, 0xd5, |
| 4057 | 0xde, 0x86, 0x5d, 0x98, 0x6d, 0xf3, 0x9a, 0x0d, 0x86, 0xaa, 0x34, 0x38, | 3991 | 0x97, 0x4b, 0x1c, 0x6a, 0xcf, 0xaf, 0x85, 0x53, 0x76, 0x97, 0x20, 0x7c, |
| 4058 | 0x76, 0x61, 0x4f, 0x8c, 0x9f, 0xed, 0xa0, 0x9a, 0x0d, 0xa2, 0x2e, 0x43, | 3992 | 0x19, 0x07, 0x0e, 0x76, 0xc2, 0xed, 0x5e, 0xa1, 0x0c, 0x9e, 0x10, 0xc3, |
| 4059 | 0xc8, 0xd8, 0x10, 0xd8, 0xdb, 0xae, 0x0e, 0x2c, 0x95, 0xb4, 0xce, 0x5f, | 3993 | 0x78, 0x36, 0x16, 0xe9, 0xdb, 0x2c, 0x42, 0xb2, 0x87, 0xee, 0xb9, 0x32, |
| 4060 | 0x09, 0xa7, 0xec, 0x29, 0x42, 0xf8, 0x33, 0x12, 0x8e, 0xb4, 0xc3, 0xe3, | 3994 | 0x10, 0x72, 0xc6, 0x70, 0xbb, 0x56, 0x28, 0x41, 0x87, 0x48, 0x62, 0x40, |
| 4061 | 0x59, 0xa5, 0xf6, 0x9d, 0x16, 0x03, 0x78, 0x2a, 0x16, 0xe9, 0xde, 0x26, | 3995 | 0x55, 0xb5, 0x71, 0xc8, 0xb4, 0x26, 0x44, 0x6d, 0x46, 0xb9, 0x7c, 0x96, |
| 4062 | 0x42, 0xb2, 0x97, 0xee, 0xb9, 0x32, 0x14, 0x7f, 0x33, 0xa6, 0xc7, 0xb5, | 3996 | 0xb0, 0xd1, 0x95, 0xa5, 0xc3, 0xe8, 0x58, 0x1e, 0xd9, 0xdb, 0xef, 0x50, |
| 4063 | 0x4a, 0x0d, 0x4a, 0x22, 0x89, 0x5e, 0x4d, 0xd3, 0x47, 0x20, 0xd3, 0x9a, | 3997 | 0x65, 0xc2, 0x6c, 0xc2, 0x99, 0xf1, 0xe2, 0xa6, 0x03, 0xf3, 0xfd, 0x19, |
| 4064 | 0x10, 0x55, 0x19, 0x75, 0xf6, 0x4d, 0xc2, 0x54, 0x9f, 0x2c, 0x1b, 0x40, | 3998 | 0xd3, 0xfc, 0x38, 0x56, 0xb9, 0x97, 0x44, 0x28, 0xd7, 0x97, 0xa2, 0xb2, |
| 4065 | 0x6b, 0x5b, 0x64, 0x7f, 0x8f, 0xa4, 0xc9, 0x84, 0xf5, 0x84, 0x33, 0xe3, | 3999 | 0x97, 0xf0, 0x79, 0xdb, 0x01, 0xc6, 0x4b, 0x9c, 0x0f, 0x2a, 0x64, 0x37, |
| 4066 | 0xc3, 0xca, 0xc3, 0xf3, 0x7d, 0x1d, 0xcb, 0xfa, 0x30, 0x56, 0x26, 0xbd, | 4000 | 0xed, 0xc4, 0x63, 0x1f, 0x66, 0xd2, 0x8c, 0x9f, 0x74, 0x4c, 0x53, 0x6d, |
| 4067 | 0x40, 0xae, 0x29, 0x46, 0x65, 0x1f, 0xe1, 0xfa, 0xe6, 0xc3, 0x8c, 0xb3, | 4001 | 0xa3, 0x8e, 0xb6, 0x50, 0xae, 0x4f, 0x60, 0x2e, 0xcd, 0x7d, 0x9c, 0x41, |
| 4068 | 0x2c, 0x6b, 0x47, 0xac, 0xfc, 0x75, 0x2f, 0x5a, 0x88, 0xc7, 0x6e, 0x4c, | 4002 | 0x92, 0x71, 0x3f, 0xd1, 0xbf, 0x81, 0xea, 0xda, 0x14, 0xc5, 0x2b, 0x96, |
| 4069 | 0xa5, 0x19, 0x77, 0x19, 0x98, 0xa4, 0x9a, 0x48, 0x1b, 0x6a, 0xc4, 0x71, | 4003 | 0xf1, 0x00, 0xf7, 0x6b, 0xa9, 0x96, 0xfe, 0x79, 0xd7, 0xd7, 0xc6, 0x20, |
| 4070 | 0x8a, 0x43, 0x33, 0x69, 0xee, 0xff, 0xf4, 0x91, 0x8c, 0x7b, 0x88, 0xfe, | 4004 | 0xbb, 0xf5, 0xd7, 0xba, 0xae, 0x3f, 0x80, 0x46, 0xca, 0xe7, 0x3a, 0x55, |
| 4071 | 0x2d, 0x54, 0x0f, 0xa7, 0x28, 0x7e, 0xb1, 0x8c, 0x7b, 0xc9, 0xee, 0x21, | 4005 | 0x2e, 0x88, 0x46, 0x22, 0xda, 0x79, 0x44, 0x82, 0x2f, 0x93, 0x3e, 0x46, |
| 4072 | 0x7b, 0x8d, 0x3a, 0xe3, 0xe6, 0x61, 0xc8, 0x1e, 0xc3, 0x6b, 0x5c, 0x77, | 4006 | 0x54, 0x60, 0xa7, 0x55, 0x33, 0x3b, 0x61, 0x14, 0xd8, 0xa6, 0xe0, 0xae, |
| 4073 | 0x18, 0x75, 0x94, 0xf7, 0x0d, 0xaa, 0x78, 0x10, 0x8d, 0x44, 0xf4, 0x8b, | 4007 | 0xed, 0x6c, 0xc4, 0xfb, 0xb9, 0xa8, 0xd5, 0x0b, 0x32, 0xa8, 0x8e, 0x79, |
| 4074 | 0x88, 0x04, 0x5f, 0x24, 0x7d, 0x0c, 0x6a, 0xc0, 0x6e, 0xbb, 0xd6, 0x76, | 4008 | 0x49, 0x53, 0x52, 0x79, 0x7a, 0x6e, 0xa3, 0xff, 0x7f, 0xed, 0xa9, 0x8b, |
| 4075 | 0xc2, 0xcc, 0x73, 0x0d, 0x0d, 0x4f, 0x55, 0x7b, 0x1d, 0xde, 0xc9, 0x45, | 4009 | 0x43, 0xae, 0x53, 0xd9, 0xbf, 0xfe, 0xdc, 0x73, 0x96, 0x6c, 0xf4, 0xae, |
| 4076 | 0xed, 0x1e, 0x92, 0x49, 0xf5, 0xcf, 0x0b, 0xba, 0x9a, 0x9a, 0xa0, 0xe7, | 4010 | 0xc9, 0xbf, 0xf0, 0x7c, 0x12, 0xcf, 0x7b, 0x3e, 0x8a, 0x9b, 0x66, 0x82, |
| 4077 | 0xb6, 0x2a, 0xff, 0x65, 0x5f, 0x75, 0x1c, 0x32, 0xc5, 0x34, 0xb2, 0xbd, | 4011 | 0x70, 0x65, 0x3f, 0xd5, 0xcd, 0x1f, 0x8f, 0x1a, 0x9e, 0xf3, 0x71, 0xee, |
| 4078 | 0x3f, 0xf5, 0xbe, 0x49, 0x36, 0x7a, 0xfb, 0xd8, 0x9f, 0x79, 0xaf, 0xc4, | 4012 | 0xe9, 0x3a, 0xf1, 0x07, 0xf4, 0xfb, 0xe9, 0x51, 0x19, 0xb7, 0x16, 0x9b, |
| 4079 | 0x27, 0xbc, 0x1f, 0xc4, 0x2d, 0x2b, 0x41, 0x78, 0xb4, 0x87, 0xea, 0xed, | 4013 | 0xe1, 0x1a, 0x93, 0xc8, 0x3f, 0xd7, 0x52, 0xae, 0x72, 0xe0, 0x9e, 0xe8, |
| 4080 | 0x0f, 0x87, 0x4c, 0xef, 0xc5, 0x38, 0xf7, 0x81, 0x9d, 0xf8, 0x3d, 0xfa, | 4014 | 0x51, 0x54, 0x02, 0x0e, 0x1a, 0xb3, 0x9f, 0x7e, 0x73, 0x6f, 0xea, 0x71, |
| 4081 | 0xfd, 0xe4, 0x90, 0x8c, 0x4d, 0x85, 0x06, 0xb8, 0x86, 0x1d, 0x98, 0xd2, | 4015 | 0x6c, 0xf6, 0xcf, 0x7a, 0xde, 0x8f, 0x33, 0xbd, 0x15, 0xa6, 0x97, 0x72, |
| 4082 | 0x6f, 0x44, 0xaf, 0x22, 0xe1, 0xee, 0xe8, 0x49, 0xb2, 0x49, 0x89, 0xc6, | 4016 | 0xe4, 0xed, 0xd8, 0x78, 0x07, 0x0c, 0x9f, 0x6e, 0xfd, 0xbb, 0x5f, 0xee, |
| 4083 | 0x1c, 0xa2, 0xdf, 0xdc, 0xd3, 0x7a, 0x0c, 0xdb, 0x94, 0x69, 0xef, 0x3b, | 4017 | 0x6c, 0xc2, 0xe1, 0x5c, 0x33, 0x5e, 0xcc, 0x19, 0xee, 0x9f, 0x76, 0x46, |
| 4084 | 0x71, 0xa6, 0x17, 0x4c, 0xaf, 0x2c, 0x69, 0xb7, 0x62, 0xeb, 0x6d, 0x5c, | 4018 | 0x31, 0x38, 0x6a, 0xe2, 0x15, 0xcd, 0x18, 0xae, 0x25, 0x3b, 0x4f, 0x50, |
| 4085 | 0x5b, 0xd9, 0xff, 0x9e, 0x17, 0xdb, 0xeb, 0x71, 0x3c, 0xd7, 0x80, 0xe7, | 4019 | 0xad, 0x14, 0x5e, 0xae, 0xf8, 0x2f, 0x0b, 0x44, 0x24, 0x44, 0x86, 0x08, |
| 4086 | 0x73, 0xa6, 0xe7, 0xb5, 0xf6, 0x28, 0xfa, 0x86, 0x2c, 0xbc, 0xac, 0x9b, | 4020 | 0x2c, 0xde, 0x4d, 0xa1, 0x2b, 0x55, 0xaf, 0x47, 0xb4, 0xd7, 0x85, 0x59, |
| 4087 | 0x03, 0x55, 0x64, 0xe7, 0x09, 0xaa, 0xaf, 0xc2, 0x6d, 0xdc, 0x4b, 0x40, | 4021 | 0x73, 0x6f, 0xa7, 0x93, 0x68, 0x00, 0xd6, 0x51, 0x4c, 0x9e, 0x4b, 0x47, |
| 4088 | 0xc4, 0x81, 0x48, 0x3f, 0x81, 0xcc, 0x3b, 0x28, 0x74, 0xa5, 0x6a, 0xa8, | 4022 | 0x71, 0x6b, 0x44, 0xc6, 0xfa, 0xa2, 0x86, 0x17, 0xd3, 0x5e, 0xdc, 0x55, |
| 4089 | 0x4e, 0x3b, 0x27, 0x2c, 0xf7, 0xf6, 0x76, 0x27, 0xd1, 0x00, 0x6c, 0x28, | 4023 | 0x8c, 0x13, 0x86, 0xf6, 0x13, 0xed, 0x09, 0x94, 0xd3, 0x01, 0x7c, 0xbd, |
| 4090 | 0xb4, 0x90, 0xdc, 0xa2, 0xd8, 0x14, 0x91, 0xb1, 0xb1, 0xa0, 0xe3, 0xf9, | 4024 | 0xd8, 0x42, 0xf2, 0x0e, 0x62, 0x6d, 0x91, 0x31, 0x16, 0xe7, 0x67, 0xdd, |
| 4091 | 0xb4, 0x0f, 0xb7, 0x17, 0xe2, 0x84, 0xbd, 0x15, 0xa2, 0x3d, 0x81, 0x52, | 4025 | 0xbd, 0x31, 0xde, 0x82, 0x1e, 0x8a, 0xdf, 0xb3, 0x69, 0xb8, 0xb7, 0xc7, |
| 4092 | 0x3a, 0x80, 0x6f, 0x14, 0x1a, 0x49, 0xde, 0x41, 0xdc, 0x58, 0x08, 0xe1, | 4026 | 0x43, 0xe8, 0x2e, 0x46, 0x51, 0x24, 0x2c, 0x76, 0x3b, 0xcd, 0x79, 0x17, |
| 4093 | 0x44, 0x9a, 0xf3, 0xb7, 0xe1, 0xd9, 0x1a, 0x6f, 0x44, 0x67, 0x41, 0xc3, | 4027 | 0xe9, 0xa4, 0x9d, 0xea, 0xfb, 0x25, 0x11, 0x42, 0xa8, 0x45, 0xaf, 0x18, |
| 4094 | 0x74, 0x1a, 0x9e, 0x07, 0xe2, 0x21, 0x74, 0x14, 0xa2, 0x28, 0x10, 0x86, | 4028 | 0x26, 0xcc, 0x94, 0x28, 0x36, 0xe1, 0xfc, 0x18, 0xdb, 0xf9, 0x5b, 0x5d, |
| 4095 | 0xbb, 0x95, 0xe6, 0xbc, 0x9d, 0x74, 0xd2, 0x52, 0x08, 0x60, 0x69, 0x84, | 4029 | 0xbb, 0x72, 0x7e, 0x84, 0x8a, 0xb8, 0x49, 0x06, 0xb6, 0x51, 0x95, 0x97, |
| 4096 | 0x22, 0x72, 0xc1, 0x27, 0x06, 0x08, 0x5b, 0x25, 0x0a, 0xf5, 0xb8, 0x38, | 4030 | 0x2a, 0x12, 0xbd, 0xfb, 0x3a, 0xed, 0x7e, 0xec, 0x0d, 0xc5, 0xcf, 0xf9, |
| 4097 | 0xcc, 0x76, 0xae, 0x18, 0x7b, 0x72, 0x0a, 0x42, 0x05, 0xac, 0x94, 0x01, | 4031 | 0x6d, 0x20, 0x3d, 0x7d, 0x72, 0x60, 0xd6, 0x73, 0x85, 0x64, 0xe0, 0xd3, |
| 4098 | 0x0a, 0xd6, 0x91, 0x54, 0x81, 0xe8, 0x3d, 0xd8, 0x5e, 0xe9, 0xe1, 0x2e, | 4032 | 0x7f, 0xd4, 0xf5, 0xc6, 0x01, 0x20, 0x3a, 0xc5, 0xbc, 0x71, 0x7c, 0x0d, |
| 4099 | 0x2f, 0x7c, 0xc6, 0x6f, 0x2d, 0xe9, 0xe9, 0xca, 0xe1, 0x69, 0xef, 0x27, | 4033 | 0x27, 0x28, 0xbe, 0xb6, 0xcb, 0xf8, 0xb5, 0x49, 0xb5, 0x64, 0x68, 0x86, |
| 4100 | 0x71, 0x8e, 0x4d, 0x9f, 0xae, 0x79, 0xfd, 0x30, 0x10, 0x1d, 0x67, 0xde, | 4034 | 0x7b, 0xff, 0xaa, 0x97, 0xe8, 0xf0, 0x23, 0x49, 0x6b, 0xdf, 0x56, 0xfc, |
| 4101 | 0xec, 0xd8, 0xc8, 0xf1, 0xb0, 0x45, 0xc6, 0xaf, 0x2c, 0xaa, 0x41, 0x43, | 4035 | 0xa1, 0xb9, 0x71, 0x61, 0x10, 0x5f, 0x8b, 0xd8, 0xb2, 0x7a, 0x9d, 0x74, |
| 4102 | 0x53, 0xbc, 0x57, 0xa0, 0xf9, 0x88, 0x0e, 0x05, 0x49, 0x5a, 0xfb, 0x96, | 4036 | 0x38, 0x3d, 0xd6, 0x8c, 0xb9, 0x31, 0xee, 0xad, 0x9c, 0xea, 0x3a, 0x34, |
| 4103 | 0xc2, 0x0f, 0xad, 0xad, 0x0b, 0x83, 0xb8, 0x39, 0x52, 0x91, 0xd5, 0x39, | 4037 | 0x69, 0x62, 0x9d, 0x66, 0x78, 0x7e, 0xda, 0x79, 0x03, 0x1e, 0x38, 0x30, |
| 4104 | 0xd2, 0xe1, 0xe4, 0x70, 0x03, 0x66, 0x88, 0x06, 0x97, 0xe1, 0x36, 0x8e, | 4038 | 0x72, 0xba, 0x86, 0xf4, 0x7a, 0x59, 0xbb, 0x1b, 0x8f, 0x4e, 0xe1, 0xab, |
| 4105 | 0x8d, 0x59, 0xd8, 0xa0, 0x9b, 0xde, 0xd7, 0xda, 0x97, 0xe3, 0xfe, 0xc3, | 4039 | 0xcd, 0xc0, 0x23, 0x41, 0x70, 0xff, 0x59, 0x09, 0x1d, 0x41, 0xa4, 0x67, |
| 4106 | 0x83, 0x67, 0xdd, 0xa4, 0xd7, 0x59, 0xfd, 0x0e, 0x3c, 0x3a, 0x8e, 0xaf, | 4040 | 0x3b, 0x22, 0x7e, 0x55, 0x28, 0xda, 0x2b, 0x14, 0xab, 0xea, 0x08, 0x3b, |
| 4107 | 0x35, 0x00, 0x8f, 0x04, 0xc1, 0x3d, 0x6b, 0x35, 0x74, 0x02, 0x91, 0xce, | 4041 | 0xdc, 0x46, 0xb5, 0x7c, 0x0d, 0x79, 0xf0, 0x5d, 0x45, 0x27, 0xc9, 0x28, |
| 4108 | 0x07, 0x10, 0x51, 0x34, 0xa1, 0xea, 0x2f, 0x0b, 0x24, 0xab, 0x8d, 0xc8, | 4042 | 0x88, 0xf2, 0x58, 0x0d, 0x24, 0xf2, 0x93, 0x0b, 0x2a, 0xd6, 0x35, 0x90, |
| 4109 | 0xd9, 0x5b, 0x80, 0x33, 0x6e, 0xf2, 0xe0, 0xdb, 0x0b, 0x4e, 0x92, 0x51, | 4043 | 0xac, 0x25, 0x21, 0x93, 0x9e, 0xdb, 0x71, 0x68, 0x74, 0x5e, 0x56, 0x5e, |
| 4110 | 0x10, 0xa5, 0x61, 0x37, 0x1c, 0xe4, 0x27, 0x97, 0x34, 0x6c, 0xa8, 0x25, | 4044 | 0xdc, 0x42, 0x32, 0x7c, 0x76, 0xd4, 0xdc, 0xa1, 0xc6, 0x02, 0x24, 0x6b, |
| 4111 | 0x59, 0x3b, 0x84, 0x4c, 0x7a, 0x6e, 0xc1, 0xb1, 0xa1, 0x79, 0x59, 0xf9, | 4045 | 0x3f, 0xd1, 0x37, 0x2f, 0x27, 0x96, 0xdf, 0xbc, 0x9c, 0xee, 0xc6, 0xae, |
| 4112 | 0x70, 0x13, 0xc9, 0xf0, 0xa9, 0x21, 0x6b, 0x97, 0x16, 0x0b, 0x90, 0xac, | 4046 | 0x39, 0x96, 0xdb, 0xbf, 0x47, 0x5e, 0xb3, 0x96, 0xdd, 0xad, 0x9b, 0x8c, |
| 4113 | 0x15, 0xa2, 0x6f, 0x5e, 0x4e, 0x2c, 0xbf, 0x79, 0x39, 0xdd, 0x81, 0x3d, | 4047 | 0xa2, 0xf9, 0xc0, 0x55, 0xd9, 0x31, 0x7d, 0x8f, 0x10, 0x1f, 0xdf, 0xf3, |
| 4114 | 0x33, 0x2c, 0xb7, 0xff, 0x1b, 0x79, 0x4d, 0xdb, 0x76, 0xb7, 0x61, 0x2c, | 4048 | 0xad, 0x8c, 0x0c, 0x5e, 0x14, 0x5e, 0xa2, 0xc7, 0x4f, 0xba, 0x39, 0xeb, |
| 4115 | 0x8a, 0x86, 0xc3, 0x57, 0x65, 0xc7, 0xf4, 0x3d, 0x42, 0x7c, 0x7c, 0xcf, | 4049 | 0x62, 0x0c, 0x4e, 0x32, 0xb9, 0x2a, 0xe3, 0x20, 0xc9, 0x38, 0x38, 0xc5, |
| 4116 | 0xbf, 0x3a, 0xd2, 0xf7, 0xbe, 0xf0, 0x11, 0x3d, 0x0a, 0xe9, 0xe6, 0x03, | 4050 | 0xb2, 0xfe, 0x11, 0xc9, 0x1a, 0x78, 0x83, 0x70, 0xd7, 0xcd, 0xb1, 0x28, |
| 4117 | 0x17, 0x63, 0x77, 0x92, 0xc9, 0x55, 0x19, 0x07, 0x49, 0xc6, 0xc1, 0x71, | 4051 | 0xea, 0x0f, 0x28, 0xc9, 0x66, 0x29, 0x9c, 0x68, 0x10, 0xa0, 0xea, 0x02, |
| 4118 | 0x96, 0xf5, 0xa7, 0x6b, 0xae, 0x90, 0x7c, 0x5f, 0x27, 0x5c, 0x76, 0x43, | 4052 | 0xed, 0xf5, 0xf8, 0x98, 0xe5, 0xac, 0x91, 0x9c, 0xbf, 0x37, 0x42, 0xfc, |
| 4119 | 0x2c, 0x8a, 0x9a, 0xc3, 0x6a, 0xb2, 0xc1, 0x11, 0x4e, 0xd4, 0x0a, 0x50, | 4053 | 0xac, 0xa1, 0xf9, 0xd6, 0x91, 0x9c, 0x93, 0xc4, 0xff, 0x6d, 0xd6, 0xbc, |
| 4120 | 0x55, 0x82, 0x96, 0x1a, 0x7c, 0xc8, 0x72, 0xd6, 0x49, 0xce, 0xdf, 0x1b, | 4054 | 0x2d, 0x34, 0xef, 0x06, 0xaa, 0x21, 0x66, 0x3d, 0x17, 0x88, 0x9e, 0xe8, |
| 4121 | 0x24, 0x7e, 0xd6, 0xd3, 0x7c, 0x1b, 0x48, 0xce, 0x49, 0xe2, 0xff, 0x16, | 4055 | 0xe7, 0xb4, 0x10, 0xca, 0x8e, 0x04, 0x2f, 0x52, 0xad, 0xbc, 0xd6, 0x1a, |
| 4122 | 0x7b, 0xde, 0x46, 0x9a, 0x77, 0x0b, 0xd5, 0x1e, 0xd3, 0xde, 0x4b, 0x44, | 4056 | 0xe7, 0xa7, 0x71, 0x4c, 0xfb, 0x5b, 0xb5, 0x0e, 0xf5, 0xcb, 0x7a, 0xc7, |
| 4123 | 0x4f, 0xf4, 0x33, 0x5a, 0x08, 0x8d, 0x47, 0x82, 0xef, 0x53, 0x8d, 0x7d, | 4057 | 0x77, 0x83, 0x7b, 0x07, 0x06, 0xfa, 0xb1, 0x37, 0xbb, 0x81, 0x6a, 0x1e, |
| 4124 | 0xa3, 0x3d, 0x4e, 0xa1, 0x71, 0x4c, 0xfb, 0xcf, 0xab, 0x24, 0xed, 0xcb, | 4058 | 0x99, 0x30, 0xa4, 0x81, 0xef, 0xc7, 0x95, 0x68, 0xa3, 0xe0, 0xf8, 0x67, |
| 4125 | 0xfa, 0xcd, 0xdf, 0x02, 0xf7, 0x1c, 0x4c, 0xf4, 0x50, 0x1d, 0xb1, 0x85, | 4059 | 0x90, 0x1f, 0x56, 0xa8, 0xde, 0x09, 0x87, 0xe6, 0x10, 0x94, 0x1d, 0x25, |
| 4126 | 0x6a, 0x25, 0x99, 0x72, 0x9b, 0x89, 0x1f, 0xc4, 0xd5, 0x68, 0x9d, 0xe0, | 4060 | 0x99, 0xf0, 0x5e, 0x8b, 0x2c, 0x95, 0xc8, 0x5f, 0x83, 0xfd, 0x84, 0x93, |
| 4127 | 0xf8, 0x67, 0x92, 0x1f, 0x96, 0xa9, 0x4e, 0x0a, 0x87, 0x66, 0x10, 0x94, | 4061 | 0x9d, 0x78, 0xb9, 0xe0, 0xc4, 0xab, 0xe9, 0x0d, 0x94, 0xe7, 0xdc, 0x84, |
| 4128 | 0xa5, 0xa2, 0x4c, 0x78, 0xb0, 0x51, 0x76, 0x14, 0xc9, 0x5f, 0x83, 0x3d, | 4062 | 0x87, 0x0d, 0xb7, 0x73, 0xc5, 0x81, 0x1a, 0x3b, 0x26, 0x2f, 0x45, 0xef, |
| 4129 | 0x84, 0xa7, 0x9d, 0x78, 0x31, 0xef, 0xc4, 0x2b, 0xe9, 0x2d, 0x38, 0x50, | 4063 | 0xf8, 0xc3, 0xa8, 0xcb, 0x38, 0xfb, 0x28, 0x47, 0x6b, 0xb7, 0x91, 0x5c, |
| 4130 | 0xf2, 0x10, 0x6e, 0x36, 0x3d, 0xce, 0x55, 0x13, 0xee, 0x4a, 0x4c, 0x5e, | 4064 | 0xd6, 0x95, 0xf8, 0x7e, 0x0b, 0x32, 0xe9, 0x14, 0xb2, 0xd9, 0x30, 0xd5, |
| 4131 | 0x86, 0xae, 0x91, 0x87, 0x51, 0x9d, 0x71, 0x76, 0x53, 0x3e, 0xd5, 0x6f, | 4065 | 0x32, 0x4e, 0xe4, 0x9b, 0x5b, 0xac, 0xfe, 0x6c, 0x8e, 0xae, 0xe5, 0xca, |
| 4132 | 0x21, 0xb9, 0x6c, 0x28, 0xf2, 0xfd, 0x46, 0x64, 0xd2, 0x29, 0xc2, 0x40, | 4066 | 0x5f, 0xec, 0x1b, 0x7f, 0xab, 0xda, 0x2f, 0x1e, 0xa4, 0x9c, 0xd2, 0x4f, |
| 4133 | 0x61, 0xaa, 0x81, 0x9c, 0x98, 0x68, 0x68, 0xb4, 0xfb, 0xba, 0x39, 0xba, | 4067 | 0xd8, 0x73, 0x03, 0xc5, 0x77, 0x9b, 0xc6, 0xd9, 0x78, 0x1f, 0xf6, 0x14, |
| 4134 | 0x96, 0x2b, 0x7d, 0xb1, 0xdf, 0x7c, 0xc7, 0x5c, 0x9f, 0xb9, 0x0f, 0xfb, | 4068 | 0xf4, 0xab, 0xf1, 0x63, 0xba, 0x60, 0xf7, 0x05, 0xb7, 0x90, 0x3c, 0xce, |
| 4135 | 0xb2, 0x3d, 0x84, 0x4d, 0xb7, 0x50, 0x7c, 0xaf, 0xd0, 0x38, 0x1d, 0xef, | 4069 | 0xa5, 0x4d, 0x3c, 0xaa, 0xb1, 0x3e, 0x29, 0x2e, 0xa5, 0xb9, 0x37, 0x68, |
| 4136 | 0xc6, 0xbe, 0xbc, 0x71, 0x35, 0x7e, 0x4c, 0xda, 0xf1, 0xa3, 0x1f, 0x55, | 4070 | 0xe2, 0x19, 0x4d, 0x70, 0xbc, 0xa1, 0x3c, 0xba, 0x01, 0x4b, 0x0a, 0x26, |
| 4137 | 0xed, 0xbc, 0x7f, 0xb5, 0x05, 0x77, 0xa5, 0x81, 0xf7, 0xd2, 0xdc, 0x4f, | 4071 | 0x4e, 0x6b, 0x2a, 0xc5, 0x2e, 0x18, 0x6e, 0xc2, 0x7e, 0x91, 0xd1, 0x7f, |
| 4138 | 0x24, 0x4c, 0x41, 0xf9, 0xe0, 0x90, 0xce, 0x39, 0x74, 0x0b, 0x96, 0xe6, | 4072 | 0x31, 0xf3, 0xce, 0x21, 0xb4, 0x75, 0x02, 0x9b, 0x47, 0x25, 0xcc, 0xcd, |
| 4139 | 0x2d, 0xe4, 0x75, 0x0b, 0x67, 0x75, 0x8d, 0x72, 0x34, 0xe7, 0xea, 0x01, | 4073 | 0x5c, 0xcd, 0xd1, 0x78, 0xf1, 0xf3, 0x3c, 0x9d, 0x98, 0x81, 0xb9, 0xc3, |
| 4140 | 0xa1, 0x51, 0x7e, 0x36, 0x9d, 0xfd, 0x88, 0xb4, 0xb3, 0x8e, 0x1e, 0x9e, | 4074 | 0xa9, 0x2b, 0xc3, 0xbc, 0xd7, 0x32, 0x12, 0x57, 0x12, 0xb5, 0x56, 0xce, |
| 4141 | 0xdb, 0x87, 0xea, 0xb7, 0xf7, 0xa1, 0x66, 0xd2, 0x0e, 0x3c, 0x45, 0x8a, | 4075 | 0x56, 0xfb, 0x97, 0x48, 0x8a, 0x56, 0x12, 0x6d, 0xa9, 0x4f, 0x50, 0x59, |
| 4142 | 0x78, 0x3e, 0x1b, 0x0e, 0xbd, 0x07, 0x6b, 0x97, 0xc3, 0x50, 0x13, 0x4e, | 4076 | 0x2f, 0x43, 0x09, 0xfe, 0x0c, 0x91, 0xe8, 0x20, 0xef, 0x29, 0x94, 0xed, |
| 4143 | 0x07, 0xef, 0xcf, 0xf0, 0xfe, 0x94, 0xd6, 0xbd, 0xd4, 0xa1, 0xea, 0x45, | 4077 | 0xfc, 0xbd, 0xb4, 0x9a, 0xbf, 0xc3, 0x05, 0x8f, 0x50, 0xc7, 0x1c, 0xc8, |
| 4144 | 0xd1, 0xdc, 0xf3, 0x16, 0xca, 0x1b, 0x65, 0xa8, 0xa1, 0xd7, 0x10, 0x89, | 4078 | 0xcf, 0x98, 0x94, 0x67, 0x05, 0x66, 0x49, 0xc1, 0x2f, 0x64, 0x77, 0xe0, |
| 4145 | 0x76, 0xf2, 0x1e, 0x44, 0xa9, 0x92, 0xbb, 0x97, 0xcd, 0xe5, 0x6e, 0x2d, | 4079 | 0xeb, 0x31, 0xd3, 0xbc, 0x2b, 0xae, 0x0e, 0x36, 0x4b, 0xf8, 0xd3, 0x06, |
| 4146 | 0xef, 0x15, 0xe1, 0x61, 0x09, 0x13, 0x53, 0x96, 0x29, 0x91, 0xfd, 0x4e, | 4080 | 0xc2, 0x14, 0x64, 0xf7, 0x84, 0x01, 0x10, 0xda, 0xda, 0x69, 0x98, 0x32, |
| 4147 | 0xd1, 0x9c, 0x3f, 0xce, 0xee, 0x42, 0x36, 0x66, 0x59, 0xb7, 0xc7, 0xb5, | 4081 | 0xd5, 0x0c, 0x35, 0x3a, 0xf7, 0x1a, 0x7b, 0x45, 0x7b, 0x71, 0x83, 0xb8, |
| 4148 | 0xbe, 0x06, 0x07, 0xfe, 0x90, 0x32, 0x39, 0xc8, 0xe6, 0x53, 0xe4, 0x6b, | 4082 | 0xa1, 0xd8, 0x2f, 0x42, 0x87, 0xee, 0x14, 0xd1, 0xa7, 0x6c, 0xdc, 0xd6, |
| 4149 | 0xa1, 0x1d, 0xed, 0xa6, 0xe5, 0xb6, 0xeb, 0x0a, 0xee, 0x4f, 0x76, 0x89, | 4083 | 0x5a, 0xfc, 0xbc, 0x1f, 0xda, 0x43, 0x7c, 0xef, 0xd3, 0x4c, 0x3c, 0x4d, |
| 4150 | 0x96, 0xc2, 0x16, 0xb1, 0x9c, 0xb0, 0x5b, 0xe8, 0xd8, 0x66, 0xd1, 0x74, | 4084 | 0xbc, 0xed, 0x2d, 0xdb, 0xb5, 0xc8, 0xee, 0xb4, 0xcd, 0xdb, 0xa3, 0x74, |
| 4151 | 0xb4, 0x82, 0xdd, 0x22, 0x85, 0xcf, 0x7a, 0xa8, 0x37, 0xa7, 0x2d, 0xa4, | 4085 | 0xff, 0x62, 0x9a, 0xfd, 0xf1, 0x61, 0xab, 0xd7, 0xd9, 0x4c, 0xcf, 0xdc, |
| 4152 | 0x89, 0xaf, 0xa7, 0xfe, 0x0e, 0x5f, 0xac, 0x8b, 0x7e, 0x5c, 0xd7, 0xce, | 4086 | 0x9c, 0x0d, 0x87, 0x06, 0x85, 0x32, 0x34, 0x0b, 0xee, 0x77, 0xb6, 0x55, |
| 4153 | 0xbe, 0xf8, 0x30, 0x8e, 0xa5, 0xd9, 0xce, 0xfb, 0xb1, 0x87, 0xe4, 0xb3, | 4087 | 0x4e, 0x0a, 0xca, 0x3d, 0x12, 0xc7, 0x57, 0xf6, 0x79, 0x9b, 0xf6, 0x65, |
| 4154 | 0x62, 0x88, 0xf7, 0xc3, 0xd4, 0xb3, 0x83, 0x08, 0xf7, 0xbd, 0x2a, 0xd4, | 4088 | 0x05, 0x58, 0x71, 0x91, 0xe9, 0xbf, 0x91, 0xea, 0xbe, 0x9f, 0xa5, 0xdb, |
| 4155 | 0x72, 0x01, 0xcd, 0x7a, 0x8d, 0x83, 0xe3, 0xab, 0x3a, 0xd0, 0xe4, 0xa8, | 4089 | 0xfa, 0xdd, 0x24, 0xb6, 0xf3, 0xf1, 0x6e, 0x71, 0x89, 0xea, 0xbe, 0x57, |
| 4156 | 0xd0, 0x9f, 0xc8, 0x83, 0xe2, 0x69, 0x85, 0x87, 0x95, 0xf9, 0xa5, 0x64, | 4090 | 0xd3, 0xc9, 0x85, 0x75, 0xe8, 0x11, 0x17, 0x0a, 0x7d, 0xe2, 0xc3, 0x7c, |
| 4157 | 0xab, 0xa6, 0xe7, 0x52, 0xbc, 0xb9, 0xbf, 0x1a, 0x1b, 0xc4, 0x07, 0xd3, | 4091 | 0x2f, 0x9c, 0x63, 0xf7, 0x8b, 0x77, 0xf3, 0x4c, 0x5b, 0xbf, 0x38, 0x33, |
| 4158 | 0x21, 0x78, 0x0f, 0x27, 0x17, 0xfa, 0xd1, 0x21, 0xde, 0xb3, 0xeb, 0xc5, | 4092 | 0x7b, 0xde, 0x92, 0xfd, 0x2e, 0x8d, 0xfb, 0x9a, 0xf5, 0xb5, 0xf0, 0x99, |
| 4159 | 0x4e, 0xf1, 0x4e, 0xbe, 0x5b, 0x5c, 0x9e, 0xe8, 0x42, 0x64, 0xf8, 0x3e, | 4093 | 0x04, 0x4f, 0x59, 0x8f, 0xdc, 0xe7, 0xb3, 0xfb, 0x43, 0xeb, 0xe2, 0x39, |
| 4160 | 0xf1, 0xf6, 0x04, 0xd3, 0xd9, 0x23, 0xce, 0x4f, 0x73, 0x9f, 0xd4, 0xc2, | 4094 | 0xd3, 0xa9, 0x72, 0xaf, 0x37, 0x68, 0xf1, 0x38, 0x43, 0x78, 0x79, 0x36, |
| 4161 | 0x1e, 0x9d, 0xfb, 0xa2, 0x8b, 0xab, 0xe0, 0xb7, 0x70, 0x4c, 0x67, 0x7d, | 4095 | 0xbf, 0x41, 0x1c, 0x2e, 0xd8, 0xfc, 0x4d, 0x17, 0xd8, 0x6e, 0x65, 0xca, |
| 4162 | 0x72, 0x9f, 0xb0, 0xd2, 0x5f, 0xda, 0x10, 0xcf, 0x59, 0x4e, 0x8d, 0x7b, | 4096 | 0x0d, 0x5f, 0xcc, 0xcf, 0x06, 0xfc, 0x9d, 0x41, 0xd4, 0x58, 0xfd, 0x24, |
| 4163 | 0xc5, 0x41, 0x9b, 0xdf, 0x29, 0xc2, 0xd1, 0xd3, 0x13, 0x5b, 0xc4, 0xf1, | 4097 | 0x13, 0xe3, 0x5a, 0x24, 0xf4, 0x0a, 0x82, 0x70, 0x96, 0xd8, 0xa6, 0x4d, |
| 4164 | 0x7c, 0x85, 0xd7, 0xc9, 0x3c, 0xdb, 0xaf, 0x4c, 0x3a, 0xfe, 0x62, 0x9e, | 4098 | 0x3c, 0xa7, 0xb9, 0x20, 0x8d, 0xcb, 0x24, 0x17, 0xb2, 0x21, 0x9f, 0x0b, |
| 4165 | 0x36, 0xa1, 0xb4, 0x07, 0xe1, 0xb6, 0xfb, 0x51, 0x16, 0x46, 0xf4, 0x48, | 4099 | 0x8e, 0x69, 0xae, 0x01, 0xe2, 0xb5, 0xdc, 0x67, 0x08, 0x39, 0xf8, 0xfb, |
| 4166 | 0xe8, 0x65, 0x04, 0xe1, 0x2c, 0xb2, 0x6d, 0x5b, 0x78, 0x5a, 0x77, 0xc1, | 4100 | 0x17, 0x6d, 0xcd, 0x45, 0x79, 0x80, 0xfb, 0xe3, 0x6f, 0xd6, 0xd8, 0x36, |
| 4167 | 0x31, 0x22, 0x93, 0x8c, 0xc8, 0x96, 0xfc, 0x2e, 0x48, 0x93, 0x5c, 0x1b, | 4101 | 0xc7, 0xf9, 0x68, 0xbe, 0xa7, 0x4d, 0x39, 0xb6, 0x93, 0x7b, 0xd9, 0x6e, |
| 4168 | 0x7c, 0xbd, 0x8a, 0xfb, 0x14, 0x21, 0x89, 0xbf, 0x7f, 0xd1, 0xe6, 0x5c, | 4102 | 0xcc, 0xe5, 0x6a, 0xb8, 0xc5, 0xe0, 0xae, 0xe9, 0x34, 0x71, 0x4e, 0x73, |
| 4169 | 0x94, 0x0f, 0xb8, 0xbf, 0xfe, 0x57, 0xee, 0x8a, 0xed, 0xb1, 0x5d, 0xcd, | 4103 | 0x52, 0x5d, 0xf2, 0x10, 0xe5, 0x26, 0x07, 0x64, 0xf5, 0x6e, 0x94, 0x26, |
| 4170 | 0xf7, 0xc4, 0x29, 0xd7, 0xb6, 0x73, 0x2f, 0xdc, 0x83, 0x99, 0x9c, 0x9b, | 4104 | 0x9d, 0x0e, 0xde, 0x73, 0xfa, 0x59, 0x8c, 0x7b, 0x00, 0xc0, 0x7e, 0xe2, |
| 4171 | 0x5b, 0x14, 0x1e, 0x77, 0xbb, 0x85, 0x0b, 0xba, 0x93, 0xea, 0x97, 0x87, | 4105 | 0xe1, 0x99, 0x5c, 0x88, 0xea, 0x7f, 0xb9, 0x5a, 0x43, 0xfc, 0x01, 0x8e, |
| 4172 | 0x28, 0x47, 0x49, 0x90, 0xb5, 0x3b, 0x50, 0x1c, 0x73, 0x4a, 0xbc, 0x5f, | 4106 | 0xe7, 0x24, 0xd1, 0xac, 0x43, 0x4a, 0xac, 0x34, 0xf1, 0xc9, 0xf2, 0x48, |
| 4173 | 0xf5, 0xb3, 0x18, 0xf7, 0x10, 0x80, 0x43, 0xc4, 0xc3, 0xf7, 0x73, 0x21, | 4107 | 0xf4, 0x32, 0xc5, 0x2f, 0x3f, 0xe5, 0xaa, 0xdd, 0x85, 0x46, 0xfc, 0x2c, |
| 4174 | 0x6c, 0xa2, 0xba, 0x2b, 0x64, 0xd7, 0x18, 0xbf, 0x87, 0x53, 0x39, 0x87, | 4108 | 0xd7, 0x88, 0x57, 0x73, 0xa4, 0xc3, 0xd8, 0x48, 0xbf, 0x87, 0x62, 0xe4, |
| 4175 | 0xa0, 0xba, 0xc2, 0x91, 0x58, 0x6d, 0xe1, 0x4a, 0x5b, 0x24, 0xca, 0x7d, | 4109 | 0xd2, 0x98, 0x0b, 0x5b, 0x23, 0x86, 0xdf, 0x83, 0x28, 0xce, 0x25, 0xae, |
| 4176 | 0x68, 0x85, 0x72, 0xd6, 0xde, 0x7c, 0x1d, 0x7e, 0x96, 0xab, 0xc3, 0x2b, | 4110 | 0x47, 0x2a, 0x10, 0xee, 0x19, 0x41, 0x13, 0xde, 0xcc, 0x81, 0x30, 0x04, |
| 4177 | 0x39, 0x0b, 0x07, 0x63, 0x83, 0x3d, 0x5e, 0x8a, 0x95, 0xcb, 0x62, 0x2e, | 4111 | 0xdc, 0x4b, 0x68, 0x8e, 0xf7, 0x62, 0xc6, 0x90, 0x0b, 0x0a, 0xd5, 0x1f, |
| 4178 | 0xec, 0x88, 0x98, 0x8a, 0x17, 0x51, 0x5c, 0x48, 0x5c, 0x87, 0x54, 0x20, | 4112 | 0x88, 0xd7, 0xc3, 0xac, 0x39, 0x19, 0xa7, 0x1c, 0x5d, 0x6c, 0x44, 0x6f, |
| 4179 | 0xdc, 0x39, 0x88, 0x7a, 0xbc, 0x91, 0x03, 0x61, 0x09, 0x78, 0x96, 0xd2, | 4113 | 0xae, 0x09, 0xfd, 0x94, 0xab, 0x56, 0xaf, 0x8c, 0xe3, 0xdd, 0xac, 0x57, |
| 4180 | 0x1c, 0x6f, 0xc7, 0xcc, 0x7e, 0x17, 0xe1, 0xd8, 0x9f, 0x0b, 0xc4, 0x6b, | 4114 | 0xdc, 0x94, 0x1d, 0xe9, 0xf7, 0xd3, 0x9c, 0xae, 0xe5, 0xca, 0xd0, 0xb3, |
| 4181 | 0x60, 0xb9, 0xcf, 0xc4, 0x29, 0x57, 0x17, 0xea, 0xd0, 0x95, 0xab, 0x47, | 4115 | 0x04, 0xd8, 0x64, 0x84, 0xd9, 0xbc, 0xb7, 0xfb, 0x28, 0xde, 0x1e, 0x16, |
| 4182 | 0x0f, 0xe5, 0xac, 0x75, 0xab, 0xe3, 0x78, 0x2b, 0xeb, 0x13, 0x2b, 0xb3, | 4116 | 0x9f, 0xe1, 0x49, 0xb2, 0xc1, 0x2d, 0x9a, 0x52, 0xb9, 0x20, 0x45, 0x4e, |
| 4183 | 0x83, 0x3d, 0x0a, 0xcd, 0xe9, 0x6a, 0x53, 0xfb, 0x9f, 0x22, 0xe0, 0x26, | 4117 | 0xaf, 0x87, 0x32, 0x7c, 0x9b, 0x30, 0xa2, 0x0d, 0x14, 0x47, 0x9a, 0xed, |
| 4184 | 0x23, 0x4c, 0xe6, 0x8e, 0x07, 0xfc, 0x14, 0x77, 0x8f, 0x8b, 0x4f, 0xf1, | 4118 | 0x18, 0x61, 0x44, 0x84, 0x4c, 0x98, 0xdc, 0x09, 0xb7, 0x6a, 0xa0, 0xa7, |
| 4185 | 0x04, 0xd9, 0xe3, 0x3d, 0xba, 0x5a, 0xbe, 0xe4, 0x88, 0x9c, 0xdd, 0x08, | 4119 | 0x93, 0x65, 0xea, 0x86, 0xfb, 0x29, 0xb2, 0x1b, 0xc7, 0x17, 0xfb, 0xf3, |
| 4186 | 0x75, 0xe0, 0x16, 0x61, 0x46, 0x6b, 0x29, 0x9e, 0x34, 0x54, 0x62, 0x85, | 4120 | 0x8d, 0x78, 0x83, 0xf2, 0xe4, 0xeb, 0x39, 0xc8, 0xb5, 0x14, 0xfb, 0x3f, |
| 4187 | 0x19, 0x11, 0x32, 0x61, 0x73, 0x27, 0x3c, 0x9a, 0x89, 0xce, 0x76, 0x96, | 4121 | 0xa0, 0xd8, 0x7f, 0x2a, 0x36, 0x12, 0xe2, 0x98, 0x5f, 0x88, 0xe1, 0x5b, |
| 4188 | 0xa9, 0x07, 0x9e, 0xa3, 0x64, 0x47, 0xd2, 0x17, 0xfb, 0xfb, 0x75, 0x78, | 4122 | 0x04, 0x83, 0x5b, 0xbc, 0xb4, 0xe6, 0x26, 0xc1, 0xeb, 0x20, 0xb9, 0x58, |
| 4189 | 0x9d, 0xf2, 0xe5, 0xb9, 0x1c, 0xf7, 0xe6, 0xdd, 0xc6, 0xbb, 0x94, 0x03, | 4123 | 0xe7, 0xbe, 0x9a, 0xc5, 0x0f, 0xc5, 0x61, 0xe6, 0xe9, 0xff, 0x27, 0xed, |
| 4190 | 0x5e, 0x8a, 0x0d, 0x86, 0x38, 0xf6, 0xe7, 0x63, 0xf8, 0xe7, 0x64, 0x96, | 4124 | 0xdb, 0x6b, 0xe1, 0x69, 0x22, 0x5d, 0xce, 0xf7, 0x24, 0xaf, 0xed, 0x47, |
| 4191 | 0x8d, 0x3e, 0x5a, 0xf3, 0x2e, 0xc1, 0xeb, 0x20, 0xb9, 0xc4, 0xe0, 0xbe, | 4125 | 0x72, 0x1d, 0x63, 0xe3, 0xc2, 0x1a, 0xbd, 0x4e, 0xbc, 0x94, 0x63, 0x9b, |
| 4192 | 0x9c, 0xcd, 0x0f, 0xc5, 0x63, 0xe6, 0xe9, 0xff, 0x27, 0xed, 0x8f, 0x54, | 4126 | 0x33, 0xf1, 0xbc, 0xa6, 0x51, 0xcd, 0xc2, 0xb5, 0xf6, 0x10, 0xd5, 0x2d, |
| 4193 | 0xc1, 0x5b, 0x4f, 0xba, 0x9c, 0xef, 0x69, 0x5e, 0xdb, 0xcf, 0xe4, 0x7a, | 4127 | 0xdc, 0x27, 0x32, 0xdc, 0x27, 0x89, 0xc2, 0xbd, 0x39, 0xfc, 0x9e, 0x0c, |
| 4194 | 0xa6, 0x82, 0x0f, 0xdd, 0x46, 0xb5, 0x78, 0x21, 0xc7, 0x36, 0x67, 0xe1, | 4128 | 0x69, 0x59, 0x2d, 0xa6, 0x90, 0x77, 0x3a, 0x09, 0x6b, 0x70, 0x8c, 0x65, |
| 4195 | 0x19, 0x5d, 0xa7, 0xda, 0x85, 0x6b, 0xf2, 0x7e, 0xaa, 0x5f, 0xb8, 0xcf, | 4129 | 0x3f, 0x7a, 0xab, 0x4b, 0xcd, 0xc3, 0xf0, 0xea, 0x3d, 0x30, 0x2c, 0xdf, |
| 4196 | 0x64, 0x7a, 0xce, 0x10, 0x85, 0xfb, 0x73, 0x58, 0x2b, 0xc3, 0xb1, 0xa2, | 4130 | 0xad, 0x13, 0x0f, 0x90, 0x8d, 0xbc, 0x1c, 0xab, 0x45, 0x9e, 0xea, 0x1e, |
| 4197 | 0x0a, 0xe3, 0x98, 0x70, 0x3a, 0x09, 0x73, 0x70, 0xac, 0x65, 0x7f, 0x52, | 4131 | 0xc2, 0xdf, 0xee, 0x3f, 0xa3, 0xe7, 0x13, 0x13, 0xd8, 0x13, 0x84, 0xf4, |
| 4198 | 0x0c, 0x6d, 0x82, 0xeb, 0xcf, 0x4e, 0x98, 0xb6, 0x1f, 0x57, 0x8b, 0xfb, | 4132 | 0x5d, 0x3f, 0xfe, 0x02, 0x67, 0x5d, 0x8c, 0xcb, 0xe1, 0xee, 0x8b, 0x1b, |
| 4199 | 0xc9, 0x46, 0x5e, 0x8c, 0x55, 0x61, 0x82, 0xea, 0x1f, 0xc9, 0x30, 0x3d, | 4133 | 0x9e, 0xf5, 0xf1, 0x3a, 0x71, 0x7b, 0xae, 0x1d, 0x17, 0x27, 0x1b, 0xc9, |
| 4200 | 0xdf, 0xa5, 0xe7, 0x13, 0xa3, 0xd8, 0x17, 0x84, 0xe3, 0x4f, 0x14, 0xfc, | 4134 | 0xbe, 0x9b, 0xb0, 0x78, 0x3c, 0x88, 0xf7, 0x88, 0x96, 0x61, 0x8d, 0xb1, |
| 4201 | 0x19, 0xde, 0x74, 0xc9, 0x74, 0x1d, 0x9e, 0xee, 0xb8, 0xe9, 0xdd, 0x18, | 4135 | 0xba, 0x31, 0xdc, 0x0c, 0x65, 0x88, 0xea, 0xa1, 0xbe, 0x9f, 0x0b, 0xf6, |
| 4202 | 0xaf, 0x16, 0xb7, 0xe6, 0x5a, 0xf0, 0xfe, 0x58, 0x1d, 0xd9, 0x77, 0x3d, | 4136 | 0x01, 0xa5, 0xe7, 0x0e, 0xe1, 0x81, 0x1a, 0x49, 0x92, 0xec, 0x4d, 0x73, |
| 4203 | 0x96, 0x8c, 0x04, 0xf1, 0x36, 0xd1, 0x32, 0x40, 0xb4, 0x7c, 0xd2, 0x66, | 4137 | 0x4c, 0x6b, 0xd3, 0xbc, 0xe0, 0xfe, 0xcf, 0xdd, 0xd8, 0x3f, 0xc7, 0xb4, |
| 4204 | 0x0e, 0x34, 0x40, 0xed, 0xa7, 0xba, 0xa8, 0x9b, 0xfb, 0xcd, 0x4f, 0xeb, | 4138 | 0x9c, 0xea, 0xba, 0x61, 0x96, 0x3f, 0x4f, 0x77, 0x5d, 0x6f, 0x7d, 0xbe, |
| 4205 | 0x6a, 0xe7, 0x6d, 0xc2, 0x0b, 0x2d, 0x92, 0x24, 0xd9, 0x5b, 0xd6, 0xb0, | 4139 | 0x56, 0xfd, 0xac, 0x74, 0x85, 0xac, 0xcf, 0x1f, 0xd1, 0x27, 0xf7, 0x99, |
| 4206 | 0xde, 0xac, 0xfb, 0xc0, 0xfd, 0xa3, 0x3b, 0x70, 0x68, 0x86, 0x69, 0x71, | 4140 | 0xc3, 0x46, 0x8d, 0xf8, 0xbe, 0x8b, 0xfb, 0xcd, 0x49, 0xf0, 0xff, 0x71, |
| 4207 | 0x1b, 0xcb, 0xa7, 0xf9, 0x53, 0x36, 0xae, 0xb3, 0x3f, 0xbd, 0x73, 0x9f, | 4141 | 0x97, 0xdd, 0xaf, 0xbb, 0x1b, 0x86, 0xd5, 0x13, 0xf9, 0xb5, 0xd5, 0x8b, |
| 4208 | 0x30, 0x42, 0xf6, 0xe7, 0xa7, 0x6b, 0x42, 0xd3, 0xdc, 0xa7, 0x0e, 0x9b, | 4142 | 0x0e, 0x91, 0x1b, 0xc8, 0xc4, 0x9f, 0x4c, 0x58, 0x2b, 0x10, 0xa3, 0xc2, |
| 4209 | 0x6e, 0xf1, 0x53, 0x17, 0xf7, 0xab, 0x93, 0xe0, 0xff, 0x57, 0x5d, 0x95, | 4143 | 0xbc, 0x49, 0x36, 0x16, 0xeb, 0xfd, 0x54, 0x1b, 0xc8, 0xc4, 0xaf, 0x81, |
| 4210 | 0x7e, 0xdf, 0x1d, 0x30, 0xed, 0x1e, 0xca, 0x15, 0xbb, 0x97, 0x1d, 0x22, | 4144 | 0x3d, 0x9d, 0x02, 0xfb, 0x55, 0x1d, 0x3f, 0x2d, 0x70, 0x0c, 0x77, 0xe2, |
| 4211 | 0x37, 0x90, 0x89, 0x3f, 0x99, 0x30, 0x57, 0x20, 0x46, 0x05, 0x7c, 0xbd, | 4145 | 0x99, 0xb4, 0x12, 0x4a, 0x89, 0x30, 0xd5, 0xf9, 0x0e, 0x84, 0x9a, 0xfb, |
| 4212 | 0x6c, 0x2e, 0x31, 0x7a, 0xa8, 0x46, 0x90, 0x89, 0x5f, 0x13, 0xfb, 0xda, | 4146 | 0xb1, 0x9f, 0xf2, 0xc9, 0x6c, 0x9a, 0xf3, 0x07, 0x7d, 0x52, 0x3c, 0x6f, |
| 4213 | 0x05, 0x0e, 0x69, 0x06, 0x5e, 0xcb, 0x73, 0x2c, 0x77, 0xe2, 0xfb, 0x69, | 4147 | 0xa0, 0xf8, 0xf3, 0xf1, 0xa8, 0x1d, 0xef, 0x8b, 0x71, 0x65, 0xef, 0x1f, |
| 4214 | 0x35, 0x94, 0x12, 0xe1, 0xce, 0x5b, 0x84, 0x84, 0x50, 0x43, 0x0f, 0x0e, | 4148 | 0x90, 0x4e, 0x9f, 0x2b, 0xf2, 0x9c, 0x06, 0xae, 0xac, 0x64, 0x1f, 0x56, |
| 4215 | 0x51, 0x5e, 0x99, 0x4e, 0x73, 0x1e, 0x71, 0xda, 0xe7, 0x05, 0x6a, 0x29, | 4149 | 0xa2, 0x29, 0xc7, 0x7d, 0x08, 0xcd, 0x70, 0x6c, 0xa1, 0xe5, 0x68, 0xad, |
| 4216 | 0x0e, 0x7d, 0x38, 0x54, 0x89, 0xfb, 0x85, 0xb8, 0xba, 0xff, 0xf7, 0x48, | 4150 | 0x83, 0xd9, 0x1a, 0xf4, 0xc5, 0x7b, 0x45, 0x7f, 0xa9, 0x8f, 0xf7, 0x14, |
| 4217 | 0xa7, 0x4f, 0x17, 0x78, 0x4e, 0x13, 0x9f, 0xac, 0x66, 0x1f, 0x56, 0xa3, | 4151 | 0xfc, 0x0b, 0xf4, 0x3b, 0xc5, 0x9a, 0x69, 0xee, 0x09, 0x6e, 0x10, 0x7d, |
| 4218 | 0x29, 0xe9, 0x5e, 0x84, 0xa6, 0x38, 0xb6, 0xd0, 0x72, 0xb4, 0xd6, 0x91, | 4152 | 0x25, 0xee, 0x0b, 0x0e, 0x8b, 0x6f, 0x94, 0xd8, 0xe7, 0xe7, 0xfb, 0x83, |
| 4219 | 0xac, 0x1b, 0xdd, 0xf1, 0x2e, 0xd1, 0x53, 0xfc, 0x67, 0xbc, 0x27, 0xa1, | 4153 | 0xf3, 0xfa, 0xe7, 0xbe, 0xa0, 0xe1, 0x7e, 0x89, 0x64, 0xbf, 0x3d, 0xc7, |
| 4220 | 0x2c, 0x30, 0x36, 0x8b, 0xf5, 0x93, 0xdc, 0x53, 0xdc, 0x22, 0xba, 0x8b, | 4154 | 0x71, 0x58, 0x7a, 0xc0, 0x87, 0xe5, 0xc8, 0xbb, 0xe0, 0x3e, 0x11, 0xff, |
| 4221 | 0xdc, 0x57, 0x1c, 0x10, 0xbf, 0x5f, 0x64, 0x9f, 0x9f, 0xef, 0x2f, 0xce, | 4155 | 0x1d, 0xdc, 0x45, 0xb8, 0x60, 0xb1, 0x6a, 0xeb, 0x6f, 0x75, 0xde, 0x81, |
| 4222 | 0xeb, 0x9f, 0xfb, 0x8a, 0xa6, 0xe7, 0x05, 0x92, 0xfd, 0x03, 0x39, 0x8e, | 4156 | 0xc4, 0x72, 0x12, 0xfa, 0x02, 0xd6, 0xe9, 0x00, 0xc5, 0xb3, 0x8c, 0x39, |
| 4223 | 0xc9, 0x8e, 0xfb, 0xfd, 0x68, 0xc3, 0x84, 0x0b, 0x9e, 0xd3, 0xf1, 0xaf, | 4157 | 0x18, 0x60, 0x5d, 0xb2, 0xbd, 0x59, 0x7d, 0x27, 0xca, 0x2b, 0x06, 0x22, |
| 4224 | 0xe0, 0x76, 0xc2, 0x07, 0x4b, 0xb4, 0x8a, 0xfe, 0xd6, 0x4d, 0x48, 0x48, | 4158 | 0x9d, 0x6e, 0xcc, 0xe6, 0x16, 0x51, 0x4d, 0x60, 0x62, 0xaf, 0x56, 0x8f, |
| 4225 | 0xb4, 0x91, 0xd0, 0x17, 0xb0, 0x4e, 0x7b, 0x29, 0x9e, 0x65, 0xac, 0xbe, | 4159 | 0x5a, 0x2b, 0x06, 0xb8, 0x09, 0x47, 0x42, 0xf6, 0xd2, 0x3c, 0xe9, 0x31, |
| 4226 | 0x00, 0xeb, 0x92, 0xed, 0xcd, 0x2e, 0xf7, 0x28, 0x0e, 0x9b, 0x94, 0x57, | 4160 | 0x19, 0x1e, 0xba, 0x77, 0x92, 0x72, 0xd3, 0xfe, 0x4e, 0x7b, 0xee, 0xb6, |
| 4227 | 0x3c, 0x98, 0xce, 0x2d, 0xa2, 0xda, 0xc0, 0xc2, 0x7e, 0xbd, 0x06, 0x55, | 4161 | 0xfc, 0x4d, 0xd8, 0x47, 0x1e, 0x5f, 0xaf, 0x46, 0x31, 0xea, 0xf7, 0x52, |
| 4228 | 0x76, 0x0c, 0xf0, 0x10, 0x9e, 0x84, 0xec, 0xa3, 0x79, 0xd2, 0xc3, 0x32, | 4162 | 0xac, 0xf9, 0x56, 0x75, 0xce, 0xcf, 0xc8, 0x36, 0x79, 0xbd, 0x4d, 0xb5, |
| 4229 | 0xbc, 0x74, 0xef, 0x8c, 0x4e, 0x72, 0x69, 0xaf, 0xcc, 0xdd, 0x3c, 0xb1, | 4163 | 0xb6, 0x1e, 0x96, 0xc9, 0x76, 0xed, 0x25, 0x1b, 0x75, 0xb4, 0xd6, 0xd6, |
| 4230 | 0x12, 0x07, 0xc9, 0xe3, 0x6b, 0xb4, 0x28, 0x86, 0x14, 0x1f, 0xc5, 0x9a, | 4164 | 0xce, 0x0d, 0xe8, 0x19, 0xf5, 0x8a, 0x57, 0xd3, 0xf7, 0x98, 0xa1, 0x46, |
| 4231 | 0x3b, 0xe6, 0xe6, 0xf4, 0xd0, 0x60, 0x5e, 0xaf, 0xbf, 0xaa, 0xa2, 0x87, | 4165 | 0x1a, 0x47, 0x36, 0x5b, 0x53, 0xa5, 0xb7, 0x35, 0xff, 0xcf, 0xb5, 0x5c, |
| 4232 | 0x35, 0x72, 0xa5, 0x06, 0x93, 0xcd, 0x6a, 0x5a, 0x6b, 0x47, 0xfb, 0x16, | 4166 | 0xa7, 0x7b, 0x29, 0x8f, 0x3c, 0x98, 0x73, 0x20, 0x50, 0xbd, 0x1e, 0xcf, |
| 4233 | 0x74, 0x0e, 0xf9, 0xc4, 0x2b, 0xe9, 0xbb, 0xad, 0x50, 0x1d, 0x8d, 0x23, | 4167 | 0x87, 0xa0, 0x75, 0xd4, 0x01, 0x4d, 0x82, 0xae, 0xf1, 0xdc, 0xbc, 0x86, |
| 4234 | 0x9b, 0x75, 0xcf, 0xd1, 0xdb, 0x34, 0x21, 0xf3, 0x58, 0xee, 0x79, 0xe0, | 4168 | 0x8c, 0x46, 0xf2, 0x93, 0x6f, 0xc7, 0x13, 0xf8, 0x20, 0xeb, 0xc4, 0x7a, |
| 4235 | 0xc1, 0x9c, 0x84, 0xc0, 0xdc, 0xf5, 0xf8, 0x44, 0x08, 0x7a, 0x6b, 0x35, | 4169 | 0xca, 0xef, 0x6b, 0xd3, 0x3a, 0xce, 0x95, 0x6b, 0x79, 0x3d, 0xb2, 0xc3, |
| 4236 | 0x50, 0x2f, 0xe8, 0x1a, 0xcf, 0xcd, 0x6b, 0xc8, 0xa8, 0x23, 0x3f, 0xb9, | 4170 | 0xf9, 0x71, 0x4e, 0x1a, 0xe7, 0xc6, 0x74, 0xfe, 0x8b, 0xf4, 0x05, 0x88, |
| 4237 | 0x33, 0x9e, 0xc0, 0xbb, 0x59, 0x27, 0x36, 0x52, 0x9e, 0xbf, 0x31, 0x6d, | 4171 | 0xe6, 0x22, 0x8d, 0xe5, 0x7b, 0xe7, 0xad, 0xbe, 0xc0, 0xf1, 0x6b, 0xea, |
| 4238 | 0xe0, 0x42, 0x29, 0x60, 0xcf, 0x21, 0x19, 0xf3, 0xe3, 0x9c, 0x34, 0xce, | 4172 | 0x29, 0xc7, 0x38, 0xf7, 0x8a, 0xec, 0x5c, 0xd0, 0xad, 0xb1, 0x2e, 0x7d, |
| 4239 | 0x83, 0xc9, 0x89, 0x2f, 0xd2, 0x17, 0x20, 0x9a, 0x7f, 0x42, 0xdf, 0xf9, | 4173 | 0xb8, 0x3c, 0x61, 0xe0, 0xdc, 0xca, 0x06, 0x5c, 0x99, 0x68, 0xc5, 0x03, |
| 4240 | 0xde, 0x45, 0xbb, 0x3f, 0x70, 0xea, 0x9a, 0xba, 0x4a, 0x1a, 0xe1, 0x9e, | 4174 | 0x39, 0x0f, 0x2e, 0x4c, 0x98, 0xb8, 0x69, 0x39, 0xee, 0x09, 0x12, 0x06, |
| 4241 | 0x52, 0x25, 0x17, 0x74, 0xe8, 0xac, 0x4b, 0x3f, 0x66, 0x47, 0x4d, 0x5c, | 4175 | 0x6b, 0x20, 0xbf, 0xff, 0x29, 0xd5, 0x3c, 0x14, 0x4f, 0x89, 0xd2, 0x48, |
| 4242 | 0x58, 0x5d, 0x8b, 0x4f, 0x46, 0x9b, 0x70, 0x7f, 0xce, 0x8b, 0x4b, 0xa3, | 4176 | 0x62, 0x1d, 0xd9, 0x75, 0x34, 0x86, 0xd4, 0x2d, 0xf1, 0x48, 0xe8, 0x3c, |
| 4243 | 0x16, 0x56, 0xb6, 0xe1, 0xee, 0x20, 0x61, 0xb1, 0x5a, 0xf2, 0xfb, 0xd7, | 4177 | 0xbe, 0x67, 0x52, 0x2c, 0xf6, 0x4b, 0x7a, 0xaf, 0x70, 0x5a, 0xfb, 0x84, |
| 4244 | 0xa8, 0xf6, 0xa1, 0x78, 0x4a, 0x94, 0x46, 0x12, 0x1b, 0xc8, 0xae, 0xa3, | 4178 | 0x1b, 0xac, 0x7d, 0x45, 0xc7, 0xf4, 0xb0, 0x90, 0x4a, 0xd7, 0xfa, 0xf5, |
| 4245 | 0x31, 0xa4, 0x6e, 0x8a, 0x47, 0x42, 0x17, 0xf1, 0x3d, 0x8b, 0x62, 0xb1, | 4179 | 0x97, 0xe5, 0x21, 0xce, 0x3d, 0x9c, 0x23, 0xc7, 0x4d, 0x97, 0xba, 0xc1, |
| 4246 | 0xe2, 0x30, 0xba, 0x84, 0xd3, 0xde, 0x67, 0xdc, 0x62, 0xef, 0x4b, 0x4a, | 4180 | 0xea, 0xd3, 0xec, 0xce, 0x5f, 0xcd, 0x4d, 0x57, 0xf3, 0xd1, 0xce, 0x6a, |
| 4247 | 0x93, 0x03, 0xc2, 0x51, 0xbc, 0xd6, 0xaf, 0xbf, 0x2c, 0x0f, 0x71, 0xee, | 4181 | 0x1e, 0x1a, 0x29, 0xbc, 0xf3, 0x05, 0xfc, 0x14, 0xaa, 0xee, 0x57, 0x70, |
| 4248 | 0xe1, 0x1e, 0xc6, 0x88, 0xe5, 0xd2, 0xb8, 0x57, 0xb3, 0x59, 0xec, 0x9d, | 4182 | 0xfe, 0x71, 0x8b, 0xb3, 0x64, 0x0e, 0x7b, 0xc8, 0x07, 0x8f, 0x6a, 0x27, |
| 4249 | 0xb8, 0x9a, 0x9b, 0xae, 0xe6, 0xa3, 0xdd, 0x73, 0x79, 0x68, 0x30, 0xff, | 4183 | 0x82, 0x94, 0x21, 0xe0, 0xec, 0x10, 0x78, 0x90, 0xcf, 0x8b, 0x04, 0x4c, |
| 4250 | 0x8b, 0x2f, 0xe0, 0xa8, 0xd0, 0xdc, 0x7e, 0x07, 0xe7, 0x1f, 0x8f, 0x78, | 4184 | 0xdc, 0xa9, 0xd9, 0xf6, 0xb0, 0xbc, 0xd3, 0x85, 0x41, 0xca, 0x49, 0xae, |
| 4251 | 0x93, 0xcc, 0x61, 0x1f, 0xf9, 0xe0, 0x49, 0xfd, 0x74, 0x90, 0x32, 0x04, | 4185 | 0x98, 0x97, 0x7c, 0xdd, 0x8f, 0xd7, 0x34, 0xb6, 0xe1, 0x5b, 0xaa, 0x39, |
| 4252 | 0x9c, 0xad, 0x02, 0x0f, 0xf2, 0x59, 0x93, 0x80, 0x85, 0xcd, 0x7a, 0xc5, | 4186 | 0x89, 0xf7, 0xbf, 0xed, 0xbd, 0xea, 0xdf, 0xee, 0x5b, 0xcf, 0xdb, 0xa6, |
| 4253 | 0x1e, 0xda, 0xda, 0x5d, 0xe8, 0xa3, 0x9c, 0xe4, 0x8a, 0xf9, 0xc8, 0xd7, | 4187 | 0x86, 0xe4, 0x42, 0x78, 0xde, 0x8b, 0xab, 0x54, 0x37, 0xc8, 0x54, 0x33, |
| 4254 | 0x15, 0xbc, 0xaa, 0xb3, 0x0d, 0x6f, 0x9e, 0xcb, 0x49, 0xbc, 0x7f, 0x5e, | 4188 | 0xac, 0x47, 0x62, 0x81, 0x92, 0x64, 0xfd, 0xfb, 0x68, 0xee, 0x5f, 0x76, |
| 4255 | 0xd9, 0xeb, 0xfe, 0x7c, 0xdf, 0x7b, 0xde, 0x36, 0x75, 0x24, 0x17, 0xc2, | 4189 | 0x0e, 0xe2, 0xfe, 0x71, 0x07, 0xea, 0x54, 0x8e, 0xb3, 0x06, 0xf6, 0x37, |
| 4256 | 0xfb, 0x76, 0x5c, 0xa3, 0xfa, 0x41, 0xa6, 0xda, 0x61, 0x23, 0x12, 0x0b, | 4190 | 0x72, 0x9c, 0xea, 0xc5, 0x8e, 0x71, 0xb7, 0x38, 0x99, 0x73, 0xe2, 0xc9, |
| 4257 | 0x54, 0x6e, 0x6d, 0x10, 0xf6, 0x36, 0xf1, 0xef, 0xdb, 0xfb, 0x70, 0xdf, | 4191 | 0xbe, 0x47, 0xb0, 0xa0, 0x63, 0x4b, 0xb5, 0xd7, 0xc9, 0xdf, 0xbf, 0x89, |
| 4258 | 0x88, 0x84, 0x6a, 0x8d, 0xe3, 0xac, 0x89, 0x43, 0x75, 0x1c, 0xa7, 0xba, | 4192 | 0xd4, 0x22, 0x5e, 0x9f, 0x7b, 0x68, 0x02, 0xde, 0x0e, 0xe6, 0x03, 0x9e, |
| 4259 | 0xb0, 0x6b, 0xc4, 0x23, 0xce, 0xe4, 0x9c, 0x78, 0xa2, 0xfb, 0x11, 0x2c, | 4193 | 0x8b, 0x34, 0xff, 0xe6, 0x51, 0xa7, 0x38, 0x9f, 0xfe, 0x1b, 0xf3, 0x48, |
| 4260 | 0x68, 0xbd, 0x07, 0xb0, 0x6d, 0x90, 0xbf, 0x7f, 0x0b, 0xa9, 0x45, 0xbc, | 4194 | 0x80, 0x71, 0x01, 0xdf, 0xab, 0x87, 0xd1, 0xc8, 0x63, 0x59, 0x87, 0x5e, |
| 4261 | 0x3e, 0xf7, 0xda, 0x04, 0x7c, 0xad, 0xcc, 0x07, 0xbc, 0xef, 0xd3, 0xfc, | 4195 | 0xaa, 0x49, 0x07, 0x31, 0x4a, 0x74, 0xbd, 0x6e, 0xcd, 0x75, 0xb6, 0x4a, |
| 4262 | 0xdb, 0x86, 0x9c, 0xe2, 0x62, 0xfa, 0x3f, 0x5b, 0x27, 0x02, 0x8c, 0x13, | 4196 | 0xbf, 0x57, 0x34, 0x64, 0x64, 0x23, 0x48, 0xb4, 0xf8, 0x57, 0xf6, 0xa1, |
| 4263 | 0xf8, 0x5e, 0x0d, 0xcc, 0x3a, 0x1e, 0xcb, 0x3a, 0xf4, 0x51, 0x6d, 0xda, | 4197 | 0xa1, 0x74, 0x6d, 0xbe, 0x25, 0xa3, 0xf7, 0x30, 0x7f, 0x9c, 0x13, 0x06, |
| 4264 | 0x87, 0x21, 0xa2, 0xeb, 0x9c, 0x3d, 0xd7, 0x95, 0x39, 0xfa, 0x7d, 0xa2, | 4198 | 0xf0, 0x41, 0x5a, 0xe0, 0x7d, 0xcb, 0x06, 0x07, 0xd0, 0x5a, 0xa0, 0xfa, |
| 4265 | 0x36, 0x23, 0x9b, 0x41, 0xa2, 0x45, 0x59, 0xdd, 0x8d, 0xda, 0xe2, 0xb5, | 4199 | 0xdf, 0x8a, 0x21, 0x3c, 0x2e, 0x6e, 0xdb, 0xb6, 0x63, 0x10, 0xdb, 0x89, |
| 4266 | 0xf9, 0xb6, 0xc6, 0xc3, 0xfd, 0x4a, 0xd2, 0x15, 0xe5, 0x84, 0x5e, 0xbc, | 4200 | 0x97, 0x7a, 0xe2, 0xe5, 0xe3, 0xd8, 0x12, 0x5a, 0x87, 0xaf, 0x1d, 0x93, |
| 4267 | 0x9b, 0x16, 0x78, 0xc7, 0xb6, 0xc1, 0x5e, 0x34, 0xe5, 0x6b, 0x00, 0x3b, | 4201 | 0xab, 0xfd, 0x87, 0xea, 0x5c, 0xab, 0xc0, 0xbd, 0x29, 0xa7, 0x1a, 0xc1, |
| 4268 | 0x86, 0xf0, 0xb8, 0xaf, 0x57, 0x6c, 0x5b, 0xea, 0xc3, 0x03, 0xc4, 0x4b, | 4202 | 0xb6, 0xf1, 0x48, 0xbf, 0xd7, 0xc1, 0x76, 0x18, 0xc1, 0x7d, 0xd3, 0x49, |
| 4269 | 0x0d, 0xf1, 0xf2, 0x61, 0x6c, 0x29, 0xad, 0xc3, 0xd7, 0xfe, 0x9d, 0x3c, | 4203 | 0xba, 0xcf, 0x73, 0x05, 0xb1, 0x29, 0xe3, 0x14, 0xef, 0x52, 0x9d, 0x74, |
| 4270 | 0x77, 0xd6, 0x68, 0x6e, 0x2e, 0x4a, 0x18, 0x7e, 0xae, 0xf7, 0x22, 0xd8, | 4204 | 0x3c, 0xed, 0x58, 0x24, 0xe1, 0x07, 0xe6, 0x93, 0x81, 0x1d, 0xb8, 0x45, |
| 4271 | 0x39, 0x12, 0xe9, 0xf1, 0x49, 0x6c, 0x87, 0x11, 0xdc, 0x3b, 0x79, 0x2b, | 4205 | 0xeb, 0xc5, 0xbd, 0x64, 0x83, 0xdd, 0xad, 0x3b, 0x30, 0x41, 0x36, 0xb0, |
| 4272 | 0xdd, 0xe7, 0xb9, 0x82, 0xb8, 0x2b, 0xe3, 0x14, 0x6f, 0x51, 0xbd, 0x74, | 4206 | 0xb9, 0x89, 0x6a, 0xb7, 0x58, 0xd9, 0x1c, 0x08, 0xb0, 0x1c, 0x05, 0x7a, |
| 4273 | 0x2a, 0x2d, 0x2d, 0x72, 0xe0, 0x39, 0xeb, 0x89, 0xc0, 0x2e, 0xdc, 0xa4, | 4207 | 0xe8, 0x7a, 0x23, 0xd5, 0x73, 0x8e, 0x18, 0x59, 0x1b, 0xf9, 0x85, 0xac, |
| 4274 | 0x77, 0x61, 0x3b, 0xd9, 0x60, 0x47, 0xd3, 0x2e, 0x8c, 0x92, 0x0d, 0x6c, | 4208 | 0x2a, 0xb9, 0x24, 0xea, 0xad, 0x35, 0x1b, 0x29, 0x4f, 0xbb, 0x18, 0x1f, |
| 4275 | 0xab, 0xa7, 0x1a, 0x2e, 0x56, 0xb2, 0x7a, 0x03, 0x2c, 0x47, 0x81, 0x4e, | 4209 | 0xf8, 0x18, 0x27, 0x7c, 0x91, 0x1e, 0xc3, 0xac, 0x55, 0xd5, 0xe8, 0x7a, |
| 4276 | 0xba, 0x5e, 0x47, 0x75, 0x9d, 0x14, 0x23, 0x6b, 0x23, 0xbf, 0x90, 0x35, | 4210 | 0x47, 0x6b, 0x6e, 0x8e, 0x6c, 0x76, 0x4d, 0xc7, 0xb5, 0xcf, 0xcd, 0xcb, |
| 4277 | 0x35, 0x97, 0xc4, 0xef, 0xd8, 0x6b, 0xd6, 0x51, 0x9e, 0x76, 0x31, 0x3e, | 4211 | 0x48, 0x43, 0x4d, 0xc7, 0x8c, 0x59, 0xf1, 0x8f, 0xc0, 0xdf, 0x71, 0xad, |
| 4278 | 0xf0, 0x33, 0x4e, 0xf8, 0x22, 0x3d, 0xa6, 0x55, 0xa5, 0x69, 0xd1, 0x8d, | 4212 | 0xee, 0xe7, 0xe7, 0x60, 0x9a, 0xed, 0xb8, 0x16, 0x72, 0x44, 0xfc, 0xf7, |
| 4279 | 0x52, 0x53, 0x6e, 0x86, 0x6c, 0x76, 0x7d, 0xeb, 0xb5, 0xcf, 0xcd, 0xcb, | 4213 | 0xe0, 0xaf, 0x68, 0x8d, 0x20, 0x36, 0x96, 0x7a, 0x31, 0x30, 0x2e, 0x7d, |
| 4280 | 0x48, 0x87, 0xbb, 0x75, 0xca, 0x2a, 0x2b, 0x83, 0x50, 0x5a, 0xaf, 0xd5, | 4214 | 0x8e, 0x4f, 0x7c, 0x6c, 0xcb, 0x9f, 0xf3, 0xbf, 0x75, 0x3c, 0xd2, 0xe3, |
| 4281 | 0xfd, 0xfc, 0x1c, 0x4c, 0x73, 0x25, 0xae, 0x85, 0xa4, 0x88, 0x72, 0x37, | 4215 | 0xa9, 0xf2, 0x7f, 0xef, 0xf4, 0xe7, 0x73, 0x0d, 0x67, 0x38, 0xaf, 0xf2, |
| 4282 | 0x2e, 0xd0, 0x1a, 0x41, 0x6c, 0x2d, 0x76, 0xa1, 0x77, 0xc4, 0xf1, 0x19, | 4216 | 0x7c, 0xbc, 0xef, 0x37, 0x2f, 0xdf, 0x20, 0xb6, 0x5b, 0xf3, 0xed, 0x75, |
| 4283 | 0x3e, 0xf1, 0xb3, 0x2d, 0x7f, 0xc6, 0xff, 0x8e, 0x91, 0x48, 0xa7, 0x77, | 4217 | 0xb3, 0x0f, 0xbb, 0xc8, 0xd7, 0xd7, 0x75, 0x18, 0x78, 0x2d, 0xf1, 0x80, |
| 4284 | 0x8e, 0xff, 0xed, 0x93, 0x9f, 0xcd, 0x35, 0x90, 0xe1, 0xbc, 0xca, 0xf3, | 4218 | 0xb9, 0xd5, 0x92, 0xc1, 0x9f, 0x58, 0xcf, 0xf7, 0xb4, 0x56, 0x2c, 0x7b, |
| 4285 | 0xf1, 0xb9, 0xa1, 0x79, 0xf9, 0x06, 0xf1, 0x80, 0x3d, 0xdf, 0x61, 0x0f, | 4219 | 0xb7, 0xfd, 0x96, 0xf7, 0x04, 0x78, 0x8f, 0x60, 0x7e, 0x5f, 0x20, 0x6a, |
| 4286 | 0xfb, 0xb0, 0x8b, 0x7c, 0x7d, 0x43, 0xab, 0x89, 0x57, 0x13, 0xf7, 0x5b, | 4220 | 0xed, 0xd7, 0xd9, 0x7b, 0x03, 0xdf, 0xa2, 0x38, 0xcb, 0xfb, 0x06, 0xb2, |
| 4287 | 0x3b, 0x6c, 0x19, 0xdc, 0x6f, 0x3f, 0xdf, 0xd9, 0x74, 0x76, 0x0e, 0xfb, | 4221 | 0x70, 0x8e, 0xd7, 0x09, 0xd7, 0x38, 0xd3, 0xf6, 0x81, 0x6c, 0xfb, 0xd8, |
| 4288 | 0x54, 0xfa, 0xb0, 0xa7, 0x4a, 0x2d, 0xf6, 0x1e, 0xc3, 0x0f, 0x29, 0x0f, | 4222 | 0x5f, 0x21, 0x19, 0xe0, 0xfe, 0xa4, 0x6d, 0xff, 0xd1, 0xce, 0xfb, 0x80, |
| 4289 | 0x3e, 0xf7, 0xb9, 0x3e, 0xdf, 0x76, 0x17, 0xef, 0x4d, 0x3c, 0x5d, 0x92, | 4223 | 0xa7, 0x0c, 0x77, 0xed, 0x0a, 0x50, 0x8d, 0xdf, 0x67, 0xd9, 0xc3, 0x75, |
| 4290 | 0x85, 0x73, 0xa4, 0x5a, 0xb8, 0x46, 0x98, 0xb6, 0x8f, 0xe5, 0x8a, 0x8f, | 4224 | 0xfa, 0xdb, 0xab, 0xfe, 0xb1, 0x95, 0xeb, 0x7c, 0xee, 0x09, 0xbe, 0xbb, |
| 4291 | 0xfd, 0x57, 0x24, 0x03, 0xbc, 0xcf, 0x58, 0xb1, 0xff, 0x68, 0xfb, 0xbd, | 4225 | 0x6a, 0xb2, 0x55, 0x22, 0x3c, 0xc5, 0x6b, 0xf2, 0xde, 0x02, 0xe7, 0x55, |
| 4292 | 0xc0, 0x51, 0xd3, 0x53, 0xb5, 0x0a, 0x54, 0xeb, 0x77, 0xdb, 0xf6, 0xb0, | 4226 | 0x2b, 0xee, 0x7a, 0x1a, 0x57, 0x18, 0xee, 0x05, 0x2b, 0x9c, 0x62, 0x51, |
| 4293 | 0xd0, 0x08, 0xac, 0x7d, 0xae, 0x89, 0xeb, 0x7d, 0xee, 0x0d, 0x6a, 0x6b, | 4227 | 0xa6, 0x9f, 0x6c, 0x4f, 0x45, 0x22, 0x63, 0x78, 0x9a, 0x57, 0x84, 0xf0, |
| 4294 | 0xc7, 0x08, 0x80, 0x6e, 0x55, 0x78, 0x4d, 0xf5, 0x04, 0xf7, 0xeb, 0xb9, | 4228 | 0x50, 0x66, 0x3e, 0x26, 0xb7, 0xa3, 0x7d, 0x0a, 0xf8, 0xdf, 0x99, 0x20, |
| 4295 | 0x8f, 0x4f, 0x71, 0xd7, 0x5b, 0xb7, 0xca, 0xf4, 0x2c, 0x58, 0xe5, 0x14, | 4229 | 0xda, 0x26, 0xc2, 0x43, 0xb7, 0x3b, 0xc2, 0xc3, 0xef, 0x38, 0xf8, 0x5e, |
| 4296 | 0x8b, 0x33, 0x3d, 0x64, 0x7b, 0x1a, 0x12, 0x19, 0xd3, 0xdb, 0xb0, 0x2a, | 4230 | 0xa1, 0xeb, 0x26, 0x0b, 0x7f, 0x1f, 0xed, 0x5a, 0x66, 0x7d, 0xbe, 0xdd, |
| 4297 | 0x84, 0x87, 0x32, 0xf3, 0x31, 0xb9, 0x05, 0x2d, 0xe3, 0xc0, 0x0f, 0x33, | 4231 | 0x75, 0x63, 0xe1, 0x6e, 0xa4, 0xe7, 0xdc, 0x97, 0xf3, 0x0e, 0x13, 0x0f, |
| 4298 | 0x41, 0x34, 0x8f, 0x86, 0xfb, 0x6f, 0x95, 0xc2, 0x03, 0xb3, 0x12, 0xdf, | 4232 | 0xc5, 0x1c, 0xf8, 0x9a, 0xf6, 0xd7, 0xe4, 0x5b, 0x82, 0x6c, 0xe3, 0x18, |
| 4299 | 0xbb, 0xbc, 0x66, 0xa5, 0x8d, 0xc5, 0x3f, 0x5a, 0xb3, 0xc2, 0xfe, 0x0c, | 4233 | 0xe7, 0x60, 0x4b, 0xa7, 0xae, 0x15, 0x2a, 0xda, 0x32, 0x8d, 0x84, 0xd7, |
| 4300 | 0x18, 0xd7, 0xe7, 0xef, 0x40, 0x7a, 0xc6, 0x33, 0x5b, 0x96, 0x2c, 0x3c, | 4234 | 0x9a, 0xa8, 0xe6, 0x6f, 0xc4, 0x0f, 0x73, 0x8c, 0xd7, 0x4c, 0x8a, 0xfb, |
| 4301 | 0x14, 0x93, 0x70, 0xb3, 0xfe, 0x6f, 0xc9, 0xb7, 0x04, 0xd9, 0xc6, 0xab, | 4235 | 0x26, 0x5e, 0xef, 0x30, 0x86, 0x82, 0x50, 0x8c, 0x37, 0x85, 0x92, 0xba, |
| 4302 | 0x9c, 0x83, 0xed, 0x60, 0xb6, 0x64, 0x95, 0x86, 0x55, 0x99, 0x3a, 0x8a, | 4236 | 0xdd, 0xa1, 0x1c, 0x69, 0x72, 0xf8, 0xb1, 0x2f, 0x62, 0xe7, 0xd1, 0x4e, |
| 4303 | 0x49, 0xf5, 0x14, 0x9f, 0xea, 0x70, 0x85, 0x62, 0xd2, 0x8a, 0x36, 0x0b, | 4237 | 0x2b, 0x6f, 0xbe, 0xd3, 0x65, 0xf7, 0xec, 0x4e, 0x56, 0xf3, 0xeb, 0xa9, |
| 4304 | 0x8b, 0xdb, 0xcc, 0xbe, 0xc5, 0xe0, 0x3d, 0x68, 0xd5, 0x2c, 0x0a, 0xb5, | 4238 | 0x2e, 0x6d, 0x56, 0x39, 0x9a, 0x22, 0xff, 0x59, 0x48, 0xf1, 0x73, 0x3c, |
| 4305 | 0xa7, 0x4b, 0x52, 0xbb, 0xeb, 0x25, 0x05, 0xdb, 0x23, 0x3c, 0x77, 0xd0, | 4239 | 0x9b, 0xb2, 0xce, 0x82, 0xfc, 0x32, 0x53, 0x43, 0xb6, 0x11, 0xd6, 0xc6, |
| 4306 | 0x58, 0x95, 0xaf, 0xe4, 0xd3, 0x4a, 0x5e, 0x75, 0xce, 0xe5, 0x53, 0xb7, | 4240 | 0x11, 0x8e, 0x3e, 0x64, 0xd1, 0xfa, 0xb3, 0xae, 0x58, 0xa1, 0x8c, 0x8a, |
| 4307 | 0xa1, 0x4f, 0xab, 0x3f, 0x4e, 0x49, 0xbc, 0x6f, 0xd2, 0x83, 0x91, 0x6c, | 4241 | 0x53, 0x39, 0x08, 0x14, 0x09, 0x37, 0xb4, 0xf9, 0x5f, 0x46, 0x99, 0xfb, |
| 4308 | 0x0a, 0x7b, 0xb3, 0x21, 0xfc, 0x3a, 0xe3, 0x26, 0xdb, 0x08, 0xeb, 0x3f, | 4242 | 0xa1, 0x56, 0xa0, 0x67, 0x1e, 0x5a, 0x0b, 0x40, 0x2e, 0xe3, 0xbe, 0x0c, |
| 4309 | 0x00, 0x8f, 0xf1, 0x19, 0xb1, 0x7c, 0x38, 0xfa, 0x90, 0xf4, 0x13, 0x94, | 4243 | 0xab, 0x17, 0xeb, 0xc0, 0x5a, 0x6d, 0x3b, 0xe1, 0x42, 0xde, 0xff, 0x15, |
| 4310 | 0x9d, 0xea, 0x11, 0xaa, 0x12, 0x08, 0x37, 0x34, 0x87, 0x5e, 0xc4, 0x4f, | 4244 | 0x54, 0x63, 0x37, 0xa2, 0xb2, 0xc1, 0x89, 0xf1, 0x0c, 0xe7, 0xe1, 0x63, |
| 4311 | 0xec, 0x7d, 0x36, 0xa0, 0xc2, 0x43, 0x53, 0x1e, 0xc8, 0x65, 0x3c, 0xb3, | 4245 | 0x5d, 0xf2, 0x28, 0x2a, 0x6e, 0x7b, 0x4f, 0x33, 0xe1, 0xa6, 0x0c, 0x3d, |
| 4312 | 0xb0, 0x7b, 0xb2, 0xbc, 0x6f, 0x2c, 0x61, 0xbd, 0x7e, 0x3f, 0xc9, 0x59, | 4246 | 0x57, 0x22, 0x4c, 0x4a, 0xb1, 0x63, 0x6b, 0xec, 0x37, 0x66, 0xb2, 0xd1, |
| 4313 | 0xa0, 0xa9, 0xb5, 0x0e, 0xe5, 0x2d, 0x4e, 0x8c, 0x64, 0x38, 0x0f, 0x7f, | 4247 | 0xde, 0x53, 0x19, 0x9d, 0x14, 0x58, 0xa0, 0x26, 0x31, 0x3a, 0xe7, 0xf4, |
| 4314 | 0xbc, 0x46, 0x1e, 0x42, 0x79, 0x6e, 0x4f, 0x34, 0xe1, 0xa0, 0x0c, 0xfd, | 4248 | 0xa5, 0xd3, 0x51, 0xa4, 0xcb, 0xfc, 0xbc, 0xfb, 0x72, 0xd2, 0x9a, 0x3f, |
| 4315 | 0x72, 0x11, 0x38, 0x48, 0xb1, 0x63, 0x53, 0xec, 0x37, 0x56, 0x05, 0x8f, | 4249 | 0xb2, 0x77, 0x89, 0xc3, 0x81, 0x65, 0x1d, 0x87, 0x50, 0x59, 0x68, 0xd3, |
| 4316 | 0xca, 0xfe, 0xf4, 0x98, 0xc0, 0x02, 0x2d, 0x49, 0xf2, 0x70, 0xfa, 0x0f, | 4250 | 0x10, 0x24, 0x4c, 0xc0, 0x35, 0x6c, 0x13, 0xf1, 0x7a, 0xe7, 0xe3, 0x5c, |
| 4317 | 0xa5, 0xa3, 0x76, 0x0e, 0x1e, 0xa1, 0xf9, 0x93, 0xf6, 0xfc, 0x91, 0xfd, | 4251 | 0x47, 0xfc, 0xa4, 0xeb, 0xe6, 0x29, 0xf6, 0xeb, 0x63, 0x5d, 0x1f, 0xa4, |
| 4318 | 0x4b, 0x25, 0x09, 0xd7, 0xb7, 0x1e, 0xc5, 0xc4, 0xc2, 0x0a, 0x0d, 0x41, | 4252 | 0x95, 0x64, 0x93, 0x04, 0xb9, 0x8e, 0xf8, 0xbf, 0x6f, 0x94, 0xfb, 0x08, |
| 4319 | 0xc2, 0x04, 0x5c, 0xcb, 0xd6, 0x13, 0x8f, 0x9b, 0x1f, 0xe3, 0xbe, 0xe6, | 4253 | 0xbf, 0xe0, 0x3e, 0x02, 0xe5, 0x65, 0x65, 0xb8, 0x59, 0x78, 0xc5, 0xba, |
| 4320 | 0x6f, 0xd7, 0xdc, 0x30, 0xce, 0x7e, 0xfd, 0xf1, 0x9a, 0x77, 0xd3, 0x6a, | 4254 | 0x0c, 0xd5, 0x15, 0x44, 0xf3, 0xa5, 0x88, 0xd2, 0x53, 0x22, 0x8c, 0xb2, |
| 4321 | 0xb2, 0x9e, 0xea, 0x87, 0x6a, 0x92, 0xc3, 0xbd, 0x43, 0xdc, 0x4f, 0xa8, | 4255 | 0x45, 0x50, 0x5d, 0x57, 0xb6, 0xe5, 0x65, 0x9f, 0xcd, 0xab, 0x5c, 0xc5, |
| 4322 | 0x37, 0x5e, 0x3f, 0xcc, 0x79, 0x59, 0x1d, 0x68, 0x10, 0x3e, 0x71, 0x73, | 4256 | 0x21, 0x51, 0x0b, 0x77, 0xf0, 0x3e, 0x34, 0xe7, 0x71, 0x6b, 0x4f, 0x9f, |
| 4323 | 0x46, 0xed, 0x63, 0xc2, 0x2f, 0x47, 0xd4, 0x20, 0xc9, 0xae, 0xf3, 0x1e, | 4257 | 0xae, 0xff, 0xbc, 0x6b, 0x09, 0xd5, 0x16, 0x23, 0x4c, 0x1f, 0x78, 0xaf, |
| 4324 | 0xd1, 0xc7, 0x35, 0x8b, 0x2d, 0xb7, 0xeb, 0xf2, 0x15, 0xdc, 0x11, 0x9e, | 4258 | 0x8f, 0x6a, 0xd0, 0xec, 0xf1, 0x2a, 0x2e, 0xf1, 0x56, 0xe5, 0xc2, 0xdf, |
| 4325 | 0xc3, 0x21, 0x51, 0x1b, 0x77, 0x58, 0xd6, 0x9e, 0x18, 0xe7, 0x71, 0xfb, | 4259 | 0xf9, 0x4c, 0xe2, 0x6b, 0x5d, 0x9b, 0x26, 0xf9, 0x8c, 0xe2, 0x4f, 0xba, |
| 4326 | 0x4c, 0x00, 0x5d, 0xaf, 0x33, 0x96, 0x52, 0x6d, 0x31, 0xc8, 0xf4, 0xf1, | 4260 | 0xd6, 0x4c, 0x2a, 0xa1, 0x8d, 0xb4, 0xee, 0x6e, 0xde, 0x5f, 0xa7, 0x39, |
| 4327 | 0x19, 0x0f, 0x89, 0x6a, 0xd1, 0xec, 0xab, 0x73, 0xb8, 0xc4, 0x87, 0x7d, | 4261 | 0x67, 0x35, 0xa6, 0xbb, 0xd0, 0x75, 0x73, 0x96, 0x7b, 0xcb, 0xc7, 0xba, |
| 4328 | 0x74, 0xbd, 0x6c, 0xe3, 0x13, 0x3e, 0xa7, 0xe8, 0x35, 0x94, 0xc7, 0xf8, | 4262 | 0xcc, 0x6c, 0x98, 0x31, 0xa8, 0x65, 0x2b, 0x89, 0x02, 0x55, 0xf3, 0xd7, |
| 4329 | 0x6c, 0xe3, 0x6f, 0xd7, 0xac, 0x1f, 0x53, 0x43, 0x12, 0xf1, 0xb1, 0x97, | 4263 | 0xd9, 0xbc, 0xba, 0x48, 0x1f, 0x87, 0xd2, 0x84, 0x76, 0xe2, 0xb6, 0x6e, |
| 4330 | 0xf7, 0xe7, 0x69, 0xce, 0x69, 0x9d, 0xe9, 0xbe, 0xbc, 0x86, 0xfb, 0xb1, | 4264 | 0x56, 0x17, 0xd6, 0x20, 0xd5, 0xd4, 0x4d, 0x35, 0xa8, 0xdf, 0xb7, 0x36, |
| 4331 | 0x4b, 0x88, 0x6e, 0x2b, 0x1b, 0x66, 0x0c, 0x6a, 0xdb, 0x4a, 0x22, 0x4f, | 4265 | 0xd3, 0x8d, 0x09, 0xd2, 0xe1, 0xa6, 0x52, 0xd0, 0xd7, 0x9d, 0x51, 0x31, |
| 4332 | 0x55, 0xfd, 0xe2, 0x0a, 0xaf, 0x2e, 0xd2, 0xc9, 0xb1, 0x74, 0x12, 0xa7, | 4266 | 0x50, 0xe2, 0x7a, 0xb3, 0xd2, 0xb5, 0x6b, 0x72, 0xaa, 0x5a, 0xff, 0xf6, |
| 4333 | 0xe2, 0x15, 0xfd, 0xac, 0xcb, 0x7f, 0x03, 0xa9, 0xfa, 0x0e, 0xe4, 0xb2, | 4267 | 0x53, 0xcd, 0x4a, 0x76, 0x91, 0xb1, 0x6d, 0xae, 0xb5, 0x40, 0x34, 0x0b, |
| 4334 | 0x8a, 0x7f, 0x43, 0xa6, 0x03, 0xa3, 0xa4, 0xc3, 0xbb, 0x8b, 0x41, 0x7f, | 4268 | 0x7b, 0x5e, 0x37, 0xad, 0x73, 0xfd, 0xe8, 0x77, 0xcd, 0xd0, 0x42, 0xb6, |
| 4335 | 0x47, 0x46, 0x43, 0x6f, 0x91, 0xeb, 0x2b, 0x18, 0x7b, 0xc6, 0x26, 0xe7, | 4269 | 0x85, 0xbb, 0xf1, 0xf8, 0x94, 0xcf, 0x08, 0xe8, 0x7e, 0x74, 0x76, 0x9c, |
| 4336 | 0xea, 0xe0, 0x4a, 0x2e, 0x39, 0x90, 0xa9, 0xd8, 0x5c, 0x38, 0xef, 0x99, | 4270 | 0xa2, 0x67, 0xdb, 0xf1, 0xf8, 0xe1, 0x5b, 0x90, 0xff, 0x23, 0x27, 0x2e, |
| 4337 | 0x0d, 0x89, 0xca, 0xbc, 0x32, 0xad, 0x23, 0x0f, 0xfd, 0x89, 0x85, 0x85, | 4271 | 0x66, 0x92, 0x58, 0xda, 0xf1, 0x55, 0x9c, 0xd9, 0x20, 0xe3, 0xef, 0x32, |
| 4338 | 0x6c, 0x0b, 0x77, 0x60, 0x6c, 0xdc, 0x6f, 0x2e, 0x36, 0x14, 0xac, 0x6a, | 4272 | 0x5e, 0x5c, 0x22, 0xfe, 0x0c, 0x6b, 0x8e, 0x7f, 0xcf, 0xfe, 0x90, 0x5b, |
| 4339 | 0xfd, 0x73, 0x7a, 0xb6, 0x05, 0x1f, 0x1f, 0xff, 0x3a, 0xca, 0xdf, 0x24, | 4273 | 0xb8, 0xc7, 0x35, 0xc6, 0x9e, 0xbf, 0xe7, 0x06, 0xf7, 0xde, 0x0c, 0xd4, |
| 4340 | 0x7c, 0x94, 0x49, 0xa2, 0xb9, 0xf5, 0x16, 0xa4, 0xfe, 0x40, 0xc6, 0xd3, | 4274 | 0x10, 0x0e, 0x0a, 0x13, 0xcd, 0x6a, 0x86, 0xcf, 0x38, 0x05, 0x7c, 0x9c, |
| 4341 | 0x19, 0x1f, 0x9e, 0xcf, 0x54, 0xf6, 0xec, 0x7f, 0x94, 0x25, 0x3f, 0x24, | 4275 | 0x2b, 0xa7, 0x89, 0x27, 0x47, 0xa9, 0xc5, 0xe7, 0x24, 0x7e, 0x9c, 0xa5, |
| 4342 | 0x1f, 0x78, 0xee, 0x4b, 0xf7, 0x49, 0x29, 0x9e, 0x3b, 0x78, 0x0f, 0xff, | 4276 | 0x73, 0x14, 0x03, 0xd8, 0x07, 0xdc, 0x97, 0x43, 0x96, 0x1d, 0x5c, 0xbb, |
| 4343 | 0x1f, 0x1e, 0x77, 0xde, 0x1e, 0xe7, 0x11, 0x75, 0x23, 0xf3, 0xf3, 0x5a, | 4277 | 0xf6, 0x7e, 0x0f, 0xef, 0xf1, 0x1f, 0xcf, 0x72, 0x6c, 0x14, 0x54, 0xbb, |
| 4344 | 0xd0, 0x5a, 0xff, 0xbe, 0x67, 0x08, 0xf3, 0x81, 0x62, 0x48, 0xe5, 0x8c, | 4278 | 0x84, 0x90, 0x9c, 0x5d, 0x82, 0x9e, 0xd9, 0xed, 0x74, 0x5d, 0x45, 0x5f, |
| 4345 | 0x83, 0x90, 0x47, 0xec, 0x7d, 0x23, 0xc2, 0xb9, 0x11, 0xfd, 0x02, 0x4c, | 4279 | 0xd5, 0xd7, 0x42, 0x05, 0x8f, 0x87, 0xf1, 0x49, 0x2e, 0x63, 0xff, 0x8e, |
| 4346 | 0xb8, 0x09, 0x5f, 0x2d, 0x25, 0x59, 0x68, 0x99, 0x80, 0x5f, 0x2a, 0x2a, | 4280 | 0x5c, 0xfd, 0xed, 0x16, 0x8d, 0xe3, 0x84, 0x1d, 0x11, 0xb7, 0xf2, 0xb0, |
| 4347 | 0xf4, 0xdf, 0xe8, 0x77, 0x92, 0x7c, 0x9c, 0xc5, 0x8f, 0x28, 0xa6, 0xb0, | 4281 | 0xda, 0xf1, 0xef, 0xe2, 0xe5, 0x72, 0xca, 0xa2, 0x61, 0x37, 0xcd, 0xc5, |
| 4348 | 0x4f, 0x55, 0x72, 0x9c, 0x54, 0x7c, 0xc4, 0x4b, 0xc0, 0x87, 0x3e, 0x2b, | 4282 | 0xb2, 0x79, 0xce, 0x4c, 0xdd, 0xc9, 0xf2, 0x0b, 0xf8, 0x7e, 0x48, 0xfa, |
| 4349 | 0x36, 0x1d, 0xca, 0x2f, 0xf6, 0x32, 0x96, 0xc9, 0x65, 0x2a, 0xbf, 0x23, | 4283 | 0x98, 0xa4, 0x67, 0x1e, 0x27, 0x1e, 0xca, 0xc4, 0x5b, 0xb6, 0xf4, 0x5d, |
| 4350 | 0x57, 0x7f, 0x93, 0x9e, 0x6d, 0x99, 0x8d, 0xd0, 0x6f, 0x96, 0xc5, 0x73, | 4284 | 0x1a, 0xc3, 0xf7, 0x40, 0xfa, 0x32, 0x14, 0x67, 0xf5, 0x6c, 0xe6, 0x08, |
| 4351 | 0x56, 0x6a, 0x33, 0xcb, 0x2b, 0xe0, 0x7f, 0x83, 0xe4, 0x3f, 0x46, 0x34, | 4285 | 0xe5, 0xcb, 0x5a, 0x8a, 0x45, 0x67, 0xe3, 0xf7, 0x62, 0x6d, 0x4e, 0x49, |
| 4352 | 0x66, 0x69, 0x8d, 0xd7, 0x69, 0xcd, 0x4c, 0xf1, 0x10, 0x8d, 0xe1, 0x7b, | 4286 | 0x1a, 0x14, 0x2e, 0x53, 0x7e, 0x08, 0xa7, 0xce, 0x36, 0xfc, 0x36, 0xd9, |
| 4353 | 0x24, 0x67, 0xdb, 0x76, 0x0f, 0x7b, 0xf9, 0x7c, 0xc2, 0xf3, 0x19, 0x60, | 4287 | 0x70, 0x0b, 0x61, 0x80, 0x70, 0xe8, 0x1c, 0x8d, 0x37, 0x9c, 0x32, 0x1e, |
| 4354 | 0x30, 0x6b, 0xaa, 0xce, 0xb9, 0x73, 0x9d, 0x83, 0x94, 0x2f, 0xab, 0x28, | 4288 | 0x9b, 0x90, 0x70, 0x8e, 0xf7, 0x80, 0x85, 0xfd, 0xbc, 0x01, 0x1e, 0x3b, |
| 4355 | 0x16, 0xbd, 0x19, 0xdf, 0x8e, 0x1b, 0x73, 0x6a, 0xd2, 0x24, 0x3c, 0x96, | 4289 | 0xff, 0xbd, 0x8e, 0xea, 0xba, 0x70, 0x82, 0xb2, 0xaa, 0x51, 0x4f, 0xb8, |
| 4356 | 0x52, 0x20, 0x48, 0x77, 0x64, 0xc3, 0x01, 0xe3, 0xdd, 0x74, 0x23, 0xf1, | 4290 | 0xbd, 0xd0, 0xf9, 0x08, 0xf6, 0x53, 0x7d, 0xbf, 0x35, 0x46, 0x32, 0x69, |
| 4357 | 0x14, 0x0e, 0x5d, 0xa0, 0xf1, 0xa6, 0x53, 0xc6, 0x81, 0x51, 0x07, 0x2e, | 4291 | 0x8c, 0x53, 0xbd, 0xd1, 0x36, 0x74, 0x01, 0x7f, 0x67, 0x56, 0x78, 0x1f, |
| 4358 | 0xf0, 0x1e, 0xb2, 0xa8, 0x3c, 0x6f, 0x82, 0xc7, 0xce, 0x7f, 0xaf, 0xa6, | 4292 | 0x5d, 0x84, 0x13, 0x17, 0xf0, 0x99, 0x29, 0xa9, 0xea, 0xe9, 0x19, 0xa8, |
| 4359 | 0xba, 0x2e, 0x9c, 0xa0, 0xac, 0x6a, 0xd6, 0x10, 0x6e, 0xcf, 0xb7, 0x3f, | 4293 | 0x95, 0x73, 0x68, 0x1b, 0xbe, 0x82, 0x0f, 0x4d, 0xde, 0x63, 0x97, 0x25, |
| 4360 | 0x82, 0x43, 0x54, 0xeb, 0xef, 0x88, 0x85, 0x90, 0xac, 0x8b, 0x53, 0xbd, | 4294 | 0x89, 0x30, 0x60, 0xd8, 0xef, 0x44, 0x00, 0x95, 0x80, 0x84, 0x5b, 0x35, |
| 4361 | 0xd1, 0xdc, 0x7f, 0x09, 0xff, 0xcd, 0x2a, 0xf3, 0x3e, 0xbc, 0x08, 0x27, | 4295 | 0xee, 0x49, 0x2b, 0xc3, 0x4f, 0x13, 0x96, 0x7f, 0x5f, 0xb4, 0x0d, 0x7e, |
| 4362 | 0x2e, 0xe1, 0x53, 0xcb, 0xa1, 0x69, 0x67, 0xa7, 0xa0, 0x95, 0x2f, 0xa0, | 4296 | 0x8c, 0x33, 0x66, 0xbe, 0x91, 0xd7, 0x15, 0x48, 0xdc, 0xd8, 0x76, 0xba, |
| 4363 | 0x79, 0xe0, 0x13, 0xbc, 0x67, 0xf1, 0x1e, 0xbd, 0xec, 0x70, 0x10, 0x06, | 4297 | 0x06, 0x4a, 0x8f, 0x4b, 0xa8, 0x89, 0x66, 0xe9, 0xaf, 0xcd, 0x33, 0x81, |
| 4364 | 0x0c, 0x2b, 0x4e, 0x04, 0x50, 0x0e, 0x38, 0xb0, 0x49, 0xe7, 0xde, 0xb4, | 4298 | 0xcf, 0x4c, 0x35, 0xf2, 0x19, 0xe1, 0x20, 0x35, 0x38, 0x4d, 0x3e, 0x31, |
| 4365 | 0x3a, 0xf0, 0x24, 0x61, 0xf9, 0x77, 0x44, 0x73, 0xdf, 0x87, 0x38, 0x6f, | 4299 | 0x88, 0x79, 0xda, 0xfe, 0x81, 0xf8, 0xd7, 0x88, 0x06, 0xc6, 0x7d, 0x86, |
| 4366 | 0x4d, 0xd4, 0xf1, 0xba, 0x02, 0x89, 0xeb, 0x9b, 0xcf, 0xba, 0xa1, 0x76, | 4300 | 0x7b, 0x0f, 0xd1, 0xf6, 0x53, 0xc2, 0x01, 0x5b, 0x63, 0x17, 0xcc, 0xe4, |
| 4367 | 0xba, 0x84, 0x96, 0x68, 0x70, 0xfc, 0x95, 0x75, 0x3e, 0xf0, 0xa9, 0xa5, | 4301 | 0x42, 0xeb, 0xfc, 0x5e, 0x9d, 0xdd, 0xfb, 0x66, 0x5f, 0xb9, 0x1b, 0x9b, |
| 4368 | 0x45, 0x3e, 0x25, 0x1c, 0xa4, 0x05, 0x27, 0xc9, 0xf6, 0xfb, 0x30, 0x4f, | 4302 | 0xd2, 0x4e, 0x92, 0xd3, 0x3c, 0x5e, 0x73, 0x51, 0x0c, 0x66, 0x8c, 0x53, |
| 4369 | 0x9b, 0xa8, 0x86, 0x57, 0x27, 0x1a, 0x18, 0xf7, 0x99, 0x9e, 0x7d, 0x44, | 4303 | 0xb9, 0x9e, 0x4a, 0x33, 0xc7, 0xac, 0x0a, 0xec, 0xa2, 0xb8, 0xb0, 0xd3, |
| 4370 | 0xdb, 0x6b, 0x84, 0x03, 0x76, 0xc4, 0x2e, 0x59, 0xc9, 0x85, 0x7c, 0xfe, | 4304 | 0xca, 0x05, 0xf0, 0x2c, 0x5e, 0xd1, 0x81, 0x2b, 0x53, 0xff, 0xc3, 0x43, |
| 4371 | 0x4f, 0xa9, 0xae, 0xf4, 0xc0, 0xb9, 0x6f, 0x72, 0x07, 0xee, 0x4a, 0x3b, | 4305 | 0xfa, 0x5b, 0xad, 0x2e, 0x87, 0x08, 0x66, 0x0c, 0xd1, 0xa0, 0x4b, 0xf8, |
| 4372 | 0x49, 0x4e, 0xf3, 0x78, 0xcd, 0x45, 0x31, 0x98, 0x63, 0x7f, 0xf9, 0x3a, | 4306 | 0xb8, 0x53, 0xe9, 0x71, 0x48, 0xc3, 0xb8, 0x31, 0x66, 0x98, 0x5e, 0x55, |
| 4373 | 0x2a, 0xcd, 0x24, 0x2a, 0xf1, 0xb1, 0x87, 0xe2, 0xc2, 0x6e, 0x3b, 0x17, | 4307 | 0xed, 0x6f, 0x17, 0x91, 0xbe, 0x92, 0x88, 0xa2, 0xae, 0xe4, 0x95, 0xeb, |
| 4374 | 0xc0, 0xbb, 0x64, 0x55, 0x2b, 0x3e, 0x19, 0x7f, 0xd3, 0x4b, 0xbe, 0xb4, | 4308 | 0x4a, 0xed, 0xb2, 0xa7, 0x64, 0xb8, 0xfd, 0x2b, 0xee, 0xa5, 0xba, 0x65, |
| 4375 | 0x4e, 0x6b, 0x83, 0x08, 0x66, 0x4c, 0x51, 0x6b, 0x38, 0xf0, 0x61, 0xbb, | 4309 | 0x07, 0xd5, 0xb6, 0x5e, 0xaa, 0xaf, 0x15, 0xb2, 0xc7, 0x1a, 0x92, 0x7f, |
| 4376 | 0xda, 0x29, 0x39, 0x06, 0x70, 0x7d, 0xcc, 0xb4, 0x7c, 0x9a, 0xd6, 0xd3, | 4310 | 0x88, 0xe2, 0x80, 0x0e, 0x67, 0x66, 0x1b, 0x5c, 0x99, 0xb0, 0x7f, 0x37, |
| 4377 | 0x22, 0x22, 0xdd, 0x45, 0x11, 0x45, 0x75, 0xd1, 0x27, 0x57, 0x17, 0x5b, | 4311 | 0x76, 0x20, 0x19, 0xb4, 0xb1, 0xad, 0x4c, 0xba, 0xaa, 0xed, 0x64, 0x2c, |
| 4378 | 0x64, 0x6f, 0xd1, 0xf4, 0x28, 0xab, 0xb6, 0x53, 0xdd, 0xb2, 0x8b, 0x6a, | 4312 | 0x73, 0x2f, 0xce, 0xe4, 0x19, 0x9f, 0x27, 0xb0, 0x31, 0xcd, 0xbf, 0xe1, |
| 4379 | 0x5b, 0x1f, 0xd5, 0xd7, 0xaa, 0x7e, 0x11, 0x6e, 0x92, 0x7f, 0x08, 0xfb, | 4313 | 0x79, 0x39, 0xae, 0xe3, 0x28, 0xd5, 0x4e, 0xee, 0x8e, 0x66, 0xd2, 0x43, |
| 4380 | 0x4a, 0x06, 0x9c, 0x99, 0x9d, 0x70, 0x65, 0xc2, 0xca, 0x5e, 0xec, 0x42, | 4314 | 0x0b, 0x46, 0xca, 0x82, 0x4d, 0x90, 0x74, 0x01, 0xcf, 0xd1, 0x4e, 0x19, |
| 4381 | 0x32, 0x58, 0xc1, 0xb6, 0x32, 0xe9, 0xaa, 0xaa, 0x9d, 0xb1, 0xcc, 0x76, | 4315 | 0xfb, 0x66, 0x28, 0x91, 0x50, 0x9e, 0x72, 0x92, 0x9d, 0xef, 0x26, 0x1b, |
| 4382 | 0x9c, 0x9f, 0x60, 0x7c, 0x9e, 0xc0, 0xd6, 0x34, 0xff, 0x86, 0xf7, 0xc5, | 4316 | 0xf2, 0xaa, 0x5e, 0xfa, 0x1d, 0xe0, 0x73, 0x47, 0x64, 0x93, 0x3f, 0xe9, |
| 4383 | 0xb8, 0x81, 0x93, 0x54, 0x3b, 0x79, 0x5a, 0x1b, 0x48, 0x0f, 0x8d, 0x18, | 4317 | 0x6a, 0xb7, 0x62, 0xcd, 0x2f, 0xa8, 0xc6, 0xf9, 0x15, 0xf1, 0xc2, 0xb2, |
| 4384 | 0x2c, 0x09, 0x36, 0x2b, 0xd2, 0x05, 0xbc, 0x27, 0xdb, 0x65, 0x1c, 0x9c, | 4318 | 0xd0, 0x51, 0x37, 0x3e, 0x5f, 0x13, 0xae, 0xb9, 0xa3, 0x0e, 0x41, 0x9a, |
| 4385 | 0xa2, 0x44, 0x42, 0xf9, 0xca, 0x99, 0x51, 0x28, 0x4e, 0xc8, 0xf0, 0x69, | 4319 | 0x33, 0x58, 0xdd, 0x23, 0x13, 0x58, 0x13, 0xeb, 0x40, 0x31, 0x27, 0xaa, |
| 4386 | 0x3e, 0xfa, 0x1d, 0xe0, 0x73, 0x4b, 0x64, 0x67, 0xbf, 0x5d, 0xd3, 0x62, | 4320 | 0x18, 0x6b, 0x44, 0xf1, 0x62, 0x35, 0xf6, 0x53, 0xed, 0xef, 0x53, 0x37, |
| 4387 | 0xc7, 0x9a, 0x7a, 0xaa, 0x75, 0xde, 0x21, 0x5e, 0x58, 0x16, 0x06, 0xaa, | 4321 | 0x22, 0xe3, 0xaf, 0x78, 0xde, 0x89, 0x73, 0x0d, 0x00, 0xcf, 0x00, 0x61, |
| 4388 | 0x47, 0xe6, 0x6b, 0xc2, 0xf5, 0xb7, 0x55, 0x23, 0x48, 0x73, 0x32, 0x0e, | 4322 | 0xa8, 0xd1, 0xf4, 0x57, 0x90, 0x5f, 0x08, 0xf7, 0x3d, 0x71, 0x3e, 0x9f, |
| 4389 | 0xac, 0x9c, 0x57, 0x5d, 0x1f, 0x6b, 0x45, 0x21, 0x27, 0xe6, 0x30, 0xd6, | 4323 | 0x49, 0x21, 0x4a, 0x5d, 0x8d, 0x86, 0xe5, 0xbd, 0xf8, 0xb8, 0x91, 0xf1, |
| 4390 | 0xa0, 0xea, 0xc3, 0x3a, 0x1c, 0xa2, 0xda, 0xdf, 0xaf, 0x6d, 0x45, 0x46, | 4324 | 0xaf, 0x97, 0x62, 0x83, 0x8c, 0xdd, 0x33, 0x01, 0xeb, 0x5c, 0x04, 0xc5, |
| 4391 | 0x29, 0x7b, 0x7f, 0x11, 0xe7, 0x1a, 0x00, 0xde, 0x5e, 0xc2, 0x50, 0x43, | 4325 | 0xc0, 0x2a, 0xcd, 0xd7, 0xd2, 0xfa, 0x65, 0x34, 0xb2, 0x4c, 0xfe, 0x6f, |
| 4392 | 0xe9, 0xaf, 0x72, 0xcc, 0xf4, 0xdc, 0x1d, 0xd7, 0x71, 0x24, 0x47, 0x21, | 4326 | 0x34, 0x92, 0xcd, 0x12, 0xe6, 0xc9, 0xa5, 0x07, 0xf0, 0x4a, 0x9a, 0xe7, |
| 4393 | 0x4a, 0x5b, 0x87, 0xda, 0xb6, 0x2e, 0x7c, 0x58, 0xc7, 0xf8, 0x97, 0x62, | 4327 | 0x0d, 0x27, 0x35, 0xe1, 0xe7, 0x9e, 0xbc, 0x25, 0x13, 0x63, 0x86, 0xd7, |
| 4394 | 0x15, 0xd1, 0xb3, 0x77, 0x2a, 0x60, 0x9f, 0xab, 0xd8, 0x57, 0x9a, 0xa7, | 4328 | 0xf0, 0x5a, 0xb1, 0xc9, 0x5e, 0x27, 0xc0, 0xbd, 0xa2, 0xff, 0xe0, 0x5a, |
| 4395 | 0xf9, 0x5a, 0x5a, 0xbf, 0x8c, 0x46, 0x96, 0xc9, 0x3f, 0x44, 0x23, 0xd9, | 4329 | 0x1a, 0xe5, 0xc7, 0xd5, 0x54, 0x77, 0x46, 0xa1, 0x7e, 0xa3, 0x42, 0xfa, |
| 4396 | 0x2c, 0x61, 0x9e, 0x5c, 0xba, 0x17, 0x2f, 0xa7, 0x79, 0xde, 0x70, 0x52, | 4330 | 0xe0, 0x1e, 0xf5, 0x12, 0xc2, 0xbc, 0x70, 0xbf, 0x1a, 0xe7, 0x73, 0xc8, |
| 4397 | 0x17, 0x0a, 0xf7, 0xe6, 0x6d, 0x99, 0x98, 0x53, 0xbc, 0x06, 0xaf, 0x3f, | 4331 | 0xe6, 0x0e, 0x59, 0x37, 0x4d, 0x57, 0xa7, 0xea, 0x7f, 0x0f, 0x6c, 0x87, |
| 4398 | 0xbf, 0x4e, 0x80, 0x6a, 0x85, 0x7f, 0xec, 0x5a, 0x14, 0x37, 0x72, 0xeb, | 4332 | 0x5e, 0xde, 0xeb, 0x70, 0xef, 0xee, 0xf4, 0x62, 0x1f, 0xe5, 0xc0, 0x67, |
| 4399 | 0xa8, 0xee, 0x8c, 0x42, 0xfb, 0xfd, 0x32, 0xe9, 0x83, 0x7b, 0xd5, 0x4b, | 4333 | 0xd3, 0x6d, 0x06, 0xd7, 0x7e, 0x60, 0x1c, 0x2a, 0x52, 0xf4, 0xec, 0x50, |
| 4400 | 0x09, 0xf3, 0xc2, 0xf3, 0x4a, 0x9c, 0xcf, 0x30, 0x5b, 0xbb, 0x64, 0xc3, | 4334 | 0x1d, 0x9f, 0x09, 0xda, 0x55, 0xde, 0x06, 0x47, 0xe6, 0xb6, 0x3a, 0xae, |
| 4401 | 0xb2, 0x5c, 0xed, 0x9a, 0xf2, 0x36, 0xd8, 0x0e, 0x7d, 0xbc, 0xe7, 0xe1, | 4335 | 0x37, 0x6a, 0xa8, 0x4e, 0x1e, 0x49, 0x33, 0xbd, 0xdc, 0x7b, 0x33, 0xcd, |
| 4402 | 0xd9, 0xdb, 0xee, 0xc3, 0x41, 0xca, 0x81, 0x4f, 0xa5, 0x9b, 0x4d, 0xae, | 4336 | 0x9d, 0x71, 0xf5, 0xf2, 0x5a, 0xb2, 0x8b, 0x66, 0x9d, 0xe5, 0x18, 0xc0, |
| 4403 | 0xfd, 0xc0, 0x38, 0x54, 0xa4, 0xe8, 0xd9, 0x7f, 0x55, 0xcd, 0x3e, 0xbb, | 4337 | 0x93, 0x34, 0x36, 0x54, 0x66, 0x59, 0x7e, 0xb7, 0x8e, 0xfb, 0x9d, 0x7b, |
| 4404 | 0xa7, 0xb4, 0x13, 0x52, 0xa6, 0xa7, 0x9a, 0xeb, 0x0d, 0x37, 0xd5, 0xc9, | 4338 | 0x48, 0xbf, 0x0d, 0x59, 0x7b, 0x9e, 0x6c, 0x79, 0x10, 0x4b, 0x46, 0x5f, |
| 4405 | 0x83, 0x69, 0xa6, 0xd7, 0xda, 0xe5, 0xa4, 0xb9, 0x76, 0xc7, 0xb5, 0xd9, | 4339 | 0xa8, 0xb3, 0x6b, 0x1f, 0xae, 0xcb, 0x87, 0xb0, 0x27, 0x1d, 0xc0, 0x4c, |
| 4406 | 0x1b, 0xc9, 0x2e, 0x1a, 0x0c, 0x96, 0x63, 0x00, 0x4f, 0xd0, 0xd8, 0x50, | 4340 | 0xba, 0xcd, 0xff, 0x12, 0x9c, 0xd5, 0xbc, 0xca, 0xe7, 0x88, 0xe7, 0xc7, |
| 4407 | 0x89, 0x65, 0x79, 0xa8, 0x9a, 0xfb, 0x9e, 0xfb, 0x48, 0xbf, 0xb5, 0xd9, | 4341 | 0x04, 0x30, 0x7d, 0xf5, 0x3b, 0xcb, 0xc7, 0xee, 0x99, 0x1e, 0xb7, 0x30, |
| 4408 | 0xca, 0x3c, 0xd9, 0x52, 0x1f, 0x96, 0x0e, 0xbd, 0x58, 0x5d, 0xa9, 0x7d, | 4342 | 0xbf, 0x8c, 0x7c, 0xc0, 0xae, 0x63, 0x28, 0x56, 0x78, 0x1e, 0x25, 0xbd, |
| 4409 | 0xb8, 0x2e, 0xef, 0xc7, 0xbe, 0x74, 0x00, 0x53, 0xe9, 0x66, 0xe5, 0x05, | 4343 | 0xbe, 0x4f, 0x7a, 0x75, 0x90, 0x5e, 0x5f, 0xd2, 0xfe, 0x92, 0x31, 0x8b, |
| 4410 | 0xfb, 0xcc, 0x40, 0xa5, 0x47, 0x36, 0x98, 0x9e, 0x1f, 0x13, 0xc0, 0xe4, | 4344 | 0x7b, 0x57, 0xdc, 0xcb, 0xfb, 0x43, 0x06, 0x81, 0x16, 0x6b, 0x4c, 0x26, |
| 4411 | 0xd5, 0xef, 0x2c, 0x9f, 0x4a, 0xef, 0xf4, 0x94, 0x8d, 0xf9, 0x65, 0x4c, | 4345 | 0xee, 0xc4, 0xeb, 0x94, 0x07, 0x6b, 0x28, 0xfe, 0x9d, 0x4a, 0x9b, 0xab, |
| 4412 | 0x04, 0x2a, 0x78, 0x88, 0x62, 0x85, 0xf7, 0x51, 0xd2, 0xeb, 0x3b, 0xa4, | 4346 | 0xe7, 0x62, 0x6d, 0xa9, 0xf7, 0x29, 0x4f, 0x1b, 0x7f, 0xa8, 0x68, 0x67, |
| 4413 | 0x57, 0x89, 0xf4, 0xfa, 0x82, 0xfe, 0x23, 0xc6, 0x2c, 0x9e, 0x3d, 0x71, | 4347 | 0xc8, 0x4f, 0xb3, 0x13, 0x7f, 0x8a, 0x33, 0x8d, 0x6d, 0xfe, 0xb7, 0x60, |
| 4414 | 0x1f, 0xef, 0x13, 0x99, 0x04, 0x5a, 0xec, 0x31, 0x99, 0xb8, 0x13, 0xe7, | 4348 | 0xb8, 0x9f, 0x88, 0x3f, 0x42, 0x35, 0x3f, 0xd5, 0x0d, 0xcb, 0xff, 0x0b, |
| 4415 | 0x86, 0xf8, 0x6c, 0xe2, 0x47, 0x6b, 0x5e, 0x4a, 0x5b, 0xeb, 0x66, 0x62, | 4349 | 0x39, 0x59, 0x1c, 0x92, 0xda, 0x76, 0xf9, 0x25, 0xfc, 0x15, 0xce, 0x5c, |
| 4416 | 0xcd, 0xa9, 0x77, 0x08, 0x4f, 0x9b, 0x7f, 0xa0, 0xea, 0xe7, 0xc9, 0x4f, | 4350 | 0x17, 0xd6, 0x5e, 0x02, 0x8f, 0xb1, 0xeb, 0xf1, 0xf0, 0xec, 0xfd, 0x7c, |
| 4417 | 0xb3, 0xa3, 0x7f, 0x88, 0xf3, 0x75, 0xcd, 0xca, 0xcf, 0x61, 0x7a, 0x1e, | 4351 | 0x1e, 0x2a, 0x48, 0xe9, 0xcc, 0xde, 0xc7, 0x4a, 0xf3, 0xbe, 0x9b, 0x40, |
| 4418 | 0x8f, 0x3f, 0x42, 0x35, 0x3f, 0xd5, 0x0d, 0x6d, 0xff, 0x92, 0x9c, 0x2c, | 4352 | 0x7e, 0x03, 0xd5, 0xd2, 0xd6, 0x39, 0x54, 0x78, 0x9e, 0x26, 0xbf, 0x88, |
| 4419 | 0x0e, 0x87, 0xd6, 0x3c, 0xfb, 0x02, 0xfe, 0x23, 0xce, 0x2f, 0x0e, 0xeb, | 4353 | 0x8e, 0xf1, 0xf8, 0x63, 0x5d, 0x6a, 0x21, 0x04, 0x89, 0x30, 0x0e, 0x61, |
| 4420 | 0x2f, 0x80, 0xc7, 0x54, 0xea, 0xf1, 0xf0, 0xf4, 0x7d, 0x7c, 0x9e, 0x2a, | 4354 | 0x84, 0x1e, 0x3e, 0x9f, 0xf1, 0x74, 0x3a, 0x48, 0xb9, 0xa0, 0xad, 0x2f, |
| 4421 | 0x48, 0x69, 0xb4, 0xb2, 0x9f, 0x95, 0xe6, 0xfd, 0x37, 0x81, 0x89, 0x2d, | 4355 | 0x2a, 0xbe, 0x0d, 0x1b, 0x03, 0x70, 0x9e, 0x3b, 0x46, 0x79, 0x4e, 0x49, |
| 4422 | 0x54, 0x4b, 0xdb, 0xe7, 0x58, 0xe1, 0x7d, 0x92, 0xfc, 0x22, 0x3a, 0xcc, | 4356 | 0x3d, 0x8d, 0xb6, 0x7e, 0xaf, 0xb8, 0x1b, 0xa9, 0xc6, 0xb6, 0xc1, 0xa3, |
| 4423 | 0xe3, 0x3f, 0x5e, 0xa3, 0xe5, 0x43, 0x70, 0x10, 0xc6, 0x49, 0x05, 0xd4, | 4357 | 0x08, 0x13, 0x66, 0x50, 0xa2, 0x67, 0x60, 0xcf, 0xb3, 0xb4, 0x20, 0x51, |
| 4424 | 0x4e, 0x20, 0xe8, 0x7f, 0x32, 0x1d, 0xa4, 0x1a, 0xad, 0xb9, 0x3b, 0x2a, | 4358 | 0x9d, 0xc8, 0x71, 0x26, 0x8d, 0xa3, 0x7e, 0x09, 0x37, 0x74, 0xa8, 0x97, |
| 4425 | 0xee, 0x9c, 0xdb, 0xf7, 0xe6, 0x3c, 0xf7, 0xf1, 0x9a, 0x63, 0x69, 0x35, | 4359 | 0xa7, 0x31, 0x6f, 0x2f, 0xf6, 0x98, 0xd5, 0x05, 0x1a, 0x2f, 0xf9, 0x09, |
| 4426 | 0xf5, 0x24, 0x9a, 0x7b, 0x7c, 0xe2, 0x0e, 0xa4, 0xea, 0x9a, 0xfb, 0x4e, | 4360 | 0xdb, 0xd4, 0xc0, 0x49, 0xb5, 0xbf, 0xa4, 0x6f, 0xc3, 0xd6, 0x34, 0xe7, |
| 4427 | 0x22, 0x9c, 0xf0, 0x08, 0x35, 0x7a, 0x1e, 0x95, 0x79, 0x96, 0xe5, 0x1d, | 4361 | 0x69, 0x92, 0x0b, 0xf9, 0x66, 0x5f, 0x64, 0x1b, 0x86, 0x0a, 0x01, 0xec, |
| 4428 | 0x54, 0x27, 0x72, 0x9c, 0x49, 0xe3, 0xa4, 0xe2, 0xc0, 0xf2, 0x56, 0x6d, | 4362 | 0xcf, 0x86, 0xf7, 0xee, 0x26, 0x5c, 0x37, 0x56, 0x0e, 0x87, 0x36, 0x8b, |
| 4429 | 0x76, 0x12, 0xf3, 0xf6, 0x52, 0x19, 0xb3, 0x2e, 0x4f, 0xe3, 0x1d, 0x0a, | 4363 | 0x00, 0xe9, 0x9b, 0xea, 0xff, 0xa6, 0x20, 0xd5, 0xc9, 0x7e, 0xfa, 0xb7, |
| 4430 | 0xd5, 0xfb, 0x6e, 0x38, 0xeb, 0x79, 0x4f, 0x71, 0x27, 0x76, 0xa4, 0x39, | 4364 | 0xeb, 0x99, 0x53, 0x54, 0xcf, 0xbc, 0x4e, 0xbe, 0xe6, 0xad, 0xd6, 0xaa, |
| 4431 | 0x4f, 0x93, 0x5c, 0xc8, 0x37, 0xbb, 0x23, 0x3b, 0xd1, 0x9f, 0x0f, 0xe0, | 4365 | 0x4b, 0xf3, 0x26, 0xe6, 0x62, 0xeb, 0x71, 0xc9, 0xd2, 0x59, 0x90, 0x6c, |
| 4432 | 0x50, 0x36, 0xbc, 0x7f, 0x2f, 0xe1, 0xba, 0xe1, 0x52, 0x38, 0xb4, 0x4d, | 4366 | 0x8c, 0x73, 0x08, 0x9f, 0x8d, 0x71, 0x8b, 0xcd, 0x63, 0x86, 0xfb, 0xc1, |
| 4433 | 0x04, 0x48, 0xdf, 0x54, 0xff, 0xd7, 0x07, 0xa9, 0x4e, 0x56, 0xe8, 0xbf, | 4367 | 0xce, 0x20, 0xe5, 0x34, 0xc6, 0x9c, 0x8e, 0x3f, 0x92, 0x48, 0x1e, 0x33, |
| 4434 | 0x52, 0xcf, 0xbc, 0x44, 0xf5, 0xcc, 0x39, 0xf2, 0x35, 0xdf, 0x5c, 0xad, | 4368 | 0xea, 0x0e, 0xac, 0x8b, 0xed, 0xc0, 0x90, 0xf6, 0x5d, 0xd4, 0x34, 0x71, |
| 4435 | 0xba, 0x6c, 0xc2, 0xc2, 0x4c, 0x6c, 0x23, 0x2e, 0xdb, 0x3a, 0x0b, 0x92, | 4369 | 0x3c, 0x92, 0x8d, 0x06, 0x9a, 0xf7, 0x42, 0x67, 0x2f, 0xc2, 0x4f, 0x31, |
| 4436 | 0x8d, 0x71, 0x2e, 0xe2, 0xb3, 0x35, 0x1e, 0xb1, 0x6d, 0xd8, 0xf4, 0x3c, | 4370 | 0x3e, 0xfa, 0x19, 0xe1, 0x23, 0xf6, 0x5d, 0x9e, 0xbf, 0x51, 0x5f, 0x46, |
| 4437 | 0xd8, 0x1e, 0x44, 0x38, 0xc3, 0x98, 0x53, 0xfa, 0xa6, 0x83, 0xe4, 0x31, | 4371 | 0xb8, 0xa2, 0xbe, 0xd3, 0xce, 0xf3, 0x37, 0x16, 0xf8, 0x4c, 0x26, 0xa8, |
| 4438 | 0xa5, 0xed, 0xc2, 0x86, 0xd8, 0x2e, 0xf4, 0xeb, 0x7f, 0x02, 0x77, 0x3d, | 4372 | 0x36, 0x85, 0xe7, 0xdd, 0x95, 0x3a, 0x9e, 0xa0, 0x18, 0x93, 0x58, 0xee, |
| 4439 | 0xc7, 0x23, 0xd9, 0xac, 0xa5, 0x79, 0x2f, 0xb5, 0x77, 0x21, 0x7c, 0x94, | 4373 | 0x02, 0x16, 0xf0, 0xd9, 0x63, 0xbb, 0x8e, 0x61, 0x7e, 0x97, 0x14, 0x04, |
| 4440 | 0x73, 0x30, 0x55, 0xc3, 0x43, 0xec, 0xbb, 0x3c, 0xff, 0x6d, 0xc6, 0x0a, | 4374 | 0x66, 0xe3, 0x64, 0x1f, 0xff, 0xea, 0x8c, 0x51, 0xa8, 0x7a, 0x36, 0x94, |
| 4441 | 0xc2, 0x15, 0x35, 0xed, 0x95, 0x3c, 0x7f, 0x7d, 0x9e, 0xcf, 0x74, 0x82, | 4375 | 0xfb, 0x27, 0x07, 0xcc, 0x24, 0xbf, 0x33, 0xe0, 0xa8, 0xf3, 0x52, 0xbc, |
| 4442 | 0x6a, 0x53, 0x78, 0xdf, 0x5a, 0x6d, 0xe0, 0x71, 0x8a, 0x31, 0x89, 0x36, | 4376 | 0x0d, 0x56, 0x20, 0x79, 0x39, 0x2e, 0x4b, 0xea, 0xbc, 0xdc, 0x59, 0xd6, |
| 4443 | 0x17, 0xb0, 0x80, 0xcf, 0x2e, 0x57, 0xea, 0x18, 0xe6, 0x77, 0x69, 0x5e, | 4377 | 0x47, 0x38, 0xbe, 0x5b, 0xba, 0x70, 0xd2, 0x33, 0xbb, 0x26, 0x95, 0xe1, |
| 4444 | 0x60, 0x3a, 0x4e, 0xf6, 0xf1, 0x77, 0xce, 0x28, 0x85, 0xe6, 0xce, 0x96, | 4378 | 0xdd, 0x68, 0x1b, 0xfa, 0x40, 0xd4, 0x5a, 0x3b, 0x97, 0xd3, 0xed, 0x48, |
| 4445 | 0x72, 0xff, 0xe4, 0xb0, 0x95, 0xe4, 0xf7, 0x0d, 0xa4, 0xa0, 0x8f, 0xe2, | 4379 | 0x2d, 0xd6, 0x9d, 0x1b, 0xae, 0x64, 0x57, 0x13, 0x1d, 0xe7, 0x4c, 0x5c, |
| 4446 | 0x6d, 0xb0, 0x0c, 0x2a, 0xea, 0x29, 0x2e, 0x3b, 0xb4, 0x79, 0xb9, 0xb3, | 4380 | 0xb7, 0xc6, 0xda, 0xdf, 0x9a, 0x6e, 0xff, 0x73, 0x9a, 0x9b, 0xbf, 0x3f, |
| 4447 | 0xac, 0x4f, 0x58, 0x13, 0x73, 0xba, 0x70, 0xd2, 0x33, 0x7b, 0xc6, 0xd4, | 4381 | 0xe0, 0xe5, 0x33, 0x93, 0xc7, 0xb3, 0x2f, 0x9a, 0xd1, 0x85, 0xb6, 0x7c, |
| 4448 | 0x81, 0xbd, 0x68, 0xee, 0x7f, 0x57, 0x54, 0xd9, 0x3b, 0x98, 0x93, 0x2d, | 4382 | 0x4e, 0x90, 0xef, 0x07, 0x75, 0x07, 0x9a, 0xd5, 0xc8, 0xe5, 0x7e, 0xfa, |
| 4449 | 0x48, 0x2d, 0x31, 0x9c, 0x5b, 0x3e, 0xc9, 0xae, 0x23, 0x3a, 0x2e, 0x10, | 4383 | 0xfd, 0xb7, 0x05, 0x42, 0xfb, 0x2b, 0x07, 0xf1, 0xab, 0xbc, 0x8e, 0xc7, |
| 4450 | 0x08, 0x5d, 0x6f, 0xef, 0x73, 0x4d, 0xb6, 0xfc, 0x29, 0xcd, 0xcd, 0xdf, | 4384 | 0x28, 0x0f, 0x34, 0xa8, 0x8a, 0x3f, 0xcf, 0xfb, 0xd7, 0x31, 0x9b, 0xff, |
| 4451 | 0xff, 0xd8, 0xc7, 0x67, 0x2e, 0x4f, 0x65, 0x9f, 0xb7, 0xa2, 0x0b, 0x2b, | 4385 | 0x9b, 0xf2, 0xe4, 0x87, 0x8d, 0x7e, 0xab, 0xc6, 0xb0, 0xf9, 0x2b, 0x10, |
| 4452 | 0xf2, 0x39, 0x4d, 0xbe, 0x1f, 0x34, 0x24, 0x34, 0x68, 0x91, 0xd9, 0x1e, | 4386 | 0x7f, 0x03, 0x5e, 0xf6, 0x85, 0xc5, 0xe4, 0x17, 0x7b, 0xc9, 0x5f, 0x1f, |
| 4453 | 0xfa, 0xfd, 0xd7, 0x79, 0x42, 0xfb, 0xab, 0xfb, 0xf0, 0xcb, 0x09, 0x03, | 4387 | 0x23, 0x5b, 0xa3, 0x0a, 0x9e, 0xfc, 0x40, 0xd9, 0x0b, 0xf2, 0xd7, 0xb1, |
| 4454 | 0x07, 0x28, 0x0f, 0xd4, 0x6a, 0xaa, 0x32, 0x81, 0x10, 0xd7, 0xd2, 0x36, | 4388 | 0x34, 0xcb, 0x3f, 0xe8, 0x1b, 0x18, 0xe5, 0xb8, 0x6b, 0xf5, 0x55, 0xb5, |
| 4455 | 0xff, 0x2b, 0x27, 0xc8, 0x0f, 0xeb, 0x14, 0xbb, 0xc6, 0xa8, 0xf0, 0x77, | 4389 | 0x90, 0x83, 0xe3, 0xae, 0x15, 0x4f, 0x8d, 0x90, 0xe3, 0xd7, 0x75, 0x4c, |
| 4456 | 0x99, 0xf8, 0x7b, 0xd0, 0xc7, 0xbe, 0xb0, 0x84, 0xfc, 0x62, 0x3f, 0xf9, | 4390 | 0xd7, 0x48, 0x39, 0x1c, 0xf4, 0xf0, 0x79, 0x7e, 0x02, 0x87, 0x03, 0x9a, |
| 4457 | 0xeb, 0x01, 0xb2, 0x35, 0xaa, 0xe0, 0xc9, 0x0f, 0xd4, 0xfd, 0x20, 0x7f, | 4391 | 0x9d, 0x2b, 0xe7, 0x28, 0x1f, 0x5d, 0x22, 0x3a, 0xf6, 0xc7, 0x9a, 0x91, |
| 4458 | 0x1d, 0x4e, 0xb3, 0xfc, 0x83, 0xfe, 0x5e, 0x3e, 0xde, 0xac, 0xd9, 0x7d, | 4392 | 0xa2, 0x7c, 0x94, 0x51, 0x6d, 0x5b, 0x52, 0x67, 0x19, 0x63, 0xfe, 0x82, |
| 4459 | 0x55, 0x3d, 0x24, 0x71, 0xdc, 0xb5, 0xe3, 0xa9, 0x19, 0x92, 0xac, 0x6a, | 4393 | 0x30, 0xa6, 0x12, 0x72, 0x49, 0x6d, 0xc3, 0x27, 0xb1, 0xcd, 0x3c, 0xd3, |
| 4460 | 0xa6, 0x6b, 0xb0, 0x14, 0x0e, 0x7a, 0xf9, 0x5d, 0x00, 0x02, 0x87, 0xbd, | 4394 | 0xc8, 0x36, 0xe5, 0xc2, 0xe1, 0xf6, 0x59, 0xb3, 0x12, 0x60, 0x7e, 0x25, |
| 4461 | 0x7a, 0x25, 0x57, 0xce, 0x50, 0x3e, 0xba, 0x4c, 0x74, 0x1c, 0x8a, 0x35, | 4395 | 0xbc, 0xa8, 0x91, 0xcd, 0x5c, 0x17, 0x0e, 0xbe, 0x48, 0x39, 0x75, 0xa6, |
| 4462 | 0x20, 0x45, 0xf9, 0x28, 0xa3, 0x55, 0x6c, 0x49, 0x9b, 0x66, 0x8c, 0x59, | 4396 | 0xaa, 0x8f, 0x70, 0x61, 0xde, 0x1e, 0x63, 0x2c, 0xeb, 0x68, 0x0a, 0x6a, |
| 4463 | 0x6f, 0x04, 0xc7, 0xd5, 0x90, 0xcb, 0xd1, 0x3c, 0x70, 0x06, 0x3b, 0xad, | 4397 | 0xa2, 0x80, 0x3f, 0xa6, 0xef, 0xad, 0xc1, 0x4b, 0x55, 0x5b, 0x5d, 0x36, |
| 4464 | 0xf3, 0x75, 0x6c, 0x53, 0x2e, 0x1c, 0x6f, 0x99, 0xb6, 0xca, 0x01, 0xe6, | 4398 | 0xfb, 0xdf, 0xbd, 0xd5, 0x77, 0x6c, 0xac, 0x67, 0x42, 0x85, 0xfb, 0xe9, |
| 4465 | 0xd7, 0x81, 0xe7, 0x75, 0xb2, 0x99, 0xc5, 0xe1, 0xe0, 0xf3, 0x94, 0x53, | 4399 | 0x37, 0xcf, 0x19, 0xe0, 0xb3, 0x2d, 0x7c, 0xd6, 0xca, 0xb3, 0xb5, 0xb3, |
| 4466 | 0xa7, 0xe6, 0xf4, 0x11, 0xce, 0xcf, 0xdb, 0xe3, 0x5a, 0x96, 0x75, 0x34, | 4400 | 0x86, 0xfd, 0xc5, 0xcf, 0xef, 0x15, 0xac, 0x1b, 0xe3, 0xbe, 0x30, 0xf7, |
| 4467 | 0x05, 0x2d, 0x91, 0x47, 0x2f, 0x7d, 0x6f, 0x0a, 0x5e, 0x9e, 0xb3, 0xd5, | 4401 | 0x68, 0x24, 0xec, 0xbe, 0xfa, 0xde, 0x03, 0x7f, 0xf6, 0xe0, 0xd6, 0x31, |
| 4468 | 0x15, 0xd3, 0xaf, 0xfb, 0xe6, 0xde, 0xcb, 0xb1, 0x9f, 0x09, 0xe5, 0xff, | 4402 | 0xee, 0x45, 0x9c, 0xb8, 0x59, 0xc6, 0x3f, 0x51, 0x1e, 0x96, 0xd9, 0xe7, |
| 4469 | 0x88, 0x7e, 0xf3, 0x9c, 0x01, 0xc6, 0x32, 0x7c, 0x56, 0xcb, 0xbb, 0xa3, | 4403 | 0xc9, 0xd7, 0x7f, 0xd4, 0x75, 0x6a, 0x92, 0x73, 0xea, 0xdb, 0x5d, 0x9b, |
| 4470 | 0xdd, 0xcd, 0xfe, 0xa2, 0xf0, 0x3b, 0x09, 0x1b, 0x86, 0xb9, 0x2f, 0xcc, | 4404 | 0xd2, 0xf3, 0x3a, 0xbe, 0xca, 0xd3, 0xe9, 0x7b, 0x28, 0xee, 0x64, 0xd2, |
| 4471 | 0x3d, 0x1a, 0x07, 0xf6, 0x5e, 0x7d, 0x67, 0x82, 0x3f, 0x3b, 0xb1, 0x69, | 4405 | 0xca, 0x70, 0x44, 0xb2, 0xf6, 0xd5, 0x52, 0x25, 0xf1, 0x15, 0x2a, 0xd2, |
| 4472 | 0x98, 0x7b, 0x11, 0xa7, 0x6f, 0x90, 0xf1, 0x37, 0x94, 0x87, 0x65, 0xf6, | 4406 | 0x78, 0xbe, 0x5e, 0xf4, 0x8f, 0x85, 0xa8, 0xb6, 0xf1, 0xfb, 0x1e, 0x38, |
| 4473 | 0x79, 0xf2, 0xf5, 0x4f, 0xd7, 0xbc, 0x34, 0xc6, 0x39, 0x35, 0x60, 0xdc, | 4407 | 0x60, 0x52, 0xae, 0x70, 0xe2, 0xe9, 0xd1, 0xb0, 0xf6, 0x26, 0xe1, 0x9d, |
| 4474 | 0x95, 0x9e, 0xd7, 0xf1, 0x55, 0x9e, 0xce, 0xde, 0x4d, 0x71, 0x27, 0x93, | 4408 | 0x67, 0x46, 0x4d, 0xf3, 0x4d, 0x0d, 0x7f, 0xd2, 0x40, 0x35, 0x72, 0xbb, |
| 4475 | 0x56, 0x07, 0x22, 0x0e, 0x7b, 0x7f, 0x2d, 0x55, 0x14, 0x5f, 0xa5, 0x22, | 4409 | 0x50, 0x12, 0x84, 0x0d, 0x42, 0xeb, 0x45, 0x5b, 0xb0, 0x00, 0xe5, 0xf4, |
| 4476 | 0x8d, 0xe7, 0x53, 0xfc, 0x03, 0x87, 0x43, 0xc8, 0x64, 0xbb, 0xf0, 0x8d, | 4410 | 0x4e, 0x9a, 0xef, 0x50, 0x11, 0x78, 0xb1, 0xe8, 0xc1, 0x0b, 0x63, 0xdc, |
| 4477 | 0x61, 0xcb, 0x72, 0xb7, 0x39, 0xf1, 0xca, 0x90, 0x85, 0x0f, 0x62, 0xc0, | 4411 | 0xfb, 0xf3, 0xa0, 0xf4, 0x54, 0x93, 0x6f, 0xdb, 0x81, 0x10, 0xc5, 0x58, |
| 4478 | 0xcb, 0x43, 0xe1, 0x81, 0x73, 0xc0, 0xb7, 0x6b, 0xa9, 0x46, 0x6e, 0x11, | 4412 | 0x19, 0xbd, 0x87, 0x12, 0xb8, 0xf5, 0x80, 0x40, 0x34, 0x92, 0x40, 0xcf, |
| 4479 | 0x6a, 0x37, 0x61, 0x83, 0xd0, 0x7b, 0x68, 0x0e, 0xe6, 0xa1, 0x9e, 0xdd, | 4413 | 0xa1, 0x7a, 0xac, 0x1f, 0x93, 0x71, 0x31, 0x5e, 0x8f, 0xdb, 0x9e, 0x9a, |
| 4480 | 0x4d, 0xf3, 0xbd, 0x58, 0x00, 0x7e, 0x59, 0xf0, 0xe2, 0x17, 0xc3, 0x3c, | 4414 | 0xe7, 0xe3, 0x9d, 0x6a, 0x9d, 0x27, 0x5b, 0xe7, 0xd8, 0x8e, 0x66, 0x39, |
| 4481 | 0xa7, 0x17, 0xe7, 0x8e, 0xd6, 0xfb, 0x77, 0xd2, 0x5c, 0x07, 0x29, 0xbe, | 4415 | 0x66, 0x53, 0xbe, 0xc8, 0x72, 0x0c, 0x34, 0xcd, 0x60, 0xa7, 0xdd, 0xe7, |
| 4482 | 0x77, 0x1d, 0x4b, 0x60, 0xd3, 0x61, 0x81, 0x68, 0x24, 0x81, 0xce, 0x63, | 4416 | 0x78, 0x8e, 0xf2, 0xc7, 0x13, 0x9d, 0x6a, 0x30, 0xe8, 0xd0, 0x71, 0xc3, |
| 4483 | 0x35, 0xd8, 0x38, 0x2c, 0xe3, 0xfd, 0x78, 0x0d, 0x6e, 0x39, 0x3a, 0xcf, | 4417 | 0x44, 0xe5, 0xdb, 0x0d, 0x30, 0x8f, 0xf3, 0x1e, 0xc6, 0xa7, 0xed, 0xa6, |
| 4484 | 0x47, 0xa5, 0xaf, 0xc1, 0x67, 0x35, 0xf9, 0x1c, 0xdc, 0xc9, 0x2c, 0xc7, | 4418 | 0x79, 0x6b, 0x3c, 0x72, 0x99, 0x2a, 0x3b, 0xf2, 0xa9, 0xb7, 0xc9, 0xa7, |
| 4485 | 0x6c, 0xca, 0x17, 0x59, 0x8e, 0x81, 0x96, 0x15, 0x6c, 0xaf, 0xf4, 0x39, | 4419 | 0x5a, 0xf0, 0x44, 0x76, 0x7e, 0xaf, 0x4b, 0xed, 0xbf, 0x20, 0x19, 0x3b, |
| 4486 | 0x9e, 0xa6, 0xfc, 0xf1, 0x78, 0xbb, 0x16, 0x0c, 0x4a, 0x06, 0x96, 0x8f, | 4420 | 0xfc, 0x30, 0x3f, 0xa9, 0xd5, 0xcd, 0x4f, 0x5d, 0x7a, 0x24, 0xb8, 0x5d, |
| 4487 | 0x96, 0xef, 0xac, 0x85, 0x75, 0x8a, 0xf7, 0x33, 0x3e, 0x6a, 0xb1, 0xac, | 4421 | 0xf0, 0x19, 0x11, 0xee, 0x89, 0x9b, 0xe6, 0xd9, 0xb8, 0x69, 0x16, 0xe3, |
| 4488 | 0x4d, 0xf1, 0xc8, 0xec, 0xbd, 0x36, 0xae, 0x0d, 0x90, 0x4f, 0x35, 0xe2, | 4422 | 0x86, 0x7b, 0xd9, 0x0a, 0x3f, 0x0e, 0x2d, 0xe5, 0x77, 0x0d, 0xc2, 0xc9, |
| 4489 | 0xf1, 0xec, 0xfc, 0x9e, 0x97, 0xd6, 0x73, 0xc9, 0x61, 0xee, 0x52, 0x60, | 4423 | 0x66, 0xb2, 0x2f, 0xcf, 0x52, 0x35, 0xb8, 0x91, 0xea, 0x2b, 0x83, 0x82, |
| 4490 | 0x5d, 0xa9, 0x32, 0xac, 0x8f, 0x5c, 0x46, 0x24, 0xf8, 0x80, 0xe0, 0xb3, | 4424 | 0x5c, 0x68, 0xa1, 0xd2, 0x0f, 0xb4, 0xf8, 0xf6, 0x8f, 0x36, 0xe1, 0x99, |
| 4491 | 0x22, 0xdc, 0x13, 0xb7, 0xac, 0x37, 0xe3, 0x96, 0x55, 0x88, 0x9b, 0x9e, | 4425 | 0xb9, 0xdf, 0xe5, 0xe3, 0x39, 0x56, 0x3f, 0xed, 0x13, 0x0d, 0xab, 0x1b, |
| 4492 | 0x15, 0xab, 0x14, 0x1c, 0x5b, 0xc6, 0xef, 0x2a, 0x84, 0x93, 0x0d, 0x64, | 4426 | 0x10, 0x49, 0x6e, 0x01, 0xf7, 0x46, 0xf9, 0x4c, 0xaa, 0x81, 0xdb, 0xe2, |
| 4493 | 0x5f, 0xde, 0x65, 0x5a, 0x70, 0x2b, 0x54, 0xd3, 0xa4, 0x20, 0x17, 0x5a, | 4427 | 0x83, 0xd8, 0x3a, 0xc6, 0xfb, 0x6b, 0x3f, 0xef, 0xfa, 0x64, 0xcc, 0xfc, |
| 4494 | 0xa8, 0xf6, 0x00, 0x8d, 0xfe, 0x43, 0x43, 0xf5, 0xf8, 0xfe, 0xcc, 0xef, | 4428 | 0x5b, 0x37, 0xd1, 0xbf, 0xba, 0xb3, 0x2d, 0xe5, 0xb1, 0xde, 0x55, 0x3a, |
| 4495 | 0xf2, 0xf1, 0x1d, 0xbb, 0x9f, 0x76, 0x45, 0xc7, 0xba, 0x5a, 0x44, 0x92, | 4429 | 0x49, 0x75, 0x40, 0x23, 0xca, 0x33, 0x6a, 0x65, 0xb1, 0x48, 0xbe, 0xe9, |
| 4496 | 0xf7, 0x80, 0x7b, 0xa3, 0x7c, 0xa6, 0xd5, 0xc4, 0x2d, 0xf1, 0x3e, 0xec, | 4430 | 0x45, 0x24, 0xd8, 0x4c, 0xb1, 0x6a, 0x8e, 0x7c, 0x77, 0xa6, 0xcc, 0x75, |
| 4497 | 0x18, 0xe6, 0x7d, 0xb6, 0x3a, 0xe3, 0xca, 0xb0, 0xf5, 0xd7, 0x1e, 0xa2, | 4431 | 0xc0, 0x2f, 0xbb, 0xcc, 0x89, 0x45, 0x98, 0x9e, 0xa3, 0xb9, 0xb2, 0x6a, |
| 4498 | 0x7f, 0x5d, 0x7b, 0x73, 0xca, 0x6b, 0xbf, 0xe3, 0xe4, 0x34, 0xd6, 0x8f, | 4432 | 0xcf, 0x47, 0x84, 0xf3, 0xea, 0x74, 0xb3, 0xc1, 0xa3, 0x47, 0x4e, 0xb7, |
| 4499 | 0xd5, 0xa1, 0x34, 0xa5, 0x95, 0x97, 0x88, 0xe4, 0x1b, 0x3e, 0x44, 0x82, | 4433 | 0x09, 0x09, 0x97, 0x97, 0x9b, 0x66, 0x6f, 0xa7, 0x3a, 0x5c, 0x2f, 0x30, |
| 4500 | 0x0d, 0x14, 0xab, 0x66, 0xc8, 0x77, 0xa7, 0x4a, 0x5c, 0x07, 0x2c, 0x30, | 4434 | 0xe4, 0xd0, 0xd5, 0x44, 0xbb, 0x84, 0xaf, 0x06, 0x11, 0xe9, 0x39, 0x8b, |
| 4501 | 0xac, 0xd1, 0x45, 0x98, 0x9c, 0xa1, 0xb9, 0xb2, 0x5a, 0xe7, 0x07, 0x84, | 4435 | 0x48, 0xff, 0x39, 0x8a, 0x61, 0xcf, 0x96, 0xf9, 0x9c, 0xef, 0x23, 0xf8, |
| 4502 | 0xf3, 0xaa, 0x0d, 0xab, 0xd6, 0x6b, 0x44, 0xce, 0x36, 0x0b, 0x07, 0x66, | 4436 | 0xdb, 0xb1, 0x85, 0x38, 0x3e, 0xf3, 0x50, 0xb5, 0x27, 0x06, 0xcf, 0x8d, |
| 4503 | 0xdb, 0x2c, 0xab, 0xab, 0x5d, 0x1b, 0xa8, 0x11, 0xe8, 0x97, 0x0c, 0x2d, | 4437 | 0x2b, 0x74, 0x1c, 0x26, 0xbd, 0x9e, 0xd4, 0x6a, 0x28, 0xae, 0xcb, 0x70, |
| 4504 | 0xd1, 0xe2, 0xc0, 0xd7, 0x82, 0x88, 0x74, 0xbe, 0x89, 0x48, 0xcf, 0x05, | 4438 | 0xb4, 0x42, 0x6e, 0xa4, 0x3a, 0x21, 0xf6, 0xb8, 0x69, 0x2e, 0x6b, 0xb5, |
| 4505 | 0x8a, 0x61, 0x4f, 0x95, 0xf8, 0x9c, 0xf0, 0x23, 0xf8, 0xeb, 0xe1, 0x85, | 4439 | 0x6b, 0x9e, 0x65, 0xb3, 0xd7, 0xbe, 0xa3, 0x30, 0xdf, 0xef, 0x09, 0x92, |
| 4506 | 0x38, 0x35, 0xd5, 0x3f, 0xd7, 0x13, 0x83, 0xf7, 0xfa, 0x55, 0x06, 0x8e, | 4440 | 0xfe, 0xda, 0x52, 0x5b, 0xc5, 0x49, 0xd3, 0xf8, 0x43, 0x41, 0x3c, 0xdf, |
| 4507 | 0x0f, 0x87, 0xc8, 0x7e, 0xdc, 0x14, 0xd7, 0x65, 0x48, 0x4d, 0x90, 0xeb, | 4441 | 0x56, 0x0f, 0x0f, 0xf3, 0x2d, 0x63, 0xe7, 0x04, 0xf7, 0xe1, 0x58, 0x6f, |
| 4508 | 0xa8, 0x4e, 0x88, 0x3d, 0x66, 0x59, 0x2b, 0x9a, 0x2a, 0x35, 0xcf, 0x8a, | 4442 | 0xf0, 0xf4, 0xc4, 0x79, 0x9f, 0x9c, 0x75, 0x54, 0xf1, 0xac, 0x8b, 0x53, |
| 4509 | 0xe9, 0x6b, 0xdf, 0x71, 0x98, 0xef, 0xf7, 0x04, 0x49, 0x7f, 0xcd, 0xa9, | 4443 | 0x4c, 0x14, 0x3e, 0xc2, 0x53, 0x86, 0xbb, 0x9b, 0xf2, 0x53, 0xed, 0x18, |
| 4510 | 0x1d, 0xe2, 0x8c, 0x65, 0xfe, 0x81, 0x20, 0x9e, 0x7b, 0x6a, 0xe0, 0x65, | 4444 | 0xbf, 0x2f, 0xe1, 0xc5, 0x63, 0x14, 0x37, 0x2e, 0x69, 0x75, 0xd8, 0xdf, |
| 4511 | 0xbe, 0x65, 0xec, 0x1e, 0xe5, 0x3e, 0x1c, 0xeb, 0x0d, 0xde, 0xce, 0x38, | 4445 | 0xc8, 0xb6, 0xc3, 0x74, 0x72, 0xcf, 0x70, 0x1b, 0xee, 0xe5, 0x77, 0x4e, |
| 4512 | 0xef, 0x97, 0xb3, 0x8e, 0xca, 0xde, 0x0d, 0x71, 0x8a, 0x89, 0xc2, 0x4f, | 4446 | 0xca, 0xbf, 0x6b, 0x9d, 0x0d, 0xa4, 0x6b, 0x84, 0x0d, 0x98, 0x8e, 0xf9, |
| 4513 | 0x78, 0xca, 0xf4, 0x74, 0x50, 0x7e, 0xaa, 0x1a, 0xe6, 0xf7, 0x2d, 0x7c, | 4447 | 0xf5, 0x7b, 0xb0, 0x78, 0x94, 0xf5, 0x78, 0xac, 0x2b, 0x48, 0x32, 0x7a, |
| 4514 | 0x38, 0x40, 0x71, 0xe3, 0xb2, 0x5e, 0x8d, 0x43, 0x75, 0x6a, 0x82, 0xeb, | 4448 | 0x82, 0xec, 0xc2, 0xa1, 0x77, 0x43, 0x26, 0x5b, 0x5c, 0x1b, 0xbf, 0x76, |
| 4515 | 0xe9, 0x27, 0x4b, 0xdc, 0x33, 0xdc, 0x89, 0xed, 0xfc, 0xbe, 0x4a, 0x69, | 4449 | 0x0e, 0x75, 0xe8, 0x9c, 0x44, 0xf5, 0x9d, 0xc4, 0xfb, 0x79, 0x4a, 0xe2, |
| 4516 | 0xb5, 0x7d, 0xb6, 0x90, 0xae, 0x11, 0x36, 0x60, 0x3a, 0xe6, 0xd7, 0xef, | 4450 | 0x88, 0xb8, 0x76, 0xce, 0x7c, 0x3d, 0xf7, 0x13, 0x8d, 0x19, 0x3b, 0x2f, |
| 4517 | 0xc4, 0x92, 0x21, 0xd6, 0xe3, 0xc7, 0x6b, 0x82, 0x24, 0xa3, 0xc7, 0xc9, | 4451 | 0x1d, 0xa6, 0xbc, 0xf4, 0x4a, 0x8e, 0x7d, 0xe4, 0x17, 0x96, 0x8f, 0x38, |
| 4518 | 0x2e, 0x24, 0xa3, 0x03, 0xf2, 0x90, 0x65, 0xdd, 0x18, 0xbf, 0x76, 0x0e, | 4452 | 0x28, 0xd6, 0xae, 0x49, 0x87, 0x70, 0x4e, 0x83, 0x5a, 0x83, 0x18, 0xd1, |
| 4519 | 0xad, 0xff, 0x82, 0x83, 0xea, 0x3b, 0x07, 0xef, 0xeb, 0xa9, 0x89, 0x13, | 4453 | 0x1d, 0xe9, 0xe9, 0xae, 0x62, 0x3e, 0x17, 0xc5, 0xff, 0x99, 0x9c, 0x32, |
| 4520 | 0xe2, 0xda, 0x39, 0x0b, 0x35, 0xdc, 0x4f, 0x34, 0xa7, 0x2a, 0x79, 0xe9, | 4454 | 0x68, 0xf5, 0x9f, 0x54, 0xa5, 0x8f, 0x3f, 0x79, 0xef, 0x3f, 0xa8, 0x0f, |
| 4521 | 0x38, 0xe5, 0xa5, 0x97, 0x73, 0xec, 0x23, 0xf5, 0x06, 0xfb, 0x88, 0x44, | 4455 | 0xa1, 0x61, 0x25, 0x70, 0x7e, 0x94, 0xfb, 0x55, 0xbc, 0xcf, 0x35, 0x2c, |
| 4522 | 0xb1, 0x76, 0x7d, 0x3a, 0x84, 0x0b, 0x3a, 0x34, 0x37, 0x62, 0x44, 0x77, | 4456 | 0xae, 0xf0, 0x7b, 0x61, 0xb5, 0x43, 0x78, 0x2f, 0xce, 0xef, 0x5b, 0xb1, |
| 4523 | 0xa4, 0xbb, 0x63, 0x0e, 0xf3, 0xb9, 0x28, 0xfe, 0x4f, 0xe5, 0x78, 0xaf, | 4457 | 0xef, 0x3d, 0x0c, 0xf6, 0xbd, 0x06, 0x1a, 0xfb, 0xc9, 0x68, 0x38, 0xd4, |
| 4524 | 0x4d, 0xa0, 0x46, 0x63, 0x1b, 0xb0, 0x73, 0x01, 0xc5, 0xb4, 0x7e, 0xd4, | 4458 | 0x43, 0x7e, 0x33, 0x00, 0xeb, 0xbc, 0x90, 0x36, 0x6b, 0xf7, 0xc7, 0x93, |
| 4525 | 0xae, 0x06, 0x2e, 0x0d, 0xf1, 0xfe, 0x8c, 0x86, 0x03, 0xa5, 0x01, 0xd1, | 4459 | 0xa7, 0xaa, 0xfb, 0x5b, 0x91, 0xea, 0xde, 0x5c, 0xb4, 0xd0, 0x23, 0x2e, |
| 4526 | 0x30, 0xf4, 0x5b, 0x2b, 0x54, 0x35, 0xbf, 0x07, 0xf8, 0x30, 0xef, 0x01, | 4460 | 0x15, 0x98, 0xa6, 0xb7, 0x89, 0xa6, 0x6e, 0xf1, 0xe1, 0xec, 0x3a, 0x71, |
| 4527 | 0x92, 0x0d, 0xf4, 0xdb, 0xe7, 0x7c, 0xde, 0x4c, 0xf3, 0x39, 0x9f, 0x70, | 4461 | 0x71, 0xb6, 0x57, 0x9c, 0x2d, 0x70, 0x4c, 0xfe, 0x79, 0xd7, 0xae, 0x1c, |
| 4528 | 0x68, 0x13, 0xf9, 0x4e, 0x2f, 0x9a, 0xf5, 0x69, 0xc2, 0xce, 0xb3, 0x44, | 4462 | 0xe7, 0xb3, 0x3b, 0xc5, 0xbb, 0xf9, 0x0d, 0xe2, 0x42, 0xa1, 0x5f, 0x7c, |
| 4529 | 0x67, 0x93, 0xa8, 0xec, 0x73, 0x45, 0xe6, 0xf6, 0xe9, 0x96, 0xe5, 0x3b, | 4463 | 0x34, 0x6b, 0xe0, 0xfe, 0x78, 0x2f, 0x0a, 0x63, 0xf0, 0xbb, 0xf5, 0xfb, |
| 4530 | 0x45, 0x4d, 0x81, 0x69, 0x0a, 0x10, 0x4d, 0x1d, 0xa2, 0xfa, 0xd8, 0x06, | 4464 | 0xc5, 0xa5, 0xbc, 0xdd, 0x27, 0xbc, 0x50, 0x68, 0xf1, 0x15, 0xd2, 0x5c, |
| 4531 | 0xe1, 0x3b, 0xd6, 0x25, 0xa4, 0x02, 0xc7, 0xe4, 0x3a, 0x63, 0x4f, 0x8e, | 4465 | 0x03, 0x1f, 0xa3, 0x1a, 0x78, 0x91, 0xef, 0x99, 0xc9, 0x80, 0xaf, 0x34, |
| 4532 | 0xf3, 0xd9, 0x66, 0xe1, 0x3c, 0xba, 0x45, 0x78, 0x0b, 0x3d, 0xc2, 0x7f, | 4466 | 0xa9, 0x0c, 0xde, 0x23, 0x4c, 0xf3, 0xb6, 0xd8, 0x69, 0xd6, 0xa1, 0xf9, |
| 4533 | 0xcc, 0xc4, 0xfd, 0xf1, 0x2e, 0x9c, 0x1b, 0xe6, 0xb3, 0x6c, 0xf7, 0x89, | 4467 | 0x5a, 0xcc, 0xc6, 0x07, 0x3b, 0x49, 0x1e, 0x9b, 0x29, 0xb7, 0x4c, 0x6b, |
| 4534 | 0x9a, 0xb9, 0xbd, 0x39, 0x6f, 0xa1, 0xd1, 0x5f, 0x48, 0x73, 0x7f, 0xf7, | 4468 | 0x6d, 0x55, 0x2c, 0xc2, 0xb6, 0xce, 0xbc, 0x72, 0xae, 0xe6, 0xfd, 0xa7, |
| 4535 | 0xe3, 0x35, 0xe9, 0xa1, 0x45, 0xfe, 0xa7, 0xc6, 0x02, 0xfe, 0x27, 0xc7, | 4469 | 0x21, 0x38, 0x3b, 0x81, 0xbd, 0xe9, 0xcf, 0x79, 0xbd, 0x44, 0xbc, 0x1a, |
| 4536 | 0xd4, 0xfe, 0x7d, 0xc2, 0xb2, 0x76, 0xc6, 0xfe, 0x03, 0xeb, 0xd0, 0x6a, | 4470 | 0xae, 0x21, 0x7c, 0x4c, 0xbc, 0xbe, 0x3e, 0xfa, 0xf9, 0x7e, 0x9e, 0x93, |
| 4537 | 0x8e, 0x55, 0xf0, 0xc1, 0x6e, 0x92, 0xc7, 0x36, 0xca, 0x2d, 0x93, 0x7a, | 4471 | 0xc6, 0xee, 0x4a, 0x87, 0x53, 0x47, 0x84, 0x52, 0x29, 0xd8, 0xfb, 0x79, |
| 4538 | 0xf3, 0x1c, 0x16, 0x51, 0x53, 0xfc, 0xee, 0x1b, 0xfd, 0x77, 0x73, 0x6e, | 4472 | 0x9a, 0x57, 0x52, 0x4e, 0x8f, 0x50, 0x1d, 0xd1, 0x2a, 0xd9, 0xbc, 0x26, |
| 4539 | 0xe3, 0x7d, 0x4d, 0x67, 0x3b, 0x28, 0xee, 0x7e, 0xc6, 0x6b, 0xcd, 0x10, | 4473 | 0xaa, 0xbc, 0xde, 0x44, 0xbc, 0x5e, 0x2c, 0x70, 0x7d, 0xfe, 0x76, 0xd7, |
| 4540 | 0x9f, 0x51, 0xeb, 0x87, 0xff, 0x4b, 0xf6, 0xf5, 0xce, 0x7d, 0xb6, 0xaf, | 4474 | 0x1b, 0xa3, 0x63, 0x66, 0x3d, 0xd5, 0xff, 0x75, 0x6a, 0xb7, 0xb8, 0x40, |
| 4541 | 0x97, 0x78, 0x52, 0xa8, 0xe5, 0x19, 0xe2, 0xb7, 0xca, 0xf1, 0xb9, 0x3d, | 4475 | 0x3c, 0x7f, 0x48, 0x3c, 0x7f, 0x5c, 0xb8, 0x53, 0x7c, 0x44, 0x7c, 0x5e, |
| 4542 | 0xbd, 0xb9, 0xfd, 0xbc, 0x4e, 0xe1, 0x2b, 0x70, 0x7d, 0x1e, 0x30, 0x5e, | 4476 | 0x2c, 0xf0, 0x1e, 0x9e, 0x5b, 0x7c, 0x98, 0xb3, 0x79, 0xfc, 0xf0, 0x2a, |
| 4543 | 0x1f, 0xea, 0x10, 0xde, 0x63, 0xc3, 0x94, 0x1f, 0x37, 0x10, 0xcf, 0x7c, | 4477 | 0x8f, 0x41, 0xdf, 0xfe, 0x74, 0x93, 0xef, 0xd1, 0x49, 0xbf, 0x6f, 0xcf, |
| 4544 | 0x76, 0xac, 0x4b, 0xf8, 0x0b, 0x9b, 0x85, 0x8f, 0xf8, 0xac, 0x26, 0x3e, | 4478 | 0xa4, 0x69, 0x7e, 0xa8, 0x49, 0x3e, 0xe6, 0xeb, 0x55, 0xed, 0x8b, 0x7c, |
| 4545 | 0x71, 0xcc, 0x23, 0xbc, 0xc4, 0xa3, 0x87, 0x78, 0xf4, 0xce, 0xf1, 0xe8, | 4479 | 0xdd, 0x4c, 0x7c, 0xf1, 0xfe, 0xeb, 0x6f, 0xeb, 0x70, 0x9e, 0xaf, 0xc7, |
| 4546 | 0x29, 0x04, 0xfd, 0xe9, 0x74, 0xbd, 0xff, 0xd1, 0x31, 0xc5, 0xbf, 0x6f, | 4480 | 0xac, 0x73, 0x6c, 0xf6, 0x19, 0xa9, 0x7a, 0xde, 0x83, 0x25, 0xbe, 0x7c, |
| 4547 | 0xcc, 0xb2, 0xde, 0xd7, 0x15, 0x3f, 0xf3, 0xf5, 0xaa, 0xfe, 0x45, 0xbe, | 4481 | 0x74, 0xfd, 0x95, 0x7f, 0xcd, 0xd7, 0xe0, 0x05, 0xd2, 0x5f, 0xb1, 0xca, |
| 4548 | 0x6e, 0x20, 0xbe, 0x2a, 0x7b, 0xb1, 0xa4, 0xc3, 0x14, 0xeb, 0x90, 0xcf, | 4482 | 0x57, 0xfd, 0xbf, 0xc9, 0x17, 0xd5, 0xba, 0x63, 0xcc, 0x57, 0xa3, 0xfe, |
| 4549 | 0x71, 0xcc, 0xf3, 0x75, 0x30, 0xcd, 0xfb, 0x95, 0xbc, 0x6f, 0x39, 0x20, | 4483 | 0xc6, 0x98, 0x49, 0xfa, 0x92, 0xac, 0x77, 0xc1, 0x8a, 0xd9, 0x1d, 0x78, |
| 4550 | 0x56, 0x10, 0x5f, 0x65, 0xe2, 0x6b, 0xe5, 0x97, 0xf0, 0xf5, 0xe1, 0x35, | 4484 | 0x25, 0xc6, 0xef, 0xc7, 0x45, 0x42, 0x47, 0x28, 0x9e, 0xce, 0x96, 0x3d, |
| 4551 | 0x7c, 0xbd, 0xfa, 0xf7, 0xf2, 0xe5, 0x11, 0xcb, 0x87, 0x39, 0x0e, 0xdd, | 4485 | 0xa2, 0xc6, 0xda, 0x87, 0xc5, 0x1b, 0xb5, 0x44, 0xd3, 0xe1, 0x19, 0x7e, |
| 4552 | 0x66, 0xc8, 0xc3, 0x16, 0x61, 0x47, 0x07, 0xbe, 0x3f, 0x05, 0x14, 0xb3, | 4486 | 0xff, 0x0b, 0x1a, 0x61, 0x01, 0x3f, 0xbf, 0x37, 0x37, 0x0d, 0xee, 0x97, |
| 4553 | 0xbb, 0x20, 0x53, 0xbc, 0x39, 0x1d, 0x8f, 0x84, 0x5e, 0xa1, 0x7a, 0x72, | 4487 | 0xf5, 0x8a, 0x86, 0x22, 0xef, 0xbb, 0x6e, 0x10, 0xbe, 0x22, 0x9f, 0xa3, |
| 4554 | 0xba, 0xe4, 0x15, 0xcb, 0xec, 0x3d, 0x59, 0xac, 0x90, 0x89, 0xa6, 0x19, | 4488 | 0xeb, 0x11, 0xde, 0x62, 0xb7, 0xf0, 0x1c, 0x32, 0x4c, 0x8f, 0xba, 0x4e, |
| 4555 | 0xfb, 0x5d, 0x33, 0xe8, 0xb5, 0x1a, 0xeb, 0x52, 0x3b, 0xbb, 0x15, 0x91, | 4489 | 0xd4, 0x1d, 0xba, 0x53, 0x78, 0xaa, 0x7b, 0xb0, 0xee, 0x62, 0xd0, 0x97, |
| 4556 | 0x72, 0xc4, 0xd1, 0x25, 0x12, 0x05, 0xde, 0x83, 0xdd, 0x22, 0x56, 0xda, | 4490 | 0xbe, 0x46, 0x1e, 0x17, 0xb5, 0x9b, 0x2d, 0x79, 0xbc, 0xa6, 0xcd, 0xef, |
| 4557 | 0xfb, 0xaf, 0x9d, 0xe2, 0xfa, 0x42, 0x87, 0x68, 0x21, 0xbb, 0x68, 0x3e, | 4491 | 0x1f, 0x5a, 0xe7, 0x10, 0xf9, 0x1c, 0x9c, 0x27, 0x48, 0xb5, 0x53, 0x43, |
| 4558 | 0xc6, 0xe7, 0xc1, 0x36, 0x8b, 0xe6, 0x39, 0x79, 0x2c, 0x27, 0x79, 0x0c, | 4492 | 0xb5, 0x76, 0x7a, 0x37, 0xc6, 0xe7, 0x7b, 0x0c, 0x92, 0x3f, 0x42, 0x4e, |
| 4559 | 0x7d, 0x4e, 0x1e, 0x1b, 0x6c, 0x79, 0xfc, 0x4c, 0xbf, 0x78, 0x4d, 0x0f, | 4493 | 0x5d, 0xe9, 0x3f, 0x21, 0xd4, 0xd4, 0xfd, 0x22, 0x79, 0xab, 0x97, 0xea, |
| 4560 | 0x8d, 0xeb, 0x2a, 0xca, 0x86, 0x54, 0x3b, 0xd5, 0xce, 0xd5, 0x4e, 0x6f, | 4494 | 0x9f, 0xad, 0xb1, 0x48, 0xf2, 0x06, 0x11, 0x49, 0x38, 0x05, 0xe7, 0x15, |
| 4561 | 0xc5, 0xf8, 0x9c, 0x8f, 0x69, 0xd5, 0x68, 0x08, 0x39, 0x0d, 0xb5, 0xe7, | 4495 | 0x4d, 0xae, 0x2d, 0x19, 0xd8, 0x43, 0xf1, 0xed, 0xe5, 0x9c, 0x83, 0xb0, |
| 4562 | 0xb4, 0xd0, 0x52, 0xf7, 0x89, 0xe4, 0x26, 0x1f, 0xd5, 0x3f, 0x3b, 0x62, | 4496 | 0x03, 0xbf, 0x43, 0xe6, 0xc4, 0x5a, 0xbf, 0x17, 0x4f, 0x12, 0xee, 0x78, |
| 4563 | 0x91, 0xe4, 0x72, 0x11, 0x49, 0x38, 0x05, 0xe7, 0x15, 0x5d, 0xae, 0x2a, | 4497 | 0x22, 0x3b, 0x88, 0x27, 0x0b, 0x03, 0x78, 0xa2, 0xf0, 0xaf, 0xde, 0x95, |
| 4564 | 0x9a, 0xd8, 0x47, 0xf1, 0xed, 0xc5, 0x9c, 0x44, 0xd8, 0x81, 0xdf, 0x3f, | 4498 | 0x91, 0x3d, 0xfa, 0xf9, 0x95, 0xd5, 0x33, 0x08, 0x89, 0xeb, 0x23, 0x1c, |
| 4565 | 0x73, 0xe2, 0x46, 0x82, 0x12, 0x4f, 0x10, 0xee, 0x78, 0x3c, 0xdb, 0x87, | 4499 | 0xa3, 0x1f, 0x6e, 0x97, 0x23, 0x5c, 0xeb, 0xbe, 0x75, 0xf3, 0x07, 0x2a, |
| 4566 | 0x27, 0xf2, 0xbd, 0x78, 0x3c, 0xff, 0x77, 0xde, 0xb5, 0x91, 0xbd, 0x46, | 4500 | 0xfb, 0xa2, 0xba, 0xe2, 0x94, 0x85, 0x45, 0x1e, 0x59, 0x7e, 0xc8, 0x3a, |
| 4567 | 0x63, 0xa2, 0x72, 0x16, 0xe1, 0xe3, 0xc4, 0x75, 0x11, 0x96, 0xcd, 0x89, | 4501 | 0x1b, 0x95, 0xbe, 0x69, 0x97, 0xf5, 0x4e, 0xe7, 0x3b, 0x2b, 0x36, 0xa9, |
| 4568 | 0x16, 0x39, 0xc2, 0xb5, 0xae, 0xf3, 0x77, 0xdf, 0xd5, 0xd8, 0x17, 0x7b, | 4502 | 0xec, 0x0f, 0x0f, 0xc7, 0xd7, 0x58, 0xf9, 0xf5, 0x6f, 0x56, 0xd9, 0x3d, |
| 4569 | 0x56, 0xbd, 0x64, 0x63, 0x91, 0x93, 0x6d, 0xc7, 0xec, 0x33, 0x52, 0xe5, | 4503 | 0x9a, 0x77, 0x56, 0x5d, 0x6f, 0xf7, 0xd1, 0x56, 0x45, 0xad, 0xcf, 0x33, |
| 4570 | 0x95, 0x7b, 0xec, 0x77, 0x41, 0x7d, 0xab, 0xef, 0xd2, 0xd8, 0x1f, 0x4e, | 4504 | 0xab, 0xec, 0xfd, 0xed, 0x4f, 0x57, 0xb5, 0x5a, 0x9f, 0xe7, 0x57, 0xd9, |
| 4571 | 0xc4, 0xd7, 0xdb, 0xf9, 0xb5, 0x71, 0x6d, 0xe5, 0x3d, 0x99, 0xe0, 0xda, | 4505 | 0x3e, 0xf5, 0xee, 0x2a, 0xd5, 0xfa, 0xfc, 0x87, 0x55, 0x76, 0x5e, 0xbe, |
| 4572 | 0x4a, 0xaf, 0x26, 0xb0, 0x36, 0x6a, 0x7f, 0x86, 0xd6, 0x56, 0xf6, 0xba, | 4506 | 0xb4, 0x6a, 0xc9, 0xd5, 0xf7, 0x63, 0xf8, 0xef, 0xff, 0x00, 0x88, 0xf4, |
| 4573 | 0xf5, 0xb5, 0x4d, 0xf6, 0x67, 0x74, 0x6d, 0xc5, 0xa7, 0xb4, 0xb5, 0x9a, | 4507 | 0x23, 0x6f, 0xec, 0x3a, 0x00, 0x00, 0x00 }; |
| 4574 | 0xfd, 0x19, 0x5f, 0x5b, 0xc9, 0xcb, 0x2d, 0x6b, 0x97, 0x5e, 0x7d, 0xbf, | ||
| 4575 | 0x86, 0xff, 0xfe, 0x17, 0x9f, 0xed, 0x4e, 0xb2, 0x20, 0x3b, 0x00, 0x00, | ||
| 4576 | 0x00 }; | ||
| 4577 | 4508 | ||
| 4578 | static const u32 bnx2_TXP_b09FwData[(0x0/4) + 1] = { 0x0 }; | 4509 | static const u32 bnx2_TXP_b09FwData[(0x0/4) + 1] = { 0x0 }; |
| 4579 | static const u32 bnx2_TXP_b09FwRodata[(0x30/4) + 1] = { | 4510 | static const u32 bnx2_TXP_b09FwRodata[(0x30/4) + 1] = { |
| @@ -4582,15 +4513,15 @@ static const u32 bnx2_TXP_b09FwRodata[(0x30/4) + 1] = { | |||
| 4582 | 0x00000000 }; | 4513 | 0x00000000 }; |
| 4583 | 4514 | ||
| 4584 | static struct fw_info bnx2_txp_fw_09 = { | 4515 | static struct fw_info bnx2_txp_fw_09 = { |
| 4585 | /* Firmware version: 4.4.23 */ | 4516 | /* Firmware version: 4.6.15 */ |
| 4586 | .ver_major = 0x4, | 4517 | .ver_major = 0x4, |
| 4587 | .ver_minor = 0x4, | 4518 | .ver_minor = 0x6, |
| 4588 | .ver_fix = 0x17, | 4519 | .ver_fix = 0xf, |
| 4589 | 4520 | ||
| 4590 | .start_addr = 0x08000094, | 4521 | .start_addr = 0x08000098, |
| 4591 | 4522 | ||
| 4592 | .text_addr = 0x08000000, | 4523 | .text_addr = 0x08000000, |
| 4593 | .text_len = 0x3b1c, | 4524 | .text_len = 0x3ae8, |
| 4594 | .text_index = 0x0, | 4525 | .text_index = 0x0, |
| 4595 | .gz_text = bnx2_TXP_b09FwText, | 4526 | .gz_text = bnx2_TXP_b09FwText, |
| 4596 | .gz_text_len = sizeof(bnx2_TXP_b09FwText), | 4527 | .gz_text_len = sizeof(bnx2_TXP_b09FwText), |
| @@ -4600,15 +4531,15 @@ static struct fw_info bnx2_txp_fw_09 = { | |||
| 4600 | .data_index = 0x0, | 4531 | .data_index = 0x0, |
| 4601 | .data = bnx2_TXP_b09FwData, | 4532 | .data = bnx2_TXP_b09FwData, |
| 4602 | 4533 | ||
| 4603 | .sbss_addr = 0x08003b80, | 4534 | .sbss_addr = 0x08003b40, |
| 4604 | .sbss_len = 0x6c, | 4535 | .sbss_len = 0x6c, |
| 4605 | .sbss_index = 0x0, | 4536 | .sbss_index = 0x0, |
| 4606 | 4537 | ||
| 4607 | .bss_addr = 0x08003bec, | 4538 | .bss_addr = 0x08003bac, |
| 4608 | .bss_len = 0x24c, | 4539 | .bss_len = 0x24c, |
| 4609 | .bss_index = 0x0, | 4540 | .bss_index = 0x0, |
| 4610 | 4541 | ||
| 4611 | .rodata_addr = 0x08003b1c, | 4542 | .rodata_addr = 0x08003ae8, |
| 4612 | .rodata_len = 0x30, | 4543 | .rodata_len = 0x30, |
| 4613 | .rodata_index = 0x0, | 4544 | .rodata_index = 0x0, |
| 4614 | .rodata = bnx2_TXP_b09FwRodata, | 4545 | .rodata = bnx2_TXP_b09FwRodata, |
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 9fb388388fb7..e0578fe8c0db 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
| @@ -4113,7 +4113,7 @@ static int bond_neigh_setup(struct net_device *dev, struct neigh_parms *parms) | |||
| 4113 | const struct net_device_ops *slave_ops | 4113 | const struct net_device_ops *slave_ops |
| 4114 | = slave->dev->netdev_ops; | 4114 | = slave->dev->netdev_ops; |
| 4115 | if (slave_ops->ndo_neigh_setup) | 4115 | if (slave_ops->ndo_neigh_setup) |
| 4116 | return slave_ops->ndo_neigh_setup(dev, parms); | 4116 | return slave_ops->ndo_neigh_setup(slave->dev, parms); |
| 4117 | } | 4117 | } |
| 4118 | return 0; | 4118 | return 0; |
| 4119 | } | 4119 | } |
diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c index 0089746b8d02..bab8a934c33d 100644 --- a/drivers/net/cxgb3/cxgb3_main.c +++ b/drivers/net/cxgb3/cxgb3_main.c | |||
| @@ -90,6 +90,7 @@ static const struct pci_device_id cxgb3_pci_tbl[] = { | |||
| 90 | CH_DEVICE(0x30, 2), /* T3B10 */ | 90 | CH_DEVICE(0x30, 2), /* T3B10 */ |
| 91 | CH_DEVICE(0x31, 3), /* T3B20 */ | 91 | CH_DEVICE(0x31, 3), /* T3B20 */ |
| 92 | CH_DEVICE(0x32, 1), /* T3B02 */ | 92 | CH_DEVICE(0x32, 1), /* T3B02 */ |
| 93 | CH_DEVICE(0x35, 6), /* T3C20-derived T3C10 */ | ||
| 93 | {0,} | 94 | {0,} |
| 94 | }; | 95 | }; |
| 95 | 96 | ||
diff --git a/drivers/net/cxgb3/t3_hw.c b/drivers/net/cxgb3/t3_hw.c index 2d1433077a8e..ac2a974dfe37 100644 --- a/drivers/net/cxgb3/t3_hw.c +++ b/drivers/net/cxgb3/t3_hw.c | |||
| @@ -512,6 +512,13 @@ static const struct adapter_info t3_adap_info[] = { | |||
| 512 | F_GPIO5_OUT_VAL | F_GPIO6_OUT_VAL | F_GPIO10_OUT_VAL, | 512 | F_GPIO5_OUT_VAL | F_GPIO6_OUT_VAL | F_GPIO10_OUT_VAL, |
| 513 | { S_GPIO9, S_GPIO3 }, SUPPORTED_10000baseT_Full | SUPPORTED_AUI, | 513 | { S_GPIO9, S_GPIO3 }, SUPPORTED_10000baseT_Full | SUPPORTED_AUI, |
| 514 | &mi1_mdio_ext_ops, "Chelsio T320"}, | 514 | &mi1_mdio_ext_ops, "Chelsio T320"}, |
| 515 | {}, | ||
| 516 | {}, | ||
| 517 | {1, 0, | ||
| 518 | F_GPIO1_OEN | F_GPIO2_OEN | F_GPIO4_OEN | F_GPIO6_OEN | F_GPIO7_OEN | | ||
| 519 | F_GPIO10_OEN | F_GPIO1_OUT_VAL | F_GPIO6_OUT_VAL | F_GPIO10_OUT_VAL, | ||
| 520 | { S_GPIO9 }, SUPPORTED_10000baseT_Full | SUPPORTED_AUI, | ||
| 521 | &mi1_mdio_ext_ops, "Chelsio T310" }, | ||
| 515 | }; | 522 | }; |
| 516 | 523 | ||
| 517 | /* | 524 | /* |
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index 5b910cf63740..b8251e827059 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c | |||
| @@ -6011,9 +6011,20 @@ static void nv_shutdown(struct pci_dev *pdev) | |||
| 6011 | if (netif_running(dev)) | 6011 | if (netif_running(dev)) |
| 6012 | nv_close(dev); | 6012 | nv_close(dev); |
| 6013 | 6013 | ||
| 6014 | nv_restore_mac_addr(pdev); | 6014 | /* |
| 6015 | * Restore the MAC so a kernel started by kexec won't get confused. | ||
| 6016 | * If we really go for poweroff, we must not restore the MAC, | ||
| 6017 | * otherwise the MAC for WOL will be reversed at least on some boards. | ||
| 6018 | */ | ||
| 6019 | if (system_state != SYSTEM_POWER_OFF) { | ||
| 6020 | nv_restore_mac_addr(pdev); | ||
| 6021 | } | ||
| 6015 | 6022 | ||
| 6016 | pci_disable_device(pdev); | 6023 | pci_disable_device(pdev); |
| 6024 | /* | ||
| 6025 | * Apparently it is not possible to reinitialise from D3 hot, | ||
| 6026 | * only put the device into D3 if we really go for poweroff. | ||
| 6027 | */ | ||
| 6017 | if (system_state == SYSTEM_POWER_OFF) { | 6028 | if (system_state == SYSTEM_POWER_OFF) { |
| 6018 | if (pci_enable_wake(pdev, PCI_D3cold, np->wolenabled)) | 6029 | if (pci_enable_wake(pdev, PCI_D3cold, np->wolenabled)) |
| 6019 | pci_enable_wake(pdev, PCI_D3hot, np->wolenabled); | 6030 | pci_enable_wake(pdev, PCI_D3hot, np->wolenabled); |
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index acae2d8cd688..9831b3f408aa 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c | |||
| @@ -1284,7 +1284,7 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 1284 | spin_lock_irqsave(&priv->txlock, flags); | 1284 | spin_lock_irqsave(&priv->txlock, flags); |
| 1285 | 1285 | ||
| 1286 | /* check if there is space to queue this packet */ | 1286 | /* check if there is space to queue this packet */ |
| 1287 | if (nr_frags > priv->num_txbdfree) { | 1287 | if ((nr_frags+1) > priv->num_txbdfree) { |
| 1288 | /* no space, stop the queue */ | 1288 | /* no space, stop the queue */ |
| 1289 | netif_stop_queue(dev); | 1289 | netif_stop_queue(dev); |
| 1290 | dev->stats.tx_fifo_errors++; | 1290 | dev->stats.tx_fifo_errors++; |
| @@ -1629,6 +1629,12 @@ static void gfar_schedule_cleanup(struct net_device *dev) | |||
| 1629 | if (netif_rx_schedule_prep(&priv->napi)) { | 1629 | if (netif_rx_schedule_prep(&priv->napi)) { |
| 1630 | gfar_write(&priv->regs->imask, IMASK_RTX_DISABLED); | 1630 | gfar_write(&priv->regs->imask, IMASK_RTX_DISABLED); |
| 1631 | __netif_rx_schedule(&priv->napi); | 1631 | __netif_rx_schedule(&priv->napi); |
| 1632 | } else { | ||
| 1633 | /* | ||
| 1634 | * Clear IEVENT, so interrupts aren't called again | ||
| 1635 | * because of the packets that have already arrived. | ||
| 1636 | */ | ||
| 1637 | gfar_write(&priv->regs->ievent, IEVENT_RTX_MASK); | ||
| 1632 | } | 1638 | } |
| 1633 | 1639 | ||
| 1634 | spin_unlock(&priv->rxlock); | 1640 | spin_unlock(&priv->rxlock); |
diff --git a/drivers/net/hp-plus.c b/drivers/net/hp-plus.c index 5e070f446635..0486cbe01adb 100644 --- a/drivers/net/hp-plus.c +++ b/drivers/net/hp-plus.c | |||
| @@ -467,7 +467,7 @@ init_module(void) | |||
| 467 | if (this_dev != 0) break; /* only autoprobe 1st one */ | 467 | if (this_dev != 0) break; /* only autoprobe 1st one */ |
| 468 | printk(KERN_NOTICE "hp-plus.c: Presently autoprobing (not recommended) for a single card.\n"); | 468 | printk(KERN_NOTICE "hp-plus.c: Presently autoprobing (not recommended) for a single card.\n"); |
| 469 | } | 469 | } |
| 470 | dev = alloc_ei_netdev(); | 470 | dev = alloc_eip_netdev(); |
| 471 | if (!dev) | 471 | if (!dev) |
| 472 | break; | 472 | break; |
| 473 | dev->irq = irq[this_dev]; | 473 | dev->irq = irq[this_dev]; |
diff --git a/drivers/net/irda/mcs7780.c b/drivers/net/irda/mcs7780.c index 7eafdca19f34..85e88daab21a 100644 --- a/drivers/net/irda/mcs7780.c +++ b/drivers/net/irda/mcs7780.c | |||
| @@ -585,7 +585,7 @@ static int mcs_speed_change(struct mcs_cb *mcs) | |||
| 585 | mcs_get_reg(mcs, MCS_RESV_REG, &rval); | 585 | mcs_get_reg(mcs, MCS_RESV_REG, &rval); |
| 586 | } while(cnt++ < 100 && (rval & MCS_IRINTX)); | 586 | } while(cnt++ < 100 && (rval & MCS_IRINTX)); |
| 587 | 587 | ||
| 588 | if(cnt >= 100) { | 588 | if (cnt > 100) { |
| 589 | IRDA_ERROR("unable to change speed\n"); | 589 | IRDA_ERROR("unable to change speed\n"); |
| 590 | ret = -EIO; | 590 | ret = -EIO; |
| 591 | goto error; | 591 | goto error; |
diff --git a/drivers/net/jme.c b/drivers/net/jme.c index 08b34051c646..a6e1a35a13cb 100644 --- a/drivers/net/jme.c +++ b/drivers/net/jme.c | |||
| @@ -957,13 +957,14 @@ jme_process_receive(struct jme_adapter *jme, int limit) | |||
| 957 | goto out_inc; | 957 | goto out_inc; |
| 958 | 958 | ||
| 959 | i = atomic_read(&rxring->next_to_clean); | 959 | i = atomic_read(&rxring->next_to_clean); |
| 960 | while (limit-- > 0) { | 960 | while (limit > 0) { |
| 961 | rxdesc = rxring->desc; | 961 | rxdesc = rxring->desc; |
| 962 | rxdesc += i; | 962 | rxdesc += i; |
| 963 | 963 | ||
| 964 | if ((rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_OWN)) || | 964 | if ((rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_OWN)) || |
| 965 | !(rxdesc->descwb.desccnt & RXWBDCNT_WBCPL)) | 965 | !(rxdesc->descwb.desccnt & RXWBDCNT_WBCPL)) |
| 966 | goto out; | 966 | goto out; |
| 967 | --limit; | ||
| 967 | 968 | ||
| 968 | desccnt = rxdesc->descwb.desccnt & RXWBDCNT_DCNT; | 969 | desccnt = rxdesc->descwb.desccnt & RXWBDCNT_DCNT; |
| 969 | 970 | ||
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c index 5f31bbb614af..13f11f402a99 100644 --- a/drivers/net/mv643xx_eth.c +++ b/drivers/net/mv643xx_eth.c | |||
| @@ -1175,7 +1175,7 @@ static void mib_counters_update(struct mv643xx_eth_private *mp) | |||
| 1175 | { | 1175 | { |
| 1176 | struct mib_counters *p = &mp->mib_counters; | 1176 | struct mib_counters *p = &mp->mib_counters; |
| 1177 | 1177 | ||
| 1178 | spin_lock(&mp->mib_counters_lock); | 1178 | spin_lock_bh(&mp->mib_counters_lock); |
| 1179 | p->good_octets_received += mib_read(mp, 0x00); | 1179 | p->good_octets_received += mib_read(mp, 0x00); |
| 1180 | p->good_octets_received += (u64)mib_read(mp, 0x04) << 32; | 1180 | p->good_octets_received += (u64)mib_read(mp, 0x04) << 32; |
| 1181 | p->bad_octets_received += mib_read(mp, 0x08); | 1181 | p->bad_octets_received += mib_read(mp, 0x08); |
| @@ -1208,7 +1208,7 @@ static void mib_counters_update(struct mv643xx_eth_private *mp) | |||
| 1208 | p->bad_crc_event += mib_read(mp, 0x74); | 1208 | p->bad_crc_event += mib_read(mp, 0x74); |
| 1209 | p->collision += mib_read(mp, 0x78); | 1209 | p->collision += mib_read(mp, 0x78); |
| 1210 | p->late_collision += mib_read(mp, 0x7c); | 1210 | p->late_collision += mib_read(mp, 0x7c); |
| 1211 | spin_unlock(&mp->mib_counters_lock); | 1211 | spin_unlock_bh(&mp->mib_counters_lock); |
| 1212 | 1212 | ||
| 1213 | mod_timer(&mp->mib_counters_timer, jiffies + 30 * HZ); | 1213 | mod_timer(&mp->mib_counters_timer, jiffies + 30 * HZ); |
| 1214 | } | 1214 | } |
| @@ -1575,7 +1575,7 @@ oom: | |||
| 1575 | return; | 1575 | return; |
| 1576 | } | 1576 | } |
| 1577 | 1577 | ||
| 1578 | mc_spec = kmalloc(0x200, GFP_KERNEL); | 1578 | mc_spec = kmalloc(0x200, GFP_ATOMIC); |
| 1579 | if (mc_spec == NULL) | 1579 | if (mc_spec == NULL) |
| 1580 | goto oom; | 1580 | goto oom; |
| 1581 | mc_other = mc_spec + (0x100 >> 2); | 1581 | mc_other = mc_spec + (0x100 >> 2); |
| @@ -2216,8 +2216,6 @@ static int mv643xx_eth_stop(struct net_device *dev) | |||
| 2216 | wrlp(mp, INT_MASK, 0x00000000); | 2216 | wrlp(mp, INT_MASK, 0x00000000); |
| 2217 | rdlp(mp, INT_MASK); | 2217 | rdlp(mp, INT_MASK); |
| 2218 | 2218 | ||
| 2219 | del_timer_sync(&mp->mib_counters_timer); | ||
| 2220 | |||
| 2221 | napi_disable(&mp->napi); | 2219 | napi_disable(&mp->napi); |
| 2222 | 2220 | ||
| 2223 | del_timer_sync(&mp->rx_oom); | 2221 | del_timer_sync(&mp->rx_oom); |
| @@ -2229,6 +2227,7 @@ static int mv643xx_eth_stop(struct net_device *dev) | |||
| 2229 | port_reset(mp); | 2227 | port_reset(mp); |
| 2230 | mv643xx_eth_get_stats(dev); | 2228 | mv643xx_eth_get_stats(dev); |
| 2231 | mib_counters_update(mp); | 2229 | mib_counters_update(mp); |
| 2230 | del_timer_sync(&mp->mib_counters_timer); | ||
| 2232 | 2231 | ||
| 2233 | skb_queue_purge(&mp->rx_recycle); | 2232 | skb_queue_purge(&mp->rx_recycle); |
| 2234 | 2233 | ||
diff --git a/drivers/net/netxen/netxen_nic.h b/drivers/net/netxen/netxen_nic.h index 9c78c963b721..f4dd9acb6877 100644 --- a/drivers/net/netxen/netxen_nic.h +++ b/drivers/net/netxen/netxen_nic.h | |||
| @@ -1203,7 +1203,7 @@ typedef struct { | |||
| 1203 | #define NETXEN_IS_MSI_FAMILY(adapter) \ | 1203 | #define NETXEN_IS_MSI_FAMILY(adapter) \ |
| 1204 | ((adapter)->flags & (NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED)) | 1204 | ((adapter)->flags & (NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED)) |
| 1205 | 1205 | ||
| 1206 | #define MSIX_ENTRIES_PER_ADAPTER 8 | 1206 | #define MSIX_ENTRIES_PER_ADAPTER 1 |
| 1207 | #define NETXEN_MSIX_TBL_SPACE 8192 | 1207 | #define NETXEN_MSIX_TBL_SPACE 8192 |
| 1208 | #define NETXEN_PCI_REG_MSIX_TBL 0x44 | 1208 | #define NETXEN_PCI_REG_MSIX_TBL 0x44 |
| 1209 | 1209 | ||
diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c index 645d384fe87e..13087782ac40 100644 --- a/drivers/net/netxen/netxen_nic_main.c +++ b/drivers/net/netxen/netxen_nic_main.c | |||
| @@ -76,6 +76,7 @@ static void netxen_nic_poll_controller(struct net_device *netdev); | |||
| 76 | #endif | 76 | #endif |
| 77 | static irqreturn_t netxen_intr(int irq, void *data); | 77 | static irqreturn_t netxen_intr(int irq, void *data); |
| 78 | static irqreturn_t netxen_msi_intr(int irq, void *data); | 78 | static irqreturn_t netxen_msi_intr(int irq, void *data); |
| 79 | static irqreturn_t netxen_msix_intr(int irq, void *data); | ||
| 79 | 80 | ||
| 80 | /* PCI Device ID Table */ | 81 | /* PCI Device ID Table */ |
| 81 | #define ENTRY(device) \ | 82 | #define ENTRY(device) \ |
| @@ -200,9 +201,9 @@ static int nx_set_dma_mask(struct netxen_adapter *adapter, uint8_t revision_id) | |||
| 200 | adapter->pci_using_dac = 1; | 201 | adapter->pci_using_dac = 1; |
| 201 | return 0; | 202 | return 0; |
| 202 | } | 203 | } |
| 204 | set_32_bit_mask: | ||
| 203 | #endif /* CONFIG_IA64 */ | 205 | #endif /* CONFIG_IA64 */ |
| 204 | 206 | ||
| 205 | set_32_bit_mask: | ||
| 206 | err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); | 207 | err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); |
| 207 | if (!err) | 208 | if (!err) |
| 208 | err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); | 209 | err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); |
| @@ -371,67 +372,6 @@ static void netxen_set_port_mode(struct netxen_adapter *adapter) | |||
| 371 | } | 372 | } |
| 372 | } | 373 | } |
| 373 | 374 | ||
| 374 | #define PCI_CAP_ID_GEN 0x10 | ||
| 375 | |||
| 376 | static void netxen_pcie_strap_init(struct netxen_adapter *adapter) | ||
| 377 | { | ||
| 378 | u32 pdevfuncsave; | ||
| 379 | u32 c8c9value = 0; | ||
| 380 | u32 chicken = 0; | ||
| 381 | u32 control = 0; | ||
| 382 | int i, pos; | ||
| 383 | struct pci_dev *pdev; | ||
| 384 | |||
| 385 | pdev = adapter->pdev; | ||
| 386 | |||
| 387 | adapter->hw_read_wx(adapter, | ||
| 388 | NETXEN_PCIE_REG(PCIE_CHICKEN3), &chicken, 4); | ||
| 389 | /* clear chicken3.25:24 */ | ||
| 390 | chicken &= 0xFCFFFFFF; | ||
| 391 | /* | ||
| 392 | * if gen1 and B0, set F1020 - if gen 2, do nothing | ||
| 393 | * if gen2 set to F1000 | ||
| 394 | */ | ||
| 395 | pos = pci_find_capability(pdev, PCI_CAP_ID_GEN); | ||
| 396 | if (pos == 0xC0) { | ||
| 397 | pci_read_config_dword(pdev, pos + 0x10, &control); | ||
| 398 | if ((control & 0x000F0000) != 0x00020000) { | ||
| 399 | /* set chicken3.24 if gen1 */ | ||
| 400 | chicken |= 0x01000000; | ||
| 401 | } | ||
| 402 | printk(KERN_INFO "%s Gen2 strapping detected\n", | ||
| 403 | netxen_nic_driver_name); | ||
| 404 | c8c9value = 0xF1000; | ||
| 405 | } else { | ||
| 406 | /* set chicken3.24 if gen1 */ | ||
| 407 | chicken |= 0x01000000; | ||
| 408 | printk(KERN_INFO "%s Gen1 strapping detected\n", | ||
| 409 | netxen_nic_driver_name); | ||
| 410 | if (adapter->ahw.revision_id == NX_P3_B0) | ||
| 411 | c8c9value = 0xF1020; | ||
| 412 | else | ||
| 413 | c8c9value = 0; | ||
| 414 | |||
| 415 | } | ||
| 416 | adapter->hw_write_wx(adapter, | ||
| 417 | NETXEN_PCIE_REG(PCIE_CHICKEN3), &chicken, 4); | ||
| 418 | |||
| 419 | if (!c8c9value) | ||
| 420 | return; | ||
| 421 | |||
| 422 | pdevfuncsave = pdev->devfn; | ||
| 423 | if (pdevfuncsave & 0x07) | ||
| 424 | return; | ||
| 425 | |||
| 426 | for (i = 0; i < 8; i++) { | ||
| 427 | pci_read_config_dword(pdev, pos + 8, &control); | ||
| 428 | pci_read_config_dword(pdev, pos + 8, &control); | ||
| 429 | pci_write_config_dword(pdev, pos + 8, c8c9value); | ||
| 430 | pdev->devfn++; | ||
| 431 | } | ||
| 432 | pdev->devfn = pdevfuncsave; | ||
| 433 | } | ||
| 434 | |||
| 435 | static void netxen_set_msix_bit(struct pci_dev *pdev, int enable) | 375 | static void netxen_set_msix_bit(struct pci_dev *pdev, int enable) |
| 436 | { | 376 | { |
| 437 | u32 control; | 377 | u32 control; |
| @@ -648,7 +588,12 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 648 | adapter->pci_mem_read = netxen_nic_pci_mem_read_2M; | 588 | adapter->pci_mem_read = netxen_nic_pci_mem_read_2M; |
| 649 | adapter->pci_mem_write = netxen_nic_pci_mem_write_2M; | 589 | adapter->pci_mem_write = netxen_nic_pci_mem_write_2M; |
| 650 | 590 | ||
| 651 | mem_ptr0 = ioremap(mem_base, mem_len); | 591 | mem_ptr0 = pci_ioremap_bar(pdev, 0); |
| 592 | if (mem_ptr0 == NULL) { | ||
| 593 | dev_err(&pdev->dev, "failed to map PCI bar 0\n"); | ||
| 594 | return -EIO; | ||
| 595 | } | ||
| 596 | |||
| 652 | pci_len0 = mem_len; | 597 | pci_len0 = mem_len; |
| 653 | first_page_group_start = 0; | 598 | first_page_group_start = 0; |
| 654 | first_page_group_end = 0; | 599 | first_page_group_end = 0; |
| @@ -811,9 +756,6 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 811 | } | 756 | } |
| 812 | netxen_load_firmware(adapter); | 757 | netxen_load_firmware(adapter); |
| 813 | 758 | ||
| 814 | if (NX_IS_REVISION_P3(revision_id)) | ||
| 815 | netxen_pcie_strap_init(adapter); | ||
| 816 | |||
| 817 | if (NX_IS_REVISION_P2(revision_id)) { | 759 | if (NX_IS_REVISION_P2(revision_id)) { |
| 818 | 760 | ||
| 819 | /* Initialize multicast addr pool owners */ | 761 | /* Initialize multicast addr pool owners */ |
| @@ -858,9 +800,12 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 858 | * See if the firmware gave us a virtual-physical port mapping. | 800 | * See if the firmware gave us a virtual-physical port mapping. |
| 859 | */ | 801 | */ |
| 860 | adapter->physical_port = adapter->portnum; | 802 | adapter->physical_port = adapter->portnum; |
| 861 | i = adapter->pci_read_normalize(adapter, CRB_V2P(adapter->portnum)); | 803 | if (adapter->fw_major < 4) { |
| 862 | if (i != 0x55555555) | 804 | i = adapter->pci_read_normalize(adapter, |
| 863 | adapter->physical_port = i; | 805 | CRB_V2P(adapter->portnum)); |
| 806 | if (i != 0x55555555) | ||
| 807 | adapter->physical_port = i; | ||
| 808 | } | ||
| 864 | 809 | ||
| 865 | adapter->flags &= ~(NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED); | 810 | adapter->flags &= ~(NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED); |
| 866 | 811 | ||
| @@ -1084,7 +1029,9 @@ static int netxen_nic_open(struct net_device *netdev) | |||
| 1084 | for (ring = 0; ring < adapter->max_rds_rings; ring++) | 1029 | for (ring = 0; ring < adapter->max_rds_rings; ring++) |
| 1085 | netxen_post_rx_buffers(adapter, ctx, ring); | 1030 | netxen_post_rx_buffers(adapter, ctx, ring); |
| 1086 | } | 1031 | } |
| 1087 | if (NETXEN_IS_MSI_FAMILY(adapter)) | 1032 | if (adapter->flags & NETXEN_NIC_MSIX_ENABLED) |
| 1033 | handler = netxen_msix_intr; | ||
| 1034 | else if (adapter->flags & NETXEN_NIC_MSI_ENABLED) | ||
| 1088 | handler = netxen_msi_intr; | 1035 | handler = netxen_msi_intr; |
| 1089 | else { | 1036 | else { |
| 1090 | flags |= IRQF_SHARED; | 1037 | flags |= IRQF_SHARED; |
| @@ -1612,6 +1559,14 @@ static irqreturn_t netxen_msi_intr(int irq, void *data) | |||
| 1612 | return IRQ_HANDLED; | 1559 | return IRQ_HANDLED; |
| 1613 | } | 1560 | } |
| 1614 | 1561 | ||
| 1562 | static irqreturn_t netxen_msix_intr(int irq, void *data) | ||
| 1563 | { | ||
| 1564 | struct netxen_adapter *adapter = data; | ||
| 1565 | |||
| 1566 | napi_schedule(&adapter->napi); | ||
| 1567 | return IRQ_HANDLED; | ||
| 1568 | } | ||
| 1569 | |||
| 1615 | static int netxen_nic_poll(struct napi_struct *napi, int budget) | 1570 | static int netxen_nic_poll(struct napi_struct *napi, int budget) |
| 1616 | { | 1571 | { |
| 1617 | struct netxen_adapter *adapter = container_of(napi, struct netxen_adapter, napi); | 1572 | struct netxen_adapter *adapter = container_of(napi, struct netxen_adapter, napi); |
diff --git a/drivers/net/pcmcia/3c574_cs.c b/drivers/net/pcmcia/3c574_cs.c index e5cb6b1f0ebd..2404a838b1fe 100644 --- a/drivers/net/pcmcia/3c574_cs.c +++ b/drivers/net/pcmcia/3c574_cs.c | |||
| @@ -1035,7 +1035,8 @@ static int el3_rx(struct net_device *dev, int worklimit) | |||
| 1035 | DEBUG(3, "%s: in rx_packet(), status %4.4x, rx_status %4.4x.\n", | 1035 | DEBUG(3, "%s: in rx_packet(), status %4.4x, rx_status %4.4x.\n", |
| 1036 | dev->name, inw(ioaddr+EL3_STATUS), inw(ioaddr+RxStatus)); | 1036 | dev->name, inw(ioaddr+EL3_STATUS), inw(ioaddr+RxStatus)); |
| 1037 | while (!((rx_status = inw(ioaddr + RxStatus)) & 0x8000) && | 1037 | while (!((rx_status = inw(ioaddr + RxStatus)) & 0x8000) && |
| 1038 | (--worklimit >= 0)) { | 1038 | worklimit > 0) { |
| 1039 | worklimit--; | ||
| 1039 | if (rx_status & 0x4000) { /* Error, update stats. */ | 1040 | if (rx_status & 0x4000) { /* Error, update stats. */ |
| 1040 | short error = rx_status & 0x3800; | 1041 | short error = rx_status & 0x3800; |
| 1041 | dev->stats.rx_errors++; | 1042 | dev->stats.rx_errors++; |
diff --git a/drivers/net/pcmcia/3c589_cs.c b/drivers/net/pcmcia/3c589_cs.c index 73ecc657999d..1e01b8a6dbf3 100644 --- a/drivers/net/pcmcia/3c589_cs.c +++ b/drivers/net/pcmcia/3c589_cs.c | |||
| @@ -857,7 +857,8 @@ static int el3_rx(struct net_device *dev) | |||
| 857 | DEBUG(3, "%s: in rx_packet(), status %4.4x, rx_status %4.4x.\n", | 857 | DEBUG(3, "%s: in rx_packet(), status %4.4x, rx_status %4.4x.\n", |
| 858 | dev->name, inw(ioaddr+EL3_STATUS), inw(ioaddr+RX_STATUS)); | 858 | dev->name, inw(ioaddr+EL3_STATUS), inw(ioaddr+RX_STATUS)); |
| 859 | while (!((rx_status = inw(ioaddr + RX_STATUS)) & 0x8000) && | 859 | while (!((rx_status = inw(ioaddr + RX_STATUS)) & 0x8000) && |
| 860 | (--worklimit >= 0)) { | 860 | worklimit > 0) { |
| 861 | worklimit--; | ||
| 861 | if (rx_status & 0x4000) { /* Error, update stats. */ | 862 | if (rx_status & 0x4000) { /* Error, update stats. */ |
| 862 | short error = rx_status & 0x3800; | 863 | short error = rx_status & 0x3800; |
| 863 | dev->stats.rx_errors++; | 864 | dev->stats.rx_errors++; |
diff --git a/drivers/net/phy/mdio-gpio.c b/drivers/net/phy/mdio-gpio.c index a439ebeb4319..af28ff7ae176 100644 --- a/drivers/net/phy/mdio-gpio.c +++ b/drivers/net/phy/mdio-gpio.c | |||
| @@ -125,6 +125,8 @@ static int __devinit mdio_gpio_bus_init(struct device *dev, | |||
| 125 | if (gpio_request(bitbang->mdio, "mdio")) | 125 | if (gpio_request(bitbang->mdio, "mdio")) |
| 126 | goto out_free_mdc; | 126 | goto out_free_mdc; |
| 127 | 127 | ||
| 128 | gpio_direction_output(bitbang->mdc, 0); | ||
| 129 | |||
| 128 | dev_set_drvdata(dev, new_bus); | 130 | dev_set_drvdata(dev, new_bus); |
| 129 | 131 | ||
| 130 | ret = mdiobus_register(new_bus); | 132 | ret = mdiobus_register(new_bus); |
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c index 3d1d7b6e55aa..8ea72dc60f79 100644 --- a/drivers/net/qlge/qlge_main.c +++ b/drivers/net/qlge/qlge_main.c | |||
| @@ -898,6 +898,7 @@ static void ql_update_lbq(struct ql_adapter *qdev, struct rx_ring *rx_ring) | |||
| 898 | lbq_desc->index); | 898 | lbq_desc->index); |
| 899 | lbq_desc->p.lbq_page = alloc_page(GFP_ATOMIC); | 899 | lbq_desc->p.lbq_page = alloc_page(GFP_ATOMIC); |
| 900 | if (lbq_desc->p.lbq_page == NULL) { | 900 | if (lbq_desc->p.lbq_page == NULL) { |
| 901 | rx_ring->lbq_clean_idx = clean_idx; | ||
| 901 | QPRINTK(qdev, RX_STATUS, ERR, | 902 | QPRINTK(qdev, RX_STATUS, ERR, |
| 902 | "Couldn't get a page.\n"); | 903 | "Couldn't get a page.\n"); |
| 903 | return; | 904 | return; |
| @@ -907,6 +908,9 @@ static void ql_update_lbq(struct ql_adapter *qdev, struct rx_ring *rx_ring) | |||
| 907 | 0, PAGE_SIZE, | 908 | 0, PAGE_SIZE, |
| 908 | PCI_DMA_FROMDEVICE); | 909 | PCI_DMA_FROMDEVICE); |
| 909 | if (pci_dma_mapping_error(qdev->pdev, map)) { | 910 | if (pci_dma_mapping_error(qdev->pdev, map)) { |
| 911 | rx_ring->lbq_clean_idx = clean_idx; | ||
| 912 | put_page(lbq_desc->p.lbq_page); | ||
| 913 | lbq_desc->p.lbq_page = NULL; | ||
| 910 | QPRINTK(qdev, RX_STATUS, ERR, | 914 | QPRINTK(qdev, RX_STATUS, ERR, |
| 911 | "PCI mapping failed.\n"); | 915 | "PCI mapping failed.\n"); |
| 912 | return; | 916 | return; |
| @@ -968,6 +972,8 @@ static void ql_update_sbq(struct ql_adapter *qdev, struct rx_ring *rx_ring) | |||
| 968 | if (pci_dma_mapping_error(qdev->pdev, map)) { | 972 | if (pci_dma_mapping_error(qdev->pdev, map)) { |
| 969 | QPRINTK(qdev, IFUP, ERR, "PCI mapping failed.\n"); | 973 | QPRINTK(qdev, IFUP, ERR, "PCI mapping failed.\n"); |
| 970 | rx_ring->sbq_clean_idx = clean_idx; | 974 | rx_ring->sbq_clean_idx = clean_idx; |
| 975 | dev_kfree_skb_any(sbq_desc->p.skb); | ||
| 976 | sbq_desc->p.skb = NULL; | ||
| 971 | return; | 977 | return; |
| 972 | } | 978 | } |
| 973 | pci_unmap_addr_set(sbq_desc, mapaddr, map); | 979 | pci_unmap_addr_set(sbq_desc, mapaddr, map); |
| @@ -1449,12 +1455,12 @@ static void ql_process_mac_rx_intr(struct ql_adapter *qdev, | |||
| 1449 | if (qdev->vlgrp && (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V)) { | 1455 | if (qdev->vlgrp && (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V)) { |
| 1450 | QPRINTK(qdev, RX_STATUS, DEBUG, | 1456 | QPRINTK(qdev, RX_STATUS, DEBUG, |
| 1451 | "Passing a VLAN packet upstream.\n"); | 1457 | "Passing a VLAN packet upstream.\n"); |
| 1452 | vlan_hwaccel_rx(skb, qdev->vlgrp, | 1458 | vlan_hwaccel_receive_skb(skb, qdev->vlgrp, |
| 1453 | le16_to_cpu(ib_mac_rsp->vlan_id)); | 1459 | le16_to_cpu(ib_mac_rsp->vlan_id)); |
| 1454 | } else { | 1460 | } else { |
| 1455 | QPRINTK(qdev, RX_STATUS, DEBUG, | 1461 | QPRINTK(qdev, RX_STATUS, DEBUG, |
| 1456 | "Passing a normal packet upstream.\n"); | 1462 | "Passing a normal packet upstream.\n"); |
| 1457 | netif_rx(skb); | 1463 | netif_receive_skb(skb); |
| 1458 | } | 1464 | } |
| 1459 | } | 1465 | } |
| 1460 | 1466 | ||
| @@ -1511,6 +1517,11 @@ void ql_queue_asic_error(struct ql_adapter *qdev) | |||
| 1511 | netif_stop_queue(qdev->ndev); | 1517 | netif_stop_queue(qdev->ndev); |
| 1512 | netif_carrier_off(qdev->ndev); | 1518 | netif_carrier_off(qdev->ndev); |
| 1513 | ql_disable_interrupts(qdev); | 1519 | ql_disable_interrupts(qdev); |
| 1520 | /* Clear adapter up bit to signal the recovery | ||
| 1521 | * process that it shouldn't kill the reset worker | ||
| 1522 | * thread | ||
| 1523 | */ | ||
| 1524 | clear_bit(QL_ADAPTER_UP, &qdev->flags); | ||
| 1514 | queue_delayed_work(qdev->workqueue, &qdev->asic_reset_work, 0); | 1525 | queue_delayed_work(qdev->workqueue, &qdev->asic_reset_work, 0); |
| 1515 | } | 1526 | } |
| 1516 | 1527 | ||
| @@ -1927,10 +1938,6 @@ static int qlge_send(struct sk_buff *skb, struct net_device *ndev) | |||
| 1927 | tx_ring_desc = &tx_ring->q[tx_ring->prod_idx]; | 1938 | tx_ring_desc = &tx_ring->q[tx_ring->prod_idx]; |
| 1928 | mac_iocb_ptr = tx_ring_desc->queue_entry; | 1939 | mac_iocb_ptr = tx_ring_desc->queue_entry; |
| 1929 | memset((void *)mac_iocb_ptr, 0, sizeof(mac_iocb_ptr)); | 1940 | memset((void *)mac_iocb_ptr, 0, sizeof(mac_iocb_ptr)); |
| 1930 | if (ql_map_send(qdev, mac_iocb_ptr, skb, tx_ring_desc) != NETDEV_TX_OK) { | ||
| 1931 | QPRINTK(qdev, TX_QUEUED, ERR, "Could not map the segments.\n"); | ||
| 1932 | return NETDEV_TX_BUSY; | ||
| 1933 | } | ||
| 1934 | 1941 | ||
| 1935 | mac_iocb_ptr->opcode = OPCODE_OB_MAC_IOCB; | 1942 | mac_iocb_ptr->opcode = OPCODE_OB_MAC_IOCB; |
| 1936 | mac_iocb_ptr->tid = tx_ring_desc->index; | 1943 | mac_iocb_ptr->tid = tx_ring_desc->index; |
| @@ -1956,6 +1963,12 @@ static int qlge_send(struct sk_buff *skb, struct net_device *ndev) | |||
| 1956 | ql_hw_csum_setup(skb, | 1963 | ql_hw_csum_setup(skb, |
| 1957 | (struct ob_mac_tso_iocb_req *)mac_iocb_ptr); | 1964 | (struct ob_mac_tso_iocb_req *)mac_iocb_ptr); |
| 1958 | } | 1965 | } |
| 1966 | if (ql_map_send(qdev, mac_iocb_ptr, skb, tx_ring_desc) != | ||
| 1967 | NETDEV_TX_OK) { | ||
| 1968 | QPRINTK(qdev, TX_QUEUED, ERR, | ||
| 1969 | "Could not map the segments.\n"); | ||
| 1970 | return NETDEV_TX_BUSY; | ||
| 1971 | } | ||
| 1959 | QL_DUMP_OB_MAC_IOCB(mac_iocb_ptr); | 1972 | QL_DUMP_OB_MAC_IOCB(mac_iocb_ptr); |
| 1960 | tx_ring->prod_idx++; | 1973 | tx_ring->prod_idx++; |
| 1961 | if (tx_ring->prod_idx == tx_ring->wq_len) | 1974 | if (tx_ring->prod_idx == tx_ring->wq_len) |
| @@ -2873,8 +2886,8 @@ static int ql_start_rss(struct ql_adapter *qdev) | |||
| 2873 | /* | 2886 | /* |
| 2874 | * Fill out the Indirection Table. | 2887 | * Fill out the Indirection Table. |
| 2875 | */ | 2888 | */ |
| 2876 | for (i = 0; i < 32; i++) | 2889 | for (i = 0; i < 256; i++) |
| 2877 | hash_id[i] = i & 1; | 2890 | hash_id[i] = i & (qdev->rss_ring_count - 1); |
| 2878 | 2891 | ||
| 2879 | /* | 2892 | /* |
| 2880 | * Random values for the IPv6 and IPv4 Hash Keys. | 2893 | * Random values for the IPv6 and IPv4 Hash Keys. |
| @@ -3100,7 +3113,11 @@ static int ql_adapter_down(struct ql_adapter *qdev) | |||
| 3100 | netif_stop_queue(ndev); | 3113 | netif_stop_queue(ndev); |
| 3101 | netif_carrier_off(ndev); | 3114 | netif_carrier_off(ndev); |
| 3102 | 3115 | ||
| 3103 | cancel_delayed_work_sync(&qdev->asic_reset_work); | 3116 | /* Don't kill the reset worker thread if we |
| 3117 | * are in the process of recovery. | ||
| 3118 | */ | ||
| 3119 | if (test_bit(QL_ADAPTER_UP, &qdev->flags)) | ||
| 3120 | cancel_delayed_work_sync(&qdev->asic_reset_work); | ||
| 3104 | cancel_delayed_work_sync(&qdev->mpi_reset_work); | 3121 | cancel_delayed_work_sync(&qdev->mpi_reset_work); |
| 3105 | cancel_delayed_work_sync(&qdev->mpi_work); | 3122 | cancel_delayed_work_sync(&qdev->mpi_work); |
| 3106 | 3123 | ||
| @@ -3501,7 +3518,7 @@ static int qlge_set_mac_address(struct net_device *ndev, void *p) | |||
| 3501 | static void qlge_tx_timeout(struct net_device *ndev) | 3518 | static void qlge_tx_timeout(struct net_device *ndev) |
| 3502 | { | 3519 | { |
| 3503 | struct ql_adapter *qdev = (struct ql_adapter *)netdev_priv(ndev); | 3520 | struct ql_adapter *qdev = (struct ql_adapter *)netdev_priv(ndev); |
| 3504 | queue_delayed_work(qdev->workqueue, &qdev->asic_reset_work, 0); | 3521 | ql_queue_asic_error(qdev); |
| 3505 | } | 3522 | } |
| 3506 | 3523 | ||
| 3507 | static void ql_asic_reset_work(struct work_struct *work) | 3524 | static void ql_asic_reset_work(struct work_struct *work) |
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index 2c73ca606b35..b3473401c83a 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c | |||
| @@ -81,9 +81,9 @@ static const int multicast_filter_limit = 32; | |||
| 81 | #define RTL8169_TX_TIMEOUT (6*HZ) | 81 | #define RTL8169_TX_TIMEOUT (6*HZ) |
| 82 | #define RTL8169_PHY_TIMEOUT (10*HZ) | 82 | #define RTL8169_PHY_TIMEOUT (10*HZ) |
| 83 | 83 | ||
| 84 | #define RTL_EEPROM_SIG cpu_to_le32(0x8129) | 84 | #define RTL_EEPROM_SIG 0x8129 |
| 85 | #define RTL_EEPROM_SIG_MASK cpu_to_le32(0xffff) | ||
| 86 | #define RTL_EEPROM_SIG_ADDR 0x0000 | 85 | #define RTL_EEPROM_SIG_ADDR 0x0000 |
| 86 | #define RTL_EEPROM_MAC_ADDR 0x0007 | ||
| 87 | 87 | ||
| 88 | /* write/read MMIO register */ | 88 | /* write/read MMIO register */ |
| 89 | #define RTL_W8(reg, val8) writeb ((val8), ioaddr + (reg)) | 89 | #define RTL_W8(reg, val8) writeb ((val8), ioaddr + (reg)) |
| @@ -293,6 +293,11 @@ enum rtl_register_content { | |||
| 293 | /* Cfg9346Bits */ | 293 | /* Cfg9346Bits */ |
| 294 | Cfg9346_Lock = 0x00, | 294 | Cfg9346_Lock = 0x00, |
| 295 | Cfg9346_Unlock = 0xc0, | 295 | Cfg9346_Unlock = 0xc0, |
| 296 | Cfg9346_Program = 0x80, /* Programming mode */ | ||
| 297 | Cfg9346_EECS = 0x08, /* Chip select */ | ||
| 298 | Cfg9346_EESK = 0x04, /* Serial data clock */ | ||
| 299 | Cfg9346_EEDI = 0x02, /* Data input */ | ||
| 300 | Cfg9346_EEDO = 0x01, /* Data output */ | ||
| 296 | 301 | ||
| 297 | /* rx_mode_bits */ | 302 | /* rx_mode_bits */ |
| 298 | AcceptErr = 0x20, | 303 | AcceptErr = 0x20, |
| @@ -305,6 +310,7 @@ enum rtl_register_content { | |||
| 305 | /* RxConfigBits */ | 310 | /* RxConfigBits */ |
| 306 | RxCfgFIFOShift = 13, | 311 | RxCfgFIFOShift = 13, |
| 307 | RxCfgDMAShift = 8, | 312 | RxCfgDMAShift = 8, |
| 313 | RxCfg9356SEL = 6, /* EEPROM type: 0 = 9346, 1 = 9356 */ | ||
| 308 | 314 | ||
| 309 | /* TxConfigBits */ | 315 | /* TxConfigBits */ |
| 310 | TxInterFrameGapShift = 24, | 316 | TxInterFrameGapShift = 24, |
| @@ -437,6 +443,22 @@ enum features { | |||
| 437 | RTL_FEATURE_GMII = (1 << 2), | 443 | RTL_FEATURE_GMII = (1 << 2), |
| 438 | }; | 444 | }; |
| 439 | 445 | ||
| 446 | struct rtl8169_counters { | ||
| 447 | __le64 tx_packets; | ||
| 448 | __le64 rx_packets; | ||
| 449 | __le64 tx_errors; | ||
| 450 | __le32 rx_errors; | ||
| 451 | __le16 rx_missed; | ||
| 452 | __le16 align_errors; | ||
| 453 | __le32 tx_one_collision; | ||
| 454 | __le32 tx_multi_collision; | ||
| 455 | __le64 rx_unicast; | ||
| 456 | __le64 rx_broadcast; | ||
| 457 | __le32 rx_multicast; | ||
| 458 | __le16 tx_aborted; | ||
| 459 | __le16 tx_underun; | ||
| 460 | }; | ||
| 461 | |||
| 440 | struct rtl8169_private { | 462 | struct rtl8169_private { |
| 441 | void __iomem *mmio_addr; /* memory map physical address */ | 463 | void __iomem *mmio_addr; /* memory map physical address */ |
| 442 | struct pci_dev *pci_dev; /* Index of PCI device */ | 464 | struct pci_dev *pci_dev; /* Index of PCI device */ |
| @@ -480,6 +502,7 @@ struct rtl8169_private { | |||
| 480 | unsigned features; | 502 | unsigned features; |
| 481 | 503 | ||
| 482 | struct mii_if_info mii; | 504 | struct mii_if_info mii; |
| 505 | struct rtl8169_counters counters; | ||
| 483 | }; | 506 | }; |
| 484 | 507 | ||
| 485 | MODULE_AUTHOR("Realtek and the Linux r8169 crew <netdev@vger.kernel.org>"); | 508 | MODULE_AUTHOR("Realtek and the Linux r8169 crew <netdev@vger.kernel.org>"); |
| @@ -1100,22 +1123,6 @@ static const char rtl8169_gstrings[][ETH_GSTRING_LEN] = { | |||
| 1100 | "tx_underrun", | 1123 | "tx_underrun", |
| 1101 | }; | 1124 | }; |
| 1102 | 1125 | ||
| 1103 | struct rtl8169_counters { | ||
| 1104 | __le64 tx_packets; | ||
| 1105 | __le64 rx_packets; | ||
| 1106 | __le64 tx_errors; | ||
| 1107 | __le32 rx_errors; | ||
| 1108 | __le16 rx_missed; | ||
| 1109 | __le16 align_errors; | ||
| 1110 | __le32 tx_one_collision; | ||
| 1111 | __le32 tx_multi_collision; | ||
| 1112 | __le64 rx_unicast; | ||
| 1113 | __le64 rx_broadcast; | ||
| 1114 | __le32 rx_multicast; | ||
| 1115 | __le16 tx_aborted; | ||
| 1116 | __le16 tx_underun; | ||
| 1117 | }; | ||
| 1118 | |||
| 1119 | static int rtl8169_get_sset_count(struct net_device *dev, int sset) | 1126 | static int rtl8169_get_sset_count(struct net_device *dev, int sset) |
| 1120 | { | 1127 | { |
| 1121 | switch (sset) { | 1128 | switch (sset) { |
| @@ -1126,16 +1133,21 @@ static int rtl8169_get_sset_count(struct net_device *dev, int sset) | |||
| 1126 | } | 1133 | } |
| 1127 | } | 1134 | } |
| 1128 | 1135 | ||
| 1129 | static void rtl8169_get_ethtool_stats(struct net_device *dev, | 1136 | static void rtl8169_update_counters(struct net_device *dev) |
| 1130 | struct ethtool_stats *stats, u64 *data) | ||
| 1131 | { | 1137 | { |
| 1132 | struct rtl8169_private *tp = netdev_priv(dev); | 1138 | struct rtl8169_private *tp = netdev_priv(dev); |
| 1133 | void __iomem *ioaddr = tp->mmio_addr; | 1139 | void __iomem *ioaddr = tp->mmio_addr; |
| 1134 | struct rtl8169_counters *counters; | 1140 | struct rtl8169_counters *counters; |
| 1135 | dma_addr_t paddr; | 1141 | dma_addr_t paddr; |
| 1136 | u32 cmd; | 1142 | u32 cmd; |
| 1143 | int wait = 1000; | ||
| 1137 | 1144 | ||
| 1138 | ASSERT_RTNL(); | 1145 | /* |
| 1146 | * Some chips are unable to dump tally counters when the receiver | ||
| 1147 | * is disabled. | ||
| 1148 | */ | ||
| 1149 | if ((RTL_R8(ChipCmd) & CmdRxEnb) == 0) | ||
| 1150 | return; | ||
| 1139 | 1151 | ||
| 1140 | counters = pci_alloc_consistent(tp->pci_dev, sizeof(*counters), &paddr); | 1152 | counters = pci_alloc_consistent(tp->pci_dev, sizeof(*counters), &paddr); |
| 1141 | if (!counters) | 1153 | if (!counters) |
| @@ -1146,31 +1158,45 @@ static void rtl8169_get_ethtool_stats(struct net_device *dev, | |||
| 1146 | RTL_W32(CounterAddrLow, cmd); | 1158 | RTL_W32(CounterAddrLow, cmd); |
| 1147 | RTL_W32(CounterAddrLow, cmd | CounterDump); | 1159 | RTL_W32(CounterAddrLow, cmd | CounterDump); |
| 1148 | 1160 | ||
| 1149 | while (RTL_R32(CounterAddrLow) & CounterDump) { | 1161 | while (wait--) { |
| 1150 | if (msleep_interruptible(1)) | 1162 | if ((RTL_R32(CounterAddrLow) & CounterDump) == 0) { |
| 1163 | /* copy updated counters */ | ||
| 1164 | memcpy(&tp->counters, counters, sizeof(*counters)); | ||
| 1151 | break; | 1165 | break; |
| 1166 | } | ||
| 1167 | udelay(10); | ||
| 1152 | } | 1168 | } |
| 1153 | 1169 | ||
| 1154 | RTL_W32(CounterAddrLow, 0); | 1170 | RTL_W32(CounterAddrLow, 0); |
| 1155 | RTL_W32(CounterAddrHigh, 0); | 1171 | RTL_W32(CounterAddrHigh, 0); |
| 1156 | 1172 | ||
| 1157 | data[0] = le64_to_cpu(counters->tx_packets); | ||
| 1158 | data[1] = le64_to_cpu(counters->rx_packets); | ||
| 1159 | data[2] = le64_to_cpu(counters->tx_errors); | ||
| 1160 | data[3] = le32_to_cpu(counters->rx_errors); | ||
| 1161 | data[4] = le16_to_cpu(counters->rx_missed); | ||
| 1162 | data[5] = le16_to_cpu(counters->align_errors); | ||
| 1163 | data[6] = le32_to_cpu(counters->tx_one_collision); | ||
| 1164 | data[7] = le32_to_cpu(counters->tx_multi_collision); | ||
| 1165 | data[8] = le64_to_cpu(counters->rx_unicast); | ||
| 1166 | data[9] = le64_to_cpu(counters->rx_broadcast); | ||
| 1167 | data[10] = le32_to_cpu(counters->rx_multicast); | ||
| 1168 | data[11] = le16_to_cpu(counters->tx_aborted); | ||
| 1169 | data[12] = le16_to_cpu(counters->tx_underun); | ||
| 1170 | |||
| 1171 | pci_free_consistent(tp->pci_dev, sizeof(*counters), counters, paddr); | 1173 | pci_free_consistent(tp->pci_dev, sizeof(*counters), counters, paddr); |
| 1172 | } | 1174 | } |
| 1173 | 1175 | ||
| 1176 | static void rtl8169_get_ethtool_stats(struct net_device *dev, | ||
| 1177 | struct ethtool_stats *stats, u64 *data) | ||
| 1178 | { | ||
| 1179 | struct rtl8169_private *tp = netdev_priv(dev); | ||
| 1180 | |||
| 1181 | ASSERT_RTNL(); | ||
| 1182 | |||
| 1183 | rtl8169_update_counters(dev); | ||
| 1184 | |||
| 1185 | data[0] = le64_to_cpu(tp->counters.tx_packets); | ||
| 1186 | data[1] = le64_to_cpu(tp->counters.rx_packets); | ||
| 1187 | data[2] = le64_to_cpu(tp->counters.tx_errors); | ||
| 1188 | data[3] = le32_to_cpu(tp->counters.rx_errors); | ||
| 1189 | data[4] = le16_to_cpu(tp->counters.rx_missed); | ||
| 1190 | data[5] = le16_to_cpu(tp->counters.align_errors); | ||
| 1191 | data[6] = le32_to_cpu(tp->counters.tx_one_collision); | ||
| 1192 | data[7] = le32_to_cpu(tp->counters.tx_multi_collision); | ||
| 1193 | data[8] = le64_to_cpu(tp->counters.rx_unicast); | ||
| 1194 | data[9] = le64_to_cpu(tp->counters.rx_broadcast); | ||
| 1195 | data[10] = le32_to_cpu(tp->counters.rx_multicast); | ||
| 1196 | data[11] = le16_to_cpu(tp->counters.tx_aborted); | ||
| 1197 | data[12] = le16_to_cpu(tp->counters.tx_underun); | ||
| 1198 | } | ||
| 1199 | |||
| 1174 | static void rtl8169_get_strings(struct net_device *dev, u32 stringset, u8 *data) | 1200 | static void rtl8169_get_strings(struct net_device *dev, u32 stringset, u8 *data) |
| 1175 | { | 1201 | { |
| 1176 | switch(stringset) { | 1202 | switch(stringset) { |
| @@ -1943,6 +1969,108 @@ static const struct net_device_ops rtl8169_netdev_ops = { | |||
| 1943 | 1969 | ||
| 1944 | }; | 1970 | }; |
| 1945 | 1971 | ||
| 1972 | /* Delay between EEPROM clock transitions. Force out buffered PCI writes. */ | ||
| 1973 | #define RTL_EEPROM_DELAY() RTL_R8(Cfg9346) | ||
| 1974 | #define RTL_EEPROM_READ_CMD 6 | ||
| 1975 | |||
| 1976 | /* read 16bit word stored in EEPROM. EEPROM is addressed by words. */ | ||
| 1977 | static u16 rtl_eeprom_read(void __iomem *ioaddr, int addr) | ||
| 1978 | { | ||
| 1979 | u16 result = 0; | ||
| 1980 | int cmd, cmd_len, i; | ||
| 1981 | |||
| 1982 | /* check for EEPROM address size (in bits) */ | ||
| 1983 | if (RTL_R32(RxConfig) & (1 << RxCfg9356SEL)) { | ||
| 1984 | /* EEPROM is 93C56 */ | ||
| 1985 | cmd_len = 3 + 8; /* 3 bits for command id and 8 for address */ | ||
| 1986 | cmd = (RTL_EEPROM_READ_CMD << 8) | (addr & 0xff); | ||
| 1987 | } else { | ||
| 1988 | /* EEPROM is 93C46 */ | ||
| 1989 | cmd_len = 3 + 6; /* 3 bits for command id and 6 for address */ | ||
| 1990 | cmd = (RTL_EEPROM_READ_CMD << 6) | (addr & 0x3f); | ||
| 1991 | } | ||
| 1992 | |||
| 1993 | /* enter programming mode */ | ||
| 1994 | RTL_W8(Cfg9346, Cfg9346_Program | Cfg9346_EECS); | ||
| 1995 | RTL_EEPROM_DELAY(); | ||
| 1996 | |||
| 1997 | /* write command and requested address */ | ||
| 1998 | while (cmd_len--) { | ||
| 1999 | u8 x = Cfg9346_Program | Cfg9346_EECS; | ||
| 2000 | |||
| 2001 | x |= (cmd & (1 << cmd_len)) ? Cfg9346_EEDI : 0; | ||
| 2002 | |||
| 2003 | /* write a bit */ | ||
| 2004 | RTL_W8(Cfg9346, x); | ||
| 2005 | RTL_EEPROM_DELAY(); | ||
| 2006 | |||
| 2007 | /* raise clock */ | ||
| 2008 | RTL_W8(Cfg9346, x | Cfg9346_EESK); | ||
| 2009 | RTL_EEPROM_DELAY(); | ||
| 2010 | } | ||
| 2011 | |||
| 2012 | /* lower clock */ | ||
| 2013 | RTL_W8(Cfg9346, Cfg9346_Program | Cfg9346_EECS); | ||
| 2014 | RTL_EEPROM_DELAY(); | ||
| 2015 | |||
| 2016 | /* read back 16bit value */ | ||
| 2017 | for (i = 16; i > 0; i--) { | ||
| 2018 | /* raise clock */ | ||
| 2019 | RTL_W8(Cfg9346, Cfg9346_Program | Cfg9346_EECS | Cfg9346_EESK); | ||
| 2020 | RTL_EEPROM_DELAY(); | ||
| 2021 | |||
| 2022 | result <<= 1; | ||
| 2023 | result |= (RTL_R8(Cfg9346) & Cfg9346_EEDO) ? 1 : 0; | ||
| 2024 | |||
| 2025 | /* lower clock */ | ||
| 2026 | RTL_W8(Cfg9346, Cfg9346_Program | Cfg9346_EECS); | ||
| 2027 | RTL_EEPROM_DELAY(); | ||
| 2028 | } | ||
| 2029 | |||
| 2030 | RTL_W8(Cfg9346, Cfg9346_Program); | ||
| 2031 | /* leave programming mode */ | ||
| 2032 | RTL_W8(Cfg9346, Cfg9346_Lock); | ||
| 2033 | |||
| 2034 | return result; | ||
| 2035 | } | ||
| 2036 | |||
| 2037 | static void rtl_init_mac_address(struct rtl8169_private *tp, | ||
| 2038 | void __iomem *ioaddr) | ||
| 2039 | { | ||
| 2040 | struct pci_dev *pdev = tp->pci_dev; | ||
| 2041 | u16 x; | ||
| 2042 | u8 mac[8]; | ||
| 2043 | |||
| 2044 | /* read EEPROM signature */ | ||
| 2045 | x = rtl_eeprom_read(ioaddr, RTL_EEPROM_SIG_ADDR); | ||
| 2046 | |||
| 2047 | if (x != RTL_EEPROM_SIG) { | ||
| 2048 | dev_info(&pdev->dev, "Missing EEPROM signature: %04x\n", x); | ||
| 2049 | return; | ||
| 2050 | } | ||
| 2051 | |||
| 2052 | /* read MAC address */ | ||
| 2053 | x = rtl_eeprom_read(ioaddr, RTL_EEPROM_MAC_ADDR); | ||
| 2054 | mac[0] = x & 0xff; | ||
| 2055 | mac[1] = x >> 8; | ||
| 2056 | x = rtl_eeprom_read(ioaddr, RTL_EEPROM_MAC_ADDR + 1); | ||
| 2057 | mac[2] = x & 0xff; | ||
| 2058 | mac[3] = x >> 8; | ||
| 2059 | x = rtl_eeprom_read(ioaddr, RTL_EEPROM_MAC_ADDR + 2); | ||
| 2060 | mac[4] = x & 0xff; | ||
| 2061 | mac[5] = x >> 8; | ||
| 2062 | |||
| 2063 | if (netif_msg_probe(tp)) { | ||
| 2064 | DECLARE_MAC_BUF(buf); | ||
| 2065 | |||
| 2066 | dev_info(&pdev->dev, "MAC address found in EEPROM: %s\n", | ||
| 2067 | print_mac(buf, mac)); | ||
| 2068 | } | ||
| 2069 | |||
| 2070 | if (is_valid_ether_addr(mac)) | ||
| 2071 | rtl_rar_set(tp, mac); | ||
| 2072 | } | ||
| 2073 | |||
| 1946 | static int __devinit | 2074 | static int __devinit |
| 1947 | rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | 2075 | rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) |
| 1948 | { | 2076 | { |
| @@ -2121,6 +2249,8 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 2121 | 2249 | ||
| 2122 | tp->mmio_addr = ioaddr; | 2250 | tp->mmio_addr = ioaddr; |
| 2123 | 2251 | ||
| 2252 | rtl_init_mac_address(tp, ioaddr); | ||
| 2253 | |||
| 2124 | /* Get MAC address */ | 2254 | /* Get MAC address */ |
| 2125 | for (i = 0; i < MAC_ADDR_LEN; i++) | 2255 | for (i = 0; i < MAC_ADDR_LEN; i++) |
| 2126 | dev->dev_addr[i] = RTL_R8(MAC0 + i); | 2256 | dev->dev_addr[i] = RTL_R8(MAC0 + i); |
| @@ -3682,6 +3812,9 @@ static int rtl8169_close(struct net_device *dev) | |||
| 3682 | struct rtl8169_private *tp = netdev_priv(dev); | 3812 | struct rtl8169_private *tp = netdev_priv(dev); |
| 3683 | struct pci_dev *pdev = tp->pci_dev; | 3813 | struct pci_dev *pdev = tp->pci_dev; |
| 3684 | 3814 | ||
| 3815 | /* update counters before going down */ | ||
| 3816 | rtl8169_update_counters(dev); | ||
| 3817 | |||
| 3685 | rtl8169_down(dev); | 3818 | rtl8169_down(dev); |
| 3686 | 3819 | ||
| 3687 | free_irq(dev->irq, dev); | 3820 | free_irq(dev->irq, dev); |
diff --git a/drivers/net/smc911x.h b/drivers/net/smc911x.h index 611584ee7a01..8140f7cb4d85 100644 --- a/drivers/net/smc911x.h +++ b/drivers/net/smc911x.h | |||
| @@ -42,6 +42,16 @@ | |||
| 42 | #define SMC_USE_16BIT 0 | 42 | #define SMC_USE_16BIT 0 |
| 43 | #define SMC_USE_32BIT 1 | 43 | #define SMC_USE_32BIT 1 |
| 44 | #define SMC_IRQ_SENSE IRQF_TRIGGER_LOW | 44 | #define SMC_IRQ_SENSE IRQF_TRIGGER_LOW |
| 45 | #elif defined(CONFIG_ARCH_OMAP34XX) | ||
| 46 | #define SMC_USE_16BIT 0 | ||
| 47 | #define SMC_USE_32BIT 1 | ||
| 48 | #define SMC_IRQ_SENSE IRQF_TRIGGER_LOW | ||
| 49 | #define SMC_MEM_RESERVED 1 | ||
| 50 | #elif defined(CONFIG_ARCH_OMAP24XX) | ||
| 51 | #define SMC_USE_16BIT 0 | ||
| 52 | #define SMC_USE_32BIT 1 | ||
| 53 | #define SMC_IRQ_SENSE IRQF_TRIGGER_LOW | ||
| 54 | #define SMC_MEM_RESERVED 1 | ||
| 45 | #else | 55 | #else |
| 46 | /* | 56 | /* |
| 47 | * Default configuration | 57 | * Default configuration |
| @@ -674,6 +684,7 @@ smc_pxa_dma_outsl(struct smc911x_local *lp, u_long physaddr, | |||
| 674 | #define CHIP_9116 0x0116 | 684 | #define CHIP_9116 0x0116 |
| 675 | #define CHIP_9117 0x0117 | 685 | #define CHIP_9117 0x0117 |
| 676 | #define CHIP_9118 0x0118 | 686 | #define CHIP_9118 0x0118 |
| 687 | #define CHIP_9211 0x9211 | ||
| 677 | #define CHIP_9215 0x115A | 688 | #define CHIP_9215 0x115A |
| 678 | #define CHIP_9217 0x117A | 689 | #define CHIP_9217 0x117A |
| 679 | #define CHIP_9218 0x118A | 690 | #define CHIP_9218 0x118A |
| @@ -688,6 +699,7 @@ static const struct chip_id chip_ids[] = { | |||
| 688 | { CHIP_9116, "LAN9116" }, | 699 | { CHIP_9116, "LAN9116" }, |
| 689 | { CHIP_9117, "LAN9117" }, | 700 | { CHIP_9117, "LAN9117" }, |
| 690 | { CHIP_9118, "LAN9118" }, | 701 | { CHIP_9118, "LAN9118" }, |
| 702 | { CHIP_9211, "LAN9211" }, | ||
| 691 | { CHIP_9215, "LAN9215" }, | 703 | { CHIP_9215, "LAN9215" }, |
| 692 | { CHIP_9217, "LAN9217" }, | 704 | { CHIP_9217, "LAN9217" }, |
| 693 | { CHIP_9218, "LAN9218" }, | 705 | { CHIP_9218, "LAN9218" }, |
diff --git a/drivers/net/smsc911x.c b/drivers/net/smsc911x.c index 783c1a7b869e..9a78daec2fe9 100644 --- a/drivers/net/smsc911x.c +++ b/drivers/net/smsc911x.c | |||
| @@ -1624,7 +1624,7 @@ static int smsc911x_eeprom_send_cmd(struct smsc911x_data *pdata, u32 op) | |||
| 1624 | do { | 1624 | do { |
| 1625 | msleep(1); | 1625 | msleep(1); |
| 1626 | e2cmd = smsc911x_reg_read(pdata, E2P_CMD); | 1626 | e2cmd = smsc911x_reg_read(pdata, E2P_CMD); |
| 1627 | } while ((e2cmd & E2P_CMD_EPC_BUSY_) && (timeout--)); | 1627 | } while ((e2cmd & E2P_CMD_EPC_BUSY_) && (--timeout)); |
| 1628 | 1628 | ||
| 1629 | if (!timeout) { | 1629 | if (!timeout) { |
| 1630 | SMSC_TRACE(DRV, "TIMED OUT"); | 1630 | SMSC_TRACE(DRV, "TIMED OUT"); |
diff --git a/drivers/net/smsc9420.c b/drivers/net/smsc9420.c index a1e4b3895b33..4e15ae068b3f 100644 --- a/drivers/net/smsc9420.c +++ b/drivers/net/smsc9420.c | |||
| @@ -341,7 +341,7 @@ static int smsc9420_eeprom_send_cmd(struct smsc9420_pdata *pd, u32 op) | |||
| 341 | do { | 341 | do { |
| 342 | msleep(1); | 342 | msleep(1); |
| 343 | e2cmd = smsc9420_reg_read(pd, E2P_CMD); | 343 | e2cmd = smsc9420_reg_read(pd, E2P_CMD); |
| 344 | } while ((e2cmd & E2P_CMD_EPC_BUSY_) && (timeout--)); | 344 | } while ((e2cmd & E2P_CMD_EPC_BUSY_) && (--timeout)); |
| 345 | 345 | ||
| 346 | if (!timeout) { | 346 | if (!timeout) { |
| 347 | smsc_info(HW, "TIMED OUT"); | 347 | smsc_info(HW, "TIMED OUT"); |
| @@ -413,6 +413,7 @@ static int smsc9420_ethtool_get_eeprom(struct net_device *dev, | |||
| 413 | } | 413 | } |
| 414 | 414 | ||
| 415 | memcpy(data, &eeprom_data[eeprom->offset], len); | 415 | memcpy(data, &eeprom_data[eeprom->offset], len); |
| 416 | eeprom->magic = SMSC9420_EEPROM_MAGIC; | ||
| 416 | eeprom->len = len; | 417 | eeprom->len = len; |
| 417 | return 0; | 418 | return 0; |
| 418 | } | 419 | } |
| @@ -423,6 +424,9 @@ static int smsc9420_ethtool_set_eeprom(struct net_device *dev, | |||
| 423 | struct smsc9420_pdata *pd = netdev_priv(dev); | 424 | struct smsc9420_pdata *pd = netdev_priv(dev); |
| 424 | int ret; | 425 | int ret; |
| 425 | 426 | ||
| 427 | if (eeprom->magic != SMSC9420_EEPROM_MAGIC) | ||
| 428 | return -EINVAL; | ||
| 429 | |||
| 426 | smsc9420_eeprom_enable_access(pd); | 430 | smsc9420_eeprom_enable_access(pd); |
| 427 | smsc9420_eeprom_send_cmd(pd, E2P_CMD_EPC_CMD_EWEN_); | 431 | smsc9420_eeprom_send_cmd(pd, E2P_CMD_EPC_CMD_EWEN_); |
| 428 | ret = smsc9420_eeprom_write_location(pd, eeprom->offset, *data); | 432 | ret = smsc9420_eeprom_write_location(pd, eeprom->offset, *data); |
diff --git a/drivers/net/smsc9420.h b/drivers/net/smsc9420.h index 69c351f93f86..e441402f77a2 100644 --- a/drivers/net/smsc9420.h +++ b/drivers/net/smsc9420.h | |||
| @@ -44,6 +44,7 @@ | |||
| 44 | #define LAN_REGISTER_EXTENT (0x400) | 44 | #define LAN_REGISTER_EXTENT (0x400) |
| 45 | 45 | ||
| 46 | #define SMSC9420_EEPROM_SIZE ((u32)11) | 46 | #define SMSC9420_EEPROM_SIZE ((u32)11) |
| 47 | #define SMSC9420_EEPROM_MAGIC (0x9420) | ||
| 47 | 48 | ||
| 48 | #define PKT_BUF_SZ (VLAN_ETH_FRAME_LEN + NET_IP_ALIGN + 4) | 49 | #define PKT_BUF_SZ (VLAN_ETH_FRAME_LEN + NET_IP_ALIGN + 4) |
| 49 | 50 | ||
diff --git a/drivers/net/sun3lance.c b/drivers/net/sun3lance.c index 4bb8f72c65cc..e5beb299cbd0 100644 --- a/drivers/net/sun3lance.c +++ b/drivers/net/sun3lance.c | |||
| @@ -428,7 +428,7 @@ static int lance_open( struct net_device *dev ) | |||
| 428 | while (--i > 0) | 428 | while (--i > 0) |
| 429 | if (DREG & CSR0_IDON) | 429 | if (DREG & CSR0_IDON) |
| 430 | break; | 430 | break; |
| 431 | if (i < 0 || (DREG & CSR0_ERR)) { | 431 | if (i <= 0 || (DREG & CSR0_ERR)) { |
| 432 | DPRINTK( 2, ( "lance_open(): opening %s failed, i=%d, csr0=%04x\n", | 432 | DPRINTK( 2, ( "lance_open(): opening %s failed, i=%d, csr0=%04x\n", |
| 433 | dev->name, i, DREG )); | 433 | dev->name, i, DREG )); |
| 434 | DREG = CSR0_STOP; | 434 | DREG = CSR0_STOP; |
diff --git a/drivers/net/sundance.c b/drivers/net/sundance.c index feaf0e0577d7..43695b76606f 100644 --- a/drivers/net/sundance.c +++ b/drivers/net/sundance.c | |||
| @@ -909,7 +909,7 @@ static void check_duplex(struct net_device *dev) | |||
| 909 | printk(KERN_INFO "%s: Setting %s-duplex based on MII #%d " | 909 | printk(KERN_INFO "%s: Setting %s-duplex based on MII #%d " |
| 910 | "negotiated capability %4.4x.\n", dev->name, | 910 | "negotiated capability %4.4x.\n", dev->name, |
| 911 | duplex ? "full" : "half", np->phys[0], negotiated); | 911 | duplex ? "full" : "half", np->phys[0], negotiated); |
| 912 | iowrite16(ioread16(ioaddr + MACCtrl0) | duplex ? 0x20 : 0, ioaddr + MACCtrl0); | 912 | iowrite16(ioread16(ioaddr + MACCtrl0) | (duplex ? 0x20 : 0), ioaddr + MACCtrl0); |
| 913 | } | 913 | } |
| 914 | } | 914 | } |
| 915 | 915 | ||
diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c index b17efa9cc530..0fcb7503363d 100644 --- a/drivers/net/sungem.c +++ b/drivers/net/sungem.c | |||
| @@ -1157,7 +1157,7 @@ static void gem_pcs_reset(struct gem *gp) | |||
| 1157 | if (limit-- <= 0) | 1157 | if (limit-- <= 0) |
| 1158 | break; | 1158 | break; |
| 1159 | } | 1159 | } |
| 1160 | if (limit <= 0) | 1160 | if (limit < 0) |
| 1161 | printk(KERN_WARNING "%s: PCS reset bit would not clear.\n", | 1161 | printk(KERN_WARNING "%s: PCS reset bit would not clear.\n", |
| 1162 | gp->dev->name); | 1162 | gp->dev->name); |
| 1163 | } | 1163 | } |
| @@ -1229,7 +1229,7 @@ static void gem_reset(struct gem *gp) | |||
| 1229 | break; | 1229 | break; |
| 1230 | } while (val & (GREG_SWRST_TXRST | GREG_SWRST_RXRST)); | 1230 | } while (val & (GREG_SWRST_TXRST | GREG_SWRST_RXRST)); |
| 1231 | 1231 | ||
| 1232 | if (limit <= 0) | 1232 | if (limit < 0) |
| 1233 | printk(KERN_ERR "%s: SW reset is ghetto.\n", gp->dev->name); | 1233 | printk(KERN_ERR "%s: SW reset is ghetto.\n", gp->dev->name); |
| 1234 | 1234 | ||
| 1235 | if (gp->phy_type == phy_serialink || gp->phy_type == phy_serdes) | 1235 | if (gp->phy_type == phy_serialink || gp->phy_type == phy_serdes) |
| @@ -2221,6 +2221,8 @@ static int gem_do_start(struct net_device *dev) | |||
| 2221 | 2221 | ||
| 2222 | gp->running = 1; | 2222 | gp->running = 1; |
| 2223 | 2223 | ||
| 2224 | napi_enable(&gp->napi); | ||
| 2225 | |||
| 2224 | if (gp->lstate == link_up) { | 2226 | if (gp->lstate == link_up) { |
| 2225 | netif_carrier_on(gp->dev); | 2227 | netif_carrier_on(gp->dev); |
| 2226 | gem_set_link_modes(gp); | 2228 | gem_set_link_modes(gp); |
| @@ -2238,6 +2240,8 @@ static int gem_do_start(struct net_device *dev) | |||
| 2238 | spin_lock_irqsave(&gp->lock, flags); | 2240 | spin_lock_irqsave(&gp->lock, flags); |
| 2239 | spin_lock(&gp->tx_lock); | 2241 | spin_lock(&gp->tx_lock); |
| 2240 | 2242 | ||
| 2243 | napi_disable(&gp->napi); | ||
| 2244 | |||
| 2241 | gp->running = 0; | 2245 | gp->running = 0; |
| 2242 | gem_reset(gp); | 2246 | gem_reset(gp); |
| 2243 | gem_clean_rings(gp); | 2247 | gem_clean_rings(gp); |
| @@ -2338,8 +2342,6 @@ static int gem_open(struct net_device *dev) | |||
| 2338 | if (!gp->asleep) | 2342 | if (!gp->asleep) |
| 2339 | rc = gem_do_start(dev); | 2343 | rc = gem_do_start(dev); |
| 2340 | gp->opened = (rc == 0); | 2344 | gp->opened = (rc == 0); |
| 2341 | if (gp->opened) | ||
| 2342 | napi_enable(&gp->napi); | ||
| 2343 | 2345 | ||
| 2344 | mutex_unlock(&gp->pm_mutex); | 2346 | mutex_unlock(&gp->pm_mutex); |
| 2345 | 2347 | ||
| @@ -2476,8 +2478,6 @@ static int gem_resume(struct pci_dev *pdev) | |||
| 2476 | 2478 | ||
| 2477 | /* Re-attach net device */ | 2479 | /* Re-attach net device */ |
| 2478 | netif_device_attach(dev); | 2480 | netif_device_attach(dev); |
| 2479 | |||
| 2480 | napi_enable(&gp->napi); | ||
| 2481 | } | 2481 | } |
| 2482 | 2482 | ||
| 2483 | spin_lock_irqsave(&gp->lock, flags); | 2483 | spin_lock_irqsave(&gp->lock, flags); |
diff --git a/drivers/net/sunhme.c b/drivers/net/sunhme.c index 7a72a3112f0a..d4fb4acdbebd 100644 --- a/drivers/net/sunhme.c +++ b/drivers/net/sunhme.c | |||
| @@ -2543,25 +2543,36 @@ static struct quattro * __devinit quattro_sbus_find(struct of_device *child) | |||
| 2543 | } | 2543 | } |
| 2544 | 2544 | ||
| 2545 | /* After all quattro cards have been probed, we call these functions | 2545 | /* After all quattro cards have been probed, we call these functions |
| 2546 | * to register the IRQ handlers. | 2546 | * to register the IRQ handlers for the cards that have been |
| 2547 | * successfully probed and skip the cards that failed to initialize | ||
| 2547 | */ | 2548 | */ |
| 2548 | static void __init quattro_sbus_register_irqs(void) | 2549 | static int __init quattro_sbus_register_irqs(void) |
| 2549 | { | 2550 | { |
| 2550 | struct quattro *qp; | 2551 | struct quattro *qp; |
| 2551 | 2552 | ||
| 2552 | for (qp = qfe_sbus_list; qp != NULL; qp = qp->next) { | 2553 | for (qp = qfe_sbus_list; qp != NULL; qp = qp->next) { |
| 2553 | struct of_device *op = qp->quattro_dev; | 2554 | struct of_device *op = qp->quattro_dev; |
| 2554 | int err; | 2555 | int err, qfe_slot, skip = 0; |
| 2556 | |||
| 2557 | for (qfe_slot = 0; qfe_slot < 4; qfe_slot++) { | ||
| 2558 | if (!qp->happy_meals[qfe_slot]) | ||
| 2559 | skip = 1; | ||
| 2560 | } | ||
| 2561 | if (skip) | ||
| 2562 | continue; | ||
| 2555 | 2563 | ||
| 2556 | err = request_irq(op->irqs[0], | 2564 | err = request_irq(op->irqs[0], |
| 2557 | quattro_sbus_interrupt, | 2565 | quattro_sbus_interrupt, |
| 2558 | IRQF_SHARED, "Quattro", | 2566 | IRQF_SHARED, "Quattro", |
| 2559 | qp); | 2567 | qp); |
| 2560 | if (err != 0) { | 2568 | if (err != 0) { |
| 2561 | printk(KERN_ERR "Quattro: Fatal IRQ registery error %d.\n", err); | 2569 | printk(KERN_ERR "Quattro HME: IRQ registration " |
| 2562 | panic("QFE request irq"); | 2570 | "error %d.\n", err); |
| 2571 | return err; | ||
| 2563 | } | 2572 | } |
| 2564 | } | 2573 | } |
| 2574 | |||
| 2575 | return 0; | ||
| 2565 | } | 2576 | } |
| 2566 | 2577 | ||
| 2567 | static void quattro_sbus_free_irqs(void) | 2578 | static void quattro_sbus_free_irqs(void) |
| @@ -2570,6 +2581,14 @@ static void quattro_sbus_free_irqs(void) | |||
| 2570 | 2581 | ||
| 2571 | for (qp = qfe_sbus_list; qp != NULL; qp = qp->next) { | 2582 | for (qp = qfe_sbus_list; qp != NULL; qp = qp->next) { |
| 2572 | struct of_device *op = qp->quattro_dev; | 2583 | struct of_device *op = qp->quattro_dev; |
| 2584 | int qfe_slot, skip = 0; | ||
| 2585 | |||
| 2586 | for (qfe_slot = 0; qfe_slot < 4; qfe_slot++) { | ||
| 2587 | if (!qp->happy_meals[qfe_slot]) | ||
| 2588 | skip = 1; | ||
| 2589 | } | ||
| 2590 | if (skip) | ||
| 2591 | continue; | ||
| 2573 | 2592 | ||
| 2574 | free_irq(op->irqs[0], qp); | 2593 | free_irq(op->irqs[0], qp); |
| 2575 | } | 2594 | } |
| @@ -2629,6 +2648,14 @@ static int __devinit happy_meal_sbus_probe_one(struct of_device *op, int is_qfe) | |||
| 2629 | int i, qfe_slot = -1; | 2648 | int i, qfe_slot = -1; |
| 2630 | int err = -ENODEV; | 2649 | int err = -ENODEV; |
| 2631 | 2650 | ||
| 2651 | sbus_dp = to_of_device(op->dev.parent)->node; | ||
| 2652 | if (is_qfe) | ||
| 2653 | sbus_dp = to_of_device(op->dev.parent->parent)->node; | ||
| 2654 | |||
| 2655 | /* We can match PCI devices too, do not accept those here. */ | ||
| 2656 | if (strcmp(sbus_dp->name, "sbus")) | ||
| 2657 | return err; | ||
| 2658 | |||
| 2632 | if (is_qfe) { | 2659 | if (is_qfe) { |
| 2633 | qp = quattro_sbus_find(op); | 2660 | qp = quattro_sbus_find(op); |
| 2634 | if (qp == NULL) | 2661 | if (qp == NULL) |
| @@ -2734,10 +2761,6 @@ static int __devinit happy_meal_sbus_probe_one(struct of_device *op, int is_qfe) | |||
| 2734 | if (qp != NULL) | 2761 | if (qp != NULL) |
| 2735 | hp->happy_flags |= HFLAG_QUATTRO; | 2762 | hp->happy_flags |= HFLAG_QUATTRO; |
| 2736 | 2763 | ||
| 2737 | sbus_dp = to_of_device(op->dev.parent)->node; | ||
| 2738 | if (is_qfe) | ||
| 2739 | sbus_dp = to_of_device(op->dev.parent->parent)->node; | ||
| 2740 | |||
| 2741 | /* Get the supported DVMA burst sizes from our Happy SBUS. */ | 2764 | /* Get the supported DVMA burst sizes from our Happy SBUS. */ |
| 2742 | hp->happy_bursts = of_getintprop_default(sbus_dp, | 2765 | hp->happy_bursts = of_getintprop_default(sbus_dp, |
| 2743 | "burst-sizes", 0x00); | 2766 | "burst-sizes", 0x00); |
| @@ -2824,6 +2847,9 @@ err_out_iounmap: | |||
| 2824 | if (hp->tcvregs) | 2847 | if (hp->tcvregs) |
| 2825 | of_iounmap(&op->resource[4], hp->tcvregs, TCVR_REG_SIZE); | 2848 | of_iounmap(&op->resource[4], hp->tcvregs, TCVR_REG_SIZE); |
| 2826 | 2849 | ||
| 2850 | if (qp) | ||
| 2851 | qp->happy_meals[qfe_slot] = NULL; | ||
| 2852 | |||
| 2827 | err_out_free_netdev: | 2853 | err_out_free_netdev: |
| 2828 | free_netdev(dev); | 2854 | free_netdev(dev); |
| 2829 | 2855 | ||
| @@ -3281,7 +3307,7 @@ static int __init happy_meal_sbus_init(void) | |||
| 3281 | 3307 | ||
| 3282 | err = of_register_driver(&hme_sbus_driver, &of_bus_type); | 3308 | err = of_register_driver(&hme_sbus_driver, &of_bus_type); |
| 3283 | if (!err) | 3309 | if (!err) |
| 3284 | quattro_sbus_register_irqs(); | 3310 | err = quattro_sbus_register_irqs(); |
| 3285 | 3311 | ||
| 3286 | return err; | 3312 | return err; |
| 3287 | } | 3313 | } |
diff --git a/drivers/net/sunlance.c b/drivers/net/sunlance.c index 281373281756..16c528db7251 100644 --- a/drivers/net/sunlance.c +++ b/drivers/net/sunlance.c | |||
| @@ -343,7 +343,7 @@ static void lance_init_ring_dvma(struct net_device *dev) | |||
| 343 | ib->phys_addr [5] = dev->dev_addr [4]; | 343 | ib->phys_addr [5] = dev->dev_addr [4]; |
| 344 | 344 | ||
| 345 | /* Setup the Tx ring entries */ | 345 | /* Setup the Tx ring entries */ |
| 346 | for (i = 0; i <= TX_RING_SIZE; i++) { | 346 | for (i = 0; i < TX_RING_SIZE; i++) { |
| 347 | leptr = LANCE_ADDR(aib + libbuff_offset(tx_buf, i)); | 347 | leptr = LANCE_ADDR(aib + libbuff_offset(tx_buf, i)); |
| 348 | ib->btx_ring [i].tmd0 = leptr; | 348 | ib->btx_ring [i].tmd0 = leptr; |
| 349 | ib->btx_ring [i].tmd1_hadr = leptr >> 16; | 349 | ib->btx_ring [i].tmd1_hadr = leptr >> 16; |
| @@ -399,7 +399,7 @@ static void lance_init_ring_pio(struct net_device *dev) | |||
| 399 | sbus_writeb(dev->dev_addr[4], &ib->phys_addr[5]); | 399 | sbus_writeb(dev->dev_addr[4], &ib->phys_addr[5]); |
| 400 | 400 | ||
| 401 | /* Setup the Tx ring entries */ | 401 | /* Setup the Tx ring entries */ |
| 402 | for (i = 0; i <= TX_RING_SIZE; i++) { | 402 | for (i = 0; i < TX_RING_SIZE; i++) { |
| 403 | leptr = libbuff_offset(tx_buf, i); | 403 | leptr = libbuff_offset(tx_buf, i); |
| 404 | sbus_writew(leptr, &ib->btx_ring [i].tmd0); | 404 | sbus_writew(leptr, &ib->btx_ring [i].tmd0); |
| 405 | sbus_writeb(leptr >> 16,&ib->btx_ring [i].tmd1_hadr); | 405 | sbus_writeb(leptr >> 16,&ib->btx_ring [i].tmd1_hadr); |
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 8b3f84685387..dabdf59f8016 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
| @@ -852,7 +852,7 @@ static int tg3_bmcr_reset(struct tg3 *tp) | |||
| 852 | } | 852 | } |
| 853 | udelay(10); | 853 | udelay(10); |
| 854 | } | 854 | } |
| 855 | if (limit <= 0) | 855 | if (limit < 0) |
| 856 | return -EBUSY; | 856 | return -EBUSY; |
| 857 | 857 | ||
| 858 | return 0; | 858 | return 0; |
| @@ -1473,7 +1473,8 @@ static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable) | |||
| 1473 | { | 1473 | { |
| 1474 | u32 reg; | 1474 | u32 reg; |
| 1475 | 1475 | ||
| 1476 | if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) | 1476 | if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS) || |
| 1477 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) | ||
| 1477 | return; | 1478 | return; |
| 1478 | 1479 | ||
| 1479 | reg = MII_TG3_MISC_SHDW_WREN | | 1480 | reg = MII_TG3_MISC_SHDW_WREN | |
| @@ -1603,7 +1604,7 @@ static int tg3_wait_macro_done(struct tg3 *tp) | |||
| 1603 | break; | 1604 | break; |
| 1604 | } | 1605 | } |
| 1605 | } | 1606 | } |
| 1606 | if (limit <= 0) | 1607 | if (limit < 0) |
| 1607 | return -EBUSY; | 1608 | return -EBUSY; |
| 1608 | 1609 | ||
| 1609 | return 0; | 1610 | return 0; |
| @@ -2237,8 +2238,8 @@ static int tg3_set_power_state(struct tg3 *tp, pci_power_t state) | |||
| 2237 | phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask; | 2238 | phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask; |
| 2238 | if (phyid != TG3_PHY_ID_BCMAC131) { | 2239 | if (phyid != TG3_PHY_ID_BCMAC131) { |
| 2239 | phyid &= TG3_PHY_OUI_MASK; | 2240 | phyid &= TG3_PHY_OUI_MASK; |
| 2240 | if (phyid == TG3_PHY_OUI_1 && | 2241 | if (phyid == TG3_PHY_OUI_1 || |
| 2241 | phyid == TG3_PHY_OUI_2 && | 2242 | phyid == TG3_PHY_OUI_2 || |
| 2242 | phyid == TG3_PHY_OUI_3) | 2243 | phyid == TG3_PHY_OUI_3) |
| 2243 | do_low_power = true; | 2244 | do_low_power = true; |
| 2244 | } | 2245 | } |
diff --git a/drivers/net/tokenring/tmspci.c b/drivers/net/tokenring/tmspci.c index 5f601773c260..e2150b3c83d9 100644 --- a/drivers/net/tokenring/tmspci.c +++ b/drivers/net/tokenring/tmspci.c | |||
| @@ -121,11 +121,6 @@ static int __devinit tms_pci_attach(struct pci_dev *pdev, const struct pci_devic | |||
| 121 | goto err_out_trdev; | 121 | goto err_out_trdev; |
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | ret = request_irq(pdev->irq, tms380tr_interrupt, IRQF_SHARED, | ||
| 125 | dev->name, dev); | ||
| 126 | if (ret) | ||
| 127 | goto err_out_region; | ||
| 128 | |||
| 129 | dev->base_addr = pci_ioaddr; | 124 | dev->base_addr = pci_ioaddr; |
| 130 | dev->irq = pci_irq_line; | 125 | dev->irq = pci_irq_line; |
| 131 | dev->dma = 0; | 126 | dev->dma = 0; |
| @@ -142,7 +137,7 @@ static int __devinit tms_pci_attach(struct pci_dev *pdev, const struct pci_devic | |||
| 142 | ret = tmsdev_init(dev, &pdev->dev); | 137 | ret = tmsdev_init(dev, &pdev->dev); |
| 143 | if (ret) { | 138 | if (ret) { |
| 144 | printk("%s: unable to get memory for dev->priv.\n", dev->name); | 139 | printk("%s: unable to get memory for dev->priv.\n", dev->name); |
| 145 | goto err_out_irq; | 140 | goto err_out_region; |
| 146 | } | 141 | } |
| 147 | 142 | ||
| 148 | tp = netdev_priv(dev); | 143 | tp = netdev_priv(dev); |
| @@ -157,6 +152,11 @@ static int __devinit tms_pci_attach(struct pci_dev *pdev, const struct pci_devic | |||
| 157 | 152 | ||
| 158 | tp->tmspriv = cardinfo; | 153 | tp->tmspriv = cardinfo; |
| 159 | 154 | ||
| 155 | ret = request_irq(pdev->irq, tms380tr_interrupt, IRQF_SHARED, | ||
| 156 | dev->name, dev); | ||
| 157 | if (ret) | ||
| 158 | goto err_out_tmsdev; | ||
| 159 | |||
| 160 | dev->open = tms380tr_open; | 160 | dev->open = tms380tr_open; |
| 161 | dev->stop = tms380tr_close; | 161 | dev->stop = tms380tr_close; |
| 162 | pci_set_drvdata(pdev, dev); | 162 | pci_set_drvdata(pdev, dev); |
| @@ -164,15 +164,15 @@ static int __devinit tms_pci_attach(struct pci_dev *pdev, const struct pci_devic | |||
| 164 | 164 | ||
| 165 | ret = register_netdev(dev); | 165 | ret = register_netdev(dev); |
| 166 | if (ret) | 166 | if (ret) |
| 167 | goto err_out_tmsdev; | 167 | goto err_out_irq; |
| 168 | 168 | ||
| 169 | return 0; | 169 | return 0; |
| 170 | 170 | ||
| 171 | err_out_irq: | ||
| 172 | free_irq(pdev->irq, dev); | ||
| 171 | err_out_tmsdev: | 173 | err_out_tmsdev: |
| 172 | pci_set_drvdata(pdev, NULL); | 174 | pci_set_drvdata(pdev, NULL); |
| 173 | tmsdev_term(dev); | 175 | tmsdev_term(dev); |
| 174 | err_out_irq: | ||
| 175 | free_irq(pdev->irq, dev); | ||
| 176 | err_out_region: | 176 | err_out_region: |
| 177 | release_region(pci_ioaddr, TMS_PCI_IO_EXTENT); | 177 | release_region(pci_ioaddr, TMS_PCI_IO_EXTENT); |
| 178 | err_out_trdev: | 178 | err_out_trdev: |
diff --git a/drivers/net/tulip/de2104x.c b/drivers/net/tulip/de2104x.c index 0bf2114738be..d4c5ecc51f77 100644 --- a/drivers/net/tulip/de2104x.c +++ b/drivers/net/tulip/de2104x.c | |||
| @@ -464,13 +464,14 @@ static void de_rx (struct de_private *de) | |||
| 464 | drop = 1; | 464 | drop = 1; |
| 465 | 465 | ||
| 466 | rx_next: | 466 | rx_next: |
| 467 | de->rx_ring[rx_tail].opts1 = cpu_to_le32(DescOwn); | ||
| 468 | if (rx_tail == (DE_RX_RING_SIZE - 1)) | 467 | if (rx_tail == (DE_RX_RING_SIZE - 1)) |
| 469 | de->rx_ring[rx_tail].opts2 = | 468 | de->rx_ring[rx_tail].opts2 = |
| 470 | cpu_to_le32(RingEnd | de->rx_buf_sz); | 469 | cpu_to_le32(RingEnd | de->rx_buf_sz); |
| 471 | else | 470 | else |
| 472 | de->rx_ring[rx_tail].opts2 = cpu_to_le32(de->rx_buf_sz); | 471 | de->rx_ring[rx_tail].opts2 = cpu_to_le32(de->rx_buf_sz); |
| 473 | de->rx_ring[rx_tail].addr1 = cpu_to_le32(mapping); | 472 | de->rx_ring[rx_tail].addr1 = cpu_to_le32(mapping); |
| 473 | wmb(); | ||
| 474 | de->rx_ring[rx_tail].opts1 = cpu_to_le32(DescOwn); | ||
| 474 | rx_tail = NEXT_RX(rx_tail); | 475 | rx_tail = NEXT_RX(rx_tail); |
| 475 | } | 476 | } |
| 476 | 477 | ||
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index d7b81e4fdd56..09fea31d3e36 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c | |||
| @@ -157,10 +157,16 @@ static int update_filter(struct tap_filter *filter, void __user *arg) | |||
| 157 | 157 | ||
| 158 | nexact = n; | 158 | nexact = n; |
| 159 | 159 | ||
| 160 | /* The rest is hashed */ | 160 | /* Remaining multicast addresses are hashed, |
| 161 | * unicast will leave the filter disabled. */ | ||
| 161 | memset(filter->mask, 0, sizeof(filter->mask)); | 162 | memset(filter->mask, 0, sizeof(filter->mask)); |
| 162 | for (; n < uf.count; n++) | 163 | for (; n < uf.count; n++) { |
| 164 | if (!is_multicast_ether_addr(addr[n].u)) { | ||
| 165 | err = 0; /* no filter */ | ||
| 166 | goto done; | ||
| 167 | } | ||
| 163 | addr_hash_set(filter->mask, addr[n].u); | 168 | addr_hash_set(filter->mask, addr[n].u); |
| 169 | } | ||
| 164 | 170 | ||
| 165 | /* For ALLMULTI just set the mask to all ones. | 171 | /* For ALLMULTI just set the mask to all ones. |
| 166 | * This overrides the mask populated above. */ | 172 | * This overrides the mask populated above. */ |
diff --git a/drivers/net/ucc_geth_mii.c b/drivers/net/ucc_geth_mii.c index 54635911305c..0ada4edd56eb 100644 --- a/drivers/net/ucc_geth_mii.c +++ b/drivers/net/ucc_geth_mii.c | |||
| @@ -107,7 +107,7 @@ int uec_mdio_read(struct mii_bus *bus, int mii_id, int regnum) | |||
| 107 | static int uec_mdio_reset(struct mii_bus *bus) | 107 | static int uec_mdio_reset(struct mii_bus *bus) |
| 108 | { | 108 | { |
| 109 | struct ucc_mii_mng __iomem *regs = (void __iomem *)bus->priv; | 109 | struct ucc_mii_mng __iomem *regs = (void __iomem *)bus->priv; |
| 110 | unsigned int timeout = PHY_INIT_TIMEOUT; | 110 | int timeout = PHY_INIT_TIMEOUT; |
| 111 | 111 | ||
| 112 | mutex_lock(&bus->mdio_lock); | 112 | mutex_lock(&bus->mdio_lock); |
| 113 | 113 | ||
| @@ -123,7 +123,7 @@ static int uec_mdio_reset(struct mii_bus *bus) | |||
| 123 | 123 | ||
| 124 | mutex_unlock(&bus->mdio_lock); | 124 | mutex_unlock(&bus->mdio_lock); |
| 125 | 125 | ||
| 126 | if (timeout <= 0) { | 126 | if (timeout < 0) { |
| 127 | printk(KERN_ERR "%s: The MII Bus is stuck!\n", bus->name); | 127 | printk(KERN_ERR "%s: The MII Bus is stuck!\n", bus->name); |
| 128 | return -EBUSY; | 128 | return -EBUSY; |
| 129 | } | 129 | } |
diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c index e009481c606c..396f821b5ff0 100644 --- a/drivers/net/usb/asix.c +++ b/drivers/net/usb/asix.c | |||
| @@ -1451,6 +1451,14 @@ static const struct usb_device_id products [] = { | |||
| 1451 | // Cables-to-Go USB Ethernet Adapter | 1451 | // Cables-to-Go USB Ethernet Adapter |
| 1452 | USB_DEVICE(0x0b95, 0x772a), | 1452 | USB_DEVICE(0x0b95, 0x772a), |
| 1453 | .driver_info = (unsigned long) &ax88772_info, | 1453 | .driver_info = (unsigned long) &ax88772_info, |
| 1454 | }, { | ||
| 1455 | // ABOCOM for pci | ||
| 1456 | USB_DEVICE(0x14ea, 0xab11), | ||
| 1457 | .driver_info = (unsigned long) &ax88178_info, | ||
| 1458 | }, { | ||
| 1459 | // ASIX 88772a | ||
| 1460 | USB_DEVICE(0x0db0, 0xa877), | ||
| 1461 | .driver_info = (unsigned long) &ax88772_info, | ||
| 1454 | }, | 1462 | }, |
| 1455 | { }, // END | 1463 | { }, // END |
| 1456 | }; | 1464 | }; |
diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c index 0e061dfea78d..55e8ecc3a9e5 100644 --- a/drivers/net/usb/cdc_ether.c +++ b/drivers/net/usb/cdc_ether.c | |||
| @@ -559,6 +559,11 @@ static const struct usb_device_id products [] = { | |||
| 559 | USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ETHERNET, | 559 | USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ETHERNET, |
| 560 | USB_CDC_PROTO_NONE), | 560 | USB_CDC_PROTO_NONE), |
| 561 | .driver_info = (unsigned long) &cdc_info, | 561 | .driver_info = (unsigned long) &cdc_info, |
| 562 | }, { | ||
| 563 | /* Ericsson F3507g */ | ||
| 564 | USB_DEVICE_AND_INTERFACE_INFO(0x0bdb, 0x1900, USB_CLASS_COMM, | ||
| 565 | USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE), | ||
| 566 | .driver_info = (unsigned long) &cdc_info, | ||
| 562 | }, | 567 | }, |
| 563 | { }, // END | 568 | { }, // END |
| 564 | }; | 569 | }; |
diff --git a/drivers/net/usb/dm9601.c b/drivers/net/usb/dm9601.c index 5b67bbf1987e..81682c6defa0 100644 --- a/drivers/net/usb/dm9601.c +++ b/drivers/net/usb/dm9601.c | |||
| @@ -635,6 +635,10 @@ static const struct usb_device_id products[] = { | |||
| 635 | USB_DEVICE(0x0a47, 0x9601), /* Hirose USB-100 */ | 635 | USB_DEVICE(0x0a47, 0x9601), /* Hirose USB-100 */ |
| 636 | .driver_info = (unsigned long)&dm9601_info, | 636 | .driver_info = (unsigned long)&dm9601_info, |
| 637 | }, | 637 | }, |
| 638 | { | ||
| 639 | USB_DEVICE(0x0fe6, 0x8101), /* DM9601 USB to Fast Ethernet Adapter */ | ||
| 640 | .driver_info = (unsigned long)&dm9601_info, | ||
| 641 | }, | ||
| 638 | {}, // END | 642 | {}, // END |
| 639 | }; | 643 | }; |
| 640 | 644 | ||
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index aa3149078888..c32284ff3f54 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c | |||
| @@ -723,8 +723,8 @@ u32 usbnet_get_link (struct net_device *net) | |||
| 723 | if (dev->mii.mdio_read) | 723 | if (dev->mii.mdio_read) |
| 724 | return mii_link_ok(&dev->mii); | 724 | return mii_link_ok(&dev->mii); |
| 725 | 725 | ||
| 726 | /* Otherwise, say we're up (to avoid breaking scripts) */ | 726 | /* Otherwise, dtrt for drivers calling netif_carrier_{on,off} */ |
| 727 | return 1; | 727 | return ethtool_op_get_link(net); |
| 728 | } | 728 | } |
| 729 | EXPORT_SYMBOL_GPL(usbnet_get_link); | 729 | EXPORT_SYMBOL_GPL(usbnet_get_link); |
| 730 | 730 | ||
diff --git a/drivers/net/usb/zaurus.c b/drivers/net/usb/zaurus.c index e24f7b3ace4b..04882c8f9bf1 100644 --- a/drivers/net/usb/zaurus.c +++ b/drivers/net/usb/zaurus.c | |||
| @@ -341,6 +341,11 @@ static const struct usb_device_id products [] = { | |||
| 341 | USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_MDLM, | 341 | USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_MDLM, |
| 342 | USB_CDC_PROTO_NONE), | 342 | USB_CDC_PROTO_NONE), |
| 343 | .driver_info = (unsigned long) &bogus_mdlm_info, | 343 | .driver_info = (unsigned long) &bogus_mdlm_info, |
| 344 | }, { | ||
| 345 | /* Motorola MOTOMAGX phones */ | ||
| 346 | USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x6425, USB_CLASS_COMM, | ||
| 347 | USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE), | ||
| 348 | .driver_info = (unsigned long) &bogus_mdlm_info, | ||
| 344 | }, | 349 | }, |
| 345 | 350 | ||
| 346 | /* Olympus has some models with a Zaurus-compatible option. | 351 | /* Olympus has some models with a Zaurus-compatible option. |
diff --git a/drivers/net/veth.c b/drivers/net/veth.c index 852d0e7c4e62..124fe75b8a8a 100644 --- a/drivers/net/veth.c +++ b/drivers/net/veth.c | |||
| @@ -239,6 +239,16 @@ static int veth_open(struct net_device *dev) | |||
| 239 | return 0; | 239 | return 0; |
| 240 | } | 240 | } |
| 241 | 241 | ||
| 242 | static int veth_close(struct net_device *dev) | ||
| 243 | { | ||
| 244 | struct veth_priv *priv = netdev_priv(dev); | ||
| 245 | |||
| 246 | netif_carrier_off(dev); | ||
| 247 | netif_carrier_off(priv->peer); | ||
| 248 | |||
| 249 | return 0; | ||
| 250 | } | ||
| 251 | |||
| 242 | static int veth_dev_init(struct net_device *dev) | 252 | static int veth_dev_init(struct net_device *dev) |
| 243 | { | 253 | { |
| 244 | struct veth_net_stats *stats; | 254 | struct veth_net_stats *stats; |
| @@ -263,10 +273,12 @@ static void veth_dev_free(struct net_device *dev) | |||
| 263 | } | 273 | } |
| 264 | 274 | ||
| 265 | static const struct net_device_ops veth_netdev_ops = { | 275 | static const struct net_device_ops veth_netdev_ops = { |
| 266 | .ndo_init = veth_dev_init, | 276 | .ndo_init = veth_dev_init, |
| 267 | .ndo_open = veth_open, | 277 | .ndo_open = veth_open, |
| 268 | .ndo_start_xmit = veth_xmit, | 278 | .ndo_stop = veth_close, |
| 269 | .ndo_get_stats = veth_get_stats, | 279 | .ndo_start_xmit = veth_xmit, |
| 280 | .ndo_get_stats = veth_get_stats, | ||
| 281 | .ndo_set_mac_address = eth_mac_addr, | ||
| 270 | }; | 282 | }; |
| 271 | 283 | ||
| 272 | static void veth_setup(struct net_device *dev) | 284 | static void veth_setup(struct net_device *dev) |
| @@ -279,44 +291,6 @@ static void veth_setup(struct net_device *dev) | |||
| 279 | dev->destructor = veth_dev_free; | 291 | dev->destructor = veth_dev_free; |
| 280 | } | 292 | } |
| 281 | 293 | ||
| 282 | static void veth_change_state(struct net_device *dev) | ||
| 283 | { | ||
| 284 | struct net_device *peer; | ||
| 285 | struct veth_priv *priv; | ||
| 286 | |||
| 287 | priv = netdev_priv(dev); | ||
| 288 | peer = priv->peer; | ||
| 289 | |||
| 290 | if (netif_carrier_ok(peer)) { | ||
| 291 | if (!netif_carrier_ok(dev)) | ||
| 292 | netif_carrier_on(dev); | ||
| 293 | } else { | ||
| 294 | if (netif_carrier_ok(dev)) | ||
| 295 | netif_carrier_off(dev); | ||
| 296 | } | ||
| 297 | } | ||
| 298 | |||
| 299 | static int veth_device_event(struct notifier_block *unused, | ||
| 300 | unsigned long event, void *ptr) | ||
| 301 | { | ||
| 302 | struct net_device *dev = ptr; | ||
| 303 | |||
| 304 | if (dev->netdev_ops->ndo_open != veth_open) | ||
| 305 | goto out; | ||
| 306 | |||
| 307 | switch (event) { | ||
| 308 | case NETDEV_CHANGE: | ||
| 309 | veth_change_state(dev); | ||
| 310 | break; | ||
| 311 | } | ||
| 312 | out: | ||
| 313 | return NOTIFY_DONE; | ||
| 314 | } | ||
| 315 | |||
| 316 | static struct notifier_block veth_notifier_block __read_mostly = { | ||
| 317 | .notifier_call = veth_device_event, | ||
| 318 | }; | ||
| 319 | |||
| 320 | /* | 294 | /* |
| 321 | * netlink interface | 295 | * netlink interface |
| 322 | */ | 296 | */ |
| @@ -467,14 +441,12 @@ static struct rtnl_link_ops veth_link_ops = { | |||
| 467 | 441 | ||
| 468 | static __init int veth_init(void) | 442 | static __init int veth_init(void) |
| 469 | { | 443 | { |
| 470 | register_netdevice_notifier(&veth_notifier_block); | ||
| 471 | return rtnl_link_register(&veth_link_ops); | 444 | return rtnl_link_register(&veth_link_ops); |
| 472 | } | 445 | } |
| 473 | 446 | ||
| 474 | static __exit void veth_exit(void) | 447 | static __exit void veth_exit(void) |
| 475 | { | 448 | { |
| 476 | rtnl_link_unregister(&veth_link_ops); | 449 | rtnl_link_unregister(&veth_link_ops); |
| 477 | unregister_netdevice_notifier(&veth_notifier_block); | ||
| 478 | } | 450 | } |
| 479 | 451 | ||
| 480 | module_init(veth_init); | 452 | module_init(veth_init); |
diff --git a/drivers/net/wimax/i2400m/i2400m.h b/drivers/net/wimax/i2400m/i2400m.h index 067c871cc226..3b9d27ea2950 100644 --- a/drivers/net/wimax/i2400m/i2400m.h +++ b/drivers/net/wimax/i2400m/i2400m.h | |||
| @@ -157,7 +157,7 @@ enum { | |||
| 157 | 157 | ||
| 158 | 158 | ||
| 159 | /* Firmware version we request when pulling the fw image file */ | 159 | /* Firmware version we request when pulling the fw image file */ |
| 160 | #define I2400M_FW_VERSION "1.3" | 160 | #define I2400M_FW_VERSION "1.4" |
| 161 | 161 | ||
| 162 | 162 | ||
| 163 | /** | 163 | /** |
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c index a533ed60bb4d..1d77ee9d6e99 100644 --- a/drivers/net/wireless/ath5k/base.c +++ b/drivers/net/wireless/ath5k/base.c | |||
| @@ -1098,6 +1098,42 @@ ath5k_hw_to_driver_rix(struct ath5k_softc *sc, int hw_rix) | |||
| 1098 | * Buffers setup * | 1098 | * Buffers setup * |
| 1099 | \***************/ | 1099 | \***************/ |
| 1100 | 1100 | ||
| 1101 | static | ||
| 1102 | struct sk_buff *ath5k_rx_skb_alloc(struct ath5k_softc *sc, dma_addr_t *skb_addr) | ||
| 1103 | { | ||
| 1104 | struct sk_buff *skb; | ||
| 1105 | unsigned int off; | ||
| 1106 | |||
| 1107 | /* | ||
| 1108 | * Allocate buffer with headroom_needed space for the | ||
| 1109 | * fake physical layer header at the start. | ||
| 1110 | */ | ||
| 1111 | skb = dev_alloc_skb(sc->rxbufsize + sc->cachelsz - 1); | ||
| 1112 | |||
| 1113 | if (!skb) { | ||
| 1114 | ATH5K_ERR(sc, "can't alloc skbuff of size %u\n", | ||
| 1115 | sc->rxbufsize + sc->cachelsz - 1); | ||
| 1116 | return NULL; | ||
| 1117 | } | ||
| 1118 | /* | ||
| 1119 | * Cache-line-align. This is important (for the | ||
| 1120 | * 5210 at least) as not doing so causes bogus data | ||
| 1121 | * in rx'd frames. | ||
| 1122 | */ | ||
| 1123 | off = ((unsigned long)skb->data) % sc->cachelsz; | ||
| 1124 | if (off != 0) | ||
| 1125 | skb_reserve(skb, sc->cachelsz - off); | ||
| 1126 | |||
| 1127 | *skb_addr = pci_map_single(sc->pdev, | ||
| 1128 | skb->data, sc->rxbufsize, PCI_DMA_FROMDEVICE); | ||
| 1129 | if (unlikely(pci_dma_mapping_error(sc->pdev, *skb_addr))) { | ||
| 1130 | ATH5K_ERR(sc, "%s: DMA mapping failed\n", __func__); | ||
| 1131 | dev_kfree_skb(skb); | ||
| 1132 | return NULL; | ||
| 1133 | } | ||
| 1134 | return skb; | ||
| 1135 | } | ||
| 1136 | |||
| 1101 | static int | 1137 | static int |
| 1102 | ath5k_rxbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf) | 1138 | ath5k_rxbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf) |
| 1103 | { | 1139 | { |
| @@ -1105,37 +1141,11 @@ ath5k_rxbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf) | |||
| 1105 | struct sk_buff *skb = bf->skb; | 1141 | struct sk_buff *skb = bf->skb; |
| 1106 | struct ath5k_desc *ds; | 1142 | struct ath5k_desc *ds; |
| 1107 | 1143 | ||
| 1108 | if (likely(skb == NULL)) { | 1144 | if (!skb) { |
| 1109 | unsigned int off; | 1145 | skb = ath5k_rx_skb_alloc(sc, &bf->skbaddr); |
| 1110 | 1146 | if (!skb) | |
| 1111 | /* | ||
| 1112 | * Allocate buffer with headroom_needed space for the | ||
| 1113 | * fake physical layer header at the start. | ||
| 1114 | */ | ||
| 1115 | skb = dev_alloc_skb(sc->rxbufsize + sc->cachelsz - 1); | ||
| 1116 | if (unlikely(skb == NULL)) { | ||
| 1117 | ATH5K_ERR(sc, "can't alloc skbuff of size %u\n", | ||
| 1118 | sc->rxbufsize + sc->cachelsz - 1); | ||
| 1119 | return -ENOMEM; | 1147 | return -ENOMEM; |
| 1120 | } | ||
| 1121 | /* | ||
| 1122 | * Cache-line-align. This is important (for the | ||
| 1123 | * 5210 at least) as not doing so causes bogus data | ||
| 1124 | * in rx'd frames. | ||
| 1125 | */ | ||
| 1126 | off = ((unsigned long)skb->data) % sc->cachelsz; | ||
| 1127 | if (off != 0) | ||
| 1128 | skb_reserve(skb, sc->cachelsz - off); | ||
| 1129 | |||
| 1130 | bf->skb = skb; | 1148 | bf->skb = skb; |
| 1131 | bf->skbaddr = pci_map_single(sc->pdev, | ||
| 1132 | skb->data, sc->rxbufsize, PCI_DMA_FROMDEVICE); | ||
| 1133 | if (unlikely(pci_dma_mapping_error(sc->pdev, bf->skbaddr))) { | ||
| 1134 | ATH5K_ERR(sc, "%s: DMA mapping failed\n", __func__); | ||
| 1135 | dev_kfree_skb(skb); | ||
| 1136 | bf->skb = NULL; | ||
| 1137 | return -ENOMEM; | ||
| 1138 | } | ||
| 1139 | } | 1149 | } |
| 1140 | 1150 | ||
| 1141 | /* | 1151 | /* |
| @@ -1664,7 +1674,8 @@ ath5k_tasklet_rx(unsigned long data) | |||
| 1664 | { | 1674 | { |
| 1665 | struct ieee80211_rx_status rxs = {}; | 1675 | struct ieee80211_rx_status rxs = {}; |
| 1666 | struct ath5k_rx_status rs = {}; | 1676 | struct ath5k_rx_status rs = {}; |
| 1667 | struct sk_buff *skb; | 1677 | struct sk_buff *skb, *next_skb; |
| 1678 | dma_addr_t next_skb_addr; | ||
| 1668 | struct ath5k_softc *sc = (void *)data; | 1679 | struct ath5k_softc *sc = (void *)data; |
| 1669 | struct ath5k_buf *bf, *bf_last; | 1680 | struct ath5k_buf *bf, *bf_last; |
| 1670 | struct ath5k_desc *ds; | 1681 | struct ath5k_desc *ds; |
| @@ -1749,10 +1760,17 @@ ath5k_tasklet_rx(unsigned long data) | |||
| 1749 | goto next; | 1760 | goto next; |
| 1750 | } | 1761 | } |
| 1751 | accept: | 1762 | accept: |
| 1763 | next_skb = ath5k_rx_skb_alloc(sc, &next_skb_addr); | ||
| 1764 | |||
| 1765 | /* | ||
| 1766 | * If we can't replace bf->skb with a new skb under memory | ||
| 1767 | * pressure, just skip this packet | ||
| 1768 | */ | ||
| 1769 | if (!next_skb) | ||
| 1770 | goto next; | ||
| 1771 | |||
| 1752 | pci_unmap_single(sc->pdev, bf->skbaddr, sc->rxbufsize, | 1772 | pci_unmap_single(sc->pdev, bf->skbaddr, sc->rxbufsize, |
| 1753 | PCI_DMA_FROMDEVICE); | 1773 | PCI_DMA_FROMDEVICE); |
| 1754 | bf->skb = NULL; | ||
| 1755 | |||
| 1756 | skb_put(skb, rs.rs_datalen); | 1774 | skb_put(skb, rs.rs_datalen); |
| 1757 | 1775 | ||
| 1758 | /* The MAC header is padded to have 32-bit boundary if the | 1776 | /* The MAC header is padded to have 32-bit boundary if the |
| @@ -1825,6 +1843,9 @@ accept: | |||
| 1825 | ath5k_check_ibss_tsf(sc, skb, &rxs); | 1843 | ath5k_check_ibss_tsf(sc, skb, &rxs); |
| 1826 | 1844 | ||
| 1827 | __ieee80211_rx(sc->hw, skb, &rxs); | 1845 | __ieee80211_rx(sc->hw, skb, &rxs); |
| 1846 | |||
| 1847 | bf->skb = next_skb; | ||
| 1848 | bf->skbaddr = next_skb_addr; | ||
| 1828 | next: | 1849 | next: |
| 1829 | list_move_tail(&bf->list, &sc->rxbuf); | 1850 | list_move_tail(&bf->list, &sc->rxbuf); |
| 1830 | } while (ath5k_rxbuf_setup(sc, bf) == 0); | 1851 | } while (ath5k_rxbuf_setup(sc, bf) == 0); |
diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c index 727f067aca4f..0e80990d8e84 100644 --- a/drivers/net/wireless/ath9k/main.c +++ b/drivers/net/wireless/ath9k/main.c | |||
| @@ -1538,6 +1538,7 @@ bad2: | |||
| 1538 | bad: | 1538 | bad: |
| 1539 | if (ah) | 1539 | if (ah) |
| 1540 | ath9k_hw_detach(ah); | 1540 | ath9k_hw_detach(ah); |
| 1541 | ath9k_exit_debug(sc); | ||
| 1541 | 1542 | ||
| 1542 | return error; | 1543 | return error; |
| 1543 | } | 1544 | } |
| @@ -1545,7 +1546,7 @@ bad: | |||
| 1545 | static int ath_attach(u16 devid, struct ath_softc *sc) | 1546 | static int ath_attach(u16 devid, struct ath_softc *sc) |
| 1546 | { | 1547 | { |
| 1547 | struct ieee80211_hw *hw = sc->hw; | 1548 | struct ieee80211_hw *hw = sc->hw; |
| 1548 | int error = 0; | 1549 | int error = 0, i; |
| 1549 | 1550 | ||
| 1550 | DPRINTF(sc, ATH_DBG_CONFIG, "Attach ATH hw\n"); | 1551 | DPRINTF(sc, ATH_DBG_CONFIG, "Attach ATH hw\n"); |
| 1551 | 1552 | ||
| @@ -1589,11 +1590,11 @@ static int ath_attach(u16 devid, struct ath_softc *sc) | |||
| 1589 | /* initialize tx/rx engine */ | 1590 | /* initialize tx/rx engine */ |
| 1590 | error = ath_tx_init(sc, ATH_TXBUF); | 1591 | error = ath_tx_init(sc, ATH_TXBUF); |
| 1591 | if (error != 0) | 1592 | if (error != 0) |
| 1592 | goto detach; | 1593 | goto error_attach; |
| 1593 | 1594 | ||
| 1594 | error = ath_rx_init(sc, ATH_RXBUF); | 1595 | error = ath_rx_init(sc, ATH_RXBUF); |
| 1595 | if (error != 0) | 1596 | if (error != 0) |
| 1596 | goto detach; | 1597 | goto error_attach; |
| 1597 | 1598 | ||
| 1598 | #if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE) | 1599 | #if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE) |
| 1599 | /* Initialze h/w Rfkill */ | 1600 | /* Initialze h/w Rfkill */ |
| @@ -1601,8 +1602,9 @@ static int ath_attach(u16 devid, struct ath_softc *sc) | |||
| 1601 | INIT_DELAYED_WORK(&sc->rf_kill.rfkill_poll, ath_rfkill_poll); | 1602 | INIT_DELAYED_WORK(&sc->rf_kill.rfkill_poll, ath_rfkill_poll); |
| 1602 | 1603 | ||
| 1603 | /* Initialize s/w rfkill */ | 1604 | /* Initialize s/w rfkill */ |
| 1604 | if (ath_init_sw_rfkill(sc)) | 1605 | error = ath_init_sw_rfkill(sc); |
| 1605 | goto detach; | 1606 | if (error) |
| 1607 | goto error_attach; | ||
| 1606 | #endif | 1608 | #endif |
| 1607 | 1609 | ||
| 1608 | error = ieee80211_register_hw(hw); | 1610 | error = ieee80211_register_hw(hw); |
| @@ -1611,8 +1613,16 @@ static int ath_attach(u16 devid, struct ath_softc *sc) | |||
| 1611 | ath_init_leds(sc); | 1613 | ath_init_leds(sc); |
| 1612 | 1614 | ||
| 1613 | return 0; | 1615 | return 0; |
| 1614 | detach: | 1616 | |
| 1615 | ath_detach(sc); | 1617 | error_attach: |
| 1618 | /* cleanup tx queues */ | ||
| 1619 | for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) | ||
| 1620 | if (ATH_TXQ_SETUP(sc, i)) | ||
| 1621 | ath_tx_cleanupq(sc, &sc->tx.txq[i]); | ||
| 1622 | |||
| 1623 | ath9k_hw_detach(sc->sc_ah); | ||
| 1624 | ath9k_exit_debug(sc); | ||
| 1625 | |||
| 1616 | return error; | 1626 | return error; |
| 1617 | } | 1627 | } |
| 1618 | 1628 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index c01ea48da5fe..129e2d330abb 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
| @@ -3868,7 +3868,7 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 3868 | } | 3868 | } |
| 3869 | err = iwl_eeprom_check_version(priv); | 3869 | err = iwl_eeprom_check_version(priv); |
| 3870 | if (err) | 3870 | if (err) |
| 3871 | goto out_iounmap; | 3871 | goto out_free_eeprom; |
| 3872 | 3872 | ||
| 3873 | /* extract MAC Address */ | 3873 | /* extract MAC Address */ |
| 3874 | iwl_eeprom_get_mac(priv, priv->mac_addr); | 3874 | iwl_eeprom_get_mac(priv, priv->mac_addr); |
| @@ -3945,6 +3945,8 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 3945 | return 0; | 3945 | return 0; |
| 3946 | 3946 | ||
| 3947 | out_remove_sysfs: | 3947 | out_remove_sysfs: |
| 3948 | destroy_workqueue(priv->workqueue); | ||
| 3949 | priv->workqueue = NULL; | ||
| 3948 | sysfs_remove_group(&pdev->dev.kobj, &iwl_attribute_group); | 3950 | sysfs_remove_group(&pdev->dev.kobj, &iwl_attribute_group); |
| 3949 | out_uninit_drv: | 3951 | out_uninit_drv: |
| 3950 | iwl_uninit_drv(priv); | 3952 | iwl_uninit_drv(priv); |
| @@ -3953,8 +3955,8 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 3953 | out_iounmap: | 3955 | out_iounmap: |
| 3954 | pci_iounmap(pdev, priv->hw_base); | 3956 | pci_iounmap(pdev, priv->hw_base); |
| 3955 | out_pci_release_regions: | 3957 | out_pci_release_regions: |
| 3956 | pci_release_regions(pdev); | ||
| 3957 | pci_set_drvdata(pdev, NULL); | 3958 | pci_set_drvdata(pdev, NULL); |
| 3959 | pci_release_regions(pdev); | ||
| 3958 | out_pci_disable_device: | 3960 | out_pci_disable_device: |
| 3959 | pci_disable_device(pdev); | 3961 | pci_disable_device(pdev); |
| 3960 | out_ieee80211_free_hw: | 3962 | out_ieee80211_free_hw: |
| @@ -4042,7 +4044,19 @@ static int iwl_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
| 4042 | priv->is_open = 1; | 4044 | priv->is_open = 1; |
| 4043 | } | 4045 | } |
| 4044 | 4046 | ||
| 4045 | pci_save_state(pdev); | 4047 | /* pci driver assumes state will be saved in this function. |
| 4048 | * pci state is saved and device disabled when interface is | ||
| 4049 | * stopped, so at this time pci device will always be disabled - | ||
| 4050 | * whether interface was started or not. saving pci state now will | ||
| 4051 | * cause saved state be that of a disabled device, which will cause | ||
| 4052 | * problems during resume in that we will end up with a disabled device. | ||
| 4053 | * | ||
| 4054 | * indicate that the current saved state (from when interface was | ||
| 4055 | * stopped) is valid. if interface was never up at time of suspend | ||
| 4056 | * then the saved state will still be valid as it was saved during | ||
| 4057 | * .probe. */ | ||
| 4058 | pdev->state_saved = true; | ||
| 4059 | |||
| 4046 | pci_set_power_state(pdev, PCI_D3hot); | 4060 | pci_set_power_state(pdev, PCI_D3hot); |
| 4047 | 4061 | ||
| 4048 | return 0; | 4062 | return 0; |
| @@ -4053,7 +4067,6 @@ static int iwl_pci_resume(struct pci_dev *pdev) | |||
| 4053 | struct iwl_priv *priv = pci_get_drvdata(pdev); | 4067 | struct iwl_priv *priv = pci_get_drvdata(pdev); |
| 4054 | 4068 | ||
| 4055 | pci_set_power_state(pdev, PCI_D0); | 4069 | pci_set_power_state(pdev, PCI_D0); |
| 4056 | pci_restore_state(pdev); | ||
| 4057 | 4070 | ||
| 4058 | if (priv->is_open) | 4071 | if (priv->is_open) |
| 4059 | iwl_mac_start(priv->hw); | 4072 | iwl_mac_start(priv->hw); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c index b0ee86c62685..ab13ff22a8c0 100644 --- a/drivers/net/wireless/iwlwifi/iwl-tx.c +++ b/drivers/net/wireless/iwlwifi/iwl-tx.c | |||
| @@ -148,7 +148,7 @@ static void iwl_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq) | |||
| 148 | pci_unmap_single(dev, | 148 | pci_unmap_single(dev, |
| 149 | pci_unmap_addr(&txq->cmd[index]->meta, mapping), | 149 | pci_unmap_addr(&txq->cmd[index]->meta, mapping), |
| 150 | pci_unmap_len(&txq->cmd[index]->meta, len), | 150 | pci_unmap_len(&txq->cmd[index]->meta, len), |
| 151 | PCI_DMA_TODEVICE); | 151 | PCI_DMA_BIDIRECTIONAL); |
| 152 | 152 | ||
| 153 | /* Unmap chunks, if any. */ | 153 | /* Unmap chunks, if any. */ |
| 154 | for (i = 1; i < num_tbs; i++) { | 154 | for (i = 1; i < num_tbs; i++) { |
| @@ -964,7 +964,7 @@ int iwl_tx_skb(struct iwl_priv *priv, struct sk_buff *skb) | |||
| 964 | * within command buffer array. */ | 964 | * within command buffer array. */ |
| 965 | txcmd_phys = pci_map_single(priv->pci_dev, | 965 | txcmd_phys = pci_map_single(priv->pci_dev, |
| 966 | out_cmd, sizeof(struct iwl_cmd), | 966 | out_cmd, sizeof(struct iwl_cmd), |
| 967 | PCI_DMA_TODEVICE); | 967 | PCI_DMA_BIDIRECTIONAL); |
| 968 | pci_unmap_addr_set(&out_cmd->meta, mapping, txcmd_phys); | 968 | pci_unmap_addr_set(&out_cmd->meta, mapping, txcmd_phys); |
| 969 | pci_unmap_len_set(&out_cmd->meta, len, sizeof(struct iwl_cmd)); | 969 | pci_unmap_len_set(&out_cmd->meta, len, sizeof(struct iwl_cmd)); |
| 970 | /* Add buffer containing Tx command and MAC(!) header to TFD's | 970 | /* Add buffer containing Tx command and MAC(!) header to TFD's |
| @@ -1115,7 +1115,7 @@ int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd) | |||
| 1115 | IWL_MAX_SCAN_SIZE : sizeof(struct iwl_cmd); | 1115 | IWL_MAX_SCAN_SIZE : sizeof(struct iwl_cmd); |
| 1116 | 1116 | ||
| 1117 | phys_addr = pci_map_single(priv->pci_dev, out_cmd, | 1117 | phys_addr = pci_map_single(priv->pci_dev, out_cmd, |
| 1118 | len, PCI_DMA_TODEVICE); | 1118 | len, PCI_DMA_BIDIRECTIONAL); |
| 1119 | pci_unmap_addr_set(&out_cmd->meta, mapping, phys_addr); | 1119 | pci_unmap_addr_set(&out_cmd->meta, mapping, phys_addr); |
| 1120 | pci_unmap_len_set(&out_cmd->meta, len, len); | 1120 | pci_unmap_len_set(&out_cmd->meta, len, len); |
| 1121 | phys_addr += offsetof(struct iwl_cmd, hdr); | 1121 | phys_addr += offsetof(struct iwl_cmd, hdr); |
| @@ -1212,7 +1212,7 @@ static void iwl_hcmd_queue_reclaim(struct iwl_priv *priv, int txq_id, | |||
| 1212 | pci_unmap_single(priv->pci_dev, | 1212 | pci_unmap_single(priv->pci_dev, |
| 1213 | pci_unmap_addr(&txq->cmd[cmd_idx]->meta, mapping), | 1213 | pci_unmap_addr(&txq->cmd[cmd_idx]->meta, mapping), |
| 1214 | pci_unmap_len(&txq->cmd[cmd_idx]->meta, len), | 1214 | pci_unmap_len(&txq->cmd[cmd_idx]->meta, len), |
| 1215 | PCI_DMA_TODEVICE); | 1215 | PCI_DMA_BIDIRECTIONAL); |
| 1216 | 1216 | ||
| 1217 | for (idx = iwl_queue_inc_wrap(idx, q->n_bd); q->read_ptr != idx; | 1217 | for (idx = iwl_queue_inc_wrap(idx, q->n_bd); q->read_ptr != idx; |
| 1218 | q->read_ptr = iwl_queue_inc_wrap(q->read_ptr, q->n_bd)) { | 1218 | q->read_ptr = iwl_queue_inc_wrap(q->read_ptr, q->n_bd)) { |
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index 5b44d322b99f..57dd34e256d8 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
| @@ -7911,7 +7911,7 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e | |||
| 7911 | CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY, 25000); | 7911 | CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY, 25000); |
| 7912 | if (err < 0) { | 7912 | if (err < 0) { |
| 7913 | IWL_DEBUG_INFO("Failed to init the card\n"); | 7913 | IWL_DEBUG_INFO("Failed to init the card\n"); |
| 7914 | goto out_remove_sysfs; | 7914 | goto out_iounmap; |
| 7915 | } | 7915 | } |
| 7916 | 7916 | ||
| 7917 | /*********************** | 7917 | /*********************** |
| @@ -7921,7 +7921,7 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e | |||
| 7921 | err = iwl3945_eeprom_init(priv); | 7921 | err = iwl3945_eeprom_init(priv); |
| 7922 | if (err) { | 7922 | if (err) { |
| 7923 | IWL_ERROR("Unable to init EEPROM\n"); | 7923 | IWL_ERROR("Unable to init EEPROM\n"); |
| 7924 | goto out_remove_sysfs; | 7924 | goto out_iounmap; |
| 7925 | } | 7925 | } |
| 7926 | /* MAC Address location in EEPROM same for 3945/4965 */ | 7926 | /* MAC Address location in EEPROM same for 3945/4965 */ |
| 7927 | get_eeprom_mac(priv, priv->mac_addr); | 7927 | get_eeprom_mac(priv, priv->mac_addr); |
| @@ -7975,7 +7975,7 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e | |||
| 7975 | err = iwl3945_init_channel_map(priv); | 7975 | err = iwl3945_init_channel_map(priv); |
| 7976 | if (err) { | 7976 | if (err) { |
| 7977 | IWL_ERROR("initializing regulatory failed: %d\n", err); | 7977 | IWL_ERROR("initializing regulatory failed: %d\n", err); |
| 7978 | goto out_release_irq; | 7978 | goto out_unset_hw_setting; |
| 7979 | } | 7979 | } |
| 7980 | 7980 | ||
| 7981 | err = iwl3945_init_geos(priv); | 7981 | err = iwl3945_init_geos(priv); |
| @@ -8045,25 +8045,22 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e | |||
| 8045 | return 0; | 8045 | return 0; |
| 8046 | 8046 | ||
| 8047 | out_remove_sysfs: | 8047 | out_remove_sysfs: |
| 8048 | destroy_workqueue(priv->workqueue); | ||
| 8049 | priv->workqueue = NULL; | ||
| 8048 | sysfs_remove_group(&pdev->dev.kobj, &iwl3945_attribute_group); | 8050 | sysfs_remove_group(&pdev->dev.kobj, &iwl3945_attribute_group); |
| 8049 | out_free_geos: | 8051 | out_free_geos: |
| 8050 | iwl3945_free_geos(priv); | 8052 | iwl3945_free_geos(priv); |
| 8051 | out_free_channel_map: | 8053 | out_free_channel_map: |
| 8052 | iwl3945_free_channel_map(priv); | 8054 | iwl3945_free_channel_map(priv); |
| 8053 | 8055 | out_unset_hw_setting: | |
| 8054 | |||
| 8055 | out_release_irq: | ||
| 8056 | destroy_workqueue(priv->workqueue); | ||
| 8057 | priv->workqueue = NULL; | ||
| 8058 | iwl3945_unset_hw_setting(priv); | 8056 | iwl3945_unset_hw_setting(priv); |
| 8059 | |||
| 8060 | out_iounmap: | 8057 | out_iounmap: |
| 8061 | pci_iounmap(pdev, priv->hw_base); | 8058 | pci_iounmap(pdev, priv->hw_base); |
| 8062 | out_pci_release_regions: | 8059 | out_pci_release_regions: |
| 8063 | pci_release_regions(pdev); | 8060 | pci_release_regions(pdev); |
| 8064 | out_pci_disable_device: | 8061 | out_pci_disable_device: |
| 8065 | pci_disable_device(pdev); | ||
| 8066 | pci_set_drvdata(pdev, NULL); | 8062 | pci_set_drvdata(pdev, NULL); |
| 8063 | pci_disable_device(pdev); | ||
| 8067 | out_ieee80211_free_hw: | 8064 | out_ieee80211_free_hw: |
| 8068 | ieee80211_free_hw(priv->hw); | 8065 | ieee80211_free_hw(priv->hw); |
| 8069 | out: | 8066 | out: |
| @@ -8143,7 +8140,19 @@ static int iwl3945_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
| 8143 | priv->is_open = 1; | 8140 | priv->is_open = 1; |
| 8144 | } | 8141 | } |
| 8145 | 8142 | ||
| 8146 | pci_save_state(pdev); | 8143 | /* pci driver assumes state will be saved in this function. |
| 8144 | * pci state is saved and device disabled when interface is | ||
| 8145 | * stopped, so at this time pci device will always be disabled - | ||
| 8146 | * whether interface was started or not. saving pci state now will | ||
| 8147 | * cause saved state be that of a disabled device, which will cause | ||
| 8148 | * problems during resume in that we will end up with a disabled device. | ||
| 8149 | * | ||
| 8150 | * indicate that the current saved state (from when interface was | ||
| 8151 | * stopped) is valid. if interface was never up at time of suspend | ||
| 8152 | * then the saved state will still be valid as it was saved during | ||
| 8153 | * .probe. */ | ||
| 8154 | pdev->state_saved = true; | ||
| 8155 | |||
| 8147 | pci_set_power_state(pdev, PCI_D3hot); | 8156 | pci_set_power_state(pdev, PCI_D3hot); |
| 8148 | 8157 | ||
| 8149 | return 0; | 8158 | return 0; |
| @@ -8154,7 +8163,6 @@ static int iwl3945_pci_resume(struct pci_dev *pdev) | |||
| 8154 | struct iwl3945_priv *priv = pci_get_drvdata(pdev); | 8163 | struct iwl3945_priv *priv = pci_get_drvdata(pdev); |
| 8155 | 8164 | ||
| 8156 | pci_set_power_state(pdev, PCI_D0); | 8165 | pci_set_power_state(pdev, PCI_D0); |
| 8157 | pci_restore_state(pdev); | ||
| 8158 | 8166 | ||
| 8159 | if (priv->is_open) | 8167 | if (priv->is_open) |
| 8160 | iwl3945_mac_start(priv->hw); | 8168 | iwl3945_mac_start(priv->hw); |
diff --git a/drivers/net/wireless/libertas/ethtool.c b/drivers/net/wireless/libertas/ethtool.c index 61d2f50470c8..b118a35ec605 100644 --- a/drivers/net/wireless/libertas/ethtool.c +++ b/drivers/net/wireless/libertas/ethtool.c | |||
| @@ -23,7 +23,7 @@ static const char * mesh_stat_strings[]= { | |||
| 23 | static void lbs_ethtool_get_drvinfo(struct net_device *dev, | 23 | static void lbs_ethtool_get_drvinfo(struct net_device *dev, |
| 24 | struct ethtool_drvinfo *info) | 24 | struct ethtool_drvinfo *info) |
| 25 | { | 25 | { |
| 26 | struct lbs_private *priv = netdev_priv(dev); | 26 | struct lbs_private *priv = dev->ml_priv; |
| 27 | 27 | ||
| 28 | snprintf(info->fw_version, 32, "%u.%u.%u.p%u", | 28 | snprintf(info->fw_version, 32, "%u.%u.%u.p%u", |
| 29 | priv->fwrelease >> 24 & 0xff, | 29 | priv->fwrelease >> 24 & 0xff, |
| @@ -47,7 +47,7 @@ static int lbs_ethtool_get_eeprom_len(struct net_device *dev) | |||
| 47 | static int lbs_ethtool_get_eeprom(struct net_device *dev, | 47 | static int lbs_ethtool_get_eeprom(struct net_device *dev, |
| 48 | struct ethtool_eeprom *eeprom, u8 * bytes) | 48 | struct ethtool_eeprom *eeprom, u8 * bytes) |
| 49 | { | 49 | { |
| 50 | struct lbs_private *priv = netdev_priv(dev); | 50 | struct lbs_private *priv = dev->ml_priv; |
| 51 | struct cmd_ds_802_11_eeprom_access cmd; | 51 | struct cmd_ds_802_11_eeprom_access cmd; |
| 52 | int ret; | 52 | int ret; |
| 53 | 53 | ||
| @@ -76,7 +76,7 @@ out: | |||
| 76 | static void lbs_ethtool_get_stats(struct net_device *dev, | 76 | static void lbs_ethtool_get_stats(struct net_device *dev, |
| 77 | struct ethtool_stats *stats, uint64_t *data) | 77 | struct ethtool_stats *stats, uint64_t *data) |
| 78 | { | 78 | { |
| 79 | struct lbs_private *priv = netdev_priv(dev); | 79 | struct lbs_private *priv = dev->ml_priv; |
| 80 | struct cmd_ds_mesh_access mesh_access; | 80 | struct cmd_ds_mesh_access mesh_access; |
| 81 | int ret; | 81 | int ret; |
| 82 | 82 | ||
| @@ -113,7 +113,7 @@ static void lbs_ethtool_get_stats(struct net_device *dev, | |||
| 113 | 113 | ||
| 114 | static int lbs_ethtool_get_sset_count(struct net_device *dev, int sset) | 114 | static int lbs_ethtool_get_sset_count(struct net_device *dev, int sset) |
| 115 | { | 115 | { |
| 116 | struct lbs_private *priv = netdev_priv(dev); | 116 | struct lbs_private *priv = dev->ml_priv; |
| 117 | 117 | ||
| 118 | if (sset == ETH_SS_STATS && dev == priv->mesh_dev) | 118 | if (sset == ETH_SS_STATS && dev == priv->mesh_dev) |
| 119 | return MESH_STATS_NUM; | 119 | return MESH_STATS_NUM; |
| @@ -143,7 +143,7 @@ static void lbs_ethtool_get_strings(struct net_device *dev, | |||
| 143 | static void lbs_ethtool_get_wol(struct net_device *dev, | 143 | static void lbs_ethtool_get_wol(struct net_device *dev, |
| 144 | struct ethtool_wolinfo *wol) | 144 | struct ethtool_wolinfo *wol) |
| 145 | { | 145 | { |
| 146 | struct lbs_private *priv = netdev_priv(dev); | 146 | struct lbs_private *priv = dev->ml_priv; |
| 147 | 147 | ||
| 148 | if (priv->wol_criteria == 0xffffffff) { | 148 | if (priv->wol_criteria == 0xffffffff) { |
| 149 | /* Interface driver didn't configure wake */ | 149 | /* Interface driver didn't configure wake */ |
| @@ -166,7 +166,7 @@ static void lbs_ethtool_get_wol(struct net_device *dev, | |||
| 166 | static int lbs_ethtool_set_wol(struct net_device *dev, | 166 | static int lbs_ethtool_set_wol(struct net_device *dev, |
| 167 | struct ethtool_wolinfo *wol) | 167 | struct ethtool_wolinfo *wol) |
| 168 | { | 168 | { |
| 169 | struct lbs_private *priv = netdev_priv(dev); | 169 | struct lbs_private *priv = dev->ml_priv; |
| 170 | uint32_t criteria = 0; | 170 | uint32_t criteria = 0; |
| 171 | 171 | ||
| 172 | if (priv->wol_criteria == 0xffffffff && wol->wolopts) | 172 | if (priv->wol_criteria == 0xffffffff && wol->wolopts) |
diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index 2fc637ad85c7..ea3dc038be76 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c | |||
| @@ -59,7 +59,7 @@ static int if_usb_reset_device(struct if_usb_card *cardp); | |||
| 59 | static ssize_t if_usb_firmware_set(struct device *dev, | 59 | static ssize_t if_usb_firmware_set(struct device *dev, |
| 60 | struct device_attribute *attr, const char *buf, size_t count) | 60 | struct device_attribute *attr, const char *buf, size_t count) |
| 61 | { | 61 | { |
| 62 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 62 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 63 | struct if_usb_card *cardp = priv->card; | 63 | struct if_usb_card *cardp = priv->card; |
| 64 | char fwname[FIRMWARE_NAME_MAX]; | 64 | char fwname[FIRMWARE_NAME_MAX]; |
| 65 | int ret; | 65 | int ret; |
| @@ -86,7 +86,7 @@ static DEVICE_ATTR(lbs_flash_fw, 0200, NULL, if_usb_firmware_set); | |||
| 86 | static ssize_t if_usb_boot2_set(struct device *dev, | 86 | static ssize_t if_usb_boot2_set(struct device *dev, |
| 87 | struct device_attribute *attr, const char *buf, size_t count) | 87 | struct device_attribute *attr, const char *buf, size_t count) |
| 88 | { | 88 | { |
| 89 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 89 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 90 | struct if_usb_card *cardp = priv->card; | 90 | struct if_usb_card *cardp = priv->card; |
| 91 | char fwname[FIRMWARE_NAME_MAX]; | 91 | char fwname[FIRMWARE_NAME_MAX]; |
| 92 | int ret; | 92 | int ret; |
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 4e0007d20030..f76623e0ff9a 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c | |||
| @@ -222,7 +222,7 @@ u8 lbs_data_rate_to_fw_index(u32 rate) | |||
| 222 | static ssize_t lbs_anycast_get(struct device *dev, | 222 | static ssize_t lbs_anycast_get(struct device *dev, |
| 223 | struct device_attribute *attr, char * buf) | 223 | struct device_attribute *attr, char * buf) |
| 224 | { | 224 | { |
| 225 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 225 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 226 | struct cmd_ds_mesh_access mesh_access; | 226 | struct cmd_ds_mesh_access mesh_access; |
| 227 | int ret; | 227 | int ret; |
| 228 | 228 | ||
| @@ -241,7 +241,7 @@ static ssize_t lbs_anycast_get(struct device *dev, | |||
| 241 | static ssize_t lbs_anycast_set(struct device *dev, | 241 | static ssize_t lbs_anycast_set(struct device *dev, |
| 242 | struct device_attribute *attr, const char * buf, size_t count) | 242 | struct device_attribute *attr, const char * buf, size_t count) |
| 243 | { | 243 | { |
| 244 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 244 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 245 | struct cmd_ds_mesh_access mesh_access; | 245 | struct cmd_ds_mesh_access mesh_access; |
| 246 | uint32_t datum; | 246 | uint32_t datum; |
| 247 | int ret; | 247 | int ret; |
| @@ -263,7 +263,7 @@ static ssize_t lbs_anycast_set(struct device *dev, | |||
| 263 | static ssize_t lbs_prb_rsp_limit_get(struct device *dev, | 263 | static ssize_t lbs_prb_rsp_limit_get(struct device *dev, |
| 264 | struct device_attribute *attr, char *buf) | 264 | struct device_attribute *attr, char *buf) |
| 265 | { | 265 | { |
| 266 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 266 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 267 | struct cmd_ds_mesh_access mesh_access; | 267 | struct cmd_ds_mesh_access mesh_access; |
| 268 | int ret; | 268 | int ret; |
| 269 | u32 retry_limit; | 269 | u32 retry_limit; |
| @@ -286,7 +286,7 @@ static ssize_t lbs_prb_rsp_limit_get(struct device *dev, | |||
| 286 | static ssize_t lbs_prb_rsp_limit_set(struct device *dev, | 286 | static ssize_t lbs_prb_rsp_limit_set(struct device *dev, |
| 287 | struct device_attribute *attr, const char *buf, size_t count) | 287 | struct device_attribute *attr, const char *buf, size_t count) |
| 288 | { | 288 | { |
| 289 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 289 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 290 | struct cmd_ds_mesh_access mesh_access; | 290 | struct cmd_ds_mesh_access mesh_access; |
| 291 | int ret; | 291 | int ret; |
| 292 | unsigned long retry_limit; | 292 | unsigned long retry_limit; |
| @@ -321,7 +321,7 @@ static void lbs_remove_mesh(struct lbs_private *priv); | |||
| 321 | static ssize_t lbs_rtap_get(struct device *dev, | 321 | static ssize_t lbs_rtap_get(struct device *dev, |
| 322 | struct device_attribute *attr, char * buf) | 322 | struct device_attribute *attr, char * buf) |
| 323 | { | 323 | { |
| 324 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 324 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 325 | return snprintf(buf, 5, "0x%X\n", priv->monitormode); | 325 | return snprintf(buf, 5, "0x%X\n", priv->monitormode); |
| 326 | } | 326 | } |
| 327 | 327 | ||
| @@ -332,7 +332,7 @@ static ssize_t lbs_rtap_set(struct device *dev, | |||
| 332 | struct device_attribute *attr, const char * buf, size_t count) | 332 | struct device_attribute *attr, const char * buf, size_t count) |
| 333 | { | 333 | { |
| 334 | int monitor_mode; | 334 | int monitor_mode; |
| 335 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 335 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 336 | 336 | ||
| 337 | sscanf(buf, "%x", &monitor_mode); | 337 | sscanf(buf, "%x", &monitor_mode); |
| 338 | if (monitor_mode) { | 338 | if (monitor_mode) { |
| @@ -383,7 +383,7 @@ static DEVICE_ATTR(lbs_rtap, 0644, lbs_rtap_get, lbs_rtap_set ); | |||
| 383 | static ssize_t lbs_mesh_get(struct device *dev, | 383 | static ssize_t lbs_mesh_get(struct device *dev, |
| 384 | struct device_attribute *attr, char * buf) | 384 | struct device_attribute *attr, char * buf) |
| 385 | { | 385 | { |
| 386 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 386 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 387 | return snprintf(buf, 5, "0x%X\n", !!priv->mesh_dev); | 387 | return snprintf(buf, 5, "0x%X\n", !!priv->mesh_dev); |
| 388 | } | 388 | } |
| 389 | 389 | ||
| @@ -393,7 +393,7 @@ static ssize_t lbs_mesh_get(struct device *dev, | |||
| 393 | static ssize_t lbs_mesh_set(struct device *dev, | 393 | static ssize_t lbs_mesh_set(struct device *dev, |
| 394 | struct device_attribute *attr, const char * buf, size_t count) | 394 | struct device_attribute *attr, const char * buf, size_t count) |
| 395 | { | 395 | { |
| 396 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 396 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 397 | int enable; | 397 | int enable; |
| 398 | int ret, action = CMD_ACT_MESH_CONFIG_STOP; | 398 | int ret, action = CMD_ACT_MESH_CONFIG_STOP; |
| 399 | 399 | ||
| @@ -452,7 +452,7 @@ static struct attribute_group lbs_mesh_attr_group = { | |||
| 452 | */ | 452 | */ |
| 453 | static int lbs_dev_open(struct net_device *dev) | 453 | static int lbs_dev_open(struct net_device *dev) |
| 454 | { | 454 | { |
| 455 | struct lbs_private *priv = netdev_priv(dev) ; | 455 | struct lbs_private *priv = dev->ml_priv; |
| 456 | int ret = 0; | 456 | int ret = 0; |
| 457 | 457 | ||
| 458 | lbs_deb_enter(LBS_DEB_NET); | 458 | lbs_deb_enter(LBS_DEB_NET); |
| @@ -521,7 +521,7 @@ static int lbs_mesh_stop(struct net_device *dev) | |||
| 521 | */ | 521 | */ |
| 522 | static int lbs_eth_stop(struct net_device *dev) | 522 | static int lbs_eth_stop(struct net_device *dev) |
| 523 | { | 523 | { |
| 524 | struct lbs_private *priv = netdev_priv(dev); | 524 | struct lbs_private *priv = dev->ml_priv; |
| 525 | 525 | ||
| 526 | lbs_deb_enter(LBS_DEB_NET); | 526 | lbs_deb_enter(LBS_DEB_NET); |
| 527 | 527 | ||
| @@ -538,7 +538,7 @@ static int lbs_eth_stop(struct net_device *dev) | |||
| 538 | 538 | ||
| 539 | static void lbs_tx_timeout(struct net_device *dev) | 539 | static void lbs_tx_timeout(struct net_device *dev) |
| 540 | { | 540 | { |
| 541 | struct lbs_private *priv = netdev_priv(dev); | 541 | struct lbs_private *priv = dev->ml_priv; |
| 542 | 542 | ||
| 543 | lbs_deb_enter(LBS_DEB_TX); | 543 | lbs_deb_enter(LBS_DEB_TX); |
| 544 | 544 | ||
| @@ -590,7 +590,7 @@ EXPORT_SYMBOL_GPL(lbs_host_to_card_done); | |||
| 590 | */ | 590 | */ |
| 591 | static struct net_device_stats *lbs_get_stats(struct net_device *dev) | 591 | static struct net_device_stats *lbs_get_stats(struct net_device *dev) |
| 592 | { | 592 | { |
| 593 | struct lbs_private *priv = netdev_priv(dev); | 593 | struct lbs_private *priv = dev->ml_priv; |
| 594 | 594 | ||
| 595 | lbs_deb_enter(LBS_DEB_NET); | 595 | lbs_deb_enter(LBS_DEB_NET); |
| 596 | return &priv->stats; | 596 | return &priv->stats; |
| @@ -599,7 +599,7 @@ static struct net_device_stats *lbs_get_stats(struct net_device *dev) | |||
| 599 | static int lbs_set_mac_address(struct net_device *dev, void *addr) | 599 | static int lbs_set_mac_address(struct net_device *dev, void *addr) |
| 600 | { | 600 | { |
| 601 | int ret = 0; | 601 | int ret = 0; |
| 602 | struct lbs_private *priv = netdev_priv(dev); | 602 | struct lbs_private *priv = dev->ml_priv; |
| 603 | struct sockaddr *phwaddr = addr; | 603 | struct sockaddr *phwaddr = addr; |
| 604 | struct cmd_ds_802_11_mac_address cmd; | 604 | struct cmd_ds_802_11_mac_address cmd; |
| 605 | 605 | ||
| @@ -732,7 +732,7 @@ static void lbs_set_mcast_worker(struct work_struct *work) | |||
| 732 | 732 | ||
| 733 | static void lbs_set_multicast_list(struct net_device *dev) | 733 | static void lbs_set_multicast_list(struct net_device *dev) |
| 734 | { | 734 | { |
| 735 | struct lbs_private *priv = netdev_priv(dev); | 735 | struct lbs_private *priv = dev->ml_priv; |
| 736 | 736 | ||
| 737 | schedule_work(&priv->mcast_work); | 737 | schedule_work(&priv->mcast_work); |
| 738 | } | 738 | } |
| @@ -748,7 +748,7 @@ static void lbs_set_multicast_list(struct net_device *dev) | |||
| 748 | static int lbs_thread(void *data) | 748 | static int lbs_thread(void *data) |
| 749 | { | 749 | { |
| 750 | struct net_device *dev = data; | 750 | struct net_device *dev = data; |
| 751 | struct lbs_private *priv = netdev_priv(dev); | 751 | struct lbs_private *priv = dev->ml_priv; |
| 752 | wait_queue_t wait; | 752 | wait_queue_t wait; |
| 753 | 753 | ||
| 754 | lbs_deb_enter(LBS_DEB_THREAD); | 754 | lbs_deb_enter(LBS_DEB_THREAD); |
| @@ -1184,6 +1184,7 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev) | |||
| 1184 | goto done; | 1184 | goto done; |
| 1185 | } | 1185 | } |
| 1186 | priv = netdev_priv(dev); | 1186 | priv = netdev_priv(dev); |
| 1187 | dev->ml_priv = priv; | ||
| 1187 | 1188 | ||
| 1188 | if (lbs_init_adapter(priv)) { | 1189 | if (lbs_init_adapter(priv)) { |
| 1189 | lbs_pr_err("failed to initialize adapter structure.\n"); | 1190 | lbs_pr_err("failed to initialize adapter structure.\n"); |
diff --git a/drivers/net/wireless/libertas/persistcfg.c b/drivers/net/wireless/libertas/persistcfg.c index d42b7a5a1b3f..18fe29faf99b 100644 --- a/drivers/net/wireless/libertas/persistcfg.c +++ b/drivers/net/wireless/libertas/persistcfg.c | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | static int mesh_get_default_parameters(struct device *dev, | 18 | static int mesh_get_default_parameters(struct device *dev, |
| 19 | struct mrvl_mesh_defaults *defs) | 19 | struct mrvl_mesh_defaults *defs) |
| 20 | { | 20 | { |
| 21 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 21 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 22 | struct cmd_ds_mesh_config cmd; | 22 | struct cmd_ds_mesh_config cmd; |
| 23 | int ret; | 23 | int ret; |
| 24 | 24 | ||
| @@ -57,7 +57,7 @@ static ssize_t bootflag_get(struct device *dev, | |||
| 57 | static ssize_t bootflag_set(struct device *dev, struct device_attribute *attr, | 57 | static ssize_t bootflag_set(struct device *dev, struct device_attribute *attr, |
| 58 | const char *buf, size_t count) | 58 | const char *buf, size_t count) |
| 59 | { | 59 | { |
| 60 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 60 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 61 | struct cmd_ds_mesh_config cmd; | 61 | struct cmd_ds_mesh_config cmd; |
| 62 | uint32_t datum; | 62 | uint32_t datum; |
| 63 | int ret; | 63 | int ret; |
| @@ -100,7 +100,7 @@ static ssize_t boottime_get(struct device *dev, | |||
| 100 | static ssize_t boottime_set(struct device *dev, | 100 | static ssize_t boottime_set(struct device *dev, |
| 101 | struct device_attribute *attr, const char *buf, size_t count) | 101 | struct device_attribute *attr, const char *buf, size_t count) |
| 102 | { | 102 | { |
| 103 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 103 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 104 | struct cmd_ds_mesh_config cmd; | 104 | struct cmd_ds_mesh_config cmd; |
| 105 | uint32_t datum; | 105 | uint32_t datum; |
| 106 | int ret; | 106 | int ret; |
| @@ -152,7 +152,7 @@ static ssize_t channel_get(struct device *dev, | |||
| 152 | static ssize_t channel_set(struct device *dev, struct device_attribute *attr, | 152 | static ssize_t channel_set(struct device *dev, struct device_attribute *attr, |
| 153 | const char *buf, size_t count) | 153 | const char *buf, size_t count) |
| 154 | { | 154 | { |
| 155 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 155 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 156 | struct cmd_ds_mesh_config cmd; | 156 | struct cmd_ds_mesh_config cmd; |
| 157 | uint32_t datum; | 157 | uint32_t datum; |
| 158 | int ret; | 158 | int ret; |
| @@ -210,7 +210,7 @@ static ssize_t mesh_id_set(struct device *dev, struct device_attribute *attr, | |||
| 210 | struct cmd_ds_mesh_config cmd; | 210 | struct cmd_ds_mesh_config cmd; |
| 211 | struct mrvl_mesh_defaults defs; | 211 | struct mrvl_mesh_defaults defs; |
| 212 | struct mrvl_meshie *ie; | 212 | struct mrvl_meshie *ie; |
| 213 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 213 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 214 | int len; | 214 | int len; |
| 215 | int ret; | 215 | int ret; |
| 216 | 216 | ||
| @@ -269,7 +269,7 @@ static ssize_t protocol_id_set(struct device *dev, | |||
| 269 | struct cmd_ds_mesh_config cmd; | 269 | struct cmd_ds_mesh_config cmd; |
| 270 | struct mrvl_mesh_defaults defs; | 270 | struct mrvl_mesh_defaults defs; |
| 271 | struct mrvl_meshie *ie; | 271 | struct mrvl_meshie *ie; |
| 272 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 272 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 273 | uint32_t datum; | 273 | uint32_t datum; |
| 274 | int ret; | 274 | int ret; |
| 275 | 275 | ||
| @@ -323,7 +323,7 @@ static ssize_t metric_id_set(struct device *dev, struct device_attribute *attr, | |||
| 323 | struct cmd_ds_mesh_config cmd; | 323 | struct cmd_ds_mesh_config cmd; |
| 324 | struct mrvl_mesh_defaults defs; | 324 | struct mrvl_mesh_defaults defs; |
| 325 | struct mrvl_meshie *ie; | 325 | struct mrvl_meshie *ie; |
| 326 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 326 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 327 | uint32_t datum; | 327 | uint32_t datum; |
| 328 | int ret; | 328 | int ret; |
| 329 | 329 | ||
| @@ -377,7 +377,7 @@ static ssize_t capability_set(struct device *dev, struct device_attribute *attr, | |||
| 377 | struct cmd_ds_mesh_config cmd; | 377 | struct cmd_ds_mesh_config cmd; |
| 378 | struct mrvl_mesh_defaults defs; | 378 | struct mrvl_mesh_defaults defs; |
| 379 | struct mrvl_meshie *ie; | 379 | struct mrvl_meshie *ie; |
| 380 | struct lbs_private *priv = netdev_priv(to_net_dev(dev)); | 380 | struct lbs_private *priv = to_net_dev(dev)->ml_priv; |
| 381 | uint32_t datum; | 381 | uint32_t datum; |
| 382 | int ret; | 382 | int ret; |
| 383 | 383 | ||
diff --git a/drivers/net/wireless/libertas/scan.c b/drivers/net/wireless/libertas/scan.c index 57f6c12cda20..9014950f4328 100644 --- a/drivers/net/wireless/libertas/scan.c +++ b/drivers/net/wireless/libertas/scan.c | |||
| @@ -945,7 +945,7 @@ int lbs_set_scan(struct net_device *dev, struct iw_request_info *info, | |||
| 945 | union iwreq_data *wrqu, char *extra) | 945 | union iwreq_data *wrqu, char *extra) |
| 946 | { | 946 | { |
| 947 | DECLARE_SSID_BUF(ssid); | 947 | DECLARE_SSID_BUF(ssid); |
| 948 | struct lbs_private *priv = netdev_priv(dev); | 948 | struct lbs_private *priv = dev->ml_priv; |
| 949 | int ret = 0; | 949 | int ret = 0; |
| 950 | 950 | ||
| 951 | lbs_deb_enter(LBS_DEB_WEXT); | 951 | lbs_deb_enter(LBS_DEB_WEXT); |
| @@ -1008,7 +1008,7 @@ int lbs_get_scan(struct net_device *dev, struct iw_request_info *info, | |||
| 1008 | struct iw_point *dwrq, char *extra) | 1008 | struct iw_point *dwrq, char *extra) |
| 1009 | { | 1009 | { |
| 1010 | #define SCAN_ITEM_SIZE 128 | 1010 | #define SCAN_ITEM_SIZE 128 |
| 1011 | struct lbs_private *priv = netdev_priv(dev); | 1011 | struct lbs_private *priv = dev->ml_priv; |
| 1012 | int err = 0; | 1012 | int err = 0; |
| 1013 | char *ev = extra; | 1013 | char *ev = extra; |
| 1014 | char *stop = ev + dwrq->length; | 1014 | char *stop = ev + dwrq->length; |
diff --git a/drivers/net/wireless/libertas/tx.c b/drivers/net/wireless/libertas/tx.c index dac462641170..68bec31ae03b 100644 --- a/drivers/net/wireless/libertas/tx.c +++ b/drivers/net/wireless/libertas/tx.c | |||
| @@ -60,7 +60,7 @@ static u32 convert_radiotap_rate_to_mv(u8 rate) | |||
| 60 | int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) | 60 | int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) |
| 61 | { | 61 | { |
| 62 | unsigned long flags; | 62 | unsigned long flags; |
| 63 | struct lbs_private *priv = netdev_priv(dev); | 63 | struct lbs_private *priv = dev->ml_priv; |
| 64 | struct txpd *txpd; | 64 | struct txpd *txpd; |
| 65 | char *p802x_hdr; | 65 | char *p802x_hdr; |
| 66 | uint16_t pkt_len; | 66 | uint16_t pkt_len; |
diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c index c6102e08179e..f16d136ab4bb 100644 --- a/drivers/net/wireless/libertas/wext.c +++ b/drivers/net/wireless/libertas/wext.c | |||
| @@ -163,7 +163,7 @@ static int lbs_get_name(struct net_device *dev, struct iw_request_info *info, | |||
| 163 | static int lbs_get_freq(struct net_device *dev, struct iw_request_info *info, | 163 | static int lbs_get_freq(struct net_device *dev, struct iw_request_info *info, |
| 164 | struct iw_freq *fwrq, char *extra) | 164 | struct iw_freq *fwrq, char *extra) |
| 165 | { | 165 | { |
| 166 | struct lbs_private *priv = netdev_priv(dev); | 166 | struct lbs_private *priv = dev->ml_priv; |
| 167 | struct chan_freq_power *cfp; | 167 | struct chan_freq_power *cfp; |
| 168 | 168 | ||
| 169 | lbs_deb_enter(LBS_DEB_WEXT); | 169 | lbs_deb_enter(LBS_DEB_WEXT); |
| @@ -189,7 +189,7 @@ static int lbs_get_freq(struct net_device *dev, struct iw_request_info *info, | |||
| 189 | static int lbs_get_wap(struct net_device *dev, struct iw_request_info *info, | 189 | static int lbs_get_wap(struct net_device *dev, struct iw_request_info *info, |
| 190 | struct sockaddr *awrq, char *extra) | 190 | struct sockaddr *awrq, char *extra) |
| 191 | { | 191 | { |
| 192 | struct lbs_private *priv = netdev_priv(dev); | 192 | struct lbs_private *priv = dev->ml_priv; |
| 193 | 193 | ||
| 194 | lbs_deb_enter(LBS_DEB_WEXT); | 194 | lbs_deb_enter(LBS_DEB_WEXT); |
| 195 | 195 | ||
| @@ -207,7 +207,7 @@ static int lbs_get_wap(struct net_device *dev, struct iw_request_info *info, | |||
| 207 | static int lbs_set_nick(struct net_device *dev, struct iw_request_info *info, | 207 | static int lbs_set_nick(struct net_device *dev, struct iw_request_info *info, |
| 208 | struct iw_point *dwrq, char *extra) | 208 | struct iw_point *dwrq, char *extra) |
| 209 | { | 209 | { |
| 210 | struct lbs_private *priv = netdev_priv(dev); | 210 | struct lbs_private *priv = dev->ml_priv; |
| 211 | 211 | ||
| 212 | lbs_deb_enter(LBS_DEB_WEXT); | 212 | lbs_deb_enter(LBS_DEB_WEXT); |
| 213 | 213 | ||
| @@ -231,7 +231,7 @@ static int lbs_set_nick(struct net_device *dev, struct iw_request_info *info, | |||
| 231 | static int lbs_get_nick(struct net_device *dev, struct iw_request_info *info, | 231 | static int lbs_get_nick(struct net_device *dev, struct iw_request_info *info, |
| 232 | struct iw_point *dwrq, char *extra) | 232 | struct iw_point *dwrq, char *extra) |
| 233 | { | 233 | { |
| 234 | struct lbs_private *priv = netdev_priv(dev); | 234 | struct lbs_private *priv = dev->ml_priv; |
| 235 | 235 | ||
| 236 | lbs_deb_enter(LBS_DEB_WEXT); | 236 | lbs_deb_enter(LBS_DEB_WEXT); |
| 237 | 237 | ||
| @@ -248,7 +248,7 @@ static int lbs_get_nick(struct net_device *dev, struct iw_request_info *info, | |||
| 248 | static int mesh_get_nick(struct net_device *dev, struct iw_request_info *info, | 248 | static int mesh_get_nick(struct net_device *dev, struct iw_request_info *info, |
| 249 | struct iw_point *dwrq, char *extra) | 249 | struct iw_point *dwrq, char *extra) |
| 250 | { | 250 | { |
| 251 | struct lbs_private *priv = netdev_priv(dev); | 251 | struct lbs_private *priv = dev->ml_priv; |
| 252 | 252 | ||
| 253 | lbs_deb_enter(LBS_DEB_WEXT); | 253 | lbs_deb_enter(LBS_DEB_WEXT); |
| 254 | 254 | ||
| @@ -273,7 +273,7 @@ static int lbs_set_rts(struct net_device *dev, struct iw_request_info *info, | |||
| 273 | struct iw_param *vwrq, char *extra) | 273 | struct iw_param *vwrq, char *extra) |
| 274 | { | 274 | { |
| 275 | int ret = 0; | 275 | int ret = 0; |
| 276 | struct lbs_private *priv = netdev_priv(dev); | 276 | struct lbs_private *priv = dev->ml_priv; |
| 277 | u32 val = vwrq->value; | 277 | u32 val = vwrq->value; |
| 278 | 278 | ||
| 279 | lbs_deb_enter(LBS_DEB_WEXT); | 279 | lbs_deb_enter(LBS_DEB_WEXT); |
| @@ -293,7 +293,7 @@ static int lbs_set_rts(struct net_device *dev, struct iw_request_info *info, | |||
| 293 | static int lbs_get_rts(struct net_device *dev, struct iw_request_info *info, | 293 | static int lbs_get_rts(struct net_device *dev, struct iw_request_info *info, |
| 294 | struct iw_param *vwrq, char *extra) | 294 | struct iw_param *vwrq, char *extra) |
| 295 | { | 295 | { |
| 296 | struct lbs_private *priv = netdev_priv(dev); | 296 | struct lbs_private *priv = dev->ml_priv; |
| 297 | int ret = 0; | 297 | int ret = 0; |
| 298 | u16 val = 0; | 298 | u16 val = 0; |
| 299 | 299 | ||
| @@ -315,7 +315,7 @@ out: | |||
| 315 | static int lbs_set_frag(struct net_device *dev, struct iw_request_info *info, | 315 | static int lbs_set_frag(struct net_device *dev, struct iw_request_info *info, |
| 316 | struct iw_param *vwrq, char *extra) | 316 | struct iw_param *vwrq, char *extra) |
| 317 | { | 317 | { |
| 318 | struct lbs_private *priv = netdev_priv(dev); | 318 | struct lbs_private *priv = dev->ml_priv; |
| 319 | int ret = 0; | 319 | int ret = 0; |
| 320 | u32 val = vwrq->value; | 320 | u32 val = vwrq->value; |
| 321 | 321 | ||
| @@ -336,7 +336,7 @@ static int lbs_set_frag(struct net_device *dev, struct iw_request_info *info, | |||
| 336 | static int lbs_get_frag(struct net_device *dev, struct iw_request_info *info, | 336 | static int lbs_get_frag(struct net_device *dev, struct iw_request_info *info, |
| 337 | struct iw_param *vwrq, char *extra) | 337 | struct iw_param *vwrq, char *extra) |
| 338 | { | 338 | { |
| 339 | struct lbs_private *priv = netdev_priv(dev); | 339 | struct lbs_private *priv = dev->ml_priv; |
| 340 | int ret = 0; | 340 | int ret = 0; |
| 341 | u16 val = 0; | 341 | u16 val = 0; |
| 342 | 342 | ||
| @@ -359,7 +359,7 @@ out: | |||
| 359 | static int lbs_get_mode(struct net_device *dev, | 359 | static int lbs_get_mode(struct net_device *dev, |
| 360 | struct iw_request_info *info, u32 * uwrq, char *extra) | 360 | struct iw_request_info *info, u32 * uwrq, char *extra) |
| 361 | { | 361 | { |
| 362 | struct lbs_private *priv = netdev_priv(dev); | 362 | struct lbs_private *priv = dev->ml_priv; |
| 363 | 363 | ||
| 364 | lbs_deb_enter(LBS_DEB_WEXT); | 364 | lbs_deb_enter(LBS_DEB_WEXT); |
| 365 | 365 | ||
| @@ -385,7 +385,7 @@ static int lbs_get_txpow(struct net_device *dev, | |||
| 385 | struct iw_request_info *info, | 385 | struct iw_request_info *info, |
| 386 | struct iw_param *vwrq, char *extra) | 386 | struct iw_param *vwrq, char *extra) |
| 387 | { | 387 | { |
| 388 | struct lbs_private *priv = netdev_priv(dev); | 388 | struct lbs_private *priv = dev->ml_priv; |
| 389 | s16 curlevel = 0; | 389 | s16 curlevel = 0; |
| 390 | int ret = 0; | 390 | int ret = 0; |
| 391 | 391 | ||
| @@ -418,7 +418,7 @@ out: | |||
| 418 | static int lbs_set_retry(struct net_device *dev, struct iw_request_info *info, | 418 | static int lbs_set_retry(struct net_device *dev, struct iw_request_info *info, |
| 419 | struct iw_param *vwrq, char *extra) | 419 | struct iw_param *vwrq, char *extra) |
| 420 | { | 420 | { |
| 421 | struct lbs_private *priv = netdev_priv(dev); | 421 | struct lbs_private *priv = dev->ml_priv; |
| 422 | int ret = 0; | 422 | int ret = 0; |
| 423 | u16 slimit = 0, llimit = 0; | 423 | u16 slimit = 0, llimit = 0; |
| 424 | 424 | ||
| @@ -466,7 +466,7 @@ out: | |||
| 466 | static int lbs_get_retry(struct net_device *dev, struct iw_request_info *info, | 466 | static int lbs_get_retry(struct net_device *dev, struct iw_request_info *info, |
| 467 | struct iw_param *vwrq, char *extra) | 467 | struct iw_param *vwrq, char *extra) |
| 468 | { | 468 | { |
| 469 | struct lbs_private *priv = netdev_priv(dev); | 469 | struct lbs_private *priv = dev->ml_priv; |
| 470 | int ret = 0; | 470 | int ret = 0; |
| 471 | u16 val = 0; | 471 | u16 val = 0; |
| 472 | 472 | ||
| @@ -542,7 +542,7 @@ static int lbs_get_range(struct net_device *dev, struct iw_request_info *info, | |||
| 542 | struct iw_point *dwrq, char *extra) | 542 | struct iw_point *dwrq, char *extra) |
| 543 | { | 543 | { |
| 544 | int i, j; | 544 | int i, j; |
| 545 | struct lbs_private *priv = netdev_priv(dev); | 545 | struct lbs_private *priv = dev->ml_priv; |
| 546 | struct iw_range *range = (struct iw_range *)extra; | 546 | struct iw_range *range = (struct iw_range *)extra; |
| 547 | struct chan_freq_power *cfp; | 547 | struct chan_freq_power *cfp; |
| 548 | u8 rates[MAX_RATES + 1]; | 548 | u8 rates[MAX_RATES + 1]; |
| @@ -708,7 +708,7 @@ out: | |||
| 708 | static int lbs_set_power(struct net_device *dev, struct iw_request_info *info, | 708 | static int lbs_set_power(struct net_device *dev, struct iw_request_info *info, |
| 709 | struct iw_param *vwrq, char *extra) | 709 | struct iw_param *vwrq, char *extra) |
| 710 | { | 710 | { |
| 711 | struct lbs_private *priv = netdev_priv(dev); | 711 | struct lbs_private *priv = dev->ml_priv; |
| 712 | 712 | ||
| 713 | lbs_deb_enter(LBS_DEB_WEXT); | 713 | lbs_deb_enter(LBS_DEB_WEXT); |
| 714 | 714 | ||
| @@ -758,7 +758,7 @@ static int lbs_set_power(struct net_device *dev, struct iw_request_info *info, | |||
| 758 | static int lbs_get_power(struct net_device *dev, struct iw_request_info *info, | 758 | static int lbs_get_power(struct net_device *dev, struct iw_request_info *info, |
| 759 | struct iw_param *vwrq, char *extra) | 759 | struct iw_param *vwrq, char *extra) |
| 760 | { | 760 | { |
| 761 | struct lbs_private *priv = netdev_priv(dev); | 761 | struct lbs_private *priv = dev->ml_priv; |
| 762 | 762 | ||
| 763 | lbs_deb_enter(LBS_DEB_WEXT); | 763 | lbs_deb_enter(LBS_DEB_WEXT); |
| 764 | 764 | ||
| @@ -781,7 +781,7 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev) | |||
| 781 | EXCELLENT = 95, | 781 | EXCELLENT = 95, |
| 782 | PERFECT = 100 | 782 | PERFECT = 100 |
| 783 | }; | 783 | }; |
| 784 | struct lbs_private *priv = netdev_priv(dev); | 784 | struct lbs_private *priv = dev->ml_priv; |
| 785 | u32 rssi_qual; | 785 | u32 rssi_qual; |
| 786 | u32 tx_qual; | 786 | u32 tx_qual; |
| 787 | u32 quality = 0; | 787 | u32 quality = 0; |
| @@ -886,7 +886,7 @@ static int lbs_set_freq(struct net_device *dev, struct iw_request_info *info, | |||
| 886 | struct iw_freq *fwrq, char *extra) | 886 | struct iw_freq *fwrq, char *extra) |
| 887 | { | 887 | { |
| 888 | int ret = -EINVAL; | 888 | int ret = -EINVAL; |
| 889 | struct lbs_private *priv = netdev_priv(dev); | 889 | struct lbs_private *priv = dev->ml_priv; |
| 890 | struct chan_freq_power *cfp; | 890 | struct chan_freq_power *cfp; |
| 891 | struct assoc_request * assoc_req; | 891 | struct assoc_request * assoc_req; |
| 892 | 892 | ||
| @@ -943,7 +943,7 @@ static int lbs_mesh_set_freq(struct net_device *dev, | |||
| 943 | struct iw_request_info *info, | 943 | struct iw_request_info *info, |
| 944 | struct iw_freq *fwrq, char *extra) | 944 | struct iw_freq *fwrq, char *extra) |
| 945 | { | 945 | { |
| 946 | struct lbs_private *priv = netdev_priv(dev); | 946 | struct lbs_private *priv = dev->ml_priv; |
| 947 | struct chan_freq_power *cfp; | 947 | struct chan_freq_power *cfp; |
| 948 | int ret = -EINVAL; | 948 | int ret = -EINVAL; |
| 949 | 949 | ||
| @@ -994,7 +994,7 @@ out: | |||
| 994 | static int lbs_set_rate(struct net_device *dev, struct iw_request_info *info, | 994 | static int lbs_set_rate(struct net_device *dev, struct iw_request_info *info, |
| 995 | struct iw_param *vwrq, char *extra) | 995 | struct iw_param *vwrq, char *extra) |
| 996 | { | 996 | { |
| 997 | struct lbs_private *priv = netdev_priv(dev); | 997 | struct lbs_private *priv = dev->ml_priv; |
| 998 | u8 new_rate = 0; | 998 | u8 new_rate = 0; |
| 999 | int ret = -EINVAL; | 999 | int ret = -EINVAL; |
| 1000 | u8 rates[MAX_RATES + 1]; | 1000 | u8 rates[MAX_RATES + 1]; |
| @@ -1054,7 +1054,7 @@ out: | |||
| 1054 | static int lbs_get_rate(struct net_device *dev, struct iw_request_info *info, | 1054 | static int lbs_get_rate(struct net_device *dev, struct iw_request_info *info, |
| 1055 | struct iw_param *vwrq, char *extra) | 1055 | struct iw_param *vwrq, char *extra) |
| 1056 | { | 1056 | { |
| 1057 | struct lbs_private *priv = netdev_priv(dev); | 1057 | struct lbs_private *priv = dev->ml_priv; |
| 1058 | 1058 | ||
| 1059 | lbs_deb_enter(LBS_DEB_WEXT); | 1059 | lbs_deb_enter(LBS_DEB_WEXT); |
| 1060 | 1060 | ||
| @@ -1079,7 +1079,7 @@ static int lbs_set_mode(struct net_device *dev, | |||
| 1079 | struct iw_request_info *info, u32 * uwrq, char *extra) | 1079 | struct iw_request_info *info, u32 * uwrq, char *extra) |
| 1080 | { | 1080 | { |
| 1081 | int ret = 0; | 1081 | int ret = 0; |
| 1082 | struct lbs_private *priv = netdev_priv(dev); | 1082 | struct lbs_private *priv = dev->ml_priv; |
| 1083 | struct assoc_request * assoc_req; | 1083 | struct assoc_request * assoc_req; |
| 1084 | 1084 | ||
| 1085 | lbs_deb_enter(LBS_DEB_WEXT); | 1085 | lbs_deb_enter(LBS_DEB_WEXT); |
| @@ -1124,7 +1124,7 @@ static int lbs_get_encode(struct net_device *dev, | |||
| 1124 | struct iw_request_info *info, | 1124 | struct iw_request_info *info, |
| 1125 | struct iw_point *dwrq, u8 * extra) | 1125 | struct iw_point *dwrq, u8 * extra) |
| 1126 | { | 1126 | { |
| 1127 | struct lbs_private *priv = netdev_priv(dev); | 1127 | struct lbs_private *priv = dev->ml_priv; |
| 1128 | int index = (dwrq->flags & IW_ENCODE_INDEX) - 1; | 1128 | int index = (dwrq->flags & IW_ENCODE_INDEX) - 1; |
| 1129 | 1129 | ||
| 1130 | lbs_deb_enter(LBS_DEB_WEXT); | 1130 | lbs_deb_enter(LBS_DEB_WEXT); |
| @@ -1319,7 +1319,7 @@ static int lbs_set_encode(struct net_device *dev, | |||
| 1319 | struct iw_point *dwrq, char *extra) | 1319 | struct iw_point *dwrq, char *extra) |
| 1320 | { | 1320 | { |
| 1321 | int ret = 0; | 1321 | int ret = 0; |
| 1322 | struct lbs_private *priv = netdev_priv(dev); | 1322 | struct lbs_private *priv = dev->ml_priv; |
| 1323 | struct assoc_request * assoc_req; | 1323 | struct assoc_request * assoc_req; |
| 1324 | u16 is_default = 0, index = 0, set_tx_key = 0; | 1324 | u16 is_default = 0, index = 0, set_tx_key = 0; |
| 1325 | 1325 | ||
| @@ -1395,7 +1395,7 @@ static int lbs_get_encodeext(struct net_device *dev, | |||
| 1395 | char *extra) | 1395 | char *extra) |
| 1396 | { | 1396 | { |
| 1397 | int ret = -EINVAL; | 1397 | int ret = -EINVAL; |
| 1398 | struct lbs_private *priv = netdev_priv(dev); | 1398 | struct lbs_private *priv = dev->ml_priv; |
| 1399 | struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; | 1399 | struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; |
| 1400 | int index, max_key_len; | 1400 | int index, max_key_len; |
| 1401 | 1401 | ||
| @@ -1501,7 +1501,7 @@ static int lbs_set_encodeext(struct net_device *dev, | |||
| 1501 | char *extra) | 1501 | char *extra) |
| 1502 | { | 1502 | { |
| 1503 | int ret = 0; | 1503 | int ret = 0; |
| 1504 | struct lbs_private *priv = netdev_priv(dev); | 1504 | struct lbs_private *priv = dev->ml_priv; |
| 1505 | struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; | 1505 | struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; |
| 1506 | int alg = ext->alg; | 1506 | int alg = ext->alg; |
| 1507 | struct assoc_request * assoc_req; | 1507 | struct assoc_request * assoc_req; |
| @@ -1639,7 +1639,7 @@ static int lbs_set_genie(struct net_device *dev, | |||
| 1639 | struct iw_point *dwrq, | 1639 | struct iw_point *dwrq, |
| 1640 | char *extra) | 1640 | char *extra) |
| 1641 | { | 1641 | { |
| 1642 | struct lbs_private *priv = netdev_priv(dev); | 1642 | struct lbs_private *priv = dev->ml_priv; |
| 1643 | int ret = 0; | 1643 | int ret = 0; |
| 1644 | struct assoc_request * assoc_req; | 1644 | struct assoc_request * assoc_req; |
| 1645 | 1645 | ||
| @@ -1685,7 +1685,7 @@ static int lbs_get_genie(struct net_device *dev, | |||
| 1685 | char *extra) | 1685 | char *extra) |
| 1686 | { | 1686 | { |
| 1687 | int ret = 0; | 1687 | int ret = 0; |
| 1688 | struct lbs_private *priv = netdev_priv(dev); | 1688 | struct lbs_private *priv = dev->ml_priv; |
| 1689 | 1689 | ||
| 1690 | lbs_deb_enter(LBS_DEB_WEXT); | 1690 | lbs_deb_enter(LBS_DEB_WEXT); |
| 1691 | 1691 | ||
| @@ -1713,7 +1713,7 @@ static int lbs_set_auth(struct net_device *dev, | |||
| 1713 | struct iw_param *dwrq, | 1713 | struct iw_param *dwrq, |
| 1714 | char *extra) | 1714 | char *extra) |
| 1715 | { | 1715 | { |
| 1716 | struct lbs_private *priv = netdev_priv(dev); | 1716 | struct lbs_private *priv = dev->ml_priv; |
| 1717 | struct assoc_request * assoc_req; | 1717 | struct assoc_request * assoc_req; |
| 1718 | int ret = 0; | 1718 | int ret = 0; |
| 1719 | int updated = 0; | 1719 | int updated = 0; |
| @@ -1816,7 +1816,7 @@ static int lbs_get_auth(struct net_device *dev, | |||
| 1816 | char *extra) | 1816 | char *extra) |
| 1817 | { | 1817 | { |
| 1818 | int ret = 0; | 1818 | int ret = 0; |
| 1819 | struct lbs_private *priv = netdev_priv(dev); | 1819 | struct lbs_private *priv = dev->ml_priv; |
| 1820 | 1820 | ||
| 1821 | lbs_deb_enter(LBS_DEB_WEXT); | 1821 | lbs_deb_enter(LBS_DEB_WEXT); |
| 1822 | 1822 | ||
| @@ -1857,7 +1857,7 @@ static int lbs_set_txpow(struct net_device *dev, struct iw_request_info *info, | |||
| 1857 | struct iw_param *vwrq, char *extra) | 1857 | struct iw_param *vwrq, char *extra) |
| 1858 | { | 1858 | { |
| 1859 | int ret = 0; | 1859 | int ret = 0; |
| 1860 | struct lbs_private *priv = netdev_priv(dev); | 1860 | struct lbs_private *priv = dev->ml_priv; |
| 1861 | s16 dbm = (s16) vwrq->value; | 1861 | s16 dbm = (s16) vwrq->value; |
| 1862 | 1862 | ||
| 1863 | lbs_deb_enter(LBS_DEB_WEXT); | 1863 | lbs_deb_enter(LBS_DEB_WEXT); |
| @@ -1936,7 +1936,7 @@ out: | |||
| 1936 | static int lbs_get_essid(struct net_device *dev, struct iw_request_info *info, | 1936 | static int lbs_get_essid(struct net_device *dev, struct iw_request_info *info, |
| 1937 | struct iw_point *dwrq, char *extra) | 1937 | struct iw_point *dwrq, char *extra) |
| 1938 | { | 1938 | { |
| 1939 | struct lbs_private *priv = netdev_priv(dev); | 1939 | struct lbs_private *priv = dev->ml_priv; |
| 1940 | 1940 | ||
| 1941 | lbs_deb_enter(LBS_DEB_WEXT); | 1941 | lbs_deb_enter(LBS_DEB_WEXT); |
| 1942 | 1942 | ||
| @@ -1971,7 +1971,7 @@ static int lbs_get_essid(struct net_device *dev, struct iw_request_info *info, | |||
| 1971 | static int lbs_set_essid(struct net_device *dev, struct iw_request_info *info, | 1971 | static int lbs_set_essid(struct net_device *dev, struct iw_request_info *info, |
| 1972 | struct iw_point *dwrq, char *extra) | 1972 | struct iw_point *dwrq, char *extra) |
| 1973 | { | 1973 | { |
| 1974 | struct lbs_private *priv = netdev_priv(dev); | 1974 | struct lbs_private *priv = dev->ml_priv; |
| 1975 | int ret = 0; | 1975 | int ret = 0; |
| 1976 | u8 ssid[IW_ESSID_MAX_SIZE]; | 1976 | u8 ssid[IW_ESSID_MAX_SIZE]; |
| 1977 | u8 ssid_len = 0; | 1977 | u8 ssid_len = 0; |
| @@ -2040,7 +2040,7 @@ static int lbs_mesh_get_essid(struct net_device *dev, | |||
| 2040 | struct iw_request_info *info, | 2040 | struct iw_request_info *info, |
| 2041 | struct iw_point *dwrq, char *extra) | 2041 | struct iw_point *dwrq, char *extra) |
| 2042 | { | 2042 | { |
| 2043 | struct lbs_private *priv = netdev_priv(dev); | 2043 | struct lbs_private *priv = dev->ml_priv; |
| 2044 | 2044 | ||
| 2045 | lbs_deb_enter(LBS_DEB_WEXT); | 2045 | lbs_deb_enter(LBS_DEB_WEXT); |
| 2046 | 2046 | ||
| @@ -2058,7 +2058,7 @@ static int lbs_mesh_set_essid(struct net_device *dev, | |||
| 2058 | struct iw_request_info *info, | 2058 | struct iw_request_info *info, |
| 2059 | struct iw_point *dwrq, char *extra) | 2059 | struct iw_point *dwrq, char *extra) |
| 2060 | { | 2060 | { |
| 2061 | struct lbs_private *priv = netdev_priv(dev); | 2061 | struct lbs_private *priv = dev->ml_priv; |
| 2062 | int ret = 0; | 2062 | int ret = 0; |
| 2063 | 2063 | ||
| 2064 | lbs_deb_enter(LBS_DEB_WEXT); | 2064 | lbs_deb_enter(LBS_DEB_WEXT); |
| @@ -2102,7 +2102,7 @@ static int lbs_mesh_set_essid(struct net_device *dev, | |||
| 2102 | static int lbs_set_wap(struct net_device *dev, struct iw_request_info *info, | 2102 | static int lbs_set_wap(struct net_device *dev, struct iw_request_info *info, |
| 2103 | struct sockaddr *awrq, char *extra) | 2103 | struct sockaddr *awrq, char *extra) |
| 2104 | { | 2104 | { |
| 2105 | struct lbs_private *priv = netdev_priv(dev); | 2105 | struct lbs_private *priv = dev->ml_priv; |
| 2106 | struct assoc_request * assoc_req; | 2106 | struct assoc_request * assoc_req; |
| 2107 | int ret = 0; | 2107 | int ret = 0; |
| 2108 | 2108 | ||
diff --git a/drivers/net/wireless/orinoco/orinoco.c b/drivers/net/wireless/orinoco/orinoco.c index 45a04faa7818..067d1a9c728b 100644 --- a/drivers/net/wireless/orinoco/orinoco.c +++ b/drivers/net/wireless/orinoco/orinoco.c | |||
| @@ -3157,8 +3157,20 @@ static int orinoco_pm_notifier(struct notifier_block *notifier, | |||
| 3157 | 3157 | ||
| 3158 | return NOTIFY_DONE; | 3158 | return NOTIFY_DONE; |
| 3159 | } | 3159 | } |
| 3160 | |||
| 3161 | static void orinoco_register_pm_notifier(struct orinoco_private *priv) | ||
| 3162 | { | ||
| 3163 | priv->pm_notifier.notifier_call = orinoco_pm_notifier; | ||
| 3164 | register_pm_notifier(&priv->pm_notifier); | ||
| 3165 | } | ||
| 3166 | |||
| 3167 | static void orinoco_unregister_pm_notifier(struct orinoco_private *priv) | ||
| 3168 | { | ||
| 3169 | unregister_pm_notifier(&priv->pm_notifier); | ||
| 3170 | } | ||
| 3160 | #else /* !PM_SLEEP || HERMES_CACHE_FW_ON_INIT */ | 3171 | #else /* !PM_SLEEP || HERMES_CACHE_FW_ON_INIT */ |
| 3161 | #define orinoco_pm_notifier NULL | 3172 | #define orinoco_register_pm_notifier(priv) do { } while(0) |
| 3173 | #define orinoco_unregister_pm_notifier(priv) do { } while(0) | ||
| 3162 | #endif | 3174 | #endif |
| 3163 | 3175 | ||
| 3164 | /********************************************************************/ | 3176 | /********************************************************************/ |
| @@ -3648,8 +3660,7 @@ struct net_device | |||
| 3648 | priv->cached_fw = NULL; | 3660 | priv->cached_fw = NULL; |
| 3649 | 3661 | ||
| 3650 | /* Register PM notifiers */ | 3662 | /* Register PM notifiers */ |
| 3651 | priv->pm_notifier.notifier_call = orinoco_pm_notifier; | 3663 | orinoco_register_pm_notifier(priv); |
| 3652 | register_pm_notifier(&priv->pm_notifier); | ||
| 3653 | 3664 | ||
| 3654 | return dev; | 3665 | return dev; |
| 3655 | } | 3666 | } |
| @@ -3673,7 +3684,7 @@ void free_orinocodev(struct net_device *dev) | |||
| 3673 | kfree(rx_data); | 3684 | kfree(rx_data); |
| 3674 | } | 3685 | } |
| 3675 | 3686 | ||
| 3676 | unregister_pm_notifier(&priv->pm_notifier); | 3687 | orinoco_unregister_pm_notifier(priv); |
| 3677 | orinoco_uncache_fw(priv); | 3688 | orinoco_uncache_fw(priv); |
| 3678 | 3689 | ||
| 3679 | priv->wpa_ie_len = 0; | 3690 | priv->wpa_ie_len = 0; |
diff --git a/drivers/net/wireless/p54/p54common.c b/drivers/net/wireless/p54/p54common.c index 34561e6e816b..f170106bf0ae 100644 --- a/drivers/net/wireless/p54/p54common.c +++ b/drivers/net/wireless/p54/p54common.c | |||
| @@ -710,10 +710,11 @@ static struct sk_buff *p54_find_tx_entry(struct ieee80211_hw *dev, | |||
| 710 | __le32 req_id) | 710 | __le32 req_id) |
| 711 | { | 711 | { |
| 712 | struct p54_common *priv = dev->priv; | 712 | struct p54_common *priv = dev->priv; |
| 713 | struct sk_buff *entry = priv->tx_queue.next; | 713 | struct sk_buff *entry; |
| 714 | unsigned long flags; | 714 | unsigned long flags; |
| 715 | 715 | ||
| 716 | spin_lock_irqsave(&priv->tx_queue.lock, flags); | 716 | spin_lock_irqsave(&priv->tx_queue.lock, flags); |
| 717 | entry = priv->tx_queue.next; | ||
| 717 | while (entry != (struct sk_buff *)&priv->tx_queue) { | 718 | while (entry != (struct sk_buff *)&priv->tx_queue) { |
| 718 | struct p54_hdr *hdr = (struct p54_hdr *) entry->data; | 719 | struct p54_hdr *hdr = (struct p54_hdr *) entry->data; |
| 719 | 720 | ||
| @@ -732,7 +733,7 @@ static void p54_rx_frame_sent(struct ieee80211_hw *dev, struct sk_buff *skb) | |||
| 732 | struct p54_common *priv = dev->priv; | 733 | struct p54_common *priv = dev->priv; |
| 733 | struct p54_hdr *hdr = (struct p54_hdr *) skb->data; | 734 | struct p54_hdr *hdr = (struct p54_hdr *) skb->data; |
| 734 | struct p54_frame_sent *payload = (struct p54_frame_sent *) hdr->data; | 735 | struct p54_frame_sent *payload = (struct p54_frame_sent *) hdr->data; |
| 735 | struct sk_buff *entry = (struct sk_buff *) priv->tx_queue.next; | 736 | struct sk_buff *entry; |
| 736 | u32 addr = le32_to_cpu(hdr->req_id) - priv->headroom; | 737 | u32 addr = le32_to_cpu(hdr->req_id) - priv->headroom; |
| 737 | struct memrecord *range = NULL; | 738 | struct memrecord *range = NULL; |
| 738 | u32 freed = 0; | 739 | u32 freed = 0; |
| @@ -741,6 +742,7 @@ static void p54_rx_frame_sent(struct ieee80211_hw *dev, struct sk_buff *skb) | |||
| 741 | int count, idx; | 742 | int count, idx; |
| 742 | 743 | ||
| 743 | spin_lock_irqsave(&priv->tx_queue.lock, flags); | 744 | spin_lock_irqsave(&priv->tx_queue.lock, flags); |
| 745 | entry = (struct sk_buff *) priv->tx_queue.next; | ||
| 744 | while (entry != (struct sk_buff *)&priv->tx_queue) { | 746 | while (entry != (struct sk_buff *)&priv->tx_queue) { |
| 745 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(entry); | 747 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(entry); |
| 746 | struct p54_hdr *entry_hdr; | 748 | struct p54_hdr *entry_hdr; |
| @@ -976,7 +978,7 @@ static int p54_assign_address(struct ieee80211_hw *dev, struct sk_buff *skb, | |||
| 976 | struct p54_hdr *data, u32 len) | 978 | struct p54_hdr *data, u32 len) |
| 977 | { | 979 | { |
| 978 | struct p54_common *priv = dev->priv; | 980 | struct p54_common *priv = dev->priv; |
| 979 | struct sk_buff *entry = priv->tx_queue.next; | 981 | struct sk_buff *entry; |
| 980 | struct sk_buff *target_skb = NULL; | 982 | struct sk_buff *target_skb = NULL; |
| 981 | struct ieee80211_tx_info *info; | 983 | struct ieee80211_tx_info *info; |
| 982 | struct memrecord *range; | 984 | struct memrecord *range; |
| @@ -1014,6 +1016,7 @@ static int p54_assign_address(struct ieee80211_hw *dev, struct sk_buff *skb, | |||
| 1014 | } | 1016 | } |
| 1015 | } | 1017 | } |
| 1016 | 1018 | ||
| 1019 | entry = priv->tx_queue.next; | ||
| 1017 | while (left--) { | 1020 | while (left--) { |
| 1018 | u32 hole_size; | 1021 | u32 hole_size; |
| 1019 | info = IEEE80211_SKB_CB(entry); | 1022 | info = IEEE80211_SKB_CB(entry); |
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c index af6b5847be5c..3e2ac2bbb12f 100644 --- a/drivers/net/wireless/rt2x00/rt2500usb.c +++ b/drivers/net/wireless/rt2x00/rt2500usb.c | |||
| @@ -1952,6 +1952,8 @@ static struct usb_device_id rt2500usb_device_table[] = { | |||
| 1952 | { USB_DEVICE(0x13b1, 0x000d), USB_DEVICE_DATA(&rt2500usb_ops) }, | 1952 | { USB_DEVICE(0x13b1, 0x000d), USB_DEVICE_DATA(&rt2500usb_ops) }, |
| 1953 | { USB_DEVICE(0x13b1, 0x0011), USB_DEVICE_DATA(&rt2500usb_ops) }, | 1953 | { USB_DEVICE(0x13b1, 0x0011), USB_DEVICE_DATA(&rt2500usb_ops) }, |
| 1954 | { USB_DEVICE(0x13b1, 0x001a), USB_DEVICE_DATA(&rt2500usb_ops) }, | 1954 | { USB_DEVICE(0x13b1, 0x001a), USB_DEVICE_DATA(&rt2500usb_ops) }, |
| 1955 | /* CNet */ | ||
| 1956 | { USB_DEVICE(0x1371, 0x9022), USB_DEVICE_DATA(&rt2500usb_ops) }, | ||
| 1955 | /* Conceptronic */ | 1957 | /* Conceptronic */ |
| 1956 | { USB_DEVICE(0x14b2, 0x3c02), USB_DEVICE_DATA(&rt2500usb_ops) }, | 1958 | { USB_DEVICE(0x14b2, 0x3c02), USB_DEVICE_DATA(&rt2500usb_ops) }, |
| 1957 | /* D-LINK */ | 1959 | /* D-LINK */ |
| @@ -1976,14 +1978,20 @@ static struct usb_device_id rt2500usb_device_table[] = { | |||
| 1976 | { USB_DEVICE(0x148f, 0x2570), USB_DEVICE_DATA(&rt2500usb_ops) }, | 1978 | { USB_DEVICE(0x148f, 0x2570), USB_DEVICE_DATA(&rt2500usb_ops) }, |
| 1977 | { USB_DEVICE(0x148f, 0x2573), USB_DEVICE_DATA(&rt2500usb_ops) }, | 1979 | { USB_DEVICE(0x148f, 0x2573), USB_DEVICE_DATA(&rt2500usb_ops) }, |
| 1978 | { USB_DEVICE(0x148f, 0x9020), USB_DEVICE_DATA(&rt2500usb_ops) }, | 1980 | { USB_DEVICE(0x148f, 0x9020), USB_DEVICE_DATA(&rt2500usb_ops) }, |
| 1981 | /* Sagem */ | ||
| 1982 | { USB_DEVICE(0x079b, 0x004b), USB_DEVICE_DATA(&rt2500usb_ops) }, | ||
| 1979 | /* Siemens */ | 1983 | /* Siemens */ |
| 1980 | { USB_DEVICE(0x0681, 0x3c06), USB_DEVICE_DATA(&rt2500usb_ops) }, | 1984 | { USB_DEVICE(0x0681, 0x3c06), USB_DEVICE_DATA(&rt2500usb_ops) }, |
| 1981 | /* SMC */ | 1985 | /* SMC */ |
| 1982 | { USB_DEVICE(0x0707, 0xee13), USB_DEVICE_DATA(&rt2500usb_ops) }, | 1986 | { USB_DEVICE(0x0707, 0xee13), USB_DEVICE_DATA(&rt2500usb_ops) }, |
| 1983 | /* Spairon */ | 1987 | /* Spairon */ |
| 1984 | { USB_DEVICE(0x114b, 0x0110), USB_DEVICE_DATA(&rt2500usb_ops) }, | 1988 | { USB_DEVICE(0x114b, 0x0110), USB_DEVICE_DATA(&rt2500usb_ops) }, |
| 1989 | /* SURECOM */ | ||
| 1990 | { USB_DEVICE(0x0769, 0x11f3), USB_DEVICE_DATA(&rt2500usb_ops) }, | ||
| 1985 | /* Trust */ | 1991 | /* Trust */ |
| 1986 | { USB_DEVICE(0x0eb0, 0x9020), USB_DEVICE_DATA(&rt2500usb_ops) }, | 1992 | { USB_DEVICE(0x0eb0, 0x9020), USB_DEVICE_DATA(&rt2500usb_ops) }, |
| 1993 | /* VTech */ | ||
| 1994 | { USB_DEVICE(0x0f88, 0x3012), USB_DEVICE_DATA(&rt2500usb_ops) }, | ||
| 1987 | /* Zinwell */ | 1995 | /* Zinwell */ |
| 1988 | { USB_DEVICE(0x5a57, 0x0260), USB_DEVICE_DATA(&rt2500usb_ops) }, | 1996 | { USB_DEVICE(0x5a57, 0x0260), USB_DEVICE_DATA(&rt2500usb_ops) }, |
| 1989 | { 0, } | 1997 | { 0, } |
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c index 96a8d69f8790..cefee1b26cd8 100644 --- a/drivers/net/wireless/rt2x00/rt73usb.c +++ b/drivers/net/wireless/rt2x00/rt73usb.c | |||
| @@ -2281,7 +2281,18 @@ static const struct rt2x00_ops rt73usb_ops = { | |||
| 2281 | */ | 2281 | */ |
| 2282 | static struct usb_device_id rt73usb_device_table[] = { | 2282 | static struct usb_device_id rt73usb_device_table[] = { |
| 2283 | /* AboCom */ | 2283 | /* AboCom */ |
| 2284 | { USB_DEVICE(0x07b8, 0xb21b), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2285 | { USB_DEVICE(0x07b8, 0xb21c), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2284 | { USB_DEVICE(0x07b8, 0xb21d), USB_DEVICE_DATA(&rt73usb_ops) }, | 2286 | { USB_DEVICE(0x07b8, 0xb21d), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2287 | { USB_DEVICE(0x07b8, 0xb21e), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2288 | { USB_DEVICE(0x07b8, 0xb21f), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2289 | /* AL */ | ||
| 2290 | { USB_DEVICE(0x14b2, 0x3c10), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2291 | /* Amigo */ | ||
| 2292 | { USB_DEVICE(0x148f, 0x9021), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2293 | { USB_DEVICE(0x0eb0, 0x9021), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2294 | /* AMIT */ | ||
| 2295 | { USB_DEVICE(0x18c5, 0x0002), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2285 | /* Askey */ | 2296 | /* Askey */ |
| 2286 | { USB_DEVICE(0x1690, 0x0722), USB_DEVICE_DATA(&rt73usb_ops) }, | 2297 | { USB_DEVICE(0x1690, 0x0722), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2287 | /* ASUS */ | 2298 | /* ASUS */ |
| @@ -2294,7 +2305,9 @@ static struct usb_device_id rt73usb_device_table[] = { | |||
| 2294 | { USB_DEVICE(0x050d, 0x905c), USB_DEVICE_DATA(&rt73usb_ops) }, | 2305 | { USB_DEVICE(0x050d, 0x905c), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2295 | /* Billionton */ | 2306 | /* Billionton */ |
| 2296 | { USB_DEVICE(0x1631, 0xc019), USB_DEVICE_DATA(&rt73usb_ops) }, | 2307 | { USB_DEVICE(0x1631, 0xc019), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2308 | { USB_DEVICE(0x08dd, 0x0120), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2297 | /* Buffalo */ | 2309 | /* Buffalo */ |
| 2310 | { USB_DEVICE(0x0411, 0x00d8), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2298 | { USB_DEVICE(0x0411, 0x00f4), USB_DEVICE_DATA(&rt73usb_ops) }, | 2311 | { USB_DEVICE(0x0411, 0x00f4), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2299 | /* CNet */ | 2312 | /* CNet */ |
| 2300 | { USB_DEVICE(0x1371, 0x9022), USB_DEVICE_DATA(&rt73usb_ops) }, | 2313 | { USB_DEVICE(0x1371, 0x9022), USB_DEVICE_DATA(&rt73usb_ops) }, |
| @@ -2308,6 +2321,11 @@ static struct usb_device_id rt73usb_device_table[] = { | |||
| 2308 | { USB_DEVICE(0x07d1, 0x3c04), USB_DEVICE_DATA(&rt73usb_ops) }, | 2321 | { USB_DEVICE(0x07d1, 0x3c04), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2309 | { USB_DEVICE(0x07d1, 0x3c06), USB_DEVICE_DATA(&rt73usb_ops) }, | 2322 | { USB_DEVICE(0x07d1, 0x3c06), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2310 | { USB_DEVICE(0x07d1, 0x3c07), USB_DEVICE_DATA(&rt73usb_ops) }, | 2323 | { USB_DEVICE(0x07d1, 0x3c07), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2324 | /* Edimax */ | ||
| 2325 | { USB_DEVICE(0x7392, 0x7318), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2326 | { USB_DEVICE(0x7392, 0x7618), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2327 | /* EnGenius */ | ||
| 2328 | { USB_DEVICE(0x1740, 0x3701), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2311 | /* Gemtek */ | 2329 | /* Gemtek */ |
| 2312 | { USB_DEVICE(0x15a9, 0x0004), USB_DEVICE_DATA(&rt73usb_ops) }, | 2330 | { USB_DEVICE(0x15a9, 0x0004), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2313 | /* Gigabyte */ | 2331 | /* Gigabyte */ |
| @@ -2328,22 +2346,34 @@ static struct usb_device_id rt73usb_device_table[] = { | |||
| 2328 | { USB_DEVICE(0x0db0, 0xa861), USB_DEVICE_DATA(&rt73usb_ops) }, | 2346 | { USB_DEVICE(0x0db0, 0xa861), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2329 | { USB_DEVICE(0x0db0, 0xa874), USB_DEVICE_DATA(&rt73usb_ops) }, | 2347 | { USB_DEVICE(0x0db0, 0xa874), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2330 | /* Ralink */ | 2348 | /* Ralink */ |
| 2349 | { USB_DEVICE(0x04bb, 0x093d), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2331 | { USB_DEVICE(0x148f, 0x2573), USB_DEVICE_DATA(&rt73usb_ops) }, | 2350 | { USB_DEVICE(0x148f, 0x2573), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2332 | { USB_DEVICE(0x148f, 0x2671), USB_DEVICE_DATA(&rt73usb_ops) }, | 2351 | { USB_DEVICE(0x148f, 0x2671), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2333 | /* Qcom */ | 2352 | /* Qcom */ |
| 2334 | { USB_DEVICE(0x18e8, 0x6196), USB_DEVICE_DATA(&rt73usb_ops) }, | 2353 | { USB_DEVICE(0x18e8, 0x6196), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2335 | { USB_DEVICE(0x18e8, 0x6229), USB_DEVICE_DATA(&rt73usb_ops) }, | 2354 | { USB_DEVICE(0x18e8, 0x6229), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2336 | { USB_DEVICE(0x18e8, 0x6238), USB_DEVICE_DATA(&rt73usb_ops) }, | 2355 | { USB_DEVICE(0x18e8, 0x6238), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2356 | /* Samsung */ | ||
| 2357 | { USB_DEVICE(0x04e8, 0x4471), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2337 | /* Senao */ | 2358 | /* Senao */ |
| 2338 | { USB_DEVICE(0x1740, 0x7100), USB_DEVICE_DATA(&rt73usb_ops) }, | 2359 | { USB_DEVICE(0x1740, 0x7100), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2339 | /* Sitecom */ | 2360 | /* Sitecom */ |
| 2340 | { USB_DEVICE(0x0df6, 0x9712), USB_DEVICE_DATA(&rt73usb_ops) }, | 2361 | { USB_DEVICE(0x0df6, 0x0024), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2362 | { USB_DEVICE(0x0df6, 0x0027), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2363 | { USB_DEVICE(0x0df6, 0x002f), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2341 | { USB_DEVICE(0x0df6, 0x90ac), USB_DEVICE_DATA(&rt73usb_ops) }, | 2364 | { USB_DEVICE(0x0df6, 0x90ac), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2365 | { USB_DEVICE(0x0df6, 0x9712), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2342 | /* Surecom */ | 2366 | /* Surecom */ |
| 2343 | { USB_DEVICE(0x0769, 0x31f3), USB_DEVICE_DATA(&rt73usb_ops) }, | 2367 | { USB_DEVICE(0x0769, 0x31f3), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2368 | /* Philips */ | ||
| 2369 | { USB_DEVICE(0x0471, 0x200a), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2344 | /* Planex */ | 2370 | /* Planex */ |
| 2345 | { USB_DEVICE(0x2019, 0xab01), USB_DEVICE_DATA(&rt73usb_ops) }, | 2371 | { USB_DEVICE(0x2019, 0xab01), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2346 | { USB_DEVICE(0x2019, 0xab50), USB_DEVICE_DATA(&rt73usb_ops) }, | 2372 | { USB_DEVICE(0x2019, 0xab50), USB_DEVICE_DATA(&rt73usb_ops) }, |
| 2373 | /* Zcom */ | ||
| 2374 | { USB_DEVICE(0x0cde, 0x001c), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2375 | /* ZyXEL */ | ||
| 2376 | { USB_DEVICE(0x0586, 0x3415), USB_DEVICE_DATA(&rt73usb_ops) }, | ||
| 2347 | { 0, } | 2377 | { 0, } |
| 2348 | }; | 2378 | }; |
| 2349 | 2379 | ||
diff --git a/drivers/net/wireless/rtl818x/rtl8187_dev.c b/drivers/net/wireless/rtl818x/rtl8187_dev.c index 22bc07ef2f37..f4747a1134ba 100644 --- a/drivers/net/wireless/rtl818x/rtl8187_dev.c +++ b/drivers/net/wireless/rtl818x/rtl8187_dev.c | |||
| @@ -48,6 +48,10 @@ static struct usb_device_id rtl8187_table[] __devinitdata = { | |||
| 48 | {USB_DEVICE(0x0bda, 0x8189), .driver_info = DEVICE_RTL8187B}, | 48 | {USB_DEVICE(0x0bda, 0x8189), .driver_info = DEVICE_RTL8187B}, |
| 49 | {USB_DEVICE(0x0bda, 0x8197), .driver_info = DEVICE_RTL8187B}, | 49 | {USB_DEVICE(0x0bda, 0x8197), .driver_info = DEVICE_RTL8187B}, |
| 50 | {USB_DEVICE(0x0bda, 0x8198), .driver_info = DEVICE_RTL8187B}, | 50 | {USB_DEVICE(0x0bda, 0x8198), .driver_info = DEVICE_RTL8187B}, |
| 51 | /* Surecom */ | ||
| 52 | {USB_DEVICE(0x0769, 0x11F2), .driver_info = DEVICE_RTL8187}, | ||
| 53 | /* Logitech */ | ||
| 54 | {USB_DEVICE(0x0789, 0x010C), .driver_info = DEVICE_RTL8187}, | ||
| 51 | /* Netgear */ | 55 | /* Netgear */ |
| 52 | {USB_DEVICE(0x0846, 0x6100), .driver_info = DEVICE_RTL8187}, | 56 | {USB_DEVICE(0x0846, 0x6100), .driver_info = DEVICE_RTL8187}, |
| 53 | {USB_DEVICE(0x0846, 0x6a00), .driver_info = DEVICE_RTL8187}, | 57 | {USB_DEVICE(0x0846, 0x6a00), .driver_info = DEVICE_RTL8187}, |
| @@ -57,8 +61,16 @@ static struct usb_device_id rtl8187_table[] __devinitdata = { | |||
| 57 | /* Sitecom */ | 61 | /* Sitecom */ |
| 58 | {USB_DEVICE(0x0df6, 0x000d), .driver_info = DEVICE_RTL8187}, | 62 | {USB_DEVICE(0x0df6, 0x000d), .driver_info = DEVICE_RTL8187}, |
| 59 | {USB_DEVICE(0x0df6, 0x0028), .driver_info = DEVICE_RTL8187B}, | 63 | {USB_DEVICE(0x0df6, 0x0028), .driver_info = DEVICE_RTL8187B}, |
| 64 | /* Sphairon Access Systems GmbH */ | ||
| 65 | {USB_DEVICE(0x114B, 0x0150), .driver_info = DEVICE_RTL8187}, | ||
| 66 | /* Dick Smith Electronics */ | ||
| 67 | {USB_DEVICE(0x1371, 0x9401), .driver_info = DEVICE_RTL8187}, | ||
| 60 | /* Abocom */ | 68 | /* Abocom */ |
| 61 | {USB_DEVICE(0x13d1, 0xabe6), .driver_info = DEVICE_RTL8187}, | 69 | {USB_DEVICE(0x13d1, 0xabe6), .driver_info = DEVICE_RTL8187}, |
| 70 | /* Qcom */ | ||
| 71 | {USB_DEVICE(0x18E8, 0x6232), .driver_info = DEVICE_RTL8187}, | ||
| 72 | /* AirLive */ | ||
| 73 | {USB_DEVICE(0x1b75, 0x8187), .driver_info = DEVICE_RTL8187}, | ||
| 62 | {} | 74 | {} |
| 63 | }; | 75 | }; |
| 64 | 76 | ||
diff --git a/drivers/net/wireless/zd1211rw/zd_rf.c b/drivers/net/wireless/zd1211rw/zd_rf.c index 7207bfd2e6cd..c875ee05e22e 100644 --- a/drivers/net/wireless/zd1211rw/zd_rf.c +++ b/drivers/net/wireless/zd1211rw/zd_rf.c | |||
| @@ -86,6 +86,7 @@ int zd_rf_init_hw(struct zd_rf *rf, u8 type) | |||
| 86 | case AL7230B_RF: | 86 | case AL7230B_RF: |
| 87 | r = zd_rf_init_al7230b(rf); | 87 | r = zd_rf_init_al7230b(rf); |
| 88 | break; | 88 | break; |
| 89 | case MAXIM_NEW_RF: | ||
| 89 | case UW2453_RF: | 90 | case UW2453_RF: |
| 90 | r = zd_rf_init_uw2453(rf); | 91 | r = zd_rf_init_uw2453(rf); |
| 91 | break; | 92 | break; |
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c index 17527f765b39..f0e5e943f6e3 100644 --- a/drivers/net/wireless/zd1211rw/zd_usb.c +++ b/drivers/net/wireless/zd1211rw/zd_usb.c | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | static struct usb_device_id usb_ids[] = { | 37 | static struct usb_device_id usb_ids[] = { |
| 38 | /* ZD1211 */ | 38 | /* ZD1211 */ |
| 39 | { USB_DEVICE(0x0ace, 0x1211), .driver_info = DEVICE_ZD1211 }, | 39 | { USB_DEVICE(0x0ace, 0x1211), .driver_info = DEVICE_ZD1211 }, |
| 40 | { USB_DEVICE(0x0ace, 0xa211), .driver_info = DEVICE_ZD1211 }, | ||
| 40 | { USB_DEVICE(0x07b8, 0x6001), .driver_info = DEVICE_ZD1211 }, | 41 | { USB_DEVICE(0x07b8, 0x6001), .driver_info = DEVICE_ZD1211 }, |
| 41 | { USB_DEVICE(0x126f, 0xa006), .driver_info = DEVICE_ZD1211 }, | 42 | { USB_DEVICE(0x126f, 0xa006), .driver_info = DEVICE_ZD1211 }, |
| 42 | { USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 }, | 43 | { USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 }, |
diff --git a/drivers/parport/parport_atari.c b/drivers/parport/parport_atari.c index ad4cdd256137..0b28fccec03f 100644 --- a/drivers/parport/parport_atari.c +++ b/drivers/parport/parport_atari.c | |||
| @@ -84,7 +84,7 @@ parport_atari_frob_control(struct parport *p, unsigned char mask, | |||
| 84 | static unsigned char | 84 | static unsigned char |
| 85 | parport_atari_read_status(struct parport *p) | 85 | parport_atari_read_status(struct parport *p) |
| 86 | { | 86 | { |
| 87 | return ((mfp.par_dt_reg & 1 ? 0 : PARPORT_STATUS_BUSY) | | 87 | return ((st_mfp.par_dt_reg & 1 ? 0 : PARPORT_STATUS_BUSY) | |
| 88 | PARPORT_STATUS_SELECT | PARPORT_STATUS_ERROR); | 88 | PARPORT_STATUS_SELECT | PARPORT_STATUS_ERROR); |
| 89 | } | 89 | } |
| 90 | 90 | ||
| @@ -193,9 +193,9 @@ static int __init parport_atari_init(void) | |||
| 193 | sound_ym.wd_data = sound_ym.rd_data_reg_sel | (1 << 5); | 193 | sound_ym.wd_data = sound_ym.rd_data_reg_sel | (1 << 5); |
| 194 | local_irq_restore(flags); | 194 | local_irq_restore(flags); |
| 195 | /* MFP port I0 as input. */ | 195 | /* MFP port I0 as input. */ |
| 196 | mfp.data_dir &= ~1; | 196 | st_mfp.data_dir &= ~1; |
| 197 | /* MFP port I0 interrupt on high->low edge. */ | 197 | /* MFP port I0 interrupt on high->low edge. */ |
| 198 | mfp.active_edge &= ~1; | 198 | st_mfp.active_edge &= ~1; |
| 199 | p = parport_register_port((unsigned long)&sound_ym.wd_data, | 199 | p = parport_register_port((unsigned long)&sound_ym.wd_data, |
| 200 | IRQ_MFP_BUSY, PARPORT_DMA_NONE, | 200 | IRQ_MFP_BUSY, PARPORT_DMA_NONE, |
| 201 | &parport_atari_ops); | 201 | &parport_atari_ops); |
diff --git a/drivers/parport/parport_serial.c b/drivers/parport/parport_serial.c index 101ed49a2d15..032db815b0f9 100644 --- a/drivers/parport/parport_serial.c +++ b/drivers/parport/parport_serial.c | |||
| @@ -64,6 +64,11 @@ struct parport_pc_pci { | |||
| 64 | 64 | ||
| 65 | static int __devinit netmos_parallel_init(struct pci_dev *dev, struct parport_pc_pci *card, int autoirq, int autodma) | 65 | static int __devinit netmos_parallel_init(struct pci_dev *dev, struct parport_pc_pci *card, int autoirq, int autodma) |
| 66 | { | 66 | { |
| 67 | /* the rule described below doesn't hold for this device */ | ||
| 68 | if (dev->device == PCI_DEVICE_ID_NETMOS_9835 && | ||
| 69 | dev->subsystem_vendor == PCI_VENDOR_ID_IBM && | ||
| 70 | dev->subsystem_device == 0x0299) | ||
| 71 | return -ENODEV; | ||
| 67 | /* | 72 | /* |
| 68 | * Netmos uses the subdevice ID to indicate the number of parallel | 73 | * Netmos uses the subdevice ID to indicate the number of parallel |
| 69 | * and serial ports. The form is 0x00PS, where <P> is the number of | 74 | * and serial ports. The form is 0x00PS, where <P> is the number of |
diff --git a/drivers/pci/dmar.c b/drivers/pci/dmar.c index f5a662a50acb..26c536b51c5a 100644 --- a/drivers/pci/dmar.c +++ b/drivers/pci/dmar.c | |||
| @@ -330,6 +330,14 @@ parse_dmar_table(void) | |||
| 330 | entry_header = (struct acpi_dmar_header *)(dmar + 1); | 330 | entry_header = (struct acpi_dmar_header *)(dmar + 1); |
| 331 | while (((unsigned long)entry_header) < | 331 | while (((unsigned long)entry_header) < |
| 332 | (((unsigned long)dmar) + dmar_tbl->length)) { | 332 | (((unsigned long)dmar) + dmar_tbl->length)) { |
| 333 | /* Avoid looping forever on bad ACPI tables */ | ||
| 334 | if (entry_header->length == 0) { | ||
| 335 | printk(KERN_WARNING PREFIX | ||
| 336 | "Invalid 0-length structure\n"); | ||
| 337 | ret = -EINVAL; | ||
| 338 | break; | ||
| 339 | } | ||
| 340 | |||
| 333 | dmar_table_print_dmar_entry(entry_header); | 341 | dmar_table_print_dmar_entry(entry_header); |
| 334 | 342 | ||
| 335 | switch (entry_header->type) { | 343 | switch (entry_header->type) { |
| @@ -491,7 +499,7 @@ int alloc_iommu(struct dmar_drhd_unit *drhd) | |||
| 491 | int map_size; | 499 | int map_size; |
| 492 | u32 ver; | 500 | u32 ver; |
| 493 | static int iommu_allocated = 0; | 501 | static int iommu_allocated = 0; |
| 494 | int agaw; | 502 | int agaw = 0; |
| 495 | 503 | ||
| 496 | iommu = kzalloc(sizeof(*iommu), GFP_KERNEL); | 504 | iommu = kzalloc(sizeof(*iommu), GFP_KERNEL); |
| 497 | if (!iommu) | 505 | if (!iommu) |
| @@ -507,6 +515,7 @@ int alloc_iommu(struct dmar_drhd_unit *drhd) | |||
| 507 | iommu->cap = dmar_readq(iommu->reg + DMAR_CAP_REG); | 515 | iommu->cap = dmar_readq(iommu->reg + DMAR_CAP_REG); |
| 508 | iommu->ecap = dmar_readq(iommu->reg + DMAR_ECAP_REG); | 516 | iommu->ecap = dmar_readq(iommu->reg + DMAR_ECAP_REG); |
| 509 | 517 | ||
| 518 | #ifdef CONFIG_DMAR | ||
| 510 | agaw = iommu_calculate_agaw(iommu); | 519 | agaw = iommu_calculate_agaw(iommu); |
| 511 | if (agaw < 0) { | 520 | if (agaw < 0) { |
| 512 | printk(KERN_ERR | 521 | printk(KERN_ERR |
| @@ -514,6 +523,7 @@ int alloc_iommu(struct dmar_drhd_unit *drhd) | |||
| 514 | iommu->seq_id); | 523 | iommu->seq_id); |
| 515 | goto error; | 524 | goto error; |
| 516 | } | 525 | } |
| 526 | #endif | ||
| 517 | iommu->agaw = agaw; | 527 | iommu->agaw = agaw; |
| 518 | 528 | ||
| 519 | /* the registers might be more than one page */ | 529 | /* the registers might be more than one page */ |
| @@ -571,19 +581,49 @@ static inline void reclaim_free_desc(struct q_inval *qi) | |||
| 571 | } | 581 | } |
| 572 | } | 582 | } |
| 573 | 583 | ||
| 584 | static int qi_check_fault(struct intel_iommu *iommu, int index) | ||
| 585 | { | ||
| 586 | u32 fault; | ||
| 587 | int head; | ||
| 588 | struct q_inval *qi = iommu->qi; | ||
| 589 | int wait_index = (index + 1) % QI_LENGTH; | ||
| 590 | |||
| 591 | fault = readl(iommu->reg + DMAR_FSTS_REG); | ||
| 592 | |||
| 593 | /* | ||
| 594 | * If IQE happens, the head points to the descriptor associated | ||
| 595 | * with the error. No new descriptors are fetched until the IQE | ||
| 596 | * is cleared. | ||
| 597 | */ | ||
| 598 | if (fault & DMA_FSTS_IQE) { | ||
| 599 | head = readl(iommu->reg + DMAR_IQH_REG); | ||
| 600 | if ((head >> 4) == index) { | ||
| 601 | memcpy(&qi->desc[index], &qi->desc[wait_index], | ||
| 602 | sizeof(struct qi_desc)); | ||
| 603 | __iommu_flush_cache(iommu, &qi->desc[index], | ||
| 604 | sizeof(struct qi_desc)); | ||
| 605 | writel(DMA_FSTS_IQE, iommu->reg + DMAR_FSTS_REG); | ||
| 606 | return -EINVAL; | ||
| 607 | } | ||
| 608 | } | ||
| 609 | |||
| 610 | return 0; | ||
| 611 | } | ||
| 612 | |||
| 574 | /* | 613 | /* |
| 575 | * Submit the queued invalidation descriptor to the remapping | 614 | * Submit the queued invalidation descriptor to the remapping |
| 576 | * hardware unit and wait for its completion. | 615 | * hardware unit and wait for its completion. |
| 577 | */ | 616 | */ |
| 578 | void qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu) | 617 | int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu) |
| 579 | { | 618 | { |
| 619 | int rc = 0; | ||
| 580 | struct q_inval *qi = iommu->qi; | 620 | struct q_inval *qi = iommu->qi; |
| 581 | struct qi_desc *hw, wait_desc; | 621 | struct qi_desc *hw, wait_desc; |
| 582 | int wait_index, index; | 622 | int wait_index, index; |
| 583 | unsigned long flags; | 623 | unsigned long flags; |
| 584 | 624 | ||
| 585 | if (!qi) | 625 | if (!qi) |
| 586 | return; | 626 | return 0; |
| 587 | 627 | ||
| 588 | hw = qi->desc; | 628 | hw = qi->desc; |
| 589 | 629 | ||
| @@ -601,7 +641,8 @@ void qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu) | |||
| 601 | 641 | ||
| 602 | hw[index] = *desc; | 642 | hw[index] = *desc; |
| 603 | 643 | ||
| 604 | wait_desc.low = QI_IWD_STATUS_DATA(2) | QI_IWD_STATUS_WRITE | QI_IWD_TYPE; | 644 | wait_desc.low = QI_IWD_STATUS_DATA(QI_DONE) | |
| 645 | QI_IWD_STATUS_WRITE | QI_IWD_TYPE; | ||
| 605 | wait_desc.high = virt_to_phys(&qi->desc_status[wait_index]); | 646 | wait_desc.high = virt_to_phys(&qi->desc_status[wait_index]); |
| 606 | 647 | ||
| 607 | hw[wait_index] = wait_desc; | 648 | hw[wait_index] = wait_desc; |
| @@ -612,13 +653,11 @@ void qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu) | |||
| 612 | qi->free_head = (qi->free_head + 2) % QI_LENGTH; | 653 | qi->free_head = (qi->free_head + 2) % QI_LENGTH; |
| 613 | qi->free_cnt -= 2; | 654 | qi->free_cnt -= 2; |
| 614 | 655 | ||
| 615 | spin_lock(&iommu->register_lock); | ||
| 616 | /* | 656 | /* |
| 617 | * update the HW tail register indicating the presence of | 657 | * update the HW tail register indicating the presence of |
| 618 | * new descriptors. | 658 | * new descriptors. |
| 619 | */ | 659 | */ |
| 620 | writel(qi->free_head << 4, iommu->reg + DMAR_IQT_REG); | 660 | writel(qi->free_head << 4, iommu->reg + DMAR_IQT_REG); |
| 621 | spin_unlock(&iommu->register_lock); | ||
| 622 | 661 | ||
| 623 | while (qi->desc_status[wait_index] != QI_DONE) { | 662 | while (qi->desc_status[wait_index] != QI_DONE) { |
| 624 | /* | 663 | /* |
| @@ -628,15 +667,21 @@ void qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu) | |||
| 628 | * a deadlock where the interrupt context can wait indefinitely | 667 | * a deadlock where the interrupt context can wait indefinitely |
| 629 | * for free slots in the queue. | 668 | * for free slots in the queue. |
| 630 | */ | 669 | */ |
| 670 | rc = qi_check_fault(iommu, index); | ||
| 671 | if (rc) | ||
| 672 | goto out; | ||
| 673 | |||
| 631 | spin_unlock(&qi->q_lock); | 674 | spin_unlock(&qi->q_lock); |
| 632 | cpu_relax(); | 675 | cpu_relax(); |
| 633 | spin_lock(&qi->q_lock); | 676 | spin_lock(&qi->q_lock); |
| 634 | } | 677 | } |
| 635 | 678 | out: | |
| 636 | qi->desc_status[index] = QI_DONE; | 679 | qi->desc_status[index] = qi->desc_status[wait_index] = QI_DONE; |
| 637 | 680 | ||
| 638 | reclaim_free_desc(qi); | 681 | reclaim_free_desc(qi); |
| 639 | spin_unlock_irqrestore(&qi->q_lock, flags); | 682 | spin_unlock_irqrestore(&qi->q_lock, flags); |
| 683 | |||
| 684 | return rc; | ||
| 640 | } | 685 | } |
| 641 | 686 | ||
| 642 | /* | 687 | /* |
| @@ -649,13 +694,13 @@ void qi_global_iec(struct intel_iommu *iommu) | |||
| 649 | desc.low = QI_IEC_TYPE; | 694 | desc.low = QI_IEC_TYPE; |
| 650 | desc.high = 0; | 695 | desc.high = 0; |
| 651 | 696 | ||
| 697 | /* should never fail */ | ||
| 652 | qi_submit_sync(&desc, iommu); | 698 | qi_submit_sync(&desc, iommu); |
| 653 | } | 699 | } |
| 654 | 700 | ||
| 655 | int qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid, u8 fm, | 701 | int qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid, u8 fm, |
| 656 | u64 type, int non_present_entry_flush) | 702 | u64 type, int non_present_entry_flush) |
| 657 | { | 703 | { |
| 658 | |||
| 659 | struct qi_desc desc; | 704 | struct qi_desc desc; |
| 660 | 705 | ||
| 661 | if (non_present_entry_flush) { | 706 | if (non_present_entry_flush) { |
| @@ -669,10 +714,7 @@ int qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid, u8 fm, | |||
| 669 | | QI_CC_GRAN(type) | QI_CC_TYPE; | 714 | | QI_CC_GRAN(type) | QI_CC_TYPE; |
| 670 | desc.high = 0; | 715 | desc.high = 0; |
| 671 | 716 | ||
| 672 | qi_submit_sync(&desc, iommu); | 717 | return qi_submit_sync(&desc, iommu); |
| 673 | |||
| 674 | return 0; | ||
| 675 | |||
| 676 | } | 718 | } |
| 677 | 719 | ||
| 678 | int qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr, | 720 | int qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr, |
| @@ -702,10 +744,7 @@ int qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr, | |||
| 702 | desc.high = QI_IOTLB_ADDR(addr) | QI_IOTLB_IH(ih) | 744 | desc.high = QI_IOTLB_ADDR(addr) | QI_IOTLB_IH(ih) |
| 703 | | QI_IOTLB_AM(size_order); | 745 | | QI_IOTLB_AM(size_order); |
| 704 | 746 | ||
| 705 | qi_submit_sync(&desc, iommu); | 747 | return qi_submit_sync(&desc, iommu); |
| 706 | |||
| 707 | return 0; | ||
| 708 | |||
| 709 | } | 748 | } |
| 710 | 749 | ||
| 711 | /* | 750 | /* |
diff --git a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h index db85284ffb62..39ae37589fda 100644 --- a/drivers/pci/hotplug/pciehp.h +++ b/drivers/pci/hotplug/pciehp.h | |||
| @@ -111,6 +111,7 @@ struct controller { | |||
| 111 | int cmd_busy; | 111 | int cmd_busy; |
| 112 | unsigned int no_cmd_complete:1; | 112 | unsigned int no_cmd_complete:1; |
| 113 | unsigned int link_active_reporting:1; | 113 | unsigned int link_active_reporting:1; |
| 114 | unsigned int notification_enabled:1; | ||
| 114 | }; | 115 | }; |
| 115 | 116 | ||
| 116 | #define INT_BUTTON_IGNORE 0 | 117 | #define INT_BUTTON_IGNORE 0 |
| @@ -170,6 +171,7 @@ extern int pciehp_configure_device(struct slot *p_slot); | |||
| 170 | extern int pciehp_unconfigure_device(struct slot *p_slot); | 171 | extern int pciehp_unconfigure_device(struct slot *p_slot); |
| 171 | extern void pciehp_queue_pushbutton_work(struct work_struct *work); | 172 | extern void pciehp_queue_pushbutton_work(struct work_struct *work); |
| 172 | struct controller *pcie_init(struct pcie_device *dev); | 173 | struct controller *pcie_init(struct pcie_device *dev); |
| 174 | int pcie_init_notification(struct controller *ctrl); | ||
| 173 | int pciehp_enable_slot(struct slot *p_slot); | 175 | int pciehp_enable_slot(struct slot *p_slot); |
| 174 | int pciehp_disable_slot(struct slot *p_slot); | 176 | int pciehp_disable_slot(struct slot *p_slot); |
| 175 | int pcie_enable_notification(struct controller *ctrl); | 177 | int pcie_enable_notification(struct controller *ctrl); |
diff --git a/drivers/pci/hotplug/pciehp_core.c b/drivers/pci/hotplug/pciehp_core.c index c2485542f543..681e3912b821 100644 --- a/drivers/pci/hotplug/pciehp_core.c +++ b/drivers/pci/hotplug/pciehp_core.c | |||
| @@ -434,6 +434,13 @@ static int pciehp_probe(struct pcie_device *dev, const struct pcie_port_service_ | |||
| 434 | goto err_out_release_ctlr; | 434 | goto err_out_release_ctlr; |
| 435 | } | 435 | } |
| 436 | 436 | ||
| 437 | /* Enable events after we have setup the data structures */ | ||
| 438 | rc = pcie_init_notification(ctrl); | ||
| 439 | if (rc) { | ||
| 440 | ctrl_err(ctrl, "Notification initialization failed\n"); | ||
| 441 | goto err_out_release_ctlr; | ||
| 442 | } | ||
| 443 | |||
| 437 | /* Check if slot is occupied */ | 444 | /* Check if slot is occupied */ |
| 438 | t_slot = pciehp_find_slot(ctrl, ctrl->slot_device_offset); | 445 | t_slot = pciehp_find_slot(ctrl, ctrl->slot_device_offset); |
| 439 | t_slot->hpc_ops->get_adapter_status(t_slot, &value); | 446 | t_slot->hpc_ops->get_adapter_status(t_slot, &value); |
diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c index 71a8012886b0..7a16c6897bb9 100644 --- a/drivers/pci/hotplug/pciehp_hpc.c +++ b/drivers/pci/hotplug/pciehp_hpc.c | |||
| @@ -934,7 +934,7 @@ static void pcie_disable_notification(struct controller *ctrl) | |||
| 934 | ctrl_warn(ctrl, "Cannot disable software notification\n"); | 934 | ctrl_warn(ctrl, "Cannot disable software notification\n"); |
| 935 | } | 935 | } |
| 936 | 936 | ||
| 937 | static int pcie_init_notification(struct controller *ctrl) | 937 | int pcie_init_notification(struct controller *ctrl) |
| 938 | { | 938 | { |
| 939 | if (pciehp_request_irq(ctrl)) | 939 | if (pciehp_request_irq(ctrl)) |
| 940 | return -1; | 940 | return -1; |
| @@ -942,13 +942,17 @@ static int pcie_init_notification(struct controller *ctrl) | |||
| 942 | pciehp_free_irq(ctrl); | 942 | pciehp_free_irq(ctrl); |
| 943 | return -1; | 943 | return -1; |
| 944 | } | 944 | } |
| 945 | ctrl->notification_enabled = 1; | ||
| 945 | return 0; | 946 | return 0; |
| 946 | } | 947 | } |
| 947 | 948 | ||
| 948 | static void pcie_shutdown_notification(struct controller *ctrl) | 949 | static void pcie_shutdown_notification(struct controller *ctrl) |
| 949 | { | 950 | { |
| 950 | pcie_disable_notification(ctrl); | 951 | if (ctrl->notification_enabled) { |
| 951 | pciehp_free_irq(ctrl); | 952 | pcie_disable_notification(ctrl); |
| 953 | pciehp_free_irq(ctrl); | ||
| 954 | ctrl->notification_enabled = 0; | ||
| 955 | } | ||
| 952 | } | 956 | } |
| 953 | 957 | ||
| 954 | static int pcie_init_slot(struct controller *ctrl) | 958 | static int pcie_init_slot(struct controller *ctrl) |
| @@ -1110,13 +1114,8 @@ struct controller *pcie_init(struct pcie_device *dev) | |||
| 1110 | if (pcie_init_slot(ctrl)) | 1114 | if (pcie_init_slot(ctrl)) |
| 1111 | goto abort_ctrl; | 1115 | goto abort_ctrl; |
| 1112 | 1116 | ||
| 1113 | if (pcie_init_notification(ctrl)) | ||
| 1114 | goto abort_slot; | ||
| 1115 | |||
| 1116 | return ctrl; | 1117 | return ctrl; |
| 1117 | 1118 | ||
| 1118 | abort_slot: | ||
| 1119 | pcie_cleanup_slot(ctrl); | ||
| 1120 | abort_ctrl: | 1119 | abort_ctrl: |
| 1121 | kfree(ctrl); | 1120 | kfree(ctrl); |
| 1122 | abort: | 1121 | abort: |
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c index 3dfecb20d5e7..f3f686581a90 100644 --- a/drivers/pci/intel-iommu.c +++ b/drivers/pci/intel-iommu.c | |||
| @@ -61,6 +61,8 @@ | |||
| 61 | /* global iommu list, set NULL for ignored DMAR units */ | 61 | /* global iommu list, set NULL for ignored DMAR units */ |
| 62 | static struct intel_iommu **g_iommus; | 62 | static struct intel_iommu **g_iommus; |
| 63 | 63 | ||
| 64 | static int rwbf_quirk; | ||
| 65 | |||
| 64 | /* | 66 | /* |
| 65 | * 0: Present | 67 | * 0: Present |
| 66 | * 1-11: Reserved | 68 | * 1-11: Reserved |
| @@ -268,7 +270,12 @@ static long list_size; | |||
| 268 | 270 | ||
| 269 | static void domain_remove_dev_info(struct dmar_domain *domain); | 271 | static void domain_remove_dev_info(struct dmar_domain *domain); |
| 270 | 272 | ||
| 271 | int dmar_disabled; | 273 | #ifdef CONFIG_DMAR_DEFAULT_ON |
| 274 | int dmar_disabled = 0; | ||
| 275 | #else | ||
| 276 | int dmar_disabled = 1; | ||
| 277 | #endif /*CONFIG_DMAR_DEFAULT_ON*/ | ||
| 278 | |||
| 272 | static int __initdata dmar_map_gfx = 1; | 279 | static int __initdata dmar_map_gfx = 1; |
| 273 | static int dmar_forcedac; | 280 | static int dmar_forcedac; |
| 274 | static int intel_iommu_strict; | 281 | static int intel_iommu_strict; |
| @@ -284,9 +291,12 @@ static int __init intel_iommu_setup(char *str) | |||
| 284 | if (!str) | 291 | if (!str) |
| 285 | return -EINVAL; | 292 | return -EINVAL; |
| 286 | while (*str) { | 293 | while (*str) { |
| 287 | if (!strncmp(str, "off", 3)) { | 294 | if (!strncmp(str, "on", 2)) { |
| 295 | dmar_disabled = 0; | ||
| 296 | printk(KERN_INFO "Intel-IOMMU: enabled\n"); | ||
| 297 | } else if (!strncmp(str, "off", 3)) { | ||
| 288 | dmar_disabled = 1; | 298 | dmar_disabled = 1; |
| 289 | printk(KERN_INFO"Intel-IOMMU: disabled\n"); | 299 | printk(KERN_INFO "Intel-IOMMU: disabled\n"); |
| 290 | } else if (!strncmp(str, "igfx_off", 8)) { | 300 | } else if (!strncmp(str, "igfx_off", 8)) { |
| 291 | dmar_map_gfx = 0; | 301 | dmar_map_gfx = 0; |
| 292 | printk(KERN_INFO | 302 | printk(KERN_INFO |
| @@ -777,7 +787,7 @@ static void iommu_flush_write_buffer(struct intel_iommu *iommu) | |||
| 777 | u32 val; | 787 | u32 val; |
| 778 | unsigned long flag; | 788 | unsigned long flag; |
| 779 | 789 | ||
| 780 | if (!cap_rwbf(iommu->cap)) | 790 | if (!rwbf_quirk && !cap_rwbf(iommu->cap)) |
| 781 | return; | 791 | return; |
| 782 | val = iommu->gcmd | DMA_GCMD_WBF; | 792 | val = iommu->gcmd | DMA_GCMD_WBF; |
| 783 | 793 | ||
| @@ -3129,3 +3139,15 @@ static struct iommu_ops intel_iommu_ops = { | |||
| 3129 | .unmap = intel_iommu_unmap_range, | 3139 | .unmap = intel_iommu_unmap_range, |
| 3130 | .iova_to_phys = intel_iommu_iova_to_phys, | 3140 | .iova_to_phys = intel_iommu_iova_to_phys, |
| 3131 | }; | 3141 | }; |
| 3142 | |||
| 3143 | static void __devinit quirk_iommu_rwbf(struct pci_dev *dev) | ||
| 3144 | { | ||
| 3145 | /* | ||
| 3146 | * Mobile 4 Series Chipset neglects to set RWBF capability, | ||
| 3147 | * but needs it: | ||
| 3148 | */ | ||
| 3149 | printk(KERN_INFO "DMAR: Forcing write-buffer flush capability\n"); | ||
| 3150 | rwbf_quirk = 1; | ||
| 3151 | } | ||
| 3152 | |||
| 3153 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_rwbf); | ||
diff --git a/drivers/pci/intr_remapping.c b/drivers/pci/intr_remapping.c index f78371b22529..45effc5726c0 100644 --- a/drivers/pci/intr_remapping.c +++ b/drivers/pci/intr_remapping.c | |||
| @@ -207,7 +207,7 @@ int alloc_irte(struct intel_iommu *iommu, int irq, u16 count) | |||
| 207 | return index; | 207 | return index; |
| 208 | } | 208 | } |
| 209 | 209 | ||
| 210 | static void qi_flush_iec(struct intel_iommu *iommu, int index, int mask) | 210 | static int qi_flush_iec(struct intel_iommu *iommu, int index, int mask) |
| 211 | { | 211 | { |
| 212 | struct qi_desc desc; | 212 | struct qi_desc desc; |
| 213 | 213 | ||
| @@ -215,7 +215,7 @@ static void qi_flush_iec(struct intel_iommu *iommu, int index, int mask) | |||
| 215 | | QI_IEC_SELECTIVE; | 215 | | QI_IEC_SELECTIVE; |
| 216 | desc.high = 0; | 216 | desc.high = 0; |
| 217 | 217 | ||
| 218 | qi_submit_sync(&desc, iommu); | 218 | return qi_submit_sync(&desc, iommu); |
| 219 | } | 219 | } |
| 220 | 220 | ||
| 221 | int map_irq_to_irte_handle(int irq, u16 *sub_handle) | 221 | int map_irq_to_irte_handle(int irq, u16 *sub_handle) |
| @@ -283,6 +283,7 @@ int clear_irte_irq(int irq, struct intel_iommu *iommu, u16 index) | |||
| 283 | 283 | ||
| 284 | int modify_irte(int irq, struct irte *irte_modified) | 284 | int modify_irte(int irq, struct irte *irte_modified) |
| 285 | { | 285 | { |
| 286 | int rc; | ||
| 286 | int index; | 287 | int index; |
| 287 | struct irte *irte; | 288 | struct irte *irte; |
| 288 | struct intel_iommu *iommu; | 289 | struct intel_iommu *iommu; |
| @@ -303,14 +304,15 @@ int modify_irte(int irq, struct irte *irte_modified) | |||
| 303 | set_64bit((unsigned long *)irte, irte_modified->low | (1 << 1)); | 304 | set_64bit((unsigned long *)irte, irte_modified->low | (1 << 1)); |
| 304 | __iommu_flush_cache(iommu, irte, sizeof(*irte)); | 305 | __iommu_flush_cache(iommu, irte, sizeof(*irte)); |
| 305 | 306 | ||
| 306 | qi_flush_iec(iommu, index, 0); | 307 | rc = qi_flush_iec(iommu, index, 0); |
| 307 | |||
| 308 | spin_unlock(&irq_2_ir_lock); | 308 | spin_unlock(&irq_2_ir_lock); |
| 309 | return 0; | 309 | |
| 310 | return rc; | ||
| 310 | } | 311 | } |
| 311 | 312 | ||
| 312 | int flush_irte(int irq) | 313 | int flush_irte(int irq) |
| 313 | { | 314 | { |
| 315 | int rc; | ||
| 314 | int index; | 316 | int index; |
| 315 | struct intel_iommu *iommu; | 317 | struct intel_iommu *iommu; |
| 316 | struct irq_2_iommu *irq_iommu; | 318 | struct irq_2_iommu *irq_iommu; |
| @@ -326,10 +328,10 @@ int flush_irte(int irq) | |||
| 326 | 328 | ||
| 327 | index = irq_iommu->irte_index + irq_iommu->sub_handle; | 329 | index = irq_iommu->irte_index + irq_iommu->sub_handle; |
| 328 | 330 | ||
| 329 | qi_flush_iec(iommu, index, irq_iommu->irte_mask); | 331 | rc = qi_flush_iec(iommu, index, irq_iommu->irte_mask); |
| 330 | spin_unlock(&irq_2_ir_lock); | 332 | spin_unlock(&irq_2_ir_lock); |
| 331 | 333 | ||
| 332 | return 0; | 334 | return rc; |
| 333 | } | 335 | } |
| 334 | 336 | ||
| 335 | struct intel_iommu *map_ioapic_to_ir(int apic) | 337 | struct intel_iommu *map_ioapic_to_ir(int apic) |
| @@ -355,6 +357,7 @@ struct intel_iommu *map_dev_to_ir(struct pci_dev *dev) | |||
| 355 | 357 | ||
| 356 | int free_irte(int irq) | 358 | int free_irte(int irq) |
| 357 | { | 359 | { |
| 360 | int rc = 0; | ||
| 358 | int index, i; | 361 | int index, i; |
| 359 | struct irte *irte; | 362 | struct irte *irte; |
| 360 | struct intel_iommu *iommu; | 363 | struct intel_iommu *iommu; |
| @@ -375,7 +378,7 @@ int free_irte(int irq) | |||
| 375 | if (!irq_iommu->sub_handle) { | 378 | if (!irq_iommu->sub_handle) { |
| 376 | for (i = 0; i < (1 << irq_iommu->irte_mask); i++) | 379 | for (i = 0; i < (1 << irq_iommu->irte_mask); i++) |
| 377 | set_64bit((unsigned long *)irte, 0); | 380 | set_64bit((unsigned long *)irte, 0); |
| 378 | qi_flush_iec(iommu, index, irq_iommu->irte_mask); | 381 | rc = qi_flush_iec(iommu, index, irq_iommu->irte_mask); |
| 379 | } | 382 | } |
| 380 | 383 | ||
| 381 | irq_iommu->iommu = NULL; | 384 | irq_iommu->iommu = NULL; |
| @@ -385,7 +388,7 @@ int free_irte(int irq) | |||
| 385 | 388 | ||
| 386 | spin_unlock(&irq_2_ir_lock); | 389 | spin_unlock(&irq_2_ir_lock); |
| 387 | 390 | ||
| 388 | return 0; | 391 | return rc; |
| 389 | } | 392 | } |
| 390 | 393 | ||
| 391 | static void iommu_set_intr_remapping(struct intel_iommu *iommu, int mode) | 394 | static void iommu_set_intr_remapping(struct intel_iommu *iommu, int mode) |
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index 44f15ff70c1d..baba2eb5367d 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c | |||
| @@ -103,14 +103,12 @@ static void msix_set_enable(struct pci_dev *dev, int enable) | |||
| 103 | } | 103 | } |
| 104 | } | 104 | } |
| 105 | 105 | ||
| 106 | /* | ||
| 107 | * Essentially, this is ((1 << (1 << x)) - 1), but without the | ||
| 108 | * undefinedness of a << 32. | ||
| 109 | */ | ||
| 110 | static inline __attribute_const__ u32 msi_mask(unsigned x) | 106 | static inline __attribute_const__ u32 msi_mask(unsigned x) |
| 111 | { | 107 | { |
| 112 | static const u32 mask[] = { 1, 2, 4, 0xf, 0xff, 0xffff, 0xffffffff }; | 108 | /* Don't shift by >= width of type */ |
| 113 | return mask[x]; | 109 | if (x >= 5) |
| 110 | return 0xffffffff; | ||
| 111 | return (1 << (1 << x)) - 1; | ||
| 114 | } | 112 | } |
| 115 | 113 | ||
| 116 | static void msix_flush_writes(struct irq_desc *desc) | 114 | static void msix_flush_writes(struct irq_desc *desc) |
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index ab1d615425a8..93eac1423585 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c | |||
| @@ -355,6 +355,8 @@ static int pci_legacy_suspend(struct device *dev, pm_message_t state) | |||
| 355 | int i = 0; | 355 | int i = 0; |
| 356 | 356 | ||
| 357 | if (drv && drv->suspend) { | 357 | if (drv && drv->suspend) { |
| 358 | pci_power_t prev = pci_dev->current_state; | ||
| 359 | |||
| 358 | pci_dev->state_saved = false; | 360 | pci_dev->state_saved = false; |
| 359 | 361 | ||
| 360 | i = drv->suspend(pci_dev, state); | 362 | i = drv->suspend(pci_dev, state); |
| @@ -365,12 +367,16 @@ static int pci_legacy_suspend(struct device *dev, pm_message_t state) | |||
| 365 | if (pci_dev->state_saved) | 367 | if (pci_dev->state_saved) |
| 366 | goto Fixup; | 368 | goto Fixup; |
| 367 | 369 | ||
| 368 | if (WARN_ON_ONCE(pci_dev->current_state != PCI_D0)) | 370 | if (pci_dev->current_state != PCI_D0 |
| 371 | && pci_dev->current_state != PCI_UNKNOWN) { | ||
| 372 | WARN_ONCE(pci_dev->current_state != prev, | ||
| 373 | "PCI PM: Device state not saved by %pF\n", | ||
| 374 | drv->suspend); | ||
| 369 | goto Fixup; | 375 | goto Fixup; |
| 376 | } | ||
| 370 | } | 377 | } |
| 371 | 378 | ||
| 372 | pci_save_state(pci_dev); | 379 | pci_save_state(pci_dev); |
| 373 | pci_dev->state_saved = true; | ||
| 374 | /* | 380 | /* |
| 375 | * This is for compatibility with existing code with legacy PM support. | 381 | * This is for compatibility with existing code with legacy PM support. |
| 376 | */ | 382 | */ |
| @@ -424,35 +430,20 @@ static void pci_pm_default_resume_noirq(struct pci_dev *pci_dev) | |||
| 424 | pci_fixup_device(pci_fixup_resume_early, pci_dev); | 430 | pci_fixup_device(pci_fixup_resume_early, pci_dev); |
| 425 | } | 431 | } |
| 426 | 432 | ||
| 427 | static int pci_pm_default_resume(struct pci_dev *pci_dev) | 433 | static void pci_pm_default_resume(struct pci_dev *pci_dev) |
| 428 | { | 434 | { |
| 429 | pci_fixup_device(pci_fixup_resume, pci_dev); | 435 | pci_fixup_device(pci_fixup_resume, pci_dev); |
| 430 | 436 | ||
| 431 | if (!pci_is_bridge(pci_dev)) | 437 | if (!pci_is_bridge(pci_dev)) |
| 432 | pci_enable_wake(pci_dev, PCI_D0, false); | 438 | pci_enable_wake(pci_dev, PCI_D0, false); |
| 433 | |||
| 434 | return pci_pm_reenable_device(pci_dev); | ||
| 435 | } | ||
| 436 | |||
| 437 | static void pci_pm_default_suspend_generic(struct pci_dev *pci_dev) | ||
| 438 | { | ||
| 439 | /* If device is enabled at this point, disable it */ | ||
| 440 | pci_disable_enabled_device(pci_dev); | ||
| 441 | /* | ||
| 442 | * Save state with interrupts enabled, because in principle the bus the | ||
| 443 | * device is on may be put into a low power state after this code runs. | ||
| 444 | */ | ||
| 445 | pci_save_state(pci_dev); | ||
| 446 | } | 439 | } |
| 447 | 440 | ||
| 448 | static void pci_pm_default_suspend(struct pci_dev *pci_dev) | 441 | static void pci_pm_default_suspend(struct pci_dev *pci_dev) |
| 449 | { | 442 | { |
| 450 | pci_pm_default_suspend_generic(pci_dev); | 443 | /* Disable non-bridge devices without PM support */ |
| 451 | |||
| 452 | if (!pci_is_bridge(pci_dev)) | 444 | if (!pci_is_bridge(pci_dev)) |
| 453 | pci_prepare_to_sleep(pci_dev); | 445 | pci_disable_enabled_device(pci_dev); |
| 454 | 446 | pci_save_state(pci_dev); | |
| 455 | pci_fixup_device(pci_fixup_suspend, pci_dev); | ||
| 456 | } | 447 | } |
| 457 | 448 | ||
| 458 | static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev) | 449 | static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev) |
| @@ -497,21 +488,49 @@ static void pci_pm_complete(struct device *dev) | |||
| 497 | static int pci_pm_suspend(struct device *dev) | 488 | static int pci_pm_suspend(struct device *dev) |
| 498 | { | 489 | { |
| 499 | struct pci_dev *pci_dev = to_pci_dev(dev); | 490 | struct pci_dev *pci_dev = to_pci_dev(dev); |
| 500 | struct device_driver *drv = dev->driver; | 491 | struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; |
| 501 | int error = 0; | ||
| 502 | 492 | ||
| 503 | if (pci_has_legacy_pm_support(pci_dev)) | 493 | if (pci_has_legacy_pm_support(pci_dev)) |
| 504 | return pci_legacy_suspend(dev, PMSG_SUSPEND); | 494 | return pci_legacy_suspend(dev, PMSG_SUSPEND); |
| 505 | 495 | ||
| 506 | if (drv && drv->pm && drv->pm->suspend) { | 496 | if (!pm) { |
| 507 | error = drv->pm->suspend(dev); | 497 | pci_pm_default_suspend(pci_dev); |
| 508 | suspend_report_result(drv->pm->suspend, error); | 498 | goto Fixup; |
| 509 | } | 499 | } |
| 510 | 500 | ||
| 511 | if (!error) | 501 | pci_dev->state_saved = false; |
| 512 | pci_pm_default_suspend(pci_dev); | ||
| 513 | 502 | ||
| 514 | return error; | 503 | if (pm->suspend) { |
| 504 | pci_power_t prev = pci_dev->current_state; | ||
| 505 | int error; | ||
| 506 | |||
| 507 | error = pm->suspend(dev); | ||
| 508 | suspend_report_result(pm->suspend, error); | ||
| 509 | if (error) | ||
| 510 | return error; | ||
| 511 | |||
| 512 | if (pci_dev->state_saved) | ||
| 513 | goto Fixup; | ||
| 514 | |||
| 515 | if (pci_dev->current_state != PCI_D0 | ||
| 516 | && pci_dev->current_state != PCI_UNKNOWN) { | ||
| 517 | WARN_ONCE(pci_dev->current_state != prev, | ||
| 518 | "PCI PM: State of device not saved by %pF\n", | ||
| 519 | pm->suspend); | ||
| 520 | goto Fixup; | ||
| 521 | } | ||
| 522 | } | ||
| 523 | |||
| 524 | if (!pci_dev->state_saved) { | ||
| 525 | pci_save_state(pci_dev); | ||
| 526 | if (!pci_is_bridge(pci_dev)) | ||
| 527 | pci_prepare_to_sleep(pci_dev); | ||
| 528 | } | ||
| 529 | |||
| 530 | Fixup: | ||
| 531 | pci_fixup_device(pci_fixup_suspend, pci_dev); | ||
| 532 | |||
| 533 | return 0; | ||
| 515 | } | 534 | } |
| 516 | 535 | ||
| 517 | static int pci_pm_suspend_noirq(struct device *dev) | 536 | static int pci_pm_suspend_noirq(struct device *dev) |
| @@ -554,7 +573,7 @@ static int pci_pm_resume_noirq(struct device *dev) | |||
| 554 | static int pci_pm_resume(struct device *dev) | 573 | static int pci_pm_resume(struct device *dev) |
| 555 | { | 574 | { |
| 556 | struct pci_dev *pci_dev = to_pci_dev(dev); | 575 | struct pci_dev *pci_dev = to_pci_dev(dev); |
| 557 | struct device_driver *drv = dev->driver; | 576 | struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; |
| 558 | int error = 0; | 577 | int error = 0; |
| 559 | 578 | ||
| 560 | /* | 579 | /* |
| @@ -567,12 +586,16 @@ static int pci_pm_resume(struct device *dev) | |||
| 567 | if (pci_has_legacy_pm_support(pci_dev)) | 586 | if (pci_has_legacy_pm_support(pci_dev)) |
| 568 | return pci_legacy_resume(dev); | 587 | return pci_legacy_resume(dev); |
| 569 | 588 | ||
| 570 | error = pci_pm_default_resume(pci_dev); | 589 | pci_pm_default_resume(pci_dev); |
| 571 | 590 | ||
| 572 | if (!error && drv && drv->pm && drv->pm->resume) | 591 | if (pm) { |
| 573 | error = drv->pm->resume(dev); | 592 | if (pm->resume) |
| 593 | error = pm->resume(dev); | ||
| 594 | } else { | ||
| 595 | pci_pm_reenable_device(pci_dev); | ||
| 596 | } | ||
| 574 | 597 | ||
| 575 | return error; | 598 | return 0; |
| 576 | } | 599 | } |
| 577 | 600 | ||
| 578 | #else /* !CONFIG_SUSPEND */ | 601 | #else /* !CONFIG_SUSPEND */ |
| @@ -589,21 +612,31 @@ static int pci_pm_resume(struct device *dev) | |||
| 589 | static int pci_pm_freeze(struct device *dev) | 612 | static int pci_pm_freeze(struct device *dev) |
| 590 | { | 613 | { |
| 591 | struct pci_dev *pci_dev = to_pci_dev(dev); | 614 | struct pci_dev *pci_dev = to_pci_dev(dev); |
| 592 | struct device_driver *drv = dev->driver; | 615 | struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; |
| 593 | int error = 0; | ||
| 594 | 616 | ||
| 595 | if (pci_has_legacy_pm_support(pci_dev)) | 617 | if (pci_has_legacy_pm_support(pci_dev)) |
| 596 | return pci_legacy_suspend(dev, PMSG_FREEZE); | 618 | return pci_legacy_suspend(dev, PMSG_FREEZE); |
| 597 | 619 | ||
| 598 | if (drv && drv->pm && drv->pm->freeze) { | 620 | if (!pm) { |
| 599 | error = drv->pm->freeze(dev); | 621 | pci_pm_default_suspend(pci_dev); |
| 600 | suspend_report_result(drv->pm->freeze, error); | 622 | return 0; |
| 601 | } | 623 | } |
| 602 | 624 | ||
| 603 | if (!error) | 625 | pci_dev->state_saved = false; |
| 604 | pci_pm_default_suspend_generic(pci_dev); | ||
| 605 | 626 | ||
| 606 | return error; | 627 | if (pm->freeze) { |
| 628 | int error; | ||
| 629 | |||
| 630 | error = pm->freeze(dev); | ||
| 631 | suspend_report_result(pm->freeze, error); | ||
| 632 | if (error) | ||
| 633 | return error; | ||
| 634 | } | ||
| 635 | |||
| 636 | if (!pci_dev->state_saved) | ||
| 637 | pci_save_state(pci_dev); | ||
| 638 | |||
| 639 | return 0; | ||
| 607 | } | 640 | } |
| 608 | 641 | ||
| 609 | static int pci_pm_freeze_noirq(struct device *dev) | 642 | static int pci_pm_freeze_noirq(struct device *dev) |
| @@ -646,16 +679,18 @@ static int pci_pm_thaw_noirq(struct device *dev) | |||
| 646 | static int pci_pm_thaw(struct device *dev) | 679 | static int pci_pm_thaw(struct device *dev) |
| 647 | { | 680 | { |
| 648 | struct pci_dev *pci_dev = to_pci_dev(dev); | 681 | struct pci_dev *pci_dev = to_pci_dev(dev); |
| 649 | struct device_driver *drv = dev->driver; | 682 | struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; |
| 650 | int error = 0; | 683 | int error = 0; |
| 651 | 684 | ||
| 652 | if (pci_has_legacy_pm_support(pci_dev)) | 685 | if (pci_has_legacy_pm_support(pci_dev)) |
| 653 | return pci_legacy_resume(dev); | 686 | return pci_legacy_resume(dev); |
| 654 | 687 | ||
| 655 | pci_pm_reenable_device(pci_dev); | 688 | if (pm) { |
| 656 | 689 | if (pm->thaw) | |
| 657 | if (drv && drv->pm && drv->pm->thaw) | 690 | error = pm->thaw(dev); |
| 658 | error = drv->pm->thaw(dev); | 691 | } else { |
| 692 | pci_pm_reenable_device(pci_dev); | ||
| 693 | } | ||
| 659 | 694 | ||
| 660 | return error; | 695 | return error; |
| 661 | } | 696 | } |
| @@ -663,22 +698,29 @@ static int pci_pm_thaw(struct device *dev) | |||
| 663 | static int pci_pm_poweroff(struct device *dev) | 698 | static int pci_pm_poweroff(struct device *dev) |
| 664 | { | 699 | { |
| 665 | struct pci_dev *pci_dev = to_pci_dev(dev); | 700 | struct pci_dev *pci_dev = to_pci_dev(dev); |
| 666 | struct device_driver *drv = dev->driver; | 701 | struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; |
| 667 | int error = 0; | 702 | int error = 0; |
| 668 | 703 | ||
| 669 | if (pci_has_legacy_pm_support(pci_dev)) | 704 | if (pci_has_legacy_pm_support(pci_dev)) |
| 670 | return pci_legacy_suspend(dev, PMSG_HIBERNATE); | 705 | return pci_legacy_suspend(dev, PMSG_HIBERNATE); |
| 671 | 706 | ||
| 672 | if (!drv || !drv->pm) | 707 | if (!pm) { |
| 673 | return 0; | 708 | pci_pm_default_suspend(pci_dev); |
| 709 | goto Fixup; | ||
| 710 | } | ||
| 711 | |||
| 712 | pci_dev->state_saved = false; | ||
| 674 | 713 | ||
| 675 | if (drv->pm->poweroff) { | 714 | if (pm->poweroff) { |
| 676 | error = drv->pm->poweroff(dev); | 715 | error = pm->poweroff(dev); |
| 677 | suspend_report_result(drv->pm->poweroff, error); | 716 | suspend_report_result(pm->poweroff, error); |
| 678 | } | 717 | } |
| 679 | 718 | ||
| 680 | if (!error) | 719 | if (!pci_dev->state_saved && !pci_is_bridge(pci_dev)) |
| 681 | pci_pm_default_suspend(pci_dev); | 720 | pci_prepare_to_sleep(pci_dev); |
| 721 | |||
| 722 | Fixup: | ||
| 723 | pci_fixup_device(pci_fixup_suspend, pci_dev); | ||
| 682 | 724 | ||
| 683 | return error; | 725 | return error; |
| 684 | } | 726 | } |
| @@ -719,7 +761,7 @@ static int pci_pm_restore_noirq(struct device *dev) | |||
| 719 | static int pci_pm_restore(struct device *dev) | 761 | static int pci_pm_restore(struct device *dev) |
| 720 | { | 762 | { |
| 721 | struct pci_dev *pci_dev = to_pci_dev(dev); | 763 | struct pci_dev *pci_dev = to_pci_dev(dev); |
| 722 | struct device_driver *drv = dev->driver; | 764 | struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; |
| 723 | int error = 0; | 765 | int error = 0; |
| 724 | 766 | ||
| 725 | /* | 767 | /* |
| @@ -732,10 +774,14 @@ static int pci_pm_restore(struct device *dev) | |||
| 732 | if (pci_has_legacy_pm_support(pci_dev)) | 774 | if (pci_has_legacy_pm_support(pci_dev)) |
| 733 | return pci_legacy_resume(dev); | 775 | return pci_legacy_resume(dev); |
| 734 | 776 | ||
| 735 | error = pci_pm_default_resume(pci_dev); | 777 | pci_pm_default_resume(pci_dev); |
| 736 | 778 | ||
| 737 | if (!error && drv && drv->pm && drv->pm->restore) | 779 | if (pm) { |
| 738 | error = drv->pm->restore(dev); | 780 | if (pm->restore) |
| 781 | error = pm->restore(dev); | ||
| 782 | } else { | ||
| 783 | pci_pm_reenable_device(pci_dev); | ||
| 784 | } | ||
| 739 | 785 | ||
| 740 | return error; | 786 | return error; |
| 741 | } | 787 | } |
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index db7ec14fa719..dfc4e0ddf241 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c | |||
| @@ -768,8 +768,8 @@ pci_read_rom(struct kobject *kobj, struct bin_attribute *bin_attr, | |||
| 768 | return -EINVAL; | 768 | return -EINVAL; |
| 769 | 769 | ||
| 770 | rom = pci_map_rom(pdev, &size); /* size starts out as PCI window size */ | 770 | rom = pci_map_rom(pdev, &size); /* size starts out as PCI window size */ |
| 771 | if (!rom) | 771 | if (!rom || !size) |
| 772 | return 0; | 772 | return -EIO; |
| 773 | 773 | ||
| 774 | if (off >= size) | 774 | if (off >= size) |
| 775 | count = 0; | 775 | count = 0; |
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 48807556b47a..6d6120007af4 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
| @@ -1418,10 +1418,10 @@ int pci_restore_standard_config(struct pci_dev *dev) | |||
| 1418 | break; | 1418 | break; |
| 1419 | } | 1419 | } |
| 1420 | 1420 | ||
| 1421 | dev->current_state = PCI_D0; | 1421 | pci_update_current_state(dev, PCI_D0); |
| 1422 | 1422 | ||
| 1423 | Restore: | 1423 | Restore: |
| 1424 | return pci_restore_state(dev); | 1424 | return dev->state_saved ? pci_restore_state(dev) : 0; |
| 1425 | } | 1425 | } |
| 1426 | 1426 | ||
| 1427 | /** | 1427 | /** |
| @@ -1540,16 +1540,21 @@ void pci_release_region(struct pci_dev *pdev, int bar) | |||
| 1540 | } | 1540 | } |
| 1541 | 1541 | ||
| 1542 | /** | 1542 | /** |
| 1543 | * pci_request_region - Reserved PCI I/O and memory resource | 1543 | * __pci_request_region - Reserved PCI I/O and memory resource |
| 1544 | * @pdev: PCI device whose resources are to be reserved | 1544 | * @pdev: PCI device whose resources are to be reserved |
| 1545 | * @bar: BAR to be reserved | 1545 | * @bar: BAR to be reserved |
| 1546 | * @res_name: Name to be associated with resource. | 1546 | * @res_name: Name to be associated with resource. |
| 1547 | * @exclusive: whether the region access is exclusive or not | ||
| 1547 | * | 1548 | * |
| 1548 | * Mark the PCI region associated with PCI device @pdev BR @bar as | 1549 | * Mark the PCI region associated with PCI device @pdev BR @bar as |
| 1549 | * being reserved by owner @res_name. Do not access any | 1550 | * being reserved by owner @res_name. Do not access any |
| 1550 | * address inside the PCI regions unless this call returns | 1551 | * address inside the PCI regions unless this call returns |
| 1551 | * successfully. | 1552 | * successfully. |
| 1552 | * | 1553 | * |
| 1554 | * If @exclusive is set, then the region is marked so that userspace | ||
| 1555 | * is explicitly not allowed to map the resource via /dev/mem or | ||
| 1556 | * sysfs MMIO access. | ||
| 1557 | * | ||
| 1553 | * Returns 0 on success, or %EBUSY on error. A warning | 1558 | * Returns 0 on success, or %EBUSY on error. A warning |
| 1554 | * message is also printed on failure. | 1559 | * message is also printed on failure. |
| 1555 | */ | 1560 | */ |
| @@ -1588,12 +1593,12 @@ err_out: | |||
| 1588 | } | 1593 | } |
| 1589 | 1594 | ||
| 1590 | /** | 1595 | /** |
| 1591 | * pci_request_region - Reserved PCI I/O and memory resource | 1596 | * pci_request_region - Reserve PCI I/O and memory resource |
| 1592 | * @pdev: PCI device whose resources are to be reserved | 1597 | * @pdev: PCI device whose resources are to be reserved |
| 1593 | * @bar: BAR to be reserved | 1598 | * @bar: BAR to be reserved |
| 1594 | * @res_name: Name to be associated with resource. | 1599 | * @res_name: Name to be associated with resource |
| 1595 | * | 1600 | * |
| 1596 | * Mark the PCI region associated with PCI device @pdev BR @bar as | 1601 | * Mark the PCI region associated with PCI device @pdev BAR @bar as |
| 1597 | * being reserved by owner @res_name. Do not access any | 1602 | * being reserved by owner @res_name. Do not access any |
| 1598 | * address inside the PCI regions unless this call returns | 1603 | * address inside the PCI regions unless this call returns |
| 1599 | * successfully. | 1604 | * successfully. |
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 26ddf78ac300..07c0aa5275e6 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h | |||
| @@ -16,21 +16,21 @@ extern int pci_mmap_fits(struct pci_dev *pdev, int resno, | |||
| 16 | #endif | 16 | #endif |
| 17 | 17 | ||
| 18 | /** | 18 | /** |
| 19 | * Firmware PM callbacks | 19 | * struct pci_platform_pm_ops - Firmware PM callbacks |
| 20 | * | 20 | * |
| 21 | * @is_manageable - returns 'true' if given device is power manageable by the | 21 | * @is_manageable: returns 'true' if given device is power manageable by the |
| 22 | * platform firmware | 22 | * platform firmware |
| 23 | * | 23 | * |
| 24 | * @set_state - invokes the platform firmware to set the device's power state | 24 | * @set_state: invokes the platform firmware to set the device's power state |
| 25 | * | 25 | * |
| 26 | * @choose_state - returns PCI power state of given device preferred by the | 26 | * @choose_state: returns PCI power state of given device preferred by the |
| 27 | * platform; to be used during system-wide transitions from a | 27 | * platform; to be used during system-wide transitions from a |
| 28 | * sleeping state to the working state and vice versa | 28 | * sleeping state to the working state and vice versa |
| 29 | * | 29 | * |
| 30 | * @can_wakeup - returns 'true' if given device is capable of waking up the | 30 | * @can_wakeup: returns 'true' if given device is capable of waking up the |
| 31 | * system from a sleeping state | 31 | * system from a sleeping state |
| 32 | * | 32 | * |
| 33 | * @sleep_wake - enables/disables the system wake up capability of given device | 33 | * @sleep_wake: enables/disables the system wake up capability of given device |
| 34 | * | 34 | * |
| 35 | * If given platform is generally capable of power managing PCI devices, all of | 35 | * If given platform is generally capable of power managing PCI devices, all of |
| 36 | * these callbacks are mandatory. | 36 | * these callbacks are mandatory. |
diff --git a/drivers/pci/pcie/aer/aerdrv_core.c b/drivers/pci/pcie/aer/aerdrv_core.c index aac7006949f1..d0c973685868 100644 --- a/drivers/pci/pcie/aer/aerdrv_core.c +++ b/drivers/pci/pcie/aer/aerdrv_core.c | |||
| @@ -108,6 +108,34 @@ int pci_cleanup_aer_correct_error_status(struct pci_dev *dev) | |||
| 108 | } | 108 | } |
| 109 | #endif /* 0 */ | 109 | #endif /* 0 */ |
| 110 | 110 | ||
| 111 | |||
| 112 | static void set_device_error_reporting(struct pci_dev *dev, void *data) | ||
| 113 | { | ||
| 114 | bool enable = *((bool *)data); | ||
| 115 | |||
| 116 | if (dev->pcie_type != PCIE_RC_PORT && | ||
| 117 | dev->pcie_type != PCIE_SW_UPSTREAM_PORT && | ||
| 118 | dev->pcie_type != PCIE_SW_DOWNSTREAM_PORT) | ||
| 119 | return; | ||
| 120 | |||
| 121 | if (enable) | ||
| 122 | pci_enable_pcie_error_reporting(dev); | ||
| 123 | else | ||
| 124 | pci_disable_pcie_error_reporting(dev); | ||
| 125 | } | ||
| 126 | |||
| 127 | /** | ||
| 128 | * set_downstream_devices_error_reporting - enable/disable the error reporting bits on the root port and its downstream ports. | ||
| 129 | * @dev: pointer to root port's pci_dev data structure | ||
| 130 | * @enable: true = enable error reporting, false = disable error reporting. | ||
| 131 | */ | ||
| 132 | static void set_downstream_devices_error_reporting(struct pci_dev *dev, | ||
| 133 | bool enable) | ||
| 134 | { | ||
| 135 | set_device_error_reporting(dev, &enable); | ||
| 136 | pci_walk_bus(dev->subordinate, set_device_error_reporting, &enable); | ||
| 137 | } | ||
| 138 | |||
| 111 | static int find_device_iter(struct device *device, void *data) | 139 | static int find_device_iter(struct device *device, void *data) |
| 112 | { | 140 | { |
| 113 | struct pci_dev *dev; | 141 | struct pci_dev *dev; |
| @@ -525,15 +553,11 @@ void aer_enable_rootport(struct aer_rpc *rpc) | |||
| 525 | pci_read_config_dword(pdev, aer_pos + PCI_ERR_UNCOR_STATUS, ®32); | 553 | pci_read_config_dword(pdev, aer_pos + PCI_ERR_UNCOR_STATUS, ®32); |
| 526 | pci_write_config_dword(pdev, aer_pos + PCI_ERR_UNCOR_STATUS, reg32); | 554 | pci_write_config_dword(pdev, aer_pos + PCI_ERR_UNCOR_STATUS, reg32); |
| 527 | 555 | ||
| 528 | /* Enable Root Port device reporting error itself */ | 556 | /* |
| 529 | pci_read_config_word(pdev, pos+PCI_EXP_DEVCTL, ®16); | 557 | * Enable error reporting for the root port device and downstream port |
| 530 | reg16 = reg16 | | 558 | * devices. |
| 531 | PCI_EXP_DEVCTL_CERE | | 559 | */ |
| 532 | PCI_EXP_DEVCTL_NFERE | | 560 | set_downstream_devices_error_reporting(pdev, true); |
| 533 | PCI_EXP_DEVCTL_FERE | | ||
| 534 | PCI_EXP_DEVCTL_URRE; | ||
| 535 | pci_write_config_word(pdev, pos+PCI_EXP_DEVCTL, | ||
| 536 | reg16); | ||
| 537 | 561 | ||
| 538 | /* Enable Root Port's interrupt in response to error messages */ | 562 | /* Enable Root Port's interrupt in response to error messages */ |
| 539 | pci_write_config_dword(pdev, | 563 | pci_write_config_dword(pdev, |
| @@ -553,6 +577,12 @@ static void disable_root_aer(struct aer_rpc *rpc) | |||
| 553 | u32 reg32; | 577 | u32 reg32; |
| 554 | int pos; | 578 | int pos; |
| 555 | 579 | ||
| 580 | /* | ||
| 581 | * Disable error reporting for the root port device and downstream port | ||
| 582 | * devices. | ||
| 583 | */ | ||
| 584 | set_downstream_devices_error_reporting(pdev, false); | ||
| 585 | |||
| 556 | pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_ERR); | 586 | pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_ERR); |
| 557 | /* Disable Root's interrupt in response to error messages */ | 587 | /* Disable Root's interrupt in response to error messages */ |
| 558 | pci_write_config_dword(pdev, pos + PCI_ERR_ROOT_COMMAND, 0); | 588 | pci_write_config_dword(pdev, pos + PCI_ERR_ROOT_COMMAND, 0); |
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c index 586b6f75910d..b0367f168af4 100644 --- a/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c | |||
| @@ -718,9 +718,9 @@ void pcie_aspm_exit_link_state(struct pci_dev *pdev) | |||
| 718 | 718 | ||
| 719 | /* | 719 | /* |
| 720 | * All PCIe functions are in one slot, remove one function will remove | 720 | * All PCIe functions are in one slot, remove one function will remove |
| 721 | * the the whole slot, so just wait | 721 | * the whole slot, so just wait until we are the last function left. |
| 722 | */ | 722 | */ |
| 723 | if (!list_empty(&parent->subordinate->devices)) | 723 | if (!list_is_last(&pdev->bus_list, &parent->subordinate->devices)) |
| 724 | goto out; | 724 | goto out; |
| 725 | 725 | ||
| 726 | /* All functions are removed, so just disable ASPM for the link */ | 726 | /* All functions are removed, so just disable ASPM for the link */ |
diff --git a/drivers/pci/pcie/portdrv_pci.c b/drivers/pci/pcie/portdrv_pci.c index 99a914a027f8..248b4db91552 100644 --- a/drivers/pci/pcie/portdrv_pci.c +++ b/drivers/pci/pcie/portdrv_pci.c | |||
| @@ -55,25 +55,13 @@ static int pcie_portdrv_suspend(struct pci_dev *dev, pm_message_t state) | |||
| 55 | 55 | ||
| 56 | } | 56 | } |
| 57 | 57 | ||
| 58 | static int pcie_portdrv_suspend_late(struct pci_dev *dev, pm_message_t state) | ||
| 59 | { | ||
| 60 | return pci_save_state(dev); | ||
| 61 | } | ||
| 62 | |||
| 63 | static int pcie_portdrv_resume_early(struct pci_dev *dev) | ||
| 64 | { | ||
| 65 | return pci_restore_state(dev); | ||
| 66 | } | ||
| 67 | |||
| 68 | static int pcie_portdrv_resume(struct pci_dev *dev) | 58 | static int pcie_portdrv_resume(struct pci_dev *dev) |
| 69 | { | 59 | { |
| 70 | pcie_portdrv_restore_config(dev); | 60 | pci_set_master(dev); |
| 71 | return pcie_port_device_resume(dev); | 61 | return pcie_port_device_resume(dev); |
| 72 | } | 62 | } |
| 73 | #else | 63 | #else |
| 74 | #define pcie_portdrv_suspend NULL | 64 | #define pcie_portdrv_suspend NULL |
| 75 | #define pcie_portdrv_suspend_late NULL | ||
| 76 | #define pcie_portdrv_resume_early NULL | ||
| 77 | #define pcie_portdrv_resume NULL | 65 | #define pcie_portdrv_resume NULL |
| 78 | #endif | 66 | #endif |
| 79 | 67 | ||
| @@ -109,8 +97,6 @@ static int __devinit pcie_portdrv_probe (struct pci_dev *dev, | |||
| 109 | 97 | ||
| 110 | pcie_portdrv_save_config(dev); | 98 | pcie_portdrv_save_config(dev); |
| 111 | 99 | ||
| 112 | pci_enable_pcie_error_reporting(dev); | ||
| 113 | |||
| 114 | return 0; | 100 | return 0; |
| 115 | } | 101 | } |
| 116 | 102 | ||
| @@ -292,8 +278,6 @@ static struct pci_driver pcie_portdriver = { | |||
| 292 | .remove = pcie_portdrv_remove, | 278 | .remove = pcie_portdrv_remove, |
| 293 | 279 | ||
| 294 | .suspend = pcie_portdrv_suspend, | 280 | .suspend = pcie_portdrv_suspend, |
| 295 | .suspend_late = pcie_portdrv_suspend_late, | ||
| 296 | .resume_early = pcie_portdrv_resume_early, | ||
| 297 | .resume = pcie_portdrv_resume, | 281 | .resume = pcie_portdrv_resume, |
| 298 | 282 | ||
| 299 | .err_handler = &pcie_portdrv_err_handler, | 283 | .err_handler = &pcie_portdrv_err_handler, |
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index baad093aafe3..f20d55368edb 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
| @@ -1584,6 +1584,7 @@ DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_ | |||
| 1584 | */ | 1584 | */ |
| 1585 | #define AMD_813X_MISC 0x40 | 1585 | #define AMD_813X_MISC 0x40 |
| 1586 | #define AMD_813X_NOIOAMODE (1<<0) | 1586 | #define AMD_813X_NOIOAMODE (1<<0) |
| 1587 | #define AMD_813X_REV_B2 0x13 | ||
| 1587 | 1588 | ||
| 1588 | static void quirk_disable_amd_813x_boot_interrupt(struct pci_dev *dev) | 1589 | static void quirk_disable_amd_813x_boot_interrupt(struct pci_dev *dev) |
| 1589 | { | 1590 | { |
| @@ -1591,6 +1592,8 @@ static void quirk_disable_amd_813x_boot_interrupt(struct pci_dev *dev) | |||
| 1591 | 1592 | ||
| 1592 | if (noioapicquirk) | 1593 | if (noioapicquirk) |
| 1593 | return; | 1594 | return; |
| 1595 | if (dev->revision == AMD_813X_REV_B2) | ||
| 1596 | return; | ||
| 1594 | 1597 | ||
| 1595 | pci_read_config_dword(dev, AMD_813X_MISC, &pci_config_dword); | 1598 | pci_read_config_dword(dev, AMD_813X_MISC, &pci_config_dword); |
| 1596 | pci_config_dword &= ~AMD_813X_NOIOAMODE; | 1599 | pci_config_dword &= ~AMD_813X_NOIOAMODE; |
| @@ -1981,7 +1984,6 @@ static void __devinit quirk_msi_ht_cap(struct pci_dev *dev) | |||
| 1981 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT2000_PCIE, | 1984 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT2000_PCIE, |
| 1982 | quirk_msi_ht_cap); | 1985 | quirk_msi_ht_cap); |
| 1983 | 1986 | ||
| 1984 | |||
| 1985 | /* The nVidia CK804 chipset may have 2 HT MSI mappings. | 1987 | /* The nVidia CK804 chipset may have 2 HT MSI mappings. |
| 1986 | * MSI are supported if the MSI capability set in any of these mappings. | 1988 | * MSI are supported if the MSI capability set in any of these mappings. |
| 1987 | */ | 1989 | */ |
| @@ -2032,6 +2034,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SERVERWORKS, | |||
| 2032 | PCI_DEVICE_ID_SERVERWORKS_HT1000_PXB, | 2034 | PCI_DEVICE_ID_SERVERWORKS_HT1000_PXB, |
| 2033 | ht_enable_msi_mapping); | 2035 | ht_enable_msi_mapping); |
| 2034 | 2036 | ||
| 2037 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8132_BRIDGE, | ||
| 2038 | ht_enable_msi_mapping); | ||
| 2039 | |||
| 2035 | /* The P5N32-SLI Premium motherboard from Asus has a problem with msi | 2040 | /* The P5N32-SLI Premium motherboard from Asus has a problem with msi |
| 2036 | * for the MCP55 NIC. It is not yet determined whether the msi problem | 2041 | * for the MCP55 NIC. It is not yet determined whether the msi problem |
| 2037 | * also affects other devices. As for now, turn off msi for this device. | 2042 | * also affects other devices. As for now, turn off msi for this device. |
| @@ -2048,10 +2053,100 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, | |||
| 2048 | PCI_DEVICE_ID_NVIDIA_NVENET_15, | 2053 | PCI_DEVICE_ID_NVIDIA_NVENET_15, |
| 2049 | nvenet_msi_disable); | 2054 | nvenet_msi_disable); |
| 2050 | 2055 | ||
| 2051 | static void __devinit nv_msi_ht_cap_quirk(struct pci_dev *dev) | 2056 | static void __devinit nv_ht_enable_msi_mapping(struct pci_dev *dev) |
| 2052 | { | 2057 | { |
| 2053 | struct pci_dev *host_bridge; | 2058 | struct pci_dev *host_bridge; |
| 2059 | int pos; | ||
| 2060 | int i, dev_no; | ||
| 2061 | int found = 0; | ||
| 2062 | |||
| 2063 | dev_no = dev->devfn >> 3; | ||
| 2064 | for (i = dev_no; i >= 0; i--) { | ||
| 2065 | host_bridge = pci_get_slot(dev->bus, PCI_DEVFN(i, 0)); | ||
| 2066 | if (!host_bridge) | ||
| 2067 | continue; | ||
| 2068 | |||
| 2069 | pos = pci_find_ht_capability(host_bridge, HT_CAPTYPE_SLAVE); | ||
| 2070 | if (pos != 0) { | ||
| 2071 | found = 1; | ||
| 2072 | break; | ||
| 2073 | } | ||
| 2074 | pci_dev_put(host_bridge); | ||
| 2075 | } | ||
| 2076 | |||
| 2077 | if (!found) | ||
| 2078 | return; | ||
| 2079 | |||
| 2080 | /* root did that ! */ | ||
| 2081 | if (msi_ht_cap_enabled(host_bridge)) | ||
| 2082 | goto out; | ||
| 2083 | |||
| 2084 | ht_enable_msi_mapping(dev); | ||
| 2085 | |||
| 2086 | out: | ||
| 2087 | pci_dev_put(host_bridge); | ||
| 2088 | } | ||
| 2089 | |||
| 2090 | static void __devinit ht_disable_msi_mapping(struct pci_dev *dev) | ||
| 2091 | { | ||
| 2092 | int pos, ttl = 48; | ||
| 2093 | |||
| 2094 | pos = pci_find_ht_capability(dev, HT_CAPTYPE_MSI_MAPPING); | ||
| 2095 | while (pos && ttl--) { | ||
| 2096 | u8 flags; | ||
| 2097 | |||
| 2098 | if (pci_read_config_byte(dev, pos + HT_MSI_FLAGS, | ||
| 2099 | &flags) == 0) { | ||
| 2100 | dev_info(&dev->dev, "Enabling HT MSI Mapping\n"); | ||
| 2101 | |||
| 2102 | pci_write_config_byte(dev, pos + HT_MSI_FLAGS, | ||
| 2103 | flags & ~HT_MSI_FLAGS_ENABLE); | ||
| 2104 | } | ||
| 2105 | pos = pci_find_next_ht_capability(dev, pos, | ||
| 2106 | HT_CAPTYPE_MSI_MAPPING); | ||
| 2107 | } | ||
| 2108 | } | ||
| 2109 | |||
| 2110 | static int __devinit ht_check_msi_mapping(struct pci_dev *dev) | ||
| 2111 | { | ||
| 2054 | int pos, ttl = 48; | 2112 | int pos, ttl = 48; |
| 2113 | int found = 0; | ||
| 2114 | |||
| 2115 | /* check if there is HT MSI cap or enabled on this device */ | ||
| 2116 | pos = pci_find_ht_capability(dev, HT_CAPTYPE_MSI_MAPPING); | ||
| 2117 | while (pos && ttl--) { | ||
| 2118 | u8 flags; | ||
| 2119 | |||
| 2120 | if (found < 1) | ||
| 2121 | found = 1; | ||
| 2122 | if (pci_read_config_byte(dev, pos + HT_MSI_FLAGS, | ||
| 2123 | &flags) == 0) { | ||
| 2124 | if (flags & HT_MSI_FLAGS_ENABLE) { | ||
| 2125 | if (found < 2) { | ||
| 2126 | found = 2; | ||
| 2127 | break; | ||
| 2128 | } | ||
| 2129 | } | ||
| 2130 | } | ||
| 2131 | pos = pci_find_next_ht_capability(dev, pos, | ||
| 2132 | HT_CAPTYPE_MSI_MAPPING); | ||
| 2133 | } | ||
| 2134 | |||
| 2135 | return found; | ||
| 2136 | } | ||
| 2137 | |||
| 2138 | static void __devinit nv_msi_ht_cap_quirk(struct pci_dev *dev) | ||
| 2139 | { | ||
| 2140 | struct pci_dev *host_bridge; | ||
| 2141 | int pos; | ||
| 2142 | int found; | ||
| 2143 | |||
| 2144 | /* check if there is HT MSI cap or enabled on this device */ | ||
| 2145 | found = ht_check_msi_mapping(dev); | ||
| 2146 | |||
| 2147 | /* no HT MSI CAP */ | ||
| 2148 | if (found == 0) | ||
| 2149 | return; | ||
| 2055 | 2150 | ||
| 2056 | /* | 2151 | /* |
| 2057 | * HT MSI mapping should be disabled on devices that are below | 2152 | * HT MSI mapping should be disabled on devices that are below |
| @@ -2067,24 +2162,19 @@ static void __devinit nv_msi_ht_cap_quirk(struct pci_dev *dev) | |||
| 2067 | pos = pci_find_ht_capability(host_bridge, HT_CAPTYPE_SLAVE); | 2162 | pos = pci_find_ht_capability(host_bridge, HT_CAPTYPE_SLAVE); |
| 2068 | if (pos != 0) { | 2163 | if (pos != 0) { |
| 2069 | /* Host bridge is to HT */ | 2164 | /* Host bridge is to HT */ |
| 2070 | ht_enable_msi_mapping(dev); | 2165 | if (found == 1) { |
| 2166 | /* it is not enabled, try to enable it */ | ||
| 2167 | nv_ht_enable_msi_mapping(dev); | ||
| 2168 | } | ||
| 2071 | return; | 2169 | return; |
| 2072 | } | 2170 | } |
| 2073 | 2171 | ||
| 2074 | /* Host bridge is not to HT, disable HT MSI mapping on this device */ | 2172 | /* HT MSI is not enabled */ |
| 2075 | pos = pci_find_ht_capability(dev, HT_CAPTYPE_MSI_MAPPING); | 2173 | if (found == 1) |
| 2076 | while (pos && ttl--) { | 2174 | return; |
| 2077 | u8 flags; | ||
| 2078 | 2175 | ||
| 2079 | if (pci_read_config_byte(dev, pos + HT_MSI_FLAGS, | 2176 | /* Host bridge is not to HT, disable HT MSI mapping on this device */ |
| 2080 | &flags) == 0) { | 2177 | ht_disable_msi_mapping(dev); |
| 2081 | dev_info(&dev->dev, "Disabling HT MSI mapping"); | ||
| 2082 | pci_write_config_byte(dev, pos + HT_MSI_FLAGS, | ||
| 2083 | flags & ~HT_MSI_FLAGS_ENABLE); | ||
| 2084 | } | ||
| 2085 | pos = pci_find_next_ht_capability(dev, pos, | ||
| 2086 | HT_CAPTYPE_MSI_MAPPING); | ||
| 2087 | } | ||
| 2088 | } | 2178 | } |
| 2089 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, nv_msi_ht_cap_quirk); | 2179 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, nv_msi_ht_cap_quirk); |
| 2090 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, PCI_ANY_ID, nv_msi_ht_cap_quirk); | 2180 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, PCI_ANY_ID, nv_msi_ht_cap_quirk); |
diff --git a/drivers/pci/rom.c b/drivers/pci/rom.c index 132a78159b60..36864a935d68 100644 --- a/drivers/pci/rom.c +++ b/drivers/pci/rom.c | |||
| @@ -55,6 +55,7 @@ void pci_disable_rom(struct pci_dev *pdev) | |||
| 55 | 55 | ||
| 56 | /** | 56 | /** |
| 57 | * pci_get_rom_size - obtain the actual size of the ROM image | 57 | * pci_get_rom_size - obtain the actual size of the ROM image |
| 58 | * @pdev: target PCI device | ||
| 58 | * @rom: kernel virtual pointer to image of ROM | 59 | * @rom: kernel virtual pointer to image of ROM |
| 59 | * @size: size of PCI window | 60 | * @size: size of PCI window |
| 60 | * return: size of actual ROM image | 61 | * return: size of actual ROM image |
| @@ -63,7 +64,7 @@ void pci_disable_rom(struct pci_dev *pdev) | |||
| 63 | * The PCI window size could be much larger than the | 64 | * The PCI window size could be much larger than the |
| 64 | * actual image size. | 65 | * actual image size. |
| 65 | */ | 66 | */ |
| 66 | size_t pci_get_rom_size(void __iomem *rom, size_t size) | 67 | size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size) |
| 67 | { | 68 | { |
| 68 | void __iomem *image; | 69 | void __iomem *image; |
| 69 | int last_image; | 70 | int last_image; |
| @@ -72,8 +73,10 @@ size_t pci_get_rom_size(void __iomem *rom, size_t size) | |||
| 72 | do { | 73 | do { |
| 73 | void __iomem *pds; | 74 | void __iomem *pds; |
| 74 | /* Standard PCI ROMs start out with these bytes 55 AA */ | 75 | /* Standard PCI ROMs start out with these bytes 55 AA */ |
| 75 | if (readb(image) != 0x55) | 76 | if (readb(image) != 0x55) { |
| 77 | dev_err(&pdev->dev, "Invalid ROM contents\n"); | ||
| 76 | break; | 78 | break; |
| 79 | } | ||
| 77 | if (readb(image + 1) != 0xAA) | 80 | if (readb(image + 1) != 0xAA) |
| 78 | break; | 81 | break; |
| 79 | /* get the PCI data structure and check its signature */ | 82 | /* get the PCI data structure and check its signature */ |
| @@ -159,7 +162,7 @@ void __iomem *pci_map_rom(struct pci_dev *pdev, size_t *size) | |||
| 159 | * size is much larger than the actual size of the ROM. | 162 | * size is much larger than the actual size of the ROM. |
| 160 | * True size is important if the ROM is going to be copied. | 163 | * True size is important if the ROM is going to be copied. |
| 161 | */ | 164 | */ |
| 162 | *size = pci_get_rom_size(rom, *size); | 165 | *size = pci_get_rom_size(pdev, rom, *size); |
| 163 | return rom; | 166 | return rom; |
| 164 | } | 167 | } |
| 165 | 168 | ||
diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig index 1a266d4ab5f1..b3866ad50227 100644 --- a/drivers/platform/x86/Kconfig +++ b/drivers/platform/x86/Kconfig | |||
| @@ -42,6 +42,7 @@ config ASUS_LAPTOP | |||
| 42 | depends on LEDS_CLASS | 42 | depends on LEDS_CLASS |
| 43 | depends on NEW_LEDS | 43 | depends on NEW_LEDS |
| 44 | depends on BACKLIGHT_CLASS_DEVICE | 44 | depends on BACKLIGHT_CLASS_DEVICE |
| 45 | depends on INPUT | ||
| 45 | ---help--- | 46 | ---help--- |
| 46 | This is the new Linux driver for Asus laptops. It may also support some | 47 | This is the new Linux driver for Asus laptops. It may also support some |
| 47 | MEDION, JVC or VICTOR laptops. It makes all the extra buttons generate | 48 | MEDION, JVC or VICTOR laptops. It makes all the extra buttons generate |
| @@ -61,6 +62,7 @@ config DELL_LAPTOP | |||
| 61 | depends on EXPERIMENTAL | 62 | depends on EXPERIMENTAL |
| 62 | depends on BACKLIGHT_CLASS_DEVICE | 63 | depends on BACKLIGHT_CLASS_DEVICE |
| 63 | depends on RFKILL | 64 | depends on RFKILL |
| 65 | depends on POWER_SUPPLY | ||
| 64 | default n | 66 | default n |
| 65 | ---help--- | 67 | ---help--- |
| 66 | This driver adds support for rfkill and backlight control to Dell | 68 | This driver adds support for rfkill and backlight control to Dell |
| @@ -300,6 +302,7 @@ config INTEL_MENLOW | |||
| 300 | config EEEPC_LAPTOP | 302 | config EEEPC_LAPTOP |
| 301 | tristate "Eee PC Hotkey Driver (EXPERIMENTAL)" | 303 | tristate "Eee PC Hotkey Driver (EXPERIMENTAL)" |
| 302 | depends on ACPI | 304 | depends on ACPI |
| 305 | depends on INPUT | ||
| 303 | depends on EXPERIMENTAL | 306 | depends on EXPERIMENTAL |
| 304 | select BACKLIGHT_CLASS_DEVICE | 307 | select BACKLIGHT_CLASS_DEVICE |
| 305 | select HWMON | 308 | select HWMON |
diff --git a/drivers/platform/x86/asus-laptop.c b/drivers/platform/x86/asus-laptop.c index 8fb8b3591048..56af6cf385b0 100644 --- a/drivers/platform/x86/asus-laptop.c +++ b/drivers/platform/x86/asus-laptop.c | |||
| @@ -46,6 +46,7 @@ | |||
| 46 | #include <acpi/acpi_drivers.h> | 46 | #include <acpi/acpi_drivers.h> |
| 47 | #include <acpi/acpi_bus.h> | 47 | #include <acpi/acpi_bus.h> |
| 48 | #include <asm/uaccess.h> | 48 | #include <asm/uaccess.h> |
| 49 | #include <linux/input.h> | ||
| 49 | 50 | ||
| 50 | #define ASUS_LAPTOP_VERSION "0.42" | 51 | #define ASUS_LAPTOP_VERSION "0.42" |
| 51 | 52 | ||
| @@ -181,6 +182,8 @@ struct asus_hotk { | |||
| 181 | u8 light_level; //light sensor level | 182 | u8 light_level; //light sensor level |
| 182 | u8 light_switch; //light sensor switch value | 183 | u8 light_switch; //light sensor switch value |
| 183 | u16 event_count[128]; //count for each event TODO make this better | 184 | u16 event_count[128]; //count for each event TODO make this better |
| 185 | struct input_dev *inputdev; | ||
| 186 | u16 *keycode_map; | ||
| 184 | }; | 187 | }; |
| 185 | 188 | ||
| 186 | /* | 189 | /* |
| @@ -250,6 +253,37 @@ ASUS_LED(rled, "record"); | |||
| 250 | ASUS_LED(pled, "phone"); | 253 | ASUS_LED(pled, "phone"); |
| 251 | ASUS_LED(gled, "gaming"); | 254 | ASUS_LED(gled, "gaming"); |
| 252 | 255 | ||
| 256 | struct key_entry { | ||
| 257 | char type; | ||
| 258 | u8 code; | ||
| 259 | u16 keycode; | ||
| 260 | }; | ||
| 261 | |||
| 262 | enum { KE_KEY, KE_END }; | ||
| 263 | |||
| 264 | static struct key_entry asus_keymap[] = { | ||
| 265 | {KE_KEY, 0x30, KEY_VOLUMEUP}, | ||
| 266 | {KE_KEY, 0x31, KEY_VOLUMEDOWN}, | ||
| 267 | {KE_KEY, 0x32, KEY_MUTE}, | ||
| 268 | {KE_KEY, 0x33, KEY_SWITCHVIDEOMODE}, | ||
| 269 | {KE_KEY, 0x34, KEY_SWITCHVIDEOMODE}, | ||
| 270 | {KE_KEY, 0x40, KEY_PREVIOUSSONG}, | ||
| 271 | {KE_KEY, 0x41, KEY_NEXTSONG}, | ||
| 272 | {KE_KEY, 0x43, KEY_STOP}, | ||
| 273 | {KE_KEY, 0x45, KEY_PLAYPAUSE}, | ||
| 274 | {KE_KEY, 0x50, KEY_EMAIL}, | ||
| 275 | {KE_KEY, 0x51, KEY_WWW}, | ||
| 276 | {KE_KEY, 0x5C, BTN_EXTRA}, /* Performance */ | ||
| 277 | {KE_KEY, 0x5D, KEY_WLAN}, | ||
| 278 | {KE_KEY, 0x61, KEY_SWITCHVIDEOMODE}, | ||
| 279 | {KE_KEY, 0x6B, BTN_TOUCH}, /* Lock Mouse */ | ||
| 280 | {KE_KEY, 0x82, KEY_CAMERA}, | ||
| 281 | {KE_KEY, 0x8A, KEY_TV}, | ||
| 282 | {KE_KEY, 0x95, KEY_MEDIA}, | ||
| 283 | {KE_KEY, 0x99, KEY_PHONE}, | ||
| 284 | {KE_END, 0}, | ||
| 285 | }; | ||
| 286 | |||
| 253 | /* | 287 | /* |
| 254 | * This function evaluates an ACPI method, given an int as parameter, the | 288 | * This function evaluates an ACPI method, given an int as parameter, the |
| 255 | * method is searched within the scope of the handle, can be NULL. The output | 289 | * method is searched within the scope of the handle, can be NULL. The output |
| @@ -720,8 +754,68 @@ static ssize_t store_gps(struct device *dev, struct device_attribute *attr, | |||
| 720 | return store_status(buf, count, NULL, GPS_ON); | 754 | return store_status(buf, count, NULL, GPS_ON); |
| 721 | } | 755 | } |
| 722 | 756 | ||
| 757 | /* | ||
| 758 | * Hotkey functions | ||
| 759 | */ | ||
| 760 | static struct key_entry *asus_get_entry_by_scancode(int code) | ||
| 761 | { | ||
| 762 | struct key_entry *key; | ||
| 763 | |||
| 764 | for (key = asus_keymap; key->type != KE_END; key++) | ||
| 765 | if (code == key->code) | ||
| 766 | return key; | ||
| 767 | |||
| 768 | return NULL; | ||
| 769 | } | ||
| 770 | |||
| 771 | static struct key_entry *asus_get_entry_by_keycode(int code) | ||
| 772 | { | ||
| 773 | struct key_entry *key; | ||
| 774 | |||
| 775 | for (key = asus_keymap; key->type != KE_END; key++) | ||
| 776 | if (code == key->keycode && key->type == KE_KEY) | ||
| 777 | return key; | ||
| 778 | |||
| 779 | return NULL; | ||
| 780 | } | ||
| 781 | |||
| 782 | static int asus_getkeycode(struct input_dev *dev, int scancode, int *keycode) | ||
| 783 | { | ||
| 784 | struct key_entry *key = asus_get_entry_by_scancode(scancode); | ||
| 785 | |||
| 786 | if (key && key->type == KE_KEY) { | ||
| 787 | *keycode = key->keycode; | ||
| 788 | return 0; | ||
| 789 | } | ||
| 790 | |||
| 791 | return -EINVAL; | ||
| 792 | } | ||
| 793 | |||
| 794 | static int asus_setkeycode(struct input_dev *dev, int scancode, int keycode) | ||
| 795 | { | ||
| 796 | struct key_entry *key; | ||
| 797 | int old_keycode; | ||
| 798 | |||
| 799 | if (keycode < 0 || keycode > KEY_MAX) | ||
| 800 | return -EINVAL; | ||
| 801 | |||
| 802 | key = asus_get_entry_by_scancode(scancode); | ||
| 803 | if (key && key->type == KE_KEY) { | ||
| 804 | old_keycode = key->keycode; | ||
| 805 | key->keycode = keycode; | ||
| 806 | set_bit(keycode, dev->keybit); | ||
| 807 | if (!asus_get_entry_by_keycode(old_keycode)) | ||
| 808 | clear_bit(old_keycode, dev->keybit); | ||
| 809 | return 0; | ||
| 810 | } | ||
| 811 | |||
| 812 | return -EINVAL; | ||
| 813 | } | ||
| 814 | |||
| 723 | static void asus_hotk_notify(acpi_handle handle, u32 event, void *data) | 815 | static void asus_hotk_notify(acpi_handle handle, u32 event, void *data) |
| 724 | { | 816 | { |
| 817 | static struct key_entry *key; | ||
| 818 | |||
| 725 | /* TODO Find a better way to handle events count. */ | 819 | /* TODO Find a better way to handle events count. */ |
| 726 | if (!hotk) | 820 | if (!hotk) |
| 727 | return; | 821 | return; |
| @@ -738,10 +832,24 @@ static void asus_hotk_notify(acpi_handle handle, u32 event, void *data) | |||
| 738 | lcd_blank(FB_BLANK_POWERDOWN); | 832 | lcd_blank(FB_BLANK_POWERDOWN); |
| 739 | } | 833 | } |
| 740 | 834 | ||
| 741 | acpi_bus_generate_proc_event(hotk->device, event, | 835 | acpi_bus_generate_netlink_event(hotk->device->pnp.device_class, |
| 742 | hotk->event_count[event % 128]++); | 836 | dev_name(&hotk->device->dev), event, |
| 743 | 837 | hotk->event_count[event % 128]++); | |
| 744 | return; | 838 | |
| 839 | if (hotk->inputdev) { | ||
| 840 | key = asus_get_entry_by_scancode(event); | ||
| 841 | if (!key) | ||
| 842 | return ; | ||
| 843 | |||
| 844 | switch (key->type) { | ||
| 845 | case KE_KEY: | ||
| 846 | input_report_key(hotk->inputdev, key->keycode, 1); | ||
| 847 | input_sync(hotk->inputdev); | ||
| 848 | input_report_key(hotk->inputdev, key->keycode, 0); | ||
| 849 | input_sync(hotk->inputdev); | ||
| 850 | break; | ||
| 851 | } | ||
| 852 | } | ||
| 745 | } | 853 | } |
| 746 | 854 | ||
| 747 | #define ASUS_CREATE_DEVICE_ATTR(_name) \ | 855 | #define ASUS_CREATE_DEVICE_ATTR(_name) \ |
| @@ -959,6 +1067,38 @@ static int asus_hotk_get_info(void) | |||
| 959 | return AE_OK; | 1067 | return AE_OK; |
| 960 | } | 1068 | } |
| 961 | 1069 | ||
| 1070 | static int asus_input_init(void) | ||
| 1071 | { | ||
| 1072 | const struct key_entry *key; | ||
| 1073 | int result; | ||
| 1074 | |||
| 1075 | hotk->inputdev = input_allocate_device(); | ||
| 1076 | if (!hotk->inputdev) { | ||
| 1077 | printk(ASUS_INFO "Unable to allocate input device\n"); | ||
| 1078 | return 0; | ||
| 1079 | } | ||
| 1080 | hotk->inputdev->name = "Asus Laptop extra buttons"; | ||
| 1081 | hotk->inputdev->phys = ASUS_HOTK_FILE "/input0"; | ||
| 1082 | hotk->inputdev->id.bustype = BUS_HOST; | ||
| 1083 | hotk->inputdev->getkeycode = asus_getkeycode; | ||
| 1084 | hotk->inputdev->setkeycode = asus_setkeycode; | ||
| 1085 | |||
| 1086 | for (key = asus_keymap; key->type != KE_END; key++) { | ||
| 1087 | switch (key->type) { | ||
| 1088 | case KE_KEY: | ||
| 1089 | set_bit(EV_KEY, hotk->inputdev->evbit); | ||
| 1090 | set_bit(key->keycode, hotk->inputdev->keybit); | ||
| 1091 | break; | ||
| 1092 | } | ||
| 1093 | } | ||
| 1094 | result = input_register_device(hotk->inputdev); | ||
| 1095 | if (result) { | ||
| 1096 | printk(ASUS_INFO "Unable to register input device\n"); | ||
| 1097 | input_free_device(hotk->inputdev); | ||
| 1098 | } | ||
| 1099 | return result; | ||
| 1100 | } | ||
| 1101 | |||
| 962 | static int asus_hotk_check(void) | 1102 | static int asus_hotk_check(void) |
| 963 | { | 1103 | { |
| 964 | int result = 0; | 1104 | int result = 0; |
| @@ -1044,7 +1184,7 @@ static int asus_hotk_add(struct acpi_device *device) | |||
| 1044 | /* GPS is on by default */ | 1184 | /* GPS is on by default */ |
| 1045 | write_status(NULL, 1, GPS_ON); | 1185 | write_status(NULL, 1, GPS_ON); |
| 1046 | 1186 | ||
| 1047 | end: | 1187 | end: |
| 1048 | if (result) { | 1188 | if (result) { |
| 1049 | kfree(hotk->name); | 1189 | kfree(hotk->name); |
| 1050 | kfree(hotk); | 1190 | kfree(hotk); |
| @@ -1091,10 +1231,17 @@ static void asus_led_exit(void) | |||
| 1091 | ASUS_LED_UNREGISTER(gled); | 1231 | ASUS_LED_UNREGISTER(gled); |
| 1092 | } | 1232 | } |
| 1093 | 1233 | ||
| 1234 | static void asus_input_exit(void) | ||
| 1235 | { | ||
| 1236 | if (hotk->inputdev) | ||
| 1237 | input_unregister_device(hotk->inputdev); | ||
| 1238 | } | ||
| 1239 | |||
| 1094 | static void __exit asus_laptop_exit(void) | 1240 | static void __exit asus_laptop_exit(void) |
| 1095 | { | 1241 | { |
| 1096 | asus_backlight_exit(); | 1242 | asus_backlight_exit(); |
| 1097 | asus_led_exit(); | 1243 | asus_led_exit(); |
| 1244 | asus_input_exit(); | ||
| 1098 | 1245 | ||
| 1099 | acpi_bus_unregister_driver(&asus_hotk_driver); | 1246 | acpi_bus_unregister_driver(&asus_hotk_driver); |
| 1100 | sysfs_remove_group(&asuspf_device->dev.kobj, &asuspf_attribute_group); | 1247 | sysfs_remove_group(&asuspf_device->dev.kobj, &asuspf_attribute_group); |
| @@ -1216,6 +1363,10 @@ static int __init asus_laptop_init(void) | |||
| 1216 | printk(ASUS_INFO "Brightness ignored, must be controlled by " | 1363 | printk(ASUS_INFO "Brightness ignored, must be controlled by " |
| 1217 | "ACPI video driver\n"); | 1364 | "ACPI video driver\n"); |
| 1218 | 1365 | ||
| 1366 | result = asus_input_init(); | ||
| 1367 | if (result) | ||
| 1368 | goto fail_input; | ||
| 1369 | |||
| 1219 | result = asus_led_init(dev); | 1370 | result = asus_led_init(dev); |
| 1220 | if (result) | 1371 | if (result) |
| 1221 | goto fail_led; | 1372 | goto fail_led; |
| @@ -1242,22 +1393,25 @@ static int __init asus_laptop_init(void) | |||
| 1242 | 1393 | ||
| 1243 | return 0; | 1394 | return 0; |
| 1244 | 1395 | ||
| 1245 | fail_sysfs: | 1396 | fail_sysfs: |
| 1246 | platform_device_del(asuspf_device); | 1397 | platform_device_del(asuspf_device); |
| 1247 | 1398 | ||
| 1248 | fail_platform_device2: | 1399 | fail_platform_device2: |
| 1249 | platform_device_put(asuspf_device); | 1400 | platform_device_put(asuspf_device); |
| 1250 | 1401 | ||
| 1251 | fail_platform_device1: | 1402 | fail_platform_device1: |
| 1252 | platform_driver_unregister(&asuspf_driver); | 1403 | platform_driver_unregister(&asuspf_driver); |
| 1253 | 1404 | ||
| 1254 | fail_platform_driver: | 1405 | fail_platform_driver: |
| 1255 | asus_led_exit(); | 1406 | asus_led_exit(); |
| 1256 | 1407 | ||
| 1257 | fail_led: | 1408 | fail_led: |
| 1409 | asus_input_exit(); | ||
| 1410 | |||
| 1411 | fail_input: | ||
| 1258 | asus_backlight_exit(); | 1412 | asus_backlight_exit(); |
| 1259 | 1413 | ||
| 1260 | fail_backlight: | 1414 | fail_backlight: |
| 1261 | 1415 | ||
| 1262 | return result; | 1416 | return result; |
| 1263 | } | 1417 | } |
diff --git a/drivers/platform/x86/asus_acpi.c b/drivers/platform/x86/asus_acpi.c index 1e74988c7b2d..d63f26e666a4 100644 --- a/drivers/platform/x86/asus_acpi.c +++ b/drivers/platform/x86/asus_acpi.c | |||
| @@ -143,6 +143,7 @@ struct asus_hotk { | |||
| 143 | S1300N, S5200N*/ | 143 | S1300N, S5200N*/ |
| 144 | A4S, /* Z81sp */ | 144 | A4S, /* Z81sp */ |
| 145 | F3Sa, /* (Centrino) */ | 145 | F3Sa, /* (Centrino) */ |
| 146 | R1F, | ||
| 146 | END_MODEL | 147 | END_MODEL |
| 147 | } model; /* Models currently supported */ | 148 | } model; /* Models currently supported */ |
| 148 | u16 event_count[128]; /* Count for each event TODO make this better */ | 149 | u16 event_count[128]; /* Count for each event TODO make this better */ |
| @@ -420,7 +421,18 @@ static struct model_data model_conf[END_MODEL] = { | |||
| 420 | .display_get = "\\ADVG", | 421 | .display_get = "\\ADVG", |
| 421 | .display_set = "SDSP", | 422 | .display_set = "SDSP", |
| 422 | }, | 423 | }, |
| 423 | 424 | { | |
| 425 | .name = "R1F", | ||
| 426 | .mt_bt_switch = "BLED", | ||
| 427 | .mt_mled = "MLED", | ||
| 428 | .mt_wled = "WLED", | ||
| 429 | .mt_lcd_switch = "\\Q10", | ||
| 430 | .lcd_status = "\\GP06", | ||
| 431 | .brightness_set = "SPLV", | ||
| 432 | .brightness_get = "GPLV", | ||
| 433 | .display_set = "SDSP", | ||
| 434 | .display_get = "\\INFB" | ||
| 435 | } | ||
| 424 | }; | 436 | }; |
| 425 | 437 | ||
| 426 | /* procdir we use */ | 438 | /* procdir we use */ |
| @@ -1165,6 +1177,8 @@ static int asus_model_match(char *model) | |||
| 1165 | return W3V; | 1177 | return W3V; |
| 1166 | else if (strncmp(model, "W5A", 3) == 0) | 1178 | else if (strncmp(model, "W5A", 3) == 0) |
| 1167 | return W5A; | 1179 | return W5A; |
| 1180 | else if (strncmp(model, "R1F", 3) == 0) | ||
| 1181 | return R1F; | ||
| 1168 | else if (strncmp(model, "A4S", 3) == 0) | 1182 | else if (strncmp(model, "A4S", 3) == 0) |
| 1169 | return A4S; | 1183 | return A4S; |
| 1170 | else if (strncmp(model, "F3Sa", 4) == 0) | 1184 | else if (strncmp(model, "F3Sa", 4) == 0) |
diff --git a/drivers/platform/x86/eeepc-laptop.c b/drivers/platform/x86/eeepc-laptop.c index 9d93cb971e59..786ed8661cb0 100644 --- a/drivers/platform/x86/eeepc-laptop.c +++ b/drivers/platform/x86/eeepc-laptop.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <linux/uaccess.h> | 30 | #include <linux/uaccess.h> |
| 31 | #include <linux/input.h> | 31 | #include <linux/input.h> |
| 32 | #include <linux/rfkill.h> | 32 | #include <linux/rfkill.h> |
| 33 | #include <linux/pci.h> | ||
| 33 | 34 | ||
| 34 | #define EEEPC_LAPTOP_VERSION "0.1" | 35 | #define EEEPC_LAPTOP_VERSION "0.1" |
| 35 | 36 | ||
| @@ -161,6 +162,10 @@ static struct key_entry eeepc_keymap[] = { | |||
| 161 | {KE_KEY, 0x13, KEY_MUTE }, | 162 | {KE_KEY, 0x13, KEY_MUTE }, |
| 162 | {KE_KEY, 0x14, KEY_VOLUMEDOWN }, | 163 | {KE_KEY, 0x14, KEY_VOLUMEDOWN }, |
| 163 | {KE_KEY, 0x15, KEY_VOLUMEUP }, | 164 | {KE_KEY, 0x15, KEY_VOLUMEUP }, |
| 165 | {KE_KEY, 0x1a, KEY_COFFEE }, | ||
| 166 | {KE_KEY, 0x1b, KEY_ZOOM }, | ||
| 167 | {KE_KEY, 0x1c, KEY_PROG2 }, | ||
| 168 | {KE_KEY, 0x1d, KEY_PROG3 }, | ||
| 164 | {KE_KEY, 0x30, KEY_SWITCHVIDEOMODE }, | 169 | {KE_KEY, 0x30, KEY_SWITCHVIDEOMODE }, |
| 165 | {KE_KEY, 0x31, KEY_SWITCHVIDEOMODE }, | 170 | {KE_KEY, 0x31, KEY_SWITCHVIDEOMODE }, |
| 166 | {KE_KEY, 0x32, KEY_SWITCHVIDEOMODE }, | 171 | {KE_KEY, 0x32, KEY_SWITCHVIDEOMODE }, |
| @@ -510,7 +515,43 @@ static int eeepc_hotk_check(void) | |||
| 510 | static void notify_brn(void) | 515 | static void notify_brn(void) |
| 511 | { | 516 | { |
| 512 | struct backlight_device *bd = eeepc_backlight_device; | 517 | struct backlight_device *bd = eeepc_backlight_device; |
| 513 | bd->props.brightness = read_brightness(bd); | 518 | if (bd) |
| 519 | bd->props.brightness = read_brightness(bd); | ||
| 520 | } | ||
| 521 | |||
| 522 | static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data) | ||
| 523 | { | ||
| 524 | struct pci_dev *dev; | ||
| 525 | struct pci_bus *bus = pci_find_bus(0, 1); | ||
| 526 | |||
| 527 | if (event != ACPI_NOTIFY_BUS_CHECK) | ||
| 528 | return; | ||
| 529 | |||
| 530 | if (!bus) { | ||
| 531 | printk(EEEPC_WARNING "Unable to find PCI bus 1?\n"); | ||
| 532 | return; | ||
| 533 | } | ||
| 534 | |||
| 535 | if (get_acpi(CM_ASL_WLAN) == 1) { | ||
| 536 | dev = pci_get_slot(bus, 0); | ||
| 537 | if (dev) { | ||
| 538 | /* Device already present */ | ||
| 539 | pci_dev_put(dev); | ||
| 540 | return; | ||
| 541 | } | ||
| 542 | dev = pci_scan_single_device(bus, 0); | ||
| 543 | if (dev) { | ||
| 544 | pci_bus_assign_resources(bus); | ||
| 545 | if (pci_bus_add_device(dev)) | ||
| 546 | printk(EEEPC_ERR "Unable to hotplug wifi\n"); | ||
| 547 | } | ||
| 548 | } else { | ||
| 549 | dev = pci_get_slot(bus, 0); | ||
| 550 | if (dev) { | ||
| 551 | pci_remove_bus_device(dev); | ||
| 552 | pci_dev_put(dev); | ||
| 553 | } | ||
| 554 | } | ||
| 514 | } | 555 | } |
| 515 | 556 | ||
| 516 | static void eeepc_hotk_notify(acpi_handle handle, u32 event, void *data) | 557 | static void eeepc_hotk_notify(acpi_handle handle, u32 event, void *data) |
| @@ -520,8 +561,9 @@ static void eeepc_hotk_notify(acpi_handle handle, u32 event, void *data) | |||
| 520 | return; | 561 | return; |
| 521 | if (event >= NOTIFY_BRN_MIN && event <= NOTIFY_BRN_MAX) | 562 | if (event >= NOTIFY_BRN_MIN && event <= NOTIFY_BRN_MAX) |
| 522 | notify_brn(); | 563 | notify_brn(); |
| 523 | acpi_bus_generate_proc_event(ehotk->device, event, | 564 | acpi_bus_generate_netlink_event(ehotk->device->pnp.device_class, |
| 524 | ehotk->event_count[event % 128]++); | 565 | dev_name(&ehotk->device->dev), event, |
| 566 | ehotk->event_count[event % 128]++); | ||
| 525 | if (ehotk->inputdev) { | 567 | if (ehotk->inputdev) { |
| 526 | key = eepc_get_entry_by_scancode(event); | 568 | key = eepc_get_entry_by_scancode(event); |
| 527 | if (key) { | 569 | if (key) { |
| @@ -539,6 +581,45 @@ static void eeepc_hotk_notify(acpi_handle handle, u32 event, void *data) | |||
| 539 | } | 581 | } |
| 540 | } | 582 | } |
| 541 | 583 | ||
| 584 | static int eeepc_register_rfkill_notifier(char *node) | ||
| 585 | { | ||
| 586 | acpi_status status = AE_OK; | ||
| 587 | acpi_handle handle; | ||
| 588 | |||
| 589 | status = acpi_get_handle(NULL, node, &handle); | ||
| 590 | |||
| 591 | if (ACPI_SUCCESS(status)) { | ||
| 592 | status = acpi_install_notify_handler(handle, | ||
| 593 | ACPI_SYSTEM_NOTIFY, | ||
| 594 | eeepc_rfkill_notify, | ||
| 595 | NULL); | ||
| 596 | if (ACPI_FAILURE(status)) | ||
| 597 | printk(EEEPC_WARNING | ||
| 598 | "Failed to register notify on %s\n", node); | ||
| 599 | } else | ||
| 600 | return -ENODEV; | ||
| 601 | |||
| 602 | return 0; | ||
| 603 | } | ||
| 604 | |||
| 605 | static void eeepc_unregister_rfkill_notifier(char *node) | ||
| 606 | { | ||
| 607 | acpi_status status = AE_OK; | ||
| 608 | acpi_handle handle; | ||
| 609 | |||
| 610 | status = acpi_get_handle(NULL, node, &handle); | ||
| 611 | |||
| 612 | if (ACPI_SUCCESS(status)) { | ||
| 613 | status = acpi_remove_notify_handler(handle, | ||
| 614 | ACPI_SYSTEM_NOTIFY, | ||
| 615 | eeepc_rfkill_notify); | ||
| 616 | if (ACPI_FAILURE(status)) | ||
| 617 | printk(EEEPC_ERR | ||
| 618 | "Error removing rfkill notify handler %s\n", | ||
| 619 | node); | ||
| 620 | } | ||
| 621 | } | ||
| 622 | |||
| 542 | static int eeepc_hotk_add(struct acpi_device *device) | 623 | static int eeepc_hotk_add(struct acpi_device *device) |
| 543 | { | 624 | { |
| 544 | acpi_status status = AE_OK; | 625 | acpi_status status = AE_OK; |
| @@ -558,7 +639,7 @@ static int eeepc_hotk_add(struct acpi_device *device) | |||
| 558 | ehotk->device = device; | 639 | ehotk->device = device; |
| 559 | result = eeepc_hotk_check(); | 640 | result = eeepc_hotk_check(); |
| 560 | if (result) | 641 | if (result) |
| 561 | goto end; | 642 | goto ehotk_fail; |
| 562 | status = acpi_install_notify_handler(ehotk->handle, ACPI_SYSTEM_NOTIFY, | 643 | status = acpi_install_notify_handler(ehotk->handle, ACPI_SYSTEM_NOTIFY, |
| 563 | eeepc_hotk_notify, ehotk); | 644 | eeepc_hotk_notify, ehotk); |
| 564 | if (ACPI_FAILURE(status)) | 645 | if (ACPI_FAILURE(status)) |
| @@ -569,18 +650,25 @@ static int eeepc_hotk_add(struct acpi_device *device) | |||
| 569 | RFKILL_TYPE_WLAN); | 650 | RFKILL_TYPE_WLAN); |
| 570 | 651 | ||
| 571 | if (!ehotk->eeepc_wlan_rfkill) | 652 | if (!ehotk->eeepc_wlan_rfkill) |
| 572 | goto end; | 653 | goto wlan_fail; |
| 573 | 654 | ||
| 574 | ehotk->eeepc_wlan_rfkill->name = "eeepc-wlan"; | 655 | ehotk->eeepc_wlan_rfkill->name = "eeepc-wlan"; |
| 575 | ehotk->eeepc_wlan_rfkill->toggle_radio = eeepc_wlan_rfkill_set; | 656 | ehotk->eeepc_wlan_rfkill->toggle_radio = eeepc_wlan_rfkill_set; |
| 576 | ehotk->eeepc_wlan_rfkill->get_state = eeepc_wlan_rfkill_state; | 657 | ehotk->eeepc_wlan_rfkill->get_state = eeepc_wlan_rfkill_state; |
| 577 | if (get_acpi(CM_ASL_WLAN) == 1) | 658 | if (get_acpi(CM_ASL_WLAN) == 1) { |
| 578 | ehotk->eeepc_wlan_rfkill->state = | 659 | ehotk->eeepc_wlan_rfkill->state = |
| 579 | RFKILL_STATE_UNBLOCKED; | 660 | RFKILL_STATE_UNBLOCKED; |
| 580 | else | 661 | rfkill_set_default(RFKILL_TYPE_WLAN, |
| 662 | RFKILL_STATE_UNBLOCKED); | ||
| 663 | } else { | ||
| 581 | ehotk->eeepc_wlan_rfkill->state = | 664 | ehotk->eeepc_wlan_rfkill->state = |
| 582 | RFKILL_STATE_SOFT_BLOCKED; | 665 | RFKILL_STATE_SOFT_BLOCKED; |
| 583 | rfkill_register(ehotk->eeepc_wlan_rfkill); | 666 | rfkill_set_default(RFKILL_TYPE_WLAN, |
| 667 | RFKILL_STATE_SOFT_BLOCKED); | ||
| 668 | } | ||
| 669 | result = rfkill_register(ehotk->eeepc_wlan_rfkill); | ||
| 670 | if (result) | ||
| 671 | goto wlan_fail; | ||
| 584 | } | 672 | } |
| 585 | 673 | ||
| 586 | if (get_acpi(CM_ASL_BLUETOOTH) != -1) { | 674 | if (get_acpi(CM_ASL_BLUETOOTH) != -1) { |
| @@ -588,27 +676,47 @@ static int eeepc_hotk_add(struct acpi_device *device) | |||
| 588 | rfkill_allocate(&device->dev, RFKILL_TYPE_BLUETOOTH); | 676 | rfkill_allocate(&device->dev, RFKILL_TYPE_BLUETOOTH); |
| 589 | 677 | ||
| 590 | if (!ehotk->eeepc_bluetooth_rfkill) | 678 | if (!ehotk->eeepc_bluetooth_rfkill) |
| 591 | goto end; | 679 | goto bluetooth_fail; |
| 592 | 680 | ||
| 593 | ehotk->eeepc_bluetooth_rfkill->name = "eeepc-bluetooth"; | 681 | ehotk->eeepc_bluetooth_rfkill->name = "eeepc-bluetooth"; |
| 594 | ehotk->eeepc_bluetooth_rfkill->toggle_radio = | 682 | ehotk->eeepc_bluetooth_rfkill->toggle_radio = |
| 595 | eeepc_bluetooth_rfkill_set; | 683 | eeepc_bluetooth_rfkill_set; |
| 596 | ehotk->eeepc_bluetooth_rfkill->get_state = | 684 | ehotk->eeepc_bluetooth_rfkill->get_state = |
| 597 | eeepc_bluetooth_rfkill_state; | 685 | eeepc_bluetooth_rfkill_state; |
| 598 | if (get_acpi(CM_ASL_BLUETOOTH) == 1) | 686 | if (get_acpi(CM_ASL_BLUETOOTH) == 1) { |
| 599 | ehotk->eeepc_bluetooth_rfkill->state = | 687 | ehotk->eeepc_bluetooth_rfkill->state = |
| 600 | RFKILL_STATE_UNBLOCKED; | 688 | RFKILL_STATE_UNBLOCKED; |
| 601 | else | 689 | rfkill_set_default(RFKILL_TYPE_BLUETOOTH, |
| 690 | RFKILL_STATE_UNBLOCKED); | ||
| 691 | } else { | ||
| 602 | ehotk->eeepc_bluetooth_rfkill->state = | 692 | ehotk->eeepc_bluetooth_rfkill->state = |
| 603 | RFKILL_STATE_SOFT_BLOCKED; | 693 | RFKILL_STATE_SOFT_BLOCKED; |
| 604 | rfkill_register(ehotk->eeepc_bluetooth_rfkill); | 694 | rfkill_set_default(RFKILL_TYPE_BLUETOOTH, |
| 605 | } | 695 | RFKILL_STATE_SOFT_BLOCKED); |
| 696 | } | ||
| 606 | 697 | ||
| 607 | end: | 698 | result = rfkill_register(ehotk->eeepc_bluetooth_rfkill); |
| 608 | if (result) { | 699 | if (result) |
| 609 | kfree(ehotk); | 700 | goto bluetooth_fail; |
| 610 | ehotk = NULL; | ||
| 611 | } | 701 | } |
| 702 | |||
| 703 | eeepc_register_rfkill_notifier("\\_SB.PCI0.P0P6"); | ||
| 704 | eeepc_register_rfkill_notifier("\\_SB.PCI0.P0P7"); | ||
| 705 | |||
| 706 | return 0; | ||
| 707 | |||
| 708 | bluetooth_fail: | ||
| 709 | if (ehotk->eeepc_bluetooth_rfkill) | ||
| 710 | rfkill_free(ehotk->eeepc_bluetooth_rfkill); | ||
| 711 | rfkill_unregister(ehotk->eeepc_wlan_rfkill); | ||
| 712 | ehotk->eeepc_wlan_rfkill = NULL; | ||
| 713 | wlan_fail: | ||
| 714 | if (ehotk->eeepc_wlan_rfkill) | ||
| 715 | rfkill_free(ehotk->eeepc_wlan_rfkill); | ||
| 716 | ehotk_fail: | ||
| 717 | kfree(ehotk); | ||
| 718 | ehotk = NULL; | ||
| 719 | |||
| 612 | return result; | 720 | return result; |
| 613 | } | 721 | } |
| 614 | 722 | ||
| @@ -622,6 +730,10 @@ static int eeepc_hotk_remove(struct acpi_device *device, int type) | |||
| 622 | eeepc_hotk_notify); | 730 | eeepc_hotk_notify); |
| 623 | if (ACPI_FAILURE(status)) | 731 | if (ACPI_FAILURE(status)) |
| 624 | printk(EEEPC_ERR "Error removing notify handler\n"); | 732 | printk(EEEPC_ERR "Error removing notify handler\n"); |
| 733 | |||
| 734 | eeepc_unregister_rfkill_notifier("\\_SB.PCI0.P0P6"); | ||
| 735 | eeepc_unregister_rfkill_notifier("\\_SB.PCI0.P0P7"); | ||
| 736 | |||
| 625 | kfree(ehotk); | 737 | kfree(ehotk); |
| 626 | return 0; | 738 | return 0; |
| 627 | } | 739 | } |
| @@ -737,13 +849,21 @@ static void eeepc_backlight_exit(void) | |||
| 737 | { | 849 | { |
| 738 | if (eeepc_backlight_device) | 850 | if (eeepc_backlight_device) |
| 739 | backlight_device_unregister(eeepc_backlight_device); | 851 | backlight_device_unregister(eeepc_backlight_device); |
| 740 | if (ehotk->inputdev) | 852 | eeepc_backlight_device = NULL; |
| 741 | input_unregister_device(ehotk->inputdev); | 853 | } |
| 854 | |||
| 855 | static void eeepc_rfkill_exit(void) | ||
| 856 | { | ||
| 742 | if (ehotk->eeepc_wlan_rfkill) | 857 | if (ehotk->eeepc_wlan_rfkill) |
| 743 | rfkill_unregister(ehotk->eeepc_wlan_rfkill); | 858 | rfkill_unregister(ehotk->eeepc_wlan_rfkill); |
| 744 | if (ehotk->eeepc_bluetooth_rfkill) | 859 | if (ehotk->eeepc_bluetooth_rfkill) |
| 745 | rfkill_unregister(ehotk->eeepc_bluetooth_rfkill); | 860 | rfkill_unregister(ehotk->eeepc_bluetooth_rfkill); |
| 746 | eeepc_backlight_device = NULL; | 861 | } |
| 862 | |||
| 863 | static void eeepc_input_exit(void) | ||
| 864 | { | ||
| 865 | if (ehotk->inputdev) | ||
| 866 | input_unregister_device(ehotk->inputdev); | ||
| 747 | } | 867 | } |
| 748 | 868 | ||
| 749 | static void eeepc_hwmon_exit(void) | 869 | static void eeepc_hwmon_exit(void) |
| @@ -762,6 +882,8 @@ static void eeepc_hwmon_exit(void) | |||
| 762 | static void __exit eeepc_laptop_exit(void) | 882 | static void __exit eeepc_laptop_exit(void) |
| 763 | { | 883 | { |
| 764 | eeepc_backlight_exit(); | 884 | eeepc_backlight_exit(); |
| 885 | eeepc_rfkill_exit(); | ||
| 886 | eeepc_input_exit(); | ||
| 765 | eeepc_hwmon_exit(); | 887 | eeepc_hwmon_exit(); |
| 766 | acpi_bus_unregister_driver(&eeepc_hotk_driver); | 888 | acpi_bus_unregister_driver(&eeepc_hotk_driver); |
| 767 | sysfs_remove_group(&platform_device->dev.kobj, | 889 | sysfs_remove_group(&platform_device->dev.kobj, |
| @@ -865,6 +987,8 @@ fail_platform_driver: | |||
| 865 | fail_hwmon: | 987 | fail_hwmon: |
| 866 | eeepc_backlight_exit(); | 988 | eeepc_backlight_exit(); |
| 867 | fail_backlight: | 989 | fail_backlight: |
| 990 | eeepc_input_exit(); | ||
| 991 | eeepc_rfkill_exit(); | ||
| 868 | return result; | 992 | return result; |
| 869 | } | 993 | } |
| 870 | 994 | ||
diff --git a/drivers/platform/x86/fujitsu-laptop.c b/drivers/platform/x86/fujitsu-laptop.c index 65dc41540c62..45940f31fe9e 100644 --- a/drivers/platform/x86/fujitsu-laptop.c +++ b/drivers/platform/x86/fujitsu-laptop.c | |||
| @@ -166,6 +166,7 @@ struct fujitsu_hotkey_t { | |||
| 166 | struct platform_device *pf_device; | 166 | struct platform_device *pf_device; |
| 167 | struct kfifo *fifo; | 167 | struct kfifo *fifo; |
| 168 | spinlock_t fifo_lock; | 168 | spinlock_t fifo_lock; |
| 169 | int rfkill_supported; | ||
| 169 | int rfkill_state; | 170 | int rfkill_state; |
| 170 | int logolamp_registered; | 171 | int logolamp_registered; |
| 171 | int kblamps_registered; | 172 | int kblamps_registered; |
| @@ -526,7 +527,7 @@ static ssize_t | |||
| 526 | show_lid_state(struct device *dev, | 527 | show_lid_state(struct device *dev, |
| 527 | struct device_attribute *attr, char *buf) | 528 | struct device_attribute *attr, char *buf) |
| 528 | { | 529 | { |
| 529 | if (fujitsu_hotkey->rfkill_state == UNSUPPORTED_CMD) | 530 | if (!(fujitsu_hotkey->rfkill_supported & 0x100)) |
| 530 | return sprintf(buf, "unknown\n"); | 531 | return sprintf(buf, "unknown\n"); |
| 531 | if (fujitsu_hotkey->rfkill_state & 0x100) | 532 | if (fujitsu_hotkey->rfkill_state & 0x100) |
| 532 | return sprintf(buf, "open\n"); | 533 | return sprintf(buf, "open\n"); |
| @@ -538,7 +539,7 @@ static ssize_t | |||
| 538 | show_dock_state(struct device *dev, | 539 | show_dock_state(struct device *dev, |
| 539 | struct device_attribute *attr, char *buf) | 540 | struct device_attribute *attr, char *buf) |
| 540 | { | 541 | { |
| 541 | if (fujitsu_hotkey->rfkill_state == UNSUPPORTED_CMD) | 542 | if (!(fujitsu_hotkey->rfkill_supported & 0x200)) |
| 542 | return sprintf(buf, "unknown\n"); | 543 | return sprintf(buf, "unknown\n"); |
| 543 | if (fujitsu_hotkey->rfkill_state & 0x200) | 544 | if (fujitsu_hotkey->rfkill_state & 0x200) |
| 544 | return sprintf(buf, "docked\n"); | 545 | return sprintf(buf, "docked\n"); |
| @@ -550,7 +551,7 @@ static ssize_t | |||
| 550 | show_radios_state(struct device *dev, | 551 | show_radios_state(struct device *dev, |
| 551 | struct device_attribute *attr, char *buf) | 552 | struct device_attribute *attr, char *buf) |
| 552 | { | 553 | { |
| 553 | if (fujitsu_hotkey->rfkill_state == UNSUPPORTED_CMD) | 554 | if (!(fujitsu_hotkey->rfkill_supported & 0x20)) |
| 554 | return sprintf(buf, "unknown\n"); | 555 | return sprintf(buf, "unknown\n"); |
| 555 | if (fujitsu_hotkey->rfkill_state & 0x20) | 556 | if (fujitsu_hotkey->rfkill_state & 0x20) |
| 556 | return sprintf(buf, "on\n"); | 557 | return sprintf(buf, "on\n"); |
| @@ -928,8 +929,17 @@ static int acpi_fujitsu_hotkey_add(struct acpi_device *device) | |||
| 928 | ; /* No action, result is discarded */ | 929 | ; /* No action, result is discarded */ |
| 929 | vdbg_printk(FUJLAPTOP_DBG_INFO, "Discarded %i ringbuffer entries\n", i); | 930 | vdbg_printk(FUJLAPTOP_DBG_INFO, "Discarded %i ringbuffer entries\n", i); |
| 930 | 931 | ||
| 931 | fujitsu_hotkey->rfkill_state = | 932 | fujitsu_hotkey->rfkill_supported = |
| 932 | call_fext_func(FUNC_RFKILL, 0x4, 0x0, 0x0); | 933 | call_fext_func(FUNC_RFKILL, 0x0, 0x0, 0x0); |
| 934 | |||
| 935 | /* Make sure our bitmask of supported functions is cleared if the | ||
| 936 | RFKILL function block is not implemented, like on the S7020. */ | ||
| 937 | if (fujitsu_hotkey->rfkill_supported == UNSUPPORTED_CMD) | ||
| 938 | fujitsu_hotkey->rfkill_supported = 0; | ||
| 939 | |||
| 940 | if (fujitsu_hotkey->rfkill_supported) | ||
| 941 | fujitsu_hotkey->rfkill_state = | ||
| 942 | call_fext_func(FUNC_RFKILL, 0x4, 0x0, 0x0); | ||
| 933 | 943 | ||
| 934 | /* Suspect this is a keymap of the application panel, print it */ | 944 | /* Suspect this is a keymap of the application panel, print it */ |
| 935 | printk(KERN_INFO "fujitsu-laptop: BTNI: [0x%x]\n", | 945 | printk(KERN_INFO "fujitsu-laptop: BTNI: [0x%x]\n", |
| @@ -1005,8 +1015,9 @@ static void acpi_fujitsu_hotkey_notify(acpi_handle handle, u32 event, | |||
| 1005 | 1015 | ||
| 1006 | input = fujitsu_hotkey->input; | 1016 | input = fujitsu_hotkey->input; |
| 1007 | 1017 | ||
| 1008 | fujitsu_hotkey->rfkill_state = | 1018 | if (fujitsu_hotkey->rfkill_supported) |
| 1009 | call_fext_func(FUNC_RFKILL, 0x4, 0x0, 0x0); | 1019 | fujitsu_hotkey->rfkill_state = |
| 1020 | call_fext_func(FUNC_RFKILL, 0x4, 0x0, 0x0); | ||
| 1010 | 1021 | ||
| 1011 | switch (event) { | 1022 | switch (event) { |
| 1012 | case ACPI_FUJITSU_NOTIFY_CODE1: | 1023 | case ACPI_FUJITSU_NOTIFY_CODE1: |
diff --git a/drivers/platform/x86/panasonic-laptop.c b/drivers/platform/x86/panasonic-laptop.c index f30db367c82e..c47a44dcb702 100644 --- a/drivers/platform/x86/panasonic-laptop.c +++ b/drivers/platform/x86/panasonic-laptop.c | |||
| @@ -507,7 +507,7 @@ static void acpi_pcc_generate_keyinput(struct pcc_acpi *pcc) | |||
| 507 | 507 | ||
| 508 | hkey_num = result & 0xf; | 508 | hkey_num = result & 0xf; |
| 509 | 509 | ||
| 510 | if (hkey_num < 0 || hkey_num > ARRAY_SIZE(pcc->keymap)) { | 510 | if (hkey_num < 0 || hkey_num >= ARRAY_SIZE(pcc->keymap)) { |
| 511 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 511 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
| 512 | "hotkey number out of range: %d\n", | 512 | "hotkey number out of range: %d\n", |
| 513 | hkey_num)); | 513 | hkey_num)); |
diff --git a/drivers/power/pcf50633-charger.c b/drivers/power/pcf50633-charger.c index e988ec130fcd..41aec2acbb91 100644 --- a/drivers/power/pcf50633-charger.c +++ b/drivers/power/pcf50633-charger.c | |||
| @@ -199,7 +199,8 @@ static int adapter_get_property(struct power_supply *psy, | |||
| 199 | enum power_supply_property psp, | 199 | enum power_supply_property psp, |
| 200 | union power_supply_propval *val) | 200 | union power_supply_propval *val) |
| 201 | { | 201 | { |
| 202 | struct pcf50633_mbc *mbc = container_of(psy, struct pcf50633_mbc, usb); | 202 | struct pcf50633_mbc *mbc = container_of(psy, |
| 203 | struct pcf50633_mbc, adapter); | ||
| 203 | int ret = 0; | 204 | int ret = 0; |
| 204 | 205 | ||
| 205 | switch (psp) { | 206 | switch (psp) { |
diff --git a/drivers/rtc/rtc-au1xxx.c b/drivers/rtc/rtc-au1xxx.c index 8906a688e6a6..979ed0406ce9 100644 --- a/drivers/rtc/rtc-au1xxx.c +++ b/drivers/rtc/rtc-au1xxx.c | |||
| @@ -81,7 +81,7 @@ static int __devinit au1xtoy_rtc_probe(struct platform_device *pdev) | |||
| 81 | if (au_readl(SYS_TOYTRIM) != 32767) { | 81 | if (au_readl(SYS_TOYTRIM) != 32767) { |
| 82 | /* wait until hardware gives access to TRIM register */ | 82 | /* wait until hardware gives access to TRIM register */ |
| 83 | t = 0x00100000; | 83 | t = 0x00100000; |
| 84 | while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_T0S) && t--) | 84 | while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_T0S) && --t) |
| 85 | msleep(1); | 85 | msleep(1); |
| 86 | 86 | ||
| 87 | if (!t) { | 87 | if (!t) { |
diff --git a/drivers/rtc/rtc-pxa.c b/drivers/rtc/rtc-pxa.c index bd56a033bfd0..bb8cc05605ac 100644 --- a/drivers/rtc/rtc-pxa.c +++ b/drivers/rtc/rtc-pxa.c | |||
| @@ -485,7 +485,7 @@ static void __exit pxa_rtc_exit(void) | |||
| 485 | module_init(pxa_rtc_init); | 485 | module_init(pxa_rtc_init); |
| 486 | module_exit(pxa_rtc_exit); | 486 | module_exit(pxa_rtc_exit); |
| 487 | 487 | ||
| 488 | MODULE_AUTHOR("Robert Jarzmik"); | 488 | MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>"); |
| 489 | MODULE_DESCRIPTION("PXA27x/PXA3xx Realtime Clock Driver (RTC)"); | 489 | MODULE_DESCRIPTION("PXA27x/PXA3xx Realtime Clock Driver (RTC)"); |
| 490 | MODULE_LICENSE("GPL"); | 490 | MODULE_LICENSE("GPL"); |
| 491 | MODULE_ALIAS("platform:pxa-rtc"); | 491 | MODULE_ALIAS("platform:pxa-rtc"); |
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index bd5914994142..08c23a921012 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c | |||
| @@ -57,6 +57,8 @@ static void dasd_device_tasklet(struct dasd_device *); | |||
| 57 | static void dasd_block_tasklet(struct dasd_block *); | 57 | static void dasd_block_tasklet(struct dasd_block *); |
| 58 | static void do_kick_device(struct work_struct *); | 58 | static void do_kick_device(struct work_struct *); |
| 59 | static void dasd_return_cqr_cb(struct dasd_ccw_req *, void *); | 59 | static void dasd_return_cqr_cb(struct dasd_ccw_req *, void *); |
| 60 | static void dasd_device_timeout(unsigned long); | ||
| 61 | static void dasd_block_timeout(unsigned long); | ||
| 60 | 62 | ||
| 61 | /* | 63 | /* |
| 62 | * SECTION: Operations on the device structure. | 64 | * SECTION: Operations on the device structure. |
| @@ -99,6 +101,8 @@ struct dasd_device *dasd_alloc_device(void) | |||
| 99 | (unsigned long) device); | 101 | (unsigned long) device); |
| 100 | INIT_LIST_HEAD(&device->ccw_queue); | 102 | INIT_LIST_HEAD(&device->ccw_queue); |
| 101 | init_timer(&device->timer); | 103 | init_timer(&device->timer); |
| 104 | device->timer.function = dasd_device_timeout; | ||
| 105 | device->timer.data = (unsigned long) device; | ||
| 102 | INIT_WORK(&device->kick_work, do_kick_device); | 106 | INIT_WORK(&device->kick_work, do_kick_device); |
| 103 | device->state = DASD_STATE_NEW; | 107 | device->state = DASD_STATE_NEW; |
| 104 | device->target = DASD_STATE_NEW; | 108 | device->target = DASD_STATE_NEW; |
| @@ -138,6 +142,8 @@ struct dasd_block *dasd_alloc_block(void) | |||
| 138 | INIT_LIST_HEAD(&block->ccw_queue); | 142 | INIT_LIST_HEAD(&block->ccw_queue); |
| 139 | spin_lock_init(&block->queue_lock); | 143 | spin_lock_init(&block->queue_lock); |
| 140 | init_timer(&block->timer); | 144 | init_timer(&block->timer); |
| 145 | block->timer.function = dasd_block_timeout; | ||
| 146 | block->timer.data = (unsigned long) block; | ||
| 141 | 147 | ||
| 142 | return block; | 148 | return block; |
| 143 | } | 149 | } |
| @@ -915,19 +921,10 @@ static void dasd_device_timeout(unsigned long ptr) | |||
| 915 | */ | 921 | */ |
| 916 | void dasd_device_set_timer(struct dasd_device *device, int expires) | 922 | void dasd_device_set_timer(struct dasd_device *device, int expires) |
| 917 | { | 923 | { |
| 918 | if (expires == 0) { | 924 | if (expires == 0) |
| 919 | if (timer_pending(&device->timer)) | 925 | del_timer(&device->timer); |
| 920 | del_timer(&device->timer); | 926 | else |
| 921 | return; | 927 | mod_timer(&device->timer, jiffies + expires); |
| 922 | } | ||
| 923 | if (timer_pending(&device->timer)) { | ||
| 924 | if (mod_timer(&device->timer, jiffies + expires)) | ||
| 925 | return; | ||
| 926 | } | ||
| 927 | device->timer.function = dasd_device_timeout; | ||
| 928 | device->timer.data = (unsigned long) device; | ||
| 929 | device->timer.expires = jiffies + expires; | ||
| 930 | add_timer(&device->timer); | ||
| 931 | } | 928 | } |
| 932 | 929 | ||
| 933 | /* | 930 | /* |
| @@ -935,8 +932,7 @@ void dasd_device_set_timer(struct dasd_device *device, int expires) | |||
| 935 | */ | 932 | */ |
| 936 | void dasd_device_clear_timer(struct dasd_device *device) | 933 | void dasd_device_clear_timer(struct dasd_device *device) |
| 937 | { | 934 | { |
| 938 | if (timer_pending(&device->timer)) | 935 | del_timer(&device->timer); |
| 939 | del_timer(&device->timer); | ||
| 940 | } | 936 | } |
| 941 | 937 | ||
| 942 | static void dasd_handle_killed_request(struct ccw_device *cdev, | 938 | static void dasd_handle_killed_request(struct ccw_device *cdev, |
| @@ -1586,19 +1582,10 @@ static void dasd_block_timeout(unsigned long ptr) | |||
| 1586 | */ | 1582 | */ |
| 1587 | void dasd_block_set_timer(struct dasd_block *block, int expires) | 1583 | void dasd_block_set_timer(struct dasd_block *block, int expires) |
| 1588 | { | 1584 | { |
| 1589 | if (expires == 0) { | 1585 | if (expires == 0) |
| 1590 | if (timer_pending(&block->timer)) | 1586 | del_timer(&block->timer); |
| 1591 | del_timer(&block->timer); | 1587 | else |
| 1592 | return; | 1588 | mod_timer(&block->timer, jiffies + expires); |
| 1593 | } | ||
| 1594 | if (timer_pending(&block->timer)) { | ||
| 1595 | if (mod_timer(&block->timer, jiffies + expires)) | ||
| 1596 | return; | ||
| 1597 | } | ||
| 1598 | block->timer.function = dasd_block_timeout; | ||
| 1599 | block->timer.data = (unsigned long) block; | ||
| 1600 | block->timer.expires = jiffies + expires; | ||
| 1601 | add_timer(&block->timer); | ||
| 1602 | } | 1589 | } |
| 1603 | 1590 | ||
| 1604 | /* | 1591 | /* |
| @@ -1606,8 +1593,7 @@ void dasd_block_set_timer(struct dasd_block *block, int expires) | |||
| 1606 | */ | 1593 | */ |
| 1607 | void dasd_block_clear_timer(struct dasd_block *block) | 1594 | void dasd_block_clear_timer(struct dasd_block *block) |
| 1608 | { | 1595 | { |
| 1609 | if (timer_pending(&block->timer)) | 1596 | del_timer(&block->timer); |
| 1610 | del_timer(&block->timer); | ||
| 1611 | } | 1597 | } |
| 1612 | 1598 | ||
| 1613 | /* | 1599 | /* |
diff --git a/drivers/s390/block/dasd_devmap.c b/drivers/s390/block/dasd_devmap.c index 300e28a531f8..34339902efb9 100644 --- a/drivers/s390/block/dasd_devmap.c +++ b/drivers/s390/block/dasd_devmap.c | |||
| @@ -677,7 +677,7 @@ static ssize_t dasd_ff_show(struct device *dev, struct device_attribute *attr, | |||
| 677 | struct dasd_devmap *devmap; | 677 | struct dasd_devmap *devmap; |
| 678 | int ff_flag; | 678 | int ff_flag; |
| 679 | 679 | ||
| 680 | devmap = dasd_find_busid(dev->bus_id); | 680 | devmap = dasd_find_busid(dev_name(dev)); |
| 681 | if (!IS_ERR(devmap)) | 681 | if (!IS_ERR(devmap)) |
| 682 | ff_flag = (devmap->features & DASD_FEATURE_FAILFAST) != 0; | 682 | ff_flag = (devmap->features & DASD_FEATURE_FAILFAST) != 0; |
| 683 | else | 683 | else |
diff --git a/drivers/s390/char/sclp.c b/drivers/s390/char/sclp.c index 1fd8f2193ed8..4377e93a43d7 100644 --- a/drivers/s390/char/sclp.c +++ b/drivers/s390/char/sclp.c | |||
| @@ -280,8 +280,11 @@ sclp_dispatch_evbufs(struct sccb_header *sccb) | |||
| 280 | rc = 0; | 280 | rc = 0; |
| 281 | for (offset = sizeof(struct sccb_header); offset < sccb->length; | 281 | for (offset = sizeof(struct sccb_header); offset < sccb->length; |
| 282 | offset += evbuf->length) { | 282 | offset += evbuf->length) { |
| 283 | /* Search for event handler */ | ||
| 284 | evbuf = (struct evbuf_header *) ((addr_t) sccb + offset); | 283 | evbuf = (struct evbuf_header *) ((addr_t) sccb + offset); |
| 284 | /* Check for malformed hardware response */ | ||
| 285 | if (evbuf->length == 0) | ||
| 286 | break; | ||
| 287 | /* Search for event handler */ | ||
| 285 | reg = NULL; | 288 | reg = NULL; |
| 286 | list_for_each(l, &sclp_reg_list) { | 289 | list_for_each(l, &sclp_reg_list) { |
| 287 | reg = list_entry(l, struct sclp_register, list); | 290 | reg = list_entry(l, struct sclp_register, list); |
diff --git a/drivers/s390/char/sclp_cmd.c b/drivers/s390/char/sclp_cmd.c index 506390496416..77ab6e34a100 100644 --- a/drivers/s390/char/sclp_cmd.c +++ b/drivers/s390/char/sclp_cmd.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/memory.h> | 19 | #include <linux/memory.h> |
| 20 | #include <asm/chpid.h> | 20 | #include <asm/chpid.h> |
| 21 | #include <asm/sclp.h> | 21 | #include <asm/sclp.h> |
| 22 | #include <asm/setup.h> | ||
| 22 | 23 | ||
| 23 | #include "sclp.h" | 24 | #include "sclp.h" |
| 24 | 25 | ||
| @@ -474,6 +475,10 @@ static void __init add_memory_merged(u16 rn) | |||
| 474 | goto skip_add; | 475 | goto skip_add; |
| 475 | if (start + size > VMEM_MAX_PHYS) | 476 | if (start + size > VMEM_MAX_PHYS) |
| 476 | size = VMEM_MAX_PHYS - start; | 477 | size = VMEM_MAX_PHYS - start; |
| 478 | if (memory_end_set && (start >= memory_end)) | ||
| 479 | goto skip_add; | ||
| 480 | if (memory_end_set && (start + size > memory_end)) | ||
| 481 | size = memory_end - start; | ||
| 477 | add_memory(0, start, size); | 482 | add_memory(0, start, size); |
| 478 | skip_add: | 483 | skip_add: |
| 479 | first_rn = rn; | 484 | first_rn = rn; |
diff --git a/drivers/scsi/cxgb3i/cxgb3i.h b/drivers/scsi/cxgb3i/cxgb3i.h index fde6e4c634e7..a7cf550b9cca 100644 --- a/drivers/scsi/cxgb3i/cxgb3i.h +++ b/drivers/scsi/cxgb3i/cxgb3i.h | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include <linux/list.h> | 20 | #include <linux/list.h> |
| 21 | #include <linux/netdevice.h> | 21 | #include <linux/netdevice.h> |
| 22 | #include <linux/scatterlist.h> | 22 | #include <linux/scatterlist.h> |
| 23 | #include <linux/skbuff.h> | ||
| 23 | #include <scsi/libiscsi_tcp.h> | 24 | #include <scsi/libiscsi_tcp.h> |
| 24 | 25 | ||
| 25 | /* from cxgb3 LLD */ | 26 | /* from cxgb3 LLD */ |
| @@ -113,6 +114,26 @@ struct cxgb3i_endpoint { | |||
| 113 | struct cxgb3i_conn *cconn; | 114 | struct cxgb3i_conn *cconn; |
| 114 | }; | 115 | }; |
| 115 | 116 | ||
| 117 | /** | ||
| 118 | * struct cxgb3i_task_data - private iscsi task data | ||
| 119 | * | ||
| 120 | * @nr_frags: # of coalesced page frags (from scsi sgl) | ||
| 121 | * @frags: coalesced page frags (from scsi sgl) | ||
| 122 | * @skb: tx pdu skb | ||
| 123 | * @offset: data offset for the next pdu | ||
| 124 | * @count: max. possible pdu payload | ||
| 125 | * @sgoffset: offset to the first sg entry for a given offset | ||
| 126 | */ | ||
| 127 | #define MAX_PDU_FRAGS ((ULP2_MAX_PDU_PAYLOAD + 512 - 1) / 512) | ||
| 128 | struct cxgb3i_task_data { | ||
| 129 | unsigned short nr_frags; | ||
| 130 | skb_frag_t frags[MAX_PDU_FRAGS]; | ||
| 131 | struct sk_buff *skb; | ||
| 132 | unsigned int offset; | ||
| 133 | unsigned int count; | ||
| 134 | unsigned int sgoffset; | ||
| 135 | }; | ||
| 136 | |||
| 116 | int cxgb3i_iscsi_init(void); | 137 | int cxgb3i_iscsi_init(void); |
| 117 | void cxgb3i_iscsi_cleanup(void); | 138 | void cxgb3i_iscsi_cleanup(void); |
| 118 | 139 | ||
diff --git a/drivers/scsi/cxgb3i/cxgb3i_ddp.c b/drivers/scsi/cxgb3i/cxgb3i_ddp.c index 08f3a09d9233..a83d36e4926f 100644 --- a/drivers/scsi/cxgb3i/cxgb3i_ddp.c +++ b/drivers/scsi/cxgb3i/cxgb3i_ddp.c | |||
| @@ -639,10 +639,11 @@ static int ddp_init(struct t3cdev *tdev) | |||
| 639 | write_unlock(&cxgb3i_ddp_rwlock); | 639 | write_unlock(&cxgb3i_ddp_rwlock); |
| 640 | 640 | ||
| 641 | ddp_log_info("nppods %u (0x%x ~ 0x%x), bits %u, mask 0x%x,0x%x " | 641 | ddp_log_info("nppods %u (0x%x ~ 0x%x), bits %u, mask 0x%x,0x%x " |
| 642 | "pkt %u,%u.\n", | 642 | "pkt %u/%u, %u/%u.\n", |
| 643 | ppmax, ddp->llimit, ddp->ulimit, ddp->idx_bits, | 643 | ppmax, ddp->llimit, ddp->ulimit, ddp->idx_bits, |
| 644 | ddp->idx_mask, ddp->rsvd_tag_mask, | 644 | ddp->idx_mask, ddp->rsvd_tag_mask, |
| 645 | ddp->max_txsz, ddp->max_rxsz); | 645 | ddp->max_txsz, uinfo.max_txsz, |
| 646 | ddp->max_rxsz, uinfo.max_rxsz); | ||
| 646 | return 0; | 647 | return 0; |
| 647 | 648 | ||
| 648 | free_ddp_map: | 649 | free_ddp_map: |
| @@ -654,8 +655,8 @@ free_ddp_map: | |||
| 654 | * cxgb3i_adapter_ddp_init - initialize the adapter's ddp resource | 655 | * cxgb3i_adapter_ddp_init - initialize the adapter's ddp resource |
| 655 | * @tdev: t3cdev adapter | 656 | * @tdev: t3cdev adapter |
| 656 | * @tformat: tag format | 657 | * @tformat: tag format |
| 657 | * @txsz: max tx pkt size, filled in by this func. | 658 | * @txsz: max tx pdu payload size, filled in by this func. |
| 658 | * @rxsz: max rx pkt size, filled in by this func. | 659 | * @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 | * initialize the ddp pagepod manager for a given adapter if needed and |
| 660 | * setup the tag format for a given iscsi entity | 661 | * setup the tag format for a given iscsi entity |
| 661 | */ | 662 | */ |
| @@ -685,10 +686,12 @@ int cxgb3i_adapter_ddp_init(struct t3cdev *tdev, | |||
| 685 | tformat->sw_bits, tformat->rsvd_bits, | 686 | tformat->sw_bits, tformat->rsvd_bits, |
| 686 | tformat->rsvd_shift, tformat->rsvd_mask); | 687 | tformat->rsvd_shift, tformat->rsvd_mask); |
| 687 | 688 | ||
| 688 | *txsz = ddp->max_txsz; | 689 | *txsz = min_t(unsigned int, ULP2_MAX_PDU_PAYLOAD, |
| 689 | *rxsz = ddp->max_rxsz; | 690 | ddp->max_txsz - ISCSI_PDU_NONPAYLOAD_LEN); |
| 690 | ddp_log_info("ddp max pkt size: %u, %u.\n", | 691 | *rxsz = min_t(unsigned int, ULP2_MAX_PDU_PAYLOAD, |
| 691 | ddp->max_txsz, ddp->max_rxsz); | 692 | ddp->max_rxsz - ISCSI_PDU_NONPAYLOAD_LEN); |
| 693 | ddp_log_info("max payload size: %u/%u, %u/%u.\n", | ||
| 694 | *txsz, ddp->max_txsz, *rxsz, ddp->max_rxsz); | ||
| 692 | return 0; | 695 | return 0; |
| 693 | } | 696 | } |
| 694 | EXPORT_SYMBOL_GPL(cxgb3i_adapter_ddp_init); | 697 | EXPORT_SYMBOL_GPL(cxgb3i_adapter_ddp_init); |
diff --git a/drivers/scsi/cxgb3i/cxgb3i_ddp.h b/drivers/scsi/cxgb3i/cxgb3i_ddp.h index 5c7c4d95c493..3faae7831c83 100644 --- a/drivers/scsi/cxgb3i/cxgb3i_ddp.h +++ b/drivers/scsi/cxgb3i/cxgb3i_ddp.h | |||
| @@ -13,6 +13,8 @@ | |||
| 13 | #ifndef __CXGB3I_ULP2_DDP_H__ | 13 | #ifndef __CXGB3I_ULP2_DDP_H__ |
| 14 | #define __CXGB3I_ULP2_DDP_H__ | 14 | #define __CXGB3I_ULP2_DDP_H__ |
| 15 | 15 | ||
| 16 | #include <linux/vmalloc.h> | ||
| 17 | |||
| 16 | /** | 18 | /** |
| 17 | * struct cxgb3i_tag_format - cxgb3i ulp tag format for an iscsi entity | 19 | * struct cxgb3i_tag_format - cxgb3i ulp tag format for an iscsi entity |
| 18 | * | 20 | * |
| @@ -85,8 +87,9 @@ struct cxgb3i_ddp_info { | |||
| 85 | struct sk_buff **gl_skb; | 87 | struct sk_buff **gl_skb; |
| 86 | }; | 88 | }; |
| 87 | 89 | ||
| 90 | #define ISCSI_PDU_NONPAYLOAD_LEN 312 /* bhs(48) + ahs(256) + digest(8) */ | ||
| 88 | #define ULP2_MAX_PKT_SIZE 16224 | 91 | #define ULP2_MAX_PKT_SIZE 16224 |
| 89 | #define ULP2_MAX_PDU_PAYLOAD (ULP2_MAX_PKT_SIZE - ISCSI_PDU_NONPAYLOAD_MAX) | 92 | #define ULP2_MAX_PDU_PAYLOAD (ULP2_MAX_PKT_SIZE - ISCSI_PDU_NONPAYLOAD_LEN) |
| 90 | #define PPOD_PAGES_MAX 4 | 93 | #define PPOD_PAGES_MAX 4 |
| 91 | #define PPOD_PAGES_SHIFT 2 /* 4 pages per pod */ | 94 | #define PPOD_PAGES_SHIFT 2 /* 4 pages per pod */ |
| 92 | 95 | ||
diff --git a/drivers/scsi/cxgb3i/cxgb3i_init.c b/drivers/scsi/cxgb3i/cxgb3i_init.c index 091ecb4d9f3d..1ce9f244e46c 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.0" | 15 | #define DRV_MODULE_VERSION "1.0.1" |
| 16 | #define DRV_MODULE_RELDATE "Jun. 1, 2008" | 16 | #define DRV_MODULE_RELDATE "Jan. 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 |
diff --git a/drivers/scsi/cxgb3i/cxgb3i_iscsi.c b/drivers/scsi/cxgb3i/cxgb3i_iscsi.c index d83464b9b3f9..fa2a44f37b36 100644 --- a/drivers/scsi/cxgb3i/cxgb3i_iscsi.c +++ b/drivers/scsi/cxgb3i/cxgb3i_iscsi.c | |||
| @@ -364,7 +364,8 @@ cxgb3i_session_create(struct iscsi_endpoint *ep, u16 cmds_max, u16 qdepth, | |||
| 364 | 364 | ||
| 365 | cls_session = iscsi_session_setup(&cxgb3i_iscsi_transport, shost, | 365 | cls_session = iscsi_session_setup(&cxgb3i_iscsi_transport, shost, |
| 366 | cmds_max, | 366 | cmds_max, |
| 367 | sizeof(struct iscsi_tcp_task), | 367 | sizeof(struct iscsi_tcp_task) + |
| 368 | sizeof(struct cxgb3i_task_data), | ||
| 368 | initial_cmdsn, ISCSI_MAX_TARGET); | 369 | initial_cmdsn, ISCSI_MAX_TARGET); |
| 369 | if (!cls_session) | 370 | if (!cls_session) |
| 370 | return NULL; | 371 | return NULL; |
| @@ -402,17 +403,15 @@ static inline int cxgb3i_conn_max_xmit_dlength(struct iscsi_conn *conn) | |||
| 402 | { | 403 | { |
| 403 | struct iscsi_tcp_conn *tcp_conn = conn->dd_data; | 404 | struct iscsi_tcp_conn *tcp_conn = conn->dd_data; |
| 404 | struct cxgb3i_conn *cconn = tcp_conn->dd_data; | 405 | struct cxgb3i_conn *cconn = tcp_conn->dd_data; |
| 405 | unsigned int max = min_t(unsigned int, ULP2_MAX_PDU_PAYLOAD, | 406 | unsigned int max = max(512 * MAX_SKB_FRAGS, SKB_TX_HEADROOM); |
| 406 | cconn->hba->snic->tx_max_size - | ||
| 407 | ISCSI_PDU_NONPAYLOAD_MAX); | ||
| 408 | 407 | ||
| 408 | max = min(cconn->hba->snic->tx_max_size, max); | ||
| 409 | if (conn->max_xmit_dlength) | 409 | if (conn->max_xmit_dlength) |
| 410 | conn->max_xmit_dlength = min_t(unsigned int, | 410 | conn->max_xmit_dlength = min(conn->max_xmit_dlength, max); |
| 411 | conn->max_xmit_dlength, max); | ||
| 412 | else | 411 | else |
| 413 | conn->max_xmit_dlength = max; | 412 | conn->max_xmit_dlength = max; |
| 414 | align_pdu_size(conn->max_xmit_dlength); | 413 | align_pdu_size(conn->max_xmit_dlength); |
| 415 | cxgb3i_log_info("conn 0x%p, max xmit %u.\n", | 414 | cxgb3i_api_debug("conn 0x%p, max xmit %u.\n", |
| 416 | conn, conn->max_xmit_dlength); | 415 | conn, conn->max_xmit_dlength); |
| 417 | return 0; | 416 | return 0; |
| 418 | } | 417 | } |
| @@ -427,9 +426,7 @@ static inline int cxgb3i_conn_max_recv_dlength(struct iscsi_conn *conn) | |||
| 427 | { | 426 | { |
| 428 | struct iscsi_tcp_conn *tcp_conn = conn->dd_data; | 427 | struct iscsi_tcp_conn *tcp_conn = conn->dd_data; |
| 429 | struct cxgb3i_conn *cconn = tcp_conn->dd_data; | 428 | struct cxgb3i_conn *cconn = tcp_conn->dd_data; |
| 430 | unsigned int max = min_t(unsigned int, ULP2_MAX_PDU_PAYLOAD, | 429 | unsigned int max = cconn->hba->snic->rx_max_size; |
| 431 | cconn->hba->snic->rx_max_size - | ||
| 432 | ISCSI_PDU_NONPAYLOAD_MAX); | ||
| 433 | 430 | ||
| 434 | align_pdu_size(max); | 431 | align_pdu_size(max); |
| 435 | if (conn->max_recv_dlength) { | 432 | if (conn->max_recv_dlength) { |
| @@ -439,8 +436,7 @@ static inline int cxgb3i_conn_max_recv_dlength(struct iscsi_conn *conn) | |||
| 439 | conn->max_recv_dlength, max); | 436 | conn->max_recv_dlength, max); |
| 440 | return -EINVAL; | 437 | return -EINVAL; |
| 441 | } | 438 | } |
| 442 | conn->max_recv_dlength = min_t(unsigned int, | 439 | conn->max_recv_dlength = min(conn->max_recv_dlength, max); |
| 443 | conn->max_recv_dlength, max); | ||
| 444 | align_pdu_size(conn->max_recv_dlength); | 440 | align_pdu_size(conn->max_recv_dlength); |
| 445 | } else | 441 | } else |
| 446 | conn->max_recv_dlength = max; | 442 | conn->max_recv_dlength = max; |
| @@ -844,7 +840,7 @@ static struct scsi_host_template cxgb3i_host_template = { | |||
| 844 | .proc_name = "cxgb3i", | 840 | .proc_name = "cxgb3i", |
| 845 | .queuecommand = iscsi_queuecommand, | 841 | .queuecommand = iscsi_queuecommand, |
| 846 | .change_queue_depth = iscsi_change_queue_depth, | 842 | .change_queue_depth = iscsi_change_queue_depth, |
| 847 | .can_queue = 128 * (ISCSI_DEF_XMIT_CMDS_MAX - 1), | 843 | .can_queue = CXGB3I_SCSI_QDEPTH_DFLT - 1, |
| 848 | .sg_tablesize = SG_ALL, | 844 | .sg_tablesize = SG_ALL, |
| 849 | .max_sectors = 0xFFFF, | 845 | .max_sectors = 0xFFFF, |
| 850 | .cmd_per_lun = ISCSI_DEF_CMD_PER_LUN, | 846 | .cmd_per_lun = ISCSI_DEF_CMD_PER_LUN, |
diff --git a/drivers/scsi/cxgb3i/cxgb3i_offload.c b/drivers/scsi/cxgb3i/cxgb3i_offload.c index a865f1fefe8b..de3b3b614cca 100644 --- a/drivers/scsi/cxgb3i/cxgb3i_offload.c +++ b/drivers/scsi/cxgb3i/cxgb3i_offload.c | |||
| @@ -23,19 +23,19 @@ | |||
| 23 | #include "cxgb3i_ddp.h" | 23 | #include "cxgb3i_ddp.h" |
| 24 | 24 | ||
| 25 | #ifdef __DEBUG_C3CN_CONN__ | 25 | #ifdef __DEBUG_C3CN_CONN__ |
| 26 | #define c3cn_conn_debug cxgb3i_log_info | 26 | #define c3cn_conn_debug cxgb3i_log_debug |
| 27 | #else | 27 | #else |
| 28 | #define c3cn_conn_debug(fmt...) | 28 | #define c3cn_conn_debug(fmt...) |
| 29 | #endif | 29 | #endif |
| 30 | 30 | ||
| 31 | #ifdef __DEBUG_C3CN_TX__ | 31 | #ifdef __DEBUG_C3CN_TX__ |
| 32 | #define c3cn_tx_debug cxgb3i_log_debug | 32 | #define c3cn_tx_debug cxgb3i_log_debug |
| 33 | #else | 33 | #else |
| 34 | #define c3cn_tx_debug(fmt...) | 34 | #define c3cn_tx_debug(fmt...) |
| 35 | #endif | 35 | #endif |
| 36 | 36 | ||
| 37 | #ifdef __DEBUG_C3CN_RX__ | 37 | #ifdef __DEBUG_C3CN_RX__ |
| 38 | #define c3cn_rx_debug cxgb3i_log_debug | 38 | #define c3cn_rx_debug cxgb3i_log_debug |
| 39 | #else | 39 | #else |
| 40 | #define c3cn_rx_debug(fmt...) | 40 | #define c3cn_rx_debug(fmt...) |
| 41 | #endif | 41 | #endif |
| @@ -47,9 +47,9 @@ static int cxgb3_rcv_win = 256 * 1024; | |||
| 47 | module_param(cxgb3_rcv_win, int, 0644); | 47 | module_param(cxgb3_rcv_win, int, 0644); |
| 48 | MODULE_PARM_DESC(cxgb3_rcv_win, "TCP receive window in bytes (default=256KB)"); | 48 | MODULE_PARM_DESC(cxgb3_rcv_win, "TCP receive window in bytes (default=256KB)"); |
| 49 | 49 | ||
| 50 | static int cxgb3_snd_win = 64 * 1024; | 50 | static int cxgb3_snd_win = 128 * 1024; |
| 51 | module_param(cxgb3_snd_win, int, 0644); | 51 | module_param(cxgb3_snd_win, int, 0644); |
| 52 | MODULE_PARM_DESC(cxgb3_snd_win, "TCP send window in bytes (default=64KB)"); | 52 | MODULE_PARM_DESC(cxgb3_snd_win, "TCP send window in bytes (default=128KB)"); |
| 53 | 53 | ||
| 54 | static int cxgb3_rx_credit_thres = 10 * 1024; | 54 | static int cxgb3_rx_credit_thres = 10 * 1024; |
| 55 | module_param(cxgb3_rx_credit_thres, int, 0644); | 55 | module_param(cxgb3_rx_credit_thres, int, 0644); |
| @@ -301,8 +301,8 @@ static void act_open_req_arp_failure(struct t3cdev *dev, struct sk_buff *skb) | |||
| 301 | static void skb_entail(struct s3_conn *c3cn, struct sk_buff *skb, | 301 | static void skb_entail(struct s3_conn *c3cn, struct sk_buff *skb, |
| 302 | int flags) | 302 | int flags) |
| 303 | { | 303 | { |
| 304 | CXGB3_SKB_CB(skb)->seq = c3cn->write_seq; | 304 | skb_tcp_seq(skb) = c3cn->write_seq; |
| 305 | CXGB3_SKB_CB(skb)->flags = flags; | 305 | skb_flags(skb) = flags; |
| 306 | __skb_queue_tail(&c3cn->write_queue, skb); | 306 | __skb_queue_tail(&c3cn->write_queue, skb); |
| 307 | } | 307 | } |
| 308 | 308 | ||
| @@ -457,12 +457,9 @@ static unsigned int wrlen __read_mostly; | |||
| 457 | * The number of WRs needed for an skb depends on the number of fragments | 457 | * The number of WRs needed for an skb depends on the number of fragments |
| 458 | * in the skb and whether it has any payload in its main body. This maps the | 458 | * in the skb and whether it has any payload in its main body. This maps the |
| 459 | * length of the gather list represented by an skb into the # of necessary WRs. | 459 | * length of the gather list represented by an skb into the # of necessary WRs. |
| 460 | * | 460 | * The extra two fragments are for iscsi bhs and payload padding. |
| 461 | * The max. length of an skb is controlled by the max pdu size which is ~16K. | ||
| 462 | * Also, assume the min. fragment length is the sector size (512), then add | ||
| 463 | * extra fragment counts for iscsi bhs and payload padding. | ||
| 464 | */ | 461 | */ |
| 465 | #define SKB_WR_LIST_SIZE (16384/512 + 3) | 462 | #define SKB_WR_LIST_SIZE (MAX_SKB_FRAGS + 2) |
| 466 | static unsigned int skb_wrs[SKB_WR_LIST_SIZE] __read_mostly; | 463 | static unsigned int skb_wrs[SKB_WR_LIST_SIZE] __read_mostly; |
| 467 | 464 | ||
| 468 | static void s3_init_wr_tab(unsigned int wr_len) | 465 | static void s3_init_wr_tab(unsigned int wr_len) |
| @@ -485,7 +482,7 @@ static void s3_init_wr_tab(unsigned int wr_len) | |||
| 485 | 482 | ||
| 486 | static inline void reset_wr_list(struct s3_conn *c3cn) | 483 | static inline void reset_wr_list(struct s3_conn *c3cn) |
| 487 | { | 484 | { |
| 488 | c3cn->wr_pending_head = NULL; | 485 | c3cn->wr_pending_head = c3cn->wr_pending_tail = NULL; |
| 489 | } | 486 | } |
| 490 | 487 | ||
| 491 | /* | 488 | /* |
| @@ -496,7 +493,7 @@ static inline void reset_wr_list(struct s3_conn *c3cn) | |||
| 496 | static inline void enqueue_wr(struct s3_conn *c3cn, | 493 | static inline void enqueue_wr(struct s3_conn *c3cn, |
| 497 | struct sk_buff *skb) | 494 | struct sk_buff *skb) |
| 498 | { | 495 | { |
| 499 | skb_wr_data(skb) = NULL; | 496 | skb_tx_wr_next(skb) = NULL; |
| 500 | 497 | ||
| 501 | /* | 498 | /* |
| 502 | * We want to take an extra reference since both us and the driver | 499 | * We want to take an extra reference since both us and the driver |
| @@ -509,10 +506,22 @@ static inline void enqueue_wr(struct s3_conn *c3cn, | |||
| 509 | if (!c3cn->wr_pending_head) | 506 | if (!c3cn->wr_pending_head) |
| 510 | c3cn->wr_pending_head = skb; | 507 | c3cn->wr_pending_head = skb; |
| 511 | else | 508 | else |
| 512 | skb_wr_data(skb) = skb; | 509 | skb_tx_wr_next(c3cn->wr_pending_tail) = skb; |
| 513 | c3cn->wr_pending_tail = skb; | 510 | c3cn->wr_pending_tail = skb; |
| 514 | } | 511 | } |
| 515 | 512 | ||
| 513 | static int count_pending_wrs(struct s3_conn *c3cn) | ||
| 514 | { | ||
| 515 | int n = 0; | ||
| 516 | const struct sk_buff *skb = c3cn->wr_pending_head; | ||
| 517 | |||
| 518 | while (skb) { | ||
| 519 | n += skb->csum; | ||
| 520 | skb = skb_tx_wr_next(skb); | ||
| 521 | } | ||
| 522 | return n; | ||
| 523 | } | ||
| 524 | |||
| 516 | static inline struct sk_buff *peek_wr(const struct s3_conn *c3cn) | 525 | static inline struct sk_buff *peek_wr(const struct s3_conn *c3cn) |
| 517 | { | 526 | { |
| 518 | return c3cn->wr_pending_head; | 527 | return c3cn->wr_pending_head; |
| @@ -529,8 +538,8 @@ static inline struct sk_buff *dequeue_wr(struct s3_conn *c3cn) | |||
| 529 | 538 | ||
| 530 | if (likely(skb)) { | 539 | if (likely(skb)) { |
| 531 | /* Don't bother clearing the tail */ | 540 | /* Don't bother clearing the tail */ |
| 532 | c3cn->wr_pending_head = skb_wr_data(skb); | 541 | c3cn->wr_pending_head = skb_tx_wr_next(skb); |
| 533 | skb_wr_data(skb) = NULL; | 542 | skb_tx_wr_next(skb) = NULL; |
| 534 | } | 543 | } |
| 535 | return skb; | 544 | return skb; |
| 536 | } | 545 | } |
| @@ -543,13 +552,14 @@ static void purge_wr_queue(struct s3_conn *c3cn) | |||
| 543 | } | 552 | } |
| 544 | 553 | ||
| 545 | static inline void make_tx_data_wr(struct s3_conn *c3cn, struct sk_buff *skb, | 554 | static inline void make_tx_data_wr(struct s3_conn *c3cn, struct sk_buff *skb, |
| 546 | int len) | 555 | int len, int req_completion) |
| 547 | { | 556 | { |
| 548 | struct tx_data_wr *req; | 557 | struct tx_data_wr *req; |
| 549 | 558 | ||
| 550 | skb_reset_transport_header(skb); | 559 | skb_reset_transport_header(skb); |
| 551 | req = (struct tx_data_wr *)__skb_push(skb, sizeof(*req)); | 560 | req = (struct tx_data_wr *)__skb_push(skb, sizeof(*req)); |
| 552 | req->wr_hi = htonl(V_WR_OP(FW_WROPCODE_OFLD_TX_DATA)); | 561 | req->wr_hi = htonl(V_WR_OP(FW_WROPCODE_OFLD_TX_DATA) | |
| 562 | (req_completion ? F_WR_COMPL : 0)); | ||
| 553 | req->wr_lo = htonl(V_WR_TID(c3cn->tid)); | 563 | req->wr_lo = htonl(V_WR_TID(c3cn->tid)); |
| 554 | req->sndseq = htonl(c3cn->snd_nxt); | 564 | req->sndseq = htonl(c3cn->snd_nxt); |
| 555 | /* len includes the length of any HW ULP additions */ | 565 | /* len includes the length of any HW ULP additions */ |
| @@ -592,7 +602,7 @@ static int c3cn_push_tx_frames(struct s3_conn *c3cn, int req_completion) | |||
| 592 | 602 | ||
| 593 | if (unlikely(c3cn->state == C3CN_STATE_CONNECTING || | 603 | if (unlikely(c3cn->state == C3CN_STATE_CONNECTING || |
| 594 | c3cn->state == C3CN_STATE_CLOSE_WAIT_1 || | 604 | c3cn->state == C3CN_STATE_CLOSE_WAIT_1 || |
| 595 | c3cn->state == C3CN_STATE_ABORTING)) { | 605 | c3cn->state >= C3CN_STATE_ABORTING)) { |
| 596 | c3cn_tx_debug("c3cn 0x%p, in closing state %u.\n", | 606 | c3cn_tx_debug("c3cn 0x%p, in closing state %u.\n", |
| 597 | c3cn, c3cn->state); | 607 | c3cn, c3cn->state); |
| 598 | return 0; | 608 | return 0; |
| @@ -615,7 +625,7 @@ static int c3cn_push_tx_frames(struct s3_conn *c3cn, int req_completion) | |||
| 615 | if (c3cn->wr_avail < wrs_needed) { | 625 | if (c3cn->wr_avail < wrs_needed) { |
| 616 | c3cn_tx_debug("c3cn 0x%p, skb len %u/%u, frag %u, " | 626 | c3cn_tx_debug("c3cn 0x%p, skb len %u/%u, frag %u, " |
| 617 | "wr %d < %u.\n", | 627 | "wr %d < %u.\n", |
| 618 | c3cn, skb->len, skb->datalen, frags, | 628 | c3cn, skb->len, skb->data_len, frags, |
| 619 | wrs_needed, c3cn->wr_avail); | 629 | wrs_needed, c3cn->wr_avail); |
| 620 | break; | 630 | break; |
| 621 | } | 631 | } |
| @@ -627,20 +637,24 @@ static int c3cn_push_tx_frames(struct s3_conn *c3cn, int req_completion) | |||
| 627 | c3cn->wr_unacked += wrs_needed; | 637 | c3cn->wr_unacked += wrs_needed; |
| 628 | enqueue_wr(c3cn, skb); | 638 | enqueue_wr(c3cn, skb); |
| 629 | 639 | ||
| 630 | if (likely(CXGB3_SKB_CB(skb)->flags & C3CB_FLAG_NEED_HDR)) { | 640 | c3cn_tx_debug("c3cn 0x%p, enqueue, skb len %u/%u, frag %u, " |
| 631 | len += ulp_extra_len(skb); | 641 | "wr %d, left %u, unack %u.\n", |
| 632 | make_tx_data_wr(c3cn, skb, len); | 642 | c3cn, skb->len, skb->data_len, frags, |
| 633 | c3cn->snd_nxt += len; | 643 | wrs_needed, c3cn->wr_avail, c3cn->wr_unacked); |
| 634 | if ((req_completion | 644 | |
| 635 | && c3cn->wr_unacked == wrs_needed) | ||
| 636 | || (CXGB3_SKB_CB(skb)->flags & C3CB_FLAG_COMPL) | ||
| 637 | || c3cn->wr_unacked >= c3cn->wr_max / 2) { | ||
| 638 | struct work_request_hdr *wr = cplhdr(skb); | ||
| 639 | 645 | ||
| 640 | wr->wr_hi |= htonl(F_WR_COMPL); | 646 | if (likely(skb_flags(skb) & C3CB_FLAG_NEED_HDR)) { |
| 647 | if ((req_completion && | ||
| 648 | c3cn->wr_unacked == wrs_needed) || | ||
| 649 | (skb_flags(skb) & C3CB_FLAG_COMPL) || | ||
| 650 | c3cn->wr_unacked >= c3cn->wr_max / 2) { | ||
| 651 | req_completion = 1; | ||
| 641 | c3cn->wr_unacked = 0; | 652 | c3cn->wr_unacked = 0; |
| 642 | } | 653 | } |
| 643 | CXGB3_SKB_CB(skb)->flags &= ~C3CB_FLAG_NEED_HDR; | 654 | len += ulp_extra_len(skb); |
| 655 | make_tx_data_wr(c3cn, skb, len, req_completion); | ||
| 656 | c3cn->snd_nxt += len; | ||
| 657 | skb_flags(skb) &= ~C3CB_FLAG_NEED_HDR; | ||
| 644 | } | 658 | } |
| 645 | 659 | ||
| 646 | total_size += skb->truesize; | 660 | total_size += skb->truesize; |
| @@ -735,8 +749,11 @@ static void process_act_establish(struct s3_conn *c3cn, struct sk_buff *skb) | |||
| 735 | if (unlikely(c3cn_flag(c3cn, C3CN_ACTIVE_CLOSE_NEEDED))) | 749 | if (unlikely(c3cn_flag(c3cn, C3CN_ACTIVE_CLOSE_NEEDED))) |
| 736 | /* upper layer has requested closing */ | 750 | /* upper layer has requested closing */ |
| 737 | send_abort_req(c3cn); | 751 | send_abort_req(c3cn); |
| 738 | else if (c3cn_push_tx_frames(c3cn, 1)) | 752 | else { |
| 753 | if (skb_queue_len(&c3cn->write_queue)) | ||
| 754 | c3cn_push_tx_frames(c3cn, 1); | ||
| 739 | cxgb3i_conn_tx_open(c3cn); | 755 | cxgb3i_conn_tx_open(c3cn); |
| 756 | } | ||
| 740 | } | 757 | } |
| 741 | 758 | ||
| 742 | static int do_act_establish(struct t3cdev *cdev, struct sk_buff *skb, | 759 | static int do_act_establish(struct t3cdev *cdev, struct sk_buff *skb, |
| @@ -1082,8 +1099,8 @@ static void process_rx_iscsi_hdr(struct s3_conn *c3cn, struct sk_buff *skb) | |||
| 1082 | return; | 1099 | return; |
| 1083 | } | 1100 | } |
| 1084 | 1101 | ||
| 1085 | CXGB3_SKB_CB(skb)->seq = ntohl(hdr_cpl->seq); | 1102 | skb_tcp_seq(skb) = ntohl(hdr_cpl->seq); |
| 1086 | CXGB3_SKB_CB(skb)->flags = 0; | 1103 | skb_flags(skb) = 0; |
| 1087 | 1104 | ||
| 1088 | skb_reset_transport_header(skb); | 1105 | skb_reset_transport_header(skb); |
| 1089 | __skb_pull(skb, sizeof(struct cpl_iscsi_hdr)); | 1106 | __skb_pull(skb, sizeof(struct cpl_iscsi_hdr)); |
| @@ -1103,12 +1120,12 @@ static void process_rx_iscsi_hdr(struct s3_conn *c3cn, struct sk_buff *skb) | |||
| 1103 | goto abort_conn; | 1120 | goto abort_conn; |
| 1104 | 1121 | ||
| 1105 | skb_ulp_mode(skb) = ULP2_FLAG_DATA_READY; | 1122 | skb_ulp_mode(skb) = ULP2_FLAG_DATA_READY; |
| 1106 | skb_ulp_pdulen(skb) = ntohs(ddp_cpl.len); | 1123 | skb_rx_pdulen(skb) = ntohs(ddp_cpl.len); |
| 1107 | skb_ulp_ddigest(skb) = ntohl(ddp_cpl.ulp_crc); | 1124 | skb_rx_ddigest(skb) = ntohl(ddp_cpl.ulp_crc); |
| 1108 | status = ntohl(ddp_cpl.ddp_status); | 1125 | status = ntohl(ddp_cpl.ddp_status); |
| 1109 | 1126 | ||
| 1110 | c3cn_rx_debug("rx skb 0x%p, len %u, pdulen %u, ddp status 0x%x.\n", | 1127 | c3cn_rx_debug("rx skb 0x%p, len %u, pdulen %u, ddp status 0x%x.\n", |
| 1111 | skb, skb->len, skb_ulp_pdulen(skb), status); | 1128 | skb, skb->len, skb_rx_pdulen(skb), status); |
| 1112 | 1129 | ||
| 1113 | if (status & (1 << RX_DDP_STATUS_HCRC_SHIFT)) | 1130 | if (status & (1 << RX_DDP_STATUS_HCRC_SHIFT)) |
| 1114 | skb_ulp_mode(skb) |= ULP2_FLAG_HCRC_ERROR; | 1131 | skb_ulp_mode(skb) |= ULP2_FLAG_HCRC_ERROR; |
| @@ -1126,7 +1143,7 @@ static void process_rx_iscsi_hdr(struct s3_conn *c3cn, struct sk_buff *skb) | |||
| 1126 | } else if (status & (1 << RX_DDP_STATUS_DDP_SHIFT)) | 1143 | } else if (status & (1 << RX_DDP_STATUS_DDP_SHIFT)) |
| 1127 | skb_ulp_mode(skb) |= ULP2_FLAG_DATA_DDPED; | 1144 | skb_ulp_mode(skb) |= ULP2_FLAG_DATA_DDPED; |
| 1128 | 1145 | ||
| 1129 | c3cn->rcv_nxt = ntohl(ddp_cpl.seq) + skb_ulp_pdulen(skb); | 1146 | c3cn->rcv_nxt = ntohl(ddp_cpl.seq) + skb_rx_pdulen(skb); |
| 1130 | __pskb_trim(skb, len); | 1147 | __pskb_trim(skb, len); |
| 1131 | __skb_queue_tail(&c3cn->receive_queue, skb); | 1148 | __skb_queue_tail(&c3cn->receive_queue, skb); |
| 1132 | cxgb3i_conn_pdu_ready(c3cn); | 1149 | cxgb3i_conn_pdu_ready(c3cn); |
| @@ -1151,12 +1168,27 @@ static int do_iscsi_hdr(struct t3cdev *t3dev, struct sk_buff *skb, void *ctx) | |||
| 1151 | * Process an acknowledgment of WR completion. Advance snd_una and send the | 1168 | * Process an acknowledgment of WR completion. Advance snd_una and send the |
| 1152 | * next batch of work requests from the write queue. | 1169 | * next batch of work requests from the write queue. |
| 1153 | */ | 1170 | */ |
| 1171 | static void check_wr_invariants(struct s3_conn *c3cn) | ||
| 1172 | { | ||
| 1173 | int pending = count_pending_wrs(c3cn); | ||
| 1174 | |||
| 1175 | if (unlikely(c3cn->wr_avail + pending != c3cn->wr_max)) | ||
| 1176 | cxgb3i_log_error("TID %u: credit imbalance: avail %u, " | ||
| 1177 | "pending %u, total should be %u\n", | ||
| 1178 | c3cn->tid, c3cn->wr_avail, pending, | ||
| 1179 | c3cn->wr_max); | ||
| 1180 | } | ||
| 1181 | |||
| 1154 | static void process_wr_ack(struct s3_conn *c3cn, struct sk_buff *skb) | 1182 | static void process_wr_ack(struct s3_conn *c3cn, struct sk_buff *skb) |
| 1155 | { | 1183 | { |
| 1156 | struct cpl_wr_ack *hdr = cplhdr(skb); | 1184 | struct cpl_wr_ack *hdr = cplhdr(skb); |
| 1157 | unsigned int credits = ntohs(hdr->credits); | 1185 | unsigned int credits = ntohs(hdr->credits); |
| 1158 | u32 snd_una = ntohl(hdr->snd_una); | 1186 | u32 snd_una = ntohl(hdr->snd_una); |
| 1159 | 1187 | ||
| 1188 | c3cn_tx_debug("%u WR credits, avail %u, unack %u, TID %u, state %u.\n", | ||
| 1189 | credits, c3cn->wr_avail, c3cn->wr_unacked, | ||
| 1190 | c3cn->tid, c3cn->state); | ||
| 1191 | |||
| 1160 | c3cn->wr_avail += credits; | 1192 | c3cn->wr_avail += credits; |
| 1161 | if (c3cn->wr_unacked > c3cn->wr_max - c3cn->wr_avail) | 1193 | if (c3cn->wr_unacked > c3cn->wr_max - c3cn->wr_avail) |
| 1162 | c3cn->wr_unacked = c3cn->wr_max - c3cn->wr_avail; | 1194 | c3cn->wr_unacked = c3cn->wr_max - c3cn->wr_avail; |
| @@ -1171,6 +1203,17 @@ static void process_wr_ack(struct s3_conn *c3cn, struct sk_buff *skb) | |||
| 1171 | break; | 1203 | break; |
| 1172 | } | 1204 | } |
| 1173 | if (unlikely(credits < p->csum)) { | 1205 | if (unlikely(credits < p->csum)) { |
| 1206 | struct tx_data_wr *w = cplhdr(p); | ||
| 1207 | cxgb3i_log_error("TID %u got %u WR credits need %u, " | ||
| 1208 | "len %u, main body %u, frags %u, " | ||
| 1209 | "seq # %u, ACK una %u, ACK nxt %u, " | ||
| 1210 | "WR_AVAIL %u, WRs pending %u\n", | ||
| 1211 | c3cn->tid, credits, p->csum, p->len, | ||
| 1212 | p->len - p->data_len, | ||
| 1213 | skb_shinfo(p)->nr_frags, | ||
| 1214 | ntohl(w->sndseq), snd_una, | ||
| 1215 | ntohl(hdr->snd_nxt), c3cn->wr_avail, | ||
| 1216 | count_pending_wrs(c3cn) - credits); | ||
| 1174 | p->csum -= credits; | 1217 | p->csum -= credits; |
| 1175 | break; | 1218 | break; |
| 1176 | } else { | 1219 | } else { |
| @@ -1180,15 +1223,24 @@ static void process_wr_ack(struct s3_conn *c3cn, struct sk_buff *skb) | |||
| 1180 | } | 1223 | } |
| 1181 | } | 1224 | } |
| 1182 | 1225 | ||
| 1183 | if (unlikely(before(snd_una, c3cn->snd_una))) | 1226 | check_wr_invariants(c3cn); |
| 1227 | |||
| 1228 | if (unlikely(before(snd_una, c3cn->snd_una))) { | ||
| 1229 | cxgb3i_log_error("TID %u, unexpected sequence # %u in WR_ACK " | ||
| 1230 | "snd_una %u\n", | ||
| 1231 | c3cn->tid, snd_una, c3cn->snd_una); | ||
| 1184 | goto out_free; | 1232 | goto out_free; |
| 1233 | } | ||
| 1185 | 1234 | ||
| 1186 | if (c3cn->snd_una != snd_una) { | 1235 | if (c3cn->snd_una != snd_una) { |
| 1187 | c3cn->snd_una = snd_una; | 1236 | c3cn->snd_una = snd_una; |
| 1188 | dst_confirm(c3cn->dst_cache); | 1237 | dst_confirm(c3cn->dst_cache); |
| 1189 | } | 1238 | } |
| 1190 | 1239 | ||
| 1191 | if (skb_queue_len(&c3cn->write_queue) && c3cn_push_tx_frames(c3cn, 0)) | 1240 | if (skb_queue_len(&c3cn->write_queue)) { |
| 1241 | if (c3cn_push_tx_frames(c3cn, 0)) | ||
| 1242 | cxgb3i_conn_tx_open(c3cn); | ||
| 1243 | } else | ||
| 1192 | cxgb3i_conn_tx_open(c3cn); | 1244 | cxgb3i_conn_tx_open(c3cn); |
| 1193 | out_free: | 1245 | out_free: |
| 1194 | __kfree_skb(skb); | 1246 | __kfree_skb(skb); |
| @@ -1452,7 +1504,7 @@ static void init_offload_conn(struct s3_conn *c3cn, | |||
| 1452 | struct dst_entry *dst) | 1504 | struct dst_entry *dst) |
| 1453 | { | 1505 | { |
| 1454 | BUG_ON(c3cn->cdev != cdev); | 1506 | BUG_ON(c3cn->cdev != cdev); |
| 1455 | c3cn->wr_max = c3cn->wr_avail = T3C_DATA(cdev)->max_wrs; | 1507 | c3cn->wr_max = c3cn->wr_avail = T3C_DATA(cdev)->max_wrs - 1; |
| 1456 | c3cn->wr_unacked = 0; | 1508 | c3cn->wr_unacked = 0; |
| 1457 | c3cn->mss_idx = select_mss(c3cn, dst_mtu(dst)); | 1509 | c3cn->mss_idx = select_mss(c3cn, dst_mtu(dst)); |
| 1458 | 1510 | ||
| @@ -1671,9 +1723,17 @@ int cxgb3i_c3cn_send_pdus(struct s3_conn *c3cn, struct sk_buff *skb) | |||
| 1671 | goto out_err; | 1723 | goto out_err; |
| 1672 | } | 1724 | } |
| 1673 | 1725 | ||
| 1674 | err = -EPIPE; | ||
| 1675 | if (c3cn->err) { | 1726 | if (c3cn->err) { |
| 1676 | c3cn_tx_debug("c3cn 0x%p, err %d.\n", c3cn, c3cn->err); | 1727 | c3cn_tx_debug("c3cn 0x%p, err %d.\n", c3cn, c3cn->err); |
| 1728 | err = -EPIPE; | ||
| 1729 | goto out_err; | ||
| 1730 | } | ||
| 1731 | |||
| 1732 | if (c3cn->write_seq - c3cn->snd_una >= cxgb3_snd_win) { | ||
| 1733 | c3cn_tx_debug("c3cn 0x%p, snd %u - %u > %u.\n", | ||
| 1734 | c3cn, c3cn->write_seq, c3cn->snd_una, | ||
| 1735 | cxgb3_snd_win); | ||
| 1736 | err = -EAGAIN; | ||
| 1677 | goto out_err; | 1737 | goto out_err; |
| 1678 | } | 1738 | } |
| 1679 | 1739 | ||
diff --git a/drivers/scsi/cxgb3i/cxgb3i_offload.h b/drivers/scsi/cxgb3i/cxgb3i_offload.h index d23156907ffd..6344b9eb2589 100644 --- a/drivers/scsi/cxgb3i/cxgb3i_offload.h +++ b/drivers/scsi/cxgb3i/cxgb3i_offload.h | |||
| @@ -178,25 +178,33 @@ void cxgb3i_c3cn_release(struct s3_conn *); | |||
| 178 | * @flag: see C3CB_FLAG_* below | 178 | * @flag: see C3CB_FLAG_* below |
| 179 | * @ulp_mode: ULP mode/submode of sk_buff | 179 | * @ulp_mode: ULP mode/submode of sk_buff |
| 180 | * @seq: tcp sequence number | 180 | * @seq: tcp sequence number |
| 181 | * @ddigest: pdu data digest | ||
| 182 | * @pdulen: recovered pdu length | ||
| 183 | * @wr_data: scratch area for tx wr | ||
| 184 | */ | 181 | */ |
| 182 | struct cxgb3_skb_rx_cb { | ||
| 183 | __u32 ddigest; /* data digest */ | ||
| 184 | __u32 pdulen; /* recovered pdu length */ | ||
| 185 | }; | ||
| 186 | |||
| 187 | struct cxgb3_skb_tx_cb { | ||
| 188 | struct sk_buff *wr_next; /* next wr */ | ||
| 189 | }; | ||
| 190 | |||
| 185 | struct cxgb3_skb_cb { | 191 | struct cxgb3_skb_cb { |
| 186 | __u8 flags; | 192 | __u8 flags; |
| 187 | __u8 ulp_mode; | 193 | __u8 ulp_mode; |
| 188 | __u32 seq; | 194 | __u32 seq; |
| 189 | __u32 ddigest; | 195 | union { |
| 190 | __u32 pdulen; | 196 | struct cxgb3_skb_rx_cb rx; |
| 191 | struct sk_buff *wr_data; | 197 | struct cxgb3_skb_tx_cb tx; |
| 198 | }; | ||
| 192 | }; | 199 | }; |
| 193 | 200 | ||
| 194 | #define CXGB3_SKB_CB(skb) ((struct cxgb3_skb_cb *)&((skb)->cb[0])) | 201 | #define CXGB3_SKB_CB(skb) ((struct cxgb3_skb_cb *)&((skb)->cb[0])) |
| 195 | 202 | #define skb_flags(skb) (CXGB3_SKB_CB(skb)->flags) | |
| 196 | #define skb_ulp_mode(skb) (CXGB3_SKB_CB(skb)->ulp_mode) | 203 | #define skb_ulp_mode(skb) (CXGB3_SKB_CB(skb)->ulp_mode) |
| 197 | #define skb_ulp_ddigest(skb) (CXGB3_SKB_CB(skb)->ddigest) | 204 | #define skb_tcp_seq(skb) (CXGB3_SKB_CB(skb)->seq) |
| 198 | #define skb_ulp_pdulen(skb) (CXGB3_SKB_CB(skb)->pdulen) | 205 | #define skb_rx_ddigest(skb) (CXGB3_SKB_CB(skb)->rx.ddigest) |
| 199 | #define skb_wr_data(skb) (CXGB3_SKB_CB(skb)->wr_data) | 206 | #define skb_rx_pdulen(skb) (CXGB3_SKB_CB(skb)->rx.pdulen) |
| 207 | #define skb_tx_wr_next(skb) (CXGB3_SKB_CB(skb)->tx.wr_next) | ||
| 200 | 208 | ||
| 201 | enum c3cb_flags { | 209 | enum c3cb_flags { |
| 202 | C3CB_FLAG_NEED_HDR = 1 << 0, /* packet needs a TX_DATA_WR header */ | 210 | C3CB_FLAG_NEED_HDR = 1 << 0, /* packet needs a TX_DATA_WR header */ |
| @@ -217,6 +225,7 @@ struct sge_opaque_hdr { | |||
| 217 | /* for TX: a skb must have a headroom of at least TX_HEADER_LEN bytes */ | 225 | /* for TX: a skb must have a headroom of at least TX_HEADER_LEN bytes */ |
| 218 | #define TX_HEADER_LEN \ | 226 | #define TX_HEADER_LEN \ |
| 219 | (sizeof(struct tx_data_wr) + sizeof(struct sge_opaque_hdr)) | 227 | (sizeof(struct tx_data_wr) + sizeof(struct sge_opaque_hdr)) |
| 228 | #define SKB_TX_HEADROOM SKB_MAX_HEAD(TX_HEADER_LEN) | ||
| 220 | 229 | ||
| 221 | /* | 230 | /* |
| 222 | * get and set private ip for iscsi traffic | 231 | * get and set private ip for iscsi traffic |
diff --git a/drivers/scsi/cxgb3i/cxgb3i_pdu.c b/drivers/scsi/cxgb3i/cxgb3i_pdu.c index ce7ce8c6094c..17115c230d65 100644 --- a/drivers/scsi/cxgb3i/cxgb3i_pdu.c +++ b/drivers/scsi/cxgb3i/cxgb3i_pdu.c | |||
| @@ -32,6 +32,10 @@ | |||
| 32 | #define cxgb3i_tx_debug(fmt...) | 32 | #define cxgb3i_tx_debug(fmt...) |
| 33 | #endif | 33 | #endif |
| 34 | 34 | ||
| 35 | /* always allocate rooms for AHS */ | ||
| 36 | #define SKB_TX_PDU_HEADER_LEN \ | ||
| 37 | (sizeof(struct iscsi_hdr) + ISCSI_MAX_AHS_SIZE) | ||
| 38 | static unsigned int skb_extra_headroom; | ||
| 35 | static struct page *pad_page; | 39 | static struct page *pad_page; |
| 36 | 40 | ||
| 37 | /* | 41 | /* |
| @@ -146,12 +150,13 @@ static inline void tx_skb_setmode(struct sk_buff *skb, int hcrc, int dcrc) | |||
| 146 | 150 | ||
| 147 | void cxgb3i_conn_cleanup_task(struct iscsi_task *task) | 151 | void cxgb3i_conn_cleanup_task(struct iscsi_task *task) |
| 148 | { | 152 | { |
| 149 | struct iscsi_tcp_task *tcp_task = task->dd_data; | 153 | struct cxgb3i_task_data *tdata = task->dd_data + |
| 154 | sizeof(struct iscsi_tcp_task); | ||
| 150 | 155 | ||
| 151 | /* never reached the xmit task callout */ | 156 | /* never reached the xmit task callout */ |
| 152 | if (tcp_task->dd_data) | 157 | if (tdata->skb) |
| 153 | kfree_skb(tcp_task->dd_data); | 158 | __kfree_skb(tdata->skb); |
| 154 | tcp_task->dd_data = NULL; | 159 | memset(tdata, 0, sizeof(struct cxgb3i_task_data)); |
| 155 | 160 | ||
| 156 | /* MNC - Do we need a check in case this is called but | 161 | /* MNC - Do we need a check in case this is called but |
| 157 | * cxgb3i_conn_alloc_pdu has never been called on the task */ | 162 | * cxgb3i_conn_alloc_pdu has never been called on the task */ |
| @@ -159,28 +164,102 @@ void cxgb3i_conn_cleanup_task(struct iscsi_task *task) | |||
| 159 | iscsi_tcp_cleanup_task(task); | 164 | iscsi_tcp_cleanup_task(task); |
| 160 | } | 165 | } |
| 161 | 166 | ||
| 162 | /* | 167 | static int sgl_seek_offset(struct scatterlist *sgl, unsigned int sgcnt, |
| 163 | * We do not support ahs yet | 168 | unsigned int offset, unsigned int *off, |
| 164 | */ | 169 | struct scatterlist **sgp) |
| 170 | { | ||
| 171 | int i; | ||
| 172 | struct scatterlist *sg; | ||
| 173 | |||
| 174 | for_each_sg(sgl, sg, sgcnt, i) { | ||
| 175 | if (offset < sg->length) { | ||
| 176 | *off = offset; | ||
| 177 | *sgp = sg; | ||
| 178 | return 0; | ||
| 179 | } | ||
| 180 | offset -= sg->length; | ||
| 181 | } | ||
| 182 | return -EFAULT; | ||
| 183 | } | ||
| 184 | |||
| 185 | static int sgl_read_to_frags(struct scatterlist *sg, unsigned int sgoffset, | ||
| 186 | unsigned int dlen, skb_frag_t *frags, | ||
| 187 | int frag_max) | ||
| 188 | { | ||
| 189 | unsigned int datalen = dlen; | ||
| 190 | unsigned int sglen = sg->length - sgoffset; | ||
| 191 | struct page *page = sg_page(sg); | ||
| 192 | int i; | ||
| 193 | |||
| 194 | i = 0; | ||
| 195 | do { | ||
| 196 | unsigned int copy; | ||
| 197 | |||
| 198 | if (!sglen) { | ||
| 199 | sg = sg_next(sg); | ||
| 200 | if (!sg) { | ||
| 201 | cxgb3i_log_error("%s, sg NULL, len %u/%u.\n", | ||
| 202 | __func__, datalen, dlen); | ||
| 203 | return -EINVAL; | ||
| 204 | } | ||
| 205 | sgoffset = 0; | ||
| 206 | sglen = sg->length; | ||
| 207 | page = sg_page(sg); | ||
| 208 | |||
| 209 | } | ||
| 210 | copy = min(datalen, sglen); | ||
| 211 | if (i && page == frags[i - 1].page && | ||
| 212 | sgoffset + sg->offset == | ||
| 213 | frags[i - 1].page_offset + frags[i - 1].size) { | ||
| 214 | frags[i - 1].size += copy; | ||
| 215 | } else { | ||
| 216 | if (i >= frag_max) { | ||
| 217 | cxgb3i_log_error("%s, too many pages %u, " | ||
| 218 | "dlen %u.\n", __func__, | ||
| 219 | frag_max, dlen); | ||
| 220 | return -EINVAL; | ||
| 221 | } | ||
| 222 | |||
| 223 | frags[i].page = page; | ||
| 224 | frags[i].page_offset = sg->offset + sgoffset; | ||
| 225 | frags[i].size = copy; | ||
| 226 | i++; | ||
| 227 | } | ||
| 228 | datalen -= copy; | ||
| 229 | sgoffset += copy; | ||
| 230 | sglen -= copy; | ||
| 231 | } while (datalen); | ||
| 232 | |||
| 233 | return i; | ||
| 234 | } | ||
| 235 | |||
| 165 | int cxgb3i_conn_alloc_pdu(struct iscsi_task *task, u8 opcode) | 236 | int cxgb3i_conn_alloc_pdu(struct iscsi_task *task, u8 opcode) |
| 166 | { | 237 | { |
| 238 | struct iscsi_conn *conn = task->conn; | ||
| 167 | struct iscsi_tcp_task *tcp_task = task->dd_data; | 239 | struct iscsi_tcp_task *tcp_task = task->dd_data; |
| 168 | struct sk_buff *skb; | 240 | struct cxgb3i_task_data *tdata = task->dd_data + sizeof(*tcp_task); |
| 241 | struct scsi_cmnd *sc = task->sc; | ||
| 242 | int headroom = SKB_TX_PDU_HEADER_LEN; | ||
| 169 | 243 | ||
| 244 | tcp_task->dd_data = tdata; | ||
| 170 | task->hdr = NULL; | 245 | task->hdr = NULL; |
| 171 | /* always allocate rooms for AHS */ | 246 | |
| 172 | skb = alloc_skb(sizeof(struct iscsi_hdr) + ISCSI_MAX_AHS_SIZE + | 247 | /* write command, need to send data pdus */ |
| 173 | TX_HEADER_LEN, GFP_ATOMIC); | 248 | if (skb_extra_headroom && (opcode == ISCSI_OP_SCSI_DATA_OUT || |
| 174 | if (!skb) | 249 | (opcode == ISCSI_OP_SCSI_CMD && |
| 250 | (scsi_bidi_cmnd(sc) || sc->sc_data_direction == DMA_TO_DEVICE)))) | ||
| 251 | headroom += min(skb_extra_headroom, conn->max_xmit_dlength); | ||
| 252 | |||
| 253 | tdata->skb = alloc_skb(TX_HEADER_LEN + headroom, GFP_ATOMIC); | ||
| 254 | if (!tdata->skb) | ||
| 175 | return -ENOMEM; | 255 | return -ENOMEM; |
| 256 | skb_reserve(tdata->skb, TX_HEADER_LEN); | ||
| 176 | 257 | ||
| 177 | cxgb3i_tx_debug("task 0x%p, opcode 0x%x, skb 0x%p.\n", | 258 | cxgb3i_tx_debug("task 0x%p, opcode 0x%x, skb 0x%p.\n", |
| 178 | task, opcode, skb); | 259 | task, opcode, tdata->skb); |
| 179 | 260 | ||
| 180 | tcp_task->dd_data = skb; | 261 | task->hdr = (struct iscsi_hdr *)tdata->skb->data; |
| 181 | skb_reserve(skb, TX_HEADER_LEN); | 262 | task->hdr_max = SKB_TX_PDU_HEADER_LEN; |
| 182 | task->hdr = (struct iscsi_hdr *)skb->data; | ||
| 183 | task->hdr_max = sizeof(struct iscsi_hdr); | ||
| 184 | 263 | ||
| 185 | /* data_out uses scsi_cmd's itt */ | 264 | /* data_out uses scsi_cmd's itt */ |
| 186 | if (opcode != ISCSI_OP_SCSI_DATA_OUT) | 265 | if (opcode != ISCSI_OP_SCSI_DATA_OUT) |
| @@ -192,13 +271,13 @@ int cxgb3i_conn_alloc_pdu(struct iscsi_task *task, u8 opcode) | |||
| 192 | int cxgb3i_conn_init_pdu(struct iscsi_task *task, unsigned int offset, | 271 | int cxgb3i_conn_init_pdu(struct iscsi_task *task, unsigned int offset, |
| 193 | unsigned int count) | 272 | unsigned int count) |
| 194 | { | 273 | { |
| 195 | struct iscsi_tcp_task *tcp_task = task->dd_data; | ||
| 196 | struct sk_buff *skb = tcp_task->dd_data; | ||
| 197 | struct iscsi_conn *conn = task->conn; | 274 | struct iscsi_conn *conn = task->conn; |
| 198 | struct page *pg; | 275 | struct iscsi_tcp_task *tcp_task = task->dd_data; |
| 276 | struct cxgb3i_task_data *tdata = tcp_task->dd_data; | ||
| 277 | struct sk_buff *skb = tdata->skb; | ||
| 199 | unsigned int datalen = count; | 278 | unsigned int datalen = count; |
| 200 | int i, padlen = iscsi_padding(count); | 279 | int i, padlen = iscsi_padding(count); |
| 201 | skb_frag_t *frag; | 280 | struct page *pg; |
| 202 | 281 | ||
| 203 | cxgb3i_tx_debug("task 0x%p,0x%p, offset %u, count %u, skb 0x%p.\n", | 282 | cxgb3i_tx_debug("task 0x%p,0x%p, offset %u, count %u, skb 0x%p.\n", |
| 204 | task, task->sc, offset, count, skb); | 283 | task, task->sc, offset, count, skb); |
| @@ -209,90 +288,94 @@ int cxgb3i_conn_init_pdu(struct iscsi_task *task, unsigned int offset, | |||
| 209 | return 0; | 288 | return 0; |
| 210 | 289 | ||
| 211 | if (task->sc) { | 290 | if (task->sc) { |
| 212 | struct scatterlist *sg; | 291 | struct scsi_data_buffer *sdb = scsi_out(task->sc); |
| 213 | struct scsi_data_buffer *sdb; | 292 | struct scatterlist *sg = NULL; |
| 214 | unsigned int sgoffset = offset; | 293 | int err; |
| 215 | struct page *sgpg; | 294 | |
| 216 | unsigned int sglen; | 295 | tdata->offset = offset; |
| 217 | 296 | tdata->count = count; | |
| 218 | sdb = scsi_out(task->sc); | 297 | err = sgl_seek_offset(sdb->table.sgl, sdb->table.nents, |
| 219 | sg = sdb->table.sgl; | 298 | tdata->offset, &tdata->sgoffset, &sg); |
| 220 | 299 | if (err < 0) { | |
| 221 | for_each_sg(sdb->table.sgl, sg, sdb->table.nents, i) { | 300 | cxgb3i_log_warn("tpdu, sgl %u, bad offset %u/%u.\n", |
| 222 | cxgb3i_tx_debug("sg %d, page 0x%p, len %u offset %u\n", | 301 | sdb->table.nents, tdata->offset, |
| 223 | i, sg_page(sg), sg->length, sg->offset); | 302 | sdb->length); |
| 224 | 303 | return err; | |
| 225 | if (sgoffset < sg->length) | ||
| 226 | break; | ||
| 227 | sgoffset -= sg->length; | ||
| 228 | } | 304 | } |
| 229 | sgpg = sg_page(sg); | 305 | err = sgl_read_to_frags(sg, tdata->sgoffset, tdata->count, |
| 230 | sglen = sg->length - sgoffset; | 306 | tdata->frags, MAX_PDU_FRAGS); |
| 231 | 307 | if (err < 0) { | |
| 232 | do { | 308 | cxgb3i_log_warn("tpdu, sgl %u, bad offset %u + %u.\n", |
| 233 | int j = skb_shinfo(skb)->nr_frags; | 309 | sdb->table.nents, tdata->offset, |
| 234 | unsigned int copy; | 310 | tdata->count); |
| 235 | 311 | return err; | |
| 236 | if (!sglen) { | 312 | } |
| 237 | sg = sg_next(sg); | 313 | tdata->nr_frags = err; |
| 238 | sgpg = sg_page(sg); | 314 | |
| 239 | sgoffset = 0; | 315 | if (tdata->nr_frags > MAX_SKB_FRAGS || |
| 240 | sglen = sg->length; | 316 | (padlen && tdata->nr_frags == MAX_SKB_FRAGS)) { |
| 241 | ++i; | 317 | char *dst = skb->data + task->hdr_len; |
| 318 | skb_frag_t *frag = tdata->frags; | ||
| 319 | |||
| 320 | /* data fits in the skb's headroom */ | ||
| 321 | for (i = 0; i < tdata->nr_frags; i++, frag++) { | ||
| 322 | char *src = kmap_atomic(frag->page, | ||
| 323 | KM_SOFTIRQ0); | ||
| 324 | |||
| 325 | memcpy(dst, src+frag->page_offset, frag->size); | ||
| 326 | dst += frag->size; | ||
| 327 | kunmap_atomic(src, KM_SOFTIRQ0); | ||
| 242 | } | 328 | } |
| 243 | copy = min(sglen, datalen); | 329 | if (padlen) { |
| 244 | if (j && skb_can_coalesce(skb, j, sgpg, | 330 | memset(dst, 0, padlen); |
| 245 | sg->offset + sgoffset)) { | 331 | padlen = 0; |
| 246 | skb_shinfo(skb)->frags[j - 1].size += copy; | ||
| 247 | } else { | ||
| 248 | get_page(sgpg); | ||
| 249 | skb_fill_page_desc(skb, j, sgpg, | ||
| 250 | sg->offset + sgoffset, copy); | ||
| 251 | } | 332 | } |
| 252 | sgoffset += copy; | 333 | skb_put(skb, count + padlen); |
| 253 | sglen -= copy; | 334 | } else { |
| 254 | datalen -= copy; | 335 | /* data fit into frag_list */ |
| 255 | } while (datalen); | 336 | for (i = 0; i < tdata->nr_frags; i++) |
| 337 | get_page(tdata->frags[i].page); | ||
| 338 | |||
| 339 | memcpy(skb_shinfo(skb)->frags, tdata->frags, | ||
| 340 | sizeof(skb_frag_t) * tdata->nr_frags); | ||
| 341 | skb_shinfo(skb)->nr_frags = tdata->nr_frags; | ||
| 342 | skb->len += count; | ||
| 343 | skb->data_len += count; | ||
| 344 | skb->truesize += count; | ||
| 345 | } | ||
| 346 | |||
| 256 | } else { | 347 | } else { |
| 257 | pg = virt_to_page(task->data); | 348 | pg = virt_to_page(task->data); |
| 258 | 349 | ||
| 259 | while (datalen) { | 350 | get_page(pg); |
| 260 | i = skb_shinfo(skb)->nr_frags; | 351 | skb_fill_page_desc(skb, 0, pg, offset_in_page(task->data), |
| 261 | frag = &skb_shinfo(skb)->frags[i]; | 352 | count); |
| 262 | 353 | skb->len += count; | |
| 263 | get_page(pg); | 354 | skb->data_len += count; |
| 264 | frag->page = pg; | 355 | skb->truesize += count; |
| 265 | frag->page_offset = 0; | ||
| 266 | frag->size = min((unsigned int)PAGE_SIZE, datalen); | ||
| 267 | |||
| 268 | skb_shinfo(skb)->nr_frags++; | ||
| 269 | datalen -= frag->size; | ||
| 270 | pg++; | ||
| 271 | } | ||
| 272 | } | 356 | } |
| 273 | 357 | ||
| 274 | if (padlen) { | 358 | if (padlen) { |
| 275 | i = skb_shinfo(skb)->nr_frags; | 359 | i = skb_shinfo(skb)->nr_frags; |
| 276 | frag = &skb_shinfo(skb)->frags[i]; | 360 | get_page(pad_page); |
| 277 | frag->page = pad_page; | 361 | skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags, pad_page, 0, |
| 278 | frag->page_offset = 0; | 362 | padlen); |
| 279 | frag->size = padlen; | 363 | |
| 280 | skb_shinfo(skb)->nr_frags++; | 364 | skb->data_len += padlen; |
| 365 | skb->truesize += padlen; | ||
| 366 | skb->len += padlen; | ||
| 281 | } | 367 | } |
| 282 | 368 | ||
| 283 | datalen = count + padlen; | ||
| 284 | skb->data_len += datalen; | ||
| 285 | skb->truesize += datalen; | ||
| 286 | skb->len += datalen; | ||
| 287 | return 0; | 369 | return 0; |
| 288 | } | 370 | } |
| 289 | 371 | ||
| 290 | int cxgb3i_conn_xmit_pdu(struct iscsi_task *task) | 372 | int cxgb3i_conn_xmit_pdu(struct iscsi_task *task) |
| 291 | { | 373 | { |
| 292 | struct iscsi_tcp_task *tcp_task = task->dd_data; | ||
| 293 | struct sk_buff *skb = tcp_task->dd_data; | ||
| 294 | struct iscsi_tcp_conn *tcp_conn = task->conn->dd_data; | 374 | struct iscsi_tcp_conn *tcp_conn = task->conn->dd_data; |
| 295 | struct cxgb3i_conn *cconn = tcp_conn->dd_data; | 375 | struct cxgb3i_conn *cconn = tcp_conn->dd_data; |
| 376 | struct iscsi_tcp_task *tcp_task = task->dd_data; | ||
| 377 | struct cxgb3i_task_data *tdata = tcp_task->dd_data; | ||
| 378 | struct sk_buff *skb = tdata->skb; | ||
| 296 | unsigned int datalen; | 379 | unsigned int datalen; |
| 297 | int err; | 380 | int err; |
| 298 | 381 | ||
| @@ -300,13 +383,14 @@ int cxgb3i_conn_xmit_pdu(struct iscsi_task *task) | |||
| 300 | return 0; | 383 | return 0; |
| 301 | 384 | ||
| 302 | datalen = skb->data_len; | 385 | datalen = skb->data_len; |
| 303 | tcp_task->dd_data = NULL; | 386 | tdata->skb = NULL; |
| 304 | err = cxgb3i_c3cn_send_pdus(cconn->cep->c3cn, skb); | 387 | err = cxgb3i_c3cn_send_pdus(cconn->cep->c3cn, skb); |
| 305 | cxgb3i_tx_debug("task 0x%p, skb 0x%p, len %u/%u, rv %d.\n", | ||
| 306 | task, skb, skb->len, skb->data_len, err); | ||
| 307 | if (err > 0) { | 388 | if (err > 0) { |
| 308 | int pdulen = err; | 389 | int pdulen = err; |
| 309 | 390 | ||
| 391 | cxgb3i_tx_debug("task 0x%p, skb 0x%p, len %u/%u, rv %d.\n", | ||
| 392 | task, skb, skb->len, skb->data_len, err); | ||
| 393 | |||
| 310 | if (task->conn->hdrdgst_en) | 394 | if (task->conn->hdrdgst_en) |
| 311 | pdulen += ISCSI_DIGEST_SIZE; | 395 | pdulen += ISCSI_DIGEST_SIZE; |
| 312 | if (datalen && task->conn->datadgst_en) | 396 | if (datalen && task->conn->datadgst_en) |
| @@ -325,12 +409,14 @@ int cxgb3i_conn_xmit_pdu(struct iscsi_task *task) | |||
| 325 | return err; | 409 | return err; |
| 326 | } | 410 | } |
| 327 | /* reset skb to send when we are called again */ | 411 | /* reset skb to send when we are called again */ |
| 328 | tcp_task->dd_data = skb; | 412 | tdata->skb = skb; |
| 329 | return -EAGAIN; | 413 | return -EAGAIN; |
| 330 | } | 414 | } |
| 331 | 415 | ||
| 332 | int cxgb3i_pdu_init(void) | 416 | int cxgb3i_pdu_init(void) |
| 333 | { | 417 | { |
| 418 | if (SKB_TX_HEADROOM > (512 * MAX_SKB_FRAGS)) | ||
| 419 | skb_extra_headroom = SKB_TX_HEADROOM; | ||
| 334 | pad_page = alloc_page(GFP_KERNEL); | 420 | pad_page = alloc_page(GFP_KERNEL); |
| 335 | if (!pad_page) | 421 | if (!pad_page) |
| 336 | return -ENOMEM; | 422 | return -ENOMEM; |
| @@ -366,7 +452,9 @@ void cxgb3i_conn_pdu_ready(struct s3_conn *c3cn) | |||
| 366 | skb = skb_peek(&c3cn->receive_queue); | 452 | skb = skb_peek(&c3cn->receive_queue); |
| 367 | while (!err && skb) { | 453 | while (!err && skb) { |
| 368 | __skb_unlink(skb, &c3cn->receive_queue); | 454 | __skb_unlink(skb, &c3cn->receive_queue); |
| 369 | read += skb_ulp_pdulen(skb); | 455 | read += skb_rx_pdulen(skb); |
| 456 | cxgb3i_rx_debug("conn 0x%p, cn 0x%p, rx skb 0x%p, pdulen %u.\n", | ||
| 457 | conn, c3cn, skb, skb_rx_pdulen(skb)); | ||
| 370 | err = cxgb3i_conn_read_pdu_skb(conn, skb); | 458 | err = cxgb3i_conn_read_pdu_skb(conn, skb); |
| 371 | __kfree_skb(skb); | 459 | __kfree_skb(skb); |
| 372 | skb = skb_peek(&c3cn->receive_queue); | 460 | skb = skb_peek(&c3cn->receive_queue); |
| @@ -377,6 +465,11 @@ void cxgb3i_conn_pdu_ready(struct s3_conn *c3cn) | |||
| 377 | cxgb3i_c3cn_rx_credits(c3cn, read); | 465 | cxgb3i_c3cn_rx_credits(c3cn, read); |
| 378 | } | 466 | } |
| 379 | conn->rxdata_octets += read; | 467 | conn->rxdata_octets += read; |
| 468 | |||
| 469 | if (err) { | ||
| 470 | cxgb3i_log_info("conn 0x%p rx failed err %d.\n", conn, err); | ||
| 471 | iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED); | ||
| 472 | } | ||
| 380 | } | 473 | } |
| 381 | 474 | ||
| 382 | void cxgb3i_conn_tx_open(struct s3_conn *c3cn) | 475 | void cxgb3i_conn_tx_open(struct s3_conn *c3cn) |
diff --git a/drivers/scsi/cxgb3i/cxgb3i_pdu.h b/drivers/scsi/cxgb3i/cxgb3i_pdu.h index a3f685cc2362..0770b23d90da 100644 --- a/drivers/scsi/cxgb3i/cxgb3i_pdu.h +++ b/drivers/scsi/cxgb3i/cxgb3i_pdu.h | |||
| @@ -53,7 +53,7 @@ struct cpl_rx_data_ddp_norss { | |||
| 53 | #define ULP2_FLAG_DCRC_ERROR 0x20 | 53 | #define ULP2_FLAG_DCRC_ERROR 0x20 |
| 54 | #define ULP2_FLAG_PAD_ERROR 0x40 | 54 | #define ULP2_FLAG_PAD_ERROR 0x40 |
| 55 | 55 | ||
| 56 | void cxgb3i_conn_closing(struct s3_conn *); | 56 | void cxgb3i_conn_closing(struct s3_conn *c3cn); |
| 57 | void cxgb3i_conn_pdu_ready(struct s3_conn *c3cn); | 57 | void cxgb3i_conn_pdu_ready(struct s3_conn *c3cn); |
| 58 | void cxgb3i_conn_tx_open(struct s3_conn *c3cn); | 58 | void cxgb3i_conn_tx_open(struct s3_conn *c3cn); |
| 59 | #endif | 59 | #endif |
diff --git a/drivers/scsi/hptiop.c b/drivers/scsi/hptiop.c index a48e4990fe12..34be88d7afa5 100644 --- a/drivers/scsi/hptiop.c +++ b/drivers/scsi/hptiop.c | |||
| @@ -1251,6 +1251,7 @@ static struct pci_device_id hptiop_id_table[] = { | |||
| 1251 | { PCI_VDEVICE(TTI, 0x3530), (kernel_ulong_t)&hptiop_itl_ops }, | 1251 | { PCI_VDEVICE(TTI, 0x3530), (kernel_ulong_t)&hptiop_itl_ops }, |
| 1252 | { PCI_VDEVICE(TTI, 0x3560), (kernel_ulong_t)&hptiop_itl_ops }, | 1252 | { PCI_VDEVICE(TTI, 0x3560), (kernel_ulong_t)&hptiop_itl_ops }, |
| 1253 | { PCI_VDEVICE(TTI, 0x4322), (kernel_ulong_t)&hptiop_itl_ops }, | 1253 | { PCI_VDEVICE(TTI, 0x4322), (kernel_ulong_t)&hptiop_itl_ops }, |
| 1254 | { PCI_VDEVICE(TTI, 0x4321), (kernel_ulong_t)&hptiop_itl_ops }, | ||
| 1254 | { PCI_VDEVICE(TTI, 0x4210), (kernel_ulong_t)&hptiop_itl_ops }, | 1255 | { PCI_VDEVICE(TTI, 0x4210), (kernel_ulong_t)&hptiop_itl_ops }, |
| 1255 | { PCI_VDEVICE(TTI, 0x4211), (kernel_ulong_t)&hptiop_itl_ops }, | 1256 | { PCI_VDEVICE(TTI, 0x4211), (kernel_ulong_t)&hptiop_itl_ops }, |
| 1256 | { PCI_VDEVICE(TTI, 0x4310), (kernel_ulong_t)&hptiop_itl_ops }, | 1257 | { PCI_VDEVICE(TTI, 0x4310), (kernel_ulong_t)&hptiop_itl_ops }, |
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c index a1a511bdec8c..ed1e728763a2 100644 --- a/drivers/scsi/ibmvscsi/ibmvfc.c +++ b/drivers/scsi/ibmvscsi/ibmvfc.c | |||
| @@ -1573,9 +1573,6 @@ static int ibmvfc_queuecommand(struct scsi_cmnd *cmnd, | |||
| 1573 | vfc_cmd->resp_len = sizeof(vfc_cmd->rsp); | 1573 | vfc_cmd->resp_len = sizeof(vfc_cmd->rsp); |
| 1574 | vfc_cmd->cancel_key = (unsigned long)cmnd->device->hostdata; | 1574 | vfc_cmd->cancel_key = (unsigned long)cmnd->device->hostdata; |
| 1575 | vfc_cmd->tgt_scsi_id = rport->port_id; | 1575 | vfc_cmd->tgt_scsi_id = rport->port_id; |
| 1576 | if ((rport->supported_classes & FC_COS_CLASS3) && | ||
| 1577 | (fc_host_supported_classes(vhost->host) & FC_COS_CLASS3)) | ||
| 1578 | vfc_cmd->flags = IBMVFC_CLASS_3_ERR; | ||
| 1579 | vfc_cmd->iu.xfer_len = scsi_bufflen(cmnd); | 1576 | vfc_cmd->iu.xfer_len = scsi_bufflen(cmnd); |
| 1580 | int_to_scsilun(cmnd->device->lun, &vfc_cmd->iu.lun); | 1577 | int_to_scsilun(cmnd->device->lun, &vfc_cmd->iu.lun); |
| 1581 | memcpy(vfc_cmd->iu.cdb, cmnd->cmnd, cmnd->cmd_len); | 1578 | memcpy(vfc_cmd->iu.cdb, cmnd->cmnd, cmnd->cmd_len); |
| @@ -3266,6 +3263,7 @@ static int ibmvfc_alloc_target(struct ibmvfc_host *vhost, u64 scsi_id) | |||
| 3266 | return -ENOMEM; | 3263 | return -ENOMEM; |
| 3267 | } | 3264 | } |
| 3268 | 3265 | ||
| 3266 | memset(tgt, 0, sizeof(*tgt)); | ||
| 3269 | tgt->scsi_id = scsi_id; | 3267 | tgt->scsi_id = scsi_id; |
| 3270 | tgt->new_scsi_id = scsi_id; | 3268 | tgt->new_scsi_id = scsi_id; |
| 3271 | tgt->vhost = vhost; | 3269 | tgt->vhost = vhost; |
| @@ -3576,9 +3574,18 @@ static void ibmvfc_log_ae(struct ibmvfc_host *vhost, int events) | |||
| 3576 | static void ibmvfc_tgt_add_rport(struct ibmvfc_target *tgt) | 3574 | static void ibmvfc_tgt_add_rport(struct ibmvfc_target *tgt) |
| 3577 | { | 3575 | { |
| 3578 | struct ibmvfc_host *vhost = tgt->vhost; | 3576 | struct ibmvfc_host *vhost = tgt->vhost; |
| 3579 | struct fc_rport *rport; | 3577 | struct fc_rport *rport = tgt->rport; |
| 3580 | unsigned long flags; | 3578 | unsigned long flags; |
| 3581 | 3579 | ||
| 3580 | if (rport) { | ||
| 3581 | tgt_dbg(tgt, "Setting rport roles\n"); | ||
| 3582 | fc_remote_port_rolechg(rport, tgt->ids.roles); | ||
| 3583 | spin_lock_irqsave(vhost->host->host_lock, flags); | ||
| 3584 | ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); | ||
| 3585 | spin_unlock_irqrestore(vhost->host->host_lock, flags); | ||
| 3586 | return; | ||
| 3587 | } | ||
| 3588 | |||
| 3582 | tgt_dbg(tgt, "Adding rport\n"); | 3589 | tgt_dbg(tgt, "Adding rport\n"); |
| 3583 | rport = fc_remote_port_add(vhost->host, 0, &tgt->ids); | 3590 | rport = fc_remote_port_add(vhost->host, 0, &tgt->ids); |
| 3584 | spin_lock_irqsave(vhost->host->host_lock, flags); | 3591 | spin_lock_irqsave(vhost->host->host_lock, flags); |
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.h b/drivers/scsi/ibmvscsi/ibmvfc.h index 87dafd0f8d44..b21e071b9862 100644 --- a/drivers/scsi/ibmvscsi/ibmvfc.h +++ b/drivers/scsi/ibmvscsi/ibmvfc.h | |||
| @@ -32,7 +32,7 @@ | |||
| 32 | #define IBMVFC_DRIVER_VERSION "1.0.4" | 32 | #define IBMVFC_DRIVER_VERSION "1.0.4" |
| 33 | #define IBMVFC_DRIVER_DATE "(November 14, 2008)" | 33 | #define IBMVFC_DRIVER_DATE "(November 14, 2008)" |
| 34 | 34 | ||
| 35 | #define IBMVFC_DEFAULT_TIMEOUT 15 | 35 | #define IBMVFC_DEFAULT_TIMEOUT 60 |
| 36 | #define IBMVFC_INIT_TIMEOUT 120 | 36 | #define IBMVFC_INIT_TIMEOUT 120 |
| 37 | #define IBMVFC_MAX_REQUESTS_DEFAULT 100 | 37 | #define IBMVFC_MAX_REQUESTS_DEFAULT 100 |
| 38 | 38 | ||
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c index 74d07d137dae..c9aa7611e408 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c | |||
| @@ -432,6 +432,7 @@ static int map_sg_data(struct scsi_cmnd *cmd, | |||
| 432 | sdev_printk(KERN_ERR, cmd->device, | 432 | sdev_printk(KERN_ERR, cmd->device, |
| 433 | "Can't allocate memory " | 433 | "Can't allocate memory " |
| 434 | "for indirect table\n"); | 434 | "for indirect table\n"); |
| 435 | scsi_dma_unmap(cmd); | ||
| 435 | return 0; | 436 | return 0; |
| 436 | } | 437 | } |
| 437 | } | 438 | } |
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c index 257c24115de9..809d32d95c76 100644 --- a/drivers/scsi/libiscsi.c +++ b/drivers/scsi/libiscsi.c | |||
| @@ -1998,6 +1998,8 @@ int iscsi_host_add(struct Scsi_Host *shost, struct device *pdev) | |||
| 1998 | if (!shost->can_queue) | 1998 | if (!shost->can_queue) |
| 1999 | shost->can_queue = ISCSI_DEF_XMIT_CMDS_MAX; | 1999 | shost->can_queue = ISCSI_DEF_XMIT_CMDS_MAX; |
| 2000 | 2000 | ||
| 2001 | if (!shost->transportt->eh_timed_out) | ||
| 2002 | shost->transportt->eh_timed_out = iscsi_eh_cmd_timed_out; | ||
| 2001 | return scsi_add_host(shost, pdev); | 2003 | return scsi_add_host(shost, pdev); |
| 2002 | } | 2004 | } |
| 2003 | EXPORT_SYMBOL_GPL(iscsi_host_add); | 2005 | EXPORT_SYMBOL_GPL(iscsi_host_add); |
| @@ -2020,7 +2022,6 @@ struct Scsi_Host *iscsi_host_alloc(struct scsi_host_template *sht, | |||
| 2020 | shost = scsi_host_alloc(sht, sizeof(struct iscsi_host) + dd_data_size); | 2022 | shost = scsi_host_alloc(sht, sizeof(struct iscsi_host) + dd_data_size); |
| 2021 | if (!shost) | 2023 | if (!shost) |
| 2022 | return NULL; | 2024 | return NULL; |
| 2023 | shost->transportt->eh_timed_out = iscsi_eh_cmd_timed_out; | ||
| 2024 | 2025 | ||
| 2025 | if (qdepth > ISCSI_MAX_CMD_PER_LUN || qdepth < 1) { | 2026 | if (qdepth > ISCSI_MAX_CMD_PER_LUN || qdepth < 1) { |
| 2026 | if (qdepth != 0) | 2027 | if (qdepth != 0) |
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c index a8f30bdaff69..a7302480bc4a 100644 --- a/drivers/scsi/lpfc/lpfc_els.c +++ b/drivers/scsi/lpfc/lpfc_els.c | |||
| @@ -5258,6 +5258,7 @@ lpfc_send_els_event(struct lpfc_vport *vport, | |||
| 5258 | sizeof(struct lpfc_name)); | 5258 | sizeof(struct lpfc_name)); |
| 5259 | break; | 5259 | break; |
| 5260 | default: | 5260 | default: |
| 5261 | kfree(els_data); | ||
| 5261 | return; | 5262 | return; |
| 5262 | } | 5263 | } |
| 5263 | memcpy(els_data->wwpn, &ndlp->nlp_portname, sizeof(struct lpfc_name)); | 5264 | memcpy(els_data->wwpn, &ndlp->nlp_portname, sizeof(struct lpfc_name)); |
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 33a3c13fd893..f4c57227ec18 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c | |||
| @@ -1265,13 +1265,6 @@ qla24xx_vport_delete(struct fc_vport *fc_vport) | |||
| 1265 | test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags)) | 1265 | test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags)) |
| 1266 | msleep(1000); | 1266 | msleep(1000); |
| 1267 | 1267 | ||
| 1268 | if (ha->mqenable) { | ||
| 1269 | if (qla25xx_delete_queues(vha, 0) != QLA_SUCCESS) | ||
| 1270 | qla_printk(KERN_WARNING, ha, | ||
| 1271 | "Queue delete failed.\n"); | ||
| 1272 | vha->req_ques[0] = ha->req_q_map[0]->id; | ||
| 1273 | } | ||
| 1274 | |||
| 1275 | qla24xx_disable_vp(vha); | 1268 | qla24xx_disable_vp(vha); |
| 1276 | 1269 | ||
| 1277 | fc_remove_host(vha->host); | 1270 | fc_remove_host(vha->host); |
| @@ -1293,6 +1286,12 @@ qla24xx_vport_delete(struct fc_vport *fc_vport) | |||
| 1293 | vha->host_no, vha->vp_idx, vha)); | 1286 | vha->host_no, vha->vp_idx, vha)); |
| 1294 | } | 1287 | } |
| 1295 | 1288 | ||
| 1289 | if (ha->mqenable) { | ||
| 1290 | if (qla25xx_delete_queues(vha, 0) != QLA_SUCCESS) | ||
| 1291 | qla_printk(KERN_WARNING, ha, | ||
| 1292 | "Queue delete failed.\n"); | ||
| 1293 | } | ||
| 1294 | |||
| 1296 | scsi_host_put(vha->host); | 1295 | scsi_host_put(vha->host); |
| 1297 | qla_printk(KERN_INFO, ha, "vport %d deleted\n", id); | 1296 | qla_printk(KERN_INFO, ha, "vport %d deleted\n", id); |
| 1298 | return 0; | 1297 | return 0; |
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 023ee77fb027..e0c5bb54b258 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h | |||
| @@ -2135,6 +2135,7 @@ struct qla_msix_entry { | |||
| 2135 | /* Work events. */ | 2135 | /* Work events. */ |
| 2136 | enum qla_work_type { | 2136 | enum qla_work_type { |
| 2137 | QLA_EVT_AEN, | 2137 | QLA_EVT_AEN, |
| 2138 | QLA_EVT_IDC_ACK, | ||
| 2138 | }; | 2139 | }; |
| 2139 | 2140 | ||
| 2140 | 2141 | ||
| @@ -2149,6 +2150,10 @@ struct qla_work_evt { | |||
| 2149 | enum fc_host_event_code code; | 2150 | enum fc_host_event_code code; |
| 2150 | u32 data; | 2151 | u32 data; |
| 2151 | } aen; | 2152 | } aen; |
| 2153 | struct { | ||
| 2154 | #define QLA_IDC_ACK_REGS 7 | ||
| 2155 | uint16_t mb[QLA_IDC_ACK_REGS]; | ||
| 2156 | } idc_ack; | ||
| 2152 | } u; | 2157 | } u; |
| 2153 | }; | 2158 | }; |
| 2154 | 2159 | ||
diff --git a/drivers/scsi/qla2xxx/qla_devtbl.h b/drivers/scsi/qla2xxx/qla_devtbl.h index d78d35e681ab..d6ea69df7c5c 100644 --- a/drivers/scsi/qla2xxx/qla_devtbl.h +++ b/drivers/scsi/qla2xxx/qla_devtbl.h | |||
| @@ -72,7 +72,7 @@ static char *qla2x00_model_name[QLA_MODEL_NAMES*2] = { | |||
| 72 | "QLA2462", "Sun PCI-X 2.0 to 4Gb FC, Dual Channel", /* 0x141 */ | 72 | "QLA2462", "Sun PCI-X 2.0 to 4Gb FC, Dual Channel", /* 0x141 */ |
| 73 | "QLE2460", "Sun PCI-Express to 2Gb FC, Single Channel", /* 0x142 */ | 73 | "QLE2460", "Sun PCI-Express to 2Gb FC, Single Channel", /* 0x142 */ |
| 74 | "QLE2462", "Sun PCI-Express to 4Gb FC, Single Channel", /* 0x143 */ | 74 | "QLE2462", "Sun PCI-Express to 4Gb FC, Single Channel", /* 0x143 */ |
| 75 | "QEM2462" "Server I/O Module 4Gb FC, Dual Channel", /* 0x144 */ | 75 | "QEM2462", "Server I/O Module 4Gb FC, Dual Channel", /* 0x144 */ |
| 76 | "QLE2440", "PCI-Express to 4Gb FC, Single Channel", /* 0x145 */ | 76 | "QLE2440", "PCI-Express to 4Gb FC, Single Channel", /* 0x145 */ |
| 77 | "QLE2464", "PCI-Express to 4Gb FC, Quad Channel", /* 0x146 */ | 77 | "QLE2464", "PCI-Express to 4Gb FC, Quad Channel", /* 0x146 */ |
| 78 | "QLA2440", "PCI-X 2.0 to 4Gb FC, Single Channel", /* 0x147 */ | 78 | "QLA2440", "PCI-X 2.0 to 4Gb FC, Single Channel", /* 0x147 */ |
diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h index 7abb045a0410..ffff42554087 100644 --- a/drivers/scsi/qla2xxx/qla_fw.h +++ b/drivers/scsi/qla2xxx/qla_fw.h | |||
| @@ -1402,6 +1402,8 @@ struct access_chip_rsp_84xx { | |||
| 1402 | #define MBA_IDC_NOTIFY 0x8101 | 1402 | #define MBA_IDC_NOTIFY 0x8101 |
| 1403 | #define MBA_IDC_TIME_EXT 0x8102 | 1403 | #define MBA_IDC_TIME_EXT 0x8102 |
| 1404 | 1404 | ||
| 1405 | #define MBC_IDC_ACK 0x101 | ||
| 1406 | |||
| 1405 | struct nvram_81xx { | 1407 | struct nvram_81xx { |
| 1406 | /* NVRAM header. */ | 1408 | /* NVRAM header. */ |
| 1407 | uint8_t id[4]; | 1409 | uint8_t id[4]; |
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index a336b4bc81a7..6de283f8f111 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h | |||
| @@ -72,6 +72,7 @@ extern int qla2x00_loop_reset(scsi_qla_host_t *); | |||
| 72 | extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int); | 72 | 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 | 76 | ||
| 76 | extern void qla2x00_abort_fcport_cmds(fc_port_t *); | 77 | extern void qla2x00_abort_fcport_cmds(fc_port_t *); |
| 77 | extern struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *, | 78 | extern struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *, |
| @@ -266,6 +267,8 @@ qla2x00_set_idma_speed(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t *); | |||
| 266 | 267 | ||
| 267 | extern int qla84xx_verify_chip(struct scsi_qla_host *, uint16_t *); | 268 | extern int qla84xx_verify_chip(struct scsi_qla_host *, uint16_t *); |
| 268 | 269 | ||
| 270 | extern int qla81xx_idc_ack(scsi_qla_host_t *, uint16_t *); | ||
| 271 | |||
| 269 | /* | 272 | /* |
| 270 | * Global Function Prototypes in qla_isr.c source file. | 273 | * Global Function Prototypes in qla_isr.c source file. |
| 271 | */ | 274 | */ |
| @@ -376,10 +379,8 @@ extern int qla2x00_dfs_remove(scsi_qla_host_t *); | |||
| 376 | 379 | ||
| 377 | /* Globa function prototypes for multi-q */ | 380 | /* Globa function prototypes for multi-q */ |
| 378 | extern int qla25xx_request_irq(struct rsp_que *); | 381 | extern int qla25xx_request_irq(struct rsp_que *); |
| 379 | extern int qla25xx_init_req_que(struct scsi_qla_host *, struct req_que *, | 382 | extern int qla25xx_init_req_que(struct scsi_qla_host *, struct req_que *); |
| 380 | uint8_t); | 383 | extern int qla25xx_init_rsp_que(struct scsi_qla_host *, struct rsp_que *); |
| 381 | extern int qla25xx_init_rsp_que(struct scsi_qla_host *, struct rsp_que *, | ||
| 382 | uint8_t); | ||
| 383 | extern int qla25xx_create_req_que(struct qla_hw_data *, uint16_t, uint8_t, | 384 | extern int qla25xx_create_req_que(struct qla_hw_data *, uint16_t, uint8_t, |
| 384 | uint16_t, uint8_t, uint8_t); | 385 | uint16_t, uint8_t, uint8_t); |
| 385 | extern int qla25xx_create_rsp_que(struct qla_hw_data *, uint16_t, uint8_t, | 386 | extern int qla25xx_create_rsp_que(struct qla_hw_data *, uint16_t, uint8_t, |
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index f6368a1d3021..986501759ad4 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c | |||
| @@ -1226,9 +1226,8 @@ qla24xx_config_rings(struct scsi_qla_host *vha) | |||
| 1226 | icb->firmware_options_2 |= | 1226 | icb->firmware_options_2 |= |
| 1227 | __constant_cpu_to_le32(BIT_18); | 1227 | __constant_cpu_to_le32(BIT_18); |
| 1228 | 1228 | ||
| 1229 | icb->firmware_options_2 |= __constant_cpu_to_le32(BIT_22); | 1229 | icb->firmware_options_2 &= __constant_cpu_to_le32(~BIT_22); |
| 1230 | icb->firmware_options_2 |= __constant_cpu_to_le32(BIT_23); | 1230 | icb->firmware_options_2 |= __constant_cpu_to_le32(BIT_23); |
| 1231 | ha->rsp_q_map[0]->options = icb->firmware_options_2; | ||
| 1232 | 1231 | ||
| 1233 | WRT_REG_DWORD(®->isp25mq.req_q_in, 0); | 1232 | WRT_REG_DWORD(®->isp25mq.req_q_in, 0); |
| 1234 | WRT_REG_DWORD(®->isp25mq.req_q_out, 0); | 1233 | WRT_REG_DWORD(®->isp25mq.req_q_out, 0); |
| @@ -3493,7 +3492,7 @@ qla25xx_init_queues(struct qla_hw_data *ha) | |||
| 3493 | rsp = ha->rsp_q_map[i]; | 3492 | rsp = ha->rsp_q_map[i]; |
| 3494 | if (rsp) { | 3493 | if (rsp) { |
| 3495 | rsp->options &= ~BIT_0; | 3494 | rsp->options &= ~BIT_0; |
| 3496 | ret = qla25xx_init_rsp_que(base_vha, rsp, rsp->options); | 3495 | ret = qla25xx_init_rsp_que(base_vha, rsp); |
| 3497 | if (ret != QLA_SUCCESS) | 3496 | if (ret != QLA_SUCCESS) |
| 3498 | DEBUG2_17(printk(KERN_WARNING | 3497 | DEBUG2_17(printk(KERN_WARNING |
| 3499 | "%s Rsp que:%d init failed\n", __func__, | 3498 | "%s Rsp que:%d init failed\n", __func__, |
| @@ -3507,7 +3506,7 @@ qla25xx_init_queues(struct qla_hw_data *ha) | |||
| 3507 | if (req) { | 3506 | if (req) { |
| 3508 | /* Clear outstanding commands array. */ | 3507 | /* Clear outstanding commands array. */ |
| 3509 | req->options &= ~BIT_0; | 3508 | req->options &= ~BIT_0; |
| 3510 | ret = qla25xx_init_req_que(base_vha, req, req->options); | 3509 | ret = qla25xx_init_req_que(base_vha, req); |
| 3511 | if (ret != QLA_SUCCESS) | 3510 | if (ret != QLA_SUCCESS) |
| 3512 | DEBUG2_17(printk(KERN_WARNING | 3511 | DEBUG2_17(printk(KERN_WARNING |
| 3513 | "%s Req que:%d init failed\n", __func__, | 3512 | "%s Req que:%d init failed\n", __func__, |
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index e28ad81baf1e..f250e5b7897c 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
| @@ -266,6 +266,40 @@ qla2x00_mbx_completion(scsi_qla_host_t *vha, uint16_t mb0) | |||
| 266 | } | 266 | } |
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | static void | ||
| 270 | qla81xx_idc_event(scsi_qla_host_t *vha, uint16_t aen, uint16_t descr) | ||
| 271 | { | ||
| 272 | static char *event[] = | ||
| 273 | { "Complete", "Request Notification", "Time Extension" }; | ||
| 274 | int rval; | ||
| 275 | struct device_reg_24xx __iomem *reg24 = &vha->hw->iobase->isp24; | ||
| 276 | uint16_t __iomem *wptr; | ||
| 277 | uint16_t cnt, timeout, mb[QLA_IDC_ACK_REGS]; | ||
| 278 | |||
| 279 | /* Seed data -- mailbox1 -> mailbox7. */ | ||
| 280 | wptr = (uint16_t __iomem *)®24->mailbox1; | ||
| 281 | for (cnt = 0; cnt < QLA_IDC_ACK_REGS; cnt++, wptr++) | ||
| 282 | mb[cnt] = RD_REG_WORD(wptr); | ||
| 283 | |||
| 284 | DEBUG2(printk("scsi(%ld): Inter-Driver Commucation %s -- " | ||
| 285 | "%04x %04x %04x %04x %04x %04x %04x.\n", vha->host_no, | ||
| 286 | event[aen & 0xff], | ||
| 287 | mb[0], mb[1], mb[2], mb[3], mb[4], mb[5], mb[6])); | ||
| 288 | |||
| 289 | /* Acknowledgement needed? [Notify && non-zero timeout]. */ | ||
| 290 | timeout = (descr >> 8) & 0xf; | ||
| 291 | if (aen != MBA_IDC_NOTIFY || !timeout) | ||
| 292 | return; | ||
| 293 | |||
| 294 | DEBUG2(printk("scsi(%ld): Inter-Driver Commucation %s -- " | ||
| 295 | "ACK timeout=%d.\n", vha->host_no, event[aen & 0xff], timeout)); | ||
| 296 | |||
| 297 | rval = qla2x00_post_idc_ack_work(vha, mb); | ||
| 298 | if (rval != QLA_SUCCESS) | ||
| 299 | qla_printk(KERN_WARNING, vha->hw, | ||
| 300 | "IDC failed to post ACK.\n"); | ||
| 301 | } | ||
| 302 | |||
| 269 | /** | 303 | /** |
| 270 | * qla2x00_async_event() - Process aynchronous events. | 304 | * qla2x00_async_event() - Process aynchronous events. |
| 271 | * @ha: SCSI driver HA context | 305 | * @ha: SCSI driver HA context |
| @@ -714,21 +748,9 @@ skip_rio: | |||
| 714 | "%04x %04x %04x\n", vha->host_no, mb[1], mb[2], mb[3])); | 748 | "%04x %04x %04x\n", vha->host_no, mb[1], mb[2], mb[3])); |
| 715 | break; | 749 | break; |
| 716 | case MBA_IDC_COMPLETE: | 750 | case MBA_IDC_COMPLETE: |
| 717 | DEBUG2(printk("scsi(%ld): Inter-Driver Commucation " | ||
| 718 | "Complete -- %04x %04x %04x\n", vha->host_no, mb[1], mb[2], | ||
| 719 | mb[3])); | ||
| 720 | break; | ||
| 721 | case MBA_IDC_NOTIFY: | 751 | case MBA_IDC_NOTIFY: |
| 722 | DEBUG2(printk("scsi(%ld): Inter-Driver Commucation " | ||
| 723 | "Request Notification -- %04x %04x %04x\n", vha->host_no, | ||
| 724 | mb[1], mb[2], mb[3])); | ||
| 725 | /**** Mailbox registers 4 - 7 valid!!! */ | ||
| 726 | break; | ||
| 727 | case MBA_IDC_TIME_EXT: | 752 | case MBA_IDC_TIME_EXT: |
| 728 | DEBUG2(printk("scsi(%ld): Inter-Driver Commucation " | 753 | qla81xx_idc_event(vha, mb[0], mb[1]); |
| 729 | "Time Extension -- %04x %04x %04x\n", vha->host_no, mb[1], | ||
| 730 | mb[2], mb[3])); | ||
| 731 | /**** Mailbox registers 4 - 7 valid!!! */ | ||
| 732 | break; | 754 | break; |
| 733 | } | 755 | } |
| 734 | 756 | ||
| @@ -1707,7 +1729,6 @@ qla25xx_msix_rsp_q(int irq, void *dev_id) | |||
| 1707 | struct qla_hw_data *ha; | 1729 | struct qla_hw_data *ha; |
| 1708 | struct rsp_que *rsp; | 1730 | struct rsp_que *rsp; |
| 1709 | struct device_reg_24xx __iomem *reg; | 1731 | struct device_reg_24xx __iomem *reg; |
| 1710 | uint16_t msix_disabled_hccr = 0; | ||
| 1711 | 1732 | ||
| 1712 | rsp = (struct rsp_que *) dev_id; | 1733 | rsp = (struct rsp_que *) dev_id; |
| 1713 | if (!rsp) { | 1734 | if (!rsp) { |
| @@ -1720,17 +1741,8 @@ qla25xx_msix_rsp_q(int irq, void *dev_id) | |||
| 1720 | 1741 | ||
| 1721 | spin_lock_irq(&ha->hardware_lock); | 1742 | spin_lock_irq(&ha->hardware_lock); |
| 1722 | 1743 | ||
| 1723 | msix_disabled_hccr = rsp->options; | ||
| 1724 | if (!rsp->id) | ||
| 1725 | msix_disabled_hccr &= __constant_cpu_to_le32(BIT_22); | ||
| 1726 | else | ||
| 1727 | msix_disabled_hccr &= __constant_cpu_to_le32(BIT_6); | ||
| 1728 | |||
| 1729 | qla24xx_process_response_queue(rsp); | 1744 | qla24xx_process_response_queue(rsp); |
| 1730 | 1745 | ||
| 1731 | if (!msix_disabled_hccr) | ||
| 1732 | WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT); | ||
| 1733 | |||
| 1734 | spin_unlock_irq(&ha->hardware_lock); | 1746 | spin_unlock_irq(&ha->hardware_lock); |
| 1735 | 1747 | ||
| 1736 | return IRQ_HANDLED; | 1748 | return IRQ_HANDLED; |
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index f94ffbb98e95..4c7504cb3990 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c | |||
| @@ -3090,8 +3090,7 @@ verify_done: | |||
| 3090 | } | 3090 | } |
| 3091 | 3091 | ||
| 3092 | int | 3092 | int |
| 3093 | qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req, | 3093 | qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req) |
| 3094 | uint8_t options) | ||
| 3095 | { | 3094 | { |
| 3096 | int rval; | 3095 | int rval; |
| 3097 | unsigned long flags; | 3096 | unsigned long flags; |
| @@ -3101,7 +3100,7 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req, | |||
| 3101 | struct qla_hw_data *ha = vha->hw; | 3100 | struct qla_hw_data *ha = vha->hw; |
| 3102 | 3101 | ||
| 3103 | mcp->mb[0] = MBC_INITIALIZE_MULTIQ; | 3102 | mcp->mb[0] = MBC_INITIALIZE_MULTIQ; |
| 3104 | mcp->mb[1] = options; | 3103 | mcp->mb[1] = req->options; |
| 3105 | mcp->mb[2] = MSW(LSD(req->dma)); | 3104 | mcp->mb[2] = MSW(LSD(req->dma)); |
| 3106 | mcp->mb[3] = LSW(LSD(req->dma)); | 3105 | mcp->mb[3] = LSW(LSD(req->dma)); |
| 3107 | mcp->mb[6] = MSW(MSD(req->dma)); | 3106 | mcp->mb[6] = MSW(MSD(req->dma)); |
| @@ -3128,7 +3127,7 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req, | |||
| 3128 | mcp->tov = 60; | 3127 | mcp->tov = 60; |
| 3129 | 3128 | ||
| 3130 | spin_lock_irqsave(&ha->hardware_lock, flags); | 3129 | spin_lock_irqsave(&ha->hardware_lock, flags); |
| 3131 | if (!(options & BIT_0)) { | 3130 | if (!(req->options & BIT_0)) { |
| 3132 | WRT_REG_DWORD(®->req_q_in, 0); | 3131 | WRT_REG_DWORD(®->req_q_in, 0); |
| 3133 | WRT_REG_DWORD(®->req_q_out, 0); | 3132 | WRT_REG_DWORD(®->req_q_out, 0); |
| 3134 | } | 3133 | } |
| @@ -3142,8 +3141,7 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req, | |||
| 3142 | } | 3141 | } |
| 3143 | 3142 | ||
| 3144 | int | 3143 | int |
| 3145 | qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp, | 3144 | qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp) |
| 3146 | uint8_t options) | ||
| 3147 | { | 3145 | { |
| 3148 | int rval; | 3146 | int rval; |
| 3149 | unsigned long flags; | 3147 | unsigned long flags; |
| @@ -3153,7 +3151,7 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp, | |||
| 3153 | struct qla_hw_data *ha = vha->hw; | 3151 | struct qla_hw_data *ha = vha->hw; |
| 3154 | 3152 | ||
| 3155 | mcp->mb[0] = MBC_INITIALIZE_MULTIQ; | 3153 | mcp->mb[0] = MBC_INITIALIZE_MULTIQ; |
| 3156 | mcp->mb[1] = options; | 3154 | mcp->mb[1] = rsp->options; |
| 3157 | mcp->mb[2] = MSW(LSD(rsp->dma)); | 3155 | mcp->mb[2] = MSW(LSD(rsp->dma)); |
| 3158 | mcp->mb[3] = LSW(LSD(rsp->dma)); | 3156 | mcp->mb[3] = LSW(LSD(rsp->dma)); |
| 3159 | mcp->mb[6] = MSW(MSD(rsp->dma)); | 3157 | mcp->mb[6] = MSW(MSD(rsp->dma)); |
| @@ -3178,7 +3176,7 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp, | |||
| 3178 | mcp->tov = 60; | 3176 | mcp->tov = 60; |
| 3179 | 3177 | ||
| 3180 | spin_lock_irqsave(&ha->hardware_lock, flags); | 3178 | spin_lock_irqsave(&ha->hardware_lock, flags); |
| 3181 | if (!(options & BIT_0)) { | 3179 | if (!(rsp->options & BIT_0)) { |
| 3182 | WRT_REG_DWORD(®->rsp_q_out, 0); | 3180 | WRT_REG_DWORD(®->rsp_q_out, 0); |
| 3183 | WRT_REG_DWORD(®->rsp_q_in, 0); | 3181 | WRT_REG_DWORD(®->rsp_q_in, 0); |
| 3184 | } | 3182 | } |
| @@ -3193,3 +3191,29 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp, | |||
| 3193 | return rval; | 3191 | return rval; |
| 3194 | } | 3192 | } |
| 3195 | 3193 | ||
| 3194 | int | ||
| 3195 | qla81xx_idc_ack(scsi_qla_host_t *vha, uint16_t *mb) | ||
| 3196 | { | ||
| 3197 | int rval; | ||
| 3198 | mbx_cmd_t mc; | ||
| 3199 | mbx_cmd_t *mcp = &mc; | ||
| 3200 | |||
| 3201 | DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no)); | ||
| 3202 | |||
| 3203 | mcp->mb[0] = MBC_IDC_ACK; | ||
| 3204 | memcpy(&mcp->mb[1], mb, QLA_IDC_ACK_REGS * sizeof(uint16_t)); | ||
| 3205 | mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; | ||
| 3206 | mcp->in_mb = MBX_0; | ||
| 3207 | mcp->tov = MBX_TOV_SECONDS; | ||
| 3208 | mcp->flags = 0; | ||
| 3209 | rval = qla2x00_mailbox_command(vha, mcp); | ||
| 3210 | |||
| 3211 | if (rval != QLA_SUCCESS) { | ||
| 3212 | DEBUG2_3_11(printk("%s(%ld): failed=%x (%x).\n", __func__, | ||
| 3213 | vha->host_no, rval, mcp->mb[0])); | ||
| 3214 | } else { | ||
| 3215 | DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no)); | ||
| 3216 | } | ||
| 3217 | |||
| 3218 | return rval; | ||
| 3219 | } | ||
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c index f53179c46423..3f23932210c4 100644 --- a/drivers/scsi/qla2xxx/qla_mid.c +++ b/drivers/scsi/qla2xxx/qla_mid.c | |||
| @@ -396,7 +396,7 @@ qla24xx_create_vhost(struct fc_vport *fc_vport) | |||
| 396 | 396 | ||
| 397 | qla2x00_start_timer(vha, qla2x00_timer, WATCH_INTERVAL); | 397 | qla2x00_start_timer(vha, qla2x00_timer, WATCH_INTERVAL); |
| 398 | 398 | ||
| 399 | memset(vha->req_ques, 0, sizeof(vha->req_ques) * QLA_MAX_HOST_QUES); | 399 | memset(vha->req_ques, 0, sizeof(vha->req_ques)); |
| 400 | vha->req_ques[0] = ha->req_q_map[0]->id; | 400 | vha->req_ques[0] = ha->req_q_map[0]->id; |
| 401 | host->can_queue = ha->req_q_map[0]->length + 128; | 401 | host->can_queue = ha->req_q_map[0]->length + 128; |
| 402 | host->this_id = 255; | 402 | host->this_id = 255; |
| @@ -471,7 +471,7 @@ qla25xx_delete_req_que(struct scsi_qla_host *vha, struct req_que *req) | |||
| 471 | 471 | ||
| 472 | if (req) { | 472 | if (req) { |
| 473 | req->options |= BIT_0; | 473 | req->options |= BIT_0; |
| 474 | ret = qla25xx_init_req_que(vha, req, req->options); | 474 | ret = qla25xx_init_req_que(vha, req); |
| 475 | } | 475 | } |
| 476 | if (ret == QLA_SUCCESS) | 476 | if (ret == QLA_SUCCESS) |
| 477 | qla25xx_free_req_que(vha, req); | 477 | qla25xx_free_req_que(vha, req); |
| @@ -486,7 +486,7 @@ qla25xx_delete_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp) | |||
| 486 | 486 | ||
| 487 | if (rsp) { | 487 | if (rsp) { |
| 488 | rsp->options |= BIT_0; | 488 | rsp->options |= BIT_0; |
| 489 | ret = qla25xx_init_rsp_que(vha, rsp, rsp->options); | 489 | ret = qla25xx_init_rsp_que(vha, rsp); |
| 490 | } | 490 | } |
| 491 | if (ret == QLA_SUCCESS) | 491 | if (ret == QLA_SUCCESS) |
| 492 | qla25xx_free_rsp_que(vha, rsp); | 492 | qla25xx_free_rsp_que(vha, rsp); |
| @@ -502,7 +502,7 @@ int qla25xx_update_req_que(struct scsi_qla_host *vha, uint8_t que, uint8_t qos) | |||
| 502 | 502 | ||
| 503 | req->options |= BIT_3; | 503 | req->options |= BIT_3; |
| 504 | req->qos = qos; | 504 | req->qos = qos; |
| 505 | ret = qla25xx_init_req_que(vha, req, req->options); | 505 | ret = qla25xx_init_req_que(vha, req); |
| 506 | if (ret != QLA_SUCCESS) | 506 | if (ret != QLA_SUCCESS) |
| 507 | DEBUG2_17(printk(KERN_WARNING "%s failed\n", __func__)); | 507 | DEBUG2_17(printk(KERN_WARNING "%s failed\n", __func__)); |
| 508 | /* restore options bit */ | 508 | /* restore options bit */ |
| @@ -632,7 +632,7 @@ qla25xx_create_req_que(struct qla_hw_data *ha, uint16_t options, | |||
| 632 | req->max_q_depth = ha->req_q_map[0]->max_q_depth; | 632 | req->max_q_depth = ha->req_q_map[0]->max_q_depth; |
| 633 | mutex_unlock(&ha->vport_lock); | 633 | mutex_unlock(&ha->vport_lock); |
| 634 | 634 | ||
| 635 | ret = qla25xx_init_req_que(base_vha, req, options); | 635 | ret = qla25xx_init_req_que(base_vha, req); |
| 636 | if (ret != QLA_SUCCESS) { | 636 | if (ret != QLA_SUCCESS) { |
| 637 | qla_printk(KERN_WARNING, ha, "%s failed\n", __func__); | 637 | qla_printk(KERN_WARNING, ha, "%s failed\n", __func__); |
| 638 | mutex_lock(&ha->vport_lock); | 638 | mutex_lock(&ha->vport_lock); |
| @@ -710,7 +710,7 @@ qla25xx_create_rsp_que(struct qla_hw_data *ha, uint16_t options, | |||
| 710 | if (ret) | 710 | if (ret) |
| 711 | goto que_failed; | 711 | goto que_failed; |
| 712 | 712 | ||
| 713 | ret = qla25xx_init_rsp_que(base_vha, rsp, options); | 713 | ret = qla25xx_init_rsp_que(base_vha, rsp); |
| 714 | if (ret != QLA_SUCCESS) { | 714 | if (ret != QLA_SUCCESS) { |
| 715 | qla_printk(KERN_WARNING, ha, "%s failed\n", __func__); | 715 | qla_printk(KERN_WARNING, ha, "%s failed\n", __func__); |
| 716 | mutex_lock(&ha->vport_lock); | 716 | mutex_lock(&ha->vport_lock); |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index c11f872d3e10..2f5f72531e23 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
| @@ -2522,6 +2522,19 @@ qla2x00_post_aen_work(struct scsi_qla_host *vha, enum fc_host_event_code code, | |||
| 2522 | return qla2x00_post_work(vha, e, 1); | 2522 | return qla2x00_post_work(vha, e, 1); |
| 2523 | } | 2523 | } |
| 2524 | 2524 | ||
| 2525 | int | ||
| 2526 | qla2x00_post_idc_ack_work(struct scsi_qla_host *vha, uint16_t *mb) | ||
| 2527 | { | ||
| 2528 | struct qla_work_evt *e; | ||
| 2529 | |||
| 2530 | e = qla2x00_alloc_work(vha, QLA_EVT_IDC_ACK, 1); | ||
| 2531 | if (!e) | ||
| 2532 | return QLA_FUNCTION_FAILED; | ||
| 2533 | |||
| 2534 | memcpy(e->u.idc_ack.mb, mb, QLA_IDC_ACK_REGS * sizeof(uint16_t)); | ||
| 2535 | return qla2x00_post_work(vha, e, 1); | ||
| 2536 | } | ||
| 2537 | |||
| 2525 | static void | 2538 | static void |
| 2526 | qla2x00_do_work(struct scsi_qla_host *vha) | 2539 | qla2x00_do_work(struct scsi_qla_host *vha) |
| 2527 | { | 2540 | { |
| @@ -2539,6 +2552,9 @@ qla2x00_do_work(struct scsi_qla_host *vha) | |||
| 2539 | fc_host_post_event(vha->host, fc_get_event_number(), | 2552 | fc_host_post_event(vha->host, fc_get_event_number(), |
| 2540 | e->u.aen.code, e->u.aen.data); | 2553 | e->u.aen.code, e->u.aen.data); |
| 2541 | break; | 2554 | break; |
| 2555 | case QLA_EVT_IDC_ACK: | ||
| 2556 | qla81xx_idc_ack(vha, e->u.idc_ack.mb); | ||
| 2557 | break; | ||
| 2542 | } | 2558 | } |
| 2543 | if (e->flags & QLA_EVT_FLAG_FREE) | 2559 | if (e->flags & QLA_EVT_FLAG_FREE) |
| 2544 | kfree(e); | 2560 | kfree(e); |
diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c index 9c3b694c049d..284827926eff 100644 --- a/drivers/scsi/qla2xxx/qla_sup.c +++ b/drivers/scsi/qla2xxx/qla_sup.c | |||
| @@ -684,7 +684,7 @@ qla2xxx_get_flt_info(scsi_qla_host_t *vha, uint32_t flt_addr) | |||
| 684 | "end=0x%x size=0x%x.\n", le32_to_cpu(region->code), start, | 684 | "end=0x%x size=0x%x.\n", le32_to_cpu(region->code), start, |
| 685 | le32_to_cpu(region->end) >> 2, le32_to_cpu(region->size))); | 685 | le32_to_cpu(region->end) >> 2, le32_to_cpu(region->size))); |
| 686 | 686 | ||
| 687 | switch (le32_to_cpu(region->code)) { | 687 | switch (le32_to_cpu(region->code) & 0xff) { |
| 688 | case FLT_REG_FW: | 688 | case FLT_REG_FW: |
| 689 | ha->flt_region_fw = start; | 689 | ha->flt_region_fw = start; |
| 690 | break; | 690 | break; |
diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h index cfa4c11a4797..79f7053da99b 100644 --- a/drivers/scsi/qla2xxx/qla_version.h +++ b/drivers/scsi/qla2xxx/qla_version.h | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | /* | 7 | /* |
| 8 | * Driver version | 8 | * Driver version |
| 9 | */ | 9 | */ |
| 10 | #define QLA2XXX_VERSION "8.03.00-k2" | 10 | #define QLA2XXX_VERSION "8.03.00-k3" |
| 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 |
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 940dc32ff0dc..b82ffd90632e 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
| @@ -1040,12 +1040,11 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) | |||
| 1040 | action = ACTION_FAIL; | 1040 | action = ACTION_FAIL; |
| 1041 | break; | 1041 | break; |
| 1042 | case ABORTED_COMMAND: | 1042 | case ABORTED_COMMAND: |
| 1043 | action = ACTION_FAIL; | ||
| 1043 | if (sshdr.asc == 0x10) { /* DIF */ | 1044 | if (sshdr.asc == 0x10) { /* DIF */ |
| 1044 | description = "Target Data Integrity Failure"; | 1045 | description = "Target Data Integrity Failure"; |
| 1045 | action = ACTION_FAIL; | ||
| 1046 | error = -EILSEQ; | 1046 | error = -EILSEQ; |
| 1047 | } else | 1047 | } |
| 1048 | action = ACTION_RETRY; | ||
| 1049 | break; | 1048 | break; |
| 1050 | case NOT_READY: | 1049 | case NOT_READY: |
| 1051 | /* If the device is in the process of becoming | 1050 | /* If the device is in the process of becoming |
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index 66505bb79410..8f4de20c9deb 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c | |||
| @@ -317,6 +317,7 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget, | |||
| 317 | return sdev; | 317 | return sdev; |
| 318 | 318 | ||
| 319 | out_device_destroy: | 319 | out_device_destroy: |
| 320 | scsi_device_set_state(sdev, SDEV_DEL); | ||
| 320 | transport_destroy_device(&sdev->sdev_gendev); | 321 | transport_destroy_device(&sdev->sdev_gendev); |
| 321 | put_device(&sdev->sdev_gendev); | 322 | put_device(&sdev->sdev_gendev); |
| 322 | out: | 323 | out: |
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index d57566b8be0a..55310dbc10a6 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c | |||
| @@ -107,6 +107,7 @@ static void scsi_disk_release(struct device *cdev); | |||
| 107 | static void sd_print_sense_hdr(struct scsi_disk *, struct scsi_sense_hdr *); | 107 | static void sd_print_sense_hdr(struct scsi_disk *, struct scsi_sense_hdr *); |
| 108 | static void sd_print_result(struct scsi_disk *, int); | 108 | static void sd_print_result(struct scsi_disk *, int); |
| 109 | 109 | ||
| 110 | static DEFINE_SPINLOCK(sd_index_lock); | ||
| 110 | static DEFINE_IDA(sd_index_ida); | 111 | static DEFINE_IDA(sd_index_ida); |
| 111 | 112 | ||
| 112 | /* This semaphore is used to mediate the 0->1 reference get in the | 113 | /* This semaphore is used to mediate the 0->1 reference get in the |
| @@ -1914,7 +1915,9 @@ static int sd_probe(struct device *dev) | |||
| 1914 | if (!ida_pre_get(&sd_index_ida, GFP_KERNEL)) | 1915 | if (!ida_pre_get(&sd_index_ida, GFP_KERNEL)) |
| 1915 | goto out_put; | 1916 | goto out_put; |
| 1916 | 1917 | ||
| 1918 | spin_lock(&sd_index_lock); | ||
| 1917 | error = ida_get_new(&sd_index_ida, &index); | 1919 | error = ida_get_new(&sd_index_ida, &index); |
| 1920 | spin_unlock(&sd_index_lock); | ||
| 1918 | } while (error == -EAGAIN); | 1921 | } while (error == -EAGAIN); |
| 1919 | 1922 | ||
| 1920 | if (error) | 1923 | if (error) |
| @@ -1936,7 +1939,9 @@ static int sd_probe(struct device *dev) | |||
| 1936 | return 0; | 1939 | return 0; |
| 1937 | 1940 | ||
| 1938 | out_free_index: | 1941 | out_free_index: |
| 1942 | spin_lock(&sd_index_lock); | ||
| 1939 | ida_remove(&sd_index_ida, index); | 1943 | ida_remove(&sd_index_ida, index); |
| 1944 | spin_unlock(&sd_index_lock); | ||
| 1940 | out_put: | 1945 | out_put: |
| 1941 | put_disk(gd); | 1946 | put_disk(gd); |
| 1942 | out_free: | 1947 | out_free: |
| @@ -1986,7 +1991,9 @@ static void scsi_disk_release(struct device *dev) | |||
| 1986 | struct scsi_disk *sdkp = to_scsi_disk(dev); | 1991 | struct scsi_disk *sdkp = to_scsi_disk(dev); |
| 1987 | struct gendisk *disk = sdkp->disk; | 1992 | struct gendisk *disk = sdkp->disk; |
| 1988 | 1993 | ||
| 1994 | spin_lock(&sd_index_lock); | ||
| 1989 | ida_remove(&sd_index_ida, sdkp->index); | 1995 | ida_remove(&sd_index_ida, sdkp->index); |
| 1996 | spin_unlock(&sd_index_lock); | ||
| 1990 | 1997 | ||
| 1991 | disk->private_data = NULL; | 1998 | disk->private_data = NULL; |
| 1992 | put_disk(disk); | 1999 | put_disk(disk); |
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index 8f0bd3f7a59f..516925d8b570 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c | |||
| @@ -1078,7 +1078,7 @@ sg_ioctl(struct inode *inode, struct file *filp, | |||
| 1078 | case BLKTRACESETUP: | 1078 | case BLKTRACESETUP: |
| 1079 | return blk_trace_setup(sdp->device->request_queue, | 1079 | return blk_trace_setup(sdp->device->request_queue, |
| 1080 | sdp->disk->disk_name, | 1080 | sdp->disk->disk_name, |
| 1081 | sdp->device->sdev_gendev.devt, | 1081 | MKDEV(SCSI_GENERIC_MAJOR, sdp->index), |
| 1082 | (char *)arg); | 1082 | (char *)arg); |
| 1083 | case BLKTRACESTART: | 1083 | case BLKTRACESTART: |
| 1084 | return blk_trace_startstop(sdp->device->request_queue, 1); | 1084 | return blk_trace_startstop(sdp->device->request_queue, 1); |
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index 0d934bfbdd9b..b4b39811b445 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c | |||
| @@ -2083,6 +2083,20 @@ static int serial8250_startup(struct uart_port *port) | |||
| 2083 | 2083 | ||
| 2084 | serial8250_set_mctrl(&up->port, up->port.mctrl); | 2084 | serial8250_set_mctrl(&up->port, up->port.mctrl); |
| 2085 | 2085 | ||
| 2086 | /* Serial over Lan (SoL) hack: | ||
| 2087 | Intel 8257x Gigabit ethernet chips have a | ||
| 2088 | 16550 emulation, to be used for Serial Over Lan. | ||
| 2089 | Those chips take a longer time than a normal | ||
| 2090 | serial device to signalize that a transmission | ||
| 2091 | data was queued. Due to that, the above test generally | ||
| 2092 | fails. One solution would be to delay the reading of | ||
| 2093 | iir. However, this is not reliable, since the timeout | ||
| 2094 | is variable. So, let's just don't test if we receive | ||
| 2095 | TX irq. This way, we'll never enable UART_BUG_TXEN. | ||
| 2096 | */ | ||
| 2097 | if (up->port.flags & UPF_NO_TXEN_TEST) | ||
| 2098 | goto dont_test_tx_en; | ||
| 2099 | |||
| 2086 | /* | 2100 | /* |
| 2087 | * Do a quick test to see if we receive an | 2101 | * Do a quick test to see if we receive an |
| 2088 | * interrupt when we enable the TX irq. | 2102 | * interrupt when we enable the TX irq. |
| @@ -2102,6 +2116,7 @@ static int serial8250_startup(struct uart_port *port) | |||
| 2102 | up->bugs &= ~UART_BUG_TXEN; | 2116 | up->bugs &= ~UART_BUG_TXEN; |
| 2103 | } | 2117 | } |
| 2104 | 2118 | ||
| 2119 | dont_test_tx_en: | ||
| 2105 | spin_unlock_irqrestore(&up->port.lock, flags); | 2120 | spin_unlock_irqrestore(&up->port.lock, flags); |
| 2106 | 2121 | ||
| 2107 | /* | 2122 | /* |
diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c index 536d8e510f66..533f82025adf 100644 --- a/drivers/serial/8250_pci.c +++ b/drivers/serial/8250_pci.c | |||
| @@ -798,6 +798,21 @@ pci_default_setup(struct serial_private *priv, | |||
| 798 | return setup_port(priv, port, bar, offset, board->reg_shift); | 798 | return setup_port(priv, port, bar, offset, board->reg_shift); |
| 799 | } | 799 | } |
| 800 | 800 | ||
| 801 | static int skip_tx_en_setup(struct serial_private *priv, | ||
| 802 | const struct pciserial_board *board, | ||
| 803 | struct uart_port *port, int idx) | ||
| 804 | { | ||
| 805 | port->flags |= UPF_NO_TXEN_TEST; | ||
| 806 | printk(KERN_DEBUG "serial8250: skipping TxEn test for device " | ||
| 807 | "[%04x:%04x] subsystem [%04x:%04x]\n", | ||
| 808 | priv->dev->vendor, | ||
| 809 | priv->dev->device, | ||
| 810 | priv->dev->subsystem_vendor, | ||
| 811 | priv->dev->subsystem_device); | ||
| 812 | |||
| 813 | return pci_default_setup(priv, board, port, idx); | ||
| 814 | } | ||
| 815 | |||
| 801 | /* This should be in linux/pci_ids.h */ | 816 | /* This should be in linux/pci_ids.h */ |
| 802 | #define PCI_VENDOR_ID_SBSMODULARIO 0x124B | 817 | #define PCI_VENDOR_ID_SBSMODULARIO 0x124B |
| 803 | #define PCI_SUBVENDOR_ID_SBSMODULARIO 0x124B | 818 | #define PCI_SUBVENDOR_ID_SBSMODULARIO 0x124B |
| @@ -864,6 +879,27 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = { | |||
| 864 | .init = pci_inteli960ni_init, | 879 | .init = pci_inteli960ni_init, |
| 865 | .setup = pci_default_setup, | 880 | .setup = pci_default_setup, |
| 866 | }, | 881 | }, |
| 882 | { | ||
| 883 | .vendor = PCI_VENDOR_ID_INTEL, | ||
| 884 | .device = PCI_DEVICE_ID_INTEL_8257X_SOL, | ||
| 885 | .subvendor = PCI_ANY_ID, | ||
| 886 | .subdevice = PCI_ANY_ID, | ||
| 887 | .setup = skip_tx_en_setup, | ||
| 888 | }, | ||
| 889 | { | ||
| 890 | .vendor = PCI_VENDOR_ID_INTEL, | ||
| 891 | .device = PCI_DEVICE_ID_INTEL_82573L_SOL, | ||
| 892 | .subvendor = PCI_ANY_ID, | ||
| 893 | .subdevice = PCI_ANY_ID, | ||
| 894 | .setup = skip_tx_en_setup, | ||
| 895 | }, | ||
| 896 | { | ||
| 897 | .vendor = PCI_VENDOR_ID_INTEL, | ||
| 898 | .device = PCI_DEVICE_ID_INTEL_82573E_SOL, | ||
| 899 | .subvendor = PCI_ANY_ID, | ||
| 900 | .subdevice = PCI_ANY_ID, | ||
| 901 | .setup = skip_tx_en_setup, | ||
| 902 | }, | ||
| 867 | /* | 903 | /* |
| 868 | * ITE | 904 | * ITE |
| 869 | */ | 905 | */ |
diff --git a/drivers/serial/atmel_serial.c b/drivers/serial/atmel_serial.c index 89362d733d62..8f58f7ff0dd7 100644 --- a/drivers/serial/atmel_serial.c +++ b/drivers/serial/atmel_serial.c | |||
| @@ -877,6 +877,10 @@ static int atmel_startup(struct uart_port *port) | |||
| 877 | } | 877 | } |
| 878 | } | 878 | } |
| 879 | 879 | ||
| 880 | /* Save current CSR for comparison in atmel_tasklet_func() */ | ||
| 881 | atmel_port->irq_status_prev = UART_GET_CSR(port); | ||
| 882 | atmel_port->irq_status = atmel_port->irq_status_prev; | ||
| 883 | |||
| 880 | /* | 884 | /* |
| 881 | * Finally, enable the serial port | 885 | * Finally, enable the serial port |
| 882 | */ | 886 | */ |
diff --git a/drivers/serial/imx.c b/drivers/serial/imx.c index a50954612b60..9f460b175c50 100644 --- a/drivers/serial/imx.c +++ b/drivers/serial/imx.c | |||
| @@ -1129,7 +1129,7 @@ static int serial_imx_probe(struct platform_device *pdev) | |||
| 1129 | sport->timer.function = imx_timeout; | 1129 | sport->timer.function = imx_timeout; |
| 1130 | sport->timer.data = (unsigned long)sport; | 1130 | sport->timer.data = (unsigned long)sport; |
| 1131 | 1131 | ||
| 1132 | sport->clk = clk_get(&pdev->dev, "uart_clk"); | 1132 | sport->clk = clk_get(&pdev->dev, "uart"); |
| 1133 | if (IS_ERR(sport->clk)) { | 1133 | if (IS_ERR(sport->clk)) { |
| 1134 | ret = PTR_ERR(sport->clk); | 1134 | ret = PTR_ERR(sport->clk); |
| 1135 | goto unmap; | 1135 | goto unmap; |
diff --git a/drivers/serial/jsm/jsm_driver.c b/drivers/serial/jsm/jsm_driver.c index 92187e28608a..ac79cbe4c2cf 100644 --- a/drivers/serial/jsm/jsm_driver.c +++ b/drivers/serial/jsm/jsm_driver.c | |||
| @@ -84,6 +84,8 @@ static int jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 84 | brd->pci_dev = pdev; | 84 | brd->pci_dev = pdev; |
| 85 | if (pdev->device == PCIE_DEVICE_ID_NEO_4_IBM) | 85 | if (pdev->device == PCIE_DEVICE_ID_NEO_4_IBM) |
| 86 | brd->maxports = 4; | 86 | brd->maxports = 4; |
| 87 | else if (pdev->device == PCI_DEVICE_ID_DIGI_NEO_8) | ||
| 88 | brd->maxports = 8; | ||
| 87 | else | 89 | else |
| 88 | brd->maxports = 2; | 90 | brd->maxports = 2; |
| 89 | 91 | ||
| @@ -212,6 +214,7 @@ static struct pci_device_id jsm_pci_tbl[] = { | |||
| 212 | { PCI_DEVICE(PCI_VENDOR_ID_DIGI, PCI_DEVICE_ID_NEO_2RJ45), 0, 0, 2 }, | 214 | { PCI_DEVICE(PCI_VENDOR_ID_DIGI, PCI_DEVICE_ID_NEO_2RJ45), 0, 0, 2 }, |
| 213 | { PCI_DEVICE(PCI_VENDOR_ID_DIGI, PCI_DEVICE_ID_NEO_2RJ45PRI), 0, 0, 3 }, | 215 | { PCI_DEVICE(PCI_VENDOR_ID_DIGI, PCI_DEVICE_ID_NEO_2RJ45PRI), 0, 0, 3 }, |
| 214 | { PCI_DEVICE(PCI_VENDOR_ID_DIGI, PCIE_DEVICE_ID_NEO_4_IBM), 0, 0, 4 }, | 216 | { PCI_DEVICE(PCI_VENDOR_ID_DIGI, PCIE_DEVICE_ID_NEO_4_IBM), 0, 0, 4 }, |
| 217 | { PCI_DEVICE(PCI_VENDOR_ID_DIGI, PCI_DEVICE_ID_DIGI_NEO_8), 0, 0, 5 }, | ||
| 215 | { 0, } | 218 | { 0, } |
| 216 | }; | 219 | }; |
| 217 | MODULE_DEVICE_TABLE(pci, jsm_pci_tbl); | 220 | MODULE_DEVICE_TABLE(pci, jsm_pci_tbl); |
diff --git a/drivers/serial/sh-sci.h b/drivers/serial/sh-sci.h index 3599828b9766..022e89ffec1d 100644 --- a/drivers/serial/sh-sci.h +++ b/drivers/serial/sh-sci.h | |||
| @@ -133,7 +133,7 @@ | |||
| 133 | # define SCSPTR3 0xffed0024 /* 16 bit SCIF */ | 133 | # define SCSPTR3 0xffed0024 /* 16 bit SCIF */ |
| 134 | # define SCSPTR4 0xffee0024 /* 16 bit SCIF */ | 134 | # define SCSPTR4 0xffee0024 /* 16 bit SCIF */ |
| 135 | # define SCSPTR5 0xffef0024 /* 16 bit SCIF */ | 135 | # define SCSPTR5 0xffef0024 /* 16 bit SCIF */ |
| 136 | # define SCIF_OPER 0x0001 /* Overrun error bit */ | 136 | # define SCIF_ORER 0x0001 /* Overrun error bit */ |
| 137 | # define SCSCR_INIT(port) 0x3a /* TIE=0,RIE=0,TE=1,RE=1,REIE=1 */ | 137 | # define SCSCR_INIT(port) 0x3a /* TIE=0,RIE=0,TE=1,RE=1,REIE=1 */ |
| 138 | #elif defined(CONFIG_CPU_SUBTYPE_SH7201) || \ | 138 | #elif defined(CONFIG_CPU_SUBTYPE_SH7201) || \ |
| 139 | defined(CONFIG_CPU_SUBTYPE_SH7203) || \ | 139 | defined(CONFIG_CPU_SUBTYPE_SH7203) || \ |
diff --git a/drivers/spi/spi_gpio.c b/drivers/spi/spi_gpio.c index 49698cabc30d..f5ed9721aabb 100644 --- a/drivers/spi/spi_gpio.c +++ b/drivers/spi/spi_gpio.c | |||
| @@ -114,7 +114,7 @@ static inline void setmosi(const struct spi_device *spi, int is_on) | |||
| 114 | 114 | ||
| 115 | static inline int getmiso(const struct spi_device *spi) | 115 | static inline int getmiso(const struct spi_device *spi) |
| 116 | { | 116 | { |
| 117 | return gpio_get_value(SPI_MISO_GPIO); | 117 | return !!gpio_get_value(SPI_MISO_GPIO); |
| 118 | } | 118 | } |
| 119 | 119 | ||
| 120 | #undef pdata | 120 | #undef pdata |
diff --git a/drivers/staging/android/Kconfig b/drivers/staging/android/Kconfig index 6b996db0dd6a..604bd1e0d546 100644 --- a/drivers/staging/android/Kconfig +++ b/drivers/staging/android/Kconfig | |||
| @@ -27,6 +27,7 @@ menuconfig ANDROID_RAM_CONSOLE_ERROR_CORRECTION | |||
| 27 | bool "Android RAM Console Enable error correction" | 27 | bool "Android RAM Console Enable error correction" |
| 28 | default n | 28 | default n |
| 29 | depends on ANDROID_RAM_CONSOLE | 29 | depends on ANDROID_RAM_CONSOLE |
| 30 | depends on !ANDROID_RAM_CONSOLE_EARLY_INIT | ||
| 30 | select REED_SOLOMON | 31 | select REED_SOLOMON |
| 31 | select REED_SOLOMON_ENC8 | 32 | select REED_SOLOMON_ENC8 |
| 32 | select REED_SOLOMON_DEC8 | 33 | select REED_SOLOMON_DEC8 |
diff --git a/drivers/staging/android/ram_console.c b/drivers/staging/android/ram_console.c index bf006857a87a..643ac5ce381d 100644 --- a/drivers/staging/android/ram_console.c +++ b/drivers/staging/android/ram_console.c | |||
| @@ -224,9 +224,23 @@ static int __init ram_console_init(struct ram_console_buffer *buffer, | |||
| 224 | ram_console_buffer_size = | 224 | ram_console_buffer_size = |
| 225 | buffer_size - sizeof(struct ram_console_buffer); | 225 | buffer_size - sizeof(struct ram_console_buffer); |
| 226 | 226 | ||
| 227 | if (ram_console_buffer_size > buffer_size) { | ||
| 228 | pr_err("ram_console: buffer %p, invalid size %d, datasize %d\n", | ||
| 229 | buffer, buffer_size, ram_console_buffer_size); | ||
| 230 | return 0; | ||
| 231 | } | ||
| 232 | |||
| 227 | #ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION | 233 | #ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION |
| 228 | ram_console_buffer_size -= (DIV_ROUND_UP(ram_console_buffer_size, | 234 | ram_console_buffer_size -= (DIV_ROUND_UP(ram_console_buffer_size, |
| 229 | ECC_BLOCK_SIZE) + 1) * ECC_SIZE; | 235 | ECC_BLOCK_SIZE) + 1) * ECC_SIZE; |
| 236 | |||
| 237 | if (ram_console_buffer_size > buffer_size) { | ||
| 238 | pr_err("ram_console: buffer %p, invalid size %d, " | ||
| 239 | "non-ecc datasize %d\n", | ||
| 240 | buffer, buffer_size, ram_console_buffer_size); | ||
| 241 | return 0; | ||
| 242 | } | ||
| 243 | |||
| 230 | ram_console_par_buffer = buffer->data + ram_console_buffer_size; | 244 | ram_console_par_buffer = buffer->data + ram_console_buffer_size; |
| 231 | 245 | ||
| 232 | 246 | ||
diff --git a/drivers/staging/android/timed_gpio.c b/drivers/staging/android/timed_gpio.c index 903270cbbe02..33daff0481d2 100644 --- a/drivers/staging/android/timed_gpio.c +++ b/drivers/staging/android/timed_gpio.c | |||
| @@ -50,7 +50,7 @@ static ssize_t gpio_enable_show(struct device *dev, struct device_attribute *att | |||
| 50 | if (hrtimer_active(&gpio_data->timer)) { | 50 | if (hrtimer_active(&gpio_data->timer)) { |
| 51 | ktime_t r = hrtimer_get_remaining(&gpio_data->timer); | 51 | ktime_t r = hrtimer_get_remaining(&gpio_data->timer); |
| 52 | struct timeval t = ktime_to_timeval(r); | 52 | struct timeval t = ktime_to_timeval(r); |
| 53 | remaining = t.tv_sec * 1000 + t.tv_usec; | 53 | remaining = t.tv_sec * 1000 + t.tv_usec / 1000; |
| 54 | } else | 54 | } else |
| 55 | remaining = 0; | 55 | remaining = 0; |
| 56 | 56 | ||
diff --git a/drivers/staging/at76_usb/Kconfig b/drivers/staging/at76_usb/Kconfig index 4c0e55e15448..8606f9621624 100644 --- a/drivers/staging/at76_usb/Kconfig +++ b/drivers/staging/at76_usb/Kconfig | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | config USB_ATMEL | 1 | config USB_ATMEL |
| 2 | tristate "Atmel at76c503/at76c505/at76c505a USB cards" | 2 | tristate "Atmel at76c503/at76c505/at76c505a USB cards" |
| 3 | depends on MAC80211 && WLAN_80211 && USB | 3 | depends on WLAN_80211 && USB |
| 4 | default N | 4 | default N |
| 5 | select FW_LOADER | 5 | select FW_LOADER |
| 6 | ---help--- | 6 | ---help--- |
diff --git a/drivers/staging/at76_usb/at76_usb.c b/drivers/staging/at76_usb/at76_usb.c index 185533e54769..c8e4d31c7df2 100644 --- a/drivers/staging/at76_usb/at76_usb.c +++ b/drivers/staging/at76_usb/at76_usb.c | |||
| @@ -6,7 +6,6 @@ | |||
| 6 | * Copyright (c) 2004 Nick Jones | 6 | * Copyright (c) 2004 Nick Jones |
| 7 | * Copyright (c) 2004 Balint Seeber <n0_5p4m_p13453@hotmail.com> | 7 | * Copyright (c) 2004 Balint Seeber <n0_5p4m_p13453@hotmail.com> |
| 8 | * Copyright (c) 2007 Guido Guenther <agx@sigxcpu.org> | 8 | * Copyright (c) 2007 Guido Guenther <agx@sigxcpu.org> |
| 9 | * Copyright (c) 2007 Kalle Valo <kalle.valo@iki.fi> | ||
| 10 | * | 9 | * |
| 11 | * This program is free software; you can redistribute it and/or | 10 | * This program is free software; you can redistribute it and/or |
| 12 | * modify it under the terms of the GNU General Public License as | 11 | * modify it under the terms of the GNU General Public License as |
| @@ -17,13 +16,6 @@ | |||
| 17 | * Atmel AT76C503A/505/505A. | 16 | * Atmel AT76C503A/505/505A. |
| 18 | * | 17 | * |
| 19 | * Some iw_handler code was taken from airo.c, (C) 1999 Benjamin Reed | 18 | * Some iw_handler code was taken from airo.c, (C) 1999 Benjamin Reed |
| 20 | * | ||
| 21 | * TODO for the mac80211 port: | ||
| 22 | * o adhoc support | ||
| 23 | * o RTS/CTS support | ||
| 24 | * o Power Save Mode support | ||
| 25 | * o support for short/long preambles | ||
| 26 | * o export variables through debugfs/sysfs | ||
| 27 | */ | 19 | */ |
| 28 | 20 | ||
| 29 | #include <linux/init.h> | 21 | #include <linux/init.h> |
| @@ -44,7 +36,7 @@ | |||
| 44 | #include <net/ieee80211_radiotap.h> | 36 | #include <net/ieee80211_radiotap.h> |
| 45 | #include <linux/firmware.h> | 37 | #include <linux/firmware.h> |
| 46 | #include <linux/leds.h> | 38 | #include <linux/leds.h> |
| 47 | #include <net/mac80211.h> | 39 | #include <net/ieee80211.h> |
| 48 | 40 | ||
| 49 | #include "at76_usb.h" | 41 | #include "at76_usb.h" |
| 50 | 42 | ||
| @@ -84,43 +76,31 @@ | |||
| 84 | #define DBG_WE_EVENTS 0x08000000 /* dump wireless events */ | 76 | #define DBG_WE_EVENTS 0x08000000 /* dump wireless events */ |
| 85 | #define DBG_FW 0x10000000 /* firmware download */ | 77 | #define DBG_FW 0x10000000 /* firmware download */ |
| 86 | #define DBG_DFU 0x20000000 /* device firmware upgrade */ | 78 | #define DBG_DFU 0x20000000 /* device firmware upgrade */ |
| 87 | #define DBG_CMD 0x40000000 | ||
| 88 | #define DBG_MAC80211 0x80000000 | ||
| 89 | 79 | ||
| 90 | #define DBG_DEFAULTS 0 | 80 | #define DBG_DEFAULTS 0 |
| 91 | 81 | ||
| 92 | /* Use our own dbg macro */ | 82 | /* Use our own dbg macro */ |
| 93 | #define at76_dbg(bits, format, arg...) \ | 83 | #define at76_dbg(bits, format, arg...) \ |
| 94 | do { \ | 84 | do { \ |
| 95 | if (at76_debug & (bits)) \ | 85 | if (at76_debug & (bits)) \ |
| 96 | printk(KERN_DEBUG DRIVER_NAME ": " format "\n" , ## arg); \ | ||
| 97 | } while (0) | ||
| 98 | |||
| 99 | #define at76_dbg_dump(bits, buf, len, format, arg...) \ | ||
| 100 | do { \ | ||
| 101 | if (at76_debug & (bits)) { \ | ||
| 102 | printk(KERN_DEBUG DRIVER_NAME ": " format "\n" , ## arg); \ | 86 | printk(KERN_DEBUG DRIVER_NAME ": " format "\n" , ## arg); \ |
| 103 | print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, buf, len); \ | 87 | } while (0) |
| 104 | } \ | ||
| 105 | } while (0) | ||
| 106 | 88 | ||
| 107 | static int at76_debug = DBG_DEFAULTS; | 89 | static int at76_debug = DBG_DEFAULTS; |
| 108 | 90 | ||
| 109 | #define FIRMWARE_IS_WPA(ver) ((ver.major == 1) && (ver.minor == 103)) | ||
| 110 | |||
| 111 | /* Protect against concurrent firmware loading and parsing */ | 91 | /* Protect against concurrent firmware loading and parsing */ |
| 112 | static struct mutex fw_mutex; | 92 | static struct mutex fw_mutex; |
| 113 | 93 | ||
| 114 | static struct fwentry firmwares[] = { | 94 | static struct fwentry firmwares[] = { |
| 115 | [0] = { "" }, | 95 | [0] = {""}, |
| 116 | [BOARD_503_ISL3861] = { "atmel_at76c503-i3861.bin" }, | 96 | [BOARD_503_ISL3861] = {"atmel_at76c503-i3861.bin"}, |
| 117 | [BOARD_503_ISL3863] = { "atmel_at76c503-i3863.bin" }, | 97 | [BOARD_503_ISL3863] = {"atmel_at76c503-i3863.bin"}, |
| 118 | [BOARD_503] = { "atmel_at76c503-rfmd.bin" }, | 98 | [BOARD_503] = {"atmel_at76c503-rfmd.bin"}, |
| 119 | [BOARD_503_ACC] = { "atmel_at76c503-rfmd-acc.bin" }, | 99 | [BOARD_503_ACC] = {"atmel_at76c503-rfmd-acc.bin"}, |
| 120 | [BOARD_505] = { "atmel_at76c505-rfmd.bin" }, | 100 | [BOARD_505] = {"atmel_at76c505-rfmd.bin"}, |
| 121 | [BOARD_505_2958] = { "atmel_at76c505-rfmd2958.bin" }, | 101 | [BOARD_505_2958] = {"atmel_at76c505-rfmd2958.bin"}, |
| 122 | [BOARD_505A] = { "atmel_at76c505a-rfmd2958.bin" }, | 102 | [BOARD_505A] = {"atmel_at76c505a-rfmd2958.bin"}, |
| 123 | [BOARD_505AMX] = { "atmel_at76c505amx-rfmd.bin" }, | 103 | [BOARD_505AMX] = {"atmel_at76c505amx-rfmd.bin"}, |
| 124 | }; | 104 | }; |
| 125 | 105 | ||
| 126 | #define USB_DEVICE_DATA(__ops) .driver_info = (kernel_ulong_t)(__ops) | 106 | #define USB_DEVICE_DATA(__ops) .driver_info = (kernel_ulong_t)(__ops) |
| @@ -130,133 +110,135 @@ static struct usb_device_id dev_table[] = { | |||
| 130 | * at76c503-i3861 | 110 | * at76c503-i3861 |
| 131 | */ | 111 | */ |
| 132 | /* Generic AT76C503/3861 device */ | 112 | /* Generic AT76C503/3861 device */ |
| 133 | { USB_DEVICE(0x03eb, 0x7603), USB_DEVICE_DATA(BOARD_503_ISL3861) }, | 113 | {USB_DEVICE(0x03eb, 0x7603), USB_DEVICE_DATA(BOARD_503_ISL3861)}, |
| 134 | /* Linksys WUSB11 v2.1/v2.6 */ | 114 | /* Linksys WUSB11 v2.1/v2.6 */ |
| 135 | { USB_DEVICE(0x066b, 0x2211), USB_DEVICE_DATA(BOARD_503_ISL3861) }, | 115 | {USB_DEVICE(0x066b, 0x2211), USB_DEVICE_DATA(BOARD_503_ISL3861)}, |
| 136 | /* Netgear MA101 rev. A */ | 116 | /* Netgear MA101 rev. A */ |
| 137 | { USB_DEVICE(0x0864, 0x4100), USB_DEVICE_DATA(BOARD_503_ISL3861) }, | 117 | {USB_DEVICE(0x0864, 0x4100), USB_DEVICE_DATA(BOARD_503_ISL3861)}, |
| 138 | /* Tekram U300C / Allnet ALL0193 */ | 118 | /* Tekram U300C / Allnet ALL0193 */ |
| 139 | { USB_DEVICE(0x0b3b, 0x1612), USB_DEVICE_DATA(BOARD_503_ISL3861) }, | 119 | {USB_DEVICE(0x0b3b, 0x1612), USB_DEVICE_DATA(BOARD_503_ISL3861)}, |
| 140 | /* HP HN210W J7801A */ | 120 | /* HP HN210W J7801A */ |
| 141 | { USB_DEVICE(0x03f0, 0x011c), USB_DEVICE_DATA(BOARD_503_ISL3861) }, | 121 | {USB_DEVICE(0x03f0, 0x011c), USB_DEVICE_DATA(BOARD_503_ISL3861)}, |
| 142 | /* Sitecom/Z-Com/Zyxel M4Y-750 */ | 122 | /* Sitecom/Z-Com/Zyxel M4Y-750 */ |
| 143 | { USB_DEVICE(0x0cde, 0x0001), USB_DEVICE_DATA(BOARD_503_ISL3861) }, | 123 | {USB_DEVICE(0x0cde, 0x0001), USB_DEVICE_DATA(BOARD_503_ISL3861)}, |
| 144 | /* Dynalink/Askey WLL013 (intersil) */ | 124 | /* Dynalink/Askey WLL013 (intersil) */ |
| 145 | { USB_DEVICE(0x069a, 0x0320), USB_DEVICE_DATA(BOARD_503_ISL3861) }, | 125 | {USB_DEVICE(0x069a, 0x0320), USB_DEVICE_DATA(BOARD_503_ISL3861)}, |
| 146 | /* EZ connect 11Mpbs Wireless USB Adapter SMC2662W v1 */ | 126 | /* EZ connect 11Mpbs Wireless USB Adapter SMC2662W v1 */ |
| 147 | { USB_DEVICE(0x0d5c, 0xa001), USB_DEVICE_DATA(BOARD_503_ISL3861) }, | 127 | {USB_DEVICE(0x0d5c, 0xa001), USB_DEVICE_DATA(BOARD_503_ISL3861)}, |
| 148 | /* BenQ AWL300 */ | 128 | /* BenQ AWL300 */ |
| 149 | { USB_DEVICE(0x04a5, 0x9000), USB_DEVICE_DATA(BOARD_503_ISL3861) }, | 129 | {USB_DEVICE(0x04a5, 0x9000), USB_DEVICE_DATA(BOARD_503_ISL3861)}, |
| 150 | /* Addtron AWU-120, Compex WLU11 */ | 130 | /* Addtron AWU-120, Compex WLU11 */ |
| 151 | { USB_DEVICE(0x05dd, 0xff31), USB_DEVICE_DATA(BOARD_503_ISL3861) }, | 131 | {USB_DEVICE(0x05dd, 0xff31), USB_DEVICE_DATA(BOARD_503_ISL3861)}, |
| 152 | /* Intel AP310 AnyPoint II USB */ | 132 | /* Intel AP310 AnyPoint II USB */ |
| 153 | { USB_DEVICE(0x8086, 0x0200), USB_DEVICE_DATA(BOARD_503_ISL3861) }, | 133 | {USB_DEVICE(0x8086, 0x0200), USB_DEVICE_DATA(BOARD_503_ISL3861)}, |
| 154 | /* Dynalink L11U */ | 134 | /* Dynalink L11U */ |
| 155 | { USB_DEVICE(0x0d8e, 0x7100), USB_DEVICE_DATA(BOARD_503_ISL3861) }, | 135 | {USB_DEVICE(0x0d8e, 0x7100), USB_DEVICE_DATA(BOARD_503_ISL3861)}, |
| 156 | /* Arescom WL-210, FCC id 07J-GL2411USB */ | 136 | /* Arescom WL-210, FCC id 07J-GL2411USB */ |
| 157 | { USB_DEVICE(0x0d8e, 0x7110), USB_DEVICE_DATA(BOARD_503_ISL3861) }, | 137 | {USB_DEVICE(0x0d8e, 0x7110), USB_DEVICE_DATA(BOARD_503_ISL3861)}, |
| 158 | /* I-O DATA WN-B11/USB */ | 138 | /* I-O DATA WN-B11/USB */ |
| 159 | { USB_DEVICE(0x04bb, 0x0919), USB_DEVICE_DATA(BOARD_503_ISL3861) }, | 139 | {USB_DEVICE(0x04bb, 0x0919), USB_DEVICE_DATA(BOARD_503_ISL3861)}, |
| 160 | /* BT Voyager 1010 */ | 140 | /* BT Voyager 1010 */ |
| 161 | { USB_DEVICE(0x069a, 0x0821), USB_DEVICE_DATA(BOARD_503_ISL3861) }, | 141 | {USB_DEVICE(0x069a, 0x0821), USB_DEVICE_DATA(BOARD_503_ISL3861)}, |
| 162 | /* | 142 | /* |
| 163 | * at76c503-i3863 | 143 | * at76c503-i3863 |
| 164 | */ | 144 | */ |
| 165 | /* Generic AT76C503/3863 device */ | 145 | /* Generic AT76C503/3863 device */ |
| 166 | { USB_DEVICE(0x03eb, 0x7604), USB_DEVICE_DATA(BOARD_503_ISL3863) }, | 146 | {USB_DEVICE(0x03eb, 0x7604), USB_DEVICE_DATA(BOARD_503_ISL3863)}, |
| 167 | /* Samsung SWL-2100U */ | 147 | /* Samsung SWL-2100U */ |
| 168 | { USB_DEVICE(0x055d, 0xa000), USB_DEVICE_DATA(BOARD_503_ISL3863) }, | 148 | {USB_DEVICE(0x055d, 0xa000), USB_DEVICE_DATA(BOARD_503_ISL3863)}, |
| 169 | /* | 149 | /* |
| 170 | * at76c503-rfmd | 150 | * at76c503-rfmd |
| 171 | */ | 151 | */ |
| 172 | /* Generic AT76C503/RFMD device */ | 152 | /* Generic AT76C503/RFMD device */ |
| 173 | { USB_DEVICE(0x03eb, 0x7605), USB_DEVICE_DATA(BOARD_503) }, | 153 | {USB_DEVICE(0x03eb, 0x7605), USB_DEVICE_DATA(BOARD_503)}, |
| 174 | /* Dynalink/Askey WLL013 (rfmd) */ | 154 | /* Dynalink/Askey WLL013 (rfmd) */ |
| 175 | { USB_DEVICE(0x069a, 0x0321), USB_DEVICE_DATA(BOARD_503) }, | 155 | {USB_DEVICE(0x069a, 0x0321), USB_DEVICE_DATA(BOARD_503)}, |
| 176 | /* Linksys WUSB11 v2.6 */ | 156 | /* Linksys WUSB11 v2.6 */ |
| 177 | { USB_DEVICE(0x077b, 0x2219), USB_DEVICE_DATA(BOARD_503) }, | 157 | {USB_DEVICE(0x077b, 0x2219), USB_DEVICE_DATA(BOARD_503)}, |
| 178 | /* Network Everywhere NWU11B */ | 158 | /* Network Everywhere NWU11B */ |
| 179 | { USB_DEVICE(0x077b, 0x2227), USB_DEVICE_DATA(BOARD_503) }, | 159 | {USB_DEVICE(0x077b, 0x2227), USB_DEVICE_DATA(BOARD_503)}, |
| 180 | /* Netgear MA101 rev. B */ | 160 | /* Netgear MA101 rev. B */ |
| 181 | { USB_DEVICE(0x0864, 0x4102), USB_DEVICE_DATA(BOARD_503) }, | 161 | {USB_DEVICE(0x0864, 0x4102), USB_DEVICE_DATA(BOARD_503)}, |
| 182 | /* D-Link DWL-120 rev. E */ | 162 | /* D-Link DWL-120 rev. E */ |
| 183 | { USB_DEVICE(0x2001, 0x3200), USB_DEVICE_DATA(BOARD_503) }, | 163 | {USB_DEVICE(0x2001, 0x3200), USB_DEVICE_DATA(BOARD_503)}, |
| 184 | /* Actiontec 802UAT1, HWU01150-01UK */ | 164 | /* Actiontec 802UAT1, HWU01150-01UK */ |
| 185 | { USB_DEVICE(0x1668, 0x7605), USB_DEVICE_DATA(BOARD_503) }, | 165 | {USB_DEVICE(0x1668, 0x7605), USB_DEVICE_DATA(BOARD_503)}, |
| 186 | /* AirVast W-Buddie WN210 */ | 166 | /* AirVast W-Buddie WN210 */ |
| 187 | { USB_DEVICE(0x03eb, 0x4102), USB_DEVICE_DATA(BOARD_503) }, | 167 | {USB_DEVICE(0x03eb, 0x4102), USB_DEVICE_DATA(BOARD_503)}, |
| 188 | /* Dick Smith Electronics XH1153 802.11b USB adapter */ | 168 | /* Dick Smith Electronics XH1153 802.11b USB adapter */ |
| 189 | { USB_DEVICE(0x1371, 0x5743), USB_DEVICE_DATA(BOARD_503) }, | 169 | {USB_DEVICE(0x1371, 0x5743), USB_DEVICE_DATA(BOARD_503)}, |
| 190 | /* CNet CNUSB611 */ | 170 | /* CNet CNUSB611 */ |
| 191 | { USB_DEVICE(0x1371, 0x0001), USB_DEVICE_DATA(BOARD_503) }, | 171 | {USB_DEVICE(0x1371, 0x0001), USB_DEVICE_DATA(BOARD_503)}, |
| 192 | /* FiberLine FL-WL200U */ | 172 | /* FiberLine FL-WL200U */ |
| 193 | { USB_DEVICE(0x1371, 0x0002), USB_DEVICE_DATA(BOARD_503) }, | 173 | {USB_DEVICE(0x1371, 0x0002), USB_DEVICE_DATA(BOARD_503)}, |
| 194 | /* BenQ AWL400 USB stick */ | 174 | /* BenQ AWL400 USB stick */ |
| 195 | { USB_DEVICE(0x04a5, 0x9001), USB_DEVICE_DATA(BOARD_503) }, | 175 | {USB_DEVICE(0x04a5, 0x9001), USB_DEVICE_DATA(BOARD_503)}, |
| 196 | /* 3Com 3CRSHEW696 */ | 176 | /* 3Com 3CRSHEW696 */ |
| 197 | { USB_DEVICE(0x0506, 0x0a01), USB_DEVICE_DATA(BOARD_503) }, | 177 | {USB_DEVICE(0x0506, 0x0a01), USB_DEVICE_DATA(BOARD_503)}, |
| 198 | /* Siemens Santis ADSL WLAN USB adapter WLL 013 */ | 178 | /* Siemens Santis ADSL WLAN USB adapter WLL 013 */ |
| 199 | { USB_DEVICE(0x0681, 0x001b), USB_DEVICE_DATA(BOARD_503) }, | 179 | {USB_DEVICE(0x0681, 0x001b), USB_DEVICE_DATA(BOARD_503)}, |
| 200 | /* Belkin F5D6050, version 2 */ | 180 | /* Belkin F5D6050, version 2 */ |
| 201 | { USB_DEVICE(0x050d, 0x0050), USB_DEVICE_DATA(BOARD_503) }, | 181 | {USB_DEVICE(0x050d, 0x0050), USB_DEVICE_DATA(BOARD_503)}, |
| 202 | /* iBlitzz, BWU613 (not *B or *SB) */ | 182 | /* iBlitzz, BWU613 (not *B or *SB) */ |
| 203 | { USB_DEVICE(0x07b8, 0xb000), USB_DEVICE_DATA(BOARD_503) }, | 183 | {USB_DEVICE(0x07b8, 0xb000), USB_DEVICE_DATA(BOARD_503)}, |
| 204 | /* Gigabyte GN-WLBM101 */ | 184 | /* Gigabyte GN-WLBM101 */ |
| 205 | { USB_DEVICE(0x1044, 0x8003), USB_DEVICE_DATA(BOARD_503) }, | 185 | {USB_DEVICE(0x1044, 0x8003), USB_DEVICE_DATA(BOARD_503)}, |
| 206 | /* Planex GW-US11S */ | 186 | /* Planex GW-US11S */ |
| 207 | { USB_DEVICE(0x2019, 0x3220), USB_DEVICE_DATA(BOARD_503) }, | 187 | {USB_DEVICE(0x2019, 0x3220), USB_DEVICE_DATA(BOARD_503)}, |
| 208 | /* Internal WLAN adapter in h5[4,5]xx series iPAQs */ | 188 | /* Internal WLAN adapter in h5[4,5]xx series iPAQs */ |
| 209 | { USB_DEVICE(0x049f, 0x0032), USB_DEVICE_DATA(BOARD_503) }, | 189 | {USB_DEVICE(0x049f, 0x0032), USB_DEVICE_DATA(BOARD_503)}, |
| 210 | /* Corega Wireless LAN USB-11 mini */ | 190 | /* Corega Wireless LAN USB-11 mini */ |
| 211 | { USB_DEVICE(0x07aa, 0x0011), USB_DEVICE_DATA(BOARD_503) }, | 191 | {USB_DEVICE(0x07aa, 0x0011), USB_DEVICE_DATA(BOARD_503)}, |
| 212 | /* Corega Wireless LAN USB-11 mini2 */ | 192 | /* Corega Wireless LAN USB-11 mini2 */ |
| 213 | { USB_DEVICE(0x07aa, 0x0018), USB_DEVICE_DATA(BOARD_503) }, | 193 | {USB_DEVICE(0x07aa, 0x0018), USB_DEVICE_DATA(BOARD_503)}, |
| 214 | /* Uniden PCW100 */ | 194 | /* Uniden PCW100 */ |
| 215 | { USB_DEVICE(0x05dd, 0xff35), USB_DEVICE_DATA(BOARD_503) }, | 195 | {USB_DEVICE(0x05dd, 0xff35), USB_DEVICE_DATA(BOARD_503)}, |
| 216 | /* | 196 | /* |
| 217 | * at76c503-rfmd-acc | 197 | * at76c503-rfmd-acc |
| 218 | */ | 198 | */ |
| 219 | /* SMC2664W */ | 199 | /* SMC2664W */ |
| 220 | { USB_DEVICE(0x083a, 0x3501), USB_DEVICE_DATA(BOARD_503_ACC) }, | 200 | {USB_DEVICE(0x083a, 0x3501), USB_DEVICE_DATA(BOARD_503_ACC)}, |
| 221 | /* Belkin F5D6050, SMC2662W v2, SMC2662W-AR */ | 201 | /* Belkin F5D6050, SMC2662W v2, SMC2662W-AR */ |
| 222 | { USB_DEVICE(0x0d5c, 0xa002), USB_DEVICE_DATA(BOARD_503_ACC) }, | 202 | {USB_DEVICE(0x0d5c, 0xa002), USB_DEVICE_DATA(BOARD_503_ACC)}, |
| 223 | /* | 203 | /* |
| 224 | * at76c505-rfmd | 204 | * at76c505-rfmd |
| 225 | */ | 205 | */ |
| 226 | /* Generic AT76C505/RFMD */ | 206 | /* Generic AT76C505/RFMD */ |
| 227 | { USB_DEVICE(0x03eb, 0x7606), USB_DEVICE_DATA(BOARD_505) }, | 207 | {USB_DEVICE(0x03eb, 0x7606), USB_DEVICE_DATA(BOARD_505)}, |
| 228 | /* | 208 | /* |
| 229 | * at76c505-rfmd2958 | 209 | * at76c505-rfmd2958 |
| 230 | */ | 210 | */ |
| 231 | /* Generic AT76C505/RFMD, OvisLink WL-1130USB */ | 211 | /* Generic AT76C505/RFMD, OvisLink WL-1130USB */ |
| 232 | { USB_DEVICE(0x03eb, 0x7613), USB_DEVICE_DATA(BOARD_505_2958) }, | 212 | {USB_DEVICE(0x03eb, 0x7613), USB_DEVICE_DATA(BOARD_505_2958)}, |
| 233 | /* Fiberline FL-WL240U */ | 213 | /* Fiberline FL-WL240U */ |
| 234 | { USB_DEVICE(0x1371, 0x0014), USB_DEVICE_DATA(BOARD_505_2958) }, | 214 | {USB_DEVICE(0x1371, 0x0014), USB_DEVICE_DATA(BOARD_505_2958)}, |
| 235 | /* CNet CNUSB-611G */ | 215 | /* CNet CNUSB-611G */ |
| 236 | { USB_DEVICE(0x1371, 0x0013), USB_DEVICE_DATA(BOARD_505_2958) }, | 216 | {USB_DEVICE(0x1371, 0x0013), USB_DEVICE_DATA(BOARD_505_2958)}, |
| 237 | /* Linksys WUSB11 v2.8 */ | 217 | /* Linksys WUSB11 v2.8 */ |
| 238 | { USB_DEVICE(0x1915, 0x2233), USB_DEVICE_DATA(BOARD_505_2958) }, | 218 | {USB_DEVICE(0x1915, 0x2233), USB_DEVICE_DATA(BOARD_505_2958)}, |
| 239 | /* Xterasys XN-2122B, IBlitzz BWU613B/BWU613SB */ | 219 | /* Xterasys XN-2122B, IBlitzz BWU613B/BWU613SB */ |
| 240 | { USB_DEVICE(0x12fd, 0x1001), USB_DEVICE_DATA(BOARD_505_2958) }, | 220 | {USB_DEVICE(0x12fd, 0x1001), USB_DEVICE_DATA(BOARD_505_2958)}, |
| 241 | /* Corega WLAN USB Stick 11 */ | 221 | /* Corega WLAN USB Stick 11 */ |
| 242 | { USB_DEVICE(0x07aa, 0x7613), USB_DEVICE_DATA(BOARD_505_2958) }, | 222 | {USB_DEVICE(0x07aa, 0x7613), USB_DEVICE_DATA(BOARD_505_2958)}, |
| 243 | /* Microstar MSI Box MS6978 */ | 223 | /* Microstar MSI Box MS6978 */ |
| 244 | { USB_DEVICE(0x0db0, 0x1020), USB_DEVICE_DATA(BOARD_505_2958) }, | 224 | {USB_DEVICE(0x0db0, 0x1020), USB_DEVICE_DATA(BOARD_505_2958)}, |
| 245 | /* | 225 | /* |
| 246 | * at76c505a-rfmd2958 | 226 | * at76c505a-rfmd2958 |
| 247 | */ | 227 | */ |
| 248 | /* Generic AT76C505A device */ | 228 | /* Generic AT76C505A device */ |
| 249 | { USB_DEVICE(0x03eb, 0x7614), USB_DEVICE_DATA(BOARD_505A) }, | 229 | {USB_DEVICE(0x03eb, 0x7614), USB_DEVICE_DATA(BOARD_505A)}, |
| 250 | /* Generic AT76C505AS device */ | 230 | /* Generic AT76C505AS device */ |
| 251 | { USB_DEVICE(0x03eb, 0x7617), USB_DEVICE_DATA(BOARD_505A) }, | 231 | {USB_DEVICE(0x03eb, 0x7617), USB_DEVICE_DATA(BOARD_505A)}, |
| 252 | /* Siemens Gigaset USB WLAN Adapter 11 */ | 232 | /* Siemens Gigaset USB WLAN Adapter 11 */ |
| 253 | { USB_DEVICE(0x1690, 0x0701), USB_DEVICE_DATA(BOARD_505A) }, | 233 | {USB_DEVICE(0x1690, 0x0701), USB_DEVICE_DATA(BOARD_505A)}, |
| 234 | /* OQO Model 01+ Internal Wi-Fi */ | ||
| 235 | {USB_DEVICE(0x1557, 0x0002), USB_DEVICE_DATA(BOARD_505A)}, | ||
| 254 | /* | 236 | /* |
| 255 | * at76c505amx-rfmd | 237 | * at76c505amx-rfmd |
| 256 | */ | 238 | */ |
| 257 | /* Generic AT76C505AMX device */ | 239 | /* Generic AT76C505AMX device */ |
| 258 | { USB_DEVICE(0x03eb, 0x7615), USB_DEVICE_DATA(BOARD_505AMX) }, | 240 | {USB_DEVICE(0x03eb, 0x7615), USB_DEVICE_DATA(BOARD_505AMX)}, |
| 259 | { } | 241 | {} |
| 260 | }; | 242 | }; |
| 261 | 243 | ||
| 262 | MODULE_DEVICE_TABLE(usb, dev_table); | 244 | MODULE_DEVICE_TABLE(usb, dev_table); |
| @@ -264,8 +246,26 @@ MODULE_DEVICE_TABLE(usb, dev_table); | |||
| 264 | /* Supported rates of this hardware, bit 7 marks basic rates */ | 246 | /* Supported rates of this hardware, bit 7 marks basic rates */ |
| 265 | static const u8 hw_rates[] = { 0x82, 0x84, 0x0b, 0x16 }; | 247 | static const u8 hw_rates[] = { 0x82, 0x84, 0x0b, 0x16 }; |
| 266 | 248 | ||
| 249 | /* Frequency of each channel in MHz */ | ||
| 250 | static const long channel_frequency[] = { | ||
| 251 | 2412, 2417, 2422, 2427, 2432, 2437, 2442, | ||
| 252 | 2447, 2452, 2457, 2462, 2467, 2472, 2484 | ||
| 253 | }; | ||
| 254 | |||
| 255 | #define NUM_CHANNELS ARRAY_SIZE(channel_frequency) | ||
| 256 | |||
| 267 | static const char *const preambles[] = { "long", "short", "auto" }; | 257 | static const char *const preambles[] = { "long", "short", "auto" }; |
| 268 | 258 | ||
| 259 | static const char *const mac_states[] = { | ||
| 260 | [MAC_INIT] = "INIT", | ||
| 261 | [MAC_SCANNING] = "SCANNING", | ||
| 262 | [MAC_AUTH] = "AUTH", | ||
| 263 | [MAC_ASSOC] = "ASSOC", | ||
| 264 | [MAC_JOINING] = "JOINING", | ||
| 265 | [MAC_CONNECTED] = "CONNECTED", | ||
| 266 | [MAC_OWN_IBSS] = "OWN_IBSS" | ||
| 267 | }; | ||
| 268 | |||
| 269 | /* Firmware download */ | 269 | /* Firmware download */ |
| 270 | /* DFU states */ | 270 | /* DFU states */ |
| 271 | #define STATE_IDLE 0x00 | 271 | #define STATE_IDLE 0x00 |
| @@ -300,30 +300,17 @@ struct dfu_status { | |||
| 300 | 300 | ||
| 301 | static inline int at76_is_intersil(enum board_type board) | 301 | static inline int at76_is_intersil(enum board_type board) |
| 302 | { | 302 | { |
| 303 | if (board == BOARD_503_ISL3861 || board == BOARD_503_ISL3863) | 303 | return (board == BOARD_503_ISL3861 || board == BOARD_503_ISL3863); |
| 304 | return 1; | ||
| 305 | return 0; | ||
| 306 | } | 304 | } |
| 307 | 305 | ||
| 308 | static inline int at76_is_503rfmd(enum board_type board) | 306 | static inline int at76_is_503rfmd(enum board_type board) |
| 309 | { | 307 | { |
| 310 | if (board == BOARD_503 || board == BOARD_503_ACC) | 308 | return (board == BOARD_503 || board == BOARD_503_ACC); |
| 311 | return 1; | ||
| 312 | return 0; | ||
| 313 | } | ||
| 314 | |||
| 315 | static inline int at76_is_505(enum board_type board) | ||
| 316 | { | ||
| 317 | if (board == BOARD_505 || board == BOARD_505_2958) | ||
| 318 | return 1; | ||
| 319 | return 0; | ||
| 320 | } | 309 | } |
| 321 | 310 | ||
| 322 | static inline int at76_is_505a(enum board_type board) | 311 | static inline int at76_is_505a(enum board_type board) |
| 323 | { | 312 | { |
| 324 | if (board == BOARD_505A || board == BOARD_505AMX) | 313 | return (board == BOARD_505A || board == BOARD_505AMX); |
| 325 | return 1; | ||
| 326 | return 0; | ||
| 327 | } | 314 | } |
| 328 | 315 | ||
| 329 | /* Load a block of the first (internal) part of the firmware */ | 316 | /* Load a block of the first (internal) part of the firmware */ |
| @@ -504,6 +491,41 @@ exit: | |||
| 504 | return ret; | 491 | return ret; |
| 505 | } | 492 | } |
| 506 | 493 | ||
| 494 | /* Report that the scan results are ready */ | ||
| 495 | static inline void at76_iwevent_scan_complete(struct net_device *netdev) | ||
| 496 | { | ||
| 497 | union iwreq_data wrqu; | ||
| 498 | wrqu.data.length = 0; | ||
| 499 | wrqu.data.flags = 0; | ||
| 500 | wireless_send_event(netdev, SIOCGIWSCAN, &wrqu, NULL); | ||
| 501 | at76_dbg(DBG_WE_EVENTS, "%s: SIOCGIWSCAN sent", netdev->name); | ||
| 502 | } | ||
| 503 | |||
| 504 | static inline void at76_iwevent_bss_connect(struct net_device *netdev, | ||
| 505 | u8 *bssid) | ||
| 506 | { | ||
| 507 | union iwreq_data wrqu; | ||
| 508 | wrqu.data.length = 0; | ||
| 509 | wrqu.data.flags = 0; | ||
| 510 | memcpy(wrqu.ap_addr.sa_data, bssid, ETH_ALEN); | ||
| 511 | wrqu.ap_addr.sa_family = ARPHRD_ETHER; | ||
| 512 | wireless_send_event(netdev, SIOCGIWAP, &wrqu, NULL); | ||
| 513 | at76_dbg(DBG_WE_EVENTS, "%s: %s: SIOCGIWAP sent", netdev->name, | ||
| 514 | __func__); | ||
| 515 | } | ||
| 516 | |||
| 517 | static inline void at76_iwevent_bss_disconnect(struct net_device *netdev) | ||
| 518 | { | ||
| 519 | union iwreq_data wrqu; | ||
| 520 | wrqu.data.length = 0; | ||
| 521 | wrqu.data.flags = 0; | ||
| 522 | memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN); | ||
| 523 | wrqu.ap_addr.sa_family = ARPHRD_ETHER; | ||
| 524 | wireless_send_event(netdev, SIOCGIWAP, &wrqu, NULL); | ||
| 525 | at76_dbg(DBG_WE_EVENTS, "%s: %s: SIOCGIWAP sent", netdev->name, | ||
| 526 | __func__); | ||
| 527 | } | ||
| 528 | |||
| 507 | #define HEX2STR_BUFFERS 4 | 529 | #define HEX2STR_BUFFERS 4 |
| 508 | #define HEX2STR_MAX_LEN 64 | 530 | #define HEX2STR_MAX_LEN 64 |
| 509 | #define BIN2HEX(x) ((x) < 10 ? '0' + (x) : (x) + 'A' - 10) | 531 | #define BIN2HEX(x) ((x) < 10 ? '0' + (x) : (x) + 'A' - 10) |
| @@ -575,6 +597,37 @@ static void at76_ledtrig_tx_activity(void) | |||
| 575 | mod_timer(&ledtrig_tx_timer, jiffies + HZ / 4); | 597 | mod_timer(&ledtrig_tx_timer, jiffies + HZ / 4); |
| 576 | } | 598 | } |
| 577 | 599 | ||
| 600 | /* Check if the given ssid is hidden */ | ||
| 601 | static inline int at76_is_hidden_ssid(u8 *ssid, int length) | ||
| 602 | { | ||
| 603 | static const u8 zeros[32]; | ||
| 604 | |||
| 605 | if (length == 0) | ||
| 606 | return 1; | ||
| 607 | |||
| 608 | if (length == 1 && ssid[0] == ' ') | ||
| 609 | return 1; | ||
| 610 | |||
| 611 | return (memcmp(ssid, zeros, length) == 0); | ||
| 612 | } | ||
| 613 | |||
| 614 | static inline void at76_free_bss_list(struct at76_priv *priv) | ||
| 615 | { | ||
| 616 | struct list_head *next, *ptr; | ||
| 617 | unsigned long flags; | ||
| 618 | |||
| 619 | spin_lock_irqsave(&priv->bss_list_spinlock, flags); | ||
| 620 | |||
| 621 | priv->curr_bss = NULL; | ||
| 622 | |||
| 623 | list_for_each_safe(ptr, next, &priv->bss_list) { | ||
| 624 | list_del(ptr); | ||
| 625 | kfree(list_entry(ptr, struct bss_info, list)); | ||
| 626 | } | ||
| 627 | |||
| 628 | spin_unlock_irqrestore(&priv->bss_list_spinlock, flags); | ||
| 629 | } | ||
| 630 | |||
| 578 | static int at76_remap(struct usb_device *udev) | 631 | static int at76_remap(struct usb_device *udev) |
| 579 | { | 632 | { |
| 580 | int ret; | 633 | int ret; |
| @@ -598,7 +651,7 @@ static int at76_get_op_mode(struct usb_device *udev) | |||
| 598 | return -ENOMEM; | 651 | return -ENOMEM; |
| 599 | ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0x33, | 652 | ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0x33, |
| 600 | USB_TYPE_VENDOR | USB_DIR_IN | | 653 | USB_TYPE_VENDOR | USB_DIR_IN | |
| 601 | USB_RECIP_INTERFACE, 0x01, 0, &op_mode, 1, | 654 | USB_RECIP_INTERFACE, 0x01, 0, op_mode, 1, |
| 602 | USB_CTRL_GET_TIMEOUT); | 655 | USB_CTRL_GET_TIMEOUT); |
| 603 | saved = *op_mode; | 656 | saved = *op_mode; |
| 604 | kfree(op_mode); | 657 | kfree(op_mode); |
| @@ -676,7 +729,7 @@ exit: | |||
| 676 | kfree(hwcfg); | 729 | kfree(hwcfg); |
| 677 | if (ret < 0) | 730 | if (ret < 0) |
| 678 | printk(KERN_ERR "%s: cannot get HW Config (error %d)\n", | 731 | printk(KERN_ERR "%s: cannot get HW Config (error %d)\n", |
| 679 | wiphy_name(priv->hw->wiphy), ret); | 732 | priv->netdev->name, ret); |
| 680 | 733 | ||
| 681 | return ret; | 734 | return ret; |
| 682 | } | 735 | } |
| @@ -685,15 +738,15 @@ static struct reg_domain const *at76_get_reg_domain(u16 code) | |||
| 685 | { | 738 | { |
| 686 | int i; | 739 | int i; |
| 687 | static struct reg_domain const fd_tab[] = { | 740 | static struct reg_domain const fd_tab[] = { |
| 688 | { 0x10, "FCC (USA)", 0x7ff }, /* ch 1-11 */ | 741 | {0x10, "FCC (USA)", 0x7ff}, /* ch 1-11 */ |
| 689 | { 0x20, "IC (Canada)", 0x7ff }, /* ch 1-11 */ | 742 | {0x20, "IC (Canada)", 0x7ff}, /* ch 1-11 */ |
| 690 | { 0x30, "ETSI (most of Europe)", 0x1fff }, /* ch 1-13 */ | 743 | {0x30, "ETSI (most of Europe)", 0x1fff}, /* ch 1-13 */ |
| 691 | { 0x31, "Spain", 0x600 }, /* ch 10-11 */ | 744 | {0x31, "Spain", 0x600}, /* ch 10-11 */ |
| 692 | { 0x32, "France", 0x1e00 }, /* ch 10-13 */ | 745 | {0x32, "France", 0x1e00}, /* ch 10-13 */ |
| 693 | { 0x40, "MKK (Japan)", 0x2000 }, /* ch 14 */ | 746 | {0x40, "MKK (Japan)", 0x2000}, /* ch 14 */ |
| 694 | { 0x41, "MKK1 (Japan)", 0x3fff }, /* ch 1-14 */ | 747 | {0x41, "MKK1 (Japan)", 0x3fff}, /* ch 1-14 */ |
| 695 | { 0x50, "Israel", 0x3fc }, /* ch 3-9 */ | 748 | {0x50, "Israel", 0x3fc}, /* ch 3-9 */ |
| 696 | { 0x00, "<unknown>", 0xffffffff } /* ch 1-32 */ | 749 | {0x00, "<unknown>", 0xffffffff} /* ch 1-32 */ |
| 697 | }; | 750 | }; |
| 698 | 751 | ||
| 699 | /* Last entry is fallback for unknown domain code */ | 752 | /* Last entry is fallback for unknown domain code */ |
| @@ -731,7 +784,7 @@ static inline int at76_get_cmd_status(struct usb_device *udev, u8 cmd) | |||
| 731 | ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0x22, | 784 | ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0x22, |
| 732 | USB_TYPE_VENDOR | USB_DIR_IN | | 785 | USB_TYPE_VENDOR | USB_DIR_IN | |
| 733 | USB_RECIP_INTERFACE, cmd, 0, stat_buf, | 786 | USB_RECIP_INTERFACE, cmd, 0, stat_buf, |
| 734 | sizeof(stat_buf), USB_CTRL_GET_TIMEOUT); | 787 | 40, USB_CTRL_GET_TIMEOUT); |
| 735 | if (ret >= 0) | 788 | if (ret >= 0) |
| 736 | ret = stat_buf[5]; | 789 | ret = stat_buf[5]; |
| 737 | kfree(stat_buf); | 790 | kfree(stat_buf); |
| @@ -739,24 +792,6 @@ static inline int at76_get_cmd_status(struct usb_device *udev, u8 cmd) | |||
| 739 | return ret; | 792 | return ret; |
| 740 | } | 793 | } |
| 741 | 794 | ||
| 742 | #define MAKE_CMD_CASE(c) case (c): return #c | ||
| 743 | |||
| 744 | static const char *at76_get_cmd_string(u8 cmd_status) | ||
| 745 | { | ||
| 746 | switch (cmd_status) { | ||
| 747 | MAKE_CMD_CASE(CMD_SET_MIB); | ||
| 748 | MAKE_CMD_CASE(CMD_GET_MIB); | ||
| 749 | MAKE_CMD_CASE(CMD_SCAN); | ||
| 750 | MAKE_CMD_CASE(CMD_JOIN); | ||
| 751 | MAKE_CMD_CASE(CMD_START_IBSS); | ||
| 752 | MAKE_CMD_CASE(CMD_RADIO_ON); | ||
| 753 | MAKE_CMD_CASE(CMD_RADIO_OFF); | ||
| 754 | MAKE_CMD_CASE(CMD_STARTUP); | ||
| 755 | } | ||
| 756 | |||
| 757 | return "UNKNOWN"; | ||
| 758 | } | ||
| 759 | |||
| 760 | static int at76_set_card_command(struct usb_device *udev, u8 cmd, void *buf, | 795 | static int at76_set_card_command(struct usb_device *udev, u8 cmd, void *buf, |
| 761 | int buf_size) | 796 | int buf_size) |
| 762 | { | 797 | { |
| @@ -772,10 +807,6 @@ static int at76_set_card_command(struct usb_device *udev, u8 cmd, void *buf, | |||
| 772 | cmd_buf->size = cpu_to_le16(buf_size); | 807 | cmd_buf->size = cpu_to_le16(buf_size); |
| 773 | memcpy(cmd_buf->data, buf, buf_size); | 808 | memcpy(cmd_buf->data, buf, buf_size); |
| 774 | 809 | ||
| 775 | at76_dbg_dump(DBG_CMD, cmd_buf, sizeof(struct at76_command) + buf_size, | ||
| 776 | "issuing command %s (0x%02x)", | ||
| 777 | at76_get_cmd_string(cmd), cmd); | ||
| 778 | |||
| 779 | ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x0e, | 810 | ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x0e, |
| 780 | USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE, | 811 | USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE, |
| 781 | 0, 0, cmd_buf, | 812 | 0, 0, cmd_buf, |
| @@ -813,13 +844,13 @@ static int at76_wait_completion(struct at76_priv *priv, int cmd) | |||
| 813 | status = at76_get_cmd_status(priv->udev, cmd); | 844 | status = at76_get_cmd_status(priv->udev, cmd); |
| 814 | if (status < 0) { | 845 | if (status < 0) { |
| 815 | printk(KERN_ERR "%s: at76_get_cmd_status failed: %d\n", | 846 | printk(KERN_ERR "%s: at76_get_cmd_status failed: %d\n", |
| 816 | wiphy_name(priv->hw->wiphy), status); | 847 | priv->netdev->name, status); |
| 817 | break; | 848 | break; |
| 818 | } | 849 | } |
| 819 | 850 | ||
| 820 | at76_dbg(DBG_WAIT_COMPLETE, | 851 | at76_dbg(DBG_WAIT_COMPLETE, |
| 821 | "%s: Waiting on cmd %d, status = %d (%s)", | 852 | "%s: Waiting on cmd %d, status = %d (%s)", |
| 822 | wiphy_name(priv->hw->wiphy), cmd, status, | 853 | priv->netdev->name, cmd, status, |
| 823 | at76_get_cmd_status_string(status)); | 854 | at76_get_cmd_status_string(status)); |
| 824 | 855 | ||
| 825 | if (status != CMD_STATUS_IN_PROGRESS | 856 | if (status != CMD_STATUS_IN_PROGRESS |
| @@ -830,7 +861,7 @@ static int at76_wait_completion(struct at76_priv *priv, int cmd) | |||
| 830 | if (time_after(jiffies, timeout)) { | 861 | if (time_after(jiffies, timeout)) { |
| 831 | printk(KERN_ERR | 862 | printk(KERN_ERR |
| 832 | "%s: completion timeout for command %d\n", | 863 | "%s: completion timeout for command %d\n", |
| 833 | wiphy_name(priv->hw->wiphy), cmd); | 864 | priv->netdev->name, cmd); |
| 834 | status = -ETIMEDOUT; | 865 | status = -ETIMEDOUT; |
| 835 | break; | 866 | break; |
| 836 | } | 867 | } |
| @@ -853,7 +884,7 @@ static int at76_set_mib(struct at76_priv *priv, struct set_mib_buffer *buf) | |||
| 853 | if (ret != CMD_STATUS_COMPLETE) { | 884 | if (ret != CMD_STATUS_COMPLETE) { |
| 854 | printk(KERN_INFO | 885 | printk(KERN_INFO |
| 855 | "%s: set_mib: at76_wait_completion failed " | 886 | "%s: set_mib: at76_wait_completion failed " |
| 856 | "with %d\n", wiphy_name(priv->hw->wiphy), ret); | 887 | "with %d\n", priv->netdev->name, ret); |
| 857 | ret = -EIO; | 888 | ret = -EIO; |
| 858 | } | 889 | } |
| 859 | 890 | ||
| @@ -874,7 +905,7 @@ static int at76_set_radio(struct at76_priv *priv, int enable) | |||
| 874 | ret = at76_set_card_command(priv->udev, cmd, NULL, 0); | 905 | ret = at76_set_card_command(priv->udev, cmd, NULL, 0); |
| 875 | if (ret < 0) | 906 | if (ret < 0) |
| 876 | printk(KERN_ERR "%s: at76_set_card_command(%d) failed: %d\n", | 907 | printk(KERN_ERR "%s: at76_set_card_command(%d) failed: %d\n", |
| 877 | wiphy_name(priv->hw->wiphy), cmd, ret); | 908 | priv->netdev->name, cmd, ret); |
| 878 | else | 909 | else |
| 879 | ret = 1; | 910 | ret = 1; |
| 880 | 911 | ||
| @@ -895,7 +926,44 @@ static int at76_set_pm_mode(struct at76_priv *priv) | |||
| 895 | ret = at76_set_mib(priv, &priv->mib_buf); | 926 | ret = at76_set_mib(priv, &priv->mib_buf); |
| 896 | if (ret < 0) | 927 | if (ret < 0) |
| 897 | printk(KERN_ERR "%s: set_mib (pm_mode) failed: %d\n", | 928 | printk(KERN_ERR "%s: set_mib (pm_mode) failed: %d\n", |
| 898 | wiphy_name(priv->hw->wiphy), ret); | 929 | priv->netdev->name, ret); |
| 930 | |||
| 931 | return ret; | ||
| 932 | } | ||
| 933 | |||
| 934 | /* Set the association id for power save mode */ | ||
| 935 | static int at76_set_associd(struct at76_priv *priv, u16 id) | ||
| 936 | { | ||
| 937 | int ret = 0; | ||
| 938 | |||
| 939 | priv->mib_buf.type = MIB_MAC_MGMT; | ||
| 940 | priv->mib_buf.size = 2; | ||
| 941 | priv->mib_buf.index = offsetof(struct mib_mac_mgmt, station_id); | ||
| 942 | priv->mib_buf.data.word = cpu_to_le16(id); | ||
| 943 | |||
| 944 | ret = at76_set_mib(priv, &priv->mib_buf); | ||
| 945 | if (ret < 0) | ||
| 946 | printk(KERN_ERR "%s: set_mib (associd) failed: %d\n", | ||
| 947 | priv->netdev->name, ret); | ||
| 948 | |||
| 949 | return ret; | ||
| 950 | } | ||
| 951 | |||
| 952 | /* Set the listen interval for power save mode */ | ||
| 953 | static int at76_set_listen_interval(struct at76_priv *priv, u16 interval) | ||
| 954 | { | ||
| 955 | int ret = 0; | ||
| 956 | |||
| 957 | priv->mib_buf.type = MIB_MAC; | ||
| 958 | priv->mib_buf.size = 2; | ||
| 959 | priv->mib_buf.index = offsetof(struct mib_mac, listen_interval); | ||
| 960 | priv->mib_buf.data.word = cpu_to_le16(interval); | ||
| 961 | |||
| 962 | ret = at76_set_mib(priv, &priv->mib_buf); | ||
| 963 | if (ret < 0) | ||
| 964 | printk(KERN_ERR | ||
| 965 | "%s: set_mib (listen_interval) failed: %d\n", | ||
| 966 | priv->netdev->name, ret); | ||
| 899 | 967 | ||
| 900 | return ret; | 968 | return ret; |
| 901 | } | 969 | } |
| @@ -912,7 +980,7 @@ static int at76_set_preamble(struct at76_priv *priv, u8 type) | |||
| 912 | ret = at76_set_mib(priv, &priv->mib_buf); | 980 | ret = at76_set_mib(priv, &priv->mib_buf); |
| 913 | if (ret < 0) | 981 | if (ret < 0) |
| 914 | printk(KERN_ERR "%s: set_mib (preamble) failed: %d\n", | 982 | printk(KERN_ERR "%s: set_mib (preamble) failed: %d\n", |
| 915 | wiphy_name(priv->hw->wiphy), ret); | 983 | priv->netdev->name, ret); |
| 916 | 984 | ||
| 917 | return ret; | 985 | return ret; |
| 918 | } | 986 | } |
| @@ -929,7 +997,7 @@ static int at76_set_frag(struct at76_priv *priv, u16 size) | |||
| 929 | ret = at76_set_mib(priv, &priv->mib_buf); | 997 | ret = at76_set_mib(priv, &priv->mib_buf); |
| 930 | if (ret < 0) | 998 | if (ret < 0) |
| 931 | printk(KERN_ERR "%s: set_mib (frag threshold) failed: %d\n", | 999 | printk(KERN_ERR "%s: set_mib (frag threshold) failed: %d\n", |
| 932 | wiphy_name(priv->hw->wiphy), ret); | 1000 | priv->netdev->name, ret); |
| 933 | 1001 | ||
| 934 | return ret; | 1002 | return ret; |
| 935 | } | 1003 | } |
| @@ -946,7 +1014,7 @@ static int at76_set_rts(struct at76_priv *priv, u16 size) | |||
| 946 | ret = at76_set_mib(priv, &priv->mib_buf); | 1014 | ret = at76_set_mib(priv, &priv->mib_buf); |
| 947 | if (ret < 0) | 1015 | if (ret < 0) |
| 948 | printk(KERN_ERR "%s: set_mib (rts) failed: %d\n", | 1016 | printk(KERN_ERR "%s: set_mib (rts) failed: %d\n", |
| 949 | wiphy_name(priv->hw->wiphy), ret); | 1017 | priv->netdev->name, ret); |
| 950 | 1018 | ||
| 951 | return ret; | 1019 | return ret; |
| 952 | } | 1020 | } |
| @@ -963,41 +1031,24 @@ static int at76_set_autorate_fallback(struct at76_priv *priv, int onoff) | |||
| 963 | ret = at76_set_mib(priv, &priv->mib_buf); | 1031 | ret = at76_set_mib(priv, &priv->mib_buf); |
| 964 | if (ret < 0) | 1032 | if (ret < 0) |
| 965 | printk(KERN_ERR "%s: set_mib (autorate fallback) failed: %d\n", | 1033 | printk(KERN_ERR "%s: set_mib (autorate fallback) failed: %d\n", |
| 966 | wiphy_name(priv->hw->wiphy), ret); | 1034 | priv->netdev->name, ret); |
| 967 | 1035 | ||
| 968 | return ret; | 1036 | return ret; |
| 969 | } | 1037 | } |
| 970 | 1038 | ||
| 971 | static int at76_set_tkip_bssid(struct at76_priv *priv, const void *addr) | 1039 | static int at76_add_mac_address(struct at76_priv *priv, void *addr) |
| 972 | { | 1040 | { |
| 973 | int ret = 0; | 1041 | int ret = 0; |
| 974 | 1042 | ||
| 975 | priv->mib_buf.type = MIB_MAC_ENCRYPTION; | 1043 | priv->mib_buf.type = MIB_MAC_ADDR; |
| 976 | priv->mib_buf.size = ETH_ALEN; | 1044 | priv->mib_buf.size = ETH_ALEN; |
| 977 | priv->mib_buf.index = offsetof(struct mib_mac_encryption, tkip_bssid); | 1045 | priv->mib_buf.index = offsetof(struct mib_mac_addr, mac_addr); |
| 978 | memcpy(priv->mib_buf.data.addr, addr, ETH_ALEN); | 1046 | memcpy(priv->mib_buf.data.addr, addr, ETH_ALEN); |
| 979 | 1047 | ||
| 980 | ret = at76_set_mib(priv, &priv->mib_buf); | 1048 | ret = at76_set_mib(priv, &priv->mib_buf); |
| 981 | if (ret < 0) | 1049 | if (ret < 0) |
| 982 | printk(KERN_ERR "%s: set_mib (MAC_ENCRYPTION, tkip_bssid) failed: %d\n", | 1050 | printk(KERN_ERR "%s: set_mib (MAC_ADDR, mac_addr) failed: %d\n", |
| 983 | wiphy_name(priv->hw->wiphy), ret); | 1051 | priv->netdev->name, ret); |
| 984 | |||
| 985 | return ret; | ||
| 986 | } | ||
| 987 | |||
| 988 | static int at76_reset_rsc(struct at76_priv *priv) | ||
| 989 | { | ||
| 990 | int ret = 0; | ||
| 991 | |||
| 992 | priv->mib_buf.type = MIB_MAC_ENCRYPTION; | ||
| 993 | priv->mib_buf.size = 4 * 8; | ||
| 994 | priv->mib_buf.index = offsetof(struct mib_mac_encryption, key_rsc); | ||
| 995 | memset(priv->mib_buf.data.data, 0 , priv->mib_buf.size); | ||
| 996 | |||
| 997 | ret = at76_set_mib(priv, &priv->mib_buf); | ||
| 998 | if (ret < 0) | ||
| 999 | printk(KERN_ERR "%s: set_mib (MAC_ENCRYPTION, key_rsc) failed: %d\n", | ||
| 1000 | wiphy_name(priv->hw->wiphy), ret); | ||
| 1001 | 1052 | ||
| 1002 | return ret; | 1053 | return ret; |
| 1003 | } | 1054 | } |
| @@ -1016,16 +1067,16 @@ static void at76_dump_mib_mac_addr(struct at76_priv *priv) | |||
| 1016 | sizeof(struct mib_mac_addr)); | 1067 | sizeof(struct mib_mac_addr)); |
| 1017 | if (ret < 0) { | 1068 | if (ret < 0) { |
| 1018 | printk(KERN_ERR "%s: at76_get_mib (MAC_ADDR) failed: %d\n", | 1069 | printk(KERN_ERR "%s: at76_get_mib (MAC_ADDR) failed: %d\n", |
| 1019 | wiphy_name(priv->hw->wiphy), ret); | 1070 | priv->netdev->name, ret); |
| 1020 | goto exit; | 1071 | goto exit; |
| 1021 | } | 1072 | } |
| 1022 | 1073 | ||
| 1023 | at76_dbg(DBG_MIB, "%s: MIB MAC_ADDR: mac_addr %s res 0x%x 0x%x", | 1074 | at76_dbg(DBG_MIB, "%s: MIB MAC_ADDR: mac_addr %s res 0x%x 0x%x", |
| 1024 | wiphy_name(priv->hw->wiphy), | 1075 | priv->netdev->name, |
| 1025 | mac2str(m->mac_addr), m->res[0], m->res[1]); | 1076 | mac2str(m->mac_addr), m->res[0], m->res[1]); |
| 1026 | for (i = 0; i < ARRAY_SIZE(m->group_addr); i++) | 1077 | for (i = 0; i < ARRAY_SIZE(m->group_addr); i++) |
| 1027 | at76_dbg(DBG_MIB, "%s: MIB MAC_ADDR: group addr %d: %s, " | 1078 | at76_dbg(DBG_MIB, "%s: MIB MAC_ADDR: group addr %d: %s, " |
| 1028 | "status %d", wiphy_name(priv->hw->wiphy), i, | 1079 | "status %d", priv->netdev->name, i, |
| 1029 | mac2str(m->group_addr[i]), m->group_addr_status[i]); | 1080 | mac2str(m->group_addr[i]), m->group_addr_status[i]); |
| 1030 | exit: | 1081 | exit: |
| 1031 | kfree(m); | 1082 | kfree(m); |
| @@ -1045,13 +1096,13 @@ static void at76_dump_mib_mac_wep(struct at76_priv *priv) | |||
| 1045 | sizeof(struct mib_mac_wep)); | 1096 | sizeof(struct mib_mac_wep)); |
| 1046 | if (ret < 0) { | 1097 | if (ret < 0) { |
| 1047 | printk(KERN_ERR "%s: at76_get_mib (MAC_WEP) failed: %d\n", | 1098 | printk(KERN_ERR "%s: at76_get_mib (MAC_WEP) failed: %d\n", |
| 1048 | wiphy_name(priv->hw->wiphy), ret); | 1099 | priv->netdev->name, ret); |
| 1049 | goto exit; | 1100 | goto exit; |
| 1050 | } | 1101 | } |
| 1051 | 1102 | ||
| 1052 | at76_dbg(DBG_MIB, "%s: MIB MAC_WEP: priv_invoked %u def_key_id %u " | 1103 | at76_dbg(DBG_MIB, "%s: MIB MAC_WEP: priv_invoked %u def_key_id %u " |
| 1053 | "key_len %u excl_unencr %u wep_icv_err %u wep_excluded %u " | 1104 | "key_len %u excl_unencr %u wep_icv_err %u wep_excluded %u " |
| 1054 | "encr_level %u key %d", wiphy_name(priv->hw->wiphy), | 1105 | "encr_level %u key %d", priv->netdev->name, |
| 1055 | m->privacy_invoked, m->wep_default_key_id, | 1106 | m->privacy_invoked, m->wep_default_key_id, |
| 1056 | m->wep_key_mapping_len, m->exclude_unencrypted, | 1107 | m->wep_key_mapping_len, m->exclude_unencrypted, |
| 1057 | le32_to_cpu(m->wep_icv_error_count), | 1108 | le32_to_cpu(m->wep_icv_error_count), |
| @@ -1063,55 +1114,12 @@ static void at76_dump_mib_mac_wep(struct at76_priv *priv) | |||
| 1063 | 1114 | ||
| 1064 | for (i = 0; i < WEP_KEYS; i++) | 1115 | for (i = 0; i < WEP_KEYS; i++) |
| 1065 | at76_dbg(DBG_MIB, "%s: MIB MAC_WEP: key %d: %s", | 1116 | at76_dbg(DBG_MIB, "%s: MIB MAC_WEP: key %d: %s", |
| 1066 | wiphy_name(priv->hw->wiphy), i, | 1117 | priv->netdev->name, i, |
| 1067 | hex2str(m->wep_default_keyvalue[i], key_len)); | 1118 | hex2str(m->wep_default_keyvalue[i], key_len)); |
| 1068 | exit: | 1119 | exit: |
| 1069 | kfree(m); | 1120 | kfree(m); |
| 1070 | } | 1121 | } |
| 1071 | 1122 | ||
| 1072 | static void at76_dump_mib_mac_encryption(struct at76_priv *priv) | ||
| 1073 | { | ||
| 1074 | int i; | ||
| 1075 | int ret; | ||
| 1076 | /*int key_len;*/ | ||
| 1077 | struct mib_mac_encryption *m; | ||
| 1078 | |||
| 1079 | m = kmalloc(sizeof(struct mib_mac_encryption), GFP_KERNEL); | ||
| 1080 | if (!m) | ||
| 1081 | return; | ||
| 1082 | |||
| 1083 | ret = at76_get_mib(priv->udev, MIB_MAC_ENCRYPTION, m, | ||
| 1084 | sizeof(struct mib_mac_encryption)); | ||
| 1085 | if (ret < 0) { | ||
| 1086 | dev_err(&priv->udev->dev, | ||
| 1087 | "%s: at76_get_mib (MAC_ENCRYPTION) failed: %d\n", | ||
| 1088 | wiphy_name(priv->hw->wiphy), ret); | ||
| 1089 | goto exit; | ||
| 1090 | } | ||
| 1091 | |||
| 1092 | at76_dbg(DBG_MIB, | ||
| 1093 | "%s: MIB MAC_ENCRYPTION: tkip_bssid %s priv_invoked %u " | ||
| 1094 | "ciph_key_id %u grp_key_id %u excl_unencr %u " | ||
| 1095 | "ckip_key_perm %u wep_icv_err %u wep_excluded %u", | ||
| 1096 | wiphy_name(priv->hw->wiphy), mac2str(m->tkip_bssid), | ||
| 1097 | m->privacy_invoked, m->cipher_default_key_id, | ||
| 1098 | m->cipher_default_group_key_id, m->exclude_unencrypted, | ||
| 1099 | m->ckip_key_permutation, | ||
| 1100 | le32_to_cpu(m->wep_icv_error_count), | ||
| 1101 | le32_to_cpu(m->wep_excluded_count)); | ||
| 1102 | |||
| 1103 | /*key_len = (m->encryption_level == 1) ? | ||
| 1104 | WEP_SMALL_KEY_LEN : WEP_LARGE_KEY_LEN;*/ | ||
| 1105 | |||
| 1106 | for (i = 0; i < CIPHER_KEYS; i++) | ||
| 1107 | at76_dbg(DBG_MIB, "%s: MIB MAC_ENCRYPTION: key %d: %s", | ||
| 1108 | wiphy_name(priv->hw->wiphy), i, | ||
| 1109 | hex2str(m->cipher_default_keyvalue[i], | ||
| 1110 | CIPHER_KEY_LEN)); | ||
| 1111 | exit: | ||
| 1112 | kfree(m); | ||
| 1113 | } | ||
| 1114 | |||
| 1115 | static void at76_dump_mib_mac_mgmt(struct at76_priv *priv) | 1123 | static void at76_dump_mib_mac_mgmt(struct at76_priv *priv) |
| 1116 | { | 1124 | { |
| 1117 | int ret; | 1125 | int ret; |
| @@ -1125,7 +1133,7 @@ static void at76_dump_mib_mac_mgmt(struct at76_priv *priv) | |||
| 1125 | sizeof(struct mib_mac_mgmt)); | 1133 | sizeof(struct mib_mac_mgmt)); |
| 1126 | if (ret < 0) { | 1134 | if (ret < 0) { |
| 1127 | printk(KERN_ERR "%s: at76_get_mib (MAC_MGMT) failed: %d\n", | 1135 | printk(KERN_ERR "%s: at76_get_mib (MAC_MGMT) failed: %d\n", |
| 1128 | wiphy_name(priv->hw->wiphy), ret); | 1136 | priv->netdev->name, ret); |
| 1129 | goto exit; | 1137 | goto exit; |
| 1130 | } | 1138 | } |
| 1131 | 1139 | ||
| @@ -1136,7 +1144,7 @@ static void at76_dump_mib_mac_mgmt(struct at76_priv *priv) | |||
| 1136 | "pm_mode %d ibss_change %d res %d " | 1144 | "pm_mode %d ibss_change %d res %d " |
| 1137 | "multi_domain_capability_implemented %d " | 1145 | "multi_domain_capability_implemented %d " |
| 1138 | "international_roaming %d country_string %.3s", | 1146 | "international_roaming %d country_string %.3s", |
| 1139 | wiphy_name(priv->hw->wiphy), le16_to_cpu(m->beacon_period), | 1147 | priv->netdev->name, le16_to_cpu(m->beacon_period), |
| 1140 | le16_to_cpu(m->CFP_max_duration), | 1148 | le16_to_cpu(m->CFP_max_duration), |
| 1141 | le16_to_cpu(m->medium_occupancy_limit), | 1149 | le16_to_cpu(m->medium_occupancy_limit), |
| 1142 | le16_to_cpu(m->station_id), le16_to_cpu(m->ATIM_window), | 1150 | le16_to_cpu(m->station_id), le16_to_cpu(m->ATIM_window), |
| @@ -1161,7 +1169,7 @@ static void at76_dump_mib_mac(struct at76_priv *priv) | |||
| 1161 | ret = at76_get_mib(priv->udev, MIB_MAC, m, sizeof(struct mib_mac)); | 1169 | ret = at76_get_mib(priv->udev, MIB_MAC, m, sizeof(struct mib_mac)); |
| 1162 | if (ret < 0) { | 1170 | if (ret < 0) { |
| 1163 | printk(KERN_ERR "%s: at76_get_mib (MAC) failed: %d\n", | 1171 | printk(KERN_ERR "%s: at76_get_mib (MAC) failed: %d\n", |
| 1164 | wiphy_name(priv->hw->wiphy), ret); | 1172 | priv->netdev->name, ret); |
| 1165 | goto exit; | 1173 | goto exit; |
| 1166 | } | 1174 | } |
| 1167 | 1175 | ||
| @@ -1171,8 +1179,7 @@ static void at76_dump_mib_mac(struct at76_priv *priv) | |||
| 1171 | "scan_type %d scan_channel %d probe_delay %u " | 1179 | "scan_type %d scan_channel %d probe_delay %u " |
| 1172 | "min_channel_time %d max_channel_time %d listen_int %d " | 1180 | "min_channel_time %d max_channel_time %d listen_int %d " |
| 1173 | "desired_ssid %s desired_bssid %s desired_bsstype %d", | 1181 | "desired_ssid %s desired_bssid %s desired_bsstype %d", |
| 1174 | wiphy_name(priv->hw->wiphy), | 1182 | priv->netdev->name, le32_to_cpu(m->max_tx_msdu_lifetime), |
| 1175 | le32_to_cpu(m->max_tx_msdu_lifetime), | ||
| 1176 | le32_to_cpu(m->max_rx_lifetime), | 1183 | le32_to_cpu(m->max_rx_lifetime), |
| 1177 | le16_to_cpu(m->frag_threshold), le16_to_cpu(m->rts_threshold), | 1184 | le16_to_cpu(m->frag_threshold), le16_to_cpu(m->rts_threshold), |
| 1178 | le16_to_cpu(m->cwmin), le16_to_cpu(m->cwmax), | 1185 | le16_to_cpu(m->cwmin), le16_to_cpu(m->cwmax), |
| @@ -1198,7 +1205,7 @@ static void at76_dump_mib_phy(struct at76_priv *priv) | |||
| 1198 | ret = at76_get_mib(priv->udev, MIB_PHY, m, sizeof(struct mib_phy)); | 1205 | ret = at76_get_mib(priv->udev, MIB_PHY, m, sizeof(struct mib_phy)); |
| 1199 | if (ret < 0) { | 1206 | if (ret < 0) { |
| 1200 | printk(KERN_ERR "%s: at76_get_mib (PHY) failed: %d\n", | 1207 | printk(KERN_ERR "%s: at76_get_mib (PHY) failed: %d\n", |
| 1201 | wiphy_name(priv->hw->wiphy), ret); | 1208 | priv->netdev->name, ret); |
| 1202 | goto exit; | 1209 | goto exit; |
| 1203 | } | 1210 | } |
| 1204 | 1211 | ||
| @@ -1207,7 +1214,7 @@ static void at76_dump_mib_phy(struct at76_priv *priv) | |||
| 1207 | "mpdu_max_length %d cca_mode_supported %d operation_rate_set " | 1214 | "mpdu_max_length %d cca_mode_supported %d operation_rate_set " |
| 1208 | "0x%x 0x%x 0x%x 0x%x channel_id %d current_cca_mode %d " | 1215 | "0x%x 0x%x 0x%x 0x%x channel_id %d current_cca_mode %d " |
| 1209 | "phy_type %d current_reg_domain %d", | 1216 | "phy_type %d current_reg_domain %d", |
| 1210 | wiphy_name(priv->hw->wiphy), le32_to_cpu(m->ed_threshold), | 1217 | priv->netdev->name, le32_to_cpu(m->ed_threshold), |
| 1211 | le16_to_cpu(m->slot_time), le16_to_cpu(m->sifs_time), | 1218 | le16_to_cpu(m->slot_time), le16_to_cpu(m->sifs_time), |
| 1212 | le16_to_cpu(m->preamble_length), | 1219 | le16_to_cpu(m->preamble_length), |
| 1213 | le16_to_cpu(m->plcp_header_length), | 1220 | le16_to_cpu(m->plcp_header_length), |
| @@ -1231,14 +1238,13 @@ static void at76_dump_mib_local(struct at76_priv *priv) | |||
| 1231 | ret = at76_get_mib(priv->udev, MIB_LOCAL, m, sizeof(struct mib_local)); | 1238 | ret = at76_get_mib(priv->udev, MIB_LOCAL, m, sizeof(struct mib_local)); |
| 1232 | if (ret < 0) { | 1239 | if (ret < 0) { |
| 1233 | printk(KERN_ERR "%s: at76_get_mib (LOCAL) failed: %d\n", | 1240 | printk(KERN_ERR "%s: at76_get_mib (LOCAL) failed: %d\n", |
| 1234 | wiphy_name(priv->hw->wiphy), ret); | 1241 | priv->netdev->name, ret); |
| 1235 | goto exit; | 1242 | goto exit; |
| 1236 | } | 1243 | } |
| 1237 | 1244 | ||
| 1238 | at76_dbg(DBG_MIB, "%s: MIB LOCAL: beacon_enable %d " | 1245 | at76_dbg(DBG_MIB, "%s: MIB LOCAL: beacon_enable %d " |
| 1239 | "txautorate_fallback %d ssid_size %d promiscuous_mode %d " | 1246 | "txautorate_fallback %d ssid_size %d promiscuous_mode %d " |
| 1240 | "preamble_type %d", wiphy_name(priv->hw->wiphy), | 1247 | "preamble_type %d", priv->netdev->name, m->beacon_enable, |
| 1241 | m->beacon_enable, | ||
| 1242 | m->txautorate_fallback, m->ssid_size, m->promiscuous_mode, | 1248 | m->txautorate_fallback, m->ssid_size, m->promiscuous_mode, |
| 1243 | m->preamble_type); | 1249 | m->preamble_type); |
| 1244 | exit: | 1250 | exit: |
| @@ -1257,21 +1263,118 @@ static void at76_dump_mib_mdomain(struct at76_priv *priv) | |||
| 1257 | sizeof(struct mib_mdomain)); | 1263 | sizeof(struct mib_mdomain)); |
| 1258 | if (ret < 0) { | 1264 | if (ret < 0) { |
| 1259 | printk(KERN_ERR "%s: at76_get_mib (MDOMAIN) failed: %d\n", | 1265 | printk(KERN_ERR "%s: at76_get_mib (MDOMAIN) failed: %d\n", |
| 1260 | wiphy_name(priv->hw->wiphy), ret); | 1266 | priv->netdev->name, ret); |
| 1261 | goto exit; | 1267 | goto exit; |
| 1262 | } | 1268 | } |
| 1263 | 1269 | ||
| 1264 | at76_dbg(DBG_MIB, "%s: MIB MDOMAIN: channel_list %s", | 1270 | at76_dbg(DBG_MIB, "%s: MIB MDOMAIN: channel_list %s", |
| 1265 | wiphy_name(priv->hw->wiphy), | 1271 | priv->netdev->name, |
| 1266 | hex2str(m->channel_list, sizeof(m->channel_list))); | 1272 | hex2str(m->channel_list, sizeof(m->channel_list))); |
| 1267 | 1273 | ||
| 1268 | at76_dbg(DBG_MIB, "%s: MIB MDOMAIN: tx_powerlevel %s", | 1274 | at76_dbg(DBG_MIB, "%s: MIB MDOMAIN: tx_powerlevel %s", |
| 1269 | wiphy_name(priv->hw->wiphy), | 1275 | priv->netdev->name, |
| 1270 | hex2str(m->tx_powerlevel, sizeof(m->tx_powerlevel))); | 1276 | hex2str(m->tx_powerlevel, sizeof(m->tx_powerlevel))); |
| 1271 | exit: | 1277 | exit: |
| 1272 | kfree(m); | 1278 | kfree(m); |
| 1273 | } | 1279 | } |
| 1274 | 1280 | ||
| 1281 | static int at76_get_current_bssid(struct at76_priv *priv) | ||
| 1282 | { | ||
| 1283 | int ret = 0; | ||
| 1284 | struct mib_mac_mgmt *mac_mgmt = | ||
| 1285 | kmalloc(sizeof(struct mib_mac_mgmt), GFP_KERNEL); | ||
| 1286 | |||
| 1287 | if (!mac_mgmt) { | ||
| 1288 | ret = -ENOMEM; | ||
| 1289 | goto exit; | ||
| 1290 | } | ||
| 1291 | |||
| 1292 | ret = at76_get_mib(priv->udev, MIB_MAC_MGMT, mac_mgmt, | ||
| 1293 | sizeof(struct mib_mac_mgmt)); | ||
| 1294 | if (ret < 0) { | ||
| 1295 | printk(KERN_ERR "%s: at76_get_mib failed: %d\n", | ||
| 1296 | priv->netdev->name, ret); | ||
| 1297 | goto error; | ||
| 1298 | } | ||
| 1299 | memcpy(priv->bssid, mac_mgmt->current_bssid, ETH_ALEN); | ||
| 1300 | printk(KERN_INFO "%s: using BSSID %s\n", priv->netdev->name, | ||
| 1301 | mac2str(priv->bssid)); | ||
| 1302 | error: | ||
| 1303 | kfree(mac_mgmt); | ||
| 1304 | exit: | ||
| 1305 | return ret; | ||
| 1306 | } | ||
| 1307 | |||
| 1308 | static int at76_get_current_channel(struct at76_priv *priv) | ||
| 1309 | { | ||
| 1310 | int ret = 0; | ||
| 1311 | struct mib_phy *phy = kmalloc(sizeof(struct mib_phy), GFP_KERNEL); | ||
| 1312 | |||
| 1313 | if (!phy) { | ||
| 1314 | ret = -ENOMEM; | ||
| 1315 | goto exit; | ||
| 1316 | } | ||
| 1317 | ret = at76_get_mib(priv->udev, MIB_PHY, phy, sizeof(struct mib_phy)); | ||
| 1318 | if (ret < 0) { | ||
| 1319 | printk(KERN_ERR "%s: at76_get_mib(MIB_PHY) failed: %d\n", | ||
| 1320 | priv->netdev->name, ret); | ||
| 1321 | goto error; | ||
| 1322 | } | ||
| 1323 | priv->channel = phy->channel_id; | ||
| 1324 | error: | ||
| 1325 | kfree(phy); | ||
| 1326 | exit: | ||
| 1327 | return ret; | ||
| 1328 | } | ||
| 1329 | |||
| 1330 | /** | ||
| 1331 | * at76_start_scan - start a scan | ||
| 1332 | * | ||
| 1333 | * @use_essid - use the configured ESSID in non passive mode | ||
| 1334 | */ | ||
| 1335 | static int at76_start_scan(struct at76_priv *priv, int use_essid) | ||
| 1336 | { | ||
| 1337 | struct at76_req_scan scan; | ||
| 1338 | |||
| 1339 | memset(&scan, 0, sizeof(struct at76_req_scan)); | ||
| 1340 | memset(scan.bssid, 0xff, ETH_ALEN); | ||
| 1341 | |||
| 1342 | if (use_essid) { | ||
| 1343 | memcpy(scan.essid, priv->essid, IW_ESSID_MAX_SIZE); | ||
| 1344 | scan.essid_size = priv->essid_size; | ||
| 1345 | } else | ||
| 1346 | scan.essid_size = 0; | ||
| 1347 | |||
| 1348 | /* jal: why should we start at a certain channel? we do scan the whole | ||
| 1349 | range allowed by reg domain. */ | ||
| 1350 | scan.channel = priv->channel; | ||
| 1351 | |||
| 1352 | /* atmelwlandriver differs between scan type 0 and 1 (active/passive) | ||
| 1353 | For ad-hoc mode, it uses type 0 only. */ | ||
| 1354 | scan.scan_type = priv->scan_mode; | ||
| 1355 | |||
| 1356 | /* INFO: For probe_delay, not multiplying by 1024 as this will be | ||
| 1357 | slightly less than min_channel_time | ||
| 1358 | (per spec: probe delay < min. channel time) */ | ||
| 1359 | scan.min_channel_time = cpu_to_le16(priv->scan_min_time); | ||
| 1360 | scan.max_channel_time = cpu_to_le16(priv->scan_max_time); | ||
| 1361 | scan.probe_delay = cpu_to_le16(priv->scan_min_time * 1000); | ||
| 1362 | scan.international_scan = 0; | ||
| 1363 | |||
| 1364 | /* other values are set to 0 for type 0 */ | ||
| 1365 | |||
| 1366 | at76_dbg(DBG_PROGRESS, "%s: start_scan (use_essid = %d, intl = %d, " | ||
| 1367 | "channel = %d, probe_delay = %d, scan_min_time = %d, " | ||
| 1368 | "scan_max_time = %d)", | ||
| 1369 | priv->netdev->name, use_essid, | ||
| 1370 | scan.international_scan, scan.channel, | ||
| 1371 | le16_to_cpu(scan.probe_delay), | ||
| 1372 | le16_to_cpu(scan.min_channel_time), | ||
| 1373 | le16_to_cpu(scan.max_channel_time)); | ||
| 1374 | |||
| 1375 | return at76_set_card_command(priv->udev, CMD_SCAN, &scan, sizeof(scan)); | ||
| 1376 | } | ||
| 1377 | |||
| 1275 | /* Enable monitor mode */ | 1378 | /* Enable monitor mode */ |
| 1276 | static int at76_start_monitor(struct at76_priv *priv) | 1379 | static int at76_start_monitor(struct at76_priv *priv) |
| 1277 | { | 1380 | { |
| @@ -1292,6 +1395,86 @@ static int at76_start_monitor(struct at76_priv *priv) | |||
| 1292 | return ret; | 1395 | return ret; |
| 1293 | } | 1396 | } |
| 1294 | 1397 | ||
| 1398 | static int at76_start_ibss(struct at76_priv *priv) | ||
| 1399 | { | ||
| 1400 | struct at76_req_ibss bss; | ||
| 1401 | int ret; | ||
| 1402 | |||
| 1403 | WARN_ON(priv->mac_state != MAC_OWN_IBSS); | ||
| 1404 | if (priv->mac_state != MAC_OWN_IBSS) | ||
| 1405 | return -EBUSY; | ||
| 1406 | |||
| 1407 | memset(&bss, 0, sizeof(struct at76_req_ibss)); | ||
| 1408 | memset(bss.bssid, 0xff, ETH_ALEN); | ||
| 1409 | memcpy(bss.essid, priv->essid, IW_ESSID_MAX_SIZE); | ||
| 1410 | bss.essid_size = priv->essid_size; | ||
| 1411 | bss.bss_type = ADHOC_MODE; | ||
| 1412 | bss.channel = priv->channel; | ||
| 1413 | |||
| 1414 | ret = at76_set_card_command(priv->udev, CMD_START_IBSS, &bss, | ||
| 1415 | sizeof(struct at76_req_ibss)); | ||
| 1416 | if (ret < 0) { | ||
| 1417 | printk(KERN_ERR "%s: start_ibss failed: %d\n", | ||
| 1418 | priv->netdev->name, ret); | ||
| 1419 | return ret; | ||
| 1420 | } | ||
| 1421 | |||
| 1422 | ret = at76_wait_completion(priv, CMD_START_IBSS); | ||
| 1423 | if (ret != CMD_STATUS_COMPLETE) { | ||
| 1424 | printk(KERN_ERR "%s: start_ibss failed to complete, %d\n", | ||
| 1425 | priv->netdev->name, ret); | ||
| 1426 | return ret; | ||
| 1427 | } | ||
| 1428 | |||
| 1429 | ret = at76_get_current_bssid(priv); | ||
| 1430 | if (ret < 0) | ||
| 1431 | return ret; | ||
| 1432 | |||
| 1433 | ret = at76_get_current_channel(priv); | ||
| 1434 | if (ret < 0) | ||
| 1435 | return ret; | ||
| 1436 | |||
| 1437 | /* not sure what this is good for ??? */ | ||
| 1438 | priv->mib_buf.type = MIB_MAC_MGMT; | ||
| 1439 | priv->mib_buf.size = 1; | ||
| 1440 | priv->mib_buf.index = offsetof(struct mib_mac_mgmt, ibss_change); | ||
| 1441 | priv->mib_buf.data.byte = 0; | ||
| 1442 | |||
| 1443 | ret = at76_set_mib(priv, &priv->mib_buf); | ||
| 1444 | if (ret < 0) { | ||
| 1445 | printk(KERN_ERR "%s: set_mib (ibss change ok) failed: %d\n", | ||
| 1446 | priv->netdev->name, ret); | ||
| 1447 | return ret; | ||
| 1448 | } | ||
| 1449 | |||
| 1450 | netif_carrier_on(priv->netdev); | ||
| 1451 | netif_start_queue(priv->netdev); | ||
| 1452 | return 0; | ||
| 1453 | } | ||
| 1454 | |||
| 1455 | /* Request card to join BSS in managed or ad-hoc mode */ | ||
| 1456 | static int at76_join_bss(struct at76_priv *priv, struct bss_info *ptr) | ||
| 1457 | { | ||
| 1458 | struct at76_req_join join; | ||
| 1459 | |||
| 1460 | BUG_ON(!ptr); | ||
| 1461 | |||
| 1462 | memset(&join, 0, sizeof(struct at76_req_join)); | ||
| 1463 | memcpy(join.bssid, ptr->bssid, ETH_ALEN); | ||
| 1464 | memcpy(join.essid, ptr->ssid, ptr->ssid_len); | ||
| 1465 | join.essid_size = ptr->ssid_len; | ||
| 1466 | join.bss_type = (priv->iw_mode == IW_MODE_ADHOC ? 1 : 2); | ||
| 1467 | join.channel = ptr->channel; | ||
| 1468 | join.timeout = cpu_to_le16(2000); | ||
| 1469 | |||
| 1470 | at76_dbg(DBG_PROGRESS, | ||
| 1471 | "%s join addr %s ssid %s type %d ch %d timeout %d", | ||
| 1472 | priv->netdev->name, mac2str(join.bssid), join.essid, | ||
| 1473 | join.bss_type, join.channel, le16_to_cpu(join.timeout)); | ||
| 1474 | return at76_set_card_command(priv->udev, CMD_JOIN, &join, | ||
| 1475 | sizeof(struct at76_req_join)); | ||
| 1476 | } | ||
| 1477 | |||
| 1295 | /* Calculate padding from txbuf->wlength (which excludes the USB TX header), | 1478 | /* Calculate padding from txbuf->wlength (which excludes the USB TX header), |
| 1296 | likely to compensate a flaw in the AT76C503A USB part ... */ | 1479 | likely to compensate a flaw in the AT76C503A USB part ... */ |
| 1297 | static inline int at76_calc_padding(int wlen) | 1480 | static inline int at76_calc_padding(int wlen) |
| @@ -1310,6 +1493,14 @@ static inline int at76_calc_padding(int wlen) | |||
| 1310 | return 0; | 1493 | return 0; |
| 1311 | } | 1494 | } |
| 1312 | 1495 | ||
| 1496 | /* We are doing a lot of things here in an interrupt. Need | ||
| 1497 | a bh handler (Watching TV with a TV card is probably | ||
| 1498 | a good test: if you see flickers, we are doing too much. | ||
| 1499 | Currently I do see flickers... even with our tasklet :-( ) | ||
| 1500 | Maybe because the bttv driver and usb-uhci use the same interrupt | ||
| 1501 | */ | ||
| 1502 | /* Or maybe because our BH handler is preempting bttv's BH handler.. BHs don't | ||
| 1503 | * solve everything.. (alex) */ | ||
| 1313 | static void at76_rx_callback(struct urb *urb) | 1504 | static void at76_rx_callback(struct urb *urb) |
| 1314 | { | 1505 | { |
| 1315 | struct at76_priv *priv = urb->context; | 1506 | struct at76_priv *priv = urb->context; |
| @@ -1319,6 +1510,1758 @@ static void at76_rx_callback(struct urb *urb) | |||
| 1319 | return; | 1510 | return; |
| 1320 | } | 1511 | } |
| 1321 | 1512 | ||
| 1513 | static void at76_tx_callback(struct urb *urb) | ||
| 1514 | { | ||
| 1515 | struct at76_priv *priv = urb->context; | ||
| 1516 | struct net_device_stats *stats = &priv->stats; | ||
| 1517 | unsigned long flags; | ||
| 1518 | struct at76_tx_buffer *mgmt_buf; | ||
| 1519 | int ret; | ||
| 1520 | |||
| 1521 | switch (urb->status) { | ||
| 1522 | case 0: | ||
| 1523 | stats->tx_packets++; | ||
| 1524 | break; | ||
| 1525 | case -ENOENT: | ||
| 1526 | case -ECONNRESET: | ||
| 1527 | /* urb has been unlinked */ | ||
| 1528 | return; | ||
| 1529 | default: | ||
| 1530 | at76_dbg(DBG_URB, "%s - nonzero tx status received: %d", | ||
| 1531 | __func__, urb->status); | ||
| 1532 | stats->tx_errors++; | ||
| 1533 | break; | ||
| 1534 | } | ||
| 1535 | |||
| 1536 | spin_lock_irqsave(&priv->mgmt_spinlock, flags); | ||
| 1537 | mgmt_buf = priv->next_mgmt_bulk; | ||
| 1538 | priv->next_mgmt_bulk = NULL; | ||
| 1539 | spin_unlock_irqrestore(&priv->mgmt_spinlock, flags); | ||
| 1540 | |||
| 1541 | if (!mgmt_buf) { | ||
| 1542 | netif_wake_queue(priv->netdev); | ||
| 1543 | return; | ||
| 1544 | } | ||
| 1545 | |||
| 1546 | /* we don't copy the padding bytes, but add them | ||
| 1547 | to the length */ | ||
| 1548 | memcpy(priv->bulk_out_buffer, mgmt_buf, | ||
| 1549 | le16_to_cpu(mgmt_buf->wlength) + AT76_TX_HDRLEN); | ||
| 1550 | usb_fill_bulk_urb(priv->tx_urb, priv->udev, priv->tx_pipe, | ||
| 1551 | priv->bulk_out_buffer, | ||
| 1552 | le16_to_cpu(mgmt_buf->wlength) + mgmt_buf->padding + | ||
| 1553 | AT76_TX_HDRLEN, at76_tx_callback, priv); | ||
| 1554 | ret = usb_submit_urb(priv->tx_urb, GFP_ATOMIC); | ||
| 1555 | if (ret) | ||
| 1556 | printk(KERN_ERR "%s: error in tx submit urb: %d\n", | ||
| 1557 | priv->netdev->name, ret); | ||
| 1558 | |||
| 1559 | kfree(mgmt_buf); | ||
| 1560 | } | ||
| 1561 | |||
| 1562 | /* Send a management frame on bulk-out. txbuf->wlength must be set */ | ||
| 1563 | static int at76_tx_mgmt(struct at76_priv *priv, struct at76_tx_buffer *txbuf) | ||
| 1564 | { | ||
| 1565 | unsigned long flags; | ||
| 1566 | int ret; | ||
| 1567 | int urb_status; | ||
| 1568 | void *oldbuf = NULL; | ||
| 1569 | |||
| 1570 | netif_carrier_off(priv->netdev); /* stop netdev watchdog */ | ||
| 1571 | netif_stop_queue(priv->netdev); /* stop tx data packets */ | ||
| 1572 | |||
| 1573 | spin_lock_irqsave(&priv->mgmt_spinlock, flags); | ||
| 1574 | |||
| 1575 | urb_status = priv->tx_urb->status; | ||
| 1576 | if (urb_status == -EINPROGRESS) { | ||
| 1577 | /* cannot transmit now, put in the queue */ | ||
| 1578 | oldbuf = priv->next_mgmt_bulk; | ||
| 1579 | priv->next_mgmt_bulk = txbuf; | ||
| 1580 | } | ||
| 1581 | spin_unlock_irqrestore(&priv->mgmt_spinlock, flags); | ||
| 1582 | |||
| 1583 | if (oldbuf) { | ||
| 1584 | /* a data/mgmt tx is already pending in the URB - | ||
| 1585 | if this is no error in some situations we must | ||
| 1586 | implement a queue or silently modify the old msg */ | ||
| 1587 | printk(KERN_ERR "%s: removed pending mgmt buffer %s\n", | ||
| 1588 | priv->netdev->name, hex2str(oldbuf, 64)); | ||
| 1589 | kfree(oldbuf); | ||
| 1590 | return 0; | ||
| 1591 | } | ||
| 1592 | |||
| 1593 | txbuf->tx_rate = TX_RATE_1MBIT; | ||
| 1594 | txbuf->padding = at76_calc_padding(le16_to_cpu(txbuf->wlength)); | ||
| 1595 | memset(txbuf->reserved, 0, sizeof(txbuf->reserved)); | ||
| 1596 | |||
| 1597 | if (priv->next_mgmt_bulk) | ||
| 1598 | printk(KERN_ERR "%s: URB status %d, but mgmt is pending\n", | ||
| 1599 | priv->netdev->name, urb_status); | ||
| 1600 | |||
| 1601 | at76_dbg(DBG_TX_MGMT, | ||
| 1602 | "%s: tx mgmt: wlen %d tx_rate %d pad %d %s", | ||
| 1603 | priv->netdev->name, le16_to_cpu(txbuf->wlength), | ||
| 1604 | txbuf->tx_rate, txbuf->padding, | ||
| 1605 | hex2str(txbuf->packet, le16_to_cpu(txbuf->wlength))); | ||
| 1606 | |||
| 1607 | /* txbuf was not consumed above -> send mgmt msg immediately */ | ||
| 1608 | memcpy(priv->bulk_out_buffer, txbuf, | ||
| 1609 | le16_to_cpu(txbuf->wlength) + AT76_TX_HDRLEN); | ||
| 1610 | usb_fill_bulk_urb(priv->tx_urb, priv->udev, priv->tx_pipe, | ||
| 1611 | priv->bulk_out_buffer, | ||
| 1612 | le16_to_cpu(txbuf->wlength) + txbuf->padding + | ||
| 1613 | AT76_TX_HDRLEN, at76_tx_callback, priv); | ||
| 1614 | ret = usb_submit_urb(priv->tx_urb, GFP_ATOMIC); | ||
| 1615 | if (ret) | ||
| 1616 | printk(KERN_ERR "%s: error in tx submit urb: %d\n", | ||
| 1617 | priv->netdev->name, ret); | ||
| 1618 | |||
| 1619 | kfree(txbuf); | ||
| 1620 | |||
| 1621 | return ret; | ||
| 1622 | } | ||
| 1623 | |||
| 1624 | /* Go to the next information element */ | ||
| 1625 | static inline void next_ie(struct ieee80211_info_element **ie) | ||
| 1626 | { | ||
| 1627 | *ie = (struct ieee80211_info_element *)(&(*ie)->data[(*ie)->len]); | ||
| 1628 | } | ||
| 1629 | |||
| 1630 | /* Challenge is the challenge string (in TLV format) | ||
| 1631 | we got with seq_nr 2 for shared secret authentication only and | ||
| 1632 | send in seq_nr 3 WEP encrypted to prove we have the correct WEP key; | ||
| 1633 | otherwise it is NULL */ | ||
| 1634 | static int at76_auth_req(struct at76_priv *priv, struct bss_info *bss, | ||
| 1635 | int seq_nr, struct ieee80211_info_element *challenge) | ||
| 1636 | { | ||
| 1637 | struct at76_tx_buffer *tx_buffer; | ||
| 1638 | struct ieee80211_hdr_3addr *mgmt; | ||
| 1639 | struct ieee80211_auth *req; | ||
| 1640 | int buf_len = (seq_nr != 3 ? AUTH_FRAME_SIZE : | ||
| 1641 | AUTH_FRAME_SIZE + 1 + 1 + challenge->len); | ||
| 1642 | |||
| 1643 | BUG_ON(!bss); | ||
| 1644 | BUG_ON(seq_nr == 3 && !challenge); | ||
| 1645 | tx_buffer = kmalloc(buf_len + MAX_PADDING_SIZE, GFP_ATOMIC); | ||
| 1646 | if (!tx_buffer) | ||
| 1647 | return -ENOMEM; | ||
| 1648 | |||
| 1649 | req = (struct ieee80211_auth *)tx_buffer->packet; | ||
| 1650 | mgmt = &req->header; | ||
| 1651 | |||
| 1652 | /* make wireless header */ | ||
| 1653 | /* first auth msg is not encrypted, only the second (seq_nr == 3) */ | ||
| 1654 | mgmt->frame_ctl = | ||
| 1655 | cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_AUTH | | ||
| 1656 | (seq_nr == 3 ? IEEE80211_FCTL_PROTECTED : 0)); | ||
| 1657 | |||
| 1658 | mgmt->duration_id = cpu_to_le16(0x8000); | ||
| 1659 | memcpy(mgmt->addr1, bss->bssid, ETH_ALEN); | ||
| 1660 | memcpy(mgmt->addr2, priv->netdev->dev_addr, ETH_ALEN); | ||
| 1661 | memcpy(mgmt->addr3, bss->bssid, ETH_ALEN); | ||
| 1662 | mgmt->seq_ctl = cpu_to_le16(0); | ||
| 1663 | |||
| 1664 | req->algorithm = cpu_to_le16(priv->auth_mode); | ||
| 1665 | req->transaction = cpu_to_le16(seq_nr); | ||
| 1666 | req->status = cpu_to_le16(0); | ||
| 1667 | |||
| 1668 | if (seq_nr == 3) | ||
| 1669 | memcpy(req->info_element, challenge, 1 + 1 + challenge->len); | ||
| 1670 | |||
| 1671 | /* init. at76_priv tx header */ | ||
| 1672 | tx_buffer->wlength = cpu_to_le16(buf_len - AT76_TX_HDRLEN); | ||
| 1673 | at76_dbg(DBG_TX_MGMT, "%s: AuthReq bssid %s alg %d seq_nr %d", | ||
| 1674 | priv->netdev->name, mac2str(mgmt->addr3), | ||
| 1675 | le16_to_cpu(req->algorithm), le16_to_cpu(req->transaction)); | ||
| 1676 | if (seq_nr == 3) | ||
| 1677 | at76_dbg(DBG_TX_MGMT, "%s: AuthReq challenge: %s ...", | ||
| 1678 | priv->netdev->name, hex2str(req->info_element, 18)); | ||
| 1679 | |||
| 1680 | /* either send immediately (if no data tx is pending | ||
| 1681 | or put it in pending list */ | ||
| 1682 | return at76_tx_mgmt(priv, tx_buffer); | ||
| 1683 | } | ||
| 1684 | |||
| 1685 | static int at76_assoc_req(struct at76_priv *priv, struct bss_info *bss) | ||
| 1686 | { | ||
| 1687 | struct at76_tx_buffer *tx_buffer; | ||
| 1688 | struct ieee80211_hdr_3addr *mgmt; | ||
| 1689 | struct ieee80211_assoc_request *req; | ||
| 1690 | struct ieee80211_info_element *ie; | ||
| 1691 | char *essid; | ||
| 1692 | int essid_len; | ||
| 1693 | u16 capa; | ||
| 1694 | |||
| 1695 | BUG_ON(!bss); | ||
| 1696 | |||
| 1697 | tx_buffer = kmalloc(ASSOCREQ_MAX_SIZE + MAX_PADDING_SIZE, GFP_ATOMIC); | ||
| 1698 | if (!tx_buffer) | ||
| 1699 | return -ENOMEM; | ||
| 1700 | |||
| 1701 | req = (struct ieee80211_assoc_request *)tx_buffer->packet; | ||
| 1702 | mgmt = &req->header; | ||
| 1703 | ie = req->info_element; | ||
| 1704 | |||
| 1705 | /* make wireless header */ | ||
| 1706 | mgmt->frame_ctl = cpu_to_le16(IEEE80211_FTYPE_MGMT | | ||
| 1707 | IEEE80211_STYPE_ASSOC_REQ); | ||
| 1708 | |||
| 1709 | mgmt->duration_id = cpu_to_le16(0x8000); | ||
| 1710 | memcpy(mgmt->addr1, bss->bssid, ETH_ALEN); | ||
| 1711 | memcpy(mgmt->addr2, priv->netdev->dev_addr, ETH_ALEN); | ||
| 1712 | memcpy(mgmt->addr3, bss->bssid, ETH_ALEN); | ||
| 1713 | mgmt->seq_ctl = cpu_to_le16(0); | ||
| 1714 | |||
| 1715 | /* we must set the Privacy bit in the capabilities to assure an | ||
| 1716 | Agere-based AP with optional WEP transmits encrypted frames | ||
| 1717 | to us. AP only set the Privacy bit in their capabilities | ||
| 1718 | if WEP is mandatory in the BSS! */ | ||
| 1719 | capa = bss->capa; | ||
| 1720 | if (priv->wep_enabled) | ||
| 1721 | capa |= WLAN_CAPABILITY_PRIVACY; | ||
| 1722 | if (priv->preamble_type != PREAMBLE_TYPE_LONG) | ||
| 1723 | capa |= WLAN_CAPABILITY_SHORT_PREAMBLE; | ||
| 1724 | req->capability = cpu_to_le16(capa); | ||
| 1725 | |||
| 1726 | req->listen_interval = cpu_to_le16(2 * bss->beacon_interval); | ||
| 1727 | |||
| 1728 | /* write TLV data elements */ | ||
| 1729 | |||
| 1730 | ie->id = MFIE_TYPE_SSID; | ||
| 1731 | ie->len = bss->ssid_len; | ||
| 1732 | memcpy(ie->data, bss->ssid, bss->ssid_len); | ||
| 1733 | next_ie(&ie); | ||
| 1734 | |||
| 1735 | ie->id = MFIE_TYPE_RATES; | ||
| 1736 | ie->len = sizeof(hw_rates); | ||
| 1737 | memcpy(ie->data, hw_rates, sizeof(hw_rates)); | ||
| 1738 | next_ie(&ie); /* ie points behind the supp_rates field */ | ||
| 1739 | |||
| 1740 | /* init. at76_priv tx header */ | ||
| 1741 | tx_buffer->wlength = cpu_to_le16((u8 *)ie - (u8 *)mgmt); | ||
| 1742 | |||
| 1743 | ie = req->info_element; | ||
| 1744 | essid = ie->data; | ||
| 1745 | essid_len = min_t(int, IW_ESSID_MAX_SIZE, ie->len); | ||
| 1746 | |||
| 1747 | next_ie(&ie); /* points to IE of rates now */ | ||
| 1748 | at76_dbg(DBG_TX_MGMT, | ||
| 1749 | "%s: AssocReq bssid %s capa 0x%04x ssid %.*s rates %s", | ||
| 1750 | priv->netdev->name, mac2str(mgmt->addr3), | ||
| 1751 | le16_to_cpu(req->capability), essid_len, essid, | ||
| 1752 | hex2str(ie->data, ie->len)); | ||
| 1753 | |||
| 1754 | /* either send immediately (if no data tx is pending | ||
| 1755 | or put it in pending list */ | ||
| 1756 | return at76_tx_mgmt(priv, tx_buffer); | ||
| 1757 | } | ||
| 1758 | |||
| 1759 | /* We got to check the bss_list for old entries */ | ||
| 1760 | static void at76_bss_list_timeout(unsigned long par) | ||
| 1761 | { | ||
| 1762 | struct at76_priv *priv = (struct at76_priv *)par; | ||
| 1763 | unsigned long flags; | ||
| 1764 | struct list_head *lptr, *nptr; | ||
| 1765 | struct bss_info *ptr; | ||
| 1766 | |||
| 1767 | spin_lock_irqsave(&priv->bss_list_spinlock, flags); | ||
| 1768 | |||
| 1769 | list_for_each_safe(lptr, nptr, &priv->bss_list) { | ||
| 1770 | |||
| 1771 | ptr = list_entry(lptr, struct bss_info, list); | ||
| 1772 | |||
| 1773 | if (ptr != priv->curr_bss | ||
| 1774 | && time_after(jiffies, ptr->last_rx + BSS_LIST_TIMEOUT)) { | ||
| 1775 | at76_dbg(DBG_BSS_TABLE_RM, | ||
| 1776 | "%s: bss_list: removing old BSS %s ch %d", | ||
| 1777 | priv->netdev->name, mac2str(ptr->bssid), | ||
| 1778 | ptr->channel); | ||
| 1779 | list_del(&ptr->list); | ||
| 1780 | kfree(ptr); | ||
| 1781 | } | ||
| 1782 | } | ||
| 1783 | spin_unlock_irqrestore(&priv->bss_list_spinlock, flags); | ||
| 1784 | /* restart the timer */ | ||
| 1785 | mod_timer(&priv->bss_list_timer, jiffies + BSS_LIST_TIMEOUT); | ||
| 1786 | } | ||
| 1787 | |||
| 1788 | static inline void at76_set_mac_state(struct at76_priv *priv, | ||
| 1789 | enum mac_state mac_state) | ||
| 1790 | { | ||
| 1791 | at76_dbg(DBG_MAC_STATE, "%s state: %s", priv->netdev->name, | ||
| 1792 | mac_states[mac_state]); | ||
| 1793 | priv->mac_state = mac_state; | ||
| 1794 | } | ||
| 1795 | |||
| 1796 | static void at76_dump_bss_table(struct at76_priv *priv) | ||
| 1797 | { | ||
| 1798 | struct bss_info *ptr; | ||
| 1799 | unsigned long flags; | ||
| 1800 | struct list_head *lptr; | ||
| 1801 | |||
| 1802 | spin_lock_irqsave(&priv->bss_list_spinlock, flags); | ||
| 1803 | |||
| 1804 | at76_dbg(DBG_BSS_TABLE, "%s BSS table (curr=%p):", priv->netdev->name, | ||
| 1805 | priv->curr_bss); | ||
| 1806 | |||
| 1807 | list_for_each(lptr, &priv->bss_list) { | ||
| 1808 | ptr = list_entry(lptr, struct bss_info, list); | ||
| 1809 | at76_dbg(DBG_BSS_TABLE, "0x%p: bssid %s channel %d ssid %.*s " | ||
| 1810 | "(%s) capa 0x%04x rates %s rssi %d link %d noise %d", | ||
| 1811 | ptr, mac2str(ptr->bssid), ptr->channel, ptr->ssid_len, | ||
| 1812 | ptr->ssid, hex2str(ptr->ssid, ptr->ssid_len), | ||
| 1813 | ptr->capa, hex2str(ptr->rates, ptr->rates_len), | ||
| 1814 | ptr->rssi, ptr->link_qual, ptr->noise_level); | ||
| 1815 | } | ||
| 1816 | spin_unlock_irqrestore(&priv->bss_list_spinlock, flags); | ||
| 1817 | } | ||
| 1818 | |||
| 1819 | /* Called upon successful association to mark interface as connected */ | ||
| 1820 | static void at76_work_assoc_done(struct work_struct *work) | ||
| 1821 | { | ||
| 1822 | struct at76_priv *priv = container_of(work, struct at76_priv, | ||
| 1823 | work_assoc_done); | ||
| 1824 | |||
| 1825 | mutex_lock(&priv->mtx); | ||
| 1826 | |||
| 1827 | WARN_ON(priv->mac_state != MAC_ASSOC); | ||
| 1828 | WARN_ON(!priv->curr_bss); | ||
| 1829 | if (priv->mac_state != MAC_ASSOC || !priv->curr_bss) | ||
| 1830 | goto exit; | ||
| 1831 | |||
| 1832 | if (priv->iw_mode == IW_MODE_INFRA) { | ||
| 1833 | if (priv->pm_mode != AT76_PM_OFF) { | ||
| 1834 | /* calculate the listen interval in units of | ||
| 1835 | beacon intervals of the curr_bss */ | ||
| 1836 | u32 pm_period_beacon = (priv->pm_period >> 10) / | ||
| 1837 | priv->curr_bss->beacon_interval; | ||
| 1838 | |||
| 1839 | pm_period_beacon = max(pm_period_beacon, 2u); | ||
| 1840 | pm_period_beacon = min(pm_period_beacon, 0xffffu); | ||
| 1841 | |||
| 1842 | at76_dbg(DBG_PM, | ||
| 1843 | "%s: pm_mode %d assoc id 0x%x listen int %d", | ||
| 1844 | priv->netdev->name, priv->pm_mode, | ||
| 1845 | priv->assoc_id, pm_period_beacon); | ||
| 1846 | |||
| 1847 | at76_set_associd(priv, priv->assoc_id); | ||
| 1848 | at76_set_listen_interval(priv, (u16)pm_period_beacon); | ||
| 1849 | } | ||
| 1850 | schedule_delayed_work(&priv->dwork_beacon, BEACON_TIMEOUT); | ||
| 1851 | } | ||
| 1852 | at76_set_pm_mode(priv); | ||
| 1853 | |||
| 1854 | netif_carrier_on(priv->netdev); | ||
| 1855 | netif_wake_queue(priv->netdev); | ||
| 1856 | at76_set_mac_state(priv, MAC_CONNECTED); | ||
| 1857 | at76_iwevent_bss_connect(priv->netdev, priv->curr_bss->bssid); | ||
| 1858 | at76_dbg(DBG_PROGRESS, "%s: connected to BSSID %s", | ||
| 1859 | priv->netdev->name, mac2str(priv->curr_bss->bssid)); | ||
| 1860 | |||
| 1861 | exit: | ||
| 1862 | mutex_unlock(&priv->mtx); | ||
| 1863 | } | ||
| 1864 | |||
| 1865 | /* We only store the new mac address in netdev struct, | ||
| 1866 | it gets set when the netdev is opened. */ | ||
| 1867 | static int at76_set_mac_address(struct net_device *netdev, void *addr) | ||
| 1868 | { | ||
| 1869 | struct sockaddr *mac = addr; | ||
| 1870 | memcpy(netdev->dev_addr, mac->sa_data, ETH_ALEN); | ||
| 1871 | return 1; | ||
| 1872 | } | ||
| 1873 | |||
| 1874 | static struct net_device_stats *at76_get_stats(struct net_device *netdev) | ||
| 1875 | { | ||
| 1876 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 1877 | return &priv->stats; | ||
| 1878 | } | ||
| 1879 | |||
| 1880 | static struct iw_statistics *at76_get_wireless_stats(struct net_device *netdev) | ||
| 1881 | { | ||
| 1882 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 1883 | |||
| 1884 | at76_dbg(DBG_IOCTL, "RETURN qual %d level %d noise %d updated %d", | ||
| 1885 | priv->wstats.qual.qual, priv->wstats.qual.level, | ||
| 1886 | priv->wstats.qual.noise, priv->wstats.qual.updated); | ||
| 1887 | |||
| 1888 | return &priv->wstats; | ||
| 1889 | } | ||
| 1890 | |||
| 1891 | static void at76_set_multicast(struct net_device *netdev) | ||
| 1892 | { | ||
| 1893 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 1894 | int promisc; | ||
| 1895 | |||
| 1896 | promisc = ((netdev->flags & IFF_PROMISC) != 0); | ||
| 1897 | if (promisc != priv->promisc) { | ||
| 1898 | /* This gets called in interrupt, must reschedule */ | ||
| 1899 | priv->promisc = promisc; | ||
| 1900 | schedule_work(&priv->work_set_promisc); | ||
| 1901 | } | ||
| 1902 | } | ||
| 1903 | |||
| 1904 | /* Stop all network activity, flush all pending tasks */ | ||
| 1905 | static void at76_quiesce(struct at76_priv *priv) | ||
| 1906 | { | ||
| 1907 | unsigned long flags; | ||
| 1908 | |||
| 1909 | netif_stop_queue(priv->netdev); | ||
| 1910 | netif_carrier_off(priv->netdev); | ||
| 1911 | |||
| 1912 | at76_set_mac_state(priv, MAC_INIT); | ||
| 1913 | |||
| 1914 | cancel_delayed_work(&priv->dwork_get_scan); | ||
| 1915 | cancel_delayed_work(&priv->dwork_beacon); | ||
| 1916 | cancel_delayed_work(&priv->dwork_auth); | ||
| 1917 | cancel_delayed_work(&priv->dwork_assoc); | ||
| 1918 | cancel_delayed_work(&priv->dwork_restart); | ||
| 1919 | |||
| 1920 | spin_lock_irqsave(&priv->mgmt_spinlock, flags); | ||
| 1921 | kfree(priv->next_mgmt_bulk); | ||
| 1922 | priv->next_mgmt_bulk = NULL; | ||
| 1923 | spin_unlock_irqrestore(&priv->mgmt_spinlock, flags); | ||
| 1924 | } | ||
| 1925 | |||
| 1926 | /******************************************************************************* | ||
| 1927 | * at76_priv implementations of iw_handler functions: | ||
| 1928 | */ | ||
| 1929 | static int at76_iw_handler_commit(struct net_device *netdev, | ||
| 1930 | struct iw_request_info *info, | ||
| 1931 | void *null, char *extra) | ||
| 1932 | { | ||
| 1933 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 1934 | |||
| 1935 | at76_dbg(DBG_IOCTL, "%s %s: restarting the device", netdev->name, | ||
| 1936 | __func__); | ||
| 1937 | |||
| 1938 | if (priv->mac_state != MAC_INIT) | ||
| 1939 | at76_quiesce(priv); | ||
| 1940 | |||
| 1941 | /* Wait half second before the restart to process subsequent | ||
| 1942 | * requests from the same iwconfig in a single restart */ | ||
| 1943 | schedule_delayed_work(&priv->dwork_restart, HZ / 2); | ||
| 1944 | |||
| 1945 | return 0; | ||
| 1946 | } | ||
| 1947 | |||
| 1948 | static int at76_iw_handler_get_name(struct net_device *netdev, | ||
| 1949 | struct iw_request_info *info, | ||
| 1950 | char *name, char *extra) | ||
| 1951 | { | ||
| 1952 | strcpy(name, "IEEE 802.11b"); | ||
| 1953 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWNAME - name %s", netdev->name, name); | ||
| 1954 | return 0; | ||
| 1955 | } | ||
| 1956 | |||
| 1957 | static int at76_iw_handler_set_freq(struct net_device *netdev, | ||
| 1958 | struct iw_request_info *info, | ||
| 1959 | struct iw_freq *freq, char *extra) | ||
| 1960 | { | ||
| 1961 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 1962 | int chan = -1; | ||
| 1963 | int ret = -EIWCOMMIT; | ||
| 1964 | at76_dbg(DBG_IOCTL, "%s: SIOCSIWFREQ - freq.m %d freq.e %d", | ||
| 1965 | netdev->name, freq->m, freq->e); | ||
| 1966 | |||
| 1967 | if ((freq->e == 0) && (freq->m <= 1000)) | ||
| 1968 | /* Setting by channel number */ | ||
| 1969 | chan = freq->m; | ||
| 1970 | else { | ||
| 1971 | /* Setting by frequency - search the table */ | ||
| 1972 | int mult = 1; | ||
| 1973 | int i; | ||
| 1974 | |||
| 1975 | for (i = 0; i < (6 - freq->e); i++) | ||
| 1976 | mult *= 10; | ||
| 1977 | |||
| 1978 | for (i = 0; i < NUM_CHANNELS; i++) { | ||
| 1979 | if (freq->m == (channel_frequency[i] * mult)) | ||
| 1980 | chan = i + 1; | ||
| 1981 | } | ||
| 1982 | } | ||
| 1983 | |||
| 1984 | if (chan < 1 || !priv->domain) | ||
| 1985 | /* non-positive channels are invalid | ||
| 1986 | * we need a domain info to set the channel | ||
| 1987 | * either that or an invalid frequency was | ||
| 1988 | * provided by the user */ | ||
| 1989 | ret = -EINVAL; | ||
| 1990 | else if (!(priv->domain->channel_map & (1 << (chan - 1)))) { | ||
| 1991 | printk(KERN_INFO "%s: channel %d not allowed for domain %s\n", | ||
| 1992 | priv->netdev->name, chan, priv->domain->name); | ||
| 1993 | ret = -EINVAL; | ||
| 1994 | } | ||
| 1995 | |||
| 1996 | if (ret == -EIWCOMMIT) { | ||
| 1997 | priv->channel = chan; | ||
| 1998 | at76_dbg(DBG_IOCTL, "%s: SIOCSIWFREQ - ch %d", netdev->name, | ||
| 1999 | chan); | ||
| 2000 | } | ||
| 2001 | |||
| 2002 | return ret; | ||
| 2003 | } | ||
| 2004 | |||
| 2005 | static int at76_iw_handler_get_freq(struct net_device *netdev, | ||
| 2006 | struct iw_request_info *info, | ||
| 2007 | struct iw_freq *freq, char *extra) | ||
| 2008 | { | ||
| 2009 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2010 | |||
| 2011 | freq->m = priv->channel; | ||
| 2012 | freq->e = 0; | ||
| 2013 | |||
| 2014 | if (priv->channel) | ||
| 2015 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWFREQ - freq %ld x 10e%d", | ||
| 2016 | netdev->name, channel_frequency[priv->channel - 1], 6); | ||
| 2017 | |||
| 2018 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWFREQ - ch %d", netdev->name, | ||
| 2019 | priv->channel); | ||
| 2020 | |||
| 2021 | return 0; | ||
| 2022 | } | ||
| 2023 | |||
| 2024 | static int at76_iw_handler_set_mode(struct net_device *netdev, | ||
| 2025 | struct iw_request_info *info, | ||
| 2026 | __u32 *mode, char *extra) | ||
| 2027 | { | ||
| 2028 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2029 | |||
| 2030 | at76_dbg(DBG_IOCTL, "%s: SIOCSIWMODE - %d", netdev->name, *mode); | ||
| 2031 | |||
| 2032 | if ((*mode != IW_MODE_ADHOC) && (*mode != IW_MODE_INFRA) && | ||
| 2033 | (*mode != IW_MODE_MONITOR)) | ||
| 2034 | return -EINVAL; | ||
| 2035 | |||
| 2036 | priv->iw_mode = *mode; | ||
| 2037 | if (priv->iw_mode != IW_MODE_INFRA) | ||
| 2038 | priv->pm_mode = AT76_PM_OFF; | ||
| 2039 | |||
| 2040 | return -EIWCOMMIT; | ||
| 2041 | } | ||
| 2042 | |||
| 2043 | static int at76_iw_handler_get_mode(struct net_device *netdev, | ||
| 2044 | struct iw_request_info *info, | ||
| 2045 | __u32 *mode, char *extra) | ||
| 2046 | { | ||
| 2047 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2048 | |||
| 2049 | *mode = priv->iw_mode; | ||
| 2050 | |||
| 2051 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWMODE - %d", netdev->name, *mode); | ||
| 2052 | |||
| 2053 | return 0; | ||
| 2054 | } | ||
| 2055 | |||
| 2056 | static int at76_iw_handler_get_range(struct net_device *netdev, | ||
| 2057 | struct iw_request_info *info, | ||
| 2058 | struct iw_point *data, char *extra) | ||
| 2059 | { | ||
| 2060 | /* inspired by atmel.c */ | ||
| 2061 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2062 | struct iw_range *range = (struct iw_range *)extra; | ||
| 2063 | int i; | ||
| 2064 | |||
| 2065 | data->length = sizeof(struct iw_range); | ||
| 2066 | memset(range, 0, sizeof(struct iw_range)); | ||
| 2067 | |||
| 2068 | /* TODO: range->throughput = xxxxxx; */ | ||
| 2069 | |||
| 2070 | range->min_nwid = 0x0000; | ||
| 2071 | range->max_nwid = 0x0000; | ||
| 2072 | |||
| 2073 | /* this driver doesn't maintain sensitivity information */ | ||
| 2074 | range->sensitivity = 0; | ||
| 2075 | |||
| 2076 | range->max_qual.qual = 100; | ||
| 2077 | range->max_qual.level = 100; | ||
| 2078 | range->max_qual.noise = 0; | ||
| 2079 | range->max_qual.updated = IW_QUAL_NOISE_INVALID; | ||
| 2080 | |||
| 2081 | range->avg_qual.qual = 50; | ||
| 2082 | range->avg_qual.level = 50; | ||
| 2083 | range->avg_qual.noise = 0; | ||
| 2084 | range->avg_qual.updated = IW_QUAL_NOISE_INVALID; | ||
| 2085 | |||
| 2086 | range->bitrate[0] = 1000000; | ||
| 2087 | range->bitrate[1] = 2000000; | ||
| 2088 | range->bitrate[2] = 5500000; | ||
| 2089 | range->bitrate[3] = 11000000; | ||
| 2090 | range->num_bitrates = 4; | ||
| 2091 | |||
| 2092 | range->min_rts = 0; | ||
| 2093 | range->max_rts = MAX_RTS_THRESHOLD; | ||
| 2094 | |||
| 2095 | range->min_frag = MIN_FRAG_THRESHOLD; | ||
| 2096 | range->max_frag = MAX_FRAG_THRESHOLD; | ||
| 2097 | |||
| 2098 | range->pmp_flags = IW_POWER_PERIOD; | ||
| 2099 | range->pmt_flags = IW_POWER_ON; | ||
| 2100 | range->pm_capa = IW_POWER_PERIOD | IW_POWER_ALL_R; | ||
| 2101 | |||
| 2102 | range->encoding_size[0] = WEP_SMALL_KEY_LEN; | ||
| 2103 | range->encoding_size[1] = WEP_LARGE_KEY_LEN; | ||
| 2104 | range->num_encoding_sizes = 2; | ||
| 2105 | range->max_encoding_tokens = WEP_KEYS; | ||
| 2106 | |||
| 2107 | /* both WL-240U and Linksys WUSB11 v2.6 specify 15 dBm as output power | ||
| 2108 | - take this for all (ignore antenna gains) */ | ||
| 2109 | range->txpower[0] = 15; | ||
| 2110 | range->num_txpower = 1; | ||
| 2111 | range->txpower_capa = IW_TXPOW_DBM; | ||
| 2112 | |||
| 2113 | range->we_version_source = WIRELESS_EXT; | ||
| 2114 | range->we_version_compiled = WIRELESS_EXT; | ||
| 2115 | |||
| 2116 | /* same as the values used in atmel.c */ | ||
| 2117 | range->retry_capa = IW_RETRY_LIMIT; | ||
| 2118 | range->retry_flags = IW_RETRY_LIMIT; | ||
| 2119 | range->r_time_flags = 0; | ||
| 2120 | range->min_retry = 1; | ||
| 2121 | range->max_retry = 255; | ||
| 2122 | |||
| 2123 | range->num_channels = NUM_CHANNELS; | ||
| 2124 | range->num_frequency = 0; | ||
| 2125 | |||
| 2126 | for (i = 0; i < NUM_CHANNELS; i++) { | ||
| 2127 | /* test if channel map bit is raised */ | ||
| 2128 | if (priv->domain->channel_map & (0x1 << i)) { | ||
| 2129 | range->num_frequency += 1; | ||
| 2130 | |||
| 2131 | range->freq[i].i = i + 1; | ||
| 2132 | range->freq[i].m = channel_frequency[i] * 100000; | ||
| 2133 | range->freq[i].e = 1; /* freq * 10^1 */ | ||
| 2134 | } | ||
| 2135 | } | ||
| 2136 | |||
| 2137 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWRANGE", netdev->name); | ||
| 2138 | |||
| 2139 | return 0; | ||
| 2140 | } | ||
| 2141 | |||
| 2142 | static int at76_iw_handler_set_spy(struct net_device *netdev, | ||
| 2143 | struct iw_request_info *info, | ||
| 2144 | struct iw_point *data, char *extra) | ||
| 2145 | { | ||
| 2146 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2147 | int ret = 0; | ||
| 2148 | |||
| 2149 | at76_dbg(DBG_IOCTL, "%s: SIOCSIWSPY - number of addresses %d", | ||
| 2150 | netdev->name, data->length); | ||
| 2151 | |||
| 2152 | spin_lock_bh(&priv->spy_spinlock); | ||
| 2153 | ret = iw_handler_set_spy(priv->netdev, info, (union iwreq_data *)data, | ||
| 2154 | extra); | ||
| 2155 | spin_unlock_bh(&priv->spy_spinlock); | ||
| 2156 | |||
| 2157 | return ret; | ||
| 2158 | } | ||
| 2159 | |||
| 2160 | static int at76_iw_handler_get_spy(struct net_device *netdev, | ||
| 2161 | struct iw_request_info *info, | ||
| 2162 | struct iw_point *data, char *extra) | ||
| 2163 | { | ||
| 2164 | |||
| 2165 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2166 | int ret = 0; | ||
| 2167 | |||
| 2168 | spin_lock_bh(&priv->spy_spinlock); | ||
| 2169 | ret = iw_handler_get_spy(priv->netdev, info, | ||
| 2170 | (union iwreq_data *)data, extra); | ||
| 2171 | spin_unlock_bh(&priv->spy_spinlock); | ||
| 2172 | |||
| 2173 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWSPY - number of addresses %d", | ||
| 2174 | netdev->name, data->length); | ||
| 2175 | |||
| 2176 | return ret; | ||
| 2177 | } | ||
| 2178 | |||
| 2179 | static int at76_iw_handler_set_thrspy(struct net_device *netdev, | ||
| 2180 | struct iw_request_info *info, | ||
| 2181 | struct iw_point *data, char *extra) | ||
| 2182 | { | ||
| 2183 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2184 | int ret; | ||
| 2185 | |||
| 2186 | at76_dbg(DBG_IOCTL, "%s: SIOCSIWTHRSPY - number of addresses %d)", | ||
| 2187 | netdev->name, data->length); | ||
| 2188 | |||
| 2189 | spin_lock_bh(&priv->spy_spinlock); | ||
| 2190 | ret = iw_handler_set_thrspy(netdev, info, (union iwreq_data *)data, | ||
| 2191 | extra); | ||
| 2192 | spin_unlock_bh(&priv->spy_spinlock); | ||
| 2193 | |||
| 2194 | return ret; | ||
| 2195 | } | ||
| 2196 | |||
| 2197 | static int at76_iw_handler_get_thrspy(struct net_device *netdev, | ||
| 2198 | struct iw_request_info *info, | ||
| 2199 | struct iw_point *data, char *extra) | ||
| 2200 | { | ||
| 2201 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2202 | int ret; | ||
| 2203 | |||
| 2204 | spin_lock_bh(&priv->spy_spinlock); | ||
| 2205 | ret = iw_handler_get_thrspy(netdev, info, (union iwreq_data *)data, | ||
| 2206 | extra); | ||
| 2207 | spin_unlock_bh(&priv->spy_spinlock); | ||
| 2208 | |||
| 2209 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWTHRSPY - number of addresses %d)", | ||
| 2210 | netdev->name, data->length); | ||
| 2211 | |||
| 2212 | return ret; | ||
| 2213 | } | ||
| 2214 | |||
| 2215 | static int at76_iw_handler_set_wap(struct net_device *netdev, | ||
| 2216 | struct iw_request_info *info, | ||
| 2217 | struct sockaddr *ap_addr, char *extra) | ||
| 2218 | { | ||
| 2219 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2220 | |||
| 2221 | at76_dbg(DBG_IOCTL, "%s: SIOCSIWAP - wap/bssid %s", netdev->name, | ||
| 2222 | mac2str(ap_addr->sa_data)); | ||
| 2223 | |||
| 2224 | /* if the incoming address == ff:ff:ff:ff:ff:ff, the user has | ||
| 2225 | chosen any or auto AP preference */ | ||
| 2226 | if (is_broadcast_ether_addr(ap_addr->sa_data) | ||
| 2227 | || is_zero_ether_addr(ap_addr->sa_data)) | ||
| 2228 | priv->wanted_bssid_valid = 0; | ||
| 2229 | else { | ||
| 2230 | /* user wants to set a preferred AP address */ | ||
| 2231 | priv->wanted_bssid_valid = 1; | ||
| 2232 | memcpy(priv->wanted_bssid, ap_addr->sa_data, ETH_ALEN); | ||
| 2233 | } | ||
| 2234 | |||
| 2235 | return -EIWCOMMIT; | ||
| 2236 | } | ||
| 2237 | |||
| 2238 | static int at76_iw_handler_get_wap(struct net_device *netdev, | ||
| 2239 | struct iw_request_info *info, | ||
| 2240 | struct sockaddr *ap_addr, char *extra) | ||
| 2241 | { | ||
| 2242 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2243 | |||
| 2244 | ap_addr->sa_family = ARPHRD_ETHER; | ||
| 2245 | memcpy(ap_addr->sa_data, priv->bssid, ETH_ALEN); | ||
| 2246 | |||
| 2247 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWAP - wap/bssid %s", netdev->name, | ||
| 2248 | mac2str(ap_addr->sa_data)); | ||
| 2249 | |||
| 2250 | return 0; | ||
| 2251 | } | ||
| 2252 | |||
| 2253 | static int at76_iw_handler_set_scan(struct net_device *netdev, | ||
| 2254 | struct iw_request_info *info, | ||
| 2255 | union iwreq_data *wrqu, char *extra) | ||
| 2256 | { | ||
| 2257 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2258 | int ret = 0; | ||
| 2259 | |||
| 2260 | at76_dbg(DBG_IOCTL, "%s: SIOCSIWSCAN", netdev->name); | ||
| 2261 | |||
| 2262 | if (mutex_lock_interruptible(&priv->mtx)) | ||
| 2263 | return -EINTR; | ||
| 2264 | |||
| 2265 | if (!netif_running(netdev)) { | ||
| 2266 | ret = -ENETDOWN; | ||
| 2267 | goto exit; | ||
| 2268 | } | ||
| 2269 | |||
| 2270 | /* jal: we don't allow "iwlist ethX scan" while we are | ||
| 2271 | in monitor mode */ | ||
| 2272 | if (priv->iw_mode == IW_MODE_MONITOR) { | ||
| 2273 | ret = -EBUSY; | ||
| 2274 | goto exit; | ||
| 2275 | } | ||
| 2276 | |||
| 2277 | /* Discard old scan results */ | ||
| 2278 | if ((jiffies - priv->last_scan) > (20 * HZ)) | ||
| 2279 | priv->scan_state = SCAN_IDLE; | ||
| 2280 | priv->last_scan = jiffies; | ||
| 2281 | |||
| 2282 | /* Initiate a scan command */ | ||
| 2283 | if (priv->scan_state == SCAN_IN_PROGRESS) { | ||
| 2284 | ret = -EBUSY; | ||
| 2285 | goto exit; | ||
| 2286 | } | ||
| 2287 | |||
| 2288 | priv->scan_state = SCAN_IN_PROGRESS; | ||
| 2289 | |||
| 2290 | at76_quiesce(priv); | ||
| 2291 | |||
| 2292 | /* Try to do passive or active scan if WE asks as. */ | ||
| 2293 | if (wrqu->data.length | ||
| 2294 | && wrqu->data.length == sizeof(struct iw_scan_req)) { | ||
| 2295 | struct iw_scan_req *req = (struct iw_scan_req *)extra; | ||
| 2296 | |||
| 2297 | if (req->scan_type == IW_SCAN_TYPE_PASSIVE) | ||
| 2298 | priv->scan_mode = SCAN_TYPE_PASSIVE; | ||
| 2299 | else if (req->scan_type == IW_SCAN_TYPE_ACTIVE) | ||
| 2300 | priv->scan_mode = SCAN_TYPE_ACTIVE; | ||
| 2301 | |||
| 2302 | /* Sanity check values? */ | ||
| 2303 | if (req->min_channel_time > 0) | ||
| 2304 | priv->scan_min_time = req->min_channel_time; | ||
| 2305 | |||
| 2306 | if (req->max_channel_time > 0) | ||
| 2307 | priv->scan_max_time = req->max_channel_time; | ||
| 2308 | } | ||
| 2309 | |||
| 2310 | /* change to scanning state */ | ||
| 2311 | at76_set_mac_state(priv, MAC_SCANNING); | ||
| 2312 | schedule_work(&priv->work_start_scan); | ||
| 2313 | |||
| 2314 | exit: | ||
| 2315 | mutex_unlock(&priv->mtx); | ||
| 2316 | return ret; | ||
| 2317 | } | ||
| 2318 | |||
| 2319 | static int at76_iw_handler_get_scan(struct net_device *netdev, | ||
| 2320 | struct iw_request_info *info, | ||
| 2321 | struct iw_point *data, char *extra) | ||
| 2322 | { | ||
| 2323 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2324 | unsigned long flags; | ||
| 2325 | struct list_head *lptr, *nptr; | ||
| 2326 | struct bss_info *curr_bss; | ||
| 2327 | struct iw_event *iwe = kmalloc(sizeof(struct iw_event), GFP_KERNEL); | ||
| 2328 | char *curr_val, *curr_pos = extra; | ||
| 2329 | int i; | ||
| 2330 | |||
| 2331 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWSCAN", netdev->name); | ||
| 2332 | |||
| 2333 | if (!iwe) | ||
| 2334 | return -ENOMEM; | ||
| 2335 | |||
| 2336 | if (priv->scan_state != SCAN_COMPLETED) { | ||
| 2337 | /* scan not yet finished */ | ||
| 2338 | kfree(iwe); | ||
| 2339 | return -EAGAIN; | ||
| 2340 | } | ||
| 2341 | |||
| 2342 | spin_lock_irqsave(&priv->bss_list_spinlock, flags); | ||
| 2343 | |||
| 2344 | list_for_each_safe(lptr, nptr, &priv->bss_list) { | ||
| 2345 | curr_bss = list_entry(lptr, struct bss_info, list); | ||
| 2346 | |||
| 2347 | iwe->cmd = SIOCGIWAP; | ||
| 2348 | iwe->u.ap_addr.sa_family = ARPHRD_ETHER; | ||
| 2349 | memcpy(iwe->u.ap_addr.sa_data, curr_bss->bssid, 6); | ||
| 2350 | curr_pos = iwe_stream_add_event(info, curr_pos, | ||
| 2351 | extra + IW_SCAN_MAX_DATA, iwe, | ||
| 2352 | IW_EV_ADDR_LEN); | ||
| 2353 | |||
| 2354 | iwe->u.data.length = curr_bss->ssid_len; | ||
| 2355 | iwe->cmd = SIOCGIWESSID; | ||
| 2356 | iwe->u.data.flags = 1; | ||
| 2357 | |||
| 2358 | curr_pos = iwe_stream_add_point(info, curr_pos, | ||
| 2359 | extra + IW_SCAN_MAX_DATA, iwe, | ||
| 2360 | curr_bss->ssid); | ||
| 2361 | |||
| 2362 | iwe->cmd = SIOCGIWMODE; | ||
| 2363 | iwe->u.mode = (curr_bss->capa & WLAN_CAPABILITY_IBSS) ? | ||
| 2364 | IW_MODE_ADHOC : | ||
| 2365 | (curr_bss->capa & WLAN_CAPABILITY_ESS) ? | ||
| 2366 | IW_MODE_MASTER : IW_MODE_AUTO; | ||
| 2367 | /* IW_MODE_AUTO = 0 which I thought is | ||
| 2368 | * the most logical value to return in this case */ | ||
| 2369 | curr_pos = iwe_stream_add_event(info, curr_pos, | ||
| 2370 | extra + IW_SCAN_MAX_DATA, iwe, | ||
| 2371 | IW_EV_UINT_LEN); | ||
| 2372 | |||
| 2373 | iwe->cmd = SIOCGIWFREQ; | ||
| 2374 | iwe->u.freq.m = curr_bss->channel; | ||
| 2375 | iwe->u.freq.e = 0; | ||
| 2376 | curr_pos = iwe_stream_add_event(info, curr_pos, | ||
| 2377 | extra + IW_SCAN_MAX_DATA, iwe, | ||
| 2378 | IW_EV_FREQ_LEN); | ||
| 2379 | |||
| 2380 | iwe->cmd = SIOCGIWENCODE; | ||
| 2381 | if (curr_bss->capa & WLAN_CAPABILITY_PRIVACY) | ||
| 2382 | iwe->u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; | ||
| 2383 | else | ||
| 2384 | iwe->u.data.flags = IW_ENCODE_DISABLED; | ||
| 2385 | |||
| 2386 | iwe->u.data.length = 0; | ||
| 2387 | curr_pos = iwe_stream_add_point(info, curr_pos, | ||
| 2388 | extra + IW_SCAN_MAX_DATA, iwe, | ||
| 2389 | NULL); | ||
| 2390 | |||
| 2391 | /* Add quality statistics */ | ||
| 2392 | iwe->cmd = IWEVQUAL; | ||
| 2393 | iwe->u.qual.noise = 0; | ||
| 2394 | iwe->u.qual.updated = | ||
| 2395 | IW_QUAL_NOISE_INVALID | IW_QUAL_LEVEL_UPDATED; | ||
| 2396 | iwe->u.qual.level = (curr_bss->rssi * 100 / 42); | ||
| 2397 | if (iwe->u.qual.level > 100) | ||
| 2398 | iwe->u.qual.level = 100; | ||
| 2399 | if (at76_is_intersil(priv->board_type)) | ||
| 2400 | iwe->u.qual.qual = curr_bss->link_qual; | ||
| 2401 | else { | ||
| 2402 | iwe->u.qual.qual = 0; | ||
| 2403 | iwe->u.qual.updated |= IW_QUAL_QUAL_INVALID; | ||
| 2404 | } | ||
| 2405 | /* Add new value to event */ | ||
| 2406 | curr_pos = iwe_stream_add_event(info, curr_pos, | ||
| 2407 | extra + IW_SCAN_MAX_DATA, iwe, | ||
| 2408 | IW_EV_QUAL_LEN); | ||
| 2409 | |||
| 2410 | /* Rate: stuffing multiple values in a single event requires | ||
| 2411 | * a bit more of magic - Jean II */ | ||
| 2412 | curr_val = curr_pos + IW_EV_LCP_LEN; | ||
| 2413 | |||
| 2414 | iwe->cmd = SIOCGIWRATE; | ||
| 2415 | /* Those two flags are ignored... */ | ||
| 2416 | iwe->u.bitrate.fixed = 0; | ||
| 2417 | iwe->u.bitrate.disabled = 0; | ||
| 2418 | /* Max 8 values */ | ||
| 2419 | for (i = 0; i < curr_bss->rates_len; i++) { | ||
| 2420 | /* Bit rate given in 500 kb/s units (+ 0x80) */ | ||
| 2421 | iwe->u.bitrate.value = | ||
| 2422 | ((curr_bss->rates[i] & 0x7f) * 500000); | ||
| 2423 | /* Add new value to event */ | ||
| 2424 | curr_val = iwe_stream_add_value(info, curr_pos, | ||
| 2425 | curr_val, | ||
| 2426 | extra + | ||
| 2427 | IW_SCAN_MAX_DATA, iwe, | ||
| 2428 | IW_EV_PARAM_LEN); | ||
| 2429 | } | ||
| 2430 | |||
| 2431 | /* Check if we added any event */ | ||
| 2432 | if ((curr_val - curr_pos) > IW_EV_LCP_LEN) | ||
| 2433 | curr_pos = curr_val; | ||
| 2434 | |||
| 2435 | /* more information may be sent back using IWECUSTOM */ | ||
| 2436 | |||
| 2437 | } | ||
| 2438 | |||
| 2439 | spin_unlock_irqrestore(&priv->bss_list_spinlock, flags); | ||
| 2440 | |||
| 2441 | data->length = (curr_pos - extra); | ||
| 2442 | data->flags = 0; | ||
| 2443 | |||
| 2444 | kfree(iwe); | ||
| 2445 | return 0; | ||
| 2446 | } | ||
| 2447 | |||
| 2448 | static int at76_iw_handler_set_essid(struct net_device *netdev, | ||
| 2449 | struct iw_request_info *info, | ||
| 2450 | struct iw_point *data, char *extra) | ||
| 2451 | { | ||
| 2452 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2453 | |||
| 2454 | at76_dbg(DBG_IOCTL, "%s: SIOCSIWESSID - %s", netdev->name, extra); | ||
| 2455 | |||
| 2456 | if (data->flags) { | ||
| 2457 | memcpy(priv->essid, extra, data->length); | ||
| 2458 | priv->essid_size = data->length; | ||
| 2459 | } else | ||
| 2460 | priv->essid_size = 0; /* Use any SSID */ | ||
| 2461 | |||
| 2462 | return -EIWCOMMIT; | ||
| 2463 | } | ||
| 2464 | |||
| 2465 | static int at76_iw_handler_get_essid(struct net_device *netdev, | ||
| 2466 | struct iw_request_info *info, | ||
| 2467 | struct iw_point *data, char *extra) | ||
| 2468 | { | ||
| 2469 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2470 | |||
| 2471 | if (priv->essid_size) { | ||
| 2472 | /* not the ANY ssid in priv->essid */ | ||
| 2473 | data->flags = 1; | ||
| 2474 | data->length = priv->essid_size; | ||
| 2475 | memcpy(extra, priv->essid, data->length); | ||
| 2476 | } else { | ||
| 2477 | /* the ANY ssid was specified */ | ||
| 2478 | if (priv->mac_state == MAC_CONNECTED && priv->curr_bss) { | ||
| 2479 | /* report the SSID we have found */ | ||
| 2480 | data->flags = 1; | ||
| 2481 | data->length = priv->curr_bss->ssid_len; | ||
| 2482 | memcpy(extra, priv->curr_bss->ssid, data->length); | ||
| 2483 | } else { | ||
| 2484 | /* report ANY back */ | ||
| 2485 | data->flags = 0; | ||
| 2486 | data->length = 0; | ||
| 2487 | } | ||
| 2488 | } | ||
| 2489 | |||
| 2490 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWESSID - %.*s", netdev->name, | ||
| 2491 | data->length, extra); | ||
| 2492 | |||
| 2493 | return 0; | ||
| 2494 | } | ||
| 2495 | |||
| 2496 | static int at76_iw_handler_set_rate(struct net_device *netdev, | ||
| 2497 | struct iw_request_info *info, | ||
| 2498 | struct iw_param *bitrate, char *extra) | ||
| 2499 | { | ||
| 2500 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2501 | int ret = -EIWCOMMIT; | ||
| 2502 | |||
| 2503 | at76_dbg(DBG_IOCTL, "%s: SIOCSIWRATE - %d", netdev->name, | ||
| 2504 | bitrate->value); | ||
| 2505 | |||
| 2506 | switch (bitrate->value) { | ||
| 2507 | case -1: | ||
| 2508 | priv->txrate = TX_RATE_AUTO; | ||
| 2509 | break; /* auto rate */ | ||
| 2510 | case 1000000: | ||
| 2511 | priv->txrate = TX_RATE_1MBIT; | ||
| 2512 | break; | ||
| 2513 | case 2000000: | ||
| 2514 | priv->txrate = TX_RATE_2MBIT; | ||
| 2515 | break; | ||
| 2516 | case 5500000: | ||
| 2517 | priv->txrate = TX_RATE_5_5MBIT; | ||
| 2518 | break; | ||
| 2519 | case 11000000: | ||
| 2520 | priv->txrate = TX_RATE_11MBIT; | ||
| 2521 | break; | ||
| 2522 | default: | ||
| 2523 | ret = -EINVAL; | ||
| 2524 | } | ||
| 2525 | |||
| 2526 | return ret; | ||
| 2527 | } | ||
| 2528 | |||
| 2529 | static int at76_iw_handler_get_rate(struct net_device *netdev, | ||
| 2530 | struct iw_request_info *info, | ||
| 2531 | struct iw_param *bitrate, char *extra) | ||
| 2532 | { | ||
| 2533 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2534 | int ret = 0; | ||
| 2535 | |||
| 2536 | switch (priv->txrate) { | ||
| 2537 | /* return max rate if RATE_AUTO */ | ||
| 2538 | case TX_RATE_AUTO: | ||
| 2539 | bitrate->value = 11000000; | ||
| 2540 | break; | ||
| 2541 | case TX_RATE_1MBIT: | ||
| 2542 | bitrate->value = 1000000; | ||
| 2543 | break; | ||
| 2544 | case TX_RATE_2MBIT: | ||
| 2545 | bitrate->value = 2000000; | ||
| 2546 | break; | ||
| 2547 | case TX_RATE_5_5MBIT: | ||
| 2548 | bitrate->value = 5500000; | ||
| 2549 | break; | ||
| 2550 | case TX_RATE_11MBIT: | ||
| 2551 | bitrate->value = 11000000; | ||
| 2552 | break; | ||
| 2553 | default: | ||
| 2554 | ret = -EINVAL; | ||
| 2555 | } | ||
| 2556 | |||
| 2557 | bitrate->fixed = (priv->txrate != TX_RATE_AUTO); | ||
| 2558 | bitrate->disabled = 0; | ||
| 2559 | |||
| 2560 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWRATE - %d", netdev->name, | ||
| 2561 | bitrate->value); | ||
| 2562 | |||
| 2563 | return ret; | ||
| 2564 | } | ||
| 2565 | |||
| 2566 | static int at76_iw_handler_set_rts(struct net_device *netdev, | ||
| 2567 | struct iw_request_info *info, | ||
| 2568 | struct iw_param *rts, char *extra) | ||
| 2569 | { | ||
| 2570 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2571 | int ret = -EIWCOMMIT; | ||
| 2572 | int rthr = rts->value; | ||
| 2573 | |||
| 2574 | at76_dbg(DBG_IOCTL, "%s: SIOCSIWRTS - value %d disabled %s", | ||
| 2575 | netdev->name, rts->value, (rts->disabled) ? "true" : "false"); | ||
| 2576 | |||
| 2577 | if (rts->disabled) | ||
| 2578 | rthr = MAX_RTS_THRESHOLD; | ||
| 2579 | |||
| 2580 | if ((rthr < 0) || (rthr > MAX_RTS_THRESHOLD)) | ||
| 2581 | ret = -EINVAL; | ||
| 2582 | else | ||
| 2583 | priv->rts_threshold = rthr; | ||
| 2584 | |||
| 2585 | return ret; | ||
| 2586 | } | ||
| 2587 | |||
| 2588 | static int at76_iw_handler_get_rts(struct net_device *netdev, | ||
| 2589 | struct iw_request_info *info, | ||
| 2590 | struct iw_param *rts, char *extra) | ||
| 2591 | { | ||
| 2592 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2593 | |||
| 2594 | rts->value = priv->rts_threshold; | ||
| 2595 | rts->disabled = (rts->value >= MAX_RTS_THRESHOLD); | ||
| 2596 | rts->fixed = 1; | ||
| 2597 | |||
| 2598 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWRTS - value %d disabled %s", | ||
| 2599 | netdev->name, rts->value, (rts->disabled) ? "true" : "false"); | ||
| 2600 | |||
| 2601 | return 0; | ||
| 2602 | } | ||
| 2603 | |||
| 2604 | static int at76_iw_handler_set_frag(struct net_device *netdev, | ||
| 2605 | struct iw_request_info *info, | ||
| 2606 | struct iw_param *frag, char *extra) | ||
| 2607 | { | ||
| 2608 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2609 | int ret = -EIWCOMMIT; | ||
| 2610 | int fthr = frag->value; | ||
| 2611 | |||
| 2612 | at76_dbg(DBG_IOCTL, "%s: SIOCSIWFRAG - value %d, disabled %s", | ||
| 2613 | netdev->name, frag->value, | ||
| 2614 | (frag->disabled) ? "true" : "false"); | ||
| 2615 | |||
| 2616 | if (frag->disabled) | ||
| 2617 | fthr = MAX_FRAG_THRESHOLD; | ||
| 2618 | |||
| 2619 | if ((fthr < MIN_FRAG_THRESHOLD) || (fthr > MAX_FRAG_THRESHOLD)) | ||
| 2620 | ret = -EINVAL; | ||
| 2621 | else | ||
| 2622 | priv->frag_threshold = fthr & ~0x1; /* get an even value */ | ||
| 2623 | |||
| 2624 | return ret; | ||
| 2625 | } | ||
| 2626 | |||
| 2627 | static int at76_iw_handler_get_frag(struct net_device *netdev, | ||
| 2628 | struct iw_request_info *info, | ||
| 2629 | struct iw_param *frag, char *extra) | ||
| 2630 | { | ||
| 2631 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2632 | |||
| 2633 | frag->value = priv->frag_threshold; | ||
| 2634 | frag->disabled = (frag->value >= MAX_FRAG_THRESHOLD); | ||
| 2635 | frag->fixed = 1; | ||
| 2636 | |||
| 2637 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWFRAG - value %d, disabled %s", | ||
| 2638 | netdev->name, frag->value, | ||
| 2639 | (frag->disabled) ? "true" : "false"); | ||
| 2640 | |||
| 2641 | return 0; | ||
| 2642 | } | ||
| 2643 | |||
| 2644 | static int at76_iw_handler_get_txpow(struct net_device *netdev, | ||
| 2645 | struct iw_request_info *info, | ||
| 2646 | struct iw_param *power, char *extra) | ||
| 2647 | { | ||
| 2648 | power->value = 15; | ||
| 2649 | power->fixed = 1; /* No power control */ | ||
| 2650 | power->disabled = 0; | ||
| 2651 | power->flags = IW_TXPOW_DBM; | ||
| 2652 | |||
| 2653 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWTXPOW - txpow %d dBm", netdev->name, | ||
| 2654 | power->value); | ||
| 2655 | |||
| 2656 | return 0; | ||
| 2657 | } | ||
| 2658 | |||
| 2659 | /* jal: short retry is handled by the firmware (at least 0.90.x), | ||
| 2660 | while long retry is not (?) */ | ||
| 2661 | static int at76_iw_handler_set_retry(struct net_device *netdev, | ||
| 2662 | struct iw_request_info *info, | ||
| 2663 | struct iw_param *retry, char *extra) | ||
| 2664 | { | ||
| 2665 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2666 | int ret = -EIWCOMMIT; | ||
| 2667 | |||
| 2668 | at76_dbg(DBG_IOCTL, "%s: SIOCSIWRETRY disabled %d flags 0x%x val %d", | ||
| 2669 | netdev->name, retry->disabled, retry->flags, retry->value); | ||
| 2670 | |||
| 2671 | if (!retry->disabled && (retry->flags & IW_RETRY_LIMIT)) { | ||
| 2672 | if ((retry->flags & IW_RETRY_MIN) || | ||
| 2673 | !(retry->flags & IW_RETRY_MAX)) | ||
| 2674 | priv->short_retry_limit = retry->value; | ||
| 2675 | else | ||
| 2676 | ret = -EINVAL; | ||
| 2677 | } else | ||
| 2678 | ret = -EINVAL; | ||
| 2679 | |||
| 2680 | return ret; | ||
| 2681 | } | ||
| 2682 | |||
| 2683 | /* Adapted (ripped) from atmel.c */ | ||
| 2684 | static int at76_iw_handler_get_retry(struct net_device *netdev, | ||
| 2685 | struct iw_request_info *info, | ||
| 2686 | struct iw_param *retry, char *extra) | ||
| 2687 | { | ||
| 2688 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2689 | |||
| 2690 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWRETRY", netdev->name); | ||
| 2691 | |||
| 2692 | retry->disabled = 0; /* Can't be disabled */ | ||
| 2693 | retry->flags = IW_RETRY_LIMIT; | ||
| 2694 | retry->value = priv->short_retry_limit; | ||
| 2695 | |||
| 2696 | return 0; | ||
| 2697 | } | ||
| 2698 | |||
| 2699 | static int at76_iw_handler_set_encode(struct net_device *netdev, | ||
| 2700 | struct iw_request_info *info, | ||
| 2701 | struct iw_point *encoding, char *extra) | ||
| 2702 | { | ||
| 2703 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2704 | int index = (encoding->flags & IW_ENCODE_INDEX) - 1; | ||
| 2705 | int len = encoding->length; | ||
| 2706 | |||
| 2707 | at76_dbg(DBG_IOCTL, "%s: SIOCSIWENCODE - enc.flags %08x " | ||
| 2708 | "pointer %p len %d", netdev->name, encoding->flags, | ||
| 2709 | encoding->pointer, encoding->length); | ||
| 2710 | at76_dbg(DBG_IOCTL, | ||
| 2711 | "%s: SIOCSIWENCODE - old wepstate: enabled %s key_id %d " | ||
| 2712 | "auth_mode %s", netdev->name, | ||
| 2713 | (priv->wep_enabled) ? "true" : "false", priv->wep_key_id, | ||
| 2714 | (priv->auth_mode == | ||
| 2715 | WLAN_AUTH_SHARED_KEY) ? "restricted" : "open"); | ||
| 2716 | |||
| 2717 | /* take the old default key if index is invalid */ | ||
| 2718 | if ((index < 0) || (index >= WEP_KEYS)) | ||
| 2719 | index = priv->wep_key_id; | ||
| 2720 | |||
| 2721 | if (len > 0) { | ||
| 2722 | if (len > WEP_LARGE_KEY_LEN) | ||
| 2723 | len = WEP_LARGE_KEY_LEN; | ||
| 2724 | |||
| 2725 | memset(priv->wep_keys[index], 0, WEP_KEY_LEN); | ||
| 2726 | memcpy(priv->wep_keys[index], extra, len); | ||
| 2727 | priv->wep_keys_len[index] = (len <= WEP_SMALL_KEY_LEN) ? | ||
| 2728 | WEP_SMALL_KEY_LEN : WEP_LARGE_KEY_LEN; | ||
| 2729 | priv->wep_enabled = 1; | ||
| 2730 | } | ||
| 2731 | |||
| 2732 | priv->wep_key_id = index; | ||
| 2733 | priv->wep_enabled = ((encoding->flags & IW_ENCODE_DISABLED) == 0); | ||
| 2734 | |||
| 2735 | if (encoding->flags & IW_ENCODE_RESTRICTED) | ||
| 2736 | priv->auth_mode = WLAN_AUTH_SHARED_KEY; | ||
| 2737 | if (encoding->flags & IW_ENCODE_OPEN) | ||
| 2738 | priv->auth_mode = WLAN_AUTH_OPEN; | ||
| 2739 | |||
| 2740 | at76_dbg(DBG_IOCTL, | ||
| 2741 | "%s: SIOCSIWENCODE - new wepstate: enabled %s key_id %d " | ||
| 2742 | "key_len %d auth_mode %s", netdev->name, | ||
| 2743 | (priv->wep_enabled) ? "true" : "false", priv->wep_key_id + 1, | ||
| 2744 | priv->wep_keys_len[priv->wep_key_id], | ||
| 2745 | (priv->auth_mode == | ||
| 2746 | WLAN_AUTH_SHARED_KEY) ? "restricted" : "open"); | ||
| 2747 | |||
| 2748 | return -EIWCOMMIT; | ||
| 2749 | } | ||
| 2750 | |||
| 2751 | static int at76_iw_handler_get_encode(struct net_device *netdev, | ||
| 2752 | struct iw_request_info *info, | ||
| 2753 | struct iw_point *encoding, char *extra) | ||
| 2754 | { | ||
| 2755 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2756 | int index = (encoding->flags & IW_ENCODE_INDEX) - 1; | ||
| 2757 | |||
| 2758 | if ((index < 0) || (index >= WEP_KEYS)) | ||
| 2759 | index = priv->wep_key_id; | ||
| 2760 | |||
| 2761 | encoding->flags = | ||
| 2762 | (priv->auth_mode == WLAN_AUTH_SHARED_KEY) ? | ||
| 2763 | IW_ENCODE_RESTRICTED : IW_ENCODE_OPEN; | ||
| 2764 | |||
| 2765 | if (!priv->wep_enabled) | ||
| 2766 | encoding->flags |= IW_ENCODE_DISABLED; | ||
| 2767 | |||
| 2768 | if (encoding->pointer) { | ||
| 2769 | encoding->length = priv->wep_keys_len[index]; | ||
| 2770 | |||
| 2771 | memcpy(extra, priv->wep_keys[index], priv->wep_keys_len[index]); | ||
| 2772 | |||
| 2773 | encoding->flags |= (index + 1); | ||
| 2774 | } | ||
| 2775 | |||
| 2776 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWENCODE - enc.flags %08x " | ||
| 2777 | "pointer %p len %d", netdev->name, encoding->flags, | ||
| 2778 | encoding->pointer, encoding->length); | ||
| 2779 | at76_dbg(DBG_IOCTL, | ||
| 2780 | "%s: SIOCGIWENCODE - wepstate: enabled %s key_id %d " | ||
| 2781 | "key_len %d auth_mode %s", netdev->name, | ||
| 2782 | (priv->wep_enabled) ? "true" : "false", priv->wep_key_id + 1, | ||
| 2783 | priv->wep_keys_len[priv->wep_key_id], | ||
| 2784 | (priv->auth_mode == | ||
| 2785 | WLAN_AUTH_SHARED_KEY) ? "restricted" : "open"); | ||
| 2786 | |||
| 2787 | return 0; | ||
| 2788 | } | ||
| 2789 | |||
| 2790 | static int at76_iw_handler_set_power(struct net_device *netdev, | ||
| 2791 | struct iw_request_info *info, | ||
| 2792 | struct iw_param *prq, char *extra) | ||
| 2793 | { | ||
| 2794 | int err = -EIWCOMMIT; | ||
| 2795 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2796 | |||
| 2797 | at76_dbg(DBG_IOCTL, | ||
| 2798 | "%s: SIOCSIWPOWER - disabled %s flags 0x%x value 0x%x", | ||
| 2799 | netdev->name, (prq->disabled) ? "true" : "false", prq->flags, | ||
| 2800 | prq->value); | ||
| 2801 | |||
| 2802 | if (prq->disabled) | ||
| 2803 | priv->pm_mode = AT76_PM_OFF; | ||
| 2804 | else { | ||
| 2805 | switch (prq->flags & IW_POWER_MODE) { | ||
| 2806 | case IW_POWER_ALL_R: | ||
| 2807 | case IW_POWER_ON: | ||
| 2808 | break; | ||
| 2809 | default: | ||
| 2810 | err = -EINVAL; | ||
| 2811 | goto exit; | ||
| 2812 | } | ||
| 2813 | if (prq->flags & IW_POWER_PERIOD) | ||
| 2814 | priv->pm_period = prq->value; | ||
| 2815 | |||
| 2816 | if (prq->flags & IW_POWER_TIMEOUT) { | ||
| 2817 | err = -EINVAL; | ||
| 2818 | goto exit; | ||
| 2819 | } | ||
| 2820 | priv->pm_mode = AT76_PM_ON; | ||
| 2821 | } | ||
| 2822 | exit: | ||
| 2823 | return err; | ||
| 2824 | } | ||
| 2825 | |||
| 2826 | static int at76_iw_handler_get_power(struct net_device *netdev, | ||
| 2827 | struct iw_request_info *info, | ||
| 2828 | struct iw_param *power, char *extra) | ||
| 2829 | { | ||
| 2830 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2831 | |||
| 2832 | power->disabled = (priv->pm_mode == AT76_PM_OFF); | ||
| 2833 | if (!power->disabled) { | ||
| 2834 | power->flags = IW_POWER_PERIOD | IW_POWER_ALL_R; | ||
| 2835 | power->value = priv->pm_period; | ||
| 2836 | } | ||
| 2837 | |||
| 2838 | at76_dbg(DBG_IOCTL, "%s: SIOCGIWPOWER - %s flags 0x%x value 0x%x", | ||
| 2839 | netdev->name, power->disabled ? "disabled" : "enabled", | ||
| 2840 | power->flags, power->value); | ||
| 2841 | |||
| 2842 | return 0; | ||
| 2843 | } | ||
| 2844 | |||
| 2845 | /******************************************************************************* | ||
| 2846 | * Private IOCTLS | ||
| 2847 | */ | ||
| 2848 | static int at76_iw_set_short_preamble(struct net_device *netdev, | ||
| 2849 | struct iw_request_info *info, char *name, | ||
| 2850 | char *extra) | ||
| 2851 | { | ||
| 2852 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2853 | int val = *((int *)name); | ||
| 2854 | int ret = -EIWCOMMIT; | ||
| 2855 | |||
| 2856 | at76_dbg(DBG_IOCTL, "%s: AT76_SET_SHORT_PREAMBLE, %d", | ||
| 2857 | netdev->name, val); | ||
| 2858 | |||
| 2859 | if (val < PREAMBLE_TYPE_LONG || val > PREAMBLE_TYPE_AUTO) | ||
| 2860 | ret = -EINVAL; | ||
| 2861 | else | ||
| 2862 | priv->preamble_type = val; | ||
| 2863 | |||
| 2864 | return ret; | ||
| 2865 | } | ||
| 2866 | |||
| 2867 | static int at76_iw_get_short_preamble(struct net_device *netdev, | ||
| 2868 | struct iw_request_info *info, | ||
| 2869 | union iwreq_data *wrqu, char *extra) | ||
| 2870 | { | ||
| 2871 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2872 | |||
| 2873 | snprintf(wrqu->name, sizeof(wrqu->name), "%s (%d)", | ||
| 2874 | preambles[priv->preamble_type], priv->preamble_type); | ||
| 2875 | return 0; | ||
| 2876 | } | ||
| 2877 | |||
| 2878 | static int at76_iw_set_debug(struct net_device *netdev, | ||
| 2879 | struct iw_request_info *info, | ||
| 2880 | struct iw_point *data, char *extra) | ||
| 2881 | { | ||
| 2882 | char *ptr; | ||
| 2883 | u32 val; | ||
| 2884 | |||
| 2885 | if (data->length > 0) { | ||
| 2886 | val = simple_strtol(extra, &ptr, 0); | ||
| 2887 | |||
| 2888 | if (ptr == extra) | ||
| 2889 | val = DBG_DEFAULTS; | ||
| 2890 | |||
| 2891 | at76_dbg(DBG_IOCTL, "%s: AT76_SET_DEBUG input %d: %s -> 0x%x", | ||
| 2892 | netdev->name, data->length, extra, val); | ||
| 2893 | } else | ||
| 2894 | val = DBG_DEFAULTS; | ||
| 2895 | |||
| 2896 | at76_dbg(DBG_IOCTL, "%s: AT76_SET_DEBUG, old 0x%x, new 0x%x", | ||
| 2897 | netdev->name, at76_debug, val); | ||
| 2898 | |||
| 2899 | /* jal: some more output to pin down lockups */ | ||
| 2900 | at76_dbg(DBG_IOCTL, "%s: netif running %d queue_stopped %d " | ||
| 2901 | "carrier_ok %d", netdev->name, netif_running(netdev), | ||
| 2902 | netif_queue_stopped(netdev), netif_carrier_ok(netdev)); | ||
| 2903 | |||
| 2904 | at76_debug = val; | ||
| 2905 | |||
| 2906 | return 0; | ||
| 2907 | } | ||
| 2908 | |||
| 2909 | static int at76_iw_get_debug(struct net_device *netdev, | ||
| 2910 | struct iw_request_info *info, | ||
| 2911 | union iwreq_data *wrqu, char *extra) | ||
| 2912 | { | ||
| 2913 | snprintf(wrqu->name, sizeof(wrqu->name), "0x%08x", at76_debug); | ||
| 2914 | return 0; | ||
| 2915 | } | ||
| 2916 | |||
| 2917 | static int at76_iw_set_powersave_mode(struct net_device *netdev, | ||
| 2918 | struct iw_request_info *info, char *name, | ||
| 2919 | char *extra) | ||
| 2920 | { | ||
| 2921 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2922 | int val = *((int *)name); | ||
| 2923 | int ret = -EIWCOMMIT; | ||
| 2924 | |||
| 2925 | at76_dbg(DBG_IOCTL, "%s: AT76_SET_POWERSAVE_MODE, %d (%s)", | ||
| 2926 | netdev->name, val, | ||
| 2927 | val == AT76_PM_OFF ? "active" : val == AT76_PM_ON ? "save" : | ||
| 2928 | val == AT76_PM_SMART ? "smart save" : "<invalid>"); | ||
| 2929 | if (val < AT76_PM_OFF || val > AT76_PM_SMART) | ||
| 2930 | ret = -EINVAL; | ||
| 2931 | else | ||
| 2932 | priv->pm_mode = val; | ||
| 2933 | |||
| 2934 | return ret; | ||
| 2935 | } | ||
| 2936 | |||
| 2937 | static int at76_iw_get_powersave_mode(struct net_device *netdev, | ||
| 2938 | struct iw_request_info *info, | ||
| 2939 | union iwreq_data *wrqu, char *extra) | ||
| 2940 | { | ||
| 2941 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2942 | int *param = (int *)extra; | ||
| 2943 | |||
| 2944 | param[0] = priv->pm_mode; | ||
| 2945 | return 0; | ||
| 2946 | } | ||
| 2947 | |||
| 2948 | static int at76_iw_set_scan_times(struct net_device *netdev, | ||
| 2949 | struct iw_request_info *info, char *name, | ||
| 2950 | char *extra) | ||
| 2951 | { | ||
| 2952 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2953 | int mint = *((int *)name); | ||
| 2954 | int maxt = *((int *)name + 1); | ||
| 2955 | int ret = -EIWCOMMIT; | ||
| 2956 | |||
| 2957 | at76_dbg(DBG_IOCTL, "%s: AT76_SET_SCAN_TIMES - min %d max %d", | ||
| 2958 | netdev->name, mint, maxt); | ||
| 2959 | if (mint <= 0 || maxt <= 0 || mint > maxt) | ||
| 2960 | ret = -EINVAL; | ||
| 2961 | else { | ||
| 2962 | priv->scan_min_time = mint; | ||
| 2963 | priv->scan_max_time = maxt; | ||
| 2964 | } | ||
| 2965 | |||
| 2966 | return ret; | ||
| 2967 | } | ||
| 2968 | |||
| 2969 | static int at76_iw_get_scan_times(struct net_device *netdev, | ||
| 2970 | struct iw_request_info *info, | ||
| 2971 | union iwreq_data *wrqu, char *extra) | ||
| 2972 | { | ||
| 2973 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2974 | int *param = (int *)extra; | ||
| 2975 | |||
| 2976 | param[0] = priv->scan_min_time; | ||
| 2977 | param[1] = priv->scan_max_time; | ||
| 2978 | return 0; | ||
| 2979 | } | ||
| 2980 | |||
| 2981 | static int at76_iw_set_scan_mode(struct net_device *netdev, | ||
| 2982 | struct iw_request_info *info, char *name, | ||
| 2983 | char *extra) | ||
| 2984 | { | ||
| 2985 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 2986 | int val = *((int *)name); | ||
| 2987 | int ret = -EIWCOMMIT; | ||
| 2988 | |||
| 2989 | at76_dbg(DBG_IOCTL, "%s: AT76_SET_SCAN_MODE - mode %s", | ||
| 2990 | netdev->name, (val = SCAN_TYPE_ACTIVE) ? "active" : | ||
| 2991 | (val = SCAN_TYPE_PASSIVE) ? "passive" : "<invalid>"); | ||
| 2992 | |||
| 2993 | if (val != SCAN_TYPE_ACTIVE && val != SCAN_TYPE_PASSIVE) | ||
| 2994 | ret = -EINVAL; | ||
| 2995 | else | ||
| 2996 | priv->scan_mode = val; | ||
| 2997 | |||
| 2998 | return ret; | ||
| 2999 | } | ||
| 3000 | |||
| 3001 | static int at76_iw_get_scan_mode(struct net_device *netdev, | ||
| 3002 | struct iw_request_info *info, | ||
| 3003 | union iwreq_data *wrqu, char *extra) | ||
| 3004 | { | ||
| 3005 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 3006 | int *param = (int *)extra; | ||
| 3007 | |||
| 3008 | param[0] = priv->scan_mode; | ||
| 3009 | return 0; | ||
| 3010 | } | ||
| 3011 | |||
| 3012 | #define AT76_SET_HANDLER(h, f) [h - SIOCIWFIRST] = (iw_handler) f | ||
| 3013 | |||
| 3014 | /* Standard wireless handlers */ | ||
| 3015 | static const iw_handler at76_handlers[] = { | ||
| 3016 | AT76_SET_HANDLER(SIOCSIWCOMMIT, at76_iw_handler_commit), | ||
| 3017 | AT76_SET_HANDLER(SIOCGIWNAME, at76_iw_handler_get_name), | ||
| 3018 | AT76_SET_HANDLER(SIOCSIWFREQ, at76_iw_handler_set_freq), | ||
| 3019 | AT76_SET_HANDLER(SIOCGIWFREQ, at76_iw_handler_get_freq), | ||
| 3020 | AT76_SET_HANDLER(SIOCSIWMODE, at76_iw_handler_set_mode), | ||
| 3021 | AT76_SET_HANDLER(SIOCGIWMODE, at76_iw_handler_get_mode), | ||
| 3022 | AT76_SET_HANDLER(SIOCGIWRANGE, at76_iw_handler_get_range), | ||
| 3023 | AT76_SET_HANDLER(SIOCSIWSPY, at76_iw_handler_set_spy), | ||
| 3024 | AT76_SET_HANDLER(SIOCGIWSPY, at76_iw_handler_get_spy), | ||
| 3025 | AT76_SET_HANDLER(SIOCSIWTHRSPY, at76_iw_handler_set_thrspy), | ||
| 3026 | AT76_SET_HANDLER(SIOCGIWTHRSPY, at76_iw_handler_get_thrspy), | ||
| 3027 | AT76_SET_HANDLER(SIOCSIWAP, at76_iw_handler_set_wap), | ||
| 3028 | AT76_SET_HANDLER(SIOCGIWAP, at76_iw_handler_get_wap), | ||
| 3029 | AT76_SET_HANDLER(SIOCSIWSCAN, at76_iw_handler_set_scan), | ||
| 3030 | AT76_SET_HANDLER(SIOCGIWSCAN, at76_iw_handler_get_scan), | ||
| 3031 | AT76_SET_HANDLER(SIOCSIWESSID, at76_iw_handler_set_essid), | ||
| 3032 | AT76_SET_HANDLER(SIOCGIWESSID, at76_iw_handler_get_essid), | ||
| 3033 | AT76_SET_HANDLER(SIOCSIWRATE, at76_iw_handler_set_rate), | ||
| 3034 | AT76_SET_HANDLER(SIOCGIWRATE, at76_iw_handler_get_rate), | ||
| 3035 | AT76_SET_HANDLER(SIOCSIWRTS, at76_iw_handler_set_rts), | ||
| 3036 | AT76_SET_HANDLER(SIOCGIWRTS, at76_iw_handler_get_rts), | ||
| 3037 | AT76_SET_HANDLER(SIOCSIWFRAG, at76_iw_handler_set_frag), | ||
| 3038 | AT76_SET_HANDLER(SIOCGIWFRAG, at76_iw_handler_get_frag), | ||
| 3039 | AT76_SET_HANDLER(SIOCGIWTXPOW, at76_iw_handler_get_txpow), | ||
| 3040 | AT76_SET_HANDLER(SIOCSIWRETRY, at76_iw_handler_set_retry), | ||
| 3041 | AT76_SET_HANDLER(SIOCGIWRETRY, at76_iw_handler_get_retry), | ||
| 3042 | AT76_SET_HANDLER(SIOCSIWENCODE, at76_iw_handler_set_encode), | ||
| 3043 | AT76_SET_HANDLER(SIOCGIWENCODE, at76_iw_handler_get_encode), | ||
| 3044 | AT76_SET_HANDLER(SIOCSIWPOWER, at76_iw_handler_set_power), | ||
| 3045 | AT76_SET_HANDLER(SIOCGIWPOWER, at76_iw_handler_get_power) | ||
| 3046 | }; | ||
| 3047 | |||
| 3048 | #define AT76_SET_PRIV(h, f) [h - SIOCIWFIRSTPRIV] = (iw_handler) f | ||
| 3049 | |||
| 3050 | /* Private wireless handlers */ | ||
| 3051 | static const iw_handler at76_priv_handlers[] = { | ||
| 3052 | AT76_SET_PRIV(AT76_SET_SHORT_PREAMBLE, at76_iw_set_short_preamble), | ||
| 3053 | AT76_SET_PRIV(AT76_GET_SHORT_PREAMBLE, at76_iw_get_short_preamble), | ||
| 3054 | AT76_SET_PRIV(AT76_SET_DEBUG, at76_iw_set_debug), | ||
| 3055 | AT76_SET_PRIV(AT76_GET_DEBUG, at76_iw_get_debug), | ||
| 3056 | AT76_SET_PRIV(AT76_SET_POWERSAVE_MODE, at76_iw_set_powersave_mode), | ||
| 3057 | AT76_SET_PRIV(AT76_GET_POWERSAVE_MODE, at76_iw_get_powersave_mode), | ||
| 3058 | AT76_SET_PRIV(AT76_SET_SCAN_TIMES, at76_iw_set_scan_times), | ||
| 3059 | AT76_SET_PRIV(AT76_GET_SCAN_TIMES, at76_iw_get_scan_times), | ||
| 3060 | AT76_SET_PRIV(AT76_SET_SCAN_MODE, at76_iw_set_scan_mode), | ||
| 3061 | AT76_SET_PRIV(AT76_GET_SCAN_MODE, at76_iw_get_scan_mode), | ||
| 3062 | }; | ||
| 3063 | |||
| 3064 | /* Names and arguments of private wireless handlers */ | ||
| 3065 | static const struct iw_priv_args at76_priv_args[] = { | ||
| 3066 | /* 0 - long, 1 - short */ | ||
| 3067 | {AT76_SET_SHORT_PREAMBLE, | ||
| 3068 | IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_preamble"}, | ||
| 3069 | |||
| 3070 | {AT76_GET_SHORT_PREAMBLE, | ||
| 3071 | 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | 10, "get_preamble"}, | ||
| 3072 | |||
| 3073 | /* we must pass the new debug mask as a string, because iwpriv cannot | ||
| 3074 | * parse hex numbers starting with 0x :-( */ | ||
| 3075 | {AT76_SET_DEBUG, | ||
| 3076 | IW_PRIV_TYPE_CHAR | 10, 0, "set_debug"}, | ||
| 3077 | |||
| 3078 | {AT76_GET_DEBUG, | ||
| 3079 | 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | 10, "get_debug"}, | ||
| 3080 | |||
| 3081 | /* 1 - active, 2 - power save, 3 - smart power save */ | ||
| 3082 | {AT76_SET_POWERSAVE_MODE, | ||
| 3083 | IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_powersave"}, | ||
| 3084 | |||
| 3085 | {AT76_GET_POWERSAVE_MODE, | ||
| 3086 | 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_powersave"}, | ||
| 3087 | |||
| 3088 | /* min_channel_time, max_channel_time */ | ||
| 3089 | {AT76_SET_SCAN_TIMES, | ||
| 3090 | IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "set_scan_times"}, | ||
| 3091 | |||
| 3092 | {AT76_GET_SCAN_TIMES, | ||
| 3093 | 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, "get_scan_times"}, | ||
| 3094 | |||
| 3095 | /* 0 - active, 1 - passive scan */ | ||
| 3096 | {AT76_SET_SCAN_MODE, | ||
| 3097 | IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_scan_mode"}, | ||
| 3098 | |||
| 3099 | {AT76_GET_SCAN_MODE, | ||
| 3100 | 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_scan_mode"}, | ||
| 3101 | }; | ||
| 3102 | |||
| 3103 | static const struct iw_handler_def at76_handler_def = { | ||
| 3104 | .num_standard = ARRAY_SIZE(at76_handlers), | ||
| 3105 | .num_private = ARRAY_SIZE(at76_priv_handlers), | ||
| 3106 | .num_private_args = ARRAY_SIZE(at76_priv_args), | ||
| 3107 | .standard = at76_handlers, | ||
| 3108 | .private = at76_priv_handlers, | ||
| 3109 | .private_args = at76_priv_args, | ||
| 3110 | .get_wireless_stats = at76_get_wireless_stats, | ||
| 3111 | }; | ||
| 3112 | |||
| 3113 | static const u8 snapsig[] = { 0xaa, 0xaa, 0x03 }; | ||
| 3114 | |||
| 3115 | /* RFC 1042 encapsulates Ethernet frames in 802.2 SNAP (0xaa, 0xaa, 0x03) with | ||
| 3116 | * a SNAP OID of 0 (0x00, 0x00, 0x00) */ | ||
| 3117 | static const u8 rfc1042sig[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; | ||
| 3118 | |||
| 3119 | static int at76_tx(struct sk_buff *skb, struct net_device *netdev) | ||
| 3120 | { | ||
| 3121 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 3122 | struct net_device_stats *stats = &priv->stats; | ||
| 3123 | int ret = 0; | ||
| 3124 | int wlen; | ||
| 3125 | int submit_len; | ||
| 3126 | struct at76_tx_buffer *tx_buffer = priv->bulk_out_buffer; | ||
| 3127 | struct ieee80211_hdr_3addr *i802_11_hdr = | ||
| 3128 | (struct ieee80211_hdr_3addr *)tx_buffer->packet; | ||
| 3129 | u8 *payload = i802_11_hdr->payload; | ||
| 3130 | struct ethhdr *eh = (struct ethhdr *)skb->data; | ||
| 3131 | |||
| 3132 | if (netif_queue_stopped(netdev)) { | ||
| 3133 | printk(KERN_ERR "%s: %s called while netdev is stopped\n", | ||
| 3134 | netdev->name, __func__); | ||
| 3135 | /* skip this packet */ | ||
| 3136 | dev_kfree_skb(skb); | ||
| 3137 | return 0; | ||
| 3138 | } | ||
| 3139 | |||
| 3140 | if (priv->tx_urb->status == -EINPROGRESS) { | ||
| 3141 | printk(KERN_ERR "%s: %s called while tx urb is pending\n", | ||
| 3142 | netdev->name, __func__); | ||
| 3143 | /* skip this packet */ | ||
| 3144 | dev_kfree_skb(skb); | ||
| 3145 | return 0; | ||
| 3146 | } | ||
| 3147 | |||
| 3148 | if (skb->len < ETH_HLEN) { | ||
| 3149 | printk(KERN_ERR "%s: %s: skb too short (%d)\n", | ||
| 3150 | netdev->name, __func__, skb->len); | ||
| 3151 | dev_kfree_skb(skb); | ||
| 3152 | return 0; | ||
| 3153 | } | ||
| 3154 | |||
| 3155 | at76_ledtrig_tx_activity(); /* tell ledtrigger we send a packet */ | ||
| 3156 | |||
| 3157 | /* we can get rid of memcpy if we set netdev->hard_header_len to | ||
| 3158 | reserve enough space, but we would need to keep the skb around */ | ||
| 3159 | |||
| 3160 | if (ntohs(eh->h_proto) <= ETH_DATA_LEN) { | ||
| 3161 | /* this is a 802.3 packet */ | ||
| 3162 | if (skb->len >= ETH_HLEN + sizeof(rfc1042sig) | ||
| 3163 | && skb->data[ETH_HLEN] == rfc1042sig[0] | ||
| 3164 | && skb->data[ETH_HLEN + 1] == rfc1042sig[1]) { | ||
| 3165 | /* higher layer delivered SNAP header - keep it */ | ||
| 3166 | memcpy(payload, skb->data + ETH_HLEN, | ||
| 3167 | skb->len - ETH_HLEN); | ||
| 3168 | wlen = IEEE80211_3ADDR_LEN + skb->len - ETH_HLEN; | ||
| 3169 | } else { | ||
| 3170 | printk(KERN_ERR "%s: dropping non-SNAP 802.2 packet " | ||
| 3171 | "(DSAP 0x%02x SSAP 0x%02x cntrl 0x%02x)\n", | ||
| 3172 | priv->netdev->name, skb->data[ETH_HLEN], | ||
| 3173 | skb->data[ETH_HLEN + 1], | ||
| 3174 | skb->data[ETH_HLEN + 2]); | ||
| 3175 | dev_kfree_skb(skb); | ||
| 3176 | return 0; | ||
| 3177 | } | ||
| 3178 | } else { | ||
| 3179 | /* add RFC 1042 header in front */ | ||
| 3180 | memcpy(payload, rfc1042sig, sizeof(rfc1042sig)); | ||
| 3181 | memcpy(payload + sizeof(rfc1042sig), &eh->h_proto, | ||
| 3182 | skb->len - offsetof(struct ethhdr, h_proto)); | ||
| 3183 | wlen = IEEE80211_3ADDR_LEN + sizeof(rfc1042sig) + skb->len - | ||
| 3184 | offsetof(struct ethhdr, h_proto); | ||
| 3185 | } | ||
| 3186 | |||
| 3187 | /* make wireless header */ | ||
| 3188 | i802_11_hdr->frame_ctl = | ||
| 3189 | cpu_to_le16(IEEE80211_FTYPE_DATA | | ||
| 3190 | (priv->wep_enabled ? IEEE80211_FCTL_PROTECTED : 0) | | ||
| 3191 | (priv->iw_mode == | ||
| 3192 | IW_MODE_INFRA ? IEEE80211_FCTL_TODS : 0)); | ||
| 3193 | |||
| 3194 | if (priv->iw_mode == IW_MODE_ADHOC) { | ||
| 3195 | memcpy(i802_11_hdr->addr1, eh->h_dest, ETH_ALEN); | ||
| 3196 | memcpy(i802_11_hdr->addr2, eh->h_source, ETH_ALEN); | ||
| 3197 | memcpy(i802_11_hdr->addr3, priv->bssid, ETH_ALEN); | ||
| 3198 | } else if (priv->iw_mode == IW_MODE_INFRA) { | ||
| 3199 | memcpy(i802_11_hdr->addr1, priv->bssid, ETH_ALEN); | ||
| 3200 | memcpy(i802_11_hdr->addr2, eh->h_source, ETH_ALEN); | ||
| 3201 | memcpy(i802_11_hdr->addr3, eh->h_dest, ETH_ALEN); | ||
| 3202 | } | ||
| 3203 | |||
| 3204 | i802_11_hdr->duration_id = cpu_to_le16(0); | ||
| 3205 | i802_11_hdr->seq_ctl = cpu_to_le16(0); | ||
| 3206 | |||
| 3207 | /* setup 'Atmel' header */ | ||
| 3208 | tx_buffer->wlength = cpu_to_le16(wlen); | ||
| 3209 | tx_buffer->tx_rate = priv->txrate; | ||
| 3210 | /* for broadcast destination addresses, the firmware 0.100.x | ||
| 3211 | seems to choose the highest rate set with CMD_STARTUP in | ||
| 3212 | basic_rate_set replacing this value */ | ||
| 3213 | |||
| 3214 | memset(tx_buffer->reserved, 0, sizeof(tx_buffer->reserved)); | ||
| 3215 | |||
| 3216 | tx_buffer->padding = at76_calc_padding(wlen); | ||
| 3217 | submit_len = wlen + AT76_TX_HDRLEN + tx_buffer->padding; | ||
| 3218 | |||
| 3219 | at76_dbg(DBG_TX_DATA_CONTENT, "%s skb->data %s", priv->netdev->name, | ||
| 3220 | hex2str(skb->data, 32)); | ||
| 3221 | at76_dbg(DBG_TX_DATA, "%s tx: wlen 0x%x pad 0x%x rate %d hdr %s", | ||
| 3222 | priv->netdev->name, | ||
| 3223 | le16_to_cpu(tx_buffer->wlength), | ||
| 3224 | tx_buffer->padding, tx_buffer->tx_rate, | ||
| 3225 | hex2str(i802_11_hdr, sizeof(*i802_11_hdr))); | ||
| 3226 | at76_dbg(DBG_TX_DATA_CONTENT, "%s payload %s", priv->netdev->name, | ||
| 3227 | hex2str(payload, 48)); | ||
| 3228 | |||
| 3229 | /* send stuff */ | ||
| 3230 | netif_stop_queue(netdev); | ||
| 3231 | netdev->trans_start = jiffies; | ||
| 3232 | |||
| 3233 | usb_fill_bulk_urb(priv->tx_urb, priv->udev, priv->tx_pipe, tx_buffer, | ||
| 3234 | submit_len, at76_tx_callback, priv); | ||
| 3235 | ret = usb_submit_urb(priv->tx_urb, GFP_ATOMIC); | ||
| 3236 | if (ret) { | ||
| 3237 | stats->tx_errors++; | ||
| 3238 | printk(KERN_ERR "%s: error in tx submit urb: %d\n", | ||
| 3239 | netdev->name, ret); | ||
| 3240 | if (ret == -EINVAL) | ||
| 3241 | printk(KERN_ERR | ||
| 3242 | "%s: -EINVAL: tx urb %p hcpriv %p complete %p\n", | ||
| 3243 | priv->netdev->name, priv->tx_urb, | ||
| 3244 | priv->tx_urb->hcpriv, priv->tx_urb->complete); | ||
| 3245 | } else { | ||
| 3246 | stats->tx_bytes += skb->len; | ||
| 3247 | dev_kfree_skb(skb); | ||
| 3248 | } | ||
| 3249 | |||
| 3250 | return ret; | ||
| 3251 | } | ||
| 3252 | |||
| 3253 | static void at76_tx_timeout(struct net_device *netdev) | ||
| 3254 | { | ||
| 3255 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 3256 | |||
| 3257 | if (!priv) | ||
| 3258 | return; | ||
| 3259 | dev_warn(&netdev->dev, "tx timeout."); | ||
| 3260 | |||
| 3261 | usb_unlink_urb(priv->tx_urb); | ||
| 3262 | priv->stats.tx_errors++; | ||
| 3263 | } | ||
| 3264 | |||
| 1322 | static int at76_submit_rx_urb(struct at76_priv *priv) | 3265 | static int at76_submit_rx_urb(struct at76_priv *priv) |
| 1323 | { | 3266 | { |
| 1324 | int ret; | 3267 | int ret; |
| @@ -1327,7 +3270,7 @@ static int at76_submit_rx_urb(struct at76_priv *priv) | |||
| 1327 | 3270 | ||
| 1328 | if (!priv->rx_urb) { | 3271 | if (!priv->rx_urb) { |
| 1329 | printk(KERN_ERR "%s: %s: priv->rx_urb is NULL\n", | 3272 | printk(KERN_ERR "%s: %s: priv->rx_urb is NULL\n", |
| 1330 | wiphy_name(priv->hw->wiphy), __func__); | 3273 | priv->netdev->name, __func__); |
| 1331 | return -EFAULT; | 3274 | return -EFAULT; |
| 1332 | } | 3275 | } |
| 1333 | 3276 | ||
| @@ -1335,7 +3278,7 @@ static int at76_submit_rx_urb(struct at76_priv *priv) | |||
| 1335 | skb = dev_alloc_skb(sizeof(struct at76_rx_buffer)); | 3278 | skb = dev_alloc_skb(sizeof(struct at76_rx_buffer)); |
| 1336 | if (!skb) { | 3279 | if (!skb) { |
| 1337 | printk(KERN_ERR "%s: cannot allocate rx skbuff\n", | 3280 | printk(KERN_ERR "%s: cannot allocate rx skbuff\n", |
| 1338 | wiphy_name(priv->hw->wiphy)); | 3281 | priv->netdev->name); |
| 1339 | ret = -ENOMEM; | 3282 | ret = -ENOMEM; |
| 1340 | goto exit; | 3283 | goto exit; |
| 1341 | } | 3284 | } |
| @@ -1355,18 +3298,110 @@ static int at76_submit_rx_urb(struct at76_priv *priv) | |||
| 1355 | "usb_submit_urb returned -ENODEV"); | 3298 | "usb_submit_urb returned -ENODEV"); |
| 1356 | else | 3299 | else |
| 1357 | printk(KERN_ERR "%s: rx, usb_submit_urb failed: %d\n", | 3300 | printk(KERN_ERR "%s: rx, usb_submit_urb failed: %d\n", |
| 1358 | wiphy_name(priv->hw->wiphy), ret); | 3301 | priv->netdev->name, ret); |
| 1359 | } | 3302 | } |
| 1360 | 3303 | ||
| 1361 | exit: | 3304 | exit: |
| 1362 | if (ret < 0 && ret != -ENODEV) | 3305 | if (ret < 0 && ret != -ENODEV) |
| 1363 | printk(KERN_ERR "%s: cannot submit rx urb - please unload the " | 3306 | printk(KERN_ERR "%s: cannot submit rx urb - please unload the " |
| 1364 | "driver and/or power cycle the device\n", | 3307 | "driver and/or power cycle the device\n", |
| 1365 | wiphy_name(priv->hw->wiphy)); | 3308 | priv->netdev->name); |
| 1366 | 3309 | ||
| 1367 | return ret; | 3310 | return ret; |
| 1368 | } | 3311 | } |
| 1369 | 3312 | ||
| 3313 | static int at76_open(struct net_device *netdev) | ||
| 3314 | { | ||
| 3315 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 3316 | int ret = 0; | ||
| 3317 | |||
| 3318 | at76_dbg(DBG_PROC_ENTRY, "%s(): entry", __func__); | ||
| 3319 | |||
| 3320 | if (mutex_lock_interruptible(&priv->mtx)) | ||
| 3321 | return -EINTR; | ||
| 3322 | |||
| 3323 | /* if netdev->dev_addr != priv->mac_addr we must | ||
| 3324 | set the mac address in the device ! */ | ||
| 3325 | if (compare_ether_addr(netdev->dev_addr, priv->mac_addr)) { | ||
| 3326 | if (at76_add_mac_address(priv, netdev->dev_addr) >= 0) | ||
| 3327 | at76_dbg(DBG_PROGRESS, "%s: set new MAC addr %s", | ||
| 3328 | netdev->name, mac2str(netdev->dev_addr)); | ||
| 3329 | } | ||
| 3330 | |||
| 3331 | priv->scan_state = SCAN_IDLE; | ||
| 3332 | priv->last_scan = jiffies; | ||
| 3333 | |||
| 3334 | ret = at76_submit_rx_urb(priv); | ||
| 3335 | if (ret < 0) { | ||
| 3336 | printk(KERN_ERR "%s: open: submit_rx_urb failed: %d\n", | ||
| 3337 | netdev->name, ret); | ||
| 3338 | goto error; | ||
| 3339 | } | ||
| 3340 | |||
| 3341 | schedule_delayed_work(&priv->dwork_restart, 0); | ||
| 3342 | |||
| 3343 | at76_dbg(DBG_PROC_ENTRY, "%s(): end", __func__); | ||
| 3344 | error: | ||
| 3345 | mutex_unlock(&priv->mtx); | ||
| 3346 | return ret < 0 ? ret : 0; | ||
| 3347 | } | ||
| 3348 | |||
| 3349 | static int at76_stop(struct net_device *netdev) | ||
| 3350 | { | ||
| 3351 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 3352 | |||
| 3353 | at76_dbg(DBG_DEVSTART, "%s: ENTER", __func__); | ||
| 3354 | |||
| 3355 | if (mutex_lock_interruptible(&priv->mtx)) | ||
| 3356 | return -EINTR; | ||
| 3357 | |||
| 3358 | at76_quiesce(priv); | ||
| 3359 | |||
| 3360 | if (!priv->device_unplugged) { | ||
| 3361 | /* We are called by "ifconfig ethX down", not because the | ||
| 3362 | * device is not available anymore. */ | ||
| 3363 | at76_set_radio(priv, 0); | ||
| 3364 | |||
| 3365 | /* We unlink rx_urb because at76_open() re-submits it. | ||
| 3366 | * If unplugged, at76_delete_device() takes care of it. */ | ||
| 3367 | usb_kill_urb(priv->rx_urb); | ||
| 3368 | } | ||
| 3369 | |||
| 3370 | /* free the bss_list */ | ||
| 3371 | at76_free_bss_list(priv); | ||
| 3372 | |||
| 3373 | mutex_unlock(&priv->mtx); | ||
| 3374 | at76_dbg(DBG_DEVSTART, "%s: EXIT", __func__); | ||
| 3375 | |||
| 3376 | return 0; | ||
| 3377 | } | ||
| 3378 | |||
| 3379 | static void at76_ethtool_get_drvinfo(struct net_device *netdev, | ||
| 3380 | struct ethtool_drvinfo *info) | ||
| 3381 | { | ||
| 3382 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 3383 | |||
| 3384 | strncpy(info->driver, DRIVER_NAME, sizeof(info->driver)); | ||
| 3385 | strncpy(info->version, DRIVER_VERSION, sizeof(info->version)); | ||
| 3386 | |||
| 3387 | usb_make_path(priv->udev, info->bus_info, sizeof(info->bus_info)); | ||
| 3388 | |||
| 3389 | snprintf(info->fw_version, sizeof(info->fw_version), "%d.%d.%d-%d", | ||
| 3390 | priv->fw_version.major, priv->fw_version.minor, | ||
| 3391 | priv->fw_version.patch, priv->fw_version.build); | ||
| 3392 | } | ||
| 3393 | |||
| 3394 | static u32 at76_ethtool_get_link(struct net_device *netdev) | ||
| 3395 | { | ||
| 3396 | struct at76_priv *priv = netdev_priv(netdev); | ||
| 3397 | return priv->mac_state == MAC_CONNECTED; | ||
| 3398 | } | ||
| 3399 | |||
| 3400 | static struct ethtool_ops at76_ethtool_ops = { | ||
| 3401 | .get_drvinfo = at76_ethtool_get_drvinfo, | ||
| 3402 | .get_link = at76_ethtool_get_link, | ||
| 3403 | }; | ||
| 3404 | |||
| 1370 | /* Download external firmware */ | 3405 | /* Download external firmware */ |
| 1371 | static int at76_load_external_fw(struct usb_device *udev, struct fwentry *fwe) | 3406 | static int at76_load_external_fw(struct usb_device *udev, struct fwentry *fwe) |
| 1372 | { | 3407 | { |
| @@ -1463,6 +3498,406 @@ exit: | |||
| 1463 | return ret; | 3498 | return ret; |
| 1464 | } | 3499 | } |
| 1465 | 3500 | ||
| 3501 | static int at76_match_essid(struct at76_priv *priv, struct bss_info *ptr) | ||
| 3502 | { | ||
| 3503 | /* common criteria for both modi */ | ||
| 3504 | |||
| 3505 | int ret = (priv->essid_size == 0 /* ANY ssid */ || | ||
| 3506 | (priv->essid_size == ptr->ssid_len && | ||
| 3507 | !memcmp(priv->essid, ptr->ssid, ptr->ssid_len))); | ||
| 3508 | if (!ret) | ||
| 3509 | at76_dbg(DBG_BSS_MATCH, | ||
| 3510 | "%s bss table entry %p: essid didn't match", | ||
| 3511 | priv->netdev->name, ptr); | ||
| 3512 | return ret; | ||
| 3513 | } | ||
| 3514 | |||
| 3515 | static inline int at76_match_mode(struct at76_priv *priv, struct bss_info *ptr) | ||
| 3516 | { | ||
| 3517 | int ret; | ||
| 3518 | |||
| 3519 | if (priv->iw_mode == IW_MODE_ADHOC) | ||
| 3520 | ret = ptr->capa & WLAN_CAPABILITY_IBSS; | ||
| 3521 | else | ||
| 3522 | ret = ptr->capa & WLAN_CAPABILITY_ESS; | ||
| 3523 | if (!ret) | ||
| 3524 | at76_dbg(DBG_BSS_MATCH, | ||
| 3525 | "%s bss table entry %p: mode didn't match", | ||
| 3526 | priv->netdev->name, ptr); | ||
| 3527 | return ret; | ||
| 3528 | } | ||
| 3529 | |||
| 3530 | static int at76_match_rates(struct at76_priv *priv, struct bss_info *ptr) | ||
| 3531 | { | ||
| 3532 | int i; | ||
| 3533 | |||
| 3534 | for (i = 0; i < ptr->rates_len; i++) { | ||
| 3535 | u8 rate = ptr->rates[i]; | ||
| 3536 | |||
| 3537 | if (!(rate & 0x80)) | ||
| 3538 | continue; | ||
| 3539 | |||
| 3540 | /* this is a basic rate we have to support | ||
| 3541 | (see IEEE802.11, ch. 7.3.2.2) */ | ||
| 3542 | if (rate != (0x80 | hw_rates[0]) | ||
| 3543 | && rate != (0x80 | hw_rates[1]) | ||
| 3544 | && rate != (0x80 | hw_rates[2]) | ||
| 3545 | && rate != (0x80 | hw_rates[3])) { | ||
| 3546 | at76_dbg(DBG_BSS_MATCH, | ||
| 3547 | "%s: bss table entry %p: basic rate %02x not " | ||
| 3548 | "supported", priv->netdev->name, ptr, rate); | ||
| 3549 | return 0; | ||
| 3550 | } | ||
| 3551 | } | ||
| 3552 | |||
| 3553 | /* if we use short preamble, the bss must support it */ | ||
| 3554 | if (priv->preamble_type == PREAMBLE_TYPE_SHORT && | ||
| 3555 | !(ptr->capa & WLAN_CAPABILITY_SHORT_PREAMBLE)) { | ||
| 3556 | at76_dbg(DBG_BSS_MATCH, | ||
| 3557 | "%s: %p does not support short preamble", | ||
| 3558 | priv->netdev->name, ptr); | ||
| 3559 | return 0; | ||
| 3560 | } else | ||
| 3561 | return 1; | ||
| 3562 | } | ||
| 3563 | |||
| 3564 | static inline int at76_match_wep(struct at76_priv *priv, struct bss_info *ptr) | ||
| 3565 | { | ||
| 3566 | if (!priv->wep_enabled && ptr->capa & WLAN_CAPABILITY_PRIVACY) { | ||
| 3567 | /* we have disabled WEP, but the BSS signals privacy */ | ||
| 3568 | at76_dbg(DBG_BSS_MATCH, | ||
| 3569 | "%s: bss table entry %p: requires encryption", | ||
| 3570 | priv->netdev->name, ptr); | ||
| 3571 | return 0; | ||
| 3572 | } | ||
| 3573 | /* otherwise if the BSS does not signal privacy it may well | ||
| 3574 | accept encrypted packets from us ... */ | ||
| 3575 | return 1; | ||
| 3576 | } | ||
| 3577 | |||
| 3578 | static inline int at76_match_bssid(struct at76_priv *priv, struct bss_info *ptr) | ||
| 3579 | { | ||
| 3580 | if (!priv->wanted_bssid_valid || | ||
| 3581 | !compare_ether_addr(ptr->bssid, priv->wanted_bssid)) | ||
| 3582 | return 1; | ||
| 3583 | |||
| 3584 | at76_dbg(DBG_BSS_MATCH, | ||
| 3585 | "%s: requested bssid - %s does not match", | ||
| 3586 | priv->netdev->name, mac2str(priv->wanted_bssid)); | ||
| 3587 | at76_dbg(DBG_BSS_MATCH, | ||
| 3588 | " AP bssid - %s of bss table entry %p", | ||
| 3589 | mac2str(ptr->bssid), ptr); | ||
| 3590 | return 0; | ||
| 3591 | } | ||
| 3592 | |||
| 3593 | /** | ||
| 3594 | * at76_match_bss - try to find a matching bss in priv->bss | ||
| 3595 | * | ||
| 3596 | * last - last bss tried | ||
| 3597 | * | ||
| 3598 | * last == NULL signals a new round starting with priv->bss_list.next | ||
| 3599 | * this function must be called inside an acquired priv->bss_list_spinlock | ||
| 3600 | * otherwise the timeout on bss may remove the newly chosen entry | ||
| 3601 | */ | ||
| 3602 | static struct bss_info *at76_match_bss(struct at76_priv *priv, | ||
| 3603 | struct bss_info *last) | ||
| 3604 | { | ||
| 3605 | struct bss_info *ptr = NULL; | ||
| 3606 | struct list_head *curr; | ||
| 3607 | |||
| 3608 | curr = last ? last->list.next : priv->bss_list.next; | ||
| 3609 | while (curr != &priv->bss_list) { | ||
| 3610 | ptr = list_entry(curr, struct bss_info, list); | ||
| 3611 | if (at76_match_essid(priv, ptr) && at76_match_mode(priv, ptr) | ||
| 3612 | && at76_match_wep(priv, ptr) && at76_match_rates(priv, ptr) | ||
| 3613 | && at76_match_bssid(priv, ptr)) | ||
| 3614 | break; | ||
| 3615 | curr = curr->next; | ||
| 3616 | } | ||
| 3617 | |||
| 3618 | if (curr == &priv->bss_list) | ||
| 3619 | ptr = NULL; | ||
| 3620 | /* otherwise ptr points to the struct bss_info we have chosen */ | ||
| 3621 | |||
| 3622 | at76_dbg(DBG_BSS_TABLE, "%s %s: returned %p", priv->netdev->name, | ||
| 3623 | __func__, ptr); | ||
| 3624 | return ptr; | ||
| 3625 | } | ||
| 3626 | |||
| 3627 | /* Start joining a matching BSS, or create own IBSS */ | ||
| 3628 | static void at76_work_join(struct work_struct *work) | ||
| 3629 | { | ||
| 3630 | struct at76_priv *priv = container_of(work, struct at76_priv, | ||
| 3631 | work_join); | ||
| 3632 | int ret; | ||
| 3633 | unsigned long flags; | ||
| 3634 | |||
| 3635 | mutex_lock(&priv->mtx); | ||
| 3636 | |||
| 3637 | WARN_ON(priv->mac_state != MAC_JOINING); | ||
| 3638 | if (priv->mac_state != MAC_JOINING) | ||
| 3639 | goto exit; | ||
| 3640 | |||
| 3641 | /* secure the access to priv->curr_bss ! */ | ||
| 3642 | spin_lock_irqsave(&priv->bss_list_spinlock, flags); | ||
| 3643 | priv->curr_bss = at76_match_bss(priv, priv->curr_bss); | ||
| 3644 | spin_unlock_irqrestore(&priv->bss_list_spinlock, flags); | ||
| 3645 | |||
| 3646 | if (!priv->curr_bss) { | ||
| 3647 | /* here we haven't found a matching (i)bss ... */ | ||
| 3648 | if (priv->iw_mode == IW_MODE_ADHOC) { | ||
| 3649 | at76_set_mac_state(priv, MAC_OWN_IBSS); | ||
| 3650 | at76_start_ibss(priv); | ||
| 3651 | goto exit; | ||
| 3652 | } | ||
| 3653 | /* haven't found a matching BSS in infra mode - try again */ | ||
| 3654 | at76_set_mac_state(priv, MAC_SCANNING); | ||
| 3655 | schedule_work(&priv->work_start_scan); | ||
| 3656 | goto exit; | ||
| 3657 | } | ||
| 3658 | |||
| 3659 | ret = at76_join_bss(priv, priv->curr_bss); | ||
| 3660 | if (ret < 0) { | ||
| 3661 | printk(KERN_ERR "%s: join_bss failed with %d\n", | ||
| 3662 | priv->netdev->name, ret); | ||
| 3663 | goto exit; | ||
| 3664 | } | ||
| 3665 | |||
| 3666 | ret = at76_wait_completion(priv, CMD_JOIN); | ||
| 3667 | if (ret != CMD_STATUS_COMPLETE) { | ||
| 3668 | if (ret != CMD_STATUS_TIME_OUT) | ||
| 3669 | printk(KERN_ERR "%s: join_bss completed with %d\n", | ||
| 3670 | priv->netdev->name, ret); | ||
| 3671 | else | ||
| 3672 | printk(KERN_INFO "%s: join_bss ssid %s timed out\n", | ||
| 3673 | priv->netdev->name, | ||
| 3674 | mac2str(priv->curr_bss->bssid)); | ||
| 3675 | |||
| 3676 | /* retry next BSS immediately */ | ||
| 3677 | schedule_work(&priv->work_join); | ||
| 3678 | goto exit; | ||
| 3679 | } | ||
| 3680 | |||
| 3681 | /* here we have joined the (I)BSS */ | ||
| 3682 | if (priv->iw_mode == IW_MODE_ADHOC) { | ||
| 3683 | struct bss_info *bptr = priv->curr_bss; | ||
| 3684 | at76_set_mac_state(priv, MAC_CONNECTED); | ||
| 3685 | /* get ESSID, BSSID and channel for priv->curr_bss */ | ||
| 3686 | priv->essid_size = bptr->ssid_len; | ||
| 3687 | memcpy(priv->essid, bptr->ssid, bptr->ssid_len); | ||
| 3688 | memcpy(priv->bssid, bptr->bssid, ETH_ALEN); | ||
| 3689 | priv->channel = bptr->channel; | ||
| 3690 | at76_iwevent_bss_connect(priv->netdev, bptr->bssid); | ||
| 3691 | netif_carrier_on(priv->netdev); | ||
| 3692 | netif_start_queue(priv->netdev); | ||
| 3693 | /* just to be sure */ | ||
| 3694 | cancel_delayed_work(&priv->dwork_get_scan); | ||
| 3695 | cancel_delayed_work(&priv->dwork_auth); | ||
| 3696 | cancel_delayed_work(&priv->dwork_assoc); | ||
| 3697 | } else { | ||
| 3698 | /* send auth req */ | ||
| 3699 | priv->retries = AUTH_RETRIES; | ||
| 3700 | at76_set_mac_state(priv, MAC_AUTH); | ||
| 3701 | at76_auth_req(priv, priv->curr_bss, 1, NULL); | ||
| 3702 | at76_dbg(DBG_MGMT_TIMER, | ||
| 3703 | "%s:%d: starting mgmt_timer + HZ", __func__, __LINE__); | ||
| 3704 | schedule_delayed_work(&priv->dwork_auth, AUTH_TIMEOUT); | ||
| 3705 | } | ||
| 3706 | |||
| 3707 | exit: | ||
| 3708 | mutex_unlock(&priv->mtx); | ||
| 3709 | } | ||
| 3710 | |||
| 3711 | /* Reap scan results */ | ||
| 3712 | static void at76_dwork_get_scan(struct work_struct *work) | ||
| 3713 | { | ||
| 3714 | int status; | ||
| 3715 | int ret; | ||
| 3716 | struct at76_priv *priv = container_of(work, struct at76_priv, | ||
| 3717 | dwork_get_scan.work); | ||
| 3718 | |||
| 3719 | mutex_lock(&priv->mtx); | ||
| 3720 | WARN_ON(priv->mac_state != MAC_SCANNING); | ||
| 3721 | if (priv->mac_state != MAC_SCANNING) | ||
| 3722 | goto exit; | ||
| 3723 | |||
| 3724 | status = at76_get_cmd_status(priv->udev, CMD_SCAN); | ||
| 3725 | if (status < 0) { | ||
| 3726 | printk(KERN_ERR "%s: %s: at76_get_cmd_status failed with %d\n", | ||
| 3727 | priv->netdev->name, __func__, status); | ||
| 3728 | status = CMD_STATUS_IN_PROGRESS; | ||
| 3729 | /* INFO: Hope it was a one off error - if not, scanning | ||
| 3730 | further down the line and stop this cycle */ | ||
| 3731 | } | ||
| 3732 | at76_dbg(DBG_PROGRESS, | ||
| 3733 | "%s %s: got cmd_status %d (state %s, need_any %d)", | ||
| 3734 | priv->netdev->name, __func__, status, | ||
| 3735 | mac_states[priv->mac_state], priv->scan_need_any); | ||
| 3736 | |||
| 3737 | if (status != CMD_STATUS_COMPLETE) { | ||
| 3738 | if ((status != CMD_STATUS_IN_PROGRESS) && | ||
| 3739 | (status != CMD_STATUS_IDLE)) | ||
| 3740 | printk(KERN_ERR "%s: %s: Bad scan status: %s\n", | ||
| 3741 | priv->netdev->name, __func__, | ||
| 3742 | at76_get_cmd_status_string(status)); | ||
| 3743 | |||
| 3744 | /* the first cmd status after scan start is always a IDLE -> | ||
| 3745 | start the timer to poll again until COMPLETED */ | ||
| 3746 | at76_dbg(DBG_MGMT_TIMER, | ||
| 3747 | "%s:%d: starting mgmt_timer for %d ticks", | ||
| 3748 | __func__, __LINE__, SCAN_POLL_INTERVAL); | ||
| 3749 | schedule_delayed_work(&priv->dwork_get_scan, | ||
| 3750 | SCAN_POLL_INTERVAL); | ||
| 3751 | goto exit; | ||
| 3752 | } | ||
| 3753 | |||
| 3754 | if (at76_debug & DBG_BSS_TABLE) | ||
| 3755 | at76_dump_bss_table(priv); | ||
| 3756 | |||
| 3757 | if (priv->scan_need_any) { | ||
| 3758 | ret = at76_start_scan(priv, 0); | ||
| 3759 | if (ret < 0) | ||
| 3760 | printk(KERN_ERR | ||
| 3761 | "%s: %s: start_scan (ANY) failed with %d\n", | ||
| 3762 | priv->netdev->name, __func__, ret); | ||
| 3763 | at76_dbg(DBG_MGMT_TIMER, | ||
| 3764 | "%s:%d: starting mgmt_timer for %d ticks", __func__, | ||
| 3765 | __LINE__, SCAN_POLL_INTERVAL); | ||
| 3766 | schedule_delayed_work(&priv->dwork_get_scan, | ||
| 3767 | SCAN_POLL_INTERVAL); | ||
| 3768 | priv->scan_need_any = 0; | ||
| 3769 | } else { | ||
| 3770 | priv->scan_state = SCAN_COMPLETED; | ||
| 3771 | /* report the end of scan to user space */ | ||
| 3772 | at76_iwevent_scan_complete(priv->netdev); | ||
| 3773 | at76_set_mac_state(priv, MAC_JOINING); | ||
| 3774 | schedule_work(&priv->work_join); | ||
| 3775 | } | ||
| 3776 | |||
| 3777 | exit: | ||
| 3778 | mutex_unlock(&priv->mtx); | ||
| 3779 | } | ||
| 3780 | |||
| 3781 | /* Handle loss of beacons from the AP */ | ||
| 3782 | static void at76_dwork_beacon(struct work_struct *work) | ||
| 3783 | { | ||
| 3784 | struct at76_priv *priv = container_of(work, struct at76_priv, | ||
| 3785 | dwork_beacon.work); | ||
| 3786 | |||
| 3787 | mutex_lock(&priv->mtx); | ||
| 3788 | if (priv->mac_state != MAC_CONNECTED || priv->iw_mode != IW_MODE_INFRA) | ||
| 3789 | goto exit; | ||
| 3790 | |||
| 3791 | /* We haven't received any beacons from out AP for BEACON_TIMEOUT */ | ||
| 3792 | printk(KERN_INFO "%s: lost beacon bssid %s\n", | ||
| 3793 | priv->netdev->name, mac2str(priv->curr_bss->bssid)); | ||
| 3794 | |||
| 3795 | netif_carrier_off(priv->netdev); | ||
| 3796 | netif_stop_queue(priv->netdev); | ||
| 3797 | at76_iwevent_bss_disconnect(priv->netdev); | ||
| 3798 | at76_set_mac_state(priv, MAC_SCANNING); | ||
| 3799 | schedule_work(&priv->work_start_scan); | ||
| 3800 | |||
| 3801 | exit: | ||
| 3802 | mutex_unlock(&priv->mtx); | ||
| 3803 | } | ||
| 3804 | |||
| 3805 | /* Handle authentication response timeout */ | ||
| 3806 | static void at76_dwork_auth(struct work_struct *work) | ||
| 3807 | { | ||
| 3808 | struct at76_priv *priv = container_of(work, struct at76_priv, | ||
| 3809 | dwork_auth.work); | ||
| 3810 | |||
| 3811 | mutex_lock(&priv->mtx); | ||
| 3812 | WARN_ON(priv->mac_state != MAC_AUTH); | ||
| 3813 | if (priv->mac_state != MAC_AUTH) | ||
| 3814 | goto exit; | ||
| 3815 | |||
| 3816 | at76_dbg(DBG_PROGRESS, "%s: authentication response timeout", | ||
| 3817 | priv->netdev->name); | ||
| 3818 | |||
| 3819 | if (priv->retries-- >= 0) { | ||
| 3820 | at76_auth_req(priv, priv->curr_bss, 1, NULL); | ||
| 3821 | at76_dbg(DBG_MGMT_TIMER, "%s:%d: starting mgmt_timer + HZ", | ||
| 3822 | __func__, __LINE__); | ||
| 3823 | schedule_delayed_work(&priv->dwork_auth, AUTH_TIMEOUT); | ||
| 3824 | } else { | ||
| 3825 | /* try to get next matching BSS */ | ||
| 3826 | at76_set_mac_state(priv, MAC_JOINING); | ||
| 3827 | schedule_work(&priv->work_join); | ||
| 3828 | } | ||
| 3829 | |||
| 3830 | exit: | ||
| 3831 | mutex_unlock(&priv->mtx); | ||
| 3832 | } | ||
| 3833 | |||
| 3834 | /* Handle association response timeout */ | ||
| 3835 | static void at76_dwork_assoc(struct work_struct *work) | ||
| 3836 | { | ||
| 3837 | struct at76_priv *priv = container_of(work, struct at76_priv, | ||
| 3838 | dwork_assoc.work); | ||
| 3839 | |||
| 3840 | mutex_lock(&priv->mtx); | ||
| 3841 | WARN_ON(priv->mac_state != MAC_ASSOC); | ||
| 3842 | if (priv->mac_state != MAC_ASSOC) | ||
| 3843 | goto exit; | ||
| 3844 | |||
| 3845 | at76_dbg(DBG_PROGRESS, "%s: association response timeout", | ||
| 3846 | priv->netdev->name); | ||
| 3847 | |||
| 3848 | if (priv->retries-- >= 0) { | ||
| 3849 | at76_assoc_req(priv, priv->curr_bss); | ||
| 3850 | at76_dbg(DBG_MGMT_TIMER, "%s:%d: starting mgmt_timer + HZ", | ||
| 3851 | __func__, __LINE__); | ||
| 3852 | schedule_delayed_work(&priv->dwork_assoc, ASSOC_TIMEOUT); | ||
| 3853 | } else { | ||
| 3854 | /* try to get next matching BSS */ | ||
| 3855 | at76_set_mac_state(priv, MAC_JOINING); | ||
| 3856 | schedule_work(&priv->work_join); | ||
| 3857 | } | ||
| 3858 | |||
| 3859 | exit: | ||
| 3860 | mutex_unlock(&priv->mtx); | ||
| 3861 | } | ||
| 3862 | |||
| 3863 | /* Read new bssid in ad-hoc mode */ | ||
| 3864 | static void at76_work_new_bss(struct work_struct *work) | ||
| 3865 | { | ||
| 3866 | struct at76_priv *priv = container_of(work, struct at76_priv, | ||
| 3867 | work_new_bss); | ||
| 3868 | int ret; | ||
| 3869 | struct mib_mac_mgmt mac_mgmt; | ||
| 3870 | |||
| 3871 | mutex_lock(&priv->mtx); | ||
| 3872 | |||
| 3873 | ret = at76_get_mib(priv->udev, MIB_MAC_MGMT, &mac_mgmt, | ||
| 3874 | sizeof(struct mib_mac_mgmt)); | ||
| 3875 | if (ret < 0) { | ||
| 3876 | printk(KERN_ERR "%s: at76_get_mib failed: %d\n", | ||
| 3877 | priv->netdev->name, ret); | ||
| 3878 | goto exit; | ||
| 3879 | } | ||
| 3880 | |||
| 3881 | at76_dbg(DBG_PROGRESS, "ibss_change = 0x%2x", mac_mgmt.ibss_change); | ||
| 3882 | memcpy(priv->bssid, mac_mgmt.current_bssid, ETH_ALEN); | ||
| 3883 | at76_dbg(DBG_PROGRESS, "using BSSID %s", mac2str(priv->bssid)); | ||
| 3884 | |||
| 3885 | at76_iwevent_bss_connect(priv->netdev, priv->bssid); | ||
| 3886 | |||
| 3887 | priv->mib_buf.type = MIB_MAC_MGMT; | ||
| 3888 | priv->mib_buf.size = 1; | ||
| 3889 | priv->mib_buf.index = offsetof(struct mib_mac_mgmt, ibss_change); | ||
| 3890 | priv->mib_buf.data.byte = 0; | ||
| 3891 | |||
| 3892 | ret = at76_set_mib(priv, &priv->mib_buf); | ||
| 3893 | if (ret < 0) | ||
| 3894 | printk(KERN_ERR "%s: set_mib (ibss change ok) failed: %d\n", | ||
| 3895 | priv->netdev->name, ret); | ||
| 3896 | |||
| 3897 | exit: | ||
| 3898 | mutex_unlock(&priv->mtx); | ||
| 3899 | } | ||
| 3900 | |||
| 1466 | static int at76_startup_device(struct at76_priv *priv) | 3901 | static int at76_startup_device(struct at76_priv *priv) |
| 1467 | { | 3902 | { |
| 1468 | struct at76_card_config *ccfg = &priv->card_config; | 3903 | struct at76_card_config *ccfg = &priv->card_config; |
| @@ -1470,14 +3905,14 @@ static int at76_startup_device(struct at76_priv *priv) | |||
| 1470 | 3905 | ||
| 1471 | at76_dbg(DBG_PARAMS, | 3906 | at76_dbg(DBG_PARAMS, |
| 1472 | "%s param: ssid %.*s (%s) mode %s ch %d wep %s key %d " | 3907 | "%s param: ssid %.*s (%s) mode %s ch %d wep %s key %d " |
| 1473 | "keylen %d", wiphy_name(priv->hw->wiphy), priv->essid_size, | 3908 | "keylen %d", priv->netdev->name, priv->essid_size, priv->essid, |
| 1474 | priv->essid, hex2str(priv->essid, IW_ESSID_MAX_SIZE), | 3909 | hex2str(priv->essid, IW_ESSID_MAX_SIZE), |
| 1475 | priv->iw_mode == IW_MODE_ADHOC ? "adhoc" : "infra", | 3910 | priv->iw_mode == IW_MODE_ADHOC ? "adhoc" : "infra", |
| 1476 | priv->channel, priv->wep_enabled ? "enabled" : "disabled", | 3911 | priv->channel, priv->wep_enabled ? "enabled" : "disabled", |
| 1477 | priv->wep_key_id, priv->wep_keys_len[priv->wep_key_id]); | 3912 | priv->wep_key_id, priv->wep_keys_len[priv->wep_key_id]); |
| 1478 | at76_dbg(DBG_PARAMS, | 3913 | at76_dbg(DBG_PARAMS, |
| 1479 | "%s param: preamble %s rts %d retry %d frag %d " | 3914 | "%s param: preamble %s rts %d retry %d frag %d " |
| 1480 | "txrate %s auth_mode %d", wiphy_name(priv->hw->wiphy), | 3915 | "txrate %s auth_mode %d", priv->netdev->name, |
| 1481 | preambles[priv->preamble_type], priv->rts_threshold, | 3916 | preambles[priv->preamble_type], priv->rts_threshold, |
| 1482 | priv->short_retry_limit, priv->frag_threshold, | 3917 | priv->short_retry_limit, priv->frag_threshold, |
| 1483 | priv->txrate == TX_RATE_1MBIT ? "1MBit" : priv->txrate == | 3918 | priv->txrate == TX_RATE_1MBIT ? "1MBit" : priv->txrate == |
| @@ -1488,7 +3923,7 @@ static int at76_startup_device(struct at76_priv *priv) | |||
| 1488 | at76_dbg(DBG_PARAMS, | 3923 | at76_dbg(DBG_PARAMS, |
| 1489 | "%s param: pm_mode %d pm_period %d auth_mode %s " | 3924 | "%s param: pm_mode %d pm_period %d auth_mode %s " |
| 1490 | "scan_times %d %d scan_mode %s", | 3925 | "scan_times %d %d scan_mode %s", |
| 1491 | wiphy_name(priv->hw->wiphy), priv->pm_mode, priv->pm_period, | 3926 | priv->netdev->name, priv->pm_mode, priv->pm_period, |
| 1492 | priv->auth_mode == WLAN_AUTH_OPEN ? "open" : "shared_secret", | 3927 | priv->auth_mode == WLAN_AUTH_OPEN ? "open" : "shared_secret", |
| 1493 | priv->scan_min_time, priv->scan_max_time, | 3928 | priv->scan_min_time, priv->scan_max_time, |
| 1494 | priv->scan_mode == SCAN_TYPE_ACTIVE ? "active" : "passive"); | 3929 | priv->scan_mode == SCAN_TYPE_ACTIVE ? "active" : "passive"); |
| @@ -1522,8 +3957,7 @@ static int at76_startup_device(struct at76_priv *priv) | |||
| 1522 | ccfg->ssid_len = priv->essid_size; | 3957 | ccfg->ssid_len = priv->essid_size; |
| 1523 | 3958 | ||
| 1524 | ccfg->wep_default_key_id = priv->wep_key_id; | 3959 | ccfg->wep_default_key_id = priv->wep_key_id; |
| 1525 | memcpy(ccfg->wep_default_key_value, priv->wep_keys, | 3960 | memcpy(ccfg->wep_default_key_value, priv->wep_keys, 4 * WEP_KEY_LEN); |
| 1526 | sizeof(priv->wep_keys)); | ||
| 1527 | 3961 | ||
| 1528 | ccfg->short_preamble = priv->preamble_type; | 3962 | ccfg->short_preamble = priv->preamble_type; |
| 1529 | ccfg->beacon_period = cpu_to_le16(priv->beacon_period); | 3963 | ccfg->beacon_period = cpu_to_le16(priv->beacon_period); |
| @@ -1532,7 +3966,7 @@ static int at76_startup_device(struct at76_priv *priv) | |||
| 1532 | sizeof(struct at76_card_config)); | 3966 | sizeof(struct at76_card_config)); |
| 1533 | if (ret < 0) { | 3967 | if (ret < 0) { |
| 1534 | printk(KERN_ERR "%s: at76_set_card_command failed: %d\n", | 3968 | printk(KERN_ERR "%s: at76_set_card_command failed: %d\n", |
| 1535 | wiphy_name(priv->hw->wiphy), ret); | 3969 | priv->netdev->name, ret); |
| 1536 | return ret; | 3970 | return ret; |
| 1537 | } | 3971 | } |
| 1538 | 3972 | ||
| @@ -1578,6 +4012,69 @@ static int at76_startup_device(struct at76_priv *priv) | |||
| 1578 | return 0; | 4012 | return 0; |
| 1579 | } | 4013 | } |
| 1580 | 4014 | ||
| 4015 | /* Restart the interface */ | ||
| 4016 | static void at76_dwork_restart(struct work_struct *work) | ||
| 4017 | { | ||
| 4018 | struct at76_priv *priv = container_of(work, struct at76_priv, | ||
| 4019 | dwork_restart.work); | ||
| 4020 | |||
| 4021 | mutex_lock(&priv->mtx); | ||
| 4022 | |||
| 4023 | netif_carrier_off(priv->netdev); /* stop netdev watchdog */ | ||
| 4024 | netif_stop_queue(priv->netdev); /* stop tx data packets */ | ||
| 4025 | |||
| 4026 | at76_startup_device(priv); | ||
| 4027 | |||
| 4028 | if (priv->iw_mode != IW_MODE_MONITOR) { | ||
| 4029 | priv->netdev->type = ARPHRD_ETHER; | ||
| 4030 | at76_set_mac_state(priv, MAC_SCANNING); | ||
| 4031 | schedule_work(&priv->work_start_scan); | ||
| 4032 | } else { | ||
| 4033 | priv->netdev->type = ARPHRD_IEEE80211_RADIOTAP; | ||
| 4034 | at76_start_monitor(priv); | ||
| 4035 | } | ||
| 4036 | |||
| 4037 | mutex_unlock(&priv->mtx); | ||
| 4038 | } | ||
| 4039 | |||
| 4040 | /* Initiate scanning */ | ||
| 4041 | static void at76_work_start_scan(struct work_struct *work) | ||
| 4042 | { | ||
| 4043 | struct at76_priv *priv = container_of(work, struct at76_priv, | ||
| 4044 | work_start_scan); | ||
| 4045 | int ret; | ||
| 4046 | |||
| 4047 | mutex_lock(&priv->mtx); | ||
| 4048 | |||
| 4049 | WARN_ON(priv->mac_state != MAC_SCANNING); | ||
| 4050 | if (priv->mac_state != MAC_SCANNING) | ||
| 4051 | goto exit; | ||
| 4052 | |||
| 4053 | /* only clear the bss list when a scan is actively initiated, | ||
| 4054 | * otherwise simply rely on at76_bss_list_timeout */ | ||
| 4055 | if (priv->scan_state == SCAN_IN_PROGRESS) { | ||
| 4056 | at76_free_bss_list(priv); | ||
| 4057 | priv->scan_need_any = 1; | ||
| 4058 | } else | ||
| 4059 | priv->scan_need_any = 0; | ||
| 4060 | |||
| 4061 | ret = at76_start_scan(priv, 1); | ||
| 4062 | |||
| 4063 | if (ret < 0) | ||
| 4064 | printk(KERN_ERR "%s: %s: start_scan failed with %d\n", | ||
| 4065 | priv->netdev->name, __func__, ret); | ||
| 4066 | else { | ||
| 4067 | at76_dbg(DBG_MGMT_TIMER, | ||
| 4068 | "%s:%d: starting mgmt_timer for %d ticks", | ||
| 4069 | __func__, __LINE__, SCAN_POLL_INTERVAL); | ||
| 4070 | schedule_delayed_work(&priv->dwork_get_scan, | ||
| 4071 | SCAN_POLL_INTERVAL); | ||
| 4072 | } | ||
| 4073 | |||
| 4074 | exit: | ||
| 4075 | mutex_unlock(&priv->mtx); | ||
| 4076 | } | ||
| 4077 | |||
| 1581 | /* Enable or disable promiscuous mode */ | 4078 | /* Enable or disable promiscuous mode */ |
| 1582 | static void at76_work_set_promisc(struct work_struct *work) | 4079 | static void at76_work_set_promisc(struct work_struct *work) |
| 1583 | { | 4080 | { |
| @@ -1595,7 +4092,7 @@ static void at76_work_set_promisc(struct work_struct *work) | |||
| 1595 | ret = at76_set_mib(priv, &priv->mib_buf); | 4092 | ret = at76_set_mib(priv, &priv->mib_buf); |
| 1596 | if (ret < 0) | 4093 | if (ret < 0) |
| 1597 | printk(KERN_ERR "%s: set_mib (promiscuous_mode) failed: %d\n", | 4094 | printk(KERN_ERR "%s: set_mib (promiscuous_mode) failed: %d\n", |
| 1598 | wiphy_name(priv->hw->wiphy), ret); | 4095 | priv->netdev->name, ret); |
| 1599 | 4096 | ||
| 1600 | mutex_unlock(&priv->mtx); | 4097 | mutex_unlock(&priv->mtx); |
| 1601 | } | 4098 | } |
| @@ -1611,759 +4108,1088 @@ static void at76_work_submit_rx(struct work_struct *work) | |||
| 1611 | mutex_unlock(&priv->mtx); | 4108 | mutex_unlock(&priv->mtx); |
| 1612 | } | 4109 | } |
| 1613 | 4110 | ||
| 1614 | static void at76_rx_tasklet(unsigned long param) | 4111 | /* We got an association response */ |
| 4112 | static void at76_rx_mgmt_assoc(struct at76_priv *priv, | ||
| 4113 | struct at76_rx_buffer *buf) | ||
| 1615 | { | 4114 | { |
| 1616 | struct urb *urb = (struct urb *)param; | 4115 | struct ieee80211_assoc_response *resp = |
| 1617 | struct at76_priv *priv = urb->context; | 4116 | (struct ieee80211_assoc_response *)buf->packet; |
| 1618 | struct at76_rx_buffer *buf; | 4117 | u16 assoc_id = le16_to_cpu(resp->aid); |
| 1619 | struct ieee80211_rx_status rx_status = { 0 }; | 4118 | u16 status = le16_to_cpu(resp->status); |
| 1620 | 4119 | ||
| 1621 | if (priv->device_unplugged) { | 4120 | at76_dbg(DBG_RX_MGMT, "%s: rx AssocResp bssid %s capa 0x%04x status " |
| 1622 | at76_dbg(DBG_DEVSTART, "device unplugged"); | 4121 | "0x%04x assoc_id 0x%04x rates %s", priv->netdev->name, |
| 1623 | if (urb) | 4122 | mac2str(resp->header.addr3), le16_to_cpu(resp->capability), |
| 1624 | at76_dbg(DBG_DEVSTART, "urb status %d", urb->status); | 4123 | status, assoc_id, hex2str(resp->info_element->data, |
| 4124 | resp->info_element->len)); | ||
| 4125 | |||
| 4126 | if (priv->mac_state != MAC_ASSOC) { | ||
| 4127 | printk(KERN_INFO "%s: AssocResp in state %s ignored\n", | ||
| 4128 | priv->netdev->name, mac_states[priv->mac_state]); | ||
| 1625 | return; | 4129 | return; |
| 1626 | } | 4130 | } |
| 1627 | 4131 | ||
| 1628 | if (!priv->rx_skb || !priv->rx_skb->data) | 4132 | BUG_ON(!priv->curr_bss); |
| 1629 | return; | 4133 | |
| 1630 | 4134 | cancel_delayed_work(&priv->dwork_assoc); | |
| 1631 | buf = (struct at76_rx_buffer *)priv->rx_skb->data; | 4135 | if (status == WLAN_STATUS_SUCCESS) { |
| 1632 | 4136 | struct bss_info *ptr = priv->curr_bss; | |
| 1633 | if (urb->status != 0) { | 4137 | priv->assoc_id = assoc_id & 0x3fff; |
| 1634 | if (urb->status != -ENOENT && urb->status != -ECONNRESET) | 4138 | /* update iwconfig params */ |
| 1635 | at76_dbg(DBG_URB, | 4139 | memcpy(priv->bssid, ptr->bssid, ETH_ALEN); |
| 1636 | "%s %s: - nonzero Rx bulk status received: %d", | 4140 | memcpy(priv->essid, ptr->ssid, ptr->ssid_len); |
| 1637 | __func__, wiphy_name(priv->hw->wiphy), | 4141 | priv->essid_size = ptr->ssid_len; |
| 1638 | urb->status); | 4142 | priv->channel = ptr->channel; |
| 1639 | return; | 4143 | schedule_work(&priv->work_assoc_done); |
| 4144 | } else { | ||
| 4145 | at76_set_mac_state(priv, MAC_JOINING); | ||
| 4146 | schedule_work(&priv->work_join); | ||
| 1640 | } | 4147 | } |
| 4148 | } | ||
| 1641 | 4149 | ||
| 1642 | at76_dbg(DBG_RX_ATMEL_HDR, | 4150 | /* Process disassociation request from the AP */ |
| 1643 | "%s: rx frame: rate %d rssi %d noise %d link %d", | 4151 | static void at76_rx_mgmt_disassoc(struct at76_priv *priv, |
| 1644 | wiphy_name(priv->hw->wiphy), buf->rx_rate, buf->rssi, | 4152 | struct at76_rx_buffer *buf) |
| 1645 | buf->noise_level, buf->link_quality); | 4153 | { |
| 1646 | 4154 | struct ieee80211_disassoc *resp = | |
| 1647 | skb_trim(priv->rx_skb, le16_to_cpu(buf->wlength) + AT76_RX_HDRLEN); | 4155 | (struct ieee80211_disassoc *)buf->packet; |
| 1648 | at76_dbg_dump(DBG_RX_DATA, &priv->rx_skb->data[AT76_RX_HDRLEN], | 4156 | struct ieee80211_hdr_3addr *mgmt = &resp->header; |
| 1649 | priv->rx_skb->len, "RX: len=%d", | 4157 | |
| 1650 | (int)(priv->rx_skb->len - AT76_RX_HDRLEN)); | 4158 | at76_dbg(DBG_RX_MGMT, |
| 4159 | "%s: rx DisAssoc bssid %s reason 0x%04x destination %s", | ||
| 4160 | priv->netdev->name, mac2str(mgmt->addr3), | ||
| 4161 | le16_to_cpu(resp->reason), mac2str(mgmt->addr1)); | ||
| 4162 | |||
| 4163 | /* We are not connected, ignore */ | ||
| 4164 | if (priv->mac_state == MAC_SCANNING || priv->mac_state == MAC_INIT | ||
| 4165 | || !priv->curr_bss) | ||
| 4166 | return; | ||
| 1651 | 4167 | ||
| 1652 | rx_status.signal = buf->rssi; | 4168 | /* Not our BSSID, ignore */ |
| 1653 | /* FIXME: is rate_idx still present in structure? */ | 4169 | if (compare_ether_addr(mgmt->addr3, priv->curr_bss->bssid)) |
| 1654 | rx_status.rate_idx = buf->rx_rate; | 4170 | return; |
| 1655 | rx_status.flag |= RX_FLAG_DECRYPTED; | ||
| 1656 | rx_status.flag |= RX_FLAG_IV_STRIPPED; | ||
| 1657 | 4171 | ||
| 1658 | skb_pull(priv->rx_skb, AT76_RX_HDRLEN); | 4172 | /* Not for our STA and not broadcast, ignore */ |
| 1659 | at76_dbg(DBG_MAC80211, "calling ieee80211_rx_irqsafe(): %d/%d", | 4173 | if (compare_ether_addr(priv->netdev->dev_addr, mgmt->addr1) |
| 1660 | priv->rx_skb->len, priv->rx_skb->data_len); | 4174 | && !is_broadcast_ether_addr(mgmt->addr1)) |
| 1661 | ieee80211_rx_irqsafe(priv->hw, priv->rx_skb, &rx_status); | 4175 | return; |
| 1662 | 4176 | ||
| 1663 | /* Use a new skb for the next receive */ | 4177 | if (priv->mac_state != MAC_ASSOC && priv->mac_state != MAC_CONNECTED |
| 1664 | priv->rx_skb = NULL; | 4178 | && priv->mac_state != MAC_JOINING) { |
| 4179 | printk(KERN_INFO "%s: DisAssoc in state %s ignored\n", | ||
| 4180 | priv->netdev->name, mac_states[priv->mac_state]); | ||
| 4181 | return; | ||
| 4182 | } | ||
| 1665 | 4183 | ||
| 1666 | at76_submit_rx_urb(priv); | 4184 | if (priv->mac_state == MAC_CONNECTED) { |
| 4185 | netif_carrier_off(priv->netdev); | ||
| 4186 | netif_stop_queue(priv->netdev); | ||
| 4187 | at76_iwevent_bss_disconnect(priv->netdev); | ||
| 4188 | } | ||
| 4189 | cancel_delayed_work(&priv->dwork_get_scan); | ||
| 4190 | cancel_delayed_work(&priv->dwork_beacon); | ||
| 4191 | cancel_delayed_work(&priv->dwork_auth); | ||
| 4192 | cancel_delayed_work(&priv->dwork_assoc); | ||
| 4193 | at76_set_mac_state(priv, MAC_JOINING); | ||
| 4194 | schedule_work(&priv->work_join); | ||
| 1667 | } | 4195 | } |
| 1668 | 4196 | ||
| 1669 | /* Load firmware into kernel memory and parse it */ | 4197 | static void at76_rx_mgmt_auth(struct at76_priv *priv, |
| 1670 | static struct fwentry *at76_load_firmware(struct usb_device *udev, | 4198 | struct at76_rx_buffer *buf) |
| 1671 | enum board_type board_type) | ||
| 1672 | { | 4199 | { |
| 1673 | int ret; | 4200 | struct ieee80211_auth *resp = (struct ieee80211_auth *)buf->packet; |
| 1674 | char *str; | 4201 | struct ieee80211_hdr_3addr *mgmt = &resp->header; |
| 1675 | struct at76_fw_header *fwh; | 4202 | int seq_nr = le16_to_cpu(resp->transaction); |
| 1676 | struct fwentry *fwe = &firmwares[board_type]; | 4203 | int alg = le16_to_cpu(resp->algorithm); |
| 1677 | 4204 | int status = le16_to_cpu(resp->status); | |
| 1678 | mutex_lock(&fw_mutex); | 4205 | |
| 1679 | 4206 | at76_dbg(DBG_RX_MGMT, | |
| 1680 | if (fwe->loaded) { | 4207 | "%s: rx AuthFrame bssid %s alg %d seq_nr %d status %d " |
| 1681 | at76_dbg(DBG_FW, "re-using previously loaded fw"); | 4208 | "destination %s", priv->netdev->name, mac2str(mgmt->addr3), |
| 1682 | goto exit; | 4209 | alg, seq_nr, status, mac2str(mgmt->addr1)); |
| 4210 | |||
| 4211 | if (alg == WLAN_AUTH_SHARED_KEY && seq_nr == 2) | ||
| 4212 | at76_dbg(DBG_RX_MGMT, "%s: AuthFrame challenge %s ...", | ||
| 4213 | priv->netdev->name, hex2str(resp->info_element, 18)); | ||
| 4214 | |||
| 4215 | if (priv->mac_state != MAC_AUTH) { | ||
| 4216 | printk(KERN_INFO "%s: ignored AuthFrame in state %s\n", | ||
| 4217 | priv->netdev->name, mac_states[priv->mac_state]); | ||
| 4218 | return; | ||
| 1683 | } | 4219 | } |
| 1684 | 4220 | if (priv->auth_mode != alg) { | |
| 1685 | at76_dbg(DBG_FW, "downloading firmware %s", fwe->fwname); | 4221 | printk(KERN_INFO "%s: ignored AuthFrame for alg %d\n", |
| 1686 | ret = request_firmware(&fwe->fw, fwe->fwname, &udev->dev); | 4222 | priv->netdev->name, alg); |
| 1687 | if (ret < 0) { | 4223 | return; |
| 1688 | dev_printk(KERN_ERR, &udev->dev, "firmware %s not found!\n", | ||
| 1689 | fwe->fwname); | ||
| 1690 | dev_printk(KERN_ERR, &udev->dev, | ||
| 1691 | "you may need to download the firmware from " | ||
| 1692 | "http://developer.berlios.de/projects/at76c503a/\n"); | ||
| 1693 | goto exit; | ||
| 1694 | } | 4224 | } |
| 1695 | 4225 | ||
| 1696 | at76_dbg(DBG_FW, "got it."); | 4226 | BUG_ON(!priv->curr_bss); |
| 1697 | fwh = (struct at76_fw_header *)(fwe->fw->data); | ||
| 1698 | 4227 | ||
| 1699 | if (fwe->fw->size <= sizeof(*fwh)) { | 4228 | /* Not our BSSID or not for our STA, ignore */ |
| 1700 | dev_printk(KERN_ERR, &udev->dev, | 4229 | if (compare_ether_addr(mgmt->addr3, priv->curr_bss->bssid) |
| 1701 | "firmware is too short (0x%zx)\n", fwe->fw->size); | 4230 | || compare_ether_addr(priv->netdev->dev_addr, mgmt->addr1)) |
| 1702 | goto exit; | 4231 | return; |
| 4232 | |||
| 4233 | cancel_delayed_work(&priv->dwork_auth); | ||
| 4234 | if (status != WLAN_STATUS_SUCCESS) { | ||
| 4235 | /* try to join next bss */ | ||
| 4236 | at76_set_mac_state(priv, MAC_JOINING); | ||
| 4237 | schedule_work(&priv->work_join); | ||
| 4238 | return; | ||
| 1703 | } | 4239 | } |
| 1704 | 4240 | ||
| 1705 | /* CRC currently not checked */ | 4241 | if (priv->auth_mode == WLAN_AUTH_OPEN || seq_nr == 4) { |
| 1706 | fwe->board_type = le32_to_cpu(fwh->board_type); | 4242 | priv->retries = ASSOC_RETRIES; |
| 1707 | if (fwe->board_type != board_type) { | 4243 | at76_set_mac_state(priv, MAC_ASSOC); |
| 1708 | dev_printk(KERN_ERR, &udev->dev, | 4244 | at76_assoc_req(priv, priv->curr_bss); |
| 1709 | "board type mismatch, requested %u, got %u\n", | 4245 | at76_dbg(DBG_MGMT_TIMER, |
| 1710 | board_type, fwe->board_type); | 4246 | "%s:%d: starting mgmt_timer + HZ", __func__, __LINE__); |
| 1711 | goto exit; | 4247 | schedule_delayed_work(&priv->dwork_assoc, ASSOC_TIMEOUT); |
| 4248 | return; | ||
| 1712 | } | 4249 | } |
| 1713 | 4250 | ||
| 1714 | fwe->fw_version.major = fwh->major; | 4251 | WARN_ON(seq_nr != 2); |
| 1715 | fwe->fw_version.minor = fwh->minor; | 4252 | at76_auth_req(priv, priv->curr_bss, seq_nr + 1, resp->info_element); |
| 1716 | fwe->fw_version.patch = fwh->patch; | 4253 | at76_dbg(DBG_MGMT_TIMER, "%s:%d: starting mgmt_timer + HZ", __func__, |
| 1717 | fwe->fw_version.build = fwh->build; | 4254 | __LINE__); |
| 4255 | schedule_delayed_work(&priv->dwork_auth, AUTH_TIMEOUT); | ||
| 4256 | } | ||
| 1718 | 4257 | ||
| 1719 | str = (char *)fwh + le32_to_cpu(fwh->str_offset); | 4258 | static void at76_rx_mgmt_deauth(struct at76_priv *priv, |
| 1720 | fwe->intfw = (u8 *)fwh + le32_to_cpu(fwh->int_fw_offset); | 4259 | struct at76_rx_buffer *buf) |
| 1721 | fwe->intfw_size = le32_to_cpu(fwh->int_fw_len); | 4260 | { |
| 1722 | fwe->extfw = (u8 *)fwh + le32_to_cpu(fwh->ext_fw_offset); | 4261 | struct ieee80211_disassoc *resp = |
| 1723 | fwe->extfw_size = le32_to_cpu(fwh->ext_fw_len); | 4262 | (struct ieee80211_disassoc *)buf->packet; |
| 4263 | struct ieee80211_hdr_3addr *mgmt = &resp->header; | ||
| 4264 | |||
| 4265 | at76_dbg(DBG_RX_MGMT | DBG_PROGRESS, | ||
| 4266 | "%s: rx DeAuth bssid %s reason 0x%04x destination %s", | ||
| 4267 | priv->netdev->name, mac2str(mgmt->addr3), | ||
| 4268 | le16_to_cpu(resp->reason), mac2str(mgmt->addr1)); | ||
| 4269 | |||
| 4270 | if (priv->mac_state != MAC_AUTH && priv->mac_state != MAC_ASSOC | ||
| 4271 | && priv->mac_state != MAC_CONNECTED) { | ||
| 4272 | printk(KERN_INFO "%s: DeAuth in state %s ignored\n", | ||
| 4273 | priv->netdev->name, mac_states[priv->mac_state]); | ||
| 4274 | return; | ||
| 4275 | } | ||
| 1724 | 4276 | ||
| 1725 | fwe->loaded = 1; | 4277 | BUG_ON(!priv->curr_bss); |
| 1726 | 4278 | ||
| 1727 | dev_printk(KERN_DEBUG, &udev->dev, | 4279 | /* Not our BSSID, ignore */ |
| 1728 | "using firmware %s (version %d.%d.%d-%d)\n", | 4280 | if (compare_ether_addr(mgmt->addr3, priv->curr_bss->bssid)) |
| 1729 | fwe->fwname, fwh->major, fwh->minor, fwh->patch, fwh->build); | 4281 | return; |
| 1730 | 4282 | ||
| 1731 | at76_dbg(DBG_DEVSTART, "board %u, int %d:%d, ext %d:%d", board_type, | 4283 | /* Not for our STA and not broadcast, ignore */ |
| 1732 | le32_to_cpu(fwh->int_fw_offset), le32_to_cpu(fwh->int_fw_len), | 4284 | if (compare_ether_addr(priv->netdev->dev_addr, mgmt->addr1) |
| 1733 | le32_to_cpu(fwh->ext_fw_offset), le32_to_cpu(fwh->ext_fw_len)); | 4285 | && !is_broadcast_ether_addr(mgmt->addr1)) |
| 1734 | at76_dbg(DBG_DEVSTART, "firmware id %s", str); | 4286 | return; |
| 1735 | 4287 | ||
| 1736 | exit: | 4288 | if (priv->mac_state == MAC_CONNECTED) |
| 1737 | mutex_unlock(&fw_mutex); | 4289 | at76_iwevent_bss_disconnect(priv->netdev); |
| 1738 | 4290 | ||
| 1739 | if (fwe->loaded) | 4291 | at76_set_mac_state(priv, MAC_JOINING); |
| 1740 | return fwe; | 4292 | schedule_work(&priv->work_join); |
| 1741 | else | 4293 | cancel_delayed_work(&priv->dwork_get_scan); |
| 1742 | return NULL; | 4294 | cancel_delayed_work(&priv->dwork_beacon); |
| 4295 | cancel_delayed_work(&priv->dwork_auth); | ||
| 4296 | cancel_delayed_work(&priv->dwork_assoc); | ||
| 1743 | } | 4297 | } |
| 1744 | 4298 | ||
| 1745 | static void at76_mac80211_tx_callback(struct urb *urb) | 4299 | static void at76_rx_mgmt_beacon(struct at76_priv *priv, |
| 4300 | struct at76_rx_buffer *buf) | ||
| 1746 | { | 4301 | { |
| 1747 | struct at76_priv *priv = urb->context; | 4302 | int varpar_len; |
| 1748 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(priv->tx_skb); | 4303 | /* beacon content */ |
| 4304 | struct ieee80211_beacon *bdata = (struct ieee80211_beacon *)buf->packet; | ||
| 4305 | struct ieee80211_hdr_3addr *mgmt = &bdata->header; | ||
| 4306 | |||
| 4307 | struct list_head *lptr; | ||
| 4308 | struct bss_info *match; /* entry matching addr3 with its bssid */ | ||
| 4309 | int new_entry = 0; | ||
| 4310 | int len; | ||
| 4311 | struct ieee80211_info_element *ie; | ||
| 4312 | int have_ssid = 0; | ||
| 4313 | int have_rates = 0; | ||
| 4314 | int have_channel = 0; | ||
| 4315 | int keep_going = 1; | ||
| 4316 | unsigned long flags; | ||
| 4317 | |||
| 4318 | spin_lock_irqsave(&priv->bss_list_spinlock, flags); | ||
| 4319 | if (priv->mac_state == MAC_CONNECTED) { | ||
| 4320 | /* in state MAC_CONNECTED we use the mgmt_timer to control | ||
| 4321 | the beacon of the BSS */ | ||
| 4322 | BUG_ON(!priv->curr_bss); | ||
| 4323 | |||
| 4324 | if (!compare_ether_addr(priv->curr_bss->bssid, mgmt->addr3)) { | ||
| 4325 | /* We got our AP's beacon, defer the timeout handler. | ||
| 4326 | Kill pending work first, as schedule_delayed_work() | ||
| 4327 | won't do it. */ | ||
| 4328 | cancel_delayed_work(&priv->dwork_beacon); | ||
| 4329 | schedule_delayed_work(&priv->dwork_beacon, | ||
| 4330 | BEACON_TIMEOUT); | ||
| 4331 | priv->curr_bss->rssi = buf->rssi; | ||
| 4332 | priv->beacons_received++; | ||
| 4333 | goto exit; | ||
| 4334 | } | ||
| 4335 | } | ||
| 1749 | 4336 | ||
| 1750 | at76_dbg(DBG_MAC80211, "%s()", __func__); | 4337 | /* look if we have this BSS already in the list */ |
| 4338 | match = NULL; | ||
| 1751 | 4339 | ||
| 1752 | switch (urb->status) { | 4340 | if (!list_empty(&priv->bss_list)) { |
| 1753 | case 0: | 4341 | list_for_each(lptr, &priv->bss_list) { |
| 1754 | /* success */ | 4342 | struct bss_info *bss_ptr = |
| 1755 | /* FIXME: | 4343 | list_entry(lptr, struct bss_info, list); |
| 1756 | * is the frame really ACKed when tx_callback is called ? */ | 4344 | if (!compare_ether_addr(bss_ptr->bssid, mgmt->addr3)) { |
| 1757 | info->flags |= IEEE80211_TX_STAT_ACK; | 4345 | match = bss_ptr; |
| 1758 | break; | 4346 | break; |
| 1759 | case -ENOENT: | 4347 | } |
| 1760 | case -ECONNRESET: | 4348 | } |
| 1761 | /* fail, urb has been unlinked */ | ||
| 1762 | /* FIXME: add error message */ | ||
| 1763 | break; | ||
| 1764 | default: | ||
| 1765 | at76_dbg(DBG_URB, "%s - nonzero tx status received: %d", | ||
| 1766 | __func__, urb->status); | ||
| 1767 | break; | ||
| 1768 | } | 4349 | } |
| 1769 | 4350 | ||
| 1770 | memset(&info->status, 0, sizeof(info->status)); | 4351 | if (!match) { |
| 4352 | /* BSS not in the list - append it */ | ||
| 4353 | match = kzalloc(sizeof(struct bss_info), GFP_ATOMIC); | ||
| 4354 | if (!match) { | ||
| 4355 | at76_dbg(DBG_BSS_TABLE, | ||
| 4356 | "%s: cannot kmalloc new bss info (%zd byte)", | ||
| 4357 | priv->netdev->name, sizeof(struct bss_info)); | ||
| 4358 | goto exit; | ||
| 4359 | } | ||
| 4360 | new_entry = 1; | ||
| 4361 | list_add_tail(&match->list, &priv->bss_list); | ||
| 4362 | } | ||
| 1771 | 4363 | ||
| 1772 | ieee80211_tx_status_irqsafe(priv->hw, priv->tx_skb); | 4364 | match->capa = le16_to_cpu(bdata->capability); |
| 4365 | match->beacon_interval = le16_to_cpu(bdata->beacon_interval); | ||
| 4366 | match->rssi = buf->rssi; | ||
| 4367 | match->link_qual = buf->link_quality; | ||
| 4368 | match->noise_level = buf->noise_level; | ||
| 4369 | memcpy(match->bssid, mgmt->addr3, ETH_ALEN); | ||
| 4370 | at76_dbg(DBG_RX_BEACON, "%s: bssid %s", priv->netdev->name, | ||
| 4371 | mac2str(match->bssid)); | ||
| 4372 | |||
| 4373 | ie = bdata->info_element; | ||
| 4374 | |||
| 4375 | /* length of var length beacon parameters */ | ||
| 4376 | varpar_len = min_t(int, le16_to_cpu(buf->wlength) - | ||
| 4377 | sizeof(struct ieee80211_beacon), | ||
| 4378 | BEACON_MAX_DATA_LENGTH); | ||
| 4379 | |||
| 4380 | /* This routine steps through the bdata->data array to get | ||
| 4381 | * some useful information about the access point. | ||
| 4382 | * Currently, this implementation supports receipt of: SSID, | ||
| 4383 | * supported transfer rates and channel, in any order, with some | ||
| 4384 | * tolerance for intermittent unknown codes (although this | ||
| 4385 | * functionality may not be necessary as the useful information will | ||
| 4386 | * usually arrive in consecutively, but there have been some | ||
| 4387 | * reports of some of the useful information fields arriving in a | ||
| 4388 | * different order). | ||
| 4389 | * It does not support any more IE types although MFIE_TYPE_TIM may | ||
| 4390 | * be supported (on my AP at least). | ||
| 4391 | * The bdata->data array is about 1500 bytes long but only ~36 of those | ||
| 4392 | * bytes are useful, hence the have_ssid etc optimizations. */ | ||
| 4393 | |||
| 4394 | while (keep_going && | ||
| 4395 | ((&ie->data[ie->len] - (u8 *)bdata->info_element) <= | ||
| 4396 | varpar_len)) { | ||
| 4397 | |||
| 4398 | switch (ie->id) { | ||
| 4399 | |||
| 4400 | case MFIE_TYPE_SSID: | ||
| 4401 | if (have_ssid) | ||
| 4402 | break; | ||
| 1773 | 4403 | ||
| 1774 | priv->tx_skb = NULL; | 4404 | len = min_t(int, IW_ESSID_MAX_SIZE, ie->len); |
| 1775 | 4405 | ||
| 1776 | ieee80211_wake_queues(priv->hw); | 4406 | /* we copy only if this is a new entry, |
| 1777 | } | 4407 | or the incoming SSID is not a hidden SSID. This |
| 4408 | will protect us from overwriting a real SSID read | ||
| 4409 | in a ProbeResponse with a hidden one from a | ||
| 4410 | following beacon. */ | ||
| 4411 | if (!new_entry && at76_is_hidden_ssid(ie->data, len)) { | ||
| 4412 | have_ssid = 1; | ||
| 4413 | break; | ||
| 4414 | } | ||
| 1778 | 4415 | ||
| 1779 | static int at76_mac80211_tx(struct ieee80211_hw *hw, struct sk_buff *skb) | 4416 | match->ssid_len = len; |
| 1780 | { | 4417 | memcpy(match->ssid, ie->data, len); |
| 1781 | struct at76_priv *priv = hw->priv; | 4418 | at76_dbg(DBG_RX_BEACON, "%s: SSID - %.*s", |
| 1782 | struct at76_tx_buffer *tx_buffer = priv->bulk_out_buffer; | 4419 | priv->netdev->name, len, match->ssid); |
| 1783 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); | 4420 | have_ssid = 1; |
| 1784 | int padding, submit_len, ret; | 4421 | break; |
| 1785 | 4422 | ||
| 1786 | at76_dbg(DBG_MAC80211, "%s()", __func__); | 4423 | case MFIE_TYPE_RATES: |
| 4424 | if (have_rates) | ||
| 4425 | break; | ||
| 1787 | 4426 | ||
| 1788 | if (priv->tx_urb->status == -EINPROGRESS) { | 4427 | match->rates_len = |
| 1789 | printk(KERN_ERR "%s: %s called while tx urb is pending\n", | 4428 | min_t(int, sizeof(match->rates), ie->len); |
| 1790 | wiphy_name(priv->hw->wiphy), __func__); | 4429 | memcpy(match->rates, ie->data, match->rates_len); |
| 1791 | return NETDEV_TX_BUSY; | 4430 | have_rates = 1; |
| 1792 | } | 4431 | at76_dbg(DBG_RX_BEACON, "%s: SUPPORTED RATES %s", |
| 4432 | priv->netdev->name, | ||
| 4433 | hex2str(ie->data, ie->len)); | ||
| 4434 | break; | ||
| 1793 | 4435 | ||
| 1794 | ieee80211_stop_queues(hw); | 4436 | case MFIE_TYPE_DS_SET: |
| 4437 | if (have_channel) | ||
| 4438 | break; | ||
| 1795 | 4439 | ||
| 1796 | at76_ledtrig_tx_activity(); /* tell ledtrigger we send a packet */ | 4440 | match->channel = ie->data[0]; |
| 4441 | have_channel = 1; | ||
| 4442 | at76_dbg(DBG_RX_BEACON, "%s: CHANNEL - %d", | ||
| 4443 | priv->netdev->name, match->channel); | ||
| 4444 | break; | ||
| 1797 | 4445 | ||
| 1798 | WARN_ON(priv->tx_skb != NULL); | 4446 | case MFIE_TYPE_CF_SET: |
| 4447 | case MFIE_TYPE_TIM: | ||
| 4448 | case MFIE_TYPE_IBSS_SET: | ||
| 4449 | default: | ||
| 4450 | at76_dbg(DBG_RX_BEACON, "%s: beacon IE id %d len %d %s", | ||
| 4451 | priv->netdev->name, ie->id, ie->len, | ||
| 4452 | hex2str(ie->data, ie->len)); | ||
| 4453 | break; | ||
| 4454 | } | ||
| 1799 | 4455 | ||
| 1800 | priv->tx_skb = skb; | 4456 | /* advance to the next informational element */ |
| 1801 | padding = at76_calc_padding(skb->len); | 4457 | next_ie(&ie); |
| 1802 | submit_len = AT76_TX_HDRLEN + skb->len + padding; | ||
| 1803 | 4458 | ||
| 1804 | /* setup 'Atmel' header */ | 4459 | /* Optimization: after all, the bdata->data array is |
| 1805 | memset(tx_buffer, 0, sizeof(*tx_buffer)); | 4460 | * varpar_len bytes long, whereas we get all of the useful |
| 1806 | tx_buffer->padding = padding; | 4461 | * information after only ~36 bytes, this saves us a lot of |
| 1807 | tx_buffer->wlength = cpu_to_le16(skb->len); | 4462 | * time (and trouble as the remaining portion of the array |
| 1808 | tx_buffer->tx_rate = ieee80211_get_tx_rate(hw, info)->hw_value; | 4463 | * could be full of junk) |
| 1809 | if (FIRMWARE_IS_WPA(priv->fw_version) && info->control.hw_key) { | 4464 | * Comment this out if you want to see what other information |
| 1810 | tx_buffer->key_id = (info->control.hw_key->keyidx); | 4465 | * comes from the AP - although little of it may be useful */ |
| 1811 | tx_buffer->cipher_type = | 4466 | } |
| 1812 | priv->keys[info->control.hw_key->keyidx].cipher; | ||
| 1813 | tx_buffer->cipher_length = | ||
| 1814 | priv->keys[info->control.hw_key->keyidx].keylen; | ||
| 1815 | tx_buffer->reserved = 0; | ||
| 1816 | } else { | ||
| 1817 | tx_buffer->key_id = 0; | ||
| 1818 | tx_buffer->cipher_type = 0; | ||
| 1819 | tx_buffer->cipher_length = 0; | ||
| 1820 | tx_buffer->reserved = 0; | ||
| 1821 | }; | ||
| 1822 | /* memset(tx_buffer->reserved, 0, sizeof(tx_buffer->reserved)); */ | ||
| 1823 | memcpy(tx_buffer->packet, skb->data, skb->len); | ||
| 1824 | 4467 | ||
| 1825 | at76_dbg(DBG_TX_DATA, "%s tx: wlen 0x%x pad 0x%x rate %d hdr", | 4468 | at76_dbg(DBG_RX_BEACON, "%s: Finished processing beacon data", |
| 1826 | wiphy_name(priv->hw->wiphy), le16_to_cpu(tx_buffer->wlength), | 4469 | priv->netdev->name); |
| 1827 | tx_buffer->padding, tx_buffer->tx_rate); | ||
| 1828 | 4470 | ||
| 1829 | /* send stuff */ | 4471 | match->last_rx = jiffies; /* record last rx of beacon */ |
| 1830 | at76_dbg_dump(DBG_TX_DATA_CONTENT, tx_buffer, submit_len, | ||
| 1831 | "%s(): tx_buffer %d bytes:", __func__, submit_len); | ||
| 1832 | usb_fill_bulk_urb(priv->tx_urb, priv->udev, priv->tx_pipe, tx_buffer, | ||
| 1833 | submit_len, at76_mac80211_tx_callback, priv); | ||
| 1834 | ret = usb_submit_urb(priv->tx_urb, GFP_ATOMIC); | ||
| 1835 | if (ret) { | ||
| 1836 | printk(KERN_ERR "%s: error in tx submit urb: %d\n", | ||
| 1837 | wiphy_name(priv->hw->wiphy), ret); | ||
| 1838 | if (ret == -EINVAL) | ||
| 1839 | printk(KERN_ERR | ||
| 1840 | "%s: -EINVAL: tx urb %p hcpriv %p complete %p\n", | ||
| 1841 | wiphy_name(priv->hw->wiphy), priv->tx_urb, | ||
| 1842 | priv->tx_urb->hcpriv, priv->tx_urb->complete); | ||
| 1843 | } | ||
| 1844 | 4472 | ||
| 1845 | return 0; | 4473 | exit: |
| 4474 | spin_unlock_irqrestore(&priv->bss_list_spinlock, flags); | ||
| 1846 | } | 4475 | } |
| 1847 | 4476 | ||
| 1848 | static int at76_mac80211_start(struct ieee80211_hw *hw) | 4477 | /* Calculate the link level from a given rx_buffer */ |
| 4478 | static void at76_calc_level(struct at76_priv *priv, struct at76_rx_buffer *buf, | ||
| 4479 | struct iw_quality *qual) | ||
| 1849 | { | 4480 | { |
| 1850 | struct at76_priv *priv = hw->priv; | 4481 | /* just a guess for now, might be different for other chips */ |
| 1851 | int ret; | 4482 | int max_rssi = 42; |
| 1852 | |||
| 1853 | at76_dbg(DBG_MAC80211, "%s()", __func__); | ||
| 1854 | 4483 | ||
| 1855 | mutex_lock(&priv->mtx); | 4484 | qual->level = (buf->rssi * 100 / max_rssi); |
| 1856 | 4485 | if (qual->level > 100) | |
| 1857 | ret = at76_submit_rx_urb(priv); | 4486 | qual->level = 100; |
| 1858 | if (ret < 0) { | 4487 | qual->updated |= IW_QUAL_LEVEL_UPDATED; |
| 1859 | printk(KERN_ERR "%s: open: submit_rx_urb failed: %d\n", | 4488 | } |
| 1860 | wiphy_name(priv->hw->wiphy), ret); | ||
| 1861 | goto error; | ||
| 1862 | } | ||
| 1863 | 4489 | ||
| 1864 | at76_startup_device(priv); | 4490 | /* Calculate the link quality from a given rx_buffer */ |
| 4491 | static void at76_calc_qual(struct at76_priv *priv, struct at76_rx_buffer *buf, | ||
| 4492 | struct iw_quality *qual) | ||
| 4493 | { | ||
| 4494 | if (at76_is_intersil(priv->board_type)) | ||
| 4495 | qual->qual = buf->link_quality; | ||
| 4496 | else { | ||
| 4497 | unsigned long elapsed; | ||
| 1865 | 4498 | ||
| 1866 | at76_start_monitor(priv); | 4499 | /* Update qual at most once a second */ |
| 4500 | elapsed = jiffies - priv->beacons_last_qual; | ||
| 4501 | if (elapsed < 1 * HZ) | ||
| 4502 | return; | ||
| 1867 | 4503 | ||
| 1868 | error: | 4504 | qual->qual = qual->level * priv->beacons_received * |
| 1869 | mutex_unlock(&priv->mtx); | 4505 | msecs_to_jiffies(priv->beacon_period) / elapsed; |
| 1870 | 4506 | ||
| 1871 | return 0; | 4507 | priv->beacons_last_qual = jiffies; |
| 4508 | priv->beacons_received = 0; | ||
| 4509 | } | ||
| 4510 | qual->qual = (qual->qual > 100) ? 100 : qual->qual; | ||
| 4511 | qual->updated |= IW_QUAL_QUAL_UPDATED; | ||
| 1872 | } | 4512 | } |
| 1873 | 4513 | ||
| 1874 | static void at76_mac80211_stop(struct ieee80211_hw *hw) | 4514 | /* Calculate the noise quality from a given rx_buffer */ |
| 4515 | static void at76_calc_noise(struct at76_priv *priv, struct at76_rx_buffer *buf, | ||
| 4516 | struct iw_quality *qual) | ||
| 1875 | { | 4517 | { |
| 1876 | struct at76_priv *priv = hw->priv; | 4518 | qual->noise = 0; |
| 1877 | 4519 | qual->updated |= IW_QUAL_NOISE_INVALID; | |
| 1878 | at76_dbg(DBG_MAC80211, "%s()", __func__); | 4520 | } |
| 1879 | |||
| 1880 | mutex_lock(&priv->mtx); | ||
| 1881 | 4521 | ||
| 1882 | if (!priv->device_unplugged) { | 4522 | static void at76_update_wstats(struct at76_priv *priv, |
| 1883 | /* We are called by "ifconfig ethX down", not because the | 4523 | struct at76_rx_buffer *buf) |
| 1884 | * device is not available anymore. */ | 4524 | { |
| 1885 | if (at76_set_radio(priv, 0) == 1) | 4525 | struct iw_quality *qual = &priv->wstats.qual; |
| 1886 | at76_wait_completion(priv, CMD_RADIO_ON); | ||
| 1887 | 4526 | ||
| 1888 | /* We unlink rx_urb because at76_open() re-submits it. | 4527 | if (buf->rssi && priv->mac_state == MAC_CONNECTED) { |
| 1889 | * If unplugged, at76_delete_device() takes care of it. */ | 4528 | qual->updated = 0; |
| 1890 | usb_kill_urb(priv->rx_urb); | 4529 | at76_calc_level(priv, buf, qual); |
| 4530 | at76_calc_qual(priv, buf, qual); | ||
| 4531 | at76_calc_noise(priv, buf, qual); | ||
| 4532 | } else { | ||
| 4533 | qual->qual = 0; | ||
| 4534 | qual->level = 0; | ||
| 4535 | qual->noise = 0; | ||
| 4536 | qual->updated = IW_QUAL_ALL_INVALID; | ||
| 1891 | } | 4537 | } |
| 1892 | |||
| 1893 | mutex_unlock(&priv->mtx); | ||
| 1894 | } | 4538 | } |
| 1895 | 4539 | ||
| 1896 | static int at76_add_interface(struct ieee80211_hw *hw, | 4540 | static void at76_rx_mgmt(struct at76_priv *priv, struct at76_rx_buffer *buf) |
| 1897 | struct ieee80211_if_init_conf *conf) | ||
| 1898 | { | 4541 | { |
| 1899 | struct at76_priv *priv = hw->priv; | 4542 | struct ieee80211_hdr_3addr *mgmt = |
| 1900 | int ret = 0; | 4543 | (struct ieee80211_hdr_3addr *)buf->packet; |
| 4544 | u16 framectl = le16_to_cpu(mgmt->frame_ctl); | ||
| 4545 | |||
| 4546 | /* update wstats */ | ||
| 4547 | if (priv->mac_state != MAC_INIT && priv->mac_state != MAC_SCANNING) { | ||
| 4548 | /* jal: this is a dirty hack needed by Tim in ad-hoc mode */ | ||
| 4549 | /* Data packets always seem to have a 0 link level, so we | ||
| 4550 | only read link quality info from management packets. | ||
| 4551 | Atmel driver actually averages the present, and previous | ||
| 4552 | values, we just present the raw value at the moment - TJS */ | ||
| 4553 | if (priv->iw_mode == IW_MODE_ADHOC | ||
| 4554 | || (priv->curr_bss | ||
| 4555 | && !compare_ether_addr(mgmt->addr3, | ||
| 4556 | priv->curr_bss->bssid))) | ||
| 4557 | at76_update_wstats(priv, buf); | ||
| 4558 | } | ||
| 1901 | 4559 | ||
| 1902 | at76_dbg(DBG_MAC80211, "%s()", __func__); | 4560 | at76_dbg(DBG_RX_MGMT_CONTENT, "%s rx mgmt framectl 0x%x %s", |
| 4561 | priv->netdev->name, framectl, | ||
| 4562 | hex2str(mgmt, le16_to_cpu(buf->wlength))); | ||
| 1903 | 4563 | ||
| 1904 | mutex_lock(&priv->mtx); | 4564 | switch (framectl & IEEE80211_FCTL_STYPE) { |
| 4565 | case IEEE80211_STYPE_BEACON: | ||
| 4566 | case IEEE80211_STYPE_PROBE_RESP: | ||
| 4567 | at76_rx_mgmt_beacon(priv, buf); | ||
| 4568 | break; | ||
| 4569 | |||
| 4570 | case IEEE80211_STYPE_ASSOC_RESP: | ||
| 4571 | at76_rx_mgmt_assoc(priv, buf); | ||
| 4572 | break; | ||
| 1905 | 4573 | ||
| 1906 | switch (conf->type) { | 4574 | case IEEE80211_STYPE_DISASSOC: |
| 1907 | case NL80211_IFTYPE_STATION: | 4575 | at76_rx_mgmt_disassoc(priv, buf); |
| 1908 | priv->iw_mode = IW_MODE_INFRA; | ||
| 1909 | break; | 4576 | break; |
| 4577 | |||
| 4578 | case IEEE80211_STYPE_AUTH: | ||
| 4579 | at76_rx_mgmt_auth(priv, buf); | ||
| 4580 | break; | ||
| 4581 | |||
| 4582 | case IEEE80211_STYPE_DEAUTH: | ||
| 4583 | at76_rx_mgmt_deauth(priv, buf); | ||
| 4584 | break; | ||
| 4585 | |||
| 1910 | default: | 4586 | default: |
| 1911 | ret = -EOPNOTSUPP; | 4587 | printk(KERN_DEBUG "%s: ignoring frame with framectl 0x%04x\n", |
| 1912 | goto exit; | 4588 | priv->netdev->name, framectl); |
| 1913 | } | 4589 | } |
| 1914 | 4590 | ||
| 1915 | exit: | 4591 | return; |
| 1916 | mutex_unlock(&priv->mtx); | ||
| 1917 | |||
| 1918 | return ret; | ||
| 1919 | } | 4592 | } |
| 1920 | 4593 | ||
| 1921 | static void at76_remove_interface(struct ieee80211_hw *hw, | 4594 | /* Convert the 802.11 header into an ethernet-style header, make skb |
| 1922 | struct ieee80211_if_init_conf *conf) | 4595 | * ready for consumption by netif_rx() */ |
| 4596 | static void at76_ieee80211_to_eth(struct sk_buff *skb, int iw_mode) | ||
| 1923 | { | 4597 | { |
| 1924 | at76_dbg(DBG_MAC80211, "%s()", __func__); | 4598 | struct ieee80211_hdr_3addr *i802_11_hdr; |
| 1925 | } | 4599 | struct ethhdr *eth_hdr_p; |
| 4600 | u8 *src_addr; | ||
| 4601 | u8 *dest_addr; | ||
| 1926 | 4602 | ||
| 1927 | static int at76_join(struct at76_priv *priv) | 4603 | i802_11_hdr = (struct ieee80211_hdr_3addr *)skb->data; |
| 1928 | { | ||
| 1929 | struct at76_req_join join; | ||
| 1930 | int ret; | ||
| 1931 | 4604 | ||
| 1932 | memset(&join, 0, sizeof(struct at76_req_join)); | 4605 | /* That would be the ethernet header if the hardware converted |
| 1933 | memcpy(join.essid, priv->essid, priv->essid_size); | 4606 | * the frame for us. Make sure the source and the destination |
| 1934 | join.essid_size = priv->essid_size; | 4607 | * match the 802.11 header. Which hardware does it? */ |
| 1935 | memcpy(join.bssid, priv->bssid, ETH_ALEN); | 4608 | eth_hdr_p = (struct ethhdr *)skb_pull(skb, IEEE80211_3ADDR_LEN); |
| 1936 | join.bss_type = INFRASTRUCTURE_MODE; | ||
| 1937 | join.channel = priv->channel; | ||
| 1938 | join.timeout = cpu_to_le16(2000); | ||
| 1939 | 4609 | ||
| 1940 | at76_dbg(DBG_MAC80211, "%s: sending CMD_JOIN", __func__); | 4610 | dest_addr = i802_11_hdr->addr1; |
| 1941 | ret = at76_set_card_command(priv->udev, CMD_JOIN, &join, | 4611 | if (iw_mode == IW_MODE_ADHOC) |
| 1942 | sizeof(struct at76_req_join)); | 4612 | src_addr = i802_11_hdr->addr2; |
| 4613 | else | ||
| 4614 | src_addr = i802_11_hdr->addr3; | ||
| 1943 | 4615 | ||
| 1944 | if (ret < 0) { | 4616 | if (!compare_ether_addr(eth_hdr_p->h_source, src_addr) && |
| 1945 | printk(KERN_ERR "%s: at76_set_card_command failed: %d\n", | 4617 | !compare_ether_addr(eth_hdr_p->h_dest, dest_addr)) |
| 1946 | wiphy_name(priv->hw->wiphy), ret); | 4618 | /* Yes, we already have an ethernet header */ |
| 1947 | return 0; | 4619 | skb_reset_mac_header(skb); |
| 1948 | } | 4620 | else { |
| 4621 | u16 len; | ||
| 4622 | |||
| 4623 | /* Need to build an ethernet header */ | ||
| 4624 | if (!memcmp(skb->data, snapsig, sizeof(snapsig))) { | ||
| 4625 | /* SNAP frame - decapsulate, keep proto */ | ||
| 4626 | skb_push(skb, offsetof(struct ethhdr, h_proto) - | ||
| 4627 | sizeof(rfc1042sig)); | ||
| 4628 | len = 0; | ||
| 4629 | } else { | ||
| 4630 | /* 802.3 frame, proto is length */ | ||
| 4631 | len = skb->len; | ||
| 4632 | skb_push(skb, ETH_HLEN); | ||
| 4633 | } | ||
| 1949 | 4634 | ||
| 1950 | ret = at76_wait_completion(priv, CMD_JOIN); | 4635 | skb_reset_mac_header(skb); |
| 1951 | at76_dbg(DBG_MAC80211, "%s: CMD_JOIN returned: 0x%02x", __func__, ret); | 4636 | eth_hdr_p = eth_hdr(skb); |
| 1952 | if (ret != CMD_STATUS_COMPLETE) { | 4637 | /* This needs to be done in this order (eth_hdr_p->h_dest may |
| 1953 | printk(KERN_ERR "%s: at76_wait_completion failed: %d\n", | 4638 | * overlap src_addr) */ |
| 1954 | wiphy_name(priv->hw->wiphy), ret); | 4639 | memcpy(eth_hdr_p->h_source, src_addr, ETH_ALEN); |
| 1955 | return 0; | 4640 | memcpy(eth_hdr_p->h_dest, dest_addr, ETH_ALEN); |
| 4641 | if (len) | ||
| 4642 | eth_hdr_p->h_proto = htons(len); | ||
| 1956 | } | 4643 | } |
| 1957 | 4644 | ||
| 1958 | at76_set_tkip_bssid(priv, priv->bssid); | 4645 | skb->protocol = eth_type_trans(skb, skb->dev); |
| 1959 | at76_set_pm_mode(priv); | ||
| 1960 | |||
| 1961 | return 0; | ||
| 1962 | } | 4646 | } |
| 1963 | 4647 | ||
| 1964 | static void at76_dwork_hw_scan(struct work_struct *work) | 4648 | /* Check for fragmented data in priv->rx_skb. If the packet was no fragment |
| 4649 | or it was the last of a fragment set a skb containing the whole packet | ||
| 4650 | is returned for further processing. Otherwise we get NULL and are | ||
| 4651 | done and the packet is either stored inside the fragment buffer | ||
| 4652 | or thrown away. Every returned skb starts with the ieee802_11 header | ||
| 4653 | and contains _no_ FCS at the end */ | ||
| 4654 | static struct sk_buff *at76_check_for_rx_frags(struct at76_priv *priv) | ||
| 1965 | { | 4655 | { |
| 1966 | struct at76_priv *priv = container_of(work, struct at76_priv, | 4656 | struct sk_buff *skb = priv->rx_skb; |
| 1967 | dwork_hw_scan.work); | 4657 | struct at76_rx_buffer *buf = (struct at76_rx_buffer *)skb->data; |
| 1968 | int ret; | 4658 | struct ieee80211_hdr_3addr *i802_11_hdr = |
| 4659 | (struct ieee80211_hdr_3addr *)buf->packet; | ||
| 4660 | /* seq_ctrl, fragment_number, sequence number of new packet */ | ||
| 4661 | u16 sctl = le16_to_cpu(i802_11_hdr->seq_ctl); | ||
| 4662 | u16 fragnr = sctl & 0xf; | ||
| 4663 | u16 seqnr = sctl >> 4; | ||
| 4664 | u16 frame_ctl = le16_to_cpu(i802_11_hdr->frame_ctl); | ||
| 1969 | 4665 | ||
| 1970 | ret = at76_get_cmd_status(priv->udev, CMD_SCAN); | 4666 | /* Length including the IEEE802.11 header, but without the trailing |
| 1971 | at76_dbg(DBG_MAC80211, "%s: CMD_SCAN status 0x%02x", __func__, ret); | 4667 | * FCS and without the Atmel Rx header */ |
| 4668 | int length = le16_to_cpu(buf->wlength) - IEEE80211_FCS_LEN; | ||
| 1972 | 4669 | ||
| 1973 | /* FIXME: add maximum time for scan to complete */ | 4670 | /* where does the data payload start in skb->data ? */ |
| 4671 | u8 *data = i802_11_hdr->payload; | ||
| 1974 | 4672 | ||
| 1975 | if (ret != CMD_STATUS_COMPLETE) { | 4673 | /* length of payload, excl. the trailing FCS */ |
| 1976 | queue_delayed_work(priv->hw->workqueue, &priv->dwork_hw_scan, | 4674 | int data_len = length - IEEE80211_3ADDR_LEN; |
| 1977 | SCAN_POLL_INTERVAL); | 4675 | |
| 1978 | goto exit; | 4676 | int i; |
| 4677 | struct rx_data_buf *bptr, *optr; | ||
| 4678 | unsigned long oldest = ~0UL; | ||
| 4679 | |||
| 4680 | at76_dbg(DBG_RX_FRAGS, | ||
| 4681 | "%s: rx data frame_ctl %04x addr2 %s seq/frag %d/%d " | ||
| 4682 | "length %d data %d: %s ...", priv->netdev->name, frame_ctl, | ||
| 4683 | mac2str(i802_11_hdr->addr2), seqnr, fragnr, length, data_len, | ||
| 4684 | hex2str(data, 32)); | ||
| 4685 | |||
| 4686 | at76_dbg(DBG_RX_FRAGS_SKB, "%s: incoming skb: head %p data %p " | ||
| 4687 | "tail %p end %p len %d", priv->netdev->name, skb->head, | ||
| 4688 | skb->data, skb_tail_pointer(skb), skb_end_pointer(skb), | ||
| 4689 | skb->len); | ||
| 4690 | |||
| 4691 | if (data_len < 0) { | ||
| 4692 | /* make sure data starts in the buffer */ | ||
| 4693 | printk(KERN_INFO "%s: data frame too short\n", | ||
| 4694 | priv->netdev->name); | ||
| 4695 | return NULL; | ||
| 1979 | } | 4696 | } |
| 1980 | 4697 | ||
| 1981 | ieee80211_scan_completed(priv->hw); | 4698 | WARN_ON(length <= AT76_RX_HDRLEN); |
| 4699 | if (length <= AT76_RX_HDRLEN) | ||
| 4700 | return NULL; | ||
| 1982 | 4701 | ||
| 1983 | if (is_valid_ether_addr(priv->bssid)) { | 4702 | /* remove the at76_rx_buffer header - we don't need it anymore */ |
| 1984 | ieee80211_wake_queues(priv->hw); | 4703 | /* we need the IEEE802.11 header (for the addresses) if this packet |
| 1985 | at76_join(priv); | 4704 | is the first of a chain */ |
| 4705 | skb_pull(skb, AT76_RX_HDRLEN); | ||
| 4706 | |||
| 4707 | /* remove FCS at end */ | ||
| 4708 | skb_trim(skb, length); | ||
| 4709 | |||
| 4710 | at76_dbg(DBG_RX_FRAGS_SKB, "%s: trimmed skb: head %p data %p tail %p " | ||
| 4711 | "end %p len %d data %p data_len %d", priv->netdev->name, | ||
| 4712 | skb->head, skb->data, skb_tail_pointer(skb), | ||
| 4713 | skb_end_pointer(skb), skb->len, data, data_len); | ||
| 4714 | |||
| 4715 | if (fragnr == 0 && !(frame_ctl & IEEE80211_FCTL_MOREFRAGS)) { | ||
| 4716 | /* unfragmented packet received */ | ||
| 4717 | /* Use a new skb for the next receive */ | ||
| 4718 | priv->rx_skb = NULL; | ||
| 4719 | at76_dbg(DBG_RX_FRAGS, "%s: unfragmented", priv->netdev->name); | ||
| 4720 | return skb; | ||
| 1986 | } | 4721 | } |
| 1987 | 4722 | ||
| 1988 | ieee80211_wake_queues(priv->hw); | 4723 | /* look if we've got a chain for the sender address. |
| 4724 | afterwards optr points to first free or the oldest entry, | ||
| 4725 | or, if i < NR_RX_DATA_BUF, bptr points to the entry for the | ||
| 4726 | sender address */ | ||
| 4727 | /* determining the oldest entry doesn't cope with jiffies wrapping | ||
| 4728 | but I don't care to delete a young entry at these rare moments ... */ | ||
| 4729 | |||
| 4730 | bptr = priv->rx_data; | ||
| 4731 | optr = NULL; | ||
| 4732 | for (i = 0; i < NR_RX_DATA_BUF; i++, bptr++) { | ||
| 4733 | if (!bptr->skb) { | ||
| 4734 | optr = bptr; | ||
| 4735 | oldest = 0UL; | ||
| 4736 | continue; | ||
| 4737 | } | ||
| 1989 | 4738 | ||
| 1990 | exit: | 4739 | if (!compare_ether_addr(i802_11_hdr->addr2, bptr->sender)) |
| 1991 | return; | 4740 | break; |
| 1992 | } | ||
| 1993 | 4741 | ||
| 1994 | static int at76_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t len) | 4742 | if (!optr) { |
| 1995 | { | 4743 | optr = bptr; |
| 1996 | struct at76_priv *priv = hw->priv; | 4744 | oldest = bptr->last_rx; |
| 1997 | struct at76_req_scan scan; | 4745 | } else if (bptr->last_rx < oldest) |
| 1998 | int ret; | 4746 | optr = bptr; |
| 4747 | } | ||
| 1999 | 4748 | ||
| 2000 | at76_dbg(DBG_MAC80211, "%s():", __func__); | 4749 | if (i < NR_RX_DATA_BUF) { |
| 2001 | at76_dbg_dump(DBG_MAC80211, ssid, len, "ssid %zd bytes:", len); | 4750 | |
| 4751 | at76_dbg(DBG_RX_FRAGS, "%s: %d. cacheentry (seq/frag = %d/%d) " | ||
| 4752 | "matched sender addr", | ||
| 4753 | priv->netdev->name, i, bptr->seqnr, bptr->fragnr); | ||
| 4754 | |||
| 4755 | /* bptr points to an entry for the sender address */ | ||
| 4756 | if (bptr->seqnr == seqnr) { | ||
| 4757 | int left; | ||
| 4758 | /* the fragment has the current sequence number */ | ||
| 4759 | if (((bptr->fragnr + 1) & 0xf) != fragnr) { | ||
| 4760 | /* wrong fragment number -> ignore it */ | ||
| 4761 | /* is & 0xf necessary above ??? */ | ||
| 4762 | at76_dbg(DBG_RX_FRAGS, | ||
| 4763 | "%s: frag nr mismatch: %d + 1 != %d", | ||
| 4764 | priv->netdev->name, bptr->fragnr, | ||
| 4765 | fragnr); | ||
| 4766 | return NULL; | ||
| 4767 | } | ||
| 4768 | bptr->last_rx = jiffies; | ||
| 4769 | /* the next following fragment number -> | ||
| 4770 | add the data at the end */ | ||
| 4771 | |||
| 4772 | /* for test only ??? */ | ||
| 4773 | left = skb_tailroom(bptr->skb); | ||
| 4774 | if (left < data_len) | ||
| 4775 | printk(KERN_INFO | ||
| 4776 | "%s: only %d byte free (need %d)\n", | ||
| 4777 | priv->netdev->name, left, data_len); | ||
| 4778 | else | ||
| 4779 | memcpy(skb_put(bptr->skb, data_len), data, | ||
| 4780 | data_len); | ||
| 4781 | |||
| 4782 | bptr->fragnr = fragnr; | ||
| 4783 | if (frame_ctl & IEEE80211_FCTL_MOREFRAGS) | ||
| 4784 | return NULL; | ||
| 4785 | |||
| 4786 | /* this was the last fragment - send it */ | ||
| 4787 | skb = bptr->skb; | ||
| 4788 | bptr->skb = NULL; /* free the entry */ | ||
| 4789 | at76_dbg(DBG_RX_FRAGS, "%s: last frag of seq %d", | ||
| 4790 | priv->netdev->name, seqnr); | ||
| 4791 | return skb; | ||
| 4792 | } | ||
| 2002 | 4793 | ||
| 2003 | mutex_lock(&priv->mtx); | 4794 | /* got another sequence number */ |
| 4795 | if (fragnr == 0) { | ||
| 4796 | /* it's the start of a new chain - replace the | ||
| 4797 | old one by this */ | ||
| 4798 | /* bptr->sender has the correct value already */ | ||
| 4799 | at76_dbg(DBG_RX_FRAGS, | ||
| 4800 | "%s: start of new seq %d, removing old seq %d", | ||
| 4801 | priv->netdev->name, seqnr, bptr->seqnr); | ||
| 4802 | bptr->seqnr = seqnr; | ||
| 4803 | bptr->fragnr = 0; | ||
| 4804 | bptr->last_rx = jiffies; | ||
| 4805 | /* swap bptr->skb and priv->rx_skb */ | ||
| 4806 | skb = bptr->skb; | ||
| 4807 | bptr->skb = priv->rx_skb; | ||
| 4808 | priv->rx_skb = skb; | ||
| 4809 | } else { | ||
| 4810 | /* it from the middle of a new chain -> | ||
| 4811 | delete the old entry and skip the new one */ | ||
| 4812 | at76_dbg(DBG_RX_FRAGS, | ||
| 4813 | "%s: middle of new seq %d (%d) " | ||
| 4814 | "removing old seq %d", | ||
| 4815 | priv->netdev->name, seqnr, fragnr, | ||
| 4816 | bptr->seqnr); | ||
| 4817 | dev_kfree_skb(bptr->skb); | ||
| 4818 | bptr->skb = NULL; | ||
| 4819 | } | ||
| 4820 | return NULL; | ||
| 4821 | } | ||
| 2004 | 4822 | ||
| 2005 | ieee80211_stop_queues(hw); | 4823 | /* if we didn't find a chain for the sender address, optr |
| 4824 | points either to the first free or the oldest entry */ | ||
| 2006 | 4825 | ||
| 2007 | memset(&scan, 0, sizeof(struct at76_req_scan)); | 4826 | if (fragnr != 0) { |
| 2008 | memset(scan.bssid, 0xFF, ETH_ALEN); | 4827 | /* this is not the begin of a fragment chain ... */ |
| 2009 | scan.scan_type = SCAN_TYPE_ACTIVE; | 4828 | at76_dbg(DBG_RX_FRAGS, |
| 2010 | if (priv->essid_size > 0) { | 4829 | "%s: no chain for non-first fragment (%d)", |
| 2011 | memcpy(scan.essid, ssid, len); | 4830 | priv->netdev->name, fragnr); |
| 2012 | scan.essid_size = len; | 4831 | return NULL; |
| 2013 | } | 4832 | } |
| 2014 | scan.min_channel_time = cpu_to_le16(priv->scan_min_time); | ||
| 2015 | scan.max_channel_time = cpu_to_le16(priv->scan_max_time); | ||
| 2016 | scan.probe_delay = cpu_to_le16(priv->scan_min_time * 1000); | ||
| 2017 | scan.international_scan = 0; | ||
| 2018 | 4833 | ||
| 2019 | at76_dbg(DBG_MAC80211, "%s: sending CMD_SCAN", __func__); | 4834 | BUG_ON(!optr); |
| 2020 | ret = at76_set_card_command(priv->udev, CMD_SCAN, &scan, sizeof(scan)); | 4835 | if (optr->skb) { |
| 4836 | /* swap the skb's */ | ||
| 4837 | skb = optr->skb; | ||
| 4838 | optr->skb = priv->rx_skb; | ||
| 4839 | priv->rx_skb = skb; | ||
| 2021 | 4840 | ||
| 2022 | if (ret < 0) { | 4841 | at76_dbg(DBG_RX_FRAGS, |
| 2023 | err("CMD_SCAN failed: %d", ret); | 4842 | "%s: free old contents: sender %s seq/frag %d/%d", |
| 2024 | goto exit; | 4843 | priv->netdev->name, mac2str(optr->sender), |
| 2025 | } | 4844 | optr->seqnr, optr->fragnr); |
| 2026 | 4845 | ||
| 2027 | queue_delayed_work(priv->hw->workqueue, &priv->dwork_hw_scan, | 4846 | } else { |
| 2028 | SCAN_POLL_INTERVAL); | 4847 | /* take the skb from priv->rx_skb */ |
| 4848 | optr->skb = priv->rx_skb; | ||
| 4849 | /* let at76_submit_rx_urb() allocate a new skb */ | ||
| 4850 | priv->rx_skb = NULL; | ||
| 2029 | 4851 | ||
| 2030 | exit: | 4852 | at76_dbg(DBG_RX_FRAGS, "%s: use a free entry", |
| 2031 | mutex_unlock(&priv->mtx); | 4853 | priv->netdev->name); |
| 4854 | } | ||
| 4855 | memcpy(optr->sender, i802_11_hdr->addr2, ETH_ALEN); | ||
| 4856 | optr->seqnr = seqnr; | ||
| 4857 | optr->fragnr = 0; | ||
| 4858 | optr->last_rx = jiffies; | ||
| 2032 | 4859 | ||
| 2033 | return 0; | 4860 | return NULL; |
| 2034 | } | 4861 | } |
| 2035 | 4862 | ||
| 2036 | static int at76_config(struct ieee80211_hw *hw, u32 changed) | 4863 | /* Rx interrupt: we expect the complete data buffer in priv->rx_skb */ |
| 4864 | static void at76_rx_data(struct at76_priv *priv) | ||
| 2037 | { | 4865 | { |
| 2038 | struct at76_priv *priv = hw->priv; | 4866 | struct net_device *netdev = priv->netdev; |
| 2039 | struct ieee80211_conf *conf = &hw->conf; | 4867 | struct net_device_stats *stats = &priv->stats; |
| 4868 | struct sk_buff *skb = priv->rx_skb; | ||
| 4869 | struct at76_rx_buffer *buf = (struct at76_rx_buffer *)skb->data; | ||
| 4870 | struct ieee80211_hdr_3addr *i802_11_hdr; | ||
| 4871 | int length = le16_to_cpu(buf->wlength); | ||
| 2040 | 4872 | ||
| 2041 | at76_dbg(DBG_MAC80211, "%s(): channel %d radio %d", | 4873 | at76_dbg(DBG_RX_DATA, "%s received data packet: %s", netdev->name, |
| 2042 | __func__, conf->channel->hw_value, conf->radio_enabled); | 4874 | hex2str(skb->data, AT76_RX_HDRLEN)); |
| 2043 | at76_dbg_dump(DBG_MAC80211, priv->essid, priv->essid_size, "ssid:"); | ||
| 2044 | at76_dbg_dump(DBG_MAC80211, priv->bssid, ETH_ALEN, "bssid:"); | ||
| 2045 | 4875 | ||
| 2046 | mutex_lock(&priv->mtx); | 4876 | at76_dbg(DBG_RX_DATA_CONTENT, "rx packet: %s", |
| 4877 | hex2str(skb->data + AT76_RX_HDRLEN, length)); | ||
| 2047 | 4878 | ||
| 2048 | priv->channel = conf->channel->hw_value; | 4879 | skb = at76_check_for_rx_frags(priv); |
| 4880 | if (!skb) | ||
| 4881 | return; | ||
| 2049 | 4882 | ||
| 2050 | if (is_valid_ether_addr(priv->bssid)) { | 4883 | /* Atmel header and the FCS are already removed */ |
| 2051 | at76_join(priv); | 4884 | i802_11_hdr = (struct ieee80211_hdr_3addr *)skb->data; |
| 2052 | ieee80211_wake_queues(priv->hw); | ||
| 2053 | } else { | ||
| 2054 | ieee80211_stop_queues(priv->hw); | ||
| 2055 | at76_start_monitor(priv); | ||
| 2056 | }; | ||
| 2057 | 4885 | ||
| 2058 | mutex_unlock(&priv->mtx); | 4886 | skb->dev = netdev; |
| 4887 | skb->ip_summed = CHECKSUM_NONE; /* TODO: should check CRC */ | ||
| 2059 | 4888 | ||
| 2060 | return 0; | 4889 | if (is_broadcast_ether_addr(i802_11_hdr->addr1)) { |
| 2061 | } | 4890 | if (!compare_ether_addr(i802_11_hdr->addr1, netdev->broadcast)) |
| 4891 | skb->pkt_type = PACKET_BROADCAST; | ||
| 4892 | else | ||
| 4893 | skb->pkt_type = PACKET_MULTICAST; | ||
| 4894 | } else if (compare_ether_addr(i802_11_hdr->addr1, netdev->dev_addr)) | ||
| 4895 | skb->pkt_type = PACKET_OTHERHOST; | ||
| 2062 | 4896 | ||
| 2063 | static int at76_config_interface(struct ieee80211_hw *hw, | 4897 | at76_ieee80211_to_eth(skb, priv->iw_mode); |
| 2064 | struct ieee80211_vif *vif, | ||
| 2065 | struct ieee80211_if_conf *conf) | ||
| 2066 | { | ||
| 2067 | struct at76_priv *priv = hw->priv; | ||
| 2068 | 4898 | ||
| 2069 | at76_dbg_dump(DBG_MAC80211, conf->bssid, ETH_ALEN, "bssid:"); | 4899 | netdev->last_rx = jiffies; |
| 4900 | netif_rx(skb); | ||
| 4901 | stats->rx_packets++; | ||
| 4902 | stats->rx_bytes += length; | ||
| 2070 | 4903 | ||
| 2071 | mutex_lock(&priv->mtx); | 4904 | return; |
| 4905 | } | ||
| 2072 | 4906 | ||
| 2073 | memcpy(priv->bssid, conf->bssid, ETH_ALEN); | 4907 | static void at76_rx_monitor_mode(struct at76_priv *priv) |
| 2074 | // memcpy(priv->essid, conf->ssid, conf->ssid_len); | 4908 | { |
| 2075 | // priv->essid_size = conf->ssid_len; | 4909 | struct at76_rx_radiotap *rt; |
| 4910 | u8 *payload; | ||
| 4911 | int skblen; | ||
| 4912 | struct net_device *netdev = priv->netdev; | ||
| 4913 | struct at76_rx_buffer *buf = | ||
| 4914 | (struct at76_rx_buffer *)priv->rx_skb->data; | ||
| 4915 | /* length including the IEEE802.11 header and the trailing FCS, | ||
| 4916 | but not at76_rx_buffer */ | ||
| 4917 | int length = le16_to_cpu(buf->wlength); | ||
| 4918 | struct sk_buff *skb = priv->rx_skb; | ||
| 4919 | struct net_device_stats *stats = &priv->stats; | ||
| 2076 | 4920 | ||
| 2077 | if (is_valid_ether_addr(priv->bssid)) { | 4921 | if (length < IEEE80211_FCS_LEN) { |
| 2078 | /* mac80211 is joining a bss */ | 4922 | /* buffer contains no data */ |
| 2079 | ieee80211_wake_queues(priv->hw); | 4923 | at76_dbg(DBG_MONITOR_MODE, |
| 2080 | at76_join(priv); | 4924 | "%s: MONITOR MODE: rx skb without data", |
| 2081 | } else | 4925 | priv->netdev->name); |
| 2082 | ieee80211_stop_queues(priv->hw); | 4926 | return; |
| 4927 | } | ||
| 2083 | 4928 | ||
| 2084 | mutex_unlock(&priv->mtx); | 4929 | skblen = sizeof(struct at76_rx_radiotap) + length; |
| 2085 | 4930 | ||
| 2086 | return 0; | 4931 | skb = dev_alloc_skb(skblen); |
| 4932 | if (!skb) { | ||
| 4933 | printk(KERN_ERR "%s: MONITOR MODE: dev_alloc_skb for radiotap " | ||
| 4934 | "header returned NULL\n", priv->netdev->name); | ||
| 4935 | return; | ||
| 4936 | } | ||
| 4937 | |||
| 4938 | skb_put(skb, skblen); | ||
| 4939 | |||
| 4940 | rt = (struct at76_rx_radiotap *)skb->data; | ||
| 4941 | payload = skb->data + sizeof(struct at76_rx_radiotap); | ||
| 4942 | |||
| 4943 | rt->rt_hdr.it_version = 0; | ||
| 4944 | rt->rt_hdr.it_pad = 0; | ||
| 4945 | rt->rt_hdr.it_len = cpu_to_le16(sizeof(struct at76_rx_radiotap)); | ||
| 4946 | rt->rt_hdr.it_present = cpu_to_le32(AT76_RX_RADIOTAP_PRESENT); | ||
| 4947 | |||
| 4948 | rt->rt_tsft = cpu_to_le64(le32_to_cpu(buf->rx_time)); | ||
| 4949 | rt->rt_rate = hw_rates[buf->rx_rate] & (~0x80); | ||
| 4950 | rt->rt_signal = buf->rssi; | ||
| 4951 | rt->rt_noise = buf->noise_level; | ||
| 4952 | rt->rt_flags = IEEE80211_RADIOTAP_F_FCS; | ||
| 4953 | if (buf->fragmentation) | ||
| 4954 | rt->rt_flags |= IEEE80211_RADIOTAP_F_FRAG; | ||
| 4955 | |||
| 4956 | memcpy(payload, buf->packet, length); | ||
| 4957 | skb->dev = netdev; | ||
| 4958 | skb->ip_summed = CHECKSUM_NONE; | ||
| 4959 | skb_reset_mac_header(skb); | ||
| 4960 | skb->pkt_type = PACKET_OTHERHOST; | ||
| 4961 | skb->protocol = htons(ETH_P_802_2); | ||
| 4962 | |||
| 4963 | netdev->last_rx = jiffies; | ||
| 4964 | netif_rx(skb); | ||
| 4965 | stats->rx_packets++; | ||
| 4966 | stats->rx_bytes += length; | ||
| 2087 | } | 4967 | } |
| 2088 | 4968 | ||
| 2089 | /* must be atomic */ | 4969 | /* Check if we spy on the sender address in buf and update stats */ |
| 2090 | static void at76_configure_filter(struct ieee80211_hw *hw, | 4970 | static void at76_iwspy_update(struct at76_priv *priv, |
| 2091 | unsigned int changed_flags, | 4971 | struct at76_rx_buffer *buf) |
| 2092 | unsigned int *total_flags, int mc_count, | ||
| 2093 | struct dev_addr_list *mc_list) | ||
| 2094 | { | 4972 | { |
| 2095 | struct at76_priv *priv = hw->priv; | 4973 | struct ieee80211_hdr_3addr *hdr = |
| 2096 | int flags; | 4974 | (struct ieee80211_hdr_3addr *)buf->packet; |
| 2097 | 4975 | struct iw_quality qual; | |
| 2098 | at76_dbg(DBG_MAC80211, "%s(): changed_flags=0x%08x " | ||
| 2099 | "total_flags=0x%08x mc_count=%d", | ||
| 2100 | __func__, changed_flags, *total_flags, mc_count); | ||
| 2101 | 4976 | ||
| 2102 | flags = changed_flags & AT76_SUPPORTED_FILTERS; | 4977 | /* We can only set the level here */ |
| 2103 | *total_flags = AT76_SUPPORTED_FILTERS; | 4978 | qual.updated = IW_QUAL_QUAL_INVALID | IW_QUAL_NOISE_INVALID; |
| 4979 | qual.level = 0; | ||
| 4980 | qual.noise = 0; | ||
| 4981 | at76_calc_level(priv, buf, &qual); | ||
| 2104 | 4982 | ||
| 2105 | /* FIXME: access to priv->promisc should be protected with | 4983 | spin_lock_bh(&priv->spy_spinlock); |
| 2106 | * priv->mtx, but it's impossible because this function needs to be | ||
| 2107 | * atomic */ | ||
| 2108 | 4984 | ||
| 2109 | if (flags && !priv->promisc) { | 4985 | if (priv->spy_data.spy_number > 0) |
| 2110 | /* mac80211 wants us to enable promiscuous mode */ | 4986 | wireless_spy_update(priv->netdev, hdr->addr2, &qual); |
| 2111 | priv->promisc = 1; | ||
| 2112 | } else if (!flags && priv->promisc) { | ||
| 2113 | /* we need to disable promiscuous mode */ | ||
| 2114 | priv->promisc = 0; | ||
| 2115 | } else | ||
| 2116 | return; | ||
| 2117 | 4987 | ||
| 2118 | queue_work(hw->workqueue, &priv->work_set_promisc); | 4988 | spin_unlock_bh(&priv->spy_spinlock); |
| 2119 | } | 4989 | } |
| 2120 | 4990 | ||
| 2121 | static int at76_set_key_oldfw(struct ieee80211_hw *hw, enum set_key_cmd cmd, | 4991 | static void at76_rx_tasklet(unsigned long param) |
| 2122 | const u8 *local_address, const u8 *address, | ||
| 2123 | struct ieee80211_key_conf *key) | ||
| 2124 | { | 4992 | { |
| 2125 | struct at76_priv *priv = hw->priv; | 4993 | struct urb *urb = (struct urb *)param; |
| 2126 | 4994 | struct at76_priv *priv = urb->context; | |
| 2127 | int i; | 4995 | struct net_device *netdev = priv->netdev; |
| 2128 | 4996 | struct at76_rx_buffer *buf; | |
| 2129 | at76_dbg(DBG_MAC80211, "%s(): cmd %d key->alg %d key->keyidx %d " | 4997 | struct ieee80211_hdr_3addr *i802_11_hdr; |
| 2130 | "key->keylen %d", | 4998 | u16 frame_ctl; |
| 2131 | __func__, cmd, key->alg, key->keyidx, key->keylen); | ||
| 2132 | 4999 | ||
| 2133 | if (key->alg != ALG_WEP) | 5000 | if (priv->device_unplugged) { |
| 2134 | return -EOPNOTSUPP; | 5001 | at76_dbg(DBG_DEVSTART, "device unplugged"); |
| 5002 | if (urb) | ||
| 5003 | at76_dbg(DBG_DEVSTART, "urb status %d", urb->status); | ||
| 5004 | return; | ||
| 5005 | } | ||
| 2135 | 5006 | ||
| 2136 | key->hw_key_idx = key->keyidx; | 5007 | if (!priv->rx_skb || !netdev || !priv->rx_skb->data) |
| 5008 | return; | ||
| 2137 | 5009 | ||
| 2138 | mutex_lock(&priv->mtx); | 5010 | buf = (struct at76_rx_buffer *)priv->rx_skb->data; |
| 2139 | 5011 | ||
| 2140 | switch (cmd) { | 5012 | i802_11_hdr = (struct ieee80211_hdr_3addr *)buf->packet; |
| 2141 | case SET_KEY: | ||
| 2142 | memcpy(priv->wep_keys[key->keyidx], key->key, key->keylen); | ||
| 2143 | priv->wep_keys_len[key->keyidx] = key->keylen; | ||
| 2144 | 5013 | ||
| 2145 | /* FIXME: find out how to do this properly */ | 5014 | frame_ctl = le16_to_cpu(i802_11_hdr->frame_ctl); |
| 2146 | priv->wep_key_id = key->keyidx; | ||
| 2147 | 5015 | ||
| 2148 | break; | 5016 | if (urb->status != 0) { |
| 2149 | case DISABLE_KEY: | 5017 | if (urb->status != -ENOENT && urb->status != -ECONNRESET) |
| 2150 | default: | 5018 | at76_dbg(DBG_URB, |
| 2151 | priv->wep_keys_len[key->keyidx] = 0; | 5019 | "%s %s: - nonzero Rx bulk status received: %d", |
| 2152 | break; | 5020 | __func__, netdev->name, urb->status); |
| 5021 | return; | ||
| 2153 | } | 5022 | } |
| 2154 | 5023 | ||
| 2155 | priv->wep_enabled = 0; | 5024 | at76_dbg(DBG_RX_ATMEL_HDR, |
| 5025 | "%s: rx frame: rate %d rssi %d noise %d link %d %s", | ||
| 5026 | priv->netdev->name, buf->rx_rate, buf->rssi, buf->noise_level, | ||
| 5027 | buf->link_quality, hex2str(i802_11_hdr, 48)); | ||
| 5028 | if (priv->iw_mode == IW_MODE_MONITOR) { | ||
| 5029 | at76_rx_monitor_mode(priv); | ||
| 5030 | goto exit; | ||
| 5031 | } | ||
| 2156 | 5032 | ||
| 2157 | for (i = 0; i < WEP_KEYS; i++) { | 5033 | /* there is a new bssid around, accept it: */ |
| 2158 | if (priv->wep_keys_len[i] != 0) | 5034 | if (buf->newbss && priv->iw_mode == IW_MODE_ADHOC) { |
| 2159 | priv->wep_enabled = 1; | 5035 | at76_dbg(DBG_PROGRESS, "%s: rx newbss", netdev->name); |
| 5036 | schedule_work(&priv->work_new_bss); | ||
| 2160 | } | 5037 | } |
| 2161 | 5038 | ||
| 2162 | at76_startup_device(priv); | 5039 | switch (frame_ctl & IEEE80211_FCTL_FTYPE) { |
| 5040 | case IEEE80211_FTYPE_DATA: | ||
| 5041 | at76_rx_data(priv); | ||
| 5042 | break; | ||
| 2163 | 5043 | ||
| 2164 | mutex_unlock(&priv->mtx); | 5044 | case IEEE80211_FTYPE_MGMT: |
| 5045 | /* jal: TODO: find out if we can update iwspy also on | ||
| 5046 | other frames than management (might depend on the | ||
| 5047 | radio chip / firmware version !) */ | ||
| 2165 | 5048 | ||
| 2166 | return 0; | 5049 | at76_iwspy_update(priv, buf); |
| 2167 | } | ||
| 2168 | 5050 | ||
| 2169 | static int at76_set_key_newfw(struct ieee80211_hw *hw, enum set_key_cmd cmd, | 5051 | at76_rx_mgmt(priv, buf); |
| 2170 | const u8 *local_address, const u8 *address, | 5052 | break; |
| 2171 | struct ieee80211_key_conf *key) | ||
| 2172 | { | ||
| 2173 | struct at76_priv *priv = hw->priv; | ||
| 2174 | int ret = -EOPNOTSUPP; | ||
| 2175 | |||
| 2176 | at76_dbg(DBG_MAC80211, "%s(): cmd %d key->alg %d key->keyidx %d " | ||
| 2177 | "key->keylen %d", | ||
| 2178 | __func__, cmd, key->alg, key->keyidx, key->keylen); | ||
| 2179 | 5053 | ||
| 2180 | mutex_lock(&priv->mtx); | 5054 | case IEEE80211_FTYPE_CTL: |
| 5055 | at76_dbg(DBG_RX_CTRL, "%s: ignored ctrl frame: %04x", | ||
| 5056 | priv->netdev->name, frame_ctl); | ||
| 5057 | break; | ||
| 2181 | 5058 | ||
| 2182 | priv->mib_buf.type = MIB_MAC_ENCRYPTION; | 5059 | default: |
| 5060 | printk(KERN_DEBUG "%s: ignoring frame with framectl 0x%04x\n", | ||
| 5061 | priv->netdev->name, frame_ctl); | ||
| 5062 | } | ||
| 5063 | exit: | ||
| 5064 | at76_submit_rx_urb(priv); | ||
| 5065 | } | ||
| 2183 | 5066 | ||
| 2184 | if (cmd == DISABLE_KEY) { | 5067 | /* Load firmware into kernel memory and parse it */ |
| 2185 | priv->mib_buf.size = CIPHER_KEY_LEN; | 5068 | static struct fwentry *at76_load_firmware(struct usb_device *udev, |
| 2186 | priv->mib_buf.index = offsetof(struct mib_mac_encryption, | 5069 | enum board_type board_type) |
| 2187 | cipher_default_keyvalue[key->keyidx]); | 5070 | { |
| 2188 | memset(priv->mib_buf.data.data, 0, CIPHER_KEY_LEN); | 5071 | int ret; |
| 2189 | if (at76_set_mib(priv, &priv->mib_buf) != CMD_STATUS_COMPLETE) | 5072 | char *str; |
| 2190 | ret = -EOPNOTSUPP; /* -EIO would be probably better */ | 5073 | struct at76_fw_header *fwh; |
| 2191 | else { | 5074 | struct fwentry *fwe = &firmwares[board_type]; |
| 2192 | 5075 | ||
| 2193 | priv->keys[key->keyidx].cipher = CIPHER_NONE; | 5076 | mutex_lock(&fw_mutex); |
| 2194 | priv->keys[key->keyidx].keylen = 0; | ||
| 2195 | }; | ||
| 2196 | if (priv->default_group_key == key->keyidx) | ||
| 2197 | priv->default_group_key = 0xff; | ||
| 2198 | 5077 | ||
| 2199 | if (priv->default_pairwise_key == key->keyidx) | 5078 | if (fwe->loaded) { |
| 2200 | priv->default_pairwise_key = 0xff; | 5079 | at76_dbg(DBG_FW, "re-using previously loaded fw"); |
| 2201 | /* If default pairwise key is removed, fall back to | ||
| 2202 | * group key? */ | ||
| 2203 | ret = 0; | ||
| 2204 | goto exit; | 5080 | goto exit; |
| 2205 | }; | 5081 | } |
| 2206 | |||
| 2207 | if (cmd == SET_KEY) { | ||
| 2208 | /* store key into MIB */ | ||
| 2209 | priv->mib_buf.size = CIPHER_KEY_LEN; | ||
| 2210 | priv->mib_buf.index = offsetof(struct mib_mac_encryption, | ||
| 2211 | cipher_default_keyvalue[key->keyidx]); | ||
| 2212 | memset(priv->mib_buf.data.data, 0, CIPHER_KEY_LEN); | ||
| 2213 | memcpy(priv->mib_buf.data.data, key->key, key->keylen); | ||
| 2214 | |||
| 2215 | switch (key->alg) { | ||
| 2216 | case ALG_WEP: | ||
| 2217 | if (key->keylen == 5) { | ||
| 2218 | priv->keys[key->keyidx].cipher = | ||
| 2219 | CIPHER_WEP64; | ||
| 2220 | priv->keys[key->keyidx].keylen = 8; | ||
| 2221 | } else if (key->keylen == 13) { | ||
| 2222 | priv->keys[key->keyidx].cipher = | ||
| 2223 | CIPHER_WEP128; | ||
| 2224 | /* Firmware needs this */ | ||
| 2225 | priv->keys[key->keyidx].keylen = 8; | ||
| 2226 | } else { | ||
| 2227 | ret = -EOPNOTSUPP; | ||
| 2228 | goto exit; | ||
| 2229 | }; | ||
| 2230 | break; | ||
| 2231 | case ALG_TKIP: | ||
| 2232 | key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC; | ||
| 2233 | priv->keys[key->keyidx].cipher = CIPHER_TKIP; | ||
| 2234 | priv->keys[key->keyidx].keylen = 12; | ||
| 2235 | break; | ||
| 2236 | 5082 | ||
| 2237 | case ALG_CCMP: | 5083 | at76_dbg(DBG_FW, "downloading firmware %s", fwe->fwname); |
| 2238 | if (!at76_is_505a(priv->board_type)) { | 5084 | ret = request_firmware(&fwe->fw, fwe->fwname, &udev->dev); |
| 2239 | ret = -EOPNOTSUPP; | 5085 | if (ret < 0) { |
| 2240 | goto exit; | 5086 | dev_printk(KERN_ERR, &udev->dev, "firmware %s not found!\n", |
| 2241 | }; | 5087 | fwe->fwname); |
| 2242 | key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC; | 5088 | dev_printk(KERN_ERR, &udev->dev, |
| 2243 | priv->keys[key->keyidx].cipher = CIPHER_CCMP; | 5089 | "you may need to download the firmware from " |
| 2244 | priv->keys[key->keyidx].keylen = 16; | 5090 | "http://developer.berlios.de/projects/at76c503a/"); |
| 2245 | break; | 5091 | goto exit; |
| 5092 | } | ||
| 2246 | 5093 | ||
| 2247 | default: | 5094 | at76_dbg(DBG_FW, "got it."); |
| 2248 | ret = -EOPNOTSUPP; | 5095 | fwh = (struct at76_fw_header *)(fwe->fw->data); |
| 2249 | goto exit; | ||
| 2250 | }; | ||
| 2251 | |||
| 2252 | priv->mib_buf.data.data[38] = priv->keys[key->keyidx].cipher; | ||
| 2253 | priv->mib_buf.data.data[39] = 1; /* Taken from atmelwlandriver, | ||
| 2254 | not documented */ | ||
| 2255 | |||
| 2256 | if (is_valid_ether_addr(address)) | ||
| 2257 | /* Pairwise key */ | ||
| 2258 | priv->mib_buf.data.data[39] |= (KEY_PAIRWISE | KEY_TX); | ||
| 2259 | else if (is_broadcast_ether_addr(address)) | ||
| 2260 | /* Group key */ | ||
| 2261 | priv->mib_buf.data.data[39] |= (KEY_TX); | ||
| 2262 | else /* Key used only for transmission ??? */ | ||
| 2263 | priv->mib_buf.data.data[39] |= (KEY_TX); | ||
| 2264 | |||
| 2265 | if (at76_set_mib(priv, &priv->mib_buf) != | ||
| 2266 | CMD_STATUS_COMPLETE) { | ||
| 2267 | ret = -EOPNOTSUPP; /* -EIO would be probably better */ | ||
| 2268 | goto exit; | ||
| 2269 | }; | ||
| 2270 | 5096 | ||
| 2271 | if ((key->alg == ALG_TKIP) || (key->alg == ALG_CCMP)) | 5097 | if (fwe->fw->size <= sizeof(*fwh)) { |
| 2272 | at76_reset_rsc(priv); | 5098 | dev_printk(KERN_ERR, &udev->dev, |
| 5099 | "firmware is too short (0x%zx)\n", fwe->fw->size); | ||
| 5100 | goto exit; | ||
| 5101 | } | ||
| 2273 | 5102 | ||
| 2274 | key->hw_key_idx = key->keyidx; | 5103 | /* CRC currently not checked */ |
| 5104 | fwe->board_type = le32_to_cpu(fwh->board_type); | ||
| 5105 | if (fwe->board_type != board_type) { | ||
| 5106 | dev_printk(KERN_ERR, &udev->dev, | ||
| 5107 | "board type mismatch, requested %u, got %u\n", | ||
| 5108 | board_type, fwe->board_type); | ||
| 5109 | goto exit; | ||
| 5110 | } | ||
| 2275 | 5111 | ||
| 2276 | /* Set up default keys */ | 5112 | fwe->fw_version.major = fwh->major; |
| 2277 | if (is_broadcast_ether_addr(address)) | 5113 | fwe->fw_version.minor = fwh->minor; |
| 2278 | priv->default_group_key = key->keyidx; | 5114 | fwe->fw_version.patch = fwh->patch; |
| 2279 | if (is_valid_ether_addr(address)) | 5115 | fwe->fw_version.build = fwh->build; |
| 2280 | priv->default_pairwise_key = key->keyidx; | ||
| 2281 | 5116 | ||
| 2282 | /* Set up encryption MIBs */ | 5117 | str = (char *)fwh + le32_to_cpu(fwh->str_offset); |
| 5118 | fwe->intfw = (u8 *)fwh + le32_to_cpu(fwh->int_fw_offset); | ||
| 5119 | fwe->intfw_size = le32_to_cpu(fwh->int_fw_len); | ||
| 5120 | fwe->extfw = (u8 *)fwh + le32_to_cpu(fwh->ext_fw_offset); | ||
| 5121 | fwe->extfw_size = le32_to_cpu(fwh->ext_fw_len); | ||
| 2283 | 5122 | ||
| 2284 | /* first block of settings */ | 5123 | fwe->loaded = 1; |
| 2285 | priv->mib_buf.size = 3; | ||
| 2286 | priv->mib_buf.index = offsetof(struct mib_mac_encryption, | ||
| 2287 | privacy_invoked); | ||
| 2288 | priv->mib_buf.data.data[0] = 1; /* privacy_invoked */ | ||
| 2289 | priv->mib_buf.data.data[1] = priv->default_pairwise_key; | ||
| 2290 | priv->mib_buf.data.data[2] = priv->default_group_key; | ||
| 2291 | 5124 | ||
| 2292 | ret = at76_set_mib(priv, &priv->mib_buf); | 5125 | dev_printk(KERN_DEBUG, &udev->dev, |
| 2293 | if (ret != CMD_STATUS_COMPLETE) | 5126 | "using firmware %s (version %d.%d.%d-%d)\n", |
| 2294 | goto exit; | 5127 | fwe->fwname, fwh->major, fwh->minor, fwh->patch, fwh->build); |
| 2295 | 5128 | ||
| 2296 | /* second block of settings */ | 5129 | at76_dbg(DBG_DEVSTART, "board %u, int %d:%d, ext %d:%d", board_type, |
| 2297 | priv->mib_buf.size = 3; | 5130 | le32_to_cpu(fwh->int_fw_offset), le32_to_cpu(fwh->int_fw_len), |
| 2298 | priv->mib_buf.index = offsetof(struct mib_mac_encryption, | 5131 | le32_to_cpu(fwh->ext_fw_offset), le32_to_cpu(fwh->ext_fw_len)); |
| 2299 | exclude_unencrypted); | 5132 | at76_dbg(DBG_DEVSTART, "firmware id %s", str); |
| 2300 | priv->mib_buf.data.data[0] = 1; /* exclude_unencrypted */ | ||
| 2301 | priv->mib_buf.data.data[1] = 0; /* wep_encryption_type */ | ||
| 2302 | priv->mib_buf.data.data[2] = 0; /* ckip_key_permutation */ | ||
| 2303 | 5133 | ||
| 2304 | ret = at76_set_mib(priv, &priv->mib_buf); | ||
| 2305 | if (ret != CMD_STATUS_COMPLETE) | ||
| 2306 | goto exit; | ||
| 2307 | ret = 0; | ||
| 2308 | }; | ||
| 2309 | exit: | 5134 | exit: |
| 2310 | at76_dump_mib_mac_encryption(priv); | 5135 | mutex_unlock(&fw_mutex); |
| 2311 | mutex_unlock(&priv->mtx); | ||
| 2312 | return ret; | ||
| 2313 | } | ||
| 2314 | |||
| 2315 | static int at76_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, | ||
| 2316 | const u8 *local_address, const u8 *address, | ||
| 2317 | struct ieee80211_key_conf *key) | ||
| 2318 | { | ||
| 2319 | struct at76_priv *priv = hw->priv; | ||
| 2320 | |||
| 2321 | at76_dbg(DBG_MAC80211, "%s(): cmd %d key->alg %d key->keyidx %d " | ||
| 2322 | "key->keylen %d", | ||
| 2323 | __func__, cmd, key->alg, key->keyidx, key->keylen); | ||
| 2324 | 5136 | ||
| 2325 | if (FIRMWARE_IS_WPA(priv->fw_version)) | 5137 | if (fwe->loaded) |
| 2326 | return at76_set_key_newfw(hw, cmd, local_address, address, key); | 5138 | return fwe; |
| 2327 | else | 5139 | else |
| 2328 | return at76_set_key_oldfw(hw, cmd, local_address, address, key); | 5140 | return NULL; |
| 2329 | |||
| 2330 | } | 5141 | } |
| 2331 | 5142 | ||
| 2332 | static const struct ieee80211_ops at76_ops = { | ||
| 2333 | .tx = at76_mac80211_tx, | ||
| 2334 | .add_interface = at76_add_interface, | ||
| 2335 | .remove_interface = at76_remove_interface, | ||
| 2336 | .config = at76_config, | ||
| 2337 | .config_interface = at76_config_interface, | ||
| 2338 | .configure_filter = at76_configure_filter, | ||
| 2339 | .start = at76_mac80211_start, | ||
| 2340 | .stop = at76_mac80211_stop, | ||
| 2341 | .hw_scan = at76_hw_scan, | ||
| 2342 | .set_key = at76_set_key, | ||
| 2343 | }; | ||
| 2344 | |||
| 2345 | /* Allocate network device and initialize private data */ | 5143 | /* Allocate network device and initialize private data */ |
| 2346 | static struct at76_priv *at76_alloc_new_device(struct usb_device *udev) | 5144 | static struct at76_priv *at76_alloc_new_device(struct usb_device *udev) |
| 2347 | { | 5145 | { |
| 2348 | struct ieee80211_hw *hw; | 5146 | struct net_device *netdev; |
| 2349 | struct at76_priv *priv; | 5147 | struct at76_priv *priv; |
| 5148 | int i; | ||
| 2350 | 5149 | ||
| 2351 | hw = ieee80211_alloc_hw(sizeof(struct at76_priv), &at76_ops); | 5150 | /* allocate memory for our device state and initialize it */ |
| 2352 | if (!hw) { | 5151 | netdev = alloc_etherdev(sizeof(struct at76_priv)); |
| 2353 | printk(KERN_ERR DRIVER_NAME ": could not register" | 5152 | if (!netdev) { |
| 2354 | " ieee80211_hw\n"); | 5153 | dev_printk(KERN_ERR, &udev->dev, "out of memory\n"); |
| 2355 | return NULL; | 5154 | return NULL; |
| 2356 | } | 5155 | } |
| 2357 | 5156 | ||
| 2358 | priv = hw->priv; | 5157 | priv = netdev_priv(netdev); |
| 2359 | priv->hw = hw; | ||
| 2360 | 5158 | ||
| 2361 | priv->udev = udev; | 5159 | priv->udev = udev; |
| 5160 | priv->netdev = netdev; | ||
| 2362 | 5161 | ||
| 2363 | mutex_init(&priv->mtx); | 5162 | mutex_init(&priv->mtx); |
| 5163 | INIT_WORK(&priv->work_assoc_done, at76_work_assoc_done); | ||
| 5164 | INIT_WORK(&priv->work_join, at76_work_join); | ||
| 5165 | INIT_WORK(&priv->work_new_bss, at76_work_new_bss); | ||
| 5166 | INIT_WORK(&priv->work_start_scan, at76_work_start_scan); | ||
| 2364 | INIT_WORK(&priv->work_set_promisc, at76_work_set_promisc); | 5167 | INIT_WORK(&priv->work_set_promisc, at76_work_set_promisc); |
| 2365 | INIT_WORK(&priv->work_submit_rx, at76_work_submit_rx); | 5168 | INIT_WORK(&priv->work_submit_rx, at76_work_submit_rx); |
| 2366 | INIT_DELAYED_WORK(&priv->dwork_hw_scan, at76_dwork_hw_scan); | 5169 | INIT_DELAYED_WORK(&priv->dwork_restart, at76_dwork_restart); |
| 5170 | INIT_DELAYED_WORK(&priv->dwork_get_scan, at76_dwork_get_scan); | ||
| 5171 | INIT_DELAYED_WORK(&priv->dwork_beacon, at76_dwork_beacon); | ||
| 5172 | INIT_DELAYED_WORK(&priv->dwork_auth, at76_dwork_auth); | ||
| 5173 | INIT_DELAYED_WORK(&priv->dwork_assoc, at76_dwork_assoc); | ||
| 5174 | |||
| 5175 | spin_lock_init(&priv->mgmt_spinlock); | ||
| 5176 | priv->next_mgmt_bulk = NULL; | ||
| 5177 | priv->mac_state = MAC_INIT; | ||
| 5178 | |||
| 5179 | /* initialize empty BSS list */ | ||
| 5180 | priv->curr_bss = NULL; | ||
| 5181 | INIT_LIST_HEAD(&priv->bss_list); | ||
| 5182 | spin_lock_init(&priv->bss_list_spinlock); | ||
| 5183 | |||
| 5184 | init_timer(&priv->bss_list_timer); | ||
| 5185 | priv->bss_list_timer.data = (unsigned long)priv; | ||
| 5186 | priv->bss_list_timer.function = at76_bss_list_timeout; | ||
| 5187 | |||
| 5188 | spin_lock_init(&priv->spy_spinlock); | ||
| 5189 | |||
| 5190 | /* mark all rx data entries as unused */ | ||
| 5191 | for (i = 0; i < NR_RX_DATA_BUF; i++) | ||
| 5192 | priv->rx_data[i].skb = NULL; | ||
| 2367 | 5193 | ||
| 2368 | priv->rx_tasklet.func = at76_rx_tasklet; | 5194 | priv->rx_tasklet.func = at76_rx_tasklet; |
| 2369 | priv->rx_tasklet.data = 0; | 5195 | priv->rx_tasklet.data = 0; |
| @@ -2371,9 +5197,6 @@ static struct at76_priv *at76_alloc_new_device(struct usb_device *udev) | |||
| 2371 | priv->pm_mode = AT76_PM_OFF; | 5197 | priv->pm_mode = AT76_PM_OFF; |
| 2372 | priv->pm_period = 0; | 5198 | priv->pm_period = 0; |
| 2373 | 5199 | ||
| 2374 | /* unit us */ | ||
| 2375 | priv->hw->channel_change_time = 100000; | ||
| 2376 | |||
| 2377 | return priv; | 5200 | return priv; |
| 2378 | } | 5201 | } |
| 2379 | 5202 | ||
| @@ -2436,42 +5259,11 @@ static int at76_alloc_urbs(struct at76_priv *priv, | |||
| 2436 | return 0; | 5259 | return 0; |
| 2437 | } | 5260 | } |
| 2438 | 5261 | ||
| 2439 | static struct ieee80211_rate at76_rates[] = { | ||
| 2440 | { .bitrate = 10, .hw_value = TX_RATE_1MBIT, }, | ||
| 2441 | { .bitrate = 20, .hw_value = TX_RATE_2MBIT, }, | ||
| 2442 | { .bitrate = 55, .hw_value = TX_RATE_5_5MBIT, }, | ||
| 2443 | { .bitrate = 110, .hw_value = TX_RATE_11MBIT, }, | ||
| 2444 | }; | ||
| 2445 | |||
| 2446 | static struct ieee80211_channel at76_channels[] = { | ||
| 2447 | { .center_freq = 2412, .hw_value = 1 }, | ||
| 2448 | { .center_freq = 2417, .hw_value = 2 }, | ||
| 2449 | { .center_freq = 2422, .hw_value = 3 }, | ||
| 2450 | { .center_freq = 2427, .hw_value = 4 }, | ||
| 2451 | { .center_freq = 2432, .hw_value = 5 }, | ||
| 2452 | { .center_freq = 2437, .hw_value = 6 }, | ||
| 2453 | { .center_freq = 2442, .hw_value = 7 }, | ||
| 2454 | { .center_freq = 2447, .hw_value = 8 }, | ||
| 2455 | { .center_freq = 2452, .hw_value = 9 }, | ||
| 2456 | { .center_freq = 2457, .hw_value = 10 }, | ||
| 2457 | { .center_freq = 2462, .hw_value = 11 }, | ||
| 2458 | { .center_freq = 2467, .hw_value = 12 }, | ||
| 2459 | { .center_freq = 2472, .hw_value = 13 }, | ||
| 2460 | { .center_freq = 2484, .hw_value = 14 } | ||
| 2461 | }; | ||
| 2462 | |||
| 2463 | static struct ieee80211_supported_band at76_supported_band = { | ||
| 2464 | .channels = at76_channels, | ||
| 2465 | .n_channels = ARRAY_SIZE(at76_channels), | ||
| 2466 | .bitrates = at76_rates, | ||
| 2467 | .n_bitrates = ARRAY_SIZE(at76_rates), | ||
| 2468 | }; | ||
| 2469 | |||
| 2470 | /* Register network device and initialize the hardware */ | 5262 | /* Register network device and initialize the hardware */ |
| 2471 | static int at76_init_new_device(struct at76_priv *priv, | 5263 | static int at76_init_new_device(struct at76_priv *priv, |
| 2472 | struct usb_interface *interface) | 5264 | struct usb_interface *interface) |
| 2473 | { | 5265 | { |
| 2474 | struct device *dev = &interface->dev; | 5266 | struct net_device *netdev = priv->netdev; |
| 2475 | int ret; | 5267 | int ret; |
| 2476 | 5268 | ||
| 2477 | /* set up the endpoint information */ | 5269 | /* set up the endpoint information */ |
| @@ -2487,11 +5279,14 @@ static int at76_init_new_device(struct at76_priv *priv, | |||
| 2487 | /* MAC address */ | 5279 | /* MAC address */ |
| 2488 | ret = at76_get_hw_config(priv); | 5280 | ret = at76_get_hw_config(priv); |
| 2489 | if (ret < 0) { | 5281 | if (ret < 0) { |
| 2490 | dev_err(dev, "cannot get MAC address\n"); | 5282 | dev_printk(KERN_ERR, &interface->dev, |
| 5283 | "cannot get MAC address\n"); | ||
| 2491 | goto exit; | 5284 | goto exit; |
| 2492 | } | 5285 | } |
| 2493 | 5286 | ||
| 2494 | priv->domain = at76_get_reg_domain(priv->regulatory_domain); | 5287 | priv->domain = at76_get_reg_domain(priv->regulatory_domain); |
| 5288 | /* init. netdev->dev_addr */ | ||
| 5289 | memcpy(netdev->dev_addr, priv->mac_addr, ETH_ALEN); | ||
| 2495 | 5290 | ||
| 2496 | priv->channel = DEF_CHANNEL; | 5291 | priv->channel = DEF_CHANNEL; |
| 2497 | priv->iw_mode = IW_MODE_INFRA; | 5292 | priv->iw_mode = IW_MODE_INFRA; |
| @@ -2501,54 +5296,47 @@ static int at76_init_new_device(struct at76_priv *priv, | |||
| 2501 | priv->txrate = TX_RATE_AUTO; | 5296 | priv->txrate = TX_RATE_AUTO; |
| 2502 | priv->preamble_type = PREAMBLE_TYPE_LONG; | 5297 | priv->preamble_type = PREAMBLE_TYPE_LONG; |
| 2503 | priv->beacon_period = 100; | 5298 | priv->beacon_period = 100; |
| 5299 | priv->beacons_last_qual = jiffies; | ||
| 2504 | priv->auth_mode = WLAN_AUTH_OPEN; | 5300 | priv->auth_mode = WLAN_AUTH_OPEN; |
| 2505 | priv->scan_min_time = DEF_SCAN_MIN_TIME; | 5301 | priv->scan_min_time = DEF_SCAN_MIN_TIME; |
| 2506 | priv->scan_max_time = DEF_SCAN_MAX_TIME; | 5302 | priv->scan_max_time = DEF_SCAN_MAX_TIME; |
| 2507 | priv->scan_mode = SCAN_TYPE_ACTIVE; | 5303 | priv->scan_mode = SCAN_TYPE_ACTIVE; |
| 2508 | priv->default_pairwise_key = 0xff; | ||
| 2509 | priv->default_group_key = 0xff; | ||
| 2510 | |||
| 2511 | /* mac80211 initialisation */ | ||
| 2512 | priv->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &at76_supported_band; | ||
| 2513 | 5304 | ||
| 2514 | if (FIRMWARE_IS_WPA(priv->fw_version) && | 5305 | netdev->flags &= ~IFF_MULTICAST; /* not yet or never */ |
| 2515 | (at76_is_503rfmd(priv->board_type) || | 5306 | netdev->open = at76_open; |
| 2516 | at76_is_505(priv->board_type))) | 5307 | netdev->stop = at76_stop; |
| 2517 | priv->hw->flags = IEEE80211_HW_SIGNAL_UNSPEC; | 5308 | netdev->get_stats = at76_get_stats; |
| 2518 | else | 5309 | netdev->ethtool_ops = &at76_ethtool_ops; |
| 2519 | priv->hw->flags = IEEE80211_HW_RX_INCLUDES_FCS | | 5310 | |
| 2520 | IEEE80211_HW_SIGNAL_UNSPEC; | 5311 | /* Add pointers to enable iwspy support. */ |
| 2521 | 5312 | priv->wireless_data.spy_data = &priv->spy_data; | |
| 2522 | priv->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION); | 5313 | netdev->wireless_data = &priv->wireless_data; |
| 2523 | 5314 | ||
| 2524 | SET_IEEE80211_DEV(priv->hw, &interface->dev); | 5315 | netdev->hard_start_xmit = at76_tx; |
| 2525 | SET_IEEE80211_PERM_ADDR(priv->hw, priv->mac_addr); | 5316 | netdev->tx_timeout = at76_tx_timeout; |
| 2526 | 5317 | netdev->watchdog_timeo = 2 * HZ; | |
| 2527 | ret = ieee80211_register_hw(priv->hw); | 5318 | netdev->wireless_handlers = &at76_handler_def; |
| 5319 | netdev->set_multicast_list = at76_set_multicast; | ||
| 5320 | netdev->set_mac_address = at76_set_mac_address; | ||
| 5321 | dev_alloc_name(netdev, "wlan%d"); | ||
| 5322 | |||
| 5323 | ret = register_netdev(priv->netdev); | ||
| 2528 | if (ret) { | 5324 | if (ret) { |
| 2529 | dev_err(dev, "cannot register mac80211 hw (status %d)!\n", ret); | 5325 | dev_printk(KERN_ERR, &interface->dev, |
| 5326 | "cannot register netdevice (status %d)!\n", ret); | ||
| 2530 | goto exit; | 5327 | goto exit; |
| 2531 | } | 5328 | } |
| 5329 | priv->netdev_registered = 1; | ||
| 2532 | 5330 | ||
| 2533 | priv->mac80211_registered = 1; | 5331 | printk(KERN_INFO "%s: USB %s, MAC %s, firmware %d.%d.%d-%d\n", |
| 5332 | netdev->name, dev_name(&interface->dev), mac2str(priv->mac_addr), | ||
| 5333 | priv->fw_version.major, priv->fw_version.minor, | ||
| 5334 | priv->fw_version.patch, priv->fw_version.build); | ||
| 5335 | printk(KERN_INFO "%s: regulatory domain 0x%02x: %s\n", netdev->name, | ||
| 5336 | priv->regulatory_domain, priv->domain->name); | ||
| 2534 | 5337 | ||
| 2535 | dev_info(dev, "%s: USB %s, MAC %s, firmware %d.%d.%d-%d\n", | 5338 | /* we let this timer run the whole time this driver instance lives */ |
| 2536 | wiphy_name(priv->hw->wiphy), | 5339 | mod_timer(&priv->bss_list_timer, jiffies + BSS_LIST_TIMEOUT); |
| 2537 | dev_name(&interface->dev), mac2str(priv->mac_addr), | ||
| 2538 | priv->fw_version.major, priv->fw_version.minor, | ||
| 2539 | priv->fw_version.patch, priv->fw_version.build); | ||
| 2540 | dev_info(dev, "%s: regulatory domain 0x%02x: %s\n", | ||
| 2541 | wiphy_name(priv->hw->wiphy), | ||
| 2542 | priv->regulatory_domain, priv->domain->name); | ||
| 2543 | dev_info(dev, "%s: WPA support: ", wiphy_name(priv->hw->wiphy)); | ||
| 2544 | if (!FIRMWARE_IS_WPA(priv->fw_version)) | ||
| 2545 | printk("none\n"); | ||
| 2546 | else { | ||
| 2547 | if (!at76_is_505a(priv->board_type)) | ||
| 2548 | printk("TKIP\n"); | ||
| 2549 | else | ||
| 2550 | printk("TKIP, AES/CCMP\n"); | ||
| 2551 | }; | ||
| 2552 | 5340 | ||
| 2553 | exit: | 5341 | exit: |
| 2554 | return ret; | 5342 | return ret; |
| @@ -2556,13 +5344,15 @@ exit: | |||
| 2556 | 5344 | ||
| 2557 | static void at76_delete_device(struct at76_priv *priv) | 5345 | static void at76_delete_device(struct at76_priv *priv) |
| 2558 | { | 5346 | { |
| 5347 | int i; | ||
| 5348 | |||
| 2559 | at76_dbg(DBG_PROC_ENTRY, "%s: ENTER", __func__); | 5349 | at76_dbg(DBG_PROC_ENTRY, "%s: ENTER", __func__); |
| 2560 | 5350 | ||
| 2561 | /* The device is gone, don't bother turning it off */ | 5351 | /* The device is gone, don't bother turning it off */ |
| 2562 | priv->device_unplugged = 1; | 5352 | priv->device_unplugged = 1; |
| 2563 | 5353 | ||
| 2564 | if (priv->mac80211_registered) | 5354 | if (priv->netdev_registered) |
| 2565 | ieee80211_unregister_hw(priv->hw); | 5355 | unregister_netdev(priv->netdev); |
| 2566 | 5356 | ||
| 2567 | /* assuming we used keventd, it must quiesce too */ | 5357 | /* assuming we used keventd, it must quiesce too */ |
| 2568 | flush_scheduled_work(); | 5358 | flush_scheduled_work(); |
| @@ -2583,11 +5373,25 @@ static void at76_delete_device(struct at76_priv *priv) | |||
| 2583 | if (priv->rx_skb) | 5373 | if (priv->rx_skb) |
| 2584 | kfree_skb(priv->rx_skb); | 5374 | kfree_skb(priv->rx_skb); |
| 2585 | 5375 | ||
| 5376 | at76_free_bss_list(priv); | ||
| 5377 | del_timer_sync(&priv->bss_list_timer); | ||
| 5378 | cancel_delayed_work(&priv->dwork_get_scan); | ||
| 5379 | cancel_delayed_work(&priv->dwork_beacon); | ||
| 5380 | cancel_delayed_work(&priv->dwork_auth); | ||
| 5381 | cancel_delayed_work(&priv->dwork_assoc); | ||
| 5382 | |||
| 5383 | if (priv->mac_state == MAC_CONNECTED) | ||
| 5384 | at76_iwevent_bss_disconnect(priv->netdev); | ||
| 5385 | |||
| 5386 | for (i = 0; i < NR_RX_DATA_BUF; i++) | ||
| 5387 | if (priv->rx_data[i].skb) { | ||
| 5388 | dev_kfree_skb(priv->rx_data[i].skb); | ||
| 5389 | priv->rx_data[i].skb = NULL; | ||
| 5390 | } | ||
| 2586 | usb_put_dev(priv->udev); | 5391 | usb_put_dev(priv->udev); |
| 2587 | 5392 | ||
| 2588 | at76_dbg(DBG_PROC_ENTRY, "%s: before freeing priv/ieee80211_hw", | 5393 | at76_dbg(DBG_PROC_ENTRY, "%s: before freeing priv/netdev", __func__); |
| 2589 | __func__); | 5394 | free_netdev(priv->netdev); /* priv is in netdev */ |
| 2590 | ieee80211_free_hw(priv->hw); | ||
| 2591 | 5395 | ||
| 2592 | at76_dbg(DBG_PROC_ENTRY, "%s: EXIT", __func__); | 5396 | at76_dbg(DBG_PROC_ENTRY, "%s: EXIT", __func__); |
| 2593 | } | 5397 | } |
| @@ -2621,8 +5425,8 @@ static int at76_probe(struct usb_interface *interface, | |||
| 2621 | we get 204 with 2.4.23, Fiberline FL-WL240u (505A+RFMD2958) ??? */ | 5425 | we get 204 with 2.4.23, Fiberline FL-WL240u (505A+RFMD2958) ??? */ |
| 2622 | 5426 | ||
| 2623 | if (op_mode == OPMODE_HW_CONFIG_MODE) { | 5427 | if (op_mode == OPMODE_HW_CONFIG_MODE) { |
| 2624 | dev_err(&interface->dev, | 5428 | dev_printk(KERN_ERR, &interface->dev, |
| 2625 | "cannot handle a device in HW_CONFIG_MODE\n"); | 5429 | "cannot handle a device in HW_CONFIG_MODE\n"); |
| 2626 | ret = -EBUSY; | 5430 | ret = -EBUSY; |
| 2627 | goto error; | 5431 | goto error; |
| 2628 | } | 5432 | } |
| @@ -2630,12 +5434,13 @@ static int at76_probe(struct usb_interface *interface, | |||
| 2630 | if (op_mode != OPMODE_NORMAL_NIC_WITH_FLASH | 5434 | if (op_mode != OPMODE_NORMAL_NIC_WITH_FLASH |
| 2631 | && op_mode != OPMODE_NORMAL_NIC_WITHOUT_FLASH) { | 5435 | && op_mode != OPMODE_NORMAL_NIC_WITHOUT_FLASH) { |
| 2632 | /* download internal firmware part */ | 5436 | /* download internal firmware part */ |
| 2633 | dev_dbg(&interface->dev, "downloading internal firmware\n"); | 5437 | dev_printk(KERN_DEBUG, &interface->dev, |
| 5438 | "downloading internal firmware\n"); | ||
| 2634 | ret = at76_load_internal_fw(udev, fwe); | 5439 | ret = at76_load_internal_fw(udev, fwe); |
| 2635 | if (ret < 0) { | 5440 | if (ret < 0) { |
| 2636 | dev_err(&interface->dev, | 5441 | dev_printk(KERN_ERR, &interface->dev, |
| 2637 | "error %d downloading internal firmware\n", | 5442 | "error %d downloading internal firmware\n", |
| 2638 | ret); | 5443 | ret); |
| 2639 | goto error; | 5444 | goto error; |
| 2640 | } | 5445 | } |
| 2641 | usb_put_dev(udev); | 5446 | usb_put_dev(udev); |
| @@ -2660,7 +5465,8 @@ static int at76_probe(struct usb_interface *interface, | |||
| 2660 | need_ext_fw = 1; | 5465 | need_ext_fw = 1; |
| 2661 | 5466 | ||
| 2662 | if (need_ext_fw) { | 5467 | if (need_ext_fw) { |
| 2663 | dev_dbg(&interface->dev, "downloading external firmware\n"); | 5468 | dev_printk(KERN_DEBUG, &interface->dev, |
| 5469 | "downloading external firmware\n"); | ||
| 2664 | 5470 | ||
| 2665 | ret = at76_load_external_fw(udev, fwe); | 5471 | ret = at76_load_external_fw(udev, fwe); |
| 2666 | if (ret) | 5472 | if (ret) |
| @@ -2669,8 +5475,8 @@ static int at76_probe(struct usb_interface *interface, | |||
| 2669 | /* Re-check firmware version */ | 5475 | /* Re-check firmware version */ |
| 2670 | ret = at76_get_mib(udev, MIB_FW_VERSION, &fwv, sizeof(fwv)); | 5476 | ret = at76_get_mib(udev, MIB_FW_VERSION, &fwv, sizeof(fwv)); |
| 2671 | if (ret < 0) { | 5477 | if (ret < 0) { |
| 2672 | dev_err(&interface->dev, | 5478 | dev_printk(KERN_ERR, &interface->dev, |
| 2673 | "error %d getting firmware version\n", ret); | 5479 | "error %d getting firmware version\n", ret); |
| 2674 | goto error; | 5480 | goto error; |
| 2675 | } | 5481 | } |
| 2676 | } | 5482 | } |
| @@ -2681,6 +5487,7 @@ static int at76_probe(struct usb_interface *interface, | |||
| 2681 | goto error; | 5487 | goto error; |
| 2682 | } | 5488 | } |
| 2683 | 5489 | ||
| 5490 | SET_NETDEV_DEV(priv->netdev, &interface->dev); | ||
| 2684 | usb_set_intfdata(interface, priv); | 5491 | usb_set_intfdata(interface, priv); |
| 2685 | 5492 | ||
| 2686 | memcpy(&priv->fw_version, &fwv, sizeof(struct mib_fw_version)); | 5493 | memcpy(&priv->fw_version, &fwv, sizeof(struct mib_fw_version)); |
| @@ -2708,7 +5515,7 @@ static void at76_disconnect(struct usb_interface *interface) | |||
| 2708 | if (!priv) | 5515 | if (!priv) |
| 2709 | return; | 5516 | return; |
| 2710 | 5517 | ||
| 2711 | printk(KERN_INFO "%s: disconnecting\n", wiphy_name(priv->hw->wiphy)); | 5518 | printk(KERN_INFO "%s: disconnecting\n", priv->netdev->name); |
| 2712 | at76_delete_device(priv); | 5519 | at76_delete_device(priv); |
| 2713 | dev_printk(KERN_INFO, &interface->dev, "disconnected\n"); | 5520 | dev_printk(KERN_INFO, &interface->dev, "disconnected\n"); |
| 2714 | } | 5521 | } |
| @@ -2764,8 +5571,5 @@ MODULE_AUTHOR("Alex <alex@foogod.com>"); | |||
| 2764 | MODULE_AUTHOR("Nick Jones"); | 5571 | MODULE_AUTHOR("Nick Jones"); |
| 2765 | MODULE_AUTHOR("Balint Seeber <n0_5p4m_p13453@hotmail.com>"); | 5572 | MODULE_AUTHOR("Balint Seeber <n0_5p4m_p13453@hotmail.com>"); |
| 2766 | MODULE_AUTHOR("Pavel Roskin <proski@gnu.org>"); | 5573 | MODULE_AUTHOR("Pavel Roskin <proski@gnu.org>"); |
| 2767 | MODULE_AUTHOR("Guido Guenther <agx@sigxcpu.org>"); | ||
| 2768 | MODULE_AUTHOR("Kalle Valo <kalle.valo@iki.fi>"); | ||
| 2769 | MODULE_AUTHOR("Milan Plzik <milan.plzik@gmail.com>"); | ||
| 2770 | MODULE_DESCRIPTION(DRIVER_DESC); | 5574 | MODULE_DESCRIPTION(DRIVER_DESC); |
| 2771 | MODULE_LICENSE("GPL"); | 5575 | MODULE_LICENSE("GPL"); |
diff --git a/drivers/staging/at76_usb/at76_usb.h b/drivers/staging/at76_usb/at76_usb.h index 8bb352f16d45..b20be9da1fa1 100644 --- a/drivers/staging/at76_usb/at76_usb.h +++ b/drivers/staging/at76_usb/at76_usb.h | |||
| @@ -34,6 +34,23 @@ enum board_type { | |||
| 34 | BOARD_505AMX = 8 | 34 | BOARD_505AMX = 8 |
| 35 | }; | 35 | }; |
| 36 | 36 | ||
| 37 | /* our private ioctl's */ | ||
| 38 | /* preamble length (0 - long, 1 - short, 2 - auto) */ | ||
| 39 | #define AT76_SET_SHORT_PREAMBLE (SIOCIWFIRSTPRIV + 0) | ||
| 40 | #define AT76_GET_SHORT_PREAMBLE (SIOCIWFIRSTPRIV + 1) | ||
| 41 | /* which debug channels are enabled */ | ||
| 42 | #define AT76_SET_DEBUG (SIOCIWFIRSTPRIV + 2) | ||
| 43 | #define AT76_GET_DEBUG (SIOCIWFIRSTPRIV + 3) | ||
| 44 | /* power save mode (incl. the Atmel proprietary smart save mode) */ | ||
| 45 | #define AT76_SET_POWERSAVE_MODE (SIOCIWFIRSTPRIV + 4) | ||
| 46 | #define AT76_GET_POWERSAVE_MODE (SIOCIWFIRSTPRIV + 5) | ||
| 47 | /* min and max channel times for scan */ | ||
| 48 | #define AT76_SET_SCAN_TIMES (SIOCIWFIRSTPRIV + 6) | ||
| 49 | #define AT76_GET_SCAN_TIMES (SIOCIWFIRSTPRIV + 7) | ||
| 50 | /* scan mode (0 - active, 1 - passive) */ | ||
| 51 | #define AT76_SET_SCAN_MODE (SIOCIWFIRSTPRIV + 8) | ||
| 52 | #define AT76_GET_SCAN_MODE (SIOCIWFIRSTPRIV + 9) | ||
| 53 | |||
| 37 | #define CMD_STATUS_IDLE 0x00 | 54 | #define CMD_STATUS_IDLE 0x00 |
| 38 | #define CMD_STATUS_COMPLETE 0x01 | 55 | #define CMD_STATUS_COMPLETE 0x01 |
| 39 | #define CMD_STATUS_UNKNOWN 0x02 | 56 | #define CMD_STATUS_UNKNOWN 0x02 |
| @@ -65,7 +82,6 @@ enum board_type { | |||
| 65 | #define MIB_MAC 0x03 | 82 | #define MIB_MAC 0x03 |
| 66 | #define MIB_MAC_MGMT 0x05 | 83 | #define MIB_MAC_MGMT 0x05 |
| 67 | #define MIB_MAC_WEP 0x06 | 84 | #define MIB_MAC_WEP 0x06 |
| 68 | #define MIB_MAC_ENCRYPTION 0x06 | ||
| 69 | #define MIB_PHY 0x07 | 85 | #define MIB_PHY 0x07 |
| 70 | #define MIB_FW_VERSION 0x08 | 86 | #define MIB_FW_VERSION 0x08 |
| 71 | #define MIB_MDOMAIN 0x09 | 87 | #define MIB_MDOMAIN 0x09 |
| @@ -90,26 +106,6 @@ enum board_type { | |||
| 90 | #define AT76_PM_ON 2 | 106 | #define AT76_PM_ON 2 |
| 91 | #define AT76_PM_SMART 3 | 107 | #define AT76_PM_SMART 3 |
| 92 | 108 | ||
| 93 | /* cipher values for encryption keys */ | ||
| 94 | #define CIPHER_NONE 0 /* this value is only guessed */ | ||
| 95 | #define CIPHER_WEP64 1 | ||
| 96 | #define CIPHER_TKIP 2 | ||
| 97 | #define CIPHER_CCMP 3 | ||
| 98 | #define CIPHER_CCX 4 /* for consistency sake only */ | ||
| 99 | #define CIPHER_WEP128 5 | ||
| 100 | |||
| 101 | /* bit flags key types for encryption keys */ | ||
| 102 | #define KEY_PAIRWISE 2 | ||
| 103 | #define KEY_TX 4 | ||
| 104 | |||
| 105 | #define CIPHER_KEYS (4) | ||
| 106 | #define CIPHER_KEY_LEN (40) | ||
| 107 | |||
| 108 | struct key_config { | ||
| 109 | u8 cipher; | ||
| 110 | u8 keylen; | ||
| 111 | }; | ||
| 112 | |||
| 113 | struct hwcfg_r505 { | 109 | struct hwcfg_r505 { |
| 114 | u8 cr39_values[14]; | 110 | u8 cr39_values[14]; |
| 115 | u8 reserved1[14]; | 111 | u8 reserved1[14]; |
| @@ -151,9 +147,6 @@ union at76_hwcfg { | |||
| 151 | 147 | ||
| 152 | #define WEP_SMALL_KEY_LEN (40 / 8) | 148 | #define WEP_SMALL_KEY_LEN (40 / 8) |
| 153 | #define WEP_LARGE_KEY_LEN (104 / 8) | 149 | #define WEP_LARGE_KEY_LEN (104 / 8) |
| 154 | #define WEP_KEYS (4) | ||
| 155 | |||
| 156 | |||
| 157 | 150 | ||
| 158 | struct at76_card_config { | 151 | struct at76_card_config { |
| 159 | u8 exclude_unencrypted; | 152 | u8 exclude_unencrypted; |
| @@ -168,7 +161,7 @@ struct at76_card_config { | |||
| 168 | u8 privacy_invoked; | 161 | u8 privacy_invoked; |
| 169 | u8 wep_default_key_id; /* 0..3 */ | 162 | u8 wep_default_key_id; /* 0..3 */ |
| 170 | u8 current_ssid[32]; | 163 | u8 current_ssid[32]; |
| 171 | u8 wep_default_key_value[4][WEP_LARGE_KEY_LEN]; | 164 | u8 wep_default_key_value[4][WEP_KEY_LEN]; |
| 172 | u8 ssid_len; | 165 | u8 ssid_len; |
| 173 | u8 short_preamble; | 166 | u8 short_preamble; |
| 174 | __le16 beacon_period; | 167 | __le16 beacon_period; |
| @@ -193,7 +186,7 @@ struct at76_rx_buffer { | |||
| 193 | u8 link_quality; | 186 | u8 link_quality; |
| 194 | u8 noise_level; | 187 | u8 noise_level; |
| 195 | __le32 rx_time; | 188 | __le32 rx_time; |
| 196 | u8 packet[IEEE80211_MAX_FRAG_THRESHOLD]; | 189 | u8 packet[IEEE80211_FRAME_LEN + IEEE80211_FCS_LEN]; |
| 197 | } __attribute__((packed)); | 190 | } __attribute__((packed)); |
| 198 | 191 | ||
| 199 | /* Length of Atmel-specific Tx header before 802.11 frame */ | 192 | /* Length of Atmel-specific Tx header before 802.11 frame */ |
| @@ -203,11 +196,8 @@ struct at76_tx_buffer { | |||
| 203 | __le16 wlength; | 196 | __le16 wlength; |
| 204 | u8 tx_rate; | 197 | u8 tx_rate; |
| 205 | u8 padding; | 198 | u8 padding; |
| 206 | u8 key_id; | 199 | u8 reserved[4]; |
| 207 | u8 cipher_type; | 200 | u8 packet[IEEE80211_FRAME_LEN + IEEE80211_FCS_LEN]; |
| 208 | u8 cipher_length; | ||
| 209 | u8 reserved; | ||
| 210 | u8 packet[IEEE80211_MAX_FRAG_THRESHOLD]; | ||
| 211 | } __attribute__((packed)); | 201 | } __attribute__((packed)); |
| 212 | 202 | ||
| 213 | /* defines for scan_type below */ | 203 | /* defines for scan_type below */ |
| @@ -254,7 +244,6 @@ struct set_mib_buffer { | |||
| 254 | u8 byte; | 244 | u8 byte; |
| 255 | __le16 word; | 245 | __le16 word; |
| 256 | u8 addr[ETH_ALEN]; | 246 | u8 addr[ETH_ALEN]; |
| 257 | u8 data[256]; /* we need more space for mib_mac_encryption */ | ||
| 258 | } data; | 247 | } data; |
| 259 | } __attribute__((packed)); | 248 | } __attribute__((packed)); |
| 260 | 249 | ||
| @@ -328,24 +317,10 @@ struct mib_mac_wep { | |||
| 328 | u8 exclude_unencrypted; | 317 | u8 exclude_unencrypted; |
| 329 | __le32 wep_icv_error_count; | 318 | __le32 wep_icv_error_count; |
| 330 | __le32 wep_excluded_count; | 319 | __le32 wep_excluded_count; |
| 331 | u8 wep_default_keyvalue[WEP_KEYS][WEP_LARGE_KEY_LEN]; | 320 | u8 wep_default_keyvalue[WEP_KEYS][WEP_KEY_LEN]; |
| 332 | u8 encryption_level; /* 1 for 40bit, 2 for 104bit encryption */ | 321 | u8 encryption_level; /* 1 for 40bit, 2 for 104bit encryption */ |
| 333 | } __attribute__((packed)); | 322 | } __attribute__((packed)); |
| 334 | 323 | ||
| 335 | struct mib_mac_encryption { | ||
| 336 | u8 cipher_default_keyvalue[CIPHER_KEYS][CIPHER_KEY_LEN]; | ||
| 337 | u8 tkip_bssid[6]; | ||
| 338 | u8 privacy_invoked; | ||
| 339 | u8 cipher_default_key_id; | ||
| 340 | u8 cipher_default_group_key_id; | ||
| 341 | u8 exclude_unencrypted; | ||
| 342 | u8 wep_encryption_type; | ||
| 343 | u8 ckip_key_permutation; /* bool */ | ||
| 344 | __le32 wep_icv_error_count; | ||
| 345 | __le32 wep_excluded_count; | ||
| 346 | u8 key_rsc[CIPHER_KEYS][8]; | ||
| 347 | } __attribute__((packed)); | ||
| 348 | |||
| 349 | struct mib_phy { | 324 | struct mib_phy { |
| 350 | __le32 ed_threshold; | 325 | __le32 ed_threshold; |
| 351 | 326 | ||
| @@ -389,6 +364,16 @@ struct at76_fw_header { | |||
| 389 | __le32 ext_fw_len; /* external firmware image length */ | 364 | __le32 ext_fw_len; /* external firmware image length */ |
| 390 | } __attribute__((packed)); | 365 | } __attribute__((packed)); |
| 391 | 366 | ||
| 367 | enum mac_state { | ||
| 368 | MAC_INIT, | ||
| 369 | MAC_SCANNING, | ||
| 370 | MAC_AUTH, | ||
| 371 | MAC_ASSOC, | ||
| 372 | MAC_JOINING, | ||
| 373 | MAC_CONNECTED, | ||
| 374 | MAC_OWN_IBSS | ||
| 375 | }; | ||
| 376 | |||
| 392 | /* a description of a regulatory domain and the allowed channels */ | 377 | /* a description of a regulatory domain and the allowed channels */ |
| 393 | struct reg_domain { | 378 | struct reg_domain { |
| 394 | u16 code; | 379 | u16 code; |
| @@ -396,6 +381,47 @@ struct reg_domain { | |||
| 396 | u32 channel_map; /* if bit N is set, channel (N+1) is allowed */ | 381 | u32 channel_map; /* if bit N is set, channel (N+1) is allowed */ |
| 397 | }; | 382 | }; |
| 398 | 383 | ||
| 384 | /* how long do we keep a (I)BSS in the bss_list in jiffies | ||
| 385 | this should be long enough for the user to retrieve the table | ||
| 386 | (by iwlist ?) after the device started, because all entries from | ||
| 387 | other channels than the one the device locks on get removed, too */ | ||
| 388 | #define BSS_LIST_TIMEOUT (120 * HZ) | ||
| 389 | /* struct to store BSS info found during scan */ | ||
| 390 | #define BSS_LIST_MAX_RATE_LEN 32 /* 32 rates should be enough ... */ | ||
| 391 | |||
| 392 | struct bss_info { | ||
| 393 | struct list_head list; | ||
| 394 | |||
| 395 | u8 bssid[ETH_ALEN]; /* bssid */ | ||
| 396 | u8 ssid[IW_ESSID_MAX_SIZE]; /* essid */ | ||
| 397 | u8 ssid_len; /* length of ssid above */ | ||
| 398 | u8 channel; | ||
| 399 | u16 capa; /* BSS capabilities */ | ||
| 400 | u16 beacon_interval; /* beacon interval, Kus (1024 microseconds) */ | ||
| 401 | u8 rates[BSS_LIST_MAX_RATE_LEN]; /* supported rates in units of | ||
| 402 | 500 kbps, ORed with 0x80 for | ||
| 403 | basic rates */ | ||
| 404 | u8 rates_len; | ||
| 405 | |||
| 406 | /* quality of received beacon */ | ||
| 407 | u8 rssi; | ||
| 408 | u8 link_qual; | ||
| 409 | u8 noise_level; | ||
| 410 | |||
| 411 | unsigned long last_rx; /* time (jiffies) of last beacon received */ | ||
| 412 | }; | ||
| 413 | |||
| 414 | /* a rx data buffer to collect rx fragments */ | ||
| 415 | struct rx_data_buf { | ||
| 416 | u8 sender[ETH_ALEN]; /* sender address */ | ||
| 417 | u16 seqnr; /* sequence number */ | ||
| 418 | u16 fragnr; /* last fragment received */ | ||
| 419 | unsigned long last_rx; /* jiffies of last rx */ | ||
| 420 | struct sk_buff *skb; /* == NULL if entry is free */ | ||
| 421 | }; | ||
| 422 | |||
| 423 | #define NR_RX_DATA_BUF 8 | ||
| 424 | |||
| 399 | /* Data for one loaded firmware file */ | 425 | /* Data for one loaded firmware file */ |
| 400 | struct fwentry { | 426 | struct fwentry { |
| 401 | const char *const fwname; | 427 | const char *const fwname; |
| @@ -412,9 +438,11 @@ struct fwentry { | |||
| 412 | 438 | ||
| 413 | struct at76_priv { | 439 | struct at76_priv { |
| 414 | struct usb_device *udev; /* USB device pointer */ | 440 | struct usb_device *udev; /* USB device pointer */ |
| 441 | struct net_device *netdev; /* net device pointer */ | ||
| 442 | struct net_device_stats stats; /* net device stats */ | ||
| 443 | struct iw_statistics wstats; /* wireless stats */ | ||
| 415 | 444 | ||
| 416 | struct sk_buff *rx_skb; /* skbuff for receiving data */ | 445 | struct sk_buff *rx_skb; /* skbuff for receiving data */ |
| 417 | struct sk_buff *tx_skb; /* skbuff for transmitting data */ | ||
| 418 | void *bulk_out_buffer; /* buffer for sending data */ | 446 | void *bulk_out_buffer; /* buffer for sending data */ |
| 419 | 447 | ||
| 420 | struct urb *tx_urb; /* URB for sending data */ | 448 | struct urb *tx_urb; /* URB for sending data */ |
| @@ -426,17 +454,26 @@ struct at76_priv { | |||
| 426 | struct mutex mtx; /* locks this structure */ | 454 | struct mutex mtx; /* locks this structure */ |
| 427 | 455 | ||
| 428 | /* work queues */ | 456 | /* work queues */ |
| 457 | struct work_struct work_assoc_done; | ||
| 458 | struct work_struct work_join; | ||
| 459 | struct work_struct work_new_bss; | ||
| 460 | struct work_struct work_start_scan; | ||
| 429 | struct work_struct work_set_promisc; | 461 | struct work_struct work_set_promisc; |
| 430 | struct work_struct work_submit_rx; | 462 | struct work_struct work_submit_rx; |
| 431 | struct delayed_work dwork_hw_scan; | 463 | struct delayed_work dwork_restart; |
| 464 | struct delayed_work dwork_get_scan; | ||
| 465 | struct delayed_work dwork_beacon; | ||
| 466 | struct delayed_work dwork_auth; | ||
| 467 | struct delayed_work dwork_assoc; | ||
| 432 | 468 | ||
| 433 | struct tasklet_struct rx_tasklet; | 469 | struct tasklet_struct rx_tasklet; |
| 434 | 470 | ||
| 435 | /* the WEP stuff */ | 471 | /* the WEP stuff */ |
| 436 | int wep_enabled; /* 1 if WEP is enabled */ | 472 | int wep_enabled; /* 1 if WEP is enabled */ |
| 437 | int wep_key_id; /* key id to be used */ | 473 | int wep_key_id; /* key id to be used */ |
| 438 | u8 wep_keys[WEP_KEYS][WEP_LARGE_KEY_LEN]; /* WEP keys */ | 474 | u8 wep_keys[WEP_KEYS][WEP_KEY_LEN]; /* the four WEP keys, |
| 439 | u8 wep_keys_len[WEP_KEYS]; /* length of WEP keys */ | 475 | 5 or 13 bytes are used */ |
| 476 | u8 wep_keys_len[WEP_KEYS]; /* the length of the above keys */ | ||
| 440 | 477 | ||
| 441 | int channel; | 478 | int channel; |
| 442 | int iw_mode; | 479 | int iw_mode; |
| @@ -458,13 +495,44 @@ struct at76_priv { | |||
| 458 | int scan_mode; /* SCAN_TYPE_ACTIVE, SCAN_TYPE_PASSIVE */ | 495 | int scan_mode; /* SCAN_TYPE_ACTIVE, SCAN_TYPE_PASSIVE */ |
| 459 | int scan_need_any; /* if set, need to scan for any ESSID */ | 496 | int scan_need_any; /* if set, need to scan for any ESSID */ |
| 460 | 497 | ||
| 498 | /* the list we got from scanning */ | ||
| 499 | spinlock_t bss_list_spinlock; /* protects bss_list operations */ | ||
| 500 | struct list_head bss_list; /* list of BSS we got beacons from */ | ||
| 501 | struct timer_list bss_list_timer; /* timer to purge old entries | ||
| 502 | from bss_list */ | ||
| 503 | struct bss_info *curr_bss; /* current BSS */ | ||
| 461 | u16 assoc_id; /* current association ID, if associated */ | 504 | u16 assoc_id; /* current association ID, if associated */ |
| 462 | 505 | ||
| 506 | u8 wanted_bssid[ETH_ALEN]; | ||
| 507 | int wanted_bssid_valid; /* != 0 if wanted_bssid is to be used */ | ||
| 508 | |||
| 509 | /* some data for infrastructure mode only */ | ||
| 510 | spinlock_t mgmt_spinlock; /* this spinlock protects access to | ||
| 511 | next_mgmt_bulk */ | ||
| 512 | |||
| 513 | struct at76_tx_buffer *next_mgmt_bulk; /* pending management msg to | ||
| 514 | send via bulk out */ | ||
| 515 | enum mac_state mac_state; | ||
| 516 | enum { | ||
| 517 | SCAN_IDLE, | ||
| 518 | SCAN_IN_PROGRESS, | ||
| 519 | SCAN_COMPLETED | ||
| 520 | } scan_state; | ||
| 521 | time_t last_scan; | ||
| 522 | |||
| 523 | int retries; /* remaining retries in case of timeout when | ||
| 524 | * sending AuthReq or AssocReq */ | ||
| 463 | u8 pm_mode; /* power management mode */ | 525 | u8 pm_mode; /* power management mode */ |
| 464 | u32 pm_period; /* power management period in microseconds */ | 526 | u32 pm_period; /* power management period in microseconds */ |
| 465 | 527 | ||
| 466 | struct reg_domain const *domain; /* reg domain description */ | 528 | struct reg_domain const *domain; /* reg domain description */ |
| 467 | 529 | ||
| 530 | /* iwspy support */ | ||
| 531 | spinlock_t spy_spinlock; | ||
| 532 | struct iw_spy_data spy_data; | ||
| 533 | |||
| 534 | struct iw_public_data wireless_data; | ||
| 535 | |||
| 468 | /* These fields contain HW config provided by the device (not all of | 536 | /* These fields contain HW config provided by the device (not all of |
| 469 | * these fields are used by all board types) */ | 537 | * these fields are used by all board types) */ |
| 470 | u8 mac_addr[ETH_ALEN]; | 538 | u8 mac_addr[ETH_ALEN]; |
| @@ -472,6 +540,9 @@ struct at76_priv { | |||
| 472 | 540 | ||
| 473 | struct at76_card_config card_config; | 541 | struct at76_card_config card_config; |
| 474 | 542 | ||
| 543 | /* store rx fragments until complete */ | ||
| 544 | struct rx_data_buf rx_data[NR_RX_DATA_BUF]; | ||
| 545 | |||
| 475 | enum board_type board_type; | 546 | enum board_type board_type; |
| 476 | struct mib_fw_version fw_version; | 547 | struct mib_fw_version fw_version; |
| 477 | 548 | ||
| @@ -479,20 +550,58 @@ struct at76_priv { | |||
| 479 | unsigned int netdev_registered:1; | 550 | unsigned int netdev_registered:1; |
| 480 | struct set_mib_buffer mib_buf; /* global buffer for set_mib calls */ | 551 | struct set_mib_buffer mib_buf; /* global buffer for set_mib calls */ |
| 481 | 552 | ||
| 553 | /* beacon counting */ | ||
| 482 | int beacon_period; /* period of mgmt beacons, Kus */ | 554 | int beacon_period; /* period of mgmt beacons, Kus */ |
| 555 | int beacons_received; | ||
| 556 | unsigned long beacons_last_qual; /* time we restarted counting | ||
| 557 | beacons */ | ||
| 558 | }; | ||
| 483 | 559 | ||
| 484 | struct ieee80211_hw *hw; | 560 | struct at76_rx_radiotap { |
| 485 | int mac80211_registered; | 561 | struct ieee80211_radiotap_header rt_hdr; |
| 486 | 562 | __le64 rt_tsft; | |
| 487 | struct key_config keys[4]; /* installed key types */ | 563 | u8 rt_flags; |
| 488 | u8 default_pairwise_key; | 564 | u8 rt_rate; |
| 489 | u8 default_group_key; | 565 | s8 rt_signal; |
| 566 | s8 rt_noise; | ||
| 490 | }; | 567 | }; |
| 491 | 568 | ||
| 492 | #define AT76_SUPPORTED_FILTERS FIF_PROMISC_IN_BSS | 569 | #define AT76_RX_RADIOTAP_PRESENT \ |
| 570 | ((1 << IEEE80211_RADIOTAP_TSFT) | \ | ||
| 571 | (1 << IEEE80211_RADIOTAP_FLAGS) | \ | ||
| 572 | (1 << IEEE80211_RADIOTAP_RATE) | \ | ||
| 573 | (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL) | \ | ||
| 574 | (1 << IEEE80211_RADIOTAP_DB_ANTNOISE)) | ||
| 575 | |||
| 576 | #define BEACON_MAX_DATA_LENGTH 1500 | ||
| 577 | |||
| 578 | /* the maximum size of an AssocReq packet */ | ||
| 579 | #define ASSOCREQ_MAX_SIZE \ | ||
| 580 | (AT76_TX_HDRLEN + sizeof(struct ieee80211_assoc_request) + \ | ||
| 581 | 1 + 1 + IW_ESSID_MAX_SIZE + 1 + 1 + 4) | ||
| 582 | |||
| 583 | /* for shared secret auth, add the challenge text size */ | ||
| 584 | #define AUTH_FRAME_SIZE (AT76_TX_HDRLEN + sizeof(struct ieee80211_auth)) | ||
| 585 | |||
| 586 | /* Maximal number of AuthReq retries */ | ||
| 587 | #define AUTH_RETRIES 3 | ||
| 493 | 588 | ||
| 589 | /* Maximal number of AssocReq retries */ | ||
| 590 | #define ASSOC_RETRIES 3 | ||
| 591 | |||
| 592 | /* Beacon timeout in managed mode when we are connected */ | ||
| 593 | #define BEACON_TIMEOUT (10 * HZ) | ||
| 594 | |||
| 595 | /* Timeout for authentication response */ | ||
| 596 | #define AUTH_TIMEOUT (1 * HZ) | ||
| 597 | |||
| 598 | /* Timeout for association response */ | ||
| 599 | #define ASSOC_TIMEOUT (1 * HZ) | ||
| 600 | |||
| 601 | /* Polling interval when scan is running */ | ||
| 494 | #define SCAN_POLL_INTERVAL (HZ / 4) | 602 | #define SCAN_POLL_INTERVAL (HZ / 4) |
| 495 | 603 | ||
| 604 | /* Command completion timeout */ | ||
| 496 | #define CMD_COMPLETION_TIMEOUT (5 * HZ) | 605 | #define CMD_COMPLETION_TIMEOUT (5 * HZ) |
| 497 | 606 | ||
| 498 | #define DEF_RTS_THRESHOLD 1536 | 607 | #define DEF_RTS_THRESHOLD 1536 |
| @@ -502,6 +611,8 @@ struct at76_priv { | |||
| 502 | #define DEF_SCAN_MIN_TIME 10 | 611 | #define DEF_SCAN_MIN_TIME 10 |
| 503 | #define DEF_SCAN_MAX_TIME 120 | 612 | #define DEF_SCAN_MAX_TIME 120 |
| 504 | 613 | ||
| 614 | #define MAX_RTS_THRESHOLD (MAX_FRAG_THRESHOLD + 1) | ||
| 615 | |||
| 505 | /* the max padding size for tx in bytes (see calc_padding) */ | 616 | /* the max padding size for tx in bytes (see calc_padding) */ |
| 506 | #define MAX_PADDING_SIZE 53 | 617 | #define MAX_PADDING_SIZE 53 |
| 507 | 618 | ||
diff --git a/drivers/staging/panel/panel.c b/drivers/staging/panel/panel.c index 5ffe269c2382..c2747bc88c6f 100644 --- a/drivers/staging/panel/panel.c +++ b/drivers/staging/panel/panel.c | |||
| @@ -622,7 +622,7 @@ static int set_ctrl_bits(void) | |||
| 622 | } | 622 | } |
| 623 | 623 | ||
| 624 | /* sets ctrl & data port bits according to current signals values */ | 624 | /* sets ctrl & data port bits according to current signals values */ |
| 625 | static void set_bits(void) | 625 | static void panel_set_bits(void) |
| 626 | { | 626 | { |
| 627 | set_data_bits(); | 627 | set_data_bits(); |
| 628 | set_ctrl_bits(); | 628 | set_ctrl_bits(); |
| @@ -707,12 +707,12 @@ static void lcd_send_serial(int byte) | |||
| 707 | */ | 707 | */ |
| 708 | for (bit = 0; bit < 8; bit++) { | 708 | for (bit = 0; bit < 8; bit++) { |
| 709 | bits.cl = BIT_CLR; /* CLK low */ | 709 | bits.cl = BIT_CLR; /* CLK low */ |
| 710 | set_bits(); | 710 | panel_set_bits(); |
| 711 | bits.da = byte & 1; | 711 | bits.da = byte & 1; |
| 712 | set_bits(); | 712 | panel_set_bits(); |
| 713 | udelay(2); /* maintain the data during 2 us before CLK up */ | 713 | udelay(2); /* maintain the data during 2 us before CLK up */ |
| 714 | bits.cl = BIT_SET; /* CLK high */ | 714 | bits.cl = BIT_SET; /* CLK high */ |
| 715 | set_bits(); | 715 | panel_set_bits(); |
| 716 | udelay(1); /* maintain the strobe during 1 us */ | 716 | udelay(1); /* maintain the strobe during 1 us */ |
| 717 | byte >>= 1; | 717 | byte >>= 1; |
| 718 | } | 718 | } |
| @@ -727,7 +727,7 @@ static void lcd_backlight(int on) | |||
| 727 | /* The backlight is activated by seting the AUTOFEED line to +5V */ | 727 | /* The backlight is activated by seting the AUTOFEED line to +5V */ |
| 728 | spin_lock(&pprt_lock); | 728 | spin_lock(&pprt_lock); |
| 729 | bits.bl = on; | 729 | bits.bl = on; |
| 730 | set_bits(); | 730 | panel_set_bits(); |
| 731 | spin_unlock(&pprt_lock); | 731 | spin_unlock(&pprt_lock); |
| 732 | } | 732 | } |
| 733 | 733 | ||
| @@ -2164,19 +2164,20 @@ static void __exit panel_cleanup_module(void) | |||
| 2164 | if (scan_timer.function != NULL) | 2164 | if (scan_timer.function != NULL) |
| 2165 | del_timer(&scan_timer); | 2165 | del_timer(&scan_timer); |
| 2166 | 2166 | ||
| 2167 | if (keypad_enabled) | 2167 | if (pprt != NULL) { |
| 2168 | misc_deregister(&keypad_dev); | 2168 | if (keypad_enabled) |
| 2169 | 2169 | misc_deregister(&keypad_dev); | |
| 2170 | if (lcd_enabled) { | ||
| 2171 | panel_lcd_print("\x0cLCD driver " PANEL_VERSION | ||
| 2172 | "\nunloaded.\x1b[Lc\x1b[Lb\x1b[L-"); | ||
| 2173 | misc_deregister(&lcd_dev); | ||
| 2174 | } | ||
| 2175 | 2170 | ||
| 2176 | /* TODO: free all input signals */ | 2171 | if (lcd_enabled) { |
| 2172 | panel_lcd_print("\x0cLCD driver " PANEL_VERSION | ||
| 2173 | "\nunloaded.\x1b[Lc\x1b[Lb\x1b[L-"); | ||
| 2174 | misc_deregister(&lcd_dev); | ||
| 2175 | } | ||
| 2177 | 2176 | ||
| 2178 | parport_release(pprt); | 2177 | /* TODO: free all input signals */ |
| 2179 | parport_unregister_device(pprt); | 2178 | parport_release(pprt); |
| 2179 | parport_unregister_device(pprt); | ||
| 2180 | } | ||
| 2180 | parport_unregister_driver(&panel_driver); | 2181 | parport_unregister_driver(&panel_driver); |
| 2181 | } | 2182 | } |
| 2182 | 2183 | ||
diff --git a/drivers/staging/rtl8187se/Kconfig b/drivers/staging/rtl8187se/Kconfig index 79c225acd1ad..f636296b54bc 100644 --- a/drivers/staging/rtl8187se/Kconfig +++ b/drivers/staging/rtl8187se/Kconfig | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | config RTL8187SE | 1 | config RTL8187SE |
| 2 | tristate "RealTek RTL8187SE Wireless LAN NIC driver" | 2 | tristate "RealTek RTL8187SE Wireless LAN NIC driver" |
| 3 | depends on PCI | 3 | depends on PCI |
| 4 | depends on WIRELESS_EXT && COMPAT_NET_DEV_OPS | ||
| 4 | default N | 5 | default N |
| 5 | ---help--- | 6 | ---help--- |
diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt.c b/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt.c index af64cfbe16db..7370296225e1 100644 --- a/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt.c +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt.c | |||
| @@ -234,20 +234,21 @@ out: | |||
| 234 | void ieee80211_crypto_deinit(void) | 234 | void ieee80211_crypto_deinit(void) |
| 235 | { | 235 | { |
| 236 | struct list_head *ptr, *n; | 236 | struct list_head *ptr, *n; |
| 237 | struct ieee80211_crypto_alg *alg = NULL; | ||
| 237 | 238 | ||
| 238 | if (hcrypt == NULL) | 239 | if (hcrypt == NULL) |
| 239 | return; | 240 | return; |
| 240 | 241 | ||
| 241 | for (ptr = hcrypt->algs.next, n = ptr->next; ptr != &hcrypt->algs; | 242 | list_for_each_safe(ptr, n, &hcrypt->algs) { |
| 242 | ptr = n, n = ptr->next) { | 243 | alg = list_entry(ptr, struct ieee80211_crypto_alg, list); |
| 243 | struct ieee80211_crypto_alg *alg = | 244 | if (alg) { |
| 244 | (struct ieee80211_crypto_alg *) ptr; | 245 | list_del(ptr); |
| 245 | list_del(ptr); | 246 | printk(KERN_DEBUG |
| 246 | printk(KERN_DEBUG "ieee80211_crypt: unregistered algorithm " | 247 | "ieee80211_crypt: unregistered algorithm '%s' (deinit)\n", |
| 247 | "'%s' (deinit)\n", alg->ops->name); | 248 | alg->ops->name); |
| 248 | kfree(alg); | 249 | kfree(alg); |
| 250 | } | ||
| 249 | } | 251 | } |
| 250 | |||
| 251 | kfree(hcrypt); | 252 | kfree(hcrypt); |
| 252 | } | 253 | } |
| 253 | 254 | ||
diff --git a/drivers/staging/rtl8187se/r8180_core.c b/drivers/staging/rtl8187se/r8180_core.c index 94534955e38b..66de5cc8ddf1 100644 --- a/drivers/staging/rtl8187se/r8180_core.c +++ b/drivers/staging/rtl8187se/r8180_core.c | |||
| @@ -6161,10 +6161,10 @@ static void __exit rtl8180_pci_module_exit(void) | |||
| 6161 | { | 6161 | { |
| 6162 | pci_unregister_driver (&rtl8180_pci_driver); | 6162 | pci_unregister_driver (&rtl8180_pci_driver); |
| 6163 | rtl8180_proc_module_remove(); | 6163 | rtl8180_proc_module_remove(); |
| 6164 | ieee80211_crypto_deinit(); | ||
| 6165 | ieee80211_crypto_tkip_exit(); | 6164 | ieee80211_crypto_tkip_exit(); |
| 6166 | ieee80211_crypto_ccmp_exit(); | 6165 | ieee80211_crypto_ccmp_exit(); |
| 6167 | ieee80211_crypto_wep_exit(); | 6166 | ieee80211_crypto_wep_exit(); |
| 6167 | ieee80211_crypto_deinit(); | ||
| 6168 | DMESG("Exiting"); | 6168 | DMESG("Exiting"); |
| 6169 | } | 6169 | } |
| 6170 | 6170 | ||
diff --git a/drivers/staging/winbond/wbusb.c b/drivers/staging/winbond/wbusb.c index b003f9a7e151..f716b2e92b65 100644 --- a/drivers/staging/winbond/wbusb.c +++ b/drivers/staging/winbond/wbusb.c | |||
| @@ -319,16 +319,18 @@ static int wb35_probe(struct usb_interface *intf, const struct usb_device_id *id | |||
| 319 | struct usb_device *udev = interface_to_usbdev(intf); | 319 | struct usb_device *udev = interface_to_usbdev(intf); |
| 320 | struct wbsoft_priv *priv; | 320 | struct wbsoft_priv *priv; |
| 321 | struct ieee80211_hw *dev; | 321 | struct ieee80211_hw *dev; |
| 322 | int err; | 322 | int nr, err; |
| 323 | 323 | ||
| 324 | usb_get_dev(udev); | 324 | usb_get_dev(udev); |
| 325 | 325 | ||
| 326 | // 20060630.2 Check the device if it already be opened | 326 | // 20060630.2 Check the device if it already be opened |
| 327 | err = usb_control_msg(udev, usb_rcvctrlpipe( udev, 0 ), | 327 | nr = usb_control_msg(udev, usb_rcvctrlpipe( udev, 0 ), |
| 328 | 0x01, USB_TYPE_VENDOR|USB_RECIP_DEVICE|USB_DIR_IN, | 328 | 0x01, USB_TYPE_VENDOR|USB_RECIP_DEVICE|USB_DIR_IN, |
| 329 | 0x0, 0x400, <mp, 4, HZ*100 ); | 329 | 0x0, 0x400, <mp, 4, HZ*100 ); |
| 330 | if (err) | 330 | if (nr < 0) { |
| 331 | err = nr; | ||
| 331 | goto error; | 332 | goto error; |
| 333 | } | ||
| 332 | 334 | ||
| 333 | ltmp = cpu_to_le32(ltmp); | 335 | ltmp = cpu_to_le32(ltmp); |
| 334 | if (ltmp) { // Is already initialized? | 336 | if (ltmp) { // Is already initialized? |
| @@ -337,8 +339,10 @@ static int wb35_probe(struct usb_interface *intf, const struct usb_device_id *id | |||
| 337 | } | 339 | } |
| 338 | 340 | ||
| 339 | dev = ieee80211_alloc_hw(sizeof(*priv), &wbsoft_ops); | 341 | dev = ieee80211_alloc_hw(sizeof(*priv), &wbsoft_ops); |
| 340 | if (!dev) | 342 | if (!dev) { |
| 343 | err = -ENOMEM; | ||
| 341 | goto error; | 344 | goto error; |
| 345 | } | ||
| 342 | 346 | ||
| 343 | priv = dev->priv; | 347 | priv = dev->priv; |
| 344 | 348 | ||
| @@ -369,9 +373,11 @@ static int wb35_probe(struct usb_interface *intf, const struct usb_device_id *id | |||
| 369 | } | 373 | } |
| 370 | 374 | ||
| 371 | dev->extra_tx_headroom = 12; /* FIXME */ | 375 | dev->extra_tx_headroom = 12; /* FIXME */ |
| 372 | dev->flags = 0; | 376 | dev->flags = IEEE80211_HW_SIGNAL_UNSPEC; |
| 377 | dev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION); | ||
| 373 | 378 | ||
| 374 | dev->channel_change_time = 1000; | 379 | dev->channel_change_time = 1000; |
| 380 | dev->max_signal = 100; | ||
| 375 | dev->queues = 1; | 381 | dev->queues = 1; |
| 376 | 382 | ||
| 377 | dev->wiphy->bands[IEEE80211_BAND_2GHZ] = &wbsoft_band_2GHz; | 383 | dev->wiphy->bands[IEEE80211_BAND_2GHZ] = &wbsoft_band_2GHz; |
diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index 8bcde8cde554..b2ceb4aff233 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile | |||
| @@ -11,6 +11,7 @@ obj-$(CONFIG_USB_MON) += mon/ | |||
| 11 | obj-$(CONFIG_PCI) += host/ | 11 | obj-$(CONFIG_PCI) += host/ |
| 12 | obj-$(CONFIG_USB_EHCI_HCD) += host/ | 12 | obj-$(CONFIG_USB_EHCI_HCD) += host/ |
| 13 | obj-$(CONFIG_USB_ISP116X_HCD) += host/ | 13 | obj-$(CONFIG_USB_ISP116X_HCD) += host/ |
| 14 | obj-$(CONFIG_USB_ISP1760_HCD) += host/ | ||
| 14 | obj-$(CONFIG_USB_OHCI_HCD) += host/ | 15 | obj-$(CONFIG_USB_OHCI_HCD) += host/ |
| 15 | obj-$(CONFIG_USB_UHCI_HCD) += host/ | 16 | obj-$(CONFIG_USB_UHCI_HCD) += host/ |
| 16 | obj-$(CONFIG_USB_FHCI_HCD) += host/ | 17 | obj-$(CONFIG_USB_FHCI_HCD) += host/ |
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index 97ba4a985edc..b3d5a23ab56f 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c | |||
| @@ -1349,9 +1349,6 @@ static struct usb_device_id acm_ids[] = { | |||
| 1349 | { USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */ | 1349 | { USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */ |
| 1350 | .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ | 1350 | .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ |
| 1351 | }, | 1351 | }, |
| 1352 | { USB_DEVICE(0x0e8d, 0x3329), /* i-blue 747, Qstarz BT-Q1000, Holux M-241 */ | ||
| 1353 | .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ | ||
| 1354 | }, | ||
| 1355 | { USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */ | 1352 | { USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */ |
| 1356 | .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ | 1353 | .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ |
| 1357 | }, | 1354 | }, |
| @@ -1379,6 +1376,15 @@ static struct usb_device_id acm_ids[] = { | |||
| 1379 | { USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */ | 1376 | { USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */ |
| 1380 | .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ | 1377 | .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ |
| 1381 | }, | 1378 | }, |
| 1379 | { USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */ | ||
| 1380 | }, | ||
| 1381 | { USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */ | ||
| 1382 | .driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on | ||
| 1383 | data interface instead of | ||
| 1384 | communications interface. | ||
| 1385 | Maybe we should define a new | ||
| 1386 | quirk for this. */ | ||
| 1387 | }, | ||
| 1382 | 1388 | ||
| 1383 | /* control interfaces with various AT-command sets */ | 1389 | /* control interfaces with various AT-command sets */ |
| 1384 | { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, | 1390 | { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, |
diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c index c54fc40458b1..a4301dc02d27 100644 --- a/drivers/usb/core/hcd-pci.c +++ b/drivers/usb/core/hcd-pci.c | |||
| @@ -298,19 +298,6 @@ int usb_hcd_pci_suspend(struct pci_dev *dev, pm_message_t message) | |||
| 298 | EXPORT_SYMBOL_GPL(usb_hcd_pci_suspend); | 298 | EXPORT_SYMBOL_GPL(usb_hcd_pci_suspend); |
| 299 | 299 | ||
| 300 | /** | 300 | /** |
| 301 | * usb_hcd_pci_resume_early - resume a PCI-based HCD before IRQs are enabled | ||
| 302 | * @dev: USB Host Controller being resumed | ||
| 303 | * | ||
| 304 | * Store this function in the HCD's struct pci_driver as .resume_early. | ||
| 305 | */ | ||
| 306 | int usb_hcd_pci_resume_early(struct pci_dev *dev) | ||
| 307 | { | ||
| 308 | pci_restore_state(dev); | ||
| 309 | return 0; | ||
| 310 | } | ||
| 311 | EXPORT_SYMBOL_GPL(usb_hcd_pci_resume_early); | ||
| 312 | |||
| 313 | /** | ||
| 314 | * usb_hcd_pci_resume - power management resume of a PCI-based HCD | 301 | * usb_hcd_pci_resume - power management resume of a PCI-based HCD |
| 315 | * @dev: USB Host Controller being resumed | 302 | * @dev: USB Host Controller being resumed |
| 316 | * | 303 | * |
| @@ -333,6 +320,8 @@ int usb_hcd_pci_resume(struct pci_dev *dev) | |||
| 333 | } | 320 | } |
| 334 | #endif | 321 | #endif |
| 335 | 322 | ||
| 323 | pci_restore_state(dev); | ||
| 324 | |||
| 336 | hcd = pci_get_drvdata(dev); | 325 | hcd = pci_get_drvdata(dev); |
| 337 | if (hcd->state != HC_STATE_SUSPENDED) { | 326 | if (hcd->state != HC_STATE_SUSPENDED) { |
| 338 | dev_dbg(hcd->self.controller, | 327 | dev_dbg(hcd->self.controller, |
diff --git a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h index 5b94a56bec23..f750eb1ab595 100644 --- a/drivers/usb/core/hcd.h +++ b/drivers/usb/core/hcd.h | |||
| @@ -257,7 +257,6 @@ extern void usb_hcd_pci_remove(struct pci_dev *dev); | |||
| 257 | 257 | ||
| 258 | #ifdef CONFIG_PM | 258 | #ifdef CONFIG_PM |
| 259 | extern int usb_hcd_pci_suspend(struct pci_dev *dev, pm_message_t msg); | 259 | extern int usb_hcd_pci_suspend(struct pci_dev *dev, pm_message_t msg); |
| 260 | extern int usb_hcd_pci_resume_early(struct pci_dev *dev); | ||
| 261 | extern int usb_hcd_pci_resume(struct pci_dev *dev); | 260 | extern int usb_hcd_pci_resume(struct pci_dev *dev); |
| 262 | #endif /* CONFIG_PM */ | 261 | #endif /* CONFIG_PM */ |
| 263 | 262 | ||
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index 31fb204f44c6..49e7f56e0d7f 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c | |||
| @@ -653,7 +653,7 @@ int usb_get_descriptor(struct usb_device *dev, unsigned char type, | |||
| 653 | if (result <= 0 && result != -ETIMEDOUT) | 653 | if (result <= 0 && result != -ETIMEDOUT) |
| 654 | continue; | 654 | continue; |
| 655 | if (result > 1 && ((u8 *)buf)[1] != type) { | 655 | if (result > 1 && ((u8 *)buf)[1] != type) { |
| 656 | result = -EPROTO; | 656 | result = -ENODATA; |
| 657 | continue; | 657 | continue; |
| 658 | } | 658 | } |
| 659 | break; | 659 | break; |
| @@ -696,8 +696,13 @@ static int usb_get_string(struct usb_device *dev, unsigned short langid, | |||
| 696 | USB_REQ_GET_DESCRIPTOR, USB_DIR_IN, | 696 | USB_REQ_GET_DESCRIPTOR, USB_DIR_IN, |
| 697 | (USB_DT_STRING << 8) + index, langid, buf, size, | 697 | (USB_DT_STRING << 8) + index, langid, buf, size, |
| 698 | USB_CTRL_GET_TIMEOUT); | 698 | USB_CTRL_GET_TIMEOUT); |
| 699 | if (!(result == 0 || result == -EPIPE)) | 699 | if (result == 0 || result == -EPIPE) |
| 700 | break; | 700 | continue; |
| 701 | if (result > 1 && ((u8 *) buf)[1] != USB_DT_STRING) { | ||
| 702 | result = -ENODATA; | ||
| 703 | continue; | ||
| 704 | } | ||
| 705 | break; | ||
| 701 | } | 706 | } |
| 702 | return result; | 707 | return result; |
| 703 | } | 708 | } |
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig index 3219d137340a..e55fef52a5dc 100644 --- a/drivers/usb/gadget/Kconfig +++ b/drivers/usb/gadget/Kconfig | |||
| @@ -191,6 +191,7 @@ config USB_GADGET_OMAP | |||
| 191 | boolean "OMAP USB Device Controller" | 191 | boolean "OMAP USB Device Controller" |
| 192 | depends on ARCH_OMAP | 192 | depends on ARCH_OMAP |
| 193 | select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_H4_OTG | 193 | select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_H4_OTG |
| 194 | select USB_OTG_UTILS if ARCH_OMAP | ||
| 194 | help | 195 | help |
| 195 | Many Texas Instruments OMAP processors have flexible full | 196 | Many Texas Instruments OMAP processors have flexible full |
| 196 | speed USB device controllers, with support for up to 30 | 197 | speed USB device controllers, with support for up to 30 |
diff --git a/drivers/usb/gadget/f_obex.c b/drivers/usb/gadget/f_obex.c index 80c2e7e9622f..38aa896cc5db 100644 --- a/drivers/usb/gadget/f_obex.c +++ b/drivers/usb/gadget/f_obex.c | |||
| @@ -366,9 +366,9 @@ obex_bind(struct usb_configuration *c, struct usb_function *f) | |||
| 366 | f->hs_descriptors = usb_copy_descriptors(hs_function); | 366 | f->hs_descriptors = usb_copy_descriptors(hs_function); |
| 367 | 367 | ||
| 368 | obex->hs.obex_in = usb_find_endpoint(hs_function, | 368 | obex->hs.obex_in = usb_find_endpoint(hs_function, |
| 369 | f->descriptors, &obex_hs_ep_in_desc); | 369 | f->hs_descriptors, &obex_hs_ep_in_desc); |
| 370 | obex->hs.obex_out = usb_find_endpoint(hs_function, | 370 | obex->hs.obex_out = usb_find_endpoint(hs_function, |
| 371 | f->descriptors, &obex_hs_ep_out_desc); | 371 | f->hs_descriptors, &obex_hs_ep_out_desc); |
| 372 | } | 372 | } |
| 373 | 373 | ||
| 374 | /* Avoid letting this gadget enumerate until the userspace | 374 | /* Avoid letting this gadget enumerate until the userspace |
diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c index b10fa31cc915..1ab9dac7e12d 100644 --- a/drivers/usb/gadget/file_storage.c +++ b/drivers/usb/gadget/file_storage.c | |||
| @@ -3879,7 +3879,11 @@ static int __init check_parameters(struct fsg_dev *fsg) | |||
| 3879 | mod_data.protocol_type = USB_SC_SCSI; | 3879 | mod_data.protocol_type = USB_SC_SCSI; |
| 3880 | mod_data.protocol_name = "Transparent SCSI"; | 3880 | mod_data.protocol_name = "Transparent SCSI"; |
| 3881 | 3881 | ||
| 3882 | if (gadget_is_sh(fsg->gadget)) | 3882 | /* Some peripheral controllers are known not to be able to |
| 3883 | * halt bulk endpoints correctly. If one of them is present, | ||
| 3884 | * disable stalls. | ||
| 3885 | */ | ||
| 3886 | if (gadget_is_sh(fsg->gadget) || gadget_is_at91(fsg->gadget)) | ||
| 3883 | mod_data.can_stall = 0; | 3887 | mod_data.can_stall = 0; |
| 3884 | 3888 | ||
| 3885 | if (mod_data.release == 0xffff) { // Parameter wasn't set | 3889 | if (mod_data.release == 0xffff) { // Parameter wasn't set |
diff --git a/drivers/usb/gadget/fsl_qe_udc.c b/drivers/usb/gadget/fsl_qe_udc.c index d6c5bcd40064..d701bf4698d2 100644 --- a/drivers/usb/gadget/fsl_qe_udc.c +++ b/drivers/usb/gadget/fsl_qe_udc.c | |||
| @@ -1622,6 +1622,8 @@ static int qe_ep_disable(struct usb_ep *_ep) | |||
| 1622 | nuke(ep, -ESHUTDOWN); | 1622 | nuke(ep, -ESHUTDOWN); |
| 1623 | ep->desc = NULL; | 1623 | ep->desc = NULL; |
| 1624 | ep->stopped = 1; | 1624 | ep->stopped = 1; |
| 1625 | ep->tx_req = NULL; | ||
| 1626 | qe_ep_reset(udc, ep->epnum); | ||
| 1625 | spin_unlock_irqrestore(&udc->lock, flags); | 1627 | spin_unlock_irqrestore(&udc->lock, flags); |
| 1626 | 1628 | ||
| 1627 | cpm_muram_free(cpm_muram_offset(ep->rxbase)); | 1629 | cpm_muram_free(cpm_muram_offset(ep->rxbase)); |
| @@ -1681,14 +1683,11 @@ static void qe_free_request(struct usb_ep *_ep, struct usb_request *_req) | |||
| 1681 | kfree(req); | 1683 | kfree(req); |
| 1682 | } | 1684 | } |
| 1683 | 1685 | ||
| 1684 | /* queues (submits) an I/O request to an endpoint */ | 1686 | static int __qe_ep_queue(struct usb_ep *_ep, struct usb_request *_req) |
| 1685 | static int qe_ep_queue(struct usb_ep *_ep, struct usb_request *_req, | ||
| 1686 | gfp_t gfp_flags) | ||
| 1687 | { | 1687 | { |
| 1688 | struct qe_ep *ep = container_of(_ep, struct qe_ep, ep); | 1688 | struct qe_ep *ep = container_of(_ep, struct qe_ep, ep); |
| 1689 | struct qe_req *req = container_of(_req, struct qe_req, req); | 1689 | struct qe_req *req = container_of(_req, struct qe_req, req); |
| 1690 | struct qe_udc *udc; | 1690 | struct qe_udc *udc; |
| 1691 | unsigned long flags; | ||
| 1692 | int reval; | 1691 | int reval; |
| 1693 | 1692 | ||
| 1694 | udc = ep->udc; | 1693 | udc = ep->udc; |
| @@ -1732,7 +1731,7 @@ static int qe_ep_queue(struct usb_ep *_ep, struct usb_request *_req, | |||
| 1732 | list_add_tail(&req->queue, &ep->queue); | 1731 | list_add_tail(&req->queue, &ep->queue); |
| 1733 | dev_vdbg(udc->dev, "gadget have request in %s! %d\n", | 1732 | dev_vdbg(udc->dev, "gadget have request in %s! %d\n", |
| 1734 | ep->name, req->req.length); | 1733 | ep->name, req->req.length); |
| 1735 | spin_lock_irqsave(&udc->lock, flags); | 1734 | |
| 1736 | /* push the request to device */ | 1735 | /* push the request to device */ |
| 1737 | if (ep_is_in(ep)) | 1736 | if (ep_is_in(ep)) |
| 1738 | reval = ep_req_send(ep, req); | 1737 | reval = ep_req_send(ep, req); |
| @@ -1748,11 +1747,24 @@ static int qe_ep_queue(struct usb_ep *_ep, struct usb_request *_req, | |||
| 1748 | if (ep->dir == USB_DIR_OUT) | 1747 | if (ep->dir == USB_DIR_OUT) |
| 1749 | reval = ep_req_receive(ep, req); | 1748 | reval = ep_req_receive(ep, req); |
| 1750 | 1749 | ||
| 1751 | spin_unlock_irqrestore(&udc->lock, flags); | ||
| 1752 | |||
| 1753 | return 0; | 1750 | return 0; |
| 1754 | } | 1751 | } |
| 1755 | 1752 | ||
| 1753 | /* queues (submits) an I/O request to an endpoint */ | ||
| 1754 | static int qe_ep_queue(struct usb_ep *_ep, struct usb_request *_req, | ||
| 1755 | gfp_t gfp_flags) | ||
| 1756 | { | ||
| 1757 | struct qe_ep *ep = container_of(_ep, struct qe_ep, ep); | ||
| 1758 | struct qe_udc *udc = ep->udc; | ||
| 1759 | unsigned long flags; | ||
| 1760 | int ret; | ||
| 1761 | |||
| 1762 | spin_lock_irqsave(&udc->lock, flags); | ||
| 1763 | ret = __qe_ep_queue(_ep, _req); | ||
| 1764 | spin_unlock_irqrestore(&udc->lock, flags); | ||
| 1765 | return ret; | ||
| 1766 | } | ||
| 1767 | |||
| 1756 | /* dequeues (cancels, unlinks) an I/O request from an endpoint */ | 1768 | /* dequeues (cancels, unlinks) an I/O request from an endpoint */ |
| 1757 | static int qe_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req) | 1769 | static int qe_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req) |
| 1758 | { | 1770 | { |
| @@ -2008,7 +2020,7 @@ static void ch9getstatus(struct qe_udc *udc, u8 request_type, u16 value, | |||
| 2008 | udc->ep0_dir = USB_DIR_IN; | 2020 | udc->ep0_dir = USB_DIR_IN; |
| 2009 | 2021 | ||
| 2010 | /* data phase */ | 2022 | /* data phase */ |
| 2011 | status = qe_ep_queue(&ep->ep, &req->req, GFP_ATOMIC); | 2023 | status = __qe_ep_queue(&ep->ep, &req->req); |
| 2012 | 2024 | ||
| 2013 | if (status == 0) | 2025 | if (status == 0) |
| 2014 | return; | 2026 | return; |
| @@ -2151,6 +2163,9 @@ static int reset_irq(struct qe_udc *udc) | |||
| 2151 | { | 2163 | { |
| 2152 | unsigned char i; | 2164 | unsigned char i; |
| 2153 | 2165 | ||
| 2166 | if (udc->usb_state == USB_STATE_DEFAULT) | ||
| 2167 | return 0; | ||
| 2168 | |||
| 2154 | qe_usb_disable(); | 2169 | qe_usb_disable(); |
| 2155 | out_8(&udc->usb_regs->usb_usadr, 0); | 2170 | out_8(&udc->usb_regs->usb_usadr, 0); |
| 2156 | 2171 | ||
| @@ -2442,8 +2457,12 @@ static int __devinit qe_udc_reg_init(struct qe_udc *udc) | |||
| 2442 | struct usb_ctlr __iomem *qe_usbregs; | 2457 | struct usb_ctlr __iomem *qe_usbregs; |
| 2443 | qe_usbregs = udc->usb_regs; | 2458 | qe_usbregs = udc->usb_regs; |
| 2444 | 2459 | ||
| 2445 | /* Init the usb register */ | 2460 | /* Spec says that we must enable the USB controller to change mode. */ |
| 2446 | out_8(&qe_usbregs->usb_usmod, 0x01); | 2461 | out_8(&qe_usbregs->usb_usmod, 0x01); |
| 2462 | /* Mode changed, now disable it, since muram isn't initialized yet. */ | ||
| 2463 | out_8(&qe_usbregs->usb_usmod, 0x00); | ||
| 2464 | |||
| 2465 | /* Initialize the rest. */ | ||
| 2447 | out_be16(&qe_usbregs->usb_usbmr, 0); | 2466 | out_be16(&qe_usbregs->usb_usbmr, 0); |
| 2448 | out_8(&qe_usbregs->usb_uscom, 0); | 2467 | out_8(&qe_usbregs->usb_uscom, 0); |
| 2449 | out_be16(&qe_usbregs->usb_usber, USBER_ALL_CLEAR); | 2468 | out_be16(&qe_usbregs->usb_usber, USBER_ALL_CLEAR); |
| @@ -2604,6 +2623,10 @@ static int __devinit qe_udc_probe(struct of_device *ofdev, | |||
| 2604 | (unsigned long)udc_controller); | 2623 | (unsigned long)udc_controller); |
| 2605 | /* request irq and disable DR */ | 2624 | /* request irq and disable DR */ |
| 2606 | udc_controller->usb_irq = irq_of_parse_and_map(np, 0); | 2625 | udc_controller->usb_irq = irq_of_parse_and_map(np, 0); |
| 2626 | if (!udc_controller->usb_irq) { | ||
| 2627 | ret = -EINVAL; | ||
| 2628 | goto err_noirq; | ||
| 2629 | } | ||
| 2607 | 2630 | ||
| 2608 | ret = request_irq(udc_controller->usb_irq, qe_udc_irq, 0, | 2631 | ret = request_irq(udc_controller->usb_irq, qe_udc_irq, 0, |
| 2609 | driver_name, udc_controller); | 2632 | driver_name, udc_controller); |
| @@ -2625,6 +2648,8 @@ static int __devinit qe_udc_probe(struct of_device *ofdev, | |||
| 2625 | err6: | 2648 | err6: |
| 2626 | free_irq(udc_controller->usb_irq, udc_controller); | 2649 | free_irq(udc_controller->usb_irq, udc_controller); |
| 2627 | err5: | 2650 | err5: |
| 2651 | irq_dispose_mapping(udc_controller->usb_irq); | ||
| 2652 | err_noirq: | ||
| 2628 | if (udc_controller->nullmap) { | 2653 | if (udc_controller->nullmap) { |
| 2629 | dma_unmap_single(udc_controller->gadget.dev.parent, | 2654 | dma_unmap_single(udc_controller->gadget.dev.parent, |
| 2630 | udc_controller->nullp, 256, | 2655 | udc_controller->nullp, 256, |
| @@ -2648,7 +2673,7 @@ err2: | |||
| 2648 | iounmap(udc_controller->usb_regs); | 2673 | iounmap(udc_controller->usb_regs); |
| 2649 | err1: | 2674 | err1: |
| 2650 | kfree(udc_controller); | 2675 | kfree(udc_controller); |
| 2651 | 2676 | udc_controller = NULL; | |
| 2652 | return ret; | 2677 | return ret; |
| 2653 | } | 2678 | } |
| 2654 | 2679 | ||
| @@ -2710,6 +2735,7 @@ static int __devexit qe_udc_remove(struct of_device *ofdev) | |||
| 2710 | kfree(ep->txframe); | 2735 | kfree(ep->txframe); |
| 2711 | 2736 | ||
| 2712 | free_irq(udc_controller->usb_irq, udc_controller); | 2737 | free_irq(udc_controller->usb_irq, udc_controller); |
| 2738 | irq_dispose_mapping(udc_controller->usb_irq); | ||
| 2713 | 2739 | ||
| 2714 | tasklet_kill(&udc_controller->rx_tasklet); | 2740 | tasklet_kill(&udc_controller->rx_tasklet); |
| 2715 | 2741 | ||
diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c index f3c6703cffda..d8d9a52a44b3 100644 --- a/drivers/usb/gadget/fsl_usb2_udc.c +++ b/drivers/usb/gadget/fsl_usb2_udc.c | |||
| @@ -404,7 +404,10 @@ static void struct_ep_qh_setup(struct fsl_udc *udc, unsigned char ep_num, | |||
| 404 | } | 404 | } |
| 405 | if (zlt) | 405 | if (zlt) |
| 406 | tmp |= EP_QUEUE_HEAD_ZLT_SEL; | 406 | tmp |= EP_QUEUE_HEAD_ZLT_SEL; |
| 407 | |||
| 407 | p_QH->max_pkt_length = cpu_to_le32(tmp); | 408 | p_QH->max_pkt_length = cpu_to_le32(tmp); |
| 409 | p_QH->next_dtd_ptr = 1; | ||
| 410 | p_QH->size_ioc_int_sts = 0; | ||
| 408 | 411 | ||
| 409 | return; | 412 | return; |
| 410 | } | 413 | } |
diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c index 9b36205c5759..0ce4e2819847 100644 --- a/drivers/usb/gadget/pxa25x_udc.c +++ b/drivers/usb/gadget/pxa25x_udc.c | |||
| @@ -904,8 +904,8 @@ static void pxa25x_ep_fifo_flush(struct usb_ep *_ep) | |||
| 904 | 904 | ||
| 905 | /* most IN status is the same, but ISO can't stall */ | 905 | /* most IN status is the same, but ISO can't stall */ |
| 906 | *ep->reg_udccs = UDCCS_BI_TPC|UDCCS_BI_FTF|UDCCS_BI_TUR | 906 | *ep->reg_udccs = UDCCS_BI_TPC|UDCCS_BI_FTF|UDCCS_BI_TUR |
| 907 | | (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC) | 907 | | (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC |
| 908 | ? 0 : UDCCS_BI_SST; | 908 | ? 0 : UDCCS_BI_SST); |
| 909 | } | 909 | } |
| 910 | 910 | ||
| 911 | 911 | ||
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 4725d15d096f..e551bb38852b 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c | |||
| @@ -485,6 +485,7 @@ static int ehci_init(struct usb_hcd *hcd) | |||
| 485 | * periodic_size can shrink by USBCMD update if hcc_params allows. | 485 | * periodic_size can shrink by USBCMD update if hcc_params allows. |
| 486 | */ | 486 | */ |
| 487 | ehci->periodic_size = DEFAULT_I_TDPS; | 487 | ehci->periodic_size = DEFAULT_I_TDPS; |
| 488 | INIT_LIST_HEAD(&ehci->cached_itd_list); | ||
| 488 | if ((retval = ehci_mem_init(ehci, GFP_KERNEL)) < 0) | 489 | if ((retval = ehci_mem_init(ehci, GFP_KERNEL)) < 0) |
| 489 | return retval; | 490 | return retval; |
| 490 | 491 | ||
| @@ -497,6 +498,7 @@ static int ehci_init(struct usb_hcd *hcd) | |||
| 497 | 498 | ||
| 498 | ehci->reclaim = NULL; | 499 | ehci->reclaim = NULL; |
| 499 | ehci->next_uframe = -1; | 500 | ehci->next_uframe = -1; |
| 501 | ehci->clock_frame = -1; | ||
| 500 | 502 | ||
| 501 | /* | 503 | /* |
| 502 | * dedicate a qh for the async ring head, since we couldn't unlink | 504 | * dedicate a qh for the async ring head, since we couldn't unlink |
diff --git a/drivers/usb/host/ehci-mem.c b/drivers/usb/host/ehci-mem.c index 0431397836f6..10d52919abbb 100644 --- a/drivers/usb/host/ehci-mem.c +++ b/drivers/usb/host/ehci-mem.c | |||
| @@ -128,6 +128,7 @@ static inline void qh_put (struct ehci_qh *qh) | |||
| 128 | 128 | ||
| 129 | static void ehci_mem_cleanup (struct ehci_hcd *ehci) | 129 | static void ehci_mem_cleanup (struct ehci_hcd *ehci) |
| 130 | { | 130 | { |
| 131 | free_cached_itd_list(ehci); | ||
| 131 | if (ehci->async) | 132 | if (ehci->async) |
| 132 | qh_put (ehci->async); | 133 | qh_put (ehci->async); |
| 133 | ehci->async = NULL; | 134 | ehci->async = NULL; |
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index bb21fb0a4969..abb9a7706ec7 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c | |||
| @@ -432,7 +432,6 @@ static struct pci_driver ehci_pci_driver = { | |||
| 432 | 432 | ||
| 433 | #ifdef CONFIG_PM | 433 | #ifdef CONFIG_PM |
| 434 | .suspend = usb_hcd_pci_suspend, | 434 | .suspend = usb_hcd_pci_suspend, |
| 435 | .resume_early = usb_hcd_pci_resume_early, | ||
| 436 | .resume = usb_hcd_pci_resume, | 435 | .resume = usb_hcd_pci_resume, |
| 437 | #endif | 436 | #endif |
| 438 | .shutdown = usb_hcd_pci_shutdown, | 437 | .shutdown = usb_hcd_pci_shutdown, |
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c index a081ee65bde6..07bcb931021b 100644 --- a/drivers/usb/host/ehci-sched.c +++ b/drivers/usb/host/ehci-sched.c | |||
| @@ -1004,7 +1004,8 @@ iso_stream_put(struct ehci_hcd *ehci, struct ehci_iso_stream *stream) | |||
| 1004 | 1004 | ||
| 1005 | is_in = (stream->bEndpointAddress & USB_DIR_IN) ? 0x10 : 0; | 1005 | is_in = (stream->bEndpointAddress & USB_DIR_IN) ? 0x10 : 0; |
| 1006 | stream->bEndpointAddress &= 0x0f; | 1006 | stream->bEndpointAddress &= 0x0f; |
| 1007 | stream->ep->hcpriv = NULL; | 1007 | if (stream->ep) |
| 1008 | stream->ep->hcpriv = NULL; | ||
| 1008 | 1009 | ||
| 1009 | if (stream->rescheduled) { | 1010 | if (stream->rescheduled) { |
| 1010 | ehci_info (ehci, "ep%d%s-iso rescheduled " | 1011 | ehci_info (ehci, "ep%d%s-iso rescheduled " |
| @@ -1653,14 +1654,28 @@ itd_complete ( | |||
| 1653 | (stream->bEndpointAddress & USB_DIR_IN) ? "in" : "out"); | 1654 | (stream->bEndpointAddress & USB_DIR_IN) ? "in" : "out"); |
| 1654 | } | 1655 | } |
| 1655 | iso_stream_put (ehci, stream); | 1656 | iso_stream_put (ehci, stream); |
| 1656 | /* OK to recycle this ITD now that its completion callback ran. */ | 1657 | |
| 1657 | done: | 1658 | done: |
| 1658 | usb_put_urb(urb); | 1659 | usb_put_urb(urb); |
| 1659 | itd->urb = NULL; | 1660 | itd->urb = NULL; |
| 1660 | itd->stream = NULL; | 1661 | if (ehci->clock_frame != itd->frame || itd->index[7] != -1) { |
| 1661 | list_move(&itd->itd_list, &stream->free_list); | 1662 | /* OK to recycle this ITD now. */ |
| 1662 | iso_stream_put(ehci, stream); | 1663 | itd->stream = NULL; |
| 1663 | 1664 | list_move(&itd->itd_list, &stream->free_list); | |
| 1665 | iso_stream_put(ehci, stream); | ||
| 1666 | } else { | ||
| 1667 | /* HW might remember this ITD, so we can't recycle it yet. | ||
| 1668 | * Move it to a safe place until a new frame starts. | ||
| 1669 | */ | ||
| 1670 | list_move(&itd->itd_list, &ehci->cached_itd_list); | ||
| 1671 | if (stream->refcount == 2) { | ||
| 1672 | /* If iso_stream_put() were called here, stream | ||
| 1673 | * would be freed. Instead, just prevent reuse. | ||
| 1674 | */ | ||
| 1675 | stream->ep->hcpriv = NULL; | ||
| 1676 | stream->ep = NULL; | ||
| 1677 | } | ||
| 1678 | } | ||
| 1664 | return retval; | 1679 | return retval; |
| 1665 | } | 1680 | } |
| 1666 | 1681 | ||
| @@ -2101,6 +2116,20 @@ done: | |||
| 2101 | 2116 | ||
| 2102 | /*-------------------------------------------------------------------------*/ | 2117 | /*-------------------------------------------------------------------------*/ |
| 2103 | 2118 | ||
| 2119 | static void free_cached_itd_list(struct ehci_hcd *ehci) | ||
| 2120 | { | ||
| 2121 | struct ehci_itd *itd, *n; | ||
| 2122 | |||
| 2123 | list_for_each_entry_safe(itd, n, &ehci->cached_itd_list, itd_list) { | ||
| 2124 | struct ehci_iso_stream *stream = itd->stream; | ||
| 2125 | itd->stream = NULL; | ||
| 2126 | list_move(&itd->itd_list, &stream->free_list); | ||
| 2127 | iso_stream_put(ehci, stream); | ||
| 2128 | } | ||
| 2129 | } | ||
| 2130 | |||
| 2131 | /*-------------------------------------------------------------------------*/ | ||
| 2132 | |||
| 2104 | static void | 2133 | static void |
| 2105 | scan_periodic (struct ehci_hcd *ehci) | 2134 | scan_periodic (struct ehci_hcd *ehci) |
| 2106 | { | 2135 | { |
| @@ -2115,10 +2144,17 @@ scan_periodic (struct ehci_hcd *ehci) | |||
| 2115 | * Touches as few pages as possible: cache-friendly. | 2144 | * Touches as few pages as possible: cache-friendly. |
| 2116 | */ | 2145 | */ |
| 2117 | now_uframe = ehci->next_uframe; | 2146 | now_uframe = ehci->next_uframe; |
| 2118 | if (HC_IS_RUNNING (ehci_to_hcd(ehci)->state)) | 2147 | if (HC_IS_RUNNING(ehci_to_hcd(ehci)->state)) { |
| 2119 | clock = ehci_readl(ehci, &ehci->regs->frame_index); | 2148 | clock = ehci_readl(ehci, &ehci->regs->frame_index); |
| 2120 | else | 2149 | clock_frame = (clock >> 3) % ehci->periodic_size; |
| 2150 | } else { | ||
| 2121 | clock = now_uframe + mod - 1; | 2151 | clock = now_uframe + mod - 1; |
| 2152 | clock_frame = -1; | ||
| 2153 | } | ||
| 2154 | if (ehci->clock_frame != clock_frame) { | ||
| 2155 | free_cached_itd_list(ehci); | ||
| 2156 | ehci->clock_frame = clock_frame; | ||
| 2157 | } | ||
| 2122 | clock %= mod; | 2158 | clock %= mod; |
| 2123 | clock_frame = clock >> 3; | 2159 | clock_frame = clock >> 3; |
| 2124 | 2160 | ||
| @@ -2277,6 +2313,10 @@ restart: | |||
| 2277 | /* rescan the rest of this frame, then ... */ | 2313 | /* rescan the rest of this frame, then ... */ |
| 2278 | clock = now; | 2314 | clock = now; |
| 2279 | clock_frame = clock >> 3; | 2315 | clock_frame = clock >> 3; |
| 2316 | if (ehci->clock_frame != clock_frame) { | ||
| 2317 | free_cached_itd_list(ehci); | ||
| 2318 | ehci->clock_frame = clock_frame; | ||
| 2319 | } | ||
| 2280 | } else { | 2320 | } else { |
| 2281 | now_uframe++; | 2321 | now_uframe++; |
| 2282 | now_uframe %= mod; | 2322 | now_uframe %= mod; |
diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h index fb7054ccf4fc..262b00c9b334 100644 --- a/drivers/usb/host/ehci.h +++ b/drivers/usb/host/ehci.h | |||
| @@ -87,6 +87,10 @@ struct ehci_hcd { /* one per controller */ | |||
| 87 | int next_uframe; /* scan periodic, start here */ | 87 | int next_uframe; /* scan periodic, start here */ |
| 88 | unsigned periodic_sched; /* periodic activity count */ | 88 | unsigned periodic_sched; /* periodic activity count */ |
| 89 | 89 | ||
| 90 | /* list of itds completed while clock_frame was still active */ | ||
| 91 | struct list_head cached_itd_list; | ||
| 92 | unsigned clock_frame; | ||
| 93 | |||
| 90 | /* per root hub port */ | 94 | /* per root hub port */ |
| 91 | unsigned long reset_done [EHCI_MAX_ROOT_PORTS]; | 95 | unsigned long reset_done [EHCI_MAX_ROOT_PORTS]; |
| 92 | 96 | ||
| @@ -220,6 +224,8 @@ timer_action (struct ehci_hcd *ehci, enum ehci_timer_action action) | |||
| 220 | } | 224 | } |
| 221 | } | 225 | } |
| 222 | 226 | ||
| 227 | static void free_cached_itd_list(struct ehci_hcd *ehci); | ||
| 228 | |||
| 223 | /*-------------------------------------------------------------------------*/ | 229 | /*-------------------------------------------------------------------------*/ |
| 224 | 230 | ||
| 225 | #include <linux/usb/ehci_def.h> | 231 | #include <linux/usb/ehci_def.h> |
diff --git a/drivers/usb/host/ohci-pci.c b/drivers/usb/host/ohci-pci.c index 5d625c3fd423..f9961b4c0da3 100644 --- a/drivers/usb/host/ohci-pci.c +++ b/drivers/usb/host/ohci-pci.c | |||
| @@ -487,7 +487,6 @@ static struct pci_driver ohci_pci_driver = { | |||
| 487 | 487 | ||
| 488 | #ifdef CONFIG_PM | 488 | #ifdef CONFIG_PM |
| 489 | .suspend = usb_hcd_pci_suspend, | 489 | .suspend = usb_hcd_pci_suspend, |
| 490 | .resume_early = usb_hcd_pci_resume_early, | ||
| 491 | .resume = usb_hcd_pci_resume, | 490 | .resume = usb_hcd_pci_resume, |
| 492 | #endif | 491 | #endif |
| 493 | 492 | ||
diff --git a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c index 944f7e0ca4df..cf5e4cf7ea42 100644 --- a/drivers/usb/host/uhci-hcd.c +++ b/drivers/usb/host/uhci-hcd.c | |||
| @@ -942,7 +942,6 @@ static struct pci_driver uhci_pci_driver = { | |||
| 942 | 942 | ||
| 943 | #ifdef CONFIG_PM | 943 | #ifdef CONFIG_PM |
| 944 | .suspend = usb_hcd_pci_suspend, | 944 | .suspend = usb_hcd_pci_suspend, |
| 945 | .resume_early = usb_hcd_pci_resume_early, | ||
| 946 | .resume = usb_hcd_pci_resume, | 945 | .resume = usb_hcd_pci_resume, |
| 947 | #endif /* PM */ | 946 | #endif /* PM */ |
| 948 | }; | 947 | }; |
diff --git a/drivers/usb/host/whci/asl.c b/drivers/usb/host/whci/asl.c index 2291c5f5af51..958751ccea43 100644 --- a/drivers/usb/host/whci/asl.c +++ b/drivers/usb/host/whci/asl.c | |||
| @@ -227,13 +227,13 @@ void scan_async_work(struct work_struct *work) | |||
| 227 | * Now that the ASL is updated, complete the removal of any | 227 | * Now that the ASL is updated, complete the removal of any |
| 228 | * removed qsets. | 228 | * removed qsets. |
| 229 | */ | 229 | */ |
| 230 | spin_lock(&whc->lock); | 230 | spin_lock_irq(&whc->lock); |
| 231 | 231 | ||
| 232 | list_for_each_entry_safe(qset, t, &whc->async_removed_list, list_node) { | 232 | list_for_each_entry_safe(qset, t, &whc->async_removed_list, list_node) { |
| 233 | qset_remove_complete(whc, qset); | 233 | qset_remove_complete(whc, qset); |
| 234 | } | 234 | } |
| 235 | 235 | ||
| 236 | spin_unlock(&whc->lock); | 236 | spin_unlock_irq(&whc->lock); |
| 237 | } | 237 | } |
| 238 | 238 | ||
| 239 | /** | 239 | /** |
diff --git a/drivers/usb/host/whci/pzl.c b/drivers/usb/host/whci/pzl.c index 7dc85a0bee7c..df8b85f07092 100644 --- a/drivers/usb/host/whci/pzl.c +++ b/drivers/usb/host/whci/pzl.c | |||
| @@ -255,13 +255,13 @@ void scan_periodic_work(struct work_struct *work) | |||
| 255 | * Now that the PZL is updated, complete the removal of any | 255 | * Now that the PZL is updated, complete the removal of any |
| 256 | * removed qsets. | 256 | * removed qsets. |
| 257 | */ | 257 | */ |
| 258 | spin_lock(&whc->lock); | 258 | spin_lock_irq(&whc->lock); |
| 259 | 259 | ||
| 260 | list_for_each_entry_safe(qset, t, &whc->periodic_removed_list, list_node) { | 260 | list_for_each_entry_safe(qset, t, &whc->periodic_removed_list, list_node) { |
| 261 | qset_remove_complete(whc, qset); | 261 | qset_remove_complete(whc, qset); |
| 262 | } | 262 | } |
| 263 | 263 | ||
| 264 | spin_unlock(&whc->lock); | 264 | spin_unlock_irq(&whc->lock); |
| 265 | } | 265 | } |
| 266 | 266 | ||
| 267 | /** | 267 | /** |
diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c index 5a8fd5d57a11..2dc7606f319c 100644 --- a/drivers/usb/musb/davinci.c +++ b/drivers/usb/musb/davinci.c | |||
| @@ -377,18 +377,8 @@ int __init musb_platform_init(struct musb *musb) | |||
| 377 | u32 revision; | 377 | u32 revision; |
| 378 | 378 | ||
| 379 | musb->mregs += DAVINCI_BASE_OFFSET; | 379 | musb->mregs += DAVINCI_BASE_OFFSET; |
| 380 | #if 0 | ||
| 381 | /* REVISIT there's something odd about clocking, this | ||
| 382 | * didn't appear do the job ... | ||
| 383 | */ | ||
| 384 | musb->clock = clk_get(pDevice, "usb"); | ||
| 385 | if (IS_ERR(musb->clock)) | ||
| 386 | return PTR_ERR(musb->clock); | ||
| 387 | 380 | ||
| 388 | status = clk_enable(musb->clock); | 381 | clk_enable(musb->clock); |
| 389 | if (status < 0) | ||
| 390 | return -ENODEV; | ||
| 391 | #endif | ||
| 392 | 382 | ||
| 393 | /* returns zero if e.g. not clocked */ | 383 | /* returns zero if e.g. not clocked */ |
| 394 | revision = musb_readl(tibase, DAVINCI_USB_VERSION_REG); | 384 | revision = musb_readl(tibase, DAVINCI_USB_VERSION_REG); |
| @@ -453,5 +443,8 @@ int musb_platform_exit(struct musb *musb) | |||
| 453 | } | 443 | } |
| 454 | 444 | ||
| 455 | phy_off(); | 445 | phy_off(); |
| 446 | |||
| 447 | clk_disable(musb->clock); | ||
| 448 | |||
| 456 | return 0; | 449 | return 0; |
| 457 | } | 450 | } |
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 2cc34fa05b73..af77e4659006 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c | |||
| @@ -115,7 +115,7 @@ | |||
| 115 | 115 | ||
| 116 | 116 | ||
| 117 | unsigned musb_debug; | 117 | unsigned musb_debug; |
| 118 | module_param(musb_debug, uint, S_IRUGO | S_IWUSR); | 118 | module_param_named(debug, musb_debug, uint, S_IRUGO | S_IWUSR); |
| 119 | MODULE_PARM_DESC(debug, "Debug message level. Default = 0"); | 119 | MODULE_PARM_DESC(debug, "Debug message level. Default = 0"); |
| 120 | 120 | ||
| 121 | #define DRIVER_AUTHOR "Mentor Graphics, Texas Instruments, Nokia" | 121 | #define DRIVER_AUTHOR "Mentor Graphics, Texas Instruments, Nokia" |
| @@ -767,6 +767,7 @@ static irqreturn_t musb_stage2_irq(struct musb *musb, u8 int_usb, | |||
| 767 | #ifdef CONFIG_USB_MUSB_HDRC_HCD | 767 | #ifdef CONFIG_USB_MUSB_HDRC_HCD |
| 768 | case OTG_STATE_A_HOST: | 768 | case OTG_STATE_A_HOST: |
| 769 | case OTG_STATE_A_SUSPEND: | 769 | case OTG_STATE_A_SUSPEND: |
| 770 | usb_hcd_resume_root_hub(musb_to_hcd(musb)); | ||
| 770 | musb_root_disconnect(musb); | 771 | musb_root_disconnect(musb); |
| 771 | if (musb->a_wait_bcon != 0) | 772 | if (musb->a_wait_bcon != 0) |
| 772 | musb_platform_try_idle(musb, jiffies | 773 | musb_platform_try_idle(musb, jiffies |
| @@ -1815,7 +1816,7 @@ static void musb_free(struct musb *musb) | |||
| 1815 | #ifdef CONFIG_SYSFS | 1816 | #ifdef CONFIG_SYSFS |
| 1816 | device_remove_file(musb->controller, &dev_attr_mode); | 1817 | device_remove_file(musb->controller, &dev_attr_mode); |
| 1817 | device_remove_file(musb->controller, &dev_attr_vbus); | 1818 | device_remove_file(musb->controller, &dev_attr_vbus); |
| 1818 | #ifdef CONFIG_USB_MUSB_OTG | 1819 | #ifdef CONFIG_USB_GADGET_MUSB_HDRC |
| 1819 | device_remove_file(musb->controller, &dev_attr_srp); | 1820 | device_remove_file(musb->controller, &dev_attr_srp); |
| 1820 | #endif | 1821 | #endif |
| 1821 | #endif | 1822 | #endif |
| @@ -2063,7 +2064,7 @@ fail2: | |||
| 2063 | #ifdef CONFIG_SYSFS | 2064 | #ifdef CONFIG_SYSFS |
| 2064 | device_remove_file(musb->controller, &dev_attr_mode); | 2065 | device_remove_file(musb->controller, &dev_attr_mode); |
| 2065 | device_remove_file(musb->controller, &dev_attr_vbus); | 2066 | device_remove_file(musb->controller, &dev_attr_vbus); |
| 2066 | #ifdef CONFIG_USB_MUSB_OTG | 2067 | #ifdef CONFIG_USB_GADGET_MUSB_HDRC |
| 2067 | device_remove_file(musb->controller, &dev_attr_srp); | 2068 | device_remove_file(musb->controller, &dev_attr_srp); |
| 2068 | #endif | 2069 | #endif |
| 2069 | #endif | 2070 | #endif |
| @@ -2243,10 +2244,10 @@ static int __init musb_init(void) | |||
| 2243 | return platform_driver_probe(&musb_driver, musb_probe); | 2244 | return platform_driver_probe(&musb_driver, musb_probe); |
| 2244 | } | 2245 | } |
| 2245 | 2246 | ||
| 2246 | /* make us init after usbcore and before usb | 2247 | /* make us init after usbcore and i2c (transceivers, regulators, etc) |
| 2247 | * gadget and host-side drivers start to register | 2248 | * and before usb gadget and host-side drivers start to register |
| 2248 | */ | 2249 | */ |
| 2249 | subsys_initcall(musb_init); | 2250 | fs_initcall(musb_init); |
| 2250 | 2251 | ||
| 2251 | static void __exit musb_cleanup(void) | 2252 | static void __exit musb_cleanup(void) |
| 2252 | { | 2253 | { |
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index 4ea305387981..c7ebd0867fcc 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c | |||
| @@ -575,7 +575,7 @@ static void rxstate(struct musb *musb, struct musb_request *req) | |||
| 575 | struct usb_request *request = &req->request; | 575 | struct usb_request *request = &req->request; |
| 576 | struct musb_ep *musb_ep = &musb->endpoints[epnum].ep_out; | 576 | struct musb_ep *musb_ep = &musb->endpoints[epnum].ep_out; |
| 577 | void __iomem *epio = musb->endpoints[epnum].regs; | 577 | void __iomem *epio = musb->endpoints[epnum].regs; |
| 578 | u16 fifo_count = 0; | 578 | unsigned fifo_count = 0; |
| 579 | u16 len = musb_ep->packet_sz; | 579 | u16 len = musb_ep->packet_sz; |
| 580 | 580 | ||
| 581 | csr = musb_readw(epio, MUSB_RXCSR); | 581 | csr = musb_readw(epio, MUSB_RXCSR); |
| @@ -687,7 +687,7 @@ static void rxstate(struct musb *musb, struct musb_request *req) | |||
| 687 | len, fifo_count, | 687 | len, fifo_count, |
| 688 | musb_ep->packet_sz); | 688 | musb_ep->packet_sz); |
| 689 | 689 | ||
| 690 | fifo_count = min(len, fifo_count); | 690 | fifo_count = min_t(unsigned, len, fifo_count); |
| 691 | 691 | ||
| 692 | #ifdef CONFIG_USB_TUSB_OMAP_DMA | 692 | #ifdef CONFIG_USB_TUSB_OMAP_DMA |
| 693 | if (tusb_dma_omap() && musb_ep->dma) { | 693 | if (tusb_dma_omap() && musb_ep->dma) { |
diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c index a035ceccf950..6dbbd0786a6a 100644 --- a/drivers/usb/musb/musb_host.c +++ b/drivers/usb/musb/musb_host.c | |||
| @@ -335,16 +335,11 @@ musb_save_toggle(struct musb_hw_ep *ep, int is_in, struct urb *urb) | |||
| 335 | static struct musb_qh * | 335 | static struct musb_qh * |
| 336 | musb_giveback(struct musb_qh *qh, struct urb *urb, int status) | 336 | musb_giveback(struct musb_qh *qh, struct urb *urb, int status) |
| 337 | { | 337 | { |
| 338 | int is_in; | ||
| 339 | struct musb_hw_ep *ep = qh->hw_ep; | 338 | struct musb_hw_ep *ep = qh->hw_ep; |
| 340 | struct musb *musb = ep->musb; | 339 | struct musb *musb = ep->musb; |
| 340 | int is_in = usb_pipein(urb->pipe); | ||
| 341 | int ready = qh->is_ready; | 341 | int ready = qh->is_ready; |
| 342 | 342 | ||
| 343 | if (ep->is_shared_fifo) | ||
| 344 | is_in = 1; | ||
| 345 | else | ||
| 346 | is_in = usb_pipein(urb->pipe); | ||
| 347 | |||
| 348 | /* save toggle eagerly, for paranoia */ | 343 | /* save toggle eagerly, for paranoia */ |
| 349 | switch (qh->type) { | 344 | switch (qh->type) { |
| 350 | case USB_ENDPOINT_XFER_BULK: | 345 | case USB_ENDPOINT_XFER_BULK: |
| @@ -432,7 +427,7 @@ musb_advance_schedule(struct musb *musb, struct urb *urb, | |||
| 432 | else | 427 | else |
| 433 | qh = musb_giveback(qh, urb, urb->status); | 428 | qh = musb_giveback(qh, urb, urb->status); |
| 434 | 429 | ||
| 435 | if (qh && qh->is_ready && !list_empty(&qh->hep->urb_list)) { | 430 | if (qh != NULL && qh->is_ready) { |
| 436 | DBG(4, "... next ep%d %cX urb %p\n", | 431 | DBG(4, "... next ep%d %cX urb %p\n", |
| 437 | hw_ep->epnum, is_in ? 'R' : 'T', | 432 | hw_ep->epnum, is_in ? 'R' : 'T', |
| 438 | next_urb(qh)); | 433 | next_urb(qh)); |
| @@ -942,8 +937,8 @@ static bool musb_h_ep0_continue(struct musb *musb, u16 len, struct urb *urb) | |||
| 942 | switch (musb->ep0_stage) { | 937 | switch (musb->ep0_stage) { |
| 943 | case MUSB_EP0_IN: | 938 | case MUSB_EP0_IN: |
| 944 | fifo_dest = urb->transfer_buffer + urb->actual_length; | 939 | fifo_dest = urb->transfer_buffer + urb->actual_length; |
| 945 | fifo_count = min(len, ((u16) (urb->transfer_buffer_length | 940 | fifo_count = min_t(size_t, len, urb->transfer_buffer_length - |
| 946 | - urb->actual_length))); | 941 | urb->actual_length); |
| 947 | if (fifo_count < len) | 942 | if (fifo_count < len) |
| 948 | urb->status = -EOVERFLOW; | 943 | urb->status = -EOVERFLOW; |
| 949 | 944 | ||
| @@ -976,10 +971,9 @@ static bool musb_h_ep0_continue(struct musb *musb, u16 len, struct urb *urb) | |||
| 976 | } | 971 | } |
| 977 | /* FALLTHROUGH */ | 972 | /* FALLTHROUGH */ |
| 978 | case MUSB_EP0_OUT: | 973 | case MUSB_EP0_OUT: |
| 979 | fifo_count = min(qh->maxpacket, ((u16) | 974 | fifo_count = min_t(size_t, qh->maxpacket, |
| 980 | (urb->transfer_buffer_length | 975 | urb->transfer_buffer_length - |
| 981 | - urb->actual_length))); | 976 | urb->actual_length); |
| 982 | |||
| 983 | if (fifo_count) { | 977 | if (fifo_count) { |
| 984 | fifo_dest = (u8 *) (urb->transfer_buffer | 978 | fifo_dest = (u8 *) (urb->transfer_buffer |
| 985 | + urb->actual_length); | 979 | + urb->actual_length); |
| @@ -1161,7 +1155,8 @@ void musb_host_tx(struct musb *musb, u8 epnum) | |||
| 1161 | struct urb *urb; | 1155 | struct urb *urb; |
| 1162 | struct musb_hw_ep *hw_ep = musb->endpoints + epnum; | 1156 | struct musb_hw_ep *hw_ep = musb->endpoints + epnum; |
| 1163 | void __iomem *epio = hw_ep->regs; | 1157 | void __iomem *epio = hw_ep->regs; |
| 1164 | struct musb_qh *qh = hw_ep->out_qh; | 1158 | struct musb_qh *qh = hw_ep->is_shared_fifo ? hw_ep->in_qh |
| 1159 | : hw_ep->out_qh; | ||
| 1165 | u32 status = 0; | 1160 | u32 status = 0; |
| 1166 | void __iomem *mbase = musb->mregs; | 1161 | void __iomem *mbase = musb->mregs; |
| 1167 | struct dma_channel *dma; | 1162 | struct dma_channel *dma; |
| @@ -1308,7 +1303,8 @@ void musb_host_tx(struct musb *musb, u8 epnum) | |||
| 1308 | * packets before updating TXCSR ... other docs disagree ... | 1303 | * packets before updating TXCSR ... other docs disagree ... |
| 1309 | */ | 1304 | */ |
| 1310 | /* PIO: start next packet in this URB */ | 1305 | /* PIO: start next packet in this URB */ |
| 1311 | wLength = min(qh->maxpacket, (u16) wLength); | 1306 | if (wLength > qh->maxpacket) |
| 1307 | wLength = qh->maxpacket; | ||
| 1312 | musb_write_fifo(hw_ep, wLength, buf); | 1308 | musb_write_fifo(hw_ep, wLength, buf); |
| 1313 | qh->segsize = wLength; | 1309 | qh->segsize = wLength; |
| 1314 | 1310 | ||
| @@ -1867,19 +1863,21 @@ static int musb_urb_enqueue( | |||
| 1867 | } | 1863 | } |
| 1868 | qh->type_reg = type_reg; | 1864 | qh->type_reg = type_reg; |
| 1869 | 1865 | ||
| 1870 | /* precompute rxinterval/txinterval register */ | 1866 | /* Precompute RXINTERVAL/TXINTERVAL register */ |
| 1871 | interval = min((u8)16, epd->bInterval); /* log encoding */ | ||
| 1872 | switch (qh->type) { | 1867 | switch (qh->type) { |
| 1873 | case USB_ENDPOINT_XFER_INT: | 1868 | case USB_ENDPOINT_XFER_INT: |
| 1874 | /* fullspeed uses linear encoding */ | 1869 | /* |
| 1875 | if (USB_SPEED_FULL == urb->dev->speed) { | 1870 | * Full/low speeds use the linear encoding, |
| 1876 | interval = epd->bInterval; | 1871 | * high speed uses the logarithmic encoding. |
| 1877 | if (!interval) | 1872 | */ |
| 1878 | interval = 1; | 1873 | if (urb->dev->speed <= USB_SPEED_FULL) { |
| 1874 | interval = max_t(u8, epd->bInterval, 1); | ||
| 1875 | break; | ||
| 1879 | } | 1876 | } |
| 1880 | /* FALLTHROUGH */ | 1877 | /* FALLTHROUGH */ |
| 1881 | case USB_ENDPOINT_XFER_ISOC: | 1878 | case USB_ENDPOINT_XFER_ISOC: |
| 1882 | /* iso always uses log encoding */ | 1879 | /* ISO always uses logarithmic encoding */ |
| 1880 | interval = min_t(u8, epd->bInterval, 16); | ||
| 1883 | break; | 1881 | break; |
| 1884 | default: | 1882 | default: |
| 1885 | /* REVISIT we actually want to use NAK limits, hinting to the | 1883 | /* REVISIT we actually want to use NAK limits, hinting to the |
| @@ -2037,9 +2035,9 @@ static int musb_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) | |||
| 2037 | goto done; | 2035 | goto done; |
| 2038 | 2036 | ||
| 2039 | /* Any URB not actively programmed into endpoint hardware can be | 2037 | /* Any URB not actively programmed into endpoint hardware can be |
| 2040 | * immediately given back. Such an URB must be at the head of its | 2038 | * immediately given back; that's any URB not at the head of an |
| 2041 | * endpoint queue, unless someday we get real DMA queues. And even | 2039 | * endpoint queue, unless someday we get real DMA queues. And even |
| 2042 | * then, it might not be known to the hardware... | 2040 | * if it's at the head, it might not be known to the hardware... |
| 2043 | * | 2041 | * |
| 2044 | * Otherwise abort current transfer, pending dma, etc.; urb->status | 2042 | * Otherwise abort current transfer, pending dma, etc.; urb->status |
| 2045 | * has already been updated. This is a synchronous abort; it'd be | 2043 | * has already been updated. This is a synchronous abort; it'd be |
| @@ -2078,6 +2076,15 @@ static int musb_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) | |||
| 2078 | qh->is_ready = 0; | 2076 | qh->is_ready = 0; |
| 2079 | __musb_giveback(musb, urb, 0); | 2077 | __musb_giveback(musb, urb, 0); |
| 2080 | qh->is_ready = ready; | 2078 | qh->is_ready = ready; |
| 2079 | |||
| 2080 | /* If nothing else (usually musb_giveback) is using it | ||
| 2081 | * and its URB list has emptied, recycle this qh. | ||
| 2082 | */ | ||
| 2083 | if (ready && list_empty(&qh->hep->urb_list)) { | ||
| 2084 | qh->hep->hcpriv = NULL; | ||
| 2085 | list_del(&qh->ring); | ||
| 2086 | kfree(qh); | ||
| 2087 | } | ||
| 2081 | } else | 2088 | } else |
| 2082 | ret = musb_cleanup_urb(urb, qh, urb->pipe & USB_DIR_IN); | 2089 | ret = musb_cleanup_urb(urb, qh, urb->pipe & USB_DIR_IN); |
| 2083 | done: | 2090 | done: |
| @@ -2093,15 +2100,16 @@ musb_h_disable(struct usb_hcd *hcd, struct usb_host_endpoint *hep) | |||
| 2093 | unsigned long flags; | 2100 | unsigned long flags; |
| 2094 | struct musb *musb = hcd_to_musb(hcd); | 2101 | struct musb *musb = hcd_to_musb(hcd); |
| 2095 | u8 is_in = epnum & USB_DIR_IN; | 2102 | u8 is_in = epnum & USB_DIR_IN; |
| 2096 | struct musb_qh *qh = hep->hcpriv; | 2103 | struct musb_qh *qh; |
| 2097 | struct urb *urb, *tmp; | 2104 | struct urb *urb; |
| 2098 | struct list_head *sched; | 2105 | struct list_head *sched; |
| 2099 | 2106 | ||
| 2100 | if (!qh) | ||
| 2101 | return; | ||
| 2102 | |||
| 2103 | spin_lock_irqsave(&musb->lock, flags); | 2107 | spin_lock_irqsave(&musb->lock, flags); |
| 2104 | 2108 | ||
| 2109 | qh = hep->hcpriv; | ||
| 2110 | if (qh == NULL) | ||
| 2111 | goto exit; | ||
| 2112 | |||
| 2105 | switch (qh->type) { | 2113 | switch (qh->type) { |
| 2106 | case USB_ENDPOINT_XFER_CONTROL: | 2114 | case USB_ENDPOINT_XFER_CONTROL: |
| 2107 | sched = &musb->control; | 2115 | sched = &musb->control; |
| @@ -2135,13 +2143,28 @@ musb_h_disable(struct usb_hcd *hcd, struct usb_host_endpoint *hep) | |||
| 2135 | 2143 | ||
| 2136 | /* cleanup */ | 2144 | /* cleanup */ |
| 2137 | musb_cleanup_urb(urb, qh, urb->pipe & USB_DIR_IN); | 2145 | musb_cleanup_urb(urb, qh, urb->pipe & USB_DIR_IN); |
| 2138 | } else | ||
| 2139 | urb = NULL; | ||
| 2140 | 2146 | ||
| 2141 | /* then just nuke all the others */ | 2147 | /* Then nuke all the others ... and advance the |
| 2142 | list_for_each_entry_safe_from(urb, tmp, &hep->urb_list, urb_list) | 2148 | * queue on hw_ep (e.g. bulk ring) when we're done. |
| 2143 | musb_giveback(qh, urb, -ESHUTDOWN); | 2149 | */ |
| 2150 | while (!list_empty(&hep->urb_list)) { | ||
| 2151 | urb = next_urb(qh); | ||
| 2152 | urb->status = -ESHUTDOWN; | ||
| 2153 | musb_advance_schedule(musb, urb, qh->hw_ep, is_in); | ||
| 2154 | } | ||
| 2155 | } else { | ||
| 2156 | /* Just empty the queue; the hardware is busy with | ||
| 2157 | * other transfers, and since !qh->is_ready nothing | ||
| 2158 | * will activate any of these as it advances. | ||
| 2159 | */ | ||
| 2160 | while (!list_empty(&hep->urb_list)) | ||
| 2161 | __musb_giveback(musb, next_urb(qh), -ESHUTDOWN); | ||
| 2144 | 2162 | ||
| 2163 | hep->hcpriv = NULL; | ||
| 2164 | list_del(&qh->ring); | ||
| 2165 | kfree(qh); | ||
| 2166 | } | ||
| 2167 | exit: | ||
| 2145 | spin_unlock_irqrestore(&musb->lock, flags); | 2168 | spin_unlock_irqrestore(&musb->lock, flags); |
| 2146 | } | 2169 | } |
| 2147 | 2170 | ||
diff --git a/drivers/usb/serial/aircable.c b/drivers/usb/serial/aircable.c index 537f953bd7f8..6d106e74265e 100644 --- a/drivers/usb/serial/aircable.c +++ b/drivers/usb/serial/aircable.c | |||
| @@ -621,9 +621,9 @@ static int __init aircable_init(void) | |||
| 621 | goto failed_usb_register; | 621 | goto failed_usb_register; |
| 622 | return 0; | 622 | return 0; |
| 623 | 623 | ||
| 624 | failed_serial_register: | ||
| 625 | usb_serial_deregister(&aircable_device); | ||
| 626 | failed_usb_register: | 624 | failed_usb_register: |
| 625 | usb_serial_deregister(&aircable_device); | ||
| 626 | failed_serial_register: | ||
| 627 | return retval; | 627 | return retval; |
| 628 | } | 628 | } |
| 629 | 629 | ||
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 75597337583e..f92f4d773374 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
| @@ -662,6 +662,7 @@ static struct usb_device_id id_table_combined [] = { | |||
| 662 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) }, | 662 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) }, |
| 663 | { USB_DEVICE(ALTI2_VID, ALTI2_N3_PID) }, | 663 | { USB_DEVICE(ALTI2_VID, ALTI2_N3_PID) }, |
| 664 | { USB_DEVICE(FTDI_VID, DIEBOLD_BCS_SE923_PID) }, | 664 | { USB_DEVICE(FTDI_VID, DIEBOLD_BCS_SE923_PID) }, |
| 665 | { USB_DEVICE(FTDI_VID, FTDI_NDI_HUC_PID) }, | ||
| 665 | { }, /* Optional parameter entry */ | 666 | { }, /* Optional parameter entry */ |
| 666 | { } /* Terminating entry */ | 667 | { } /* Terminating entry */ |
| 667 | }; | 668 | }; |
| @@ -1064,8 +1065,10 @@ static int set_serial_info(struct tty_struct *tty, | |||
| 1064 | 1065 | ||
| 1065 | if (!capable(CAP_SYS_ADMIN)) { | 1066 | if (!capable(CAP_SYS_ADMIN)) { |
| 1066 | if (((new_serial.flags & ~ASYNC_USR_MASK) != | 1067 | if (((new_serial.flags & ~ASYNC_USR_MASK) != |
| 1067 | (priv->flags & ~ASYNC_USR_MASK))) | 1068 | (priv->flags & ~ASYNC_USR_MASK))) { |
| 1069 | unlock_kernel(); | ||
| 1068 | return -EPERM; | 1070 | return -EPERM; |
| 1071 | } | ||
| 1069 | priv->flags = ((priv->flags & ~ASYNC_USR_MASK) | | 1072 | priv->flags = ((priv->flags & ~ASYNC_USR_MASK) | |
| 1070 | (new_serial.flags & ASYNC_USR_MASK)); | 1073 | (new_serial.flags & ASYNC_USR_MASK)); |
| 1071 | priv->custom_divisor = new_serial.custom_divisor; | 1074 | priv->custom_divisor = new_serial.custom_divisor; |
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h index 1b62eff475d2..e300c840f8ca 100644 --- a/drivers/usb/serial/ftdi_sio.h +++ b/drivers/usb/serial/ftdi_sio.h | |||
| @@ -844,6 +844,9 @@ | |||
| 844 | #define TML_VID 0x1B91 /* Vendor ID */ | 844 | #define TML_VID 0x1B91 /* Vendor ID */ |
| 845 | #define TML_USB_SERIAL_PID 0x0064 /* USB - Serial Converter */ | 845 | #define TML_USB_SERIAL_PID 0x0064 /* USB - Serial Converter */ |
| 846 | 846 | ||
| 847 | /* NDI Polaris System */ | ||
| 848 | #define FTDI_NDI_HUC_PID 0xDA70 | ||
| 849 | |||
| 847 | /* Propox devices */ | 850 | /* Propox devices */ |
| 848 | #define FTDI_PROPOX_JTAGCABLEII_PID 0xD738 | 851 | #define FTDI_PROPOX_JTAGCABLEII_PID 0xD738 |
| 849 | 852 | ||
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 6c89da9c6fea..b7c132bded7f 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
| @@ -199,14 +199,15 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | |||
| 199 | #define NOVATELWIRELESS_PRODUCT_MC950D 0x4400 | 199 | #define NOVATELWIRELESS_PRODUCT_MC950D 0x4400 |
| 200 | 200 | ||
| 201 | /* FUTURE NOVATEL PRODUCTS */ | 201 | /* FUTURE NOVATEL PRODUCTS */ |
| 202 | #define NOVATELWIRELESS_PRODUCT_EVDO_1 0x6000 | 202 | #define NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED 0X6000 |
| 203 | #define NOVATELWIRELESS_PRODUCT_HSPA_1 0x7000 | 203 | #define NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED 0X6001 |
| 204 | #define NOVATELWIRELESS_PRODUCT_EMBEDDED_1 0x8000 | 204 | #define NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED 0X7000 |
| 205 | #define NOVATELWIRELESS_PRODUCT_GLOBAL_1 0x9000 | 205 | #define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED 0X7001 |
| 206 | #define NOVATELWIRELESS_PRODUCT_EVDO_2 0x6001 | 206 | #define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED 0X8000 |
| 207 | #define NOVATELWIRELESS_PRODUCT_HSPA_2 0x7001 | 207 | #define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED 0X8001 |
| 208 | #define NOVATELWIRELESS_PRODUCT_EMBEDDED_2 0x8001 | 208 | #define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED 0X9000 |
| 209 | #define NOVATELWIRELESS_PRODUCT_GLOBAL_2 0x9001 | 209 | #define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED 0X9001 |
| 210 | #define NOVATELWIRELESS_PRODUCT_GLOBAL 0XA001 | ||
| 210 | 211 | ||
| 211 | /* AMOI PRODUCTS */ | 212 | /* AMOI PRODUCTS */ |
| 212 | #define AMOI_VENDOR_ID 0x1614 | 213 | #define AMOI_VENDOR_ID 0x1614 |
| @@ -216,6 +217,27 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | |||
| 216 | 217 | ||
| 217 | #define DELL_VENDOR_ID 0x413C | 218 | #define DELL_VENDOR_ID 0x413C |
| 218 | 219 | ||
| 220 | /* Dell modems */ | ||
| 221 | #define DELL_PRODUCT_5700_MINICARD 0x8114 | ||
| 222 | #define DELL_PRODUCT_5500_MINICARD 0x8115 | ||
| 223 | #define DELL_PRODUCT_5505_MINICARD 0x8116 | ||
| 224 | #define DELL_PRODUCT_5700_EXPRESSCARD 0x8117 | ||
| 225 | #define DELL_PRODUCT_5510_EXPRESSCARD 0x8118 | ||
| 226 | |||
| 227 | #define DELL_PRODUCT_5700_MINICARD_SPRINT 0x8128 | ||
| 228 | #define DELL_PRODUCT_5700_MINICARD_TELUS 0x8129 | ||
| 229 | |||
| 230 | #define DELL_PRODUCT_5720_MINICARD_VZW 0x8133 | ||
| 231 | #define DELL_PRODUCT_5720_MINICARD_SPRINT 0x8134 | ||
| 232 | #define DELL_PRODUCT_5720_MINICARD_TELUS 0x8135 | ||
| 233 | #define DELL_PRODUCT_5520_MINICARD_CINGULAR 0x8136 | ||
| 234 | #define DELL_PRODUCT_5520_MINICARD_GENERIC_L 0x8137 | ||
| 235 | #define DELL_PRODUCT_5520_MINICARD_GENERIC_I 0x8138 | ||
| 236 | |||
| 237 | #define DELL_PRODUCT_5730_MINICARD_SPRINT 0x8180 | ||
| 238 | #define DELL_PRODUCT_5730_MINICARD_TELUS 0x8181 | ||
| 239 | #define DELL_PRODUCT_5730_MINICARD_VZW 0x8182 | ||
| 240 | |||
| 219 | #define KYOCERA_VENDOR_ID 0x0c88 | 241 | #define KYOCERA_VENDOR_ID 0x0c88 |
| 220 | #define KYOCERA_PRODUCT_KPC650 0x17da | 242 | #define KYOCERA_PRODUCT_KPC650 0x17da |
| 221 | #define KYOCERA_PRODUCT_KPC680 0x180a | 243 | #define KYOCERA_PRODUCT_KPC680 0x180a |
| @@ -272,13 +294,11 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | |||
| 272 | 294 | ||
| 273 | /* Ericsson products */ | 295 | /* Ericsson products */ |
| 274 | #define ERICSSON_VENDOR_ID 0x0bdb | 296 | #define ERICSSON_VENDOR_ID 0x0bdb |
| 275 | #define ERICSSON_PRODUCT_F3507G 0x1900 | 297 | #define ERICSSON_PRODUCT_F3507G_1 0x1900 |
| 298 | #define ERICSSON_PRODUCT_F3507G_2 0x1902 | ||
| 276 | 299 | ||
| 277 | /* Pantech products */ | 300 | #define BENQ_VENDOR_ID 0x04a5 |
| 278 | #define PANTECH_VENDOR_ID 0x106c | 301 | #define BENQ_PRODUCT_H10 0x4068 |
| 279 | #define PANTECH_PRODUCT_PC5740 0x3701 | ||
| 280 | #define PANTECH_PRODUCT_PC5750 0x3702 /* PX-500 */ | ||
| 281 | #define PANTECH_PRODUCT_UM150 0x3711 | ||
| 282 | 302 | ||
| 283 | static struct usb_device_id option_ids[] = { | 303 | static struct usb_device_id option_ids[] = { |
| 284 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, | 304 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, |
| @@ -395,31 +415,37 @@ static struct usb_device_id option_ids[] = { | |||
| 395 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */ | 415 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */ |
| 396 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */ | 416 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */ |
| 397 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */ | 417 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */ |
| 398 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_1) }, /* Novatel EVDO product */ | 418 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED) }, /* Novatel EVDO product */ |
| 399 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_1) }, /* Novatel HSPA product */ | 419 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED) }, /* Novatel HSPA product */ |
| 400 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_1) }, /* Novatel Embedded product */ | 420 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED) }, /* Novatel EVDO Embedded product */ |
| 401 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL_1) }, /* Novatel Global product */ | 421 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED) }, /* Novatel HSPA Embedded product */ |
| 402 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_2) }, /* Novatel EVDO product */ | 422 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED) }, /* Novatel EVDO product */ |
| 403 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_2) }, /* Novatel HSPA product */ | 423 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED) }, /* Novatel HSPA product */ |
| 404 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_2) }, /* Novatel Embedded product */ | 424 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED) }, /* Novatel EVDO Embedded product */ |
| 405 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL_2) }, /* Novatel Global product */ | 425 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED) }, /* Novatel HSPA Embedded product */ |
| 426 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL) }, /* Novatel Global product */ | ||
| 406 | 427 | ||
| 407 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) }, | 428 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) }, |
| 408 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) }, | 429 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) }, |
| 409 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H02) }, | 430 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H02) }, |
| 410 | 431 | ||
| 411 | { USB_DEVICE(DELL_VENDOR_ID, 0x8114) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */ | 432 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */ |
| 412 | { USB_DEVICE(DELL_VENDOR_ID, 0x8115) }, /* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */ | 433 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5500_MINICARD) }, /* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */ |
| 413 | { USB_DEVICE(DELL_VENDOR_ID, 0x8116) }, /* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */ | 434 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5505_MINICARD) }, /* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */ |
| 414 | { USB_DEVICE(DELL_VENDOR_ID, 0x8117) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */ | 435 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_EXPRESSCARD) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */ |
| 415 | { USB_DEVICE(DELL_VENDOR_ID, 0x8118) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */ | 436 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5510_EXPRESSCARD) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */ |
| 416 | { USB_DEVICE(DELL_VENDOR_ID, 0x8128) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite E720 CDMA/EV-DO */ | 437 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD_SPRINT) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite E720 CDMA/EV-DO */ |
| 417 | { USB_DEVICE(DELL_VENDOR_ID, 0x8129) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite ET620 CDMA/EV-DO */ | 438 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD_TELUS) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite ET620 CDMA/EV-DO */ |
| 418 | { USB_DEVICE(DELL_VENDOR_ID, 0x8133) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */ | 439 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_VZW) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */ |
| 419 | { USB_DEVICE(DELL_VENDOR_ID, 0x8136) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */ | 440 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_SPRINT) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */ |
| 420 | { USB_DEVICE(DELL_VENDOR_ID, 0x8137) }, /* Dell Wireless HSDPA 5520 */ | 441 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_TELUS) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */ |
| 421 | { USB_DEVICE(DELL_VENDOR_ID, 0x8138) }, /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */ | 442 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_CINGULAR) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */ |
| 422 | { USB_DEVICE(DELL_VENDOR_ID, 0x8147) }, /* Dell Wireless 5530 Mobile Broadband (3G HSPA) Mini-Card */ | 443 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_L) }, /* Dell Wireless HSDPA 5520 */ |
| 444 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_I) }, /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */ | ||
| 445 | { USB_DEVICE(DELL_VENDOR_ID, 0x8147) }, /* Dell Wireless 5530 Mobile Broadband (3G HSPA) Mini-Card */ | ||
| 446 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_SPRINT) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */ | ||
| 447 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_TELUS) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */ | ||
| 448 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */ | ||
| 423 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, /* ADU-E100, ADU-310 */ | 449 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, /* ADU-E100, ADU-310 */ |
| 424 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) }, | 450 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) }, |
| 425 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) }, | 451 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) }, |
| @@ -487,10 +513,10 @@ static struct usb_device_id option_ids[] = { | |||
| 487 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626) }, | 513 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626) }, |
| 488 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, | 514 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, |
| 489 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) }, | 515 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) }, |
| 490 | { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G) }, | 516 | { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G_1) }, |
| 491 | { USB_DEVICE(PANTECH_VENDOR_ID, PANTECH_PRODUCT_PC5740) }, | 517 | { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G_2) }, |
| 492 | { USB_DEVICE(PANTECH_VENDOR_ID, PANTECH_PRODUCT_PC5750) }, | 518 | { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) }, |
| 493 | { USB_DEVICE(PANTECH_VENDOR_ID, PANTECH_PRODUCT_UM150) }, | 519 | { USB_DEVICE(0x1da5, 0x4515) }, /* BenQ H20 */ |
| 494 | { } /* Terminating entry */ | 520 | { } /* Terminating entry */ |
| 495 | }; | 521 | }; |
| 496 | MODULE_DEVICE_TABLE(usb, option_ids); | 522 | MODULE_DEVICE_TABLE(usb, option_ids); |
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c index baf591137b80..2620bf6fe5e1 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c | |||
| @@ -176,7 +176,7 @@ static unsigned int product_5052_count; | |||
| 176 | /* the array dimension is the number of default entries plus */ | 176 | /* the array dimension is the number of default entries plus */ |
| 177 | /* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */ | 177 | /* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */ |
| 178 | /* null entry */ | 178 | /* null entry */ |
| 179 | static struct usb_device_id ti_id_table_3410[7+TI_EXTRA_VID_PID_COUNT+1] = { | 179 | static struct usb_device_id ti_id_table_3410[10+TI_EXTRA_VID_PID_COUNT+1] = { |
| 180 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) }, | 180 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) }, |
| 181 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) }, | 181 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) }, |
| 182 | { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) }, | 182 | { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) }, |
| @@ -185,9 +185,11 @@ static struct usb_device_id ti_id_table_3410[7+TI_EXTRA_VID_PID_COUNT+1] = { | |||
| 185 | { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_PRODUCT_ID) }, | 185 | { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_PRODUCT_ID) }, |
| 186 | { USB_DEVICE(MTS_VENDOR_ID, MTS_EDGE_PRODUCT_ID) }, | 186 | { USB_DEVICE(MTS_VENDOR_ID, MTS_EDGE_PRODUCT_ID) }, |
| 187 | { USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) }, | 187 | { USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) }, |
| 188 | { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) }, | ||
| 189 | { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) }, | ||
| 188 | }; | 190 | }; |
| 189 | 191 | ||
| 190 | static struct usb_device_id ti_id_table_5052[4+TI_EXTRA_VID_PID_COUNT+1] = { | 192 | static struct usb_device_id ti_id_table_5052[5+TI_EXTRA_VID_PID_COUNT+1] = { |
| 191 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_BOOT_PRODUCT_ID) }, | 193 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_BOOT_PRODUCT_ID) }, |
| 192 | { USB_DEVICE(TI_VENDOR_ID, TI_5152_BOOT_PRODUCT_ID) }, | 194 | { USB_DEVICE(TI_VENDOR_ID, TI_5152_BOOT_PRODUCT_ID) }, |
| 193 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) }, | 195 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) }, |
| @@ -195,7 +197,7 @@ static struct usb_device_id ti_id_table_5052[4+TI_EXTRA_VID_PID_COUNT+1] = { | |||
| 195 | { USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) }, | 197 | { USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) }, |
| 196 | }; | 198 | }; |
| 197 | 199 | ||
| 198 | static struct usb_device_id ti_id_table_combined[6+2*TI_EXTRA_VID_PID_COUNT+1] = { | 200 | static struct usb_device_id ti_id_table_combined[14+2*TI_EXTRA_VID_PID_COUNT+1] = { |
| 199 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) }, | 201 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) }, |
| 200 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) }, | 202 | { USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) }, |
| 201 | { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) }, | 203 | { USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) }, |
| @@ -208,6 +210,8 @@ static struct usb_device_id ti_id_table_combined[6+2*TI_EXTRA_VID_PID_COUNT+1] = | |||
| 208 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) }, | 210 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_EEPROM_PRODUCT_ID) }, |
| 209 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) }, | 211 | { USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) }, |
| 210 | { USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) }, | 212 | { USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) }, |
| 213 | { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) }, | ||
| 214 | { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) }, | ||
| 211 | { } | 215 | { } |
| 212 | }; | 216 | }; |
| 213 | 217 | ||
diff --git a/drivers/usb/serial/ti_usb_3410_5052.h b/drivers/usb/serial/ti_usb_3410_5052.h index b7ea5dbadee5..f323c6025858 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.h +++ b/drivers/usb/serial/ti_usb_3410_5052.h | |||
| @@ -30,6 +30,8 @@ | |||
| 30 | #define IBM_VENDOR_ID 0x04b3 | 30 | #define IBM_VENDOR_ID 0x04b3 |
| 31 | #define TI_3410_PRODUCT_ID 0x3410 | 31 | #define TI_3410_PRODUCT_ID 0x3410 |
| 32 | #define IBM_4543_PRODUCT_ID 0x4543 | 32 | #define IBM_4543_PRODUCT_ID 0x4543 |
| 33 | #define IBM_454B_PRODUCT_ID 0x454b | ||
| 34 | #define IBM_454C_PRODUCT_ID 0x454c | ||
| 33 | #define TI_3410_EZ430_ID 0xF430 /* TI ez430 development tool */ | 35 | #define TI_3410_EZ430_ID 0xF430 /* TI ez430 development tool */ |
| 34 | #define TI_5052_BOOT_PRODUCT_ID 0x5052 /* no EEPROM, no firmware */ | 36 | #define TI_5052_BOOT_PRODUCT_ID 0x5052 /* no EEPROM, no firmware */ |
| 35 | #define TI_5152_BOOT_PRODUCT_ID 0x5152 /* no EEPROM, no firmware */ | 37 | #define TI_5152_BOOT_PRODUCT_ID 0x5152 /* no EEPROM, no firmware */ |
diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c index 2a42b862aa9f..727c506417cc 100644 --- a/drivers/usb/storage/scsiglue.c +++ b/drivers/usb/storage/scsiglue.c | |||
| @@ -64,6 +64,7 @@ | |||
| 64 | */ | 64 | */ |
| 65 | #define VENDOR_ID_NOKIA 0x0421 | 65 | #define VENDOR_ID_NOKIA 0x0421 |
| 66 | #define VENDOR_ID_NIKON 0x04b0 | 66 | #define VENDOR_ID_NIKON 0x04b0 |
| 67 | #define VENDOR_ID_PENTAX 0x0a17 | ||
| 67 | #define VENDOR_ID_MOTOROLA 0x22b8 | 68 | #define VENDOR_ID_MOTOROLA 0x22b8 |
| 68 | 69 | ||
| 69 | /*********************************************************************** | 70 | /*********************************************************************** |
| @@ -158,6 +159,7 @@ static int slave_configure(struct scsi_device *sdev) | |||
| 158 | switch (le16_to_cpu(us->pusb_dev->descriptor.idVendor)) { | 159 | switch (le16_to_cpu(us->pusb_dev->descriptor.idVendor)) { |
| 159 | case VENDOR_ID_NOKIA: | 160 | case VENDOR_ID_NOKIA: |
| 160 | case VENDOR_ID_NIKON: | 161 | case VENDOR_ID_NIKON: |
| 162 | case VENDOR_ID_PENTAX: | ||
| 161 | case VENDOR_ID_MOTOROLA: | 163 | case VENDOR_ID_MOTOROLA: |
| 162 | if (!(us->fflags & (US_FL_FIX_CAPACITY | | 164 | if (!(us->fflags & (US_FL_FIX_CAPACITY | |
| 163 | US_FL_CAPACITY_OK))) | 165 | US_FL_CAPACITY_OK))) |
diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c index 1d5438e6363b..fb65d221cedf 100644 --- a/drivers/usb/storage/transport.c +++ b/drivers/usb/storage/transport.c | |||
| @@ -558,32 +558,10 @@ static void last_sector_hacks(struct us_data *us, struct scsi_cmnd *srb) | |||
| 558 | 558 | ||
| 559 | if (srb->result == SAM_STAT_GOOD && scsi_get_resid(srb) == 0) { | 559 | if (srb->result == SAM_STAT_GOOD && scsi_get_resid(srb) == 0) { |
| 560 | 560 | ||
| 561 | /* The command succeeded. If the capacity is odd | 561 | /* The command succeeded. We know this device doesn't |
| 562 | * (i.e., if the sector number is even) then the | 562 | * have the last-sector bug, so stop checking it. |
| 563 | * "always-even" heuristic would be wrong for this | ||
| 564 | * device. Issue a WARN() so that the kerneloops.org | ||
| 565 | * project will be notified and we will then know to | ||
| 566 | * mark the device with a CAPACITY_OK flag. Hopefully | ||
| 567 | * this will occur for only a few devices. | ||
| 568 | * | ||
| 569 | * Use the sign of us->last_sector_hacks to tell whether | ||
| 570 | * the warning has already been issued; we don't need | ||
| 571 | * more than one warning per device. | ||
| 572 | */ | 563 | */ |
| 573 | if (!(sector & 1) && us->use_last_sector_hacks > 0) { | 564 | us->use_last_sector_hacks = 0; |
| 574 | unsigned vid = le16_to_cpu( | ||
| 575 | us->pusb_dev->descriptor.idVendor); | ||
| 576 | unsigned pid = le16_to_cpu( | ||
| 577 | us->pusb_dev->descriptor.idProduct); | ||
| 578 | unsigned rev = le16_to_cpu( | ||
| 579 | us->pusb_dev->descriptor.bcdDevice); | ||
| 580 | |||
| 581 | WARN(1, "%s: Successful last sector success at %u, " | ||
| 582 | "device %04x:%04x:%04x\n", | ||
| 583 | sdkp->disk->disk_name, sector, | ||
| 584 | vid, pid, rev); | ||
| 585 | us->use_last_sector_hacks = -1; | ||
| 586 | } | ||
| 587 | 565 | ||
| 588 | } else { | 566 | } else { |
| 589 | /* The command failed. Allow up to 3 retries in case this | 567 | /* The command failed. Allow up to 3 retries in case this |
| @@ -599,14 +577,6 @@ static void last_sector_hacks(struct us_data *us, struct scsi_cmnd *srb) | |||
| 599 | srb->result = SAM_STAT_CHECK_CONDITION; | 577 | srb->result = SAM_STAT_CHECK_CONDITION; |
| 600 | memcpy(srb->sense_buffer, record_not_found, | 578 | memcpy(srb->sense_buffer, record_not_found, |
| 601 | sizeof(record_not_found)); | 579 | sizeof(record_not_found)); |
| 602 | |||
| 603 | /* In theory we might want to issue a WARN() here if the | ||
| 604 | * capacity is even, since it could indicate the device | ||
| 605 | * has the READ CAPACITY bug _and_ the real capacity is | ||
| 606 | * odd. But it could also indicate that the device | ||
| 607 | * simply can't access its last sector, a failure mode | ||
| 608 | * which is surprisingly common. So no warning. | ||
| 609 | */ | ||
| 610 | } | 580 | } |
| 611 | 581 | ||
| 612 | done: | 582 | done: |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index 69269f739563..6f59c8e510ea 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
| @@ -907,13 +907,13 @@ UNUSUAL_DEV( 0x05e3, 0x0701, 0x0000, 0xffff, | |||
| 907 | "Genesys Logic", | 907 | "Genesys Logic", |
| 908 | "USB to IDE Optical", | 908 | "USB to IDE Optical", |
| 909 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 909 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
| 910 | US_FL_GO_SLOW | US_FL_MAX_SECTORS_64 ), | 910 | US_FL_GO_SLOW | US_FL_MAX_SECTORS_64 | US_FL_IGNORE_RESIDUE ), |
| 911 | 911 | ||
| 912 | UNUSUAL_DEV( 0x05e3, 0x0702, 0x0000, 0xffff, | 912 | UNUSUAL_DEV( 0x05e3, 0x0702, 0x0000, 0xffff, |
| 913 | "Genesys Logic", | 913 | "Genesys Logic", |
| 914 | "USB to IDE Disk", | 914 | "USB to IDE Disk", |
| 915 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 915 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
| 916 | US_FL_GO_SLOW | US_FL_MAX_SECTORS_64 ), | 916 | US_FL_GO_SLOW | US_FL_MAX_SECTORS_64 | US_FL_IGNORE_RESIDUE ), |
| 917 | 917 | ||
| 918 | /* Reported by Ben Efros <ben@pc-doctor.com> */ | 918 | /* Reported by Ben Efros <ben@pc-doctor.com> */ |
| 919 | UNUSUAL_DEV( 0x05e3, 0x0723, 0x9451, 0x9451, | 919 | UNUSUAL_DEV( 0x05e3, 0x0723, 0x9451, 0x9451, |
| @@ -1214,7 +1214,7 @@ UNUSUAL_DEV( 0x07c4, 0xa400, 0x0000, 0xffff, | |||
| 1214 | "Datafab", | 1214 | "Datafab", |
| 1215 | "KECF-USB", | 1215 | "KECF-USB", |
| 1216 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1216 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
| 1217 | US_FL_FIX_INQUIRY ), | 1217 | US_FL_FIX_INQUIRY | US_FL_FIX_CAPACITY ), |
| 1218 | 1218 | ||
| 1219 | /* Reported by Rauch Wolke <rauchwolke@gmx.net> */ | 1219 | /* Reported by Rauch Wolke <rauchwolke@gmx.net> */ |
| 1220 | UNUSUAL_DEV( 0x07c4, 0xa4a5, 0x0000, 0xffff, | 1220 | UNUSUAL_DEV( 0x07c4, 0xa4a5, 0x0000, 0xffff, |
| @@ -1354,21 +1354,6 @@ UNUSUAL_DEV( 0x0a17, 0x0004, 0x1000, 0x1000, | |||
| 1354 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1354 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
| 1355 | US_FL_FIX_INQUIRY ), | 1355 | US_FL_FIX_INQUIRY ), |
| 1356 | 1356 | ||
| 1357 | |||
| 1358 | /* Submitted by Per Winkvist <per.winkvist@uk.com> */ | ||
| 1359 | UNUSUAL_DEV( 0x0a17, 0x006, 0x0000, 0xffff, | ||
| 1360 | "Pentax", | ||
| 1361 | "Optio S/S4", | ||
| 1362 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
| 1363 | US_FL_FIX_INQUIRY ), | ||
| 1364 | |||
| 1365 | /* Reported by Jaak Ristioja <Ristioja@gmail.com> */ | ||
| 1366 | UNUSUAL_DEV( 0x0a17, 0x006e, 0x0100, 0x0100, | ||
| 1367 | "Pentax", | ||
| 1368 | "K10D", | ||
| 1369 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
| 1370 | US_FL_FIX_CAPACITY ), | ||
| 1371 | |||
| 1372 | /* These are virtual windows driver CDs, which the zd1211rw driver | 1357 | /* These are virtual windows driver CDs, which the zd1211rw driver |
| 1373 | * automatically converts into WLAN devices. */ | 1358 | * automatically converts into WLAN devices. */ |
| 1374 | UNUSUAL_DEV( 0x0ace, 0x2011, 0x0101, 0x0101, | 1359 | UNUSUAL_DEV( 0x0ace, 0x2011, 0x0101, 0x0101, |
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index 5aa099bc7690..330204a61ea8 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig | |||
| @@ -397,7 +397,7 @@ config FB_SA1100 | |||
| 397 | 397 | ||
| 398 | config FB_IMX | 398 | config FB_IMX |
| 399 | tristate "Motorola i.MX LCD support" | 399 | tristate "Motorola i.MX LCD support" |
| 400 | depends on FB && ARM && ARCH_IMX | 400 | depends on FB && (ARCH_IMX || ARCH_MX2) |
| 401 | select FB_CFB_FILLRECT | 401 | select FB_CFB_FILLRECT |
| 402 | select FB_CFB_COPYAREA | 402 | select FB_CFB_COPYAREA |
| 403 | select FB_CFB_IMAGEBLIT | 403 | select FB_CFB_IMAGEBLIT |
| @@ -1054,9 +1054,7 @@ config FB_RIVA_BACKLIGHT | |||
| 1054 | 1054 | ||
| 1055 | config FB_I810 | 1055 | config FB_I810 |
| 1056 | tristate "Intel 810/815 support (EXPERIMENTAL)" | 1056 | tristate "Intel 810/815 support (EXPERIMENTAL)" |
| 1057 | depends on FB && EXPERIMENTAL && PCI && X86_32 | 1057 | depends on EXPERIMENTAL && FB && PCI && X86_32 && AGP_INTEL |
| 1058 | select AGP | ||
| 1059 | select AGP_INTEL | ||
| 1060 | select FB_MODE_HELPERS | 1058 | select FB_MODE_HELPERS |
| 1061 | select FB_CFB_FILLRECT | 1059 | select FB_CFB_FILLRECT |
| 1062 | select FB_CFB_COPYAREA | 1060 | select FB_CFB_COPYAREA |
| @@ -1119,9 +1117,7 @@ config FB_CARILLO_RANCH | |||
| 1119 | 1117 | ||
| 1120 | config FB_INTEL | 1118 | config FB_INTEL |
| 1121 | tristate "Intel 830M/845G/852GM/855GM/865G/915G/945G/945GM/965G/965GM support (EXPERIMENTAL)" | 1119 | tristate "Intel 830M/845G/852GM/855GM/865G/915G/945G/945GM/965G/965GM support (EXPERIMENTAL)" |
| 1122 | depends on FB && EXPERIMENTAL && PCI && X86 | 1120 | depends on EXPERIMENTAL && FB && PCI && X86 && AGP_INTEL |
| 1123 | select AGP | ||
| 1124 | select AGP_INTEL | ||
| 1125 | select FB_MODE_HELPERS | 1121 | select FB_MODE_HELPERS |
| 1126 | select FB_CFB_FILLRECT | 1122 | select FB_CFB_FILLRECT |
| 1127 | select FB_CFB_COPYAREA | 1123 | select FB_CFB_COPYAREA |
diff --git a/drivers/video/atafb.c b/drivers/video/atafb.c index 8058572a7428..018850c116c6 100644 --- a/drivers/video/atafb.c +++ b/drivers/video/atafb.c | |||
| @@ -841,7 +841,7 @@ static int tt_detect(void) | |||
| 841 | tt_dmasnd.ctrl = DMASND_CTRL_OFF; | 841 | tt_dmasnd.ctrl = DMASND_CTRL_OFF; |
| 842 | udelay(20); /* wait a while for things to settle down */ | 842 | udelay(20); /* wait a while for things to settle down */ |
| 843 | } | 843 | } |
| 844 | mono_moni = (mfp.par_dt_reg & 0x80) == 0; | 844 | mono_moni = (st_mfp.par_dt_reg & 0x80) == 0; |
| 845 | 845 | ||
| 846 | tt_get_par(&par); | 846 | tt_get_par(&par); |
| 847 | tt_encode_var(&atafb_predefined[0], &par); | 847 | tt_encode_var(&atafb_predefined[0], &par); |
| @@ -2035,7 +2035,7 @@ static int stste_detect(void) | |||
| 2035 | tt_dmasnd.ctrl = DMASND_CTRL_OFF; | 2035 | tt_dmasnd.ctrl = DMASND_CTRL_OFF; |
| 2036 | udelay(20); /* wait a while for things to settle down */ | 2036 | udelay(20); /* wait a while for things to settle down */ |
| 2037 | } | 2037 | } |
| 2038 | mono_moni = (mfp.par_dt_reg & 0x80) == 0; | 2038 | mono_moni = (st_mfp.par_dt_reg & 0x80) == 0; |
| 2039 | 2039 | ||
| 2040 | stste_get_par(&par); | 2040 | stste_get_par(&par); |
| 2041 | stste_encode_var(&atafb_predefined[0], &par); | 2041 | stste_encode_var(&atafb_predefined[0], &par); |
| @@ -2086,20 +2086,20 @@ static void st_ovsc_switch(void) | |||
| 2086 | return; | 2086 | return; |
| 2087 | local_irq_save(flags); | 2087 | local_irq_save(flags); |
| 2088 | 2088 | ||
| 2089 | mfp.tim_ct_b = 0x10; | 2089 | st_mfp.tim_ct_b = 0x10; |
| 2090 | mfp.active_edge |= 8; | 2090 | st_mfp.active_edge |= 8; |
| 2091 | mfp.tim_ct_b = 0; | 2091 | st_mfp.tim_ct_b = 0; |
| 2092 | mfp.tim_dt_b = 0xf0; | 2092 | st_mfp.tim_dt_b = 0xf0; |
| 2093 | mfp.tim_ct_b = 8; | 2093 | st_mfp.tim_ct_b = 8; |
| 2094 | while (mfp.tim_dt_b > 1) /* TOS does it this way, don't ask why */ | 2094 | while (st_mfp.tim_dt_b > 1) /* TOS does it this way, don't ask why */ |
| 2095 | ; | 2095 | ; |
| 2096 | new = mfp.tim_dt_b; | 2096 | new = st_mfp.tim_dt_b; |
| 2097 | do { | 2097 | do { |
| 2098 | udelay(LINE_DELAY); | 2098 | udelay(LINE_DELAY); |
| 2099 | old = new; | 2099 | old = new; |
| 2100 | new = mfp.tim_dt_b; | 2100 | new = st_mfp.tim_dt_b; |
| 2101 | } while (old != new); | 2101 | } while (old != new); |
| 2102 | mfp.tim_ct_b = 0x10; | 2102 | st_mfp.tim_ct_b = 0x10; |
| 2103 | udelay(SYNC_DELAY); | 2103 | udelay(SYNC_DELAY); |
| 2104 | 2104 | ||
| 2105 | if (atari_switches & ATARI_SWITCH_OVSC_IKBD) | 2105 | if (atari_switches & ATARI_SWITCH_OVSC_IKBD) |
diff --git a/drivers/video/aty/aty128fb.c b/drivers/video/aty/aty128fb.c index fb2b0f5b23bd..2181ce4d7ebd 100644 --- a/drivers/video/aty/aty128fb.c +++ b/drivers/video/aty/aty128fb.c | |||
| @@ -2365,7 +2365,6 @@ static void fbcon_aty128_bmove(struct display *p, int sy, int sx, int dy, int dx | |||
| 2365 | static void aty128_set_suspend(struct aty128fb_par *par, int suspend) | 2365 | static void aty128_set_suspend(struct aty128fb_par *par, int suspend) |
| 2366 | { | 2366 | { |
| 2367 | u32 pmgt; | 2367 | u32 pmgt; |
| 2368 | u16 pwr_command; | ||
| 2369 | struct pci_dev *pdev = par->pdev; | 2368 | struct pci_dev *pdev = par->pdev; |
| 2370 | 2369 | ||
| 2371 | if (!par->pm_reg) | 2370 | if (!par->pm_reg) |
| @@ -2374,6 +2373,8 @@ static void aty128_set_suspend(struct aty128fb_par *par, int suspend) | |||
| 2374 | /* Set the chip into the appropriate suspend mode (we use D2, | 2373 | /* Set the chip into the appropriate suspend mode (we use D2, |
| 2375 | * D3 would require a complete re-initialisation of the chip, | 2374 | * D3 would require a complete re-initialisation of the chip, |
| 2376 | * including PCI config registers, clocks, AGP configuration, ...) | 2375 | * including PCI config registers, clocks, AGP configuration, ...) |
| 2376 | * | ||
| 2377 | * For resume, the core will have already brought us back to D0 | ||
| 2377 | */ | 2378 | */ |
| 2378 | if (suspend) { | 2379 | if (suspend) { |
| 2379 | /* Make sure CRTC2 is reset. Remove that the day we decide to | 2380 | /* Make sure CRTC2 is reset. Remove that the day we decide to |
| @@ -2391,17 +2392,9 @@ static void aty128_set_suspend(struct aty128fb_par *par, int suspend) | |||
| 2391 | aty_st_le32(BUS_CNTL1, 0x00000010); | 2392 | aty_st_le32(BUS_CNTL1, 0x00000010); |
| 2392 | aty_st_le32(MEM_POWER_MISC, 0x0c830000); | 2393 | aty_st_le32(MEM_POWER_MISC, 0x0c830000); |
| 2393 | mdelay(100); | 2394 | mdelay(100); |
| 2394 | pci_read_config_word(pdev, par->pm_reg+PCI_PM_CTRL, &pwr_command); | 2395 | |
| 2395 | /* Switch PCI power management to D2 */ | 2396 | /* Switch PCI power management to D2 */ |
| 2396 | pci_write_config_word(pdev, par->pm_reg+PCI_PM_CTRL, | 2397 | pci_set_power_state(pdev, PCI_D2); |
| 2397 | (pwr_command & ~PCI_PM_CTRL_STATE_MASK) | 2); | ||
| 2398 | pci_read_config_word(pdev, par->pm_reg+PCI_PM_CTRL, &pwr_command); | ||
| 2399 | } else { | ||
| 2400 | /* Switch back PCI power management to D0 */ | ||
| 2401 | mdelay(100); | ||
| 2402 | pci_write_config_word(pdev, par->pm_reg+PCI_PM_CTRL, 0); | ||
| 2403 | pci_read_config_word(pdev, par->pm_reg+PCI_PM_CTRL, &pwr_command); | ||
| 2404 | mdelay(100); | ||
| 2405 | } | 2398 | } |
| 2406 | } | 2399 | } |
| 2407 | 2400 | ||
| @@ -2410,6 +2403,12 @@ static int aty128_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
| 2410 | struct fb_info *info = pci_get_drvdata(pdev); | 2403 | struct fb_info *info = pci_get_drvdata(pdev); |
| 2411 | struct aty128fb_par *par = info->par; | 2404 | struct aty128fb_par *par = info->par; |
| 2412 | 2405 | ||
| 2406 | /* Because we may change PCI D state ourselves, we need to | ||
| 2407 | * first save the config space content so the core can | ||
| 2408 | * restore it properly on resume. | ||
| 2409 | */ | ||
| 2410 | pci_save_state(pdev); | ||
| 2411 | |||
| 2413 | /* We don't do anything but D2, for now we return 0, but | 2412 | /* We don't do anything but D2, for now we return 0, but |
| 2414 | * we may want to change that. How do we know if the BIOS | 2413 | * we may want to change that. How do we know if the BIOS |
| 2415 | * can properly take care of D3 ? Also, with swsusp, we | 2414 | * can properly take care of D3 ? Also, with swsusp, we |
| @@ -2476,6 +2475,11 @@ static int aty128_do_resume(struct pci_dev *pdev) | |||
| 2476 | if (pdev->dev.power.power_state.event == PM_EVENT_ON) | 2475 | if (pdev->dev.power.power_state.event == PM_EVENT_ON) |
| 2477 | return 0; | 2476 | return 0; |
| 2478 | 2477 | ||
| 2478 | /* PCI state will have been restored by the core, so | ||
| 2479 | * we should be in D0 now with our config space fully | ||
| 2480 | * restored | ||
| 2481 | */ | ||
| 2482 | |||
| 2479 | /* Wakeup chip */ | 2483 | /* Wakeup chip */ |
| 2480 | aty128_set_suspend(par, 0); | 2484 | aty128_set_suspend(par, 0); |
| 2481 | par->asleep = 0; | 2485 | par->asleep = 0; |
diff --git a/drivers/video/aty/atyfb_base.c b/drivers/video/aty/atyfb_base.c index 1d6e16d346a5..1207c208a30b 100644 --- a/drivers/video/aty/atyfb_base.c +++ b/drivers/video/aty/atyfb_base.c | |||
| @@ -1978,7 +1978,7 @@ static int aty_power_mgmt(int sleep, struct atyfb_par *par) | |||
| 1978 | 1978 | ||
| 1979 | return timeout ? 0 : -EIO; | 1979 | return timeout ? 0 : -EIO; |
| 1980 | } | 1980 | } |
| 1981 | #endif | 1981 | #endif /* CONFIG_PPC_PMAC */ |
| 1982 | 1982 | ||
| 1983 | static int atyfb_pci_suspend(struct pci_dev *pdev, pm_message_t state) | 1983 | static int atyfb_pci_suspend(struct pci_dev *pdev, pm_message_t state) |
| 1984 | { | 1984 | { |
| @@ -2002,9 +2002,15 @@ static int atyfb_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
| 2002 | par->asleep = 1; | 2002 | par->asleep = 1; |
| 2003 | par->lock_blank = 1; | 2003 | par->lock_blank = 1; |
| 2004 | 2004 | ||
| 2005 | /* Because we may change PCI D state ourselves, we need to | ||
| 2006 | * first save the config space content so the core can | ||
| 2007 | * restore it properly on resume. | ||
| 2008 | */ | ||
| 2009 | pci_save_state(pdev); | ||
| 2010 | |||
| 2005 | #ifdef CONFIG_PPC_PMAC | 2011 | #ifdef CONFIG_PPC_PMAC |
| 2006 | /* Set chip to "suspend" mode */ | 2012 | /* Set chip to "suspend" mode */ |
| 2007 | if (aty_power_mgmt(1, par)) { | 2013 | if (machine_is(powermac) && aty_power_mgmt(1, par)) { |
| 2008 | par->asleep = 0; | 2014 | par->asleep = 0; |
| 2009 | par->lock_blank = 0; | 2015 | par->lock_blank = 0; |
| 2010 | atyfb_blank(FB_BLANK_UNBLANK, info); | 2016 | atyfb_blank(FB_BLANK_UNBLANK, info); |
| @@ -2047,11 +2053,15 @@ static int atyfb_pci_resume(struct pci_dev *pdev) | |||
| 2047 | 2053 | ||
| 2048 | acquire_console_sem(); | 2054 | acquire_console_sem(); |
| 2049 | 2055 | ||
| 2056 | /* PCI state will have been restored by the core, so | ||
| 2057 | * we should be in D0 now with our config space fully | ||
| 2058 | * restored | ||
| 2059 | */ | ||
| 2060 | |||
| 2050 | #ifdef CONFIG_PPC_PMAC | 2061 | #ifdef CONFIG_PPC_PMAC |
| 2051 | if (pdev->dev.power.power_state.event == 2) | 2062 | if (machine_is(powermac) && |
| 2063 | pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) | ||
| 2052 | aty_power_mgmt(0, par); | 2064 | aty_power_mgmt(0, par); |
| 2053 | #else | ||
| 2054 | pci_set_power_state(pdev, PCI_D0); | ||
| 2055 | #endif | 2065 | #endif |
| 2056 | 2066 | ||
| 2057 | aty_resume_chip(info); | 2067 | aty_resume_chip(info); |
diff --git a/drivers/video/aty/radeon_pm.c b/drivers/video/aty/radeon_pm.c index c4ac2a032fcb..ca5f0dc28546 100644 --- a/drivers/video/aty/radeon_pm.c +++ b/drivers/video/aty/radeon_pm.c | |||
| @@ -2509,9 +2509,7 @@ static void radeon_reinitialize_QW(struct radeonfb_info *rinfo) | |||
| 2509 | 2509 | ||
| 2510 | static void radeon_set_suspend(struct radeonfb_info *rinfo, int suspend) | 2510 | static void radeon_set_suspend(struct radeonfb_info *rinfo, int suspend) |
| 2511 | { | 2511 | { |
| 2512 | u16 pwr_cmd; | ||
| 2513 | u32 tmp; | 2512 | u32 tmp; |
| 2514 | int i; | ||
| 2515 | 2513 | ||
| 2516 | if (!rinfo->pm_reg) | 2514 | if (!rinfo->pm_reg) |
| 2517 | return; | 2515 | return; |
| @@ -2557,32 +2555,14 @@ static void radeon_set_suspend(struct radeonfb_info *rinfo, int suspend) | |||
| 2557 | } | 2555 | } |
| 2558 | } | 2556 | } |
| 2559 | 2557 | ||
| 2560 | for (i = 0; i < 64; ++i) | ||
| 2561 | pci_read_config_dword(rinfo->pdev, i * 4, | ||
| 2562 | &rinfo->cfg_save[i]); | ||
| 2563 | |||
| 2564 | /* Switch PCI power management to D2. */ | 2558 | /* Switch PCI power management to D2. */ |
| 2565 | pci_disable_device(rinfo->pdev); | 2559 | pci_disable_device(rinfo->pdev); |
| 2566 | for (;;) { | 2560 | pci_save_state(rinfo->pdev); |
| 2567 | pci_read_config_word( | 2561 | pci_set_power_state(rinfo->pdev, PCI_D2); |
| 2568 | rinfo->pdev, rinfo->pm_reg+PCI_PM_CTRL, | ||
| 2569 | &pwr_cmd); | ||
| 2570 | if (pwr_cmd & 2) | ||
| 2571 | break; | ||
| 2572 | pci_write_config_word( | ||
| 2573 | rinfo->pdev, rinfo->pm_reg+PCI_PM_CTRL, | ||
| 2574 | (pwr_cmd & ~PCI_PM_CTRL_STATE_MASK) | 2); | ||
| 2575 | mdelay(500); | ||
| 2576 | } | ||
| 2577 | } else { | 2562 | } else { |
| 2578 | printk(KERN_DEBUG "radeonfb (%s): switching to D0 state...\n", | 2563 | printk(KERN_DEBUG "radeonfb (%s): switching to D0 state...\n", |
| 2579 | pci_name(rinfo->pdev)); | 2564 | pci_name(rinfo->pdev)); |
| 2580 | 2565 | ||
| 2581 | /* Switch back PCI powermanagment to D0 */ | ||
| 2582 | mdelay(200); | ||
| 2583 | pci_write_config_word(rinfo->pdev, rinfo->pm_reg+PCI_PM_CTRL, 0); | ||
| 2584 | mdelay(500); | ||
| 2585 | |||
| 2586 | if (rinfo->family <= CHIP_FAMILY_RV250) { | 2566 | if (rinfo->family <= CHIP_FAMILY_RV250) { |
| 2587 | /* Reset the SDRAM controller */ | 2567 | /* Reset the SDRAM controller */ |
| 2588 | radeon_pm_full_reset_sdram(rinfo); | 2568 | radeon_pm_full_reset_sdram(rinfo); |
| @@ -2598,37 +2578,10 @@ static void radeon_set_suspend(struct radeonfb_info *rinfo, int suspend) | |||
| 2598 | } | 2578 | } |
| 2599 | } | 2579 | } |
| 2600 | 2580 | ||
| 2601 | static int radeon_restore_pci_cfg(struct radeonfb_info *rinfo) | ||
| 2602 | { | ||
| 2603 | int i; | ||
| 2604 | static u32 radeon_cfg_after_resume[64]; | ||
| 2605 | |||
| 2606 | for (i = 0; i < 64; ++i) | ||
| 2607 | pci_read_config_dword(rinfo->pdev, i * 4, | ||
| 2608 | &radeon_cfg_after_resume[i]); | ||
| 2609 | |||
| 2610 | if (radeon_cfg_after_resume[PCI_BASE_ADDRESS_0/4] | ||
| 2611 | == rinfo->cfg_save[PCI_BASE_ADDRESS_0/4]) | ||
| 2612 | return 0; /* assume everything is ok */ | ||
| 2613 | |||
| 2614 | for (i = PCI_BASE_ADDRESS_0/4; i < 64; ++i) { | ||
| 2615 | if (radeon_cfg_after_resume[i] != rinfo->cfg_save[i]) | ||
| 2616 | pci_write_config_dword(rinfo->pdev, i * 4, | ||
| 2617 | rinfo->cfg_save[i]); | ||
| 2618 | } | ||
| 2619 | pci_write_config_word(rinfo->pdev, PCI_CACHE_LINE_SIZE, | ||
| 2620 | rinfo->cfg_save[PCI_CACHE_LINE_SIZE/4]); | ||
| 2621 | pci_write_config_word(rinfo->pdev, PCI_COMMAND, | ||
| 2622 | rinfo->cfg_save[PCI_COMMAND/4]); | ||
| 2623 | return 1; | ||
| 2624 | } | ||
| 2625 | |||
| 2626 | |||
| 2627 | int radeonfb_pci_suspend(struct pci_dev *pdev, pm_message_t mesg) | 2581 | int radeonfb_pci_suspend(struct pci_dev *pdev, pm_message_t mesg) |
| 2628 | { | 2582 | { |
| 2629 | struct fb_info *info = pci_get_drvdata(pdev); | 2583 | struct fb_info *info = pci_get_drvdata(pdev); |
| 2630 | struct radeonfb_info *rinfo = info->par; | 2584 | struct radeonfb_info *rinfo = info->par; |
| 2631 | int i; | ||
| 2632 | 2585 | ||
| 2633 | if (mesg.event == pdev->dev.power.power_state.event) | 2586 | if (mesg.event == pdev->dev.power.power_state.event) |
| 2634 | return 0; | 2587 | return 0; |
| @@ -2674,6 +2627,11 @@ int radeonfb_pci_suspend(struct pci_dev *pdev, pm_message_t mesg) | |||
| 2674 | pmac_suspend_agp_for_card(pdev); | 2627 | pmac_suspend_agp_for_card(pdev); |
| 2675 | #endif /* CONFIG_PPC_PMAC */ | 2628 | #endif /* CONFIG_PPC_PMAC */ |
| 2676 | 2629 | ||
| 2630 | /* It's unclear whether or when the generic code will do that, so let's | ||
| 2631 | * do it ourselves. We save state before we do any power management | ||
| 2632 | */ | ||
| 2633 | pci_save_state(pdev); | ||
| 2634 | |||
| 2677 | /* If we support wakeup from poweroff, we save all regs we can including cfg | 2635 | /* If we support wakeup from poweroff, we save all regs we can including cfg |
| 2678 | * space | 2636 | * space |
| 2679 | */ | 2637 | */ |
| @@ -2698,9 +2656,6 @@ int radeonfb_pci_suspend(struct pci_dev *pdev, pm_message_t mesg) | |||
| 2698 | mdelay(20); | 2656 | mdelay(20); |
| 2699 | OUTREG(LVDS_GEN_CNTL, INREG(LVDS_GEN_CNTL) & ~(LVDS_DIGON)); | 2657 | OUTREG(LVDS_GEN_CNTL, INREG(LVDS_GEN_CNTL) & ~(LVDS_DIGON)); |
| 2700 | } | 2658 | } |
| 2701 | // FIXME: Use PCI layer | ||
| 2702 | for (i = 0; i < 64; ++i) | ||
| 2703 | pci_read_config_dword(pdev, i * 4, &rinfo->cfg_save[i]); | ||
| 2704 | pci_disable_device(pdev); | 2659 | pci_disable_device(pdev); |
| 2705 | } | 2660 | } |
| 2706 | /* If we support D2, we go to it (should be fixed later with a flag forcing | 2661 | /* If we support D2, we go to it (should be fixed later with a flag forcing |
| @@ -2717,6 +2672,13 @@ int radeonfb_pci_suspend(struct pci_dev *pdev, pm_message_t mesg) | |||
| 2717 | return 0; | 2672 | return 0; |
| 2718 | } | 2673 | } |
| 2719 | 2674 | ||
| 2675 | static int radeon_check_power_loss(struct radeonfb_info *rinfo) | ||
| 2676 | { | ||
| 2677 | return rinfo->save_regs[4] != INPLL(CLK_PIN_CNTL) || | ||
| 2678 | rinfo->save_regs[2] != INPLL(MCLK_CNTL) || | ||
| 2679 | rinfo->save_regs[3] != INPLL(SCLK_CNTL); | ||
| 2680 | } | ||
| 2681 | |||
| 2720 | int radeonfb_pci_resume(struct pci_dev *pdev) | 2682 | int radeonfb_pci_resume(struct pci_dev *pdev) |
| 2721 | { | 2683 | { |
| 2722 | struct fb_info *info = pci_get_drvdata(pdev); | 2684 | struct fb_info *info = pci_get_drvdata(pdev); |
| @@ -2735,20 +2697,13 @@ int radeonfb_pci_resume(struct pci_dev *pdev) | |||
| 2735 | printk(KERN_DEBUG "radeonfb (%s): resuming from state: %d...\n", | 2697 | printk(KERN_DEBUG "radeonfb (%s): resuming from state: %d...\n", |
| 2736 | pci_name(pdev), pdev->dev.power.power_state.event); | 2698 | pci_name(pdev), pdev->dev.power.power_state.event); |
| 2737 | 2699 | ||
| 2738 | 2700 | /* PCI state will have been restored by the core, so | |
| 2739 | if (pci_enable_device(pdev)) { | 2701 | * we should be in D0 now with our config space fully |
| 2740 | rc = -ENODEV; | 2702 | * restored |
| 2741 | printk(KERN_ERR "radeonfb (%s): can't enable PCI device !\n", | 2703 | */ |
| 2742 | pci_name(pdev)); | ||
| 2743 | goto bail; | ||
| 2744 | } | ||
| 2745 | pci_set_master(pdev); | ||
| 2746 | |||
| 2747 | if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) { | 2704 | if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) { |
| 2748 | /* Wakeup chip. Check from config space if we were powered off | 2705 | /* Wakeup chip */ |
| 2749 | * (todo: additionally, check CLK_PIN_CNTL too) | 2706 | if ((rinfo->pm_mode & radeon_pm_off) && radeon_check_power_loss(rinfo)) { |
| 2750 | */ | ||
| 2751 | if ((rinfo->pm_mode & radeon_pm_off) && radeon_restore_pci_cfg(rinfo)) { | ||
| 2752 | if (rinfo->reinit_func != NULL) | 2707 | if (rinfo->reinit_func != NULL) |
| 2753 | rinfo->reinit_func(rinfo); | 2708 | rinfo->reinit_func(rinfo); |
| 2754 | else { | 2709 | else { |
diff --git a/drivers/video/aty/radeonfb.h b/drivers/video/aty/radeonfb.h index 3ea1b00fdd22..7351e66c7f54 100644 --- a/drivers/video/aty/radeonfb.h +++ b/drivers/video/aty/radeonfb.h | |||
| @@ -361,8 +361,6 @@ struct radeonfb_info { | |||
| 361 | #ifdef CONFIG_FB_RADEON_I2C | 361 | #ifdef CONFIG_FB_RADEON_I2C |
| 362 | struct radeon_i2c_chan i2c[4]; | 362 | struct radeon_i2c_chan i2c[4]; |
| 363 | #endif | 363 | #endif |
| 364 | |||
| 365 | u32 cfg_save[64]; | ||
| 366 | }; | 364 | }; |
| 367 | 365 | ||
| 368 | 366 | ||
diff --git a/drivers/video/bfin-t350mcqb-fb.c b/drivers/video/bfin-t350mcqb-fb.c index 2a423d3a2a8e..90cfddabf1f7 100644 --- a/drivers/video/bfin-t350mcqb-fb.c +++ b/drivers/video/bfin-t350mcqb-fb.c | |||
| @@ -447,7 +447,7 @@ static irqreturn_t bfin_t350mcqb_irq_error(int irq, void *dev_id) | |||
| 447 | return IRQ_HANDLED; | 447 | return IRQ_HANDLED; |
| 448 | } | 448 | } |
| 449 | 449 | ||
| 450 | static int __init bfin_t350mcqb_probe(struct platform_device *pdev) | 450 | static int __devinit bfin_t350mcqb_probe(struct platform_device *pdev) |
| 451 | { | 451 | { |
| 452 | struct bfin_t350mcqbfb_info *info; | 452 | struct bfin_t350mcqbfb_info *info; |
| 453 | struct fb_info *fbinfo; | 453 | struct fb_info *fbinfo; |
diff --git a/drivers/video/geode/gx1fb_core.c b/drivers/video/geode/gx1fb_core.c index 751e491ca8c8..f20eff8c4a81 100644 --- a/drivers/video/geode/gx1fb_core.c +++ b/drivers/video/geode/gx1fb_core.c | |||
| @@ -136,13 +136,10 @@ static int gx1fb_set_par(struct fb_info *info) | |||
| 136 | { | 136 | { |
| 137 | struct geodefb_par *par = info->par; | 137 | struct geodefb_par *par = info->par; |
| 138 | 138 | ||
| 139 | if (info->var.bits_per_pixel == 16) { | 139 | if (info->var.bits_per_pixel == 16) |
| 140 | info->fix.visual = FB_VISUAL_TRUECOLOR; | 140 | info->fix.visual = FB_VISUAL_TRUECOLOR; |
| 141 | fb_dealloc_cmap(&info->cmap); | 141 | else |
| 142 | } else { | ||
| 143 | info->fix.visual = FB_VISUAL_PSEUDOCOLOR; | 142 | info->fix.visual = FB_VISUAL_PSEUDOCOLOR; |
| 144 | fb_alloc_cmap(&info->cmap, 1<<info->var.bits_per_pixel, 0); | ||
| 145 | } | ||
| 146 | 143 | ||
| 147 | info->fix.line_length = gx1_line_delta(info->var.xres, info->var.bits_per_pixel); | 144 | info->fix.line_length = gx1_line_delta(info->var.xres, info->var.bits_per_pixel); |
| 148 | 145 | ||
| @@ -315,6 +312,10 @@ static struct fb_info * __init gx1fb_init_fbinfo(struct device *dev) | |||
| 315 | if (!par->panel_x) | 312 | if (!par->panel_x) |
| 316 | par->enable_crt = 1; /* fall back to CRT if no panel is specified */ | 313 | par->enable_crt = 1; /* fall back to CRT if no panel is specified */ |
| 317 | 314 | ||
| 315 | if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) { | ||
| 316 | framebuffer_release(info); | ||
| 317 | return NULL; | ||
| 318 | } | ||
| 318 | return info; | 319 | return info; |
| 319 | } | 320 | } |
| 320 | 321 | ||
| @@ -374,8 +375,11 @@ static int __init gx1fb_probe(struct pci_dev *pdev, const struct pci_device_id * | |||
| 374 | release_mem_region(gx1_gx_base() + 0x8300, 0x100); | 375 | release_mem_region(gx1_gx_base() + 0x8300, 0x100); |
| 375 | } | 376 | } |
| 376 | 377 | ||
| 377 | if (info) | 378 | if (info) { |
| 379 | fb_dealloc_cmap(&info->cmap); | ||
| 378 | framebuffer_release(info); | 380 | framebuffer_release(info); |
| 381 | } | ||
| 382 | |||
| 379 | return ret; | 383 | return ret; |
| 380 | } | 384 | } |
| 381 | 385 | ||
| @@ -395,6 +399,7 @@ static void gx1fb_remove(struct pci_dev *pdev) | |||
| 395 | iounmap(par->dc_regs); | 399 | iounmap(par->dc_regs); |
| 396 | release_mem_region(gx1_gx_base() + 0x8300, 0x100); | 400 | release_mem_region(gx1_gx_base() + 0x8300, 0x100); |
| 397 | 401 | ||
| 402 | fb_dealloc_cmap(&info->cmap); | ||
| 398 | pci_set_drvdata(pdev, NULL); | 403 | pci_set_drvdata(pdev, NULL); |
| 399 | 404 | ||
| 400 | framebuffer_release(info); | 405 | framebuffer_release(info); |
diff --git a/drivers/video/geode/gxfb_core.c b/drivers/video/geode/gxfb_core.c index 484118926318..2552cac39e1c 100644 --- a/drivers/video/geode/gxfb_core.c +++ b/drivers/video/geode/gxfb_core.c | |||
| @@ -171,13 +171,10 @@ static int gxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
| 171 | 171 | ||
| 172 | static int gxfb_set_par(struct fb_info *info) | 172 | static int gxfb_set_par(struct fb_info *info) |
| 173 | { | 173 | { |
| 174 | if (info->var.bits_per_pixel > 8) { | 174 | if (info->var.bits_per_pixel > 8) |
| 175 | info->fix.visual = FB_VISUAL_TRUECOLOR; | 175 | info->fix.visual = FB_VISUAL_TRUECOLOR; |
| 176 | fb_dealloc_cmap(&info->cmap); | 176 | else |
| 177 | } else { | ||
| 178 | info->fix.visual = FB_VISUAL_PSEUDOCOLOR; | 177 | info->fix.visual = FB_VISUAL_PSEUDOCOLOR; |
| 179 | fb_alloc_cmap(&info->cmap, 1<<info->var.bits_per_pixel, 0); | ||
| 180 | } | ||
| 181 | 178 | ||
| 182 | info->fix.line_length = gx_line_delta(info->var.xres, info->var.bits_per_pixel); | 179 | info->fix.line_length = gx_line_delta(info->var.xres, info->var.bits_per_pixel); |
| 183 | 180 | ||
| @@ -331,6 +328,11 @@ static struct fb_info * __init gxfb_init_fbinfo(struct device *dev) | |||
| 331 | 328 | ||
| 332 | info->var.grayscale = 0; | 329 | info->var.grayscale = 0; |
| 333 | 330 | ||
| 331 | if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) { | ||
| 332 | framebuffer_release(info); | ||
| 333 | return NULL; | ||
| 334 | } | ||
| 335 | |||
| 334 | return info; | 336 | return info; |
| 335 | } | 337 | } |
| 336 | 338 | ||
| @@ -443,8 +445,10 @@ static int __init gxfb_probe(struct pci_dev *pdev, const struct pci_device_id *i | |||
| 443 | pci_release_region(pdev, 1); | 445 | pci_release_region(pdev, 1); |
| 444 | } | 446 | } |
| 445 | 447 | ||
| 446 | if (info) | 448 | if (info) { |
| 449 | fb_dealloc_cmap(&info->cmap); | ||
| 447 | framebuffer_release(info); | 450 | framebuffer_release(info); |
| 451 | } | ||
| 448 | return ret; | 452 | return ret; |
| 449 | } | 453 | } |
| 450 | 454 | ||
| @@ -467,6 +471,7 @@ static void gxfb_remove(struct pci_dev *pdev) | |||
| 467 | iounmap(par->gp_regs); | 471 | iounmap(par->gp_regs); |
| 468 | pci_release_region(pdev, 1); | 472 | pci_release_region(pdev, 1); |
| 469 | 473 | ||
| 474 | fb_dealloc_cmap(&info->cmap); | ||
| 470 | pci_set_drvdata(pdev, NULL); | 475 | pci_set_drvdata(pdev, NULL); |
| 471 | 476 | ||
| 472 | framebuffer_release(info); | 477 | framebuffer_release(info); |
diff --git a/drivers/video/geode/lxfb_core.c b/drivers/video/geode/lxfb_core.c index b965ecdbc604..889cbe39e580 100644 --- a/drivers/video/geode/lxfb_core.c +++ b/drivers/video/geode/lxfb_core.c | |||
| @@ -278,13 +278,10 @@ static int lxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
| 278 | 278 | ||
| 279 | static int lxfb_set_par(struct fb_info *info) | 279 | static int lxfb_set_par(struct fb_info *info) |
| 280 | { | 280 | { |
| 281 | if (info->var.bits_per_pixel > 8) { | 281 | if (info->var.bits_per_pixel > 8) |
| 282 | info->fix.visual = FB_VISUAL_TRUECOLOR; | 282 | info->fix.visual = FB_VISUAL_TRUECOLOR; |
| 283 | fb_dealloc_cmap(&info->cmap); | 283 | else |
| 284 | } else { | ||
| 285 | info->fix.visual = FB_VISUAL_PSEUDOCOLOR; | 284 | info->fix.visual = FB_VISUAL_PSEUDOCOLOR; |
| 286 | fb_alloc_cmap(&info->cmap, 1<<info->var.bits_per_pixel, 0); | ||
| 287 | } | ||
| 288 | 285 | ||
| 289 | info->fix.line_length = lx_get_pitch(info->var.xres, | 286 | info->fix.line_length = lx_get_pitch(info->var.xres, |
| 290 | info->var.bits_per_pixel); | 287 | info->var.bits_per_pixel); |
| @@ -451,6 +448,11 @@ static struct fb_info * __init lxfb_init_fbinfo(struct device *dev) | |||
| 451 | 448 | ||
| 452 | info->pseudo_palette = (void *)par + sizeof(struct lxfb_par); | 449 | info->pseudo_palette = (void *)par + sizeof(struct lxfb_par); |
| 453 | 450 | ||
| 451 | if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) { | ||
| 452 | framebuffer_release(info); | ||
| 453 | return NULL; | ||
| 454 | } | ||
| 455 | |||
| 454 | info->var.grayscale = 0; | 456 | info->var.grayscale = 0; |
| 455 | 457 | ||
| 456 | return info; | 458 | return info; |
| @@ -579,8 +581,10 @@ err: | |||
| 579 | pci_release_region(pdev, 3); | 581 | pci_release_region(pdev, 3); |
| 580 | } | 582 | } |
| 581 | 583 | ||
| 582 | if (info) | 584 | if (info) { |
| 585 | fb_dealloc_cmap(&info->cmap); | ||
| 583 | framebuffer_release(info); | 586 | framebuffer_release(info); |
| 587 | } | ||
| 584 | 588 | ||
| 585 | return ret; | 589 | return ret; |
| 586 | } | 590 | } |
| @@ -604,6 +608,7 @@ static void lxfb_remove(struct pci_dev *pdev) | |||
| 604 | iounmap(par->vp_regs); | 608 | iounmap(par->vp_regs); |
| 605 | pci_release_region(pdev, 3); | 609 | pci_release_region(pdev, 3); |
| 606 | 610 | ||
| 611 | fb_dealloc_cmap(&info->cmap); | ||
| 607 | pci_set_drvdata(pdev, NULL); | 612 | pci_set_drvdata(pdev, NULL); |
| 608 | framebuffer_release(info); | 613 | framebuffer_release(info); |
| 609 | } | 614 | } |
diff --git a/drivers/video/i810/i810_main.c b/drivers/video/i810/i810_main.c index a24e680d2b9c..2e940199fc89 100644 --- a/drivers/video/i810/i810_main.c +++ b/drivers/video/i810/i810_main.c | |||
| @@ -993,6 +993,7 @@ static int i810_check_params(struct fb_var_screeninfo *var, | |||
| 993 | struct i810fb_par *par = info->par; | 993 | struct i810fb_par *par = info->par; |
| 994 | int line_length, vidmem, mode_valid = 0, retval = 0; | 994 | int line_length, vidmem, mode_valid = 0, retval = 0; |
| 995 | u32 vyres = var->yres_virtual, vxres = var->xres_virtual; | 995 | u32 vyres = var->yres_virtual, vxres = var->xres_virtual; |
| 996 | |||
| 996 | /* | 997 | /* |
| 997 | * Memory limit | 998 | * Memory limit |
| 998 | */ | 999 | */ |
| @@ -1002,12 +1003,12 @@ static int i810_check_params(struct fb_var_screeninfo *var, | |||
| 1002 | if (vidmem > par->fb.size) { | 1003 | if (vidmem > par->fb.size) { |
| 1003 | vyres = par->fb.size/line_length; | 1004 | vyres = par->fb.size/line_length; |
| 1004 | if (vyres < var->yres) { | 1005 | if (vyres < var->yres) { |
| 1005 | vyres = yres; | 1006 | vyres = info->var.yres; |
| 1006 | vxres = par->fb.size/vyres; | 1007 | vxres = par->fb.size/vyres; |
| 1007 | vxres /= var->bits_per_pixel >> 3; | 1008 | vxres /= var->bits_per_pixel >> 3; |
| 1008 | line_length = get_line_length(par, vxres, | 1009 | line_length = get_line_length(par, vxres, |
| 1009 | var->bits_per_pixel); | 1010 | var->bits_per_pixel); |
| 1010 | vidmem = line_length * yres; | 1011 | vidmem = line_length * info->var.yres; |
| 1011 | if (vxres < var->xres) { | 1012 | if (vxres < var->xres) { |
| 1012 | printk("i810fb: required video memory, " | 1013 | printk("i810fb: required video memory, " |
| 1013 | "%d bytes, for %dx%d-%d (virtual) " | 1014 | "%d bytes, for %dx%d-%d (virtual) " |
diff --git a/drivers/video/imxfb.c b/drivers/video/imxfb.c index d58c68cd456e..bd1cb75cd14b 100644 --- a/drivers/video/imxfb.c +++ b/drivers/video/imxfb.c | |||
| @@ -14,7 +14,6 @@ | |||
| 14 | * linux-arm-kernel@lists.arm.linux.org.uk | 14 | * linux-arm-kernel@lists.arm.linux.org.uk |
| 15 | */ | 15 | */ |
| 16 | 16 | ||
| 17 | |||
| 18 | #include <linux/module.h> | 17 | #include <linux/module.h> |
| 19 | #include <linux/kernel.h> | 18 | #include <linux/kernel.h> |
| 20 | #include <linux/errno.h> | 19 | #include <linux/errno.h> |
| @@ -44,7 +43,12 @@ | |||
| 44 | 43 | ||
| 45 | #define LCDC_SIZE 0x04 | 44 | #define LCDC_SIZE 0x04 |
| 46 | #define SIZE_XMAX(x) ((((x) >> 4) & 0x3f) << 20) | 45 | #define SIZE_XMAX(x) ((((x) >> 4) & 0x3f) << 20) |
| 46 | |||
| 47 | #ifdef CONFIG_ARCH_MX1 | ||
| 47 | #define SIZE_YMAX(y) ((y) & 0x1ff) | 48 | #define SIZE_YMAX(y) ((y) & 0x1ff) |
| 49 | #else | ||
| 50 | #define SIZE_YMAX(y) ((y) & 0x3ff) | ||
| 51 | #endif | ||
| 48 | 52 | ||
| 49 | #define LCDC_VPW 0x08 | 53 | #define LCDC_VPW 0x08 |
| 50 | #define VPW_VPW(x) ((x) & 0x3ff) | 54 | #define VPW_VPW(x) ((x) & 0x3ff) |
| @@ -54,7 +58,12 @@ | |||
| 54 | #define CPOS_CC0 (1<<30) | 58 | #define CPOS_CC0 (1<<30) |
| 55 | #define CPOS_OP (1<<28) | 59 | #define CPOS_OP (1<<28) |
| 56 | #define CPOS_CXP(x) (((x) & 3ff) << 16) | 60 | #define CPOS_CXP(x) (((x) & 3ff) << 16) |
| 61 | |||
| 62 | #ifdef CONFIG_ARCH_MX1 | ||
| 57 | #define CPOS_CYP(y) ((y) & 0x1ff) | 63 | #define CPOS_CYP(y) ((y) & 0x1ff) |
| 64 | #else | ||
| 65 | #define CPOS_CYP(y) ((y) & 0x3ff) | ||
| 66 | #endif | ||
| 58 | 67 | ||
| 59 | #define LCDC_LCWHB 0x10 | 68 | #define LCDC_LCWHB 0x10 |
| 60 | #define LCWHB_BK_EN (1<<31) | 69 | #define LCWHB_BK_EN (1<<31) |
| @@ -63,9 +72,16 @@ | |||
| 63 | #define LCWHB_BD(x) ((x) & 0xff) | 72 | #define LCWHB_BD(x) ((x) & 0xff) |
| 64 | 73 | ||
| 65 | #define LCDC_LCHCC 0x14 | 74 | #define LCDC_LCHCC 0x14 |
| 75 | |||
| 76 | #ifdef CONFIG_ARCH_MX1 | ||
| 66 | #define LCHCC_CUR_COL_R(r) (((r) & 0x1f) << 11) | 77 | #define LCHCC_CUR_COL_R(r) (((r) & 0x1f) << 11) |
| 67 | #define LCHCC_CUR_COL_G(g) (((g) & 0x3f) << 5) | 78 | #define LCHCC_CUR_COL_G(g) (((g) & 0x3f) << 5) |
| 68 | #define LCHCC_CUR_COL_B(b) ((b) & 0x1f) | 79 | #define LCHCC_CUR_COL_B(b) ((b) & 0x1f) |
| 80 | #else | ||
| 81 | #define LCHCC_CUR_COL_R(r) (((r) & 0x3f) << 12) | ||
| 82 | #define LCHCC_CUR_COL_G(g) (((g) & 0x3f) << 6) | ||
| 83 | #define LCHCC_CUR_COL_B(b) ((b) & 0x3f) | ||
| 84 | #endif | ||
| 69 | 85 | ||
| 70 | #define LCDC_PCR 0x18 | 86 | #define LCDC_PCR 0x18 |
| 71 | 87 | ||
| @@ -92,7 +108,13 @@ | |||
| 92 | /* bit fields in imxfb.h */ | 108 | /* bit fields in imxfb.h */ |
| 93 | 109 | ||
| 94 | #define LCDC_RMCR 0x34 | 110 | #define LCDC_RMCR 0x34 |
| 111 | |||
| 112 | #ifdef CONFIG_ARCH_MX1 | ||
| 95 | #define RMCR_LCDC_EN (1<<1) | 113 | #define RMCR_LCDC_EN (1<<1) |
| 114 | #else | ||
| 115 | #define RMCR_LCDC_EN 0 | ||
| 116 | #endif | ||
| 117 | |||
| 96 | #define RMCR_SELF_REF (1<<0) | 118 | #define RMCR_SELF_REF (1<<0) |
| 97 | 119 | ||
| 98 | #define LCDC_LCDICR 0x38 | 120 | #define LCDC_LCDICR 0x38 |
| @@ -159,6 +181,17 @@ struct imxfb_info { | |||
| 159 | #define MIN_XRES 64 | 181 | #define MIN_XRES 64 |
| 160 | #define MIN_YRES 64 | 182 | #define MIN_YRES 64 |
| 161 | 183 | ||
| 184 | /* Actually this really is 18bit support, the lowest 2 bits of each colour | ||
| 185 | * are unused in hardware. We claim to have 24bit support to make software | ||
| 186 | * like X work, which does not support 18bit. | ||
| 187 | */ | ||
| 188 | static struct imxfb_rgb def_rgb_18 = { | ||
| 189 | .red = {.offset = 16, .length = 8,}, | ||
| 190 | .green = {.offset = 8, .length = 8,}, | ||
| 191 | .blue = {.offset = 0, .length = 8,}, | ||
| 192 | .transp = {.offset = 0, .length = 0,}, | ||
| 193 | }; | ||
| 194 | |||
| 162 | static struct imxfb_rgb def_rgb_16_tft = { | 195 | static struct imxfb_rgb def_rgb_16_tft = { |
| 163 | .red = {.offset = 11, .length = 5,}, | 196 | .red = {.offset = 11, .length = 5,}, |
| 164 | .green = {.offset = 5, .length = 6,}, | 197 | .green = {.offset = 5, .length = 6,}, |
| @@ -286,6 +319,9 @@ static int imxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
| 286 | 319 | ||
| 287 | pr_debug("var->bits_per_pixel=%d\n", var->bits_per_pixel); | 320 | pr_debug("var->bits_per_pixel=%d\n", var->bits_per_pixel); |
| 288 | switch (var->bits_per_pixel) { | 321 | switch (var->bits_per_pixel) { |
| 322 | case 32: | ||
| 323 | rgb = &def_rgb_18; | ||
| 324 | break; | ||
| 289 | case 16: | 325 | case 16: |
| 290 | default: | 326 | default: |
| 291 | if (readl(fbi->regs + LCDC_PCR) & PCR_TFT) | 327 | if (readl(fbi->regs + LCDC_PCR) & PCR_TFT) |
| @@ -327,9 +363,7 @@ static int imxfb_set_par(struct fb_info *info) | |||
| 327 | struct imxfb_info *fbi = info->par; | 363 | struct imxfb_info *fbi = info->par; |
| 328 | struct fb_var_screeninfo *var = &info->var; | 364 | struct fb_var_screeninfo *var = &info->var; |
| 329 | 365 | ||
| 330 | pr_debug("set_par\n"); | 366 | if (var->bits_per_pixel == 16 || var->bits_per_pixel == 32) |
| 331 | |||
| 332 | if (var->bits_per_pixel == 16) | ||
| 333 | info->fix.visual = FB_VISUAL_TRUECOLOR; | 367 | info->fix.visual = FB_VISUAL_TRUECOLOR; |
| 334 | else if (!fbi->cmap_static) | 368 | else if (!fbi->cmap_static) |
| 335 | info->fix.visual = FB_VISUAL_PSEUDOCOLOR; | 369 | info->fix.visual = FB_VISUAL_PSEUDOCOLOR; |
| @@ -354,10 +388,6 @@ static void imxfb_enable_controller(struct imxfb_info *fbi) | |||
| 354 | { | 388 | { |
| 355 | pr_debug("Enabling LCD controller\n"); | 389 | pr_debug("Enabling LCD controller\n"); |
| 356 | 390 | ||
| 357 | /* initialize LCDC */ | ||
| 358 | writel(readl(fbi->regs + LCDC_RMCR) & ~RMCR_LCDC_EN, | ||
| 359 | fbi->regs + LCDC_RMCR); /* just to be safe... */ | ||
| 360 | |||
| 361 | writel(fbi->screen_dma, fbi->regs + LCDC_SSA); | 391 | writel(fbi->screen_dma, fbi->regs + LCDC_SSA); |
| 362 | 392 | ||
| 363 | /* physical screen start address */ | 393 | /* physical screen start address */ |
| @@ -465,9 +495,9 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf | |||
| 465 | info->fix.id, var->lower_margin); | 495 | info->fix.id, var->lower_margin); |
| 466 | #endif | 496 | #endif |
| 467 | 497 | ||
| 468 | writel(HCR_H_WIDTH(var->hsync_len) | | 498 | writel(HCR_H_WIDTH(var->hsync_len - 1) | |
| 469 | HCR_H_WAIT_1(var->right_margin) | | 499 | HCR_H_WAIT_1(var->right_margin - 1) | |
| 470 | HCR_H_WAIT_2(var->left_margin), | 500 | HCR_H_WAIT_2(var->left_margin - 3), |
| 471 | fbi->regs + LCDC_HCR); | 501 | fbi->regs + LCDC_HCR); |
| 472 | 502 | ||
| 473 | writel(VCR_V_WIDTH(var->vsync_len) | | 503 | writel(VCR_V_WIDTH(var->vsync_len) | |
| @@ -650,6 +680,12 @@ static int __init imxfb_probe(struct platform_device *pdev) | |||
| 650 | info->fix.smem_start = fbi->screen_dma; | 680 | info->fix.smem_start = fbi->screen_dma; |
| 651 | } | 681 | } |
| 652 | 682 | ||
| 683 | if (pdata->init) { | ||
| 684 | ret = pdata->init(fbi->pdev); | ||
| 685 | if (ret) | ||
| 686 | goto failed_platform_init; | ||
| 687 | } | ||
| 688 | |||
| 653 | /* | 689 | /* |
| 654 | * This makes sure that our colour bitfield | 690 | * This makes sure that our colour bitfield |
| 655 | * descriptors are correctly initialised. | 691 | * descriptors are correctly initialised. |
| @@ -674,6 +710,9 @@ static int __init imxfb_probe(struct platform_device *pdev) | |||
| 674 | failed_register: | 710 | failed_register: |
| 675 | fb_dealloc_cmap(&info->cmap); | 711 | fb_dealloc_cmap(&info->cmap); |
| 676 | failed_cmap: | 712 | failed_cmap: |
| 713 | if (pdata->exit) | ||
| 714 | pdata->exit(fbi->pdev); | ||
| 715 | failed_platform_init: | ||
| 677 | if (!pdata->fixed_screen_cpu) | 716 | if (!pdata->fixed_screen_cpu) |
| 678 | dma_free_writecombine(&pdev->dev,fbi->map_size,fbi->map_cpu, | 717 | dma_free_writecombine(&pdev->dev,fbi->map_size,fbi->map_cpu, |
| 679 | fbi->map_dma); | 718 | fbi->map_dma); |
| @@ -691,6 +730,7 @@ failed_init: | |||
| 691 | 730 | ||
| 692 | static int __devexit imxfb_remove(struct platform_device *pdev) | 731 | static int __devexit imxfb_remove(struct platform_device *pdev) |
| 693 | { | 732 | { |
| 733 | struct imx_fb_platform_data *pdata; | ||
| 694 | struct fb_info *info = platform_get_drvdata(pdev); | 734 | struct fb_info *info = platform_get_drvdata(pdev); |
| 695 | struct imxfb_info *fbi = info->par; | 735 | struct imxfb_info *fbi = info->par; |
| 696 | struct resource *res; | 736 | struct resource *res; |
| @@ -701,6 +741,10 @@ static int __devexit imxfb_remove(struct platform_device *pdev) | |||
| 701 | 741 | ||
| 702 | unregister_framebuffer(info); | 742 | unregister_framebuffer(info); |
| 703 | 743 | ||
| 744 | pdata = pdev->dev.platform_data; | ||
| 745 | if (pdata->exit) | ||
| 746 | pdata->exit(fbi->pdev); | ||
| 747 | |||
| 704 | fb_dealloc_cmap(&info->cmap); | 748 | fb_dealloc_cmap(&info->cmap); |
| 705 | kfree(info->pseudo_palette); | 749 | kfree(info->pseudo_palette); |
| 706 | framebuffer_release(info); | 750 | framebuffer_release(info); |
diff --git a/drivers/video/mx3fb.c b/drivers/video/mx3fb.c index 8a75d05f4334..0c27961e47f2 100644 --- a/drivers/video/mx3fb.c +++ b/drivers/video/mx3fb.c | |||
| @@ -493,7 +493,7 @@ static int sdc_init_panel(struct mx3fb_data *mx3fb, enum ipu_panel panel, | |||
| 493 | */ | 493 | */ |
| 494 | dev_dbg(mx3fb->dev, "pixel clk = %d\n", pixel_clk); | 494 | dev_dbg(mx3fb->dev, "pixel clk = %d\n", pixel_clk); |
| 495 | 495 | ||
| 496 | ipu_clk = clk_get(mx3fb->dev, "ipu_clk"); | 496 | ipu_clk = clk_get(mx3fb->dev, NULL); |
| 497 | div = clk_get_rate(ipu_clk) * 16 / pixel_clk; | 497 | div = clk_get_rate(ipu_clk) * 16 / pixel_clk; |
| 498 | clk_put(ipu_clk); | 498 | clk_put(ipu_clk); |
| 499 | 499 | ||
diff --git a/drivers/video/pxafb.c b/drivers/video/pxafb.c index 287aa1d2a13c..07b371b4b072 100644 --- a/drivers/video/pxafb.c +++ b/drivers/video/pxafb.c | |||
| @@ -2229,7 +2229,7 @@ static int __devexit pxafb_remove(struct platform_device *dev) | |||
| 2229 | 2229 | ||
| 2230 | static struct platform_driver pxafb_driver = { | 2230 | static struct platform_driver pxafb_driver = { |
| 2231 | .probe = pxafb_probe, | 2231 | .probe = pxafb_probe, |
| 2232 | .remove = pxafb_remove, | 2232 | .remove = __devexit_p(pxafb_remove), |
| 2233 | .suspend = pxafb_suspend, | 2233 | .suspend = pxafb_suspend, |
| 2234 | .resume = pxafb_resume, | 2234 | .resume = pxafb_resume, |
| 2235 | .driver = { | 2235 | .driver = { |
diff --git a/drivers/video/sh_mobile_lcdcfb.c b/drivers/video/sh_mobile_lcdcfb.c index 0e2b8fd24df1..2c5d069e5f06 100644 --- a/drivers/video/sh_mobile_lcdcfb.c +++ b/drivers/video/sh_mobile_lcdcfb.c | |||
| @@ -446,7 +446,6 @@ static void sh_mobile_lcdc_stop(struct sh_mobile_lcdc_priv *priv) | |||
| 446 | { | 446 | { |
| 447 | struct sh_mobile_lcdc_chan *ch; | 447 | struct sh_mobile_lcdc_chan *ch; |
| 448 | struct sh_mobile_lcdc_board_cfg *board_cfg; | 448 | struct sh_mobile_lcdc_board_cfg *board_cfg; |
| 449 | unsigned long tmp; | ||
| 450 | int k; | 449 | int k; |
| 451 | 450 | ||
| 452 | /* tell the board code to disable the panel */ | 451 | /* tell the board code to disable the panel */ |
| @@ -456,9 +455,8 @@ static void sh_mobile_lcdc_stop(struct sh_mobile_lcdc_priv *priv) | |||
| 456 | if (board_cfg->display_off) | 455 | if (board_cfg->display_off) |
| 457 | board_cfg->display_off(board_cfg->board_data); | 456 | board_cfg->display_off(board_cfg->board_data); |
| 458 | 457 | ||
| 459 | /* cleanup deferred io if SYS bus */ | 458 | /* cleanup deferred io if enabled */ |
| 460 | tmp = ch->cfg.sys_bus_cfg.deferred_io_msec; | 459 | if (ch->info.fbdefio) { |
| 461 | if (ch->ldmt1r_value & (1 << 12) && tmp) { | ||
| 462 | fb_deferred_io_cleanup(&ch->info); | 460 | fb_deferred_io_cleanup(&ch->info); |
| 463 | ch->info.fbdefio = NULL; | 461 | ch->info.fbdefio = NULL; |
| 464 | } | 462 | } |
diff --git a/drivers/w1/masters/mxc_w1.c b/drivers/w1/masters/mxc_w1.c index b9d74d0b353e..65244c02551b 100644 --- a/drivers/w1/masters/mxc_w1.c +++ b/drivers/w1/masters/mxc_w1.c | |||
| @@ -116,7 +116,7 @@ static int __init mxc_w1_probe(struct platform_device *pdev) | |||
| 116 | if (!mdev) | 116 | if (!mdev) |
| 117 | return -ENOMEM; | 117 | return -ENOMEM; |
| 118 | 118 | ||
| 119 | mdev->clk = clk_get(&pdev->dev, "owire_clk"); | 119 | mdev->clk = clk_get(&pdev->dev, "owire"); |
| 120 | if (!mdev->clk) { | 120 | if (!mdev->clk) { |
| 121 | err = -ENODEV; | 121 | err = -ENODEV; |
| 122 | goto failed_clk; | 122 | goto failed_clk; |
diff --git a/drivers/w1/slaves/Kconfig b/drivers/w1/slaves/Kconfig index 8d0b1fb1e52e..1f51366417b9 100644 --- a/drivers/w1/slaves/Kconfig +++ b/drivers/w1/slaves/Kconfig | |||
| @@ -16,6 +16,12 @@ config W1_SLAVE_SMEM | |||
| 16 | Say Y here if you want to connect 1-wire | 16 | Say Y here if you want to connect 1-wire |
| 17 | simple 64bit memory rom(ds2401/ds2411/ds1990*) to your wire. | 17 | simple 64bit memory rom(ds2401/ds2411/ds1990*) to your wire. |
| 18 | 18 | ||
| 19 | config W1_SLAVE_DS2431 | ||
| 20 | tristate "1kb EEPROM family support (DS2431)" | ||
| 21 | help | ||
| 22 | Say Y here if you want to use a 1-wire | ||
| 23 | 1kb EEPROM family device (DS2431) | ||
| 24 | |||
| 19 | config W1_SLAVE_DS2433 | 25 | config W1_SLAVE_DS2433 |
| 20 | tristate "4kb EEPROM family support (DS2433)" | 26 | tristate "4kb EEPROM family support (DS2433)" |
| 21 | help | 27 | help |
diff --git a/drivers/w1/slaves/Makefile b/drivers/w1/slaves/Makefile index 990f400b6d22..f1f51f19b129 100644 --- a/drivers/w1/slaves/Makefile +++ b/drivers/w1/slaves/Makefile | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | obj-$(CONFIG_W1_SLAVE_THERM) += w1_therm.o | 5 | obj-$(CONFIG_W1_SLAVE_THERM) += w1_therm.o |
| 6 | obj-$(CONFIG_W1_SLAVE_SMEM) += w1_smem.o | 6 | obj-$(CONFIG_W1_SLAVE_SMEM) += w1_smem.o |
| 7 | obj-$(CONFIG_W1_SLAVE_DS2431) += w1_ds2431.o | ||
| 7 | obj-$(CONFIG_W1_SLAVE_DS2433) += w1_ds2433.o | 8 | obj-$(CONFIG_W1_SLAVE_DS2433) += w1_ds2433.o |
| 8 | obj-$(CONFIG_W1_SLAVE_DS2760) += w1_ds2760.o | 9 | obj-$(CONFIG_W1_SLAVE_DS2760) += w1_ds2760.o |
| 9 | obj-$(CONFIG_W1_SLAVE_BQ27000) += w1_bq27000.o | 10 | obj-$(CONFIG_W1_SLAVE_BQ27000) += w1_bq27000.o |
diff --git a/drivers/w1/slaves/w1_ds2433.c b/drivers/w1/slaves/w1_ds2433.c index 858c16a544c2..139447148822 100644 --- a/drivers/w1/slaves/w1_ds2433.c +++ b/drivers/w1/slaves/w1_ds2433.c | |||
| @@ -156,6 +156,9 @@ out_up: | |||
| 156 | */ | 156 | */ |
| 157 | static int w1_f23_write(struct w1_slave *sl, int addr, int len, const u8 *data) | 157 | static int w1_f23_write(struct w1_slave *sl, int addr, int len, const u8 *data) |
| 158 | { | 158 | { |
| 159 | #ifdef CONFIG_W1_SLAVE_DS2433_CRC | ||
| 160 | struct w1_f23_data *f23 = sl->family_data; | ||
| 161 | #endif | ||
| 159 | u8 wrbuf[4]; | 162 | u8 wrbuf[4]; |
| 160 | u8 rdbuf[W1_PAGE_SIZE + 3]; | 163 | u8 rdbuf[W1_PAGE_SIZE + 3]; |
| 161 | u8 es = (addr + len - 1) & 0x1f; | 164 | u8 es = (addr + len - 1) & 0x1f; |
| @@ -196,7 +199,9 @@ static int w1_f23_write(struct w1_slave *sl, int addr, int len, const u8 *data) | |||
| 196 | 199 | ||
| 197 | /* Reset the bus to wake up the EEPROM (this may not be needed) */ | 200 | /* Reset the bus to wake up the EEPROM (this may not be needed) */ |
| 198 | w1_reset_bus(sl->master); | 201 | w1_reset_bus(sl->master); |
| 199 | 202 | #ifdef CONFIG_W1_SLAVE_DS2433_CRC | |
| 203 | f23->validcrc &= ~(1 << (addr >> W1_PAGE_BITS)); | ||
| 204 | #endif | ||
| 200 | return 0; | 205 | return 0; |
| 201 | } | 206 | } |
| 202 | 207 | ||
diff --git a/drivers/w1/slaves/w1_therm.c b/drivers/w1/slaves/w1_therm.c index 2c8dff9f77da..1ed3d554e372 100644 --- a/drivers/w1/slaves/w1_therm.c +++ b/drivers/w1/slaves/w1_therm.c | |||
| @@ -115,7 +115,7 @@ static struct w1_therm_family_converter w1_therm_families[] = { | |||
| 115 | 115 | ||
| 116 | static inline int w1_DS18B20_convert_temp(u8 rom[9]) | 116 | static inline int w1_DS18B20_convert_temp(u8 rom[9]) |
| 117 | { | 117 | { |
| 118 | s16 t = (rom[1] << 8) | rom[0]; | 118 | int t = ((s16)rom[1] << 8) | rom[0]; |
| 119 | t = t*1000/16; | 119 | t = t*1000/16; |
| 120 | return t; | 120 | return t; |
| 121 | } | 121 | } |
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index 09a3d5522b43..325c10ff6a2c 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig | |||
| @@ -406,7 +406,7 @@ config ITCO_WDT | |||
| 406 | ---help--- | 406 | ---help--- |
| 407 | Hardware driver for the intel TCO timer based watchdog devices. | 407 | Hardware driver for the intel TCO timer based watchdog devices. |
| 408 | These drivers are included in the Intel 82801 I/O Controller | 408 | These drivers are included in the Intel 82801 I/O Controller |
| 409 | Hub family (from ICH0 up to ICH8) and in the Intel 6300ESB | 409 | Hub family (from ICH0 up to ICH10) and in the Intel 63xxESB |
| 410 | controller hub. | 410 | controller hub. |
| 411 | 411 | ||
| 412 | The TCO (Total Cost of Ownership) timer is a watchdog timer | 412 | The TCO (Total Cost of Ownership) timer is a watchdog timer |
diff --git a/drivers/watchdog/at91rm9200_wdt.c b/drivers/watchdog/at91rm9200_wdt.c index 5531691f46ea..e35d54589232 100644 --- a/drivers/watchdog/at91rm9200_wdt.c +++ b/drivers/watchdog/at91rm9200_wdt.c | |||
| @@ -107,10 +107,10 @@ static int at91_wdt_close(struct inode *inode, struct file *file) | |||
| 107 | static int at91_wdt_settimeout(int new_time) | 107 | static int at91_wdt_settimeout(int new_time) |
| 108 | { | 108 | { |
| 109 | /* | 109 | /* |
| 110 | * All counting occurs at SLOW_CLOCK / 128 = 0.256 Hz | 110 | * All counting occurs at SLOW_CLOCK / 128 = 256 Hz |
| 111 | * | 111 | * |
| 112 | * Since WDV is a 16-bit counter, the maximum period is | 112 | * Since WDV is a 16-bit counter, the maximum period is |
| 113 | * 65536 / 0.256 = 256 seconds. | 113 | * 65536 / 256 = 256 seconds. |
| 114 | */ | 114 | */ |
| 115 | if ((new_time <= 0) || (new_time > WDT_MAX_TIME)) | 115 | if ((new_time <= 0) || (new_time > WDT_MAX_TIME)) |
| 116 | return -EINVAL; | 116 | return -EINVAL; |
diff --git a/drivers/watchdog/at91sam9_wdt.c b/drivers/watchdog/at91sam9_wdt.c index b1da287f90ec..a56ac84381b1 100644 --- a/drivers/watchdog/at91sam9_wdt.c +++ b/drivers/watchdog/at91sam9_wdt.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/errno.h> | 18 | #include <linux/errno.h> |
| 19 | #include <linux/fs.h> | 19 | #include <linux/fs.h> |
| 20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
| 21 | #include <linux/io.h> | ||
| 21 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
| 22 | #include <linux/miscdevice.h> | 23 | #include <linux/miscdevice.h> |
| 23 | #include <linux/module.h> | 24 | #include <linux/module.h> |
diff --git a/drivers/watchdog/gef_wdt.c b/drivers/watchdog/gef_wdt.c index f0c2b7a1a175..734d9806a872 100644 --- a/drivers/watchdog/gef_wdt.c +++ b/drivers/watchdog/gef_wdt.c | |||
| @@ -269,7 +269,7 @@ static int __devinit gef_wdt_probe(struct of_device *dev, | |||
| 269 | bus_clk = 133; /* in MHz */ | 269 | bus_clk = 133; /* in MHz */ |
| 270 | 270 | ||
| 271 | freq = fsl_get_sys_freq(); | 271 | freq = fsl_get_sys_freq(); |
| 272 | if (freq > 0) | 272 | if (freq != -1) |
| 273 | bus_clk = freq; | 273 | bus_clk = freq; |
| 274 | 274 | ||
| 275 | /* Map devices registers into memory */ | 275 | /* Map devices registers into memory */ |
diff --git a/drivers/watchdog/iTCO_vendor_support.c b/drivers/watchdog/iTCO_vendor_support.c index 2474ebca88f6..d8264ad0be41 100644 --- a/drivers/watchdog/iTCO_vendor_support.c +++ b/drivers/watchdog/iTCO_vendor_support.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * intel TCO vendor specific watchdog driver support | 2 | * intel TCO vendor specific watchdog driver support |
| 3 | * | 3 | * |
| 4 | * (c) Copyright 2006-2008 Wim Van Sebroeck <wim@iguana.be>. | 4 | * (c) Copyright 2006-2009 Wim Van Sebroeck <wim@iguana.be>. |
| 5 | * | 5 | * |
| 6 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
| 7 | * modify it under the terms of the GNU General Public License | 7 | * modify it under the terms of the GNU General Public License |
| @@ -19,7 +19,7 @@ | |||
| 19 | 19 | ||
| 20 | /* Module and version information */ | 20 | /* Module and version information */ |
| 21 | #define DRV_NAME "iTCO_vendor_support" | 21 | #define DRV_NAME "iTCO_vendor_support" |
| 22 | #define DRV_VERSION "1.02" | 22 | #define DRV_VERSION "1.03" |
| 23 | #define PFX DRV_NAME ": " | 23 | #define PFX DRV_NAME ": " |
| 24 | 24 | ||
| 25 | /* Includes */ | 25 | /* Includes */ |
| @@ -77,6 +77,26 @@ MODULE_PARM_DESC(vendorsupport, "iTCO vendor specific support mode, default=0 (n | |||
| 77 | * 20.6 seconds. | 77 | * 20.6 seconds. |
| 78 | */ | 78 | */ |
| 79 | 79 | ||
| 80 | static void supermicro_old_pre_start(unsigned long acpibase) | ||
| 81 | { | ||
| 82 | unsigned long val32; | ||
| 83 | |||
| 84 | /* Bit 13: TCO_EN -> 0 = Disables TCO logic generating an SMI# */ | ||
| 85 | val32 = inl(SMI_EN); | ||
| 86 | val32 &= 0xffffdfff; /* Turn off SMI clearing watchdog */ | ||
| 87 | outl(val32, SMI_EN); /* Needed to activate watchdog */ | ||
| 88 | } | ||
| 89 | |||
| 90 | static void supermicro_old_pre_stop(unsigned long acpibase) | ||
| 91 | { | ||
| 92 | unsigned long val32; | ||
| 93 | |||
| 94 | /* Bit 13: TCO_EN -> 1 = Enables the TCO logic to generate SMI# */ | ||
| 95 | val32 = inl(SMI_EN); | ||
| 96 | val32 |= 0x00002000; /* Turn on SMI clearing watchdog */ | ||
| 97 | outl(val32, SMI_EN); /* Needed to deactivate watchdog */ | ||
| 98 | } | ||
| 99 | |||
| 80 | static void supermicro_old_pre_keepalive(unsigned long acpibase) | 100 | static void supermicro_old_pre_keepalive(unsigned long acpibase) |
| 81 | { | 101 | { |
| 82 | /* Reload TCO Timer (done in iTCO_wdt_keepalive) + */ | 102 | /* Reload TCO Timer (done in iTCO_wdt_keepalive) + */ |
| @@ -228,14 +248,18 @@ static void supermicro_new_pre_set_heartbeat(unsigned int heartbeat) | |||
| 228 | void iTCO_vendor_pre_start(unsigned long acpibase, | 248 | void iTCO_vendor_pre_start(unsigned long acpibase, |
| 229 | unsigned int heartbeat) | 249 | unsigned int heartbeat) |
| 230 | { | 250 | { |
| 231 | if (vendorsupport == SUPERMICRO_NEW_BOARD) | 251 | if (vendorsupport == SUPERMICRO_OLD_BOARD) |
| 252 | supermicro_old_pre_start(acpibase); | ||
| 253 | else if (vendorsupport == SUPERMICRO_NEW_BOARD) | ||
| 232 | supermicro_new_pre_start(heartbeat); | 254 | supermicro_new_pre_start(heartbeat); |
| 233 | } | 255 | } |
| 234 | EXPORT_SYMBOL(iTCO_vendor_pre_start); | 256 | EXPORT_SYMBOL(iTCO_vendor_pre_start); |
| 235 | 257 | ||
| 236 | void iTCO_vendor_pre_stop(unsigned long acpibase) | 258 | void iTCO_vendor_pre_stop(unsigned long acpibase) |
| 237 | { | 259 | { |
| 238 | if (vendorsupport == SUPERMICRO_NEW_BOARD) | 260 | if (vendorsupport == SUPERMICRO_OLD_BOARD) |
| 261 | supermicro_old_pre_stop(acpibase); | ||
| 262 | else if (vendorsupport == SUPERMICRO_NEW_BOARD) | ||
| 239 | supermicro_new_pre_stop(); | 263 | supermicro_new_pre_stop(); |
| 240 | } | 264 | } |
| 241 | EXPORT_SYMBOL(iTCO_vendor_pre_stop); | 265 | EXPORT_SYMBOL(iTCO_vendor_pre_stop); |
diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c index 5b395a4ddfdf..352334947ea3 100644 --- a/drivers/watchdog/iTCO_wdt.c +++ b/drivers/watchdog/iTCO_wdt.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * intel TCO Watchdog Driver (Used in i82801 and i6300ESB chipsets) | 2 | * intel TCO Watchdog Driver (Used in i82801 and i63xxESB chipsets) |
| 3 | * | 3 | * |
| 4 | * (c) Copyright 2006-2008 Wim Van Sebroeck <wim@iguana.be>. | 4 | * (c) Copyright 2006-2009 Wim Van Sebroeck <wim@iguana.be>. |
| 5 | * | 5 | * |
| 6 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
| 7 | * modify it under the terms of the GNU General Public License | 7 | * modify it under the terms of the GNU General Public License |
| @@ -63,7 +63,7 @@ | |||
| 63 | 63 | ||
| 64 | /* Module and version information */ | 64 | /* Module and version information */ |
| 65 | #define DRV_NAME "iTCO_wdt" | 65 | #define DRV_NAME "iTCO_wdt" |
| 66 | #define DRV_VERSION "1.04" | 66 | #define DRV_VERSION "1.05" |
| 67 | #define PFX DRV_NAME ": " | 67 | #define PFX DRV_NAME ": " |
| 68 | 68 | ||
| 69 | /* Includes */ | 69 | /* Includes */ |
| @@ -236,16 +236,16 @@ MODULE_DEVICE_TABLE(pci, iTCO_wdt_pci_tbl); | |||
| 236 | 236 | ||
| 237 | /* Address definitions for the TCO */ | 237 | /* Address definitions for the TCO */ |
| 238 | /* TCO base address */ | 238 | /* TCO base address */ |
| 239 | #define TCOBASE iTCO_wdt_private.ACPIBASE + 0x60 | 239 | #define TCOBASE iTCO_wdt_private.ACPIBASE + 0x60 |
| 240 | /* SMI Control and Enable Register */ | 240 | /* SMI Control and Enable Register */ |
| 241 | #define SMI_EN iTCO_wdt_private.ACPIBASE + 0x30 | 241 | #define SMI_EN iTCO_wdt_private.ACPIBASE + 0x30 |
| 242 | 242 | ||
| 243 | #define TCO_RLD TCOBASE + 0x00 /* TCO Timer Reload and Curr. Value */ | 243 | #define TCO_RLD TCOBASE + 0x00 /* TCO Timer Reload and Curr. Value */ |
| 244 | #define TCOv1_TMR TCOBASE + 0x01 /* TCOv1 Timer Initial Value */ | 244 | #define TCOv1_TMR TCOBASE + 0x01 /* TCOv1 Timer Initial Value */ |
| 245 | #define TCO_DAT_IN TCOBASE + 0x02 /* TCO Data In Register */ | 245 | #define TCO_DAT_IN TCOBASE + 0x02 /* TCO Data In Register */ |
| 246 | #define TCO_DAT_OUT TCOBASE + 0x03 /* TCO Data Out Register */ | 246 | #define TCO_DAT_OUT TCOBASE + 0x03 /* TCO Data Out Register */ |
| 247 | #define TCO1_STS TCOBASE + 0x04 /* TCO1 Status Register */ | 247 | #define TCO1_STS TCOBASE + 0x04 /* TCO1 Status Register */ |
| 248 | #define TCO2_STS TCOBASE + 0x06 /* TCO2 Status Register */ | 248 | #define TCO2_STS TCOBASE + 0x06 /* TCO2 Status Register */ |
| 249 | #define TCO1_CNT TCOBASE + 0x08 /* TCO1 Control Register */ | 249 | #define TCO1_CNT TCOBASE + 0x08 /* TCO1 Control Register */ |
| 250 | #define TCO2_CNT TCOBASE + 0x0a /* TCO2 Control Register */ | 250 | #define TCO2_CNT TCOBASE + 0x0a /* TCO2 Control Register */ |
| 251 | #define TCOv2_TMR TCOBASE + 0x12 /* TCOv2 Timer Initial Value */ | 251 | #define TCOv2_TMR TCOBASE + 0x12 /* TCOv2 Timer Initial Value */ |
| @@ -338,7 +338,6 @@ static int iTCO_wdt_unset_NO_REBOOT_bit(void) | |||
| 338 | static int iTCO_wdt_start(void) | 338 | static int iTCO_wdt_start(void) |
| 339 | { | 339 | { |
| 340 | unsigned int val; | 340 | unsigned int val; |
| 341 | unsigned long val32; | ||
| 342 | 341 | ||
| 343 | spin_lock(&iTCO_wdt_private.io_lock); | 342 | spin_lock(&iTCO_wdt_private.io_lock); |
| 344 | 343 | ||
| @@ -351,11 +350,6 @@ static int iTCO_wdt_start(void) | |||
| 351 | return -EIO; | 350 | return -EIO; |
| 352 | } | 351 | } |
| 353 | 352 | ||
| 354 | /* Bit 13: TCO_EN -> 0 = Disables TCO logic generating an SMI# */ | ||
| 355 | val32 = inl(SMI_EN); | ||
| 356 | val32 &= 0xffffdfff; /* Turn off SMI clearing watchdog */ | ||
| 357 | outl(val32, SMI_EN); | ||
| 358 | |||
| 359 | /* Force the timer to its reload value by writing to the TCO_RLD | 353 | /* Force the timer to its reload value by writing to the TCO_RLD |
| 360 | register */ | 354 | register */ |
| 361 | if (iTCO_wdt_private.iTCO_version == 2) | 355 | if (iTCO_wdt_private.iTCO_version == 2) |
| @@ -378,7 +372,6 @@ static int iTCO_wdt_start(void) | |||
| 378 | static int iTCO_wdt_stop(void) | 372 | static int iTCO_wdt_stop(void) |
| 379 | { | 373 | { |
| 380 | unsigned int val; | 374 | unsigned int val; |
| 381 | unsigned long val32; | ||
| 382 | 375 | ||
| 383 | spin_lock(&iTCO_wdt_private.io_lock); | 376 | spin_lock(&iTCO_wdt_private.io_lock); |
| 384 | 377 | ||
| @@ -390,11 +383,6 @@ static int iTCO_wdt_stop(void) | |||
| 390 | outw(val, TCO1_CNT); | 383 | outw(val, TCO1_CNT); |
| 391 | val = inw(TCO1_CNT); | 384 | val = inw(TCO1_CNT); |
| 392 | 385 | ||
| 393 | /* Bit 13: TCO_EN -> 1 = Enables the TCO logic to generate SMI# */ | ||
| 394 | val32 = inl(SMI_EN); | ||
| 395 | val32 |= 0x00002000; | ||
| 396 | outl(val32, SMI_EN); | ||
| 397 | |||
| 398 | /* Set the NO_REBOOT bit to prevent later reboots, just for sure */ | 386 | /* Set the NO_REBOOT bit to prevent later reboots, just for sure */ |
| 399 | iTCO_wdt_set_NO_REBOOT_bit(); | 387 | iTCO_wdt_set_NO_REBOOT_bit(); |
| 400 | 388 | ||
| @@ -649,6 +637,7 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev, | |||
| 649 | int ret; | 637 | int ret; |
| 650 | u32 base_address; | 638 | u32 base_address; |
| 651 | unsigned long RCBA; | 639 | unsigned long RCBA; |
| 640 | unsigned long val32; | ||
| 652 | 641 | ||
| 653 | /* | 642 | /* |
| 654 | * Find the ACPI/PM base I/O address which is the base | 643 | * Find the ACPI/PM base I/O address which is the base |
| @@ -695,6 +684,10 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev, | |||
| 695 | ret = -EIO; | 684 | ret = -EIO; |
| 696 | goto out; | 685 | goto out; |
| 697 | } | 686 | } |
| 687 | /* Bit 13: TCO_EN -> 0 = Disables TCO logic generating an SMI# */ | ||
| 688 | val32 = inl(SMI_EN); | ||
| 689 | val32 &= 0xffffdfff; /* Turn off SMI clearing watchdog */ | ||
| 690 | outl(val32, SMI_EN); | ||
| 698 | 691 | ||
| 699 | /* The TCO I/O registers reside in a 32-byte range pointed to | 692 | /* The TCO I/O registers reside in a 32-byte range pointed to |
| 700 | by the TCOBASE value */ | 693 | by the TCOBASE value */ |
diff --git a/drivers/watchdog/ks8695_wdt.c b/drivers/watchdog/ks8695_wdt.c index 0b798fdaa378..74c92d384112 100644 --- a/drivers/watchdog/ks8695_wdt.c +++ b/drivers/watchdog/ks8695_wdt.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include <linux/watchdog.h> | 21 | #include <linux/watchdog.h> |
| 22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
| 23 | #include <linux/uaccess.h> | 23 | #include <linux/uaccess.h> |
| 24 | #include <mach/timex.h> | ||
| 24 | #include <mach/regs-timer.h> | 25 | #include <mach/regs-timer.h> |
| 25 | 26 | ||
| 26 | #define WDT_DEFAULT_TIME 5 /* seconds */ | 27 | #define WDT_DEFAULT_TIME 5 /* seconds */ |
diff --git a/drivers/watchdog/orion5x_wdt.c b/drivers/watchdog/orion5x_wdt.c index 14a339f58b6a..b64ae1a17832 100644 --- a/drivers/watchdog/orion5x_wdt.c +++ b/drivers/watchdog/orion5x_wdt.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #define WDT_EN 0x0010 | 29 | #define WDT_EN 0x0010 |
| 30 | #define WDT_VAL (TIMER_VIRT_BASE + 0x0024) | 30 | #define WDT_VAL (TIMER_VIRT_BASE + 0x0024) |
| 31 | 31 | ||
| 32 | #define ORION5X_TCLK 166666667 | ||
| 32 | #define WDT_MAX_DURATION (0xffffffff / ORION5X_TCLK) | 33 | #define WDT_MAX_DURATION (0xffffffff / ORION5X_TCLK) |
| 33 | #define WDT_IN_USE 0 | 34 | #define WDT_IN_USE 0 |
| 34 | #define WDT_OK_TO_CLOSE 1 | 35 | #define WDT_OK_TO_CLOSE 1 |
diff --git a/drivers/watchdog/rc32434_wdt.c b/drivers/watchdog/rc32434_wdt.c index 57027f4653ce..f3553fa40b17 100644 --- a/drivers/watchdog/rc32434_wdt.c +++ b/drivers/watchdog/rc32434_wdt.c | |||
| @@ -34,104 +34,89 @@ | |||
| 34 | #include <asm/time.h> | 34 | #include <asm/time.h> |
| 35 | #include <asm/mach-rc32434/integ.h> | 35 | #include <asm/mach-rc32434/integ.h> |
| 36 | 36 | ||
| 37 | #define MAX_TIMEOUT 20 | 37 | #define VERSION "0.4" |
| 38 | #define RC32434_WDT_INTERVAL (15 * HZ) | ||
| 39 | |||
| 40 | #define VERSION "0.2" | ||
| 41 | 38 | ||
| 42 | static struct { | 39 | static struct { |
| 43 | struct completion stop; | ||
| 44 | int running; | ||
| 45 | struct timer_list timer; | ||
| 46 | int queue; | ||
| 47 | int default_ticks; | ||
| 48 | unsigned long inuse; | 40 | unsigned long inuse; |
| 49 | } rc32434_wdt_device; | 41 | } rc32434_wdt_device; |
| 50 | 42 | ||
| 51 | static struct integ __iomem *wdt_reg; | 43 | static struct integ __iomem *wdt_reg; |
| 52 | static int ticks = 100 * HZ; | ||
| 53 | 44 | ||
| 54 | static int expect_close; | 45 | static int expect_close; |
| 55 | static int timeout; | 46 | |
| 47 | /* Board internal clock speed in Hz, | ||
| 48 | * the watchdog timer ticks at. */ | ||
| 49 | extern unsigned int idt_cpu_freq; | ||
| 50 | |||
| 51 | /* translate wtcompare value to seconds and vice versa */ | ||
| 52 | #define WTCOMP2SEC(x) (x / idt_cpu_freq) | ||
| 53 | #define SEC2WTCOMP(x) (x * idt_cpu_freq) | ||
| 54 | |||
| 55 | /* Use a default timeout of 20s. This should be | ||
| 56 | * safe for CPU clock speeds up to 400MHz, as | ||
| 57 | * ((2 ^ 32) - 1) / (400MHz / 2) = 21s. */ | ||
| 58 | #define WATCHDOG_TIMEOUT 20 | ||
| 59 | |||
| 60 | static int timeout = WATCHDOG_TIMEOUT; | ||
| 56 | 61 | ||
| 57 | static int nowayout = WATCHDOG_NOWAYOUT; | 62 | static int nowayout = WATCHDOG_NOWAYOUT; |
| 58 | module_param(nowayout, int, 0); | 63 | module_param(nowayout, int, 0); |
| 59 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" | 64 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" |
| 60 | __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | 65 | __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); |
| 61 | 66 | ||
| 67 | /* apply or and nand masks to data read from addr and write back */ | ||
| 68 | #define SET_BITS(addr, or, nand) \ | ||
| 69 | writel((readl(&addr) | or) & ~nand, &addr) | ||
| 62 | 70 | ||
| 63 | static void rc32434_wdt_start(void) | 71 | static void rc32434_wdt_start(void) |
| 64 | { | 72 | { |
| 65 | u32 val; | 73 | u32 or, nand; |
| 66 | |||
| 67 | if (!rc32434_wdt_device.inuse) { | ||
| 68 | writel(0, &wdt_reg->wtcount); | ||
| 69 | 74 | ||
| 70 | val = RC32434_ERR_WRE; | 75 | /* zero the counter before enabling */ |
| 71 | writel(readl(&wdt_reg->errcs) | val, &wdt_reg->errcs); | 76 | writel(0, &wdt_reg->wtcount); |
| 72 | 77 | ||
| 73 | val = RC32434_WTC_EN; | 78 | /* don't generate a non-maskable interrupt, |
| 74 | writel(readl(&wdt_reg->wtc) | val, &wdt_reg->wtc); | 79 | * do a warm reset instead */ |
| 75 | } | 80 | nand = 1 << RC32434_ERR_WNE; |
| 76 | rc32434_wdt_device.running++; | 81 | or = 1 << RC32434_ERR_WRE; |
| 77 | } | ||
| 78 | 82 | ||
| 79 | static void rc32434_wdt_stop(void) | 83 | /* reset the ERRCS timeout bit in case it's set */ |
| 80 | { | 84 | nand |= 1 << RC32434_ERR_WTO; |
| 81 | u32 val; | ||
| 82 | 85 | ||
| 83 | if (rc32434_wdt_device.running) { | 86 | SET_BITS(wdt_reg->errcs, or, nand); |
| 84 | 87 | ||
| 85 | val = ~RC32434_WTC_EN; | 88 | /* reset WTC timeout bit and enable WDT */ |
| 86 | writel(readl(&wdt_reg->wtc) & val, &wdt_reg->wtc); | 89 | nand = 1 << RC32434_WTC_TO; |
| 90 | or = 1 << RC32434_WTC_EN; | ||
| 87 | 91 | ||
| 88 | val = ~RC32434_ERR_WRE; | 92 | SET_BITS(wdt_reg->wtc, or, nand); |
| 89 | writel(readl(&wdt_reg->errcs) & val, &wdt_reg->errcs); | 93 | } |
| 90 | 94 | ||
| 91 | rc32434_wdt_device.running = 0; | 95 | static void rc32434_wdt_stop(void) |
| 92 | } | 96 | { |
| 97 | /* Disable WDT */ | ||
| 98 | SET_BITS(wdt_reg->wtc, 0, 1 << RC32434_WTC_EN); | ||
| 93 | } | 99 | } |
| 94 | 100 | ||
| 95 | static void rc32434_wdt_set(int new_timeout) | 101 | static int rc32434_wdt_set(int new_timeout) |
| 96 | { | 102 | { |
| 97 | u32 cmp = new_timeout * HZ; | 103 | int max_to = WTCOMP2SEC((u32)-1); |
| 98 | u32 state, val; | ||
| 99 | 104 | ||
| 105 | if (new_timeout < 0 || new_timeout > max_to) { | ||
| 106 | printk(KERN_ERR KBUILD_MODNAME | ||
| 107 | ": timeout value must be between 0 and %d", | ||
| 108 | max_to); | ||
| 109 | return -EINVAL; | ||
| 110 | } | ||
| 100 | timeout = new_timeout; | 111 | timeout = new_timeout; |
| 101 | /* | 112 | writel(SEC2WTCOMP(timeout), &wdt_reg->wtcompare); |
| 102 | * store and disable WTC | ||
| 103 | */ | ||
| 104 | state = (u32)(readl(&wdt_reg->wtc) & RC32434_WTC_EN); | ||
| 105 | val = ~RC32434_WTC_EN; | ||
| 106 | writel(readl(&wdt_reg->wtc) & val, &wdt_reg->wtc); | ||
| 107 | |||
| 108 | writel(0, &wdt_reg->wtcount); | ||
| 109 | writel(cmp, &wdt_reg->wtcompare); | ||
| 110 | |||
| 111 | /* | ||
| 112 | * restore WTC | ||
| 113 | */ | ||
| 114 | |||
| 115 | writel(readl(&wdt_reg->wtc) | state, &wdt_reg); | ||
| 116 | } | ||
| 117 | 113 | ||
| 118 | static void rc32434_wdt_reset(void) | 114 | return 0; |
| 119 | { | ||
| 120 | ticks = rc32434_wdt_device.default_ticks; | ||
| 121 | } | 115 | } |
| 122 | 116 | ||
| 123 | static void rc32434_wdt_update(unsigned long unused) | 117 | static void rc32434_wdt_ping(void) |
| 124 | { | 118 | { |
| 125 | if (rc32434_wdt_device.running) | ||
| 126 | ticks--; | ||
| 127 | |||
| 128 | writel(0, &wdt_reg->wtcount); | 119 | writel(0, &wdt_reg->wtcount); |
| 129 | |||
| 130 | if (rc32434_wdt_device.queue && ticks) | ||
| 131 | mod_timer(&rc32434_wdt_device.timer, | ||
| 132 | jiffies + RC32434_WDT_INTERVAL); | ||
| 133 | else | ||
| 134 | complete(&rc32434_wdt_device.stop); | ||
| 135 | } | 120 | } |
| 136 | 121 | ||
| 137 | static int rc32434_wdt_open(struct inode *inode, struct file *file) | 122 | static int rc32434_wdt_open(struct inode *inode, struct file *file) |
| @@ -142,19 +127,23 @@ static int rc32434_wdt_open(struct inode *inode, struct file *file) | |||
| 142 | if (nowayout) | 127 | if (nowayout) |
| 143 | __module_get(THIS_MODULE); | 128 | __module_get(THIS_MODULE); |
| 144 | 129 | ||
| 130 | rc32434_wdt_start(); | ||
| 131 | rc32434_wdt_ping(); | ||
| 132 | |||
| 145 | return nonseekable_open(inode, file); | 133 | return nonseekable_open(inode, file); |
| 146 | } | 134 | } |
| 147 | 135 | ||
| 148 | static int rc32434_wdt_release(struct inode *inode, struct file *file) | 136 | static int rc32434_wdt_release(struct inode *inode, struct file *file) |
| 149 | { | 137 | { |
| 150 | if (expect_close && nowayout == 0) { | 138 | if (expect_close == 42) { |
| 151 | rc32434_wdt_stop(); | 139 | rc32434_wdt_stop(); |
| 152 | printk(KERN_INFO KBUILD_MODNAME ": disabling watchdog timer\n"); | 140 | printk(KERN_INFO KBUILD_MODNAME ": disabling watchdog timer\n"); |
| 153 | module_put(THIS_MODULE); | 141 | module_put(THIS_MODULE); |
| 154 | } else | 142 | } else { |
| 155 | printk(KERN_CRIT KBUILD_MODNAME | 143 | printk(KERN_CRIT KBUILD_MODNAME |
| 156 | ": device closed unexpectedly. WDT will not stop !\n"); | 144 | ": device closed unexpectedly. WDT will not stop !\n"); |
| 157 | 145 | rc32434_wdt_ping(); | |
| 146 | } | ||
| 158 | clear_bit(0, &rc32434_wdt_device.inuse); | 147 | clear_bit(0, &rc32434_wdt_device.inuse); |
| 159 | return 0; | 148 | return 0; |
| 160 | } | 149 | } |
| @@ -174,10 +163,10 @@ static ssize_t rc32434_wdt_write(struct file *file, const char *data, | |||
| 174 | if (get_user(c, data + i)) | 163 | if (get_user(c, data + i)) |
| 175 | return -EFAULT; | 164 | return -EFAULT; |
| 176 | if (c == 'V') | 165 | if (c == 'V') |
| 177 | expect_close = 1; | 166 | expect_close = 42; |
| 178 | } | 167 | } |
| 179 | } | 168 | } |
| 180 | rc32434_wdt_update(0); | 169 | rc32434_wdt_ping(); |
| 181 | return len; | 170 | return len; |
| 182 | } | 171 | } |
| 183 | return 0; | 172 | return 0; |
| @@ -197,11 +186,11 @@ static long rc32434_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 197 | }; | 186 | }; |
| 198 | switch (cmd) { | 187 | switch (cmd) { |
| 199 | case WDIOC_KEEPALIVE: | 188 | case WDIOC_KEEPALIVE: |
| 200 | rc32434_wdt_reset(); | 189 | rc32434_wdt_ping(); |
| 201 | break; | 190 | break; |
| 202 | case WDIOC_GETSTATUS: | 191 | case WDIOC_GETSTATUS: |
| 203 | case WDIOC_GETBOOTSTATUS: | 192 | case WDIOC_GETBOOTSTATUS: |
| 204 | value = readl(&wdt_reg->wtcount); | 193 | value = 0; |
| 205 | if (copy_to_user(argp, &value, sizeof(int))) | 194 | if (copy_to_user(argp, &value, sizeof(int))) |
| 206 | return -EFAULT; | 195 | return -EFAULT; |
| 207 | break; | 196 | break; |
| @@ -218,6 +207,7 @@ static long rc32434_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 218 | break; | 207 | break; |
| 219 | case WDIOS_DISABLECARD: | 208 | case WDIOS_DISABLECARD: |
| 220 | rc32434_wdt_stop(); | 209 | rc32434_wdt_stop(); |
| 210 | break; | ||
| 221 | default: | 211 | default: |
| 222 | return -EINVAL; | 212 | return -EINVAL; |
| 223 | } | 213 | } |
| @@ -225,11 +215,9 @@ static long rc32434_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 225 | case WDIOC_SETTIMEOUT: | 215 | case WDIOC_SETTIMEOUT: |
| 226 | if (copy_from_user(&new_timeout, argp, sizeof(int))) | 216 | if (copy_from_user(&new_timeout, argp, sizeof(int))) |
| 227 | return -EFAULT; | 217 | return -EFAULT; |
| 228 | if (new_timeout < 1) | 218 | if (rc32434_wdt_set(new_timeout)) |
| 229 | return -EINVAL; | 219 | return -EINVAL; |
| 230 | if (new_timeout > MAX_TIMEOUT) | 220 | /* Fall through */ |
| 231 | return -EINVAL; | ||
| 232 | rc32434_wdt_set(new_timeout); | ||
| 233 | case WDIOC_GETTIMEOUT: | 221 | case WDIOC_GETTIMEOUT: |
| 234 | return copy_to_user(argp, &timeout, sizeof(int)); | 222 | return copy_to_user(argp, &timeout, sizeof(int)); |
| 235 | default: | 223 | default: |
| @@ -254,15 +242,15 @@ static struct miscdevice rc32434_wdt_miscdev = { | |||
| 254 | .fops = &rc32434_wdt_fops, | 242 | .fops = &rc32434_wdt_fops, |
| 255 | }; | 243 | }; |
| 256 | 244 | ||
| 257 | static char banner[] = KERN_INFO KBUILD_MODNAME | 245 | static char banner[] __devinitdata = KERN_INFO KBUILD_MODNAME |
| 258 | ": Watchdog Timer version " VERSION ", timer margin: %d sec\n"; | 246 | ": Watchdog Timer version " VERSION ", timer margin: %d sec\n"; |
| 259 | 247 | ||
| 260 | static int rc32434_wdt_probe(struct platform_device *pdev) | 248 | static int __devinit rc32434_wdt_probe(struct platform_device *pdev) |
| 261 | { | 249 | { |
| 262 | int ret; | 250 | int ret; |
| 263 | struct resource *r; | 251 | struct resource *r; |
| 264 | 252 | ||
| 265 | r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "rb500_wdt_res"); | 253 | r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "rb532_wdt_res"); |
| 266 | if (!r) { | 254 | if (!r) { |
| 267 | printk(KERN_ERR KBUILD_MODNAME | 255 | printk(KERN_ERR KBUILD_MODNAME |
| 268 | "failed to retrieve resources\n"); | 256 | "failed to retrieve resources\n"); |
| @@ -277,24 +265,12 @@ static int rc32434_wdt_probe(struct platform_device *pdev) | |||
| 277 | } | 265 | } |
| 278 | 266 | ||
| 279 | ret = misc_register(&rc32434_wdt_miscdev); | 267 | ret = misc_register(&rc32434_wdt_miscdev); |
| 280 | |||
| 281 | if (ret < 0) { | 268 | if (ret < 0) { |
| 282 | printk(KERN_ERR KBUILD_MODNAME | 269 | printk(KERN_ERR KBUILD_MODNAME |
| 283 | "failed to register watchdog device\n"); | 270 | "failed to register watchdog device\n"); |
| 284 | goto unmap; | 271 | goto unmap; |
| 285 | } | 272 | } |
| 286 | 273 | ||
| 287 | init_completion(&rc32434_wdt_device.stop); | ||
| 288 | rc32434_wdt_device.queue = 0; | ||
| 289 | |||
| 290 | clear_bit(0, &rc32434_wdt_device.inuse); | ||
| 291 | |||
| 292 | setup_timer(&rc32434_wdt_device.timer, rc32434_wdt_update, 0L); | ||
| 293 | |||
| 294 | rc32434_wdt_device.default_ticks = ticks; | ||
| 295 | |||
| 296 | rc32434_wdt_start(); | ||
| 297 | |||
| 298 | printk(banner, timeout); | 274 | printk(banner, timeout); |
| 299 | 275 | ||
| 300 | return 0; | 276 | return 0; |
| @@ -304,23 +280,17 @@ unmap: | |||
| 304 | return ret; | 280 | return ret; |
| 305 | } | 281 | } |
| 306 | 282 | ||
| 307 | static int rc32434_wdt_remove(struct platform_device *pdev) | 283 | static int __devexit rc32434_wdt_remove(struct platform_device *pdev) |
| 308 | { | 284 | { |
| 309 | if (rc32434_wdt_device.queue) { | ||
| 310 | rc32434_wdt_device.queue = 0; | ||
| 311 | wait_for_completion(&rc32434_wdt_device.stop); | ||
| 312 | } | ||
| 313 | misc_deregister(&rc32434_wdt_miscdev); | 285 | misc_deregister(&rc32434_wdt_miscdev); |
| 314 | |||
| 315 | iounmap(wdt_reg); | 286 | iounmap(wdt_reg); |
| 316 | |||
| 317 | return 0; | 287 | return 0; |
| 318 | } | 288 | } |
| 319 | 289 | ||
| 320 | static struct platform_driver rc32434_wdt = { | 290 | static struct platform_driver rc32434_wdt = { |
| 321 | .probe = rc32434_wdt_probe, | 291 | .probe = rc32434_wdt_probe, |
| 322 | .remove = rc32434_wdt_remove, | 292 | .remove = __devexit_p(rc32434_wdt_remove), |
| 323 | .driver = { | 293 | .driver = { |
| 324 | .name = "rc32434_wdt", | 294 | .name = "rc32434_wdt", |
| 325 | } | 295 | } |
| 326 | }; | 296 | }; |
diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c index 9b91617b9582..56892a142ee2 100644 --- a/drivers/xen/manage.c +++ b/drivers/xen/manage.c | |||
| @@ -45,6 +45,13 @@ static int xen_suspend(void *data) | |||
| 45 | err); | 45 | err); |
| 46 | return err; | 46 | return err; |
| 47 | } | 47 | } |
| 48 | err = sysdev_suspend(PMSG_SUSPEND); | ||
| 49 | if (err) { | ||
| 50 | printk(KERN_ERR "xen_suspend: sysdev_suspend failed: %d\n", | ||
| 51 | err); | ||
| 52 | device_power_up(PMSG_RESUME); | ||
| 53 | return err; | ||
| 54 | } | ||
| 48 | 55 | ||
| 49 | xen_mm_pin_all(); | 56 | xen_mm_pin_all(); |
| 50 | gnttab_suspend(); | 57 | gnttab_suspend(); |
| @@ -61,6 +68,7 @@ static int xen_suspend(void *data) | |||
| 61 | gnttab_resume(); | 68 | gnttab_resume(); |
| 62 | xen_mm_unpin_all(); | 69 | xen_mm_unpin_all(); |
| 63 | 70 | ||
| 71 | sysdev_resume(); | ||
| 64 | device_power_up(PMSG_RESUME); | 72 | device_power_up(PMSG_RESUME); |
| 65 | 73 | ||
| 66 | if (!*cancelled) { | 74 | if (!*cancelled) { |
diff --git a/fs/Makefile b/fs/Makefile index 38bc735c67ad..dc20db348679 100644 --- a/fs/Makefile +++ b/fs/Makefile | |||
| @@ -69,10 +69,12 @@ obj-$(CONFIG_DLM) += dlm/ | |||
| 69 | # Do not add any filesystems before this line | 69 | # Do not add any filesystems before this line |
| 70 | obj-$(CONFIG_REISERFS_FS) += reiserfs/ | 70 | obj-$(CONFIG_REISERFS_FS) += reiserfs/ |
| 71 | obj-$(CONFIG_EXT3_FS) += ext3/ # Before ext2 so root fs can be ext3 | 71 | obj-$(CONFIG_EXT3_FS) += ext3/ # Before ext2 so root fs can be ext3 |
| 72 | obj-$(CONFIG_EXT4_FS) += ext4/ # Before ext2 so root fs can be ext4 | 72 | obj-$(CONFIG_EXT2_FS) += ext2/ |
| 73 | # We place ext4 after ext2 so plain ext2 root fs's are mounted using ext2 | ||
| 74 | # unless explicitly requested by rootfstype | ||
| 75 | obj-$(CONFIG_EXT4_FS) += ext4/ | ||
| 73 | obj-$(CONFIG_JBD) += jbd/ | 76 | obj-$(CONFIG_JBD) += jbd/ |
| 74 | obj-$(CONFIG_JBD2) += jbd2/ | 77 | obj-$(CONFIG_JBD2) += jbd2/ |
| 75 | obj-$(CONFIG_EXT2_FS) += ext2/ | ||
| 76 | obj-$(CONFIG_CRAMFS) += cramfs/ | 78 | obj-$(CONFIG_CRAMFS) += cramfs/ |
| 77 | obj-$(CONFIG_SQUASHFS) += squashfs/ | 79 | obj-$(CONFIG_SQUASHFS) += squashfs/ |
| 78 | obj-y += ramfs/ | 80 | obj-y += ramfs/ |
| @@ -302,9 +302,10 @@ void bio_init(struct bio *bio) | |||
| 302 | struct bio *bio_alloc_bioset(gfp_t gfp_mask, int nr_iovecs, struct bio_set *bs) | 302 | struct bio *bio_alloc_bioset(gfp_t gfp_mask, int nr_iovecs, struct bio_set *bs) |
| 303 | { | 303 | { |
| 304 | struct bio *bio = NULL; | 304 | struct bio *bio = NULL; |
| 305 | void *uninitialized_var(p); | ||
| 305 | 306 | ||
| 306 | if (bs) { | 307 | if (bs) { |
| 307 | void *p = mempool_alloc(bs->bio_pool, gfp_mask); | 308 | p = mempool_alloc(bs->bio_pool, gfp_mask); |
| 308 | 309 | ||
| 309 | if (p) | 310 | if (p) |
| 310 | bio = p + bs->front_pad; | 311 | bio = p + bs->front_pad; |
| @@ -329,7 +330,7 @@ struct bio *bio_alloc_bioset(gfp_t gfp_mask, int nr_iovecs, struct bio_set *bs) | |||
| 329 | } | 330 | } |
| 330 | if (unlikely(!bvl)) { | 331 | if (unlikely(!bvl)) { |
| 331 | if (bs) | 332 | if (bs) |
| 332 | mempool_free(bio, bs->bio_pool); | 333 | mempool_free(p, bs->bio_pool); |
| 333 | else | 334 | else |
| 334 | kfree(bio); | 335 | kfree(bio); |
| 335 | bio = NULL; | 336 | bio = NULL; |
diff --git a/fs/btrfs/btrfs_inode.h b/fs/btrfs/btrfs_inode.h index a8c9693b75ac..72677ce2b74f 100644 --- a/fs/btrfs/btrfs_inode.h +++ b/fs/btrfs/btrfs_inode.h | |||
| @@ -66,6 +66,9 @@ struct btrfs_inode { | |||
| 66 | */ | 66 | */ |
| 67 | struct list_head delalloc_inodes; | 67 | struct list_head delalloc_inodes; |
| 68 | 68 | ||
| 69 | /* the space_info for where this inode's data allocations are done */ | ||
| 70 | struct btrfs_space_info *space_info; | ||
| 71 | |||
| 69 | /* full 64 bit generation number, struct vfs_inode doesn't have a big | 72 | /* full 64 bit generation number, struct vfs_inode doesn't have a big |
| 70 | * enough field for this. | 73 | * enough field for this. |
| 71 | */ | 74 | */ |
| @@ -94,6 +97,11 @@ struct btrfs_inode { | |||
| 94 | */ | 97 | */ |
| 95 | u64 delalloc_bytes; | 98 | u64 delalloc_bytes; |
| 96 | 99 | ||
| 100 | /* total number of bytes that may be used for this inode for | ||
| 101 | * delalloc | ||
| 102 | */ | ||
| 103 | u64 reserved_bytes; | ||
| 104 | |||
| 97 | /* | 105 | /* |
| 98 | * the size of the file stored in the metadata on disk. data=ordered | 106 | * the size of the file stored in the metadata on disk. data=ordered |
| 99 | * means the in-memory i_size might be larger than the size on disk | 107 | * means the in-memory i_size might be larger than the size on disk |
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 551177c0011a..37f31b5529aa 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c | |||
| @@ -38,19 +38,12 @@ static int balance_node_right(struct btrfs_trans_handle *trans, | |||
| 38 | static int del_ptr(struct btrfs_trans_handle *trans, struct btrfs_root *root, | 38 | static int del_ptr(struct btrfs_trans_handle *trans, struct btrfs_root *root, |
| 39 | struct btrfs_path *path, int level, int slot); | 39 | struct btrfs_path *path, int level, int slot); |
| 40 | 40 | ||
| 41 | inline void btrfs_init_path(struct btrfs_path *p) | ||
| 42 | { | ||
| 43 | memset(p, 0, sizeof(*p)); | ||
| 44 | } | ||
| 45 | |||
| 46 | struct btrfs_path *btrfs_alloc_path(void) | 41 | struct btrfs_path *btrfs_alloc_path(void) |
| 47 | { | 42 | { |
| 48 | struct btrfs_path *path; | 43 | struct btrfs_path *path; |
| 49 | path = kmem_cache_alloc(btrfs_path_cachep, GFP_NOFS); | 44 | path = kmem_cache_zalloc(btrfs_path_cachep, GFP_NOFS); |
| 50 | if (path) { | 45 | if (path) |
| 51 | btrfs_init_path(path); | ||
| 52 | path->reada = 1; | 46 | path->reada = 1; |
| 53 | } | ||
| 54 | return path; | 47 | return path; |
| 55 | } | 48 | } |
| 56 | 49 | ||
| @@ -69,14 +62,38 @@ noinline void btrfs_set_path_blocking(struct btrfs_path *p) | |||
| 69 | 62 | ||
| 70 | /* | 63 | /* |
| 71 | * reset all the locked nodes in the patch to spinning locks. | 64 | * reset all the locked nodes in the patch to spinning locks. |
| 65 | * | ||
| 66 | * held is used to keep lockdep happy, when lockdep is enabled | ||
| 67 | * we set held to a blocking lock before we go around and | ||
| 68 | * retake all the spinlocks in the path. You can safely use NULL | ||
| 69 | * for held | ||
| 72 | */ | 70 | */ |
| 73 | noinline void btrfs_clear_path_blocking(struct btrfs_path *p) | 71 | noinline void btrfs_clear_path_blocking(struct btrfs_path *p, |
| 72 | struct extent_buffer *held) | ||
| 74 | { | 73 | { |
| 75 | int i; | 74 | int i; |
| 76 | for (i = 0; i < BTRFS_MAX_LEVEL; i++) { | 75 | |
| 76 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
| 77 | /* lockdep really cares that we take all of these spinlocks | ||
| 78 | * in the right order. If any of the locks in the path are not | ||
| 79 | * currently blocking, it is going to complain. So, make really | ||
| 80 | * really sure by forcing the path to blocking before we clear | ||
| 81 | * the path blocking. | ||
| 82 | */ | ||
| 83 | if (held) | ||
| 84 | btrfs_set_lock_blocking(held); | ||
| 85 | btrfs_set_path_blocking(p); | ||
| 86 | #endif | ||
| 87 | |||
| 88 | for (i = BTRFS_MAX_LEVEL - 1; i >= 0; i--) { | ||
| 77 | if (p->nodes[i] && p->locks[i]) | 89 | if (p->nodes[i] && p->locks[i]) |
| 78 | btrfs_clear_lock_blocking(p->nodes[i]); | 90 | btrfs_clear_lock_blocking(p->nodes[i]); |
| 79 | } | 91 | } |
| 92 | |||
| 93 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
| 94 | if (held) | ||
| 95 | btrfs_clear_lock_blocking(held); | ||
| 96 | #endif | ||
| 80 | } | 97 | } |
| 81 | 98 | ||
| 82 | /* this also releases the path */ | 99 | /* this also releases the path */ |
| @@ -260,7 +277,7 @@ static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans, | |||
| 260 | if (*cow_ret == buf) | 277 | if (*cow_ret == buf) |
| 261 | unlock_orig = 1; | 278 | unlock_orig = 1; |
| 262 | 279 | ||
| 263 | WARN_ON(!btrfs_tree_locked(buf)); | 280 | btrfs_assert_tree_locked(buf); |
| 264 | 281 | ||
| 265 | if (parent) | 282 | if (parent) |
| 266 | parent_start = parent->start; | 283 | parent_start = parent->start; |
| @@ -286,7 +303,7 @@ static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans, | |||
| 286 | trans->transid, level, &ins); | 303 | trans->transid, level, &ins); |
| 287 | BUG_ON(ret); | 304 | BUG_ON(ret); |
| 288 | cow = btrfs_init_new_buffer(trans, root, prealloc_dest, | 305 | cow = btrfs_init_new_buffer(trans, root, prealloc_dest, |
| 289 | buf->len); | 306 | buf->len, level); |
| 290 | } else { | 307 | } else { |
| 291 | cow = btrfs_alloc_free_block(trans, root, buf->len, | 308 | cow = btrfs_alloc_free_block(trans, root, buf->len, |
| 292 | parent_start, | 309 | parent_start, |
| @@ -917,9 +934,9 @@ static noinline int balance_level(struct btrfs_trans_handle *trans, | |||
| 917 | 934 | ||
| 918 | /* promote the child to a root */ | 935 | /* promote the child to a root */ |
| 919 | child = read_node_slot(root, mid, 0); | 936 | child = read_node_slot(root, mid, 0); |
| 937 | BUG_ON(!child); | ||
| 920 | btrfs_tree_lock(child); | 938 | btrfs_tree_lock(child); |
| 921 | btrfs_set_lock_blocking(child); | 939 | btrfs_set_lock_blocking(child); |
| 922 | BUG_ON(!child); | ||
| 923 | ret = btrfs_cow_block(trans, root, child, mid, 0, &child, 0); | 940 | ret = btrfs_cow_block(trans, root, child, mid, 0, &child, 0); |
| 924 | BUG_ON(ret); | 941 | BUG_ON(ret); |
| 925 | 942 | ||
| @@ -1530,8 +1547,7 @@ again: | |||
| 1530 | * for higher level blocks, try not to allocate blocks | 1547 | * for higher level blocks, try not to allocate blocks |
| 1531 | * with the block and the parent locks held. | 1548 | * with the block and the parent locks held. |
| 1532 | */ | 1549 | */ |
| 1533 | if (level > 0 && !prealloc_block.objectid && | 1550 | if (level > 0 && !prealloc_block.objectid) { |
| 1534 | btrfs_path_lock_waiting(p, level)) { | ||
| 1535 | u32 size = b->len; | 1551 | u32 size = b->len; |
| 1536 | u64 hint = b->start; | 1552 | u64 hint = b->start; |
| 1537 | 1553 | ||
| @@ -1567,7 +1583,7 @@ cow_done: | |||
| 1567 | if (!p->skip_locking) | 1583 | if (!p->skip_locking) |
| 1568 | p->locks[level] = 1; | 1584 | p->locks[level] = 1; |
| 1569 | 1585 | ||
| 1570 | btrfs_clear_path_blocking(p); | 1586 | btrfs_clear_path_blocking(p, NULL); |
| 1571 | 1587 | ||
| 1572 | /* | 1588 | /* |
| 1573 | * we have a lock on b and as long as we aren't changing | 1589 | * we have a lock on b and as long as we aren't changing |
| @@ -1606,7 +1622,7 @@ cow_done: | |||
| 1606 | 1622 | ||
| 1607 | btrfs_set_path_blocking(p); | 1623 | btrfs_set_path_blocking(p); |
| 1608 | sret = split_node(trans, root, p, level); | 1624 | sret = split_node(trans, root, p, level); |
| 1609 | btrfs_clear_path_blocking(p); | 1625 | btrfs_clear_path_blocking(p, NULL); |
| 1610 | 1626 | ||
| 1611 | BUG_ON(sret > 0); | 1627 | BUG_ON(sret > 0); |
| 1612 | if (sret) { | 1628 | if (sret) { |
| @@ -1626,7 +1642,7 @@ cow_done: | |||
| 1626 | 1642 | ||
| 1627 | btrfs_set_path_blocking(p); | 1643 | btrfs_set_path_blocking(p); |
| 1628 | sret = balance_level(trans, root, p, level); | 1644 | sret = balance_level(trans, root, p, level); |
| 1629 | btrfs_clear_path_blocking(p); | 1645 | btrfs_clear_path_blocking(p, NULL); |
| 1630 | 1646 | ||
| 1631 | if (sret) { | 1647 | if (sret) { |
| 1632 | ret = sret; | 1648 | ret = sret; |
| @@ -1689,13 +1705,13 @@ cow_done: | |||
| 1689 | if (!p->skip_locking) { | 1705 | if (!p->skip_locking) { |
| 1690 | int lret; | 1706 | int lret; |
| 1691 | 1707 | ||
| 1692 | btrfs_clear_path_blocking(p); | 1708 | btrfs_clear_path_blocking(p, NULL); |
| 1693 | lret = btrfs_try_spin_lock(b); | 1709 | lret = btrfs_try_spin_lock(b); |
| 1694 | 1710 | ||
| 1695 | if (!lret) { | 1711 | if (!lret) { |
| 1696 | btrfs_set_path_blocking(p); | 1712 | btrfs_set_path_blocking(p); |
| 1697 | btrfs_tree_lock(b); | 1713 | btrfs_tree_lock(b); |
| 1698 | btrfs_clear_path_blocking(p); | 1714 | btrfs_clear_path_blocking(p, b); |
| 1699 | } | 1715 | } |
| 1700 | } | 1716 | } |
| 1701 | } else { | 1717 | } else { |
| @@ -1707,7 +1723,7 @@ cow_done: | |||
| 1707 | btrfs_set_path_blocking(p); | 1723 | btrfs_set_path_blocking(p); |
| 1708 | sret = split_leaf(trans, root, key, | 1724 | sret = split_leaf(trans, root, key, |
| 1709 | p, ins_len, ret == 0); | 1725 | p, ins_len, ret == 0); |
| 1710 | btrfs_clear_path_blocking(p); | 1726 | btrfs_clear_path_blocking(p, NULL); |
| 1711 | 1727 | ||
| 1712 | BUG_ON(sret > 0); | 1728 | BUG_ON(sret > 0); |
| 1713 | if (sret) { | 1729 | if (sret) { |
| @@ -2349,7 +2365,7 @@ static int push_leaf_right(struct btrfs_trans_handle *trans, struct btrfs_root | |||
| 2349 | if (slot >= btrfs_header_nritems(upper) - 1) | 2365 | if (slot >= btrfs_header_nritems(upper) - 1) |
| 2350 | return 1; | 2366 | return 1; |
| 2351 | 2367 | ||
| 2352 | WARN_ON(!btrfs_tree_locked(path->nodes[1])); | 2368 | btrfs_assert_tree_locked(path->nodes[1]); |
| 2353 | 2369 | ||
| 2354 | right = read_node_slot(root, upper, slot + 1); | 2370 | right = read_node_slot(root, upper, slot + 1); |
| 2355 | btrfs_tree_lock(right); | 2371 | btrfs_tree_lock(right); |
| @@ -2546,7 +2562,7 @@ static int push_leaf_left(struct btrfs_trans_handle *trans, struct btrfs_root | |||
| 2546 | if (right_nritems == 0) | 2562 | if (right_nritems == 0) |
| 2547 | return 1; | 2563 | return 1; |
| 2548 | 2564 | ||
| 2549 | WARN_ON(!btrfs_tree_locked(path->nodes[1])); | 2565 | btrfs_assert_tree_locked(path->nodes[1]); |
| 2550 | 2566 | ||
| 2551 | left = read_node_slot(root, path->nodes[1], slot - 1); | 2567 | left = read_node_slot(root, path->nodes[1], slot - 1); |
| 2552 | btrfs_tree_lock(left); | 2568 | btrfs_tree_lock(left); |
| @@ -3927,7 +3943,6 @@ find_next_key: | |||
| 3927 | btrfs_release_path(root, path); | 3943 | btrfs_release_path(root, path); |
| 3928 | goto again; | 3944 | goto again; |
| 3929 | } else { | 3945 | } else { |
| 3930 | btrfs_clear_path_blocking(path); | ||
| 3931 | goto out; | 3946 | goto out; |
| 3932 | } | 3947 | } |
| 3933 | } | 3948 | } |
| @@ -3947,7 +3962,7 @@ find_next_key: | |||
| 3947 | path->locks[level - 1] = 1; | 3962 | path->locks[level - 1] = 1; |
| 3948 | path->nodes[level - 1] = cur; | 3963 | path->nodes[level - 1] = cur; |
| 3949 | unlock_up(path, level, 1); | 3964 | unlock_up(path, level, 1); |
| 3950 | btrfs_clear_path_blocking(path); | 3965 | btrfs_clear_path_blocking(path, NULL); |
| 3951 | } | 3966 | } |
| 3952 | out: | 3967 | out: |
| 3953 | if (ret == 0) | 3968 | if (ret == 0) |
| @@ -4086,7 +4101,7 @@ int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path) | |||
| 4086 | 4101 | ||
| 4087 | next = read_node_slot(root, c, slot); | 4102 | next = read_node_slot(root, c, slot); |
| 4088 | if (!path->skip_locking) { | 4103 | if (!path->skip_locking) { |
| 4089 | WARN_ON(!btrfs_tree_locked(c)); | 4104 | btrfs_assert_tree_locked(c); |
| 4090 | btrfs_tree_lock(next); | 4105 | btrfs_tree_lock(next); |
| 4091 | btrfs_set_lock_blocking(next); | 4106 | btrfs_set_lock_blocking(next); |
| 4092 | } | 4107 | } |
| @@ -4111,7 +4126,7 @@ int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path) | |||
| 4111 | reada_for_search(root, path, level, slot, 0); | 4126 | reada_for_search(root, path, level, slot, 0); |
| 4112 | next = read_node_slot(root, next, 0); | 4127 | next = read_node_slot(root, next, 0); |
| 4113 | if (!path->skip_locking) { | 4128 | if (!path->skip_locking) { |
| 4114 | WARN_ON(!btrfs_tree_locked(path->nodes[level])); | 4129 | btrfs_assert_tree_locked(path->nodes[level]); |
| 4115 | btrfs_tree_lock(next); | 4130 | btrfs_tree_lock(next); |
| 4116 | btrfs_set_lock_blocking(next); | 4131 | btrfs_set_lock_blocking(next); |
| 4117 | } | 4132 | } |
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 531db112c8bd..82491ba8fa40 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
| @@ -43,11 +43,7 @@ struct btrfs_ordered_sum; | |||
| 43 | 43 | ||
| 44 | #define BTRFS_ACL_NOT_CACHED ((void *)-1) | 44 | #define BTRFS_ACL_NOT_CACHED ((void *)-1) |
| 45 | 45 | ||
| 46 | #ifdef CONFIG_LOCKDEP | 46 | #define BTRFS_MAX_LEVEL 8 |
| 47 | # define BTRFS_MAX_LEVEL 7 | ||
| 48 | #else | ||
| 49 | # define BTRFS_MAX_LEVEL 8 | ||
| 50 | #endif | ||
| 51 | 47 | ||
| 52 | /* holds pointers to all of the tree roots */ | 48 | /* holds pointers to all of the tree roots */ |
| 53 | #define BTRFS_ROOT_TREE_OBJECTID 1ULL | 49 | #define BTRFS_ROOT_TREE_OBJECTID 1ULL |
| @@ -600,13 +596,27 @@ struct btrfs_block_group_item { | |||
| 600 | 596 | ||
| 601 | struct btrfs_space_info { | 597 | struct btrfs_space_info { |
| 602 | u64 flags; | 598 | u64 flags; |
| 603 | u64 total_bytes; | 599 | |
| 604 | u64 bytes_used; | 600 | u64 total_bytes; /* total bytes in the space */ |
| 605 | u64 bytes_pinned; | 601 | u64 bytes_used; /* total bytes used on disk */ |
| 606 | u64 bytes_reserved; | 602 | u64 bytes_pinned; /* total bytes pinned, will be freed when the |
| 607 | u64 bytes_readonly; | 603 | transaction finishes */ |
| 608 | int full; | 604 | u64 bytes_reserved; /* total bytes the allocator has reserved for |
| 609 | int force_alloc; | 605 | current allocations */ |
| 606 | u64 bytes_readonly; /* total bytes that are read only */ | ||
| 607 | |||
| 608 | /* delalloc accounting */ | ||
| 609 | u64 bytes_delalloc; /* number of bytes reserved for allocation, | ||
| 610 | this space is not necessarily reserved yet | ||
| 611 | by the allocator */ | ||
| 612 | u64 bytes_may_use; /* number of bytes that may be used for | ||
| 613 | delalloc */ | ||
| 614 | |||
| 615 | int full; /* indicates that we cannot allocate any more | ||
| 616 | chunks for this space */ | ||
| 617 | int force_alloc; /* set if we need to force a chunk alloc for | ||
| 618 | this space */ | ||
| 619 | |||
| 610 | struct list_head list; | 620 | struct list_head list; |
| 611 | 621 | ||
| 612 | /* for block groups in our same type */ | 622 | /* for block groups in our same type */ |
| @@ -1715,7 +1725,8 @@ struct extent_buffer *btrfs_alloc_free_block(struct btrfs_trans_handle *trans, | |||
| 1715 | u64 empty_size); | 1725 | u64 empty_size); |
| 1716 | struct extent_buffer *btrfs_init_new_buffer(struct btrfs_trans_handle *trans, | 1726 | struct extent_buffer *btrfs_init_new_buffer(struct btrfs_trans_handle *trans, |
| 1717 | struct btrfs_root *root, | 1727 | struct btrfs_root *root, |
| 1718 | u64 bytenr, u32 blocksize); | 1728 | u64 bytenr, u32 blocksize, |
| 1729 | int level); | ||
| 1719 | int btrfs_alloc_extent(struct btrfs_trans_handle *trans, | 1730 | int btrfs_alloc_extent(struct btrfs_trans_handle *trans, |
| 1720 | struct btrfs_root *root, | 1731 | struct btrfs_root *root, |
| 1721 | u64 num_bytes, u64 parent, u64 min_bytes, | 1732 | u64 num_bytes, u64 parent, u64 min_bytes, |
| @@ -1785,6 +1796,16 @@ int btrfs_add_dead_reloc_root(struct btrfs_root *root); | |||
| 1785 | int btrfs_cleanup_reloc_trees(struct btrfs_root *root); | 1796 | int btrfs_cleanup_reloc_trees(struct btrfs_root *root); |
| 1786 | int btrfs_reloc_clone_csums(struct inode *inode, u64 file_pos, u64 len); | 1797 | int btrfs_reloc_clone_csums(struct inode *inode, u64 file_pos, u64 len); |
| 1787 | u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags); | 1798 | u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags); |
| 1799 | void btrfs_set_inode_space_info(struct btrfs_root *root, struct inode *ionde); | ||
| 1800 | int btrfs_check_metadata_free_space(struct btrfs_root *root); | ||
| 1801 | int btrfs_check_data_free_space(struct btrfs_root *root, struct inode *inode, | ||
| 1802 | u64 bytes); | ||
| 1803 | void btrfs_free_reserved_data_space(struct btrfs_root *root, | ||
| 1804 | struct inode *inode, u64 bytes); | ||
| 1805 | void btrfs_delalloc_reserve_space(struct btrfs_root *root, struct inode *inode, | ||
| 1806 | u64 bytes); | ||
| 1807 | void btrfs_delalloc_free_space(struct btrfs_root *root, struct inode *inode, | ||
| 1808 | u64 bytes); | ||
| 1788 | /* ctree.c */ | 1809 | /* ctree.c */ |
| 1789 | int btrfs_previous_item(struct btrfs_root *root, | 1810 | int btrfs_previous_item(struct btrfs_root *root, |
| 1790 | struct btrfs_path *path, u64 min_objectid, | 1811 | struct btrfs_path *path, u64 min_objectid, |
| @@ -1834,9 +1855,7 @@ int btrfs_realloc_node(struct btrfs_trans_handle *trans, | |||
| 1834 | void btrfs_release_path(struct btrfs_root *root, struct btrfs_path *p); | 1855 | void btrfs_release_path(struct btrfs_root *root, struct btrfs_path *p); |
| 1835 | struct btrfs_path *btrfs_alloc_path(void); | 1856 | struct btrfs_path *btrfs_alloc_path(void); |
| 1836 | void btrfs_free_path(struct btrfs_path *p); | 1857 | void btrfs_free_path(struct btrfs_path *p); |
| 1837 | void btrfs_init_path(struct btrfs_path *p); | ||
| 1838 | void btrfs_set_path_blocking(struct btrfs_path *p); | 1858 | void btrfs_set_path_blocking(struct btrfs_path *p); |
| 1839 | void btrfs_clear_path_blocking(struct btrfs_path *p); | ||
| 1840 | void btrfs_unlock_up_safe(struct btrfs_path *p, int level); | 1859 | void btrfs_unlock_up_safe(struct btrfs_path *p, int level); |
| 1841 | 1860 | ||
| 1842 | int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, | 1861 | int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, |
| @@ -2032,8 +2051,6 @@ int btrfs_merge_bio_hook(struct page *page, unsigned long offset, | |||
| 2032 | unsigned long btrfs_force_ra(struct address_space *mapping, | 2051 | unsigned long btrfs_force_ra(struct address_space *mapping, |
| 2033 | struct file_ra_state *ra, struct file *file, | 2052 | struct file_ra_state *ra, struct file *file, |
| 2034 | pgoff_t offset, pgoff_t last_index); | 2053 | pgoff_t offset, pgoff_t last_index); |
| 2035 | int btrfs_check_free_space(struct btrfs_root *root, u64 num_required, | ||
| 2036 | int for_del); | ||
| 2037 | int btrfs_page_mkwrite(struct vm_area_struct *vma, struct page *page); | 2054 | int btrfs_page_mkwrite(struct vm_area_struct *vma, struct page *page); |
| 2038 | int btrfs_readpage(struct file *file, struct page *page); | 2055 | int btrfs_readpage(struct file *file, struct page *page); |
| 2039 | void btrfs_delete_inode(struct inode *inode); | 2056 | void btrfs_delete_inode(struct inode *inode); |
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 5aebddd71193..3e18175248e0 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
| @@ -75,6 +75,40 @@ struct async_submit_bio { | |||
| 75 | struct btrfs_work work; | 75 | struct btrfs_work work; |
| 76 | }; | 76 | }; |
| 77 | 77 | ||
| 78 | /* These are used to set the lockdep class on the extent buffer locks. | ||
| 79 | * The class is set by the readpage_end_io_hook after the buffer has | ||
| 80 | * passed csum validation but before the pages are unlocked. | ||
| 81 | * | ||
| 82 | * The lockdep class is also set by btrfs_init_new_buffer on freshly | ||
| 83 | * allocated blocks. | ||
| 84 | * | ||
| 85 | * The class is based on the level in the tree block, which allows lockdep | ||
| 86 | * to know that lower nodes nest inside the locks of higher nodes. | ||
| 87 | * | ||
| 88 | * We also add a check to make sure the highest level of the tree is | ||
| 89 | * the same as our lockdep setup here. If BTRFS_MAX_LEVEL changes, this | ||
| 90 | * code needs update as well. | ||
| 91 | */ | ||
| 92 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
| 93 | # if BTRFS_MAX_LEVEL != 8 | ||
| 94 | # error | ||
| 95 | # endif | ||
| 96 | static struct lock_class_key btrfs_eb_class[BTRFS_MAX_LEVEL + 1]; | ||
| 97 | static const char *btrfs_eb_name[BTRFS_MAX_LEVEL + 1] = { | ||
| 98 | /* leaf */ | ||
| 99 | "btrfs-extent-00", | ||
| 100 | "btrfs-extent-01", | ||
| 101 | "btrfs-extent-02", | ||
| 102 | "btrfs-extent-03", | ||
| 103 | "btrfs-extent-04", | ||
| 104 | "btrfs-extent-05", | ||
| 105 | "btrfs-extent-06", | ||
| 106 | "btrfs-extent-07", | ||
| 107 | /* highest possible level */ | ||
| 108 | "btrfs-extent-08", | ||
| 109 | }; | ||
| 110 | #endif | ||
| 111 | |||
| 78 | /* | 112 | /* |
| 79 | * extents on the btree inode are pretty simple, there's one extent | 113 | * extents on the btree inode are pretty simple, there's one extent |
| 80 | * that covers the entire device | 114 | * that covers the entire device |
| @@ -347,6 +381,15 @@ static int check_tree_block_fsid(struct btrfs_root *root, | |||
| 347 | return ret; | 381 | return ret; |
| 348 | } | 382 | } |
| 349 | 383 | ||
| 384 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
| 385 | void btrfs_set_buffer_lockdep_class(struct extent_buffer *eb, int level) | ||
| 386 | { | ||
| 387 | lockdep_set_class_and_name(&eb->lock, | ||
| 388 | &btrfs_eb_class[level], | ||
| 389 | btrfs_eb_name[level]); | ||
| 390 | } | ||
| 391 | #endif | ||
| 392 | |||
| 350 | static int btree_readpage_end_io_hook(struct page *page, u64 start, u64 end, | 393 | static int btree_readpage_end_io_hook(struct page *page, u64 start, u64 end, |
| 351 | struct extent_state *state) | 394 | struct extent_state *state) |
| 352 | { | 395 | { |
| @@ -392,6 +435,8 @@ static int btree_readpage_end_io_hook(struct page *page, u64 start, u64 end, | |||
| 392 | } | 435 | } |
| 393 | found_level = btrfs_header_level(eb); | 436 | found_level = btrfs_header_level(eb); |
| 394 | 437 | ||
| 438 | btrfs_set_buffer_lockdep_class(eb, found_level); | ||
| 439 | |||
| 395 | ret = csum_tree_block(root, eb, 1); | 440 | ret = csum_tree_block(root, eb, 1); |
| 396 | if (ret) | 441 | if (ret) |
| 397 | ret = -EIO; | 442 | ret = -EIO; |
| @@ -812,7 +857,7 @@ int clean_tree_block(struct btrfs_trans_handle *trans, struct btrfs_root *root, | |||
| 812 | struct inode *btree_inode = root->fs_info->btree_inode; | 857 | struct inode *btree_inode = root->fs_info->btree_inode; |
| 813 | if (btrfs_header_generation(buf) == | 858 | if (btrfs_header_generation(buf) == |
| 814 | root->fs_info->running_transaction->transid) { | 859 | root->fs_info->running_transaction->transid) { |
| 815 | WARN_ON(!btrfs_tree_locked(buf)); | 860 | btrfs_assert_tree_locked(buf); |
| 816 | 861 | ||
| 817 | /* ugh, clear_extent_buffer_dirty can be expensive */ | 862 | /* ugh, clear_extent_buffer_dirty can be expensive */ |
| 818 | btrfs_set_lock_blocking(buf); | 863 | btrfs_set_lock_blocking(buf); |
| @@ -1777,7 +1822,6 @@ struct btrfs_root *open_ctree(struct super_block *sb, | |||
| 1777 | ret = find_and_setup_root(tree_root, fs_info, | 1822 | ret = find_and_setup_root(tree_root, fs_info, |
| 1778 | BTRFS_DEV_TREE_OBJECTID, dev_root); | 1823 | BTRFS_DEV_TREE_OBJECTID, dev_root); |
| 1779 | dev_root->track_dirty = 1; | 1824 | dev_root->track_dirty = 1; |
| 1780 | |||
| 1781 | if (ret) | 1825 | if (ret) |
| 1782 | goto fail_extent_root; | 1826 | goto fail_extent_root; |
| 1783 | 1827 | ||
| @@ -2317,7 +2361,7 @@ void btrfs_mark_buffer_dirty(struct extent_buffer *buf) | |||
| 2317 | 2361 | ||
| 2318 | btrfs_set_lock_blocking(buf); | 2362 | btrfs_set_lock_blocking(buf); |
| 2319 | 2363 | ||
| 2320 | WARN_ON(!btrfs_tree_locked(buf)); | 2364 | btrfs_assert_tree_locked(buf); |
| 2321 | if (transid != root->fs_info->generation) { | 2365 | if (transid != root->fs_info->generation) { |
| 2322 | printk(KERN_CRIT "btrfs transid mismatch buffer %llu, " | 2366 | printk(KERN_CRIT "btrfs transid mismatch buffer %llu, " |
| 2323 | "found %llu running %llu\n", | 2367 | "found %llu running %llu\n", |
diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h index 494a56eb2986..95029db227be 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h | |||
| @@ -101,4 +101,14 @@ int btrfs_init_log_root_tree(struct btrfs_trans_handle *trans, | |||
| 101 | int btrfs_add_log_tree(struct btrfs_trans_handle *trans, | 101 | int btrfs_add_log_tree(struct btrfs_trans_handle *trans, |
| 102 | struct btrfs_root *root); | 102 | struct btrfs_root *root); |
| 103 | int btree_lock_page_hook(struct page *page); | 103 | int btree_lock_page_hook(struct page *page); |
| 104 | |||
| 105 | |||
| 106 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
| 107 | void btrfs_set_buffer_lockdep_class(struct extent_buffer *eb, int level); | ||
| 108 | #else | ||
| 109 | static inline void btrfs_set_buffer_lockdep_class(struct extent_buffer *eb, | ||
| 110 | int level) | ||
| 111 | { | ||
| 112 | } | ||
| 113 | #endif | ||
| 104 | #endif | 114 | #endif |
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 7527523c2d2d..9abf81f71c46 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c | |||
| @@ -60,6 +60,10 @@ static int update_block_group(struct btrfs_trans_handle *trans, | |||
| 60 | u64 bytenr, u64 num_bytes, int alloc, | 60 | u64 bytenr, u64 num_bytes, int alloc, |
| 61 | int mark_free); | 61 | int mark_free); |
| 62 | 62 | ||
| 63 | static int do_chunk_alloc(struct btrfs_trans_handle *trans, | ||
| 64 | struct btrfs_root *extent_root, u64 alloc_bytes, | ||
| 65 | u64 flags, int force); | ||
| 66 | |||
| 63 | static int block_group_bits(struct btrfs_block_group_cache *cache, u64 bits) | 67 | static int block_group_bits(struct btrfs_block_group_cache *cache, u64 bits) |
| 64 | { | 68 | { |
| 65 | return (cache->flags & bits) == bits; | 69 | return (cache->flags & bits) == bits; |
| @@ -1323,8 +1327,25 @@ int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, | |||
| 1323 | int btrfs_extent_post_op(struct btrfs_trans_handle *trans, | 1327 | int btrfs_extent_post_op(struct btrfs_trans_handle *trans, |
| 1324 | struct btrfs_root *root) | 1328 | struct btrfs_root *root) |
| 1325 | { | 1329 | { |
| 1326 | finish_current_insert(trans, root->fs_info->extent_root, 1); | 1330 | u64 start; |
| 1327 | del_pending_extents(trans, root->fs_info->extent_root, 1); | 1331 | u64 end; |
| 1332 | int ret; | ||
| 1333 | |||
| 1334 | while(1) { | ||
| 1335 | finish_current_insert(trans, root->fs_info->extent_root, 1); | ||
| 1336 | del_pending_extents(trans, root->fs_info->extent_root, 1); | ||
| 1337 | |||
| 1338 | /* is there more work to do? */ | ||
| 1339 | ret = find_first_extent_bit(&root->fs_info->pending_del, | ||
| 1340 | 0, &start, &end, EXTENT_WRITEBACK); | ||
| 1341 | if (!ret) | ||
| 1342 | continue; | ||
| 1343 | ret = find_first_extent_bit(&root->fs_info->extent_ins, | ||
| 1344 | 0, &start, &end, EXTENT_WRITEBACK); | ||
| 1345 | if (!ret) | ||
| 1346 | continue; | ||
| 1347 | break; | ||
| 1348 | } | ||
| 1328 | return 0; | 1349 | return 0; |
| 1329 | } | 1350 | } |
| 1330 | 1351 | ||
| @@ -1892,6 +1913,7 @@ static int update_space_info(struct btrfs_fs_info *info, u64 flags, | |||
| 1892 | found->bytes_pinned = 0; | 1913 | found->bytes_pinned = 0; |
| 1893 | found->bytes_reserved = 0; | 1914 | found->bytes_reserved = 0; |
| 1894 | found->bytes_readonly = 0; | 1915 | found->bytes_readonly = 0; |
| 1916 | found->bytes_delalloc = 0; | ||
| 1895 | found->full = 0; | 1917 | found->full = 0; |
| 1896 | found->force_alloc = 0; | 1918 | found->force_alloc = 0; |
| 1897 | *space_info = found; | 1919 | *space_info = found; |
| @@ -1955,6 +1977,233 @@ u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags) | |||
| 1955 | return flags; | 1977 | return flags; |
| 1956 | } | 1978 | } |
| 1957 | 1979 | ||
| 1980 | static u64 btrfs_get_alloc_profile(struct btrfs_root *root, u64 data) | ||
| 1981 | { | ||
| 1982 | struct btrfs_fs_info *info = root->fs_info; | ||
| 1983 | u64 alloc_profile; | ||
| 1984 | |||
| 1985 | if (data) { | ||
| 1986 | alloc_profile = info->avail_data_alloc_bits & | ||
| 1987 | info->data_alloc_profile; | ||
| 1988 | data = BTRFS_BLOCK_GROUP_DATA | alloc_profile; | ||
| 1989 | } else if (root == root->fs_info->chunk_root) { | ||
| 1990 | alloc_profile = info->avail_system_alloc_bits & | ||
| 1991 | info->system_alloc_profile; | ||
| 1992 | data = BTRFS_BLOCK_GROUP_SYSTEM | alloc_profile; | ||
| 1993 | } else { | ||
| 1994 | alloc_profile = info->avail_metadata_alloc_bits & | ||
| 1995 | info->metadata_alloc_profile; | ||
| 1996 | data = BTRFS_BLOCK_GROUP_METADATA | alloc_profile; | ||
| 1997 | } | ||
| 1998 | |||
| 1999 | return btrfs_reduce_alloc_profile(root, data); | ||
| 2000 | } | ||
| 2001 | |||
| 2002 | void btrfs_set_inode_space_info(struct btrfs_root *root, struct inode *inode) | ||
| 2003 | { | ||
| 2004 | u64 alloc_target; | ||
| 2005 | |||
| 2006 | alloc_target = btrfs_get_alloc_profile(root, 1); | ||
| 2007 | BTRFS_I(inode)->space_info = __find_space_info(root->fs_info, | ||
| 2008 | alloc_target); | ||
| 2009 | } | ||
| 2010 | |||
| 2011 | /* | ||
| 2012 | * for now this just makes sure we have at least 5% of our metadata space free | ||
| 2013 | * for use. | ||
| 2014 | */ | ||
| 2015 | int btrfs_check_metadata_free_space(struct btrfs_root *root) | ||
| 2016 | { | ||
| 2017 | struct btrfs_fs_info *info = root->fs_info; | ||
| 2018 | struct btrfs_space_info *meta_sinfo; | ||
| 2019 | u64 alloc_target, thresh; | ||
| 2020 | int committed = 0, ret; | ||
| 2021 | |||
| 2022 | /* get the space info for where the metadata will live */ | ||
| 2023 | alloc_target = btrfs_get_alloc_profile(root, 0); | ||
| 2024 | meta_sinfo = __find_space_info(info, alloc_target); | ||
| 2025 | |||
| 2026 | again: | ||
| 2027 | spin_lock(&meta_sinfo->lock); | ||
| 2028 | if (!meta_sinfo->full) | ||
| 2029 | thresh = meta_sinfo->total_bytes * 80; | ||
| 2030 | else | ||
| 2031 | thresh = meta_sinfo->total_bytes * 95; | ||
| 2032 | |||
| 2033 | do_div(thresh, 100); | ||
| 2034 | |||
| 2035 | if (meta_sinfo->bytes_used + meta_sinfo->bytes_reserved + | ||
| 2036 | meta_sinfo->bytes_pinned + meta_sinfo->bytes_readonly > thresh) { | ||
| 2037 | struct btrfs_trans_handle *trans; | ||
| 2038 | if (!meta_sinfo->full) { | ||
| 2039 | meta_sinfo->force_alloc = 1; | ||
| 2040 | spin_unlock(&meta_sinfo->lock); | ||
| 2041 | |||
| 2042 | trans = btrfs_start_transaction(root, 1); | ||
| 2043 | if (!trans) | ||
| 2044 | return -ENOMEM; | ||
| 2045 | |||
| 2046 | ret = do_chunk_alloc(trans, root->fs_info->extent_root, | ||
| 2047 | 2 * 1024 * 1024, alloc_target, 0); | ||
| 2048 | btrfs_end_transaction(trans, root); | ||
| 2049 | goto again; | ||
| 2050 | } | ||
| 2051 | spin_unlock(&meta_sinfo->lock); | ||
| 2052 | |||
| 2053 | if (!committed) { | ||
| 2054 | committed = 1; | ||
| 2055 | trans = btrfs_join_transaction(root, 1); | ||
| 2056 | if (!trans) | ||
| 2057 | return -ENOMEM; | ||
| 2058 | ret = btrfs_commit_transaction(trans, root); | ||
| 2059 | if (ret) | ||
| 2060 | return ret; | ||
| 2061 | goto again; | ||
| 2062 | } | ||
| 2063 | return -ENOSPC; | ||
| 2064 | } | ||
| 2065 | spin_unlock(&meta_sinfo->lock); | ||
| 2066 | |||
| 2067 | return 0; | ||
| 2068 | } | ||
| 2069 | |||
| 2070 | /* | ||
| 2071 | * This will check the space that the inode allocates from to make sure we have | ||
| 2072 | * enough space for bytes. | ||
| 2073 | */ | ||
| 2074 | int btrfs_check_data_free_space(struct btrfs_root *root, struct inode *inode, | ||
| 2075 | u64 bytes) | ||
| 2076 | { | ||
| 2077 | struct btrfs_space_info *data_sinfo; | ||
| 2078 | int ret = 0, committed = 0; | ||
| 2079 | |||
| 2080 | /* make sure bytes are sectorsize aligned */ | ||
| 2081 | bytes = (bytes + root->sectorsize - 1) & ~((u64)root->sectorsize - 1); | ||
| 2082 | |||
| 2083 | data_sinfo = BTRFS_I(inode)->space_info; | ||
| 2084 | again: | ||
| 2085 | /* make sure we have enough space to handle the data first */ | ||
| 2086 | spin_lock(&data_sinfo->lock); | ||
| 2087 | if (data_sinfo->total_bytes - data_sinfo->bytes_used - | ||
| 2088 | data_sinfo->bytes_delalloc - data_sinfo->bytes_reserved - | ||
| 2089 | data_sinfo->bytes_pinned - data_sinfo->bytes_readonly - | ||
| 2090 | data_sinfo->bytes_may_use < bytes) { | ||
| 2091 | struct btrfs_trans_handle *trans; | ||
| 2092 | |||
| 2093 | /* | ||
| 2094 | * if we don't have enough free bytes in this space then we need | ||
| 2095 | * to alloc a new chunk. | ||
| 2096 | */ | ||
| 2097 | if (!data_sinfo->full) { | ||
| 2098 | u64 alloc_target; | ||
| 2099 | |||
| 2100 | data_sinfo->force_alloc = 1; | ||
| 2101 | spin_unlock(&data_sinfo->lock); | ||
| 2102 | |||
| 2103 | alloc_target = btrfs_get_alloc_profile(root, 1); | ||
| 2104 | trans = btrfs_start_transaction(root, 1); | ||
| 2105 | if (!trans) | ||
| 2106 | return -ENOMEM; | ||
| 2107 | |||
| 2108 | ret = do_chunk_alloc(trans, root->fs_info->extent_root, | ||
| 2109 | bytes + 2 * 1024 * 1024, | ||
| 2110 | alloc_target, 0); | ||
| 2111 | btrfs_end_transaction(trans, root); | ||
| 2112 | if (ret) | ||
| 2113 | return ret; | ||
| 2114 | goto again; | ||
| 2115 | } | ||
| 2116 | spin_unlock(&data_sinfo->lock); | ||
| 2117 | |||
| 2118 | /* commit the current transaction and try again */ | ||
| 2119 | if (!committed) { | ||
| 2120 | committed = 1; | ||
| 2121 | trans = btrfs_join_transaction(root, 1); | ||
| 2122 | if (!trans) | ||
| 2123 | return -ENOMEM; | ||
| 2124 | ret = btrfs_commit_transaction(trans, root); | ||
| 2125 | if (ret) | ||
| 2126 | return ret; | ||
| 2127 | goto again; | ||
| 2128 | } | ||
| 2129 | |||
| 2130 | printk(KERN_ERR "no space left, need %llu, %llu delalloc bytes" | ||
| 2131 | ", %llu bytes_used, %llu bytes_reserved, " | ||
| 2132 | "%llu bytes_pinned, %llu bytes_readonly, %llu may use" | ||
| 2133 | "%llu total\n", bytes, data_sinfo->bytes_delalloc, | ||
| 2134 | data_sinfo->bytes_used, data_sinfo->bytes_reserved, | ||
| 2135 | data_sinfo->bytes_pinned, data_sinfo->bytes_readonly, | ||
| 2136 | data_sinfo->bytes_may_use, data_sinfo->total_bytes); | ||
| 2137 | return -ENOSPC; | ||
| 2138 | } | ||
| 2139 | data_sinfo->bytes_may_use += bytes; | ||
| 2140 | BTRFS_I(inode)->reserved_bytes += bytes; | ||
| 2141 | spin_unlock(&data_sinfo->lock); | ||
| 2142 | |||
| 2143 | return btrfs_check_metadata_free_space(root); | ||
| 2144 | } | ||
| 2145 | |||
| 2146 | /* | ||
| 2147 | * if there was an error for whatever reason after calling | ||
| 2148 | * btrfs_check_data_free_space, call this so we can cleanup the counters. | ||
| 2149 | */ | ||
| 2150 | void btrfs_free_reserved_data_space(struct btrfs_root *root, | ||
| 2151 | struct inode *inode, u64 bytes) | ||
| 2152 | { | ||
| 2153 | struct btrfs_space_info *data_sinfo; | ||
| 2154 | |||
| 2155 | /* make sure bytes are sectorsize aligned */ | ||
| 2156 | bytes = (bytes + root->sectorsize - 1) & ~((u64)root->sectorsize - 1); | ||
| 2157 | |||
| 2158 | data_sinfo = BTRFS_I(inode)->space_info; | ||
| 2159 | spin_lock(&data_sinfo->lock); | ||
| 2160 | data_sinfo->bytes_may_use -= bytes; | ||
| 2161 | BTRFS_I(inode)->reserved_bytes -= bytes; | ||
| 2162 | spin_unlock(&data_sinfo->lock); | ||
| 2163 | } | ||
| 2164 | |||
| 2165 | /* called when we are adding a delalloc extent to the inode's io_tree */ | ||
| 2166 | void btrfs_delalloc_reserve_space(struct btrfs_root *root, struct inode *inode, | ||
| 2167 | u64 bytes) | ||
| 2168 | { | ||
| 2169 | struct btrfs_space_info *data_sinfo; | ||
| 2170 | |||
| 2171 | /* get the space info for where this inode will be storing its data */ | ||
| 2172 | data_sinfo = BTRFS_I(inode)->space_info; | ||
| 2173 | |||
| 2174 | /* make sure we have enough space to handle the data first */ | ||
| 2175 | spin_lock(&data_sinfo->lock); | ||
| 2176 | data_sinfo->bytes_delalloc += bytes; | ||
| 2177 | |||
| 2178 | /* | ||
| 2179 | * we are adding a delalloc extent without calling | ||
| 2180 | * btrfs_check_data_free_space first. This happens on a weird | ||
| 2181 | * writepage condition, but shouldn't hurt our accounting | ||
| 2182 | */ | ||
| 2183 | if (unlikely(bytes > BTRFS_I(inode)->reserved_bytes)) { | ||
| 2184 | data_sinfo->bytes_may_use -= BTRFS_I(inode)->reserved_bytes; | ||
| 2185 | BTRFS_I(inode)->reserved_bytes = 0; | ||
| 2186 | } else { | ||
| 2187 | data_sinfo->bytes_may_use -= bytes; | ||
| 2188 | BTRFS_I(inode)->reserved_bytes -= bytes; | ||
| 2189 | } | ||
| 2190 | |||
| 2191 | spin_unlock(&data_sinfo->lock); | ||
| 2192 | } | ||
| 2193 | |||
| 2194 | /* called when we are clearing an delalloc extent from the inode's io_tree */ | ||
| 2195 | void btrfs_delalloc_free_space(struct btrfs_root *root, struct inode *inode, | ||
| 2196 | u64 bytes) | ||
| 2197 | { | ||
| 2198 | struct btrfs_space_info *info; | ||
| 2199 | |||
| 2200 | info = BTRFS_I(inode)->space_info; | ||
| 2201 | |||
| 2202 | spin_lock(&info->lock); | ||
| 2203 | info->bytes_delalloc -= bytes; | ||
| 2204 | spin_unlock(&info->lock); | ||
| 2205 | } | ||
| 2206 | |||
| 1958 | static int do_chunk_alloc(struct btrfs_trans_handle *trans, | 2207 | static int do_chunk_alloc(struct btrfs_trans_handle *trans, |
| 1959 | struct btrfs_root *extent_root, u64 alloc_bytes, | 2208 | struct btrfs_root *extent_root, u64 alloc_bytes, |
| 1960 | u64 flags, int force) | 2209 | u64 flags, int force) |
| @@ -2211,13 +2460,12 @@ static int finish_current_insert(struct btrfs_trans_handle *trans, | |||
| 2211 | u64 end; | 2460 | u64 end; |
| 2212 | u64 priv; | 2461 | u64 priv; |
| 2213 | u64 search = 0; | 2462 | u64 search = 0; |
| 2214 | u64 skipped = 0; | ||
| 2215 | struct btrfs_fs_info *info = extent_root->fs_info; | 2463 | struct btrfs_fs_info *info = extent_root->fs_info; |
| 2216 | struct btrfs_path *path; | 2464 | struct btrfs_path *path; |
| 2217 | struct pending_extent_op *extent_op, *tmp; | 2465 | struct pending_extent_op *extent_op, *tmp; |
| 2218 | struct list_head insert_list, update_list; | 2466 | struct list_head insert_list, update_list; |
| 2219 | int ret; | 2467 | int ret; |
| 2220 | int num_inserts = 0, max_inserts; | 2468 | int num_inserts = 0, max_inserts, restart = 0; |
| 2221 | 2469 | ||
| 2222 | path = btrfs_alloc_path(); | 2470 | path = btrfs_alloc_path(); |
| 2223 | INIT_LIST_HEAD(&insert_list); | 2471 | INIT_LIST_HEAD(&insert_list); |
| @@ -2233,19 +2481,19 @@ again: | |||
| 2233 | ret = find_first_extent_bit(&info->extent_ins, search, &start, | 2481 | ret = find_first_extent_bit(&info->extent_ins, search, &start, |
| 2234 | &end, EXTENT_WRITEBACK); | 2482 | &end, EXTENT_WRITEBACK); |
| 2235 | if (ret) { | 2483 | if (ret) { |
| 2236 | if (skipped && all && !num_inserts && | 2484 | if (restart && !num_inserts && |
| 2237 | list_empty(&update_list)) { | 2485 | list_empty(&update_list)) { |
| 2238 | skipped = 0; | 2486 | restart = 0; |
| 2239 | search = 0; | 2487 | search = 0; |
| 2240 | continue; | 2488 | continue; |
| 2241 | } | 2489 | } |
| 2242 | mutex_unlock(&info->extent_ins_mutex); | ||
| 2243 | break; | 2490 | break; |
| 2244 | } | 2491 | } |
| 2245 | 2492 | ||
| 2246 | ret = try_lock_extent(&info->extent_ins, start, end, GFP_NOFS); | 2493 | ret = try_lock_extent(&info->extent_ins, start, end, GFP_NOFS); |
| 2247 | if (!ret) { | 2494 | if (!ret) { |
| 2248 | skipped = 1; | 2495 | if (all) |
| 2496 | restart = 1; | ||
| 2249 | search = end + 1; | 2497 | search = end + 1; |
| 2250 | if (need_resched()) { | 2498 | if (need_resched()) { |
| 2251 | mutex_unlock(&info->extent_ins_mutex); | 2499 | mutex_unlock(&info->extent_ins_mutex); |
| @@ -2264,7 +2512,7 @@ again: | |||
| 2264 | list_add_tail(&extent_op->list, &insert_list); | 2512 | list_add_tail(&extent_op->list, &insert_list); |
| 2265 | search = end + 1; | 2513 | search = end + 1; |
| 2266 | if (num_inserts == max_inserts) { | 2514 | if (num_inserts == max_inserts) { |
| 2267 | mutex_unlock(&info->extent_ins_mutex); | 2515 | restart = 1; |
| 2268 | break; | 2516 | break; |
| 2269 | } | 2517 | } |
| 2270 | } else if (extent_op->type == PENDING_BACKREF_UPDATE) { | 2518 | } else if (extent_op->type == PENDING_BACKREF_UPDATE) { |
| @@ -2280,7 +2528,6 @@ again: | |||
| 2280 | * somebody marked this thing for deletion then just unlock it and be | 2528 | * somebody marked this thing for deletion then just unlock it and be |
| 2281 | * done, the free_extents will handle it | 2529 | * done, the free_extents will handle it |
| 2282 | */ | 2530 | */ |
| 2283 | mutex_lock(&info->extent_ins_mutex); | ||
| 2284 | list_for_each_entry_safe(extent_op, tmp, &update_list, list) { | 2531 | list_for_each_entry_safe(extent_op, tmp, &update_list, list) { |
| 2285 | clear_extent_bits(&info->extent_ins, extent_op->bytenr, | 2532 | clear_extent_bits(&info->extent_ins, extent_op->bytenr, |
| 2286 | extent_op->bytenr + extent_op->num_bytes - 1, | 2533 | extent_op->bytenr + extent_op->num_bytes - 1, |
| @@ -2302,6 +2549,10 @@ again: | |||
| 2302 | if (!list_empty(&update_list)) { | 2549 | if (!list_empty(&update_list)) { |
| 2303 | ret = update_backrefs(trans, extent_root, path, &update_list); | 2550 | ret = update_backrefs(trans, extent_root, path, &update_list); |
| 2304 | BUG_ON(ret); | 2551 | BUG_ON(ret); |
| 2552 | |||
| 2553 | /* we may have COW'ed new blocks, so lets start over */ | ||
| 2554 | if (all) | ||
| 2555 | restart = 1; | ||
| 2305 | } | 2556 | } |
| 2306 | 2557 | ||
| 2307 | /* | 2558 | /* |
| @@ -2309,9 +2560,9 @@ again: | |||
| 2309 | * need to make sure everything is cleaned then reset everything and | 2560 | * need to make sure everything is cleaned then reset everything and |
| 2310 | * go back to the beginning | 2561 | * go back to the beginning |
| 2311 | */ | 2562 | */ |
| 2312 | if (!num_inserts && all && skipped) { | 2563 | if (!num_inserts && restart) { |
| 2313 | search = 0; | 2564 | search = 0; |
| 2314 | skipped = 0; | 2565 | restart = 0; |
| 2315 | INIT_LIST_HEAD(&update_list); | 2566 | INIT_LIST_HEAD(&update_list); |
| 2316 | INIT_LIST_HEAD(&insert_list); | 2567 | INIT_LIST_HEAD(&insert_list); |
| 2317 | goto again; | 2568 | goto again; |
| @@ -2368,27 +2619,19 @@ again: | |||
| 2368 | BUG_ON(ret); | 2619 | BUG_ON(ret); |
| 2369 | 2620 | ||
| 2370 | /* | 2621 | /* |
| 2371 | * if we broke out of the loop in order to insert stuff because we hit | 2622 | * if restart is set for whatever reason we need to go back and start |
| 2372 | * the maximum number of inserts at a time we can handle, then loop | 2623 | * searching through the pending list again. |
| 2373 | * back and pick up where we left off | 2624 | * |
| 2625 | * We just inserted some extents, which could have resulted in new | ||
| 2626 | * blocks being allocated, which would result in new blocks needing | ||
| 2627 | * updates, so if all is set we _must_ restart to get the updated | ||
| 2628 | * blocks. | ||
| 2374 | */ | 2629 | */ |
| 2375 | if (num_inserts == max_inserts) { | 2630 | if (restart || all) { |
| 2376 | INIT_LIST_HEAD(&insert_list); | ||
| 2377 | INIT_LIST_HEAD(&update_list); | ||
| 2378 | num_inserts = 0; | ||
| 2379 | goto again; | ||
| 2380 | } | ||
| 2381 | |||
| 2382 | /* | ||
| 2383 | * again, if we need to make absolutely sure there are no more pending | ||
| 2384 | * extent operations left and we know that we skipped some, go back to | ||
| 2385 | * the beginning and do it all again | ||
| 2386 | */ | ||
| 2387 | if (all && skipped) { | ||
| 2388 | INIT_LIST_HEAD(&insert_list); | 2631 | INIT_LIST_HEAD(&insert_list); |
| 2389 | INIT_LIST_HEAD(&update_list); | 2632 | INIT_LIST_HEAD(&update_list); |
| 2390 | search = 0; | 2633 | search = 0; |
| 2391 | skipped = 0; | 2634 | restart = 0; |
| 2392 | num_inserts = 0; | 2635 | num_inserts = 0; |
| 2393 | goto again; | 2636 | goto again; |
| 2394 | } | 2637 | } |
| @@ -2709,6 +2952,8 @@ again: | |||
| 2709 | goto again; | 2952 | goto again; |
| 2710 | } | 2953 | } |
| 2711 | 2954 | ||
| 2955 | if (!err) | ||
| 2956 | finish_current_insert(trans, extent_root, 0); | ||
| 2712 | return err; | 2957 | return err; |
| 2713 | } | 2958 | } |
| 2714 | 2959 | ||
| @@ -2859,7 +3104,8 @@ static noinline int find_free_extent(struct btrfs_trans_handle *trans, | |||
| 2859 | 3104 | ||
| 2860 | if (data & BTRFS_BLOCK_GROUP_METADATA) { | 3105 | if (data & BTRFS_BLOCK_GROUP_METADATA) { |
| 2861 | last_ptr = &root->fs_info->last_alloc; | 3106 | last_ptr = &root->fs_info->last_alloc; |
| 2862 | empty_cluster = 64 * 1024; | 3107 | if (!btrfs_test_opt(root, SSD)) |
| 3108 | empty_cluster = 64 * 1024; | ||
| 2863 | } | 3109 | } |
| 2864 | 3110 | ||
| 2865 | if ((data & BTRFS_BLOCK_GROUP_DATA) && btrfs_test_opt(root, SSD)) | 3111 | if ((data & BTRFS_BLOCK_GROUP_DATA) && btrfs_test_opt(root, SSD)) |
| @@ -3091,6 +3337,10 @@ static void dump_space_info(struct btrfs_space_info *info, u64 bytes) | |||
| 3091 | (unsigned long long)(info->total_bytes - info->bytes_used - | 3337 | (unsigned long long)(info->total_bytes - info->bytes_used - |
| 3092 | info->bytes_pinned - info->bytes_reserved), | 3338 | info->bytes_pinned - info->bytes_reserved), |
| 3093 | (info->full) ? "" : "not "); | 3339 | (info->full) ? "" : "not "); |
| 3340 | printk(KERN_INFO "space_info total=%llu, pinned=%llu, delalloc=%llu," | ||
| 3341 | " may_use=%llu, used=%llu\n", info->total_bytes, | ||
| 3342 | info->bytes_pinned, info->bytes_delalloc, info->bytes_may_use, | ||
| 3343 | info->bytes_used); | ||
| 3094 | 3344 | ||
| 3095 | down_read(&info->groups_sem); | 3345 | down_read(&info->groups_sem); |
| 3096 | list_for_each_entry(cache, &info->block_groups, list) { | 3346 | list_for_each_entry(cache, &info->block_groups, list) { |
| @@ -3117,24 +3367,10 @@ static int __btrfs_reserve_extent(struct btrfs_trans_handle *trans, | |||
| 3117 | { | 3367 | { |
| 3118 | int ret; | 3368 | int ret; |
| 3119 | u64 search_start = 0; | 3369 | u64 search_start = 0; |
| 3120 | u64 alloc_profile; | ||
| 3121 | struct btrfs_fs_info *info = root->fs_info; | 3370 | struct btrfs_fs_info *info = root->fs_info; |
| 3122 | 3371 | ||
| 3123 | if (data) { | 3372 | data = btrfs_get_alloc_profile(root, data); |
| 3124 | alloc_profile = info->avail_data_alloc_bits & | ||
| 3125 | info->data_alloc_profile; | ||
| 3126 | data = BTRFS_BLOCK_GROUP_DATA | alloc_profile; | ||
| 3127 | } else if (root == root->fs_info->chunk_root) { | ||
| 3128 | alloc_profile = info->avail_system_alloc_bits & | ||
| 3129 | info->system_alloc_profile; | ||
| 3130 | data = BTRFS_BLOCK_GROUP_SYSTEM | alloc_profile; | ||
| 3131 | } else { | ||
| 3132 | alloc_profile = info->avail_metadata_alloc_bits & | ||
| 3133 | info->metadata_alloc_profile; | ||
| 3134 | data = BTRFS_BLOCK_GROUP_METADATA | alloc_profile; | ||
| 3135 | } | ||
| 3136 | again: | 3373 | again: |
| 3137 | data = btrfs_reduce_alloc_profile(root, data); | ||
| 3138 | /* | 3374 | /* |
| 3139 | * the only place that sets empty_size is btrfs_realloc_node, which | 3375 | * the only place that sets empty_size is btrfs_realloc_node, which |
| 3140 | * is not called recursively on allocations | 3376 | * is not called recursively on allocations |
| @@ -3402,7 +3638,8 @@ int btrfs_alloc_extent(struct btrfs_trans_handle *trans, | |||
| 3402 | 3638 | ||
| 3403 | struct extent_buffer *btrfs_init_new_buffer(struct btrfs_trans_handle *trans, | 3639 | struct extent_buffer *btrfs_init_new_buffer(struct btrfs_trans_handle *trans, |
| 3404 | struct btrfs_root *root, | 3640 | struct btrfs_root *root, |
| 3405 | u64 bytenr, u32 blocksize) | 3641 | u64 bytenr, u32 blocksize, |
| 3642 | int level) | ||
| 3406 | { | 3643 | { |
| 3407 | struct extent_buffer *buf; | 3644 | struct extent_buffer *buf; |
| 3408 | 3645 | ||
| @@ -3410,6 +3647,7 @@ struct extent_buffer *btrfs_init_new_buffer(struct btrfs_trans_handle *trans, | |||
| 3410 | if (!buf) | 3647 | if (!buf) |
| 3411 | return ERR_PTR(-ENOMEM); | 3648 | return ERR_PTR(-ENOMEM); |
| 3412 | btrfs_set_header_generation(buf, trans->transid); | 3649 | btrfs_set_header_generation(buf, trans->transid); |
| 3650 | btrfs_set_buffer_lockdep_class(buf, level); | ||
| 3413 | btrfs_tree_lock(buf); | 3651 | btrfs_tree_lock(buf); |
| 3414 | clean_tree_block(trans, root, buf); | 3652 | clean_tree_block(trans, root, buf); |
| 3415 | 3653 | ||
| @@ -3453,7 +3691,8 @@ struct extent_buffer *btrfs_alloc_free_block(struct btrfs_trans_handle *trans, | |||
| 3453 | return ERR_PTR(ret); | 3691 | return ERR_PTR(ret); |
| 3454 | } | 3692 | } |
| 3455 | 3693 | ||
| 3456 | buf = btrfs_init_new_buffer(trans, root, ins.objectid, blocksize); | 3694 | buf = btrfs_init_new_buffer(trans, root, ins.objectid, |
| 3695 | blocksize, level); | ||
| 3457 | return buf; | 3696 | return buf; |
| 3458 | } | 3697 | } |
| 3459 | 3698 | ||
| @@ -4179,13 +4418,13 @@ int btrfs_drop_subtree(struct btrfs_trans_handle *trans, | |||
| 4179 | path = btrfs_alloc_path(); | 4418 | path = btrfs_alloc_path(); |
| 4180 | BUG_ON(!path); | 4419 | BUG_ON(!path); |
| 4181 | 4420 | ||
| 4182 | BUG_ON(!btrfs_tree_locked(parent)); | 4421 | btrfs_assert_tree_locked(parent); |
| 4183 | parent_level = btrfs_header_level(parent); | 4422 | parent_level = btrfs_header_level(parent); |
| 4184 | extent_buffer_get(parent); | 4423 | extent_buffer_get(parent); |
| 4185 | path->nodes[parent_level] = parent; | 4424 | path->nodes[parent_level] = parent; |
| 4186 | path->slots[parent_level] = btrfs_header_nritems(parent); | 4425 | path->slots[parent_level] = btrfs_header_nritems(parent); |
| 4187 | 4426 | ||
| 4188 | BUG_ON(!btrfs_tree_locked(node)); | 4427 | btrfs_assert_tree_locked(node); |
| 4189 | level = btrfs_header_level(node); | 4428 | level = btrfs_header_level(node); |
| 4190 | extent_buffer_get(node); | 4429 | extent_buffer_get(node); |
| 4191 | path->nodes[level] = node; | 4430 | path->nodes[level] = node; |
| @@ -5641,7 +5880,9 @@ static noinline int relocate_one_extent(struct btrfs_root *extent_root, | |||
| 5641 | prev_block = block_start; | 5880 | prev_block = block_start; |
| 5642 | } | 5881 | } |
| 5643 | 5882 | ||
| 5883 | mutex_lock(&extent_root->fs_info->trans_mutex); | ||
| 5644 | btrfs_record_root_in_trans(found_root); | 5884 | btrfs_record_root_in_trans(found_root); |
| 5885 | mutex_unlock(&extent_root->fs_info->trans_mutex); | ||
| 5645 | if (ref_path->owner_objectid >= BTRFS_FIRST_FREE_OBJECTID) { | 5886 | if (ref_path->owner_objectid >= BTRFS_FIRST_FREE_OBJECTID) { |
| 5646 | /* | 5887 | /* |
| 5647 | * try to update data extent references while | 5888 | * try to update data extent references while |
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 37d43b516b79..ebe6b29e6069 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c | |||
| @@ -415,8 +415,6 @@ static int split_state(struct extent_io_tree *tree, struct extent_state *orig, | |||
| 415 | 415 | ||
| 416 | node = tree_insert(&tree->state, prealloc->end, &prealloc->rb_node); | 416 | node = tree_insert(&tree->state, prealloc->end, &prealloc->rb_node); |
| 417 | if (node) { | 417 | if (node) { |
| 418 | struct extent_state *found; | ||
| 419 | found = rb_entry(node, struct extent_state, rb_node); | ||
| 420 | free_extent_state(prealloc); | 418 | free_extent_state(prealloc); |
| 421 | return -EEXIST; | 419 | return -EEXIST; |
| 422 | } | 420 | } |
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 3e8023efaff7..dc78954861b3 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c | |||
| @@ -1091,19 +1091,24 @@ static ssize_t btrfs_file_write(struct file *file, const char __user *buf, | |||
| 1091 | WARN_ON(num_pages > nrptrs); | 1091 | WARN_ON(num_pages > nrptrs); |
| 1092 | memset(pages, 0, sizeof(struct page *) * nrptrs); | 1092 | memset(pages, 0, sizeof(struct page *) * nrptrs); |
| 1093 | 1093 | ||
| 1094 | ret = btrfs_check_free_space(root, write_bytes, 0); | 1094 | ret = btrfs_check_data_free_space(root, inode, write_bytes); |
| 1095 | if (ret) | 1095 | if (ret) |
| 1096 | goto out; | 1096 | goto out; |
| 1097 | 1097 | ||
| 1098 | ret = prepare_pages(root, file, pages, num_pages, | 1098 | ret = prepare_pages(root, file, pages, num_pages, |
| 1099 | pos, first_index, last_index, | 1099 | pos, first_index, last_index, |
| 1100 | write_bytes); | 1100 | write_bytes); |
| 1101 | if (ret) | 1101 | if (ret) { |
| 1102 | btrfs_free_reserved_data_space(root, inode, | ||
| 1103 | write_bytes); | ||
| 1102 | goto out; | 1104 | goto out; |
| 1105 | } | ||
| 1103 | 1106 | ||
| 1104 | ret = btrfs_copy_from_user(pos, num_pages, | 1107 | ret = btrfs_copy_from_user(pos, num_pages, |
| 1105 | write_bytes, pages, buf); | 1108 | write_bytes, pages, buf); |
| 1106 | if (ret) { | 1109 | if (ret) { |
| 1110 | btrfs_free_reserved_data_space(root, inode, | ||
| 1111 | write_bytes); | ||
| 1107 | btrfs_drop_pages(pages, num_pages); | 1112 | btrfs_drop_pages(pages, num_pages); |
| 1108 | goto out; | 1113 | goto out; |
| 1109 | } | 1114 | } |
| @@ -1111,8 +1116,11 @@ static ssize_t btrfs_file_write(struct file *file, const char __user *buf, | |||
| 1111 | ret = dirty_and_release_pages(NULL, root, file, pages, | 1116 | ret = dirty_and_release_pages(NULL, root, file, pages, |
| 1112 | num_pages, pos, write_bytes); | 1117 | num_pages, pos, write_bytes); |
| 1113 | btrfs_drop_pages(pages, num_pages); | 1118 | btrfs_drop_pages(pages, num_pages); |
| 1114 | if (ret) | 1119 | if (ret) { |
| 1120 | btrfs_free_reserved_data_space(root, inode, | ||
| 1121 | write_bytes); | ||
| 1115 | goto out; | 1122 | goto out; |
| 1123 | } | ||
| 1116 | 1124 | ||
| 1117 | if (will_write) { | 1125 | if (will_write) { |
| 1118 | btrfs_fdatawrite_range(inode->i_mapping, pos, | 1126 | btrfs_fdatawrite_range(inode->i_mapping, pos, |
| @@ -1136,6 +1144,8 @@ static ssize_t btrfs_file_write(struct file *file, const char __user *buf, | |||
| 1136 | } | 1144 | } |
| 1137 | out: | 1145 | out: |
| 1138 | mutex_unlock(&inode->i_mutex); | 1146 | mutex_unlock(&inode->i_mutex); |
| 1147 | if (ret) | ||
| 1148 | err = ret; | ||
| 1139 | 1149 | ||
| 1140 | out_nolock: | 1150 | out_nolock: |
| 1141 | kfree(pages); | 1151 | kfree(pages); |
| @@ -1222,7 +1232,7 @@ int btrfs_sync_file(struct file *file, struct dentry *dentry, int datasync) | |||
| 1222 | /* | 1232 | /* |
| 1223 | * ok we haven't committed the transaction yet, lets do a commit | 1233 | * ok we haven't committed the transaction yet, lets do a commit |
| 1224 | */ | 1234 | */ |
| 1225 | if (file->private_data) | 1235 | if (file && file->private_data) |
| 1226 | btrfs_ioctl_trans_end(file); | 1236 | btrfs_ioctl_trans_end(file); |
| 1227 | 1237 | ||
| 1228 | trans = btrfs_start_transaction(root, 1); | 1238 | trans = btrfs_start_transaction(root, 1); |
| @@ -1231,7 +1241,7 @@ int btrfs_sync_file(struct file *file, struct dentry *dentry, int datasync) | |||
| 1231 | goto out; | 1241 | goto out; |
| 1232 | } | 1242 | } |
| 1233 | 1243 | ||
| 1234 | ret = btrfs_log_dentry_safe(trans, root, file->f_dentry); | 1244 | ret = btrfs_log_dentry_safe(trans, root, dentry); |
| 1235 | if (ret < 0) | 1245 | if (ret < 0) |
| 1236 | goto out; | 1246 | goto out; |
| 1237 | 1247 | ||
| @@ -1245,7 +1255,7 @@ int btrfs_sync_file(struct file *file, struct dentry *dentry, int datasync) | |||
| 1245 | * file again, but that will end up using the synchronization | 1255 | * file again, but that will end up using the synchronization |
| 1246 | * inside btrfs_sync_log to keep things safe. | 1256 | * inside btrfs_sync_log to keep things safe. |
| 1247 | */ | 1257 | */ |
| 1248 | mutex_unlock(&file->f_dentry->d_inode->i_mutex); | 1258 | mutex_unlock(&dentry->d_inode->i_mutex); |
| 1249 | 1259 | ||
| 1250 | if (ret > 0) { | 1260 | if (ret > 0) { |
| 1251 | ret = btrfs_commit_transaction(trans, root); | 1261 | ret = btrfs_commit_transaction(trans, root); |
| @@ -1253,7 +1263,7 @@ int btrfs_sync_file(struct file *file, struct dentry *dentry, int datasync) | |||
| 1253 | btrfs_sync_log(trans, root); | 1263 | btrfs_sync_log(trans, root); |
| 1254 | ret = btrfs_end_transaction(trans, root); | 1264 | ret = btrfs_end_transaction(trans, root); |
| 1255 | } | 1265 | } |
| 1256 | mutex_lock(&file->f_dentry->d_inode->i_mutex); | 1266 | mutex_lock(&dentry->d_inode->i_mutex); |
| 1257 | out: | 1267 | out: |
| 1258 | return ret > 0 ? EIO : ret; | 1268 | return ret > 0 ? EIO : ret; |
| 1259 | } | 1269 | } |
diff --git a/fs/btrfs/inode-map.c b/fs/btrfs/inode-map.c index 2aa79873eb46..cc7334d833c9 100644 --- a/fs/btrfs/inode-map.c +++ b/fs/btrfs/inode-map.c | |||
| @@ -84,7 +84,6 @@ int btrfs_find_free_objectid(struct btrfs_trans_handle *trans, | |||
| 84 | search_key.type = 0; | 84 | search_key.type = 0; |
| 85 | search_key.offset = 0; | 85 | search_key.offset = 0; |
| 86 | 86 | ||
| 87 | btrfs_init_path(path); | ||
| 88 | start_found = 0; | 87 | start_found = 0; |
| 89 | ret = btrfs_search_slot(trans, root, &search_key, path, 0, 0); | 88 | ret = btrfs_search_slot(trans, root, &search_key, path, 0, 0); |
| 90 | if (ret < 0) | 89 | if (ret < 0) |
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 8f0706210a47..7d4f948bc22a 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
| @@ -102,34 +102,6 @@ static int btrfs_init_inode_security(struct inode *inode, struct inode *dir) | |||
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | /* | 104 | /* |
| 105 | * a very lame attempt at stopping writes when the FS is 85% full. There | ||
| 106 | * are countless ways this is incorrect, but it is better than nothing. | ||
| 107 | */ | ||
| 108 | int btrfs_check_free_space(struct btrfs_root *root, u64 num_required, | ||
| 109 | int for_del) | ||
| 110 | { | ||
| 111 | u64 total; | ||
| 112 | u64 used; | ||
| 113 | u64 thresh; | ||
| 114 | int ret = 0; | ||
| 115 | |||
| 116 | spin_lock(&root->fs_info->delalloc_lock); | ||
| 117 | total = btrfs_super_total_bytes(&root->fs_info->super_copy); | ||
| 118 | used = btrfs_super_bytes_used(&root->fs_info->super_copy); | ||
| 119 | if (for_del) | ||
| 120 | thresh = total * 90; | ||
| 121 | else | ||
| 122 | thresh = total * 85; | ||
| 123 | |||
| 124 | do_div(thresh, 100); | ||
| 125 | |||
| 126 | if (used + root->fs_info->delalloc_bytes + num_required > thresh) | ||
| 127 | ret = -ENOSPC; | ||
| 128 | spin_unlock(&root->fs_info->delalloc_lock); | ||
| 129 | return ret; | ||
| 130 | } | ||
| 131 | |||
| 132 | /* | ||
| 133 | * this does all the hard work for inserting an inline extent into | 105 | * this does all the hard work for inserting an inline extent into |
| 134 | * the btree. The caller should have done a btrfs_drop_extents so that | 106 | * the btree. The caller should have done a btrfs_drop_extents so that |
| 135 | * no overlapping inline items exist in the btree | 107 | * no overlapping inline items exist in the btree |
| @@ -1190,6 +1162,7 @@ static int btrfs_set_bit_hook(struct inode *inode, u64 start, u64 end, | |||
| 1190 | */ | 1162 | */ |
| 1191 | if (!(old & EXTENT_DELALLOC) && (bits & EXTENT_DELALLOC)) { | 1163 | if (!(old & EXTENT_DELALLOC) && (bits & EXTENT_DELALLOC)) { |
| 1192 | struct btrfs_root *root = BTRFS_I(inode)->root; | 1164 | struct btrfs_root *root = BTRFS_I(inode)->root; |
| 1165 | btrfs_delalloc_reserve_space(root, inode, end - start + 1); | ||
| 1193 | spin_lock(&root->fs_info->delalloc_lock); | 1166 | spin_lock(&root->fs_info->delalloc_lock); |
| 1194 | BTRFS_I(inode)->delalloc_bytes += end - start + 1; | 1167 | BTRFS_I(inode)->delalloc_bytes += end - start + 1; |
| 1195 | root->fs_info->delalloc_bytes += end - start + 1; | 1168 | root->fs_info->delalloc_bytes += end - start + 1; |
| @@ -1223,9 +1196,12 @@ static int btrfs_clear_bit_hook(struct inode *inode, u64 start, u64 end, | |||
| 1223 | (unsigned long long)end - start + 1, | 1196 | (unsigned long long)end - start + 1, |
| 1224 | (unsigned long long) | 1197 | (unsigned long long) |
| 1225 | root->fs_info->delalloc_bytes); | 1198 | root->fs_info->delalloc_bytes); |
| 1199 | btrfs_delalloc_free_space(root, inode, (u64)-1); | ||
| 1226 | root->fs_info->delalloc_bytes = 0; | 1200 | root->fs_info->delalloc_bytes = 0; |
| 1227 | BTRFS_I(inode)->delalloc_bytes = 0; | 1201 | BTRFS_I(inode)->delalloc_bytes = 0; |
| 1228 | } else { | 1202 | } else { |
| 1203 | btrfs_delalloc_free_space(root, inode, | ||
| 1204 | end - start + 1); | ||
| 1229 | root->fs_info->delalloc_bytes -= end - start + 1; | 1205 | root->fs_info->delalloc_bytes -= end - start + 1; |
| 1230 | BTRFS_I(inode)->delalloc_bytes -= end - start + 1; | 1206 | BTRFS_I(inode)->delalloc_bytes -= end - start + 1; |
| 1231 | } | 1207 | } |
| @@ -2245,10 +2221,6 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry) | |||
| 2245 | 2221 | ||
| 2246 | root = BTRFS_I(dir)->root; | 2222 | root = BTRFS_I(dir)->root; |
| 2247 | 2223 | ||
| 2248 | ret = btrfs_check_free_space(root, 1, 1); | ||
| 2249 | if (ret) | ||
| 2250 | goto fail; | ||
| 2251 | |||
| 2252 | trans = btrfs_start_transaction(root, 1); | 2224 | trans = btrfs_start_transaction(root, 1); |
| 2253 | 2225 | ||
| 2254 | btrfs_set_trans_block_group(trans, dir); | 2226 | btrfs_set_trans_block_group(trans, dir); |
| @@ -2261,7 +2233,6 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry) | |||
| 2261 | nr = trans->blocks_used; | 2233 | nr = trans->blocks_used; |
| 2262 | 2234 | ||
| 2263 | btrfs_end_transaction_throttle(trans, root); | 2235 | btrfs_end_transaction_throttle(trans, root); |
| 2264 | fail: | ||
| 2265 | btrfs_btree_balance_dirty(root, nr); | 2236 | btrfs_btree_balance_dirty(root, nr); |
| 2266 | return ret; | 2237 | return ret; |
| 2267 | } | 2238 | } |
| @@ -2284,10 +2255,6 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
| 2284 | return -ENOTEMPTY; | 2255 | return -ENOTEMPTY; |
| 2285 | } | 2256 | } |
| 2286 | 2257 | ||
| 2287 | ret = btrfs_check_free_space(root, 1, 1); | ||
| 2288 | if (ret) | ||
| 2289 | goto fail; | ||
| 2290 | |||
| 2291 | trans = btrfs_start_transaction(root, 1); | 2258 | trans = btrfs_start_transaction(root, 1); |
| 2292 | btrfs_set_trans_block_group(trans, dir); | 2259 | btrfs_set_trans_block_group(trans, dir); |
| 2293 | 2260 | ||
| @@ -2304,7 +2271,6 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
| 2304 | fail_trans: | 2271 | fail_trans: |
| 2305 | nr = trans->blocks_used; | 2272 | nr = trans->blocks_used; |
| 2306 | ret = btrfs_end_transaction_throttle(trans, root); | 2273 | ret = btrfs_end_transaction_throttle(trans, root); |
| 2307 | fail: | ||
| 2308 | btrfs_btree_balance_dirty(root, nr); | 2274 | btrfs_btree_balance_dirty(root, nr); |
| 2309 | 2275 | ||
| 2310 | if (ret && !err) | 2276 | if (ret && !err) |
| @@ -2531,8 +2497,6 @@ noinline int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans, | |||
| 2531 | key.offset = (u64)-1; | 2497 | key.offset = (u64)-1; |
| 2532 | key.type = (u8)-1; | 2498 | key.type = (u8)-1; |
| 2533 | 2499 | ||
| 2534 | btrfs_init_path(path); | ||
| 2535 | |||
| 2536 | search_again: | 2500 | search_again: |
| 2537 | ret = btrfs_search_slot(trans, root, &key, path, -1, 1); | 2501 | ret = btrfs_search_slot(trans, root, &key, path, -1, 1); |
| 2538 | if (ret < 0) | 2502 | if (ret < 0) |
| @@ -2820,7 +2784,7 @@ int btrfs_cont_expand(struct inode *inode, loff_t size) | |||
| 2820 | if (size <= hole_start) | 2784 | if (size <= hole_start) |
| 2821 | return 0; | 2785 | return 0; |
| 2822 | 2786 | ||
| 2823 | err = btrfs_check_free_space(root, 1, 0); | 2787 | err = btrfs_check_metadata_free_space(root); |
| 2824 | if (err) | 2788 | if (err) |
| 2825 | return err; | 2789 | return err; |
| 2826 | 2790 | ||
| @@ -3016,6 +2980,7 @@ static noinline void init_btrfs_i(struct inode *inode) | |||
| 3016 | bi->last_trans = 0; | 2980 | bi->last_trans = 0; |
| 3017 | bi->logged_trans = 0; | 2981 | bi->logged_trans = 0; |
| 3018 | bi->delalloc_bytes = 0; | 2982 | bi->delalloc_bytes = 0; |
| 2983 | bi->reserved_bytes = 0; | ||
| 3019 | bi->disk_i_size = 0; | 2984 | bi->disk_i_size = 0; |
| 3020 | bi->flags = 0; | 2985 | bi->flags = 0; |
| 3021 | bi->index_cnt = (u64)-1; | 2986 | bi->index_cnt = (u64)-1; |
| @@ -3037,6 +3002,7 @@ static int btrfs_init_locked_inode(struct inode *inode, void *p) | |||
| 3037 | inode->i_ino = args->ino; | 3002 | inode->i_ino = args->ino; |
| 3038 | init_btrfs_i(inode); | 3003 | init_btrfs_i(inode); |
| 3039 | BTRFS_I(inode)->root = args->root; | 3004 | BTRFS_I(inode)->root = args->root; |
| 3005 | btrfs_set_inode_space_info(args->root, inode); | ||
| 3040 | return 0; | 3006 | return 0; |
| 3041 | } | 3007 | } |
| 3042 | 3008 | ||
| @@ -3457,6 +3423,7 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans, | |||
| 3457 | BTRFS_I(inode)->index_cnt = 2; | 3423 | BTRFS_I(inode)->index_cnt = 2; |
| 3458 | BTRFS_I(inode)->root = root; | 3424 | BTRFS_I(inode)->root = root; |
| 3459 | BTRFS_I(inode)->generation = trans->transid; | 3425 | BTRFS_I(inode)->generation = trans->transid; |
| 3426 | btrfs_set_inode_space_info(root, inode); | ||
| 3460 | 3427 | ||
| 3461 | if (mode & S_IFDIR) | 3428 | if (mode & S_IFDIR) |
| 3462 | owner = 0; | 3429 | owner = 0; |
| @@ -3604,7 +3571,7 @@ static int btrfs_mknod(struct inode *dir, struct dentry *dentry, | |||
| 3604 | if (!new_valid_dev(rdev)) | 3571 | if (!new_valid_dev(rdev)) |
| 3605 | return -EINVAL; | 3572 | return -EINVAL; |
| 3606 | 3573 | ||
| 3607 | err = btrfs_check_free_space(root, 1, 0); | 3574 | err = btrfs_check_metadata_free_space(root); |
| 3608 | if (err) | 3575 | if (err) |
| 3609 | goto fail; | 3576 | goto fail; |
| 3610 | 3577 | ||
| @@ -3667,7 +3634,7 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry, | |||
| 3667 | u64 objectid; | 3634 | u64 objectid; |
| 3668 | u64 index = 0; | 3635 | u64 index = 0; |
| 3669 | 3636 | ||
| 3670 | err = btrfs_check_free_space(root, 1, 0); | 3637 | err = btrfs_check_metadata_free_space(root); |
| 3671 | if (err) | 3638 | if (err) |
| 3672 | goto fail; | 3639 | goto fail; |
| 3673 | trans = btrfs_start_transaction(root, 1); | 3640 | trans = btrfs_start_transaction(root, 1); |
| @@ -3735,7 +3702,7 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir, | |||
| 3735 | return -ENOENT; | 3702 | return -ENOENT; |
| 3736 | 3703 | ||
| 3737 | btrfs_inc_nlink(inode); | 3704 | btrfs_inc_nlink(inode); |
| 3738 | err = btrfs_check_free_space(root, 1, 0); | 3705 | err = btrfs_check_metadata_free_space(root); |
| 3739 | if (err) | 3706 | if (err) |
| 3740 | goto fail; | 3707 | goto fail; |
| 3741 | err = btrfs_set_inode_index(dir, &index); | 3708 | err = btrfs_set_inode_index(dir, &index); |
| @@ -3781,7 +3748,7 @@ static int btrfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
| 3781 | u64 index = 0; | 3748 | u64 index = 0; |
| 3782 | unsigned long nr = 1; | 3749 | unsigned long nr = 1; |
| 3783 | 3750 | ||
| 3784 | err = btrfs_check_free_space(root, 1, 0); | 3751 | err = btrfs_check_metadata_free_space(root); |
| 3785 | if (err) | 3752 | if (err) |
| 3786 | goto out_unlock; | 3753 | goto out_unlock; |
| 3787 | 3754 | ||
| @@ -4263,7 +4230,7 @@ static int btrfs_releasepage(struct page *page, gfp_t gfp_flags) | |||
| 4263 | { | 4230 | { |
| 4264 | if (PageWriteback(page) || PageDirty(page)) | 4231 | if (PageWriteback(page) || PageDirty(page)) |
| 4265 | return 0; | 4232 | return 0; |
| 4266 | return __btrfs_releasepage(page, gfp_flags); | 4233 | return __btrfs_releasepage(page, gfp_flags & GFP_NOFS); |
| 4267 | } | 4234 | } |
| 4268 | 4235 | ||
| 4269 | static void btrfs_invalidatepage(struct page *page, unsigned long offset) | 4236 | static void btrfs_invalidatepage(struct page *page, unsigned long offset) |
| @@ -4338,7 +4305,7 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct page *page) | |||
| 4338 | u64 page_start; | 4305 | u64 page_start; |
| 4339 | u64 page_end; | 4306 | u64 page_end; |
| 4340 | 4307 | ||
| 4341 | ret = btrfs_check_free_space(root, PAGE_CACHE_SIZE, 0); | 4308 | ret = btrfs_check_data_free_space(root, inode, PAGE_CACHE_SIZE); |
| 4342 | if (ret) | 4309 | if (ret) |
| 4343 | goto out; | 4310 | goto out; |
| 4344 | 4311 | ||
| @@ -4351,6 +4318,7 @@ again: | |||
| 4351 | 4318 | ||
| 4352 | if ((page->mapping != inode->i_mapping) || | 4319 | if ((page->mapping != inode->i_mapping) || |
| 4353 | (page_start >= size)) { | 4320 | (page_start >= size)) { |
| 4321 | btrfs_free_reserved_data_space(root, inode, PAGE_CACHE_SIZE); | ||
| 4354 | /* page got truncated out from underneath us */ | 4322 | /* page got truncated out from underneath us */ |
| 4355 | goto out_unlock; | 4323 | goto out_unlock; |
| 4356 | } | 4324 | } |
| @@ -4633,7 +4601,7 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
| 4633 | if (old_inode->i_ino == BTRFS_FIRST_FREE_OBJECTID) | 4601 | if (old_inode->i_ino == BTRFS_FIRST_FREE_OBJECTID) |
| 4634 | return -EXDEV; | 4602 | return -EXDEV; |
| 4635 | 4603 | ||
| 4636 | ret = btrfs_check_free_space(root, 1, 0); | 4604 | ret = btrfs_check_metadata_free_space(root); |
| 4637 | if (ret) | 4605 | if (ret) |
| 4638 | goto out_unlock; | 4606 | goto out_unlock; |
| 4639 | 4607 | ||
| @@ -4751,7 +4719,7 @@ static int btrfs_symlink(struct inode *dir, struct dentry *dentry, | |||
| 4751 | if (name_len > BTRFS_MAX_INLINE_DATA_SIZE(root)) | 4719 | if (name_len > BTRFS_MAX_INLINE_DATA_SIZE(root)) |
| 4752 | return -ENAMETOOLONG; | 4720 | return -ENAMETOOLONG; |
| 4753 | 4721 | ||
| 4754 | err = btrfs_check_free_space(root, 1, 0); | 4722 | err = btrfs_check_metadata_free_space(root); |
| 4755 | if (err) | 4723 | if (err) |
| 4756 | goto out_fail; | 4724 | goto out_fail; |
| 4757 | 4725 | ||
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 988fdc8b49eb..bca729fc80c8 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c | |||
| @@ -70,7 +70,7 @@ static noinline int create_subvol(struct btrfs_root *root, | |||
| 70 | u64 index = 0; | 70 | u64 index = 0; |
| 71 | unsigned long nr = 1; | 71 | unsigned long nr = 1; |
| 72 | 72 | ||
| 73 | ret = btrfs_check_free_space(root, 1, 0); | 73 | ret = btrfs_check_metadata_free_space(root); |
| 74 | if (ret) | 74 | if (ret) |
| 75 | goto fail_commit; | 75 | goto fail_commit; |
| 76 | 76 | ||
| @@ -203,7 +203,7 @@ static int create_snapshot(struct btrfs_root *root, struct dentry *dentry, | |||
| 203 | if (!root->ref_cows) | 203 | if (!root->ref_cows) |
| 204 | return -EINVAL; | 204 | return -EINVAL; |
| 205 | 205 | ||
| 206 | ret = btrfs_check_free_space(root, 1, 0); | 206 | ret = btrfs_check_metadata_free_space(root); |
| 207 | if (ret) | 207 | if (ret) |
| 208 | goto fail_unlock; | 208 | goto fail_unlock; |
| 209 | 209 | ||
| @@ -374,7 +374,7 @@ static int btrfs_defrag_file(struct file *file) | |||
| 374 | unsigned long i; | 374 | unsigned long i; |
| 375 | int ret; | 375 | int ret; |
| 376 | 376 | ||
| 377 | ret = btrfs_check_free_space(root, inode->i_size, 0); | 377 | ret = btrfs_check_data_free_space(root, inode, inode->i_size); |
| 378 | if (ret) | 378 | if (ret) |
| 379 | return -ENOSPC; | 379 | return -ENOSPC; |
| 380 | 380 | ||
diff --git a/fs/btrfs/locking.c b/fs/btrfs/locking.c index 68fd9ccf1805..47b0a88c12a2 100644 --- a/fs/btrfs/locking.c +++ b/fs/btrfs/locking.c | |||
| @@ -25,21 +25,10 @@ | |||
| 25 | #include "extent_io.h" | 25 | #include "extent_io.h" |
| 26 | #include "locking.h" | 26 | #include "locking.h" |
| 27 | 27 | ||
| 28 | /* | ||
| 29 | * btrfs_header_level() isn't free, so don't call it when lockdep isn't | ||
| 30 | * on | ||
| 31 | */ | ||
| 32 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
| 33 | static inline void spin_nested(struct extent_buffer *eb) | ||
| 34 | { | ||
| 35 | spin_lock_nested(&eb->lock, BTRFS_MAX_LEVEL - btrfs_header_level(eb)); | ||
| 36 | } | ||
| 37 | #else | ||
| 38 | static inline void spin_nested(struct extent_buffer *eb) | 28 | static inline void spin_nested(struct extent_buffer *eb) |
| 39 | { | 29 | { |
| 40 | spin_lock(&eb->lock); | 30 | spin_lock(&eb->lock); |
| 41 | } | 31 | } |
| 42 | #endif | ||
| 43 | 32 | ||
| 44 | /* | 33 | /* |
| 45 | * Setting a lock to blocking will drop the spinlock and set the | 34 | * Setting a lock to blocking will drop the spinlock and set the |
| @@ -231,30 +220,8 @@ int btrfs_tree_unlock(struct extent_buffer *eb) | |||
| 231 | return 0; | 220 | return 0; |
| 232 | } | 221 | } |
| 233 | 222 | ||
| 234 | int btrfs_tree_locked(struct extent_buffer *eb) | 223 | void btrfs_assert_tree_locked(struct extent_buffer *eb) |
| 235 | { | ||
| 236 | return test_bit(EXTENT_BUFFER_BLOCKING, &eb->bflags) || | ||
| 237 | spin_is_locked(&eb->lock); | ||
| 238 | } | ||
| 239 | |||
| 240 | /* | ||
| 241 | * btrfs_search_slot uses this to decide if it should drop its locks | ||
| 242 | * before doing something expensive like allocating free blocks for cow. | ||
| 243 | */ | ||
| 244 | int btrfs_path_lock_waiting(struct btrfs_path *path, int level) | ||
| 245 | { | 224 | { |
| 246 | int i; | 225 | if (!test_bit(EXTENT_BUFFER_BLOCKING, &eb->bflags)) |
| 247 | struct extent_buffer *eb; | 226 | assert_spin_locked(&eb->lock); |
| 248 | |||
| 249 | for (i = level; i <= level + 1 && i < BTRFS_MAX_LEVEL; i++) { | ||
| 250 | eb = path->nodes[i]; | ||
| 251 | if (!eb) | ||
| 252 | break; | ||
| 253 | smp_mb(); | ||
| 254 | if (spin_is_contended(&eb->lock) || | ||
| 255 | waitqueue_active(&eb->lock_wq)) | ||
| 256 | return 1; | ||
| 257 | } | ||
| 258 | return 0; | ||
| 259 | } | 227 | } |
| 260 | |||
diff --git a/fs/btrfs/locking.h b/fs/btrfs/locking.h index d92e707f5870..6c4ce457168c 100644 --- a/fs/btrfs/locking.h +++ b/fs/btrfs/locking.h | |||
| @@ -21,13 +21,11 @@ | |||
| 21 | 21 | ||
| 22 | int btrfs_tree_lock(struct extent_buffer *eb); | 22 | int btrfs_tree_lock(struct extent_buffer *eb); |
| 23 | int btrfs_tree_unlock(struct extent_buffer *eb); | 23 | int btrfs_tree_unlock(struct extent_buffer *eb); |
| 24 | int btrfs_tree_locked(struct extent_buffer *eb); | ||
| 25 | 24 | ||
| 26 | int btrfs_try_tree_lock(struct extent_buffer *eb); | 25 | int btrfs_try_tree_lock(struct extent_buffer *eb); |
| 27 | int btrfs_try_spin_lock(struct extent_buffer *eb); | 26 | int btrfs_try_spin_lock(struct extent_buffer *eb); |
| 28 | 27 | ||
| 29 | int btrfs_path_lock_waiting(struct btrfs_path *path, int level); | ||
| 30 | |||
| 31 | void btrfs_set_lock_blocking(struct extent_buffer *eb); | 28 | void btrfs_set_lock_blocking(struct extent_buffer *eb); |
| 32 | void btrfs_clear_lock_blocking(struct extent_buffer *eb); | 29 | void btrfs_clear_lock_blocking(struct extent_buffer *eb); |
| 30 | void btrfs_assert_tree_locked(struct extent_buffer *eb); | ||
| 33 | #endif | 31 | #endif |
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index f3fd7e2cbc38..19a4daf03ccb 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c | |||
| @@ -379,7 +379,6 @@ int btrfs_sync_fs(struct super_block *sb, int wait) | |||
| 379 | btrfs_start_delalloc_inodes(root); | 379 | btrfs_start_delalloc_inodes(root); |
| 380 | btrfs_wait_ordered_extents(root, 0); | 380 | btrfs_wait_ordered_extents(root, 0); |
| 381 | 381 | ||
| 382 | btrfs_clean_old_snapshots(root); | ||
| 383 | trans = btrfs_start_transaction(root, 1); | 382 | trans = btrfs_start_transaction(root, 1); |
| 384 | ret = btrfs_commit_transaction(trans, root); | 383 | ret = btrfs_commit_transaction(trans, root); |
| 385 | sb->s_dirt = 0; | 384 | sb->s_dirt = 0; |
| @@ -511,6 +510,10 @@ static int btrfs_remount(struct super_block *sb, int *flags, char *data) | |||
| 511 | struct btrfs_root *root = btrfs_sb(sb); | 510 | struct btrfs_root *root = btrfs_sb(sb); |
| 512 | int ret; | 511 | int ret; |
| 513 | 512 | ||
| 513 | ret = btrfs_parse_options(root, data); | ||
| 514 | if (ret) | ||
| 515 | return -EINVAL; | ||
| 516 | |||
| 514 | if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) | 517 | if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) |
| 515 | return 0; | 518 | return 0; |
| 516 | 519 | ||
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 919172de5c9a..4112d53d4f4d 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c | |||
| @@ -688,7 +688,9 @@ static noinline int drop_dirty_roots(struct btrfs_root *tree_root, | |||
| 688 | num_bytes -= btrfs_root_used(&dirty->root->root_item); | 688 | num_bytes -= btrfs_root_used(&dirty->root->root_item); |
| 689 | bytes_used = btrfs_root_used(&root->root_item); | 689 | bytes_used = btrfs_root_used(&root->root_item); |
| 690 | if (num_bytes) { | 690 | if (num_bytes) { |
| 691 | mutex_lock(&root->fs_info->trans_mutex); | ||
| 691 | btrfs_record_root_in_trans(root); | 692 | btrfs_record_root_in_trans(root); |
| 693 | mutex_unlock(&root->fs_info->trans_mutex); | ||
| 692 | btrfs_set_root_used(&root->root_item, | 694 | btrfs_set_root_used(&root->root_item, |
| 693 | bytes_used - num_bytes); | 695 | bytes_used - num_bytes); |
| 694 | } | 696 | } |
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 20794290256b..9c462fbd60fa 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c | |||
| @@ -2832,7 +2832,9 @@ again: | |||
| 2832 | BUG_ON(!wc.replay_dest); | 2832 | BUG_ON(!wc.replay_dest); |
| 2833 | 2833 | ||
| 2834 | wc.replay_dest->log_root = log; | 2834 | wc.replay_dest->log_root = log; |
| 2835 | mutex_lock(&fs_info->trans_mutex); | ||
| 2835 | btrfs_record_root_in_trans(wc.replay_dest); | 2836 | btrfs_record_root_in_trans(wc.replay_dest); |
| 2837 | mutex_unlock(&fs_info->trans_mutex); | ||
| 2836 | ret = walk_log_tree(trans, log, &wc); | 2838 | ret = walk_log_tree(trans, log, &wc); |
| 2837 | BUG_ON(ret); | 2839 | BUG_ON(ret); |
| 2838 | 2840 | ||
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index bcd14ebccae1..1316139bf9e8 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c | |||
| @@ -2894,10 +2894,6 @@ static int read_one_chunk(struct btrfs_root *root, struct btrfs_key *key, | |||
| 2894 | free_extent_map(em); | 2894 | free_extent_map(em); |
| 2895 | } | 2895 | } |
| 2896 | 2896 | ||
| 2897 | map = kzalloc(sizeof(*map), GFP_NOFS); | ||
| 2898 | if (!map) | ||
| 2899 | return -ENOMEM; | ||
| 2900 | |||
| 2901 | em = alloc_extent_map(GFP_NOFS); | 2897 | em = alloc_extent_map(GFP_NOFS); |
| 2902 | if (!em) | 2898 | if (!em) |
| 2903 | return -ENOMEM; | 2899 | return -ENOMEM; |
| @@ -3106,6 +3102,8 @@ int btrfs_read_sys_array(struct btrfs_root *root) | |||
| 3106 | if (!sb) | 3102 | if (!sb) |
| 3107 | return -ENOMEM; | 3103 | return -ENOMEM; |
| 3108 | btrfs_set_buffer_uptodate(sb); | 3104 | btrfs_set_buffer_uptodate(sb); |
| 3105 | btrfs_set_buffer_lockdep_class(sb, 0); | ||
| 3106 | |||
| 3109 | write_extent_buffer(sb, super_copy, 0, BTRFS_SUPER_INFO_SIZE); | 3107 | write_extent_buffer(sb, super_copy, 0, BTRFS_SUPER_INFO_SIZE); |
| 3110 | array_size = btrfs_super_sys_array_size(super_copy); | 3108 | array_size = btrfs_super_sys_array_size(super_copy); |
| 3111 | 3109 | ||
diff --git a/fs/buffer.c b/fs/buffer.c index 665d446b25bc..9f697419ed8e 100644 --- a/fs/buffer.c +++ b/fs/buffer.c | |||
| @@ -777,6 +777,7 @@ static int __set_page_dirty(struct page *page, | |||
| 777 | __inc_zone_page_state(page, NR_FILE_DIRTY); | 777 | __inc_zone_page_state(page, NR_FILE_DIRTY); |
| 778 | __inc_bdi_stat(mapping->backing_dev_info, | 778 | __inc_bdi_stat(mapping->backing_dev_info, |
| 779 | BDI_RECLAIMABLE); | 779 | BDI_RECLAIMABLE); |
| 780 | task_dirty_inc(current); | ||
| 780 | task_io_account_write(PAGE_CACHE_SIZE); | 781 | task_io_account_write(PAGE_CACHE_SIZE); |
| 781 | } | 782 | } |
| 782 | radix_tree_tag_set(&mapping->page_tree, | 783 | radix_tree_tag_set(&mapping->page_tree, |
| @@ -3108,7 +3109,7 @@ int sync_dirty_buffer(struct buffer_head *bh) | |||
| 3108 | if (test_clear_buffer_dirty(bh)) { | 3109 | if (test_clear_buffer_dirty(bh)) { |
| 3109 | get_bh(bh); | 3110 | get_bh(bh); |
| 3110 | bh->b_end_io = end_buffer_write_sync; | 3111 | bh->b_end_io = end_buffer_write_sync; |
| 3111 | ret = submit_bh(WRITE_SYNC, bh); | 3112 | ret = submit_bh(WRITE, bh); |
| 3112 | wait_on_buffer(bh); | 3113 | wait_on_buffer(bh); |
| 3113 | if (buffer_eopnotsupp(bh)) { | 3114 | if (buffer_eopnotsupp(bh)) { |
| 3114 | clear_buffer_eopnotsupp(bh); | 3115 | clear_buffer_eopnotsupp(bh); |
diff --git a/fs/cifs/CHANGES b/fs/cifs/CHANGES index 73ac7ebd1dfc..851388fafc73 100644 --- a/fs/cifs/CHANGES +++ b/fs/cifs/CHANGES | |||
| @@ -1,3 +1,13 @@ | |||
| 1 | Version 1.57 | ||
| 2 | ------------ | ||
| 3 | Improve support for multiple security contexts to the same server. We | ||
| 4 | used to use the same "vcnumber" for all connections which could cause | ||
| 5 | the server to treat subsequent connections, especially those that | ||
| 6 | are authenticated as guest, as reconnections, invalidating the earlier | ||
| 7 | user's smb session. This fix allows cifs to mount multiple times to the | ||
| 8 | same server with different userids without risking invalidating earlier | ||
| 9 | established security contexts. | ||
| 10 | |||
| 1 | Version 1.56 | 11 | Version 1.56 |
| 2 | ------------ | 12 | ------------ |
| 3 | Add "forcemandatorylock" mount option to allow user to use mandatory | 13 | Add "forcemandatorylock" mount option to allow user to use mandatory |
| @@ -7,7 +17,10 @@ specified and user does not have access to query information about the | |||
| 7 | top of the share. Fix problem in 2.6.28 resolving DFS paths to | 17 | top of the share. Fix problem in 2.6.28 resolving DFS paths to |
| 8 | Samba servers (worked to Windows). Fix rmdir so that pending search | 18 | Samba servers (worked to Windows). Fix rmdir so that pending search |
| 9 | (readdir) requests do not get invalid results which include the now | 19 | (readdir) requests do not get invalid results which include the now |
| 10 | removed directory. | 20 | removed directory. Fix oops in cifs_dfs_ref.c when prefixpath is not reachable |
| 21 | when using DFS. Add better file create support to servers which support | ||
| 22 | the CIFS POSIX protocol extensions (this adds support for new flags | ||
| 23 | on create, and improves semantics for write of locked ranges). | ||
| 11 | 24 | ||
| 12 | Version 1.55 | 25 | Version 1.55 |
| 13 | ------------ | 26 | ------------ |
diff --git a/fs/cifs/cifsfs.h b/fs/cifs/cifsfs.h index 7ac481841f87..2b1d28a9ee28 100644 --- a/fs/cifs/cifsfs.h +++ b/fs/cifs/cifsfs.h | |||
| @@ -100,5 +100,5 @@ extern long cifs_ioctl(struct file *filep, unsigned int cmd, unsigned long arg); | |||
| 100 | extern const struct export_operations cifs_export_ops; | 100 | extern const struct export_operations cifs_export_ops; |
| 101 | #endif /* EXPERIMENTAL */ | 101 | #endif /* EXPERIMENTAL */ |
| 102 | 102 | ||
| 103 | #define CIFS_VERSION "1.56" | 103 | #define CIFS_VERSION "1.57" |
| 104 | #endif /* _CIFSFS_H */ | 104 | #endif /* _CIFSFS_H */ |
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h index 94c1ca0ec953..e004f6db5fc8 100644 --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h | |||
| @@ -164,9 +164,12 @@ struct TCP_Server_Info { | |||
| 164 | /* multiplexed reads or writes */ | 164 | /* multiplexed reads or writes */ |
| 165 | unsigned int maxBuf; /* maxBuf specifies the maximum */ | 165 | unsigned int maxBuf; /* maxBuf specifies the maximum */ |
| 166 | /* message size the server can send or receive for non-raw SMBs */ | 166 | /* message size the server can send or receive for non-raw SMBs */ |
| 167 | unsigned int maxRw; /* maxRw specifies the maximum */ | 167 | unsigned int max_rw; /* maxRw specifies the maximum */ |
| 168 | /* message size the server can send or receive for */ | 168 | /* message size the server can send or receive for */ |
| 169 | /* SMB_COM_WRITE_RAW or SMB_COM_READ_RAW. */ | 169 | /* SMB_COM_WRITE_RAW or SMB_COM_READ_RAW. */ |
| 170 | unsigned int max_vcs; /* maximum number of smb sessions, at least | ||
| 171 | those that can be specified uniquely with | ||
| 172 | vcnumbers */ | ||
| 170 | char sessid[4]; /* unique token id for this session */ | 173 | char sessid[4]; /* unique token id for this session */ |
| 171 | /* (returned on Negotiate */ | 174 | /* (returned on Negotiate */ |
| 172 | int capabilities; /* allow selective disabling of caps by smb sess */ | 175 | int capabilities; /* allow selective disabling of caps by smb sess */ |
| @@ -210,6 +213,7 @@ struct cifsSesInfo { | |||
| 210 | unsigned overrideSecFlg; /* if non-zero override global sec flags */ | 213 | unsigned overrideSecFlg; /* if non-zero override global sec flags */ |
| 211 | __u16 ipc_tid; /* special tid for connection to IPC share */ | 214 | __u16 ipc_tid; /* special tid for connection to IPC share */ |
| 212 | __u16 flags; | 215 | __u16 flags; |
| 216 | __u16 vcnum; | ||
| 213 | char *serverOS; /* name of operating system underlying server */ | 217 | char *serverOS; /* name of operating system underlying server */ |
| 214 | char *serverNOS; /* name of network operating system of server */ | 218 | char *serverNOS; /* name of network operating system of server */ |
| 215 | char *serverDomain; /* security realm of server */ | 219 | char *serverDomain; /* security realm of server */ |
diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h index 382ba6298809..083dfc57c7a3 100644 --- a/fs/cifs/cifsproto.h +++ b/fs/cifs/cifsproto.h | |||
| @@ -42,6 +42,7 @@ extern void _FreeXid(unsigned int); | |||
| 42 | #define GetXid() (int)_GetXid(); cFYI(1,("CIFS VFS: in %s as Xid: %d with uid: %d",__func__, xid,current_fsuid())); | 42 | #define GetXid() (int)_GetXid(); cFYI(1,("CIFS VFS: in %s as Xid: %d with uid: %d",__func__, xid,current_fsuid())); |
| 43 | #define FreeXid(curr_xid) {_FreeXid(curr_xid); cFYI(1,("CIFS VFS: leaving %s (xid = %d) rc = %d",__func__,curr_xid,(int)rc));} | 43 | #define FreeXid(curr_xid) {_FreeXid(curr_xid); cFYI(1,("CIFS VFS: leaving %s (xid = %d) rc = %d",__func__,curr_xid,(int)rc));} |
| 44 | extern char *build_path_from_dentry(struct dentry *); | 44 | extern char *build_path_from_dentry(struct dentry *); |
| 45 | extern char *cifs_build_path_to_root(struct cifs_sb_info *cifs_sb); | ||
| 45 | extern char *build_wildcard_path_from_dentry(struct dentry *direntry); | 46 | extern char *build_wildcard_path_from_dentry(struct dentry *direntry); |
| 46 | /* extern void renew_parental_timestamps(struct dentry *direntry);*/ | 47 | /* extern void renew_parental_timestamps(struct dentry *direntry);*/ |
| 47 | extern int SendReceive(const unsigned int /* xid */ , struct cifsSesInfo *, | 48 | extern int SendReceive(const unsigned int /* xid */ , struct cifsSesInfo *, |
| @@ -91,6 +92,9 @@ extern u64 cifs_UnixTimeToNT(struct timespec); | |||
| 91 | extern __le64 cnvrtDosCifsTm(__u16 date, __u16 time); | 92 | extern __le64 cnvrtDosCifsTm(__u16 date, __u16 time); |
| 92 | extern struct timespec cnvrtDosUnixTm(__u16 date, __u16 time); | 93 | extern struct timespec cnvrtDosUnixTm(__u16 date, __u16 time); |
| 93 | 94 | ||
| 95 | extern void posix_fill_in_inode(struct inode *tmp_inode, | ||
| 96 | FILE_UNIX_BASIC_INFO *pData, int isNewInode); | ||
| 97 | extern struct inode *cifs_new_inode(struct super_block *sb, __u64 *inum); | ||
| 94 | extern int cifs_get_inode_info(struct inode **pinode, | 98 | extern int cifs_get_inode_info(struct inode **pinode, |
| 95 | const unsigned char *search_path, | 99 | const unsigned char *search_path, |
| 96 | FILE_ALL_INFO *pfile_info, | 100 | FILE_ALL_INFO *pfile_info, |
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c index 552642a507c4..939e2f76b959 100644 --- a/fs/cifs/cifssmb.c +++ b/fs/cifs/cifssmb.c | |||
| @@ -528,14 +528,15 @@ CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses) | |||
| 528 | server->maxReq = le16_to_cpu(rsp->MaxMpxCount); | 528 | server->maxReq = le16_to_cpu(rsp->MaxMpxCount); |
| 529 | server->maxBuf = min((__u32)le16_to_cpu(rsp->MaxBufSize), | 529 | server->maxBuf = min((__u32)le16_to_cpu(rsp->MaxBufSize), |
| 530 | (__u32)CIFSMaxBufSize + MAX_CIFS_HDR_SIZE); | 530 | (__u32)CIFSMaxBufSize + MAX_CIFS_HDR_SIZE); |
| 531 | server->max_vcs = le16_to_cpu(rsp->MaxNumberVcs); | ||
| 531 | GETU32(server->sessid) = le32_to_cpu(rsp->SessionKey); | 532 | GETU32(server->sessid) = le32_to_cpu(rsp->SessionKey); |
| 532 | /* even though we do not use raw we might as well set this | 533 | /* even though we do not use raw we might as well set this |
| 533 | accurately, in case we ever find a need for it */ | 534 | accurately, in case we ever find a need for it */ |
| 534 | if ((le16_to_cpu(rsp->RawMode) & RAW_ENABLE) == RAW_ENABLE) { | 535 | if ((le16_to_cpu(rsp->RawMode) & RAW_ENABLE) == RAW_ENABLE) { |
| 535 | server->maxRw = 0xFF00; | 536 | server->max_rw = 0xFF00; |
| 536 | server->capabilities = CAP_MPX_MODE | CAP_RAW_MODE; | 537 | server->capabilities = CAP_MPX_MODE | CAP_RAW_MODE; |
| 537 | } else { | 538 | } else { |
| 538 | server->maxRw = 0;/* we do not need to use raw anyway */ | 539 | server->max_rw = 0;/* do not need to use raw anyway */ |
| 539 | server->capabilities = CAP_MPX_MODE; | 540 | server->capabilities = CAP_MPX_MODE; |
| 540 | } | 541 | } |
| 541 | tmp = (__s16)le16_to_cpu(rsp->ServerTimeZone); | 542 | tmp = (__s16)le16_to_cpu(rsp->ServerTimeZone); |
| @@ -638,7 +639,7 @@ CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses) | |||
| 638 | /* probably no need to store and check maxvcs */ | 639 | /* probably no need to store and check maxvcs */ |
| 639 | server->maxBuf = min(le32_to_cpu(pSMBr->MaxBufferSize), | 640 | server->maxBuf = min(le32_to_cpu(pSMBr->MaxBufferSize), |
| 640 | (__u32) CIFSMaxBufSize + MAX_CIFS_HDR_SIZE); | 641 | (__u32) CIFSMaxBufSize + MAX_CIFS_HDR_SIZE); |
| 641 | server->maxRw = le32_to_cpu(pSMBr->MaxRawSize); | 642 | server->max_rw = le32_to_cpu(pSMBr->MaxRawSize); |
| 642 | cFYI(DBG2, ("Max buf = %d", ses->server->maxBuf)); | 643 | cFYI(DBG2, ("Max buf = %d", ses->server->maxBuf)); |
| 643 | GETU32(ses->server->sessid) = le32_to_cpu(pSMBr->SessionKey); | 644 | GETU32(ses->server->sessid) = le32_to_cpu(pSMBr->SessionKey); |
| 644 | server->capabilities = le32_to_cpu(pSMBr->Capabilities); | 645 | server->capabilities = le32_to_cpu(pSMBr->Capabilities); |
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 2209be943051..da0f4ffa0613 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c | |||
| @@ -23,7 +23,6 @@ | |||
| 23 | #include <linux/string.h> | 23 | #include <linux/string.h> |
| 24 | #include <linux/list.h> | 24 | #include <linux/list.h> |
| 25 | #include <linux/wait.h> | 25 | #include <linux/wait.h> |
| 26 | #include <linux/ipv6.h> | ||
| 27 | #include <linux/pagemap.h> | 26 | #include <linux/pagemap.h> |
| 28 | #include <linux/ctype.h> | 27 | #include <linux/ctype.h> |
| 29 | #include <linux/utsname.h> | 28 | #include <linux/utsname.h> |
| @@ -35,6 +34,7 @@ | |||
| 35 | #include <linux/freezer.h> | 34 | #include <linux/freezer.h> |
| 36 | #include <asm/uaccess.h> | 35 | #include <asm/uaccess.h> |
| 37 | #include <asm/processor.h> | 36 | #include <asm/processor.h> |
| 37 | #include <net/ipv6.h> | ||
| 38 | #include "cifspdu.h" | 38 | #include "cifspdu.h" |
| 39 | #include "cifsglob.h" | 39 | #include "cifsglob.h" |
| 40 | #include "cifsproto.h" | 40 | #include "cifsproto.h" |
| @@ -1379,8 +1379,8 @@ cifs_find_tcp_session(struct sockaddr_storage *addr) | |||
| 1379 | server->addr.sockAddr.sin_addr.s_addr)) | 1379 | server->addr.sockAddr.sin_addr.s_addr)) |
| 1380 | continue; | 1380 | continue; |
| 1381 | else if (addr->ss_family == AF_INET6 && | 1381 | else if (addr->ss_family == AF_INET6 && |
| 1382 | memcmp(&server->addr.sockAddr6.sin6_addr, | 1382 | !ipv6_addr_equal(&server->addr.sockAddr6.sin6_addr, |
| 1383 | &addr6->sin6_addr, sizeof(addr6->sin6_addr))) | 1383 | &addr6->sin6_addr)) |
| 1384 | continue; | 1384 | continue; |
| 1385 | 1385 | ||
| 1386 | ++server->srv_count; | 1386 | ++server->srv_count; |
| @@ -2180,6 +2180,33 @@ static void setup_cifs_sb(struct smb_vol *pvolume_info, | |||
| 2180 | "mount option supported")); | 2180 | "mount option supported")); |
| 2181 | } | 2181 | } |
| 2182 | 2182 | ||
| 2183 | static int | ||
| 2184 | is_path_accessible(int xid, struct cifsTconInfo *tcon, | ||
| 2185 | struct cifs_sb_info *cifs_sb, const char *full_path) | ||
| 2186 | { | ||
| 2187 | int rc; | ||
| 2188 | __u64 inode_num; | ||
| 2189 | FILE_ALL_INFO *pfile_info; | ||
| 2190 | |||
| 2191 | rc = CIFSGetSrvInodeNumber(xid, tcon, full_path, &inode_num, | ||
| 2192 | cifs_sb->local_nls, | ||
| 2193 | cifs_sb->mnt_cifs_flags & | ||
| 2194 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 2195 | if (rc != -EOPNOTSUPP) | ||
| 2196 | return rc; | ||
| 2197 | |||
| 2198 | pfile_info = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL); | ||
| 2199 | if (pfile_info == NULL) | ||
| 2200 | return -ENOMEM; | ||
| 2201 | |||
| 2202 | rc = CIFSSMBQPathInfo(xid, tcon, full_path, pfile_info, | ||
| 2203 | 0 /* not legacy */, cifs_sb->local_nls, | ||
| 2204 | cifs_sb->mnt_cifs_flags & | ||
| 2205 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 2206 | kfree(pfile_info); | ||
| 2207 | return rc; | ||
| 2208 | } | ||
| 2209 | |||
| 2183 | int | 2210 | int |
| 2184 | cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb, | 2211 | cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb, |
| 2185 | char *mount_data, const char *devname) | 2212 | char *mount_data, const char *devname) |
| @@ -2190,6 +2217,7 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb, | |||
| 2190 | struct cifsSesInfo *pSesInfo = NULL; | 2217 | struct cifsSesInfo *pSesInfo = NULL; |
| 2191 | struct cifsTconInfo *tcon = NULL; | 2218 | struct cifsTconInfo *tcon = NULL; |
| 2192 | struct TCP_Server_Info *srvTcp = NULL; | 2219 | struct TCP_Server_Info *srvTcp = NULL; |
| 2220 | char *full_path; | ||
| 2193 | 2221 | ||
| 2194 | xid = GetXid(); | 2222 | xid = GetXid(); |
| 2195 | 2223 | ||
| @@ -2426,6 +2454,23 @@ mount_fail_check: | |||
| 2426 | cifs_sb->rsize = min(cifs_sb->rsize, | 2454 | cifs_sb->rsize = min(cifs_sb->rsize, |
| 2427 | (tcon->ses->server->maxBuf - MAX_CIFS_HDR_SIZE)); | 2455 | (tcon->ses->server->maxBuf - MAX_CIFS_HDR_SIZE)); |
| 2428 | 2456 | ||
| 2457 | if (!rc && cifs_sb->prepathlen) { | ||
| 2458 | /* build_path_to_root works only when we have a valid tcon */ | ||
| 2459 | full_path = cifs_build_path_to_root(cifs_sb); | ||
| 2460 | if (full_path == NULL) { | ||
| 2461 | rc = -ENOMEM; | ||
| 2462 | goto mount_fail_check; | ||
| 2463 | } | ||
| 2464 | rc = is_path_accessible(xid, tcon, cifs_sb, full_path); | ||
| 2465 | if (rc) { | ||
| 2466 | cERROR(1, ("Path %s in not accessible: %d", | ||
| 2467 | full_path, rc)); | ||
| 2468 | kfree(full_path); | ||
| 2469 | goto mount_fail_check; | ||
| 2470 | } | ||
| 2471 | kfree(full_path); | ||
| 2472 | } | ||
| 2473 | |||
| 2429 | /* volume_info->password is freed above when existing session found | 2474 | /* volume_info->password is freed above when existing session found |
| 2430 | (in which case it is not needed anymore) but when new sesion is created | 2475 | (in which case it is not needed anymore) but when new sesion is created |
| 2431 | the password ptr is put in the new session structure (in which case the | 2476 | the password ptr is put in the new session structure (in which case the |
diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c index 964aad03c5ad..89fb72832652 100644 --- a/fs/cifs/dir.c +++ b/fs/cifs/dir.c | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | * | 3 | * |
| 4 | * vfs operations that deal with dentries | 4 | * vfs operations that deal with dentries |
| 5 | * | 5 | * |
| 6 | * Copyright (C) International Business Machines Corp., 2002,2008 | 6 | * Copyright (C) International Business Machines Corp., 2002,2009 |
| 7 | * Author(s): Steve French (sfrench@us.ibm.com) | 7 | * Author(s): Steve French (sfrench@us.ibm.com) |
| 8 | * | 8 | * |
| 9 | * This library is free software; you can redistribute it and/or modify | 9 | * This library is free software; you can redistribute it and/or modify |
| @@ -129,6 +129,78 @@ cifs_bp_rename_retry: | |||
| 129 | return full_path; | 129 | return full_path; |
| 130 | } | 130 | } |
| 131 | 131 | ||
| 132 | static int cifs_posix_open(char *full_path, struct inode **pinode, | ||
| 133 | struct super_block *sb, int mode, int oflags, | ||
| 134 | int *poplock, __u16 *pnetfid, int xid) | ||
| 135 | { | ||
| 136 | int rc; | ||
| 137 | __u32 oplock; | ||
| 138 | FILE_UNIX_BASIC_INFO *presp_data; | ||
| 139 | __u32 posix_flags = 0; | ||
| 140 | struct cifs_sb_info *cifs_sb = CIFS_SB(sb); | ||
| 141 | |||
| 142 | cFYI(1, ("posix open %s", full_path)); | ||
| 143 | |||
| 144 | presp_data = kzalloc(sizeof(FILE_UNIX_BASIC_INFO), GFP_KERNEL); | ||
| 145 | if (presp_data == NULL) | ||
| 146 | return -ENOMEM; | ||
| 147 | |||
| 148 | /* So far cifs posix extensions can only map the following flags. | ||
| 149 | There are other valid fmode oflags such as FMODE_LSEEK, FMODE_PREAD, but | ||
| 150 | so far we do not seem to need them, and we can treat them as local only */ | ||
| 151 | if ((oflags & (FMODE_READ | FMODE_WRITE)) == | ||
| 152 | (FMODE_READ | FMODE_WRITE)) | ||
| 153 | posix_flags = SMB_O_RDWR; | ||
| 154 | else if (oflags & FMODE_READ) | ||
| 155 | posix_flags = SMB_O_RDONLY; | ||
| 156 | else if (oflags & FMODE_WRITE) | ||
| 157 | posix_flags = SMB_O_WRONLY; | ||
| 158 | if (oflags & O_CREAT) | ||
| 159 | posix_flags |= SMB_O_CREAT; | ||
| 160 | if (oflags & O_EXCL) | ||
| 161 | posix_flags |= SMB_O_EXCL; | ||
| 162 | if (oflags & O_TRUNC) | ||
| 163 | posix_flags |= SMB_O_TRUNC; | ||
| 164 | if (oflags & O_APPEND) | ||
| 165 | posix_flags |= SMB_O_APPEND; | ||
| 166 | if (oflags & O_SYNC) | ||
| 167 | posix_flags |= SMB_O_SYNC; | ||
| 168 | if (oflags & O_DIRECTORY) | ||
| 169 | posix_flags |= SMB_O_DIRECTORY; | ||
| 170 | if (oflags & O_NOFOLLOW) | ||
| 171 | posix_flags |= SMB_O_NOFOLLOW; | ||
| 172 | if (oflags & O_DIRECT) | ||
| 173 | posix_flags |= SMB_O_DIRECT; | ||
| 174 | |||
| 175 | |||
| 176 | rc = CIFSPOSIXCreate(xid, cifs_sb->tcon, posix_flags, mode, | ||
| 177 | pnetfid, presp_data, &oplock, full_path, | ||
| 178 | cifs_sb->local_nls, cifs_sb->mnt_cifs_flags & | ||
| 179 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 180 | if (rc) | ||
| 181 | goto posix_open_ret; | ||
| 182 | |||
| 183 | if (presp_data->Type == cpu_to_le32(-1)) | ||
| 184 | goto posix_open_ret; /* open ok, caller does qpathinfo */ | ||
| 185 | |||
| 186 | /* get new inode and set it up */ | ||
| 187 | if (!pinode) | ||
| 188 | goto posix_open_ret; /* caller does not need info */ | ||
| 189 | |||
| 190 | *pinode = cifs_new_inode(sb, &presp_data->UniqueId); | ||
| 191 | |||
| 192 | /* We do not need to close the file if new_inode fails since | ||
| 193 | the caller will retry qpathinfo as long as inode is null */ | ||
| 194 | if (*pinode == NULL) | ||
| 195 | goto posix_open_ret; | ||
| 196 | |||
| 197 | posix_fill_in_inode(*pinode, presp_data, 1); | ||
| 198 | |||
| 199 | posix_open_ret: | ||
| 200 | kfree(presp_data); | ||
| 201 | return rc; | ||
| 202 | } | ||
| 203 | |||
| 132 | static void setup_cifs_dentry(struct cifsTconInfo *tcon, | 204 | static void setup_cifs_dentry(struct cifsTconInfo *tcon, |
| 133 | struct dentry *direntry, | 205 | struct dentry *direntry, |
| 134 | struct inode *newinode) | 206 | struct inode *newinode) |
| @@ -150,7 +222,14 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode, | |||
| 150 | int xid; | 222 | int xid; |
| 151 | int create_options = CREATE_NOT_DIR; | 223 | int create_options = CREATE_NOT_DIR; |
| 152 | int oplock = 0; | 224 | int oplock = 0; |
| 153 | /* BB below access is too much for the mknod to request */ | 225 | int oflags; |
| 226 | /* | ||
| 227 | * BB below access is probably too much for mknod to request | ||
| 228 | * but we have to do query and setpathinfo so requesting | ||
| 229 | * less could fail (unless we want to request getatr and setatr | ||
| 230 | * permissions (only). At least for POSIX we do not have to | ||
| 231 | * request so much. | ||
| 232 | */ | ||
| 154 | int desiredAccess = GENERIC_READ | GENERIC_WRITE; | 233 | int desiredAccess = GENERIC_READ | GENERIC_WRITE; |
| 155 | __u16 fileHandle; | 234 | __u16 fileHandle; |
| 156 | struct cifs_sb_info *cifs_sb; | 235 | struct cifs_sb_info *cifs_sb; |
| @@ -174,13 +253,43 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode, | |||
| 174 | } | 253 | } |
| 175 | 254 | ||
| 176 | mode &= ~current->fs->umask; | 255 | mode &= ~current->fs->umask; |
| 256 | if (oplockEnabled) | ||
| 257 | oplock = REQ_OPLOCK; | ||
| 177 | 258 | ||
| 178 | if (nd && (nd->flags & LOOKUP_OPEN)) { | 259 | if (nd && (nd->flags & LOOKUP_OPEN)) |
| 179 | int oflags = nd->intent.open.flags; | 260 | oflags = nd->intent.open.flags; |
| 261 | else | ||
| 262 | oflags = FMODE_READ; | ||
| 263 | |||
| 264 | if (tcon->unix_ext && (tcon->ses->capabilities & CAP_UNIX) && | ||
| 265 | (CIFS_UNIX_POSIX_PATH_OPS_CAP & | ||
| 266 | le64_to_cpu(tcon->fsUnixInfo.Capability))) { | ||
| 267 | rc = cifs_posix_open(full_path, &newinode, inode->i_sb, | ||
| 268 | mode, oflags, &oplock, &fileHandle, xid); | ||
| 269 | /* EIO could indicate that (posix open) operation is not | ||
| 270 | supported, despite what server claimed in capability | ||
| 271 | negotation. EREMOTE indicates DFS junction, which is not | ||
| 272 | handled in posix open */ | ||
| 273 | |||
| 274 | if ((rc == 0) && (newinode == NULL)) | ||
| 275 | goto cifs_create_get_file_info; /* query inode info */ | ||
| 276 | else if (rc == 0) /* success, no need to query */ | ||
| 277 | goto cifs_create_set_dentry; | ||
| 278 | else if ((rc != -EIO) && (rc != -EREMOTE) && | ||
| 279 | (rc != -EOPNOTSUPP)) /* path not found or net err */ | ||
| 280 | goto cifs_create_out; | ||
| 281 | /* else fallthrough to retry, using older open call, this is | ||
| 282 | case where server does not support this SMB level, and | ||
| 283 | falsely claims capability (also get here for DFS case | ||
| 284 | which should be rare for path not covered on files) */ | ||
| 285 | } | ||
| 180 | 286 | ||
| 287 | if (nd && (nd->flags & LOOKUP_OPEN)) { | ||
| 288 | /* if the file is going to stay open, then we | ||
| 289 | need to set the desired access properly */ | ||
| 181 | desiredAccess = 0; | 290 | desiredAccess = 0; |
| 182 | if (oflags & FMODE_READ) | 291 | if (oflags & FMODE_READ) |
| 183 | desiredAccess |= GENERIC_READ; | 292 | desiredAccess |= GENERIC_READ; /* is this too little? */ |
| 184 | if (oflags & FMODE_WRITE) { | 293 | if (oflags & FMODE_WRITE) { |
| 185 | desiredAccess |= GENERIC_WRITE; | 294 | desiredAccess |= GENERIC_WRITE; |
| 186 | if (!(oflags & FMODE_READ)) | 295 | if (!(oflags & FMODE_READ)) |
| @@ -199,8 +308,6 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode, | |||
| 199 | 308 | ||
| 200 | /* BB add processing to set equivalent of mode - e.g. via CreateX with | 309 | /* BB add processing to set equivalent of mode - e.g. via CreateX with |
| 201 | ACLs */ | 310 | ACLs */ |
| 202 | if (oplockEnabled) | ||
| 203 | oplock = REQ_OPLOCK; | ||
| 204 | 311 | ||
| 205 | buf = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL); | 312 | buf = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL); |
| 206 | if (buf == NULL) { | 313 | if (buf == NULL) { |
| @@ -233,116 +340,112 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode, | |||
| 233 | } | 340 | } |
| 234 | if (rc) { | 341 | if (rc) { |
| 235 | cFYI(1, ("cifs_create returned 0x%x", rc)); | 342 | cFYI(1, ("cifs_create returned 0x%x", rc)); |
| 236 | } else { | 343 | goto cifs_create_out; |
| 237 | /* If Open reported that we actually created a file | 344 | } |
| 238 | then we now have to set the mode if possible */ | 345 | |
| 239 | if ((tcon->unix_ext) && (oplock & CIFS_CREATE_ACTION)) { | 346 | /* If Open reported that we actually created a file |
| 240 | struct cifs_unix_set_info_args args = { | 347 | then we now have to set the mode if possible */ |
| 348 | if ((tcon->unix_ext) && (oplock & CIFS_CREATE_ACTION)) { | ||
| 349 | struct cifs_unix_set_info_args args = { | ||
| 241 | .mode = mode, | 350 | .mode = mode, |
| 242 | .ctime = NO_CHANGE_64, | 351 | .ctime = NO_CHANGE_64, |
| 243 | .atime = NO_CHANGE_64, | 352 | .atime = NO_CHANGE_64, |
| 244 | .mtime = NO_CHANGE_64, | 353 | .mtime = NO_CHANGE_64, |
| 245 | .device = 0, | 354 | .device = 0, |
| 246 | }; | 355 | }; |
| 247 | 356 | ||
| 248 | if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) { | 357 | if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) { |
| 249 | args.uid = (__u64) current_fsuid(); | 358 | args.uid = (__u64) current_fsuid(); |
| 250 | if (inode->i_mode & S_ISGID) | 359 | if (inode->i_mode & S_ISGID) |
| 251 | args.gid = (__u64) inode->i_gid; | 360 | args.gid = (__u64) inode->i_gid; |
| 252 | else | 361 | else |
| 253 | args.gid = (__u64) current_fsgid(); | 362 | args.gid = (__u64) current_fsgid(); |
| 254 | } else { | ||
| 255 | args.uid = NO_CHANGE_64; | ||
| 256 | args.gid = NO_CHANGE_64; | ||
| 257 | } | ||
| 258 | CIFSSMBUnixSetInfo(xid, tcon, full_path, &args, | ||
| 259 | cifs_sb->local_nls, | ||
| 260 | cifs_sb->mnt_cifs_flags & | ||
| 261 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 262 | } else { | 363 | } else { |
| 263 | /* BB implement mode setting via Windows security | 364 | args.uid = NO_CHANGE_64; |
| 264 | descriptors e.g. */ | 365 | args.gid = NO_CHANGE_64; |
| 265 | /* CIFSSMBWinSetPerms(xid,tcon,path,mode,-1,-1,nls);*/ | ||
| 266 | |||
| 267 | /* Could set r/o dos attribute if mode & 0222 == 0 */ | ||
| 268 | } | 366 | } |
| 367 | CIFSSMBUnixSetInfo(xid, tcon, full_path, &args, | ||
| 368 | cifs_sb->local_nls, | ||
| 369 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 370 | } else { | ||
| 371 | /* BB implement mode setting via Windows security | ||
| 372 | descriptors e.g. */ | ||
| 373 | /* CIFSSMBWinSetPerms(xid,tcon,path,mode,-1,-1,nls);*/ | ||
| 269 | 374 | ||
| 270 | /* server might mask mode so we have to query for it */ | 375 | /* Could set r/o dos attribute if mode & 0222 == 0 */ |
| 271 | if (tcon->unix_ext) | 376 | } |
| 272 | rc = cifs_get_inode_info_unix(&newinode, full_path, | 377 | |
| 273 | inode->i_sb, xid); | 378 | cifs_create_get_file_info: |
| 274 | else { | 379 | /* server might mask mode so we have to query for it */ |
| 275 | rc = cifs_get_inode_info(&newinode, full_path, | 380 | if (tcon->unix_ext) |
| 276 | buf, inode->i_sb, xid, | 381 | rc = cifs_get_inode_info_unix(&newinode, full_path, |
| 277 | &fileHandle); | 382 | inode->i_sb, xid); |
| 278 | if (newinode) { | 383 | else { |
| 279 | if (cifs_sb->mnt_cifs_flags & | 384 | rc = cifs_get_inode_info(&newinode, full_path, buf, |
| 280 | CIFS_MOUNT_DYNPERM) | 385 | inode->i_sb, xid, &fileHandle); |
| 281 | newinode->i_mode = mode; | 386 | if (newinode) { |
| 282 | if ((oplock & CIFS_CREATE_ACTION) && | 387 | if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DYNPERM) |
| 283 | (cifs_sb->mnt_cifs_flags & | 388 | newinode->i_mode = mode; |
| 284 | CIFS_MOUNT_SET_UID)) { | 389 | if ((oplock & CIFS_CREATE_ACTION) && |
| 285 | newinode->i_uid = current_fsuid(); | 390 | (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID)) { |
| 286 | if (inode->i_mode & S_ISGID) | 391 | newinode->i_uid = current_fsuid(); |
| 287 | newinode->i_gid = | 392 | if (inode->i_mode & S_ISGID) |
| 288 | inode->i_gid; | 393 | newinode->i_gid = inode->i_gid; |
| 289 | else | 394 | else |
| 290 | newinode->i_gid = | 395 | newinode->i_gid = current_fsgid(); |
| 291 | current_fsgid(); | ||
| 292 | } | ||
| 293 | } | 396 | } |
| 294 | } | 397 | } |
| 398 | } | ||
| 295 | 399 | ||
| 296 | if (rc != 0) { | 400 | cifs_create_set_dentry: |
| 297 | cFYI(1, ("Create worked, get_inode_info failed rc = %d", | 401 | if (rc == 0) |
| 298 | rc)); | 402 | setup_cifs_dentry(tcon, direntry, newinode); |
| 299 | } else | 403 | else |
| 300 | setup_cifs_dentry(tcon, direntry, newinode); | 404 | cFYI(1, ("Create worked, get_inode_info failed rc = %d", rc)); |
| 301 | 405 | ||
| 302 | if ((nd == NULL /* nfsd case - nfs srv does not set nd */) || | 406 | /* nfsd case - nfs srv does not set nd */ |
| 303 | (!(nd->flags & LOOKUP_OPEN))) { | 407 | if ((nd == NULL) || (!(nd->flags & LOOKUP_OPEN))) { |
| 304 | /* mknod case - do not leave file open */ | 408 | /* mknod case - do not leave file open */ |
| 305 | CIFSSMBClose(xid, tcon, fileHandle); | 409 | CIFSSMBClose(xid, tcon, fileHandle); |
| 306 | } else if (newinode) { | 410 | } else if (newinode) { |
| 307 | struct cifsFileInfo *pCifsFile = | 411 | struct cifsFileInfo *pCifsFile = |
| 308 | kzalloc(sizeof(struct cifsFileInfo), GFP_KERNEL); | 412 | kzalloc(sizeof(struct cifsFileInfo), GFP_KERNEL); |
| 309 | 413 | ||
| 310 | if (pCifsFile == NULL) | 414 | if (pCifsFile == NULL) |
| 311 | goto cifs_create_out; | 415 | goto cifs_create_out; |
| 312 | pCifsFile->netfid = fileHandle; | 416 | pCifsFile->netfid = fileHandle; |
| 313 | pCifsFile->pid = current->tgid; | 417 | pCifsFile->pid = current->tgid; |
| 314 | pCifsFile->pInode = newinode; | 418 | pCifsFile->pInode = newinode; |
| 315 | pCifsFile->invalidHandle = false; | 419 | pCifsFile->invalidHandle = false; |
| 316 | pCifsFile->closePend = false; | 420 | pCifsFile->closePend = false; |
| 317 | init_MUTEX(&pCifsFile->fh_sem); | 421 | init_MUTEX(&pCifsFile->fh_sem); |
| 318 | mutex_init(&pCifsFile->lock_mutex); | 422 | mutex_init(&pCifsFile->lock_mutex); |
| 319 | INIT_LIST_HEAD(&pCifsFile->llist); | 423 | INIT_LIST_HEAD(&pCifsFile->llist); |
| 320 | atomic_set(&pCifsFile->wrtPending, 0); | 424 | atomic_set(&pCifsFile->wrtPending, 0); |
| 321 | 425 | ||
| 322 | /* set the following in open now | 426 | /* set the following in open now |
| 323 | pCifsFile->pfile = file; */ | 427 | pCifsFile->pfile = file; */ |
| 324 | write_lock(&GlobalSMBSeslock); | 428 | write_lock(&GlobalSMBSeslock); |
| 325 | list_add(&pCifsFile->tlist, &tcon->openFileList); | 429 | list_add(&pCifsFile->tlist, &tcon->openFileList); |
| 326 | pCifsInode = CIFS_I(newinode); | 430 | pCifsInode = CIFS_I(newinode); |
| 327 | if (pCifsInode) { | 431 | if (pCifsInode) { |
| 328 | /* if readable file instance put first in list*/ | 432 | /* if readable file instance put first in list*/ |
| 329 | if (write_only) { | 433 | if (write_only) { |
| 330 | list_add_tail(&pCifsFile->flist, | 434 | list_add_tail(&pCifsFile->flist, |
| 331 | &pCifsInode->openFileList); | 435 | &pCifsInode->openFileList); |
| 332 | } else { | 436 | } else { |
| 333 | list_add(&pCifsFile->flist, | 437 | list_add(&pCifsFile->flist, |
| 334 | &pCifsInode->openFileList); | 438 | &pCifsInode->openFileList); |
| 335 | } | ||
| 336 | if ((oplock & 0xF) == OPLOCK_EXCLUSIVE) { | ||
| 337 | pCifsInode->clientCanCacheAll = true; | ||
| 338 | pCifsInode->clientCanCacheRead = true; | ||
| 339 | cFYI(1, ("Exclusive Oplock inode %p", | ||
| 340 | newinode)); | ||
| 341 | } else if ((oplock & 0xF) == OPLOCK_READ) | ||
| 342 | pCifsInode->clientCanCacheRead = true; | ||
| 343 | } | 439 | } |
| 344 | write_unlock(&GlobalSMBSeslock); | 440 | if ((oplock & 0xF) == OPLOCK_EXCLUSIVE) { |
| 441 | pCifsInode->clientCanCacheAll = true; | ||
| 442 | pCifsInode->clientCanCacheRead = true; | ||
| 443 | cFYI(1, ("Exclusive Oplock inode %p", | ||
| 444 | newinode)); | ||
| 445 | } else if ((oplock & 0xF) == OPLOCK_READ) | ||
| 446 | pCifsInode->clientCanCacheRead = true; | ||
| 345 | } | 447 | } |
| 448 | write_unlock(&GlobalSMBSeslock); | ||
| 346 | } | 449 | } |
| 347 | cifs_create_out: | 450 | cifs_create_out: |
| 348 | kfree(buf); | 451 | kfree(buf); |
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index bcf7b5184664..4690a360c855 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
| @@ -199,6 +199,49 @@ static void fill_fake_finddataunix(FILE_UNIX_BASIC_INFO *pfnd_dat, | |||
| 199 | pfnd_dat->Gid = cpu_to_le64(pinode->i_gid); | 199 | pfnd_dat->Gid = cpu_to_le64(pinode->i_gid); |
| 200 | } | 200 | } |
| 201 | 201 | ||
| 202 | /** | ||
| 203 | * cifs_new inode - create new inode, initialize, and hash it | ||
| 204 | * @sb - pointer to superblock | ||
| 205 | * @inum - if valid pointer and serverino is enabled, replace i_ino with val | ||
| 206 | * | ||
| 207 | * Create a new inode, initialize it for CIFS and hash it. Returns the new | ||
| 208 | * inode or NULL if one couldn't be allocated. | ||
| 209 | * | ||
| 210 | * If the share isn't mounted with "serverino" or inum is a NULL pointer then | ||
| 211 | * we'll just use the inode number assigned by new_inode(). Note that this can | ||
| 212 | * mean i_ino collisions since the i_ino assigned by new_inode is not | ||
| 213 | * guaranteed to be unique. | ||
| 214 | */ | ||
| 215 | struct inode * | ||
| 216 | cifs_new_inode(struct super_block *sb, __u64 *inum) | ||
| 217 | { | ||
| 218 | struct inode *inode; | ||
| 219 | |||
| 220 | inode = new_inode(sb); | ||
| 221 | if (inode == NULL) | ||
| 222 | return NULL; | ||
| 223 | |||
| 224 | /* | ||
| 225 | * BB: Is i_ino == 0 legal? Here, we assume that it is. If it isn't we | ||
| 226 | * stop passing inum as ptr. Are there sanity checks we can use to | ||
| 227 | * ensure that the server is really filling in that field? Also, | ||
| 228 | * if serverino is disabled, perhaps we should be using iunique()? | ||
| 229 | */ | ||
| 230 | if (inum && (CIFS_SB(sb)->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM)) | ||
| 231 | inode->i_ino = (unsigned long) *inum; | ||
| 232 | |||
| 233 | /* | ||
| 234 | * must set this here instead of cifs_alloc_inode since VFS will | ||
| 235 | * clobber i_flags | ||
| 236 | */ | ||
| 237 | if (sb->s_flags & MS_NOATIME) | ||
| 238 | inode->i_flags |= S_NOATIME | S_NOCMTIME; | ||
| 239 | |||
| 240 | insert_inode_hash(inode); | ||
| 241 | |||
| 242 | return inode; | ||
| 243 | } | ||
| 244 | |||
| 202 | int cifs_get_inode_info_unix(struct inode **pinode, | 245 | int cifs_get_inode_info_unix(struct inode **pinode, |
| 203 | const unsigned char *full_path, struct super_block *sb, int xid) | 246 | const unsigned char *full_path, struct super_block *sb, int xid) |
| 204 | { | 247 | { |
| @@ -233,22 +276,11 @@ int cifs_get_inode_info_unix(struct inode **pinode, | |||
| 233 | 276 | ||
| 234 | /* get new inode */ | 277 | /* get new inode */ |
| 235 | if (*pinode == NULL) { | 278 | if (*pinode == NULL) { |
| 236 | *pinode = new_inode(sb); | 279 | *pinode = cifs_new_inode(sb, &find_data.UniqueId); |
| 237 | if (*pinode == NULL) { | 280 | if (*pinode == NULL) { |
| 238 | rc = -ENOMEM; | 281 | rc = -ENOMEM; |
| 239 | goto cgiiu_exit; | 282 | goto cgiiu_exit; |
| 240 | } | 283 | } |
| 241 | /* Is an i_ino of zero legal? */ | ||
| 242 | /* note ino incremented to unique num in new_inode */ | ||
| 243 | /* Are there sanity checks we can use to ensure that | ||
| 244 | the server is really filling in that field? */ | ||
| 245 | if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) | ||
| 246 | (*pinode)->i_ino = (unsigned long)find_data.UniqueId; | ||
| 247 | |||
| 248 | if (sb->s_flags & MS_NOATIME) | ||
| 249 | (*pinode)->i_flags |= S_NOATIME | S_NOCMTIME; | ||
| 250 | |||
| 251 | insert_inode_hash(*pinode); | ||
| 252 | } | 284 | } |
| 253 | 285 | ||
| 254 | inode = *pinode; | 286 | inode = *pinode; |
| @@ -465,11 +497,9 @@ int cifs_get_inode_info(struct inode **pinode, | |||
| 465 | 497 | ||
| 466 | /* get new inode */ | 498 | /* get new inode */ |
| 467 | if (*pinode == NULL) { | 499 | if (*pinode == NULL) { |
| 468 | *pinode = new_inode(sb); | 500 | __u64 inode_num; |
| 469 | if (*pinode == NULL) { | 501 | __u64 *pinum = &inode_num; |
| 470 | rc = -ENOMEM; | 502 | |
| 471 | goto cgii_exit; | ||
| 472 | } | ||
| 473 | /* Is an i_ino of zero legal? Can we use that to check | 503 | /* Is an i_ino of zero legal? Can we use that to check |
| 474 | if the server supports returning inode numbers? Are | 504 | if the server supports returning inode numbers? Are |
| 475 | there other sanity checks we can use to ensure that | 505 | there other sanity checks we can use to ensure that |
| @@ -486,22 +516,26 @@ int cifs_get_inode_info(struct inode **pinode, | |||
| 486 | 516 | ||
| 487 | if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) { | 517 | if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) { |
| 488 | int rc1 = 0; | 518 | int rc1 = 0; |
| 489 | __u64 inode_num; | ||
| 490 | 519 | ||
| 491 | rc1 = CIFSGetSrvInodeNumber(xid, pTcon, | 520 | rc1 = CIFSGetSrvInodeNumber(xid, pTcon, |
| 492 | full_path, &inode_num, | 521 | full_path, pinum, |
| 493 | cifs_sb->local_nls, | 522 | cifs_sb->local_nls, |
| 494 | cifs_sb->mnt_cifs_flags & | 523 | cifs_sb->mnt_cifs_flags & |
| 495 | CIFS_MOUNT_MAP_SPECIAL_CHR); | 524 | CIFS_MOUNT_MAP_SPECIAL_CHR); |
| 496 | if (rc1) { | 525 | if (rc1) { |
| 497 | cFYI(1, ("GetSrvInodeNum rc %d", rc1)); | 526 | cFYI(1, ("GetSrvInodeNum rc %d", rc1)); |
| 527 | pinum = NULL; | ||
| 498 | /* BB EOPNOSUPP disable SERVER_INUM? */ | 528 | /* BB EOPNOSUPP disable SERVER_INUM? */ |
| 499 | } else /* do we need cast or hash to ino? */ | 529 | } |
| 500 | (*pinode)->i_ino = inode_num; | 530 | } else { |
| 501 | } /* else ino incremented to unique num in new_inode*/ | 531 | pinum = NULL; |
| 502 | if (sb->s_flags & MS_NOATIME) | 532 | } |
| 503 | (*pinode)->i_flags |= S_NOATIME | S_NOCMTIME; | 533 | |
| 504 | insert_inode_hash(*pinode); | 534 | *pinode = cifs_new_inode(sb, pinum); |
| 535 | if (*pinode == NULL) { | ||
| 536 | rc = -ENOMEM; | ||
| 537 | goto cgii_exit; | ||
| 538 | } | ||
| 505 | } | 539 | } |
| 506 | inode = *pinode; | 540 | inode = *pinode; |
| 507 | cifsInfo = CIFS_I(inode); | 541 | cifsInfo = CIFS_I(inode); |
| @@ -621,7 +655,7 @@ static const struct inode_operations cifs_ipc_inode_ops = { | |||
| 621 | .lookup = cifs_lookup, | 655 | .lookup = cifs_lookup, |
| 622 | }; | 656 | }; |
| 623 | 657 | ||
| 624 | static char *build_path_to_root(struct cifs_sb_info *cifs_sb) | 658 | char *cifs_build_path_to_root(struct cifs_sb_info *cifs_sb) |
| 625 | { | 659 | { |
| 626 | int pplen = cifs_sb->prepathlen; | 660 | int pplen = cifs_sb->prepathlen; |
| 627 | int dfsplen; | 661 | int dfsplen; |
| @@ -678,7 +712,7 @@ struct inode *cifs_iget(struct super_block *sb, unsigned long ino) | |||
| 678 | return inode; | 712 | return inode; |
| 679 | 713 | ||
| 680 | cifs_sb = CIFS_SB(inode->i_sb); | 714 | cifs_sb = CIFS_SB(inode->i_sb); |
| 681 | full_path = build_path_to_root(cifs_sb); | 715 | full_path = cifs_build_path_to_root(cifs_sb); |
| 682 | if (full_path == NULL) | 716 | if (full_path == NULL) |
| 683 | return ERR_PTR(-ENOMEM); | 717 | return ERR_PTR(-ENOMEM); |
| 684 | 718 | ||
| @@ -1017,7 +1051,7 @@ out_reval: | |||
| 1017 | return rc; | 1051 | return rc; |
| 1018 | } | 1052 | } |
| 1019 | 1053 | ||
| 1020 | static void posix_fill_in_inode(struct inode *tmp_inode, | 1054 | void posix_fill_in_inode(struct inode *tmp_inode, |
| 1021 | FILE_UNIX_BASIC_INFO *pData, int isNewInode) | 1055 | FILE_UNIX_BASIC_INFO *pData, int isNewInode) |
| 1022 | { | 1056 | { |
| 1023 | struct cifsInodeInfo *cifsInfo = CIFS_I(tmp_inode); | 1057 | struct cifsInodeInfo *cifsInfo = CIFS_I(tmp_inode); |
| @@ -1114,24 +1148,14 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode) | |||
| 1114 | else | 1148 | else |
| 1115 | direntry->d_op = &cifs_dentry_ops; | 1149 | direntry->d_op = &cifs_dentry_ops; |
| 1116 | 1150 | ||
| 1117 | newinode = new_inode(inode->i_sb); | 1151 | newinode = cifs_new_inode(inode->i_sb, |
| 1152 | &pInfo->UniqueId); | ||
| 1118 | if (newinode == NULL) { | 1153 | if (newinode == NULL) { |
| 1119 | kfree(pInfo); | 1154 | kfree(pInfo); |
| 1120 | goto mkdir_get_info; | 1155 | goto mkdir_get_info; |
| 1121 | } | 1156 | } |
| 1122 | 1157 | ||
| 1123 | /* Is an i_ino of zero legal? */ | ||
| 1124 | /* Are there sanity checks we can use to ensure that | ||
| 1125 | the server is really filling in that field? */ | ||
| 1126 | if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) { | ||
| 1127 | newinode->i_ino = | ||
| 1128 | (unsigned long)pInfo->UniqueId; | ||
| 1129 | } /* note ino incremented to unique num in new_inode */ | ||
| 1130 | if (inode->i_sb->s_flags & MS_NOATIME) | ||
| 1131 | newinode->i_flags |= S_NOATIME | S_NOCMTIME; | ||
| 1132 | newinode->i_nlink = 2; | 1158 | newinode->i_nlink = 2; |
| 1133 | |||
| 1134 | insert_inode_hash(newinode); | ||
| 1135 | d_instantiate(direntry, newinode); | 1159 | d_instantiate(direntry, newinode); |
| 1136 | 1160 | ||
| 1137 | /* we already checked in POSIXCreate whether | 1161 | /* we already checked in POSIXCreate whether |
diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c index 9f51f9bf0292..c2c01ff4c32c 100644 --- a/fs/cifs/readdir.c +++ b/fs/cifs/readdir.c | |||
| @@ -56,35 +56,34 @@ static inline void dump_cifs_file_struct(struct file *file, char *label) | |||
| 56 | } | 56 | } |
| 57 | #endif /* DEBUG2 */ | 57 | #endif /* DEBUG2 */ |
| 58 | 58 | ||
| 59 | /* Returns one if new inode created (which therefore needs to be hashed) */ | 59 | /* Returns 1 if new inode created, 2 if both dentry and inode were */ |
| 60 | /* Might check in the future if inode number changed so we can rehash inode */ | 60 | /* Might check in the future if inode number changed so we can rehash inode */ |
| 61 | static int construct_dentry(struct qstr *qstring, struct file *file, | 61 | static int |
| 62 | struct inode **ptmp_inode, struct dentry **pnew_dentry) | 62 | construct_dentry(struct qstr *qstring, struct file *file, |
| 63 | struct inode **ptmp_inode, struct dentry **pnew_dentry, | ||
| 64 | __u64 *inum) | ||
| 63 | { | 65 | { |
| 64 | struct dentry *tmp_dentry; | 66 | struct dentry *tmp_dentry = NULL; |
| 65 | struct cifs_sb_info *cifs_sb; | 67 | struct super_block *sb = file->f_path.dentry->d_sb; |
| 66 | struct cifsTconInfo *pTcon; | ||
| 67 | int rc = 0; | 68 | int rc = 0; |
| 68 | 69 | ||
| 69 | cFYI(1, ("For %s", qstring->name)); | 70 | cFYI(1, ("For %s", qstring->name)); |
| 70 | cifs_sb = CIFS_SB(file->f_path.dentry->d_sb); | ||
| 71 | pTcon = cifs_sb->tcon; | ||
| 72 | 71 | ||
| 73 | qstring->hash = full_name_hash(qstring->name, qstring->len); | 72 | qstring->hash = full_name_hash(qstring->name, qstring->len); |
| 74 | tmp_dentry = d_lookup(file->f_path.dentry, qstring); | 73 | tmp_dentry = d_lookup(file->f_path.dentry, qstring); |
| 75 | if (tmp_dentry) { | 74 | if (tmp_dentry) { |
| 75 | /* BB: overwrite old name? i.e. tmp_dentry->d_name and | ||
| 76 | * tmp_dentry->d_name.len?? | ||
| 77 | */ | ||
| 76 | cFYI(0, ("existing dentry with inode 0x%p", | 78 | cFYI(0, ("existing dentry with inode 0x%p", |
| 77 | tmp_dentry->d_inode)); | 79 | tmp_dentry->d_inode)); |
| 78 | *ptmp_inode = tmp_dentry->d_inode; | 80 | *ptmp_inode = tmp_dentry->d_inode; |
| 79 | /* BB overwrite old name? i.e. tmp_dentry->d_name and tmp_dentry->d_name.len??*/ | ||
| 80 | if (*ptmp_inode == NULL) { | 81 | if (*ptmp_inode == NULL) { |
| 81 | *ptmp_inode = new_inode(file->f_path.dentry->d_sb); | 82 | *ptmp_inode = cifs_new_inode(sb, inum); |
| 82 | if (*ptmp_inode == NULL) | 83 | if (*ptmp_inode == NULL) |
| 83 | return rc; | 84 | return rc; |
| 84 | rc = 1; | 85 | rc = 1; |
| 85 | } | 86 | } |
| 86 | if (file->f_path.dentry->d_sb->s_flags & MS_NOATIME) | ||
| 87 | (*ptmp_inode)->i_flags |= S_NOATIME | S_NOCMTIME; | ||
| 88 | } else { | 87 | } else { |
| 89 | tmp_dentry = d_alloc(file->f_path.dentry, qstring); | 88 | tmp_dentry = d_alloc(file->f_path.dentry, qstring); |
| 90 | if (tmp_dentry == NULL) { | 89 | if (tmp_dentry == NULL) { |
| @@ -93,15 +92,14 @@ static int construct_dentry(struct qstr *qstring, struct file *file, | |||
| 93 | return rc; | 92 | return rc; |
| 94 | } | 93 | } |
| 95 | 94 | ||
| 96 | *ptmp_inode = new_inode(file->f_path.dentry->d_sb); | 95 | if (CIFS_SB(sb)->tcon->nocase) |
| 97 | if (pTcon->nocase) | ||
| 98 | tmp_dentry->d_op = &cifs_ci_dentry_ops; | 96 | tmp_dentry->d_op = &cifs_ci_dentry_ops; |
| 99 | else | 97 | else |
| 100 | tmp_dentry->d_op = &cifs_dentry_ops; | 98 | tmp_dentry->d_op = &cifs_dentry_ops; |
| 99 | |||
| 100 | *ptmp_inode = cifs_new_inode(sb, inum); | ||
| 101 | if (*ptmp_inode == NULL) | 101 | if (*ptmp_inode == NULL) |
| 102 | return rc; | 102 | return rc; |
| 103 | if (file->f_path.dentry->d_sb->s_flags & MS_NOATIME) | ||
| 104 | (*ptmp_inode)->i_flags |= S_NOATIME | S_NOCMTIME; | ||
| 105 | rc = 2; | 103 | rc = 2; |
| 106 | } | 104 | } |
| 107 | 105 | ||
| @@ -822,7 +820,7 @@ static int find_cifs_entry(const int xid, struct cifsTconInfo *pTcon, | |||
| 822 | /* inode num, inode type and filename returned */ | 820 | /* inode num, inode type and filename returned */ |
| 823 | static int cifs_get_name_from_search_buf(struct qstr *pqst, | 821 | static int cifs_get_name_from_search_buf(struct qstr *pqst, |
| 824 | char *current_entry, __u16 level, unsigned int unicode, | 822 | char *current_entry, __u16 level, unsigned int unicode, |
| 825 | struct cifs_sb_info *cifs_sb, int max_len, ino_t *pinum) | 823 | struct cifs_sb_info *cifs_sb, int max_len, __u64 *pinum) |
| 826 | { | 824 | { |
| 827 | int rc = 0; | 825 | int rc = 0; |
| 828 | unsigned int len = 0; | 826 | unsigned int len = 0; |
| @@ -842,9 +840,7 @@ static int cifs_get_name_from_search_buf(struct qstr *pqst, | |||
| 842 | len = strnlen(filename, PATH_MAX); | 840 | len = strnlen(filename, PATH_MAX); |
| 843 | } | 841 | } |
| 844 | 842 | ||
| 845 | /* BB fixme - hash low and high 32 bits if not 64 bit arch BB */ | 843 | *pinum = pFindData->UniqueId; |
| 846 | if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) | ||
| 847 | *pinum = pFindData->UniqueId; | ||
| 848 | } else if (level == SMB_FIND_FILE_DIRECTORY_INFO) { | 844 | } else if (level == SMB_FIND_FILE_DIRECTORY_INFO) { |
| 849 | FILE_DIRECTORY_INFO *pFindData = | 845 | FILE_DIRECTORY_INFO *pFindData = |
| 850 | (FILE_DIRECTORY_INFO *)current_entry; | 846 | (FILE_DIRECTORY_INFO *)current_entry; |
| @@ -907,7 +903,7 @@ static int cifs_filldir(char *pfindEntry, struct file *file, | |||
| 907 | struct qstr qstring; | 903 | struct qstr qstring; |
| 908 | struct cifsFileInfo *pCifsF; | 904 | struct cifsFileInfo *pCifsF; |
| 909 | unsigned int obj_type; | 905 | unsigned int obj_type; |
| 910 | ino_t inum; | 906 | __u64 inum; |
| 911 | struct cifs_sb_info *cifs_sb; | 907 | struct cifs_sb_info *cifs_sb; |
| 912 | struct inode *tmp_inode; | 908 | struct inode *tmp_inode; |
| 913 | struct dentry *tmp_dentry; | 909 | struct dentry *tmp_dentry; |
| @@ -940,20 +936,18 @@ static int cifs_filldir(char *pfindEntry, struct file *file, | |||
| 940 | if (rc) | 936 | if (rc) |
| 941 | return rc; | 937 | return rc; |
| 942 | 938 | ||
| 943 | rc = construct_dentry(&qstring, file, &tmp_inode, &tmp_dentry); | 939 | /* only these two infolevels return valid inode numbers */ |
| 940 | if (pCifsF->srch_inf.info_level == SMB_FIND_FILE_UNIX || | ||
| 941 | pCifsF->srch_inf.info_level == SMB_FIND_FILE_ID_FULL_DIR_INFO) | ||
| 942 | rc = construct_dentry(&qstring, file, &tmp_inode, &tmp_dentry, | ||
| 943 | &inum); | ||
| 944 | else | ||
| 945 | rc = construct_dentry(&qstring, file, &tmp_inode, &tmp_dentry, | ||
| 946 | NULL); | ||
| 947 | |||
| 944 | if ((tmp_inode == NULL) || (tmp_dentry == NULL)) | 948 | if ((tmp_inode == NULL) || (tmp_dentry == NULL)) |
| 945 | return -ENOMEM; | 949 | return -ENOMEM; |
| 946 | 950 | ||
| 947 | if (rc) { | ||
| 948 | /* inode created, we need to hash it with right inode number */ | ||
| 949 | if (inum != 0) { | ||
| 950 | /* BB fixme - hash the 2 32 quantities bits together if | ||
| 951 | * necessary BB */ | ||
| 952 | tmp_inode->i_ino = inum; | ||
| 953 | } | ||
| 954 | insert_inode_hash(tmp_inode); | ||
| 955 | } | ||
| 956 | |||
| 957 | /* we pass in rc below, indicating whether it is a new inode, | 951 | /* we pass in rc below, indicating whether it is a new inode, |
| 958 | so we can figure out whether to invalidate the inode cached | 952 | so we can figure out whether to invalidate the inode cached |
| 959 | data if the file has changed */ | 953 | data if the file has changed */ |
diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c index 5f22de7b79a9..5c68b4282be9 100644 --- a/fs/cifs/sess.c +++ b/fs/cifs/sess.c | |||
| @@ -34,15 +34,99 @@ | |||
| 34 | extern void SMBNTencrypt(unsigned char *passwd, unsigned char *c8, | 34 | extern void SMBNTencrypt(unsigned char *passwd, unsigned char *c8, |
| 35 | unsigned char *p24); | 35 | unsigned char *p24); |
| 36 | 36 | ||
| 37 | /* Checks if this is the first smb session to be reconnected after | ||
| 38 | the socket has been reestablished (so we know whether to use vc 0). | ||
| 39 | Called while holding the cifs_tcp_ses_lock, so do not block */ | ||
| 40 | static bool is_first_ses_reconnect(struct cifsSesInfo *ses) | ||
| 41 | { | ||
| 42 | struct list_head *tmp; | ||
| 43 | struct cifsSesInfo *tmp_ses; | ||
| 44 | |||
| 45 | list_for_each(tmp, &ses->server->smb_ses_list) { | ||
| 46 | tmp_ses = list_entry(tmp, struct cifsSesInfo, | ||
| 47 | smb_ses_list); | ||
| 48 | if (tmp_ses->need_reconnect == false) | ||
| 49 | return false; | ||
| 50 | } | ||
| 51 | /* could not find a session that was already connected, | ||
| 52 | this must be the first one we are reconnecting */ | ||
| 53 | return true; | ||
| 54 | } | ||
| 55 | |||
| 56 | /* | ||
| 57 | * vc number 0 is treated specially by some servers, and should be the | ||
| 58 | * first one we request. After that we can use vcnumbers up to maxvcs, | ||
| 59 | * one for each smb session (some Windows versions set maxvcs incorrectly | ||
| 60 | * so maxvc=1 can be ignored). If we have too many vcs, we can reuse | ||
| 61 | * any vc but zero (some servers reset the connection on vcnum zero) | ||
| 62 | * | ||
| 63 | */ | ||
| 64 | static __le16 get_next_vcnum(struct cifsSesInfo *ses) | ||
| 65 | { | ||
| 66 | __u16 vcnum = 0; | ||
| 67 | struct list_head *tmp; | ||
| 68 | struct cifsSesInfo *tmp_ses; | ||
| 69 | __u16 max_vcs = ses->server->max_vcs; | ||
| 70 | __u16 i; | ||
| 71 | int free_vc_found = 0; | ||
| 72 | |||
| 73 | /* Quoting the MS-SMB specification: "Windows-based SMB servers set this | ||
| 74 | field to one but do not enforce this limit, which allows an SMB client | ||
| 75 | to establish more virtual circuits than allowed by this value ... but | ||
| 76 | other server implementations can enforce this limit." */ | ||
| 77 | if (max_vcs < 2) | ||
| 78 | max_vcs = 0xFFFF; | ||
| 79 | |||
| 80 | write_lock(&cifs_tcp_ses_lock); | ||
| 81 | if ((ses->need_reconnect) && is_first_ses_reconnect(ses)) | ||
| 82 | goto get_vc_num_exit; /* vcnum will be zero */ | ||
| 83 | for (i = ses->server->srv_count - 1; i < max_vcs; i++) { | ||
| 84 | if (i == 0) /* this is the only connection, use vc 0 */ | ||
| 85 | break; | ||
| 86 | |||
| 87 | free_vc_found = 1; | ||
| 88 | |||
| 89 | list_for_each(tmp, &ses->server->smb_ses_list) { | ||
| 90 | tmp_ses = list_entry(tmp, struct cifsSesInfo, | ||
| 91 | smb_ses_list); | ||
| 92 | if (tmp_ses->vcnum == i) { | ||
| 93 | free_vc_found = 0; | ||
| 94 | break; /* found duplicate, try next vcnum */ | ||
| 95 | } | ||
| 96 | } | ||
| 97 | if (free_vc_found) | ||
| 98 | break; /* we found a vcnumber that will work - use it */ | ||
| 99 | } | ||
| 100 | |||
| 101 | if (i == 0) | ||
| 102 | vcnum = 0; /* for most common case, ie if one smb session, use | ||
| 103 | vc zero. Also for case when no free vcnum, zero | ||
| 104 | is safest to send (some clients only send zero) */ | ||
| 105 | else if (free_vc_found == 0) | ||
| 106 | vcnum = 1; /* we can not reuse vc=0 safely, since some servers | ||
| 107 | reset all uids on that, but 1 is ok. */ | ||
| 108 | else | ||
| 109 | vcnum = i; | ||
| 110 | ses->vcnum = vcnum; | ||
| 111 | get_vc_num_exit: | ||
| 112 | write_unlock(&cifs_tcp_ses_lock); | ||
| 113 | |||
| 114 | return le16_to_cpu(vcnum); | ||
| 115 | } | ||
| 116 | |||
| 37 | static __u32 cifs_ssetup_hdr(struct cifsSesInfo *ses, SESSION_SETUP_ANDX *pSMB) | 117 | static __u32 cifs_ssetup_hdr(struct cifsSesInfo *ses, SESSION_SETUP_ANDX *pSMB) |
| 38 | { | 118 | { |
| 39 | __u32 capabilities = 0; | 119 | __u32 capabilities = 0; |
| 40 | 120 | ||
| 41 | /* init fields common to all four types of SessSetup */ | 121 | /* init fields common to all four types of SessSetup */ |
| 42 | /* note that header is initialized to zero in header_assemble */ | 122 | /* Note that offsets for first seven fields in req struct are same */ |
| 123 | /* in CIFS Specs so does not matter which of 3 forms of struct */ | ||
| 124 | /* that we use in next few lines */ | ||
| 125 | /* Note that header is initialized to zero in header_assemble */ | ||
| 43 | pSMB->req.AndXCommand = 0xFF; | 126 | pSMB->req.AndXCommand = 0xFF; |
| 44 | pSMB->req.MaxBufferSize = cpu_to_le16(ses->server->maxBuf); | 127 | pSMB->req.MaxBufferSize = cpu_to_le16(ses->server->maxBuf); |
| 45 | pSMB->req.MaxMpxCount = cpu_to_le16(ses->server->maxReq); | 128 | pSMB->req.MaxMpxCount = cpu_to_le16(ses->server->maxReq); |
| 129 | pSMB->req.VcNumber = get_next_vcnum(ses); | ||
| 46 | 130 | ||
| 47 | /* Now no need to set SMBFLG_CASELESS or obsolete CANONICAL PATH */ | 131 | /* Now no need to set SMBFLG_CASELESS or obsolete CANONICAL PATH */ |
| 48 | 132 | ||
| @@ -71,7 +155,6 @@ static __u32 cifs_ssetup_hdr(struct cifsSesInfo *ses, SESSION_SETUP_ANDX *pSMB) | |||
| 71 | if (ses->capabilities & CAP_UNIX) | 155 | if (ses->capabilities & CAP_UNIX) |
| 72 | capabilities |= CAP_UNIX; | 156 | capabilities |= CAP_UNIX; |
| 73 | 157 | ||
| 74 | /* BB check whether to init vcnum BB */ | ||
| 75 | return capabilities; | 158 | return capabilities; |
| 76 | } | 159 | } |
| 77 | 160 | ||
| @@ -228,7 +311,7 @@ static int decode_unicode_ssetup(char **pbcc_area, int bleft, | |||
| 228 | 311 | ||
| 229 | kfree(ses->serverOS); | 312 | kfree(ses->serverOS); |
| 230 | /* UTF-8 string will not grow more than four times as big as UCS-16 */ | 313 | /* UTF-8 string will not grow more than four times as big as UCS-16 */ |
| 231 | ses->serverOS = kzalloc(4 * len, GFP_KERNEL); | 314 | ses->serverOS = kzalloc((4 * len) + 2 /* trailing null */, GFP_KERNEL); |
| 232 | if (ses->serverOS != NULL) | 315 | if (ses->serverOS != NULL) |
| 233 | cifs_strfromUCS_le(ses->serverOS, (__le16 *)data, len, nls_cp); | 316 | cifs_strfromUCS_le(ses->serverOS, (__le16 *)data, len, nls_cp); |
| 234 | data += 2 * (len + 1); | 317 | data += 2 * (len + 1); |
| @@ -241,7 +324,7 @@ static int decode_unicode_ssetup(char **pbcc_area, int bleft, | |||
| 241 | return rc; | 324 | return rc; |
| 242 | 325 | ||
| 243 | kfree(ses->serverNOS); | 326 | kfree(ses->serverNOS); |
| 244 | ses->serverNOS = kzalloc(4 * len, GFP_KERNEL); /* BB this is wrong length FIXME BB */ | 327 | ses->serverNOS = kzalloc((4 * len) + 2 /* trailing null */, GFP_KERNEL); |
| 245 | if (ses->serverNOS != NULL) { | 328 | if (ses->serverNOS != NULL) { |
| 246 | cifs_strfromUCS_le(ses->serverNOS, (__le16 *)data, len, | 329 | cifs_strfromUCS_le(ses->serverNOS, (__le16 *)data, len, |
| 247 | nls_cp); | 330 | nls_cp); |
diff --git a/fs/compat.c b/fs/compat.c index 65a070e705ab..d0145ca27572 100644 --- a/fs/compat.c +++ b/fs/compat.c | |||
| @@ -1407,7 +1407,7 @@ int compat_do_execve(char * filename, | |||
| 1407 | bprm->cred = prepare_exec_creds(); | 1407 | bprm->cred = prepare_exec_creds(); |
| 1408 | if (!bprm->cred) | 1408 | if (!bprm->cred) |
| 1409 | goto out_unlock; | 1409 | goto out_unlock; |
| 1410 | check_unsafe_exec(bprm); | 1410 | check_unsafe_exec(bprm, current->files); |
| 1411 | 1411 | ||
| 1412 | file = open_exec(filename); | 1412 | file = open_exec(filename); |
| 1413 | retval = PTR_ERR(file); | 1413 | retval = PTR_ERR(file); |
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c index 9c6d815dd191..45e59d3c7f1f 100644 --- a/fs/compat_ioctl.c +++ b/fs/compat_ioctl.c | |||
| @@ -1913,6 +1913,9 @@ COMPATIBLE_IOCTL(FIONREAD) /* This is also TIOCINQ */ | |||
| 1913 | /* 0x00 */ | 1913 | /* 0x00 */ |
| 1914 | COMPATIBLE_IOCTL(FIBMAP) | 1914 | COMPATIBLE_IOCTL(FIBMAP) |
| 1915 | COMPATIBLE_IOCTL(FIGETBSZ) | 1915 | COMPATIBLE_IOCTL(FIGETBSZ) |
| 1916 | /* 'X' - originally XFS but some now in the VFS */ | ||
| 1917 | COMPATIBLE_IOCTL(FIFREEZE) | ||
| 1918 | COMPATIBLE_IOCTL(FITHAW) | ||
| 1916 | /* RAID */ | 1919 | /* RAID */ |
| 1917 | COMPATIBLE_IOCTL(RAID_VERSION) | 1920 | COMPATIBLE_IOCTL(RAID_VERSION) |
| 1918 | COMPATIBLE_IOCTL(GET_ARRAY_INFO) | 1921 | COMPATIBLE_IOCTL(GET_ARRAY_INFO) |
| @@ -1938,6 +1941,8 @@ ULONG_IOCTL(SET_BITMAP_FILE) | |||
| 1938 | /* Big K */ | 1941 | /* Big K */ |
| 1939 | COMPATIBLE_IOCTL(PIO_FONT) | 1942 | COMPATIBLE_IOCTL(PIO_FONT) |
| 1940 | COMPATIBLE_IOCTL(GIO_FONT) | 1943 | COMPATIBLE_IOCTL(GIO_FONT) |
| 1944 | COMPATIBLE_IOCTL(PIO_CMAP) | ||
| 1945 | COMPATIBLE_IOCTL(GIO_CMAP) | ||
| 1941 | ULONG_IOCTL(KDSIGACCEPT) | 1946 | ULONG_IOCTL(KDSIGACCEPT) |
| 1942 | COMPATIBLE_IOCTL(KDGETKEYCODE) | 1947 | COMPATIBLE_IOCTL(KDGETKEYCODE) |
| 1943 | COMPATIBLE_IOCTL(KDSETKEYCODE) | 1948 | COMPATIBLE_IOCTL(KDSETKEYCODE) |
diff --git a/fs/dcache.c b/fs/dcache.c index 937df0fb0da5..07e2d4a44bda 100644 --- a/fs/dcache.c +++ b/fs/dcache.c | |||
| @@ -1180,7 +1180,7 @@ struct dentry *d_obtain_alias(struct inode *inode) | |||
| 1180 | iput(inode); | 1180 | iput(inode); |
| 1181 | return res; | 1181 | return res; |
| 1182 | } | 1182 | } |
| 1183 | EXPORT_SYMBOL_GPL(d_obtain_alias); | 1183 | EXPORT_SYMBOL(d_obtain_alias); |
| 1184 | 1184 | ||
| 1185 | /** | 1185 | /** |
| 1186 | * d_splice_alias - splice a disconnected dentry into the tree if one exists | 1186 | * d_splice_alias - splice a disconnected dentry into the tree if one exists |
diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c index 5f3231b9633f..bff4052b05e7 100644 --- a/fs/devpts/inode.c +++ b/fs/devpts/inode.c | |||
| @@ -198,9 +198,6 @@ static int mknod_ptmx(struct super_block *sb) | |||
| 198 | 198 | ||
| 199 | fsi->ptmx_dentry = dentry; | 199 | fsi->ptmx_dentry = dentry; |
| 200 | rc = 0; | 200 | rc = 0; |
| 201 | |||
| 202 | printk(KERN_DEBUG "Created ptmx node in devpts ino %lu\n", | ||
| 203 | inode->i_ino); | ||
| 204 | out: | 201 | out: |
| 205 | mutex_unlock(&root->d_inode->i_mutex); | 202 | mutex_unlock(&root->d_inode->i_mutex); |
| 206 | return rc; | 203 | return rc; |
| @@ -369,8 +366,6 @@ static int new_pts_mount(struct file_system_type *fs_type, int flags, | |||
| 369 | struct pts_fs_info *fsi; | 366 | struct pts_fs_info *fsi; |
| 370 | struct pts_mount_opts *opts; | 367 | struct pts_mount_opts *opts; |
| 371 | 368 | ||
| 372 | printk(KERN_NOTICE "devpts: newinstance mount\n"); | ||
| 373 | |||
| 374 | err = get_sb_nodev(fs_type, flags, data, devpts_fill_super, mnt); | 369 | err = get_sb_nodev(fs_type, flags, data, devpts_fill_super, mnt); |
| 375 | if (err) | 370 | if (err) |
| 376 | return err; | 371 | return err; |
| @@ -1049,16 +1049,32 @@ EXPORT_SYMBOL(install_exec_creds); | |||
| 1049 | * - the caller must hold current->cred_exec_mutex to protect against | 1049 | * - the caller must hold current->cred_exec_mutex to protect against |
| 1050 | * PTRACE_ATTACH | 1050 | * PTRACE_ATTACH |
| 1051 | */ | 1051 | */ |
| 1052 | void check_unsafe_exec(struct linux_binprm *bprm) | 1052 | void check_unsafe_exec(struct linux_binprm *bprm, struct files_struct *files) |
| 1053 | { | 1053 | { |
| 1054 | struct task_struct *p = current; | 1054 | struct task_struct *p = current, *t; |
| 1055 | unsigned long flags; | ||
| 1056 | unsigned n_fs, n_files, n_sighand; | ||
| 1055 | 1057 | ||
| 1056 | bprm->unsafe = tracehook_unsafe_exec(p); | 1058 | bprm->unsafe = tracehook_unsafe_exec(p); |
| 1057 | 1059 | ||
| 1058 | if (atomic_read(&p->fs->count) > 1 || | 1060 | n_fs = 1; |
| 1059 | atomic_read(&p->files->count) > 1 || | 1061 | n_files = 1; |
| 1060 | atomic_read(&p->sighand->count) > 1) | 1062 | n_sighand = 1; |
| 1063 | lock_task_sighand(p, &flags); | ||
| 1064 | for (t = next_thread(p); t != p; t = next_thread(t)) { | ||
| 1065 | if (t->fs == p->fs) | ||
| 1066 | n_fs++; | ||
| 1067 | if (t->files == files) | ||
| 1068 | n_files++; | ||
| 1069 | n_sighand++; | ||
| 1070 | } | ||
| 1071 | |||
| 1072 | if (atomic_read(&p->fs->count) > n_fs || | ||
| 1073 | atomic_read(&p->files->count) > n_files || | ||
| 1074 | atomic_read(&p->sighand->count) > n_sighand) | ||
| 1061 | bprm->unsafe |= LSM_UNSAFE_SHARE; | 1075 | bprm->unsafe |= LSM_UNSAFE_SHARE; |
| 1076 | |||
| 1077 | unlock_task_sighand(p, &flags); | ||
| 1062 | } | 1078 | } |
| 1063 | 1079 | ||
| 1064 | /* | 1080 | /* |
| @@ -1273,7 +1289,7 @@ int do_execve(char * filename, | |||
| 1273 | bprm->cred = prepare_exec_creds(); | 1289 | bprm->cred = prepare_exec_creds(); |
| 1274 | if (!bprm->cred) | 1290 | if (!bprm->cred) |
| 1275 | goto out_unlock; | 1291 | goto out_unlock; |
| 1276 | check_unsafe_exec(bprm); | 1292 | check_unsafe_exec(bprm, displaced); |
| 1277 | 1293 | ||
| 1278 | file = open_exec(filename); | 1294 | file = open_exec(filename); |
| 1279 | retval = PTR_ERR(file); | 1295 | retval = PTR_ERR(file); |
diff --git a/fs/ext2/super.c b/fs/ext2/super.c index da8bdeaa2e6d..7c6e3606f0ec 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c | |||
| @@ -1185,9 +1185,12 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data) | |||
| 1185 | es = sbi->s_es; | 1185 | es = sbi->s_es; |
| 1186 | if (((sbi->s_mount_opt & EXT2_MOUNT_XIP) != | 1186 | if (((sbi->s_mount_opt & EXT2_MOUNT_XIP) != |
| 1187 | (old_mount_opt & EXT2_MOUNT_XIP)) && | 1187 | (old_mount_opt & EXT2_MOUNT_XIP)) && |
| 1188 | invalidate_inodes(sb)) | 1188 | invalidate_inodes(sb)) { |
| 1189 | ext2_warning(sb, __func__, "busy inodes while remounting "\ | 1189 | ext2_warning(sb, __func__, "refusing change of xip flag " |
| 1190 | "xip remain in cache (no functional problem)"); | 1190 | "with busy inodes while remounting"); |
| 1191 | sbi->s_mount_opt &= ~EXT2_MOUNT_XIP; | ||
| 1192 | sbi->s_mount_opt |= old_mount_opt & EXT2_MOUNT_XIP; | ||
| 1193 | } | ||
| 1191 | if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) | 1194 | if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) |
| 1192 | return 0; | 1195 | return 0; |
| 1193 | if (*flags & MS_RDONLY) { | 1196 | if (*flags & MS_RDONLY) { |
diff --git a/fs/ext3/super.c b/fs/ext3/super.c index b70d90e08a3c..4a970411a458 100644 --- a/fs/ext3/super.c +++ b/fs/ext3/super.c | |||
| @@ -2428,12 +2428,13 @@ static void ext3_write_super (struct super_block * sb) | |||
| 2428 | 2428 | ||
| 2429 | static int ext3_sync_fs(struct super_block *sb, int wait) | 2429 | static int ext3_sync_fs(struct super_block *sb, int wait) |
| 2430 | { | 2430 | { |
| 2431 | sb->s_dirt = 0; | 2431 | tid_t target; |
| 2432 | if (wait) | ||
| 2433 | ext3_force_commit(sb); | ||
| 2434 | else | ||
| 2435 | journal_start_commit(EXT3_SB(sb)->s_journal, NULL); | ||
| 2436 | 2432 | ||
| 2433 | sb->s_dirt = 0; | ||
| 2434 | if (journal_start_commit(EXT3_SB(sb)->s_journal, &target)) { | ||
| 2435 | if (wait) | ||
| 2436 | log_wait_commit(EXT3_SB(sb)->s_journal, target); | ||
| 2437 | } | ||
| 2437 | return 0; | 2438 | return 0; |
| 2438 | } | 2439 | } |
| 2439 | 2440 | ||
diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c index 9a50b8052dcf..de9459b4cb94 100644 --- a/fs/ext4/balloc.c +++ b/fs/ext4/balloc.c | |||
| @@ -609,7 +609,9 @@ int ext4_claim_free_blocks(struct ext4_sb_info *sbi, | |||
| 609 | */ | 609 | */ |
| 610 | int ext4_should_retry_alloc(struct super_block *sb, int *retries) | 610 | int ext4_should_retry_alloc(struct super_block *sb, int *retries) |
| 611 | { | 611 | { |
| 612 | if (!ext4_has_free_blocks(EXT4_SB(sb), 1) || (*retries)++ > 3) | 612 | if (!ext4_has_free_blocks(EXT4_SB(sb), 1) || |
| 613 | (*retries)++ > 3 || | ||
| 614 | !EXT4_SB(sb)->s_journal) | ||
| 613 | return 0; | 615 | return 0; |
| 614 | 616 | ||
| 615 | jbd_debug(1, "%s: retrying operation after ENOSPC\n", sb->s_id); | 617 | jbd_debug(1, "%s: retrying operation after ENOSPC\n", sb->s_id); |
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index aafc9eba1c25..b0c87dce66a3 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h | |||
| @@ -868,7 +868,7 @@ static inline unsigned ext4_rec_len_from_disk(__le16 dlen) | |||
| 868 | { | 868 | { |
| 869 | unsigned len = le16_to_cpu(dlen); | 869 | unsigned len = le16_to_cpu(dlen); |
| 870 | 870 | ||
| 871 | if (len == EXT4_MAX_REC_LEN) | 871 | if (len == EXT4_MAX_REC_LEN || len == 0) |
| 872 | return 1 << 16; | 872 | return 1 << 16; |
| 873 | return len; | 873 | return len; |
| 874 | } | 874 | } |
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c index 4fb86a0061d0..627f8c3337a3 100644 --- a/fs/ext4/ialloc.c +++ b/fs/ext4/ialloc.c | |||
| @@ -188,7 +188,7 @@ void ext4_free_inode(handle_t *handle, struct inode *inode) | |||
| 188 | struct ext4_group_desc *gdp; | 188 | struct ext4_group_desc *gdp; |
| 189 | struct ext4_super_block *es; | 189 | struct ext4_super_block *es; |
| 190 | struct ext4_sb_info *sbi; | 190 | struct ext4_sb_info *sbi; |
| 191 | int fatal = 0, err, count; | 191 | int fatal = 0, err, count, cleared; |
| 192 | ext4_group_t flex_group; | 192 | ext4_group_t flex_group; |
| 193 | 193 | ||
| 194 | if (atomic_read(&inode->i_count) > 1) { | 194 | if (atomic_read(&inode->i_count) > 1) { |
| @@ -248,8 +248,10 @@ void ext4_free_inode(handle_t *handle, struct inode *inode) | |||
| 248 | goto error_return; | 248 | goto error_return; |
| 249 | 249 | ||
| 250 | /* Ok, now we can actually update the inode bitmaps.. */ | 250 | /* Ok, now we can actually update the inode bitmaps.. */ |
| 251 | if (!ext4_clear_bit_atomic(sb_bgl_lock(sbi, block_group), | 251 | spin_lock(sb_bgl_lock(sbi, block_group)); |
| 252 | bit, bitmap_bh->b_data)) | 252 | cleared = ext4_clear_bit(bit, bitmap_bh->b_data); |
| 253 | spin_unlock(sb_bgl_lock(sbi, block_group)); | ||
| 254 | if (!cleared) | ||
| 253 | ext4_error(sb, "ext4_free_inode", | 255 | ext4_error(sb, "ext4_free_inode", |
| 254 | "bit already cleared for inode %lu", ino); | 256 | "bit already cleared for inode %lu", ino); |
| 255 | else { | 257 | else { |
| @@ -715,6 +717,13 @@ struct inode *ext4_new_inode(handle_t *handle, struct inode *dir, int mode) | |||
| 715 | 717 | ||
| 716 | if (sbi->s_log_groups_per_flex) { | 718 | if (sbi->s_log_groups_per_flex) { |
| 717 | ret2 = find_group_flex(sb, dir, &group); | 719 | ret2 = find_group_flex(sb, dir, &group); |
| 720 | if (ret2 == -1) { | ||
| 721 | ret2 = find_group_other(sb, dir, &group); | ||
| 722 | if (ret2 == 0 && printk_ratelimit()) | ||
| 723 | printk(KERN_NOTICE "ext4: find_group_flex " | ||
| 724 | "failed, fallback succeeded dir %lu\n", | ||
| 725 | dir->i_ino); | ||
| 726 | } | ||
| 718 | goto got_group; | 727 | goto got_group; |
| 719 | } | 728 | } |
| 720 | 729 | ||
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 03ba20be1329..c7fed5b18745 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
| @@ -47,8 +47,10 @@ | |||
| 47 | static inline int ext4_begin_ordered_truncate(struct inode *inode, | 47 | static inline int ext4_begin_ordered_truncate(struct inode *inode, |
| 48 | loff_t new_size) | 48 | loff_t new_size) |
| 49 | { | 49 | { |
| 50 | return jbd2_journal_begin_ordered_truncate(&EXT4_I(inode)->jinode, | 50 | return jbd2_journal_begin_ordered_truncate( |
| 51 | new_size); | 51 | EXT4_SB(inode->i_sb)->s_journal, |
| 52 | &EXT4_I(inode)->jinode, | ||
| 53 | new_size); | ||
| 52 | } | 54 | } |
| 53 | 55 | ||
| 54 | static void ext4_invalidatepage(struct page *page, unsigned long offset); | 56 | static void ext4_invalidatepage(struct page *page, unsigned long offset); |
| @@ -1366,6 +1368,10 @@ retry: | |||
| 1366 | goto out; | 1368 | goto out; |
| 1367 | } | 1369 | } |
| 1368 | 1370 | ||
| 1371 | /* We cannot recurse into the filesystem as the transaction is already | ||
| 1372 | * started */ | ||
| 1373 | flags |= AOP_FLAG_NOFS; | ||
| 1374 | |||
| 1369 | page = grab_cache_page_write_begin(mapping, index, flags); | 1375 | page = grab_cache_page_write_begin(mapping, index, flags); |
| 1370 | if (!page) { | 1376 | if (!page) { |
| 1371 | ext4_journal_stop(handle); | 1377 | ext4_journal_stop(handle); |
| @@ -1375,7 +1381,7 @@ retry: | |||
| 1375 | *pagep = page; | 1381 | *pagep = page; |
| 1376 | 1382 | ||
| 1377 | ret = block_write_begin(file, mapping, pos, len, flags, pagep, fsdata, | 1383 | ret = block_write_begin(file, mapping, pos, len, flags, pagep, fsdata, |
| 1378 | ext4_get_block); | 1384 | ext4_get_block); |
| 1379 | 1385 | ||
| 1380 | if (!ret && ext4_should_journal_data(inode)) { | 1386 | if (!ret && ext4_should_journal_data(inode)) { |
| 1381 | ret = walk_page_buffers(handle, page_buffers(page), | 1387 | ret = walk_page_buffers(handle, page_buffers(page), |
| @@ -2437,6 +2443,7 @@ static int ext4_da_writepages(struct address_space *mapping, | |||
| 2437 | int no_nrwrite_index_update; | 2443 | int no_nrwrite_index_update; |
| 2438 | int pages_written = 0; | 2444 | int pages_written = 0; |
| 2439 | long pages_skipped; | 2445 | long pages_skipped; |
| 2446 | int range_cyclic, cycled = 1, io_done = 0; | ||
| 2440 | int needed_blocks, ret = 0, nr_to_writebump = 0; | 2447 | int needed_blocks, ret = 0, nr_to_writebump = 0; |
| 2441 | struct ext4_sb_info *sbi = EXT4_SB(mapping->host->i_sb); | 2448 | struct ext4_sb_info *sbi = EXT4_SB(mapping->host->i_sb); |
| 2442 | 2449 | ||
| @@ -2488,9 +2495,15 @@ static int ext4_da_writepages(struct address_space *mapping, | |||
| 2488 | if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) | 2495 | if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) |
| 2489 | range_whole = 1; | 2496 | range_whole = 1; |
| 2490 | 2497 | ||
| 2491 | if (wbc->range_cyclic) | 2498 | range_cyclic = wbc->range_cyclic; |
| 2499 | if (wbc->range_cyclic) { | ||
| 2492 | index = mapping->writeback_index; | 2500 | index = mapping->writeback_index; |
| 2493 | else | 2501 | if (index) |
| 2502 | cycled = 0; | ||
| 2503 | wbc->range_start = index << PAGE_CACHE_SHIFT; | ||
| 2504 | wbc->range_end = LLONG_MAX; | ||
| 2505 | wbc->range_cyclic = 0; | ||
| 2506 | } else | ||
| 2494 | index = wbc->range_start >> PAGE_CACHE_SHIFT; | 2507 | index = wbc->range_start >> PAGE_CACHE_SHIFT; |
| 2495 | 2508 | ||
| 2496 | mpd.wbc = wbc; | 2509 | mpd.wbc = wbc; |
| @@ -2504,6 +2517,7 @@ static int ext4_da_writepages(struct address_space *mapping, | |||
| 2504 | wbc->no_nrwrite_index_update = 1; | 2517 | wbc->no_nrwrite_index_update = 1; |
| 2505 | pages_skipped = wbc->pages_skipped; | 2518 | pages_skipped = wbc->pages_skipped; |
| 2506 | 2519 | ||
| 2520 | retry: | ||
| 2507 | while (!ret && wbc->nr_to_write > 0) { | 2521 | while (!ret && wbc->nr_to_write > 0) { |
| 2508 | 2522 | ||
| 2509 | /* | 2523 | /* |
| @@ -2530,7 +2544,7 @@ static int ext4_da_writepages(struct address_space *mapping, | |||
| 2530 | 2544 | ||
| 2531 | ext4_journal_stop(handle); | 2545 | ext4_journal_stop(handle); |
| 2532 | 2546 | ||
| 2533 | if (mpd.retval == -ENOSPC) { | 2547 | if ((mpd.retval == -ENOSPC) && sbi->s_journal) { |
| 2534 | /* commit the transaction which would | 2548 | /* commit the transaction which would |
| 2535 | * free blocks released in the transaction | 2549 | * free blocks released in the transaction |
| 2536 | * and try again | 2550 | * and try again |
| @@ -2546,6 +2560,7 @@ static int ext4_da_writepages(struct address_space *mapping, | |||
| 2546 | pages_written += mpd.pages_written; | 2560 | pages_written += mpd.pages_written; |
| 2547 | wbc->pages_skipped = pages_skipped; | 2561 | wbc->pages_skipped = pages_skipped; |
| 2548 | ret = 0; | 2562 | ret = 0; |
| 2563 | io_done = 1; | ||
| 2549 | } else if (wbc->nr_to_write) | 2564 | } else if (wbc->nr_to_write) |
| 2550 | /* | 2565 | /* |
| 2551 | * There is no more writeout needed | 2566 | * There is no more writeout needed |
| @@ -2554,6 +2569,13 @@ static int ext4_da_writepages(struct address_space *mapping, | |||
| 2554 | */ | 2569 | */ |
| 2555 | break; | 2570 | break; |
| 2556 | } | 2571 | } |
| 2572 | if (!io_done && !cycled) { | ||
| 2573 | cycled = 1; | ||
| 2574 | index = 0; | ||
| 2575 | wbc->range_start = index << PAGE_CACHE_SHIFT; | ||
| 2576 | wbc->range_end = mapping->writeback_index - 1; | ||
| 2577 | goto retry; | ||
| 2578 | } | ||
| 2557 | if (pages_skipped != wbc->pages_skipped) | 2579 | if (pages_skipped != wbc->pages_skipped) |
| 2558 | printk(KERN_EMERG "This should not happen leaving %s " | 2580 | printk(KERN_EMERG "This should not happen leaving %s " |
| 2559 | "with nr_to_write = %ld ret = %d\n", | 2581 | "with nr_to_write = %ld ret = %d\n", |
| @@ -2561,6 +2583,7 @@ static int ext4_da_writepages(struct address_space *mapping, | |||
| 2561 | 2583 | ||
| 2562 | /* Update index */ | 2584 | /* Update index */ |
| 2563 | index += pages_written; | 2585 | index += pages_written; |
| 2586 | wbc->range_cyclic = range_cyclic; | ||
| 2564 | if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0)) | 2587 | if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0)) |
| 2565 | /* | 2588 | /* |
| 2566 | * set the writeback_index so that range_cyclic | 2589 | * set the writeback_index so that range_cyclic |
| @@ -2648,6 +2671,9 @@ retry: | |||
| 2648 | ret = PTR_ERR(handle); | 2671 | ret = PTR_ERR(handle); |
| 2649 | goto out; | 2672 | goto out; |
| 2650 | } | 2673 | } |
| 2674 | /* We cannot recurse into the filesystem as the transaction is already | ||
| 2675 | * started */ | ||
| 2676 | flags |= AOP_FLAG_NOFS; | ||
| 2651 | 2677 | ||
| 2652 | page = grab_cache_page_write_begin(mapping, index, flags); | 2678 | page = grab_cache_page_write_begin(mapping, index, flags); |
| 2653 | if (!page) { | 2679 | if (!page) { |
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index deba54f6cbed..4415beeb0b62 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c | |||
| @@ -3693,6 +3693,8 @@ ext4_mb_new_inode_pa(struct ext4_allocation_context *ac) | |||
| 3693 | pa->pa_free = pa->pa_len; | 3693 | pa->pa_free = pa->pa_len; |
| 3694 | atomic_set(&pa->pa_count, 1); | 3694 | atomic_set(&pa->pa_count, 1); |
| 3695 | spin_lock_init(&pa->pa_lock); | 3695 | spin_lock_init(&pa->pa_lock); |
| 3696 | INIT_LIST_HEAD(&pa->pa_inode_list); | ||
| 3697 | INIT_LIST_HEAD(&pa->pa_group_list); | ||
| 3696 | pa->pa_deleted = 0; | 3698 | pa->pa_deleted = 0; |
| 3697 | pa->pa_linear = 0; | 3699 | pa->pa_linear = 0; |
| 3698 | 3700 | ||
| @@ -3755,6 +3757,7 @@ ext4_mb_new_group_pa(struct ext4_allocation_context *ac) | |||
| 3755 | atomic_set(&pa->pa_count, 1); | 3757 | atomic_set(&pa->pa_count, 1); |
| 3756 | spin_lock_init(&pa->pa_lock); | 3758 | spin_lock_init(&pa->pa_lock); |
| 3757 | INIT_LIST_HEAD(&pa->pa_inode_list); | 3759 | INIT_LIST_HEAD(&pa->pa_inode_list); |
| 3760 | INIT_LIST_HEAD(&pa->pa_group_list); | ||
| 3758 | pa->pa_deleted = 0; | 3761 | pa->pa_deleted = 0; |
| 3759 | pa->pa_linear = 1; | 3762 | pa->pa_linear = 1; |
| 3760 | 3763 | ||
| @@ -4476,23 +4479,26 @@ static int ext4_mb_release_context(struct ext4_allocation_context *ac) | |||
| 4476 | pa->pa_free -= ac->ac_b_ex.fe_len; | 4479 | pa->pa_free -= ac->ac_b_ex.fe_len; |
| 4477 | pa->pa_len -= ac->ac_b_ex.fe_len; | 4480 | pa->pa_len -= ac->ac_b_ex.fe_len; |
| 4478 | spin_unlock(&pa->pa_lock); | 4481 | spin_unlock(&pa->pa_lock); |
| 4479 | /* | ||
| 4480 | * We want to add the pa to the right bucket. | ||
| 4481 | * Remove it from the list and while adding | ||
| 4482 | * make sure the list to which we are adding | ||
| 4483 | * doesn't grow big. | ||
| 4484 | */ | ||
| 4485 | if (likely(pa->pa_free)) { | ||
| 4486 | spin_lock(pa->pa_obj_lock); | ||
| 4487 | list_del_rcu(&pa->pa_inode_list); | ||
| 4488 | spin_unlock(pa->pa_obj_lock); | ||
| 4489 | ext4_mb_add_n_trim(ac); | ||
| 4490 | } | ||
| 4491 | } | 4482 | } |
| 4492 | ext4_mb_put_pa(ac, ac->ac_sb, pa); | ||
| 4493 | } | 4483 | } |
| 4494 | if (ac->alloc_semp) | 4484 | if (ac->alloc_semp) |
| 4495 | up_read(ac->alloc_semp); | 4485 | up_read(ac->alloc_semp); |
| 4486 | if (pa) { | ||
| 4487 | /* | ||
| 4488 | * We want to add the pa to the right bucket. | ||
| 4489 | * Remove it from the list and while adding | ||
| 4490 | * make sure the list to which we are adding | ||
| 4491 | * doesn't grow big. We need to release | ||
| 4492 | * alloc_semp before calling ext4_mb_add_n_trim() | ||
| 4493 | */ | ||
| 4494 | if (pa->pa_linear && likely(pa->pa_free)) { | ||
| 4495 | spin_lock(pa->pa_obj_lock); | ||
| 4496 | list_del_rcu(&pa->pa_inode_list); | ||
| 4497 | spin_unlock(pa->pa_obj_lock); | ||
| 4498 | ext4_mb_add_n_trim(ac); | ||
| 4499 | } | ||
| 4500 | ext4_mb_put_pa(ac, ac->ac_sb, pa); | ||
| 4501 | } | ||
| 4496 | if (ac->ac_bitmap_page) | 4502 | if (ac->ac_bitmap_page) |
| 4497 | page_cache_release(ac->ac_bitmap_page); | 4503 | page_cache_release(ac->ac_bitmap_page); |
| 4498 | if (ac->ac_buddy_page) | 4504 | if (ac->ac_buddy_page) |
diff --git a/fs/ext4/migrate.c b/fs/ext4/migrate.c index 734abca25e35..fe64d9f79852 100644 --- a/fs/ext4/migrate.c +++ b/fs/ext4/migrate.c | |||
| @@ -481,7 +481,7 @@ int ext4_ext_migrate(struct inode *inode) | |||
| 481 | + 1); | 481 | + 1); |
| 482 | if (IS_ERR(handle)) { | 482 | if (IS_ERR(handle)) { |
| 483 | retval = PTR_ERR(handle); | 483 | retval = PTR_ERR(handle); |
| 484 | goto err_out; | 484 | return retval; |
| 485 | } | 485 | } |
| 486 | tmp_inode = ext4_new_inode(handle, | 486 | tmp_inode = ext4_new_inode(handle, |
| 487 | inode->i_sb->s_root->d_inode, | 487 | inode->i_sb->s_root->d_inode, |
| @@ -489,8 +489,7 @@ int ext4_ext_migrate(struct inode *inode) | |||
| 489 | if (IS_ERR(tmp_inode)) { | 489 | if (IS_ERR(tmp_inode)) { |
| 490 | retval = -ENOMEM; | 490 | retval = -ENOMEM; |
| 491 | ext4_journal_stop(handle); | 491 | ext4_journal_stop(handle); |
| 492 | tmp_inode = NULL; | 492 | return retval; |
| 493 | goto err_out; | ||
| 494 | } | 493 | } |
| 495 | i_size_write(tmp_inode, i_size_read(inode)); | 494 | i_size_write(tmp_inode, i_size_read(inode)); |
| 496 | /* | 495 | /* |
| @@ -618,8 +617,7 @@ err_out: | |||
| 618 | 617 | ||
| 619 | ext4_journal_stop(handle); | 618 | ext4_journal_stop(handle); |
| 620 | 619 | ||
| 621 | if (tmp_inode) | 620 | iput(tmp_inode); |
| 622 | iput(tmp_inode); | ||
| 623 | 621 | ||
| 624 | return retval; | 622 | return retval; |
| 625 | } | 623 | } |
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index e5f06a5f045e..39d1993cfa13 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c | |||
| @@ -3046,14 +3046,17 @@ static void ext4_write_super(struct super_block *sb) | |||
| 3046 | static int ext4_sync_fs(struct super_block *sb, int wait) | 3046 | static int ext4_sync_fs(struct super_block *sb, int wait) |
| 3047 | { | 3047 | { |
| 3048 | int ret = 0; | 3048 | int ret = 0; |
| 3049 | tid_t target; | ||
| 3049 | 3050 | ||
| 3050 | trace_mark(ext4_sync_fs, "dev %s wait %d", sb->s_id, wait); | 3051 | trace_mark(ext4_sync_fs, "dev %s wait %d", sb->s_id, wait); |
| 3051 | sb->s_dirt = 0; | 3052 | sb->s_dirt = 0; |
| 3052 | if (EXT4_SB(sb)->s_journal) { | 3053 | if (EXT4_SB(sb)->s_journal) { |
| 3053 | if (wait) | 3054 | if (jbd2_journal_start_commit(EXT4_SB(sb)->s_journal, |
| 3054 | ret = ext4_force_commit(sb); | 3055 | &target)) { |
| 3055 | else | 3056 | if (wait) |
| 3056 | jbd2_journal_start_commit(EXT4_SB(sb)->s_journal, NULL); | 3057 | jbd2_log_wait_commit(EXT4_SB(sb)->s_journal, |
| 3058 | target); | ||
| 3059 | } | ||
| 3057 | } else { | 3060 | } else { |
| 3058 | ext4_commit_super(sb, EXT4_SB(sb)->s_es, wait); | 3061 | ext4_commit_super(sb, EXT4_SB(sb)->s_es, wait); |
| 3059 | } | 3062 | } |
| @@ -3088,7 +3091,6 @@ static int ext4_freeze(struct super_block *sb) | |||
| 3088 | 3091 | ||
| 3089 | /* Journal blocked and flushed, clear needs_recovery flag. */ | 3092 | /* Journal blocked and flushed, clear needs_recovery flag. */ |
| 3090 | EXT4_CLEAR_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER); | 3093 | EXT4_CLEAR_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER); |
| 3091 | ext4_commit_super(sb, EXT4_SB(sb)->s_es, 1); | ||
| 3092 | error = ext4_commit_super(sb, EXT4_SB(sb)->s_es, 1); | 3094 | error = ext4_commit_super(sb, EXT4_SB(sb)->s_es, 1); |
| 3093 | if (error) | 3095 | if (error) |
| 3094 | goto out; | 3096 | goto out; |
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 6903d37af037..9b800d97a687 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c | |||
| @@ -108,7 +108,8 @@ static int hugetlbfs_file_mmap(struct file *file, struct vm_area_struct *vma) | |||
| 108 | 108 | ||
| 109 | if (hugetlb_reserve_pages(inode, | 109 | if (hugetlb_reserve_pages(inode, |
| 110 | vma->vm_pgoff >> huge_page_order(h), | 110 | vma->vm_pgoff >> huge_page_order(h), |
| 111 | len >> huge_page_shift(h), vma)) | 111 | len >> huge_page_shift(h), vma, |
| 112 | vma->vm_flags)) | ||
| 112 | goto out; | 113 | goto out; |
| 113 | 114 | ||
| 114 | ret = 0; | 115 | ret = 0; |
| @@ -947,7 +948,7 @@ static int can_do_hugetlb_shm(void) | |||
| 947 | can_do_mlock()); | 948 | can_do_mlock()); |
| 948 | } | 949 | } |
| 949 | 950 | ||
| 950 | struct file *hugetlb_file_setup(const char *name, size_t size) | 951 | struct file *hugetlb_file_setup(const char *name, size_t size, int acctflag) |
| 951 | { | 952 | { |
| 952 | int error = -ENOMEM; | 953 | int error = -ENOMEM; |
| 953 | struct file *file; | 954 | struct file *file; |
| @@ -981,7 +982,8 @@ struct file *hugetlb_file_setup(const char *name, size_t size) | |||
| 981 | 982 | ||
| 982 | error = -ENOMEM; | 983 | error = -ENOMEM; |
| 983 | if (hugetlb_reserve_pages(inode, 0, | 984 | if (hugetlb_reserve_pages(inode, 0, |
| 984 | size >> huge_page_shift(hstate_inode(inode)), NULL)) | 985 | size >> huge_page_shift(hstate_inode(inode)), NULL, |
| 986 | acctflag)) | ||
| 985 | goto out_inode; | 987 | goto out_inode; |
| 986 | 988 | ||
| 987 | d_instantiate(dentry, inode); | 989 | d_instantiate(dentry, inode); |
diff --git a/fs/internal.h b/fs/internal.h index 53af885f1732..0d8ac497b3d5 100644 --- a/fs/internal.h +++ b/fs/internal.h | |||
| @@ -43,7 +43,7 @@ extern void __init chrdev_init(void); | |||
| 43 | /* | 43 | /* |
| 44 | * exec.c | 44 | * exec.c |
| 45 | */ | 45 | */ |
| 46 | extern void check_unsafe_exec(struct linux_binprm *); | 46 | extern void check_unsafe_exec(struct linux_binprm *, struct files_struct *); |
| 47 | 47 | ||
| 48 | /* | 48 | /* |
| 49 | * namespace.c | 49 | * namespace.c |
diff --git a/fs/jbd/journal.c b/fs/jbd/journal.c index 9e4fa52d7dc8..e79c07812afa 100644 --- a/fs/jbd/journal.c +++ b/fs/jbd/journal.c | |||
| @@ -427,7 +427,7 @@ int __log_space_left(journal_t *journal) | |||
| 427 | } | 427 | } |
| 428 | 428 | ||
| 429 | /* | 429 | /* |
| 430 | * Called under j_state_lock. Returns true if a transaction was started. | 430 | * Called under j_state_lock. Returns true if a transaction commit was started. |
| 431 | */ | 431 | */ |
| 432 | int __log_start_commit(journal_t *journal, tid_t target) | 432 | int __log_start_commit(journal_t *journal, tid_t target) |
| 433 | { | 433 | { |
| @@ -495,7 +495,8 @@ int journal_force_commit_nested(journal_t *journal) | |||
| 495 | 495 | ||
| 496 | /* | 496 | /* |
| 497 | * Start a commit of the current running transaction (if any). Returns true | 497 | * Start a commit of the current running transaction (if any). Returns true |
| 498 | * if a transaction was started, and fills its tid in at *ptid | 498 | * if a transaction is going to be committed (or is currently already |
| 499 | * committing), and fills its tid in at *ptid | ||
| 499 | */ | 500 | */ |
| 500 | int journal_start_commit(journal_t *journal, tid_t *ptid) | 501 | int journal_start_commit(journal_t *journal, tid_t *ptid) |
| 501 | { | 502 | { |
| @@ -505,15 +506,19 @@ int journal_start_commit(journal_t *journal, tid_t *ptid) | |||
| 505 | if (journal->j_running_transaction) { | 506 | if (journal->j_running_transaction) { |
| 506 | tid_t tid = journal->j_running_transaction->t_tid; | 507 | tid_t tid = journal->j_running_transaction->t_tid; |
| 507 | 508 | ||
| 508 | ret = __log_start_commit(journal, tid); | 509 | __log_start_commit(journal, tid); |
| 509 | if (ret && ptid) | 510 | /* There's a running transaction and we've just made sure |
| 511 | * it's commit has been scheduled. */ | ||
| 512 | if (ptid) | ||
| 510 | *ptid = tid; | 513 | *ptid = tid; |
| 511 | } else if (journal->j_committing_transaction && ptid) { | 514 | ret = 1; |
| 515 | } else if (journal->j_committing_transaction) { | ||
| 512 | /* | 516 | /* |
| 513 | * If ext3_write_super() recently started a commit, then we | 517 | * If ext3_write_super() recently started a commit, then we |
| 514 | * have to wait for completion of that transaction | 518 | * have to wait for completion of that transaction |
| 515 | */ | 519 | */ |
| 516 | *ptid = journal->j_committing_transaction->t_tid; | 520 | if (ptid) |
| 521 | *ptid = journal->j_committing_transaction->t_tid; | ||
| 517 | ret = 1; | 522 | ret = 1; |
| 518 | } | 523 | } |
| 519 | spin_unlock(&journal->j_state_lock); | 524 | spin_unlock(&journal->j_state_lock); |
diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index eb343008eded..58144102bf25 100644 --- a/fs/jbd2/journal.c +++ b/fs/jbd2/journal.c | |||
| @@ -450,7 +450,7 @@ int __jbd2_log_space_left(journal_t *journal) | |||
| 450 | } | 450 | } |
| 451 | 451 | ||
| 452 | /* | 452 | /* |
| 453 | * Called under j_state_lock. Returns true if a transaction was started. | 453 | * Called under j_state_lock. Returns true if a transaction commit was started. |
| 454 | */ | 454 | */ |
| 455 | int __jbd2_log_start_commit(journal_t *journal, tid_t target) | 455 | int __jbd2_log_start_commit(journal_t *journal, tid_t target) |
| 456 | { | 456 | { |
| @@ -518,7 +518,8 @@ int jbd2_journal_force_commit_nested(journal_t *journal) | |||
| 518 | 518 | ||
| 519 | /* | 519 | /* |
| 520 | * Start a commit of the current running transaction (if any). Returns true | 520 | * Start a commit of the current running transaction (if any). Returns true |
| 521 | * if a transaction was started, and fills its tid in at *ptid | 521 | * if a transaction is going to be committed (or is currently already |
| 522 | * committing), and fills its tid in at *ptid | ||
| 522 | */ | 523 | */ |
| 523 | int jbd2_journal_start_commit(journal_t *journal, tid_t *ptid) | 524 | int jbd2_journal_start_commit(journal_t *journal, tid_t *ptid) |
| 524 | { | 525 | { |
| @@ -528,15 +529,19 @@ int jbd2_journal_start_commit(journal_t *journal, tid_t *ptid) | |||
| 528 | if (journal->j_running_transaction) { | 529 | if (journal->j_running_transaction) { |
| 529 | tid_t tid = journal->j_running_transaction->t_tid; | 530 | tid_t tid = journal->j_running_transaction->t_tid; |
| 530 | 531 | ||
| 531 | ret = __jbd2_log_start_commit(journal, tid); | 532 | __jbd2_log_start_commit(journal, tid); |
| 532 | if (ret && ptid) | 533 | /* There's a running transaction and we've just made sure |
| 534 | * it's commit has been scheduled. */ | ||
| 535 | if (ptid) | ||
| 533 | *ptid = tid; | 536 | *ptid = tid; |
| 534 | } else if (journal->j_committing_transaction && ptid) { | 537 | ret = 1; |
| 538 | } else if (journal->j_committing_transaction) { | ||
| 535 | /* | 539 | /* |
| 536 | * If ext3_write_super() recently started a commit, then we | 540 | * If ext3_write_super() recently started a commit, then we |
| 537 | * have to wait for completion of that transaction | 541 | * have to wait for completion of that transaction |
| 538 | */ | 542 | */ |
| 539 | *ptid = journal->j_committing_transaction->t_tid; | 543 | if (ptid) |
| 544 | *ptid = journal->j_committing_transaction->t_tid; | ||
| 540 | ret = 1; | 545 | ret = 1; |
| 541 | } | 546 | } |
| 542 | spin_unlock(&journal->j_state_lock); | 547 | spin_unlock(&journal->j_state_lock); |
diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c index 46b4e347ed7d..28ce21d8598e 100644 --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c | |||
| @@ -2129,26 +2129,46 @@ done: | |||
| 2129 | } | 2129 | } |
| 2130 | 2130 | ||
| 2131 | /* | 2131 | /* |
| 2132 | * This function must be called when inode is journaled in ordered mode | 2132 | * File truncate and transaction commit interact with each other in a |
| 2133 | * before truncation happens. It starts writeout of truncated part in | 2133 | * non-trivial way. If a transaction writing data block A is |
| 2134 | * case it is in the committing transaction so that we stand to ordered | 2134 | * committing, we cannot discard the data by truncate until we have |
| 2135 | * mode consistency guarantees. | 2135 | * written them. Otherwise if we crashed after the transaction with |
| 2136 | * write has committed but before the transaction with truncate has | ||
| 2137 | * committed, we could see stale data in block A. This function is a | ||
| 2138 | * helper to solve this problem. It starts writeout of the truncated | ||
| 2139 | * part in case it is in the committing transaction. | ||
| 2140 | * | ||
| 2141 | * Filesystem code must call this function when inode is journaled in | ||
| 2142 | * ordered mode before truncation happens and after the inode has been | ||
| 2143 | * placed on orphan list with the new inode size. The second condition | ||
| 2144 | * avoids the race that someone writes new data and we start | ||
| 2145 | * committing the transaction after this function has been called but | ||
| 2146 | * before a transaction for truncate is started (and furthermore it | ||
| 2147 | * allows us to optimize the case where the addition to orphan list | ||
| 2148 | * happens in the same transaction as write --- we don't have to write | ||
| 2149 | * any data in such case). | ||
| 2136 | */ | 2150 | */ |
| 2137 | int jbd2_journal_begin_ordered_truncate(struct jbd2_inode *inode, | 2151 | int jbd2_journal_begin_ordered_truncate(journal_t *journal, |
| 2152 | struct jbd2_inode *jinode, | ||
| 2138 | loff_t new_size) | 2153 | loff_t new_size) |
| 2139 | { | 2154 | { |
| 2140 | journal_t *journal; | 2155 | transaction_t *inode_trans, *commit_trans; |
| 2141 | transaction_t *commit_trans; | ||
| 2142 | int ret = 0; | 2156 | int ret = 0; |
| 2143 | 2157 | ||
| 2144 | if (!inode->i_transaction && !inode->i_next_transaction) | 2158 | /* This is a quick check to avoid locking if not necessary */ |
| 2159 | if (!jinode->i_transaction) | ||
| 2145 | goto out; | 2160 | goto out; |
| 2146 | journal = inode->i_transaction->t_journal; | 2161 | /* Locks are here just to force reading of recent values, it is |
| 2162 | * enough that the transaction was not committing before we started | ||
| 2163 | * a transaction adding the inode to orphan list */ | ||
| 2147 | spin_lock(&journal->j_state_lock); | 2164 | spin_lock(&journal->j_state_lock); |
| 2148 | commit_trans = journal->j_committing_transaction; | 2165 | commit_trans = journal->j_committing_transaction; |
| 2149 | spin_unlock(&journal->j_state_lock); | 2166 | spin_unlock(&journal->j_state_lock); |
| 2150 | if (inode->i_transaction == commit_trans) { | 2167 | spin_lock(&journal->j_list_lock); |
| 2151 | ret = filemap_fdatawrite_range(inode->i_vfs_inode->i_mapping, | 2168 | inode_trans = jinode->i_transaction; |
| 2169 | spin_unlock(&journal->j_list_lock); | ||
| 2170 | if (inode_trans == commit_trans) { | ||
| 2171 | ret = filemap_fdatawrite_range(jinode->i_vfs_inode->i_mapping, | ||
| 2152 | new_size, LLONG_MAX); | 2172 | new_size, LLONG_MAX); |
| 2153 | if (ret) | 2173 | if (ret) |
| 2154 | jbd2_journal_abort(journal, ret); | 2174 | jbd2_journal_abort(journal, ret); |
diff --git a/fs/jffs2/background.c b/fs/jffs2/background.c index 3cceef4ad2b7..e9580104b6ba 100644 --- a/fs/jffs2/background.c +++ b/fs/jffs2/background.c | |||
| @@ -95,13 +95,17 @@ static int jffs2_garbage_collect_thread(void *_c) | |||
| 95 | spin_unlock(&c->erase_completion_lock); | 95 | spin_unlock(&c->erase_completion_lock); |
| 96 | 96 | ||
| 97 | 97 | ||
| 98 | /* This thread is purely an optimisation. But if it runs when | 98 | /* Problem - immediately after bootup, the GCD spends a lot |
| 99 | other things could be running, it actually makes things a | 99 | * of time in places like jffs2_kill_fragtree(); so much so |
| 100 | lot worse. Use yield() and put it at the back of the runqueue | 100 | * that userspace processes (like gdm and X) are starved |
| 101 | every time. Especially during boot, pulling an inode in | 101 | * despite plenty of cond_resched()s and renicing. Yield() |
| 102 | with read_inode() is much preferable to having the GC thread | 102 | * doesn't help, either (presumably because userspace and GCD |
| 103 | get there first. */ | 103 | * are generally competing for a higher latency resource - |
| 104 | yield(); | 104 | * disk). |
| 105 | * This forces the GCD to slow the hell down. Pulling an | ||
| 106 | * inode in with read_inode() is much preferable to having | ||
| 107 | * the GC thread get there first. */ | ||
| 108 | schedule_timeout_interruptible(msecs_to_jiffies(50)); | ||
| 105 | 109 | ||
| 106 | /* Put_super will send a SIGKILL and then wait on the sem. | 110 | /* Put_super will send a SIGKILL and then wait on the sem. |
| 107 | */ | 111 | */ |
diff --git a/fs/jffs2/readinode.c b/fs/jffs2/readinode.c index 6ca08ad887c0..1fc1e92356ee 100644 --- a/fs/jffs2/readinode.c +++ b/fs/jffs2/readinode.c | |||
| @@ -220,7 +220,7 @@ static int jffs2_add_tn_to_tree(struct jffs2_sb_info *c, | |||
| 220 | struct jffs2_tmp_dnode_info *tn) | 220 | struct jffs2_tmp_dnode_info *tn) |
| 221 | { | 221 | { |
| 222 | uint32_t fn_end = tn->fn->ofs + tn->fn->size; | 222 | uint32_t fn_end = tn->fn->ofs + tn->fn->size; |
| 223 | struct jffs2_tmp_dnode_info *this; | 223 | struct jffs2_tmp_dnode_info *this, *ptn; |
| 224 | 224 | ||
| 225 | dbg_readinode("insert fragment %#04x-%#04x, ver %u at %08x\n", tn->fn->ofs, fn_end, tn->version, ref_offset(tn->fn->raw)); | 225 | dbg_readinode("insert fragment %#04x-%#04x, ver %u at %08x\n", tn->fn->ofs, fn_end, tn->version, ref_offset(tn->fn->raw)); |
| 226 | 226 | ||
| @@ -251,11 +251,18 @@ static int jffs2_add_tn_to_tree(struct jffs2_sb_info *c, | |||
| 251 | if (this) { | 251 | if (this) { |
| 252 | /* If the node is coincident with another at a lower address, | 252 | /* If the node is coincident with another at a lower address, |
| 253 | back up until the other node is found. It may be relevant */ | 253 | back up until the other node is found. It may be relevant */ |
| 254 | while (this->overlapped) | 254 | while (this->overlapped) { |
| 255 | this = tn_prev(this); | 255 | ptn = tn_prev(this); |
| 256 | 256 | if (!ptn) { | |
| 257 | /* First node should never be marked overlapped */ | 257 | /* |
| 258 | BUG_ON(!this); | 258 | * We killed a node which set the overlapped |
| 259 | * flags during the scan. Fix it up. | ||
| 260 | */ | ||
| 261 | this->overlapped = 0; | ||
| 262 | break; | ||
| 263 | } | ||
| 264 | this = ptn; | ||
| 265 | } | ||
| 259 | dbg_readinode("'this' found %#04x-%#04x (%s)\n", this->fn->ofs, this->fn->ofs + this->fn->size, this->fn ? "data" : "hole"); | 266 | dbg_readinode("'this' found %#04x-%#04x (%s)\n", this->fn->ofs, this->fn->ofs + this->fn->size, this->fn ? "data" : "hole"); |
| 260 | } | 267 | } |
| 261 | 268 | ||
| @@ -360,7 +367,17 @@ static int jffs2_add_tn_to_tree(struct jffs2_sb_info *c, | |||
| 360 | } | 367 | } |
| 361 | if (!this->overlapped) | 368 | if (!this->overlapped) |
| 362 | break; | 369 | break; |
| 363 | this = tn_prev(this); | 370 | |
| 371 | ptn = tn_prev(this); | ||
| 372 | if (!ptn) { | ||
| 373 | /* | ||
| 374 | * We killed a node which set the overlapped | ||
| 375 | * flags during the scan. Fix it up. | ||
| 376 | */ | ||
| 377 | this->overlapped = 0; | ||
| 378 | break; | ||
| 379 | } | ||
| 380 | this = ptn; | ||
| 364 | } | 381 | } |
| 365 | } | 382 | } |
| 366 | 383 | ||
| @@ -456,8 +473,15 @@ static int jffs2_build_inode_fragtree(struct jffs2_sb_info *c, | |||
| 456 | eat_last(&rii->tn_root, &last->rb); | 473 | eat_last(&rii->tn_root, &last->rb); |
| 457 | ver_insert(&ver_root, last); | 474 | ver_insert(&ver_root, last); |
| 458 | 475 | ||
| 459 | if (unlikely(last->overlapped)) | 476 | if (unlikely(last->overlapped)) { |
| 460 | continue; | 477 | if (pen) |
| 478 | continue; | ||
| 479 | /* | ||
| 480 | * We killed a node which set the overlapped | ||
| 481 | * flags during the scan. Fix it up. | ||
| 482 | */ | ||
| 483 | last->overlapped = 0; | ||
| 484 | } | ||
| 461 | 485 | ||
| 462 | /* Now we have a bunch of nodes in reverse version | 486 | /* Now we have a bunch of nodes in reverse version |
| 463 | order, in the tree at ver_root. Most of the time, | 487 | order, in the tree at ver_root. Most of the time, |
diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c index 6063a8e4b9f3..763b78a6e9de 100644 --- a/fs/lockd/svclock.c +++ b/fs/lockd/svclock.c | |||
| @@ -427,7 +427,7 @@ nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file, | |||
| 427 | goto out; | 427 | goto out; |
| 428 | case -EAGAIN: | 428 | case -EAGAIN: |
| 429 | ret = nlm_lck_denied; | 429 | ret = nlm_lck_denied; |
| 430 | goto out; | 430 | break; |
| 431 | case FILE_LOCK_DEFERRED: | 431 | case FILE_LOCK_DEFERRED: |
| 432 | if (wait) | 432 | if (wait) |
| 433 | break; | 433 | break; |
| @@ -443,6 +443,10 @@ nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file, | |||
| 443 | goto out; | 443 | goto out; |
| 444 | } | 444 | } |
| 445 | 445 | ||
| 446 | ret = nlm_lck_denied; | ||
| 447 | if (!wait) | ||
| 448 | goto out; | ||
| 449 | |||
| 446 | ret = nlm_lck_blocked; | 450 | ret = nlm_lck_blocked; |
| 447 | 451 | ||
| 448 | /* Append to list of blocked */ | 452 | /* Append to list of blocked */ |
diff --git a/fs/namespace.c b/fs/namespace.c index 228d8c4bfd18..06f8e63f6cb1 100644 --- a/fs/namespace.c +++ b/fs/namespace.c | |||
| @@ -614,9 +614,11 @@ static inline void __mntput(struct vfsmount *mnt) | |||
| 614 | */ | 614 | */ |
| 615 | for_each_possible_cpu(cpu) { | 615 | for_each_possible_cpu(cpu) { |
| 616 | struct mnt_writer *cpu_writer = &per_cpu(mnt_writers, cpu); | 616 | struct mnt_writer *cpu_writer = &per_cpu(mnt_writers, cpu); |
| 617 | if (cpu_writer->mnt != mnt) | ||
| 618 | continue; | ||
| 619 | spin_lock(&cpu_writer->lock); | 617 | spin_lock(&cpu_writer->lock); |
| 618 | if (cpu_writer->mnt != mnt) { | ||
| 619 | spin_unlock(&cpu_writer->lock); | ||
| 620 | continue; | ||
| 621 | } | ||
| 620 | atomic_add(cpu_writer->count, &mnt->__mnt_writers); | 622 | atomic_add(cpu_writer->count, &mnt->__mnt_writers); |
| 621 | cpu_writer->count = 0; | 623 | cpu_writer->count = 0; |
| 622 | /* | 624 | /* |
diff --git a/fs/notify/inotify/inotify.c b/fs/notify/inotify/inotify.c index dae3f28f30d4..331f2e88e284 100644 --- a/fs/notify/inotify/inotify.c +++ b/fs/notify/inotify/inotify.c | |||
| @@ -156,7 +156,7 @@ static int inotify_handle_get_wd(struct inotify_handle *ih, | |||
| 156 | int ret; | 156 | int ret; |
| 157 | 157 | ||
| 158 | do { | 158 | do { |
| 159 | if (unlikely(!idr_pre_get(&ih->idr, GFP_KERNEL))) | 159 | if (unlikely(!idr_pre_get(&ih->idr, GFP_NOFS))) |
| 160 | return -ENOSPC; | 160 | return -ENOSPC; |
| 161 | ret = idr_get_new_above(&ih->idr, watch, ih->last_wd+1, &watch->wd); | 161 | ret = idr_get_new_above(&ih->idr, watch, ih->last_wd+1, &watch->wd); |
| 162 | } while (ret == -EAGAIN); | 162 | } while (ret == -EAGAIN); |
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c index 60fe74035db5..3a9e5deed74d 100644 --- a/fs/ocfs2/alloc.c +++ b/fs/ocfs2/alloc.c | |||
| @@ -4796,6 +4796,29 @@ out: | |||
| 4796 | return ret; | 4796 | return ret; |
| 4797 | } | 4797 | } |
| 4798 | 4798 | ||
| 4799 | static int ocfs2_replace_extent_rec(struct inode *inode, | ||
| 4800 | handle_t *handle, | ||
| 4801 | struct ocfs2_path *path, | ||
| 4802 | struct ocfs2_extent_list *el, | ||
| 4803 | int split_index, | ||
| 4804 | struct ocfs2_extent_rec *split_rec) | ||
| 4805 | { | ||
| 4806 | int ret; | ||
| 4807 | |||
| 4808 | ret = ocfs2_path_bh_journal_access(handle, inode, path, | ||
| 4809 | path_num_items(path) - 1); | ||
| 4810 | if (ret) { | ||
| 4811 | mlog_errno(ret); | ||
| 4812 | goto out; | ||
| 4813 | } | ||
| 4814 | |||
| 4815 | el->l_recs[split_index] = *split_rec; | ||
| 4816 | |||
| 4817 | ocfs2_journal_dirty(handle, path_leaf_bh(path)); | ||
| 4818 | out: | ||
| 4819 | return ret; | ||
| 4820 | } | ||
| 4821 | |||
| 4799 | /* | 4822 | /* |
| 4800 | * Mark part or all of the extent record at split_index in the leaf | 4823 | * Mark part or all of the extent record at split_index in the leaf |
| 4801 | * pointed to by path as written. This removes the unwritten | 4824 | * pointed to by path as written. This removes the unwritten |
| @@ -4885,7 +4908,9 @@ static int __ocfs2_mark_extent_written(struct inode *inode, | |||
| 4885 | 4908 | ||
| 4886 | if (ctxt.c_contig_type == CONTIG_NONE) { | 4909 | if (ctxt.c_contig_type == CONTIG_NONE) { |
| 4887 | if (ctxt.c_split_covers_rec) | 4910 | if (ctxt.c_split_covers_rec) |
| 4888 | el->l_recs[split_index] = *split_rec; | 4911 | ret = ocfs2_replace_extent_rec(inode, handle, |
| 4912 | path, el, | ||
| 4913 | split_index, split_rec); | ||
| 4889 | else | 4914 | else |
| 4890 | ret = ocfs2_split_and_insert(inode, handle, path, et, | 4915 | ret = ocfs2_split_and_insert(inode, handle, path, et, |
| 4891 | &last_eb_bh, split_index, | 4916 | &last_eb_bh, split_index, |
diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c index 54e182a27caf..0a2813947853 100644 --- a/fs/ocfs2/dlm/dlmmaster.c +++ b/fs/ocfs2/dlm/dlmmaster.c | |||
| @@ -1849,12 +1849,12 @@ int dlm_assert_master_handler(struct o2net_msg *msg, u32 len, void *data, | |||
| 1849 | if (!mle) { | 1849 | if (!mle) { |
| 1850 | if (res->owner != DLM_LOCK_RES_OWNER_UNKNOWN && | 1850 | if (res->owner != DLM_LOCK_RES_OWNER_UNKNOWN && |
| 1851 | res->owner != assert->node_idx) { | 1851 | res->owner != assert->node_idx) { |
| 1852 | mlog(ML_ERROR, "assert_master from " | 1852 | mlog(ML_ERROR, "DIE! Mastery assert from %u, " |
| 1853 | "%u, but current owner is " | 1853 | "but current owner is %u! (%.*s)\n", |
| 1854 | "%u! (%.*s)\n", | 1854 | assert->node_idx, res->owner, namelen, |
| 1855 | assert->node_idx, res->owner, | 1855 | name); |
| 1856 | namelen, name); | 1856 | __dlm_print_one_lock_resource(res); |
| 1857 | goto kill; | 1857 | BUG(); |
| 1858 | } | 1858 | } |
| 1859 | } else if (mle->type != DLM_MLE_MIGRATION) { | 1859 | } else if (mle->type != DLM_MLE_MIGRATION) { |
| 1860 | if (res->owner != DLM_LOCK_RES_OWNER_UNKNOWN) { | 1860 | if (res->owner != DLM_LOCK_RES_OWNER_UNKNOWN) { |
diff --git a/fs/ocfs2/dlm/dlmthread.c b/fs/ocfs2/dlm/dlmthread.c index d1295203029f..4060bb328bc8 100644 --- a/fs/ocfs2/dlm/dlmthread.c +++ b/fs/ocfs2/dlm/dlmthread.c | |||
| @@ -181,8 +181,7 @@ static int dlm_purge_lockres(struct dlm_ctxt *dlm, | |||
| 181 | 181 | ||
| 182 | spin_lock(&res->spinlock); | 182 | spin_lock(&res->spinlock); |
| 183 | /* This ensures that clear refmap is sent after the set */ | 183 | /* This ensures that clear refmap is sent after the set */ |
| 184 | __dlm_wait_on_lockres_flags(res, (DLM_LOCK_RES_SETREF_INPROG | | 184 | __dlm_wait_on_lockres_flags(res, DLM_LOCK_RES_SETREF_INPROG); |
| 185 | DLM_LOCK_RES_MIGRATING)); | ||
| 186 | spin_unlock(&res->spinlock); | 185 | spin_unlock(&res->spinlock); |
| 187 | 186 | ||
| 188 | /* clear our bit from the master's refmap, ignore errors */ | 187 | /* clear our bit from the master's refmap, ignore errors */ |
diff --git a/fs/ocfs2/dlm/dlmunlock.c b/fs/ocfs2/dlm/dlmunlock.c index 86ca085ef324..fcf879ed6930 100644 --- a/fs/ocfs2/dlm/dlmunlock.c +++ b/fs/ocfs2/dlm/dlmunlock.c | |||
| @@ -117,11 +117,11 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm, | |||
| 117 | else | 117 | else |
| 118 | BUG_ON(res->owner == dlm->node_num); | 118 | BUG_ON(res->owner == dlm->node_num); |
| 119 | 119 | ||
| 120 | spin_lock(&dlm->spinlock); | 120 | spin_lock(&dlm->ast_lock); |
| 121 | /* We want to be sure that we're not freeing a lock | 121 | /* We want to be sure that we're not freeing a lock |
| 122 | * that still has AST's pending... */ | 122 | * that still has AST's pending... */ |
| 123 | in_use = !list_empty(&lock->ast_list); | 123 | in_use = !list_empty(&lock->ast_list); |
| 124 | spin_unlock(&dlm->spinlock); | 124 | spin_unlock(&dlm->ast_lock); |
| 125 | if (in_use) { | 125 | if (in_use) { |
| 126 | mlog(ML_ERROR, "lockres %.*s: Someone is calling dlmunlock " | 126 | mlog(ML_ERROR, "lockres %.*s: Someone is calling dlmunlock " |
| 127 | "while waiting for an ast!", res->lockname.len, | 127 | "while waiting for an ast!", res->lockname.len, |
diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c index 206a2370876a..7219a86d34cc 100644 --- a/fs/ocfs2/dlmglue.c +++ b/fs/ocfs2/dlmglue.c | |||
| @@ -320,9 +320,14 @@ static void ocfs2_schedule_blocked_lock(struct ocfs2_super *osb, | |||
| 320 | struct ocfs2_lock_res *lockres); | 320 | struct ocfs2_lock_res *lockres); |
| 321 | static inline void ocfs2_recover_from_dlm_error(struct ocfs2_lock_res *lockres, | 321 | static inline void ocfs2_recover_from_dlm_error(struct ocfs2_lock_res *lockres, |
| 322 | int convert); | 322 | int convert); |
| 323 | #define ocfs2_log_dlm_error(_func, _err, _lockres) do { \ | 323 | #define ocfs2_log_dlm_error(_func, _err, _lockres) do { \ |
| 324 | mlog(ML_ERROR, "DLM error %d while calling %s on resource %s\n", \ | 324 | if ((_lockres)->l_type != OCFS2_LOCK_TYPE_DENTRY) \ |
| 325 | _err, _func, _lockres->l_name); \ | 325 | mlog(ML_ERROR, "DLM error %d while calling %s on resource %s\n", \ |
| 326 | _err, _func, _lockres->l_name); \ | ||
| 327 | else \ | ||
| 328 | mlog(ML_ERROR, "DLM error %d while calling %s on resource %.*s%08x\n", \ | ||
| 329 | _err, _func, OCFS2_DENTRY_LOCK_INO_START - 1, (_lockres)->l_name, \ | ||
| 330 | (unsigned int)ocfs2_get_dentry_lock_ino(_lockres)); \ | ||
| 326 | } while (0) | 331 | } while (0) |
| 327 | static int ocfs2_downconvert_thread(void *arg); | 332 | static int ocfs2_downconvert_thread(void *arg); |
| 328 | static void ocfs2_downconvert_on_unlock(struct ocfs2_super *osb, | 333 | static void ocfs2_downconvert_on_unlock(struct ocfs2_super *osb, |
diff --git a/fs/ocfs2/journal.h b/fs/ocfs2/journal.h index 3c3532e1307c..172850a9a12a 100644 --- a/fs/ocfs2/journal.h +++ b/fs/ocfs2/journal.h | |||
| @@ -513,8 +513,10 @@ static inline int ocfs2_jbd2_file_inode(handle_t *handle, struct inode *inode) | |||
| 513 | static inline int ocfs2_begin_ordered_truncate(struct inode *inode, | 513 | static inline int ocfs2_begin_ordered_truncate(struct inode *inode, |
| 514 | loff_t new_size) | 514 | loff_t new_size) |
| 515 | { | 515 | { |
| 516 | return jbd2_journal_begin_ordered_truncate(&OCFS2_I(inode)->ip_jinode, | 516 | return jbd2_journal_begin_ordered_truncate( |
| 517 | new_size); | 517 | OCFS2_SB(inode->i_sb)->journal->j_journal, |
| 518 | &OCFS2_I(inode)->ip_jinode, | ||
| 519 | new_size); | ||
| 518 | } | 520 | } |
| 519 | 521 | ||
| 520 | #endif /* OCFS2_JOURNAL_H */ | 522 | #endif /* OCFS2_JOURNAL_H */ |
diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h index 077384135f4e..946d3c34b90b 100644 --- a/fs/ocfs2/ocfs2.h +++ b/fs/ocfs2/ocfs2.h | |||
| @@ -341,6 +341,9 @@ struct ocfs2_super | |||
| 341 | struct ocfs2_node_map osb_recovering_orphan_dirs; | 341 | struct ocfs2_node_map osb_recovering_orphan_dirs; |
| 342 | unsigned int *osb_orphan_wipes; | 342 | unsigned int *osb_orphan_wipes; |
| 343 | wait_queue_head_t osb_wipe_event; | 343 | wait_queue_head_t osb_wipe_event; |
| 344 | |||
| 345 | /* used to protect metaecc calculation check of xattr. */ | ||
| 346 | spinlock_t osb_xattr_lock; | ||
| 344 | }; | 347 | }; |
| 345 | 348 | ||
| 346 | #define OCFS2_SB(sb) ((struct ocfs2_super *)(sb)->s_fs_info) | 349 | #define OCFS2_SB(sb) ((struct ocfs2_super *)(sb)->s_fs_info) |
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index b1cb38fbe807..7ac83a81ee55 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c | |||
| @@ -1537,6 +1537,13 @@ static int ocfs2_get_sector(struct super_block *sb, | |||
| 1537 | unlock_buffer(*bh); | 1537 | unlock_buffer(*bh); |
| 1538 | ll_rw_block(READ, 1, bh); | 1538 | ll_rw_block(READ, 1, bh); |
| 1539 | wait_on_buffer(*bh); | 1539 | wait_on_buffer(*bh); |
| 1540 | if (!buffer_uptodate(*bh)) { | ||
| 1541 | mlog_errno(-EIO); | ||
| 1542 | brelse(*bh); | ||
| 1543 | *bh = NULL; | ||
| 1544 | return -EIO; | ||
| 1545 | } | ||
| 1546 | |||
| 1540 | return 0; | 1547 | return 0; |
| 1541 | } | 1548 | } |
| 1542 | 1549 | ||
| @@ -1747,6 +1754,7 @@ static int ocfs2_initialize_super(struct super_block *sb, | |||
| 1747 | INIT_LIST_HEAD(&osb->blocked_lock_list); | 1754 | INIT_LIST_HEAD(&osb->blocked_lock_list); |
| 1748 | osb->blocked_lock_count = 0; | 1755 | osb->blocked_lock_count = 0; |
| 1749 | spin_lock_init(&osb->osb_lock); | 1756 | spin_lock_init(&osb->osb_lock); |
| 1757 | spin_lock_init(&osb->osb_xattr_lock); | ||
| 1750 | ocfs2_init_inode_steal_slot(osb); | 1758 | ocfs2_init_inode_steal_slot(osb); |
| 1751 | 1759 | ||
| 1752 | atomic_set(&osb->alloc_stats.moves, 0); | 1760 | atomic_set(&osb->alloc_stats.moves, 0); |
diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c index 915039fffe6e..4ddd788add67 100644 --- a/fs/ocfs2/xattr.c +++ b/fs/ocfs2/xattr.c | |||
| @@ -82,13 +82,14 @@ struct ocfs2_xattr_set_ctxt { | |||
| 82 | 82 | ||
| 83 | #define OCFS2_XATTR_ROOT_SIZE (sizeof(struct ocfs2_xattr_def_value_root)) | 83 | #define OCFS2_XATTR_ROOT_SIZE (sizeof(struct ocfs2_xattr_def_value_root)) |
| 84 | #define OCFS2_XATTR_INLINE_SIZE 80 | 84 | #define OCFS2_XATTR_INLINE_SIZE 80 |
| 85 | #define OCFS2_XATTR_HEADER_GAP 4 | ||
| 85 | #define OCFS2_XATTR_FREE_IN_IBODY (OCFS2_MIN_XATTR_INLINE_SIZE \ | 86 | #define OCFS2_XATTR_FREE_IN_IBODY (OCFS2_MIN_XATTR_INLINE_SIZE \ |
| 86 | - sizeof(struct ocfs2_xattr_header) \ | 87 | - sizeof(struct ocfs2_xattr_header) \ |
| 87 | - sizeof(__u32)) | 88 | - OCFS2_XATTR_HEADER_GAP) |
| 88 | #define OCFS2_XATTR_FREE_IN_BLOCK(ptr) ((ptr)->i_sb->s_blocksize \ | 89 | #define OCFS2_XATTR_FREE_IN_BLOCK(ptr) ((ptr)->i_sb->s_blocksize \ |
| 89 | - sizeof(struct ocfs2_xattr_block) \ | 90 | - sizeof(struct ocfs2_xattr_block) \ |
| 90 | - sizeof(struct ocfs2_xattr_header) \ | 91 | - sizeof(struct ocfs2_xattr_header) \ |
| 91 | - sizeof(__u32)) | 92 | - OCFS2_XATTR_HEADER_GAP) |
| 92 | 93 | ||
| 93 | static struct ocfs2_xattr_def_value_root def_xv = { | 94 | static struct ocfs2_xattr_def_value_root def_xv = { |
| 94 | .xv.xr_list.l_count = cpu_to_le16(1), | 95 | .xv.xr_list.l_count = cpu_to_le16(1), |
| @@ -274,10 +275,12 @@ static int ocfs2_read_xattr_bucket(struct ocfs2_xattr_bucket *bucket, | |||
| 274 | bucket->bu_blocks, bucket->bu_bhs, 0, | 275 | bucket->bu_blocks, bucket->bu_bhs, 0, |
| 275 | NULL); | 276 | NULL); |
| 276 | if (!rc) { | 277 | if (!rc) { |
| 278 | spin_lock(&OCFS2_SB(bucket->bu_inode->i_sb)->osb_xattr_lock); | ||
| 277 | rc = ocfs2_validate_meta_ecc_bhs(bucket->bu_inode->i_sb, | 279 | rc = ocfs2_validate_meta_ecc_bhs(bucket->bu_inode->i_sb, |
| 278 | bucket->bu_bhs, | 280 | bucket->bu_bhs, |
| 279 | bucket->bu_blocks, | 281 | bucket->bu_blocks, |
| 280 | &bucket_xh(bucket)->xh_check); | 282 | &bucket_xh(bucket)->xh_check); |
| 283 | spin_unlock(&OCFS2_SB(bucket->bu_inode->i_sb)->osb_xattr_lock); | ||
| 281 | if (rc) | 284 | if (rc) |
| 282 | mlog_errno(rc); | 285 | mlog_errno(rc); |
| 283 | } | 286 | } |
| @@ -310,9 +313,11 @@ static void ocfs2_xattr_bucket_journal_dirty(handle_t *handle, | |||
| 310 | { | 313 | { |
| 311 | int i; | 314 | int i; |
| 312 | 315 | ||
| 316 | spin_lock(&OCFS2_SB(bucket->bu_inode->i_sb)->osb_xattr_lock); | ||
| 313 | ocfs2_compute_meta_ecc_bhs(bucket->bu_inode->i_sb, | 317 | ocfs2_compute_meta_ecc_bhs(bucket->bu_inode->i_sb, |
| 314 | bucket->bu_bhs, bucket->bu_blocks, | 318 | bucket->bu_bhs, bucket->bu_blocks, |
| 315 | &bucket_xh(bucket)->xh_check); | 319 | &bucket_xh(bucket)->xh_check); |
| 320 | spin_unlock(&OCFS2_SB(bucket->bu_inode->i_sb)->osb_xattr_lock); | ||
| 316 | 321 | ||
| 317 | for (i = 0; i < bucket->bu_blocks; i++) | 322 | for (i = 0; i < bucket->bu_blocks; i++) |
| 318 | ocfs2_journal_dirty(handle, bucket->bu_bhs[i]); | 323 | ocfs2_journal_dirty(handle, bucket->bu_bhs[i]); |
| @@ -1507,7 +1512,7 @@ static int ocfs2_xattr_set_entry(struct inode *inode, | |||
| 1507 | last += 1; | 1512 | last += 1; |
| 1508 | } | 1513 | } |
| 1509 | 1514 | ||
| 1510 | free = min_offs - ((void *)last - xs->base) - sizeof(__u32); | 1515 | free = min_offs - ((void *)last - xs->base) - OCFS2_XATTR_HEADER_GAP; |
| 1511 | if (free < 0) | 1516 | if (free < 0) |
| 1512 | return -EIO; | 1517 | return -EIO; |
| 1513 | 1518 | ||
| @@ -2190,7 +2195,7 @@ static int ocfs2_xattr_can_be_in_inode(struct inode *inode, | |||
| 2190 | last += 1; | 2195 | last += 1; |
| 2191 | } | 2196 | } |
| 2192 | 2197 | ||
| 2193 | free = min_offs - ((void *)last - xs->base) - sizeof(__u32); | 2198 | free = min_offs - ((void *)last - xs->base) - OCFS2_XATTR_HEADER_GAP; |
| 2194 | if (free < 0) | 2199 | if (free < 0) |
| 2195 | return 0; | 2200 | return 0; |
| 2196 | 2201 | ||
| @@ -2592,8 +2597,9 @@ static int __ocfs2_xattr_set_handle(struct inode *inode, | |||
| 2592 | 2597 | ||
| 2593 | if (!ret) { | 2598 | if (!ret) { |
| 2594 | /* Update inode ctime. */ | 2599 | /* Update inode ctime. */ |
| 2595 | ret = ocfs2_journal_access(ctxt->handle, inode, xis->inode_bh, | 2600 | ret = ocfs2_journal_access_di(ctxt->handle, inode, |
| 2596 | OCFS2_JOURNAL_ACCESS_WRITE); | 2601 | xis->inode_bh, |
| 2602 | OCFS2_JOURNAL_ACCESS_WRITE); | ||
| 2597 | if (ret) { | 2603 | if (ret) { |
| 2598 | mlog_errno(ret); | 2604 | mlog_errno(ret); |
| 2599 | goto out; | 2605 | goto out; |
| @@ -5060,8 +5066,8 @@ try_again: | |||
| 5060 | xh_free_start = le16_to_cpu(xh->xh_free_start); | 5066 | xh_free_start = le16_to_cpu(xh->xh_free_start); |
| 5061 | header_size = sizeof(struct ocfs2_xattr_header) + | 5067 | header_size = sizeof(struct ocfs2_xattr_header) + |
| 5062 | count * sizeof(struct ocfs2_xattr_entry); | 5068 | count * sizeof(struct ocfs2_xattr_entry); |
| 5063 | max_free = OCFS2_XATTR_BUCKET_SIZE - | 5069 | max_free = OCFS2_XATTR_BUCKET_SIZE - header_size - |
| 5064 | le16_to_cpu(xh->xh_name_value_len) - header_size; | 5070 | le16_to_cpu(xh->xh_name_value_len) - OCFS2_XATTR_HEADER_GAP; |
| 5065 | 5071 | ||
| 5066 | mlog_bug_on_msg(header_size > blocksize, "bucket %llu has header size " | 5072 | mlog_bug_on_msg(header_size > blocksize, "bucket %llu has header size " |
| 5067 | "of %u which exceed block size\n", | 5073 | "of %u which exceed block size\n", |
| @@ -5094,7 +5100,7 @@ try_again: | |||
| 5094 | need = 0; | 5100 | need = 0; |
| 5095 | } | 5101 | } |
| 5096 | 5102 | ||
| 5097 | free = xh_free_start - header_size; | 5103 | free = xh_free_start - header_size - OCFS2_XATTR_HEADER_GAP; |
| 5098 | /* | 5104 | /* |
| 5099 | * We need to make sure the new name/value pair | 5105 | * We need to make sure the new name/value pair |
| 5100 | * can exist in the same block. | 5106 | * can exist in the same block. |
| @@ -5127,7 +5133,8 @@ try_again: | |||
| 5127 | } | 5133 | } |
| 5128 | 5134 | ||
| 5129 | xh_free_start = le16_to_cpu(xh->xh_free_start); | 5135 | xh_free_start = le16_to_cpu(xh->xh_free_start); |
| 5130 | free = xh_free_start - header_size; | 5136 | free = xh_free_start - header_size |
| 5137 | - OCFS2_XATTR_HEADER_GAP; | ||
| 5131 | if (xh_free_start % blocksize < need) | 5138 | if (xh_free_start % blocksize < need) |
| 5132 | free -= xh_free_start % blocksize; | 5139 | free -= xh_free_start % blocksize; |
| 5133 | 5140 | ||
diff --git a/fs/proc/inode.c b/fs/proc/inode.c index 3e76bb9b3ad6..d8bb5c671f42 100644 --- a/fs/proc/inode.c +++ b/fs/proc/inode.c | |||
| @@ -485,8 +485,10 @@ struct inode *proc_get_inode(struct super_block *sb, unsigned int ino, | |||
| 485 | } | 485 | } |
| 486 | } | 486 | } |
| 487 | unlock_new_inode(inode); | 487 | unlock_new_inode(inode); |
| 488 | } else | 488 | } else { |
| 489 | module_put(de->owner); | 489 | module_put(de->owner); |
| 490 | de_put(de); | ||
| 491 | } | ||
| 490 | return inode; | 492 | return inode; |
| 491 | 493 | ||
| 492 | out_ino: | 494 | out_ino: |
diff --git a/fs/proc/page.c b/fs/proc/page.c index 767d95a6d1b1..2d1345112a42 100644 --- a/fs/proc/page.c +++ b/fs/proc/page.c | |||
| @@ -107,7 +107,7 @@ static ssize_t kpageflags_read(struct file *file, char __user *buf, | |||
| 107 | else | 107 | else |
| 108 | kflags = ppage->flags; | 108 | kflags = ppage->flags; |
| 109 | 109 | ||
| 110 | uflags = kpf_copy_bit(KPF_LOCKED, PG_locked, kflags) | | 110 | uflags = kpf_copy_bit(kflags, KPF_LOCKED, PG_locked) | |
| 111 | kpf_copy_bit(kflags, KPF_ERROR, PG_error) | | 111 | kpf_copy_bit(kflags, KPF_ERROR, PG_error) | |
| 112 | kpf_copy_bit(kflags, KPF_REFERENCED, PG_referenced) | | 112 | kpf_copy_bit(kflags, KPF_REFERENCED, PG_referenced) | |
| 113 | kpf_copy_bit(kflags, KPF_UPTODATE, PG_uptodate) | | 113 | kpf_copy_bit(kflags, KPF_UPTODATE, PG_uptodate) | |
diff --git a/fs/seq_file.c b/fs/seq_file.c index 5267098532bf..a1a4cfe19210 100644 --- a/fs/seq_file.c +++ b/fs/seq_file.c | |||
| @@ -48,8 +48,16 @@ int seq_open(struct file *file, const struct seq_operations *op) | |||
| 48 | */ | 48 | */ |
| 49 | file->f_version = 0; | 49 | file->f_version = 0; |
| 50 | 50 | ||
| 51 | /* SEQ files support lseek, but not pread/pwrite */ | 51 | /* |
| 52 | file->f_mode &= ~(FMODE_PREAD | FMODE_PWRITE); | 52 | * seq_files support lseek() and pread(). They do not implement |
| 53 | * write() at all, but we clear FMODE_PWRITE here for historical | ||
| 54 | * reasons. | ||
| 55 | * | ||
| 56 | * If a client of seq_files a) implements file.write() and b) wishes to | ||
| 57 | * support pwrite() then that client will need to implement its own | ||
| 58 | * file.open() which calls seq_open() and then sets FMODE_PWRITE. | ||
| 59 | */ | ||
| 60 | file->f_mode &= ~FMODE_PWRITE; | ||
| 53 | return 0; | 61 | return 0; |
| 54 | } | 62 | } |
| 55 | EXPORT_SYMBOL(seq_open); | 63 | EXPORT_SYMBOL(seq_open); |
| @@ -131,6 +139,22 @@ ssize_t seq_read(struct file *file, char __user *buf, size_t size, loff_t *ppos) | |||
| 131 | int err = 0; | 139 | int err = 0; |
| 132 | 140 | ||
| 133 | mutex_lock(&m->lock); | 141 | mutex_lock(&m->lock); |
| 142 | |||
| 143 | /* Don't assume *ppos is where we left it */ | ||
| 144 | if (unlikely(*ppos != m->read_pos)) { | ||
| 145 | m->read_pos = *ppos; | ||
| 146 | while ((err = traverse(m, *ppos)) == -EAGAIN) | ||
| 147 | ; | ||
| 148 | if (err) { | ||
| 149 | /* With prejudice... */ | ||
| 150 | m->read_pos = 0; | ||
| 151 | m->version = 0; | ||
| 152 | m->index = 0; | ||
| 153 | m->count = 0; | ||
| 154 | goto Done; | ||
| 155 | } | ||
| 156 | } | ||
| 157 | |||
| 134 | /* | 158 | /* |
| 135 | * seq_file->op->..m_start/m_stop/m_next may do special actions | 159 | * seq_file->op->..m_start/m_stop/m_next may do special actions |
| 136 | * or optimisations based on the file->f_version, so we want to | 160 | * or optimisations based on the file->f_version, so we want to |
| @@ -230,8 +254,10 @@ Fill: | |||
| 230 | Done: | 254 | Done: |
| 231 | if (!copied) | 255 | if (!copied) |
| 232 | copied = err; | 256 | copied = err; |
| 233 | else | 257 | else { |
| 234 | *ppos += copied; | 258 | *ppos += copied; |
| 259 | m->read_pos += copied; | ||
| 260 | } | ||
| 235 | file->f_version = m->version; | 261 | file->f_version = m->version; |
| 236 | mutex_unlock(&m->lock); | 262 | mutex_unlock(&m->lock); |
| 237 | return copied; | 263 | return copied; |
| @@ -266,16 +292,18 @@ loff_t seq_lseek(struct file *file, loff_t offset, int origin) | |||
| 266 | if (offset < 0) | 292 | if (offset < 0) |
| 267 | break; | 293 | break; |
| 268 | retval = offset; | 294 | retval = offset; |
| 269 | if (offset != file->f_pos) { | 295 | if (offset != m->read_pos) { |
| 270 | while ((retval=traverse(m, offset)) == -EAGAIN) | 296 | while ((retval=traverse(m, offset)) == -EAGAIN) |
| 271 | ; | 297 | ; |
| 272 | if (retval) { | 298 | if (retval) { |
| 273 | /* with extreme prejudice... */ | 299 | /* with extreme prejudice... */ |
| 274 | file->f_pos = 0; | 300 | file->f_pos = 0; |
| 301 | m->read_pos = 0; | ||
| 275 | m->version = 0; | 302 | m->version = 0; |
| 276 | m->index = 0; | 303 | m->index = 0; |
| 277 | m->count = 0; | 304 | m->count = 0; |
| 278 | } else { | 305 | } else { |
| 306 | m->read_pos = offset; | ||
| 279 | retval = file->f_pos = offset; | 307 | retval = file->f_pos = offset; |
| 280 | } | 308 | } |
| 281 | } | 309 | } |
diff --git a/fs/squashfs/block.c b/fs/squashfs/block.c index c837dfc2b3c6..321728f48f2d 100644 --- a/fs/squashfs/block.c +++ b/fs/squashfs/block.c | |||
| @@ -80,7 +80,7 @@ static struct buffer_head *get_block_length(struct super_block *sb, | |||
| 80 | * generated a larger block - this does occasionally happen with zlib). | 80 | * generated a larger block - this does occasionally happen with zlib). |
| 81 | */ | 81 | */ |
| 82 | int squashfs_read_data(struct super_block *sb, void **buffer, u64 index, | 82 | int squashfs_read_data(struct super_block *sb, void **buffer, u64 index, |
| 83 | int length, u64 *next_index, int srclength) | 83 | int length, u64 *next_index, int srclength, int pages) |
| 84 | { | 84 | { |
| 85 | struct squashfs_sb_info *msblk = sb->s_fs_info; | 85 | struct squashfs_sb_info *msblk = sb->s_fs_info; |
| 86 | struct buffer_head **bh; | 86 | struct buffer_head **bh; |
| @@ -185,6 +185,14 @@ int squashfs_read_data(struct super_block *sb, void **buffer, u64 index, | |||
| 185 | } | 185 | } |
| 186 | 186 | ||
| 187 | if (msblk->stream.avail_out == 0) { | 187 | if (msblk->stream.avail_out == 0) { |
| 188 | if (page == pages) { | ||
| 189 | ERROR("zlib_inflate tried to " | ||
| 190 | "decompress too much data, " | ||
| 191 | "expected %d bytes. Zlib " | ||
| 192 | "data probably corrupt\n", | ||
| 193 | srclength); | ||
| 194 | goto release_mutex; | ||
| 195 | } | ||
| 188 | msblk->stream.next_out = buffer[page++]; | 196 | msblk->stream.next_out = buffer[page++]; |
| 189 | msblk->stream.avail_out = PAGE_CACHE_SIZE; | 197 | msblk->stream.avail_out = PAGE_CACHE_SIZE; |
| 190 | } | 198 | } |
| @@ -268,7 +276,8 @@ block_release: | |||
| 268 | put_bh(bh[k]); | 276 | put_bh(bh[k]); |
| 269 | 277 | ||
| 270 | read_failure: | 278 | read_failure: |
| 271 | ERROR("sb_bread failed reading block 0x%llx\n", cur_index); | 279 | ERROR("squashfs_read_data failed to read block 0x%llx\n", |
| 280 | (unsigned long long) index); | ||
| 272 | kfree(bh); | 281 | kfree(bh); |
| 273 | return -EIO; | 282 | return -EIO; |
| 274 | } | 283 | } |
diff --git a/fs/squashfs/cache.c b/fs/squashfs/cache.c index f29eda16d25e..1c4739e33af6 100644 --- a/fs/squashfs/cache.c +++ b/fs/squashfs/cache.c | |||
| @@ -119,7 +119,7 @@ struct squashfs_cache_entry *squashfs_cache_get(struct super_block *sb, | |||
| 119 | 119 | ||
| 120 | entry->length = squashfs_read_data(sb, entry->data, | 120 | entry->length = squashfs_read_data(sb, entry->data, |
| 121 | block, length, &entry->next_index, | 121 | block, length, &entry->next_index, |
| 122 | cache->block_size); | 122 | cache->block_size, cache->pages); |
| 123 | 123 | ||
| 124 | spin_lock(&cache->lock); | 124 | spin_lock(&cache->lock); |
| 125 | 125 | ||
| @@ -406,7 +406,7 @@ int squashfs_read_table(struct super_block *sb, void *buffer, u64 block, | |||
| 406 | for (i = 0; i < pages; i++, buffer += PAGE_CACHE_SIZE) | 406 | for (i = 0; i < pages; i++, buffer += PAGE_CACHE_SIZE) |
| 407 | data[i] = buffer; | 407 | data[i] = buffer; |
| 408 | res = squashfs_read_data(sb, data, block, length | | 408 | res = squashfs_read_data(sb, data, block, length | |
| 409 | SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length); | 409 | SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length, pages); |
| 410 | kfree(data); | 410 | kfree(data); |
| 411 | return res; | 411 | return res; |
| 412 | } | 412 | } |
diff --git a/fs/squashfs/inode.c b/fs/squashfs/inode.c index 7a63398bb855..9101dbde39ec 100644 --- a/fs/squashfs/inode.c +++ b/fs/squashfs/inode.c | |||
| @@ -133,7 +133,8 @@ int squashfs_read_inode(struct inode *inode, long long ino) | |||
| 133 | type = le16_to_cpu(sqshb_ino->inode_type); | 133 | type = le16_to_cpu(sqshb_ino->inode_type); |
| 134 | switch (type) { | 134 | switch (type) { |
| 135 | case SQUASHFS_REG_TYPE: { | 135 | case SQUASHFS_REG_TYPE: { |
| 136 | unsigned int frag_offset, frag_size, frag; | 136 | unsigned int frag_offset, frag; |
| 137 | int frag_size; | ||
| 137 | u64 frag_blk; | 138 | u64 frag_blk; |
| 138 | struct squashfs_reg_inode *sqsh_ino = &squashfs_ino.reg; | 139 | struct squashfs_reg_inode *sqsh_ino = &squashfs_ino.reg; |
| 139 | 140 | ||
| @@ -175,7 +176,8 @@ int squashfs_read_inode(struct inode *inode, long long ino) | |||
| 175 | break; | 176 | break; |
| 176 | } | 177 | } |
| 177 | case SQUASHFS_LREG_TYPE: { | 178 | case SQUASHFS_LREG_TYPE: { |
| 178 | unsigned int frag_offset, frag_size, frag; | 179 | unsigned int frag_offset, frag; |
| 180 | int frag_size; | ||
| 179 | u64 frag_blk; | 181 | u64 frag_blk; |
| 180 | struct squashfs_lreg_inode *sqsh_ino = &squashfs_ino.lreg; | 182 | struct squashfs_lreg_inode *sqsh_ino = &squashfs_ino.lreg; |
| 181 | 183 | ||
diff --git a/fs/squashfs/squashfs.h b/fs/squashfs/squashfs.h index 6b2515d027d5..0e9feb6adf7e 100644 --- a/fs/squashfs/squashfs.h +++ b/fs/squashfs/squashfs.h | |||
| @@ -34,7 +34,7 @@ static inline struct squashfs_inode_info *squashfs_i(struct inode *inode) | |||
| 34 | 34 | ||
| 35 | /* block.c */ | 35 | /* block.c */ |
| 36 | extern int squashfs_read_data(struct super_block *, void **, u64, int, u64 *, | 36 | extern int squashfs_read_data(struct super_block *, void **, u64, int, u64 *, |
| 37 | int); | 37 | int, int); |
| 38 | 38 | ||
| 39 | /* cache.c */ | 39 | /* cache.c */ |
| 40 | extern struct squashfs_cache *squashfs_cache_init(char *, int, int); | 40 | extern struct squashfs_cache *squashfs_cache_init(char *, int, int); |
diff --git a/fs/squashfs/super.c b/fs/squashfs/super.c index 071df5b5b491..681ec0d83799 100644 --- a/fs/squashfs/super.c +++ b/fs/squashfs/super.c | |||
| @@ -389,7 +389,7 @@ static int __init init_squashfs_fs(void) | |||
| 389 | return err; | 389 | return err; |
| 390 | } | 390 | } |
| 391 | 391 | ||
| 392 | printk(KERN_INFO "squashfs: version 4.0 (2009/01/03) " | 392 | printk(KERN_INFO "squashfs: version 4.0 (2009/01/31) " |
| 393 | "Phillip Lougher\n"); | 393 | "Phillip Lougher\n"); |
| 394 | 394 | ||
| 395 | return 0; | 395 | return 0; |
diff --git a/fs/super.c b/fs/super.c index 645e5403f2a0..8349ed6b1412 100644 --- a/fs/super.c +++ b/fs/super.c | |||
| @@ -82,7 +82,22 @@ static struct super_block *alloc_super(struct file_system_type *type) | |||
| 82 | * lock ordering than usbfs: | 82 | * lock ordering than usbfs: |
| 83 | */ | 83 | */ |
| 84 | lockdep_set_class(&s->s_lock, &type->s_lock_key); | 84 | lockdep_set_class(&s->s_lock, &type->s_lock_key); |
| 85 | down_write(&s->s_umount); | 85 | /* |
| 86 | * sget() can have s_umount recursion. | ||
| 87 | * | ||
| 88 | * When it cannot find a suitable sb, it allocates a new | ||
| 89 | * one (this one), and tries again to find a suitable old | ||
| 90 | * one. | ||
| 91 | * | ||
| 92 | * In case that succeeds, it will acquire the s_umount | ||
| 93 | * lock of the old one. Since these are clearly distrinct | ||
| 94 | * locks, and this object isn't exposed yet, there's no | ||
| 95 | * risk of deadlocks. | ||
| 96 | * | ||
| 97 | * Annotate this by putting this lock in a different | ||
| 98 | * subclass. | ||
| 99 | */ | ||
| 100 | down_write_nested(&s->s_umount, SINGLE_DEPTH_NESTING); | ||
| 86 | s->s_count = S_BIAS; | 101 | s->s_count = S_BIAS; |
| 87 | atomic_set(&s->s_active, 1); | 102 | atomic_set(&s->s_active, 1); |
| 88 | mutex_init(&s->s_vfs_rename_mutex); | 103 | mutex_init(&s->s_vfs_rename_mutex); |
| @@ -301,7 +316,7 @@ void generic_shutdown_super(struct super_block *sb) | |||
| 301 | /* | 316 | /* |
| 302 | * wait for asynchronous fs operations to finish before going further | 317 | * wait for asynchronous fs operations to finish before going further |
| 303 | */ | 318 | */ |
| 304 | async_synchronize_full_special(&sb->s_async_list); | 319 | async_synchronize_full_domain(&sb->s_async_list); |
| 305 | 320 | ||
| 306 | /* bad name - it should be evict_inodes() */ | 321 | /* bad name - it should be evict_inodes() */ |
| 307 | invalidate_inodes(sb); | 322 | invalidate_inodes(sb); |
| @@ -470,7 +485,7 @@ restart: | |||
| 470 | sb->s_count++; | 485 | sb->s_count++; |
| 471 | spin_unlock(&sb_lock); | 486 | spin_unlock(&sb_lock); |
| 472 | down_read(&sb->s_umount); | 487 | down_read(&sb->s_umount); |
| 473 | async_synchronize_full_special(&sb->s_async_list); | 488 | async_synchronize_full_domain(&sb->s_async_list); |
| 474 | if (sb->s_root && (wait || sb->s_dirt)) | 489 | if (sb->s_root && (wait || sb->s_dirt)) |
| 475 | sb->s_op->sync_fs(sb, wait); | 490 | sb->s_op->sync_fs(sb, wait); |
| 476 | up_read(&sb->s_umount); | 491 | up_read(&sb->s_umount); |
diff --git a/fs/timerfd.c b/fs/timerfd.c index 6a123b8ff3f5..b042bd7034b1 100644 --- a/fs/timerfd.c +++ b/fs/timerfd.c | |||
| @@ -186,10 +186,9 @@ SYSCALL_DEFINE2(timerfd_create, int, clockid, int, flags) | |||
| 186 | BUILD_BUG_ON(TFD_CLOEXEC != O_CLOEXEC); | 186 | BUILD_BUG_ON(TFD_CLOEXEC != O_CLOEXEC); |
| 187 | BUILD_BUG_ON(TFD_NONBLOCK != O_NONBLOCK); | 187 | BUILD_BUG_ON(TFD_NONBLOCK != O_NONBLOCK); |
| 188 | 188 | ||
| 189 | if (flags & ~(TFD_CLOEXEC | TFD_NONBLOCK)) | 189 | if ((flags & ~TFD_CREATE_FLAGS) || |
| 190 | return -EINVAL; | 190 | (clockid != CLOCK_MONOTONIC && |
| 191 | if (clockid != CLOCK_MONOTONIC && | 191 | clockid != CLOCK_REALTIME)) |
| 192 | clockid != CLOCK_REALTIME) | ||
| 193 | return -EINVAL; | 192 | return -EINVAL; |
| 194 | 193 | ||
| 195 | ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); | 194 | ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); |
| @@ -201,7 +200,7 @@ SYSCALL_DEFINE2(timerfd_create, int, clockid, int, flags) | |||
| 201 | hrtimer_init(&ctx->tmr, clockid, HRTIMER_MODE_ABS); | 200 | hrtimer_init(&ctx->tmr, clockid, HRTIMER_MODE_ABS); |
| 202 | 201 | ||
| 203 | ufd = anon_inode_getfd("[timerfd]", &timerfd_fops, ctx, | 202 | ufd = anon_inode_getfd("[timerfd]", &timerfd_fops, ctx, |
| 204 | flags & (O_CLOEXEC | O_NONBLOCK)); | 203 | flags & TFD_SHARED_FCNTL_FLAGS); |
| 205 | if (ufd < 0) | 204 | if (ufd < 0) |
| 206 | kfree(ctx); | 205 | kfree(ctx); |
| 207 | 206 | ||
| @@ -219,7 +218,8 @@ SYSCALL_DEFINE4(timerfd_settime, int, ufd, int, flags, | |||
| 219 | if (copy_from_user(&ktmr, utmr, sizeof(ktmr))) | 218 | if (copy_from_user(&ktmr, utmr, sizeof(ktmr))) |
| 220 | return -EFAULT; | 219 | return -EFAULT; |
| 221 | 220 | ||
| 222 | if (!timespec_valid(&ktmr.it_value) || | 221 | if ((flags & ~TFD_SETTIME_FLAGS) || |
| 222 | !timespec_valid(&ktmr.it_value) || | ||
| 223 | !timespec_valid(&ktmr.it_interval)) | 223 | !timespec_valid(&ktmr.it_interval)) |
| 224 | return -EINVAL; | 224 | return -EINVAL; |
| 225 | 225 | ||
diff --git a/fs/xfs/linux-2.6/xfs_buf.c b/fs/xfs/linux-2.6/xfs_buf.c index d71dc44e21ed..cb329edc925b 100644 --- a/fs/xfs/linux-2.6/xfs_buf.c +++ b/fs/xfs/linux-2.6/xfs_buf.c | |||
| @@ -166,6 +166,75 @@ test_page_region( | |||
| 166 | } | 166 | } |
| 167 | 167 | ||
| 168 | /* | 168 | /* |
| 169 | * Mapping of multi-page buffers into contiguous virtual space | ||
| 170 | */ | ||
| 171 | |||
| 172 | typedef struct a_list { | ||
| 173 | void *vm_addr; | ||
| 174 | struct a_list *next; | ||
| 175 | } a_list_t; | ||
| 176 | |||
| 177 | static a_list_t *as_free_head; | ||
| 178 | static int as_list_len; | ||
| 179 | static DEFINE_SPINLOCK(as_lock); | ||
| 180 | |||
| 181 | /* | ||
| 182 | * Try to batch vunmaps because they are costly. | ||
| 183 | */ | ||
| 184 | STATIC void | ||
| 185 | free_address( | ||
| 186 | void *addr) | ||
| 187 | { | ||
| 188 | a_list_t *aentry; | ||
| 189 | |||
| 190 | #ifdef CONFIG_XEN | ||
| 191 | /* | ||
| 192 | * Xen needs to be able to make sure it can get an exclusive | ||
| 193 | * RO mapping of pages it wants to turn into a pagetable. If | ||
| 194 | * a newly allocated page is also still being vmap()ed by xfs, | ||
| 195 | * it will cause pagetable construction to fail. This is a | ||
| 196 | * quick workaround to always eagerly unmap pages so that Xen | ||
| 197 | * is happy. | ||
| 198 | */ | ||
| 199 | vunmap(addr); | ||
| 200 | return; | ||
| 201 | #endif | ||
| 202 | |||
| 203 | aentry = kmalloc(sizeof(a_list_t), GFP_NOWAIT); | ||
| 204 | if (likely(aentry)) { | ||
| 205 | spin_lock(&as_lock); | ||
| 206 | aentry->next = as_free_head; | ||
| 207 | aentry->vm_addr = addr; | ||
| 208 | as_free_head = aentry; | ||
| 209 | as_list_len++; | ||
| 210 | spin_unlock(&as_lock); | ||
| 211 | } else { | ||
| 212 | vunmap(addr); | ||
| 213 | } | ||
| 214 | } | ||
| 215 | |||
| 216 | STATIC void | ||
| 217 | purge_addresses(void) | ||
| 218 | { | ||
| 219 | a_list_t *aentry, *old; | ||
| 220 | |||
| 221 | if (as_free_head == NULL) | ||
| 222 | return; | ||
| 223 | |||
| 224 | spin_lock(&as_lock); | ||
| 225 | aentry = as_free_head; | ||
| 226 | as_free_head = NULL; | ||
| 227 | as_list_len = 0; | ||
| 228 | spin_unlock(&as_lock); | ||
| 229 | |||
| 230 | while ((old = aentry) != NULL) { | ||
| 231 | vunmap(aentry->vm_addr); | ||
| 232 | aentry = aentry->next; | ||
| 233 | kfree(old); | ||
| 234 | } | ||
| 235 | } | ||
| 236 | |||
| 237 | /* | ||
| 169 | * Internal xfs_buf_t object manipulation | 238 | * Internal xfs_buf_t object manipulation |
| 170 | */ | 239 | */ |
| 171 | 240 | ||
| @@ -264,7 +333,7 @@ xfs_buf_free( | |||
| 264 | uint i; | 333 | uint i; |
| 265 | 334 | ||
| 266 | if ((bp->b_flags & XBF_MAPPED) && (bp->b_page_count > 1)) | 335 | if ((bp->b_flags & XBF_MAPPED) && (bp->b_page_count > 1)) |
| 267 | vm_unmap_ram(bp->b_addr - bp->b_offset, bp->b_page_count); | 336 | free_address(bp->b_addr - bp->b_offset); |
| 268 | 337 | ||
| 269 | for (i = 0; i < bp->b_page_count; i++) { | 338 | for (i = 0; i < bp->b_page_count; i++) { |
| 270 | struct page *page = bp->b_pages[i]; | 339 | struct page *page = bp->b_pages[i]; |
| @@ -386,8 +455,10 @@ _xfs_buf_map_pages( | |||
| 386 | bp->b_addr = page_address(bp->b_pages[0]) + bp->b_offset; | 455 | bp->b_addr = page_address(bp->b_pages[0]) + bp->b_offset; |
| 387 | bp->b_flags |= XBF_MAPPED; | 456 | bp->b_flags |= XBF_MAPPED; |
| 388 | } else if (flags & XBF_MAPPED) { | 457 | } else if (flags & XBF_MAPPED) { |
| 389 | bp->b_addr = vm_map_ram(bp->b_pages, bp->b_page_count, | 458 | if (as_list_len > 64) |
| 390 | -1, PAGE_KERNEL); | 459 | purge_addresses(); |
| 460 | bp->b_addr = vmap(bp->b_pages, bp->b_page_count, | ||
| 461 | VM_MAP, PAGE_KERNEL); | ||
| 391 | if (unlikely(bp->b_addr == NULL)) | 462 | if (unlikely(bp->b_addr == NULL)) |
| 392 | return -ENOMEM; | 463 | return -ENOMEM; |
| 393 | bp->b_addr += bp->b_offset; | 464 | bp->b_addr += bp->b_offset; |
| @@ -1672,6 +1743,8 @@ xfsbufd( | |||
| 1672 | count++; | 1743 | count++; |
| 1673 | } | 1744 | } |
| 1674 | 1745 | ||
| 1746 | if (as_list_len > 0) | ||
| 1747 | purge_addresses(); | ||
| 1675 | if (count) | 1748 | if (count) |
| 1676 | blk_run_address_space(target->bt_mapping); | 1749 | blk_run_address_space(target->bt_mapping); |
| 1677 | 1750 | ||
diff --git a/include/acpi/pdc_intel.h b/include/acpi/pdc_intel.h index e72bfdd887f9..552637b0d051 100644 --- a/include/acpi/pdc_intel.h +++ b/include/acpi/pdc_intel.h | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #define ACPI_PDC_SMP_T_SWCOORD (0x0080) | 14 | #define ACPI_PDC_SMP_T_SWCOORD (0x0080) |
| 15 | #define ACPI_PDC_C_C1_FFH (0x0100) | 15 | #define ACPI_PDC_C_C1_FFH (0x0100) |
| 16 | #define ACPI_PDC_C_C2C3_FFH (0x0200) | 16 | #define ACPI_PDC_C_C2C3_FFH (0x0200) |
| 17 | #define ACPI_PDC_SMP_P_HWCOORD (0x0800) | ||
| 17 | 18 | ||
| 18 | #define ACPI_PDC_EST_CAPABILITY_SMP (ACPI_PDC_SMP_C1PT | \ | 19 | #define ACPI_PDC_EST_CAPABILITY_SMP (ACPI_PDC_SMP_C1PT | \ |
| 19 | ACPI_PDC_C_C1_HALT | \ | 20 | ACPI_PDC_C_C1_HALT | \ |
| @@ -22,6 +23,7 @@ | |||
| 22 | #define ACPI_PDC_EST_CAPABILITY_SWSMP (ACPI_PDC_SMP_C1PT | \ | 23 | #define ACPI_PDC_EST_CAPABILITY_SWSMP (ACPI_PDC_SMP_C1PT | \ |
| 23 | ACPI_PDC_C_C1_HALT | \ | 24 | ACPI_PDC_C_C1_HALT | \ |
| 24 | ACPI_PDC_SMP_P_SWCOORD | \ | 25 | ACPI_PDC_SMP_P_SWCOORD | \ |
| 26 | ACPI_PDC_SMP_P_HWCOORD | \ | ||
| 25 | ACPI_PDC_P_FFH) | 27 | ACPI_PDC_P_FFH) |
| 26 | 28 | ||
| 27 | #define ACPI_PDC_C_CAPABILITY_SMP (ACPI_PDC_SMP_C2C3 | \ | 29 | #define ACPI_PDC_C_CAPABILITY_SMP (ACPI_PDC_SMP_C2C3 | \ |
diff --git a/include/asm-frv/pgtable.h b/include/asm-frv/pgtable.h index 83c51aba534b..e16fdb1f4f4f 100644 --- a/include/asm-frv/pgtable.h +++ b/include/asm-frv/pgtable.h | |||
| @@ -478,7 +478,7 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
| 478 | #define __swp_type(x) (((x).val >> 2) & 0x1f) | 478 | #define __swp_type(x) (((x).val >> 2) & 0x1f) |
| 479 | #define __swp_offset(x) ((x).val >> 8) | 479 | #define __swp_offset(x) ((x).val >> 8) |
| 480 | #define __swp_entry(type, offset) ((swp_entry_t) { ((type) << 2) | ((offset) << 8) }) | 480 | #define __swp_entry(type, offset) ((swp_entry_t) { ((type) << 2) | ((offset) << 8) }) |
| 481 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { (pte).pte }) | 481 | #define __pte_to_swp_entry(_pte) ((swp_entry_t) { (_pte).pte }) |
| 482 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) | 482 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) |
| 483 | 483 | ||
| 484 | static inline int pte_file(pte_t pte) | 484 | static inline int pte_file(pte_t pte) |
diff --git a/include/crypto/hash.h b/include/crypto/hash.h index cd16d6e668ce..d797e119e3d5 100644 --- a/include/crypto/hash.h +++ b/include/crypto/hash.h | |||
| @@ -222,7 +222,7 @@ static inline struct crypto_tfm *crypto_shash_tfm(struct crypto_shash *tfm) | |||
| 222 | 222 | ||
| 223 | static inline void crypto_free_shash(struct crypto_shash *tfm) | 223 | static inline void crypto_free_shash(struct crypto_shash *tfm) |
| 224 | { | 224 | { |
| 225 | crypto_free_tfm(crypto_shash_tfm(tfm)); | 225 | crypto_destroy_tfm(tfm, crypto_shash_tfm(tfm)); |
| 226 | } | 226 | } |
| 227 | 227 | ||
| 228 | static inline unsigned int crypto_shash_alignmask( | 228 | static inline unsigned int crypto_shash_alignmask( |
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 8190b9bcc2d9..e5f4ae989abf 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
| @@ -1321,6 +1321,8 @@ void drm_gem_object_free(struct kref *kref); | |||
| 1321 | struct drm_gem_object *drm_gem_object_alloc(struct drm_device *dev, | 1321 | struct drm_gem_object *drm_gem_object_alloc(struct drm_device *dev, |
| 1322 | size_t size); | 1322 | size_t size); |
| 1323 | void drm_gem_object_handle_free(struct kref *kref); | 1323 | void drm_gem_object_handle_free(struct kref *kref); |
| 1324 | void drm_gem_vm_open(struct vm_area_struct *vma); | ||
| 1325 | void drm_gem_vm_close(struct vm_area_struct *vma); | ||
| 1324 | int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma); | 1326 | int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma); |
| 1325 | 1327 | ||
| 1326 | static inline void | 1328 | static inline void |
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index d54de24bf371..5ded1acfb543 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h | |||
| @@ -609,7 +609,7 @@ extern char *drm_get_dvi_i_subconnector_name(int val); | |||
| 609 | extern char *drm_get_dvi_i_select_name(int val); | 609 | extern char *drm_get_dvi_i_select_name(int val); |
| 610 | extern char *drm_get_tv_subconnector_name(int val); | 610 | extern char *drm_get_tv_subconnector_name(int val); |
| 611 | extern char *drm_get_tv_select_name(int val); | 611 | extern char *drm_get_tv_select_name(int val); |
| 612 | extern void drm_fb_release(struct file *filp); | 612 | extern void drm_fb_release(struct drm_file *file_priv); |
| 613 | extern int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_mode_group *group); | 613 | extern int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_mode_group *group); |
| 614 | extern struct edid *drm_get_edid(struct drm_connector *connector, | 614 | extern struct edid *drm_get_edid(struct drm_connector *connector, |
| 615 | struct i2c_adapter *adapter); | 615 | struct i2c_adapter *adapter); |
diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h index 0c6f0e11b41b..c7d4b2e606a5 100644 --- a/include/drm/drm_crtc_helper.h +++ b/include/drm/drm_crtc_helper.h | |||
| @@ -54,13 +54,13 @@ struct drm_crtc_helper_funcs { | |||
| 54 | struct drm_display_mode *mode, | 54 | struct drm_display_mode *mode, |
| 55 | struct drm_display_mode *adjusted_mode); | 55 | struct drm_display_mode *adjusted_mode); |
| 56 | /* Actually set the mode */ | 56 | /* Actually set the mode */ |
| 57 | void (*mode_set)(struct drm_crtc *crtc, struct drm_display_mode *mode, | 57 | int (*mode_set)(struct drm_crtc *crtc, struct drm_display_mode *mode, |
| 58 | struct drm_display_mode *adjusted_mode, int x, int y, | 58 | struct drm_display_mode *adjusted_mode, int x, int y, |
| 59 | struct drm_framebuffer *old_fb); | 59 | struct drm_framebuffer *old_fb); |
| 60 | 60 | ||
| 61 | /* Move the crtc on the current fb to the given position *optional* */ | 61 | /* Move the crtc on the current fb to the given position *optional* */ |
| 62 | void (*mode_set_base)(struct drm_crtc *crtc, int x, int y, | 62 | int (*mode_set_base)(struct drm_crtc *crtc, int x, int y, |
| 63 | struct drm_framebuffer *old_fb); | 63 | struct drm_framebuffer *old_fb); |
| 64 | }; | 64 | }; |
| 65 | 65 | ||
| 66 | struct drm_encoder_helper_funcs { | 66 | struct drm_encoder_helper_funcs { |
| @@ -76,6 +76,7 @@ struct drm_encoder_helper_funcs { | |||
| 76 | void (*mode_set)(struct drm_encoder *encoder, | 76 | void (*mode_set)(struct drm_encoder *encoder, |
| 77 | struct drm_display_mode *mode, | 77 | struct drm_display_mode *mode, |
| 78 | struct drm_display_mode *adjusted_mode); | 78 | struct drm_display_mode *adjusted_mode); |
| 79 | struct drm_crtc *(*get_crtc)(struct drm_encoder *encoder); | ||
| 79 | /* detect for DAC style encoders */ | 80 | /* detect for DAC style encoders */ |
| 80 | enum drm_connector_status (*detect)(struct drm_encoder *encoder, | 81 | enum drm_connector_status (*detect)(struct drm_encoder *encoder, |
| 81 | struct drm_connector *connector); | 82 | struct drm_connector *connector); |
diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h index c707c15f5164..ff8d27af4786 100644 --- a/include/drm/drm_edid.h +++ b/include/drm/drm_edid.h | |||
| @@ -58,10 +58,10 @@ struct detailed_pixel_timing { | |||
| 58 | u8 hsync_pulse_width_lo; | 58 | u8 hsync_pulse_width_lo; |
| 59 | u8 vsync_pulse_width_lo:4; | 59 | u8 vsync_pulse_width_lo:4; |
| 60 | u8 vsync_offset_lo:4; | 60 | u8 vsync_offset_lo:4; |
| 61 | u8 hsync_pulse_width_hi:2; | ||
| 62 | u8 hsync_offset_hi:2; | ||
| 63 | u8 vsync_pulse_width_hi:2; | 61 | u8 vsync_pulse_width_hi:2; |
| 64 | u8 vsync_offset_hi:2; | 62 | u8 vsync_offset_hi:2; |
| 63 | u8 hsync_pulse_width_hi:2; | ||
| 64 | u8 hsync_offset_hi:2; | ||
| 65 | u8 width_mm_lo; | 65 | u8 width_mm_lo; |
| 66 | u8 height_mm_lo; | 66 | u8 height_mm_lo; |
| 67 | u8 height_mm_hi:4; | 67 | u8 height_mm_hi:4; |
diff --git a/include/drm/i915_drm.h b/include/drm/i915_drm.h index b3bcf72dc656..912cd52db965 100644 --- a/include/drm/i915_drm.h +++ b/include/drm/i915_drm.h | |||
| @@ -261,6 +261,7 @@ typedef struct drm_i915_irq_wait { | |||
| 261 | #define I915_PARAM_LAST_DISPATCH 3 | 261 | #define I915_PARAM_LAST_DISPATCH 3 |
| 262 | #define I915_PARAM_CHIPSET_ID 4 | 262 | #define I915_PARAM_CHIPSET_ID 4 |
| 263 | #define I915_PARAM_HAS_GEM 5 | 263 | #define I915_PARAM_HAS_GEM 5 |
| 264 | #define I915_PARAM_NUM_FENCES_AVAIL 6 | ||
| 264 | 265 | ||
| 265 | typedef struct drm_i915_getparam { | 266 | typedef struct drm_i915_getparam { |
| 266 | int param; | 267 | int param; |
| @@ -272,6 +273,7 @@ typedef struct drm_i915_getparam { | |||
| 272 | #define I915_SETPARAM_USE_MI_BATCHBUFFER_START 1 | 273 | #define I915_SETPARAM_USE_MI_BATCHBUFFER_START 1 |
| 273 | #define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY 2 | 274 | #define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY 2 |
| 274 | #define I915_SETPARAM_ALLOW_BATCHBUFFER 3 | 275 | #define I915_SETPARAM_ALLOW_BATCHBUFFER 3 |
| 276 | #define I915_SETPARAM_NUM_USED_FENCES 4 | ||
| 275 | 277 | ||
| 276 | typedef struct drm_i915_setparam { | 278 | typedef struct drm_i915_setparam { |
| 277 | int param; | 279 | int param; |
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index b97cdc516a8f..106c3ba50844 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
| @@ -52,6 +52,7 @@ header-y += const.h | |||
| 52 | header-y += cgroupstats.h | 52 | header-y += cgroupstats.h |
| 53 | header-y += cramfs_fs.h | 53 | header-y += cramfs_fs.h |
| 54 | header-y += cycx_cfm.h | 54 | header-y += cycx_cfm.h |
| 55 | header-y += dcbnl.h | ||
| 55 | header-y += dlmconstants.h | 56 | header-y += dlmconstants.h |
| 56 | header-y += dlm_device.h | 57 | header-y += dlm_device.h |
| 57 | header-y += dlm_netlink.h | 58 | header-y += dlm_netlink.h |
diff --git a/include/linux/async.h b/include/linux/async.h index c4ecacd0b327..68a9530196f2 100644 --- a/include/linux/async.h +++ b/include/linux/async.h | |||
| @@ -17,9 +17,11 @@ typedef u64 async_cookie_t; | |||
| 17 | typedef void (async_func_ptr) (void *data, async_cookie_t cookie); | 17 | typedef void (async_func_ptr) (void *data, async_cookie_t cookie); |
| 18 | 18 | ||
| 19 | extern async_cookie_t async_schedule(async_func_ptr *ptr, void *data); | 19 | extern async_cookie_t async_schedule(async_func_ptr *ptr, void *data); |
| 20 | extern async_cookie_t async_schedule_special(async_func_ptr *ptr, void *data, struct list_head *list); | 20 | extern async_cookie_t async_schedule_domain(async_func_ptr *ptr, void *data, |
| 21 | struct list_head *list); | ||
| 21 | extern void async_synchronize_full(void); | 22 | extern void async_synchronize_full(void); |
| 22 | extern void async_synchronize_full_special(struct list_head *list); | 23 | extern void async_synchronize_full_domain(struct list_head *list); |
| 23 | extern void async_synchronize_cookie(async_cookie_t cookie); | 24 | extern void async_synchronize_cookie(async_cookie_t cookie); |
| 24 | extern void async_synchronize_cookie_special(async_cookie_t cookie, struct list_head *list); | 25 | extern void async_synchronize_cookie_domain(async_cookie_t cookie, |
| 26 | struct list_head *list); | ||
| 25 | 27 | ||
diff --git a/include/linux/ata.h b/include/linux/ata.h index 08a86d5cdf1b..9a061accd8b8 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h | |||
| @@ -89,6 +89,8 @@ enum { | |||
| 89 | ATA_ID_DLF = 128, | 89 | ATA_ID_DLF = 128, |
| 90 | ATA_ID_CSFO = 129, | 90 | ATA_ID_CSFO = 129, |
| 91 | ATA_ID_CFA_POWER = 160, | 91 | ATA_ID_CFA_POWER = 160, |
| 92 | ATA_ID_CFA_KEY_MGMT = 162, | ||
| 93 | ATA_ID_CFA_MODES = 163, | ||
| 92 | ATA_ID_ROT_SPEED = 217, | 94 | ATA_ID_ROT_SPEED = 217, |
| 93 | ATA_ID_PIO4 = (1 << 1), | 95 | ATA_ID_PIO4 = (1 << 1), |
| 94 | 96 | ||
diff --git a/include/linux/bio.h b/include/linux/bio.h index 2aa283ab062b..1b16108a5417 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
| @@ -171,8 +171,6 @@ struct bio { | |||
| 171 | #define BIO_RW_FAILFAST_TRANSPORT 8 | 171 | #define BIO_RW_FAILFAST_TRANSPORT 8 |
| 172 | #define BIO_RW_FAILFAST_DRIVER 9 | 172 | #define BIO_RW_FAILFAST_DRIVER 9 |
| 173 | 173 | ||
| 174 | #define BIO_RW_SYNC (BIO_RW_SYNCIO | BIO_RW_UNPLUG) | ||
| 175 | |||
| 176 | #define bio_rw_flagged(bio, flag) ((bio)->bi_rw & (1 << (flag))) | 174 | #define bio_rw_flagged(bio, flag) ((bio)->bi_rw & (1 << (flag))) |
| 177 | 175 | ||
| 178 | /* | 176 | /* |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index dcaa0fd84b02..465d6babc847 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -708,6 +708,8 @@ struct req_iterator { | |||
| 708 | }; | 708 | }; |
| 709 | 709 | ||
| 710 | /* This should not be used directly - use rq_for_each_segment */ | 710 | /* This should not be used directly - use rq_for_each_segment */ |
| 711 | #define for_each_bio(_bio) \ | ||
| 712 | for (; _bio; _bio = _bio->bi_next) | ||
| 711 | #define __rq_for_each_bio(_bio, rq) \ | 713 | #define __rq_for_each_bio(_bio, rq) \ |
| 712 | if ((rq->bio)) \ | 714 | if ((rq->bio)) \ |
| 713 | for (_bio = (rq)->bio; _bio; _bio = _bio->bi_next) | 715 | for (_bio = (rq)->bio; _bio; _bio = _bio->bi_next) |
diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h index 25379cba2370..6e915878e88c 100644 --- a/include/linux/blktrace_api.h +++ b/include/linux/blktrace_api.h | |||
| @@ -15,6 +15,7 @@ enum blktrace_cat { | |||
| 15 | BLK_TC_WRITE = 1 << 1, /* writes */ | 15 | BLK_TC_WRITE = 1 << 1, /* writes */ |
| 16 | BLK_TC_BARRIER = 1 << 2, /* barrier */ | 16 | BLK_TC_BARRIER = 1 << 2, /* barrier */ |
| 17 | BLK_TC_SYNC = 1 << 3, /* sync IO */ | 17 | BLK_TC_SYNC = 1 << 3, /* sync IO */ |
| 18 | BLK_TC_SYNCIO = BLK_TC_SYNC, | ||
| 18 | BLK_TC_QUEUE = 1 << 4, /* queueing/merging */ | 19 | BLK_TC_QUEUE = 1 << 4, /* queueing/merging */ |
| 19 | BLK_TC_REQUEUE = 1 << 5, /* requeueing */ | 20 | BLK_TC_REQUEUE = 1 << 5, /* requeueing */ |
| 20 | BLK_TC_ISSUE = 1 << 6, /* issue */ | 21 | BLK_TC_ISSUE = 1 << 6, /* issue */ |
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index e4e8e117d27d..499900d0cee7 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h | |||
| @@ -378,6 +378,7 @@ struct cgroup_subsys { | |||
| 378 | * - initiating hotplug events | 378 | * - initiating hotplug events |
| 379 | */ | 379 | */ |
| 380 | struct mutex hierarchy_mutex; | 380 | struct mutex hierarchy_mutex; |
| 381 | struct lock_class_key subsys_key; | ||
| 381 | 382 | ||
| 382 | /* | 383 | /* |
| 383 | * Link to parent, and list entry in parent's children. | 384 | * Link to parent, and list entry in parent's children. |
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index 384b38d3e8e2..161042746afc 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h | |||
| @@ -234,7 +234,6 @@ struct cpufreq_driver { | |||
| 234 | int (*suspend) (struct cpufreq_policy *policy, pm_message_t pmsg); | 234 | int (*suspend) (struct cpufreq_policy *policy, pm_message_t pmsg); |
| 235 | int (*resume) (struct cpufreq_policy *policy); | 235 | int (*resume) (struct cpufreq_policy *policy); |
| 236 | struct freq_attr **attr; | 236 | struct freq_attr **attr; |
| 237 | bool hide_interface; | ||
| 238 | }; | 237 | }; |
| 239 | 238 | ||
| 240 | /* flags */ | 239 | /* flags */ |
diff --git a/include/linux/crypto.h b/include/linux/crypto.h index 3bacd71509fb..1f2e9020acc6 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h | |||
| @@ -552,7 +552,12 @@ struct crypto_tfm *crypto_alloc_tfm(const char *alg_name, | |||
| 552 | const struct crypto_type *frontend, | 552 | const struct crypto_type *frontend, |
| 553 | u32 type, u32 mask); | 553 | u32 type, u32 mask); |
| 554 | struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask); | 554 | struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask); |
| 555 | void crypto_free_tfm(struct crypto_tfm *tfm); | 555 | void crypto_destroy_tfm(void *mem, struct crypto_tfm *tfm); |
| 556 | |||
| 557 | static inline void crypto_free_tfm(struct crypto_tfm *tfm) | ||
| 558 | { | ||
| 559 | return crypto_destroy_tfm(tfm, tfm); | ||
| 560 | } | ||
| 556 | 561 | ||
| 557 | int alg_test(const char *driver, const char *alg, u32 type, u32 mask); | 562 | int alg_test(const char *driver, const char *alg, u32 type, u32 mask); |
| 558 | 563 | ||
diff --git a/include/linux/dcbnl.h b/include/linux/dcbnl.h index b0ef274e0031..7d2e10006188 100644 --- a/include/linux/dcbnl.h +++ b/include/linux/dcbnl.h | |||
| @@ -20,10 +20,12 @@ | |||
| 20 | #ifndef __LINUX_DCBNL_H__ | 20 | #ifndef __LINUX_DCBNL_H__ |
| 21 | #define __LINUX_DCBNL_H__ | 21 | #define __LINUX_DCBNL_H__ |
| 22 | 22 | ||
| 23 | #include <linux/types.h> | ||
| 24 | |||
| 23 | #define DCB_PROTO_VERSION 1 | 25 | #define DCB_PROTO_VERSION 1 |
| 24 | 26 | ||
| 25 | struct dcbmsg { | 27 | struct dcbmsg { |
| 26 | unsigned char dcb_family; | 28 | __u8 dcb_family; |
| 27 | __u8 cmd; | 29 | __u8 cmd; |
| 28 | __u16 dcb_pad; | 30 | __u16 dcb_pad; |
| 29 | }; | 31 | }; |
diff --git a/include/linux/device.h b/include/linux/device.h index 45e5b1921fbb..47f343c7bdda 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -147,6 +147,8 @@ extern void put_driver(struct device_driver *drv); | |||
| 147 | extern struct device_driver *driver_find(const char *name, | 147 | extern struct device_driver *driver_find(const char *name, |
| 148 | struct bus_type *bus); | 148 | struct bus_type *bus); |
| 149 | extern int driver_probe_done(void); | 149 | extern int driver_probe_done(void); |
| 150 | extern int wait_for_device_probe(void); | ||
| 151 | |||
| 150 | 152 | ||
| 151 | /* sysfs interface for exporting driver attributes */ | 153 | /* sysfs interface for exporting driver attributes */ |
| 152 | 154 | ||
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index 3e0f64c335c8..1956c8d46d32 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h | |||
| @@ -97,7 +97,6 @@ typedef struct { DECLARE_BITMAP(bits, DMA_TX_TYPE_END); } dma_cap_mask_t; | |||
| 97 | 97 | ||
| 98 | /** | 98 | /** |
| 99 | * struct dma_chan_percpu - the per-CPU part of struct dma_chan | 99 | * struct dma_chan_percpu - the per-CPU part of struct dma_chan |
| 100 | * @refcount: local_t used for open-coded "bigref" counting | ||
| 101 | * @memcpy_count: transaction counter | 100 | * @memcpy_count: transaction counter |
| 102 | * @bytes_transferred: byte counter | 101 | * @bytes_transferred: byte counter |
| 103 | */ | 102 | */ |
| @@ -114,13 +113,11 @@ struct dma_chan_percpu { | |||
| 114 | * @cookie: last cookie value returned to client | 113 | * @cookie: last cookie value returned to client |
| 115 | * @chan_id: channel ID for sysfs | 114 | * @chan_id: channel ID for sysfs |
| 116 | * @dev: class device for sysfs | 115 | * @dev: class device for sysfs |
| 117 | * @refcount: kref, used in "bigref" slow-mode | ||
| 118 | * @slow_ref: indicates that the DMA channel is free | ||
| 119 | * @rcu: the DMA channel's RCU head | ||
| 120 | * @device_node: used to add this to the device chan list | 116 | * @device_node: used to add this to the device chan list |
| 121 | * @local: per-cpu pointer to a struct dma_chan_percpu | 117 | * @local: per-cpu pointer to a struct dma_chan_percpu |
| 122 | * @client-count: how many clients are using this channel | 118 | * @client-count: how many clients are using this channel |
| 123 | * @table_count: number of appearances in the mem-to-mem allocation table | 119 | * @table_count: number of appearances in the mem-to-mem allocation table |
| 120 | * @private: private data for certain client-channel associations | ||
| 124 | */ | 121 | */ |
| 125 | struct dma_chan { | 122 | struct dma_chan { |
| 126 | struct dma_device *device; | 123 | struct dma_device *device; |
| @@ -134,6 +131,7 @@ struct dma_chan { | |||
| 134 | struct dma_chan_percpu *local; | 131 | struct dma_chan_percpu *local; |
| 135 | int client_count; | 132 | int client_count; |
| 136 | int table_count; | 133 | int table_count; |
| 134 | void *private; | ||
| 137 | }; | 135 | }; |
| 138 | 136 | ||
| 139 | /** | 137 | /** |
| @@ -211,8 +209,6 @@ struct dma_async_tx_descriptor { | |||
| 211 | * @global_node: list_head for global dma_device_list | 209 | * @global_node: list_head for global dma_device_list |
| 212 | * @cap_mask: one or more dma_capability flags | 210 | * @cap_mask: one or more dma_capability flags |
| 213 | * @max_xor: maximum number of xor sources, 0 if no capability | 211 | * @max_xor: maximum number of xor sources, 0 if no capability |
| 214 | * @refcount: reference count | ||
| 215 | * @done: IO completion struct | ||
| 216 | * @dev_id: unique device ID | 212 | * @dev_id: unique device ID |
| 217 | * @dev: struct device reference for dma mapping api | 213 | * @dev: struct device reference for dma mapping api |
| 218 | * @device_alloc_chan_resources: allocate resources and return the | 214 | * @device_alloc_chan_resources: allocate resources and return the |
| @@ -225,6 +221,7 @@ struct dma_async_tx_descriptor { | |||
| 225 | * @device_prep_dma_interrupt: prepares an end of chain interrupt operation | 221 | * @device_prep_dma_interrupt: prepares an end of chain interrupt operation |
| 226 | * @device_prep_slave_sg: prepares a slave dma operation | 222 | * @device_prep_slave_sg: prepares a slave dma operation |
| 227 | * @device_terminate_all: terminate all pending operations | 223 | * @device_terminate_all: terminate all pending operations |
| 224 | * @device_is_tx_complete: poll for transaction completion | ||
| 228 | * @device_issue_pending: push pending transactions to hardware | 225 | * @device_issue_pending: push pending transactions to hardware |
| 229 | */ | 226 | */ |
| 230 | struct dma_device { | 227 | struct dma_device { |
| @@ -282,6 +279,18 @@ static inline void dmaengine_put(void) | |||
| 282 | } | 279 | } |
| 283 | #endif | 280 | #endif |
| 284 | 281 | ||
| 282 | #ifdef CONFIG_NET_DMA | ||
| 283 | #define net_dmaengine_get() dmaengine_get() | ||
| 284 | #define net_dmaengine_put() dmaengine_put() | ||
| 285 | #else | ||
| 286 | static inline void net_dmaengine_get(void) | ||
| 287 | { | ||
| 288 | } | ||
| 289 | static inline void net_dmaengine_put(void) | ||
| 290 | { | ||
| 291 | } | ||
| 292 | #endif | ||
| 293 | |||
| 285 | dma_cookie_t dma_async_memcpy_buf_to_buf(struct dma_chan *chan, | 294 | dma_cookie_t dma_async_memcpy_buf_to_buf(struct dma_chan *chan, |
| 286 | void *dest, void *src, size_t len); | 295 | void *dest, void *src, size_t len); |
| 287 | dma_cookie_t dma_async_memcpy_buf_to_pg(struct dma_chan *chan, | 296 | dma_cookie_t dma_async_memcpy_buf_to_pg(struct dma_chan *chan, |
diff --git a/include/linux/firmware-map.h b/include/linux/firmware-map.h index 6e199c8dfacc..cca686b39123 100644 --- a/include/linux/firmware-map.h +++ b/include/linux/firmware-map.h | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * include/linux/firmware-map.h: | 2 | * include/linux/firmware-map.h: |
| 3 | * Copyright (C) 2008 SUSE LINUX Products GmbH | 3 | * Copyright (C) 2008 SUSE LINUX Products GmbH |
| 4 | * by Bernhard Walle <bwalle@suse.de> | 4 | * by Bernhard Walle <bernhard.walle@gmx.de> |
| 5 | * | 5 | * |
| 6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
| 7 | * it under the terms of the GNU General Public License v2.0 as published by | 7 | * it under the terms of the GNU General Public License v2.0 as published by |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 6022f44043f2..92734c0012e6 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -54,24 +54,30 @@ struct inodes_stat_t { | |||
| 54 | #define MAY_ACCESS 16 | 54 | #define MAY_ACCESS 16 |
| 55 | #define MAY_OPEN 32 | 55 | #define MAY_OPEN 32 |
| 56 | 56 | ||
| 57 | /* | ||
| 58 | * flags in file.f_mode. Note that FMODE_READ and FMODE_WRITE must correspond | ||
| 59 | * to O_WRONLY and O_RDWR via the strange trick in __dentry_open() | ||
| 60 | */ | ||
| 61 | |||
| 57 | /* file is open for reading */ | 62 | /* file is open for reading */ |
| 58 | #define FMODE_READ ((__force fmode_t)1) | 63 | #define FMODE_READ ((__force fmode_t)1) |
| 59 | /* file is open for writing */ | 64 | /* file is open for writing */ |
| 60 | #define FMODE_WRITE ((__force fmode_t)2) | 65 | #define FMODE_WRITE ((__force fmode_t)2) |
| 61 | /* file is seekable */ | 66 | /* file is seekable */ |
| 62 | #define FMODE_LSEEK ((__force fmode_t)4) | 67 | #define FMODE_LSEEK ((__force fmode_t)4) |
| 63 | /* file can be accessed using pread/pwrite */ | 68 | /* file can be accessed using pread */ |
| 64 | #define FMODE_PREAD ((__force fmode_t)8) | 69 | #define FMODE_PREAD ((__force fmode_t)8) |
| 65 | #define FMODE_PWRITE FMODE_PREAD /* These go hand in hand */ | 70 | /* file can be accessed using pwrite */ |
| 71 | #define FMODE_PWRITE ((__force fmode_t)16) | ||
| 66 | /* File is opened for execution with sys_execve / sys_uselib */ | 72 | /* File is opened for execution with sys_execve / sys_uselib */ |
| 67 | #define FMODE_EXEC ((__force fmode_t)16) | 73 | #define FMODE_EXEC ((__force fmode_t)32) |
| 68 | /* File is opened with O_NDELAY (only set for block devices) */ | 74 | /* File is opened with O_NDELAY (only set for block devices) */ |
| 69 | #define FMODE_NDELAY ((__force fmode_t)32) | 75 | #define FMODE_NDELAY ((__force fmode_t)64) |
| 70 | /* File is opened with O_EXCL (only set for block devices) */ | 76 | /* File is opened with O_EXCL (only set for block devices) */ |
| 71 | #define FMODE_EXCL ((__force fmode_t)64) | 77 | #define FMODE_EXCL ((__force fmode_t)128) |
| 72 | /* File is opened using open(.., 3, ..) and is writeable only for ioctls | 78 | /* File is opened using open(.., 3, ..) and is writeable only for ioctls |
| 73 | (specialy hack for floppy.c) */ | 79 | (specialy hack for floppy.c) */ |
| 74 | #define FMODE_WRITE_IOCTL ((__force fmode_t)128) | 80 | #define FMODE_WRITE_IOCTL ((__force fmode_t)256) |
| 75 | 81 | ||
| 76 | /* | 82 | /* |
| 77 | * Don't update ctime and mtime. | 83 | * Don't update ctime and mtime. |
| @@ -87,10 +93,10 @@ struct inodes_stat_t { | |||
| 87 | #define WRITE 1 | 93 | #define WRITE 1 |
| 88 | #define READA 2 /* read-ahead - don't block if no resources */ | 94 | #define READA 2 /* read-ahead - don't block if no resources */ |
| 89 | #define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */ | 95 | #define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */ |
| 90 | #define READ_SYNC (READ | (1 << BIO_RW_SYNC)) | 96 | #define READ_SYNC (READ | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG)) |
| 91 | #define READ_META (READ | (1 << BIO_RW_META)) | 97 | #define READ_META (READ | (1 << BIO_RW_META)) |
| 92 | #define WRITE_SYNC (WRITE | (1 << BIO_RW_SYNC)) | 98 | #define WRITE_SYNC (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG)) |
| 93 | #define SWRITE_SYNC (SWRITE | (1 << BIO_RW_SYNC)) | 99 | #define SWRITE_SYNC (SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG)) |
| 94 | #define WRITE_BARRIER (WRITE | (1 << BIO_RW_BARRIER)) | 100 | #define WRITE_BARRIER (WRITE | (1 << BIO_RW_BARRIER)) |
| 95 | #define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD) | 101 | #define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD) |
| 96 | #define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER)) | 102 | #define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER)) |
diff --git a/include/linux/hdreg.h b/include/linux/hdreg.h index c37e9241fae7..ed21bd3dbd25 100644 --- a/include/linux/hdreg.h +++ b/include/linux/hdreg.h | |||
| @@ -511,7 +511,6 @@ struct hd_driveid { | |||
| 511 | unsigned short words69_70[2]; /* reserved words 69-70 | 511 | unsigned short words69_70[2]; /* reserved words 69-70 |
| 512 | * future command overlap and queuing | 512 | * future command overlap and queuing |
| 513 | */ | 513 | */ |
| 514 | /* HDIO_GET_IDENTITY currently returns only words 0 through 70 */ | ||
| 515 | unsigned short words71_74[4]; /* reserved words 71-74 | 514 | unsigned short words71_74[4]; /* reserved words 71-74 |
| 516 | * for IDENTIFY PACKET DEVICE command | 515 | * for IDENTIFY PACKET DEVICE command |
| 517 | */ | 516 | */ |
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index f1d2fba19ea0..03be7f29ca01 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
| @@ -33,7 +33,8 @@ unsigned long hugetlb_total_pages(void); | |||
| 33 | int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, | 33 | int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
| 34 | unsigned long address, int write_access); | 34 | unsigned long address, int write_access); |
| 35 | int hugetlb_reserve_pages(struct inode *inode, long from, long to, | 35 | int hugetlb_reserve_pages(struct inode *inode, long from, long to, |
| 36 | struct vm_area_struct *vma); | 36 | struct vm_area_struct *vma, |
| 37 | int acctflags); | ||
| 37 | void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed); | 38 | void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed); |
| 38 | 39 | ||
| 39 | extern unsigned long hugepages_treat_as_movable; | 40 | extern unsigned long hugepages_treat_as_movable; |
| @@ -138,7 +139,7 @@ static inline struct hugetlbfs_sb_info *HUGETLBFS_SB(struct super_block *sb) | |||
| 138 | 139 | ||
| 139 | extern const struct file_operations hugetlbfs_file_operations; | 140 | extern const struct file_operations hugetlbfs_file_operations; |
| 140 | extern struct vm_operations_struct hugetlb_vm_ops; | 141 | extern struct vm_operations_struct hugetlb_vm_ops; |
| 141 | struct file *hugetlb_file_setup(const char *name, size_t); | 142 | struct file *hugetlb_file_setup(const char *name, size_t, int); |
| 142 | int hugetlb_get_quota(struct address_space *mapping, long delta); | 143 | int hugetlb_get_quota(struct address_space *mapping, long delta); |
| 143 | void hugetlb_put_quota(struct address_space *mapping, long delta); | 144 | void hugetlb_put_quota(struct address_space *mapping, long delta); |
| 144 | 145 | ||
| @@ -158,9 +159,9 @@ static inline void set_file_hugepages(struct file *file) | |||
| 158 | } | 159 | } |
| 159 | #else /* !CONFIG_HUGETLBFS */ | 160 | #else /* !CONFIG_HUGETLBFS */ |
| 160 | 161 | ||
| 161 | #define is_file_hugepages(file) 0 | 162 | #define is_file_hugepages(file) 0 |
| 162 | #define set_file_hugepages(file) BUG() | 163 | #define set_file_hugepages(file) BUG() |
| 163 | #define hugetlb_file_setup(name,size) ERR_PTR(-ENOSYS) | 164 | #define hugetlb_file_setup(name,size,acctflag) ERR_PTR(-ENOSYS) |
| 164 | 165 | ||
| 165 | #endif /* !CONFIG_HUGETLBFS */ | 166 | #endif /* !CONFIG_HUGETLBFS */ |
| 166 | 167 | ||
diff --git a/include/linux/i2c-dev.h b/include/linux/i2c-dev.h index 311315b56b61..fd53bfd26470 100644 --- a/include/linux/i2c-dev.h +++ b/include/linux/i2c-dev.h | |||
| @@ -33,7 +33,7 @@ | |||
| 33 | */ | 33 | */ |
| 34 | #define I2C_RETRIES 0x0701 /* number of times a device address should | 34 | #define I2C_RETRIES 0x0701 /* number of times a device address should |
| 35 | be polled when not acknowledging */ | 35 | be polled when not acknowledging */ |
| 36 | #define I2C_TIMEOUT 0x0702 /* set timeout in jiffies - call with int */ | 36 | #define I2C_TIMEOUT 0x0702 /* set timeout in units of 10 ms */ |
| 37 | 37 | ||
| 38 | /* NOTE: Slave address is 7 or 10 bits, but 10-bit addresses | 38 | /* NOTE: Slave address is 7 or 10 bits, but 10-bit addresses |
| 39 | * are NOT supported! (due to code brokenness) | 39 | * are NOT supported! (due to code brokenness) |
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index fcfbfea3af72..c86c3b07604c 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
| @@ -361,7 +361,7 @@ struct i2c_adapter { | |||
| 361 | struct mutex bus_lock; | 361 | struct mutex bus_lock; |
| 362 | struct mutex clist_lock; | 362 | struct mutex clist_lock; |
| 363 | 363 | ||
| 364 | int timeout; | 364 | int timeout; /* in jiffies */ |
| 365 | int retries; | 365 | int retries; |
| 366 | struct device dev; /* the adapter device */ | 366 | struct device dev; /* the adapter device */ |
| 367 | 367 | ||
diff --git a/include/linux/ide.h b/include/linux/ide.h index 194da5a4b0d6..e0cedfe9fad4 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
| @@ -663,7 +663,7 @@ typedef struct ide_drive_s ide_drive_t; | |||
| 663 | #define to_ide_device(dev) container_of(dev, ide_drive_t, gendev) | 663 | #define to_ide_device(dev) container_of(dev, ide_drive_t, gendev) |
| 664 | 664 | ||
| 665 | #define to_ide_drv(obj, cont_type) \ | 665 | #define to_ide_drv(obj, cont_type) \ |
| 666 | container_of(obj, struct cont_type, kref) | 666 | container_of(obj, struct cont_type, dev) |
| 667 | 667 | ||
| 668 | #define ide_drv_g(disk, cont_type) \ | 668 | #define ide_drv_g(disk, cont_type) \ |
| 669 | container_of((disk)->private_data, struct cont_type, driver) | 669 | container_of((disk)->private_data, struct cont_type, driver) |
| @@ -866,6 +866,7 @@ struct ide_host { | |||
| 866 | unsigned int n_ports; | 866 | unsigned int n_ports; |
| 867 | struct device *dev[2]; | 867 | struct device *dev[2]; |
| 868 | unsigned int (*init_chipset)(struct pci_dev *); | 868 | unsigned int (*init_chipset)(struct pci_dev *); |
| 869 | irq_handler_t irq_handler; | ||
| 869 | unsigned long host_flags; | 870 | unsigned long host_flags; |
| 870 | void *host_priv; | 871 | void *host_priv; |
| 871 | ide_hwif_t *cur_port; /* for hosts requiring serialization */ | 872 | ide_hwif_t *cur_port; /* for hosts requiring serialization */ |
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index f8ff918c208f..e1ff5b14310e 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h | |||
| @@ -210,6 +210,7 @@ static inline struct sk_buff *__vlan_put_tag(struct sk_buff *skb, u16 vlan_tci) | |||
| 210 | 210 | ||
| 211 | /* Move the mac addresses to the beginning of the new header. */ | 211 | /* Move the mac addresses to the beginning of the new header. */ |
| 212 | memmove(skb->data, skb->data + VLAN_HLEN, 2 * VLAN_ETH_ALEN); | 212 | memmove(skb->data, skb->data + VLAN_HLEN, 2 * VLAN_ETH_ALEN); |
| 213 | skb->mac_header -= VLAN_HLEN; | ||
| 213 | 214 | ||
| 214 | /* first, the ethernet type */ | 215 | /* first, the ethernet type */ |
| 215 | veth->h_vlan_proto = htons(ETH_P_8021Q); | 216 | veth->h_vlan_proto = htons(ETH_P_8021Q); |
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index ea0ea1a4c36f..e752d973fa21 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
| @@ -48,12 +48,11 @@ extern struct fs_struct init_fs; | |||
| 48 | .posix_timers = LIST_HEAD_INIT(sig.posix_timers), \ | 48 | .posix_timers = LIST_HEAD_INIT(sig.posix_timers), \ |
| 49 | .cpu_timers = INIT_CPU_TIMERS(sig.cpu_timers), \ | 49 | .cpu_timers = INIT_CPU_TIMERS(sig.cpu_timers), \ |
| 50 | .rlim = INIT_RLIMITS, \ | 50 | .rlim = INIT_RLIMITS, \ |
| 51 | .cputime = { .totals = { \ | 51 | .cputimer = { \ |
| 52 | .utime = cputime_zero, \ | 52 | .cputime = INIT_CPUTIME, \ |
| 53 | .stime = cputime_zero, \ | 53 | .running = 0, \ |
| 54 | .sum_exec_runtime = 0, \ | 54 | .lock = __SPIN_LOCK_UNLOCKED(sig.cputimer.lock), \ |
| 55 | .lock = __SPIN_LOCK_UNLOCKED(sig.cputime.totals.lock), \ | 55 | }, \ |
| 56 | }, }, \ | ||
| 57 | } | 56 | } |
| 58 | 57 | ||
| 59 | extern struct nsproxy init_nsproxy; | 58 | extern struct nsproxy init_nsproxy; |
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h index c4f6c101dbcd..d2e3cbfba14f 100644 --- a/include/linux/intel-iommu.h +++ b/include/linux/intel-iommu.h | |||
| @@ -194,6 +194,7 @@ static inline void dmar_writeq(void __iomem *addr, u64 val) | |||
| 194 | /* FSTS_REG */ | 194 | /* FSTS_REG */ |
| 195 | #define DMA_FSTS_PPF ((u32)2) | 195 | #define DMA_FSTS_PPF ((u32)2) |
| 196 | #define DMA_FSTS_PFO ((u32)1) | 196 | #define DMA_FSTS_PFO ((u32)1) |
| 197 | #define DMA_FSTS_IQE (1 << 4) | ||
| 197 | #define dma_fsts_fault_record_index(s) (((s) >> 8) & 0xff) | 198 | #define dma_fsts_fault_record_index(s) (((s) >> 8) & 0xff) |
| 198 | 199 | ||
| 199 | /* FRCD_REG, 32 bits access */ | 200 | /* FRCD_REG, 32 bits access */ |
| @@ -328,7 +329,7 @@ extern int qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr, | |||
| 328 | unsigned int size_order, u64 type, | 329 | unsigned int size_order, u64 type, |
| 329 | int non_present_entry_flush); | 330 | int non_present_entry_flush); |
| 330 | 331 | ||
| 331 | extern void qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); | 332 | extern int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); |
| 332 | 333 | ||
| 333 | extern void *intel_alloc_coherent(struct device *, size_t, dma_addr_t *, gfp_t); | 334 | extern void *intel_alloc_coherent(struct device *, size_t, dma_addr_t *, gfp_t); |
| 334 | extern void intel_free_coherent(struct device *, size_t, void *, dma_addr_t); | 335 | extern void intel_free_coherent(struct device *, size_t, void *, dma_addr_t); |
diff --git a/include/linux/io-mapping.h b/include/linux/io-mapping.h index 82df31726a54..0adb0f91568c 100644 --- a/include/linux/io-mapping.h +++ b/include/linux/io-mapping.h | |||
| @@ -30,11 +30,14 @@ | |||
| 30 | * See Documentation/io_mapping.txt | 30 | * See Documentation/io_mapping.txt |
| 31 | */ | 31 | */ |
| 32 | 32 | ||
| 33 | /* this struct isn't actually defined anywhere */ | ||
| 34 | struct io_mapping; | ||
| 35 | |||
| 36 | #ifdef CONFIG_HAVE_ATOMIC_IOMAP | 33 | #ifdef CONFIG_HAVE_ATOMIC_IOMAP |
| 37 | 34 | ||
| 35 | struct io_mapping { | ||
| 36 | resource_size_t base; | ||
| 37 | unsigned long size; | ||
| 38 | pgprot_t prot; | ||
| 39 | }; | ||
| 40 | |||
| 38 | /* | 41 | /* |
| 39 | * For small address space machines, mapping large objects | 42 | * For small address space machines, mapping large objects |
| 40 | * into the kernel virtual space isn't practical. Where | 43 | * into the kernel virtual space isn't practical. Where |
| @@ -43,23 +46,40 @@ struct io_mapping; | |||
| 43 | */ | 46 | */ |
| 44 | 47 | ||
| 45 | static inline struct io_mapping * | 48 | static inline struct io_mapping * |
| 46 | io_mapping_create_wc(unsigned long base, unsigned long size) | 49 | io_mapping_create_wc(resource_size_t base, unsigned long size) |
| 47 | { | 50 | { |
| 48 | return (struct io_mapping *) base; | 51 | struct io_mapping *iomap; |
| 52 | |||
| 53 | if (!is_io_mapping_possible(base, size)) | ||
| 54 | return NULL; | ||
| 55 | |||
| 56 | iomap = kmalloc(sizeof(*iomap), GFP_KERNEL); | ||
| 57 | if (!iomap) | ||
| 58 | return NULL; | ||
| 59 | |||
| 60 | iomap->base = base; | ||
| 61 | iomap->size = size; | ||
| 62 | iomap->prot = pgprot_writecombine(__pgprot(__PAGE_KERNEL)); | ||
| 63 | return iomap; | ||
| 49 | } | 64 | } |
| 50 | 65 | ||
| 51 | static inline void | 66 | static inline void |
| 52 | io_mapping_free(struct io_mapping *mapping) | 67 | io_mapping_free(struct io_mapping *mapping) |
| 53 | { | 68 | { |
| 69 | kfree(mapping); | ||
| 54 | } | 70 | } |
| 55 | 71 | ||
| 56 | /* Atomic map/unmap */ | 72 | /* Atomic map/unmap */ |
| 57 | static inline void * | 73 | static inline void * |
| 58 | io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset) | 74 | io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset) |
| 59 | { | 75 | { |
| 60 | offset += (unsigned long) mapping; | 76 | resource_size_t phys_addr; |
| 61 | return iomap_atomic_prot_pfn(offset >> PAGE_SHIFT, KM_USER0, | 77 | unsigned long pfn; |
| 62 | __pgprot(__PAGE_KERNEL_WC)); | 78 | |
| 79 | BUG_ON(offset >= mapping->size); | ||
| 80 | phys_addr = mapping->base + offset; | ||
| 81 | pfn = (unsigned long) (phys_addr >> PAGE_SHIFT); | ||
| 82 | return iomap_atomic_prot_pfn(pfn, KM_USER0, mapping->prot); | ||
| 63 | } | 83 | } |
| 64 | 84 | ||
| 65 | static inline void | 85 | static inline void |
| @@ -71,8 +91,12 @@ io_mapping_unmap_atomic(void *vaddr) | |||
| 71 | static inline void * | 91 | static inline void * |
| 72 | io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset) | 92 | io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset) |
| 73 | { | 93 | { |
| 74 | offset += (unsigned long) mapping; | 94 | resource_size_t phys_addr; |
| 75 | return ioremap_wc(offset, PAGE_SIZE); | 95 | |
| 96 | BUG_ON(offset >= mapping->size); | ||
| 97 | phys_addr = mapping->base + offset; | ||
| 98 | |||
| 99 | return ioremap_wc(phys_addr, PAGE_SIZE); | ||
| 76 | } | 100 | } |
| 77 | 101 | ||
| 78 | static inline void | 102 | static inline void |
| @@ -83,9 +107,12 @@ io_mapping_unmap(void *vaddr) | |||
| 83 | 107 | ||
| 84 | #else | 108 | #else |
| 85 | 109 | ||
| 110 | /* this struct isn't actually defined anywhere */ | ||
| 111 | struct io_mapping; | ||
| 112 | |||
| 86 | /* Create the io_mapping object*/ | 113 | /* Create the io_mapping object*/ |
| 87 | static inline struct io_mapping * | 114 | static inline struct io_mapping * |
| 88 | io_mapping_create_wc(unsigned long base, unsigned long size) | 115 | io_mapping_create_wc(resource_size_t base, unsigned long size) |
| 89 | { | 116 | { |
| 90 | return (struct io_mapping *) ioremap_wc(base, size); | 117 | return (struct io_mapping *) ioremap_wc(base, size); |
| 91 | } | 118 | } |
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h index b28b37eb11c6..4d248b3f1323 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h | |||
| @@ -1150,7 +1150,8 @@ extern int jbd2_journal_clear_err (journal_t *); | |||
| 1150 | extern int jbd2_journal_bmap(journal_t *, unsigned long, unsigned long long *); | 1150 | extern int jbd2_journal_bmap(journal_t *, unsigned long, unsigned long long *); |
| 1151 | extern int jbd2_journal_force_commit(journal_t *); | 1151 | extern int jbd2_journal_force_commit(journal_t *); |
| 1152 | extern int jbd2_journal_file_inode(handle_t *handle, struct jbd2_inode *inode); | 1152 | extern int jbd2_journal_file_inode(handle_t *handle, struct jbd2_inode *inode); |
| 1153 | extern int jbd2_journal_begin_ordered_truncate(struct jbd2_inode *inode, loff_t new_size); | 1153 | extern int jbd2_journal_begin_ordered_truncate(journal_t *journal, |
| 1154 | struct jbd2_inode *inode, loff_t new_size); | ||
| 1154 | extern void jbd2_journal_init_jbd_inode(struct jbd2_inode *jinode, struct inode *inode); | 1155 | extern void jbd2_journal_init_jbd_inode(struct jbd2_inode *jinode, struct inode *inode); |
| 1155 | extern void jbd2_journal_release_jbd_inode(journal_t *journal, struct jbd2_inode *jinode); | 1156 | extern void jbd2_journal_release_jbd_inode(journal_t *journal, struct jbd2_inode *jinode); |
| 1156 | 1157 | ||
diff --git a/include/linux/kvm.h b/include/linux/kvm.h index 5715f1907601..0424326f1679 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h | |||
| @@ -58,10 +58,10 @@ struct kvm_irqchip { | |||
| 58 | __u32 pad; | 58 | __u32 pad; |
| 59 | union { | 59 | union { |
| 60 | char dummy[512]; /* reserving space */ | 60 | char dummy[512]; /* reserving space */ |
| 61 | #ifdef CONFIG_X86 | 61 | #ifdef __KVM_HAVE_PIT |
| 62 | struct kvm_pic_state pic; | 62 | struct kvm_pic_state pic; |
| 63 | #endif | 63 | #endif |
| 64 | #if defined(CONFIG_X86) || defined(CONFIG_IA64) | 64 | #ifdef __KVM_HAVE_IOAPIC |
| 65 | struct kvm_ioapic_state ioapic; | 65 | struct kvm_ioapic_state ioapic; |
| 66 | #endif | 66 | #endif |
| 67 | } chip; | 67 | } chip; |
| @@ -384,16 +384,16 @@ struct kvm_trace_rec { | |||
| 384 | #define KVM_CAP_MP_STATE 14 | 384 | #define KVM_CAP_MP_STATE 14 |
| 385 | #define KVM_CAP_COALESCED_MMIO 15 | 385 | #define KVM_CAP_COALESCED_MMIO 15 |
| 386 | #define KVM_CAP_SYNC_MMU 16 /* Changes to host mmap are reflected in guest */ | 386 | #define KVM_CAP_SYNC_MMU 16 /* Changes to host mmap are reflected in guest */ |
| 387 | #if defined(CONFIG_X86)||defined(CONFIG_IA64) | 387 | #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT |
| 388 | #define KVM_CAP_DEVICE_ASSIGNMENT 17 | 388 | #define KVM_CAP_DEVICE_ASSIGNMENT 17 |
| 389 | #endif | 389 | #endif |
| 390 | #define KVM_CAP_IOMMU 18 | 390 | #define KVM_CAP_IOMMU 18 |
| 391 | #if defined(CONFIG_X86) | 391 | #ifdef __KVM_HAVE_MSI |
| 392 | #define KVM_CAP_DEVICE_MSI 20 | 392 | #define KVM_CAP_DEVICE_MSI 20 |
| 393 | #endif | 393 | #endif |
| 394 | /* Bug in KVM_SET_USER_MEMORY_REGION fixed: */ | 394 | /* Bug in KVM_SET_USER_MEMORY_REGION fixed: */ |
| 395 | #define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21 | 395 | #define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21 |
| 396 | #if defined(CONFIG_X86) | 396 | #ifdef __KVM_HAVE_USER_NMI |
| 397 | #define KVM_CAP_USER_NMI 22 | 397 | #define KVM_CAP_USER_NMI 22 |
| 398 | #endif | 398 | #endif |
| 399 | 399 | ||
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index ec49d0be7f52..bf6f703642fc 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
| @@ -285,6 +285,7 @@ void kvm_free_physmem(struct kvm *kvm); | |||
| 285 | struct kvm *kvm_arch_create_vm(void); | 285 | struct kvm *kvm_arch_create_vm(void); |
| 286 | void kvm_arch_destroy_vm(struct kvm *kvm); | 286 | void kvm_arch_destroy_vm(struct kvm *kvm); |
| 287 | void kvm_free_all_assigned_devices(struct kvm *kvm); | 287 | void kvm_free_all_assigned_devices(struct kvm *kvm); |
| 288 | void kvm_arch_sync_events(struct kvm *kvm); | ||
| 288 | 289 | ||
| 289 | int kvm_cpu_get_interrupt(struct kvm_vcpu *v); | 290 | int kvm_cpu_get_interrupt(struct kvm_vcpu *v); |
| 290 | int kvm_cpu_has_interrupt(struct kvm_vcpu *v); | 291 | int kvm_cpu_has_interrupt(struct kvm_vcpu *v); |
diff --git a/include/linux/libata.h b/include/linux/libata.h index 5d87bc09a1f5..dc18b87ed722 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -275,7 +275,7 @@ enum { | |||
| 275 | * advised to wait only for the following duration before | 275 | * advised to wait only for the following duration before |
| 276 | * doing SRST. | 276 | * doing SRST. |
| 277 | */ | 277 | */ |
| 278 | ATA_TMOUT_PMP_SRST_WAIT = 1000, | 278 | ATA_TMOUT_PMP_SRST_WAIT = 5000, |
| 279 | 279 | ||
| 280 | /* ATA bus states */ | 280 | /* ATA bus states */ |
| 281 | BUS_UNKNOWN = 0, | 281 | BUS_UNKNOWN = 0, |
| @@ -530,6 +530,7 @@ struct ata_queued_cmd { | |||
| 530 | unsigned long flags; /* ATA_QCFLAG_xxx */ | 530 | unsigned long flags; /* ATA_QCFLAG_xxx */ |
| 531 | unsigned int tag; | 531 | unsigned int tag; |
| 532 | unsigned int n_elem; | 532 | unsigned int n_elem; |
| 533 | unsigned int orig_n_elem; | ||
| 533 | 534 | ||
| 534 | int dma_dir; | 535 | int dma_dir; |
| 535 | 536 | ||
| @@ -750,7 +751,8 @@ struct ata_port { | |||
| 750 | acpi_handle acpi_handle; | 751 | acpi_handle acpi_handle; |
| 751 | struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */ | 752 | struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */ |
| 752 | #endif | 753 | #endif |
| 753 | u8 sector_buf[ATA_SECT_SIZE]; /* owned by EH */ | 754 | /* owned by EH */ |
| 755 | u8 sector_buf[ATA_SECT_SIZE] ____cacheline_aligned; | ||
| 754 | }; | 756 | }; |
| 755 | 757 | ||
| 756 | /* The following initializer overrides a method to NULL whether one of | 758 | /* The following initializer overrides a method to NULL whether one of |
diff --git a/include/linux/mm.h b/include/linux/mm.h index e8ddc98b8405..065cdf8c09fb 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -1041,10 +1041,23 @@ extern void free_bootmem_with_active_regions(int nid, | |||
| 1041 | typedef int (*work_fn_t)(unsigned long, unsigned long, void *); | 1041 | typedef int (*work_fn_t)(unsigned long, unsigned long, void *); |
| 1042 | extern void work_with_active_regions(int nid, work_fn_t work_fn, void *data); | 1042 | extern void work_with_active_regions(int nid, work_fn_t work_fn, void *data); |
| 1043 | extern void sparse_memory_present_with_active_regions(int nid); | 1043 | extern void sparse_memory_present_with_active_regions(int nid); |
| 1044 | #ifndef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID | ||
| 1045 | extern int early_pfn_to_nid(unsigned long pfn); | ||
| 1046 | #endif /* CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID */ | ||
| 1047 | #endif /* CONFIG_ARCH_POPULATES_NODE_MAP */ | 1044 | #endif /* CONFIG_ARCH_POPULATES_NODE_MAP */ |
| 1045 | |||
| 1046 | #if !defined(CONFIG_ARCH_POPULATES_NODE_MAP) && \ | ||
| 1047 | !defined(CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID) | ||
| 1048 | static inline int __early_pfn_to_nid(unsigned long pfn) | ||
| 1049 | { | ||
| 1050 | return 0; | ||
| 1051 | } | ||
| 1052 | #else | ||
| 1053 | /* please see mm/page_alloc.c */ | ||
| 1054 | extern int __meminit early_pfn_to_nid(unsigned long pfn); | ||
| 1055 | #ifdef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID | ||
| 1056 | /* there is a per-arch backend function. */ | ||
| 1057 | extern int __meminit __early_pfn_to_nid(unsigned long pfn); | ||
| 1058 | #endif /* CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID */ | ||
| 1059 | #endif | ||
| 1060 | |||
| 1048 | extern void set_dma_reserve(unsigned long new_dma_reserve); | 1061 | extern void set_dma_reserve(unsigned long new_dma_reserve); |
| 1049 | extern void memmap_init_zone(unsigned long, int, unsigned long, | 1062 | extern void memmap_init_zone(unsigned long, int, unsigned long, |
| 1050 | unsigned long, enum memmap_context); | 1063 | unsigned long, enum memmap_context); |
| @@ -1129,8 +1142,7 @@ extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, | |||
| 1129 | unsigned long flag, unsigned long pgoff); | 1142 | unsigned long flag, unsigned long pgoff); |
| 1130 | extern unsigned long mmap_region(struct file *file, unsigned long addr, | 1143 | extern unsigned long mmap_region(struct file *file, unsigned long addr, |
| 1131 | unsigned long len, unsigned long flags, | 1144 | unsigned long len, unsigned long flags, |
| 1132 | unsigned int vm_flags, unsigned long pgoff, | 1145 | unsigned int vm_flags, unsigned long pgoff); |
| 1133 | int accountable); | ||
| 1134 | 1146 | ||
| 1135 | static inline unsigned long do_mmap(struct file *file, unsigned long addr, | 1147 | static inline unsigned long do_mmap(struct file *file, unsigned long addr, |
| 1136 | unsigned long len, unsigned long prot, | 1148 | unsigned long len, unsigned long prot, |
| @@ -1160,6 +1172,7 @@ extern int filemap_fault(struct vm_area_struct *, struct vm_fault *); | |||
| 1160 | 1172 | ||
| 1161 | /* mm/page-writeback.c */ | 1173 | /* mm/page-writeback.c */ |
| 1162 | int write_one_page(struct page *page, int wait); | 1174 | int write_one_page(struct page *page, int wait); |
| 1175 | void task_dirty_inc(struct task_struct *tsk); | ||
| 1163 | 1176 | ||
| 1164 | /* readahead.c */ | 1177 | /* readahead.c */ |
| 1165 | #define VM_MAX_READAHEAD 128 /* kbytes */ | 1178 | #define VM_MAX_READAHEAD 128 /* kbytes */ |
| @@ -1305,5 +1318,6 @@ void vmemmap_populate_print_last(void); | |||
| 1305 | 1318 | ||
| 1306 | extern void *alloc_locked_buffer(size_t size); | 1319 | extern void *alloc_locked_buffer(size_t size); |
| 1307 | extern void free_locked_buffer(void *buffer, size_t size); | 1320 | extern void free_locked_buffer(void *buffer, size_t size); |
| 1321 | extern void release_locked_buffer(void *buffer, size_t size); | ||
| 1308 | #endif /* __KERNEL__ */ | 1322 | #endif /* __KERNEL__ */ |
| 1309 | #endif /* _LINUX_MM_H */ | 1323 | #endif /* _LINUX_MM_H */ |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 09c14e213b63..1aca6cebbb78 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
| @@ -1071,7 +1071,7 @@ void sparse_init(void); | |||
| 1071 | #endif /* CONFIG_SPARSEMEM */ | 1071 | #endif /* CONFIG_SPARSEMEM */ |
| 1072 | 1072 | ||
| 1073 | #ifdef CONFIG_NODES_SPAN_OTHER_NODES | 1073 | #ifdef CONFIG_NODES_SPAN_OTHER_NODES |
| 1074 | #define early_pfn_in_nid(pfn, nid) (early_pfn_to_nid(pfn) == (nid)) | 1074 | bool early_pfn_in_nid(unsigned long pfn, int nid); |
| 1075 | #else | 1075 | #else |
| 1076 | #define early_pfn_in_nid(pfn, nid) (1) | 1076 | #define early_pfn_in_nid(pfn, nid) (1) |
| 1077 | #endif | 1077 | #endif |
diff --git a/include/linux/module.h b/include/linux/module.h index f3b8329eb5b8..145a75528cc1 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
| @@ -407,7 +407,6 @@ static inline local_t *__module_ref_addr(struct module *mod, int cpu) | |||
| 407 | static inline void __module_get(struct module *module) | 407 | static inline void __module_get(struct module *module) |
| 408 | { | 408 | { |
| 409 | if (module) { | 409 | if (module) { |
| 410 | BUG_ON(module_refcount(module) == 0); | ||
| 411 | local_inc(__module_ref_addr(module, get_cpu())); | 410 | local_inc(__module_ref_addr(module, get_cpu())); |
| 412 | put_cpu(); | 411 | put_cpu(); |
| 413 | } | 412 | } |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index ec54785d34f9..659366734f3f 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -1079,6 +1079,7 @@ extern void synchronize_net(void); | |||
| 1079 | extern int register_netdevice_notifier(struct notifier_block *nb); | 1079 | extern int register_netdevice_notifier(struct notifier_block *nb); |
| 1080 | extern int unregister_netdevice_notifier(struct notifier_block *nb); | 1080 | extern int unregister_netdevice_notifier(struct notifier_block *nb); |
| 1081 | extern int init_dummy_netdev(struct net_device *dev); | 1081 | extern int init_dummy_netdev(struct net_device *dev); |
| 1082 | extern void netdev_resync_ops(struct net_device *dev); | ||
| 1082 | 1083 | ||
| 1083 | extern int call_netdevice_notifiers(unsigned long val, struct net_device *dev); | 1084 | extern int call_netdevice_notifiers(unsigned long val, struct net_device *dev); |
| 1084 | extern struct net_device *dev_get_by_index(struct net *net, int ifindex); | 1085 | extern struct net_device *dev_get_by_index(struct net *net, int ifindex); |
diff --git a/include/linux/netfilter/xt_NFLOG.h b/include/linux/netfilter/xt_NFLOG.h index cdcd0ed58f7a..4b36aeb46a10 100644 --- a/include/linux/netfilter/xt_NFLOG.h +++ b/include/linux/netfilter/xt_NFLOG.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | #define _XT_NFLOG_TARGET | 2 | #define _XT_NFLOG_TARGET |
| 3 | 3 | ||
| 4 | #define XT_NFLOG_DEFAULT_GROUP 0x1 | 4 | #define XT_NFLOG_DEFAULT_GROUP 0x1 |
| 5 | #define XT_NFLOG_DEFAULT_THRESHOLD 1 | 5 | #define XT_NFLOG_DEFAULT_THRESHOLD 0 |
| 6 | 6 | ||
| 7 | #define XT_NFLOG_MASK 0x0 | 7 | #define XT_NFLOG_MASK 0x0 |
| 8 | 8 | ||
diff --git a/include/linux/pci.h b/include/linux/pci.h index 48890cf3f96e..7bd624bfdcfd 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
| @@ -684,7 +684,7 @@ int pci_enable_rom(struct pci_dev *pdev); | |||
| 684 | void pci_disable_rom(struct pci_dev *pdev); | 684 | void pci_disable_rom(struct pci_dev *pdev); |
| 685 | void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size); | 685 | void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size); |
| 686 | void pci_unmap_rom(struct pci_dev *pdev, void __iomem *rom); | 686 | void pci_unmap_rom(struct pci_dev *pdev, void __iomem *rom); |
| 687 | size_t pci_get_rom_size(void __iomem *rom, size_t size); | 687 | size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size); |
| 688 | 688 | ||
| 689 | /* Power management related routines */ | 689 | /* Power management related routines */ |
| 690 | int pci_save_state(struct pci_dev *dev); | 690 | int pci_save_state(struct pci_dev *dev); |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 52a9fe08451c..aca8c458aa8a 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -1312,6 +1312,7 @@ | |||
| 1312 | #define PCI_DEVICE_ID_VIA_VT3351 0x0351 | 1312 | #define PCI_DEVICE_ID_VIA_VT3351 0x0351 |
| 1313 | #define PCI_DEVICE_ID_VIA_VT3364 0x0364 | 1313 | #define PCI_DEVICE_ID_VIA_VT3364 0x0364 |
| 1314 | #define PCI_DEVICE_ID_VIA_8371_0 0x0391 | 1314 | #define PCI_DEVICE_ID_VIA_8371_0 0x0391 |
| 1315 | #define PCI_DEVICE_ID_VIA_6415 0x0415 | ||
| 1315 | #define PCI_DEVICE_ID_VIA_8501_0 0x0501 | 1316 | #define PCI_DEVICE_ID_VIA_8501_0 0x0501 |
| 1316 | #define PCI_DEVICE_ID_VIA_82C561 0x0561 | 1317 | #define PCI_DEVICE_ID_VIA_82C561 0x0561 |
| 1317 | #define PCI_DEVICE_ID_VIA_82C586_1 0x0571 | 1318 | #define PCI_DEVICE_ID_VIA_82C586_1 0x0571 |
| @@ -1444,6 +1445,7 @@ | |||
| 1444 | #define PCI_DEVICE_ID_DIGI_DF_M_E 0x0071 | 1445 | #define PCI_DEVICE_ID_DIGI_DF_M_E 0x0071 |
| 1445 | #define PCI_DEVICE_ID_DIGI_DF_M_IOM2_A 0x0072 | 1446 | #define PCI_DEVICE_ID_DIGI_DF_M_IOM2_A 0x0072 |
| 1446 | #define PCI_DEVICE_ID_DIGI_DF_M_A 0x0073 | 1447 | #define PCI_DEVICE_ID_DIGI_DF_M_A 0x0073 |
| 1448 | #define PCI_DEVICE_ID_DIGI_NEO_8 0x00B1 | ||
| 1447 | #define PCI_DEVICE_ID_NEO_2DB9 0x00C8 | 1449 | #define PCI_DEVICE_ID_NEO_2DB9 0x00C8 |
| 1448 | #define PCI_DEVICE_ID_NEO_2DB9PRI 0x00C9 | 1450 | #define PCI_DEVICE_ID_NEO_2DB9PRI 0x00C9 |
| 1449 | #define PCI_DEVICE_ID_NEO_2RJ45 0x00CA | 1451 | #define PCI_DEVICE_ID_NEO_2RJ45 0x00CA |
| @@ -2321,6 +2323,9 @@ | |||
| 2321 | #define PCI_DEVICE_ID_INTEL_82378 0x0484 | 2323 | #define PCI_DEVICE_ID_INTEL_82378 0x0484 |
| 2322 | #define PCI_DEVICE_ID_INTEL_I960 0x0960 | 2324 | #define PCI_DEVICE_ID_INTEL_I960 0x0960 |
| 2323 | #define PCI_DEVICE_ID_INTEL_I960RM 0x0962 | 2325 | #define PCI_DEVICE_ID_INTEL_I960RM 0x0962 |
| 2326 | #define PCI_DEVICE_ID_INTEL_8257X_SOL 0x1062 | ||
| 2327 | #define PCI_DEVICE_ID_INTEL_82573E_SOL 0x1085 | ||
| 2328 | #define PCI_DEVICE_ID_INTEL_82573L_SOL 0x108F | ||
| 2324 | #define PCI_DEVICE_ID_INTEL_82815_MC 0x1130 | 2329 | #define PCI_DEVICE_ID_INTEL_82815_MC 0x1130 |
| 2325 | #define PCI_DEVICE_ID_INTEL_82815_CGC 0x1132 | 2330 | #define PCI_DEVICE_ID_INTEL_82815_CGC 0x1132 |
| 2326 | #define PCI_DEVICE_ID_INTEL_82092AA_0 0x1221 | 2331 | #define PCI_DEVICE_ID_INTEL_82092AA_0 0x1221 |
diff --git a/include/linux/pkt_sched.h b/include/linux/pkt_sched.h index b2648e8e4987..d51a2b3e221e 100644 --- a/include/linux/pkt_sched.h +++ b/include/linux/pkt_sched.h | |||
| @@ -515,7 +515,7 @@ enum | |||
| 515 | 515 | ||
| 516 | struct tc_drr_stats | 516 | struct tc_drr_stats |
| 517 | { | 517 | { |
| 518 | u32 deficit; | 518 | __u32 deficit; |
| 519 | }; | 519 | }; |
| 520 | 520 | ||
| 521 | #endif | 521 | #endif |
diff --git a/include/linux/pm.h b/include/linux/pm.h index de2e0a8f6728..24ba5f67b3a3 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
| @@ -381,10 +381,12 @@ struct dev_pm_info { | |||
| 381 | 381 | ||
| 382 | #ifdef CONFIG_PM_SLEEP | 382 | #ifdef CONFIG_PM_SLEEP |
| 383 | extern void device_pm_lock(void); | 383 | extern void device_pm_lock(void); |
| 384 | extern int sysdev_resume(void); | ||
| 384 | extern void device_power_up(pm_message_t state); | 385 | extern void device_power_up(pm_message_t state); |
| 385 | extern void device_resume(pm_message_t state); | 386 | extern void device_resume(pm_message_t state); |
| 386 | 387 | ||
| 387 | extern void device_pm_unlock(void); | 388 | extern void device_pm_unlock(void); |
| 389 | extern int sysdev_suspend(pm_message_t state); | ||
| 388 | extern int device_power_down(pm_message_t state); | 390 | extern int device_power_down(pm_message_t state); |
| 389 | extern int device_suspend(pm_message_t state); | 391 | extern int device_suspend(pm_message_t state); |
| 390 | extern int device_prepare_suspend(pm_message_t state); | 392 | extern int device_prepare_suspend(pm_message_t state); |
diff --git a/include/linux/rcuclassic.h b/include/linux/rcuclassic.h index f3f697df1d71..80044a4f3ab9 100644 --- a/include/linux/rcuclassic.h +++ b/include/linux/rcuclassic.h | |||
| @@ -181,4 +181,10 @@ extern long rcu_batches_completed_bh(void); | |||
| 181 | #define rcu_enter_nohz() do { } while (0) | 181 | #define rcu_enter_nohz() do { } while (0) |
| 182 | #define rcu_exit_nohz() do { } while (0) | 182 | #define rcu_exit_nohz() do { } while (0) |
| 183 | 183 | ||
| 184 | /* A context switch is a grace period for rcuclassic. */ | ||
| 185 | static inline int rcu_blocking_is_gp(void) | ||
| 186 | { | ||
| 187 | return num_online_cpus() == 1; | ||
| 188 | } | ||
| 189 | |||
| 184 | #endif /* __LINUX_RCUCLASSIC_H */ | 190 | #endif /* __LINUX_RCUCLASSIC_H */ |
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 921340a7b71c..528343e6da51 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
| @@ -52,6 +52,9 @@ struct rcu_head { | |||
| 52 | void (*func)(struct rcu_head *head); | 52 | void (*func)(struct rcu_head *head); |
| 53 | }; | 53 | }; |
| 54 | 54 | ||
| 55 | /* Internal to kernel, but needed by rcupreempt.h. */ | ||
| 56 | extern int rcu_scheduler_active; | ||
| 57 | |||
| 55 | #if defined(CONFIG_CLASSIC_RCU) | 58 | #if defined(CONFIG_CLASSIC_RCU) |
| 56 | #include <linux/rcuclassic.h> | 59 | #include <linux/rcuclassic.h> |
| 57 | #elif defined(CONFIG_TREE_RCU) | 60 | #elif defined(CONFIG_TREE_RCU) |
| @@ -265,6 +268,7 @@ extern void rcu_barrier_sched(void); | |||
| 265 | 268 | ||
| 266 | /* Internal to kernel */ | 269 | /* Internal to kernel */ |
| 267 | extern void rcu_init(void); | 270 | extern void rcu_init(void); |
| 271 | extern void rcu_scheduler_starting(void); | ||
| 268 | extern int rcu_needs_cpu(int cpu); | 272 | extern int rcu_needs_cpu(int cpu); |
| 269 | 273 | ||
| 270 | #endif /* __LINUX_RCUPDATE_H */ | 274 | #endif /* __LINUX_RCUPDATE_H */ |
diff --git a/include/linux/rcupreempt.h b/include/linux/rcupreempt.h index 3e05c09b54a2..74304b4538d8 100644 --- a/include/linux/rcupreempt.h +++ b/include/linux/rcupreempt.h | |||
| @@ -142,4 +142,19 @@ static inline void rcu_exit_nohz(void) | |||
| 142 | #define rcu_exit_nohz() do { } while (0) | 142 | #define rcu_exit_nohz() do { } while (0) |
| 143 | #endif /* CONFIG_NO_HZ */ | 143 | #endif /* CONFIG_NO_HZ */ |
| 144 | 144 | ||
| 145 | /* | ||
| 146 | * A context switch is a grace period for rcupreempt synchronize_rcu() | ||
| 147 | * only during early boot, before the scheduler has been initialized. | ||
| 148 | * So, how the heck do we get a context switch? Well, if the caller | ||
| 149 | * invokes synchronize_rcu(), they are willing to accept a context | ||
| 150 | * switch, so we simply pretend that one happened. | ||
| 151 | * | ||
| 152 | * After boot, there might be a blocked or preempted task in an RCU | ||
| 153 | * read-side critical section, so we cannot then take the fastpath. | ||
| 154 | */ | ||
| 155 | static inline int rcu_blocking_is_gp(void) | ||
| 156 | { | ||
| 157 | return num_online_cpus() == 1 && !rcu_scheduler_active; | ||
| 158 | } | ||
| 159 | |||
| 145 | #endif /* __LINUX_RCUPREEMPT_H */ | 160 | #endif /* __LINUX_RCUPREEMPT_H */ |
diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h index d4368b7975c3..a722fb67bb2d 100644 --- a/include/linux/rcutree.h +++ b/include/linux/rcutree.h | |||
| @@ -326,4 +326,10 @@ static inline void rcu_exit_nohz(void) | |||
| 326 | } | 326 | } |
| 327 | #endif /* CONFIG_NO_HZ */ | 327 | #endif /* CONFIG_NO_HZ */ |
| 328 | 328 | ||
| 329 | /* A context switch is a grace period for rcutree. */ | ||
| 330 | static inline int rcu_blocking_is_gp(void) | ||
| 331 | { | ||
| 332 | return num_online_cpus() == 1; | ||
| 333 | } | ||
| 334 | |||
| 329 | #endif /* __LINUX_RCUTREE_H */ | 335 | #endif /* __LINUX_RCUTREE_H */ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 2127e959e0f4..8c216e057c94 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -443,7 +443,6 @@ struct pacct_struct { | |||
| 443 | * @utime: time spent in user mode, in &cputime_t units | 443 | * @utime: time spent in user mode, in &cputime_t units |
| 444 | * @stime: time spent in kernel mode, in &cputime_t units | 444 | * @stime: time spent in kernel mode, in &cputime_t units |
| 445 | * @sum_exec_runtime: total time spent on the CPU, in nanoseconds | 445 | * @sum_exec_runtime: total time spent on the CPU, in nanoseconds |
| 446 | * @lock: lock for fields in this struct | ||
| 447 | * | 446 | * |
| 448 | * This structure groups together three kinds of CPU time that are | 447 | * This structure groups together three kinds of CPU time that are |
| 449 | * tracked for threads and thread groups. Most things considering | 448 | * tracked for threads and thread groups. Most things considering |
| @@ -454,23 +453,33 @@ struct task_cputime { | |||
| 454 | cputime_t utime; | 453 | cputime_t utime; |
| 455 | cputime_t stime; | 454 | cputime_t stime; |
| 456 | unsigned long long sum_exec_runtime; | 455 | unsigned long long sum_exec_runtime; |
| 457 | spinlock_t lock; | ||
| 458 | }; | 456 | }; |
| 459 | /* Alternate field names when used to cache expirations. */ | 457 | /* Alternate field names when used to cache expirations. */ |
| 460 | #define prof_exp stime | 458 | #define prof_exp stime |
| 461 | #define virt_exp utime | 459 | #define virt_exp utime |
| 462 | #define sched_exp sum_exec_runtime | 460 | #define sched_exp sum_exec_runtime |
| 463 | 461 | ||
| 462 | #define INIT_CPUTIME \ | ||
| 463 | (struct task_cputime) { \ | ||
| 464 | .utime = cputime_zero, \ | ||
| 465 | .stime = cputime_zero, \ | ||
| 466 | .sum_exec_runtime = 0, \ | ||
| 467 | } | ||
| 468 | |||
| 464 | /** | 469 | /** |
| 465 | * struct thread_group_cputime - thread group interval timer counts | 470 | * struct thread_group_cputimer - thread group interval timer counts |
| 466 | * @totals: thread group interval timers; substructure for | 471 | * @cputime: thread group interval timers. |
| 467 | * uniprocessor kernel, per-cpu for SMP kernel. | 472 | * @running: non-zero when there are timers running and |
| 473 | * @cputime receives updates. | ||
| 474 | * @lock: lock for fields in this struct. | ||
| 468 | * | 475 | * |
| 469 | * This structure contains the version of task_cputime, above, that is | 476 | * This structure contains the version of task_cputime, above, that is |
| 470 | * used for thread group CPU clock calculations. | 477 | * used for thread group CPU timer calculations. |
| 471 | */ | 478 | */ |
| 472 | struct thread_group_cputime { | 479 | struct thread_group_cputimer { |
| 473 | struct task_cputime totals; | 480 | struct task_cputime cputime; |
| 481 | int running; | ||
| 482 | spinlock_t lock; | ||
| 474 | }; | 483 | }; |
| 475 | 484 | ||
| 476 | /* | 485 | /* |
| @@ -519,10 +528,10 @@ struct signal_struct { | |||
| 519 | cputime_t it_prof_incr, it_virt_incr; | 528 | cputime_t it_prof_incr, it_virt_incr; |
| 520 | 529 | ||
| 521 | /* | 530 | /* |
| 522 | * Thread group totals for process CPU clocks. | 531 | * Thread group totals for process CPU timers. |
| 523 | * See thread_group_cputime(), et al, for details. | 532 | * See thread_group_cputimer(), et al, for details. |
| 524 | */ | 533 | */ |
| 525 | struct thread_group_cputime cputime; | 534 | struct thread_group_cputimer cputimer; |
| 526 | 535 | ||
| 527 | /* Earliest-expiration cache. */ | 536 | /* Earliest-expiration cache. */ |
| 528 | struct task_cputime cputime_expires; | 537 | struct task_cputime cputime_expires; |
| @@ -559,7 +568,7 @@ struct signal_struct { | |||
| 559 | * Live threads maintain their own counters and add to these | 568 | * Live threads maintain their own counters and add to these |
| 560 | * in __exit_signal, except for the group leader. | 569 | * in __exit_signal, except for the group leader. |
| 561 | */ | 570 | */ |
| 562 | cputime_t cutime, cstime; | 571 | cputime_t utime, stime, cutime, cstime; |
| 563 | cputime_t gtime; | 572 | cputime_t gtime; |
| 564 | cputime_t cgtime; | 573 | cputime_t cgtime; |
| 565 | unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw; | 574 | unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw; |
| @@ -568,6 +577,14 @@ struct signal_struct { | |||
| 568 | struct task_io_accounting ioac; | 577 | struct task_io_accounting ioac; |
| 569 | 578 | ||
| 570 | /* | 579 | /* |
| 580 | * Cumulative ns of schedule CPU time fo dead threads in the | ||
| 581 | * group, not including a zombie group leader, (This only differs | ||
| 582 | * from jiffies_to_ns(utime + stime) if sched_clock uses something | ||
| 583 | * other than jiffies.) | ||
| 584 | */ | ||
| 585 | unsigned long long sum_sched_runtime; | ||
| 586 | |||
| 587 | /* | ||
| 571 | * We don't bother to synchronize most readers of this at all, | 588 | * We don't bother to synchronize most readers of this at all, |
| 572 | * because there is no reader checking a limit that actually needs | 589 | * because there is no reader checking a limit that actually needs |
| 573 | * to get both rlim_cur and rlim_max atomically, and either one | 590 | * to get both rlim_cur and rlim_max atomically, and either one |
| @@ -2183,27 +2200,14 @@ static inline int spin_needbreak(spinlock_t *lock) | |||
| 2183 | /* | 2200 | /* |
| 2184 | * Thread group CPU time accounting. | 2201 | * Thread group CPU time accounting. |
| 2185 | */ | 2202 | */ |
| 2186 | 2203 | void thread_group_cputime(struct task_struct *tsk, struct task_cputime *times); | |
| 2187 | static inline | 2204 | void thread_group_cputimer(struct task_struct *tsk, struct task_cputime *times); |
| 2188 | void thread_group_cputime(struct task_struct *tsk, struct task_cputime *times) | ||
| 2189 | { | ||
| 2190 | struct task_cputime *totals = &tsk->signal->cputime.totals; | ||
| 2191 | unsigned long flags; | ||
| 2192 | |||
| 2193 | spin_lock_irqsave(&totals->lock, flags); | ||
| 2194 | *times = *totals; | ||
| 2195 | spin_unlock_irqrestore(&totals->lock, flags); | ||
| 2196 | } | ||
| 2197 | 2205 | ||
| 2198 | static inline void thread_group_cputime_init(struct signal_struct *sig) | 2206 | static inline void thread_group_cputime_init(struct signal_struct *sig) |
| 2199 | { | 2207 | { |
| 2200 | sig->cputime.totals = (struct task_cputime){ | 2208 | sig->cputimer.cputime = INIT_CPUTIME; |
| 2201 | .utime = cputime_zero, | 2209 | spin_lock_init(&sig->cputimer.lock); |
| 2202 | .stime = cputime_zero, | 2210 | sig->cputimer.running = 0; |
| 2203 | .sum_exec_runtime = 0, | ||
| 2204 | }; | ||
| 2205 | |||
| 2206 | spin_lock_init(&sig->cputime.totals.lock); | ||
| 2207 | } | 2211 | } |
| 2208 | 2212 | ||
| 2209 | static inline void thread_group_cputime_free(struct signal_struct *sig) | 2213 | static inline void thread_group_cputime_free(struct signal_struct *sig) |
| @@ -2287,9 +2291,13 @@ extern long sched_group_rt_runtime(struct task_group *tg); | |||
| 2287 | extern int sched_group_set_rt_period(struct task_group *tg, | 2291 | extern int sched_group_set_rt_period(struct task_group *tg, |
| 2288 | long rt_period_us); | 2292 | long rt_period_us); |
| 2289 | extern long sched_group_rt_period(struct task_group *tg); | 2293 | extern long sched_group_rt_period(struct task_group *tg); |
| 2294 | extern int sched_rt_can_attach(struct task_group *tg, struct task_struct *tsk); | ||
| 2290 | #endif | 2295 | #endif |
| 2291 | #endif | 2296 | #endif |
| 2292 | 2297 | ||
| 2298 | extern int task_can_switch_user(struct user_struct *up, | ||
| 2299 | struct task_struct *tsk); | ||
| 2300 | |||
| 2293 | #ifdef CONFIG_TASK_XACCT | 2301 | #ifdef CONFIG_TASK_XACCT |
| 2294 | static inline void add_rchar(struct task_struct *tsk, ssize_t amt) | 2302 | static inline void add_rchar(struct task_struct *tsk, ssize_t amt) |
| 2295 | { | 2303 | { |
diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h index 40ea5058c2ec..f616f31576d7 100644 --- a/include/linux/seq_file.h +++ b/include/linux/seq_file.h | |||
| @@ -19,6 +19,7 @@ struct seq_file { | |||
| 19 | size_t from; | 19 | size_t from; |
| 20 | size_t count; | 20 | size_t count; |
| 21 | loff_t index; | 21 | loff_t index; |
| 22 | loff_t read_pos; | ||
| 22 | u64 version; | 23 | u64 version; |
| 23 | struct mutex lock; | 24 | struct mutex lock; |
| 24 | const struct seq_operations *op; | 25 | const struct seq_operations *op; |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 90bbbf0b1161..df9245c7bd3b 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
| @@ -296,6 +296,7 @@ struct uart_port { | |||
| 296 | #define UPF_HARDPPS_CD ((__force upf_t) (1 << 11)) | 296 | #define UPF_HARDPPS_CD ((__force upf_t) (1 << 11)) |
| 297 | #define UPF_LOW_LATENCY ((__force upf_t) (1 << 13)) | 297 | #define UPF_LOW_LATENCY ((__force upf_t) (1 << 13)) |
| 298 | #define UPF_BUGGY_UART ((__force upf_t) (1 << 14)) | 298 | #define UPF_BUGGY_UART ((__force upf_t) (1 << 14)) |
| 299 | #define UPF_NO_TXEN_TEST ((__force upf_t) (1 << 15)) | ||
| 299 | #define UPF_MAGIC_MULTIPLIER ((__force upf_t) (1 << 16)) | 300 | #define UPF_MAGIC_MULTIPLIER ((__force upf_t) (1 << 16)) |
| 300 | #define UPF_CONS_FLOW ((__force upf_t) (1 << 23)) | 301 | #define UPF_CONS_FLOW ((__force upf_t) (1 << 23)) |
| 301 | #define UPF_SHARE_IRQ ((__force upf_t) (1 << 24)) | 302 | #define UPF_SHARE_IRQ ((__force upf_t) (1 << 24)) |
diff --git a/include/linux/serio.h b/include/linux/serio.h index 1bcb357a01a1..e0417e4d3f15 100644 --- a/include/linux/serio.h +++ b/include/linux/serio.h | |||
| @@ -212,7 +212,7 @@ static inline void serio_unpin_driver(struct serio *serio) | |||
| 212 | #define SERIO_FUJITSU 0x35 | 212 | #define SERIO_FUJITSU 0x35 |
| 213 | #define SERIO_ZHENHUA 0x36 | 213 | #define SERIO_ZHENHUA 0x36 |
| 214 | #define SERIO_INEXIO 0x37 | 214 | #define SERIO_INEXIO 0x37 |
| 215 | #define SERIO_TOUCHIT213 0x37 | 215 | #define SERIO_TOUCHIT213 0x38 |
| 216 | #define SERIO_W8001 0x39 | 216 | #define SERIO_W8001 0x39 |
| 217 | 217 | ||
| 218 | #endif | 218 | #endif |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index cf2cb50f77d1..9dcf956ad18a 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -416,15 +416,6 @@ extern void skb_over_panic(struct sk_buff *skb, int len, | |||
| 416 | void *here); | 416 | void *here); |
| 417 | extern void skb_under_panic(struct sk_buff *skb, int len, | 417 | extern void skb_under_panic(struct sk_buff *skb, int len, |
| 418 | void *here); | 418 | void *here); |
| 419 | extern void skb_truesize_bug(struct sk_buff *skb); | ||
| 420 | |||
| 421 | static inline void skb_truesize_check(struct sk_buff *skb) | ||
| 422 | { | ||
| 423 | int len = sizeof(struct sk_buff) + skb->len; | ||
| 424 | |||
| 425 | if (unlikely((int)skb->truesize < len)) | ||
| 426 | skb_truesize_bug(skb); | ||
| 427 | } | ||
| 428 | 419 | ||
| 429 | extern int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb, | 420 | extern int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb, |
| 430 | int getfrag(void *from, char *to, int offset, | 421 | int getfrag(void *from, char *to, int offset, |
diff --git a/include/linux/slab.h b/include/linux/slab.h index f96d13c281e8..24c5602bee99 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
| @@ -127,6 +127,7 @@ int kmem_ptr_validate(struct kmem_cache *cachep, const void *ptr); | |||
| 127 | void * __must_check __krealloc(const void *, size_t, gfp_t); | 127 | void * __must_check __krealloc(const void *, size_t, gfp_t); |
| 128 | void * __must_check krealloc(const void *, size_t, gfp_t); | 128 | void * __must_check krealloc(const void *, size_t, gfp_t); |
| 129 | void kfree(const void *); | 129 | void kfree(const void *); |
| 130 | void kzfree(const void *); | ||
| 130 | size_t ksize(const void *); | 131 | size_t ksize(const void *); |
| 131 | 132 | ||
| 132 | /* | 133 | /* |
diff --git a/include/linux/soundcard.h b/include/linux/soundcard.h index 523d069c862c..1904afedb82f 100644 --- a/include/linux/soundcard.h +++ b/include/linux/soundcard.h | |||
| @@ -1045,50 +1045,36 @@ typedef struct mixer_vol_table { | |||
| 1045 | */ | 1045 | */ |
| 1046 | #define LOCL_STARTAUDIO 1 | 1046 | #define LOCL_STARTAUDIO 1 |
| 1047 | 1047 | ||
| 1048 | #if (!defined(__KERNEL__) && !defined(KERNEL) && !defined(INKERNEL) && !defined(_KERNEL)) || defined(USE_SEQ_MACROS) | 1048 | #if !defined(__KERNEL__) || defined(USE_SEQ_MACROS) |
| 1049 | /* | 1049 | /* |
| 1050 | * Some convenience macros to simplify programming of the | 1050 | * Some convenience macros to simplify programming of the |
| 1051 | * /dev/sequencer interface | 1051 | * /dev/sequencer interface |
| 1052 | * | 1052 | * |
| 1053 | * These macros define the API which should be used when possible. | 1053 | * This is a legacy interface for applications written against |
| 1054 | * the OSSlib-3.8 style interface. It is no longer possible | ||
| 1055 | * to actually link against OSSlib with this header, but we | ||
| 1056 | * still provide these macros for programs using them. | ||
| 1057 | * | ||
| 1058 | * If you want to use OSSlib, it is recommended that you get | ||
| 1059 | * the GPL version of OSS-4.x and build against that version | ||
| 1060 | * of the header. | ||
| 1061 | * | ||
| 1062 | * We redefine the extern keyword so that make headers_check | ||
| 1063 | * does not complain about SEQ_USE_EXTBUF. | ||
| 1054 | */ | 1064 | */ |
| 1055 | #define SEQ_DECLAREBUF() SEQ_USE_EXTBUF() | 1065 | #define SEQ_DECLAREBUF() SEQ_USE_EXTBUF() |
| 1056 | 1066 | ||
| 1057 | void seqbuf_dump(void); /* This function must be provided by programs */ | 1067 | void seqbuf_dump(void); /* This function must be provided by programs */ |
| 1058 | 1068 | ||
| 1059 | extern int OSS_init(int seqfd, int buflen); | ||
| 1060 | extern void OSS_seqbuf_dump(int fd, unsigned char *buf, int buflen); | ||
| 1061 | extern void OSS_seq_advbuf(int len, int fd, unsigned char *buf, int buflen); | ||
| 1062 | extern void OSS_seq_needbuf(int len, int fd, unsigned char *buf, int buflen); | ||
| 1063 | extern void OSS_patch_caching(int dev, int chn, int patch, | ||
| 1064 | int fd, unsigned char *buf, int buflen); | ||
| 1065 | extern void OSS_drum_caching(int dev, int chn, int patch, | ||
| 1066 | int fd, unsigned char *buf, int buflen); | ||
| 1067 | extern void OSS_write_patch(int fd, unsigned char *buf, int len); | ||
| 1068 | extern int OSS_write_patch2(int fd, unsigned char *buf, int len); | ||
| 1069 | |||
| 1070 | #define SEQ_PM_DEFINES int __foo_bar___ | 1069 | #define SEQ_PM_DEFINES int __foo_bar___ |
| 1071 | #ifdef OSSLIB | 1070 | |
| 1072 | # define SEQ_USE_EXTBUF() \ | 1071 | #define SEQ_LOAD_GMINSTR(dev, instr) |
| 1073 | extern unsigned char *_seqbuf; \ | 1072 | #define SEQ_LOAD_GMDRUM(dev, drum) |
| 1074 | extern int _seqbuflen;extern int _seqbufptr | 1073 | |
| 1075 | # define SEQ_DEFINEBUF(len) SEQ_USE_EXTBUF();static int _requested_seqbuflen=len | 1074 | #define _SEQ_EXTERN extern |
| 1076 | # define _SEQ_ADVBUF(len) OSS_seq_advbuf(len, seqfd, _seqbuf, _seqbuflen) | 1075 | #define SEQ_USE_EXTBUF() \ |
| 1077 | # define _SEQ_NEEDBUF(len) OSS_seq_needbuf(len, seqfd, _seqbuf, _seqbuflen) | 1076 | _SEQ_EXTERN unsigned char _seqbuf[]; \ |
| 1078 | # define SEQ_DUMPBUF() OSS_seqbuf_dump(seqfd, _seqbuf, _seqbuflen) | 1077 | _SEQ_EXTERN int _seqbuflen; _SEQ_EXTERN int _seqbufptr |
| 1079 | |||
| 1080 | # define SEQ_LOAD_GMINSTR(dev, instr) \ | ||
| 1081 | OSS_patch_caching(dev, -1, instr, seqfd, _seqbuf, _seqbuflen) | ||
| 1082 | # define SEQ_LOAD_GMDRUM(dev, drum) \ | ||
| 1083 | OSS_drum_caching(dev, -1, drum, seqfd, _seqbuf, _seqbuflen) | ||
| 1084 | #else /* !OSSLIB */ | ||
| 1085 | |||
| 1086 | # define SEQ_LOAD_GMINSTR(dev, instr) | ||
| 1087 | # define SEQ_LOAD_GMDRUM(dev, drum) | ||
| 1088 | |||
| 1089 | # define SEQ_USE_EXTBUF() \ | ||
| 1090 | extern unsigned char _seqbuf[]; \ | ||
| 1091 | extern int _seqbuflen;extern int _seqbufptr | ||
| 1092 | 1078 | ||
| 1093 | #ifndef USE_SIMPLE_MACROS | 1079 | #ifndef USE_SIMPLE_MACROS |
| 1094 | /* Sample seqbuf_dump() implementation: | 1080 | /* Sample seqbuf_dump() implementation: |
| @@ -1131,7 +1117,6 @@ extern int OSS_write_patch2(int fd, unsigned char *buf, int len); | |||
| 1131 | */ | 1117 | */ |
| 1132 | #define _SEQ_NEEDBUF(len) /* empty */ | 1118 | #define _SEQ_NEEDBUF(len) /* empty */ |
| 1133 | #endif | 1119 | #endif |
| 1134 | #endif /* !OSSLIB */ | ||
| 1135 | 1120 | ||
| 1136 | #define SEQ_VOLUME_MODE(dev, mode) {_SEQ_NEEDBUF(8);\ | 1121 | #define SEQ_VOLUME_MODE(dev, mode) {_SEQ_NEEDBUF(8);\ |
| 1137 | _seqbuf[_seqbufptr] = SEQ_EXTENDED;\ | 1122 | _seqbuf[_seqbufptr] = SEQ_EXTENDED;\ |
| @@ -1215,14 +1200,8 @@ extern int OSS_write_patch2(int fd, unsigned char *buf, int len); | |||
| 1215 | _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0) | 1200 | _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0) |
| 1216 | 1201 | ||
| 1217 | #define SEQ_SET_PATCH SEQ_PGM_CHANGE | 1202 | #define SEQ_SET_PATCH SEQ_PGM_CHANGE |
| 1218 | #ifdef OSSLIB | 1203 | #define SEQ_PGM_CHANGE(dev, chn, patch) \ |
| 1219 | # define SEQ_PGM_CHANGE(dev, chn, patch) \ | ||
| 1220 | {OSS_patch_caching(dev, chn, patch, seqfd, _seqbuf, _seqbuflen); \ | ||
| 1221 | _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0);} | ||
| 1222 | #else | ||
| 1223 | # define SEQ_PGM_CHANGE(dev, chn, patch) \ | ||
| 1224 | _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0) | 1204 | _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0) |
| 1225 | #endif | ||
| 1226 | 1205 | ||
| 1227 | #define SEQ_CONTROL(dev, chn, controller, value) \ | 1206 | #define SEQ_CONTROL(dev, chn, controller, value) \ |
| 1228 | _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value) | 1207 | _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value) |
| @@ -1300,19 +1279,12 @@ extern int OSS_write_patch2(int fd, unsigned char *buf, int len); | |||
| 1300 | /* | 1279 | /* |
| 1301 | * Patch loading. | 1280 | * Patch loading. |
| 1302 | */ | 1281 | */ |
| 1303 | #ifdef OSSLIB | 1282 | #define SEQ_WRPATCH(patchx, len) \ |
| 1304 | # define SEQ_WRPATCH(patchx, len) \ | ||
| 1305 | OSS_write_patch(seqfd, (char*)(patchx), len) | ||
| 1306 | # define SEQ_WRPATCH2(patchx, len) \ | ||
| 1307 | OSS_write_patch2(seqfd, (char*)(patchx), len) | ||
| 1308 | #else | ||
| 1309 | # define SEQ_WRPATCH(patchx, len) \ | ||
| 1310 | {if (_seqbufptr) SEQ_DUMPBUF();\ | 1283 | {if (_seqbufptr) SEQ_DUMPBUF();\ |
| 1311 | if (write(seqfd, (char*)(patchx), len)==-1) \ | 1284 | if (write(seqfd, (char*)(patchx), len)==-1) \ |
| 1312 | perror("Write patch: /dev/sequencer");} | 1285 | perror("Write patch: /dev/sequencer");} |
| 1313 | # define SEQ_WRPATCH2(patchx, len) \ | 1286 | #define SEQ_WRPATCH2(patchx, len) \ |
| 1314 | (SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len)) | 1287 | (SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len)) |
| 1315 | #endif | ||
| 1316 | 1288 | ||
| 1317 | #endif | 1289 | #endif |
| 1318 | #endif | 1290 | #endif |
diff --git a/include/linux/spi/spi_bitbang.h b/include/linux/spi/spi_bitbang.h index bf8de281b4ed..eed4254bd503 100644 --- a/include/linux/spi/spi_bitbang.h +++ b/include/linux/spi/spi_bitbang.h | |||
| @@ -83,6 +83,13 @@ extern int spi_bitbang_stop(struct spi_bitbang *spi); | |||
| 83 | * int getmiso(struct spi_device *); | 83 | * int getmiso(struct spi_device *); |
| 84 | * void spidelay(unsigned); | 84 | * void spidelay(unsigned); |
| 85 | * | 85 | * |
| 86 | * setsck()'s is_on parameter is a zero/nonzero boolean. | ||
| 87 | * | ||
| 88 | * setmosi()'s is_on parameter is a zero/nonzero boolean. | ||
| 89 | * | ||
| 90 | * getmiso() is required to return 0 or 1 only. Any other value is invalid | ||
| 91 | * and will result in improper operation. | ||
| 92 | * | ||
| 86 | * A non-inlined routine would call bitbang_txrx_*() routines. The | 93 | * A non-inlined routine would call bitbang_txrx_*() routines. The |
| 87 | * main loop could easily compile down to a handful of instructions, | 94 | * main loop could easily compile down to a handful of instructions, |
| 88 | * especially if the delay is a NOP (to run at peak speed). | 95 | * especially if the delay is a NOP (to run at peak speed). |
diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h index e0c0fccced46..a0c66a2e00ad 100644 --- a/include/linux/spinlock.h +++ b/include/linux/spinlock.h | |||
| @@ -124,7 +124,12 @@ do { \ | |||
| 124 | #ifdef CONFIG_GENERIC_LOCKBREAK | 124 | #ifdef CONFIG_GENERIC_LOCKBREAK |
| 125 | #define spin_is_contended(lock) ((lock)->break_lock) | 125 | #define spin_is_contended(lock) ((lock)->break_lock) |
| 126 | #else | 126 | #else |
| 127 | |||
| 128 | #ifdef __raw_spin_is_contended | ||
| 127 | #define spin_is_contended(lock) __raw_spin_is_contended(&(lock)->raw_lock) | 129 | #define spin_is_contended(lock) __raw_spin_is_contended(&(lock)->raw_lock) |
| 130 | #else | ||
| 131 | #define spin_is_contended(lock) (((void)(lock), 0)) | ||
| 132 | #endif /*__raw_spin_is_contended*/ | ||
| 128 | #endif | 133 | #endif |
| 129 | 134 | ||
| 130 | /** | 135 | /** |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 0eda02ff2414..f9f900cfd066 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -95,13 +95,13 @@ struct old_linux_dirent; | |||
| 95 | #define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__) | 95 | #define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__) |
| 96 | #define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__) | 96 | #define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__) |
| 97 | 97 | ||
| 98 | #define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void) | 98 | #define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void) |
| 99 | #define SYSCALL_DEFINE1(...) SYSCALL_DEFINEx(1, __VA_ARGS__) | 99 | #define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__) |
| 100 | #define SYSCALL_DEFINE2(...) SYSCALL_DEFINEx(2, __VA_ARGS__) | 100 | #define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__) |
| 101 | #define SYSCALL_DEFINE3(...) SYSCALL_DEFINEx(3, __VA_ARGS__) | 101 | #define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__) |
| 102 | #define SYSCALL_DEFINE4(...) SYSCALL_DEFINEx(4, __VA_ARGS__) | 102 | #define SYSCALL_DEFINE4(name, ...) SYSCALL_DEFINEx(4, _##name, __VA_ARGS__) |
| 103 | #define SYSCALL_DEFINE5(...) SYSCALL_DEFINEx(5, __VA_ARGS__) | 103 | #define SYSCALL_DEFINE5(name, ...) SYSCALL_DEFINEx(5, _##name, __VA_ARGS__) |
| 104 | #define SYSCALL_DEFINE6(...) SYSCALL_DEFINEx(6, __VA_ARGS__) | 104 | #define SYSCALL_DEFINE6(name, ...) SYSCALL_DEFINEx(6, _##name, __VA_ARGS__) |
| 105 | 105 | ||
| 106 | #ifdef CONFIG_PPC64 | 106 | #ifdef CONFIG_PPC64 |
| 107 | #define SYSCALL_ALIAS(alias, name) \ | 107 | #define SYSCALL_ALIAS(alias, name) \ |
| @@ -121,21 +121,21 @@ struct old_linux_dirent; | |||
| 121 | 121 | ||
| 122 | #define SYSCALL_DEFINE(name) static inline long SYSC_##name | 122 | #define SYSCALL_DEFINE(name) static inline long SYSC_##name |
| 123 | #define SYSCALL_DEFINEx(x, name, ...) \ | 123 | #define SYSCALL_DEFINEx(x, name, ...) \ |
| 124 | asmlinkage long sys_##name(__SC_DECL##x(__VA_ARGS__)); \ | 124 | asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__)); \ |
| 125 | static inline long SYSC_##name(__SC_DECL##x(__VA_ARGS__)); \ | 125 | static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__)); \ |
| 126 | asmlinkage long SyS_##name(__SC_LONG##x(__VA_ARGS__)) \ | 126 | asmlinkage long SyS##name(__SC_LONG##x(__VA_ARGS__)) \ |
| 127 | { \ | 127 | { \ |
| 128 | __SC_TEST##x(__VA_ARGS__); \ | 128 | __SC_TEST##x(__VA_ARGS__); \ |
| 129 | return (long) SYSC_##name(__SC_CAST##x(__VA_ARGS__)); \ | 129 | return (long) SYSC##name(__SC_CAST##x(__VA_ARGS__)); \ |
| 130 | } \ | 130 | } \ |
| 131 | SYSCALL_ALIAS(sys_##name, SyS_##name); \ | 131 | SYSCALL_ALIAS(sys##name, SyS##name); \ |
| 132 | static inline long SYSC_##name(__SC_DECL##x(__VA_ARGS__)) | 132 | static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__)) |
| 133 | 133 | ||
| 134 | #else /* CONFIG_HAVE_SYSCALL_WRAPPERS */ | 134 | #else /* CONFIG_HAVE_SYSCALL_WRAPPERS */ |
| 135 | 135 | ||
| 136 | #define SYSCALL_DEFINE(name) asmlinkage long sys_##name | 136 | #define SYSCALL_DEFINE(name) asmlinkage long sys_##name |
| 137 | #define SYSCALL_DEFINEx(x, name, ...) \ | 137 | #define SYSCALL_DEFINEx(x, name, ...) \ |
| 138 | asmlinkage long sys_##name(__SC_DECL##x(__VA_ARGS__)) | 138 | asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__)) |
| 139 | 139 | ||
| 140 | #endif /* CONFIG_HAVE_SYSCALL_WRAPPERS */ | 140 | #endif /* CONFIG_HAVE_SYSCALL_WRAPPERS */ |
| 141 | 141 | ||
diff --git a/include/linux/timerfd.h b/include/linux/timerfd.h index 86cb0501d3e2..2d0792983f8c 100644 --- a/include/linux/timerfd.h +++ b/include/linux/timerfd.h | |||
| @@ -11,13 +11,21 @@ | |||
| 11 | /* For O_CLOEXEC and O_NONBLOCK */ | 11 | /* For O_CLOEXEC and O_NONBLOCK */ |
| 12 | #include <linux/fcntl.h> | 12 | #include <linux/fcntl.h> |
| 13 | 13 | ||
| 14 | /* Flags for timerfd_settime. */ | 14 | /* |
| 15 | * CAREFUL: Check include/asm-generic/fcntl.h when defining | ||
| 16 | * new flags, since they might collide with O_* ones. We want | ||
| 17 | * to re-use O_* flags that couldn't possibly have a meaning | ||
| 18 | * from eventfd, in order to leave a free define-space for | ||
| 19 | * shared O_* flags. | ||
| 20 | */ | ||
| 15 | #define TFD_TIMER_ABSTIME (1 << 0) | 21 | #define TFD_TIMER_ABSTIME (1 << 0) |
| 16 | |||
| 17 | /* Flags for timerfd_create. */ | ||
| 18 | #define TFD_CLOEXEC O_CLOEXEC | 22 | #define TFD_CLOEXEC O_CLOEXEC |
| 19 | #define TFD_NONBLOCK O_NONBLOCK | 23 | #define TFD_NONBLOCK O_NONBLOCK |
| 20 | 24 | ||
| 25 | #define TFD_SHARED_FCNTL_FLAGS (TFD_CLOEXEC | TFD_NONBLOCK) | ||
| 26 | /* Flags for timerfd_create. */ | ||
| 27 | #define TFD_CREATE_FLAGS TFD_SHARED_FCNTL_FLAGS | ||
| 28 | /* Flags for timerfd_settime. */ | ||
| 29 | #define TFD_SETTIME_FLAGS TFD_TIMER_ABSTIME | ||
| 21 | 30 | ||
| 22 | #endif /* _LINUX_TIMERFD_H */ | 31 | #endif /* _LINUX_TIMERFD_H */ |
| 23 | |||
diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h index 315bcd375224..cc4f45361dbb 100644 --- a/include/linux/user_namespace.h +++ b/include/linux/user_namespace.h | |||
| @@ -13,6 +13,7 @@ struct user_namespace { | |||
| 13 | struct kref kref; | 13 | struct kref kref; |
| 14 | struct hlist_head uidhash_table[UIDHASH_SZ]; | 14 | struct hlist_head uidhash_table[UIDHASH_SZ]; |
| 15 | struct user_struct *creator; | 15 | struct user_struct *creator; |
| 16 | struct work_struct destroyer; | ||
| 16 | }; | 17 | }; |
| 17 | 18 | ||
| 18 | extern struct user_namespace init_user_ns; | 19 | extern struct user_namespace init_user_ns; |
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index 506e7620a986..9c0890c7a06a 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h | |||
| @@ -84,6 +84,10 @@ extern struct vm_struct *get_vm_area_caller(unsigned long size, | |||
| 84 | unsigned long flags, void *caller); | 84 | unsigned long flags, void *caller); |
| 85 | extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags, | 85 | extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags, |
| 86 | unsigned long start, unsigned long end); | 86 | unsigned long start, unsigned long end); |
| 87 | extern struct vm_struct *__get_vm_area_caller(unsigned long size, | ||
| 88 | unsigned long flags, | ||
| 89 | unsigned long start, unsigned long end, | ||
| 90 | void *caller); | ||
| 87 | extern struct vm_struct *get_vm_area_node(unsigned long size, | 91 | extern struct vm_struct *get_vm_area_node(unsigned long size, |
| 88 | unsigned long flags, int node, | 92 | unsigned long flags, int node, |
| 89 | gfp_t gfp_mask); | 93 | gfp_t gfp_mask); |
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h index 6fc13d905c5f..ded434b032a4 100644 --- a/include/net/net_namespace.h +++ b/include/net/net_namespace.h | |||
| @@ -109,11 +109,6 @@ extern struct list_head net_namespace_list; | |||
| 109 | #ifdef CONFIG_NET_NS | 109 | #ifdef CONFIG_NET_NS |
| 110 | extern void __put_net(struct net *net); | 110 | extern void __put_net(struct net *net); |
| 111 | 111 | ||
| 112 | static inline int net_alive(struct net *net) | ||
| 113 | { | ||
| 114 | return net && atomic_read(&net->count); | ||
| 115 | } | ||
| 116 | |||
| 117 | static inline struct net *get_net(struct net *net) | 112 | static inline struct net *get_net(struct net *net) |
| 118 | { | 113 | { |
| 119 | atomic_inc(&net->count); | 114 | atomic_inc(&net->count); |
| @@ -145,11 +140,6 @@ int net_eq(const struct net *net1, const struct net *net2) | |||
| 145 | } | 140 | } |
| 146 | #else | 141 | #else |
| 147 | 142 | ||
| 148 | static inline int net_alive(struct net *net) | ||
| 149 | { | ||
| 150 | return 1; | ||
| 151 | } | ||
| 152 | |||
| 153 | static inline struct net *get_net(struct net *net) | 143 | static inline struct net *get_net(struct net *net) |
| 154 | { | 144 | { |
| 155 | return net; | 145 | return net; |
| @@ -234,6 +224,23 @@ struct pernet_operations { | |||
| 234 | void (*exit)(struct net *net); | 224 | void (*exit)(struct net *net); |
| 235 | }; | 225 | }; |
| 236 | 226 | ||
| 227 | /* | ||
| 228 | * Use these carefully. If you implement a network device and it | ||
| 229 | * needs per network namespace operations use device pernet operations, | ||
| 230 | * otherwise use pernet subsys operations. | ||
| 231 | * | ||
| 232 | * This is critically important. Most of the network code cleanup | ||
| 233 | * runs with the assumption that dev_remove_pack has been called so no | ||
| 234 | * new packets will arrive during and after the cleanup functions have | ||
| 235 | * been called. dev_remove_pack is not per namespace so instead the | ||
| 236 | * guarantee of no more packets arriving in a network namespace is | ||
| 237 | * provided by ensuring that all network devices and all sockets have | ||
| 238 | * left the network namespace before the cleanup methods are called. | ||
| 239 | * | ||
| 240 | * For the longest time the ipv4 icmp code was registered as a pernet | ||
| 241 | * device which caused kernel oops, and panics during network | ||
| 242 | * namespace cleanup. So please don't get this wrong. | ||
| 243 | */ | ||
| 237 | extern int register_pernet_subsys(struct pernet_operations *); | 244 | extern int register_pernet_subsys(struct pernet_operations *); |
| 238 | extern void unregister_pernet_subsys(struct pernet_operations *); | 245 | extern void unregister_pernet_subsys(struct pernet_operations *); |
| 239 | extern int register_pernet_gen_subsys(int *id, struct pernet_operations *); | 246 | extern int register_pernet_gen_subsys(int *id, struct pernet_operations *); |
diff --git a/include/net/netfilter/nf_conntrack_core.h b/include/net/netfilter/nf_conntrack_core.h index e78afe7f28e3..c25068e38516 100644 --- a/include/net/netfilter/nf_conntrack_core.h +++ b/include/net/netfilter/nf_conntrack_core.h | |||
| @@ -59,7 +59,7 @@ static inline int nf_conntrack_confirm(struct sk_buff *skb) | |||
| 59 | struct nf_conn *ct = (struct nf_conn *)skb->nfct; | 59 | struct nf_conn *ct = (struct nf_conn *)skb->nfct; |
| 60 | int ret = NF_ACCEPT; | 60 | int ret = NF_ACCEPT; |
| 61 | 61 | ||
| 62 | if (ct) { | 62 | if (ct && ct != &nf_conntrack_untracked) { |
| 63 | if (!nf_ct_is_confirmed(ct) && !nf_ct_is_dying(ct)) | 63 | if (!nf_ct_is_confirmed(ct) && !nf_ct_is_dying(ct)) |
| 64 | ret = __nf_conntrack_confirm(skb); | 64 | ret = __nf_conntrack_confirm(skb); |
| 65 | nf_ct_deliver_cached_events(ct); | 65 | nf_ct_deliver_cached_events(ct); |
diff --git a/include/net/sock.h b/include/net/sock.h index 5a3a151bd730..eefeeaf7fc46 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
| @@ -860,7 +860,6 @@ static inline void sk_mem_uncharge(struct sock *sk, int size) | |||
| 860 | 860 | ||
| 861 | static inline void sk_wmem_free_skb(struct sock *sk, struct sk_buff *skb) | 861 | static inline void sk_wmem_free_skb(struct sock *sk, struct sk_buff *skb) |
| 862 | { | 862 | { |
| 863 | skb_truesize_check(skb); | ||
| 864 | sock_set_flag(sk, SOCK_QUEUE_SHRUNK); | 863 | sock_set_flag(sk, SOCK_QUEUE_SHRUNK); |
| 865 | sk->sk_wmem_queued -= skb->truesize; | 864 | sk->sk_wmem_queued -= skb->truesize; |
| 866 | sk_mem_uncharge(sk, skb->truesize); | 865 | sk_mem_uncharge(sk, skb->truesize); |
| @@ -1308,7 +1307,7 @@ static inline int sock_writeable(const struct sock *sk) | |||
| 1308 | 1307 | ||
| 1309 | static inline gfp_t gfp_any(void) | 1308 | static inline gfp_t gfp_any(void) |
| 1310 | { | 1309 | { |
| 1311 | return in_atomic() ? GFP_ATOMIC : GFP_KERNEL; | 1310 | return in_softirq() ? GFP_ATOMIC : GFP_KERNEL; |
| 1312 | } | 1311 | } |
| 1313 | 1312 | ||
| 1314 | static inline long sock_rcvtimeo(const struct sock *sk, int noblock) | 1313 | static inline long sock_rcvtimeo(const struct sock *sk, int noblock) |
diff --git a/init/Kconfig b/init/Kconfig index f068071fcc5d..6a5c5fed66c9 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
| @@ -675,6 +675,9 @@ config CC_OPTIMIZE_FOR_SIZE | |||
| 675 | config SYSCTL | 675 | config SYSCTL |
| 676 | bool | 676 | bool |
| 677 | 677 | ||
| 678 | config ANON_INODES | ||
| 679 | bool | ||
| 680 | |||
| 678 | menuconfig EMBEDDED | 681 | menuconfig EMBEDDED |
| 679 | bool "Configure standard kernel features (for small systems)" | 682 | bool "Configure standard kernel features (for small systems)" |
| 680 | help | 683 | help |
| @@ -780,18 +783,6 @@ config PCSPKR_PLATFORM | |||
| 780 | This option allows to disable the internal PC-Speaker | 783 | This option allows to disable the internal PC-Speaker |
| 781 | support, saving some memory. | 784 | support, saving some memory. |
| 782 | 785 | ||
| 783 | config COMPAT_BRK | ||
| 784 | bool "Disable heap randomization" | ||
| 785 | default y | ||
| 786 | help | ||
| 787 | Randomizing heap placement makes heap exploits harder, but it | ||
| 788 | also breaks ancient binaries (including anything libc5 based). | ||
| 789 | This option changes the bootup default to heap randomization | ||
| 790 | disabled, and can be overriden runtime by setting | ||
| 791 | /proc/sys/kernel/randomize_va_space to 2. | ||
| 792 | |||
| 793 | On non-ancient distros (post-2000 ones) N is usually a safe choice. | ||
| 794 | |||
| 795 | config BASE_FULL | 786 | config BASE_FULL |
| 796 | default y | 787 | default y |
| 797 | bool "Enable full-sized data structures for core" if EMBEDDED | 788 | bool "Enable full-sized data structures for core" if EMBEDDED |
| @@ -809,9 +800,6 @@ config FUTEX | |||
| 809 | support for "fast userspace mutexes". The resulting kernel may not | 800 | support for "fast userspace mutexes". The resulting kernel may not |
| 810 | run glibc-based applications correctly. | 801 | run glibc-based applications correctly. |
| 811 | 802 | ||
| 812 | config ANON_INODES | ||
| 813 | bool | ||
| 814 | |||
| 815 | config EPOLL | 803 | config EPOLL |
| 816 | bool "Enable eventpoll support" if EMBEDDED | 804 | bool "Enable eventpoll support" if EMBEDDED |
| 817 | default y | 805 | default y |
| @@ -897,6 +885,18 @@ config SLUB_DEBUG | |||
| 897 | SLUB sysfs support. /sys/slab will not exist and there will be | 885 | SLUB sysfs support. /sys/slab will not exist and there will be |
| 898 | no support for cache validation etc. | 886 | no support for cache validation etc. |
| 899 | 887 | ||
| 888 | config COMPAT_BRK | ||
| 889 | bool "Disable heap randomization" | ||
| 890 | default y | ||
| 891 | help | ||
| 892 | Randomizing heap placement makes heap exploits harder, but it | ||
| 893 | also breaks ancient binaries (including anything libc5 based). | ||
| 894 | This option changes the bootup default to heap randomization | ||
| 895 | disabled, and can be overriden runtime by setting | ||
| 896 | /proc/sys/kernel/randomize_va_space to 2. | ||
| 897 | |||
| 898 | On non-ancient distros (post-2000 ones) N is usually a safe choice. | ||
| 899 | |||
| 900 | choice | 900 | choice |
| 901 | prompt "Choose SLAB allocator" | 901 | prompt "Choose SLAB allocator" |
| 902 | default SLUB | 902 | default SLUB |
diff --git a/init/do_mounts.c b/init/do_mounts.c index 708105e163df..8d4ff5afc1d8 100644 --- a/init/do_mounts.c +++ b/init/do_mounts.c | |||
| @@ -370,10 +370,14 @@ void __init prepare_namespace(void) | |||
| 370 | ssleep(root_delay); | 370 | ssleep(root_delay); |
| 371 | } | 371 | } |
| 372 | 372 | ||
| 373 | /* wait for the known devices to complete their probing */ | 373 | /* |
| 374 | while (driver_probe_done() != 0) | 374 | * wait for the known devices to complete their probing |
| 375 | msleep(100); | 375 | * |
| 376 | async_synchronize_full(); | 376 | * Note: this is a potential source of long boot delays. |
| 377 | * For example, it is not atypical to wait 5 seconds here | ||
| 378 | * for the touchpad of a laptop to initialize. | ||
| 379 | */ | ||
| 380 | wait_for_device_probe(); | ||
| 377 | 381 | ||
| 378 | md_run_setup(); | 382 | md_run_setup(); |
| 379 | 383 | ||
| @@ -399,6 +403,7 @@ void __init prepare_namespace(void) | |||
| 399 | while (driver_probe_done() != 0 || | 403 | while (driver_probe_done() != 0 || |
| 400 | (ROOT_DEV = name_to_dev_t(saved_root_name)) == 0) | 404 | (ROOT_DEV = name_to_dev_t(saved_root_name)) == 0) |
| 401 | msleep(100); | 405 | msleep(100); |
| 406 | async_synchronize_full(); | ||
| 402 | } | 407 | } |
| 403 | 408 | ||
| 404 | is_floppy = MAJOR(ROOT_DEV) == FLOPPY_MAJOR; | 409 | is_floppy = MAJOR(ROOT_DEV) == FLOPPY_MAJOR; |
diff --git a/init/do_mounts_md.c b/init/do_mounts_md.c index ff95e3192884..9bdddbcb3d6a 100644 --- a/init/do_mounts_md.c +++ b/init/do_mounts_md.c | |||
| @@ -281,8 +281,9 @@ static void __init autodetect_raid(void) | |||
| 281 | */ | 281 | */ |
| 282 | printk(KERN_INFO "md: Waiting for all devices to be available before autodetect\n"); | 282 | printk(KERN_INFO "md: Waiting for all devices to be available before autodetect\n"); |
| 283 | printk(KERN_INFO "md: If you don't use raid, use raid=noautodetect\n"); | 283 | printk(KERN_INFO "md: If you don't use raid, use raid=noautodetect\n"); |
| 284 | while (driver_probe_done() < 0) | 284 | |
| 285 | msleep(100); | 285 | wait_for_device_probe(); |
| 286 | |||
| 286 | fd = sys_open("/dev/md0", 0, 0); | 287 | fd = sys_open("/dev/md0", 0, 0); |
| 287 | if (fd >= 0) { | 288 | if (fd >= 0) { |
| 288 | sys_ioctl(fd, RAID_AUTORUN, raid_autopart); | 289 | sys_ioctl(fd, RAID_AUTORUN, raid_autopart); |
diff --git a/init/main.c b/init/main.c index 844209453c02..83697e160b3a 100644 --- a/init/main.c +++ b/init/main.c | |||
| @@ -97,7 +97,7 @@ static inline void mark_rodata_ro(void) { } | |||
| 97 | extern void tc_init(void); | 97 | extern void tc_init(void); |
| 98 | #endif | 98 | #endif |
| 99 | 99 | ||
| 100 | enum system_states system_state; | 100 | enum system_states system_state __read_mostly; |
| 101 | EXPORT_SYMBOL(system_state); | 101 | EXPORT_SYMBOL(system_state); |
| 102 | 102 | ||
| 103 | /* | 103 | /* |
| @@ -463,6 +463,7 @@ static noinline void __init_refok rest_init(void) | |||
| 463 | * at least once to get things moving: | 463 | * at least once to get things moving: |
| 464 | */ | 464 | */ |
| 465 | init_idle_bootup_task(current); | 465 | init_idle_bootup_task(current); |
| 466 | rcu_scheduler_starting(); | ||
| 466 | preempt_enable_no_resched(); | 467 | preempt_enable_no_resched(); |
| 467 | schedule(); | 468 | schedule(); |
| 468 | preempt_disable(); | 469 | preempt_disable(); |
| @@ -340,6 +340,7 @@ static int newseg(struct ipc_namespace *ns, struct ipc_params *params) | |||
| 340 | struct file * file; | 340 | struct file * file; |
| 341 | char name[13]; | 341 | char name[13]; |
| 342 | int id; | 342 | int id; |
| 343 | int acctflag = 0; | ||
| 343 | 344 | ||
| 344 | if (size < SHMMIN || size > ns->shm_ctlmax) | 345 | if (size < SHMMIN || size > ns->shm_ctlmax) |
| 345 | return -EINVAL; | 346 | return -EINVAL; |
| @@ -364,11 +365,12 @@ static int newseg(struct ipc_namespace *ns, struct ipc_params *params) | |||
| 364 | 365 | ||
| 365 | sprintf (name, "SYSV%08x", key); | 366 | sprintf (name, "SYSV%08x", key); |
| 366 | if (shmflg & SHM_HUGETLB) { | 367 | if (shmflg & SHM_HUGETLB) { |
| 367 | /* hugetlb_file_setup takes care of mlock user accounting */ | 368 | /* hugetlb_file_setup applies strict accounting */ |
| 368 | file = hugetlb_file_setup(name, size); | 369 | if (shmflg & SHM_NORESERVE) |
| 370 | acctflag = VM_NORESERVE; | ||
| 371 | file = hugetlb_file_setup(name, size, acctflag); | ||
| 369 | shp->mlock_user = current_user(); | 372 | shp->mlock_user = current_user(); |
| 370 | } else { | 373 | } else { |
| 371 | int acctflag = 0; | ||
| 372 | /* | 374 | /* |
| 373 | * Do not allow no accounting for OVERCOMMIT_NEVER, even | 375 | * Do not allow no accounting for OVERCOMMIT_NEVER, even |
| 374 | * if it's asked for. | 376 | * if it's asked for. |
diff --git a/kernel/Makefile b/kernel/Makefile index 170a9213c1b6..e4791b3ba55d 100644 --- a/kernel/Makefile +++ b/kernel/Makefile | |||
| @@ -51,6 +51,7 @@ obj-$(CONFIG_UID16) += uid16.o | |||
| 51 | obj-$(CONFIG_MODULES) += module.o | 51 | obj-$(CONFIG_MODULES) += module.o |
| 52 | obj-$(CONFIG_KALLSYMS) += kallsyms.o | 52 | obj-$(CONFIG_KALLSYMS) += kallsyms.o |
| 53 | obj-$(CONFIG_PM) += power/ | 53 | obj-$(CONFIG_PM) += power/ |
| 54 | obj-$(CONFIG_FREEZER) += power/ | ||
| 54 | obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o | 55 | obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o |
| 55 | obj-$(CONFIG_KEXEC) += kexec.o | 56 | obj-$(CONFIG_KEXEC) += kexec.o |
| 56 | obj-$(CONFIG_BACKTRACE_SELF_TEST) += backtracetest.o | 57 | obj-$(CONFIG_BACKTRACE_SELF_TEST) += backtracetest.o |
diff --git a/kernel/async.c b/kernel/async.c index 67a2be71f517..f565891f2c9b 100644 --- a/kernel/async.c +++ b/kernel/async.c | |||
| @@ -54,6 +54,7 @@ asynchronous and synchronous parts of the kernel. | |||
| 54 | #include <linux/sched.h> | 54 | #include <linux/sched.h> |
| 55 | #include <linux/init.h> | 55 | #include <linux/init.h> |
| 56 | #include <linux/kthread.h> | 56 | #include <linux/kthread.h> |
| 57 | #include <linux/delay.h> | ||
| 57 | #include <asm/atomic.h> | 58 | #include <asm/atomic.h> |
| 58 | 59 | ||
| 59 | static async_cookie_t next_cookie = 1; | 60 | static async_cookie_t next_cookie = 1; |
| @@ -132,8 +133,7 @@ static void run_one_entry(void) | |||
| 132 | entry = list_first_entry(&async_pending, struct async_entry, list); | 133 | entry = list_first_entry(&async_pending, struct async_entry, list); |
| 133 | 134 | ||
| 134 | /* 2) move it to the running queue */ | 135 | /* 2) move it to the running queue */ |
| 135 | list_del(&entry->list); | 136 | list_move_tail(&entry->list, entry->running); |
| 136 | list_add_tail(&entry->list, &async_running); | ||
| 137 | spin_unlock_irqrestore(&async_lock, flags); | 137 | spin_unlock_irqrestore(&async_lock, flags); |
| 138 | 138 | ||
| 139 | /* 3) run it (and print duration)*/ | 139 | /* 3) run it (and print duration)*/ |
| @@ -208,18 +208,44 @@ static async_cookie_t __async_schedule(async_func_ptr *ptr, void *data, struct l | |||
| 208 | return newcookie; | 208 | return newcookie; |
| 209 | } | 209 | } |
| 210 | 210 | ||
| 211 | /** | ||
| 212 | * async_schedule - schedule a function for asynchronous execution | ||
| 213 | * @ptr: function to execute asynchronously | ||
| 214 | * @data: data pointer to pass to the function | ||
| 215 | * | ||
| 216 | * Returns an async_cookie_t that may be used for checkpointing later. | ||
| 217 | * Note: This function may be called from atomic or non-atomic contexts. | ||
| 218 | */ | ||
| 211 | async_cookie_t async_schedule(async_func_ptr *ptr, void *data) | 219 | async_cookie_t async_schedule(async_func_ptr *ptr, void *data) |
| 212 | { | 220 | { |
| 213 | return __async_schedule(ptr, data, &async_pending); | 221 | return __async_schedule(ptr, data, &async_running); |
| 214 | } | 222 | } |
| 215 | EXPORT_SYMBOL_GPL(async_schedule); | 223 | EXPORT_SYMBOL_GPL(async_schedule); |
| 216 | 224 | ||
| 217 | async_cookie_t async_schedule_special(async_func_ptr *ptr, void *data, struct list_head *running) | 225 | /** |
| 226 | * async_schedule_domain - schedule a function for asynchronous execution within a certain domain | ||
| 227 | * @ptr: function to execute asynchronously | ||
| 228 | * @data: data pointer to pass to the function | ||
| 229 | * @running: running list for the domain | ||
| 230 | * | ||
| 231 | * Returns an async_cookie_t that may be used for checkpointing later. | ||
| 232 | * @running may be used in the async_synchronize_*_domain() functions | ||
| 233 | * to wait within a certain synchronization domain rather than globally. | ||
| 234 | * A synchronization domain is specified via the running queue @running to use. | ||
| 235 | * Note: This function may be called from atomic or non-atomic contexts. | ||
| 236 | */ | ||
| 237 | async_cookie_t async_schedule_domain(async_func_ptr *ptr, void *data, | ||
| 238 | struct list_head *running) | ||
| 218 | { | 239 | { |
| 219 | return __async_schedule(ptr, data, running); | 240 | return __async_schedule(ptr, data, running); |
| 220 | } | 241 | } |
| 221 | EXPORT_SYMBOL_GPL(async_schedule_special); | 242 | EXPORT_SYMBOL_GPL(async_schedule_domain); |
| 222 | 243 | ||
| 244 | /** | ||
| 245 | * async_synchronize_full - synchronize all asynchronous function calls | ||
| 246 | * | ||
| 247 | * This function waits until all asynchronous function calls have been done. | ||
| 248 | */ | ||
| 223 | void async_synchronize_full(void) | 249 | void async_synchronize_full(void) |
| 224 | { | 250 | { |
| 225 | do { | 251 | do { |
| @@ -228,13 +254,30 @@ void async_synchronize_full(void) | |||
| 228 | } | 254 | } |
| 229 | EXPORT_SYMBOL_GPL(async_synchronize_full); | 255 | EXPORT_SYMBOL_GPL(async_synchronize_full); |
| 230 | 256 | ||
| 231 | void async_synchronize_full_special(struct list_head *list) | 257 | /** |
| 258 | * async_synchronize_full_domain - synchronize all asynchronous function within a certain domain | ||
| 259 | * @list: running list to synchronize on | ||
| 260 | * | ||
| 261 | * This function waits until all asynchronous function calls for the | ||
| 262 | * synchronization domain specified by the running list @list have been done. | ||
| 263 | */ | ||
| 264 | void async_synchronize_full_domain(struct list_head *list) | ||
| 232 | { | 265 | { |
| 233 | async_synchronize_cookie_special(next_cookie, list); | 266 | async_synchronize_cookie_domain(next_cookie, list); |
| 234 | } | 267 | } |
| 235 | EXPORT_SYMBOL_GPL(async_synchronize_full_special); | 268 | EXPORT_SYMBOL_GPL(async_synchronize_full_domain); |
| 236 | 269 | ||
| 237 | void async_synchronize_cookie_special(async_cookie_t cookie, struct list_head *running) | 270 | /** |
| 271 | * async_synchronize_cookie_domain - synchronize asynchronous function calls within a certain domain with cookie checkpointing | ||
| 272 | * @cookie: async_cookie_t to use as checkpoint | ||
| 273 | * @running: running list to synchronize on | ||
| 274 | * | ||
| 275 | * This function waits until all asynchronous function calls for the | ||
| 276 | * synchronization domain specified by the running list @list submitted | ||
| 277 | * prior to @cookie have been done. | ||
| 278 | */ | ||
| 279 | void async_synchronize_cookie_domain(async_cookie_t cookie, | ||
| 280 | struct list_head *running) | ||
| 238 | { | 281 | { |
| 239 | ktime_t starttime, delta, endtime; | 282 | ktime_t starttime, delta, endtime; |
| 240 | 283 | ||
| @@ -254,11 +297,18 @@ void async_synchronize_cookie_special(async_cookie_t cookie, struct list_head *r | |||
| 254 | (long long)ktime_to_ns(delta) >> 10); | 297 | (long long)ktime_to_ns(delta) >> 10); |
| 255 | } | 298 | } |
| 256 | } | 299 | } |
| 257 | EXPORT_SYMBOL_GPL(async_synchronize_cookie_special); | 300 | EXPORT_SYMBOL_GPL(async_synchronize_cookie_domain); |
| 258 | 301 | ||
| 302 | /** | ||
| 303 | * async_synchronize_cookie - synchronize asynchronous function calls with cookie checkpointing | ||
| 304 | * @cookie: async_cookie_t to use as checkpoint | ||
| 305 | * | ||
| 306 | * This function waits until all asynchronous function calls prior to @cookie | ||
| 307 | * have been done. | ||
| 308 | */ | ||
| 259 | void async_synchronize_cookie(async_cookie_t cookie) | 309 | void async_synchronize_cookie(async_cookie_t cookie) |
| 260 | { | 310 | { |
| 261 | async_synchronize_cookie_special(cookie, &async_running); | 311 | async_synchronize_cookie_domain(cookie, &async_running); |
| 262 | } | 312 | } |
| 263 | EXPORT_SYMBOL_GPL(async_synchronize_cookie); | 313 | EXPORT_SYMBOL_GPL(async_synchronize_cookie); |
| 264 | 314 | ||
| @@ -319,7 +369,11 @@ static int async_manager_thread(void *unused) | |||
| 319 | ec = atomic_read(&entry_count); | 369 | ec = atomic_read(&entry_count); |
| 320 | 370 | ||
| 321 | while (tc < ec && tc < MAX_THREADS) { | 371 | while (tc < ec && tc < MAX_THREADS) { |
| 322 | kthread_run(async_thread, NULL, "async/%i", tc); | 372 | if (IS_ERR(kthread_run(async_thread, NULL, "async/%i", |
| 373 | tc))) { | ||
| 374 | msleep(100); | ||
| 375 | continue; | ||
| 376 | } | ||
| 323 | atomic_inc(&thread_count); | 377 | atomic_inc(&thread_count); |
| 324 | tc++; | 378 | tc++; |
| 325 | } | 379 | } |
| @@ -334,7 +388,9 @@ static int async_manager_thread(void *unused) | |||
| 334 | static int __init async_init(void) | 388 | static int __init async_init(void) |
| 335 | { | 389 | { |
| 336 | if (async_enabled) | 390 | if (async_enabled) |
| 337 | kthread_run(async_manager_thread, NULL, "async/mgr"); | 391 | if (IS_ERR(kthread_run(async_manager_thread, NULL, |
| 392 | "async/mgr"))) | ||
| 393 | async_enabled = 0; | ||
| 338 | return 0; | 394 | return 0; |
| 339 | } | 395 | } |
| 340 | 396 | ||
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 5a54ff42874e..9edb5c4b79b4 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
| @@ -1122,8 +1122,8 @@ static void cgroup_kill_sb(struct super_block *sb) { | |||
| 1122 | 1122 | ||
| 1123 | mutex_unlock(&cgroup_mutex); | 1123 | mutex_unlock(&cgroup_mutex); |
| 1124 | 1124 | ||
| 1125 | kfree(root); | ||
| 1126 | kill_litter_super(sb); | 1125 | kill_litter_super(sb); |
| 1126 | kfree(root); | ||
| 1127 | } | 1127 | } |
| 1128 | 1128 | ||
| 1129 | static struct file_system_type cgroup_fs_type = { | 1129 | static struct file_system_type cgroup_fs_type = { |
| @@ -2351,7 +2351,7 @@ static void cgroup_lock_hierarchy(struct cgroupfs_root *root) | |||
| 2351 | for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) { | 2351 | for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) { |
| 2352 | struct cgroup_subsys *ss = subsys[i]; | 2352 | struct cgroup_subsys *ss = subsys[i]; |
| 2353 | if (ss->root == root) | 2353 | if (ss->root == root) |
| 2354 | mutex_lock_nested(&ss->hierarchy_mutex, i); | 2354 | mutex_lock(&ss->hierarchy_mutex); |
| 2355 | } | 2355 | } |
| 2356 | } | 2356 | } |
| 2357 | 2357 | ||
| @@ -2637,6 +2637,7 @@ static void __init cgroup_init_subsys(struct cgroup_subsys *ss) | |||
| 2637 | BUG_ON(!list_empty(&init_task.tasks)); | 2637 | BUG_ON(!list_empty(&init_task.tasks)); |
| 2638 | 2638 | ||
| 2639 | mutex_init(&ss->hierarchy_mutex); | 2639 | mutex_init(&ss->hierarchy_mutex); |
| 2640 | lockdep_set_class(&ss->hierarchy_mutex, &ss->subsys_key); | ||
| 2640 | ss->active = 1; | 2641 | ss->active = 1; |
| 2641 | } | 2642 | } |
| 2642 | 2643 | ||
diff --git a/kernel/exit.c b/kernel/exit.c index f80dec3f1875..efd30ccf3858 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
| @@ -118,6 +118,8 @@ static void __exit_signal(struct task_struct *tsk) | |||
| 118 | * We won't ever get here for the group leader, since it | 118 | * We won't ever get here for the group leader, since it |
| 119 | * will have been the last reference on the signal_struct. | 119 | * will have been the last reference on the signal_struct. |
| 120 | */ | 120 | */ |
| 121 | sig->utime = cputime_add(sig->utime, task_utime(tsk)); | ||
| 122 | sig->stime = cputime_add(sig->stime, task_stime(tsk)); | ||
| 121 | sig->gtime = cputime_add(sig->gtime, task_gtime(tsk)); | 123 | sig->gtime = cputime_add(sig->gtime, task_gtime(tsk)); |
| 122 | sig->min_flt += tsk->min_flt; | 124 | sig->min_flt += tsk->min_flt; |
| 123 | sig->maj_flt += tsk->maj_flt; | 125 | sig->maj_flt += tsk->maj_flt; |
| @@ -126,6 +128,7 @@ static void __exit_signal(struct task_struct *tsk) | |||
| 126 | sig->inblock += task_io_get_inblock(tsk); | 128 | sig->inblock += task_io_get_inblock(tsk); |
| 127 | sig->oublock += task_io_get_oublock(tsk); | 129 | sig->oublock += task_io_get_oublock(tsk); |
| 128 | task_io_accounting_add(&sig->ioac, &tsk->ioac); | 130 | task_io_accounting_add(&sig->ioac, &tsk->ioac); |
| 131 | sig->sum_sched_runtime += tsk->se.sum_exec_runtime; | ||
| 129 | sig = NULL; /* Marker for below. */ | 132 | sig = NULL; /* Marker for below. */ |
| 130 | } | 133 | } |
| 131 | 134 | ||
diff --git a/kernel/fork.c b/kernel/fork.c index 6d5dbb7a13e2..4854c2c4a82e 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
| @@ -851,13 +851,14 @@ static int copy_signal(unsigned long clone_flags, struct task_struct *tsk) | |||
| 851 | sig->tty_old_pgrp = NULL; | 851 | sig->tty_old_pgrp = NULL; |
| 852 | sig->tty = NULL; | 852 | sig->tty = NULL; |
| 853 | 853 | ||
| 854 | sig->cutime = sig->cstime = cputime_zero; | 854 | sig->utime = sig->stime = sig->cutime = sig->cstime = cputime_zero; |
| 855 | sig->gtime = cputime_zero; | 855 | sig->gtime = cputime_zero; |
| 856 | sig->cgtime = cputime_zero; | 856 | sig->cgtime = cputime_zero; |
| 857 | sig->nvcsw = sig->nivcsw = sig->cnvcsw = sig->cnivcsw = 0; | 857 | sig->nvcsw = sig->nivcsw = sig->cnvcsw = sig->cnivcsw = 0; |
| 858 | sig->min_flt = sig->maj_flt = sig->cmin_flt = sig->cmaj_flt = 0; | 858 | sig->min_flt = sig->maj_flt = sig->cmin_flt = sig->cmaj_flt = 0; |
| 859 | sig->inblock = sig->oublock = sig->cinblock = sig->coublock = 0; | 859 | sig->inblock = sig->oublock = sig->cinblock = sig->coublock = 0; |
| 860 | task_io_accounting_init(&sig->ioac); | 860 | task_io_accounting_init(&sig->ioac); |
| 861 | sig->sum_sched_runtime = 0; | ||
| 861 | taskstats_tgid_init(sig); | 862 | taskstats_tgid_init(sig); |
| 862 | 863 | ||
| 863 | task_lock(current->group_leader); | 864 | task_lock(current->group_leader); |
| @@ -1094,7 +1095,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
| 1094 | #ifdef CONFIG_DEBUG_MUTEXES | 1095 | #ifdef CONFIG_DEBUG_MUTEXES |
| 1095 | p->blocked_on = NULL; /* not blocked yet */ | 1096 | p->blocked_on = NULL; /* not blocked yet */ |
| 1096 | #endif | 1097 | #endif |
| 1097 | if (unlikely(ptrace_reparented(current))) | 1098 | if (unlikely(current->ptrace)) |
| 1098 | ptrace_fork(p, clone_flags); | 1099 | ptrace_fork(p, clone_flags); |
| 1099 | 1100 | ||
| 1100 | /* Perform scheduler related setup. Assign this task to a CPU. */ | 1101 | /* Perform scheduler related setup. Assign this task to a CPU. */ |
| @@ -1178,10 +1179,6 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
| 1178 | #endif | 1179 | #endif |
| 1179 | clear_all_latency_tracing(p); | 1180 | clear_all_latency_tracing(p); |
| 1180 | 1181 | ||
| 1181 | /* Our parent execution domain becomes current domain | ||
| 1182 | These must match for thread signalling to apply */ | ||
| 1183 | p->parent_exec_id = p->self_exec_id; | ||
| 1184 | |||
| 1185 | /* ok, now we should be set up.. */ | 1182 | /* ok, now we should be set up.. */ |
| 1186 | p->exit_signal = (clone_flags & CLONE_THREAD) ? -1 : (clone_flags & CSIGNAL); | 1183 | p->exit_signal = (clone_flags & CLONE_THREAD) ? -1 : (clone_flags & CSIGNAL); |
| 1187 | p->pdeath_signal = 0; | 1184 | p->pdeath_signal = 0; |
| @@ -1219,10 +1216,13 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
| 1219 | set_task_cpu(p, smp_processor_id()); | 1216 | set_task_cpu(p, smp_processor_id()); |
| 1220 | 1217 | ||
| 1221 | /* CLONE_PARENT re-uses the old parent */ | 1218 | /* CLONE_PARENT re-uses the old parent */ |
| 1222 | if (clone_flags & (CLONE_PARENT|CLONE_THREAD)) | 1219 | if (clone_flags & (CLONE_PARENT|CLONE_THREAD)) { |
| 1223 | p->real_parent = current->real_parent; | 1220 | p->real_parent = current->real_parent; |
| 1224 | else | 1221 | p->parent_exec_id = current->parent_exec_id; |
| 1222 | } else { | ||
| 1225 | p->real_parent = current; | 1223 | p->real_parent = current; |
| 1224 | p->parent_exec_id = current->self_exec_id; | ||
| 1225 | } | ||
| 1226 | 1226 | ||
| 1227 | spin_lock(¤t->sighand->siglock); | 1227 | spin_lock(¤t->sighand->siglock); |
| 1228 | 1228 | ||
diff --git a/kernel/futex.c b/kernel/futex.c index f89d373a9c6d..438701adce23 100644 --- a/kernel/futex.c +++ b/kernel/futex.c | |||
| @@ -1165,6 +1165,7 @@ static int futex_wait(u32 __user *uaddr, int fshared, | |||
| 1165 | u32 val, ktime_t *abs_time, u32 bitset, int clockrt) | 1165 | u32 val, ktime_t *abs_time, u32 bitset, int clockrt) |
| 1166 | { | 1166 | { |
| 1167 | struct task_struct *curr = current; | 1167 | struct task_struct *curr = current; |
| 1168 | struct restart_block *restart; | ||
| 1168 | DECLARE_WAITQUEUE(wait, curr); | 1169 | DECLARE_WAITQUEUE(wait, curr); |
| 1169 | struct futex_hash_bucket *hb; | 1170 | struct futex_hash_bucket *hb; |
| 1170 | struct futex_q q; | 1171 | struct futex_q q; |
| @@ -1216,11 +1217,13 @@ retry: | |||
| 1216 | 1217 | ||
| 1217 | if (!ret) | 1218 | if (!ret) |
| 1218 | goto retry; | 1219 | goto retry; |
| 1219 | return ret; | 1220 | goto out; |
| 1220 | } | 1221 | } |
| 1221 | ret = -EWOULDBLOCK; | 1222 | ret = -EWOULDBLOCK; |
| 1222 | if (uval != val) | 1223 | if (unlikely(uval != val)) { |
| 1223 | goto out_unlock_put_key; | 1224 | queue_unlock(&q, hb); |
| 1225 | goto out_put_key; | ||
| 1226 | } | ||
| 1224 | 1227 | ||
| 1225 | /* Only actually queue if *uaddr contained val. */ | 1228 | /* Only actually queue if *uaddr contained val. */ |
| 1226 | queue_me(&q, hb); | 1229 | queue_me(&q, hb); |
| @@ -1284,38 +1287,38 @@ retry: | |||
| 1284 | */ | 1287 | */ |
| 1285 | 1288 | ||
| 1286 | /* If we were woken (and unqueued), we succeeded, whatever. */ | 1289 | /* If we were woken (and unqueued), we succeeded, whatever. */ |
| 1290 | ret = 0; | ||
| 1287 | if (!unqueue_me(&q)) | 1291 | if (!unqueue_me(&q)) |
| 1288 | return 0; | 1292 | goto out_put_key; |
| 1293 | ret = -ETIMEDOUT; | ||
| 1289 | if (rem) | 1294 | if (rem) |
| 1290 | return -ETIMEDOUT; | 1295 | goto out_put_key; |
| 1291 | 1296 | ||
| 1292 | /* | 1297 | /* |
| 1293 | * We expect signal_pending(current), but another thread may | 1298 | * We expect signal_pending(current), but another thread may |
| 1294 | * have handled it for us already. | 1299 | * have handled it for us already. |
| 1295 | */ | 1300 | */ |
| 1301 | ret = -ERESTARTSYS; | ||
| 1296 | if (!abs_time) | 1302 | if (!abs_time) |
| 1297 | return -ERESTARTSYS; | 1303 | goto out_put_key; |
| 1298 | else { | ||
| 1299 | struct restart_block *restart; | ||
| 1300 | restart = ¤t_thread_info()->restart_block; | ||
| 1301 | restart->fn = futex_wait_restart; | ||
| 1302 | restart->futex.uaddr = (u32 *)uaddr; | ||
| 1303 | restart->futex.val = val; | ||
| 1304 | restart->futex.time = abs_time->tv64; | ||
| 1305 | restart->futex.bitset = bitset; | ||
| 1306 | restart->futex.flags = 0; | ||
| 1307 | |||
| 1308 | if (fshared) | ||
| 1309 | restart->futex.flags |= FLAGS_SHARED; | ||
| 1310 | if (clockrt) | ||
| 1311 | restart->futex.flags |= FLAGS_CLOCKRT; | ||
| 1312 | return -ERESTART_RESTARTBLOCK; | ||
| 1313 | } | ||
| 1314 | 1304 | ||
| 1315 | out_unlock_put_key: | 1305 | restart = ¤t_thread_info()->restart_block; |
| 1316 | queue_unlock(&q, hb); | 1306 | restart->fn = futex_wait_restart; |
| 1317 | put_futex_key(fshared, &q.key); | 1307 | restart->futex.uaddr = (u32 *)uaddr; |
| 1308 | restart->futex.val = val; | ||
| 1309 | restart->futex.time = abs_time->tv64; | ||
| 1310 | restart->futex.bitset = bitset; | ||
| 1311 | restart->futex.flags = 0; | ||
| 1312 | |||
| 1313 | if (fshared) | ||
| 1314 | restart->futex.flags |= FLAGS_SHARED; | ||
| 1315 | if (clockrt) | ||
| 1316 | restart->futex.flags |= FLAGS_CLOCKRT; | ||
| 1318 | 1317 | ||
| 1318 | ret = -ERESTART_RESTARTBLOCK; | ||
| 1319 | |||
| 1320 | out_put_key: | ||
| 1321 | put_futex_key(fshared, &q.key); | ||
| 1319 | out: | 1322 | out: |
| 1320 | return ret; | 1323 | return ret; |
| 1321 | } | 1324 | } |
diff --git a/kernel/itimer.c b/kernel/itimer.c index 6a5fe93dd8bd..58762f7077ec 100644 --- a/kernel/itimer.c +++ b/kernel/itimer.c | |||
| @@ -62,7 +62,7 @@ int do_getitimer(int which, struct itimerval *value) | |||
| 62 | struct task_cputime cputime; | 62 | struct task_cputime cputime; |
| 63 | cputime_t utime; | 63 | cputime_t utime; |
| 64 | 64 | ||
| 65 | thread_group_cputime(tsk, &cputime); | 65 | thread_group_cputimer(tsk, &cputime); |
| 66 | utime = cputime.utime; | 66 | utime = cputime.utime; |
| 67 | if (cputime_le(cval, utime)) { /* about to fire */ | 67 | if (cputime_le(cval, utime)) { /* about to fire */ |
| 68 | cval = jiffies_to_cputime(1); | 68 | cval = jiffies_to_cputime(1); |
| @@ -82,7 +82,7 @@ int do_getitimer(int which, struct itimerval *value) | |||
| 82 | struct task_cputime times; | 82 | struct task_cputime times; |
| 83 | cputime_t ptime; | 83 | cputime_t ptime; |
| 84 | 84 | ||
| 85 | thread_group_cputime(tsk, ×); | 85 | thread_group_cputimer(tsk, ×); |
| 86 | ptime = cputime_add(times.utime, times.stime); | 86 | ptime = cputime_add(times.utime, times.stime); |
| 87 | if (cputime_le(cval, ptime)) { /* about to fire */ | 87 | if (cputime_le(cval, ptime)) { /* about to fire */ |
| 88 | cval = jiffies_to_cputime(1); | 88 | cval = jiffies_to_cputime(1); |
diff --git a/kernel/kexec.c b/kernel/kexec.c index 8a6d7b08864e..483899578259 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c | |||
| @@ -1465,6 +1465,11 @@ int kernel_kexec(void) | |||
| 1465 | error = device_power_down(PMSG_FREEZE); | 1465 | error = device_power_down(PMSG_FREEZE); |
| 1466 | if (error) | 1466 | if (error) |
| 1467 | goto Enable_irqs; | 1467 | goto Enable_irqs; |
| 1468 | |||
| 1469 | /* Suspend system devices */ | ||
| 1470 | error = sysdev_suspend(PMSG_FREEZE); | ||
| 1471 | if (error) | ||
| 1472 | goto Power_up_devices; | ||
| 1468 | } else | 1473 | } else |
| 1469 | #endif | 1474 | #endif |
| 1470 | { | 1475 | { |
| @@ -1477,6 +1482,8 @@ int kernel_kexec(void) | |||
| 1477 | 1482 | ||
| 1478 | #ifdef CONFIG_KEXEC_JUMP | 1483 | #ifdef CONFIG_KEXEC_JUMP |
| 1479 | if (kexec_image->preserve_context) { | 1484 | if (kexec_image->preserve_context) { |
| 1485 | sysdev_resume(); | ||
| 1486 | Power_up_devices: | ||
| 1480 | device_power_up(PMSG_RESTORE); | 1487 | device_power_up(PMSG_RESTORE); |
| 1481 | Enable_irqs: | 1488 | Enable_irqs: |
| 1482 | local_irq_enable(); | 1489 | local_irq_enable(); |
diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c index fa07da94d7be..e976e505648d 100644 --- a/kernel/posix-cpu-timers.c +++ b/kernel/posix-cpu-timers.c | |||
| @@ -230,6 +230,71 @@ static int cpu_clock_sample(const clockid_t which_clock, struct task_struct *p, | |||
| 230 | return 0; | 230 | return 0; |
| 231 | } | 231 | } |
| 232 | 232 | ||
| 233 | void thread_group_cputime(struct task_struct *tsk, struct task_cputime *times) | ||
| 234 | { | ||
| 235 | struct sighand_struct *sighand; | ||
| 236 | struct signal_struct *sig; | ||
| 237 | struct task_struct *t; | ||
| 238 | |||
| 239 | *times = INIT_CPUTIME; | ||
| 240 | |||
| 241 | rcu_read_lock(); | ||
| 242 | sighand = rcu_dereference(tsk->sighand); | ||
| 243 | if (!sighand) | ||
| 244 | goto out; | ||
| 245 | |||
| 246 | sig = tsk->signal; | ||
| 247 | |||
| 248 | t = tsk; | ||
| 249 | do { | ||
| 250 | times->utime = cputime_add(times->utime, t->utime); | ||
| 251 | times->stime = cputime_add(times->stime, t->stime); | ||
| 252 | times->sum_exec_runtime += t->se.sum_exec_runtime; | ||
| 253 | |||
| 254 | t = next_thread(t); | ||
| 255 | } while (t != tsk); | ||
| 256 | |||
| 257 | times->utime = cputime_add(times->utime, sig->utime); | ||
| 258 | times->stime = cputime_add(times->stime, sig->stime); | ||
| 259 | times->sum_exec_runtime += sig->sum_sched_runtime; | ||
| 260 | out: | ||
| 261 | rcu_read_unlock(); | ||
| 262 | } | ||
| 263 | |||
| 264 | static void update_gt_cputime(struct task_cputime *a, struct task_cputime *b) | ||
| 265 | { | ||
| 266 | if (cputime_gt(b->utime, a->utime)) | ||
| 267 | a->utime = b->utime; | ||
| 268 | |||
| 269 | if (cputime_gt(b->stime, a->stime)) | ||
| 270 | a->stime = b->stime; | ||
| 271 | |||
| 272 | if (b->sum_exec_runtime > a->sum_exec_runtime) | ||
| 273 | a->sum_exec_runtime = b->sum_exec_runtime; | ||
| 274 | } | ||
| 275 | |||
| 276 | void thread_group_cputimer(struct task_struct *tsk, struct task_cputime *times) | ||
| 277 | { | ||
| 278 | struct thread_group_cputimer *cputimer = &tsk->signal->cputimer; | ||
| 279 | struct task_cputime sum; | ||
| 280 | unsigned long flags; | ||
| 281 | |||
| 282 | spin_lock_irqsave(&cputimer->lock, flags); | ||
| 283 | if (!cputimer->running) { | ||
| 284 | cputimer->running = 1; | ||
| 285 | /* | ||
| 286 | * The POSIX timer interface allows for absolute time expiry | ||
| 287 | * values through the TIMER_ABSTIME flag, therefore we have | ||
| 288 | * to synchronize the timer to the clock every time we start | ||
| 289 | * it. | ||
| 290 | */ | ||
| 291 | thread_group_cputime(tsk, &sum); | ||
| 292 | update_gt_cputime(&cputimer->cputime, &sum); | ||
| 293 | } | ||
| 294 | *times = cputimer->cputime; | ||
| 295 | spin_unlock_irqrestore(&cputimer->lock, flags); | ||
| 296 | } | ||
| 297 | |||
| 233 | /* | 298 | /* |
| 234 | * Sample a process (thread group) clock for the given group_leader task. | 299 | * Sample a process (thread group) clock for the given group_leader task. |
| 235 | * Must be called with tasklist_lock held for reading. | 300 | * Must be called with tasklist_lock held for reading. |
| @@ -457,7 +522,7 @@ void posix_cpu_timers_exit_group(struct task_struct *tsk) | |||
| 457 | { | 522 | { |
| 458 | struct task_cputime cputime; | 523 | struct task_cputime cputime; |
| 459 | 524 | ||
| 460 | thread_group_cputime(tsk, &cputime); | 525 | thread_group_cputimer(tsk, &cputime); |
| 461 | cleanup_timers(tsk->signal->cpu_timers, | 526 | cleanup_timers(tsk->signal->cpu_timers, |
| 462 | cputime.utime, cputime.stime, cputime.sum_exec_runtime); | 527 | cputime.utime, cputime.stime, cputime.sum_exec_runtime); |
| 463 | } | 528 | } |
| @@ -616,6 +681,33 @@ static void cpu_timer_fire(struct k_itimer *timer) | |||
| 616 | } | 681 | } |
| 617 | 682 | ||
| 618 | /* | 683 | /* |
| 684 | * Sample a process (thread group) timer for the given group_leader task. | ||
| 685 | * Must be called with tasklist_lock held for reading. | ||
| 686 | */ | ||
| 687 | static int cpu_timer_sample_group(const clockid_t which_clock, | ||
| 688 | struct task_struct *p, | ||
| 689 | union cpu_time_count *cpu) | ||
| 690 | { | ||
| 691 | struct task_cputime cputime; | ||
| 692 | |||
| 693 | thread_group_cputimer(p, &cputime); | ||
| 694 | switch (CPUCLOCK_WHICH(which_clock)) { | ||
| 695 | default: | ||
| 696 | return -EINVAL; | ||
| 697 | case CPUCLOCK_PROF: | ||
| 698 | cpu->cpu = cputime_add(cputime.utime, cputime.stime); | ||
| 699 | break; | ||
| 700 | case CPUCLOCK_VIRT: | ||
| 701 | cpu->cpu = cputime.utime; | ||
| 702 | break; | ||
| 703 | case CPUCLOCK_SCHED: | ||
| 704 | cpu->sched = cputime.sum_exec_runtime + task_delta_exec(p); | ||
| 705 | break; | ||
| 706 | } | ||
| 707 | return 0; | ||
| 708 | } | ||
| 709 | |||
| 710 | /* | ||
| 619 | * Guts of sys_timer_settime for CPU timers. | 711 | * Guts of sys_timer_settime for CPU timers. |
| 620 | * This is called with the timer locked and interrupts disabled. | 712 | * This is called with the timer locked and interrupts disabled. |
| 621 | * If we return TIMER_RETRY, it's necessary to release the timer's lock | 713 | * If we return TIMER_RETRY, it's necessary to release the timer's lock |
| @@ -676,7 +768,7 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags, | |||
| 676 | if (CPUCLOCK_PERTHREAD(timer->it_clock)) { | 768 | if (CPUCLOCK_PERTHREAD(timer->it_clock)) { |
| 677 | cpu_clock_sample(timer->it_clock, p, &val); | 769 | cpu_clock_sample(timer->it_clock, p, &val); |
| 678 | } else { | 770 | } else { |
| 679 | cpu_clock_sample_group(timer->it_clock, p, &val); | 771 | cpu_timer_sample_group(timer->it_clock, p, &val); |
| 680 | } | 772 | } |
| 681 | 773 | ||
| 682 | if (old) { | 774 | if (old) { |
| @@ -824,7 +916,7 @@ void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec *itp) | |||
| 824 | read_unlock(&tasklist_lock); | 916 | read_unlock(&tasklist_lock); |
| 825 | goto dead; | 917 | goto dead; |
| 826 | } else { | 918 | } else { |
| 827 | cpu_clock_sample_group(timer->it_clock, p, &now); | 919 | cpu_timer_sample_group(timer->it_clock, p, &now); |
| 828 | clear_dead = (unlikely(p->exit_state) && | 920 | clear_dead = (unlikely(p->exit_state) && |
| 829 | thread_group_empty(p)); | 921 | thread_group_empty(p)); |
| 830 | } | 922 | } |
| @@ -964,6 +1056,19 @@ static void check_thread_timers(struct task_struct *tsk, | |||
| 964 | } | 1056 | } |
| 965 | } | 1057 | } |
| 966 | 1058 | ||
| 1059 | static void stop_process_timers(struct task_struct *tsk) | ||
| 1060 | { | ||
| 1061 | struct thread_group_cputimer *cputimer = &tsk->signal->cputimer; | ||
| 1062 | unsigned long flags; | ||
| 1063 | |||
| 1064 | if (!cputimer->running) | ||
| 1065 | return; | ||
| 1066 | |||
| 1067 | spin_lock_irqsave(&cputimer->lock, flags); | ||
| 1068 | cputimer->running = 0; | ||
| 1069 | spin_unlock_irqrestore(&cputimer->lock, flags); | ||
| 1070 | } | ||
| 1071 | |||
| 967 | /* | 1072 | /* |
| 968 | * Check for any per-thread CPU timers that have fired and move them | 1073 | * Check for any per-thread CPU timers that have fired and move them |
| 969 | * off the tsk->*_timers list onto the firing list. Per-thread timers | 1074 | * off the tsk->*_timers list onto the firing list. Per-thread timers |
| @@ -987,13 +1092,15 @@ static void check_process_timers(struct task_struct *tsk, | |||
| 987 | sig->rlim[RLIMIT_CPU].rlim_cur == RLIM_INFINITY && | 1092 | sig->rlim[RLIMIT_CPU].rlim_cur == RLIM_INFINITY && |
| 988 | list_empty(&timers[CPUCLOCK_VIRT]) && | 1093 | list_empty(&timers[CPUCLOCK_VIRT]) && |
| 989 | cputime_eq(sig->it_virt_expires, cputime_zero) && | 1094 | cputime_eq(sig->it_virt_expires, cputime_zero) && |
| 990 | list_empty(&timers[CPUCLOCK_SCHED])) | 1095 | list_empty(&timers[CPUCLOCK_SCHED])) { |
| 1096 | stop_process_timers(tsk); | ||
| 991 | return; | 1097 | return; |
| 1098 | } | ||
| 992 | 1099 | ||
| 993 | /* | 1100 | /* |
| 994 | * Collect the current process totals. | 1101 | * Collect the current process totals. |
| 995 | */ | 1102 | */ |
| 996 | thread_group_cputime(tsk, &cputime); | 1103 | thread_group_cputimer(tsk, &cputime); |
| 997 | utime = cputime.utime; | 1104 | utime = cputime.utime; |
| 998 | ptime = cputime_add(utime, cputime.stime); | 1105 | ptime = cputime_add(utime, cputime.stime); |
| 999 | sum_sched_runtime = cputime.sum_exec_runtime; | 1106 | sum_sched_runtime = cputime.sum_exec_runtime; |
| @@ -1164,7 +1271,7 @@ void posix_cpu_timer_schedule(struct k_itimer *timer) | |||
| 1164 | clear_dead_task(timer, now); | 1271 | clear_dead_task(timer, now); |
| 1165 | goto out_unlock; | 1272 | goto out_unlock; |
| 1166 | } | 1273 | } |
| 1167 | cpu_clock_sample_group(timer->it_clock, p, &now); | 1274 | cpu_timer_sample_group(timer->it_clock, p, &now); |
| 1168 | bump_cpu_timer(timer, now); | 1275 | bump_cpu_timer(timer, now); |
| 1169 | /* Leave the tasklist_lock locked for the call below. */ | 1276 | /* Leave the tasklist_lock locked for the call below. */ |
| 1170 | } | 1277 | } |
| @@ -1259,7 +1366,7 @@ static inline int fastpath_timer_check(struct task_struct *tsk) | |||
| 1259 | if (!task_cputime_zero(&sig->cputime_expires)) { | 1366 | if (!task_cputime_zero(&sig->cputime_expires)) { |
| 1260 | struct task_cputime group_sample; | 1367 | struct task_cputime group_sample; |
| 1261 | 1368 | ||
| 1262 | thread_group_cputime(tsk, &group_sample); | 1369 | thread_group_cputimer(tsk, &group_sample); |
| 1263 | if (task_cputime_expired(&group_sample, &sig->cputime_expires)) | 1370 | if (task_cputime_expired(&group_sample, &sig->cputime_expires)) |
| 1264 | return 1; | 1371 | return 1; |
| 1265 | } | 1372 | } |
| @@ -1341,7 +1448,7 @@ void set_process_cpu_timer(struct task_struct *tsk, unsigned int clock_idx, | |||
| 1341 | struct list_head *head; | 1448 | struct list_head *head; |
| 1342 | 1449 | ||
| 1343 | BUG_ON(clock_idx == CPUCLOCK_SCHED); | 1450 | BUG_ON(clock_idx == CPUCLOCK_SCHED); |
| 1344 | cpu_clock_sample_group(clock_idx, tsk, &now); | 1451 | cpu_timer_sample_group(clock_idx, tsk, &now); |
| 1345 | 1452 | ||
| 1346 | if (oldval) { | 1453 | if (oldval) { |
| 1347 | if (!cputime_eq(*oldval, cputime_zero)) { | 1454 | if (!cputime_eq(*oldval, cputime_zero)) { |
diff --git a/kernel/power/Makefile b/kernel/power/Makefile index d7a10167a25b..720ea4f781bd 100644 --- a/kernel/power/Makefile +++ b/kernel/power/Makefile | |||
| @@ -3,7 +3,7 @@ ifeq ($(CONFIG_PM_DEBUG),y) | |||
| 3 | EXTRA_CFLAGS += -DDEBUG | 3 | EXTRA_CFLAGS += -DDEBUG |
| 4 | endif | 4 | endif |
| 5 | 5 | ||
| 6 | obj-y := main.o | 6 | obj-$(CONFIG_PM) += main.o |
| 7 | obj-$(CONFIG_PM_SLEEP) += console.o | 7 | obj-$(CONFIG_PM_SLEEP) += console.o |
| 8 | obj-$(CONFIG_FREEZER) += process.o | 8 | obj-$(CONFIG_FREEZER) += process.o |
| 9 | obj-$(CONFIG_HIBERNATION) += swsusp.o disk.o snapshot.o swap.o user.o | 9 | obj-$(CONFIG_HIBERNATION) += swsusp.o disk.o snapshot.o swap.o user.o |
diff --git a/kernel/power/console.c b/kernel/power/console.c index b8628be2a465..a3961b205de7 100644 --- a/kernel/power/console.c +++ b/kernel/power/console.c | |||
| @@ -78,6 +78,12 @@ void pm_restore_console(void) | |||
| 78 | } | 78 | } |
| 79 | set_console(orig_fgconsole); | 79 | set_console(orig_fgconsole); |
| 80 | release_console_sem(); | 80 | release_console_sem(); |
| 81 | |||
| 82 | if (vt_waitactive(orig_fgconsole)) { | ||
| 83 | pr_debug("Resume: Can't switch VCs."); | ||
| 84 | return; | ||
| 85 | } | ||
| 86 | |||
| 81 | kmsg_redirect = orig_kmsg; | 87 | kmsg_redirect = orig_kmsg; |
| 82 | } | 88 | } |
| 83 | #endif | 89 | #endif |
diff --git a/kernel/power/disk.c b/kernel/power/disk.c index 432ee575c9ee..4a4a206b1979 100644 --- a/kernel/power/disk.c +++ b/kernel/power/disk.c | |||
| @@ -227,6 +227,12 @@ static int create_image(int platform_mode) | |||
| 227 | "aborting hibernation\n"); | 227 | "aborting hibernation\n"); |
| 228 | goto Enable_irqs; | 228 | goto Enable_irqs; |
| 229 | } | 229 | } |
| 230 | sysdev_suspend(PMSG_FREEZE); | ||
| 231 | if (error) { | ||
| 232 | printk(KERN_ERR "PM: Some devices failed to power down, " | ||
| 233 | "aborting hibernation\n"); | ||
| 234 | goto Power_up_devices; | ||
| 235 | } | ||
| 230 | 236 | ||
| 231 | if (hibernation_test(TEST_CORE)) | 237 | if (hibernation_test(TEST_CORE)) |
| 232 | goto Power_up; | 238 | goto Power_up; |
| @@ -242,9 +248,11 @@ static int create_image(int platform_mode) | |||
| 242 | if (!in_suspend) | 248 | if (!in_suspend) |
| 243 | platform_leave(platform_mode); | 249 | platform_leave(platform_mode); |
| 244 | Power_up: | 250 | Power_up: |
| 251 | sysdev_resume(); | ||
| 245 | /* NOTE: device_power_up() is just a resume() for devices | 252 | /* NOTE: device_power_up() is just a resume() for devices |
| 246 | * that suspended with irqs off ... no overall powerup. | 253 | * that suspended with irqs off ... no overall powerup. |
| 247 | */ | 254 | */ |
| 255 | Power_up_devices: | ||
| 248 | device_power_up(in_suspend ? | 256 | device_power_up(in_suspend ? |
| 249 | (error ? PMSG_RECOVER : PMSG_THAW) : PMSG_RESTORE); | 257 | (error ? PMSG_RECOVER : PMSG_THAW) : PMSG_RESTORE); |
| 250 | Enable_irqs: | 258 | Enable_irqs: |
| @@ -335,6 +343,7 @@ static int resume_target_kernel(void) | |||
| 335 | "aborting resume\n"); | 343 | "aborting resume\n"); |
| 336 | goto Enable_irqs; | 344 | goto Enable_irqs; |
| 337 | } | 345 | } |
| 346 | sysdev_suspend(PMSG_QUIESCE); | ||
| 338 | /* We'll ignore saved state, but this gets preempt count (etc) right */ | 347 | /* We'll ignore saved state, but this gets preempt count (etc) right */ |
| 339 | save_processor_state(); | 348 | save_processor_state(); |
| 340 | error = restore_highmem(); | 349 | error = restore_highmem(); |
| @@ -357,6 +366,7 @@ static int resume_target_kernel(void) | |||
| 357 | swsusp_free(); | 366 | swsusp_free(); |
| 358 | restore_processor_state(); | 367 | restore_processor_state(); |
| 359 | touch_softlockup_watchdog(); | 368 | touch_softlockup_watchdog(); |
| 369 | sysdev_resume(); | ||
| 360 | device_power_up(PMSG_RECOVER); | 370 | device_power_up(PMSG_RECOVER); |
| 361 | Enable_irqs: | 371 | Enable_irqs: |
| 362 | local_irq_enable(); | 372 | local_irq_enable(); |
| @@ -440,6 +450,7 @@ int hibernation_platform_enter(void) | |||
| 440 | local_irq_disable(); | 450 | local_irq_disable(); |
| 441 | error = device_power_down(PMSG_HIBERNATE); | 451 | error = device_power_down(PMSG_HIBERNATE); |
| 442 | if (!error) { | 452 | if (!error) { |
| 453 | sysdev_suspend(PMSG_HIBERNATE); | ||
| 443 | hibernation_ops->enter(); | 454 | hibernation_ops->enter(); |
| 444 | /* We should never get here */ | 455 | /* We should never get here */ |
| 445 | while (1); | 456 | while (1); |
| @@ -595,6 +606,12 @@ static int software_resume(void) | |||
| 595 | unsigned int flags; | 606 | unsigned int flags; |
| 596 | 607 | ||
| 597 | /* | 608 | /* |
| 609 | * If the user said "noresume".. bail out early. | ||
| 610 | */ | ||
| 611 | if (noresume) | ||
| 612 | return 0; | ||
| 613 | |||
| 614 | /* | ||
| 598 | * name_to_dev_t() below takes a sysfs buffer mutex when sysfs | 615 | * name_to_dev_t() below takes a sysfs buffer mutex when sysfs |
| 599 | * is configured into the kernel. Since the regular hibernate | 616 | * is configured into the kernel. Since the regular hibernate |
| 600 | * trigger path is via sysfs which takes a buffer mutex before | 617 | * trigger path is via sysfs which takes a buffer mutex before |
| @@ -610,6 +627,11 @@ static int software_resume(void) | |||
| 610 | mutex_unlock(&pm_mutex); | 627 | mutex_unlock(&pm_mutex); |
| 611 | return -ENOENT; | 628 | return -ENOENT; |
| 612 | } | 629 | } |
| 630 | /* | ||
| 631 | * Some device discovery might still be in progress; we need | ||
| 632 | * to wait for this to finish. | ||
| 633 | */ | ||
| 634 | wait_for_device_probe(); | ||
| 613 | swsusp_resume_device = name_to_dev_t(resume_file); | 635 | swsusp_resume_device = name_to_dev_t(resume_file); |
| 614 | pr_debug("PM: Resume from partition %s\n", resume_file); | 636 | pr_debug("PM: Resume from partition %s\n", resume_file); |
| 615 | } else { | 637 | } else { |
diff --git a/kernel/power/main.c b/kernel/power/main.c index 239988873971..c9632f841f64 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c | |||
| @@ -57,16 +57,6 @@ int pm_notifier_call_chain(unsigned long val) | |||
| 57 | #ifdef CONFIG_PM_DEBUG | 57 | #ifdef CONFIG_PM_DEBUG |
| 58 | int pm_test_level = TEST_NONE; | 58 | int pm_test_level = TEST_NONE; |
| 59 | 59 | ||
| 60 | static int suspend_test(int level) | ||
| 61 | { | ||
| 62 | if (pm_test_level == level) { | ||
| 63 | printk(KERN_INFO "suspend debug: Waiting for 5 seconds.\n"); | ||
| 64 | mdelay(5000); | ||
| 65 | return 1; | ||
| 66 | } | ||
| 67 | return 0; | ||
| 68 | } | ||
| 69 | |||
| 70 | static const char * const pm_tests[__TEST_AFTER_LAST] = { | 60 | static const char * const pm_tests[__TEST_AFTER_LAST] = { |
| 71 | [TEST_NONE] = "none", | 61 | [TEST_NONE] = "none", |
| 72 | [TEST_CORE] = "core", | 62 | [TEST_CORE] = "core", |
| @@ -125,14 +115,24 @@ static ssize_t pm_test_store(struct kobject *kobj, struct kobj_attribute *attr, | |||
| 125 | } | 115 | } |
| 126 | 116 | ||
| 127 | power_attr(pm_test); | 117 | power_attr(pm_test); |
| 128 | #else /* !CONFIG_PM_DEBUG */ | 118 | #endif /* CONFIG_PM_DEBUG */ |
| 129 | static inline int suspend_test(int level) { return 0; } | ||
| 130 | #endif /* !CONFIG_PM_DEBUG */ | ||
| 131 | 119 | ||
| 132 | #endif /* CONFIG_PM_SLEEP */ | 120 | #endif /* CONFIG_PM_SLEEP */ |
| 133 | 121 | ||
| 134 | #ifdef CONFIG_SUSPEND | 122 | #ifdef CONFIG_SUSPEND |
| 135 | 123 | ||
| 124 | static int suspend_test(int level) | ||
| 125 | { | ||
| 126 | #ifdef CONFIG_PM_DEBUG | ||
| 127 | if (pm_test_level == level) { | ||
| 128 | printk(KERN_INFO "suspend debug: Waiting for 5 seconds.\n"); | ||
| 129 | mdelay(5000); | ||
| 130 | return 1; | ||
| 131 | } | ||
| 132 | #endif /* !CONFIG_PM_DEBUG */ | ||
| 133 | return 0; | ||
| 134 | } | ||
| 135 | |||
| 136 | #ifdef CONFIG_PM_TEST_SUSPEND | 136 | #ifdef CONFIG_PM_TEST_SUSPEND |
| 137 | 137 | ||
| 138 | /* | 138 | /* |
| @@ -298,8 +298,12 @@ static int suspend_enter(suspend_state_t state) | |||
| 298 | goto Done; | 298 | goto Done; |
| 299 | } | 299 | } |
| 300 | 300 | ||
| 301 | if (!suspend_test(TEST_CORE)) | 301 | error = sysdev_suspend(PMSG_SUSPEND); |
| 302 | error = suspend_ops->enter(state); | 302 | if (!error) { |
| 303 | if (!suspend_test(TEST_CORE)) | ||
| 304 | error = suspend_ops->enter(state); | ||
| 305 | sysdev_resume(); | ||
| 306 | } | ||
| 303 | 307 | ||
| 304 | device_power_up(PMSG_RESUME); | 308 | device_power_up(PMSG_RESUME); |
| 305 | Done: | 309 | Done: |
diff --git a/kernel/power/swap.c b/kernel/power/swap.c index 6da14358537c..505f319e489c 100644 --- a/kernel/power/swap.c +++ b/kernel/power/swap.c | |||
| @@ -60,6 +60,7 @@ static struct block_device *resume_bdev; | |||
| 60 | static int submit(int rw, pgoff_t page_off, struct page *page, | 60 | static int submit(int rw, pgoff_t page_off, struct page *page, |
| 61 | struct bio **bio_chain) | 61 | struct bio **bio_chain) |
| 62 | { | 62 | { |
| 63 | const int bio_rw = rw | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG); | ||
| 63 | struct bio *bio; | 64 | struct bio *bio; |
| 64 | 65 | ||
| 65 | bio = bio_alloc(__GFP_WAIT | __GFP_HIGH, 1); | 66 | bio = bio_alloc(__GFP_WAIT | __GFP_HIGH, 1); |
| @@ -80,7 +81,7 @@ static int submit(int rw, pgoff_t page_off, struct page *page, | |||
| 80 | bio_get(bio); | 81 | bio_get(bio); |
| 81 | 82 | ||
| 82 | if (bio_chain == NULL) { | 83 | if (bio_chain == NULL) { |
| 83 | submit_bio(rw | (1 << BIO_RW_SYNC), bio); | 84 | submit_bio(bio_rw, bio); |
| 84 | wait_on_page_locked(page); | 85 | wait_on_page_locked(page); |
| 85 | if (rw == READ) | 86 | if (rw == READ) |
| 86 | bio_set_pages_dirty(bio); | 87 | bio_set_pages_dirty(bio); |
| @@ -90,7 +91,7 @@ static int submit(int rw, pgoff_t page_off, struct page *page, | |||
| 90 | get_page(page); /* These pages are freed later */ | 91 | get_page(page); /* These pages are freed later */ |
| 91 | bio->bi_private = *bio_chain; | 92 | bio->bi_private = *bio_chain; |
| 92 | *bio_chain = bio; | 93 | *bio_chain = bio; |
| 93 | submit_bio(rw | (1 << BIO_RW_SYNC), bio); | 94 | submit_bio(bio_rw, bio); |
| 94 | } | 95 | } |
| 95 | return 0; | 96 | return 0; |
| 96 | } | 97 | } |
diff --git a/kernel/power/user.c b/kernel/power/user.c index 005b93d839ba..6c85359364f2 100644 --- a/kernel/power/user.c +++ b/kernel/power/user.c | |||
| @@ -95,15 +95,15 @@ static int snapshot_open(struct inode *inode, struct file *filp) | |||
| 95 | data->swap = swsusp_resume_device ? | 95 | data->swap = swsusp_resume_device ? |
| 96 | swap_type_of(swsusp_resume_device, 0, NULL) : -1; | 96 | swap_type_of(swsusp_resume_device, 0, NULL) : -1; |
| 97 | data->mode = O_RDONLY; | 97 | data->mode = O_RDONLY; |
| 98 | error = pm_notifier_call_chain(PM_RESTORE_PREPARE); | 98 | error = pm_notifier_call_chain(PM_HIBERNATION_PREPARE); |
| 99 | if (error) | 99 | if (error) |
| 100 | pm_notifier_call_chain(PM_POST_RESTORE); | 100 | pm_notifier_call_chain(PM_POST_HIBERNATION); |
| 101 | } else { | 101 | } else { |
| 102 | data->swap = -1; | 102 | data->swap = -1; |
| 103 | data->mode = O_WRONLY; | 103 | data->mode = O_WRONLY; |
| 104 | error = pm_notifier_call_chain(PM_HIBERNATION_PREPARE); | 104 | error = pm_notifier_call_chain(PM_RESTORE_PREPARE); |
| 105 | if (error) | 105 | if (error) |
| 106 | pm_notifier_call_chain(PM_POST_HIBERNATION); | 106 | pm_notifier_call_chain(PM_POST_RESTORE); |
| 107 | } | 107 | } |
| 108 | if (error) | 108 | if (error) |
| 109 | atomic_inc(&snapshot_device_available); | 109 | atomic_inc(&snapshot_device_available); |
diff --git a/kernel/printk.c b/kernel/printk.c index 69188f226a93..e3602d0755b0 100644 --- a/kernel/printk.c +++ b/kernel/printk.c | |||
| @@ -73,7 +73,6 @@ EXPORT_SYMBOL(oops_in_progress); | |||
| 73 | * driver system. | 73 | * driver system. |
| 74 | */ | 74 | */ |
| 75 | static DECLARE_MUTEX(console_sem); | 75 | static DECLARE_MUTEX(console_sem); |
| 76 | static DECLARE_MUTEX(secondary_console_sem); | ||
| 77 | struct console *console_drivers; | 76 | struct console *console_drivers; |
| 78 | EXPORT_SYMBOL_GPL(console_drivers); | 77 | EXPORT_SYMBOL_GPL(console_drivers); |
| 79 | 78 | ||
| @@ -891,12 +890,14 @@ void suspend_console(void) | |||
| 891 | printk("Suspending console(s) (use no_console_suspend to debug)\n"); | 890 | printk("Suspending console(s) (use no_console_suspend to debug)\n"); |
| 892 | acquire_console_sem(); | 891 | acquire_console_sem(); |
| 893 | console_suspended = 1; | 892 | console_suspended = 1; |
| 893 | up(&console_sem); | ||
| 894 | } | 894 | } |
| 895 | 895 | ||
| 896 | void resume_console(void) | 896 | void resume_console(void) |
| 897 | { | 897 | { |
| 898 | if (!console_suspend_enabled) | 898 | if (!console_suspend_enabled) |
| 899 | return; | 899 | return; |
| 900 | down(&console_sem); | ||
| 900 | console_suspended = 0; | 901 | console_suspended = 0; |
| 901 | release_console_sem(); | 902 | release_console_sem(); |
| 902 | } | 903 | } |
| @@ -912,11 +913,9 @@ void resume_console(void) | |||
| 912 | void acquire_console_sem(void) | 913 | void acquire_console_sem(void) |
| 913 | { | 914 | { |
| 914 | BUG_ON(in_interrupt()); | 915 | BUG_ON(in_interrupt()); |
| 915 | if (console_suspended) { | ||
| 916 | down(&secondary_console_sem); | ||
| 917 | return; | ||
| 918 | } | ||
| 919 | down(&console_sem); | 916 | down(&console_sem); |
| 917 | if (console_suspended) | ||
| 918 | return; | ||
| 920 | console_locked = 1; | 919 | console_locked = 1; |
| 921 | console_may_schedule = 1; | 920 | console_may_schedule = 1; |
| 922 | } | 921 | } |
| @@ -926,6 +925,10 @@ int try_acquire_console_sem(void) | |||
| 926 | { | 925 | { |
| 927 | if (down_trylock(&console_sem)) | 926 | if (down_trylock(&console_sem)) |
| 928 | return -1; | 927 | return -1; |
| 928 | if (console_suspended) { | ||
| 929 | up(&console_sem); | ||
| 930 | return -1; | ||
| 931 | } | ||
| 929 | console_locked = 1; | 932 | console_locked = 1; |
| 930 | console_may_schedule = 0; | 933 | console_may_schedule = 0; |
| 931 | return 0; | 934 | return 0; |
| @@ -979,7 +982,7 @@ void release_console_sem(void) | |||
| 979 | unsigned wake_klogd = 0; | 982 | unsigned wake_klogd = 0; |
| 980 | 983 | ||
| 981 | if (console_suspended) { | 984 | if (console_suspended) { |
| 982 | up(&secondary_console_sem); | 985 | up(&console_sem); |
| 983 | return; | 986 | return; |
| 984 | } | 987 | } |
| 985 | 988 | ||
diff --git a/kernel/profile.c b/kernel/profile.c index 784933acf5b8..7724e0409bae 100644 --- a/kernel/profile.c +++ b/kernel/profile.c | |||
| @@ -114,12 +114,15 @@ int __ref profile_init(void) | |||
| 114 | if (!slab_is_available()) { | 114 | if (!slab_is_available()) { |
| 115 | prof_buffer = alloc_bootmem(buffer_bytes); | 115 | prof_buffer = alloc_bootmem(buffer_bytes); |
| 116 | alloc_bootmem_cpumask_var(&prof_cpu_mask); | 116 | alloc_bootmem_cpumask_var(&prof_cpu_mask); |
| 117 | cpumask_copy(prof_cpu_mask, cpu_possible_mask); | ||
| 117 | return 0; | 118 | return 0; |
| 118 | } | 119 | } |
| 119 | 120 | ||
| 120 | if (!alloc_cpumask_var(&prof_cpu_mask, GFP_KERNEL)) | 121 | if (!alloc_cpumask_var(&prof_cpu_mask, GFP_KERNEL)) |
| 121 | return -ENOMEM; | 122 | return -ENOMEM; |
| 122 | 123 | ||
| 124 | cpumask_copy(prof_cpu_mask, cpu_possible_mask); | ||
| 125 | |||
| 123 | prof_buffer = kzalloc(buffer_bytes, GFP_KERNEL); | 126 | prof_buffer = kzalloc(buffer_bytes, GFP_KERNEL); |
| 124 | if (prof_buffer) | 127 | if (prof_buffer) |
| 125 | return 0; | 128 | return 0; |
diff --git a/kernel/rcuclassic.c b/kernel/rcuclassic.c index bd5a9003497c..654c640a6b9c 100644 --- a/kernel/rcuclassic.c +++ b/kernel/rcuclassic.c | |||
| @@ -679,8 +679,8 @@ int rcu_needs_cpu(int cpu) | |||
| 679 | void rcu_check_callbacks(int cpu, int user) | 679 | void rcu_check_callbacks(int cpu, int user) |
| 680 | { | 680 | { |
| 681 | if (user || | 681 | if (user || |
| 682 | (idle_cpu(cpu) && !in_softirq() && | 682 | (idle_cpu(cpu) && rcu_scheduler_active && |
| 683 | hardirq_count() <= (1 << HARDIRQ_SHIFT))) { | 683 | !in_softirq() && hardirq_count() <= (1 << HARDIRQ_SHIFT))) { |
| 684 | 684 | ||
| 685 | /* | 685 | /* |
| 686 | * Get here if this CPU took its interrupt from user | 686 | * Get here if this CPU took its interrupt from user |
diff --git a/kernel/rcupdate.c b/kernel/rcupdate.c index d92a76a881aa..cae8a059cf47 100644 --- a/kernel/rcupdate.c +++ b/kernel/rcupdate.c | |||
| @@ -44,6 +44,7 @@ | |||
| 44 | #include <linux/cpu.h> | 44 | #include <linux/cpu.h> |
| 45 | #include <linux/mutex.h> | 45 | #include <linux/mutex.h> |
| 46 | #include <linux/module.h> | 46 | #include <linux/module.h> |
| 47 | #include <linux/kernel_stat.h> | ||
| 47 | 48 | ||
| 48 | enum rcu_barrier { | 49 | enum rcu_barrier { |
| 49 | RCU_BARRIER_STD, | 50 | RCU_BARRIER_STD, |
| @@ -55,6 +56,7 @@ static DEFINE_PER_CPU(struct rcu_head, rcu_barrier_head) = {NULL}; | |||
| 55 | static atomic_t rcu_barrier_cpu_count; | 56 | static atomic_t rcu_barrier_cpu_count; |
| 56 | static DEFINE_MUTEX(rcu_barrier_mutex); | 57 | static DEFINE_MUTEX(rcu_barrier_mutex); |
| 57 | static struct completion rcu_barrier_completion; | 58 | static struct completion rcu_barrier_completion; |
| 59 | int rcu_scheduler_active __read_mostly; | ||
| 58 | 60 | ||
| 59 | /* | 61 | /* |
| 60 | * Awaken the corresponding synchronize_rcu() instance now that a | 62 | * Awaken the corresponding synchronize_rcu() instance now that a |
| @@ -80,6 +82,10 @@ void wakeme_after_rcu(struct rcu_head *head) | |||
| 80 | void synchronize_rcu(void) | 82 | void synchronize_rcu(void) |
| 81 | { | 83 | { |
| 82 | struct rcu_synchronize rcu; | 84 | struct rcu_synchronize rcu; |
| 85 | |||
| 86 | if (rcu_blocking_is_gp()) | ||
| 87 | return; | ||
| 88 | |||
| 83 | init_completion(&rcu.completion); | 89 | init_completion(&rcu.completion); |
| 84 | /* Will wake me after RCU finished. */ | 90 | /* Will wake me after RCU finished. */ |
| 85 | call_rcu(&rcu.head, wakeme_after_rcu); | 91 | call_rcu(&rcu.head, wakeme_after_rcu); |
| @@ -175,3 +181,9 @@ void __init rcu_init(void) | |||
| 175 | __rcu_init(); | 181 | __rcu_init(); |
| 176 | } | 182 | } |
| 177 | 183 | ||
| 184 | void rcu_scheduler_starting(void) | ||
| 185 | { | ||
| 186 | WARN_ON(num_online_cpus() != 1); | ||
| 187 | WARN_ON(nr_context_switches() > 0); | ||
| 188 | rcu_scheduler_active = 1; | ||
| 189 | } | ||
diff --git a/kernel/rcupreempt.c b/kernel/rcupreempt.c index 33cfc50781f9..5d59e850fb71 100644 --- a/kernel/rcupreempt.c +++ b/kernel/rcupreempt.c | |||
| @@ -1181,6 +1181,9 @@ void __synchronize_sched(void) | |||
| 1181 | { | 1181 | { |
| 1182 | struct rcu_synchronize rcu; | 1182 | struct rcu_synchronize rcu; |
| 1183 | 1183 | ||
| 1184 | if (num_online_cpus() == 1) | ||
| 1185 | return; /* blocking is gp if only one CPU! */ | ||
| 1186 | |||
| 1184 | init_completion(&rcu.completion); | 1187 | init_completion(&rcu.completion); |
| 1185 | /* Will wake me after RCU finished. */ | 1188 | /* Will wake me after RCU finished. */ |
| 1186 | call_rcu_sched(&rcu.head, wakeme_after_rcu); | 1189 | call_rcu_sched(&rcu.head, wakeme_after_rcu); |
diff --git a/kernel/rcutree.c b/kernel/rcutree.c index b2fd602a6f6f..97ce31579ec0 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c | |||
| @@ -948,8 +948,8 @@ static void rcu_do_batch(struct rcu_data *rdp) | |||
| 948 | void rcu_check_callbacks(int cpu, int user) | 948 | void rcu_check_callbacks(int cpu, int user) |
| 949 | { | 949 | { |
| 950 | if (user || | 950 | if (user || |
| 951 | (idle_cpu(cpu) && !in_softirq() && | 951 | (idle_cpu(cpu) && rcu_scheduler_active && |
| 952 | hardirq_count() <= (1 << HARDIRQ_SHIFT))) { | 952 | !in_softirq() && hardirq_count() <= (1 << HARDIRQ_SHIFT))) { |
| 953 | 953 | ||
| 954 | /* | 954 | /* |
| 955 | * Get here if this CPU took its interrupt from user | 955 | * Get here if this CPU took its interrupt from user |
diff --git a/kernel/sched.c b/kernel/sched.c index 8ee437a5ec1d..8e2558c2ba67 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
| @@ -223,7 +223,7 @@ static void start_rt_bandwidth(struct rt_bandwidth *rt_b) | |||
| 223 | { | 223 | { |
| 224 | ktime_t now; | 224 | ktime_t now; |
| 225 | 225 | ||
| 226 | if (rt_bandwidth_enabled() && rt_b->rt_runtime == RUNTIME_INF) | 226 | if (!rt_bandwidth_enabled() || rt_b->rt_runtime == RUNTIME_INF) |
| 227 | return; | 227 | return; |
| 228 | 228 | ||
| 229 | if (hrtimer_active(&rt_b->rt_period_timer)) | 229 | if (hrtimer_active(&rt_b->rt_period_timer)) |
| @@ -2266,16 +2266,6 @@ static int try_to_wake_up(struct task_struct *p, unsigned int state, int sync) | |||
| 2266 | if (!sched_feat(SYNC_WAKEUPS)) | 2266 | if (!sched_feat(SYNC_WAKEUPS)) |
| 2267 | sync = 0; | 2267 | sync = 0; |
| 2268 | 2268 | ||
| 2269 | if (!sync) { | ||
| 2270 | if (current->se.avg_overlap < sysctl_sched_migration_cost && | ||
| 2271 | p->se.avg_overlap < sysctl_sched_migration_cost) | ||
| 2272 | sync = 1; | ||
| 2273 | } else { | ||
| 2274 | if (current->se.avg_overlap >= sysctl_sched_migration_cost || | ||
| 2275 | p->se.avg_overlap >= sysctl_sched_migration_cost) | ||
| 2276 | sync = 0; | ||
| 2277 | } | ||
| 2278 | |||
| 2279 | #ifdef CONFIG_SMP | 2269 | #ifdef CONFIG_SMP |
| 2280 | if (sched_feat(LB_WAKEUP_UPDATE)) { | 2270 | if (sched_feat(LB_WAKEUP_UPDATE)) { |
| 2281 | struct sched_domain *sd; | 2271 | struct sched_domain *sd; |
| @@ -3890,19 +3880,24 @@ int select_nohz_load_balancer(int stop_tick) | |||
| 3890 | int cpu = smp_processor_id(); | 3880 | int cpu = smp_processor_id(); |
| 3891 | 3881 | ||
| 3892 | if (stop_tick) { | 3882 | if (stop_tick) { |
| 3893 | cpumask_set_cpu(cpu, nohz.cpu_mask); | ||
| 3894 | cpu_rq(cpu)->in_nohz_recently = 1; | 3883 | cpu_rq(cpu)->in_nohz_recently = 1; |
| 3895 | 3884 | ||
| 3896 | /* | 3885 | if (!cpu_active(cpu)) { |
| 3897 | * If we are going offline and still the leader, give up! | 3886 | if (atomic_read(&nohz.load_balancer) != cpu) |
| 3898 | */ | 3887 | return 0; |
| 3899 | if (!cpu_active(cpu) && | 3888 | |
| 3900 | atomic_read(&nohz.load_balancer) == cpu) { | 3889 | /* |
| 3890 | * If we are going offline and still the leader, | ||
| 3891 | * give up! | ||
| 3892 | */ | ||
| 3901 | if (atomic_cmpxchg(&nohz.load_balancer, cpu, -1) != cpu) | 3893 | if (atomic_cmpxchg(&nohz.load_balancer, cpu, -1) != cpu) |
| 3902 | BUG(); | 3894 | BUG(); |
| 3895 | |||
| 3903 | return 0; | 3896 | return 0; |
| 3904 | } | 3897 | } |
| 3905 | 3898 | ||
| 3899 | cpumask_set_cpu(cpu, nohz.cpu_mask); | ||
| 3900 | |||
| 3906 | /* time for ilb owner also to sleep */ | 3901 | /* time for ilb owner also to sleep */ |
| 3907 | if (cpumask_weight(nohz.cpu_mask) == num_online_cpus()) { | 3902 | if (cpumask_weight(nohz.cpu_mask) == num_online_cpus()) { |
| 3908 | if (atomic_read(&nohz.load_balancer) == cpu) | 3903 | if (atomic_read(&nohz.load_balancer) == cpu) |
| @@ -6949,20 +6944,26 @@ static void free_rootdomain(struct root_domain *rd) | |||
| 6949 | 6944 | ||
| 6950 | static void rq_attach_root(struct rq *rq, struct root_domain *rd) | 6945 | static void rq_attach_root(struct rq *rq, struct root_domain *rd) |
| 6951 | { | 6946 | { |
| 6947 | struct root_domain *old_rd = NULL; | ||
| 6952 | unsigned long flags; | 6948 | unsigned long flags; |
| 6953 | 6949 | ||
| 6954 | spin_lock_irqsave(&rq->lock, flags); | 6950 | spin_lock_irqsave(&rq->lock, flags); |
| 6955 | 6951 | ||
| 6956 | if (rq->rd) { | 6952 | if (rq->rd) { |
| 6957 | struct root_domain *old_rd = rq->rd; | 6953 | old_rd = rq->rd; |
| 6958 | 6954 | ||
| 6959 | if (cpumask_test_cpu(rq->cpu, old_rd->online)) | 6955 | if (cpumask_test_cpu(rq->cpu, old_rd->online)) |
| 6960 | set_rq_offline(rq); | 6956 | set_rq_offline(rq); |
| 6961 | 6957 | ||
| 6962 | cpumask_clear_cpu(rq->cpu, old_rd->span); | 6958 | cpumask_clear_cpu(rq->cpu, old_rd->span); |
| 6963 | 6959 | ||
| 6964 | if (atomic_dec_and_test(&old_rd->refcount)) | 6960 | /* |
| 6965 | free_rootdomain(old_rd); | 6961 | * If we dont want to free the old_rt yet then |
| 6962 | * set old_rd to NULL to skip the freeing later | ||
| 6963 | * in this function: | ||
| 6964 | */ | ||
| 6965 | if (!atomic_dec_and_test(&old_rd->refcount)) | ||
| 6966 | old_rd = NULL; | ||
| 6966 | } | 6967 | } |
| 6967 | 6968 | ||
| 6968 | atomic_inc(&rd->refcount); | 6969 | atomic_inc(&rd->refcount); |
| @@ -6973,6 +6974,9 @@ static void rq_attach_root(struct rq *rq, struct root_domain *rd) | |||
| 6973 | set_rq_online(rq); | 6974 | set_rq_online(rq); |
| 6974 | 6975 | ||
| 6975 | spin_unlock_irqrestore(&rq->lock, flags); | 6976 | spin_unlock_irqrestore(&rq->lock, flags); |
| 6977 | |||
| 6978 | if (old_rd) | ||
| 6979 | free_rootdomain(old_rd); | ||
| 6976 | } | 6980 | } |
| 6977 | 6981 | ||
| 6978 | static int __init_refok init_rootdomain(struct root_domain *rd, bool bootmem) | 6982 | static int __init_refok init_rootdomain(struct root_domain *rd, bool bootmem) |
| @@ -9220,6 +9224,16 @@ static int sched_rt_global_constraints(void) | |||
| 9220 | 9224 | ||
| 9221 | return ret; | 9225 | return ret; |
| 9222 | } | 9226 | } |
| 9227 | |||
| 9228 | int sched_rt_can_attach(struct task_group *tg, struct task_struct *tsk) | ||
| 9229 | { | ||
| 9230 | /* Don't accept realtime tasks when there is no way for them to run */ | ||
| 9231 | if (rt_task(tsk) && tg->rt_bandwidth.rt_runtime == 0) | ||
| 9232 | return 0; | ||
| 9233 | |||
| 9234 | return 1; | ||
| 9235 | } | ||
| 9236 | |||
| 9223 | #else /* !CONFIG_RT_GROUP_SCHED */ | 9237 | #else /* !CONFIG_RT_GROUP_SCHED */ |
| 9224 | static int sched_rt_global_constraints(void) | 9238 | static int sched_rt_global_constraints(void) |
| 9225 | { | 9239 | { |
| @@ -9313,8 +9327,7 @@ cpu_cgroup_can_attach(struct cgroup_subsys *ss, struct cgroup *cgrp, | |||
| 9313 | struct task_struct *tsk) | 9327 | struct task_struct *tsk) |
| 9314 | { | 9328 | { |
| 9315 | #ifdef CONFIG_RT_GROUP_SCHED | 9329 | #ifdef CONFIG_RT_GROUP_SCHED |
| 9316 | /* Don't accept realtime tasks when there is no way for them to run */ | 9330 | if (!sched_rt_can_attach(cgroup_tg(cgrp), tsk)) |
| 9317 | if (rt_task(tsk) && cgroup_tg(cgrp)->rt_bandwidth.rt_runtime == 0) | ||
| 9318 | return -EINVAL; | 9331 | return -EINVAL; |
| 9319 | #else | 9332 | #else |
| 9320 | /* We don't support RT-tasks being in separate groups */ | 9333 | /* We don't support RT-tasks being in separate groups */ |
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index a7e50ba185ac..0566f2a03c42 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c | |||
| @@ -1191,15 +1191,20 @@ wake_affine(struct sched_domain *this_sd, struct rq *this_rq, | |||
| 1191 | int idx, unsigned long load, unsigned long this_load, | 1191 | int idx, unsigned long load, unsigned long this_load, |
| 1192 | unsigned int imbalance) | 1192 | unsigned int imbalance) |
| 1193 | { | 1193 | { |
| 1194 | struct task_struct *curr = this_rq->curr; | ||
| 1195 | struct task_group *tg; | ||
| 1194 | unsigned long tl = this_load; | 1196 | unsigned long tl = this_load; |
| 1195 | unsigned long tl_per_task; | 1197 | unsigned long tl_per_task; |
| 1196 | struct task_group *tg; | ||
| 1197 | unsigned long weight; | 1198 | unsigned long weight; |
| 1198 | int balanced; | 1199 | int balanced; |
| 1199 | 1200 | ||
| 1200 | if (!(this_sd->flags & SD_WAKE_AFFINE) || !sched_feat(AFFINE_WAKEUPS)) | 1201 | if (!(this_sd->flags & SD_WAKE_AFFINE) || !sched_feat(AFFINE_WAKEUPS)) |
| 1201 | return 0; | 1202 | return 0; |
| 1202 | 1203 | ||
| 1204 | if (sync && (curr->se.avg_overlap > sysctl_sched_migration_cost || | ||
| 1205 | p->se.avg_overlap > sysctl_sched_migration_cost)) | ||
| 1206 | sync = 0; | ||
| 1207 | |||
| 1203 | /* | 1208 | /* |
| 1204 | * If sync wakeup then subtract the (maximum possible) | 1209 | * If sync wakeup then subtract the (maximum possible) |
| 1205 | * effect of the currently running task from the load | 1210 | * effect of the currently running task from the load |
| @@ -1426,7 +1431,9 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int sync) | |||
| 1426 | if (!sched_feat(WAKEUP_PREEMPT)) | 1431 | if (!sched_feat(WAKEUP_PREEMPT)) |
| 1427 | return; | 1432 | return; |
| 1428 | 1433 | ||
| 1429 | if (sched_feat(WAKEUP_OVERLAP) && sync) { | 1434 | if (sched_feat(WAKEUP_OVERLAP) && (sync || |
| 1435 | (se->avg_overlap < sysctl_sched_migration_cost && | ||
| 1436 | pse->avg_overlap < sysctl_sched_migration_cost))) { | ||
| 1430 | resched_task(curr); | 1437 | resched_task(curr); |
| 1431 | return; | 1438 | return; |
| 1432 | } | 1439 | } |
diff --git a/kernel/sched_stats.h b/kernel/sched_stats.h index 8ab0cef8ecab..a8f93dd374e1 100644 --- a/kernel/sched_stats.h +++ b/kernel/sched_stats.h | |||
| @@ -296,19 +296,21 @@ sched_info_switch(struct task_struct *prev, struct task_struct *next) | |||
| 296 | static inline void account_group_user_time(struct task_struct *tsk, | 296 | static inline void account_group_user_time(struct task_struct *tsk, |
| 297 | cputime_t cputime) | 297 | cputime_t cputime) |
| 298 | { | 298 | { |
| 299 | struct task_cputime *times; | 299 | struct thread_group_cputimer *cputimer; |
| 300 | struct signal_struct *sig; | ||
| 301 | 300 | ||
| 302 | /* tsk == current, ensure it is safe to use ->signal */ | 301 | /* tsk == current, ensure it is safe to use ->signal */ |
| 303 | if (unlikely(tsk->exit_state)) | 302 | if (unlikely(tsk->exit_state)) |
| 304 | return; | 303 | return; |
| 305 | 304 | ||
| 306 | sig = tsk->signal; | 305 | cputimer = &tsk->signal->cputimer; |
| 307 | times = &sig->cputime.totals; | ||
| 308 | 306 | ||
| 309 | spin_lock(×->lock); | 307 | if (!cputimer->running) |
| 310 | times->utime = cputime_add(times->utime, cputime); | 308 | return; |
| 311 | spin_unlock(×->lock); | 309 | |
| 310 | spin_lock(&cputimer->lock); | ||
| 311 | cputimer->cputime.utime = | ||
| 312 | cputime_add(cputimer->cputime.utime, cputime); | ||
| 313 | spin_unlock(&cputimer->lock); | ||
| 312 | } | 314 | } |
| 313 | 315 | ||
| 314 | /** | 316 | /** |
| @@ -324,19 +326,21 @@ static inline void account_group_user_time(struct task_struct *tsk, | |||
| 324 | static inline void account_group_system_time(struct task_struct *tsk, | 326 | static inline void account_group_system_time(struct task_struct *tsk, |
| 325 | cputime_t cputime) | 327 | cputime_t cputime) |
| 326 | { | 328 | { |
| 327 | struct task_cputime *times; | 329 | struct thread_group_cputimer *cputimer; |
| 328 | struct signal_struct *sig; | ||
| 329 | 330 | ||
| 330 | /* tsk == current, ensure it is safe to use ->signal */ | 331 | /* tsk == current, ensure it is safe to use ->signal */ |
| 331 | if (unlikely(tsk->exit_state)) | 332 | if (unlikely(tsk->exit_state)) |
| 332 | return; | 333 | return; |
| 333 | 334 | ||
| 334 | sig = tsk->signal; | 335 | cputimer = &tsk->signal->cputimer; |
| 335 | times = &sig->cputime.totals; | 336 | |
| 337 | if (!cputimer->running) | ||
| 338 | return; | ||
| 336 | 339 | ||
| 337 | spin_lock(×->lock); | 340 | spin_lock(&cputimer->lock); |
| 338 | times->stime = cputime_add(times->stime, cputime); | 341 | cputimer->cputime.stime = |
| 339 | spin_unlock(×->lock); | 342 | cputime_add(cputimer->cputime.stime, cputime); |
| 343 | spin_unlock(&cputimer->lock); | ||
| 340 | } | 344 | } |
| 341 | 345 | ||
| 342 | /** | 346 | /** |
| @@ -352,7 +356,7 @@ static inline void account_group_system_time(struct task_struct *tsk, | |||
| 352 | static inline void account_group_exec_runtime(struct task_struct *tsk, | 356 | static inline void account_group_exec_runtime(struct task_struct *tsk, |
| 353 | unsigned long long ns) | 357 | unsigned long long ns) |
| 354 | { | 358 | { |
| 355 | struct task_cputime *times; | 359 | struct thread_group_cputimer *cputimer; |
| 356 | struct signal_struct *sig; | 360 | struct signal_struct *sig; |
| 357 | 361 | ||
| 358 | sig = tsk->signal; | 362 | sig = tsk->signal; |
| @@ -361,9 +365,12 @@ static inline void account_group_exec_runtime(struct task_struct *tsk, | |||
| 361 | if (unlikely(!sig)) | 365 | if (unlikely(!sig)) |
| 362 | return; | 366 | return; |
| 363 | 367 | ||
| 364 | times = &sig->cputime.totals; | 368 | cputimer = &sig->cputimer; |
| 369 | |||
| 370 | if (!cputimer->running) | ||
| 371 | return; | ||
| 365 | 372 | ||
| 366 | spin_lock(×->lock); | 373 | spin_lock(&cputimer->lock); |
| 367 | times->sum_exec_runtime += ns; | 374 | cputimer->cputime.sum_exec_runtime += ns; |
| 368 | spin_unlock(×->lock); | 375 | spin_unlock(&cputimer->lock); |
| 369 | } | 376 | } |
diff --git a/kernel/seccomp.c b/kernel/seccomp.c index ad64fcb731f2..57d4b13b631d 100644 --- a/kernel/seccomp.c +++ b/kernel/seccomp.c | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | 8 | ||
| 9 | #include <linux/seccomp.h> | 9 | #include <linux/seccomp.h> |
| 10 | #include <linux/sched.h> | 10 | #include <linux/sched.h> |
| 11 | #include <linux/compat.h> | ||
| 11 | 12 | ||
| 12 | /* #define SECCOMP_DEBUG 1 */ | 13 | /* #define SECCOMP_DEBUG 1 */ |
| 13 | #define NR_SECCOMP_MODES 1 | 14 | #define NR_SECCOMP_MODES 1 |
| @@ -22,7 +23,7 @@ static int mode1_syscalls[] = { | |||
| 22 | 0, /* null terminated */ | 23 | 0, /* null terminated */ |
| 23 | }; | 24 | }; |
| 24 | 25 | ||
| 25 | #ifdef TIF_32BIT | 26 | #ifdef CONFIG_COMPAT |
| 26 | static int mode1_syscalls_32[] = { | 27 | static int mode1_syscalls_32[] = { |
| 27 | __NR_seccomp_read_32, __NR_seccomp_write_32, __NR_seccomp_exit_32, __NR_seccomp_sigreturn_32, | 28 | __NR_seccomp_read_32, __NR_seccomp_write_32, __NR_seccomp_exit_32, __NR_seccomp_sigreturn_32, |
| 28 | 0, /* null terminated */ | 29 | 0, /* null terminated */ |
| @@ -37,8 +38,8 @@ void __secure_computing(int this_syscall) | |||
| 37 | switch (mode) { | 38 | switch (mode) { |
| 38 | case 1: | 39 | case 1: |
| 39 | syscall = mode1_syscalls; | 40 | syscall = mode1_syscalls; |
| 40 | #ifdef TIF_32BIT | 41 | #ifdef CONFIG_COMPAT |
| 41 | if (test_thread_flag(TIF_32BIT)) | 42 | if (is_compat_task()) |
| 42 | syscall = mode1_syscalls_32; | 43 | syscall = mode1_syscalls_32; |
| 43 | #endif | 44 | #endif |
| 44 | do { | 45 | do { |
diff --git a/kernel/signal.c b/kernel/signal.c index b6b36768b758..2a74fe87c0dd 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
| @@ -1367,7 +1367,6 @@ int do_notify_parent(struct task_struct *tsk, int sig) | |||
| 1367 | struct siginfo info; | 1367 | struct siginfo info; |
| 1368 | unsigned long flags; | 1368 | unsigned long flags; |
| 1369 | struct sighand_struct *psig; | 1369 | struct sighand_struct *psig; |
| 1370 | struct task_cputime cputime; | ||
| 1371 | int ret = sig; | 1370 | int ret = sig; |
| 1372 | 1371 | ||
| 1373 | BUG_ON(sig == -1); | 1372 | BUG_ON(sig == -1); |
| @@ -1397,9 +1396,10 @@ int do_notify_parent(struct task_struct *tsk, int sig) | |||
| 1397 | info.si_uid = __task_cred(tsk)->uid; | 1396 | info.si_uid = __task_cred(tsk)->uid; |
| 1398 | rcu_read_unlock(); | 1397 | rcu_read_unlock(); |
| 1399 | 1398 | ||
| 1400 | thread_group_cputime(tsk, &cputime); | 1399 | info.si_utime = cputime_to_clock_t(cputime_add(tsk->utime, |
| 1401 | info.si_utime = cputime_to_jiffies(cputime.utime); | 1400 | tsk->signal->utime)); |
| 1402 | info.si_stime = cputime_to_jiffies(cputime.stime); | 1401 | info.si_stime = cputime_to_clock_t(cputime_add(tsk->stime, |
| 1402 | tsk->signal->stime)); | ||
| 1403 | 1403 | ||
| 1404 | info.si_status = tsk->exit_code & 0x7f; | 1404 | info.si_status = tsk->exit_code & 0x7f; |
| 1405 | if (tsk->exit_code & 0x80) | 1405 | if (tsk->exit_code & 0x80) |
diff --git a/kernel/softirq.c b/kernel/softirq.c index bdbe9de9cd8d..9041ea7948fe 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c | |||
| @@ -626,6 +626,7 @@ static int ksoftirqd(void * __bind_cpu) | |||
| 626 | preempt_enable_no_resched(); | 626 | preempt_enable_no_resched(); |
| 627 | cond_resched(); | 627 | cond_resched(); |
| 628 | preempt_disable(); | 628 | preempt_disable(); |
| 629 | rcu_qsctr_inc((long)__bind_cpu); | ||
| 629 | } | 630 | } |
| 630 | preempt_enable(); | 631 | preempt_enable(); |
| 631 | set_current_state(TASK_INTERRUPTIBLE); | 632 | set_current_state(TASK_INTERRUPTIBLE); |
diff --git a/kernel/sys.c b/kernel/sys.c index f145c415bc16..37f458e6882a 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
| @@ -559,7 +559,7 @@ error: | |||
| 559 | abort_creds(new); | 559 | abort_creds(new); |
| 560 | return retval; | 560 | return retval; |
| 561 | } | 561 | } |
| 562 | 562 | ||
| 563 | /* | 563 | /* |
| 564 | * change the user struct in a credentials set to match the new UID | 564 | * change the user struct in a credentials set to match the new UID |
| 565 | */ | 565 | */ |
| @@ -571,6 +571,11 @@ static int set_user(struct cred *new) | |||
| 571 | if (!new_user) | 571 | if (!new_user) |
| 572 | return -EAGAIN; | 572 | return -EAGAIN; |
| 573 | 573 | ||
| 574 | if (!task_can_switch_user(new_user, current)) { | ||
| 575 | free_uid(new_user); | ||
| 576 | return -EINVAL; | ||
| 577 | } | ||
| 578 | |||
| 574 | if (atomic_read(&new_user->processes) >= | 579 | if (atomic_read(&new_user->processes) >= |
| 575 | current->signal->rlim[RLIMIT_NPROC].rlim_cur && | 580 | current->signal->rlim[RLIMIT_NPROC].rlim_cur && |
| 576 | new_user != INIT_USER) { | 581 | new_user != INIT_USER) { |
| @@ -631,10 +636,11 @@ SYSCALL_DEFINE2(setreuid, uid_t, ruid, uid_t, euid) | |||
| 631 | goto error; | 636 | goto error; |
| 632 | } | 637 | } |
| 633 | 638 | ||
| 634 | retval = -EAGAIN; | 639 | if (new->uid != old->uid) { |
| 635 | if (new->uid != old->uid && set_user(new) < 0) | 640 | retval = set_user(new); |
| 636 | goto error; | 641 | if (retval < 0) |
| 637 | 642 | goto error; | |
| 643 | } | ||
| 638 | if (ruid != (uid_t) -1 || | 644 | if (ruid != (uid_t) -1 || |
| 639 | (euid != (uid_t) -1 && euid != old->uid)) | 645 | (euid != (uid_t) -1 && euid != old->uid)) |
| 640 | new->suid = new->euid; | 646 | new->suid = new->euid; |
| @@ -680,9 +686,10 @@ SYSCALL_DEFINE1(setuid, uid_t, uid) | |||
| 680 | retval = -EPERM; | 686 | retval = -EPERM; |
| 681 | if (capable(CAP_SETUID)) { | 687 | if (capable(CAP_SETUID)) { |
| 682 | new->suid = new->uid = uid; | 688 | new->suid = new->uid = uid; |
| 683 | if (uid != old->uid && set_user(new) < 0) { | 689 | if (uid != old->uid) { |
| 684 | retval = -EAGAIN; | 690 | retval = set_user(new); |
| 685 | goto error; | 691 | if (retval < 0) |
| 692 | goto error; | ||
| 686 | } | 693 | } |
| 687 | } else if (uid != old->uid && uid != new->suid) { | 694 | } else if (uid != old->uid && uid != new->suid) { |
| 688 | goto error; | 695 | goto error; |
| @@ -734,11 +741,13 @@ SYSCALL_DEFINE3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid) | |||
| 734 | goto error; | 741 | goto error; |
| 735 | } | 742 | } |
| 736 | 743 | ||
| 737 | retval = -EAGAIN; | ||
| 738 | if (ruid != (uid_t) -1) { | 744 | if (ruid != (uid_t) -1) { |
| 739 | new->uid = ruid; | 745 | new->uid = ruid; |
| 740 | if (ruid != old->uid && set_user(new) < 0) | 746 | if (ruid != old->uid) { |
| 741 | goto error; | 747 | retval = set_user(new); |
| 748 | if (retval < 0) | ||
| 749 | goto error; | ||
| 750 | } | ||
| 742 | } | 751 | } |
| 743 | if (euid != (uid_t) -1) | 752 | if (euid != (uid_t) -1) |
| 744 | new->euid = euid; | 753 | new->euid = euid; |
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 790f9d785663..c5ef44ff850f 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
| @@ -101,6 +101,7 @@ static int two = 2; | |||
| 101 | 101 | ||
| 102 | static int zero; | 102 | static int zero; |
| 103 | static int one = 1; | 103 | static int one = 1; |
| 104 | static unsigned long one_ul = 1; | ||
| 104 | static int one_hundred = 100; | 105 | static int one_hundred = 100; |
| 105 | 106 | ||
| 106 | /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */ | 107 | /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */ |
| @@ -974,7 +975,7 @@ static struct ctl_table vm_table[] = { | |||
| 974 | .mode = 0644, | 975 | .mode = 0644, |
| 975 | .proc_handler = &dirty_background_bytes_handler, | 976 | .proc_handler = &dirty_background_bytes_handler, |
| 976 | .strategy = &sysctl_intvec, | 977 | .strategy = &sysctl_intvec, |
| 977 | .extra1 = &one, | 978 | .extra1 = &one_ul, |
| 978 | }, | 979 | }, |
| 979 | { | 980 | { |
| 980 | .ctl_name = VM_DIRTY_RATIO, | 981 | .ctl_name = VM_DIRTY_RATIO, |
| @@ -995,7 +996,7 @@ static struct ctl_table vm_table[] = { | |||
| 995 | .mode = 0644, | 996 | .mode = 0644, |
| 996 | .proc_handler = &dirty_bytes_handler, | 997 | .proc_handler = &dirty_bytes_handler, |
| 997 | .strategy = &sysctl_intvec, | 998 | .strategy = &sysctl_intvec, |
| 998 | .extra1 = &one, | 999 | .extra1 = &one_ul, |
| 999 | }, | 1000 | }, |
| 1000 | { | 1001 | { |
| 1001 | .procname = "dirty_writeback_centisecs", | 1002 | .procname = "dirty_writeback_centisecs", |
diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig index e2a4ff6fc3a6..34e707e5ab87 100644 --- a/kernel/trace/Kconfig +++ b/kernel/trace/Kconfig | |||
| @@ -52,6 +52,7 @@ config FUNCTION_TRACER | |||
| 52 | depends on HAVE_FUNCTION_TRACER | 52 | depends on HAVE_FUNCTION_TRACER |
| 53 | depends on DEBUG_KERNEL | 53 | depends on DEBUG_KERNEL |
| 54 | select FRAME_POINTER | 54 | select FRAME_POINTER |
| 55 | select KALLSYMS | ||
| 55 | select TRACING | 56 | select TRACING |
| 56 | select CONTEXT_SWITCH_TRACER | 57 | select CONTEXT_SWITCH_TRACER |
| 57 | help | 58 | help |
| @@ -238,6 +239,7 @@ config STACK_TRACER | |||
| 238 | depends on DEBUG_KERNEL | 239 | depends on DEBUG_KERNEL |
| 239 | select FUNCTION_TRACER | 240 | select FUNCTION_TRACER |
| 240 | select STACKTRACE | 241 | select STACKTRACE |
| 242 | select KALLSYMS | ||
| 241 | help | 243 | help |
| 242 | This special tracer records the maximum stack footprint of the | 244 | This special tracer records the maximum stack footprint of the |
| 243 | kernel and displays it in debugfs/tracing/stack_trace. | 245 | kernel and displays it in debugfs/tracing/stack_trace. |
| @@ -302,4 +304,27 @@ config FTRACE_STARTUP_TEST | |||
| 302 | functioning properly. It will do tests on all the configured | 304 | functioning properly. It will do tests on all the configured |
| 303 | tracers of ftrace. | 305 | tracers of ftrace. |
| 304 | 306 | ||
| 307 | config MMIOTRACE | ||
| 308 | bool "Memory mapped IO tracing" | ||
| 309 | depends on HAVE_MMIOTRACE_SUPPORT && DEBUG_KERNEL && PCI | ||
| 310 | select TRACING | ||
| 311 | help | ||
| 312 | Mmiotrace traces Memory Mapped I/O access and is meant for | ||
| 313 | debugging and reverse engineering. It is called from the ioremap | ||
| 314 | implementation and works via page faults. Tracing is disabled by | ||
| 315 | default and can be enabled at run-time. | ||
| 316 | |||
| 317 | See Documentation/tracers/mmiotrace.txt. | ||
| 318 | If you are not helping to develop drivers, say N. | ||
| 319 | |||
| 320 | config MMIOTRACE_TEST | ||
| 321 | tristate "Test module for mmiotrace" | ||
| 322 | depends on MMIOTRACE && m | ||
| 323 | help | ||
| 324 | This is a dumb module for testing mmiotrace. It is very dangerous | ||
| 325 | as it will write garbage to IO memory starting at a given address. | ||
| 326 | However, it should be safe to use on e.g. unused portion of VRAM. | ||
| 327 | |||
| 328 | Say N, unless you absolutely know what you are doing. | ||
| 329 | |||
| 305 | endmenu | 330 | endmenu |
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index 9a236ffe2aa4..fdf913dfc7e8 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c | |||
| @@ -2033,7 +2033,7 @@ free: | |||
| 2033 | static int start_graph_tracing(void) | 2033 | static int start_graph_tracing(void) |
| 2034 | { | 2034 | { |
| 2035 | struct ftrace_ret_stack **ret_stack_list; | 2035 | struct ftrace_ret_stack **ret_stack_list; |
| 2036 | int ret; | 2036 | int ret, cpu; |
| 2037 | 2037 | ||
| 2038 | ret_stack_list = kmalloc(FTRACE_RETSTACK_ALLOC_SIZE * | 2038 | ret_stack_list = kmalloc(FTRACE_RETSTACK_ALLOC_SIZE * |
| 2039 | sizeof(struct ftrace_ret_stack *), | 2039 | sizeof(struct ftrace_ret_stack *), |
| @@ -2042,6 +2042,10 @@ static int start_graph_tracing(void) | |||
| 2042 | if (!ret_stack_list) | 2042 | if (!ret_stack_list) |
| 2043 | return -ENOMEM; | 2043 | return -ENOMEM; |
| 2044 | 2044 | ||
| 2045 | /* The cpu_boot init_task->ret_stack will never be freed */ | ||
| 2046 | for_each_online_cpu(cpu) | ||
| 2047 | ftrace_graph_init_task(idle_task(cpu)); | ||
| 2048 | |||
| 2045 | do { | 2049 | do { |
| 2046 | ret = alloc_retstack_tasklist(ret_stack_list); | 2050 | ret = alloc_retstack_tasklist(ret_stack_list); |
| 2047 | } while (ret == -EAGAIN); | 2051 | } while (ret == -EAGAIN); |
diff --git a/kernel/trace/trace_mmiotrace.c b/kernel/trace/trace_mmiotrace.c index fffcb069f1dc..80e503ef6136 100644 --- a/kernel/trace/trace_mmiotrace.c +++ b/kernel/trace/trace_mmiotrace.c | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #include <linux/kernel.h> | 9 | #include <linux/kernel.h> |
| 10 | #include <linux/mmiotrace.h> | 10 | #include <linux/mmiotrace.h> |
| 11 | #include <linux/pci.h> | 11 | #include <linux/pci.h> |
| 12 | #include <asm/atomic.h> | ||
| 12 | 13 | ||
| 13 | #include "trace.h" | 14 | #include "trace.h" |
| 14 | 15 | ||
| @@ -19,6 +20,7 @@ struct header_iter { | |||
| 19 | static struct trace_array *mmio_trace_array; | 20 | static struct trace_array *mmio_trace_array; |
| 20 | static bool overrun_detected; | 21 | static bool overrun_detected; |
| 21 | static unsigned long prev_overruns; | 22 | static unsigned long prev_overruns; |
| 23 | static atomic_t dropped_count; | ||
| 22 | 24 | ||
| 23 | static void mmio_reset_data(struct trace_array *tr) | 25 | static void mmio_reset_data(struct trace_array *tr) |
| 24 | { | 26 | { |
| @@ -121,11 +123,11 @@ static void mmio_close(struct trace_iterator *iter) | |||
| 121 | 123 | ||
| 122 | static unsigned long count_overruns(struct trace_iterator *iter) | 124 | static unsigned long count_overruns(struct trace_iterator *iter) |
| 123 | { | 125 | { |
| 124 | unsigned long cnt = 0; | 126 | unsigned long cnt = atomic_xchg(&dropped_count, 0); |
| 125 | unsigned long over = ring_buffer_overruns(iter->tr->buffer); | 127 | unsigned long over = ring_buffer_overruns(iter->tr->buffer); |
| 126 | 128 | ||
| 127 | if (over > prev_overruns) | 129 | if (over > prev_overruns) |
| 128 | cnt = over - prev_overruns; | 130 | cnt += over - prev_overruns; |
| 129 | prev_overruns = over; | 131 | prev_overruns = over; |
| 130 | return cnt; | 132 | return cnt; |
| 131 | } | 133 | } |
| @@ -310,8 +312,10 @@ static void __trace_mmiotrace_rw(struct trace_array *tr, | |||
| 310 | 312 | ||
| 311 | event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry), | 313 | event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry), |
| 312 | &irq_flags); | 314 | &irq_flags); |
| 313 | if (!event) | 315 | if (!event) { |
| 316 | atomic_inc(&dropped_count); | ||
| 314 | return; | 317 | return; |
| 318 | } | ||
| 315 | entry = ring_buffer_event_data(event); | 319 | entry = ring_buffer_event_data(event); |
| 316 | tracing_generic_entry_update(&entry->ent, 0, preempt_count()); | 320 | tracing_generic_entry_update(&entry->ent, 0, preempt_count()); |
| 317 | entry->ent.type = TRACE_MMIO_RW; | 321 | entry->ent.type = TRACE_MMIO_RW; |
| @@ -338,8 +342,10 @@ static void __trace_mmiotrace_map(struct trace_array *tr, | |||
| 338 | 342 | ||
| 339 | event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry), | 343 | event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry), |
| 340 | &irq_flags); | 344 | &irq_flags); |
| 341 | if (!event) | 345 | if (!event) { |
| 346 | atomic_inc(&dropped_count); | ||
| 342 | return; | 347 | return; |
| 348 | } | ||
| 343 | entry = ring_buffer_event_data(event); | 349 | entry = ring_buffer_event_data(event); |
| 344 | tracing_generic_entry_update(&entry->ent, 0, preempt_count()); | 350 | tracing_generic_entry_update(&entry->ent, 0, preempt_count()); |
| 345 | entry->ent.type = TRACE_MMIO_MAP; | 351 | entry->ent.type = TRACE_MMIO_MAP; |
diff --git a/kernel/trace/trace_selftest.c b/kernel/trace/trace_selftest.c index 88c8eb70f54a..bc8e80a86bca 100644 --- a/kernel/trace/trace_selftest.c +++ b/kernel/trace/trace_selftest.c | |||
| @@ -23,10 +23,20 @@ static int trace_test_buffer_cpu(struct trace_array *tr, int cpu) | |||
| 23 | { | 23 | { |
| 24 | struct ring_buffer_event *event; | 24 | struct ring_buffer_event *event; |
| 25 | struct trace_entry *entry; | 25 | struct trace_entry *entry; |
| 26 | unsigned int loops = 0; | ||
| 26 | 27 | ||
| 27 | while ((event = ring_buffer_consume(tr->buffer, cpu, NULL))) { | 28 | while ((event = ring_buffer_consume(tr->buffer, cpu, NULL))) { |
| 28 | entry = ring_buffer_event_data(event); | 29 | entry = ring_buffer_event_data(event); |
| 29 | 30 | ||
| 31 | /* | ||
| 32 | * The ring buffer is a size of trace_buf_size, if | ||
| 33 | * we loop more than the size, there's something wrong | ||
| 34 | * with the ring buffer. | ||
| 35 | */ | ||
| 36 | if (loops++ > trace_buf_size) { | ||
| 37 | printk(KERN_CONT ".. bad ring buffer "); | ||
| 38 | goto failed; | ||
| 39 | } | ||
| 30 | if (!trace_valid_entry(entry)) { | 40 | if (!trace_valid_entry(entry)) { |
| 31 | printk(KERN_CONT ".. invalid entry %d ", | 41 | printk(KERN_CONT ".. invalid entry %d ", |
| 32 | entry->type); | 42 | entry->type); |
| @@ -57,11 +67,20 @@ static int trace_test_buffer(struct trace_array *tr, unsigned long *count) | |||
| 57 | 67 | ||
| 58 | cnt = ring_buffer_entries(tr->buffer); | 68 | cnt = ring_buffer_entries(tr->buffer); |
| 59 | 69 | ||
| 70 | /* | ||
| 71 | * The trace_test_buffer_cpu runs a while loop to consume all data. | ||
| 72 | * If the calling tracer is broken, and is constantly filling | ||
| 73 | * the buffer, this will run forever, and hard lock the box. | ||
| 74 | * We disable the ring buffer while we do this test to prevent | ||
| 75 | * a hard lock up. | ||
| 76 | */ | ||
| 77 | tracing_off(); | ||
| 60 | for_each_possible_cpu(cpu) { | 78 | for_each_possible_cpu(cpu) { |
| 61 | ret = trace_test_buffer_cpu(tr, cpu); | 79 | ret = trace_test_buffer_cpu(tr, cpu); |
| 62 | if (ret) | 80 | if (ret) |
| 63 | break; | 81 | break; |
| 64 | } | 82 | } |
| 83 | tracing_on(); | ||
| 65 | __raw_spin_unlock(&ftrace_max_lock); | 84 | __raw_spin_unlock(&ftrace_max_lock); |
| 66 | local_irq_restore(flags); | 85 | local_irq_restore(flags); |
| 67 | 86 | ||
diff --git a/kernel/tsacct.c b/kernel/tsacct.c index 43f891b05a4b..00d59d048edf 100644 --- a/kernel/tsacct.c +++ b/kernel/tsacct.c | |||
| @@ -122,8 +122,10 @@ void acct_update_integrals(struct task_struct *tsk) | |||
| 122 | if (likely(tsk->mm)) { | 122 | if (likely(tsk->mm)) { |
| 123 | cputime_t time, dtime; | 123 | cputime_t time, dtime; |
| 124 | struct timeval value; | 124 | struct timeval value; |
| 125 | unsigned long flags; | ||
| 125 | u64 delta; | 126 | u64 delta; |
| 126 | 127 | ||
| 128 | local_irq_save(flags); | ||
| 127 | time = tsk->stime + tsk->utime; | 129 | time = tsk->stime + tsk->utime; |
| 128 | dtime = cputime_sub(time, tsk->acct_timexpd); | 130 | dtime = cputime_sub(time, tsk->acct_timexpd); |
| 129 | jiffies_to_timeval(cputime_to_jiffies(dtime), &value); | 131 | jiffies_to_timeval(cputime_to_jiffies(dtime), &value); |
| @@ -131,10 +133,12 @@ void acct_update_integrals(struct task_struct *tsk) | |||
| 131 | delta = delta * USEC_PER_SEC + value.tv_usec; | 133 | delta = delta * USEC_PER_SEC + value.tv_usec; |
| 132 | 134 | ||
| 133 | if (delta == 0) | 135 | if (delta == 0) |
| 134 | return; | 136 | goto out; |
| 135 | tsk->acct_timexpd = time; | 137 | tsk->acct_timexpd = time; |
| 136 | tsk->acct_rss_mem1 += delta * get_mm_rss(tsk->mm); | 138 | tsk->acct_rss_mem1 += delta * get_mm_rss(tsk->mm); |
| 137 | tsk->acct_vm_mem1 += delta * tsk->mm->total_vm; | 139 | tsk->acct_vm_mem1 += delta * tsk->mm->total_vm; |
| 140 | out: | ||
| 141 | local_irq_restore(flags); | ||
| 138 | } | 142 | } |
| 139 | } | 143 | } |
| 140 | 144 | ||
diff --git a/kernel/user.c b/kernel/user.c index 477b6660f447..fbb300e6191f 100644 --- a/kernel/user.c +++ b/kernel/user.c | |||
| @@ -72,6 +72,7 @@ static void uid_hash_insert(struct user_struct *up, struct hlist_head *hashent) | |||
| 72 | static void uid_hash_remove(struct user_struct *up) | 72 | static void uid_hash_remove(struct user_struct *up) |
| 73 | { | 73 | { |
| 74 | hlist_del_init(&up->uidhash_node); | 74 | hlist_del_init(&up->uidhash_node); |
| 75 | put_user_ns(up->user_ns); | ||
| 75 | } | 76 | } |
| 76 | 77 | ||
| 77 | static struct user_struct *uid_hash_find(uid_t uid, struct hlist_head *hashent) | 78 | static struct user_struct *uid_hash_find(uid_t uid, struct hlist_head *hashent) |
| @@ -285,14 +286,12 @@ int __init uids_sysfs_init(void) | |||
| 285 | /* work function to remove sysfs directory for a user and free up | 286 | /* work function to remove sysfs directory for a user and free up |
| 286 | * corresponding structures. | 287 | * corresponding structures. |
| 287 | */ | 288 | */ |
| 288 | static void remove_user_sysfs_dir(struct work_struct *w) | 289 | static void cleanup_user_struct(struct work_struct *w) |
| 289 | { | 290 | { |
| 290 | struct user_struct *up = container_of(w, struct user_struct, work); | 291 | struct user_struct *up = container_of(w, struct user_struct, work); |
| 291 | unsigned long flags; | 292 | unsigned long flags; |
| 292 | int remove_user = 0; | 293 | int remove_user = 0; |
| 293 | 294 | ||
| 294 | if (up->user_ns != &init_user_ns) | ||
| 295 | return; | ||
| 296 | /* Make uid_hash_remove() + sysfs_remove_file() + kobject_del() | 295 | /* Make uid_hash_remove() + sysfs_remove_file() + kobject_del() |
| 297 | * atomic. | 296 | * atomic. |
| 298 | */ | 297 | */ |
| @@ -311,9 +310,11 @@ static void remove_user_sysfs_dir(struct work_struct *w) | |||
| 311 | if (!remove_user) | 310 | if (!remove_user) |
| 312 | goto done; | 311 | goto done; |
| 313 | 312 | ||
| 314 | kobject_uevent(&up->kobj, KOBJ_REMOVE); | 313 | if (up->user_ns == &init_user_ns) { |
| 315 | kobject_del(&up->kobj); | 314 | kobject_uevent(&up->kobj, KOBJ_REMOVE); |
| 316 | kobject_put(&up->kobj); | 315 | kobject_del(&up->kobj); |
| 316 | kobject_put(&up->kobj); | ||
| 317 | } | ||
| 317 | 318 | ||
| 318 | sched_destroy_user(up); | 319 | sched_destroy_user(up); |
| 319 | key_put(up->uid_keyring); | 320 | key_put(up->uid_keyring); |
| @@ -334,8 +335,7 @@ static void free_user(struct user_struct *up, unsigned long flags) | |||
| 334 | atomic_inc(&up->__count); | 335 | atomic_inc(&up->__count); |
| 335 | spin_unlock_irqrestore(&uidhash_lock, flags); | 336 | spin_unlock_irqrestore(&uidhash_lock, flags); |
| 336 | 337 | ||
| 337 | put_user_ns(up->user_ns); | 338 | INIT_WORK(&up->work, cleanup_user_struct); |
| 338 | INIT_WORK(&up->work, remove_user_sysfs_dir); | ||
| 339 | schedule_work(&up->work); | 339 | schedule_work(&up->work); |
| 340 | } | 340 | } |
| 341 | 341 | ||
| @@ -357,12 +357,29 @@ static void free_user(struct user_struct *up, unsigned long flags) | |||
| 357 | sched_destroy_user(up); | 357 | sched_destroy_user(up); |
| 358 | key_put(up->uid_keyring); | 358 | key_put(up->uid_keyring); |
| 359 | key_put(up->session_keyring); | 359 | key_put(up->session_keyring); |
| 360 | put_user_ns(up->user_ns); | ||
| 361 | kmem_cache_free(uid_cachep, up); | 360 | kmem_cache_free(uid_cachep, up); |
| 362 | } | 361 | } |
| 363 | 362 | ||
| 364 | #endif | 363 | #endif |
| 365 | 364 | ||
| 365 | #if defined(CONFIG_RT_GROUP_SCHED) && defined(CONFIG_USER_SCHED) | ||
| 366 | /* | ||
| 367 | * We need to check if a setuid can take place. This function should be called | ||
| 368 | * before successfully completing the setuid. | ||
| 369 | */ | ||
| 370 | int task_can_switch_user(struct user_struct *up, struct task_struct *tsk) | ||
| 371 | { | ||
| 372 | |||
| 373 | return sched_rt_can_attach(up->tg, tsk); | ||
| 374 | |||
| 375 | } | ||
| 376 | #else | ||
| 377 | int task_can_switch_user(struct user_struct *up, struct task_struct *tsk) | ||
| 378 | { | ||
| 379 | return 1; | ||
| 380 | } | ||
| 381 | #endif | ||
| 382 | |||
| 366 | /* | 383 | /* |
| 367 | * Locate the user_struct for the passed UID. If found, take a ref on it. The | 384 | * Locate the user_struct for the passed UID. If found, take a ref on it. The |
| 368 | * caller must undo that ref with free_uid(). | 385 | * caller must undo that ref with free_uid(). |
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c index 79084311ee57..076c7c8215b0 100644 --- a/kernel/user_namespace.c +++ b/kernel/user_namespace.c | |||
| @@ -60,12 +60,25 @@ int create_user_ns(struct cred *new) | |||
| 60 | return 0; | 60 | return 0; |
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | void free_user_ns(struct kref *kref) | 63 | /* |
| 64 | * Deferred destructor for a user namespace. This is required because | ||
| 65 | * free_user_ns() may be called with uidhash_lock held, but we need to call | ||
| 66 | * back to free_uid() which will want to take the lock again. | ||
| 67 | */ | ||
| 68 | static void free_user_ns_work(struct work_struct *work) | ||
| 64 | { | 69 | { |
| 65 | struct user_namespace *ns; | 70 | struct user_namespace *ns = |
| 66 | 71 | container_of(work, struct user_namespace, destroyer); | |
| 67 | ns = container_of(kref, struct user_namespace, kref); | ||
| 68 | free_uid(ns->creator); | 72 | free_uid(ns->creator); |
| 69 | kfree(ns); | 73 | kfree(ns); |
| 70 | } | 74 | } |
| 75 | |||
| 76 | void free_user_ns(struct kref *kref) | ||
| 77 | { | ||
| 78 | struct user_namespace *ns = | ||
| 79 | container_of(kref, struct user_namespace, kref); | ||
| 80 | |||
| 81 | INIT_WORK(&ns->destroyer, free_user_ns_work); | ||
| 82 | schedule_work(&ns->destroyer); | ||
| 83 | } | ||
| 71 | EXPORT_SYMBOL(free_user_ns); | 84 | EXPORT_SYMBOL(free_user_ns); |
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 08275a5aa00e..c536b37a11cc 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
| @@ -838,7 +838,7 @@ config FIREWIRE_OHCI_REMOTE_DMA | |||
| 838 | 838 | ||
| 839 | If unsure, say N. | 839 | If unsure, say N. |
| 840 | 840 | ||
| 841 | menuconfig BUILD_DOCSRC | 841 | config BUILD_DOCSRC |
| 842 | bool "Build targets in Documentation/ tree" | 842 | bool "Build targets in Documentation/ tree" |
| 843 | depends on HEADERS_CHECK | 843 | depends on HEADERS_CHECK |
| 844 | help | 844 | help |
| @@ -449,6 +449,7 @@ void idr_remove_all(struct idr *idp) | |||
| 449 | 449 | ||
| 450 | n = idp->layers * IDR_BITS; | 450 | n = idp->layers * IDR_BITS; |
| 451 | p = idp->top; | 451 | p = idp->top; |
| 452 | rcu_assign_pointer(idp->top, NULL); | ||
| 452 | max = 1 << n; | 453 | max = 1 << n; |
| 453 | 454 | ||
| 454 | id = 0; | 455 | id = 0; |
| @@ -467,7 +468,6 @@ void idr_remove_all(struct idr *idp) | |||
| 467 | p = *--paa; | 468 | p = *--paa; |
| 468 | } | 469 | } |
| 469 | } | 470 | } |
| 470 | rcu_assign_pointer(idp->top, NULL); | ||
| 471 | idp->layers = 0; | 471 | idp->layers = 0; |
| 472 | } | 472 | } |
| 473 | EXPORT_SYMBOL(idr_remove_all); | 473 | EXPORT_SYMBOL(idr_remove_all); |
diff --git a/mm/fremap.c b/mm/fremap.c index 736ba7f3306a..b6ec85abbb39 100644 --- a/mm/fremap.c +++ b/mm/fremap.c | |||
| @@ -198,7 +198,7 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, | |||
| 198 | flags &= MAP_NONBLOCK; | 198 | flags &= MAP_NONBLOCK; |
| 199 | get_file(file); | 199 | get_file(file); |
| 200 | addr = mmap_region(file, start, size, | 200 | addr = mmap_region(file, start, size, |
| 201 | flags, vma->vm_flags, pgoff, 1); | 201 | flags, vma->vm_flags, pgoff); |
| 202 | fput(file); | 202 | fput(file); |
| 203 | if (IS_ERR_VALUE(addr)) { | 203 | if (IS_ERR_VALUE(addr)) { |
| 204 | err = addr; | 204 | err = addr; |
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 618e98304080..107da3d809a8 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
| @@ -2269,12 +2269,18 @@ void hugetlb_change_protection(struct vm_area_struct *vma, | |||
| 2269 | 2269 | ||
| 2270 | int hugetlb_reserve_pages(struct inode *inode, | 2270 | int hugetlb_reserve_pages(struct inode *inode, |
| 2271 | long from, long to, | 2271 | long from, long to, |
| 2272 | struct vm_area_struct *vma) | 2272 | struct vm_area_struct *vma, |
| 2273 | int acctflag) | ||
| 2273 | { | 2274 | { |
| 2274 | long ret, chg; | 2275 | long ret, chg; |
| 2275 | struct hstate *h = hstate_inode(inode); | 2276 | struct hstate *h = hstate_inode(inode); |
| 2276 | 2277 | ||
| 2277 | if (vma && vma->vm_flags & VM_NORESERVE) | 2278 | /* |
| 2279 | * Only apply hugepage reservation if asked. At fault time, an | ||
| 2280 | * attempt will be made for VM_NORESERVE to allocate a page | ||
| 2281 | * and filesystem quota without using reserves | ||
| 2282 | */ | ||
| 2283 | if (acctflag & VM_NORESERVE) | ||
| 2278 | return 0; | 2284 | return 0; |
| 2279 | 2285 | ||
| 2280 | /* | 2286 | /* |
| @@ -2299,13 +2305,31 @@ int hugetlb_reserve_pages(struct inode *inode, | |||
| 2299 | if (chg < 0) | 2305 | if (chg < 0) |
| 2300 | return chg; | 2306 | return chg; |
| 2301 | 2307 | ||
| 2308 | /* There must be enough filesystem quota for the mapping */ | ||
| 2302 | if (hugetlb_get_quota(inode->i_mapping, chg)) | 2309 | if (hugetlb_get_quota(inode->i_mapping, chg)) |
| 2303 | return -ENOSPC; | 2310 | return -ENOSPC; |
| 2311 | |||
| 2312 | /* | ||
| 2313 | * Check enough hugepages are available for the reservation. | ||
| 2314 | * Hand back the quota if there are not | ||
| 2315 | */ | ||
| 2304 | ret = hugetlb_acct_memory(h, chg); | 2316 | ret = hugetlb_acct_memory(h, chg); |
| 2305 | if (ret < 0) { | 2317 | if (ret < 0) { |
| 2306 | hugetlb_put_quota(inode->i_mapping, chg); | 2318 | hugetlb_put_quota(inode->i_mapping, chg); |
| 2307 | return ret; | 2319 | return ret; |
| 2308 | } | 2320 | } |
| 2321 | |||
| 2322 | /* | ||
| 2323 | * Account for the reservations made. Shared mappings record regions | ||
| 2324 | * that have reservations as they are shared by multiple VMAs. | ||
| 2325 | * When the last VMA disappears, the region map says how much | ||
| 2326 | * the reservation was and the page cache tells how much of | ||
| 2327 | * the reservation was consumed. Private mappings are per-VMA and | ||
| 2328 | * only the consumed reservations are tracked. When the VMA | ||
| 2329 | * disappears, the original reservation is the VMA size and the | ||
| 2330 | * consumed reservations are stored in the map. Hence, nothing | ||
| 2331 | * else has to be done for private mappings here | ||
| 2332 | */ | ||
| 2309 | if (!vma || vma->vm_flags & VM_SHARED) | 2333 | if (!vma || vma->vm_flags & VM_SHARED) |
| 2310 | region_add(&inode->i_mapping->private_list, from, to); | 2334 | region_add(&inode->i_mapping->private_list, from, to); |
| 2311 | return 0; | 2335 | return 0; |
diff --git a/mm/migrate.c b/mm/migrate.c index 2bb4e1d63520..a9eff3f092f6 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
| @@ -1129,7 +1129,7 @@ int migrate_vmas(struct mm_struct *mm, const nodemask_t *to, | |||
| 1129 | struct vm_area_struct *vma; | 1129 | struct vm_area_struct *vma; |
| 1130 | int err = 0; | 1130 | int err = 0; |
| 1131 | 1131 | ||
| 1132 | for(vma = mm->mmap; vma->vm_next && !err; vma = vma->vm_next) { | 1132 | for (vma = mm->mmap; vma && !err; vma = vma->vm_next) { |
| 1133 | if (vma->vm_ops && vma->vm_ops->migrate) { | 1133 | if (vma->vm_ops && vma->vm_ops->migrate) { |
| 1134 | err = vma->vm_ops->migrate(vma, to, from, flags); | 1134 | err = vma->vm_ops->migrate(vma, to, from, flags); |
| 1135 | if (err) | 1135 | if (err) |
diff --git a/mm/mlock.c b/mm/mlock.c index 028ec482fdd4..cbe9e0581b75 100644 --- a/mm/mlock.c +++ b/mm/mlock.c | |||
| @@ -311,7 +311,10 @@ long mlock_vma_pages_range(struct vm_area_struct *vma, | |||
| 311 | is_vm_hugetlb_page(vma) || | 311 | is_vm_hugetlb_page(vma) || |
| 312 | vma == get_gate_vma(current))) { | 312 | vma == get_gate_vma(current))) { |
| 313 | 313 | ||
| 314 | return __mlock_vma_pages_range(vma, start, end, 1); | 314 | __mlock_vma_pages_range(vma, start, end, 1); |
| 315 | |||
| 316 | /* Hide errors from mmap() and other callers */ | ||
| 317 | return 0; | ||
| 315 | } | 318 | } |
| 316 | 319 | ||
| 317 | /* | 320 | /* |
| @@ -657,7 +660,7 @@ void *alloc_locked_buffer(size_t size) | |||
| 657 | return buffer; | 660 | return buffer; |
| 658 | } | 661 | } |
| 659 | 662 | ||
| 660 | void free_locked_buffer(void *buffer, size_t size) | 663 | void release_locked_buffer(void *buffer, size_t size) |
| 661 | { | 664 | { |
| 662 | unsigned long pgsz = PAGE_ALIGN(size) >> PAGE_SHIFT; | 665 | unsigned long pgsz = PAGE_ALIGN(size) >> PAGE_SHIFT; |
| 663 | 666 | ||
| @@ -667,6 +670,11 @@ void free_locked_buffer(void *buffer, size_t size) | |||
| 667 | current->mm->locked_vm -= pgsz; | 670 | current->mm->locked_vm -= pgsz; |
| 668 | 671 | ||
| 669 | up_write(¤t->mm->mmap_sem); | 672 | up_write(¤t->mm->mmap_sem); |
| 673 | } | ||
| 674 | |||
| 675 | void free_locked_buffer(void *buffer, size_t size) | ||
| 676 | { | ||
| 677 | release_locked_buffer(buffer, size); | ||
| 670 | 678 | ||
| 671 | kfree(buffer); | 679 | kfree(buffer); |
| 672 | } | 680 | } |
| @@ -918,7 +918,6 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, | |||
| 918 | struct inode *inode; | 918 | struct inode *inode; |
| 919 | unsigned int vm_flags; | 919 | unsigned int vm_flags; |
| 920 | int error; | 920 | int error; |
| 921 | int accountable = 1; | ||
| 922 | unsigned long reqprot = prot; | 921 | unsigned long reqprot = prot; |
| 923 | 922 | ||
| 924 | /* | 923 | /* |
| @@ -1019,8 +1018,6 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, | |||
| 1019 | return -EPERM; | 1018 | return -EPERM; |
| 1020 | vm_flags &= ~VM_MAYEXEC; | 1019 | vm_flags &= ~VM_MAYEXEC; |
| 1021 | } | 1020 | } |
| 1022 | if (is_file_hugepages(file)) | ||
| 1023 | accountable = 0; | ||
| 1024 | 1021 | ||
| 1025 | if (!file->f_op || !file->f_op->mmap) | 1022 | if (!file->f_op || !file->f_op->mmap) |
| 1026 | return -ENODEV; | 1023 | return -ENODEV; |
| @@ -1053,8 +1050,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, | |||
| 1053 | if (error) | 1050 | if (error) |
| 1054 | return error; | 1051 | return error; |
| 1055 | 1052 | ||
| 1056 | return mmap_region(file, addr, len, flags, vm_flags, pgoff, | 1053 | return mmap_region(file, addr, len, flags, vm_flags, pgoff); |
| 1057 | accountable); | ||
| 1058 | } | 1054 | } |
| 1059 | EXPORT_SYMBOL(do_mmap_pgoff); | 1055 | EXPORT_SYMBOL(do_mmap_pgoff); |
| 1060 | 1056 | ||
| @@ -1092,17 +1088,23 @@ int vma_wants_writenotify(struct vm_area_struct *vma) | |||
| 1092 | 1088 | ||
| 1093 | /* | 1089 | /* |
| 1094 | * We account for memory if it's a private writeable mapping, | 1090 | * We account for memory if it's a private writeable mapping, |
| 1095 | * and VM_NORESERVE wasn't set. | 1091 | * not hugepages and VM_NORESERVE wasn't set. |
| 1096 | */ | 1092 | */ |
| 1097 | static inline int accountable_mapping(unsigned int vm_flags) | 1093 | static inline int accountable_mapping(struct file *file, unsigned int vm_flags) |
| 1098 | { | 1094 | { |
| 1095 | /* | ||
| 1096 | * hugetlb has its own accounting separate from the core VM | ||
| 1097 | * VM_HUGETLB may not be set yet so we cannot check for that flag. | ||
| 1098 | */ | ||
| 1099 | if (file && is_file_hugepages(file)) | ||
| 1100 | return 0; | ||
| 1101 | |||
| 1099 | return (vm_flags & (VM_NORESERVE | VM_SHARED | VM_WRITE)) == VM_WRITE; | 1102 | return (vm_flags & (VM_NORESERVE | VM_SHARED | VM_WRITE)) == VM_WRITE; |
| 1100 | } | 1103 | } |
| 1101 | 1104 | ||
| 1102 | unsigned long mmap_region(struct file *file, unsigned long addr, | 1105 | unsigned long mmap_region(struct file *file, unsigned long addr, |
| 1103 | unsigned long len, unsigned long flags, | 1106 | unsigned long len, unsigned long flags, |
| 1104 | unsigned int vm_flags, unsigned long pgoff, | 1107 | unsigned int vm_flags, unsigned long pgoff) |
| 1105 | int accountable) | ||
| 1106 | { | 1108 | { |
| 1107 | struct mm_struct *mm = current->mm; | 1109 | struct mm_struct *mm = current->mm; |
| 1108 | struct vm_area_struct *vma, *prev; | 1110 | struct vm_area_struct *vma, *prev; |
| @@ -1128,18 +1130,22 @@ munmap_back: | |||
| 1128 | 1130 | ||
| 1129 | /* | 1131 | /* |
| 1130 | * Set 'VM_NORESERVE' if we should not account for the | 1132 | * Set 'VM_NORESERVE' if we should not account for the |
| 1131 | * memory use of this mapping. We only honor MAP_NORESERVE | 1133 | * memory use of this mapping. |
| 1132 | * if we're allowed to overcommit memory. | ||
| 1133 | */ | 1134 | */ |
| 1134 | if ((flags & MAP_NORESERVE) && sysctl_overcommit_memory != OVERCOMMIT_NEVER) | 1135 | if ((flags & MAP_NORESERVE)) { |
| 1135 | vm_flags |= VM_NORESERVE; | 1136 | /* We honor MAP_NORESERVE if allowed to overcommit */ |
| 1136 | if (!accountable) | 1137 | if (sysctl_overcommit_memory != OVERCOMMIT_NEVER) |
| 1137 | vm_flags |= VM_NORESERVE; | 1138 | vm_flags |= VM_NORESERVE; |
| 1139 | |||
| 1140 | /* hugetlb applies strict overcommit unless MAP_NORESERVE */ | ||
| 1141 | if (file && is_file_hugepages(file)) | ||
| 1142 | vm_flags |= VM_NORESERVE; | ||
| 1143 | } | ||
| 1138 | 1144 | ||
| 1139 | /* | 1145 | /* |
| 1140 | * Private writable mapping: check memory availability | 1146 | * Private writable mapping: check memory availability |
| 1141 | */ | 1147 | */ |
| 1142 | if (accountable_mapping(vm_flags)) { | 1148 | if (accountable_mapping(file, vm_flags)) { |
| 1143 | charged = len >> PAGE_SHIFT; | 1149 | charged = len >> PAGE_SHIFT; |
| 1144 | if (security_vm_enough_memory(charged)) | 1150 | if (security_vm_enough_memory(charged)) |
| 1145 | return -ENOMEM; | 1151 | return -ENOMEM; |
| @@ -2078,12 +2084,8 @@ void exit_mmap(struct mm_struct *mm) | |||
| 2078 | unsigned long end; | 2084 | unsigned long end; |
| 2079 | 2085 | ||
| 2080 | /* mm's last user has gone, and its about to be pulled down */ | 2086 | /* mm's last user has gone, and its about to be pulled down */ |
| 2081 | arch_exit_mmap(mm); | ||
| 2082 | mmu_notifier_release(mm); | 2087 | mmu_notifier_release(mm); |
| 2083 | 2088 | ||
| 2084 | if (!mm->mmap) /* Can happen if dup_mmap() received an OOM */ | ||
| 2085 | return; | ||
| 2086 | |||
| 2087 | if (mm->locked_vm) { | 2089 | if (mm->locked_vm) { |
| 2088 | vma = mm->mmap; | 2090 | vma = mm->mmap; |
| 2089 | while (vma) { | 2091 | while (vma) { |
| @@ -2092,7 +2094,13 @@ void exit_mmap(struct mm_struct *mm) | |||
| 2092 | vma = vma->vm_next; | 2094 | vma = vma->vm_next; |
| 2093 | } | 2095 | } |
| 2094 | } | 2096 | } |
| 2097 | |||
| 2098 | arch_exit_mmap(mm); | ||
| 2099 | |||
| 2095 | vma = mm->mmap; | 2100 | vma = mm->mmap; |
| 2101 | if (!vma) /* Can happen if dup_mmap() received an OOM */ | ||
| 2102 | return; | ||
| 2103 | |||
| 2096 | lru_add_drain(); | 2104 | lru_add_drain(); |
| 2097 | flush_cache_mm(mm); | 2105 | flush_cache_mm(mm); |
| 2098 | tlb = tlb_gather_mmu(mm, 1); | 2106 | tlb = tlb_gather_mmu(mm, 1); |
diff --git a/mm/mprotect.c b/mm/mprotect.c index abe2694e13f4..258197b76fb4 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c | |||
| @@ -151,10 +151,11 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, | |||
| 151 | /* | 151 | /* |
| 152 | * If we make a private mapping writable we increase our commit; | 152 | * If we make a private mapping writable we increase our commit; |
| 153 | * but (without finer accounting) cannot reduce our commit if we | 153 | * but (without finer accounting) cannot reduce our commit if we |
| 154 | * make it unwritable again. | 154 | * make it unwritable again. hugetlb mapping were accounted for |
| 155 | * even if read-only so there is no need to account for them here | ||
| 155 | */ | 156 | */ |
| 156 | if (newflags & VM_WRITE) { | 157 | if (newflags & VM_WRITE) { |
| 157 | if (!(oldflags & (VM_ACCOUNT|VM_WRITE| | 158 | if (!(oldflags & (VM_ACCOUNT|VM_WRITE|VM_HUGETLB| |
| 158 | VM_SHARED|VM_NORESERVE))) { | 159 | VM_SHARED|VM_NORESERVE))) { |
| 159 | charged = nrpages; | 160 | charged = nrpages; |
| 160 | if (security_vm_enough_memory(charged)) | 161 | if (security_vm_enough_memory(charged)) |
diff --git a/mm/page-writeback.c b/mm/page-writeback.c index dc32dae01e5f..74dc57c74349 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c | |||
| @@ -209,7 +209,7 @@ int dirty_bytes_handler(struct ctl_table *table, int write, | |||
| 209 | struct file *filp, void __user *buffer, size_t *lenp, | 209 | struct file *filp, void __user *buffer, size_t *lenp, |
| 210 | loff_t *ppos) | 210 | loff_t *ppos) |
| 211 | { | 211 | { |
| 212 | int old_bytes = vm_dirty_bytes; | 212 | unsigned long old_bytes = vm_dirty_bytes; |
| 213 | int ret; | 213 | int ret; |
| 214 | 214 | ||
| 215 | ret = proc_doulongvec_minmax(table, write, filp, buffer, lenp, ppos); | 215 | ret = proc_doulongvec_minmax(table, write, filp, buffer, lenp, ppos); |
| @@ -240,7 +240,7 @@ void bdi_writeout_inc(struct backing_dev_info *bdi) | |||
| 240 | } | 240 | } |
| 241 | EXPORT_SYMBOL_GPL(bdi_writeout_inc); | 241 | EXPORT_SYMBOL_GPL(bdi_writeout_inc); |
| 242 | 242 | ||
| 243 | static inline void task_dirty_inc(struct task_struct *tsk) | 243 | void task_dirty_inc(struct task_struct *tsk) |
| 244 | { | 244 | { |
| 245 | prop_inc_single(&vm_dirties, &tsk->dirties); | 245 | prop_inc_single(&vm_dirties, &tsk->dirties); |
| 246 | } | 246 | } |
| @@ -1051,20 +1051,23 @@ continue_unlock: | |||
| 1051 | } | 1051 | } |
| 1052 | } | 1052 | } |
| 1053 | 1053 | ||
| 1054 | if (nr_to_write > 0) | 1054 | if (nr_to_write > 0) { |
| 1055 | nr_to_write--; | 1055 | nr_to_write--; |
| 1056 | else if (wbc->sync_mode == WB_SYNC_NONE) { | 1056 | if (nr_to_write == 0 && |
| 1057 | /* | 1057 | wbc->sync_mode == WB_SYNC_NONE) { |
| 1058 | * We stop writing back only if we are not | 1058 | /* |
| 1059 | * doing integrity sync. In case of integrity | 1059 | * We stop writing back only if we are |
| 1060 | * sync we have to keep going because someone | 1060 | * not doing integrity sync. In case of |
| 1061 | * may be concurrently dirtying pages, and we | 1061 | * integrity sync we have to keep going |
| 1062 | * might have synced a lot of newly appeared | 1062 | * because someone may be concurrently |
| 1063 | * dirty pages, but have not synced all of the | 1063 | * dirtying pages, and we might have |
| 1064 | * old dirty pages. | 1064 | * synced a lot of newly appeared dirty |
| 1065 | */ | 1065 | * pages, but have not synced all of the |
| 1066 | done = 1; | 1066 | * old dirty pages. |
| 1067 | break; | 1067 | */ |
| 1068 | done = 1; | ||
| 1069 | break; | ||
| 1070 | } | ||
| 1068 | } | 1071 | } |
| 1069 | 1072 | ||
| 1070 | if (wbc->nonblocking && bdi_write_congested(bdi)) { | 1073 | if (wbc->nonblocking && bdi_write_congested(bdi)) { |
| @@ -1076,7 +1079,7 @@ continue_unlock: | |||
| 1076 | pagevec_release(&pvec); | 1079 | pagevec_release(&pvec); |
| 1077 | cond_resched(); | 1080 | cond_resched(); |
| 1078 | } | 1081 | } |
| 1079 | if (!cycled) { | 1082 | if (!cycled && !done) { |
| 1080 | /* | 1083 | /* |
| 1081 | * range_cyclic: | 1084 | * range_cyclic: |
| 1082 | * We hit the last page and there is more work to be done: wrap | 1085 | * We hit the last page and there is more work to be done: wrap |
| @@ -1227,6 +1230,7 @@ int __set_page_dirty_nobuffers(struct page *page) | |||
| 1227 | __inc_zone_page_state(page, NR_FILE_DIRTY); | 1230 | __inc_zone_page_state(page, NR_FILE_DIRTY); |
| 1228 | __inc_bdi_stat(mapping->backing_dev_info, | 1231 | __inc_bdi_stat(mapping->backing_dev_info, |
| 1229 | BDI_RECLAIMABLE); | 1232 | BDI_RECLAIMABLE); |
| 1233 | task_dirty_inc(current); | ||
| 1230 | task_io_account_write(PAGE_CACHE_SIZE); | 1234 | task_io_account_write(PAGE_CACHE_SIZE); |
| 1231 | } | 1235 | } |
| 1232 | radix_tree_tag_set(&mapping->page_tree, | 1236 | radix_tree_tag_set(&mapping->page_tree, |
| @@ -1259,7 +1263,7 @@ EXPORT_SYMBOL(redirty_page_for_writepage); | |||
| 1259 | * If the mapping doesn't provide a set_page_dirty a_op, then | 1263 | * If the mapping doesn't provide a set_page_dirty a_op, then |
| 1260 | * just fall through and assume that it wants buffer_heads. | 1264 | * just fall through and assume that it wants buffer_heads. |
| 1261 | */ | 1265 | */ |
| 1262 | static int __set_page_dirty(struct page *page) | 1266 | int set_page_dirty(struct page *page) |
| 1263 | { | 1267 | { |
| 1264 | struct address_space *mapping = page_mapping(page); | 1268 | struct address_space *mapping = page_mapping(page); |
| 1265 | 1269 | ||
| @@ -1277,14 +1281,6 @@ static int __set_page_dirty(struct page *page) | |||
| 1277 | } | 1281 | } |
| 1278 | return 0; | 1282 | return 0; |
| 1279 | } | 1283 | } |
| 1280 | |||
| 1281 | int set_page_dirty(struct page *page) | ||
| 1282 | { | ||
| 1283 | int ret = __set_page_dirty(page); | ||
| 1284 | if (ret) | ||
| 1285 | task_dirty_inc(current); | ||
| 1286 | return ret; | ||
| 1287 | } | ||
| 1288 | EXPORT_SYMBOL(set_page_dirty); | 1284 | EXPORT_SYMBOL(set_page_dirty); |
| 1289 | 1285 | ||
| 1290 | /* | 1286 | /* |
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 5675b3073854..5c44ed49ca93 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
| @@ -2989,7 +2989,7 @@ static int __meminit next_active_region_index_in_nid(int index, int nid) | |||
| 2989 | * was used and there are no special requirements, this is a convenient | 2989 | * was used and there are no special requirements, this is a convenient |
| 2990 | * alternative | 2990 | * alternative |
| 2991 | */ | 2991 | */ |
| 2992 | int __meminit early_pfn_to_nid(unsigned long pfn) | 2992 | int __meminit __early_pfn_to_nid(unsigned long pfn) |
| 2993 | { | 2993 | { |
| 2994 | int i; | 2994 | int i; |
| 2995 | 2995 | ||
| @@ -3000,10 +3000,33 @@ int __meminit early_pfn_to_nid(unsigned long pfn) | |||
| 3000 | if (start_pfn <= pfn && pfn < end_pfn) | 3000 | if (start_pfn <= pfn && pfn < end_pfn) |
| 3001 | return early_node_map[i].nid; | 3001 | return early_node_map[i].nid; |
| 3002 | } | 3002 | } |
| 3003 | /* This is a memory hole */ | ||
| 3004 | return -1; | ||
| 3005 | } | ||
| 3006 | #endif /* CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID */ | ||
| 3007 | |||
| 3008 | int __meminit early_pfn_to_nid(unsigned long pfn) | ||
| 3009 | { | ||
| 3010 | int nid; | ||
| 3003 | 3011 | ||
| 3012 | nid = __early_pfn_to_nid(pfn); | ||
| 3013 | if (nid >= 0) | ||
| 3014 | return nid; | ||
| 3015 | /* just returns 0 */ | ||
| 3004 | return 0; | 3016 | return 0; |
| 3005 | } | 3017 | } |
| 3006 | #endif /* CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID */ | 3018 | |
| 3019 | #ifdef CONFIG_NODES_SPAN_OTHER_NODES | ||
| 3020 | bool __meminit early_pfn_in_nid(unsigned long pfn, int node) | ||
| 3021 | { | ||
| 3022 | int nid; | ||
| 3023 | |||
| 3024 | nid = __early_pfn_to_nid(pfn); | ||
| 3025 | if (nid >= 0 && nid != node) | ||
| 3026 | return false; | ||
| 3027 | return true; | ||
| 3028 | } | ||
| 3029 | #endif | ||
| 3007 | 3030 | ||
| 3008 | /* Basic iterator support to walk early_node_map[] */ | 3031 | /* Basic iterator support to walk early_node_map[] */ |
| 3009 | #define for_each_active_range_index_in_nid(i, nid) \ | 3032 | #define for_each_active_range_index_in_nid(i, nid) \ |
diff --git a/mm/page_cgroup.c b/mm/page_cgroup.c index 7006a11350c8..ceecfbb143fa 100644 --- a/mm/page_cgroup.c +++ b/mm/page_cgroup.c | |||
| @@ -114,7 +114,8 @@ static int __init_refok init_section_page_cgroup(unsigned long pfn) | |||
| 114 | nid = page_to_nid(pfn_to_page(pfn)); | 114 | nid = page_to_nid(pfn_to_page(pfn)); |
| 115 | table_size = sizeof(struct page_cgroup) * PAGES_PER_SECTION; | 115 | table_size = sizeof(struct page_cgroup) * PAGES_PER_SECTION; |
| 116 | if (slab_is_available()) { | 116 | if (slab_is_available()) { |
| 117 | base = kmalloc_node(table_size, GFP_KERNEL, nid); | 117 | base = kmalloc_node(table_size, |
| 118 | GFP_KERNEL | __GFP_NOWARN, nid); | ||
| 118 | if (!base) | 119 | if (!base) |
| 119 | base = vmalloc_node(table_size, nid); | 120 | base = vmalloc_node(table_size, nid); |
| 120 | } else { | 121 | } else { |
diff --git a/mm/page_io.c b/mm/page_io.c index dc6ce0afbded..3023c475e041 100644 --- a/mm/page_io.c +++ b/mm/page_io.c | |||
| @@ -111,7 +111,7 @@ int swap_writepage(struct page *page, struct writeback_control *wbc) | |||
| 111 | goto out; | 111 | goto out; |
| 112 | } | 112 | } |
| 113 | if (wbc->sync_mode == WB_SYNC_ALL) | 113 | if (wbc->sync_mode == WB_SYNC_ALL) |
| 114 | rw |= (1 << BIO_RW_SYNC); | 114 | rw |= (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG); |
| 115 | count_vm_event(PSWPOUT); | 115 | count_vm_event(PSWPOUT); |
| 116 | set_page_writeback(page); | 116 | set_page_writeback(page); |
| 117 | unlock_page(page); | 117 | unlock_page(page); |
| @@ -1072,7 +1072,8 @@ static int try_to_unmap_file(struct page *page, int unlock, int migration) | |||
| 1072 | spin_lock(&mapping->i_mmap_lock); | 1072 | spin_lock(&mapping->i_mmap_lock); |
| 1073 | vma_prio_tree_foreach(vma, &iter, &mapping->i_mmap, pgoff, pgoff) { | 1073 | vma_prio_tree_foreach(vma, &iter, &mapping->i_mmap, pgoff, pgoff) { |
| 1074 | if (MLOCK_PAGES && unlikely(unlock)) { | 1074 | if (MLOCK_PAGES && unlikely(unlock)) { |
| 1075 | if (!(vma->vm_flags & VM_LOCKED)) | 1075 | if (!((vma->vm_flags & VM_LOCKED) && |
| 1076 | page_mapped_in_vma(page, vma))) | ||
| 1076 | continue; /* must visit all vmas */ | 1077 | continue; /* must visit all vmas */ |
| 1077 | ret = SWAP_MLOCK; | 1078 | ret = SWAP_MLOCK; |
| 1078 | } else { | 1079 | } else { |
diff --git a/mm/shmem.c b/mm/shmem.c index 19d566ccdeea..4103a239ce84 100644 --- a/mm/shmem.c +++ b/mm/shmem.c | |||
| @@ -169,13 +169,13 @@ static inline struct shmem_sb_info *SHMEM_SB(struct super_block *sb) | |||
| 169 | */ | 169 | */ |
| 170 | static inline int shmem_acct_size(unsigned long flags, loff_t size) | 170 | static inline int shmem_acct_size(unsigned long flags, loff_t size) |
| 171 | { | 171 | { |
| 172 | return (flags & VM_ACCOUNT) ? | 172 | return (flags & VM_NORESERVE) ? |
| 173 | security_vm_enough_memory_kern(VM_ACCT(size)) : 0; | 173 | 0 : security_vm_enough_memory_kern(VM_ACCT(size)); |
| 174 | } | 174 | } |
| 175 | 175 | ||
| 176 | static inline void shmem_unacct_size(unsigned long flags, loff_t size) | 176 | static inline void shmem_unacct_size(unsigned long flags, loff_t size) |
| 177 | { | 177 | { |
| 178 | if (flags & VM_ACCOUNT) | 178 | if (!(flags & VM_NORESERVE)) |
| 179 | vm_unacct_memory(VM_ACCT(size)); | 179 | vm_unacct_memory(VM_ACCT(size)); |
| 180 | } | 180 | } |
| 181 | 181 | ||
| @@ -187,13 +187,13 @@ static inline void shmem_unacct_size(unsigned long flags, loff_t size) | |||
| 187 | */ | 187 | */ |
| 188 | static inline int shmem_acct_block(unsigned long flags) | 188 | static inline int shmem_acct_block(unsigned long flags) |
| 189 | { | 189 | { |
| 190 | return (flags & VM_ACCOUNT) ? | 190 | return (flags & VM_NORESERVE) ? |
| 191 | 0 : security_vm_enough_memory_kern(VM_ACCT(PAGE_CACHE_SIZE)); | 191 | security_vm_enough_memory_kern(VM_ACCT(PAGE_CACHE_SIZE)) : 0; |
| 192 | } | 192 | } |
| 193 | 193 | ||
| 194 | static inline void shmem_unacct_blocks(unsigned long flags, long pages) | 194 | static inline void shmem_unacct_blocks(unsigned long flags, long pages) |
| 195 | { | 195 | { |
| 196 | if (!(flags & VM_ACCOUNT)) | 196 | if (flags & VM_NORESERVE) |
| 197 | vm_unacct_memory(pages * VM_ACCT(PAGE_CACHE_SIZE)); | 197 | vm_unacct_memory(pages * VM_ACCT(PAGE_CACHE_SIZE)); |
| 198 | } | 198 | } |
| 199 | 199 | ||
| @@ -1515,8 +1515,8 @@ static int shmem_mmap(struct file *file, struct vm_area_struct *vma) | |||
| 1515 | return 0; | 1515 | return 0; |
| 1516 | } | 1516 | } |
| 1517 | 1517 | ||
| 1518 | static struct inode * | 1518 | static struct inode *shmem_get_inode(struct super_block *sb, int mode, |
| 1519 | shmem_get_inode(struct super_block *sb, int mode, dev_t dev) | 1519 | dev_t dev, unsigned long flags) |
| 1520 | { | 1520 | { |
| 1521 | struct inode *inode; | 1521 | struct inode *inode; |
| 1522 | struct shmem_inode_info *info; | 1522 | struct shmem_inode_info *info; |
| @@ -1537,6 +1537,7 @@ shmem_get_inode(struct super_block *sb, int mode, dev_t dev) | |||
| 1537 | info = SHMEM_I(inode); | 1537 | info = SHMEM_I(inode); |
| 1538 | memset(info, 0, (char *)inode - (char *)info); | 1538 | memset(info, 0, (char *)inode - (char *)info); |
| 1539 | spin_lock_init(&info->lock); | 1539 | spin_lock_init(&info->lock); |
| 1540 | info->flags = flags & VM_NORESERVE; | ||
| 1540 | INIT_LIST_HEAD(&info->swaplist); | 1541 | INIT_LIST_HEAD(&info->swaplist); |
| 1541 | 1542 | ||
| 1542 | switch (mode & S_IFMT) { | 1543 | switch (mode & S_IFMT) { |
| @@ -1779,9 +1780,10 @@ static int shmem_statfs(struct dentry *dentry, struct kstatfs *buf) | |||
| 1779 | static int | 1780 | static int |
| 1780 | shmem_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev) | 1781 | shmem_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev) |
| 1781 | { | 1782 | { |
| 1782 | struct inode *inode = shmem_get_inode(dir->i_sb, mode, dev); | 1783 | struct inode *inode; |
| 1783 | int error = -ENOSPC; | 1784 | int error = -ENOSPC; |
| 1784 | 1785 | ||
| 1786 | inode = shmem_get_inode(dir->i_sb, mode, dev, VM_NORESERVE); | ||
| 1785 | if (inode) { | 1787 | if (inode) { |
| 1786 | error = security_inode_init_security(inode, dir, NULL, NULL, | 1788 | error = security_inode_init_security(inode, dir, NULL, NULL, |
| 1787 | NULL); | 1789 | NULL); |
| @@ -1920,7 +1922,7 @@ static int shmem_symlink(struct inode *dir, struct dentry *dentry, const char *s | |||
| 1920 | if (len > PAGE_CACHE_SIZE) | 1922 | if (len > PAGE_CACHE_SIZE) |
| 1921 | return -ENAMETOOLONG; | 1923 | return -ENAMETOOLONG; |
| 1922 | 1924 | ||
| 1923 | inode = shmem_get_inode(dir->i_sb, S_IFLNK|S_IRWXUGO, 0); | 1925 | inode = shmem_get_inode(dir->i_sb, S_IFLNK|S_IRWXUGO, 0, VM_NORESERVE); |
| 1924 | if (!inode) | 1926 | if (!inode) |
| 1925 | return -ENOSPC; | 1927 | return -ENOSPC; |
| 1926 | 1928 | ||
| @@ -2332,7 +2334,7 @@ static int shmem_fill_super(struct super_block *sb, | |||
| 2332 | sb->s_flags |= MS_POSIXACL; | 2334 | sb->s_flags |= MS_POSIXACL; |
| 2333 | #endif | 2335 | #endif |
| 2334 | 2336 | ||
| 2335 | inode = shmem_get_inode(sb, S_IFDIR | sbinfo->mode, 0); | 2337 | inode = shmem_get_inode(sb, S_IFDIR | sbinfo->mode, 0, VM_NORESERVE); |
| 2336 | if (!inode) | 2338 | if (!inode) |
| 2337 | goto failed; | 2339 | goto failed; |
| 2338 | inode->i_uid = sbinfo->uid; | 2340 | inode->i_uid = sbinfo->uid; |
| @@ -2574,12 +2576,12 @@ int shmem_unuse(swp_entry_t entry, struct page *page) | |||
| 2574 | return 0; | 2576 | return 0; |
| 2575 | } | 2577 | } |
| 2576 | 2578 | ||
| 2577 | #define shmem_file_operations ramfs_file_operations | 2579 | #define shmem_vm_ops generic_file_vm_ops |
| 2578 | #define shmem_vm_ops generic_file_vm_ops | 2580 | #define shmem_file_operations ramfs_file_operations |
| 2579 | #define shmem_get_inode ramfs_get_inode | 2581 | #define shmem_get_inode(sb, mode, dev, flags) ramfs_get_inode(sb, mode, dev) |
| 2580 | #define shmem_acct_size(a, b) 0 | 2582 | #define shmem_acct_size(flags, size) 0 |
| 2581 | #define shmem_unacct_size(a, b) do {} while (0) | 2583 | #define shmem_unacct_size(flags, size) do {} while (0) |
| 2582 | #define SHMEM_MAX_BYTES LLONG_MAX | 2584 | #define SHMEM_MAX_BYTES LLONG_MAX |
| 2583 | 2585 | ||
| 2584 | #endif /* CONFIG_SHMEM */ | 2586 | #endif /* CONFIG_SHMEM */ |
| 2585 | 2587 | ||
| @@ -2589,7 +2591,7 @@ int shmem_unuse(swp_entry_t entry, struct page *page) | |||
| 2589 | * shmem_file_setup - get an unlinked file living in tmpfs | 2591 | * shmem_file_setup - get an unlinked file living in tmpfs |
| 2590 | * @name: name for dentry (to be seen in /proc/<pid>/maps | 2592 | * @name: name for dentry (to be seen in /proc/<pid>/maps |
| 2591 | * @size: size to be set for the file | 2593 | * @size: size to be set for the file |
| 2592 | * @flags: vm_flags | 2594 | * @flags: VM_NORESERVE suppresses pre-accounting of the entire object size |
| 2593 | */ | 2595 | */ |
| 2594 | struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags) | 2596 | struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags) |
| 2595 | { | 2597 | { |
| @@ -2623,13 +2625,10 @@ struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags) | |||
| 2623 | goto put_dentry; | 2625 | goto put_dentry; |
| 2624 | 2626 | ||
| 2625 | error = -ENOSPC; | 2627 | error = -ENOSPC; |
| 2626 | inode = shmem_get_inode(root->d_sb, S_IFREG | S_IRWXUGO, 0); | 2628 | inode = shmem_get_inode(root->d_sb, S_IFREG | S_IRWXUGO, 0, flags); |
| 2627 | if (!inode) | 2629 | if (!inode) |
| 2628 | goto close_file; | 2630 | goto close_file; |
| 2629 | 2631 | ||
| 2630 | #ifdef CONFIG_SHMEM | ||
| 2631 | SHMEM_I(inode)->flags = (flags & VM_NORESERVE) ? 0 : VM_ACCOUNT; | ||
| 2632 | #endif | ||
| 2633 | d_instantiate(dentry, inode); | 2632 | d_instantiate(dentry, inode); |
| 2634 | inode->i_size = size; | 2633 | inode->i_size = size; |
| 2635 | inode->i_nlink = 0; /* It is unlinked */ | 2634 | inode->i_nlink = 0; /* It is unlinked */ |
| @@ -4457,3 +4457,4 @@ size_t ksize(const void *objp) | |||
| 4457 | 4457 | ||
| 4458 | return obj_size(virt_to_cache(objp)); | 4458 | return obj_size(virt_to_cache(objp)); |
| 4459 | } | 4459 | } |
| 4460 | EXPORT_SYMBOL(ksize); | ||
| @@ -521,6 +521,7 @@ size_t ksize(const void *block) | |||
| 521 | } else | 521 | } else |
| 522 | return sp->page.private; | 522 | return sp->page.private; |
| 523 | } | 523 | } |
| 524 | EXPORT_SYMBOL(ksize); | ||
| 524 | 525 | ||
| 525 | struct kmem_cache { | 526 | struct kmem_cache { |
| 526 | unsigned int size, align; | 527 | unsigned int size, align; |
| @@ -2736,6 +2736,7 @@ size_t ksize(const void *object) | |||
| 2736 | */ | 2736 | */ |
| 2737 | return s->size; | 2737 | return s->size; |
| 2738 | } | 2738 | } |
| 2739 | EXPORT_SYMBOL(ksize); | ||
| 2739 | 2740 | ||
| 2740 | void kfree(const void *x) | 2741 | void kfree(const void *x) |
| 2741 | { | 2742 | { |
diff --git a/mm/swapfile.c b/mm/swapfile.c index 7e6304dfafab..312fafe0ab6e 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c | |||
| @@ -635,7 +635,7 @@ int swap_type_of(dev_t device, sector_t offset, struct block_device **bdev_p) | |||
| 635 | 635 | ||
| 636 | if (!bdev) { | 636 | if (!bdev) { |
| 637 | if (bdev_p) | 637 | if (bdev_p) |
| 638 | *bdev_p = sis->bdev; | 638 | *bdev_p = bdget(sis->bdev->bd_dev); |
| 639 | 639 | ||
| 640 | spin_unlock(&swap_lock); | 640 | spin_unlock(&swap_lock); |
| 641 | return i; | 641 | return i; |
| @@ -647,7 +647,7 @@ int swap_type_of(dev_t device, sector_t offset, struct block_device **bdev_p) | |||
| 647 | struct swap_extent, list); | 647 | struct swap_extent, list); |
| 648 | if (se->start_block == offset) { | 648 | if (se->start_block == offset) { |
| 649 | if (bdev_p) | 649 | if (bdev_p) |
| 650 | *bdev_p = sis->bdev; | 650 | *bdev_p = bdget(sis->bdev->bd_dev); |
| 651 | 651 | ||
| 652 | spin_unlock(&swap_lock); | 652 | spin_unlock(&swap_lock); |
| 653 | bdput(bdev); | 653 | bdput(bdev); |
| @@ -129,6 +129,26 @@ void *krealloc(const void *p, size_t new_size, gfp_t flags) | |||
| 129 | } | 129 | } |
| 130 | EXPORT_SYMBOL(krealloc); | 130 | EXPORT_SYMBOL(krealloc); |
| 131 | 131 | ||
| 132 | /** | ||
| 133 | * kzfree - like kfree but zero memory | ||
| 134 | * @p: object to free memory of | ||
| 135 | * | ||
| 136 | * The memory of the object @p points to is zeroed before freed. | ||
| 137 | * If @p is %NULL, kzfree() does nothing. | ||
| 138 | */ | ||
| 139 | void kzfree(const void *p) | ||
| 140 | { | ||
| 141 | size_t ks; | ||
| 142 | void *mem = (void *)p; | ||
| 143 | |||
| 144 | if (unlikely(ZERO_OR_NULL_PTR(mem))) | ||
| 145 | return; | ||
| 146 | ks = ksize(mem); | ||
| 147 | memset(mem, 0, ks); | ||
| 148 | kfree(mem); | ||
| 149 | } | ||
| 150 | EXPORT_SYMBOL(kzfree); | ||
| 151 | |||
| 132 | /* | 152 | /* |
| 133 | * strndup_user - duplicate an existing string from user space | 153 | * strndup_user - duplicate an existing string from user space |
| 134 | * @s: The string to duplicate | 154 | * @s: The string to duplicate |
diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 75f49d312e8c..520a75980269 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c | |||
| @@ -323,6 +323,7 @@ static struct vmap_area *alloc_vmap_area(unsigned long size, | |||
| 323 | unsigned long addr; | 323 | unsigned long addr; |
| 324 | int purged = 0; | 324 | int purged = 0; |
| 325 | 325 | ||
| 326 | BUG_ON(!size); | ||
| 326 | BUG_ON(size & ~PAGE_MASK); | 327 | BUG_ON(size & ~PAGE_MASK); |
| 327 | 328 | ||
| 328 | va = kmalloc_node(sizeof(struct vmap_area), | 329 | va = kmalloc_node(sizeof(struct vmap_area), |
| @@ -334,6 +335,9 @@ retry: | |||
| 334 | addr = ALIGN(vstart, align); | 335 | addr = ALIGN(vstart, align); |
| 335 | 336 | ||
| 336 | spin_lock(&vmap_area_lock); | 337 | spin_lock(&vmap_area_lock); |
| 338 | if (addr + size - 1 < addr) | ||
| 339 | goto overflow; | ||
| 340 | |||
| 337 | /* XXX: could have a last_hole cache */ | 341 | /* XXX: could have a last_hole cache */ |
| 338 | n = vmap_area_root.rb_node; | 342 | n = vmap_area_root.rb_node; |
| 339 | if (n) { | 343 | if (n) { |
| @@ -365,6 +369,8 @@ retry: | |||
| 365 | 369 | ||
| 366 | while (addr + size > first->va_start && addr + size <= vend) { | 370 | while (addr + size > first->va_start && addr + size <= vend) { |
| 367 | addr = ALIGN(first->va_end + PAGE_SIZE, align); | 371 | addr = ALIGN(first->va_end + PAGE_SIZE, align); |
| 372 | if (addr + size - 1 < addr) | ||
| 373 | goto overflow; | ||
| 368 | 374 | ||
| 369 | n = rb_next(&first->rb_node); | 375 | n = rb_next(&first->rb_node); |
| 370 | if (n) | 376 | if (n) |
| @@ -375,6 +381,7 @@ retry: | |||
| 375 | } | 381 | } |
| 376 | found: | 382 | found: |
| 377 | if (addr + size > vend) { | 383 | if (addr + size > vend) { |
| 384 | overflow: | ||
| 378 | spin_unlock(&vmap_area_lock); | 385 | spin_unlock(&vmap_area_lock); |
| 379 | if (!purged) { | 386 | if (!purged) { |
| 380 | purge_vmap_area_lazy(); | 387 | purge_vmap_area_lazy(); |
| @@ -498,6 +505,7 @@ static void __purge_vmap_area_lazy(unsigned long *start, unsigned long *end, | |||
| 498 | static DEFINE_SPINLOCK(purge_lock); | 505 | static DEFINE_SPINLOCK(purge_lock); |
| 499 | LIST_HEAD(valist); | 506 | LIST_HEAD(valist); |
| 500 | struct vmap_area *va; | 507 | struct vmap_area *va; |
| 508 | struct vmap_area *n_va; | ||
| 501 | int nr = 0; | 509 | int nr = 0; |
| 502 | 510 | ||
| 503 | /* | 511 | /* |
| @@ -537,7 +545,7 @@ static void __purge_vmap_area_lazy(unsigned long *start, unsigned long *end, | |||
| 537 | 545 | ||
| 538 | if (nr) { | 546 | if (nr) { |
| 539 | spin_lock(&vmap_area_lock); | 547 | spin_lock(&vmap_area_lock); |
| 540 | list_for_each_entry(va, &valist, purge_list) | 548 | list_for_each_entry_safe(va, n_va, &valist, purge_list) |
| 541 | __free_vmap_area(va); | 549 | __free_vmap_area(va); |
| 542 | spin_unlock(&vmap_area_lock); | 550 | spin_unlock(&vmap_area_lock); |
| 543 | } | 551 | } |
| @@ -1012,6 +1020,8 @@ void __init vmalloc_init(void) | |||
| 1012 | void unmap_kernel_range(unsigned long addr, unsigned long size) | 1020 | void unmap_kernel_range(unsigned long addr, unsigned long size) |
| 1013 | { | 1021 | { |
| 1014 | unsigned long end = addr + size; | 1022 | unsigned long end = addr + size; |
| 1023 | |||
| 1024 | flush_cache_vunmap(addr, end); | ||
| 1015 | vunmap_page_range(addr, end); | 1025 | vunmap_page_range(addr, end); |
| 1016 | flush_tlb_kernel_range(addr, end); | 1026 | flush_tlb_kernel_range(addr, end); |
| 1017 | } | 1027 | } |
| @@ -1106,6 +1116,14 @@ struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags, | |||
| 1106 | } | 1116 | } |
| 1107 | EXPORT_SYMBOL_GPL(__get_vm_area); | 1117 | EXPORT_SYMBOL_GPL(__get_vm_area); |
| 1108 | 1118 | ||
| 1119 | struct vm_struct *__get_vm_area_caller(unsigned long size, unsigned long flags, | ||
| 1120 | unsigned long start, unsigned long end, | ||
| 1121 | void *caller) | ||
| 1122 | { | ||
| 1123 | return __get_vm_area_node(size, flags, start, end, -1, GFP_KERNEL, | ||
| 1124 | caller); | ||
| 1125 | } | ||
| 1126 | |||
| 1109 | /** | 1127 | /** |
| 1110 | * get_vm_area - reserve a contiguous kernel virtual area | 1128 | * get_vm_area - reserve a contiguous kernel virtual area |
| 1111 | * @size: size of the area | 1129 | * @size: size of the area |
diff --git a/mm/vmscan.c b/mm/vmscan.c index 9a27c44aa327..6177e3bcd66b 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
| @@ -2057,31 +2057,31 @@ static unsigned long shrink_all_zones(unsigned long nr_pages, int prio, | |||
| 2057 | int pass, struct scan_control *sc) | 2057 | int pass, struct scan_control *sc) |
| 2058 | { | 2058 | { |
| 2059 | struct zone *zone; | 2059 | struct zone *zone; |
| 2060 | unsigned long nr_to_scan, ret = 0; | 2060 | unsigned long ret = 0; |
| 2061 | enum lru_list l; | ||
| 2062 | 2061 | ||
| 2063 | for_each_zone(zone) { | 2062 | for_each_zone(zone) { |
| 2063 | enum lru_list l; | ||
| 2064 | 2064 | ||
| 2065 | if (!populated_zone(zone)) | 2065 | if (!populated_zone(zone)) |
| 2066 | continue; | 2066 | continue; |
| 2067 | |||
| 2068 | if (zone_is_all_unreclaimable(zone) && prio != DEF_PRIORITY) | 2067 | if (zone_is_all_unreclaimable(zone) && prio != DEF_PRIORITY) |
| 2069 | continue; | 2068 | continue; |
| 2070 | 2069 | ||
| 2071 | for_each_evictable_lru(l) { | 2070 | for_each_evictable_lru(l) { |
| 2071 | enum zone_stat_item ls = NR_LRU_BASE + l; | ||
| 2072 | unsigned long lru_pages = zone_page_state(zone, ls); | ||
| 2073 | |||
| 2072 | /* For pass = 0, we don't shrink the active list */ | 2074 | /* For pass = 0, we don't shrink the active list */ |
| 2073 | if (pass == 0 && | 2075 | if (pass == 0 && (l == LRU_ACTIVE_ANON || |
| 2074 | (l == LRU_ACTIVE || l == LRU_ACTIVE_FILE)) | 2076 | l == LRU_ACTIVE_FILE)) |
| 2075 | continue; | 2077 | continue; |
| 2076 | 2078 | ||
| 2077 | zone->lru[l].nr_scan += | 2079 | zone->lru[l].nr_scan += (lru_pages >> prio) + 1; |
| 2078 | (zone_page_state(zone, NR_LRU_BASE + l) | ||
| 2079 | >> prio) + 1; | ||
| 2080 | if (zone->lru[l].nr_scan >= nr_pages || pass > 3) { | 2080 | if (zone->lru[l].nr_scan >= nr_pages || pass > 3) { |
| 2081 | unsigned long nr_to_scan; | ||
| 2082 | |||
| 2081 | zone->lru[l].nr_scan = 0; | 2083 | zone->lru[l].nr_scan = 0; |
| 2082 | nr_to_scan = min(nr_pages, | 2084 | nr_to_scan = min(nr_pages, lru_pages); |
| 2083 | zone_page_state(zone, | ||
| 2084 | NR_LRU_BASE + l)); | ||
| 2085 | ret += shrink_list(l, nr_to_scan, zone, | 2085 | ret += shrink_list(l, nr_to_scan, zone, |
| 2086 | sc, prio); | 2086 | sc, prio); |
| 2087 | if (ret >= nr_pages) | 2087 | if (ret >= nr_pages) |
| @@ -2089,7 +2089,6 @@ static unsigned long shrink_all_zones(unsigned long nr_pages, int prio, | |||
| 2089 | } | 2089 | } |
| 2090 | } | 2090 | } |
| 2091 | } | 2091 | } |
| 2092 | |||
| 2093 | return ret; | 2092 | return ret; |
| 2094 | } | 2093 | } |
| 2095 | 2094 | ||
| @@ -2112,7 +2111,6 @@ unsigned long shrink_all_memory(unsigned long nr_pages) | |||
| 2112 | .may_swap = 0, | 2111 | .may_swap = 0, |
| 2113 | .swap_cluster_max = nr_pages, | 2112 | .swap_cluster_max = nr_pages, |
| 2114 | .may_writepage = 1, | 2113 | .may_writepage = 1, |
| 2115 | .swappiness = vm_swappiness, | ||
| 2116 | .isolate_pages = isolate_pages_global, | 2114 | .isolate_pages = isolate_pages_global, |
| 2117 | }; | 2115 | }; |
| 2118 | 2116 | ||
| @@ -2146,10 +2144,8 @@ unsigned long shrink_all_memory(unsigned long nr_pages) | |||
| 2146 | int prio; | 2144 | int prio; |
| 2147 | 2145 | ||
| 2148 | /* Force reclaiming mapped pages in the passes #3 and #4 */ | 2146 | /* Force reclaiming mapped pages in the passes #3 and #4 */ |
| 2149 | if (pass > 2) { | 2147 | if (pass > 2) |
| 2150 | sc.may_swap = 1; | 2148 | sc.may_swap = 1; |
| 2151 | sc.swappiness = 100; | ||
| 2152 | } | ||
| 2153 | 2149 | ||
| 2154 | for (prio = DEF_PRIORITY; prio >= 0; prio--) { | 2150 | for (prio = DEF_PRIORITY; prio >= 0; prio--) { |
| 2155 | unsigned long nr_to_scan = nr_pages - ret; | 2151 | unsigned long nr_to_scan = nr_pages - ret; |
diff --git a/net/802/tr.c b/net/802/tr.c index 158150fee462..f47ae289d83b 100644 --- a/net/802/tr.c +++ b/net/802/tr.c | |||
| @@ -668,3 +668,5 @@ module_init(rif_init); | |||
| 668 | 668 | ||
| 669 | EXPORT_SYMBOL(tr_type_trans); | 669 | EXPORT_SYMBOL(tr_type_trans); |
| 670 | EXPORT_SYMBOL(alloc_trdev); | 670 | EXPORT_SYMBOL(alloc_trdev); |
| 671 | |||
| 672 | MODULE_LICENSE("GPL"); | ||
diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c index e9db889d6222..2886d2fb9ab5 100644 --- a/net/8021q/vlan_core.c +++ b/net/8021q/vlan_core.c | |||
| @@ -1,12 +1,16 @@ | |||
| 1 | #include <linux/skbuff.h> | 1 | #include <linux/skbuff.h> |
| 2 | #include <linux/netdevice.h> | 2 | #include <linux/netdevice.h> |
| 3 | #include <linux/if_vlan.h> | 3 | #include <linux/if_vlan.h> |
| 4 | #include <linux/netpoll.h> | ||
| 4 | #include "vlan.h" | 5 | #include "vlan.h" |
| 5 | 6 | ||
| 6 | /* VLAN rx hw acceleration helper. This acts like netif_{rx,receive_skb}(). */ | 7 | /* VLAN rx hw acceleration helper. This acts like netif_{rx,receive_skb}(). */ |
| 7 | int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, | 8 | int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, |
| 8 | u16 vlan_tci, int polling) | 9 | u16 vlan_tci, int polling) |
| 9 | { | 10 | { |
| 11 | if (netpoll_rx(skb)) | ||
| 12 | return NET_RX_DROP; | ||
| 13 | |||
| 10 | if (skb_bond_should_drop(skb)) | 14 | if (skb_bond_should_drop(skb)) |
| 11 | goto drop; | 15 | goto drop; |
| 12 | 16 | ||
| @@ -100,6 +104,9 @@ int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, | |||
| 100 | { | 104 | { |
| 101 | int err = NET_RX_SUCCESS; | 105 | int err = NET_RX_SUCCESS; |
| 102 | 106 | ||
| 107 | if (netpoll_receive_skb(skb)) | ||
| 108 | return NET_RX_DROP; | ||
| 109 | |||
| 103 | switch (vlan_gro_common(napi, grp, vlan_tci, skb)) { | 110 | switch (vlan_gro_common(napi, grp, vlan_tci, skb)) { |
| 104 | case -1: | 111 | case -1: |
| 105 | return netif_receive_skb(skb); | 112 | return netif_receive_skb(skb); |
| @@ -126,6 +133,9 @@ int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, | |||
| 126 | if (!skb) | 133 | if (!skb) |
| 127 | goto out; | 134 | goto out; |
| 128 | 135 | ||
| 136 | if (netpoll_receive_skb(skb)) | ||
| 137 | goto out; | ||
| 138 | |||
| 129 | err = NET_RX_SUCCESS; | 139 | err = NET_RX_SUCCESS; |
| 130 | 140 | ||
| 131 | switch (vlan_gro_common(napi, grp, vlan_tci, skb)) { | 141 | switch (vlan_gro_common(napi, grp, vlan_tci, skb)) { |
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index 4a19acd3a32b..1b34135cf990 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c | |||
| @@ -553,7 +553,7 @@ static int vlan_dev_neigh_setup(struct net_device *dev, struct neigh_parms *pa) | |||
| 553 | int err = 0; | 553 | int err = 0; |
| 554 | 554 | ||
| 555 | if (netif_device_present(real_dev) && ops->ndo_neigh_setup) | 555 | if (netif_device_present(real_dev) && ops->ndo_neigh_setup) |
| 556 | err = ops->ndo_neigh_setup(dev, pa); | 556 | err = ops->ndo_neigh_setup(real_dev, pa); |
| 557 | 557 | ||
| 558 | return err; | 558 | return err; |
| 559 | } | 559 | } |
| @@ -639,6 +639,7 @@ static int vlan_dev_init(struct net_device *dev) | |||
| 639 | dev->hard_header_len = real_dev->hard_header_len + VLAN_HLEN; | 639 | dev->hard_header_len = real_dev->hard_header_len + VLAN_HLEN; |
| 640 | dev->netdev_ops = &vlan_netdev_ops; | 640 | dev->netdev_ops = &vlan_netdev_ops; |
| 641 | } | 641 | } |
| 642 | netdev_resync_ops(dev); | ||
| 642 | 643 | ||
| 643 | if (is_vlan_dev(real_dev)) | 644 | if (is_vlan_dev(real_dev)) |
| 644 | subclass = 1; | 645 | subclass = 1; |
diff --git a/net/9p/protocol.c b/net/9p/protocol.c index dcd7666824ba..fc70147c771e 100644 --- a/net/9p/protocol.c +++ b/net/9p/protocol.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <linux/errno.h> | 29 | #include <linux/errno.h> |
| 30 | #include <linux/uaccess.h> | 30 | #include <linux/uaccess.h> |
| 31 | #include <linux/sched.h> | 31 | #include <linux/sched.h> |
| 32 | #include <linux/types.h> | ||
| 32 | #include <net/9p/9p.h> | 33 | #include <net/9p/9p.h> |
| 33 | #include <net/9p/client.h> | 34 | #include <net/9p/client.h> |
| 34 | #include "protocol.h" | 35 | #include "protocol.h" |
| @@ -160,29 +161,32 @@ p9pdu_vreadf(struct p9_fcall *pdu, int optional, const char *fmt, va_list ap) | |||
| 160 | break; | 161 | break; |
| 161 | case 'w':{ | 162 | case 'w':{ |
| 162 | int16_t *val = va_arg(ap, int16_t *); | 163 | int16_t *val = va_arg(ap, int16_t *); |
| 163 | if (pdu_read(pdu, val, sizeof(*val))) { | 164 | __le16 le_val; |
| 165 | if (pdu_read(pdu, &le_val, sizeof(le_val))) { | ||
| 164 | errcode = -EFAULT; | 166 | errcode = -EFAULT; |
| 165 | break; | 167 | break; |
| 166 | } | 168 | } |
| 167 | *val = cpu_to_le16(*val); | 169 | *val = le16_to_cpu(le_val); |
| 168 | } | 170 | } |
| 169 | break; | 171 | break; |
| 170 | case 'd':{ | 172 | case 'd':{ |
| 171 | int32_t *val = va_arg(ap, int32_t *); | 173 | int32_t *val = va_arg(ap, int32_t *); |
| 172 | if (pdu_read(pdu, val, sizeof(*val))) { | 174 | __le32 le_val; |
| 175 | if (pdu_read(pdu, &le_val, sizeof(le_val))) { | ||
| 173 | errcode = -EFAULT; | 176 | errcode = -EFAULT; |
| 174 | break; | 177 | break; |
| 175 | } | 178 | } |
| 176 | *val = cpu_to_le32(*val); | 179 | *val = le32_to_cpu(le_val); |
| 177 | } | 180 | } |
| 178 | break; | 181 | break; |
| 179 | case 'q':{ | 182 | case 'q':{ |
| 180 | int64_t *val = va_arg(ap, int64_t *); | 183 | int64_t *val = va_arg(ap, int64_t *); |
| 181 | if (pdu_read(pdu, val, sizeof(*val))) { | 184 | __le64 le_val; |
| 185 | if (pdu_read(pdu, &le_val, sizeof(le_val))) { | ||
| 182 | errcode = -EFAULT; | 186 | errcode = -EFAULT; |
| 183 | break; | 187 | break; |
| 184 | } | 188 | } |
| 185 | *val = cpu_to_le64(*val); | 189 | *val = le64_to_cpu(le_val); |
| 186 | } | 190 | } |
| 187 | break; | 191 | break; |
| 188 | case 's':{ | 192 | case 's':{ |
| @@ -362,19 +366,19 @@ p9pdu_vwritef(struct p9_fcall *pdu, int optional, const char *fmt, va_list ap) | |||
| 362 | } | 366 | } |
| 363 | break; | 367 | break; |
| 364 | case 'w':{ | 368 | case 'w':{ |
| 365 | int16_t val = va_arg(ap, int); | 369 | __le16 val = cpu_to_le16(va_arg(ap, int)); |
| 366 | if (pdu_write(pdu, &val, sizeof(val))) | 370 | if (pdu_write(pdu, &val, sizeof(val))) |
| 367 | errcode = -EFAULT; | 371 | errcode = -EFAULT; |
| 368 | } | 372 | } |
| 369 | break; | 373 | break; |
| 370 | case 'd':{ | 374 | case 'd':{ |
| 371 | int32_t val = va_arg(ap, int32_t); | 375 | __le32 val = cpu_to_le32(va_arg(ap, int32_t)); |
| 372 | if (pdu_write(pdu, &val, sizeof(val))) | 376 | if (pdu_write(pdu, &val, sizeof(val))) |
| 373 | errcode = -EFAULT; | 377 | errcode = -EFAULT; |
| 374 | } | 378 | } |
| 375 | break; | 379 | break; |
| 376 | case 'q':{ | 380 | case 'q':{ |
| 377 | int64_t val = va_arg(ap, int64_t); | 381 | __le64 val = cpu_to_le64(va_arg(ap, int64_t)); |
| 378 | if (pdu_write(pdu, &val, sizeof(val))) | 382 | if (pdu_write(pdu, &val, sizeof(val))) |
| 379 | errcode = -EFAULT; | 383 | errcode = -EFAULT; |
| 380 | } | 384 | } |
diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c index bdd9ccea17ce..d2c27c808d3b 100644 --- a/net/bridge/br_forward.c +++ b/net/bridge/br_forward.c | |||
| @@ -67,6 +67,11 @@ static void __br_forward(const struct net_bridge_port *to, struct sk_buff *skb) | |||
| 67 | { | 67 | { |
| 68 | struct net_device *indev; | 68 | struct net_device *indev; |
| 69 | 69 | ||
| 70 | if (skb_warn_if_lro(skb)) { | ||
| 71 | kfree_skb(skb); | ||
| 72 | return; | ||
| 73 | } | ||
| 74 | |||
| 70 | indev = skb->dev; | 75 | indev = skb->dev; |
| 71 | skb->dev = to->dev; | 76 | skb->dev = to->dev; |
| 72 | skb_forward_csum(skb); | 77 | skb_forward_csum(skb); |
| @@ -89,7 +94,7 @@ void br_deliver(const struct net_bridge_port *to, struct sk_buff *skb) | |||
| 89 | /* called with rcu_read_lock */ | 94 | /* called with rcu_read_lock */ |
| 90 | void br_forward(const struct net_bridge_port *to, struct sk_buff *skb) | 95 | void br_forward(const struct net_bridge_port *to, struct sk_buff *skb) |
| 91 | { | 96 | { |
| 92 | if (!skb_warn_if_lro(skb) && should_deliver(to, skb)) { | 97 | if (should_deliver(to, skb)) { |
| 93 | __br_forward(to, skb); | 98 | __br_forward(to, skb); |
| 94 | return; | 99 | return; |
| 95 | } | 100 | } |
diff --git a/net/core/dev.c b/net/core/dev.c index 5379b0c1190a..f1129706ce7b 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
| @@ -1090,7 +1090,7 @@ int dev_open(struct net_device *dev) | |||
| 1090 | /* | 1090 | /* |
| 1091 | * Enable NET_DMA | 1091 | * Enable NET_DMA |
| 1092 | */ | 1092 | */ |
| 1093 | dmaengine_get(); | 1093 | net_dmaengine_get(); |
| 1094 | 1094 | ||
| 1095 | /* | 1095 | /* |
| 1096 | * Initialize multicasting status | 1096 | * Initialize multicasting status |
| @@ -1172,7 +1172,7 @@ int dev_close(struct net_device *dev) | |||
| 1172 | /* | 1172 | /* |
| 1173 | * Shutdown NET_DMA | 1173 | * Shutdown NET_DMA |
| 1174 | */ | 1174 | */ |
| 1175 | dmaengine_put(); | 1175 | net_dmaengine_put(); |
| 1176 | 1176 | ||
| 1177 | return 0; | 1177 | return 0; |
| 1178 | } | 1178 | } |
| @@ -2267,12 +2267,6 @@ int netif_receive_skb(struct sk_buff *skb) | |||
| 2267 | 2267 | ||
| 2268 | rcu_read_lock(); | 2268 | rcu_read_lock(); |
| 2269 | 2269 | ||
| 2270 | /* Don't receive packets in an exiting network namespace */ | ||
| 2271 | if (!net_alive(dev_net(skb->dev))) { | ||
| 2272 | kfree_skb(skb); | ||
| 2273 | goto out; | ||
| 2274 | } | ||
| 2275 | |||
| 2276 | #ifdef CONFIG_NET_CLS_ACT | 2270 | #ifdef CONFIG_NET_CLS_ACT |
| 2277 | if (skb->tc_verd & TC_NCLS) { | 2271 | if (skb->tc_verd & TC_NCLS) { |
| 2278 | skb->tc_verd = CLR_TC_NCLS(skb->tc_verd); | 2272 | skb->tc_verd = CLR_TC_NCLS(skb->tc_verd); |
| @@ -2488,6 +2482,9 @@ static int __napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb) | |||
| 2488 | 2482 | ||
| 2489 | int napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb) | 2483 | int napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb) |
| 2490 | { | 2484 | { |
| 2485 | if (netpoll_receive_skb(skb)) | ||
| 2486 | return NET_RX_DROP; | ||
| 2487 | |||
| 2491 | switch (__napi_gro_receive(napi, skb)) { | 2488 | switch (__napi_gro_receive(napi, skb)) { |
| 2492 | case -1: | 2489 | case -1: |
| 2493 | return netif_receive_skb(skb); | 2490 | return netif_receive_skb(skb); |
| @@ -2558,6 +2555,9 @@ int napi_gro_frags(struct napi_struct *napi, struct napi_gro_fraginfo *info) | |||
| 2558 | if (!skb) | 2555 | if (!skb) |
| 2559 | goto out; | 2556 | goto out; |
| 2560 | 2557 | ||
| 2558 | if (netpoll_receive_skb(skb)) | ||
| 2559 | goto out; | ||
| 2560 | |||
| 2561 | err = NET_RX_SUCCESS; | 2561 | err = NET_RX_SUCCESS; |
| 2562 | 2562 | ||
| 2563 | switch (__napi_gro_receive(napi, skb)) { | 2563 | switch (__napi_gro_receive(napi, skb)) { |
| @@ -4282,6 +4282,39 @@ unsigned long netdev_fix_features(unsigned long features, const char *name) | |||
| 4282 | } | 4282 | } |
| 4283 | EXPORT_SYMBOL(netdev_fix_features); | 4283 | EXPORT_SYMBOL(netdev_fix_features); |
| 4284 | 4284 | ||
| 4285 | /* Some devices need to (re-)set their netdev_ops inside | ||
| 4286 | * ->init() or similar. If that happens, we have to setup | ||
| 4287 | * the compat pointers again. | ||
| 4288 | */ | ||
| 4289 | void netdev_resync_ops(struct net_device *dev) | ||
| 4290 | { | ||
| 4291 | #ifdef CONFIG_COMPAT_NET_DEV_OPS | ||
| 4292 | const struct net_device_ops *ops = dev->netdev_ops; | ||
| 4293 | |||
| 4294 | dev->init = ops->ndo_init; | ||
| 4295 | dev->uninit = ops->ndo_uninit; | ||
| 4296 | dev->open = ops->ndo_open; | ||
| 4297 | dev->change_rx_flags = ops->ndo_change_rx_flags; | ||
| 4298 | dev->set_rx_mode = ops->ndo_set_rx_mode; | ||
| 4299 | dev->set_multicast_list = ops->ndo_set_multicast_list; | ||
| 4300 | dev->set_mac_address = ops->ndo_set_mac_address; | ||
| 4301 | dev->validate_addr = ops->ndo_validate_addr; | ||
| 4302 | dev->do_ioctl = ops->ndo_do_ioctl; | ||
| 4303 | dev->set_config = ops->ndo_set_config; | ||
| 4304 | dev->change_mtu = ops->ndo_change_mtu; | ||
| 4305 | dev->neigh_setup = ops->ndo_neigh_setup; | ||
| 4306 | dev->tx_timeout = ops->ndo_tx_timeout; | ||
| 4307 | dev->get_stats = ops->ndo_get_stats; | ||
| 4308 | dev->vlan_rx_register = ops->ndo_vlan_rx_register; | ||
| 4309 | dev->vlan_rx_add_vid = ops->ndo_vlan_rx_add_vid; | ||
| 4310 | dev->vlan_rx_kill_vid = ops->ndo_vlan_rx_kill_vid; | ||
| 4311 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 4312 | dev->poll_controller = ops->ndo_poll_controller; | ||
| 4313 | #endif | ||
| 4314 | #endif | ||
| 4315 | } | ||
| 4316 | EXPORT_SYMBOL(netdev_resync_ops); | ||
| 4317 | |||
| 4285 | /** | 4318 | /** |
| 4286 | * register_netdevice - register a network device | 4319 | * register_netdevice - register a network device |
| 4287 | * @dev: device to register | 4320 | * @dev: device to register |
| @@ -4326,27 +4359,7 @@ int register_netdevice(struct net_device *dev) | |||
| 4326 | * This is temporary until all network devices are converted. | 4359 | * This is temporary until all network devices are converted. |
| 4327 | */ | 4360 | */ |
| 4328 | if (dev->netdev_ops) { | 4361 | if (dev->netdev_ops) { |
| 4329 | const struct net_device_ops *ops = dev->netdev_ops; | 4362 | netdev_resync_ops(dev); |
| 4330 | |||
| 4331 | dev->init = ops->ndo_init; | ||
| 4332 | dev->uninit = ops->ndo_uninit; | ||
| 4333 | dev->open = ops->ndo_open; | ||
| 4334 | dev->change_rx_flags = ops->ndo_change_rx_flags; | ||
| 4335 | dev->set_rx_mode = ops->ndo_set_rx_mode; | ||
| 4336 | dev->set_multicast_list = ops->ndo_set_multicast_list; | ||
| 4337 | dev->set_mac_address = ops->ndo_set_mac_address; | ||
| 4338 | dev->validate_addr = ops->ndo_validate_addr; | ||
| 4339 | dev->do_ioctl = ops->ndo_do_ioctl; | ||
| 4340 | dev->set_config = ops->ndo_set_config; | ||
| 4341 | dev->change_mtu = ops->ndo_change_mtu; | ||
| 4342 | dev->tx_timeout = ops->ndo_tx_timeout; | ||
| 4343 | dev->get_stats = ops->ndo_get_stats; | ||
| 4344 | dev->vlan_rx_register = ops->ndo_vlan_rx_register; | ||
| 4345 | dev->vlan_rx_add_vid = ops->ndo_vlan_rx_add_vid; | ||
| 4346 | dev->vlan_rx_kill_vid = ops->ndo_vlan_rx_kill_vid; | ||
| 4347 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 4348 | dev->poll_controller = ops->ndo_poll_controller; | ||
| 4349 | #endif | ||
| 4350 | } else { | 4363 | } else { |
| 4351 | char drivername[64]; | 4364 | char drivername[64]; |
| 4352 | pr_info("%s (%s): not using net_device_ops yet\n", | 4365 | pr_info("%s (%s): not using net_device_ops yet\n", |
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index f66c58df8953..278a142d1047 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
| @@ -1994,8 +1994,8 @@ static int neightbl_dump_info(struct sk_buff *skb, struct netlink_callback *cb) | |||
| 1994 | if (!net_eq(neigh_parms_net(p), net)) | 1994 | if (!net_eq(neigh_parms_net(p), net)) |
| 1995 | continue; | 1995 | continue; |
| 1996 | 1996 | ||
| 1997 | if (nidx++ < neigh_skip) | 1997 | if (nidx < neigh_skip) |
| 1998 | continue; | 1998 | goto next; |
| 1999 | 1999 | ||
| 2000 | if (neightbl_fill_param_info(skb, tbl, p, | 2000 | if (neightbl_fill_param_info(skb, tbl, p, |
| 2001 | NETLINK_CB(cb->skb).pid, | 2001 | NETLINK_CB(cb->skb).pid, |
| @@ -2003,6 +2003,8 @@ static int neightbl_dump_info(struct sk_buff *skb, struct netlink_callback *cb) | |||
| 2003 | RTM_NEWNEIGHTBL, | 2003 | RTM_NEWNEIGHTBL, |
| 2004 | NLM_F_MULTI) <= 0) | 2004 | NLM_F_MULTI) <= 0) |
| 2005 | goto out; | 2005 | goto out; |
| 2006 | next: | ||
| 2007 | nidx++; | ||
| 2006 | } | 2008 | } |
| 2007 | 2009 | ||
| 2008 | neigh_skip = 0; | 2010 | neigh_skip = 0; |
| @@ -2082,12 +2084,10 @@ static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb, | |||
| 2082 | if (h > s_h) | 2084 | if (h > s_h) |
| 2083 | s_idx = 0; | 2085 | s_idx = 0; |
| 2084 | for (n = tbl->hash_buckets[h], idx = 0; n; n = n->next) { | 2086 | for (n = tbl->hash_buckets[h], idx = 0; n; n = n->next) { |
| 2085 | int lidx; | ||
| 2086 | if (dev_net(n->dev) != net) | 2087 | if (dev_net(n->dev) != net) |
| 2087 | continue; | 2088 | continue; |
| 2088 | lidx = idx++; | 2089 | if (idx < s_idx) |
| 2089 | if (lidx < s_idx) | 2090 | goto next; |
| 2090 | continue; | ||
| 2091 | if (neigh_fill_info(skb, n, NETLINK_CB(cb->skb).pid, | 2091 | if (neigh_fill_info(skb, n, NETLINK_CB(cb->skb).pid, |
| 2092 | cb->nlh->nlmsg_seq, | 2092 | cb->nlh->nlmsg_seq, |
| 2093 | RTM_NEWNEIGH, | 2093 | RTM_NEWNEIGH, |
| @@ -2096,6 +2096,8 @@ static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb, | |||
| 2096 | rc = -1; | 2096 | rc = -1; |
| 2097 | goto out; | 2097 | goto out; |
| 2098 | } | 2098 | } |
| 2099 | next: | ||
| 2100 | idx++; | ||
| 2099 | } | 2101 | } |
| 2100 | } | 2102 | } |
| 2101 | read_unlock_bh(&tbl->lock); | 2103 | read_unlock_bh(&tbl->lock); |
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index 6ac29a46e23e..484f58750eba 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c | |||
| @@ -77,7 +77,9 @@ static ssize_t netdev_store(struct device *dev, struct device_attribute *attr, | |||
| 77 | if (endp == buf) | 77 | if (endp == buf) |
| 78 | goto err; | 78 | goto err; |
| 79 | 79 | ||
| 80 | rtnl_lock(); | 80 | if (!rtnl_trylock()) |
| 81 | return -ERESTARTSYS; | ||
| 82 | |||
| 81 | if (dev_isalive(net)) { | 83 | if (dev_isalive(net)) { |
| 82 | if ((ret = (*set)(net, new)) == 0) | 84 | if ((ret = (*set)(net, new)) == 0) |
| 83 | ret = len; | 85 | ret = len; |
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 55151faaf90c..e3bebd36f053 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c | |||
| @@ -32,24 +32,14 @@ static __net_init int setup_net(struct net *net) | |||
| 32 | { | 32 | { |
| 33 | /* Must be called with net_mutex held */ | 33 | /* Must be called with net_mutex held */ |
| 34 | struct pernet_operations *ops; | 34 | struct pernet_operations *ops; |
| 35 | int error; | 35 | int error = 0; |
| 36 | struct net_generic *ng; | ||
| 37 | 36 | ||
| 38 | atomic_set(&net->count, 1); | 37 | atomic_set(&net->count, 1); |
| 38 | |||
| 39 | #ifdef NETNS_REFCNT_DEBUG | 39 | #ifdef NETNS_REFCNT_DEBUG |
| 40 | atomic_set(&net->use_count, 0); | 40 | atomic_set(&net->use_count, 0); |
| 41 | #endif | 41 | #endif |
| 42 | 42 | ||
| 43 | error = -ENOMEM; | ||
| 44 | ng = kzalloc(sizeof(struct net_generic) + | ||
| 45 | INITIAL_NET_GEN_PTRS * sizeof(void *), GFP_KERNEL); | ||
| 46 | if (ng == NULL) | ||
| 47 | goto out; | ||
| 48 | |||
| 49 | ng->len = INITIAL_NET_GEN_PTRS; | ||
| 50 | rcu_assign_pointer(net->gen, ng); | ||
| 51 | |||
| 52 | error = 0; | ||
| 53 | list_for_each_entry(ops, &pernet_list, list) { | 43 | list_for_each_entry(ops, &pernet_list, list) { |
| 54 | if (ops->init) { | 44 | if (ops->init) { |
| 55 | error = ops->init(net); | 45 | error = ops->init(net); |
| @@ -70,24 +60,50 @@ out_undo: | |||
| 70 | } | 60 | } |
| 71 | 61 | ||
| 72 | rcu_barrier(); | 62 | rcu_barrier(); |
| 73 | kfree(ng); | ||
| 74 | goto out; | 63 | goto out; |
| 75 | } | 64 | } |
| 76 | 65 | ||
| 66 | static struct net_generic *net_alloc_generic(void) | ||
| 67 | { | ||
| 68 | struct net_generic *ng; | ||
| 69 | size_t generic_size = sizeof(struct net_generic) + | ||
| 70 | INITIAL_NET_GEN_PTRS * sizeof(void *); | ||
| 71 | |||
| 72 | ng = kzalloc(generic_size, GFP_KERNEL); | ||
| 73 | if (ng) | ||
| 74 | ng->len = INITIAL_NET_GEN_PTRS; | ||
| 75 | |||
| 76 | return ng; | ||
| 77 | } | ||
| 78 | |||
| 77 | #ifdef CONFIG_NET_NS | 79 | #ifdef CONFIG_NET_NS |
| 78 | static struct kmem_cache *net_cachep; | 80 | static struct kmem_cache *net_cachep; |
| 79 | static struct workqueue_struct *netns_wq; | 81 | static struct workqueue_struct *netns_wq; |
| 80 | 82 | ||
| 81 | static struct net *net_alloc(void) | 83 | static struct net *net_alloc(void) |
| 82 | { | 84 | { |
| 83 | return kmem_cache_zalloc(net_cachep, GFP_KERNEL); | 85 | struct net *net = NULL; |
| 86 | struct net_generic *ng; | ||
| 87 | |||
| 88 | ng = net_alloc_generic(); | ||
| 89 | if (!ng) | ||
| 90 | goto out; | ||
| 91 | |||
| 92 | net = kmem_cache_zalloc(net_cachep, GFP_KERNEL); | ||
| 93 | if (!net) | ||
| 94 | goto out_free; | ||
| 95 | |||
| 96 | rcu_assign_pointer(net->gen, ng); | ||
| 97 | out: | ||
| 98 | return net; | ||
| 99 | |||
| 100 | out_free: | ||
| 101 | kfree(ng); | ||
| 102 | goto out; | ||
| 84 | } | 103 | } |
| 85 | 104 | ||
| 86 | static void net_free(struct net *net) | 105 | static void net_free(struct net *net) |
| 87 | { | 106 | { |
| 88 | if (!net) | ||
| 89 | return; | ||
| 90 | |||
| 91 | #ifdef NETNS_REFCNT_DEBUG | 107 | #ifdef NETNS_REFCNT_DEBUG |
| 92 | if (unlikely(atomic_read(&net->use_count) != 0)) { | 108 | if (unlikely(atomic_read(&net->use_count) != 0)) { |
| 93 | printk(KERN_EMERG "network namespace not free! Usage: %d\n", | 109 | printk(KERN_EMERG "network namespace not free! Usage: %d\n", |
| @@ -112,27 +128,28 @@ struct net *copy_net_ns(unsigned long flags, struct net *old_net) | |||
| 112 | err = -ENOMEM; | 128 | err = -ENOMEM; |
| 113 | new_net = net_alloc(); | 129 | new_net = net_alloc(); |
| 114 | if (!new_net) | 130 | if (!new_net) |
| 115 | goto out; | 131 | goto out_err; |
| 116 | 132 | ||
| 117 | mutex_lock(&net_mutex); | 133 | mutex_lock(&net_mutex); |
| 118 | err = setup_net(new_net); | 134 | err = setup_net(new_net); |
| 119 | if (err) | 135 | if (!err) { |
| 120 | goto out_unlock; | 136 | rtnl_lock(); |
| 121 | 137 | list_add_tail(&new_net->list, &net_namespace_list); | |
| 122 | rtnl_lock(); | 138 | rtnl_unlock(); |
| 123 | list_add_tail(&new_net->list, &net_namespace_list); | 139 | } |
| 124 | rtnl_unlock(); | ||
| 125 | |||
| 126 | |||
| 127 | out_unlock: | ||
| 128 | mutex_unlock(&net_mutex); | 140 | mutex_unlock(&net_mutex); |
| 141 | |||
| 142 | if (err) | ||
| 143 | goto out_free; | ||
| 129 | out: | 144 | out: |
| 130 | put_net(old_net); | 145 | put_net(old_net); |
| 131 | if (err) { | ||
| 132 | net_free(new_net); | ||
| 133 | new_net = ERR_PTR(err); | ||
| 134 | } | ||
| 135 | return new_net; | 146 | return new_net; |
| 147 | |||
| 148 | out_free: | ||
| 149 | net_free(new_net); | ||
| 150 | out_err: | ||
| 151 | new_net = ERR_PTR(err); | ||
| 152 | goto out; | ||
| 136 | } | 153 | } |
| 137 | 154 | ||
| 138 | static void cleanup_net(struct work_struct *work) | 155 | static void cleanup_net(struct work_struct *work) |
| @@ -140,9 +157,6 @@ static void cleanup_net(struct work_struct *work) | |||
| 140 | struct pernet_operations *ops; | 157 | struct pernet_operations *ops; |
| 141 | struct net *net; | 158 | struct net *net; |
| 142 | 159 | ||
| 143 | /* Be very certain incoming network packets will not find us */ | ||
| 144 | rcu_barrier(); | ||
| 145 | |||
| 146 | net = container_of(work, struct net, work); | 160 | net = container_of(work, struct net, work); |
| 147 | 161 | ||
| 148 | mutex_lock(&net_mutex); | 162 | mutex_lock(&net_mutex); |
| @@ -188,6 +202,7 @@ struct net *copy_net_ns(unsigned long flags, struct net *old_net) | |||
| 188 | 202 | ||
| 189 | static int __init net_ns_init(void) | 203 | static int __init net_ns_init(void) |
| 190 | { | 204 | { |
| 205 | struct net_generic *ng; | ||
| 191 | int err; | 206 | int err; |
| 192 | 207 | ||
| 193 | printk(KERN_INFO "net_namespace: %zd bytes\n", sizeof(struct net)); | 208 | printk(KERN_INFO "net_namespace: %zd bytes\n", sizeof(struct net)); |
| @@ -202,6 +217,12 @@ static int __init net_ns_init(void) | |||
| 202 | panic("Could not create netns workq"); | 217 | panic("Could not create netns workq"); |
| 203 | #endif | 218 | #endif |
| 204 | 219 | ||
| 220 | ng = net_alloc_generic(); | ||
| 221 | if (!ng) | ||
| 222 | panic("Could not allocate generic netns"); | ||
| 223 | |||
| 224 | rcu_assign_pointer(init_net.gen, ng); | ||
| 225 | |||
| 205 | mutex_lock(&net_mutex); | 226 | mutex_lock(&net_mutex); |
| 206 | err = setup_net(&init_net); | 227 | err = setup_net(&init_net); |
| 207 | 228 | ||
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index da74b844f4ea..c6a6b166f8d6 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
| @@ -143,14 +143,6 @@ void skb_under_panic(struct sk_buff *skb, int sz, void *here) | |||
| 143 | BUG(); | 143 | BUG(); |
| 144 | } | 144 | } |
| 145 | 145 | ||
| 146 | void skb_truesize_bug(struct sk_buff *skb) | ||
| 147 | { | ||
| 148 | WARN(net_ratelimit(), KERN_ERR "SKB BUG: Invalid truesize (%u) " | ||
| 149 | "len=%u, sizeof(sk_buff)=%Zd\n", | ||
| 150 | skb->truesize, skb->len, sizeof(struct sk_buff)); | ||
| 151 | } | ||
| 152 | EXPORT_SYMBOL(skb_truesize_bug); | ||
| 153 | |||
| 154 | /* Allocate a new skbuff. We do this ourselves so we can fill in a few | 146 | /* Allocate a new skbuff. We do this ourselves so we can fill in a few |
| 155 | * 'private' fields and also do memory statistics to find all the | 147 | * 'private' fields and also do memory statistics to find all the |
| 156 | * [BEEP] leaks. | 148 | * [BEEP] leaks. |
diff --git a/net/core/sock.c b/net/core/sock.c index f3a0d08cbb48..5f97caa158e8 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
| @@ -696,6 +696,8 @@ int sock_getsockopt(struct socket *sock, int level, int optname, | |||
| 696 | if (len < 0) | 696 | if (len < 0) |
| 697 | return -EINVAL; | 697 | return -EINVAL; |
| 698 | 698 | ||
| 699 | memset(&v, 0, sizeof(v)); | ||
| 700 | |||
| 699 | switch(optname) { | 701 | switch(optname) { |
| 700 | case SO_DEBUG: | 702 | case SO_DEBUG: |
| 701 | v.val = sock_flag(sk, SOCK_DBG); | 703 | v.val = sock_flag(sk, SOCK_DBG); |
| @@ -1135,7 +1137,6 @@ void sock_rfree(struct sk_buff *skb) | |||
| 1135 | { | 1137 | { |
| 1136 | struct sock *sk = skb->sk; | 1138 | struct sock *sk = skb->sk; |
| 1137 | 1139 | ||
| 1138 | skb_truesize_check(skb); | ||
| 1139 | atomic_sub(skb->truesize, &sk->sk_rmem_alloc); | 1140 | atomic_sub(skb->truesize, &sk->sk_rmem_alloc); |
| 1140 | sk_mem_uncharge(skb->sk, skb->truesize); | 1141 | sk_mem_uncharge(skb->sk, skb->truesize); |
| 1141 | } | 1142 | } |
diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c index 6bb2635b5ded..7bc992976d29 100644 --- a/net/ipv4/cipso_ipv4.c +++ b/net/ipv4/cipso_ipv4.c | |||
| @@ -3,11 +3,16 @@ | |||
| 3 | * | 3 | * |
| 4 | * This is an implementation of the CIPSO 2.2 protocol as specified in | 4 | * This is an implementation of the CIPSO 2.2 protocol as specified in |
| 5 | * draft-ietf-cipso-ipsecurity-01.txt with additional tag types as found in | 5 | * draft-ietf-cipso-ipsecurity-01.txt with additional tag types as found in |
| 6 | * FIPS-188, copies of both documents can be found in the Documentation | 6 | * FIPS-188. While CIPSO never became a full IETF RFC standard many vendors |
| 7 | * directory. While CIPSO never became a full IETF RFC standard many vendors | ||
| 8 | * have chosen to adopt the protocol and over the years it has become a | 7 | * have chosen to adopt the protocol and over the years it has become a |
| 9 | * de-facto standard for labeled networking. | 8 | * de-facto standard for labeled networking. |
| 10 | * | 9 | * |
| 10 | * The CIPSO draft specification can be found in the kernel's Documentation | ||
| 11 | * directory as well as the following URL: | ||
| 12 | * http://netlabel.sourceforge.net/files/draft-ietf-cipso-ipsecurity-01.txt | ||
| 13 | * The FIPS-188 specification can be found at the following URL: | ||
| 14 | * http://www.itl.nist.gov/fipspubs/fip188.htm | ||
| 15 | * | ||
| 11 | * Author: Paul Moore <paul.moore@hp.com> | 16 | * Author: Paul Moore <paul.moore@hp.com> |
| 12 | * | 17 | * |
| 13 | */ | 18 | */ |
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index 705b33b184a3..fc562d29cc46 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c | |||
| @@ -1205,7 +1205,7 @@ static struct pernet_operations __net_initdata icmp_sk_ops = { | |||
| 1205 | 1205 | ||
| 1206 | int __init icmp_init(void) | 1206 | int __init icmp_init(void) |
| 1207 | { | 1207 | { |
| 1208 | return register_pernet_device(&icmp_sk_ops); | 1208 | return register_pernet_subsys(&icmp_sk_ops); |
| 1209 | } | 1209 | } |
| 1210 | 1210 | ||
| 1211 | EXPORT_SYMBOL(icmp_err_convert); | 1211 | EXPORT_SYMBOL(icmp_err_convert); |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index a6961d75c7ea..c28976a7e596 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
| @@ -1374,7 +1374,8 @@ static u8 tcp_sacktag_one(struct sk_buff *skb, struct sock *sk, | |||
| 1374 | 1374 | ||
| 1375 | static int tcp_shifted_skb(struct sock *sk, struct sk_buff *skb, | 1375 | static int tcp_shifted_skb(struct sock *sk, struct sk_buff *skb, |
| 1376 | struct tcp_sacktag_state *state, | 1376 | struct tcp_sacktag_state *state, |
| 1377 | unsigned int pcount, int shifted, int mss) | 1377 | unsigned int pcount, int shifted, int mss, |
| 1378 | int dup_sack) | ||
| 1378 | { | 1379 | { |
| 1379 | struct tcp_sock *tp = tcp_sk(sk); | 1380 | struct tcp_sock *tp = tcp_sk(sk); |
| 1380 | struct sk_buff *prev = tcp_write_queue_prev(sk, skb); | 1381 | struct sk_buff *prev = tcp_write_queue_prev(sk, skb); |
| @@ -1410,7 +1411,7 @@ static int tcp_shifted_skb(struct sock *sk, struct sk_buff *skb, | |||
| 1410 | } | 1411 | } |
| 1411 | 1412 | ||
| 1412 | /* We discard results */ | 1413 | /* We discard results */ |
| 1413 | tcp_sacktag_one(skb, sk, state, 0, pcount); | 1414 | tcp_sacktag_one(skb, sk, state, dup_sack, pcount); |
| 1414 | 1415 | ||
| 1415 | /* Difference in this won't matter, both ACKed by the same cumul. ACK */ | 1416 | /* Difference in this won't matter, both ACKed by the same cumul. ACK */ |
| 1416 | TCP_SKB_CB(prev)->sacked |= (TCP_SKB_CB(skb)->sacked & TCPCB_EVER_RETRANS); | 1417 | TCP_SKB_CB(prev)->sacked |= (TCP_SKB_CB(skb)->sacked & TCPCB_EVER_RETRANS); |
| @@ -1561,7 +1562,7 @@ static struct sk_buff *tcp_shift_skb_data(struct sock *sk, struct sk_buff *skb, | |||
| 1561 | 1562 | ||
| 1562 | if (!skb_shift(prev, skb, len)) | 1563 | if (!skb_shift(prev, skb, len)) |
| 1563 | goto fallback; | 1564 | goto fallback; |
| 1564 | if (!tcp_shifted_skb(sk, skb, state, pcount, len, mss)) | 1565 | if (!tcp_shifted_skb(sk, skb, state, pcount, len, mss, dup_sack)) |
| 1565 | goto out; | 1566 | goto out; |
| 1566 | 1567 | ||
| 1567 | /* Hole filled allows collapsing with the next as well, this is very | 1568 | /* Hole filled allows collapsing with the next as well, this is very |
| @@ -1580,7 +1581,7 @@ static struct sk_buff *tcp_shift_skb_data(struct sock *sk, struct sk_buff *skb, | |||
| 1580 | len = skb->len; | 1581 | len = skb->len; |
| 1581 | if (skb_shift(prev, skb, len)) { | 1582 | if (skb_shift(prev, skb, len)) { |
| 1582 | pcount += tcp_skb_pcount(skb); | 1583 | pcount += tcp_skb_pcount(skb); |
| 1583 | tcp_shifted_skb(sk, skb, state, tcp_skb_pcount(skb), len, mss); | 1584 | tcp_shifted_skb(sk, skb, state, tcp_skb_pcount(skb), len, mss, 0); |
| 1584 | } | 1585 | } |
| 1585 | 1586 | ||
| 1586 | out: | 1587 | out: |
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 19d7b429a262..cf74c416831a 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
| @@ -2443,7 +2443,7 @@ static struct pernet_operations __net_initdata tcp_sk_ops = { | |||
| 2443 | void __init tcp_v4_init(void) | 2443 | void __init tcp_v4_init(void) |
| 2444 | { | 2444 | { |
| 2445 | inet_hashinfo_init(&tcp_hashinfo); | 2445 | inet_hashinfo_init(&tcp_hashinfo); |
| 2446 | if (register_pernet_device(&tcp_sk_ops)) | 2446 | if (register_pernet_subsys(&tcp_sk_ops)) |
| 2447 | panic("Failed to create the TCP control socket.\n"); | 2447 | panic("Failed to create the TCP control socket.\n"); |
| 2448 | } | 2448 | } |
| 2449 | 2449 | ||
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index dda42f0bd7a3..da2c3b8794f2 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
| @@ -2023,7 +2023,6 @@ void tcp_xmit_retransmit_queue(struct sock *sk) | |||
| 2023 | last_lost = tp->snd_una; | 2023 | last_lost = tp->snd_una; |
| 2024 | } | 2024 | } |
| 2025 | 2025 | ||
| 2026 | /* First pass: retransmit lost packets. */ | ||
| 2027 | tcp_for_write_queue_from(skb, sk) { | 2026 | tcp_for_write_queue_from(skb, sk) { |
| 2028 | __u8 sacked = TCP_SKB_CB(skb)->sacked; | 2027 | __u8 sacked = TCP_SKB_CB(skb)->sacked; |
| 2029 | 2028 | ||
diff --git a/net/ipv4/tcp_scalable.c b/net/ipv4/tcp_scalable.c index 2747ec7bfb63..4660b088a8ce 100644 --- a/net/ipv4/tcp_scalable.c +++ b/net/ipv4/tcp_scalable.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* Tom Kelly's Scalable TCP | 1 | /* Tom Kelly's Scalable TCP |
| 2 | * | 2 | * |
| 3 | * See htt://www-lce.eng.cam.ac.uk/~ctk21/scalable/ | 3 | * See http://www.deneholme.net/tom/scalable/ |
| 4 | * | 4 | * |
| 5 | * John Heffner <jheffner@sc.edu> | 5 | * John Heffner <jheffner@sc.edu> |
| 6 | */ | 6 | */ |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index cc3a0a06c004..c47c989cb1fb 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
| @@ -1234,8 +1234,7 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, | |||
| 1234 | struct udphdr *uh; | 1234 | struct udphdr *uh; |
| 1235 | unsigned short ulen; | 1235 | unsigned short ulen; |
| 1236 | struct rtable *rt = (struct rtable*)skb->dst; | 1236 | struct rtable *rt = (struct rtable*)skb->dst; |
| 1237 | __be32 saddr = ip_hdr(skb)->saddr; | 1237 | __be32 saddr, daddr; |
| 1238 | __be32 daddr = ip_hdr(skb)->daddr; | ||
| 1239 | struct net *net = dev_net(skb->dev); | 1238 | struct net *net = dev_net(skb->dev); |
| 1240 | 1239 | ||
| 1241 | /* | 1240 | /* |
| @@ -1259,6 +1258,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, | |||
| 1259 | if (udp4_csum_init(skb, uh, proto)) | 1258 | if (udp4_csum_init(skb, uh, proto)) |
| 1260 | goto csum_error; | 1259 | goto csum_error; |
| 1261 | 1260 | ||
| 1261 | saddr = ip_hdr(skb)->saddr; | ||
| 1262 | daddr = ip_hdr(skb)->daddr; | ||
| 1263 | |||
| 1262 | if (rt->rt_flags & (RTCF_BROADCAST|RTCF_MULTICAST)) | 1264 | if (rt->rt_flags & (RTCF_BROADCAST|RTCF_MULTICAST)) |
| 1263 | return __udp4_lib_mcast_deliver(net, skb, uh, | 1265 | return __udp4_lib_mcast_deliver(net, skb, uh, |
| 1264 | saddr, daddr, udptable); | 1266 | saddr, daddr, udptable); |
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index f9afb452249c..1220e2c7831e 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
| @@ -493,15 +493,17 @@ static void addrconf_forward_change(struct net *net, __s32 newf) | |||
| 493 | read_unlock(&dev_base_lock); | 493 | read_unlock(&dev_base_lock); |
| 494 | } | 494 | } |
| 495 | 495 | ||
| 496 | static void addrconf_fixup_forwarding(struct ctl_table *table, int *p, int old) | 496 | static int addrconf_fixup_forwarding(struct ctl_table *table, int *p, int old) |
| 497 | { | 497 | { |
| 498 | struct net *net; | 498 | struct net *net; |
| 499 | 499 | ||
| 500 | net = (struct net *)table->extra2; | 500 | net = (struct net *)table->extra2; |
| 501 | if (p == &net->ipv6.devconf_dflt->forwarding) | 501 | if (p == &net->ipv6.devconf_dflt->forwarding) |
| 502 | return; | 502 | return 0; |
| 503 | |||
| 504 | if (!rtnl_trylock()) | ||
| 505 | return -ERESTARTSYS; | ||
| 503 | 506 | ||
| 504 | rtnl_lock(); | ||
| 505 | if (p == &net->ipv6.devconf_all->forwarding) { | 507 | if (p == &net->ipv6.devconf_all->forwarding) { |
| 506 | __s32 newf = net->ipv6.devconf_all->forwarding; | 508 | __s32 newf = net->ipv6.devconf_all->forwarding; |
| 507 | net->ipv6.devconf_dflt->forwarding = newf; | 509 | net->ipv6.devconf_dflt->forwarding = newf; |
| @@ -512,6 +514,7 @@ static void addrconf_fixup_forwarding(struct ctl_table *table, int *p, int old) | |||
| 512 | 514 | ||
| 513 | if (*p) | 515 | if (*p) |
| 514 | rt6_purge_dflt_routers(net); | 516 | rt6_purge_dflt_routers(net); |
| 517 | return 1; | ||
| 515 | } | 518 | } |
| 516 | #endif | 519 | #endif |
| 517 | 520 | ||
| @@ -2608,9 +2611,6 @@ static int addrconf_ifdown(struct net_device *dev, int how) | |||
| 2608 | 2611 | ||
| 2609 | ASSERT_RTNL(); | 2612 | ASSERT_RTNL(); |
| 2610 | 2613 | ||
| 2611 | if ((dev->flags & IFF_LOOPBACK) && how == 1) | ||
| 2612 | how = 0; | ||
| 2613 | |||
| 2614 | rt6_ifdown(net, dev); | 2614 | rt6_ifdown(net, dev); |
| 2615 | neigh_ifdown(&nd_tbl, dev); | 2615 | neigh_ifdown(&nd_tbl, dev); |
| 2616 | 2616 | ||
| @@ -3983,7 +3983,7 @@ int addrconf_sysctl_forward(ctl_table *ctl, int write, struct file * filp, | |||
| 3983 | ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos); | 3983 | ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos); |
| 3984 | 3984 | ||
| 3985 | if (write) | 3985 | if (write) |
| 3986 | addrconf_fixup_forwarding(ctl, valp, val); | 3986 | ret = addrconf_fixup_forwarding(ctl, valp, val); |
| 3987 | return ret; | 3987 | return ret; |
| 3988 | } | 3988 | } |
| 3989 | 3989 | ||
| @@ -4019,8 +4019,7 @@ static int addrconf_sysctl_forward_strategy(ctl_table *table, | |||
| 4019 | } | 4019 | } |
| 4020 | 4020 | ||
| 4021 | *valp = new; | 4021 | *valp = new; |
| 4022 | addrconf_fixup_forwarding(table, valp, val); | 4022 | return addrconf_fixup_forwarding(table, valp, val); |
| 4023 | return 1; | ||
| 4024 | } | 4023 | } |
| 4025 | 4024 | ||
| 4026 | static struct addrconf_sysctl_table | 4025 | static struct addrconf_sysctl_table |
| @@ -4446,25 +4445,6 @@ int unregister_inet6addr_notifier(struct notifier_block *nb) | |||
| 4446 | 4445 | ||
| 4447 | EXPORT_SYMBOL(unregister_inet6addr_notifier); | 4446 | EXPORT_SYMBOL(unregister_inet6addr_notifier); |
| 4448 | 4447 | ||
| 4449 | static void addrconf_net_exit(struct net *net) | ||
| 4450 | { | ||
| 4451 | struct net_device *dev; | ||
| 4452 | |||
| 4453 | rtnl_lock(); | ||
| 4454 | /* clean dev list */ | ||
| 4455 | for_each_netdev(net, dev) { | ||
| 4456 | if (__in6_dev_get(dev) == NULL) | ||
| 4457 | continue; | ||
| 4458 | addrconf_ifdown(dev, 1); | ||
| 4459 | } | ||
| 4460 | addrconf_ifdown(net->loopback_dev, 2); | ||
| 4461 | rtnl_unlock(); | ||
| 4462 | } | ||
| 4463 | |||
| 4464 | static struct pernet_operations addrconf_net_ops = { | ||
| 4465 | .exit = addrconf_net_exit, | ||
| 4466 | }; | ||
| 4467 | |||
| 4468 | /* | 4448 | /* |
| 4469 | * Init / cleanup code | 4449 | * Init / cleanup code |
| 4470 | */ | 4450 | */ |
| @@ -4506,10 +4486,6 @@ int __init addrconf_init(void) | |||
| 4506 | if (err) | 4486 | if (err) |
| 4507 | goto errlo; | 4487 | goto errlo; |
| 4508 | 4488 | ||
| 4509 | err = register_pernet_device(&addrconf_net_ops); | ||
| 4510 | if (err) | ||
| 4511 | return err; | ||
| 4512 | |||
| 4513 | register_netdevice_notifier(&ipv6_dev_notf); | 4489 | register_netdevice_notifier(&ipv6_dev_notf); |
| 4514 | 4490 | ||
| 4515 | addrconf_verify(0); | 4491 | addrconf_verify(0); |
| @@ -4539,15 +4515,22 @@ errlo: | |||
| 4539 | void addrconf_cleanup(void) | 4515 | void addrconf_cleanup(void) |
| 4540 | { | 4516 | { |
| 4541 | struct inet6_ifaddr *ifa; | 4517 | struct inet6_ifaddr *ifa; |
| 4518 | struct net_device *dev; | ||
| 4542 | int i; | 4519 | int i; |
| 4543 | 4520 | ||
| 4544 | unregister_netdevice_notifier(&ipv6_dev_notf); | 4521 | unregister_netdevice_notifier(&ipv6_dev_notf); |
| 4545 | unregister_pernet_device(&addrconf_net_ops); | ||
| 4546 | |||
| 4547 | unregister_pernet_subsys(&addrconf_ops); | 4522 | unregister_pernet_subsys(&addrconf_ops); |
| 4548 | 4523 | ||
| 4549 | rtnl_lock(); | 4524 | rtnl_lock(); |
| 4550 | 4525 | ||
| 4526 | /* clean dev list */ | ||
| 4527 | for_each_netdev(&init_net, dev) { | ||
| 4528 | if (__in6_dev_get(dev) == NULL) | ||
| 4529 | continue; | ||
| 4530 | addrconf_ifdown(dev, 1); | ||
| 4531 | } | ||
| 4532 | addrconf_ifdown(init_net.loopback_dev, 2); | ||
| 4533 | |||
| 4551 | /* | 4534 | /* |
| 4552 | * Check hash table. | 4535 | * Check hash table. |
| 4553 | */ | 4536 | */ |
| @@ -4568,6 +4551,4 @@ void addrconf_cleanup(void) | |||
| 4568 | 4551 | ||
| 4569 | del_timer(&addr_chk_timer); | 4552 | del_timer(&addr_chk_timer); |
| 4570 | rtnl_unlock(); | 4553 | rtnl_unlock(); |
| 4571 | |||
| 4572 | unregister_pernet_subsys(&addrconf_net_ops); | ||
| 4573 | } | 4554 | } |
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index c802bc1658a8..da944eca2ca6 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c | |||
| @@ -72,6 +72,10 @@ MODULE_LICENSE("GPL"); | |||
| 72 | static struct list_head inetsw6[SOCK_MAX]; | 72 | static struct list_head inetsw6[SOCK_MAX]; |
| 73 | static DEFINE_SPINLOCK(inetsw6_lock); | 73 | static DEFINE_SPINLOCK(inetsw6_lock); |
| 74 | 74 | ||
| 75 | static int disable_ipv6 = 0; | ||
| 76 | module_param_named(disable, disable_ipv6, int, 0); | ||
| 77 | MODULE_PARM_DESC(disable, "Disable IPv6 such that it is non-functional"); | ||
| 78 | |||
| 75 | static __inline__ struct ipv6_pinfo *inet6_sk_generic(struct sock *sk) | 79 | static __inline__ struct ipv6_pinfo *inet6_sk_generic(struct sock *sk) |
| 76 | { | 80 | { |
| 77 | const int offset = sk->sk_prot->obj_size - sizeof(struct ipv6_pinfo); | 81 | const int offset = sk->sk_prot->obj_size - sizeof(struct ipv6_pinfo); |
| @@ -991,10 +995,21 @@ static int __init inet6_init(void) | |||
| 991 | { | 995 | { |
| 992 | struct sk_buff *dummy_skb; | 996 | struct sk_buff *dummy_skb; |
| 993 | struct list_head *r; | 997 | struct list_head *r; |
| 994 | int err; | 998 | int err = 0; |
| 995 | 999 | ||
| 996 | BUILD_BUG_ON(sizeof(struct inet6_skb_parm) > sizeof(dummy_skb->cb)); | 1000 | BUILD_BUG_ON(sizeof(struct inet6_skb_parm) > sizeof(dummy_skb->cb)); |
| 997 | 1001 | ||
| 1002 | /* Register the socket-side information for inet6_create. */ | ||
| 1003 | for(r = &inetsw6[0]; r < &inetsw6[SOCK_MAX]; ++r) | ||
| 1004 | INIT_LIST_HEAD(r); | ||
| 1005 | |||
| 1006 | if (disable_ipv6) { | ||
| 1007 | printk(KERN_INFO | ||
| 1008 | "IPv6: Loaded, but administratively disabled, " | ||
| 1009 | "reboot required to enable\n"); | ||
| 1010 | goto out; | ||
| 1011 | } | ||
| 1012 | |||
| 998 | err = proto_register(&tcpv6_prot, 1); | 1013 | err = proto_register(&tcpv6_prot, 1); |
| 999 | if (err) | 1014 | if (err) |
| 1000 | goto out; | 1015 | goto out; |
| @@ -1012,10 +1027,6 @@ static int __init inet6_init(void) | |||
| 1012 | goto out_unregister_udplite_proto; | 1027 | goto out_unregister_udplite_proto; |
| 1013 | 1028 | ||
| 1014 | 1029 | ||
| 1015 | /* Register the socket-side information for inet6_create. */ | ||
| 1016 | for(r = &inetsw6[0]; r < &inetsw6[SOCK_MAX]; ++r) | ||
| 1017 | INIT_LIST_HEAD(r); | ||
| 1018 | |||
| 1019 | /* We MUST register RAW sockets before we create the ICMP6, | 1030 | /* We MUST register RAW sockets before we create the ICMP6, |
| 1020 | * IGMP6, or NDISC control sockets. | 1031 | * IGMP6, or NDISC control sockets. |
| 1021 | */ | 1032 | */ |
diff --git a/net/ipv6/inet6_hashtables.c b/net/ipv6/inet6_hashtables.c index 8fe267feb81e..1bcc3431859e 100644 --- a/net/ipv6/inet6_hashtables.c +++ b/net/ipv6/inet6_hashtables.c | |||
| @@ -258,11 +258,11 @@ unique: | |||
| 258 | 258 | ||
| 259 | if (twp != NULL) { | 259 | if (twp != NULL) { |
| 260 | *twp = tw; | 260 | *twp = tw; |
| 261 | NET_INC_STATS_BH(twsk_net(tw), LINUX_MIB_TIMEWAITRECYCLED); | 261 | NET_INC_STATS_BH(net, LINUX_MIB_TIMEWAITRECYCLED); |
| 262 | } else if (tw != NULL) { | 262 | } else if (tw != NULL) { |
| 263 | /* Silly. Should hash-dance instead... */ | 263 | /* Silly. Should hash-dance instead... */ |
| 264 | inet_twsk_deschedule(tw, death_row); | 264 | inet_twsk_deschedule(tw, death_row); |
| 265 | NET_INC_STATS_BH(twsk_net(tw), LINUX_MIB_TIMEWAITRECYCLED); | 265 | NET_INC_STATS_BH(net, LINUX_MIB_TIMEWAITRECYCLED); |
| 266 | 266 | ||
| 267 | inet_twsk_put(tw); | 267 | inet_twsk_put(tw); |
| 268 | } | 268 | } |
diff --git a/net/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c index c62dd247774f..7712578bdc66 100644 --- a/net/ipv6/ip6_flowlabel.c +++ b/net/ipv6/ip6_flowlabel.c | |||
| @@ -323,17 +323,21 @@ static struct ip6_flowlabel * | |||
| 323 | fl_create(struct net *net, struct in6_flowlabel_req *freq, char __user *optval, | 323 | fl_create(struct net *net, struct in6_flowlabel_req *freq, char __user *optval, |
| 324 | int optlen, int *err_p) | 324 | int optlen, int *err_p) |
| 325 | { | 325 | { |
| 326 | struct ip6_flowlabel *fl; | 326 | struct ip6_flowlabel *fl = NULL; |
| 327 | int olen; | 327 | int olen; |
| 328 | int addr_type; | 328 | int addr_type; |
| 329 | int err; | 329 | int err; |
| 330 | 330 | ||
| 331 | olen = optlen - CMSG_ALIGN(sizeof(*freq)); | ||
| 332 | err = -EINVAL; | ||
| 333 | if (olen > 64 * 1024) | ||
| 334 | goto done; | ||
| 335 | |||
| 331 | err = -ENOMEM; | 336 | err = -ENOMEM; |
| 332 | fl = kzalloc(sizeof(*fl), GFP_KERNEL); | 337 | fl = kzalloc(sizeof(*fl), GFP_KERNEL); |
| 333 | if (fl == NULL) | 338 | if (fl == NULL) |
| 334 | goto done; | 339 | goto done; |
| 335 | 340 | ||
| 336 | olen = optlen - CMSG_ALIGN(sizeof(*freq)); | ||
| 337 | if (olen > 0) { | 341 | if (olen > 0) { |
| 338 | struct msghdr msg; | 342 | struct msghdr msg; |
| 339 | struct flowi flowi; | 343 | struct flowi flowi; |
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c index 58e2b0d93758..d994c55a5b16 100644 --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c | |||
| @@ -249,8 +249,8 @@ static struct ip6_tnl *ip6_tnl_create(struct net *net, struct ip6_tnl_parm *p) | |||
| 249 | } | 249 | } |
| 250 | 250 | ||
| 251 | t = netdev_priv(dev); | 251 | t = netdev_priv(dev); |
| 252 | ip6_tnl_dev_init(dev); | ||
| 253 | t->parms = *p; | 252 | t->parms = *p; |
| 253 | ip6_tnl_dev_init(dev); | ||
| 254 | 254 | ||
| 255 | if ((err = register_netdevice(dev)) < 0) | 255 | if ((err = register_netdevice(dev)) < 0) |
| 256 | goto failed_free; | 256 | goto failed_free; |
diff --git a/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c b/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c index c455cf4ee756..72dbb6d1a6b3 100644 --- a/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c +++ b/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c | |||
| @@ -49,8 +49,19 @@ static bool icmpv6_pkt_to_tuple(const struct sk_buff *skb, | |||
| 49 | static const u_int8_t invmap[] = { | 49 | static const u_int8_t invmap[] = { |
| 50 | [ICMPV6_ECHO_REQUEST - 128] = ICMPV6_ECHO_REPLY + 1, | 50 | [ICMPV6_ECHO_REQUEST - 128] = ICMPV6_ECHO_REPLY + 1, |
| 51 | [ICMPV6_ECHO_REPLY - 128] = ICMPV6_ECHO_REQUEST + 1, | 51 | [ICMPV6_ECHO_REPLY - 128] = ICMPV6_ECHO_REQUEST + 1, |
| 52 | [ICMPV6_NI_QUERY - 128] = ICMPV6_NI_QUERY + 1, | 52 | [ICMPV6_NI_QUERY - 128] = ICMPV6_NI_REPLY + 1, |
| 53 | [ICMPV6_NI_REPLY - 128] = ICMPV6_NI_REPLY +1 | 53 | [ICMPV6_NI_REPLY - 128] = ICMPV6_NI_QUERY +1 |
| 54 | }; | ||
| 55 | |||
| 56 | static const u_int8_t noct_valid_new[] = { | ||
| 57 | [ICMPV6_MGM_QUERY - 130] = 1, | ||
| 58 | [ICMPV6_MGM_REPORT -130] = 1, | ||
| 59 | [ICMPV6_MGM_REDUCTION - 130] = 1, | ||
| 60 | [NDISC_ROUTER_SOLICITATION - 130] = 1, | ||
| 61 | [NDISC_ROUTER_ADVERTISEMENT - 130] = 1, | ||
| 62 | [NDISC_NEIGHBOUR_SOLICITATION - 130] = 1, | ||
| 63 | [NDISC_NEIGHBOUR_ADVERTISEMENT - 130] = 1, | ||
| 64 | [ICMPV6_MLD2_REPORT - 130] = 1 | ||
| 54 | }; | 65 | }; |
| 55 | 66 | ||
| 56 | static bool icmpv6_invert_tuple(struct nf_conntrack_tuple *tuple, | 67 | static bool icmpv6_invert_tuple(struct nf_conntrack_tuple *tuple, |
| @@ -178,6 +189,7 @@ icmpv6_error(struct net *net, struct sk_buff *skb, unsigned int dataoff, | |||
| 178 | { | 189 | { |
| 179 | const struct icmp6hdr *icmp6h; | 190 | const struct icmp6hdr *icmp6h; |
| 180 | struct icmp6hdr _ih; | 191 | struct icmp6hdr _ih; |
| 192 | int type; | ||
| 181 | 193 | ||
| 182 | icmp6h = skb_header_pointer(skb, dataoff, sizeof(_ih), &_ih); | 194 | icmp6h = skb_header_pointer(skb, dataoff, sizeof(_ih), &_ih); |
| 183 | if (icmp6h == NULL) { | 195 | if (icmp6h == NULL) { |
| @@ -189,11 +201,21 @@ icmpv6_error(struct net *net, struct sk_buff *skb, unsigned int dataoff, | |||
| 189 | 201 | ||
| 190 | if (net->ct.sysctl_checksum && hooknum == NF_INET_PRE_ROUTING && | 202 | if (net->ct.sysctl_checksum && hooknum == NF_INET_PRE_ROUTING && |
| 191 | nf_ip6_checksum(skb, hooknum, dataoff, IPPROTO_ICMPV6)) { | 203 | nf_ip6_checksum(skb, hooknum, dataoff, IPPROTO_ICMPV6)) { |
| 192 | nf_log_packet(PF_INET6, 0, skb, NULL, NULL, NULL, | 204 | if (LOG_INVALID(net, IPPROTO_ICMPV6)) |
| 193 | "nf_ct_icmpv6: ICMPv6 checksum failed\n"); | 205 | nf_log_packet(PF_INET6, 0, skb, NULL, NULL, NULL, |
| 206 | "nf_ct_icmpv6: ICMPv6 checksum failed "); | ||
| 194 | return -NF_ACCEPT; | 207 | return -NF_ACCEPT; |
| 195 | } | 208 | } |
| 196 | 209 | ||
| 210 | type = icmp6h->icmp6_type - 130; | ||
| 211 | if (type >= 0 && type < sizeof(noct_valid_new) && | ||
| 212 | noct_valid_new[type]) { | ||
| 213 | skb->nfct = &nf_conntrack_untracked.ct_general; | ||
| 214 | skb->nfctinfo = IP_CT_NEW; | ||
| 215 | nf_conntrack_get(skb->nfct); | ||
| 216 | return NF_ACCEPT; | ||
| 217 | } | ||
| 218 | |||
| 197 | /* is not error message ? */ | 219 | /* is not error message ? */ |
| 198 | if (icmp6h->icmp6_type >= 128) | 220 | if (icmp6h->icmp6_type >= 128) |
| 199 | return NF_ACCEPT; | 221 | return NF_ACCEPT; |
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 4278e545638f..94de5033f0b6 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
| @@ -1343,6 +1343,8 @@ int ieee80211_master_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 1343 | list) { | 1343 | list) { |
| 1344 | if (!netif_running(sdata->dev)) | 1344 | if (!netif_running(sdata->dev)) |
| 1345 | continue; | 1345 | continue; |
| 1346 | if (sdata->vif.type != NL80211_IFTYPE_AP) | ||
| 1347 | continue; | ||
| 1346 | if (compare_ether_addr(sdata->dev->dev_addr, | 1348 | if (compare_ether_addr(sdata->dev->dev_addr, |
| 1347 | hdr->addr2)) { | 1349 | hdr->addr2)) { |
| 1348 | dev_hold(sdata->dev); | 1350 | dev_hold(sdata->dev); |
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index c32a7e8e3a1b..cb78aa00399e 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c | |||
| @@ -434,7 +434,7 @@ static int ctnetlink_conntrack_event(struct notifier_block *this, | |||
| 434 | } else | 434 | } else |
| 435 | return NOTIFY_DONE; | 435 | return NOTIFY_DONE; |
| 436 | 436 | ||
| 437 | if (!nfnetlink_has_listeners(group)) | 437 | if (!item->report && !nfnetlink_has_listeners(group)) |
| 438 | return NOTIFY_DONE; | 438 | return NOTIFY_DONE; |
| 439 | 439 | ||
| 440 | skb = alloc_skb(NLMSG_GOODSIZE, GFP_ATOMIC); | 440 | skb = alloc_skb(NLMSG_GOODSIZE, GFP_ATOMIC); |
| @@ -1215,6 +1215,16 @@ ctnetlink_create_conntrack(struct nlattr *cda[], | |||
| 1215 | } | 1215 | } |
| 1216 | } | 1216 | } |
| 1217 | 1217 | ||
| 1218 | #ifdef CONFIG_NF_NAT_NEEDED | ||
| 1219 | if (cda[CTA_NAT_SEQ_ADJ_ORIG] || cda[CTA_NAT_SEQ_ADJ_REPLY]) { | ||
| 1220 | err = ctnetlink_change_nat_seq_adj(ct, cda); | ||
| 1221 | if (err < 0) { | ||
| 1222 | rcu_read_unlock(); | ||
| 1223 | goto err; | ||
| 1224 | } | ||
| 1225 | } | ||
| 1226 | #endif | ||
| 1227 | |||
| 1218 | if (cda[CTA_PROTOINFO]) { | 1228 | if (cda[CTA_PROTOINFO]) { |
| 1219 | err = ctnetlink_change_protoinfo(ct, cda); | 1229 | err = ctnetlink_change_protoinfo(ct, cda); |
| 1220 | if (err < 0) { | 1230 | if (err < 0) { |
| @@ -1492,7 +1502,8 @@ static int ctnetlink_expect_event(struct notifier_block *this, | |||
| 1492 | } else | 1502 | } else |
| 1493 | return NOTIFY_DONE; | 1503 | return NOTIFY_DONE; |
| 1494 | 1504 | ||
| 1495 | if (!nfnetlink_has_listeners(NFNLGRP_CONNTRACK_EXP_NEW)) | 1505 | if (!item->report && |
| 1506 | !nfnetlink_has_listeners(NFNLGRP_CONNTRACK_EXP_NEW)) | ||
| 1496 | return NOTIFY_DONE; | 1507 | return NOTIFY_DONE; |
| 1497 | 1508 | ||
| 1498 | skb = alloc_skb(NLMSG_GOODSIZE, GFP_ATOMIC); | 1509 | skb = alloc_skb(NLMSG_GOODSIZE, GFP_ATOMIC); |
diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c index fa49dc7fe100..c712e9fc6bba 100644 --- a/net/netfilter/nfnetlink_log.c +++ b/net/netfilter/nfnetlink_log.c | |||
| @@ -39,7 +39,7 @@ | |||
| 39 | #endif | 39 | #endif |
| 40 | 40 | ||
| 41 | #define NFULNL_NLBUFSIZ_DEFAULT NLMSG_GOODSIZE | 41 | #define NFULNL_NLBUFSIZ_DEFAULT NLMSG_GOODSIZE |
| 42 | #define NFULNL_TIMEOUT_DEFAULT HZ /* every second */ | 42 | #define NFULNL_TIMEOUT_DEFAULT 100 /* every second */ |
| 43 | #define NFULNL_QTHRESH_DEFAULT 100 /* 100 packets */ | 43 | #define NFULNL_QTHRESH_DEFAULT 100 /* 100 packets */ |
| 44 | #define NFULNL_COPY_RANGE_MAX 0xFFFF /* max packet size is limited by 16-bit struct nfattr nfa_len field */ | 44 | #define NFULNL_COPY_RANGE_MAX 0xFFFF /* max packet size is limited by 16-bit struct nfattr nfa_len field */ |
| 45 | 45 | ||
| @@ -590,8 +590,10 @@ nfulnl_log_packet(u_int8_t pf, | |||
| 590 | 590 | ||
| 591 | qthreshold = inst->qthreshold; | 591 | qthreshold = inst->qthreshold; |
| 592 | /* per-rule qthreshold overrides per-instance */ | 592 | /* per-rule qthreshold overrides per-instance */ |
| 593 | if (qthreshold > li->u.ulog.qthreshold) | 593 | if (li->u.ulog.qthreshold) |
| 594 | qthreshold = li->u.ulog.qthreshold; | 594 | if (qthreshold > li->u.ulog.qthreshold) |
| 595 | qthreshold = li->u.ulog.qthreshold; | ||
| 596 | |||
| 595 | 597 | ||
| 596 | switch (inst->copy_mode) { | 598 | switch (inst->copy_mode) { |
| 597 | case NFULNL_COPY_META: | 599 | case NFULNL_COPY_META: |
diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c index bfbf521f6ea5..5baccfa5a0de 100644 --- a/net/netfilter/x_tables.c +++ b/net/netfilter/x_tables.c | |||
| @@ -827,59 +827,143 @@ static const struct file_operations xt_table_ops = { | |||
| 827 | .release = seq_release_net, | 827 | .release = seq_release_net, |
| 828 | }; | 828 | }; |
| 829 | 829 | ||
| 830 | static void *xt_match_seq_start(struct seq_file *seq, loff_t *pos) | 830 | /* |
| 831 | * Traverse state for ip{,6}_{tables,matches} for helping crossing | ||
| 832 | * the multi-AF mutexes. | ||
| 833 | */ | ||
| 834 | struct nf_mttg_trav { | ||
| 835 | struct list_head *head, *curr; | ||
| 836 | uint8_t class, nfproto; | ||
| 837 | }; | ||
| 838 | |||
| 839 | enum { | ||
| 840 | MTTG_TRAV_INIT, | ||
| 841 | MTTG_TRAV_NFP_UNSPEC, | ||
| 842 | MTTG_TRAV_NFP_SPEC, | ||
| 843 | MTTG_TRAV_DONE, | ||
| 844 | }; | ||
| 845 | |||
| 846 | static void *xt_mttg_seq_next(struct seq_file *seq, void *v, loff_t *ppos, | ||
| 847 | bool is_target) | ||
| 831 | { | 848 | { |
| 832 | struct proc_dir_entry *pde = (struct proc_dir_entry *)seq->private; | 849 | static const uint8_t next_class[] = { |
| 833 | u_int16_t af = (unsigned long)pde->data; | 850 | [MTTG_TRAV_NFP_UNSPEC] = MTTG_TRAV_NFP_SPEC, |
| 851 | [MTTG_TRAV_NFP_SPEC] = MTTG_TRAV_DONE, | ||
| 852 | }; | ||
| 853 | struct nf_mttg_trav *trav = seq->private; | ||
| 854 | |||
| 855 | switch (trav->class) { | ||
| 856 | case MTTG_TRAV_INIT: | ||
| 857 | trav->class = MTTG_TRAV_NFP_UNSPEC; | ||
| 858 | mutex_lock(&xt[NFPROTO_UNSPEC].mutex); | ||
| 859 | trav->head = trav->curr = is_target ? | ||
| 860 | &xt[NFPROTO_UNSPEC].target : &xt[NFPROTO_UNSPEC].match; | ||
| 861 | break; | ||
| 862 | case MTTG_TRAV_NFP_UNSPEC: | ||
| 863 | trav->curr = trav->curr->next; | ||
| 864 | if (trav->curr != trav->head) | ||
| 865 | break; | ||
| 866 | mutex_unlock(&xt[NFPROTO_UNSPEC].mutex); | ||
| 867 | mutex_lock(&xt[trav->nfproto].mutex); | ||
| 868 | trav->head = trav->curr = is_target ? | ||
| 869 | &xt[trav->nfproto].target : &xt[trav->nfproto].match; | ||
| 870 | trav->class = next_class[trav->class]; | ||
| 871 | break; | ||
| 872 | case MTTG_TRAV_NFP_SPEC: | ||
| 873 | trav->curr = trav->curr->next; | ||
| 874 | if (trav->curr != trav->head) | ||
| 875 | break; | ||
| 876 | /* fallthru, _stop will unlock */ | ||
| 877 | default: | ||
| 878 | return NULL; | ||
| 879 | } | ||
| 834 | 880 | ||
| 835 | mutex_lock(&xt[af].mutex); | 881 | if (ppos != NULL) |
| 836 | return seq_list_start(&xt[af].match, *pos); | 882 | ++*ppos; |
| 883 | return trav; | ||
| 837 | } | 884 | } |
| 838 | 885 | ||
| 839 | static void *xt_match_seq_next(struct seq_file *seq, void *v, loff_t *pos) | 886 | static void *xt_mttg_seq_start(struct seq_file *seq, loff_t *pos, |
| 887 | bool is_target) | ||
| 840 | { | 888 | { |
| 841 | struct proc_dir_entry *pde = (struct proc_dir_entry *)seq->private; | 889 | struct nf_mttg_trav *trav = seq->private; |
| 842 | u_int16_t af = (unsigned long)pde->data; | 890 | unsigned int j; |
| 843 | 891 | ||
| 844 | return seq_list_next(v, &xt[af].match, pos); | 892 | trav->class = MTTG_TRAV_INIT; |
| 893 | for (j = 0; j < *pos; ++j) | ||
| 894 | if (xt_mttg_seq_next(seq, NULL, NULL, is_target) == NULL) | ||
| 895 | return NULL; | ||
| 896 | return trav; | ||
| 845 | } | 897 | } |
| 846 | 898 | ||
| 847 | static void xt_match_seq_stop(struct seq_file *seq, void *v) | 899 | static void xt_mttg_seq_stop(struct seq_file *seq, void *v) |
| 848 | { | 900 | { |
| 849 | struct proc_dir_entry *pde = seq->private; | 901 | struct nf_mttg_trav *trav = seq->private; |
| 850 | u_int16_t af = (unsigned long)pde->data; | 902 | |
| 903 | switch (trav->class) { | ||
| 904 | case MTTG_TRAV_NFP_UNSPEC: | ||
| 905 | mutex_unlock(&xt[NFPROTO_UNSPEC].mutex); | ||
| 906 | break; | ||
| 907 | case MTTG_TRAV_NFP_SPEC: | ||
| 908 | mutex_unlock(&xt[trav->nfproto].mutex); | ||
| 909 | break; | ||
| 910 | } | ||
| 911 | } | ||
| 851 | 912 | ||
| 852 | mutex_unlock(&xt[af].mutex); | 913 | static void *xt_match_seq_start(struct seq_file *seq, loff_t *pos) |
| 914 | { | ||
| 915 | return xt_mttg_seq_start(seq, pos, false); | ||
| 853 | } | 916 | } |
| 854 | 917 | ||
| 855 | static int xt_match_seq_show(struct seq_file *seq, void *v) | 918 | static void *xt_match_seq_next(struct seq_file *seq, void *v, loff_t *ppos) |
| 856 | { | 919 | { |
| 857 | struct xt_match *match = list_entry(v, struct xt_match, list); | 920 | return xt_mttg_seq_next(seq, v, ppos, false); |
| 921 | } | ||
| 858 | 922 | ||
| 859 | if (strlen(match->name)) | 923 | static int xt_match_seq_show(struct seq_file *seq, void *v) |
| 860 | return seq_printf(seq, "%s\n", match->name); | 924 | { |
| 861 | else | 925 | const struct nf_mttg_trav *trav = seq->private; |
| 862 | return 0; | 926 | const struct xt_match *match; |
| 927 | |||
| 928 | switch (trav->class) { | ||
| 929 | case MTTG_TRAV_NFP_UNSPEC: | ||
| 930 | case MTTG_TRAV_NFP_SPEC: | ||
| 931 | if (trav->curr == trav->head) | ||
| 932 | return 0; | ||
| 933 | match = list_entry(trav->curr, struct xt_match, list); | ||
| 934 | return (*match->name == '\0') ? 0 : | ||
| 935 | seq_printf(seq, "%s\n", match->name); | ||
| 936 | } | ||
| 937 | return 0; | ||
| 863 | } | 938 | } |
| 864 | 939 | ||
| 865 | static const struct seq_operations xt_match_seq_ops = { | 940 | static const struct seq_operations xt_match_seq_ops = { |
| 866 | .start = xt_match_seq_start, | 941 | .start = xt_match_seq_start, |
| 867 | .next = xt_match_seq_next, | 942 | .next = xt_match_seq_next, |
| 868 | .stop = xt_match_seq_stop, | 943 | .stop = xt_mttg_seq_stop, |
| 869 | .show = xt_match_seq_show, | 944 | .show = xt_match_seq_show, |
| 870 | }; | 945 | }; |
| 871 | 946 | ||
| 872 | static int xt_match_open(struct inode *inode, struct file *file) | 947 | static int xt_match_open(struct inode *inode, struct file *file) |
| 873 | { | 948 | { |
| 949 | struct seq_file *seq; | ||
| 950 | struct nf_mttg_trav *trav; | ||
| 874 | int ret; | 951 | int ret; |
| 875 | 952 | ||
| 876 | ret = seq_open(file, &xt_match_seq_ops); | 953 | trav = kmalloc(sizeof(*trav), GFP_KERNEL); |
| 877 | if (!ret) { | 954 | if (trav == NULL) |
| 878 | struct seq_file *seq = file->private_data; | 955 | return -ENOMEM; |
| 879 | 956 | ||
| 880 | seq->private = PDE(inode); | 957 | ret = seq_open(file, &xt_match_seq_ops); |
| 958 | if (ret < 0) { | ||
| 959 | kfree(trav); | ||
| 960 | return ret; | ||
| 881 | } | 961 | } |
| 882 | return ret; | 962 | |
| 963 | seq = file->private_data; | ||
| 964 | seq->private = trav; | ||
| 965 | trav->nfproto = (unsigned long)PDE(inode)->data; | ||
| 966 | return 0; | ||
| 883 | } | 967 | } |
| 884 | 968 | ||
| 885 | static const struct file_operations xt_match_ops = { | 969 | static const struct file_operations xt_match_ops = { |
| @@ -887,62 +971,63 @@ static const struct file_operations xt_match_ops = { | |||
| 887 | .open = xt_match_open, | 971 | .open = xt_match_open, |
| 888 | .read = seq_read, | 972 | .read = seq_read, |
| 889 | .llseek = seq_lseek, | 973 | .llseek = seq_lseek, |
| 890 | .release = seq_release, | 974 | .release = seq_release_private, |
| 891 | }; | 975 | }; |
| 892 | 976 | ||
| 893 | static void *xt_target_seq_start(struct seq_file *seq, loff_t *pos) | 977 | static void *xt_target_seq_start(struct seq_file *seq, loff_t *pos) |
| 894 | { | 978 | { |
| 895 | struct proc_dir_entry *pde = (struct proc_dir_entry *)seq->private; | 979 | return xt_mttg_seq_start(seq, pos, true); |
| 896 | u_int16_t af = (unsigned long)pde->data; | ||
| 897 | |||
| 898 | mutex_lock(&xt[af].mutex); | ||
| 899 | return seq_list_start(&xt[af].target, *pos); | ||
| 900 | } | 980 | } |
| 901 | 981 | ||
| 902 | static void *xt_target_seq_next(struct seq_file *seq, void *v, loff_t *pos) | 982 | static void *xt_target_seq_next(struct seq_file *seq, void *v, loff_t *ppos) |
| 903 | { | 983 | { |
| 904 | struct proc_dir_entry *pde = (struct proc_dir_entry *)seq->private; | 984 | return xt_mttg_seq_next(seq, v, ppos, true); |
| 905 | u_int16_t af = (unsigned long)pde->data; | ||
| 906 | |||
| 907 | return seq_list_next(v, &xt[af].target, pos); | ||
| 908 | } | ||
| 909 | |||
| 910 | static void xt_target_seq_stop(struct seq_file *seq, void *v) | ||
| 911 | { | ||
| 912 | struct proc_dir_entry *pde = seq->private; | ||
| 913 | u_int16_t af = (unsigned long)pde->data; | ||
| 914 | |||
| 915 | mutex_unlock(&xt[af].mutex); | ||
| 916 | } | 985 | } |
| 917 | 986 | ||
| 918 | static int xt_target_seq_show(struct seq_file *seq, void *v) | 987 | static int xt_target_seq_show(struct seq_file *seq, void *v) |
| 919 | { | 988 | { |
| 920 | struct xt_target *target = list_entry(v, struct xt_target, list); | 989 | const struct nf_mttg_trav *trav = seq->private; |
| 921 | 990 | const struct xt_target *target; | |
| 922 | if (strlen(target->name)) | 991 | |
| 923 | return seq_printf(seq, "%s\n", target->name); | 992 | switch (trav->class) { |
| 924 | else | 993 | case MTTG_TRAV_NFP_UNSPEC: |
| 925 | return 0; | 994 | case MTTG_TRAV_NFP_SPEC: |
| 995 | if (trav->curr == trav->head) | ||
| 996 | return 0; | ||
| 997 | target = list_entry(trav->curr, struct xt_target, list); | ||
| 998 | return (*target->name == '\0') ? 0 : | ||
| 999 | seq_printf(seq, "%s\n", target->name); | ||
| 1000 | } | ||
| 1001 | return 0; | ||
| 926 | } | 1002 | } |
| 927 | 1003 | ||
| 928 | static const struct seq_operations xt_target_seq_ops = { | 1004 | static const struct seq_operations xt_target_seq_ops = { |
| 929 | .start = xt_target_seq_start, | 1005 | .start = xt_target_seq_start, |
| 930 | .next = xt_target_seq_next, | 1006 | .next = xt_target_seq_next, |
| 931 | .stop = xt_target_seq_stop, | 1007 | .stop = xt_mttg_seq_stop, |
| 932 | .show = xt_target_seq_show, | 1008 | .show = xt_target_seq_show, |
| 933 | }; | 1009 | }; |
| 934 | 1010 | ||
| 935 | static int xt_target_open(struct inode *inode, struct file *file) | 1011 | static int xt_target_open(struct inode *inode, struct file *file) |
| 936 | { | 1012 | { |
| 1013 | struct seq_file *seq; | ||
| 1014 | struct nf_mttg_trav *trav; | ||
| 937 | int ret; | 1015 | int ret; |
| 938 | 1016 | ||
| 939 | ret = seq_open(file, &xt_target_seq_ops); | 1017 | trav = kmalloc(sizeof(*trav), GFP_KERNEL); |
| 940 | if (!ret) { | 1018 | if (trav == NULL) |
| 941 | struct seq_file *seq = file->private_data; | 1019 | return -ENOMEM; |
| 942 | 1020 | ||
| 943 | seq->private = PDE(inode); | 1021 | ret = seq_open(file, &xt_target_seq_ops); |
| 1022 | if (ret < 0) { | ||
| 1023 | kfree(trav); | ||
| 1024 | return ret; | ||
| 944 | } | 1025 | } |
| 945 | return ret; | 1026 | |
| 1027 | seq = file->private_data; | ||
| 1028 | seq->private = trav; | ||
| 1029 | trav->nfproto = (unsigned long)PDE(inode)->data; | ||
| 1030 | return 0; | ||
| 946 | } | 1031 | } |
| 947 | 1032 | ||
| 948 | static const struct file_operations xt_target_ops = { | 1033 | static const struct file_operations xt_target_ops = { |
| @@ -950,7 +1035,7 @@ static const struct file_operations xt_target_ops = { | |||
| 950 | .open = xt_target_open, | 1035 | .open = xt_target_open, |
| 951 | .read = seq_read, | 1036 | .read = seq_read, |
| 952 | .llseek = seq_lseek, | 1037 | .llseek = seq_lseek, |
| 953 | .release = seq_release, | 1038 | .release = seq_release_private, |
| 954 | }; | 1039 | }; |
| 955 | 1040 | ||
| 956 | #define FORMAT_TABLES "_tables_names" | 1041 | #define FORMAT_TABLES "_tables_names" |
diff --git a/net/netfilter/xt_recent.c b/net/netfilter/xt_recent.c index fe80b614a400..791e030ea903 100644 --- a/net/netfilter/xt_recent.c +++ b/net/netfilter/xt_recent.c | |||
| @@ -542,7 +542,7 @@ recent_mt_proc_write(struct file *file, const char __user *input, | |||
| 542 | struct recent_entry *e; | 542 | struct recent_entry *e; |
| 543 | char buf[sizeof("+b335:1d35:1e55:dead:c0de:1715:5afe:c0de")]; | 543 | char buf[sizeof("+b335:1d35:1e55:dead:c0de:1715:5afe:c0de")]; |
| 544 | const char *c = buf; | 544 | const char *c = buf; |
| 545 | union nf_inet_addr addr; | 545 | union nf_inet_addr addr = {}; |
| 546 | u_int16_t family; | 546 | u_int16_t family; |
| 547 | bool add, succ; | 547 | bool add, succ; |
| 548 | 548 | ||
diff --git a/net/netfilter/xt_sctp.c b/net/netfilter/xt_sctp.c index e223cb43ae8e..a189ada9128f 100644 --- a/net/netfilter/xt_sctp.c +++ b/net/netfilter/xt_sctp.c | |||
| @@ -105,7 +105,7 @@ match_packet(const struct sk_buff *skb, | |||
| 105 | 105 | ||
| 106 | switch (chunk_match_type) { | 106 | switch (chunk_match_type) { |
| 107 | case SCTP_CHUNK_MATCH_ALL: | 107 | case SCTP_CHUNK_MATCH_ALL: |
| 108 | return SCTP_CHUNKMAP_IS_CLEAR(info->chunkmap); | 108 | return SCTP_CHUNKMAP_IS_CLEAR(chunkmapcopy); |
| 109 | case SCTP_CHUNK_MATCH_ANY: | 109 | case SCTP_CHUNK_MATCH_ANY: |
| 110 | return false; | 110 | return false; |
| 111 | case SCTP_CHUNK_MATCH_ONLY: | 111 | case SCTP_CHUNK_MATCH_ONLY: |
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index 9eb895c7a2a9..3ae3cb816563 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c | |||
| @@ -1084,6 +1084,13 @@ out: | |||
| 1084 | return 0; | 1084 | return 0; |
| 1085 | } | 1085 | } |
| 1086 | 1086 | ||
| 1087 | /** | ||
| 1088 | * netlink_set_err - report error to broadcast listeners | ||
| 1089 | * @ssk: the kernel netlink socket, as returned by netlink_kernel_create() | ||
| 1090 | * @pid: the PID of a process that we want to skip (if any) | ||
| 1091 | * @groups: the broadcast group that will notice the error | ||
| 1092 | * @code: error code, must be negative (as usual in kernelspace) | ||
| 1093 | */ | ||
| 1087 | void netlink_set_err(struct sock *ssk, u32 pid, u32 group, int code) | 1094 | void netlink_set_err(struct sock *ssk, u32 pid, u32 group, int code) |
| 1088 | { | 1095 | { |
| 1089 | struct netlink_set_err_data info; | 1096 | struct netlink_set_err_data info; |
| @@ -1093,7 +1100,8 @@ void netlink_set_err(struct sock *ssk, u32 pid, u32 group, int code) | |||
| 1093 | info.exclude_sk = ssk; | 1100 | info.exclude_sk = ssk; |
| 1094 | info.pid = pid; | 1101 | info.pid = pid; |
| 1095 | info.group = group; | 1102 | info.group = group; |
| 1096 | info.code = code; | 1103 | /* sk->sk_err wants a positive error value */ |
| 1104 | info.code = -code; | ||
| 1097 | 1105 | ||
| 1098 | read_lock(&nl_table_lock); | 1106 | read_lock(&nl_table_lock); |
| 1099 | 1107 | ||
diff --git a/net/phonet/pep-gprs.c b/net/phonet/pep-gprs.c index 6a91a32a80c1..4aa888584d20 100644 --- a/net/phonet/pep-gprs.c +++ b/net/phonet/pep-gprs.c | |||
| @@ -207,7 +207,6 @@ static int gprs_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 207 | dev->name, err); | 207 | dev->name, err); |
| 208 | dev->stats.tx_aborted_errors++; | 208 | dev->stats.tx_aborted_errors++; |
| 209 | dev->stats.tx_errors++; | 209 | dev->stats.tx_errors++; |
| 210 | dev_kfree_skb(skb); | ||
| 211 | } else { | 210 | } else { |
| 212 | dev->stats.tx_packets++; | 211 | dev->stats.tx_packets++; |
| 213 | dev->stats.tx_bytes += len; | 212 | dev->stats.tx_bytes += len; |
diff --git a/net/phonet/pep.c b/net/phonet/pep.c index bb3e67849b38..8ad2b5333881 100644 --- a/net/phonet/pep.c +++ b/net/phonet/pep.c | |||
| @@ -553,7 +553,7 @@ static int pep_do_rcv(struct sock *sk, struct sk_buff *skb) | |||
| 553 | { | 553 | { |
| 554 | struct pep_sock *pn = pep_sk(sk); | 554 | struct pep_sock *pn = pep_sk(sk); |
| 555 | struct sock *sknode; | 555 | struct sock *sknode; |
| 556 | struct pnpipehdr *hdr = pnp_hdr(skb); | 556 | struct pnpipehdr *hdr; |
| 557 | struct sockaddr_pn dst; | 557 | struct sockaddr_pn dst; |
| 558 | int err = NET_RX_SUCCESS; | 558 | int err = NET_RX_SUCCESS; |
| 559 | u8 pipe_handle; | 559 | u8 pipe_handle; |
diff --git a/net/rxrpc/af_rxrpc.c b/net/rxrpc/af_rxrpc.c index d7d2bed7a699..eac5e7bb7365 100644 --- a/net/rxrpc/af_rxrpc.c +++ b/net/rxrpc/af_rxrpc.c | |||
| @@ -284,13 +284,13 @@ struct rxrpc_call *rxrpc_kernel_begin_call(struct socket *sock, | |||
| 284 | if (IS_ERR(trans)) { | 284 | if (IS_ERR(trans)) { |
| 285 | call = ERR_CAST(trans); | 285 | call = ERR_CAST(trans); |
| 286 | trans = NULL; | 286 | trans = NULL; |
| 287 | goto out; | 287 | goto out_notrans; |
| 288 | } | 288 | } |
| 289 | } else { | 289 | } else { |
| 290 | trans = rx->trans; | 290 | trans = rx->trans; |
| 291 | if (!trans) { | 291 | if (!trans) { |
| 292 | call = ERR_PTR(-ENOTCONN); | 292 | call = ERR_PTR(-ENOTCONN); |
| 293 | goto out; | 293 | goto out_notrans; |
| 294 | } | 294 | } |
| 295 | atomic_inc(&trans->usage); | 295 | atomic_inc(&trans->usage); |
| 296 | } | 296 | } |
| @@ -315,6 +315,7 @@ struct rxrpc_call *rxrpc_kernel_begin_call(struct socket *sock, | |||
| 315 | rxrpc_put_bundle(trans, bundle); | 315 | rxrpc_put_bundle(trans, bundle); |
| 316 | out: | 316 | out: |
| 317 | rxrpc_put_transport(trans); | 317 | rxrpc_put_transport(trans); |
| 318 | out_notrans: | ||
| 318 | release_sock(&rx->sk); | 319 | release_sock(&rx->sk); |
| 319 | _leave(" = %p", call); | 320 | _leave(" = %p", call); |
| 320 | return call; | 321 | return call; |
diff --git a/net/sched/act_police.c b/net/sched/act_police.c index 5c72a116b1a4..f8f047b61245 100644 --- a/net/sched/act_police.c +++ b/net/sched/act_police.c | |||
| @@ -183,13 +183,6 @@ override: | |||
| 183 | if (R_tab == NULL) | 183 | if (R_tab == NULL) |
| 184 | goto failure; | 184 | goto failure; |
| 185 | 185 | ||
| 186 | if (!est && (ret == ACT_P_CREATED || | ||
| 187 | !gen_estimator_active(&police->tcf_bstats, | ||
| 188 | &police->tcf_rate_est))) { | ||
| 189 | err = -EINVAL; | ||
| 190 | goto failure; | ||
| 191 | } | ||
| 192 | |||
| 193 | if (parm->peakrate.rate) { | 186 | if (parm->peakrate.rate) { |
| 194 | P_tab = qdisc_get_rtab(&parm->peakrate, | 187 | P_tab = qdisc_get_rtab(&parm->peakrate, |
| 195 | tb[TCA_POLICE_PEAKRATE]); | 188 | tb[TCA_POLICE_PEAKRATE]); |
| @@ -205,6 +198,12 @@ override: | |||
| 205 | &police->tcf_lock, est); | 198 | &police->tcf_lock, est); |
| 206 | if (err) | 199 | if (err) |
| 207 | goto failure_unlock; | 200 | goto failure_unlock; |
| 201 | } else if (tb[TCA_POLICE_AVRATE] && | ||
| 202 | (ret == ACT_P_CREATED || | ||
| 203 | !gen_estimator_active(&police->tcf_bstats, | ||
| 204 | &police->tcf_rate_est))) { | ||
| 205 | err = -EINVAL; | ||
| 206 | goto failure_unlock; | ||
| 208 | } | 207 | } |
| 209 | 208 | ||
| 210 | /* No failure allowed after this point */ | 209 | /* No failure allowed after this point */ |
diff --git a/net/sched/sch_drr.c b/net/sched/sch_drr.c index f6b4fa97df70..e36e94ab4e10 100644 --- a/net/sched/sch_drr.c +++ b/net/sched/sch_drr.c | |||
| @@ -66,11 +66,15 @@ static int drr_change_class(struct Qdisc *sch, u32 classid, u32 parentid, | |||
| 66 | { | 66 | { |
| 67 | struct drr_sched *q = qdisc_priv(sch); | 67 | struct drr_sched *q = qdisc_priv(sch); |
| 68 | struct drr_class *cl = (struct drr_class *)*arg; | 68 | struct drr_class *cl = (struct drr_class *)*arg; |
| 69 | struct nlattr *opt = tca[TCA_OPTIONS]; | ||
| 69 | struct nlattr *tb[TCA_DRR_MAX + 1]; | 70 | struct nlattr *tb[TCA_DRR_MAX + 1]; |
| 70 | u32 quantum; | 71 | u32 quantum; |
| 71 | int err; | 72 | int err; |
| 72 | 73 | ||
| 73 | err = nla_parse_nested(tb, TCA_DRR_MAX, tca[TCA_OPTIONS], drr_policy); | 74 | if (!opt) |
| 75 | return -EINVAL; | ||
| 76 | |||
| 77 | err = nla_parse_nested(tb, TCA_DRR_MAX, opt, drr_policy); | ||
| 74 | if (err < 0) | 78 | if (err < 0) |
| 75 | return err; | 79 | return err; |
| 76 | 80 | ||
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index b78e3be69013..c4986d0f7419 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c | |||
| @@ -717,15 +717,20 @@ static int sctp_inetaddr_event(struct notifier_block *this, unsigned long ev, | |||
| 717 | static int sctp_ctl_sock_init(void) | 717 | static int sctp_ctl_sock_init(void) |
| 718 | { | 718 | { |
| 719 | int err; | 719 | int err; |
| 720 | sa_family_t family; | 720 | sa_family_t family = PF_INET; |
| 721 | 721 | ||
| 722 | if (sctp_get_pf_specific(PF_INET6)) | 722 | if (sctp_get_pf_specific(PF_INET6)) |
| 723 | family = PF_INET6; | 723 | family = PF_INET6; |
| 724 | else | ||
| 725 | family = PF_INET; | ||
| 726 | 724 | ||
| 727 | err = inet_ctl_sock_create(&sctp_ctl_sock, family, | 725 | err = inet_ctl_sock_create(&sctp_ctl_sock, family, |
| 728 | SOCK_SEQPACKET, IPPROTO_SCTP, &init_net); | 726 | SOCK_SEQPACKET, IPPROTO_SCTP, &init_net); |
| 727 | |||
| 728 | /* If IPv6 socket could not be created, try the IPv4 socket */ | ||
| 729 | if (err < 0 && family == PF_INET6) | ||
| 730 | err = inet_ctl_sock_create(&sctp_ctl_sock, AF_INET, | ||
| 731 | SOCK_SEQPACKET, IPPROTO_SCTP, | ||
| 732 | &init_net); | ||
| 733 | |||
| 729 | if (err < 0) { | 734 | if (err < 0) { |
| 730 | printk(KERN_ERR | 735 | printk(KERN_ERR |
| 731 | "SCTP: Failed to create the SCTP control socket.\n"); | 736 | "SCTP: Failed to create the SCTP control socket.\n"); |
| @@ -1322,9 +1327,8 @@ SCTP_STATIC __init int sctp_init(void) | |||
| 1322 | out: | 1327 | out: |
| 1323 | return status; | 1328 | return status; |
| 1324 | err_v6_add_protocol: | 1329 | err_v6_add_protocol: |
| 1325 | sctp_v6_del_protocol(); | ||
| 1326 | err_add_protocol: | ||
| 1327 | sctp_v4_del_protocol(); | 1330 | sctp_v4_del_protocol(); |
| 1331 | err_add_protocol: | ||
| 1328 | inet_ctl_sock_destroy(sctp_ctl_sock); | 1332 | inet_ctl_sock_destroy(sctp_ctl_sock); |
| 1329 | err_ctl_sock_init: | 1333 | err_ctl_sock_init: |
| 1330 | sctp_v6_protosw_exit(); | 1334 | sctp_v6_protosw_exit(); |
| @@ -1335,7 +1339,6 @@ err_protosw_init: | |||
| 1335 | sctp_v4_pf_exit(); | 1339 | sctp_v4_pf_exit(); |
| 1336 | sctp_v6_pf_exit(); | 1340 | sctp_v6_pf_exit(); |
| 1337 | sctp_sysctl_unregister(); | 1341 | sctp_sysctl_unregister(); |
| 1338 | list_del(&sctp_af_inet.list); | ||
| 1339 | free_pages((unsigned long)sctp_port_hashtable, | 1342 | free_pages((unsigned long)sctp_port_hashtable, |
| 1340 | get_order(sctp_port_hashsize * | 1343 | get_order(sctp_port_hashsize * |
| 1341 | sizeof(struct sctp_bind_hashbucket))); | 1344 | sizeof(struct sctp_bind_hashbucket))); |
| @@ -1383,7 +1386,6 @@ SCTP_STATIC __exit void sctp_exit(void) | |||
| 1383 | sctp_v4_pf_exit(); | 1386 | sctp_v4_pf_exit(); |
| 1384 | 1387 | ||
| 1385 | sctp_sysctl_unregister(); | 1388 | sctp_sysctl_unregister(); |
| 1386 | list_del(&sctp_af_inet.list); | ||
| 1387 | 1389 | ||
| 1388 | free_pages((unsigned long)sctp_assoc_hashtable, | 1390 | free_pages((unsigned long)sctp_assoc_hashtable, |
| 1389 | get_order(sctp_assoc_hashsize * | 1391 | get_order(sctp_assoc_hashsize * |
diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c index e1d6076b4f59..b5495aecab60 100644 --- a/net/sctp/sm_sideeffect.c +++ b/net/sctp/sm_sideeffect.c | |||
| @@ -787,36 +787,48 @@ static void sctp_cmd_process_operr(sctp_cmd_seq_t *cmds, | |||
| 787 | struct sctp_association *asoc, | 787 | struct sctp_association *asoc, |
| 788 | struct sctp_chunk *chunk) | 788 | struct sctp_chunk *chunk) |
| 789 | { | 789 | { |
| 790 | struct sctp_operr_chunk *operr_chunk; | ||
| 791 | struct sctp_errhdr *err_hdr; | 790 | struct sctp_errhdr *err_hdr; |
| 791 | struct sctp_ulpevent *ev; | ||
| 792 | 792 | ||
| 793 | operr_chunk = (struct sctp_operr_chunk *)chunk->chunk_hdr; | 793 | while (chunk->chunk_end > chunk->skb->data) { |
| 794 | err_hdr = &operr_chunk->err_hdr; | 794 | err_hdr = (struct sctp_errhdr *)(chunk->skb->data); |
| 795 | 795 | ||
| 796 | switch (err_hdr->cause) { | 796 | ev = sctp_ulpevent_make_remote_error(asoc, chunk, 0, |
| 797 | case SCTP_ERROR_UNKNOWN_CHUNK: | 797 | GFP_ATOMIC); |
| 798 | { | 798 | if (!ev) |
| 799 | struct sctp_chunkhdr *unk_chunk_hdr; | 799 | return; |
| 800 | 800 | ||
| 801 | unk_chunk_hdr = (struct sctp_chunkhdr *)err_hdr->variable; | 801 | sctp_ulpq_tail_event(&asoc->ulpq, ev); |
| 802 | switch (unk_chunk_hdr->type) { | 802 | |
| 803 | /* ADDIP 4.1 A9) If the peer responds to an ASCONF with an | 803 | switch (err_hdr->cause) { |
| 804 | * ERROR chunk reporting that it did not recognized the ASCONF | 804 | case SCTP_ERROR_UNKNOWN_CHUNK: |
| 805 | * chunk type, the sender of the ASCONF MUST NOT send any | 805 | { |
| 806 | * further ASCONF chunks and MUST stop its T-4 timer. | 806 | sctp_chunkhdr_t *unk_chunk_hdr; |
| 807 | */ | 807 | |
| 808 | case SCTP_CID_ASCONF: | 808 | unk_chunk_hdr = (sctp_chunkhdr_t *)err_hdr->variable; |
| 809 | asoc->peer.asconf_capable = 0; | 809 | switch (unk_chunk_hdr->type) { |
| 810 | sctp_add_cmd_sf(cmds, SCTP_CMD_TIMER_STOP, | 810 | /* ADDIP 4.1 A9) If the peer responds to an ASCONF with |
| 811 | * an ERROR chunk reporting that it did not recognized | ||
| 812 | * the ASCONF chunk type, the sender of the ASCONF MUST | ||
| 813 | * NOT send any further ASCONF chunks and MUST stop its | ||
| 814 | * T-4 timer. | ||
| 815 | */ | ||
| 816 | case SCTP_CID_ASCONF: | ||
| 817 | if (asoc->peer.asconf_capable == 0) | ||
| 818 | break; | ||
| 819 | |||
| 820 | asoc->peer.asconf_capable = 0; | ||
| 821 | sctp_add_cmd_sf(cmds, SCTP_CMD_TIMER_STOP, | ||
| 811 | SCTP_TO(SCTP_EVENT_TIMEOUT_T4_RTO)); | 822 | SCTP_TO(SCTP_EVENT_TIMEOUT_T4_RTO)); |
| 823 | break; | ||
| 824 | default: | ||
| 825 | break; | ||
| 826 | } | ||
| 812 | break; | 827 | break; |
| 828 | } | ||
| 813 | default: | 829 | default: |
| 814 | break; | 830 | break; |
| 815 | } | 831 | } |
| 816 | break; | ||
| 817 | } | ||
| 818 | default: | ||
| 819 | break; | ||
| 820 | } | 832 | } |
| 821 | } | 833 | } |
| 822 | 834 | ||
diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c index 3a0cd075914f..f88dfded0e3a 100644 --- a/net/sctp/sm_statefuns.c +++ b/net/sctp/sm_statefuns.c | |||
| @@ -3163,7 +3163,6 @@ sctp_disposition_t sctp_sf_operr_notify(const struct sctp_endpoint *ep, | |||
| 3163 | sctp_cmd_seq_t *commands) | 3163 | sctp_cmd_seq_t *commands) |
| 3164 | { | 3164 | { |
| 3165 | struct sctp_chunk *chunk = arg; | 3165 | struct sctp_chunk *chunk = arg; |
| 3166 | struct sctp_ulpevent *ev; | ||
| 3167 | 3166 | ||
| 3168 | if (!sctp_vtag_verify(chunk, asoc)) | 3167 | if (!sctp_vtag_verify(chunk, asoc)) |
| 3169 | return sctp_sf_pdiscard(ep, asoc, type, arg, commands); | 3168 | return sctp_sf_pdiscard(ep, asoc, type, arg, commands); |
| @@ -3173,21 +3172,10 @@ sctp_disposition_t sctp_sf_operr_notify(const struct sctp_endpoint *ep, | |||
| 3173 | return sctp_sf_violation_chunklen(ep, asoc, type, arg, | 3172 | return sctp_sf_violation_chunklen(ep, asoc, type, arg, |
| 3174 | commands); | 3173 | commands); |
| 3175 | 3174 | ||
| 3176 | while (chunk->chunk_end > chunk->skb->data) { | 3175 | sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_OPERR, |
| 3177 | ev = sctp_ulpevent_make_remote_error(asoc, chunk, 0, | 3176 | SCTP_CHUNK(chunk)); |
| 3178 | GFP_ATOMIC); | ||
| 3179 | if (!ev) | ||
| 3180 | goto nomem; | ||
| 3181 | 3177 | ||
| 3182 | sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, | ||
| 3183 | SCTP_ULPEVENT(ev)); | ||
| 3184 | sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_OPERR, | ||
| 3185 | SCTP_CHUNK(chunk)); | ||
| 3186 | } | ||
| 3187 | return SCTP_DISPOSITION_CONSUME; | 3178 | return SCTP_DISPOSITION_CONSUME; |
| 3188 | |||
| 3189 | nomem: | ||
| 3190 | return SCTP_DISPOSITION_NOMEM; | ||
| 3191 | } | 3179 | } |
| 3192 | 3180 | ||
| 3193 | /* | 3181 | /* |
diff --git a/net/wimax/id-table.c b/net/wimax/id-table.c index 5e685f7eda90..72273abfcb16 100644 --- a/net/wimax/id-table.c +++ b/net/wimax/id-table.c | |||
| @@ -94,12 +94,13 @@ struct wimax_dev *wimax_dev_get_by_genl_info( | |||
| 94 | list_for_each_entry(wimax_dev, &wimax_id_table, id_table_node) { | 94 | list_for_each_entry(wimax_dev, &wimax_id_table, id_table_node) { |
| 95 | if (wimax_dev->net_dev->ifindex == ifindex) { | 95 | if (wimax_dev->net_dev->ifindex == ifindex) { |
| 96 | dev_hold(wimax_dev->net_dev); | 96 | dev_hold(wimax_dev->net_dev); |
| 97 | break; | 97 | goto found; |
| 98 | } | 98 | } |
| 99 | } | 99 | } |
| 100 | if (wimax_dev == NULL) | 100 | wimax_dev = NULL; |
| 101 | d_printf(1, NULL, "wimax: no devices found with ifindex %d\n", | 101 | d_printf(1, NULL, "wimax: no devices found with ifindex %d\n", |
| 102 | ifindex); | 102 | ifindex); |
| 103 | found: | ||
| 103 | spin_unlock(&wimax_id_table_lock); | 104 | spin_unlock(&wimax_id_table_lock); |
| 104 | d_fnend(3, NULL, "(info %p ifindex %d) = %p\n", | 105 | d_fnend(3, NULL, "(info %p ifindex %d) = %p\n", |
| 105 | info, ifindex, wimax_dev); | 106 | info, ifindex, wimax_dev); |
diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 85c9034c59b2..bd0a16c3de5e 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c | |||
| @@ -380,7 +380,8 @@ static bool is_valid_reg_rule(const struct ieee80211_reg_rule *rule) | |||
| 380 | 380 | ||
| 381 | freq_diff = freq_range->end_freq_khz - freq_range->start_freq_khz; | 381 | freq_diff = freq_range->end_freq_khz - freq_range->start_freq_khz; |
| 382 | 382 | ||
| 383 | if (freq_diff <= 0 || freq_range->max_bandwidth_khz > freq_diff) | 383 | if (freq_range->end_freq_khz <= freq_range->start_freq_khz || |
| 384 | freq_range->max_bandwidth_khz > freq_diff) | ||
| 384 | return false; | 385 | return false; |
| 385 | 386 | ||
| 386 | return true; | 387 | return true; |
diff --git a/scripts/bootgraph.pl b/scripts/bootgraph.pl index b0246307aac4..12caa822a232 100644 --- a/scripts/bootgraph.pl +++ b/scripts/bootgraph.pl | |||
| @@ -51,7 +51,7 @@ my %pidctr; | |||
| 51 | 51 | ||
| 52 | while (<>) { | 52 | while (<>) { |
| 53 | my $line = $_; | 53 | my $line = $_; |
| 54 | if ($line =~ /([0-9\.]+)\] calling ([a-zA-Z0-9\_]+)\+/) { | 54 | if ($line =~ /([0-9\.]+)\] calling ([a-zA-Z0-9\_\.]+)\+/) { |
| 55 | my $func = $2; | 55 | my $func = $2; |
| 56 | if ($done == 0) { | 56 | if ($done == 0) { |
| 57 | $start{$func} = $1; | 57 | $start{$func} = $1; |
| @@ -87,7 +87,7 @@ while (<>) { | |||
| 87 | $count = $count + 1; | 87 | $count = $count + 1; |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | if ($line =~ /([0-9\.]+)\] initcall ([a-zA-Z0-9\_]+)\+.*returned/) { | 90 | if ($line =~ /([0-9\.]+)\] initcall ([a-zA-Z0-9\_\.]+)\+.*returned/) { |
| 91 | if ($done == 0) { | 91 | if ($done == 0) { |
| 92 | $end{$2} = $1; | 92 | $end{$2} = $1; |
| 93 | $maxtime = $1; | 93 | $maxtime = $1; |
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index 45eb0ae98eba..2d5ece798c4c 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl | |||
| @@ -10,7 +10,7 @@ use strict; | |||
| 10 | my $P = $0; | 10 | my $P = $0; |
| 11 | $P =~ s@.*/@@g; | 11 | $P =~ s@.*/@@g; |
| 12 | 12 | ||
| 13 | my $V = '0.27'; | 13 | my $V = '0.28'; |
| 14 | 14 | ||
| 15 | use Getopt::Long qw(:config no_auto_abbrev); | 15 | use Getopt::Long qw(:config no_auto_abbrev); |
| 16 | 16 | ||
| @@ -110,7 +110,8 @@ our $Sparse = qr{ | |||
| 110 | __iomem| | 110 | __iomem| |
| 111 | __must_check| | 111 | __must_check| |
| 112 | __init_refok| | 112 | __init_refok| |
| 113 | __kprobes | 113 | __kprobes| |
| 114 | __ref | ||
| 114 | }x; | 115 | }x; |
| 115 | our $Attribute = qr{ | 116 | our $Attribute = qr{ |
| 116 | const| | 117 | const| |
| @@ -1240,7 +1241,8 @@ sub process { | |||
| 1240 | $realfile =~ s@^([^/]*)/@@; | 1241 | $realfile =~ s@^([^/]*)/@@; |
| 1241 | 1242 | ||
| 1242 | $p1_prefix = $1; | 1243 | $p1_prefix = $1; |
| 1243 | if ($tree && $p1_prefix ne '' && -e "$root/$p1_prefix") { | 1244 | if (!$file && $tree && $p1_prefix ne '' && |
| 1245 | -e "$root/$p1_prefix") { | ||
| 1244 | WARN("patch prefix '$p1_prefix' exists, appears to be a -p0 patch\n"); | 1246 | WARN("patch prefix '$p1_prefix' exists, appears to be a -p0 patch\n"); |
| 1245 | } | 1247 | } |
| 1246 | 1248 | ||
| @@ -1583,9 +1585,9 @@ sub process { | |||
| 1583 | } | 1585 | } |
| 1584 | # TEST: allow direct testing of the attribute matcher. | 1586 | # TEST: allow direct testing of the attribute matcher. |
| 1585 | if ($dbg_attr) { | 1587 | if ($dbg_attr) { |
| 1586 | if ($line =~ /^.\s*$Attribute\s*$/) { | 1588 | if ($line =~ /^.\s*$Modifier\s*$/) { |
| 1587 | ERROR("TEST: is attr\n" . $herecurr); | 1589 | ERROR("TEST: is attr\n" . $herecurr); |
| 1588 | } elsif ($dbg_attr > 1 && $line =~ /^.+($Attribute)/) { | 1590 | } elsif ($dbg_attr > 1 && $line =~ /^.+($Modifier)/) { |
| 1589 | ERROR("TEST: is not attr ($1 is)\n". $herecurr); | 1591 | ERROR("TEST: is not attr ($1 is)\n". $herecurr); |
| 1590 | } | 1592 | } |
| 1591 | next; | 1593 | next; |
| @@ -1657,7 +1659,7 @@ sub process { | |||
| 1657 | 1659 | ||
| 1658 | # * goes on variable not on type | 1660 | # * goes on variable not on type |
| 1659 | # (char*[ const]) | 1661 | # (char*[ const]) |
| 1660 | if ($line =~ m{\($NonptrType(\s*\*[\s\*]*(?:$Modifier\s*)*)\)}) { | 1662 | if ($line =~ m{\($NonptrType(\s*(?:$Modifier\b\s*|\*\s*)+)\)}) { |
| 1661 | my ($from, $to) = ($1, $1); | 1663 | my ($from, $to) = ($1, $1); |
| 1662 | 1664 | ||
| 1663 | # Should start with a space. | 1665 | # Should start with a space. |
| @@ -1672,7 +1674,7 @@ sub process { | |||
| 1672 | if ($from ne $to) { | 1674 | if ($from ne $to) { |
| 1673 | ERROR("\"(foo$from)\" should be \"(foo$to)\"\n" . $herecurr); | 1675 | ERROR("\"(foo$from)\" should be \"(foo$to)\"\n" . $herecurr); |
| 1674 | } | 1676 | } |
| 1675 | } elsif ($line =~ m{\b$NonptrType(\s*\*[\s\*]*(?:$Modifier\s*)?)($Ident)}) { | 1677 | } elsif ($line =~ m{\b$NonptrType(\s*(?:$Modifier\b\s*|\*\s*)+)($Ident)}) { |
| 1676 | my ($from, $to, $ident) = ($1, $1, $2); | 1678 | my ($from, $to, $ident) = ($1, $1, $2); |
| 1677 | 1679 | ||
| 1678 | # Should start with a space. | 1680 | # Should start with a space. |
| @@ -1685,8 +1687,8 @@ sub process { | |||
| 1685 | # Modifiers should have spaces. | 1687 | # Modifiers should have spaces. |
| 1686 | $to =~ s/(\b$Modifier$)/$1 /; | 1688 | $to =~ s/(\b$Modifier$)/$1 /; |
| 1687 | 1689 | ||
| 1688 | #print "from<$from> to<$to>\n"; | 1690 | #print "from<$from> to<$to> ident<$ident>\n"; |
| 1689 | if ($from ne $to) { | 1691 | if ($from ne $to && $ident !~ /^$Modifier$/) { |
| 1690 | ERROR("\"foo${from}bar\" should be \"foo${to}bar\"\n" . $herecurr); | 1692 | ERROR("\"foo${from}bar\" should be \"foo${to}bar\"\n" . $herecurr); |
| 1691 | } | 1693 | } |
| 1692 | } | 1694 | } |
| @@ -1885,11 +1887,11 @@ sub process { | |||
| 1885 | if ($ctx !~ /[WEBC]x./ && $ca !~ /(?:\)|!|~|\*|-|\&|\||\+\+|\-\-|\{)$/) { | 1887 | if ($ctx !~ /[WEBC]x./ && $ca !~ /(?:\)|!|~|\*|-|\&|\||\+\+|\-\-|\{)$/) { |
| 1886 | ERROR("space required before that '$op' $at\n" . $hereptr); | 1888 | ERROR("space required before that '$op' $at\n" . $hereptr); |
| 1887 | } | 1889 | } |
| 1888 | if ($op eq '*' && $cc =~/\s*const\b/) { | 1890 | if ($op eq '*' && $cc =~/\s*$Modifier\b/) { |
| 1889 | # A unary '*' may be const | 1891 | # A unary '*' may be const |
| 1890 | 1892 | ||
| 1891 | } elsif ($ctx =~ /.xW/) { | 1893 | } elsif ($ctx =~ /.xW/) { |
| 1892 | ERROR("space prohibited after that '$op' $at\n" . $hereptr); | 1894 | ERROR("Aspace prohibited after that '$op' $at\n" . $hereptr); |
| 1893 | } | 1895 | } |
| 1894 | 1896 | ||
| 1895 | # unary ++ and unary -- are allowed no space on one side. | 1897 | # unary ++ and unary -- are allowed no space on one side. |
| @@ -2560,7 +2562,7 @@ sub process { | |||
| 2560 | if ($line =~ /\bin_atomic\s*\(/) { | 2562 | if ($line =~ /\bin_atomic\s*\(/) { |
| 2561 | if ($realfile =~ m@^drivers/@) { | 2563 | if ($realfile =~ m@^drivers/@) { |
| 2562 | ERROR("do not use in_atomic in drivers\n" . $herecurr); | 2564 | ERROR("do not use in_atomic in drivers\n" . $herecurr); |
| 2563 | } else { | 2565 | } elsif ($realfile !~ m@^kernel/@) { |
| 2564 | WARN("use of in_atomic() is incorrect outside core kernel code\n" . $herecurr); | 2566 | WARN("use of in_atomic() is incorrect outside core kernel code\n" . $herecurr); |
| 2565 | } | 2567 | } |
| 2566 | } | 2568 | } |
diff --git a/scripts/kernel-doc b/scripts/kernel-doc index 8bb83a100edb..0f11870116dc 100755 --- a/scripts/kernel-doc +++ b/scripts/kernel-doc | |||
| @@ -1827,6 +1827,40 @@ sub reset_state { | |||
| 1827 | $state = 0; | 1827 | $state = 0; |
| 1828 | } | 1828 | } |
| 1829 | 1829 | ||
| 1830 | sub syscall_munge() { | ||
| 1831 | my $void = 0; | ||
| 1832 | |||
| 1833 | $prototype =~ s@[\r\n\t]+@ @gos; # strip newlines/CR's/tabs | ||
| 1834 | ## if ($prototype =~ m/SYSCALL_DEFINE0\s*\(\s*(a-zA-Z0-9_)*\s*\)/) { | ||
| 1835 | if ($prototype =~ m/SYSCALL_DEFINE0/) { | ||
| 1836 | $void = 1; | ||
| 1837 | ## $prototype = "long sys_$1(void)"; | ||
| 1838 | } | ||
| 1839 | |||
| 1840 | $prototype =~ s/SYSCALL_DEFINE.*\(/long sys_/; # fix return type & func name | ||
| 1841 | if ($prototype =~ m/long (sys_.*?),/) { | ||
| 1842 | $prototype =~ s/,/\(/; | ||
| 1843 | } elsif ($void) { | ||
| 1844 | $prototype =~ s/\)/\(void\)/; | ||
| 1845 | } | ||
| 1846 | |||
| 1847 | # now delete all of the odd-number commas in $prototype | ||
| 1848 | # so that arg types & arg names don't have a comma between them | ||
| 1849 | my $count = 0; | ||
| 1850 | my $len = length($prototype); | ||
| 1851 | if ($void) { | ||
| 1852 | $len = 0; # skip the for-loop | ||
| 1853 | } | ||
| 1854 | for (my $ix = 0; $ix < $len; $ix++) { | ||
| 1855 | if (substr($prototype, $ix, 1) eq ',') { | ||
| 1856 | $count++; | ||
| 1857 | if ($count % 2 == 1) { | ||
| 1858 | substr($prototype, $ix, 1) = ' '; | ||
| 1859 | } | ||
| 1860 | } | ||
| 1861 | } | ||
| 1862 | } | ||
| 1863 | |||
| 1830 | sub process_state3_function($$) { | 1864 | sub process_state3_function($$) { |
| 1831 | my $x = shift; | 1865 | my $x = shift; |
| 1832 | my $file = shift; | 1866 | my $file = shift; |
| @@ -1839,11 +1873,15 @@ sub process_state3_function($$) { | |||
| 1839 | elsif ($x =~ /([^\{]*)/) { | 1873 | elsif ($x =~ /([^\{]*)/) { |
| 1840 | $prototype .= $1; | 1874 | $prototype .= $1; |
| 1841 | } | 1875 | } |
| 1876 | |||
| 1842 | if (($x =~ /\{/) || ($x =~ /\#\s*define/) || ($x =~ /;/)) { | 1877 | if (($x =~ /\{/) || ($x =~ /\#\s*define/) || ($x =~ /;/)) { |
| 1843 | $prototype =~ s@/\*.*?\*/@@gos; # strip comments. | 1878 | $prototype =~ s@/\*.*?\*/@@gos; # strip comments. |
| 1844 | $prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's. | 1879 | $prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's. |
| 1845 | $prototype =~ s@^\s+@@gos; # strip leading spaces | 1880 | $prototype =~ s@^\s+@@gos; # strip leading spaces |
| 1846 | dump_function($prototype,$file); | 1881 | if ($prototype =~ /SYSCALL_DEFINE/) { |
| 1882 | syscall_munge(); | ||
| 1883 | } | ||
| 1884 | dump_function($prototype, $file); | ||
| 1847 | reset_state(); | 1885 | reset_state(); |
| 1848 | } | 1886 | } |
| 1849 | } | 1887 | } |
diff --git a/scripts/markup_oops.pl b/scripts/markup_oops.pl index d40449cafa84..528492bcba5b 100644 --- a/scripts/markup_oops.pl +++ b/scripts/markup_oops.pl | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | #!/usr/bin/perl -w | 1 | #!/usr/bin/perl |
| 2 | 2 | ||
| 3 | use File::Basename; | 3 | use File::Basename; |
| 4 | 4 | ||
| @@ -29,27 +29,151 @@ my $filename = $vmlinux_name; | |||
| 29 | my $target = "0"; | 29 | my $target = "0"; |
| 30 | my $function; | 30 | my $function; |
| 31 | my $module = ""; | 31 | my $module = ""; |
| 32 | my $func_offset; | 32 | my $func_offset = 0; |
| 33 | my $vmaoffset = 0; | 33 | my $vmaoffset = 0; |
| 34 | 34 | ||
| 35 | my %regs; | ||
| 36 | |||
| 37 | |||
| 38 | sub parse_x86_regs | ||
| 39 | { | ||
| 40 | my ($line) = @_; | ||
| 41 | if ($line =~ /EAX: ([0-9a-f]+) EBX: ([0-9a-f]+) ECX: ([0-9a-f]+) EDX: ([0-9a-f]+)/) { | ||
| 42 | $regs{"%eax"} = $1; | ||
| 43 | $regs{"%ebx"} = $2; | ||
| 44 | $regs{"%ecx"} = $3; | ||
| 45 | $regs{"%edx"} = $4; | ||
| 46 | } | ||
| 47 | if ($line =~ /ESI: ([0-9a-f]+) EDI: ([0-9a-f]+) EBP: ([0-9a-f]+) ESP: ([0-9a-f]+)/) { | ||
| 48 | $regs{"%esi"} = $1; | ||
| 49 | $regs{"%edi"} = $2; | ||
| 50 | $regs{"%esp"} = $4; | ||
| 51 | } | ||
| 52 | if ($line =~ /RAX: ([0-9a-f]+) RBX: ([0-9a-f]+) RCX: ([0-9a-f]+)/) { | ||
| 53 | $regs{"%eax"} = $1; | ||
| 54 | $regs{"%ebx"} = $2; | ||
| 55 | $regs{"%ecx"} = $3; | ||
| 56 | } | ||
| 57 | if ($line =~ /RDX: ([0-9a-f]+) RSI: ([0-9a-f]+) RDI: ([0-9a-f]+)/) { | ||
| 58 | $regs{"%edx"} = $1; | ||
| 59 | $regs{"%esi"} = $2; | ||
| 60 | $regs{"%edi"} = $3; | ||
| 61 | } | ||
| 62 | if ($line =~ /RBP: ([0-9a-f]+) R08: ([0-9a-f]+) R09: ([0-9a-f]+)/) { | ||
| 63 | $regs{"%r08"} = $2; | ||
| 64 | $regs{"%r09"} = $3; | ||
| 65 | } | ||
| 66 | if ($line =~ /R10: ([0-9a-f]+) R11: ([0-9a-f]+) R12: ([0-9a-f]+)/) { | ||
| 67 | $regs{"%r10"} = $1; | ||
| 68 | $regs{"%r11"} = $2; | ||
| 69 | $regs{"%r12"} = $3; | ||
| 70 | } | ||
| 71 | if ($line =~ /R13: ([0-9a-f]+) R14: ([0-9a-f]+) R15: ([0-9a-f]+)/) { | ||
| 72 | $regs{"%r13"} = $1; | ||
| 73 | $regs{"%r14"} = $2; | ||
| 74 | $regs{"%r15"} = $3; | ||
| 75 | } | ||
| 76 | } | ||
| 77 | |||
| 78 | sub reg_name | ||
| 79 | { | ||
| 80 | my ($reg) = @_; | ||
| 81 | $reg =~ s/r(.)x/e\1x/; | ||
| 82 | $reg =~ s/r(.)i/e\1i/; | ||
| 83 | $reg =~ s/r(.)p/e\1p/; | ||
| 84 | return $reg; | ||
| 85 | } | ||
| 86 | |||
| 87 | sub process_x86_regs | ||
| 88 | { | ||
| 89 | my ($line, $cntr) = @_; | ||
| 90 | my $str = ""; | ||
| 91 | if (length($line) < 40) { | ||
| 92 | return ""; # not an asm istruction | ||
| 93 | } | ||
| 94 | |||
| 95 | # find the arguments to the instruction | ||
| 96 | if ($line =~ /([0-9a-zA-Z\,\%\(\)\-\+]+)$/) { | ||
| 97 | $lastword = $1; | ||
| 98 | } else { | ||
| 99 | return ""; | ||
| 100 | } | ||
| 101 | |||
| 102 | # we need to find the registers that get clobbered, | ||
| 103 | # since their value is no longer relevant for previous | ||
| 104 | # instructions in the stream. | ||
| 105 | |||
| 106 | $clobber = $lastword; | ||
| 107 | # first, remove all memory operands, they're read only | ||
| 108 | $clobber =~ s/\([a-z0-9\%\,]+\)//g; | ||
| 109 | # then, remove everything before the comma, thats the read part | ||
| 110 | $clobber =~ s/.*\,//g; | ||
| 111 | |||
| 112 | # if this is the instruction that faulted, we haven't actually done | ||
| 113 | # the write yet... nothing is clobbered. | ||
| 114 | if ($cntr == 0) { | ||
| 115 | $clobber = ""; | ||
| 116 | } | ||
| 117 | |||
| 118 | foreach $reg (keys(%regs)) { | ||
| 119 | my $clobberprime = reg_name($clobber); | ||
| 120 | my $lastwordprime = reg_name($lastword); | ||
| 121 | my $val = $regs{$reg}; | ||
| 122 | if ($val =~ /^[0]+$/) { | ||
| 123 | $val = "0"; | ||
| 124 | } else { | ||
| 125 | $val =~ s/^0*//; | ||
| 126 | } | ||
| 127 | |||
| 128 | # first check if we're clobbering this register; if we do | ||
| 129 | # we print it with a =>, and then delete its value | ||
| 130 | if ($clobber =~ /$reg/ || $clobberprime =~ /$reg/) { | ||
| 131 | if (length($val) > 0) { | ||
| 132 | $str = $str . " $reg => $val "; | ||
| 133 | } | ||
| 134 | $regs{$reg} = ""; | ||
| 135 | $val = ""; | ||
| 136 | } | ||
| 137 | # now check if we're reading this register | ||
| 138 | if ($lastword =~ /$reg/ || $lastwordprime =~ /$reg/) { | ||
| 139 | if (length($val) > 0) { | ||
| 140 | $str = $str . " $reg = $val "; | ||
| 141 | } | ||
| 142 | } | ||
| 143 | } | ||
| 144 | return $str; | ||
| 145 | } | ||
| 146 | |||
| 147 | # parse the oops | ||
| 35 | while (<STDIN>) { | 148 | while (<STDIN>) { |
| 36 | my $line = $_; | 149 | my $line = $_; |
| 37 | if ($line =~ /EIP: 0060:\[\<([a-z0-9]+)\>\]/) { | 150 | if ($line =~ /EIP: 0060:\[\<([a-z0-9]+)\>\]/) { |
| 38 | $target = $1; | 151 | $target = $1; |
| 39 | } | 152 | } |
| 153 | if ($line =~ /RIP: 0010:\[\<([a-z0-9]+)\>\]/) { | ||
| 154 | $target = $1; | ||
| 155 | } | ||
| 40 | if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]/) { | 156 | if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]/) { |
| 41 | $function = $1; | 157 | $function = $1; |
| 42 | $func_offset = $2; | 158 | $func_offset = $2; |
| 43 | } | 159 | } |
| 160 | if ($line =~ /RIP: 0010:\[\<[0-9a-f]+\>\] \[\<[0-9a-f]+\>\] ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]/) { | ||
| 161 | $function = $1; | ||
| 162 | $func_offset = $2; | ||
| 163 | } | ||
| 44 | 164 | ||
| 45 | # check if it's a module | 165 | # check if it's a module |
| 46 | if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]+\W\[([a-zA-Z0-9\_\-]+)\]/) { | 166 | if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]+\W\[([a-zA-Z0-9\_\-]+)\]/) { |
| 47 | $module = $3; | 167 | $module = $3; |
| 48 | } | 168 | } |
| 169 | if ($line =~ /RIP: 0010:\[\<[0-9a-f]+\>\] \[\<[0-9a-f]+\>\] ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]+\W\[([a-zA-Z0-9\_\-]+)\]/) { | ||
| 170 | $module = $3; | ||
| 171 | } | ||
| 172 | parse_x86_regs($line); | ||
| 49 | } | 173 | } |
| 50 | 174 | ||
| 51 | my $decodestart = hex($target) - hex($func_offset); | 175 | my $decodestart = hex($target) - hex($func_offset); |
| 52 | my $decodestop = $decodestart + 8192; | 176 | my $decodestop = hex($target) + 8192; |
| 53 | if ($target eq "0") { | 177 | if ($target eq "0") { |
| 54 | print "No oops found!\n"; | 178 | print "No oops found!\n"; |
| 55 | print "Usage: \n"; | 179 | print "Usage: \n"; |
| @@ -84,6 +208,7 @@ my $counter = 0; | |||
| 84 | my $state = 0; | 208 | my $state = 0; |
| 85 | my $center = 0; | 209 | my $center = 0; |
| 86 | my @lines; | 210 | my @lines; |
| 211 | my @reglines; | ||
| 87 | 212 | ||
| 88 | sub InRange { | 213 | sub InRange { |
| 89 | my ($address, $target) = @_; | 214 | my ($address, $target) = @_; |
| @@ -188,16 +313,36 @@ while ($finish < $counter) { | |||
| 188 | 313 | ||
| 189 | my $i; | 314 | my $i; |
| 190 | 315 | ||
| 191 | my $fulltext = ""; | 316 | |
| 317 | # start annotating the registers in the asm. | ||
| 318 | # this goes from the oopsing point back, so that the annotator | ||
| 319 | # can track (opportunistically) which registers got written and | ||
| 320 | # whos value no longer is relevant. | ||
| 321 | |||
| 322 | $i = $center; | ||
| 323 | while ($i >= $start) { | ||
| 324 | $reglines[$i] = process_x86_regs($lines[$i], $center - $i); | ||
| 325 | $i = $i - 1; | ||
| 326 | } | ||
| 327 | |||
| 192 | $i = $start; | 328 | $i = $start; |
| 193 | while ($i < $finish) { | 329 | while ($i < $finish) { |
| 330 | my $line; | ||
| 194 | if ($i == $center) { | 331 | if ($i == $center) { |
| 195 | $fulltext = $fulltext . "*$lines[$i] <----- faulting instruction\n"; | 332 | $line = "*$lines[$i] "; |
| 196 | } else { | 333 | } else { |
| 197 | $fulltext = $fulltext . " $lines[$i]\n"; | 334 | $line = " $lines[$i] "; |
| 335 | } | ||
| 336 | print $line; | ||
| 337 | if (defined($reglines[$i]) && length($reglines[$i]) > 0) { | ||
| 338 | my $c = 60 - length($line); | ||
| 339 | while ($c > 0) { print " "; $c = $c - 1; }; | ||
| 340 | print "| $reglines[$i]"; | ||
| 198 | } | 341 | } |
| 342 | if ($i == $center) { | ||
| 343 | print "<--- faulting instruction"; | ||
| 344 | } | ||
| 345 | print "\n"; | ||
| 199 | $i = $i +1; | 346 | $i = $i +1; |
| 200 | } | 347 | } |
| 201 | 348 | ||
| 202 | print $fulltext; | ||
| 203 | |||
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index 491b8b1b6abf..4eea60b1693e 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c | |||
| @@ -210,6 +210,7 @@ static void do_usb_table(void *symval, unsigned long size, | |||
| 210 | static int do_hid_entry(const char *filename, | 210 | static int do_hid_entry(const char *filename, |
| 211 | struct hid_device_id *id, char *alias) | 211 | struct hid_device_id *id, char *alias) |
| 212 | { | 212 | { |
| 213 | id->bus = TO_NATIVE(id->bus); | ||
| 213 | id->vendor = TO_NATIVE(id->vendor); | 214 | id->vendor = TO_NATIVE(id->vendor); |
| 214 | id->product = TO_NATIVE(id->product); | 215 | id->product = TO_NATIVE(id->product); |
| 215 | 216 | ||
diff --git a/scripts/package/mkspec b/scripts/package/mkspec index 2500886fb90a..ee448cdc6a2b 100755 --- a/scripts/package/mkspec +++ b/scripts/package/mkspec | |||
| @@ -86,6 +86,14 @@ echo "%endif" | |||
| 86 | echo 'cp System.map $RPM_BUILD_ROOT'"/boot/System.map-$KERNELRELEASE" | 86 | echo 'cp System.map $RPM_BUILD_ROOT'"/boot/System.map-$KERNELRELEASE" |
| 87 | 87 | ||
| 88 | echo 'cp .config $RPM_BUILD_ROOT'"/boot/config-$KERNELRELEASE" | 88 | echo 'cp .config $RPM_BUILD_ROOT'"/boot/config-$KERNELRELEASE" |
| 89 | |||
| 90 | echo "%ifnarch ppc64" | ||
| 91 | echo 'cp vmlinux vmlinux.orig' | ||
| 92 | echo 'bzip2 -9 vmlinux' | ||
| 93 | echo 'mv vmlinux.bz2 $RPM_BUILD_ROOT'"/boot/vmlinux-$KERNELRELEASE.bz2" | ||
| 94 | echo 'mv vmlinux.orig vmlinux' | ||
| 95 | echo "%endif" | ||
| 96 | |||
| 89 | echo "" | 97 | echo "" |
| 90 | echo "%clean" | 98 | echo "%clean" |
| 91 | echo '#echo -rf $RPM_BUILD_ROOT' | 99 | echo '#echo -rf $RPM_BUILD_ROOT' |
diff --git a/scripts/setlocalversion b/scripts/setlocalversion index f6946cf99ce1..f1c4b35bc324 100755 --- a/scripts/setlocalversion +++ b/scripts/setlocalversion | |||
| @@ -58,14 +58,7 @@ fi | |||
| 58 | # Check for svn and a svn repo. | 58 | # Check for svn and a svn repo. |
| 59 | if rev=`svn info 2>/dev/null | grep '^Last Changed Rev'`; then | 59 | if rev=`svn info 2>/dev/null | grep '^Last Changed Rev'`; then |
| 60 | rev=`echo $rev | awk '{print $NF}'` | 60 | rev=`echo $rev | awk '{print $NF}'` |
| 61 | changes=`svn status 2>/dev/null | grep '^[AMD]' | wc -l` | 61 | printf -- '-svn%s' "$rev" |
| 62 | |||
| 63 | # Are there uncommitted changes? | ||
| 64 | if [ $changes != 0 ]; then | ||
| 65 | printf -- '-svn%s%s' "$rev" -dirty | ||
| 66 | else | ||
| 67 | printf -- '-svn%s' "$rev" | ||
| 68 | fi | ||
| 69 | 62 | ||
| 70 | # All done with svn | 63 | # All done with svn |
| 71 | exit | 64 | exit |
diff --git a/scripts/tags.sh b/scripts/tags.sh index fdbe78bb5e2b..5bd8b1003d44 100755 --- a/scripts/tags.sh +++ b/scripts/tags.sh | |||
| @@ -76,7 +76,10 @@ all_sources() | |||
| 76 | 76 | ||
| 77 | all_kconfigs() | 77 | all_kconfigs() |
| 78 | { | 78 | { |
| 79 | find_sources $ALLSOURCE_ARCHS 'Kconfig*' | 79 | for arch in $ALLSOURCE_ARCHS; do |
| 80 | find_sources $arch 'Kconfig*' | ||
| 81 | done | ||
| 82 | find_other_sources 'Kconfig*' | ||
| 80 | } | 83 | } |
| 81 | 84 | ||
| 82 | all_defconfigs() | 85 | all_defconfigs() |
| @@ -99,7 +102,8 @@ exuberant() | |||
| 99 | -I ____cacheline_internodealigned_in_smp \ | 102 | -I ____cacheline_internodealigned_in_smp \ |
| 100 | -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ | 103 | -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ |
| 101 | --extra=+f --c-kinds=+px \ | 104 | --extra=+f --c-kinds=+px \ |
| 102 | --regex-asm='/^ENTRY\(([^)]*)\).*/\1/' | 105 | --regex-asm='/^ENTRY\(([^)]*)\).*/\1/' \ |
| 106 | --regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/' | ||
| 103 | 107 | ||
| 104 | all_kconfigs | xargs $1 -a \ | 108 | all_kconfigs | xargs $1 -a \ |
| 105 | --langdef=kconfig --language-force=kconfig \ | 109 | --langdef=kconfig --language-force=kconfig \ |
| @@ -117,7 +121,9 @@ exuberant() | |||
| 117 | 121 | ||
| 118 | emacs() | 122 | emacs() |
| 119 | { | 123 | { |
| 120 | all_sources | xargs $1 -a | 124 | all_sources | xargs $1 -a \ |
| 125 | --regex='/^ENTRY(\([^)]*\)).*/\1/' \ | ||
| 126 | --regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/' | ||
| 121 | 127 | ||
| 122 | all_kconfigs | xargs $1 -a \ | 128 | all_kconfigs | xargs $1 -a \ |
| 123 | --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/' | 129 | --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/' |
diff --git a/security/selinux/netlabel.c b/security/selinux/netlabel.c index f58701a7b728..350794ab9b42 100644 --- a/security/selinux/netlabel.c +++ b/security/selinux/netlabel.c | |||
| @@ -386,11 +386,12 @@ int selinux_netlbl_inode_permission(struct inode *inode, int mask) | |||
| 386 | if (!S_ISSOCK(inode->i_mode) || | 386 | if (!S_ISSOCK(inode->i_mode) || |
| 387 | ((mask & (MAY_WRITE | MAY_APPEND)) == 0)) | 387 | ((mask & (MAY_WRITE | MAY_APPEND)) == 0)) |
| 388 | return 0; | 388 | return 0; |
| 389 | |||
| 390 | sock = SOCKET_I(inode); | 389 | sock = SOCKET_I(inode); |
| 391 | sk = sock->sk; | 390 | sk = sock->sk; |
| 391 | if (sk == NULL) | ||
| 392 | return 0; | ||
| 392 | sksec = sk->sk_security; | 393 | sksec = sk->sk_security; |
| 393 | if (sksec->nlbl_state != NLBL_REQUIRE) | 394 | if (sksec == NULL || sksec->nlbl_state != NLBL_REQUIRE) |
| 394 | return 0; | 395 | return 0; |
| 395 | 396 | ||
| 396 | local_bh_disable(); | 397 | local_bh_disable(); |
| @@ -490,8 +491,10 @@ int selinux_netlbl_socket_setsockopt(struct socket *sock, | |||
| 490 | lock_sock(sk); | 491 | lock_sock(sk); |
| 491 | rc = netlbl_sock_getattr(sk, &secattr); | 492 | rc = netlbl_sock_getattr(sk, &secattr); |
| 492 | release_sock(sk); | 493 | release_sock(sk); |
| 493 | if (rc == 0 && secattr.flags != NETLBL_SECATTR_NONE) | 494 | if (rc == 0) |
| 494 | rc = -EACCES; | 495 | rc = -EACCES; |
| 496 | else if (rc == -ENOMSG) | ||
| 497 | rc = 0; | ||
| 495 | netlbl_secattr_destroy(&secattr); | 498 | netlbl_secattr_destroy(&secattr); |
| 496 | } | 499 | } |
| 497 | 500 | ||
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 0278bc083044..e7ded1326b0f 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c | |||
| @@ -1498,58 +1498,31 @@ static int smack_socket_post_create(struct socket *sock, int family, | |||
| 1498 | * looks for host based access restrictions | 1498 | * looks for host based access restrictions |
| 1499 | * | 1499 | * |
| 1500 | * This version will only be appropriate for really small | 1500 | * This version will only be appropriate for really small |
| 1501 | * sets of single label hosts. Because of the masking | 1501 | * sets of single label hosts. |
| 1502 | * it cannot shortcut out on the first match. There are | ||
| 1503 | * numerious ways to address the problem, but none of them | ||
| 1504 | * have been applied here. | ||
| 1505 | * | 1502 | * |
| 1506 | * Returns the label of the far end or NULL if it's not special. | 1503 | * Returns the label of the far end or NULL if it's not special. |
| 1507 | */ | 1504 | */ |
| 1508 | static char *smack_host_label(struct sockaddr_in *sip) | 1505 | static char *smack_host_label(struct sockaddr_in *sip) |
| 1509 | { | 1506 | { |
| 1510 | struct smk_netlbladdr *snp; | 1507 | struct smk_netlbladdr *snp; |
| 1511 | char *bestlabel = NULL; | ||
| 1512 | struct in_addr *siap = &sip->sin_addr; | 1508 | struct in_addr *siap = &sip->sin_addr; |
| 1513 | struct in_addr *liap; | ||
| 1514 | struct in_addr *miap; | ||
| 1515 | struct in_addr bestmask; | ||
| 1516 | 1509 | ||
| 1517 | if (siap->s_addr == 0) | 1510 | if (siap->s_addr == 0) |
| 1518 | return NULL; | 1511 | return NULL; |
| 1519 | 1512 | ||
| 1520 | bestmask.s_addr = 0; | ||
| 1521 | |||
| 1522 | for (snp = smack_netlbladdrs; snp != NULL; snp = snp->smk_next) { | 1513 | for (snp = smack_netlbladdrs; snp != NULL; snp = snp->smk_next) { |
| 1523 | liap = &snp->smk_host.sin_addr; | ||
| 1524 | miap = &snp->smk_mask; | ||
| 1525 | /* | ||
| 1526 | * If the addresses match after applying the list entry mask | ||
| 1527 | * the entry matches the address. If it doesn't move along to | ||
| 1528 | * the next entry. | ||
| 1529 | */ | ||
| 1530 | if ((liap->s_addr & miap->s_addr) != | ||
| 1531 | (siap->s_addr & miap->s_addr)) | ||
| 1532 | continue; | ||
| 1533 | /* | 1514 | /* |
| 1534 | * If the list entry mask identifies a single address | 1515 | * we break after finding the first match because |
| 1535 | * it can't get any more specific. | 1516 | * the list is sorted from longest to shortest mask |
| 1517 | * so we have found the most specific match | ||
| 1536 | */ | 1518 | */ |
| 1537 | if (miap->s_addr == 0xffffffff) | 1519 | if ((&snp->smk_host.sin_addr)->s_addr == |
| 1520 | (siap->s_addr & (&snp->smk_mask)->s_addr)) { | ||
| 1538 | return snp->smk_label; | 1521 | return snp->smk_label; |
| 1539 | /* | 1522 | } |
| 1540 | * If the list entry mask is less specific than the best | ||
| 1541 | * already found this entry is uninteresting. | ||
| 1542 | */ | ||
| 1543 | if ((miap->s_addr | bestmask.s_addr) == bestmask.s_addr) | ||
| 1544 | continue; | ||
| 1545 | /* | ||
| 1546 | * This is better than any entry found so far. | ||
| 1547 | */ | ||
| 1548 | bestmask.s_addr = miap->s_addr; | ||
| 1549 | bestlabel = snp->smk_label; | ||
| 1550 | } | 1523 | } |
| 1551 | 1524 | ||
| 1552 | return bestlabel; | 1525 | return NULL; |
| 1553 | } | 1526 | } |
| 1554 | 1527 | ||
| 1555 | /** | 1528 | /** |
diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c index 8e42800878f4..51f0efc50dab 100644 --- a/security/smack/smackfs.c +++ b/security/smack/smackfs.c | |||
| @@ -650,10 +650,6 @@ static void *netlbladdr_seq_next(struct seq_file *s, void *v, loff_t *pos) | |||
| 650 | 650 | ||
| 651 | return skp; | 651 | return skp; |
| 652 | } | 652 | } |
| 653 | /* | ||
| 654 | #define BEMASK 0x80000000 | ||
| 655 | */ | ||
| 656 | #define BEMASK 0x00000001 | ||
| 657 | #define BEBITS (sizeof(__be32) * 8) | 653 | #define BEBITS (sizeof(__be32) * 8) |
| 658 | 654 | ||
| 659 | /* | 655 | /* |
| @@ -663,12 +659,10 @@ static int netlbladdr_seq_show(struct seq_file *s, void *v) | |||
| 663 | { | 659 | { |
| 664 | struct smk_netlbladdr *skp = (struct smk_netlbladdr *) v; | 660 | struct smk_netlbladdr *skp = (struct smk_netlbladdr *) v; |
| 665 | unsigned char *hp = (char *) &skp->smk_host.sin_addr.s_addr; | 661 | unsigned char *hp = (char *) &skp->smk_host.sin_addr.s_addr; |
| 666 | __be32 bebits; | 662 | int maskn; |
| 667 | int maskn = 0; | 663 | u32 temp_mask = be32_to_cpu(skp->smk_mask.s_addr); |
| 668 | 664 | ||
| 669 | for (bebits = BEMASK; bebits != 0; maskn++, bebits <<= 1) | 665 | for (maskn = 0; temp_mask; temp_mask <<= 1, maskn++); |
| 670 | if ((skp->smk_mask.s_addr & bebits) == 0) | ||
| 671 | break; | ||
| 672 | 666 | ||
| 673 | seq_printf(s, "%u.%u.%u.%u/%d %s\n", | 667 | seq_printf(s, "%u.%u.%u.%u/%d %s\n", |
| 674 | hp[0], hp[1], hp[2], hp[3], maskn, skp->smk_label); | 668 | hp[0], hp[1], hp[2], hp[3], maskn, skp->smk_label); |
| @@ -702,6 +696,42 @@ static int smk_open_netlbladdr(struct inode *inode, struct file *file) | |||
| 702 | } | 696 | } |
| 703 | 697 | ||
| 704 | /** | 698 | /** |
| 699 | * smk_netlbladdr_insert | ||
| 700 | * @new : netlabel to insert | ||
| 701 | * | ||
| 702 | * This helper insert netlabel in the smack_netlbladdrs list | ||
| 703 | * sorted by netmask length (longest to smallest) | ||
| 704 | */ | ||
| 705 | static void smk_netlbladdr_insert(struct smk_netlbladdr *new) | ||
| 706 | { | ||
| 707 | struct smk_netlbladdr *m; | ||
| 708 | |||
| 709 | if (smack_netlbladdrs == NULL) { | ||
| 710 | smack_netlbladdrs = new; | ||
| 711 | return; | ||
| 712 | } | ||
| 713 | |||
| 714 | /* the comparison '>' is a bit hacky, but works */ | ||
| 715 | if (new->smk_mask.s_addr > smack_netlbladdrs->smk_mask.s_addr) { | ||
| 716 | new->smk_next = smack_netlbladdrs; | ||
| 717 | smack_netlbladdrs = new; | ||
| 718 | return; | ||
| 719 | } | ||
| 720 | for (m = smack_netlbladdrs; m != NULL; m = m->smk_next) { | ||
| 721 | if (m->smk_next == NULL) { | ||
| 722 | m->smk_next = new; | ||
| 723 | return; | ||
| 724 | } | ||
| 725 | if (new->smk_mask.s_addr > m->smk_next->smk_mask.s_addr) { | ||
| 726 | new->smk_next = m->smk_next; | ||
| 727 | m->smk_next = new; | ||
| 728 | return; | ||
| 729 | } | ||
| 730 | } | ||
| 731 | } | ||
| 732 | |||
| 733 | |||
| 734 | /** | ||
| 705 | * smk_write_netlbladdr - write() for /smack/netlabel | 735 | * smk_write_netlbladdr - write() for /smack/netlabel |
| 706 | * @filp: file pointer, not actually used | 736 | * @filp: file pointer, not actually used |
| 707 | * @buf: where to get the data from | 737 | * @buf: where to get the data from |
| @@ -724,8 +754,9 @@ static ssize_t smk_write_netlbladdr(struct file *file, const char __user *buf, | |||
| 724 | struct netlbl_audit audit_info; | 754 | struct netlbl_audit audit_info; |
| 725 | struct in_addr mask; | 755 | struct in_addr mask; |
| 726 | unsigned int m; | 756 | unsigned int m; |
| 727 | __be32 bebits = BEMASK; | 757 | u32 mask_bits = (1<<31); |
| 728 | __be32 nsa; | 758 | __be32 nsa; |
| 759 | u32 temp_mask; | ||
| 729 | 760 | ||
| 730 | /* | 761 | /* |
| 731 | * Must have privilege. | 762 | * Must have privilege. |
| @@ -761,10 +792,13 @@ static ssize_t smk_write_netlbladdr(struct file *file, const char __user *buf, | |||
| 761 | if (sp == NULL) | 792 | if (sp == NULL) |
| 762 | return -EINVAL; | 793 | return -EINVAL; |
| 763 | 794 | ||
| 764 | for (mask.s_addr = 0; m > 0; m--) { | 795 | for (temp_mask = 0; m > 0; m--) { |
| 765 | mask.s_addr |= bebits; | 796 | temp_mask |= mask_bits; |
| 766 | bebits <<= 1; | 797 | mask_bits >>= 1; |
| 767 | } | 798 | } |
| 799 | mask.s_addr = cpu_to_be32(temp_mask); | ||
| 800 | |||
| 801 | newname.sin_addr.s_addr &= mask.s_addr; | ||
| 768 | /* | 802 | /* |
| 769 | * Only allow one writer at a time. Writes should be | 803 | * Only allow one writer at a time. Writes should be |
| 770 | * quite rare and small in any case. | 804 | * quite rare and small in any case. |
| @@ -772,6 +806,7 @@ static ssize_t smk_write_netlbladdr(struct file *file, const char __user *buf, | |||
| 772 | mutex_lock(&smk_netlbladdr_lock); | 806 | mutex_lock(&smk_netlbladdr_lock); |
| 773 | 807 | ||
| 774 | nsa = newname.sin_addr.s_addr; | 808 | nsa = newname.sin_addr.s_addr; |
| 809 | /* try to find if the prefix is already in the list */ | ||
| 775 | for (skp = smack_netlbladdrs; skp != NULL; skp = skp->smk_next) | 810 | for (skp = smack_netlbladdrs; skp != NULL; skp = skp->smk_next) |
| 776 | if (skp->smk_host.sin_addr.s_addr == nsa && | 811 | if (skp->smk_host.sin_addr.s_addr == nsa && |
| 777 | skp->smk_mask.s_addr == mask.s_addr) | 812 | skp->smk_mask.s_addr == mask.s_addr) |
| @@ -787,9 +822,8 @@ static ssize_t smk_write_netlbladdr(struct file *file, const char __user *buf, | |||
| 787 | rc = 0; | 822 | rc = 0; |
| 788 | skp->smk_host.sin_addr.s_addr = newname.sin_addr.s_addr; | 823 | skp->smk_host.sin_addr.s_addr = newname.sin_addr.s_addr; |
| 789 | skp->smk_mask.s_addr = mask.s_addr; | 824 | skp->smk_mask.s_addr = mask.s_addr; |
| 790 | skp->smk_next = smack_netlbladdrs; | ||
| 791 | skp->smk_label = sp; | 825 | skp->smk_label = sp; |
| 792 | smack_netlbladdrs = skp; | 826 | smk_netlbladdr_insert(skp); |
| 793 | } | 827 | } |
| 794 | } else { | 828 | } else { |
| 795 | rc = netlbl_cfg_unlbl_static_del(&init_net, NULL, | 829 | rc = netlbl_cfg_unlbl_static_del(&init_net, NULL, |
diff --git a/sound/arm/aaci.c b/sound/arm/aaci.c index 89096e811a4b..772901e41ecb 100644 --- a/sound/arm/aaci.c +++ b/sound/arm/aaci.c | |||
| @@ -90,7 +90,7 @@ static void aaci_ac97_write(struct snd_ac97 *ac97, unsigned short reg, | |||
| 90 | */ | 90 | */ |
| 91 | do { | 91 | do { |
| 92 | v = readl(aaci->base + AACI_SLFR); | 92 | v = readl(aaci->base + AACI_SLFR); |
| 93 | } while ((v & (SLFR_1TXB|SLFR_2TXB)) && timeout--); | 93 | } while ((v & (SLFR_1TXB|SLFR_2TXB)) && --timeout); |
| 94 | 94 | ||
| 95 | if (!timeout) | 95 | if (!timeout) |
| 96 | dev_err(&aaci->dev->dev, | 96 | dev_err(&aaci->dev->dev, |
| @@ -126,7 +126,7 @@ static unsigned short aaci_ac97_read(struct snd_ac97 *ac97, unsigned short reg) | |||
| 126 | */ | 126 | */ |
| 127 | do { | 127 | do { |
| 128 | v = readl(aaci->base + AACI_SLFR); | 128 | v = readl(aaci->base + AACI_SLFR); |
| 129 | } while ((v & SLFR_1TXB) && timeout--); | 129 | } while ((v & SLFR_1TXB) && --timeout); |
| 130 | 130 | ||
| 131 | if (!timeout) { | 131 | if (!timeout) { |
| 132 | dev_err(&aaci->dev->dev, "timeout on slot 1 TX busy\n"); | 132 | dev_err(&aaci->dev->dev, "timeout on slot 1 TX busy\n"); |
| @@ -147,7 +147,7 @@ static unsigned short aaci_ac97_read(struct snd_ac97 *ac97, unsigned short reg) | |||
| 147 | do { | 147 | do { |
| 148 | cond_resched(); | 148 | cond_resched(); |
| 149 | v = readl(aaci->base + AACI_SLFR) & (SLFR_1RXV|SLFR_2RXV); | 149 | v = readl(aaci->base + AACI_SLFR) & (SLFR_1RXV|SLFR_2RXV); |
| 150 | } while ((v != (SLFR_1RXV|SLFR_2RXV)) && timeout--); | 150 | } while ((v != (SLFR_1RXV|SLFR_2RXV)) && --timeout); |
| 151 | 151 | ||
| 152 | if (!timeout) { | 152 | if (!timeout) { |
| 153 | dev_err(&aaci->dev->dev, "timeout on RX valid\n"); | 153 | dev_err(&aaci->dev->dev, "timeout on RX valid\n"); |
diff --git a/sound/core/jack.c b/sound/core/jack.c index dd4a12dc09aa..077a85262c1c 100644 --- a/sound/core/jack.c +++ b/sound/core/jack.c | |||
| @@ -47,7 +47,7 @@ static int snd_jack_dev_register(struct snd_device *device) | |||
| 47 | int err; | 47 | int err; |
| 48 | 48 | ||
| 49 | snprintf(jack->name, sizeof(jack->name), "%s %s", | 49 | snprintf(jack->name, sizeof(jack->name), "%s %s", |
| 50 | card->longname, jack->id); | 50 | card->shortname, jack->id); |
| 51 | jack->input_dev->name = jack->name; | 51 | jack->input_dev->name = jack->name; |
| 52 | 52 | ||
| 53 | /* Default to the sound card device. */ | 53 | /* Default to the sound card device. */ |
diff --git a/sound/core/oss/rate.c b/sound/core/oss/rate.c index a466443c4a26..2fa9299a440d 100644 --- a/sound/core/oss/rate.c +++ b/sound/core/oss/rate.c | |||
| @@ -157,7 +157,7 @@ static void resample_shrink(struct snd_pcm_plugin *plugin, | |||
| 157 | while (dst_frames1 > 0) { | 157 | while (dst_frames1 > 0) { |
| 158 | S1 = S2; | 158 | S1 = S2; |
| 159 | if (src_frames1-- > 0) { | 159 | if (src_frames1-- > 0) { |
| 160 | S1 = *src; | 160 | S2 = *src; |
| 161 | src += src_step; | 161 | src += src_step; |
| 162 | } | 162 | } |
| 163 | if (pos & ~R_MASK) { | 163 | if (pos & ~R_MASK) { |
diff --git a/sound/drivers/mtpav.c b/sound/drivers/mtpav.c index 5b89c0883d60..48b64e6b2670 100644 --- a/sound/drivers/mtpav.c +++ b/sound/drivers/mtpav.c | |||
| @@ -706,7 +706,6 @@ static int __devinit snd_mtpav_probe(struct platform_device *dev) | |||
| 706 | mtp_card->card = card; | 706 | mtp_card->card = card; |
| 707 | mtp_card->irq = -1; | 707 | mtp_card->irq = -1; |
| 708 | mtp_card->share_irq = 0; | 708 | mtp_card->share_irq = 0; |
| 709 | mtp_card->inmidiport = 0xffffffff; | ||
| 710 | mtp_card->inmidistate = 0; | 709 | mtp_card->inmidistate = 0; |
| 711 | mtp_card->outmidihwport = 0xffffffff; | 710 | mtp_card->outmidihwport = 0xffffffff; |
| 712 | init_timer(&mtp_card->timer); | 711 | init_timer(&mtp_card->timer); |
| @@ -719,6 +718,8 @@ static int __devinit snd_mtpav_probe(struct platform_device *dev) | |||
| 719 | if (err < 0) | 718 | if (err < 0) |
| 720 | goto __error; | 719 | goto __error; |
| 721 | 720 | ||
| 721 | mtp_card->inmidiport = mtp_card->num_ports + MTPAV_PIDX_BROADCAST; | ||
| 722 | |||
| 722 | err = snd_mtpav_get_ISA(mtp_card); | 723 | err = snd_mtpav_get_ISA(mtp_card); |
| 723 | if (err < 0) | 724 | if (err < 0) |
| 724 | goto __error; | 725 | goto __error; |
diff --git a/sound/oss/dmasound/dmasound_atari.c b/sound/oss/dmasound/dmasound_atari.c index 57d9f154c88b..38931f2f6967 100644 --- a/sound/oss/dmasound/dmasound_atari.c +++ b/sound/oss/dmasound/dmasound_atari.c | |||
| @@ -847,23 +847,23 @@ static int __init AtaIrqInit(void) | |||
| 847 | of events. So all we need to keep the music playing is | 847 | of events. So all we need to keep the music playing is |
| 848 | to provide the sound hardware with new data upon | 848 | to provide the sound hardware with new data upon |
| 849 | an interrupt from timer A. */ | 849 | an interrupt from timer A. */ |
| 850 | mfp.tim_ct_a = 0; /* ++roman: Stop timer before programming! */ | 850 | st_mfp.tim_ct_a = 0; /* ++roman: Stop timer before programming! */ |
| 851 | mfp.tim_dt_a = 1; /* Cause interrupt after first event. */ | 851 | st_mfp.tim_dt_a = 1; /* Cause interrupt after first event. */ |
| 852 | mfp.tim_ct_a = 8; /* Turn on event counting. */ | 852 | st_mfp.tim_ct_a = 8; /* Turn on event counting. */ |
| 853 | /* Register interrupt handler. */ | 853 | /* Register interrupt handler. */ |
| 854 | if (request_irq(IRQ_MFP_TIMA, AtaInterrupt, IRQ_TYPE_SLOW, "DMA sound", | 854 | if (request_irq(IRQ_MFP_TIMA, AtaInterrupt, IRQ_TYPE_SLOW, "DMA sound", |
| 855 | AtaInterrupt)) | 855 | AtaInterrupt)) |
| 856 | return 0; | 856 | return 0; |
| 857 | mfp.int_en_a |= 0x20; /* Turn interrupt on. */ | 857 | st_mfp.int_en_a |= 0x20; /* Turn interrupt on. */ |
| 858 | mfp.int_mk_a |= 0x20; | 858 | st_mfp.int_mk_a |= 0x20; |
| 859 | return 1; | 859 | return 1; |
| 860 | } | 860 | } |
| 861 | 861 | ||
| 862 | #ifdef MODULE | 862 | #ifdef MODULE |
| 863 | static void AtaIrqCleanUp(void) | 863 | static void AtaIrqCleanUp(void) |
| 864 | { | 864 | { |
| 865 | mfp.tim_ct_a = 0; /* stop timer */ | 865 | st_mfp.tim_ct_a = 0; /* stop timer */ |
| 866 | mfp.int_en_a &= ~0x20; /* turn interrupt off */ | 866 | st_mfp.int_en_a &= ~0x20; /* turn interrupt off */ |
| 867 | free_irq(IRQ_MFP_TIMA, AtaInterrupt); | 867 | free_irq(IRQ_MFP_TIMA, AtaInterrupt); |
| 868 | } | 868 | } |
| 869 | #endif /* MODULE */ | 869 | #endif /* MODULE */ |
| @@ -1599,7 +1599,7 @@ static int __init dmasound_atari_init(void) | |||
| 1599 | is_falcon = 0; | 1599 | is_falcon = 0; |
| 1600 | } else | 1600 | } else |
| 1601 | return -ENODEV; | 1601 | return -ENODEV; |
| 1602 | if ((mfp.int_en_a & mfp.int_mk_a & 0x20) == 0) | 1602 | if ((st_mfp.int_en_a & st_mfp.int_mk_a & 0x20) == 0) |
| 1603 | return dmasound_init(); | 1603 | return dmasound_init(); |
| 1604 | else { | 1604 | else { |
| 1605 | printk("DMA sound driver: Timer A interrupt already in use\n"); | 1605 | printk("DMA sound driver: Timer A interrupt already in use\n"); |
diff --git a/sound/pci/aw2/aw2-alsa.c b/sound/pci/aw2/aw2-alsa.c index 3f00ddf450f8..c7c54e7748e9 100644 --- a/sound/pci/aw2/aw2-alsa.c +++ b/sound/pci/aw2/aw2-alsa.c | |||
| @@ -165,7 +165,7 @@ module_param_array(enable, bool, NULL, 0444); | |||
| 165 | MODULE_PARM_DESC(enable, "Enable Audiowerk2 soundcard."); | 165 | MODULE_PARM_DESC(enable, "Enable Audiowerk2 soundcard."); |
| 166 | 166 | ||
| 167 | static struct pci_device_id snd_aw2_ids[] = { | 167 | static struct pci_device_id snd_aw2_ids[] = { |
| 168 | {PCI_VENDOR_ID_SAA7146, PCI_DEVICE_ID_SAA7146, PCI_ANY_ID, PCI_ANY_ID, | 168 | {PCI_VENDOR_ID_SAA7146, PCI_DEVICE_ID_SAA7146, 0, 0, |
| 169 | 0, 0, 0}, | 169 | 0, 0, 0}, |
| 170 | {0} | 170 | {0} |
| 171 | }; | 171 | }; |
diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c index 7958006a1d66..101a1c13a20d 100644 --- a/sound/pci/emu10k1/emu10k1_main.c +++ b/sound/pci/emu10k1/emu10k1_main.c | |||
| @@ -1528,6 +1528,7 @@ static struct snd_emu_chip_details emu_chip_details[] = { | |||
| 1528 | .ca0151_chip = 1, | 1528 | .ca0151_chip = 1, |
| 1529 | .spk71 = 1, | 1529 | .spk71 = 1, |
| 1530 | .spdif_bug = 1, | 1530 | .spdif_bug = 1, |
| 1531 | .invert_shared_spdif = 1, /* digital/analog switch swapped */ | ||
| 1531 | .ac97_chip = 1} , | 1532 | .ac97_chip = 1} , |
| 1532 | {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10021102, | 1533 | {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10021102, |
| 1533 | .driver = "Audigy2", .name = "SB Audigy 2 Platinum [SB0240P]", | 1534 | .driver = "Audigy2", .name = "SB Audigy 2 Platinum [SB0240P]", |
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index 0b708134d12f..d03f99298be9 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c | |||
| @@ -3088,6 +3088,16 @@ int snd_hda_multi_out_dig_prepare(struct hda_codec *codec, | |||
| 3088 | } | 3088 | } |
| 3089 | EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_prepare); | 3089 | EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_prepare); |
| 3090 | 3090 | ||
| 3091 | int snd_hda_multi_out_dig_cleanup(struct hda_codec *codec, | ||
| 3092 | struct hda_multi_out *mout) | ||
| 3093 | { | ||
| 3094 | mutex_lock(&codec->spdif_mutex); | ||
| 3095 | cleanup_dig_out_stream(codec, mout->dig_out_nid); | ||
| 3096 | mutex_unlock(&codec->spdif_mutex); | ||
| 3097 | return 0; | ||
| 3098 | } | ||
| 3099 | EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_cleanup); | ||
| 3100 | |||
| 3091 | /* | 3101 | /* |
| 3092 | * release the digital out | 3102 | * release the digital out |
| 3093 | */ | 3103 | */ |
diff --git a/sound/pci/hda/hda_hwdep.c b/sound/pci/hda/hda_hwdep.c index 300ab407cf42..4ae51dcb81af 100644 --- a/sound/pci/hda/hda_hwdep.c +++ b/sound/pci/hda/hda_hwdep.c | |||
| @@ -175,7 +175,7 @@ static int reconfig_codec(struct hda_codec *codec) | |||
| 175 | err = snd_hda_codec_build_controls(codec); | 175 | err = snd_hda_codec_build_controls(codec); |
| 176 | if (err < 0) | 176 | if (err < 0) |
| 177 | return err; | 177 | return err; |
| 178 | return 0; | 178 | return snd_card_register(codec->bus->card); |
| 179 | } | 179 | } |
| 180 | 180 | ||
| 181 | /* | 181 | /* |
| @@ -277,18 +277,19 @@ static ssize_t init_verbs_store(struct device *dev, | |||
| 277 | { | 277 | { |
| 278 | struct snd_hwdep *hwdep = dev_get_drvdata(dev); | 278 | struct snd_hwdep *hwdep = dev_get_drvdata(dev); |
| 279 | struct hda_codec *codec = hwdep->private_data; | 279 | struct hda_codec *codec = hwdep->private_data; |
| 280 | char *p; | 280 | struct hda_verb *v; |
| 281 | struct hda_verb verb, *v; | 281 | int nid, verb, param; |
| 282 | 282 | ||
| 283 | verb.nid = simple_strtoul(buf, &p, 0); | 283 | if (sscanf(buf, "%i %i %i", &nid, &verb, ¶m) != 3) |
| 284 | verb.verb = simple_strtoul(p, &p, 0); | 284 | return -EINVAL; |
| 285 | verb.param = simple_strtoul(p, &p, 0); | 285 | if (!nid || !verb) |
| 286 | if (!verb.nid || !verb.verb || !verb.param) | ||
| 287 | return -EINVAL; | 286 | return -EINVAL; |
| 288 | v = snd_array_new(&codec->init_verbs); | 287 | v = snd_array_new(&codec->init_verbs); |
| 289 | if (!v) | 288 | if (!v) |
| 290 | return -ENOMEM; | 289 | return -ENOMEM; |
| 291 | *v = verb; | 290 | v->nid = nid; |
| 291 | v->verb = verb; | ||
| 292 | v->param = param; | ||
| 292 | return count; | 293 | return count; |
| 293 | } | 294 | } |
| 294 | 295 | ||
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 11e791b965f6..5e909e0da04b 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
| @@ -1947,16 +1947,13 @@ static int azx_suspend(struct pci_dev *pci, pm_message_t state) | |||
| 1947 | return 0; | 1947 | return 0; |
| 1948 | } | 1948 | } |
| 1949 | 1949 | ||
| 1950 | static int azx_resume_early(struct pci_dev *pci) | ||
| 1951 | { | ||
| 1952 | return pci_restore_state(pci); | ||
| 1953 | } | ||
| 1954 | |||
| 1955 | static int azx_resume(struct pci_dev *pci) | 1950 | static int azx_resume(struct pci_dev *pci) |
| 1956 | { | 1951 | { |
| 1957 | struct snd_card *card = pci_get_drvdata(pci); | 1952 | struct snd_card *card = pci_get_drvdata(pci); |
| 1958 | struct azx *chip = card->private_data; | 1953 | struct azx *chip = card->private_data; |
| 1959 | 1954 | ||
| 1955 | pci_set_power_state(pci, PCI_D0); | ||
| 1956 | pci_restore_state(pci); | ||
| 1960 | if (pci_enable_device(pci) < 0) { | 1957 | if (pci_enable_device(pci) < 0) { |
| 1961 | printk(KERN_ERR "hda-intel: pci_enable_device failed, " | 1958 | printk(KERN_ERR "hda-intel: pci_enable_device failed, " |
| 1962 | "disabling device\n"); | 1959 | "disabling device\n"); |
| @@ -2098,6 +2095,8 @@ static struct snd_pci_quirk probe_mask_list[] __devinitdata = { | |||
| 2098 | SND_PCI_QUIRK(0x1028, 0x20ac, "Dell Studio Desktop", 0x01), | 2095 | SND_PCI_QUIRK(0x1028, 0x20ac, "Dell Studio Desktop", 0x01), |
| 2099 | /* including bogus ALC268 in slot#2 that conflicts with ALC888 */ | 2096 | /* including bogus ALC268 in slot#2 that conflicts with ALC888 */ |
| 2100 | SND_PCI_QUIRK(0x17c0, 0x4085, "Medion MD96630", 0x01), | 2097 | SND_PCI_QUIRK(0x17c0, 0x4085, "Medion MD96630", 0x01), |
| 2098 | /* conflict of ALC268 in slot#3 (digital I/O); a temporary fix */ | ||
| 2099 | SND_PCI_QUIRK(0x1179, 0xff00, "Toshiba laptop", 0x03), | ||
| 2101 | {} | 2100 | {} |
| 2102 | }; | 2101 | }; |
| 2103 | 2102 | ||
| @@ -2468,7 +2467,6 @@ static struct pci_driver driver = { | |||
| 2468 | .remove = __devexit_p(azx_remove), | 2467 | .remove = __devexit_p(azx_remove), |
| 2469 | #ifdef CONFIG_PM | 2468 | #ifdef CONFIG_PM |
| 2470 | .suspend = azx_suspend, | 2469 | .suspend = azx_suspend, |
| 2471 | .resume_early = azx_resume_early, | ||
| 2472 | .resume = azx_resume, | 2470 | .resume = azx_resume, |
| 2473 | #endif | 2471 | #endif |
| 2474 | }; | 2472 | }; |
diff --git a/sound/pci/hda/hda_local.h b/sound/pci/hda/hda_local.h index 1dd8716c387f..44f189cb97ae 100644 --- a/sound/pci/hda/hda_local.h +++ b/sound/pci/hda/hda_local.h | |||
| @@ -251,6 +251,8 @@ int snd_hda_multi_out_dig_prepare(struct hda_codec *codec, | |||
| 251 | unsigned int stream_tag, | 251 | unsigned int stream_tag, |
| 252 | unsigned int format, | 252 | unsigned int format, |
| 253 | struct snd_pcm_substream *substream); | 253 | struct snd_pcm_substream *substream); |
| 254 | int snd_hda_multi_out_dig_cleanup(struct hda_codec *codec, | ||
| 255 | struct hda_multi_out *mout); | ||
| 254 | int snd_hda_multi_out_analog_open(struct hda_codec *codec, | 256 | int snd_hda_multi_out_analog_open(struct hda_codec *codec, |
| 255 | struct hda_multi_out *mout, | 257 | struct hda_multi_out *mout, |
| 256 | struct snd_pcm_substream *substream, | 258 | struct snd_pcm_substream *substream, |
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index 2e7371ec2e23..e48612323aa0 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c | |||
| @@ -275,6 +275,14 @@ static int ad198x_dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo, | |||
| 275 | format, substream); | 275 | format, substream); |
| 276 | } | 276 | } |
| 277 | 277 | ||
| 278 | static int ad198x_dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo, | ||
| 279 | struct hda_codec *codec, | ||
| 280 | struct snd_pcm_substream *substream) | ||
| 281 | { | ||
| 282 | struct ad198x_spec *spec = codec->spec; | ||
| 283 | return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout); | ||
| 284 | } | ||
| 285 | |||
| 278 | /* | 286 | /* |
| 279 | * Analog capture | 287 | * Analog capture |
| 280 | */ | 288 | */ |
| @@ -333,7 +341,8 @@ static struct hda_pcm_stream ad198x_pcm_digital_playback = { | |||
| 333 | .ops = { | 341 | .ops = { |
| 334 | .open = ad198x_dig_playback_pcm_open, | 342 | .open = ad198x_dig_playback_pcm_open, |
| 335 | .close = ad198x_dig_playback_pcm_close, | 343 | .close = ad198x_dig_playback_pcm_close, |
| 336 | .prepare = ad198x_dig_playback_pcm_prepare | 344 | .prepare = ad198x_dig_playback_pcm_prepare, |
| 345 | .cleanup = ad198x_dig_playback_pcm_cleanup | ||
| 337 | }, | 346 | }, |
| 338 | }; | 347 | }; |
| 339 | 348 | ||
| @@ -1885,8 +1894,8 @@ static hda_nid_t ad1988_capsrc_nids[3] = { | |||
| 1885 | #define AD1988_SPDIF_OUT_HDMI 0x0b | 1894 | #define AD1988_SPDIF_OUT_HDMI 0x0b |
| 1886 | #define AD1988_SPDIF_IN 0x07 | 1895 | #define AD1988_SPDIF_IN 0x07 |
| 1887 | 1896 | ||
| 1888 | static hda_nid_t ad1989b_slave_dig_outs[2] = { | 1897 | static hda_nid_t ad1989b_slave_dig_outs[] = { |
| 1889 | AD1988_SPDIF_OUT, AD1988_SPDIF_OUT_HDMI | 1898 | AD1988_SPDIF_OUT, AD1988_SPDIF_OUT_HDMI, 0 |
| 1890 | }; | 1899 | }; |
| 1891 | 1900 | ||
| 1892 | static struct hda_input_mux ad1988_6stack_capture_source = { | 1901 | static struct hda_input_mux ad1988_6stack_capture_source = { |
diff --git a/sound/pci/hda/patch_intelhdmi.c b/sound/pci/hda/patch_intelhdmi.c index 3564f4e4b74c..fcc77fec4487 100644 --- a/sound/pci/hda/patch_intelhdmi.c +++ b/sound/pci/hda/patch_intelhdmi.c | |||
| @@ -49,11 +49,6 @@ static struct hda_verb pinout_enable_verb[] = { | |||
| 49 | {} /* terminator */ | 49 | {} /* terminator */ |
| 50 | }; | 50 | }; |
| 51 | 51 | ||
| 52 | static struct hda_verb pinout_disable_verb[] = { | ||
| 53 | {PIN_NID, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x00}, | ||
| 54 | {} | ||
| 55 | }; | ||
| 56 | |||
| 57 | static struct hda_verb unsolicited_response_verb[] = { | 52 | static struct hda_verb unsolicited_response_verb[] = { |
| 58 | {PIN_NID, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | | 53 | {PIN_NID, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | |
| 59 | INTEL_HDMI_EVENT_TAG}, | 54 | INTEL_HDMI_EVENT_TAG}, |
| @@ -248,10 +243,6 @@ static void hdmi_write_dip_byte(struct hda_codec *codec, hda_nid_t nid, | |||
| 248 | 243 | ||
| 249 | static void hdmi_enable_output(struct hda_codec *codec) | 244 | static void hdmi_enable_output(struct hda_codec *codec) |
| 250 | { | 245 | { |
| 251 | /* Enable Audio InfoFrame Transmission */ | ||
| 252 | hdmi_set_dip_index(codec, PIN_NID, 0x0, 0x0); | ||
| 253 | snd_hda_codec_write(codec, PIN_NID, 0, AC_VERB_SET_HDMI_DIP_XMIT, | ||
| 254 | AC_DIPXMIT_BEST); | ||
| 255 | /* Unmute */ | 246 | /* Unmute */ |
| 256 | if (get_wcaps(codec, PIN_NID) & AC_WCAP_OUT_AMP) | 247 | if (get_wcaps(codec, PIN_NID) & AC_WCAP_OUT_AMP) |
| 257 | snd_hda_codec_write(codec, PIN_NID, 0, | 248 | snd_hda_codec_write(codec, PIN_NID, 0, |
| @@ -260,17 +251,24 @@ static void hdmi_enable_output(struct hda_codec *codec) | |||
| 260 | snd_hda_sequence_write(codec, pinout_enable_verb); | 251 | snd_hda_sequence_write(codec, pinout_enable_verb); |
| 261 | } | 252 | } |
| 262 | 253 | ||
| 263 | static void hdmi_disable_output(struct hda_codec *codec) | 254 | /* |
| 255 | * Enable Audio InfoFrame Transmission | ||
| 256 | */ | ||
| 257 | static void hdmi_start_infoframe_trans(struct hda_codec *codec) | ||
| 264 | { | 258 | { |
| 265 | snd_hda_sequence_write(codec, pinout_disable_verb); | 259 | hdmi_set_dip_index(codec, PIN_NID, 0x0, 0x0); |
| 266 | if (get_wcaps(codec, PIN_NID) & AC_WCAP_OUT_AMP) | 260 | snd_hda_codec_write(codec, PIN_NID, 0, AC_VERB_SET_HDMI_DIP_XMIT, |
| 267 | snd_hda_codec_write(codec, PIN_NID, 0, | 261 | AC_DIPXMIT_BEST); |
| 268 | AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); | 262 | } |
| 269 | 263 | ||
| 270 | /* | 264 | /* |
| 271 | * FIXME: noises may arise when playing music after reloading the | 265 | * Disable Audio InfoFrame Transmission |
| 272 | * kernel module, until the next X restart or monitor repower. | 266 | */ |
| 273 | */ | 267 | static void hdmi_stop_infoframe_trans(struct hda_codec *codec) |
| 268 | { | ||
| 269 | hdmi_set_dip_index(codec, PIN_NID, 0x0, 0x0); | ||
| 270 | snd_hda_codec_write(codec, PIN_NID, 0, AC_VERB_SET_HDMI_DIP_XMIT, | ||
| 271 | AC_DIPXMIT_DISABLE); | ||
| 274 | } | 272 | } |
| 275 | 273 | ||
| 276 | static int hdmi_get_channel_count(struct hda_codec *codec) | 274 | static int hdmi_get_channel_count(struct hda_codec *codec) |
| @@ -368,11 +366,16 @@ static void hdmi_fill_audio_infoframe(struct hda_codec *codec, | |||
| 368 | struct hdmi_audio_infoframe *ai) | 366 | struct hdmi_audio_infoframe *ai) |
| 369 | { | 367 | { |
| 370 | u8 *params = (u8 *)ai; | 368 | u8 *params = (u8 *)ai; |
| 369 | u8 sum = 0; | ||
| 371 | int i; | 370 | int i; |
| 372 | 371 | ||
| 373 | hdmi_debug_dip_size(codec); | 372 | hdmi_debug_dip_size(codec); |
| 374 | hdmi_clear_dip_buffers(codec); /* be paranoid */ | 373 | hdmi_clear_dip_buffers(codec); /* be paranoid */ |
| 375 | 374 | ||
| 375 | for (i = 0; i < sizeof(ai); i++) | ||
| 376 | sum += params[i]; | ||
| 377 | ai->checksum = - sum; | ||
| 378 | |||
| 376 | hdmi_set_dip_index(codec, PIN_NID, 0x0, 0x0); | 379 | hdmi_set_dip_index(codec, PIN_NID, 0x0, 0x0); |
| 377 | for (i = 0; i < sizeof(ai); i++) | 380 | for (i = 0; i < sizeof(ai); i++) |
| 378 | hdmi_write_dip_byte(codec, PIN_NID, params[i]); | 381 | hdmi_write_dip_byte(codec, PIN_NID, params[i]); |
| @@ -419,14 +422,18 @@ static int hdmi_setup_channel_allocation(struct hda_codec *codec, | |||
| 419 | /* | 422 | /* |
| 420 | * CA defaults to 0 for basic stereo audio | 423 | * CA defaults to 0 for basic stereo audio |
| 421 | */ | 424 | */ |
| 422 | if (!eld->eld_ver) | ||
| 423 | return 0; | ||
| 424 | if (!eld->spk_alloc) | ||
| 425 | return 0; | ||
| 426 | if (channels <= 2) | 425 | if (channels <= 2) |
| 427 | return 0; | 426 | return 0; |
| 428 | 427 | ||
| 429 | /* | 428 | /* |
| 429 | * HDMI sink's ELD info cannot always be retrieved for now, e.g. | ||
| 430 | * in console or for audio devices. Assume the highest speakers | ||
| 431 | * configuration, to _not_ prohibit multi-channel audio playback. | ||
| 432 | */ | ||
| 433 | if (!eld->spk_alloc) | ||
| 434 | eld->spk_alloc = 0xffff; | ||
| 435 | |||
| 436 | /* | ||
| 430 | * expand ELD's speaker allocation mask | 437 | * expand ELD's speaker allocation mask |
| 431 | * | 438 | * |
| 432 | * ELD tells the speaker mask in a compact(paired) form, | 439 | * ELD tells the speaker mask in a compact(paired) form, |
| @@ -485,6 +492,7 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, | |||
| 485 | hdmi_setup_channel_mapping(codec, &ai); | 492 | hdmi_setup_channel_mapping(codec, &ai); |
| 486 | 493 | ||
| 487 | hdmi_fill_audio_infoframe(codec, &ai); | 494 | hdmi_fill_audio_infoframe(codec, &ai); |
| 495 | hdmi_start_infoframe_trans(codec); | ||
| 488 | } | 496 | } |
| 489 | 497 | ||
| 490 | 498 | ||
| @@ -562,7 +570,7 @@ static int intel_hdmi_playback_pcm_close(struct hda_pcm_stream *hinfo, | |||
| 562 | { | 570 | { |
| 563 | struct intel_hdmi_spec *spec = codec->spec; | 571 | struct intel_hdmi_spec *spec = codec->spec; |
| 564 | 572 | ||
| 565 | hdmi_disable_output(codec); | 573 | hdmi_stop_infoframe_trans(codec); |
| 566 | 574 | ||
| 567 | return snd_hda_multi_out_dig_close(codec, &spec->multiout); | 575 | return snd_hda_multi_out_dig_close(codec, &spec->multiout); |
| 568 | } | 576 | } |
| @@ -582,8 +590,6 @@ static int intel_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo, | |||
| 582 | 590 | ||
| 583 | hdmi_setup_audio_infoframe(codec, substream); | 591 | hdmi_setup_audio_infoframe(codec, substream); |
| 584 | 592 | ||
| 585 | hdmi_enable_output(codec); | ||
| 586 | |||
| 587 | return 0; | 593 | return 0; |
| 588 | } | 594 | } |
| 589 | 595 | ||
| @@ -628,8 +634,7 @@ static int intel_hdmi_build_controls(struct hda_codec *codec) | |||
| 628 | 634 | ||
| 629 | static int intel_hdmi_init(struct hda_codec *codec) | 635 | static int intel_hdmi_init(struct hda_codec *codec) |
| 630 | { | 636 | { |
| 631 | /* disable audio output as early as possible */ | 637 | hdmi_enable_output(codec); |
| 632 | hdmi_disable_output(codec); | ||
| 633 | 638 | ||
| 634 | snd_hda_sequence_write(codec, unsolicited_response_verb); | 639 | snd_hda_sequence_write(codec, unsolicited_response_verb); |
| 635 | 640 | ||
| @@ -679,6 +684,7 @@ static struct hda_codec_preset snd_hda_preset_intelhdmi[] = { | |||
| 679 | { .id = 0x80862801, .name = "G45 DEVBLC", .patch = patch_intel_hdmi }, | 684 | { .id = 0x80862801, .name = "G45 DEVBLC", .patch = patch_intel_hdmi }, |
| 680 | { .id = 0x80862802, .name = "G45 DEVCTG", .patch = patch_intel_hdmi }, | 685 | { .id = 0x80862802, .name = "G45 DEVCTG", .patch = patch_intel_hdmi }, |
| 681 | { .id = 0x80862803, .name = "G45 DEVELK", .patch = patch_intel_hdmi }, | 686 | { .id = 0x80862803, .name = "G45 DEVELK", .patch = patch_intel_hdmi }, |
| 687 | { .id = 0x80862804, .name = "G45 DEVIBX", .patch = patch_intel_hdmi }, | ||
| 682 | { .id = 0x10951392, .name = "SiI1392 HDMI", .patch = patch_intel_hdmi }, | 688 | { .id = 0x10951392, .name = "SiI1392 HDMI", .patch = patch_intel_hdmi }, |
| 683 | {} /* terminator */ | 689 | {} /* terminator */ |
| 684 | }; | 690 | }; |
| @@ -687,6 +693,7 @@ MODULE_ALIAS("snd-hda-codec-id:808629fb"); | |||
| 687 | MODULE_ALIAS("snd-hda-codec-id:80862801"); | 693 | MODULE_ALIAS("snd-hda-codec-id:80862801"); |
| 688 | MODULE_ALIAS("snd-hda-codec-id:80862802"); | 694 | MODULE_ALIAS("snd-hda-codec-id:80862802"); |
| 689 | MODULE_ALIAS("snd-hda-codec-id:80862803"); | 695 | MODULE_ALIAS("snd-hda-codec-id:80862803"); |
| 696 | MODULE_ALIAS("snd-hda-codec-id:80862804"); | ||
| 690 | MODULE_ALIAS("snd-hda-codec-id:10951392"); | 697 | MODULE_ALIAS("snd-hda-codec-id:10951392"); |
| 691 | 698 | ||
| 692 | MODULE_LICENSE("GPL"); | 699 | MODULE_LICENSE("GPL"); |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index ae5c8a0d1479..6c26afcb8262 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
| @@ -7017,6 +7017,7 @@ static int patch_alc882(struct hda_codec *codec) | |||
| 7017 | case 0x106b3e00: /* iMac 24 Aluminium */ | 7017 | case 0x106b3e00: /* iMac 24 Aluminium */ |
| 7018 | board_config = ALC885_IMAC24; | 7018 | board_config = ALC885_IMAC24; |
| 7019 | break; | 7019 | break; |
| 7020 | case 0x106b00a0: /* MacBookPro3,1 - Another revision */ | ||
| 7020 | case 0x106b00a1: /* Macbook (might be wrong - PCI SSID?) */ | 7021 | case 0x106b00a1: /* Macbook (might be wrong - PCI SSID?) */ |
| 7021 | case 0x106b00a4: /* MacbookPro4,1 */ | 7022 | case 0x106b00a4: /* MacbookPro4,1 */ |
| 7022 | case 0x106b2c00: /* Macbook Pro rev3 */ | 7023 | case 0x106b2c00: /* Macbook Pro rev3 */ |
| @@ -8469,6 +8470,8 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = { | |||
| 8469 | ALC888_ACER_ASPIRE_4930G), | 8470 | ALC888_ACER_ASPIRE_4930G), |
| 8470 | SND_PCI_QUIRK(0x1025, 0x015e, "Acer Aspire 6930G", | 8471 | SND_PCI_QUIRK(0x1025, 0x015e, "Acer Aspire 6930G", |
| 8471 | ALC888_ACER_ASPIRE_4930G), | 8472 | ALC888_ACER_ASPIRE_4930G), |
| 8473 | SND_PCI_QUIRK(0x1025, 0x0166, "Acer Aspire 6530G", | ||
| 8474 | ALC888_ACER_ASPIRE_4930G), | ||
| 8472 | SND_PCI_QUIRK(0x1025, 0, "Acer laptop", ALC883_ACER), /* default Acer */ | 8475 | SND_PCI_QUIRK(0x1025, 0, "Acer laptop", ALC883_ACER), /* default Acer */ |
| 8473 | SND_PCI_QUIRK(0x1028, 0x020d, "Dell Inspiron 530", ALC888_6ST_DELL), | 8476 | SND_PCI_QUIRK(0x1028, 0x020d, "Dell Inspiron 530", ALC888_6ST_DELL), |
| 8474 | SND_PCI_QUIRK(0x103c, 0x2a3d, "HP Pavillion", ALC883_6ST_DIG), | 8477 | SND_PCI_QUIRK(0x103c, 0x2a3d, "HP Pavillion", ALC883_6ST_DIG), |
| @@ -8478,6 +8481,7 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = { | |||
| 8478 | SND_PCI_QUIRK(0x103c, 0x2a66, "HP Acacia", ALC888_3ST_HP), | 8481 | SND_PCI_QUIRK(0x103c, 0x2a66, "HP Acacia", ALC888_3ST_HP), |
| 8479 | SND_PCI_QUIRK(0x1043, 0x1873, "Asus M90V", ALC888_ASUS_M90V), | 8482 | SND_PCI_QUIRK(0x1043, 0x1873, "Asus M90V", ALC888_ASUS_M90V), |
| 8480 | SND_PCI_QUIRK(0x1043, 0x8249, "Asus M2A-VM HDMI", ALC883_3ST_6ch_DIG), | 8483 | SND_PCI_QUIRK(0x1043, 0x8249, "Asus M2A-VM HDMI", ALC883_3ST_6ch_DIG), |
| 8484 | SND_PCI_QUIRK(0x1043, 0x8284, "Asus Z37E", ALC883_6ST_DIG), | ||
| 8481 | SND_PCI_QUIRK(0x1043, 0x82fe, "Asus P5Q-EM HDMI", ALC1200_ASUS_P5Q), | 8485 | SND_PCI_QUIRK(0x1043, 0x82fe, "Asus P5Q-EM HDMI", ALC1200_ASUS_P5Q), |
| 8482 | SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_ASUS_EEE1601), | 8486 | SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_ASUS_EEE1601), |
| 8483 | SND_PCI_QUIRK(0x105b, 0x0ce8, "Foxconn P35AX-S", ALC883_6ST_DIG), | 8487 | SND_PCI_QUIRK(0x105b, 0x0ce8, "Foxconn P35AX-S", ALC883_6ST_DIG), |
| @@ -10553,6 +10557,7 @@ static struct snd_pci_quirk alc262_cfg_tbl[] = { | |||
| 10553 | SND_PCI_QUIRK(0x103c, 0x1309, "HP xw4*00", ALC262_HP_BPC), | 10557 | SND_PCI_QUIRK(0x103c, 0x1309, "HP xw4*00", ALC262_HP_BPC), |
| 10554 | SND_PCI_QUIRK(0x103c, 0x130a, "HP xw6*00", ALC262_HP_BPC), | 10558 | SND_PCI_QUIRK(0x103c, 0x130a, "HP xw6*00", ALC262_HP_BPC), |
| 10555 | SND_PCI_QUIRK(0x103c, 0x130b, "HP xw8*00", ALC262_HP_BPC), | 10559 | SND_PCI_QUIRK(0x103c, 0x130b, "HP xw8*00", ALC262_HP_BPC), |
| 10560 | SND_PCI_QUIRK(0x103c, 0x170b, "HP xw*", ALC262_HP_BPC), | ||
| 10556 | SND_PCI_QUIRK(0x103c, 0x2800, "HP D7000", ALC262_HP_BPC_D7000_WL), | 10561 | SND_PCI_QUIRK(0x103c, 0x2800, "HP D7000", ALC262_HP_BPC_D7000_WL), |
| 10557 | SND_PCI_QUIRK(0x103c, 0x2801, "HP D7000", ALC262_HP_BPC_D7000_WF), | 10562 | SND_PCI_QUIRK(0x103c, 0x2801, "HP D7000", ALC262_HP_BPC_D7000_WF), |
| 10558 | SND_PCI_QUIRK(0x103c, 0x2802, "HP D7000", ALC262_HP_BPC_D7000_WL), | 10563 | SND_PCI_QUIRK(0x103c, 0x2802, "HP D7000", ALC262_HP_BPC_D7000_WL), |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 38428e22428f..6094344fb223 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
| @@ -1207,7 +1207,7 @@ static const char *slave_vols[] = { | |||
| 1207 | "LFE Playback Volume", | 1207 | "LFE Playback Volume", |
| 1208 | "Side Playback Volume", | 1208 | "Side Playback Volume", |
| 1209 | "Headphone Playback Volume", | 1209 | "Headphone Playback Volume", |
| 1210 | "Headphone Playback Volume", | 1210 | "Headphone2 Playback Volume", |
| 1211 | "Speaker Playback Volume", | 1211 | "Speaker Playback Volume", |
| 1212 | "External Speaker Playback Volume", | 1212 | "External Speaker Playback Volume", |
| 1213 | "Speaker2 Playback Volume", | 1213 | "Speaker2 Playback Volume", |
| @@ -1221,7 +1221,7 @@ static const char *slave_sws[] = { | |||
| 1221 | "LFE Playback Switch", | 1221 | "LFE Playback Switch", |
| 1222 | "Side Playback Switch", | 1222 | "Side Playback Switch", |
| 1223 | "Headphone Playback Switch", | 1223 | "Headphone Playback Switch", |
| 1224 | "Headphone Playback Switch", | 1224 | "Headphone2 Playback Switch", |
| 1225 | "Speaker Playback Switch", | 1225 | "Speaker Playback Switch", |
| 1226 | "External Speaker Playback Switch", | 1226 | "External Speaker Playback Switch", |
| 1227 | "Speaker2 Playback Switch", | 1227 | "Speaker2 Playback Switch", |
| @@ -1799,7 +1799,7 @@ static struct snd_pci_quirk stac92hd71bxx_cfg_tbl[] = { | |||
| 1799 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x30f2, | 1799 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x30f2, |
| 1800 | "HP dv5", STAC_HP_M4), | 1800 | "HP dv5", STAC_HP_M4), |
| 1801 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x30f4, | 1801 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x30f4, |
| 1802 | "HP dv7", STAC_HP_M4), | 1802 | "HP dv7", STAC_HP_DV5), |
| 1803 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x30f7, | 1803 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x30f7, |
| 1804 | "HP dv4", STAC_HP_DV5), | 1804 | "HP dv4", STAC_HP_DV5), |
| 1805 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x30fc, | 1805 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x30fc, |
| @@ -2442,6 +2442,14 @@ static int stac92xx_dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo, | |||
| 2442 | stream_tag, format, substream); | 2442 | stream_tag, format, substream); |
| 2443 | } | 2443 | } |
| 2444 | 2444 | ||
| 2445 | static int stac92xx_dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo, | ||
| 2446 | struct hda_codec *codec, | ||
| 2447 | struct snd_pcm_substream *substream) | ||
| 2448 | { | ||
| 2449 | struct sigmatel_spec *spec = codec->spec; | ||
| 2450 | return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout); | ||
| 2451 | } | ||
| 2452 | |||
| 2445 | 2453 | ||
| 2446 | /* | 2454 | /* |
| 2447 | * Analog capture callbacks | 2455 | * Analog capture callbacks |
| @@ -2486,7 +2494,8 @@ static struct hda_pcm_stream stac92xx_pcm_digital_playback = { | |||
| 2486 | .ops = { | 2494 | .ops = { |
| 2487 | .open = stac92xx_dig_playback_pcm_open, | 2495 | .open = stac92xx_dig_playback_pcm_open, |
| 2488 | .close = stac92xx_dig_playback_pcm_close, | 2496 | .close = stac92xx_dig_playback_pcm_close, |
| 2489 | .prepare = stac92xx_dig_playback_pcm_prepare | 2497 | .prepare = stac92xx_dig_playback_pcm_prepare, |
| 2498 | .cleanup = stac92xx_dig_playback_pcm_cleanup | ||
| 2490 | }, | 2499 | }, |
| 2491 | }; | 2500 | }; |
| 2492 | 2501 | ||
| @@ -3507,6 +3516,7 @@ static int stac92xx_parse_auto_config(struct hda_codec *codec, hda_nid_t dig_out | |||
| 3507 | if (! spec->autocfg.line_outs) | 3516 | if (! spec->autocfg.line_outs) |
| 3508 | return 0; /* can't find valid pin config */ | 3517 | return 0; /* can't find valid pin config */ |
| 3509 | 3518 | ||
| 3519 | #if 0 /* FIXME: temporarily disabled */ | ||
| 3510 | /* If we have no real line-out pin and multiple hp-outs, HPs should | 3520 | /* If we have no real line-out pin and multiple hp-outs, HPs should |
| 3511 | * be set up as multi-channel outputs. | 3521 | * be set up as multi-channel outputs. |
| 3512 | */ | 3522 | */ |
| @@ -3526,6 +3536,7 @@ static int stac92xx_parse_auto_config(struct hda_codec *codec, hda_nid_t dig_out | |||
| 3526 | spec->autocfg.line_out_type = AUTO_PIN_HP_OUT; | 3536 | spec->autocfg.line_out_type = AUTO_PIN_HP_OUT; |
| 3527 | spec->autocfg.hp_outs = 0; | 3537 | spec->autocfg.hp_outs = 0; |
| 3528 | } | 3538 | } |
| 3539 | #endif /* FIXME: temporarily disabled */ | ||
| 3529 | if (spec->autocfg.mono_out_pin) { | 3540 | if (spec->autocfg.mono_out_pin) { |
| 3530 | int dir = get_wcaps(codec, spec->autocfg.mono_out_pin) & | 3541 | int dir = get_wcaps(codec, spec->autocfg.mono_out_pin) & |
| 3531 | (AC_WCAP_OUT_AMP | AC_WCAP_IN_AMP); | 3542 | (AC_WCAP_OUT_AMP | AC_WCAP_IN_AMP); |
| @@ -4980,7 +4991,7 @@ again: | |||
| 4980 | case STAC_DELL_M4_3: | 4991 | case STAC_DELL_M4_3: |
| 4981 | spec->num_dmics = 1; | 4992 | spec->num_dmics = 1; |
| 4982 | spec->num_smuxes = 0; | 4993 | spec->num_smuxes = 0; |
| 4983 | spec->num_dmuxes = 0; | 4994 | spec->num_dmuxes = 1; |
| 4984 | break; | 4995 | break; |
| 4985 | default: | 4996 | default: |
| 4986 | spec->num_dmics = STAC92HD71BXX_NUM_DMICS; | 4997 | spec->num_dmics = STAC92HD71BXX_NUM_DMICS; |
diff --git a/sound/pci/oxygen/virtuoso.c b/sound/pci/oxygen/virtuoso.c index 18c7c91786bc..6c870c12a177 100644 --- a/sound/pci/oxygen/virtuoso.c +++ b/sound/pci/oxygen/virtuoso.c | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | * SPI 0 -> 1st PCM1796 (front) | 26 | * SPI 0 -> 1st PCM1796 (front) |
| 27 | * SPI 1 -> 2nd PCM1796 (surround) | 27 | * SPI 1 -> 2nd PCM1796 (surround) |
| 28 | * SPI 2 -> 3rd PCM1796 (center/LFE) | 28 | * SPI 2 -> 3rd PCM1796 (center/LFE) |
| 29 | * SPI 4 -> 4th PCM1796 (back) and EEPROM self-destruct (do not use!) | 29 | * SPI 4 -> 4th PCM1796 (back) |
| 30 | * | 30 | * |
| 31 | * GPIO 2 -> M0 of CS5381 | 31 | * GPIO 2 -> M0 of CS5381 |
| 32 | * GPIO 3 -> M1 of CS5381 | 32 | * GPIO 3 -> M1 of CS5381 |
| @@ -207,12 +207,6 @@ static void xonar_gpio_changed(struct oxygen *chip); | |||
| 207 | static inline void pcm1796_write_spi(struct oxygen *chip, unsigned int codec, | 207 | static inline void pcm1796_write_spi(struct oxygen *chip, unsigned int codec, |
| 208 | u8 reg, u8 value) | 208 | u8 reg, u8 value) |
| 209 | { | 209 | { |
| 210 | /* | ||
| 211 | * We don't want to do writes on SPI 4 because the EEPROM, which shares | ||
| 212 | * the same pin, might get confused and broken. We'd better take care | ||
| 213 | * that the driver works with the default register values ... | ||
| 214 | */ | ||
| 215 | #if 0 | ||
| 216 | /* maps ALSA channel pair number to SPI output */ | 210 | /* maps ALSA channel pair number to SPI output */ |
| 217 | static const u8 codec_map[4] = { | 211 | static const u8 codec_map[4] = { |
| 218 | 0, 1, 2, 4 | 212 | 0, 1, 2, 4 |
| @@ -223,7 +217,6 @@ static inline void pcm1796_write_spi(struct oxygen *chip, unsigned int codec, | |||
| 223 | (codec_map[codec] << OXYGEN_SPI_CODEC_SHIFT) | | 217 | (codec_map[codec] << OXYGEN_SPI_CODEC_SHIFT) | |
| 224 | OXYGEN_SPI_CEN_LATCH_CLOCK_HI, | 218 | OXYGEN_SPI_CEN_LATCH_CLOCK_HI, |
| 225 | (reg << 8) | value); | 219 | (reg << 8) | value); |
| 226 | #endif | ||
| 227 | } | 220 | } |
| 228 | 221 | ||
| 229 | static inline void pcm1796_write_i2c(struct oxygen *chip, unsigned int codec, | 222 | static inline void pcm1796_write_i2c(struct oxygen *chip, unsigned int codec, |
| @@ -757,9 +750,6 @@ static const DECLARE_TLV_DB_SCALE(cs4362a_db_scale, -12700, 100, 0); | |||
| 757 | 750 | ||
| 758 | static int xonar_d2_control_filter(struct snd_kcontrol_new *template) | 751 | static int xonar_d2_control_filter(struct snd_kcontrol_new *template) |
| 759 | { | 752 | { |
| 760 | if (!strncmp(template->name, "Master Playback ", 16)) | ||
| 761 | /* disable volume/mute because they would require SPI writes */ | ||
| 762 | return 1; | ||
| 763 | if (!strncmp(template->name, "CD Capture ", 11)) | 753 | if (!strncmp(template->name, "CD Capture ", 11)) |
| 764 | /* CD in is actually connected to the video in pin */ | 754 | /* CD in is actually connected to the video in pin */ |
| 765 | template->private_value ^= AC97_CD ^ AC97_VIDEO; | 755 | template->private_value ^= AC97_CD ^ AC97_VIDEO; |
| @@ -850,8 +840,9 @@ static const struct oxygen_model model_xonar_d2 = { | |||
| 850 | .dac_volume_min = 0x0f, | 840 | .dac_volume_min = 0x0f, |
| 851 | .dac_volume_max = 0xff, | 841 | .dac_volume_max = 0xff, |
| 852 | .misc_flags = OXYGEN_MISC_MIDI, | 842 | .misc_flags = OXYGEN_MISC_MIDI, |
| 853 | .function_flags = OXYGEN_FUNCTION_SPI, | 843 | .function_flags = OXYGEN_FUNCTION_SPI | |
| 854 | .dac_i2s_format = OXYGEN_I2S_FORMAT_I2S, | 844 | OXYGEN_FUNCTION_ENABLE_SPI_4_5, |
| 845 | .dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST, | ||
| 855 | .adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST, | 846 | .adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST, |
| 856 | }; | 847 | }; |
| 857 | 848 | ||
diff --git a/sound/pci/pcxhr/pcxhr.h b/sound/pci/pcxhr/pcxhr.h index 84131a916c92..69d87dee6995 100644 --- a/sound/pci/pcxhr/pcxhr.h +++ b/sound/pci/pcxhr/pcxhr.h | |||
| @@ -97,12 +97,12 @@ struct pcxhr_mgr { | |||
| 97 | int capture_chips; | 97 | int capture_chips; |
| 98 | int fw_file_set; | 98 | int fw_file_set; |
| 99 | int firmware_num; | 99 | int firmware_num; |
| 100 | int is_hr_stereo:1; | 100 | unsigned int is_hr_stereo:1; |
| 101 | int board_has_aes1:1; /* if 1 board has AES1 plug and SRC */ | 101 | unsigned int board_has_aes1:1; /* if 1 board has AES1 plug and SRC */ |
| 102 | int board_has_analog:1; /* if 0 the board is digital only */ | 102 | unsigned int board_has_analog:1; /* if 0 the board is digital only */ |
| 103 | int board_has_mic:1; /* if 1 the board has microphone input */ | 103 | unsigned int board_has_mic:1; /* if 1 the board has microphone input */ |
| 104 | int board_aes_in_192k:1;/* if 1 the aes input plugs do support 192kHz */ | 104 | unsigned int board_aes_in_192k:1;/* if 1 the aes input plugs do support 192kHz */ |
| 105 | int mono_capture:1; /* if 1 the board does mono capture */ | 105 | unsigned int mono_capture:1; /* if 1 the board does mono capture */ |
| 106 | 106 | ||
| 107 | struct snd_dma_buffer hostport; | 107 | struct snd_dma_buffer hostport; |
| 108 | 108 | ||
diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c index b47a749c5ea2..aea0cb72d80a 100644 --- a/sound/soc/codecs/tlv320aic3x.c +++ b/sound/soc/codecs/tlv320aic3x.c | |||
| @@ -165,10 +165,13 @@ static int snd_soc_dapm_put_volsw_aic3x(struct snd_kcontrol *kcontrol, | |||
| 165 | struct snd_ctl_elem_value *ucontrol) | 165 | struct snd_ctl_elem_value *ucontrol) |
| 166 | { | 166 | { |
| 167 | struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol); | 167 | struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol); |
| 168 | int reg = kcontrol->private_value & 0xff; | 168 | struct soc_mixer_control *mc = |
| 169 | int shift = (kcontrol->private_value >> 8) & 0x0f; | 169 | (struct soc_mixer_control *)kcontrol->private_value; |
| 170 | int mask = (kcontrol->private_value >> 16) & 0xff; | 170 | unsigned int reg = mc->reg; |
| 171 | int invert = (kcontrol->private_value >> 24) & 0x01; | 171 | unsigned int shift = mc->shift; |
| 172 | int max = mc->max; | ||
| 173 | unsigned int mask = (1 << fls(max)) - 1; | ||
| 174 | unsigned int invert = mc->invert; | ||
| 172 | unsigned short val, val_mask; | 175 | unsigned short val, val_mask; |
| 173 | int ret; | 176 | int ret; |
| 174 | struct snd_soc_dapm_path *path; | 177 | struct snd_soc_dapm_path *path; |
diff --git a/sound/soc/codecs/wm8990.c b/sound/soc/codecs/wm8990.c index 1cbb7b9b51ce..a5731faa150c 100644 --- a/sound/soc/codecs/wm8990.c +++ b/sound/soc/codecs/wm8990.c | |||
| @@ -176,7 +176,9 @@ static int wm899x_outpga_put_volsw_vu(struct snd_kcontrol *kcontrol, | |||
| 176 | struct snd_ctl_elem_value *ucontrol) | 176 | struct snd_ctl_elem_value *ucontrol) |
| 177 | { | 177 | { |
| 178 | struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); | 178 | struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); |
| 179 | int reg = kcontrol->private_value & 0xff; | 179 | struct soc_mixer_control *mc = |
| 180 | (struct soc_mixer_control *)kcontrol->private_value; | ||
| 181 | int reg = mc->reg; | ||
| 180 | int ret; | 182 | int ret; |
| 181 | u16 val; | 183 | u16 val; |
| 182 | 184 | ||
diff --git a/sound/soc/omap/sdp3430.c b/sound/soc/omap/sdp3430.c index ad97836818b1..e226fa75669c 100644 --- a/sound/soc/omap/sdp3430.c +++ b/sound/soc/omap/sdp3430.c | |||
| @@ -91,7 +91,7 @@ static struct snd_soc_dai_link sdp3430_dai = { | |||
| 91 | }; | 91 | }; |
| 92 | 92 | ||
| 93 | /* Audio machine driver */ | 93 | /* Audio machine driver */ |
| 94 | static struct snd_soc_machine snd_soc_machine_sdp3430 = { | 94 | static struct snd_soc_card snd_soc_sdp3430 = { |
| 95 | .name = "SDP3430", | 95 | .name = "SDP3430", |
| 96 | .platform = &omap_soc_platform, | 96 | .platform = &omap_soc_platform, |
| 97 | .dai_link = &sdp3430_dai, | 97 | .dai_link = &sdp3430_dai, |
| @@ -100,7 +100,7 @@ static struct snd_soc_machine snd_soc_machine_sdp3430 = { | |||
| 100 | 100 | ||
| 101 | /* Audio subsystem */ | 101 | /* Audio subsystem */ |
| 102 | static struct snd_soc_device sdp3430_snd_devdata = { | 102 | static struct snd_soc_device sdp3430_snd_devdata = { |
| 103 | .machine = &snd_soc_machine_sdp3430, | 103 | .card = &snd_soc_sdp3430, |
| 104 | .codec_dev = &soc_codec_dev_twl4030, | 104 | .codec_dev = &soc_codec_dev_twl4030, |
| 105 | }; | 105 | }; |
| 106 | 106 | ||
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 55fdb4abb179..ec3f8bb4b51d 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c | |||
| @@ -1385,7 +1385,10 @@ int snd_soc_init_card(struct snd_soc_device *socdev) | |||
| 1385 | 1385 | ||
| 1386 | mutex_lock(&codec->mutex); | 1386 | mutex_lock(&codec->mutex); |
| 1387 | #ifdef CONFIG_SND_SOC_AC97_BUS | 1387 | #ifdef CONFIG_SND_SOC_AC97_BUS |
| 1388 | if (ac97) { | 1388 | /* Only instantiate AC97 if not already done by the adaptor |
| 1389 | * for the generic AC97 subsystem. | ||
| 1390 | */ | ||
| 1391 | if (ac97 && strcmp(codec->name, "AC97") != 0) { | ||
| 1389 | ret = soc_ac97_dev_register(codec); | 1392 | ret = soc_ac97_dev_register(codec); |
| 1390 | if (ret < 0) { | 1393 | if (ret < 0) { |
| 1391 | printk(KERN_ERR "asoc: AC97 device register failed\n"); | 1394 | printk(KERN_ERR "asoc: AC97 device register failed\n"); |
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c index 2ab83129d9b0..19e37451c216 100644 --- a/sound/usb/usbaudio.c +++ b/sound/usb/usbaudio.c | |||
| @@ -2524,7 +2524,6 @@ static int parse_audio_format_rates(struct snd_usb_audio *chip, struct audioform | |||
| 2524 | * build the rate table and bitmap flags | 2524 | * build the rate table and bitmap flags |
| 2525 | */ | 2525 | */ |
| 2526 | int r, idx; | 2526 | int r, idx; |
| 2527 | unsigned int nonzero_rates = 0; | ||
| 2528 | 2527 | ||
| 2529 | fp->rate_table = kmalloc(sizeof(int) * nr_rates, GFP_KERNEL); | 2528 | fp->rate_table = kmalloc(sizeof(int) * nr_rates, GFP_KERNEL); |
| 2530 | if (fp->rate_table == NULL) { | 2529 | if (fp->rate_table == NULL) { |
| @@ -2532,24 +2531,27 @@ static int parse_audio_format_rates(struct snd_usb_audio *chip, struct audioform | |||
| 2532 | return -1; | 2531 | return -1; |
| 2533 | } | 2532 | } |
| 2534 | 2533 | ||
| 2535 | fp->nr_rates = nr_rates; | 2534 | fp->nr_rates = 0; |
| 2536 | fp->rate_min = fp->rate_max = combine_triple(&fmt[8]); | 2535 | fp->rate_min = fp->rate_max = 0; |
| 2537 | for (r = 0, idx = offset + 1; r < nr_rates; r++, idx += 3) { | 2536 | for (r = 0, idx = offset + 1; r < nr_rates; r++, idx += 3) { |
| 2538 | unsigned int rate = combine_triple(&fmt[idx]); | 2537 | unsigned int rate = combine_triple(&fmt[idx]); |
| 2538 | if (!rate) | ||
| 2539 | continue; | ||
| 2539 | /* C-Media CM6501 mislabels its 96 kHz altsetting */ | 2540 | /* C-Media CM6501 mislabels its 96 kHz altsetting */ |
| 2540 | if (rate == 48000 && nr_rates == 1 && | 2541 | if (rate == 48000 && nr_rates == 1 && |
| 2541 | chip->usb_id == USB_ID(0x0d8c, 0x0201) && | 2542 | (chip->usb_id == USB_ID(0x0d8c, 0x0201) || |
| 2543 | chip->usb_id == USB_ID(0x0d8c, 0x0102)) && | ||
| 2542 | fp->altsetting == 5 && fp->maxpacksize == 392) | 2544 | fp->altsetting == 5 && fp->maxpacksize == 392) |
| 2543 | rate = 96000; | 2545 | rate = 96000; |
| 2544 | fp->rate_table[r] = rate; | 2546 | fp->rate_table[fp->nr_rates] = rate; |
| 2545 | nonzero_rates |= rate; | 2547 | if (!fp->rate_min || rate < fp->rate_min) |
| 2546 | if (rate < fp->rate_min) | ||
| 2547 | fp->rate_min = rate; | 2548 | fp->rate_min = rate; |
| 2548 | else if (rate > fp->rate_max) | 2549 | if (!fp->rate_max || rate > fp->rate_max) |
| 2549 | fp->rate_max = rate; | 2550 | fp->rate_max = rate; |
| 2550 | fp->rates |= snd_pcm_rate_to_rate_bit(rate); | 2551 | fp->rates |= snd_pcm_rate_to_rate_bit(rate); |
| 2552 | fp->nr_rates++; | ||
| 2551 | } | 2553 | } |
| 2552 | if (!nonzero_rates) { | 2554 | if (!fp->nr_rates) { |
| 2553 | hwc_debug("All rates were zero. Skipping format!\n"); | 2555 | hwc_debug("All rates were zero. Skipping format!\n"); |
| 2554 | return -1; | 2556 | return -1; |
| 2555 | } | 2557 | } |
diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c index 320641ab5be7..26bad373fe65 100644 --- a/sound/usb/usbmidi.c +++ b/sound/usb/usbmidi.c | |||
| @@ -1625,6 +1625,7 @@ static int snd_usbmidi_create_endpoints_midiman(struct snd_usb_midi* umidi, | |||
| 1625 | } | 1625 | } |
| 1626 | 1626 | ||
| 1627 | ep_info.out_ep = get_endpoint(hostif, 2)->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; | 1627 | ep_info.out_ep = get_endpoint(hostif, 2)->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; |
| 1628 | ep_info.out_interval = 0; | ||
| 1628 | ep_info.out_cables = endpoint->out_cables & 0x5555; | 1629 | ep_info.out_cables = endpoint->out_cables & 0x5555; |
| 1629 | err = snd_usbmidi_out_endpoint_create(umidi, &ep_info, &umidi->endpoints[0]); | 1630 | err = snd_usbmidi_out_endpoint_create(umidi, &ep_info, &umidi->endpoints[0]); |
| 1630 | if (err < 0) | 1631 | if (err < 0) |
diff --git a/virt/kvm/iommu.c b/virt/kvm/iommu.c index e9693a29d00e..4c4037503600 100644 --- a/virt/kvm/iommu.c +++ b/virt/kvm/iommu.c | |||
| @@ -73,14 +73,13 @@ static int kvm_iommu_map_memslots(struct kvm *kvm) | |||
| 73 | { | 73 | { |
| 74 | int i, r = 0; | 74 | int i, r = 0; |
| 75 | 75 | ||
| 76 | down_read(&kvm->slots_lock); | ||
| 77 | for (i = 0; i < kvm->nmemslots; i++) { | 76 | for (i = 0; i < kvm->nmemslots; i++) { |
| 78 | r = kvm_iommu_map_pages(kvm, kvm->memslots[i].base_gfn, | 77 | r = kvm_iommu_map_pages(kvm, kvm->memslots[i].base_gfn, |
| 79 | kvm->memslots[i].npages); | 78 | kvm->memslots[i].npages); |
| 80 | if (r) | 79 | if (r) |
| 81 | break; | 80 | break; |
| 82 | } | 81 | } |
| 83 | up_read(&kvm->slots_lock); | 82 | |
| 84 | return r; | 83 | return r; |
| 85 | } | 84 | } |
| 86 | 85 | ||
| @@ -190,12 +189,11 @@ static void kvm_iommu_put_pages(struct kvm *kvm, | |||
| 190 | static int kvm_iommu_unmap_memslots(struct kvm *kvm) | 189 | static int kvm_iommu_unmap_memslots(struct kvm *kvm) |
| 191 | { | 190 | { |
| 192 | int i; | 191 | int i; |
| 193 | down_read(&kvm->slots_lock); | 192 | |
| 194 | for (i = 0; i < kvm->nmemslots; i++) { | 193 | for (i = 0; i < kvm->nmemslots; i++) { |
| 195 | kvm_iommu_put_pages(kvm, kvm->memslots[i].base_gfn, | 194 | kvm_iommu_put_pages(kvm, kvm->memslots[i].base_gfn, |
| 196 | kvm->memslots[i].npages); | 195 | kvm->memslots[i].npages); |
| 197 | } | 196 | } |
| 198 | up_read(&kvm->slots_lock); | ||
| 199 | 197 | ||
| 200 | return 0; | 198 | return 0; |
| 201 | } | 199 | } |
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 3a5a08298aab..29a667ce35b0 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c | |||
| @@ -173,7 +173,6 @@ static void kvm_assigned_dev_interrupt_work_handler(struct work_struct *work) | |||
| 173 | assigned_dev->host_irq_disabled = false; | 173 | assigned_dev->host_irq_disabled = false; |
| 174 | } | 174 | } |
| 175 | mutex_unlock(&assigned_dev->kvm->lock); | 175 | mutex_unlock(&assigned_dev->kvm->lock); |
| 176 | kvm_put_kvm(assigned_dev->kvm); | ||
| 177 | } | 176 | } |
| 178 | 177 | ||
| 179 | static irqreturn_t kvm_assigned_dev_intr(int irq, void *dev_id) | 178 | static irqreturn_t kvm_assigned_dev_intr(int irq, void *dev_id) |
| @@ -181,8 +180,6 @@ static irqreturn_t kvm_assigned_dev_intr(int irq, void *dev_id) | |||
| 181 | struct kvm_assigned_dev_kernel *assigned_dev = | 180 | struct kvm_assigned_dev_kernel *assigned_dev = |
| 182 | (struct kvm_assigned_dev_kernel *) dev_id; | 181 | (struct kvm_assigned_dev_kernel *) dev_id; |
| 183 | 182 | ||
| 184 | kvm_get_kvm(assigned_dev->kvm); | ||
| 185 | |||
| 186 | schedule_work(&assigned_dev->interrupt_work); | 183 | schedule_work(&assigned_dev->interrupt_work); |
| 187 | 184 | ||
| 188 | disable_irq_nosync(irq); | 185 | disable_irq_nosync(irq); |
| @@ -213,6 +210,7 @@ static void kvm_assigned_dev_ack_irq(struct kvm_irq_ack_notifier *kian) | |||
| 213 | } | 210 | } |
| 214 | } | 211 | } |
| 215 | 212 | ||
| 213 | /* The function implicit hold kvm->lock mutex due to cancel_work_sync() */ | ||
| 216 | static void kvm_free_assigned_irq(struct kvm *kvm, | 214 | static void kvm_free_assigned_irq(struct kvm *kvm, |
| 217 | struct kvm_assigned_dev_kernel *assigned_dev) | 215 | struct kvm_assigned_dev_kernel *assigned_dev) |
| 218 | { | 216 | { |
| @@ -228,11 +226,24 @@ static void kvm_free_assigned_irq(struct kvm *kvm, | |||
| 228 | if (!assigned_dev->irq_requested_type) | 226 | if (!assigned_dev->irq_requested_type) |
| 229 | return; | 227 | return; |
| 230 | 228 | ||
| 231 | if (cancel_work_sync(&assigned_dev->interrupt_work)) | 229 | /* |
| 232 | /* We had pending work. That means we will have to take | 230 | * In kvm_free_device_irq, cancel_work_sync return true if: |
| 233 | * care of kvm_put_kvm. | 231 | * 1. work is scheduled, and then cancelled. |
| 234 | */ | 232 | * 2. work callback is executed. |
| 235 | kvm_put_kvm(kvm); | 233 | * |
| 234 | * The first one ensured that the irq is disabled and no more events | ||
| 235 | * would happen. But for the second one, the irq may be enabled (e.g. | ||
| 236 | * for MSI). So we disable irq here to prevent further events. | ||
| 237 | * | ||
| 238 | * Notice this maybe result in nested disable if the interrupt type is | ||
| 239 | * INTx, but it's OK for we are going to free it. | ||
| 240 | * | ||
| 241 | * If this function is a part of VM destroy, please ensure that till | ||
| 242 | * now, the kvm state is still legal for probably we also have to wait | ||
| 243 | * interrupt_work done. | ||
| 244 | */ | ||
| 245 | disable_irq_nosync(assigned_dev->host_irq); | ||
| 246 | cancel_work_sync(&assigned_dev->interrupt_work); | ||
| 236 | 247 | ||
| 237 | free_irq(assigned_dev->host_irq, (void *)assigned_dev); | 248 | free_irq(assigned_dev->host_irq, (void *)assigned_dev); |
| 238 | 249 | ||
| @@ -285,8 +296,8 @@ static int assigned_device_update_intx(struct kvm *kvm, | |||
| 285 | 296 | ||
| 286 | if (irqchip_in_kernel(kvm)) { | 297 | if (irqchip_in_kernel(kvm)) { |
| 287 | if (!msi2intx && | 298 | if (!msi2intx && |
| 288 | adev->irq_requested_type & KVM_ASSIGNED_DEV_HOST_MSI) { | 299 | (adev->irq_requested_type & KVM_ASSIGNED_DEV_HOST_MSI)) { |
| 289 | free_irq(adev->host_irq, (void *)kvm); | 300 | free_irq(adev->host_irq, (void *)adev); |
| 290 | pci_disable_msi(adev->dev); | 301 | pci_disable_msi(adev->dev); |
| 291 | } | 302 | } |
| 292 | 303 | ||
| @@ -455,6 +466,7 @@ static int kvm_vm_ioctl_assign_device(struct kvm *kvm, | |||
| 455 | struct kvm_assigned_dev_kernel *match; | 466 | struct kvm_assigned_dev_kernel *match; |
| 456 | struct pci_dev *dev; | 467 | struct pci_dev *dev; |
| 457 | 468 | ||
| 469 | down_read(&kvm->slots_lock); | ||
| 458 | mutex_lock(&kvm->lock); | 470 | mutex_lock(&kvm->lock); |
| 459 | 471 | ||
| 460 | match = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head, | 472 | match = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head, |
| @@ -516,6 +528,7 @@ static int kvm_vm_ioctl_assign_device(struct kvm *kvm, | |||
| 516 | 528 | ||
| 517 | out: | 529 | out: |
| 518 | mutex_unlock(&kvm->lock); | 530 | mutex_unlock(&kvm->lock); |
| 531 | up_read(&kvm->slots_lock); | ||
| 519 | return r; | 532 | return r; |
| 520 | out_list_del: | 533 | out_list_del: |
| 521 | list_del(&match->list); | 534 | list_del(&match->list); |
| @@ -527,6 +540,7 @@ out_put: | |||
| 527 | out_free: | 540 | out_free: |
| 528 | kfree(match); | 541 | kfree(match); |
| 529 | mutex_unlock(&kvm->lock); | 542 | mutex_unlock(&kvm->lock); |
| 543 | up_read(&kvm->slots_lock); | ||
| 530 | return r; | 544 | return r; |
| 531 | } | 545 | } |
| 532 | #endif | 546 | #endif |
| @@ -789,11 +803,19 @@ static int kvm_mmu_notifier_clear_flush_young(struct mmu_notifier *mn, | |||
| 789 | return young; | 803 | return young; |
| 790 | } | 804 | } |
| 791 | 805 | ||
| 806 | static void kvm_mmu_notifier_release(struct mmu_notifier *mn, | ||
| 807 | struct mm_struct *mm) | ||
| 808 | { | ||
| 809 | struct kvm *kvm = mmu_notifier_to_kvm(mn); | ||
| 810 | kvm_arch_flush_shadow(kvm); | ||
| 811 | } | ||
| 812 | |||
| 792 | static const struct mmu_notifier_ops kvm_mmu_notifier_ops = { | 813 | static const struct mmu_notifier_ops kvm_mmu_notifier_ops = { |
| 793 | .invalidate_page = kvm_mmu_notifier_invalidate_page, | 814 | .invalidate_page = kvm_mmu_notifier_invalidate_page, |
| 794 | .invalidate_range_start = kvm_mmu_notifier_invalidate_range_start, | 815 | .invalidate_range_start = kvm_mmu_notifier_invalidate_range_start, |
| 795 | .invalidate_range_end = kvm_mmu_notifier_invalidate_range_end, | 816 | .invalidate_range_end = kvm_mmu_notifier_invalidate_range_end, |
| 796 | .clear_flush_young = kvm_mmu_notifier_clear_flush_young, | 817 | .clear_flush_young = kvm_mmu_notifier_clear_flush_young, |
| 818 | .release = kvm_mmu_notifier_release, | ||
| 797 | }; | 819 | }; |
| 798 | #endif /* CONFIG_MMU_NOTIFIER && KVM_ARCH_WANT_MMU_NOTIFIER */ | 820 | #endif /* CONFIG_MMU_NOTIFIER && KVM_ARCH_WANT_MMU_NOTIFIER */ |
| 799 | 821 | ||
| @@ -883,6 +905,7 @@ static void kvm_destroy_vm(struct kvm *kvm) | |||
| 883 | { | 905 | { |
| 884 | struct mm_struct *mm = kvm->mm; | 906 | struct mm_struct *mm = kvm->mm; |
| 885 | 907 | ||
| 908 | kvm_arch_sync_events(kvm); | ||
| 886 | spin_lock(&kvm_lock); | 909 | spin_lock(&kvm_lock); |
| 887 | list_del(&kvm->vm_list); | 910 | list_del(&kvm->vm_list); |
| 888 | spin_unlock(&kvm_lock); | 911 | spin_unlock(&kvm_lock); |
