USB and Driver Core patches for 2.6.10
Subsystems (32)
PATCH 1/1 USB and Driver Core patches for 2.6.10
Hi,
Here are a bunch of USB and Driver core patches for 2.6.10 (I had to merge the trees due to some merge conflicts that came up between them.)
Highlights include:
- delete the tiglusb driver (works just fine from userspace, and the author asked for it to be done.)
- 2 new usb-serial drivers
- AOE drivers added to the tree
- debugfs added.
- usb host controller driver churn (hopefully this is now settled down...)
- some new sysfs attributes for pci devices on platforms that support them
- all usb config fields are now in native (le16) byte order, and all in-tree USB drivers have been fixed up to properly handle this.
- lots of bug fixes and other assorted goodness.
Please pull from:
bk://kernel.bkbits.net/gregkh/linux/usb-2.6
Patches will be posted to linux-usb-devel and linux-kernel as a follow-up thread for those who want to see them.
thanks,
greg k-h
drivers/usb/misc/tiglusb.c | 592 ------ drivers/usb/misc/tiglusb.h | 43 Documentation/Changes | 20 Documentation/DocBook/kernel-api.tmpl | 9 Documentation/aoe/aoe.txt | 75 Documentation/aoe/autoload.sh | 17 Documentation/aoe/mkdevs.sh | 33 Documentation/aoe/mkshelf.sh | 23 Documentation/aoe/status.sh | 15 Documentation/feature-removal-schedule.txt | 26 Documentation/filesystems/sysfs-pci.txt | 90 + Documentation/stable_api_nonsense.txt | 4 Documentation/usb/sn9c102.txt | 202 +- MAINTAINERS | 18 arch/ia64/Kconfig | 26 arch/mips/au1000/common/usbdev.c | 6 arch/ppc64/Kconfig | 6 arch/s390/Kconfig | 6 drivers/Makefile | 2 drivers/base/Kconfig | 2 drivers/base/bus.c | 2 drivers/base/class.c | 18 drivers/base/platform.c | 52 drivers/block/Kconfig | 8 drivers/block/aoe/Makefile | 6 drivers/block/aoe/aoe.h | 166 + drivers/block/aoe/aoeblk.c | 255 ++- drivers/block/aoe/aoechr.c | 323 +++ drivers/block/aoe/aoecmd.c | 627 +++++++ drivers/block/aoe/aoedev.c | 194 ++ drivers/block/aoe/aoemain.c | 93 + drivers/block/aoe/aoenet.c | 185 ++ drivers/bluetooth/bfusb.c | 2 drivers/bluetooth/hci_usb.c | 10 drivers/char/misc.c | 14 drivers/char/watchdog/pcwd_usb.c | 8 drivers/isdn/hisax/hfc_usb.c | 15 drivers/isdn/hisax/st5481_b.c | 2 drivers/isdn/hisax/st5481_d.c | 2 drivers/isdn/hisax/st5481_init.c | 3 drivers/isdn/hisax/st5481_usb.c | 4 drivers/media/dvb/b2c2/b2c2-usb-core.c | 2 drivers/media/dvb/dibusb/dvb-dibusb.c | 12 drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c | 6 drivers/media/dvb/ttusb-dec/ttusb_dec.c | 8 drivers/net/irda/irda-usb.c | 6 drivers/net/irda/stir4200.c | 4 drivers/net/pcmcia/Kconfig | 2 drivers/net/tokenring/Kconfig | 2 drivers/net/wireless/Kconfig | 2 drivers/parport/Kconfig | 2 drivers/pci/hotplug/Kconfig | 2 drivers/pci/hotplug/pciehp_core.c | 1 drivers/pci/hotplug/shpchp_core.c | 1 drivers/pci/pci-sysfs.c | 163 + drivers/pci/probe.c | 83 drivers/pcmcia/Kconfig | 2 drivers/usb/Makefile | 4 drivers/usb/README | 33 drivers/usb/atm/speedtch.c | 31 drivers/usb/atm/usb_atm.c | 34 drivers/usb/atm/usb_atm.h | 19 drivers/usb/class/audio.c | 7 drivers/usb/class/bluetty.c | 6 drivers/usb/class/cdc-acm.c | 21 drivers/usb/class/cdc-acm.h | 3 drivers/usb/class/usb-midi.c | 30 drivers/usb/class/usb-midi.h | 4 drivers/usb/class/usblp.c | 19 drivers/usb/core/config.c | 4 drivers/usb/core/devices.c | 14 drivers/usb/core/devio.c | 65 drivers/usb/core/hcd-pci.c | 23 drivers/usb/core/hcd.c | 234 +- drivers/usb/core/hcd.h | 47 drivers/usb/core/hub.c | 706 ++++---- drivers/usb/core/hub.h | 2 drivers/usb/core/inode.c | 4 drivers/usb/core/message.c | 54 drivers/usb/core/otg_whitelist.h | 16 drivers/usb/core/sysfs.c | 26 drivers/usb/core/urb.c | 2 drivers/usb/core/usb.c | 84 drivers/usb/core/usb.h | 2 drivers/usb/gadget/Kconfig | 35 drivers/usb/gadget/dummy_hcd.c | 134 - drivers/usb/gadget/epautoconf.c | 3 drivers/usb/gadget/file_storage.c | 2 drivers/usb/gadget/omap_udc.c | 2 drivers/usb/gadget/serial.c | 2 drivers/usb/host/ehci-dbg.c | 30 drivers/usb/host/ehci-hcd.c | 130 - drivers/usb/host/ehci-hub.c | 26 drivers/usb/host/ehci-mem.c | 31 drivers/usb/host/ehci-q.c | 68 drivers/usb/host/ehci-sched.c | 424 ++-- drivers/usb/host/ehci.h | 50 drivers/usb/host/hc_crisv10.c | 34 drivers/usb/host/ohci-dbg.c | 22 drivers/usb/host/ohci-hcd.c | 73 drivers/usb/host/ohci-hub.c | 29 drivers/usb/host/ohci-lh7a404.c | 45 drivers/usb/host/ohci-mem.c | 25 drivers/usb/host/ohci-omap.c | 61 drivers/usb/host/ohci-pci.c | 8 drivers/usb/host/ohci-pxa27x.c | 43 drivers/usb/host/ohci-q.c | 82 drivers/usb/host/ohci-sa1111.c | 30 drivers/usb/host/ohci.h | 25 drivers/usb/host/sl811-hcd.c | 347 +--- drivers/usb/host/sl811.h | 18 drivers/usb/host/uhci-debug.c | 36 drivers/usb/host/uhci-hcd.c | 182 -- drivers/usb/host/uhci-hcd.h | 28 drivers/usb/image/mdc800.c | 45 drivers/usb/image/microtek.c | 4 drivers/usb/input/aiptek.c | 6 drivers/usb/input/ati_remote.c | 19 drivers/usb/input/hid-core.c | 16 drivers/usb/input/hid-ff.c | 4 drivers/usb/input/hid-input.c | 469 ++--- drivers/usb/input/hid-lgff.c | 4 drivers/usb/input/hiddev.c | 6 drivers/usb/input/kbtab.c | 6 drivers/usb/input/mtouchusb.c | 6 drivers/usb/input/powermate.c | 13 drivers/usb/input/touchkitusb.c | 6 drivers/usb/input/usbkbd.c | 6 drivers/usb/input/usbmouse.c | 6 drivers/usb/input/wacom.c | 6 drivers/usb/input/xpad.c | 10 drivers/usb/media/Makefile | 2 drivers/usb/media/dabusb.c | 9 drivers/usb/media/ibmcam.c | 25 drivers/usb/media/konicawc.c | 18 drivers/usb/media/ov511.c | 20 drivers/usb/media/se401.c | 22 drivers/usb/media/sn9c102.h | 13 drivers/usb/media/sn9c102_core.c | 119 - drivers/usb/media/sn9c102_hv7131d.c | 271 +++ drivers/usb/media/sn9c102_mi0343.c | 363 ++++ drivers/usb/media/sn9c102_pas106b.c | 45 drivers/usb/media/sn9c102_pas202bcb.c | 49 drivers/usb/media/sn9c102_sensor.h | 62 drivers/usb/media/sn9c102_tas5110c1b.c | 28 drivers/usb/media/sn9c102_tas5130d1b.c | 26 drivers/usb/media/stv680.c | 3 drivers/usb/media/ultracam.c | 16 drivers/usb/media/vicam.c | 6 drivers/usb/media/w9968cf.c | 8 drivers/usb/misc/Kconfig | 20 drivers/usb/misc/Makefile | 1 drivers/usb/misc/auerswald.c | 21 drivers/usb/misc/emi26.c | 8 drivers/usb/misc/emi62.c | 6 drivers/usb/misc/legousbtower.c | 11 drivers/usb/misc/usblcd.c | 15 drivers/usb/misc/usbtest.c | 25 drivers/usb/misc/uss720.c | 3 drivers/usb/net/catc.c | 5 drivers/usb/net/kaweth.c | 9 drivers/usb/serial/Kconfig | 23 drivers/usb/serial/Makefile | 2 drivers/usb/serial/belkin_sa.c | 4 drivers/usb/serial/ftdi_sio.c | 135 + drivers/usb/serial/ftdi_sio.h | 51 drivers/usb/serial/garmin_gps.c | 1553 ++++++++++++++++++ drivers/usb/serial/io_edgeport.c | 4 drivers/usb/serial/io_ti.c | 4 drivers/usb/serial/keyspan.c | 24 drivers/usb/serial/keyspan_pda.c | 6 drivers/usb/serial/kobil_sct.c | 2 drivers/usb/serial/mct_u232.c | 157 - drivers/usb/serial/ti_fw_3410.h | 885 ++++++++++ drivers/usb/serial/ti_fw_5052.h | 885 ++++++++++ drivers/usb/serial/ti_usb_3410_5052.c | 1866 +++++++++++++++++++++- drivers/usb/serial/ti_usb_3410_5052.h | 224 ++ drivers/usb/serial/usb-serial.c | 29 drivers/usb/serial/usb-serial.h | 4 drivers/usb/serial/visor.c | 8 drivers/usb/serial/visor.h | 6 drivers/usb/storage/scsiglue.c | 2 drivers/usb/storage/transport.c | 16 drivers/usb/storage/unusual_devs.h | 122 - drivers/usb/storage/usb.c | 20 drivers/usb/storage/usb.h | 1 drivers/usb/usb-skeleton.c | 2 drivers/w1/dscore.c | 2 fs/Makefile | 2 fs/debugfs/Makefile | 4 fs/debugfs/file.c | 262 +++ fs/debugfs/inode.c | 330 +++ fs/sysfs/bin.c | 27 fs/sysfs/dir.c | 2 fs/sysfs/mount.c | 34 fs/sysfs/sysfs.h | 3 include/linux/debugfs.h | 92 + include/linux/device.h | 7 include/linux/if_ether.h | 3 include/linux/kobject.h | 2 include/linux/miscdevice.h | 7 include/linux/module.h | 19 include/linux/pci.h | 3 include/linux/sysfs.h | 6 include/linux/usb.h | 96 - include/linux/usb_ch9.h | 27 init/Kconfig | 34 kernel/ksysfs.c | 3 kernel/module.c | 224 +- kernel/params.c | 384 +--- lib/Kconfig.debug | 10 scripts/ver_linux | 2 sound/usb/usbaudio.c | 124 - sound/usb/usbmidi.c | 16 sound/usb/usbmixer.c | 12 sound/usb/usx2y/usX2Yhwdep.c | 8 sound/usb/usx2y/usbusx2y.c | 22 sound/usb/usx2y/usbusx2yaudio.c | 24 218 files changed, 12619 insertions(+), 4089 deletions(-)
-----
<eolson:mit.edu>:
o ftdi_sio: Add sysfs attributes for event character and latency
o usb-serial: add tty_hangup on disconnect
<jlamanna:gmail.com>:
o USB: ov511.c - vfree() checking cleanups
Adrian Bunk:
o select HOTPLUG
Al Borchers:
o USB: serial driver for TI USB 3410/5052 chips (2/3)
o USB: serial driver for TI USB 3410/5052 chips (1/3)
o USB: serial driver for TI USB 3410/5052 chips (3/3)
Alan Stern:
o USB: Another hub driver cleanup [13/13]
o USB: Hub driver cleanups [12/13]
o USB: Hub driver: several bug fixes and simplifications [11/13]
o USB: Create usb_hcd structures within usbcore [6/13]
o USB: Create usb_hcd structures within usbcore [5/13]
o USB: Create usb_hcd structures within usbcore [4/13]
o USB: Create usb_hcd structures within usbcore [3/13]
o USB: Create usb_hcd structures within usbcore [2/13]
o USB: Create usb_hcd structures within usbcore [1/13]
o USB: dummy_hcd: update to match the new endpoint changes
Andrew Morton:
o debugfs-typo-fix
Chris Wright:
o sysfs: Allocate sysfs_dirent structures from their own slab
Dave Jones:
o driver core: Fix up vesafb failure probing
David Brownell:
o USB: ehci "hc died" on startup (chip bug workaround)
o USB: ohci diagnostic tweak
o USB: usb makefile tweaks
o USB: definitions for USB2 debug device, debug port
o USB: minor usb doc/comment fixes
o Driver Core: handle bridged platform bus segments
o USB: fix serial gadget oops during enumeration
o USB: fix Scheduling while atomic warning when resuming
o USB: ohci build tweaks
o USB: Hub driver: improve error checking and retries [10/13]
o USB: gadget kconfig doc updates
o USB: EHCI periodic schedule tree
o USB: EHCI "park" mode disabled
o USB: HCDs and per-device state (16/15)
o USB: better messages for "no-IRQ" cases (15/15)
o USB: UHCI and HCD API change (14/15)
o USB: OHCI and HCD API changes (13/15)
o USB: EHCI and HCD API updates (12/15)
o USB: maintain usb_host_endpoint.urb_list (11/15)
o USB: remove some now-unused HCD infrastructure (10/15)
o USB: HCD/usb_bus interface cleanup (9/15)
o USB: usbtest and usb_dev->epmaxpacket (8/15)
o USB: EHCI HCD and usb_dev->epmaxpacket (7/15)
o USB: CRIS HCD and usb_dev->epmaxpacket (6/15)
o USB: auerswald and usb_dev->ep[] (5/15)
o USB: ALSA and usb_dev->ep[] (4/15)
o USB: usbfs changes for usb_dev->ep[] (3/15)
o USB: usbcore changes for usb_dev->ep[](2/15)
o USB: usb_dev->ep[] not usb_dev->epmaxpacket (1/15)
o USB: update drivers/usb/README
Duncan Sands:
o usb atm: macro consolidation, fixes debugging problem
Ed L. Cashin:
o rename ETH_P_AOE
o add ATA over Ethernet driver
Greg Kroah-Hartman:
o add feature-removal-schedule.txt documentation
o Fix up udev url in Documentation/Changes file
o debugfs: add /sys/kernel/debug mount point for people to mount debugfs on
o sysfs: export the /sys/kernel subsystem for people to use
o USB: explicitly mark the endianness of some visor data fields
o USB Gadget: fix up simple sparse warnings (NULL stuff) in dummy_hcd.c driver
o USB: change wMaxPacketSize field in struct usb_config_descriptor to be __le16
o USB: change wTotalLength field in struct usb_config_descriptor to be __le16
o USB: convert the idVendor, idProduct, bcdDevice and bcdUSB fields to __le16
o USB: change warning level in ftdi_sio driver of a debug message
o USB: fix up some sparse warnings in the new garmin_gps driver
o AOE: fix up sparse warnings and get rid of a kmalloc in the aoe driver
o USB: convert uhci-hcd driver to use debugfs
o debugfs: add debugfs
o USB: delete the tiglusb driver as it's not needed
o USB: fix sparse and compiler warnings in ti_usb_3410_5052.c
o misc: remove miscdevice.h from pci hotplug drivers as they do not need it
o Documentation: fix some grammer in the stable_api_nonsense.txt file
o misc: remove device.h #include from miscdevice.h
Hermann Kneissel:
o Re: garmin gps driver patch 0.23
Jesper Juhl:
o add printing of udev version to scripts/ver_linux
Jesse Barnes:
o fix oops when reading resourceN files in sysfs
o PCI: add legacy resources to sysfs for pci busses
o driver core: allow struct bin_attributes in class devices
o PCI: export PCI resources in sysfs
o sysfs: add mmap support to struct bin_attribute files
Kumar Gala:
o Driver Core: Add platform_get_resource_byname & platform_get_resource_byirq
Luca Risolia:
o USB: SN9C10x driver updates
Matthew Dharm:
o USB Storage: Increase Genesys delay
o USB Storage: support 'bulk32' devices
Oliver Neukum:
o USB: another workaround for cdc-acm
o USB: additional device id for kaweth driver
Pete Zaitcev:
o Clean mct_u232 in 2.6.10-rc2
Phil Dibowitz:
o USB Storage: unusual_devs: prolific atapi controler
o USB Storage: unusual_devs: prolific atapi controler
o USB Storage: Remove old XLATE-only entries from unusual_devs.h
o USB Storage: Remove MODE_XLATE flag from unusual_devs.h
Randy Dunlap:
o add cpufreq info to Documentation/feature-removal-schedule.txt
Robert Love:
o add class_device to miscdevice
Tejun Heo:
o module sysfs: module parameters reimplemented using attr group
o module sysfs: sections attr reimplemented using attr group
o module sysfs: expand module_attribute methods
o module sysfs: make module.mkobj inline
PATCH 1/1 USB and Driver Core patches for 2.6.10
ChangeSet 1.1938.439.43, 2004/12/22 15:48:48-08:00, [email protected]
Merge kroah.com:/home/greg/linux/BK/bleed-2.6
into kroah.com:/home/greg/linux/BK/usb-2.6
MAINTAINERS | 6 ++++++ drivers/usb/core/devio.c | 13 ++++++------- drivers/usb/host/ehci-hub.c | 12 ++++++------ drivers/usb/host/ohci-hub.c | 2 +- 4 files changed, 19 insertions(+), 14 deletions(-)
MAINTAINERS +6 -0
@@ -328,6 +328,12 @@ W: http://julien.lerouge.free.fr S: Maintained +ATA OVER ETHERNET DRIVER +P: Ed L. Cashin +M: [email protected] +W: http://www.coraid.com/support/linux +S: Supported + ATM P: Chas Williams M: [email protected]
drivers/usb/core/devio.c +6 -7
@@ -523,13 +523,12 @@usb_lock_device (dev);list_del_init (&ps->list); - -if (connected (dev)) { -for (ifnum =0 ; ps->ifclaimed && ifnum <8 *sizeof (ps->ifclaimed); ifnum++) -if (test_bit (ifnum, &ps->ifclaimed)) -releaseintf (ps, ifnum); -destroy_all_async (ps); +for (ifnum =0 ; ps->ifclaimed && ifnum <8 *sizeof (ps->ifclaimed); + ifnum++) { +if (test_bit (ifnum, &ps->ifclaimed)) +releaseintf (ps, ifnum); } +destroy_all_async (ps);usb_unlock_device (dev);usb_put_dev (dev); ps->dev =NULL ;
@@ -1034,7 +1033,7 @@int ret;add_wait_queue (&ps->wait, &wait); -while (connected (dev)) { +for (;;) {__set_current_state (TASK_INTERRUPTIBLE );if ((as =async_getcompleted (ps)))break ;
drivers/usb/host/ehci-hub.c +6 -6
@@ -44,7 +44,7 @@/* stop schedules, clean any completed work */ if (HCD_IS_RUNNING (hcd->state)) {ehci_quiesce (ehci); - ehci->hcd.state =USB_STATE_QUIESCING ; + hcd->state =USB_STATE_QUIESCING ; } ehci->command =readl (&ehci->regs->command);if (ehci->reclaim)
@@ -59,7 +59,7 @@if ((t1 &PORT_PE ) && !(t1 &PORT_OWNER )) t2 |=PORT_SUSPEND ; -if (ehci->hcd.remote_wakeup) +if (hcd->remote_wakeup) t2 |=PORT_WKOC_E |PORT_WKDISC_E |PORT_WKCONN_E ;else t2 &= ~(PORT_WKOC_E |PORT_WKDISC_E |PORT_WKCONN_E );
@@ -73,7 +73,7 @@/* turn off now-idle HC */ ehci_halt (ehci); - ehci->hcd.state =HCD_STATE_SUSPENDED ; + hcd->state =HCD_STATE_SUSPENDED ; ehci->next_statechange = jiffies +msecs_to_jiffies (10 );spin_unlock_irq (&ehci->lock);
@@ -145,7 +145,7 @@ } ehci->next_statechange = jiffies +msecs_to_jiffies (5 ); - ehci->hcd.state =USB_STATE_RUNNING ; + hcd->state =USB_STATE_RUNNING ;/* Now we can safely re-enable irqs */ if (intr_enable)
@@ -212,7 +212,7 @@unsigned long flags;/* if !USB_SUSPEND, root hub timers won't get shut down ... */ -if (!HCD_IS_RUNNING (ehci->hcd.state)) +if (!HCD_IS_RUNNING (hcd->state))return 0 ;/* init status to no-changes */
@@ -499,7 +499,7 @@if ((temp &PORT_PE ) ==0 || (temp &PORT_RESET ) !=0 ) goto error; -if (ehci->hcd.remote_wakeup) +if (hcd->remote_wakeup) temp |=PORT_WAKE_BITS ;writel (temp |PORT_SUSPEND , &ehci->regs->port_status [wIndex]);
drivers/usb/host/ohci-hub.c +1 -1
@@ -304,7 +304,7 @@ {struct ohci_hcd *ohci =hcd_to_ohci (hcd);int ports, i, changed =0 , length =1 ; -int can_suspend =1 ; +int can_suspend = hcd->can_wakeup;unsigned long flags;spin_lock_irqsave (&ohci->lock, flags);
ChangeSet 1.1938.439.44, 2004/12/22 23:31:52-08:00, [email protected]
Merge kroah.com:/home/greg/linux/BK/bleed-2.6
into kroah.com:/home/greg/linux/BK/usb-2.6
drivers/usb/atm/usb_atm.c | 17 ----------------- drivers/usb/serial/keyspan.c | 12 ++++++------ 2 files changed, 6 insertions(+), 23 deletions(-)
drivers/usb/atm/usb_atm.c +0 -17
@@ -83,23 +83,6 @@#include "usb_atm.h" -/* -#define DEBUG -#define VERBOSE_DEBUG -*/ - -#if !defined (DEBUG ) && defined (CONFIG_USB_DEBUG ) -# define DEBUG -#endif - -#include <linux/usb.h> - -#ifdef DEBUG -#define UDSL_ASSERT (x) BUG_ON(!(x)) -#else -#define UDSL_ASSERT (x) do { if (!(x)) warn("failed assertion '" #x "' at line %d", __LINE__); } while(0) -#endif -#ifdef VERBOSE_DEBUG static int udsl_print_packet (const unsigned char *data,int len); #define PACKETDEBUG(arg...) udsl_print_packet (arg)
drivers/usb/serial/keyspan.c +6 -6
@@ -1174,16 +1174,16 @@char *fw_name;dbg ("Keyspan startup version %04x product %04x" , - serial->dev->descriptor.bcdDevice, - serial->dev->descriptor.idProduct); +le16_to_cpu (serial->dev->descriptor.bcdDevice), +le16_to_cpu (serial->dev->descriptor.idProduct)); -if ((serial->dev->descriptor.bcdDevice &0x8000 ) !=0x8000 ) { +if ((le16_to_cpu (serial->dev->descriptor.bcdDevice) &0x8000 ) !=0x8000 ) {dbg ("Firmware already loaded. Quitting." );return (1 ); }/* Select firmware image on the basis of idProduct */ -switch (serial->dev->descriptor.idProduct) { +switch (le16_to_cpu (serial->dev->descriptor.idProduct)) {case keyspan_usa28_pre_product_id: record = &keyspan_usa28_firmware[0 ]; fw_name ="USA28" ;
@@ -2248,10 +2248,10 @@dbg ("%s" , __FUNCTION__);for (i =0 ; (d_details = keyspan_devices[i]) !=NULL ; ++i) -if (d_details->product_id == serial->dev->descriptor.idProduct) +if (d_details->product_id ==le16_to_cpu (serial->dev->descriptor.idProduct))break ;if (d_details ==NULL ) { -dev_err (&serial->dev->dev,"%s - unknown product id %x\n" , __FUNCTION__, serial->dev->descriptor.idProduct); +dev_err (&serial->dev->dev,"%s - unknown product id %x\n" , __FUNCTION__,le16_to_cpu (serial->dev->descriptor.idProduct));return 1 ; }
ChangeSet 1.1938.439.45, 2005/01/06 16:38:08-08:00, [email protected]
[PATCH] debugfs-typo-fix
include/linux/debugfs.h | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-)
include/linux/debugfs.h +1 -1
@@ -82,7 +82,7 @@struct dentry *parent, u8 *value) { - return EFF_PTR(-ENODEV); + return ERR_PTR(-ENODEV); }#endif
ChangeSet 1.1938.439.46, 2005/01/06 16:39:01-08:00, [email protected]
[PATCH] add printing of udev version to scripts/ver_linux
Since udev is starting to be used a lot of places and I've seen people get asked about their udev version a few times on lkml I figured it was perhaps time that scripts/ver_linux reported this info so it would get into more bugreports by default.
This patch adds printing of udev version to scripts/ver_linux
Documentation/Changes | 10 +++++++++- scripts/ver_linux | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-)
Documentation/Changes +9 -1
@@ -223,6 +223,11 @@ version v0.99.0 or higher. Running old versions may cause problems with programs using shared memory. +Udev +---- +Udev is a userspace application for populating /dev dynamically with +only entries for devices actually present. Udev replaces devfs. + Networking ==========
@@ -368,6 +373,10 @@ ---------- o <http://powertweak.sourceforge.net/> +Udev +---- +o <http://www.kernel.org/pub/linux/utils/kernel/hotplug/> + Networking **********
@@ -398,5 +407,4 @@ NFS-Utils --------- o <http://nfs.sourceforge.net/> -
scripts/ver_linux +2 -0
@@ -87,6 +87,8 @@ expr --v 2>&1 | awk 'NR==1{print "Sh-utils ", $NF}' +udevinfo -V | awk '{print "udev ", $3}' + if [ -e /proc/modules ]; then X=`cat /proc/modules | sed -e "s/ .*$//"` echo "Modules Loaded "$X
ChangeSet 1.1938.439.47, 2005/01/06 16:39:32-08:00, [email protected]
[PATCH] fix oops when reading resourceN files in sysfs
Quoted 7 lines · Jesse Barnes
[Sorry about the bogus reply, I don't have the original message.]
That shouldn't happen. Maybe you were running an old version of the tree or an old version of my sysfs mmap patch? When I do a 'bk pull' of gregkh's latest usb tree into a recent Linus tree, I get an
-EINVAL, not an oops. An earlier version of my patch had this bug though, so maybe that's what you're seeing?
Ugg. How about this?
Zero out newly allocated bin_attributes for legacy I/O, memory and resource files since we won't fill in all of the file operation methods. This will allow the checks in bin.c for the existence of a method to work properly instead of checking garbage memory.
drivers/pci/pci-sysfs.c | 1 + drivers/pci/probe.c | 1 + 2 files changed, 2 insertions(+)
drivers/pci/pci-sysfs.c +1 -0
@@ -295,6 +295,7 @@ res_attr =kmalloc (sizeof (*res_attr) +10 ,GFP_ATOMIC );if (res_attr) { +memset (res_attr,0 ,sizeof (*res_attr) +10 ); pdev->res_attr[i] = res_attr;/* Allocated above after the res_attr struct */ res_attr->attr.name = (char *)(res_attr +1 );
drivers/pci/probe.c +1 -0
@@ -41,6 +41,7 @@ b->legacy_io =kmalloc (sizeof (struct bin_attribute ) *2 ,GFP_ATOMIC );if (b->legacy_io) { +memset (b->legacy_io,0 ,sizeof (struct bin_attribute ) *2 ); b->legacy_io->attr.name ="legacy_io" ; b->legacy_io->size =0xffff ; b->legacy_io->attr.mode =S_IRUSR |S_IWUSR ;
ChangeSet 1.1938.439.48, 2005/01/06 17:27:58-08:00, [email protected]
[PATCH] USB: fix serial gadget oops during enumeration
This prevents the serial gadget driver from oopsing during enumeration when spinlocks are configured, and slab poisoning is active...
drivers/usb/gadget/serial.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-)
drivers/usb/gadget/serial.c +1 -1
@@ -2322,11 +2322,11 @@wake_up_interruptible (&port->port_tty->read_wait);wake_up_interruptible (&port->port_tty->write_wait); } +spin_unlock_irqrestore (&port->port_lock, flags); }else {kfree (port); } -spin_unlock_irqrestore (&port->port_lock, flags); } } }
ChangeSet 1.1938.439.49, 2005/01/06 17:28:25-08:00, [email protected]
[PATCH] Driver Core: handle bridged platform bus segments
During setup to access platform bus segments through bridges, the current platform_device_register() ignores the resource parent specified by the bridge. That means it'll always detect a (false) resource conflict with the bridge, and fail the resource reservation step.
This patch makes that code use the specified parent resource, defaulting to "iomem_resource" or "ioport_resource" only for a NULL parent (that is, for devices that aren't accessed through a bridge).
drivers/base/platform.c | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-)
drivers/base/platform.c +7 -5
@@ -141,11 +141,13 @@if (r->name ==NULL ) r->name = pdev->dev.bus_id; - p =NULL ; -if (r->flags &IORESOURCE_MEM ) - p = &iomem_resource; -else if (r->flags &IORESOURCE_IO ) - p = &ioport_resource; + p = r->parent; +if (!p) { +if (r->flags &IORESOURCE_MEM ) + p = &iomem_resource; +else if (r->flags &IORESOURCE_IO ) + p = &ioport_resource; + }if (p &&request_resource (p, r)) { printk(KERN_ERR
ChangeSet 1.1938.439.50, 2005/01/06 17:28:51-08:00, [email protected]
[PATCH] USB: ov511.c - vfree() checking cleanups
ov511.c vfree() checking cleanups.
Signed-off by: James Lamanna <[email protected]>
drivers/usb/media/ov511.c | 12 ++++-------- 1 files changed, 4 insertions(+), 8 deletions(-)
drivers/usb/media/ov511.c +4 -8
@@ -3908,15 +3908,11 @@ ov->fbuf =NULL ; } -if (ov->rawfbuf) { -vfree (ov->rawfbuf); - ov->rawfbuf =NULL ; - } +vfree (ov->rawfbuf); + ov->rawfbuf =NULL ; -if (ov->tempfbuf) { -vfree (ov->tempfbuf); - ov->tempfbuf =NULL ; - } +vfree (ov->tempfbuf); + ov->tempfbuf =NULL ;for (i =0 ; i <OV511_NUMSBUF ; i++) {if (ov->sbuf[i].data) {
ChangeSet 1.1938.439.51, 2005/01/06 17:29:21-08:00, [email protected]
[PATCH] USB: another workaround for cdc-acm
there are a lot of buggy modems.
drivers/usb/class/cdc-acm.c | 15 +++++++++++++++ drivers/usb/class/cdc-acm.h | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-)
drivers/usb/class/cdc-acm.c +15 -0
@@ -532,7 +532,17 @@u8 call_management_function =0 ;int call_interface_num =-1 ;int data_interface_num; +unsigned long quirks; +/* handle quirks deadly to normal probing*/ + quirks = (unsigned long )id->driver_info; +if (quirks ==NO_UNION_NORMAL ) { + data_interface =usb_ifnum_to_if (usb_dev,1 ); + control_interface =usb_ifnum_to_if (usb_dev,0 ); + goto skip_normal_probe; + } + +/* normal probing*/ if (!buffer) {err ("Wierd descriptor references" );return -EINVAL ;
@@ -607,6 +617,7 @@if (data_interface_num != call_interface_num)dev_dbg (&intf->dev,"Seperate call control interface. That is not fully supported." ); +skip_normal_probe:if (usb_interface_claimed (data_interface)) {/* valid in this context */ dev_dbg (&intf->dev,"The data interface isn't available\n" );return -EBUSY ;
@@ -805,6 +816,10 @@*/ static struct usb_device_id acm_ids[] = { +/* quirky and broken devices */ + {USB_DEVICE (0x0870 ,0x0001 ),/* Metricom GS Modem */ + .driver_info =NO_UNION_NORMAL ,/* has no union descriptor */ + },/* control interfaces with various AT-command sets */ {USB_INTERFACE_INFO (USB_CLASS_COMM ,2 ,1 ) }, {USB_INTERFACE_INFO (USB_CLASS_COMM ,2 ,2 ) },
drivers/usb/class/cdc-acm.h +2 -1
@@ -125,4 +125,5 @@#define CDC_DATA_INTERFACE_TYPE 0x0a - +/* constants describing various quirks and errors */ +#define NO_UNION_NORMAL 1
ChangeSet 1.1938.439.52, 2005/01/07 08:45:22-08:00, [email protected]
[PATCH] USB: minor usb doc/comment fixes
Some minor doc/comment fixes for USB.
drivers/usb/gadget/epautoconf.c | 3 +++ drivers/usb/gadget/omap_udc.c | 2 +- include/linux/usb.h | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-)
drivers/usb/gadget/epautoconf.c +3 -0
@@ -55,6 +55,9 @@* * Type suffixes are "-bulk", "-iso", or "-int". Numbers are decimal. * Less common restrictions are implied by gadget_is_*(). +* +* NOTE: each endpoint is unidirectional, as specified by its USB +* descriptor; and isn't specific to a configuration or altsetting. */ static int __init ep_matches (
drivers/usb/gadget/omap_udc.c +1 -1
@@ -1,5 +1,5 @@/* -* omap_udc.c -- for OMAP 1610 udc, with OTG support +* omap_udc.c -- for OMAP full speed udc; most chips support OTG. * * Copyright (C) 2004 Texas Instruments, Inc. * Copyright (C) 2004 David Brownell
include/linux/usb.h +2 -2
@@ -739,8 +739,8 @@* to poll for transfers. After the URB has been submitted, the interval * field reflects how the transfer was actually scheduled. * The polling interval may be more frequent than requested. -* For example, some controllers have a maximum interval of 32 microseconds, -* while others support intervals of up to 1024 microseconds. +* For example, some controllers have a maximum interval of 32 milliseconds, +* while others support intervals of up to 1024 milliseconds. * Isochronous URBs also have transfer intervals. (Note that for isochronous * endpoints, as well as high speed interrupt endpoints, the encoding of * the transfer interval in the endpoint descriptor is logarithmic.
ChangeSet 1.1938.439.53, 2005/01/07 08:45:52-08:00, [email protected]
[PATCH] USB: definitions for USB2 debug device, debug port
This provides basic definitions to support "USB2 Debug Devices", as supported by certain EHCI root hub ports (from ALI, Intel, NVidia, and other vendors). Docs are available at Intel's USB spec webpage.
The basic idea is to help debug "legacy free" systems, with no serial port for a console or debugger to use. The USB debug port uses PIO to send and receive at most 8 bytes of high speed data at a time, so it can support one I/O channel without needing _any_ of the usbcore infrastructure, or DMA, or IRQs. (Cost can be 2KB rather than ~150KB.)
drivers/usb/host/ehci.h | 24 ++++++++++++++++++++++++ include/linux/usb_ch9.h | 13 +++++++++++++ 2 files changed, 37 insertions(+)
drivers/usb/host/ehci.h +24 -0
@@ -264,6 +264,30 @@#define PORT_CONNECT (1<<0)/* device connected */ } __attribute__ ((packed)); +/* Appendix C, Debug port ... intended for use with special "debug devices" +* that can help if there's no serial console. (nonstandard enumeration.) +*/ +struct ehci_dbg_port { +u32 control; +#define DBGP_OWNER (1<<30) +#define DBGP_ENABLED (1<<28) +#define DBGP_DONE (1<<16) +#define DBGP_INUSE (1<<10) +#define DBGP_ERRCODE (x) (((x)>>7)&0x0f) +# define DBGP_ERR_BAD 1 +# define DBGP_ERR_SIGNAL 2 +#define DBGP_ERROR (1<<6) +#define DBGP_GO (1<<5) +#define DBGP_OUT (1<<4) +#define DBGP_LEN (x) (((x)>>0)&0x0f) +u32 pids; +#define DBGP_PID_GET (x) (((x)>>16)&0xff) +#define DBGP_PID_SET (data,tok) (((data)<<8)|(tok)); +u32 data03; +u32 data47; +u32 address; +#define DBGP_EPADDR (dev,ep) (((dev)<<8)|(ep)); +} __attribute__ ((packed));/*-------------------------------------------------------------------------*/
include/linux/usb_ch9.h +13 -0
@@ -79,6 +79,7 @@#define USB_DEVICE_B_HNP_ENABLE 3/* dev may initiate HNP */ #define USB_DEVICE_A_HNP_SUPPORT 4/* RH port supports HNP */ #define USB_DEVICE_A_ALT_HNP_SUPPORT 5/* other RH port does */ +#define USB_DEVICE_DEBUG_MODE 6/* (special devices only) */ #define USB_ENDPOINT_HALT 0/* IN/OUT will STALL */
@@ -320,6 +321,18 @@/* from usb_otg_descriptor.bmAttributes */ #define USB_OTG_SRP (1 << 0)#define USB_OTG_HNP (1 << 1)/* swap host/device roles */ + +/*-------------------------------------------------------------------------*/ + +/* USB_DT_DEBUG: for special highspeed devices, replacing serial console */ +struct usb_debug_descriptor { +__u8 bLength; +__u8 bDescriptorType; + +/* bulk endpoints with 8 byte maxpacket */ +__u8 bDebugInEndpoint; +__u8 bDebugOutEndpoint; +};/*-------------------------------------------------------------------------*/
ChangeSet 1.1938.439.54, 2005/01/07 08:46:29-08:00, [email protected]
[PATCH] USB: usb makefile tweaks
Two minor Makefile fixes, catching up to some driver removals.
drivers/usb/Makefile | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-)
drivers/usb/Makefile +1 -2
@@ -9,7 +9,7 @@ obj-$(CONFIG_USB_EHCI_HCD) += host/ obj-$(CONFIG_USB_OHCI_HCD) += host/ obj-$(CONFIG_USB_UHCI_HCD) += host/ -obj-$(CONFIG_USB_SL811HS) += host/ +obj-$(CONFIG_USB_SL811_HCD) += host/ obj-$(CONFIG_ETRAX_USB_HOST) += host/ obj-$(CONFIG_USB_ACM) += class/
@@ -49,7 +49,6 @@ obj-$(CONFIG_USB_RTL8150) += net/ obj-$(CONFIG_USB_USBNET) += net/ -obj-$(CONFIG_USB_DC2XX) += image/ obj-$(CONFIG_USB_HPUSBSCSI) += image/ obj-$(CONFIG_USB_MDC800) += image/ obj-$(CONFIG_USB_MICROTEK) += image/
ChangeSet 1.1938.439.55, 2005/01/07 09:07:22-08:00, [email protected]
[PATCH] USB: ohci diagnostic tweak
This changes the OHCI "USB HC TakeOver failed" message to be a bit more informative, by fingering the root cause: a BIOS/SMM bug.
That way they're more likely to either bug the board vendor, or find workarounds (like tweaking the BIOS setup, or the ohci_hcd no_handshake parameter) before giving up or (wrongly) reporting a Linux bug.
drivers/usb/host/ohci-hcd.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-)
drivers/usb/host/ohci-hcd.c +2 -1
@@ -441,7 +441,8 @@while (ohci_readl (ohci, &ohci->regs->control) &OHCI_CTRL_IR ) {msleep (10 );if (--temp ==0 ) { -ohci_err (ohci,"USB HC TakeOver failed!\n" ); +ohci_err (ohci,"USB HC takeover failed!" +" (BIOS/SMM bug)\n" );return -EBUSY ; } }
ChangeSet 1.1938.439.56, 2005/01/07 10:29:46-08:00, [email protected]
[PATCH] USB: ehci "hc died" on startup (chip bug workaround)
This fixes OSDL bugid #3056 for at least some users, where the EHCI driver gets a "fatal error" IRQ on startup ... only on certain boards, starting with the 2.6.6 or 2.6.7 kernels. These IRQs normally indicate that an invalid DMA address got passed to the controller, or something equally nasty and unrecoverable.
But it turns out that some of these controllers (at least ALI and Intel) are lying. They're issuing these IRQs without stopping, contrary to the EHCI spec ... so these IRQs can be recovered from. Thanks to Christian Iversen for noticing that his ALI controller would continue operating, which was the first real break in this annoying case.
This patch tests for these bogus IRQs, and ignores them ... working around what's clearly a chip bug. It's not clear why we started triggering that bug, but at least EHCI is now usable on boards exhibiting this problem.
drivers/usb/host/ehci-hcd.c | 19 +++++++++++++------ 1 files changed, 13 insertions(+), 6 deletions(-)
drivers/usb/host/ehci-hcd.c +13 -6
@@ -883,13 +883,20 @@/* PCI errors [4.15.2.4] */ if (unlikely ((status &STS_FATAL ) !=0 )) { -ehci_err (ehci,"fatal error\n" ); +/* bogus "fatal" IRQs appear on some chips... why? */ + status =readl (&ehci->regs->status); +dbg_cmd (ehci,"fatal" ,readl (&ehci->regs->command)); +dbg_status (ehci,"fatal" , status); +if (status &STS_HALT ) { +ehci_err (ehci,"fatal error\n" ); dead: -ehci_reset (ehci); -/* generic layer kills/unlinks all urbs, then -* uses ehci_stop to clean up the rest -*/ - bh =1 ; +ehci_reset (ehci); +writel (0 , &ehci->regs->configured_flag); +/* generic layer kills/unlinks all urbs, then +* uses ehci_stop to clean up the rest +*/ + bh =1 ; + } }if (bh)
ChangeSet 1.1938.444.1, 2004/12/15 10:48:19-08:00, [email protected]
[PATCH] add class_device to miscdevice
Currently misc_register() throws away the return from class_simple_device_add(). This makes it impossible to get to the class_device of the directories in /sys/class/misc and, for example, thus impossible to add attributes to those directories.
Attached patch adds a class_device structure to the miscdevice structure and assigns to it the value returned from class_simple_device_add() in misc_register(), thus caching the value and allowing us to f.e. later call class_device_create_file().
We need this for inotify, but I can see plenty of other misc. devices wanting this and consider it missing but required functionality.
Add the class_device structure to miscdevice so that we can add sysfs attributes to /sys/class/misc/foo
drivers/char/misc.c | 14 ++++++-------- include/linux/miscdevice.h | 5 +++-- 2 files changed, 9 insertions(+), 10 deletions(-)
drivers/char/misc.c +6 -8
@@ -207,10 +207,9 @@int misc_register (struct miscdevice * misc) {struct miscdevice *c; -struct class_device *class;dev_t dev;int err; - +down (&misc_sem);list_for_each_entry (c, &misc_list, list) {if (c->minor == misc->minor) {
@@ -224,8 +223,7 @@while (--i >=0 )if ( (misc_minors[i>>3 ] & (1 << (i&7 ))) ==0 )break ; -if (i<0 ) - { +if (i<0 ) {up (&misc_sem);return -EBUSY ; }
@@ -240,10 +238,10 @@ } dev =MKDEV (MISC_MAJOR , misc->minor); - class =class_simple_device_add (misc_class, dev, - misc->dev, misc->name); -if (IS_ERR (class)) { - err =PTR_ERR (class); + misc->class =class_simple_device_add (misc_class, dev, + misc->dev, misc->name); +if (IS_ERR (misc->class)) { + err =PTR_ERR (misc->class); goto out; }
include/linux/miscdevice.h +3 -2
@@ -2,6 +2,7 @@#define _LINUX_MISCDEVICE_H#include <linux/module.h> #include <linux/major.h> +#include <linux/device.h> #define PSMOUSE_MINOR 1#define MS_BUSMOUSE_MINOR 2
@@ -32,13 +33,13 @@struct device ; -struct miscdevice -{ +struct miscdevice {int minor;const char *name;struct file_operations *fops;struct list_head list;struct device *dev; +struct class_device *class;char devfs_name[64 ]; };
ChangeSet 1.1938.444.2, 2004/12/15 10:49:05-08:00, [email protected]
[PATCH] misc: remove device.h #include from miscdevice.h
include/linux/miscdevice.h | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-)
include/linux/miscdevice.h +1 -1
@@ -2,7 +2,6 @@#define _LINUX_MISCDEVICE_H#include <linux/module.h> #include <linux/major.h> -#include <linux/device.h> #define PSMOUSE_MINOR 1#define MS_BUSMOUSE_MINOR 2
@@ -32,6 +31,7 @@#define HPET_MINOR 228struct device ; +struct class_device ;struct miscdevice {int minor;
ChangeSet 1.1938.444.3, 2004/12/15 10:51:58-08:00, [email protected]
Documentation: fix some grammer in the stable_api_nonsense.txt file
Thanks to Andries Brouwer <[email protected]> for pointing this out.
Documentation/stable_api_nonsense.txt | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
Documentation/stable_api_nonsense.txt +2 -2
@@ -9,7 +9,7 @@ kernel to userspace interfaces. The kernel to userspace interface is the one that application programs use, the syscall interface. That interface is _very_ stable over time, and will not break. I have old -programs that were built on a pre 0.9something kernel that still works +programs that were built on a pre 0.9something kernel that still work just fine on the latest 2.6 kernel release. This interface is the one that users and application programmers can count on being stable.
@@ -167,7 +167,7 @@ ensures that your driver is always buildable, and works over time, with very little effort on your part. -The very good side affects of having your driver in the main kernel tree +The very good side effects of having your driver in the main kernel tree are: - The quality of the driver will rise as the maintenance costs (to the original developer) will decrease.
ChangeSet 1.1938.444.4, 2004/12/15 11:15:21-08:00, [email protected]
[PATCH] select HOTPLUG
The patch below changes all dependencies on HOTPLUG to selects.
The help text of HOTPLUG is adjusted in a way, that manually selecting it is only required for external modules.
If an option already depends on PCMCIA or selects FW_LOADER an explicit select of HOTPLUG is not required.
arch/ia64/Kconfig | 13 +++++++------ arch/ppc64/Kconfig | 3 ++- arch/s390/Kconfig | 3 ++- drivers/base/Kconfig | 2 +- drivers/net/pcmcia/Kconfig | 2 +- drivers/net/tokenring/Kconfig | 2 +- drivers/net/wireless/Kconfig | 2 +- drivers/parport/Kconfig | 2 +- drivers/pci/hotplug/Kconfig | 2 +- drivers/pcmcia/Kconfig | 2 +- init/Kconfig | 17 +++-------------- 11 files changed, 21 insertions(+), 29 deletions(-)
arch/ia64/Kconfig +7 -6
@@ -241,13 +241,14 @@ performance hit. config HOTPLUG_CPU - bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" - depends on SMP && HOTPLUG && EXPERIMENTAL + bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" + depends on SMP && EXPERIMENTAL + select HOTPLUG default n - ---help--- - Say Y here to experiment with turning CPUs off and on. CPUs - can be controlled through /sys/devices/system/cpu/cpu#. - Say N if you want to disable CPU hotplug. + ---help--- + Say Y here to experiment with turning CPUs off and on. CPUs + can be controlled through /sys/devices/system/cpu/cpu#. + Say N if you want to disable CPU hotplug. config PREEMPT bool "Preemptible Kernel"
arch/ppc64/Kconfig +2 -1
@@ -301,7 +301,8 @@ config HOTPLUG_CPU bool "Support for hot-pluggable CPUs" - depends on SMP && HOTPLUG && EXPERIMENTAL && PPC_PSERIES + depends on SMP && EXPERIMENTAL && PPC_PSERIES + select HOTPLUG ---help--- Say Y here to be able to turn CPUs off and on.
arch/s390/Kconfig +2 -1
@@ -81,7 +81,8 @@ config HOTPLUG_CPU bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" - depends on SMP && HOTPLUG && EXPERIMENTAL + depends on SMP && EXPERIMENTAL + select HOTPLUG default n help Say Y here to experiment with turning CPUs off and on. CPUs
drivers/base/Kconfig +1 -1
@@ -20,7 +20,7 @@ config FW_LOADER tristate "Hotplug firmware loading support" - depends on HOTPLUG + select HOTPLUG ---help--- This option is provided for the case where no in-kernel-tree modules require hotplug firmware loading support, but a module built outside
drivers/net/pcmcia/Kconfig +1 -1
@@ -3,7 +3,7 @@ # menu "PCMCIA network device support" - depends on NETDEVICES && HOTPLUG && PCMCIA!=n + depends on NETDEVICES && PCMCIA!=n config NET_PCMCIA bool "PCMCIA network device support"
drivers/net/tokenring/Kconfig +1 -1
@@ -84,7 +84,7 @@ config TMS380TR tristate "Generic TMS380 Token Ring ISA/PCI adapter support" - depends on TR && (PCI || ISA) && HOTPLUG + depends on TR && (PCI || ISA) select FW_LOADER ---help--- This driver provides generic support for token ring adapters
drivers/net/wireless/Kconfig +1 -1
@@ -311,7 +311,7 @@ depends on NET_RADIO && PCI config PRISM54 tristate 'Intersil Prism GT/Duette/Indigo PCI/Cardbus' - depends on PCI && NET_RADIO && EXPERIMENTAL && HOTPLUG + depends on PCI && NET_RADIO && EXPERIMENTAL select FW_LOADER ---help--- Enable PCI and Cardbus support for the following chipset based cards:
drivers/parport/Kconfig +1 -1
@@ -83,7 +83,7 @@ config PARPORT_PC_PCMCIA tristate "Support for PCMCIA management for PC-style ports" - depends on PARPORT!=n && HOTPLUG && (PCMCIA!=n && PARPORT_PC=m && PARPORT_PC || PARPORT_PC=y && PCMCIA) + depends on PARPORT!=n && (PCMCIA!=n && PARPORT_PC=m && PARPORT_PC || PARPORT_PC=y && PCMCIA) help Say Y here if you need PCMCIA support for your PC-style parallel ports. If unsure, say N.
drivers/pci/hotplug/Kconfig +1 -1
@@ -3,11 +3,11 @@ # menu "PCI Hotplug Support" - depends on HOTPLUG config HOTPLUG_PCI tristate "Support for PCI Hotplug (EXPERIMENTAL)" depends on PCI && EXPERIMENTAL + select HOTPLUG ---help--- Say Y here if you have a motherboard with a PCI Hotplug controller. This allows you to add and remove PCI cards while the machine is
drivers/pcmcia/Kconfig +1 -1
@@ -6,10 +6,10 @@ # menu "PCCARD (PCMCIA/CardBus) support" - depends on HOTPLUG config PCCARD tristate "PCCard (PCMCIA/CardBus) support" + select HOTPLUG ---help--- Say Y here if you want to attach PCMCIA- or PC-cards to your Linux computer. These are credit-card size devices such as network cards,
init/Kconfig +3 -14
@@ -195,20 +195,9 @@ bool "Support for hot-pluggable devices" if !ARCH_S390 default ARCH_S390 help - Say Y here if you want to plug devices into your computer while - the system is running, and be able to use them quickly. In many - cases, the devices can likewise be unplugged at any time too. - - One well known example of this is PCMCIA- or PC-cards, credit-card - size devices such as network cards, modems or hard drives which are - plugged into slots found on all modern laptop computers. Another - example, used on modern desktops as well as laptops, is USB. - - Enable HOTPLUG and KMOD, and build a modular kernel. Get agent - software (at <http://linux-hotplug.sourceforge.net/>) and install it. - Then your kernel will automatically call out to a user mode "policy - agent" (/sbin/hotplug) to load modules and set up software needed - to use devices as you hotplug them. + This option is provided for the case where no in-kernel-tree + modules require HOTPLUG functionality, but a module built + outside the kernel tree does. Such modules require Y here. config KOBJECT_UEVENT bool "Kernel Userspace Events"
ChangeSet 1.1938.444.5, 2004/12/15 11:15:47-08:00, [email protected]
[PATCH] misc: remove miscdevice.h from pci hotplug drivers as they do not need it.
drivers/pci/hotplug/pciehp_core.c | 1 - drivers/pci/hotplug/shpchp_core.c | 1 - 2 files changed, 2 deletions(-)
drivers/pci/hotplug/pciehp_core.c +0 -1
@@ -33,7 +33,6 @@#include <linux/kernel.h> #include <linux/types.h> #include <linux/proc_fs.h> -#include <linux/miscdevice.h> #include <linux/slab.h> #include <linux/workqueue.h> #include <linux/pci.h>
drivers/pci/hotplug/shpchp_core.c +0 -1
@@ -33,7 +33,6 @@#include <linux/kernel.h> #include <linux/types.h> #include <linux/proc_fs.h> -#include <linux/miscdevice.h> #include <linux/slab.h> #include <linux/workqueue.h> #include <linux/pci.h>
ChangeSet 1.1938.444.6, 2004/12/16 13:16:18-08:00, [email protected]
debugfs: add debugfs
debugfs is a filesystem that is just for debug data. Start moving stuff out of proc and sysfs now :)
Documentation/DocBook/kernel-api.tmpl | 9 fs/Makefile | 1 fs/debugfs/Makefile | 4 fs/debugfs/file.c | 262 ++++++++++++++++++++++++++++ fs/debugfs/inode.c | 315 ++++++++++++++++++++++++++++++++++ include/linux/debugfs.h | 90 +++++++++ lib/Kconfig.debug | 10 + 7 files changed, 691 insertions(+)
Documentation/DocBook/kernel-api.tmpl +9 -0
@@ -105,6 +105,15 @@ </sect1> </chapter> + <chapter id="debugfs"> + <title>The debugfs filesystem</title> + + <sect1><title>debugfs interface</title> +!Efs/debugfs/inode.c +!Efs/debugfs/file.c + </sect1> + </chapter> + <chapter id="vfs"> <title>The Linux VFS</title> <sect1><title>The Directory Cache</title>
fs/Makefile +1 -0
@@ -94,3 +94,4 @@ obj-$(CONFIG_BEFS_FS) += befs/ obj-$(CONFIG_HOSTFS) += hostfs/ obj-$(CONFIG_HPPFS) += hppfs/ +obj-$(CONFIG_DEBUG_FS) += debugfs/
fs/debugfs/Makefile new file +4 -0
@@ -0,0 +1,4 @@ +debugfs-objs := inode.o file.o + +obj-$(CONFIG_DEBUG_FS) += debugfs.o +
fs/debugfs/file.c new file +262 -0
262 lines not on this page · raw message
fs/debugfs/inode.c new file +315 -0
315 lines not on this page · raw message
include/linux/debugfs.h new file +90 -0
90 lines not on this page · raw message
lib/Kconfig.debug +10 -0
@@ -107,6 +107,16 @@ If you're truly short on disk space or don't expect to report any bugs back to the UML developers, say N, otherwise say Y. +config DEBUG_FS + bool "Debug Filesystem" + depends on DEBUG_KERNEL + help + debugfs is a virtual file system that kernel developers use to put + debugging files into. Enable this option to be able to read and + write to these files. + + If unsure, say N. + if !X86_64 config FRAME_POINTER bool "Compile the kernel with frame pointers"
ChangeSet 1.1938.444.7, 2004/12/16 13:19:24-08:00, [email protected]
USB: convert uhci-hcd driver to use debugfs.
Look, we saved 24 lines of code...
drivers/usb/host/uhci-debug.c | 36 +++++++++++-------------- drivers/usb/host/uhci-hcd.c | 60 ++++++++++++++---------------------------- drivers/usb/host/uhci-hcd.h | 6 +--- 3 files changed, 39 insertions(+), 63 deletions(-)
drivers/usb/host/uhci-debug.c +17 -19
@@ -11,7 +11,7 @@#include <linux/config.h> #include <linux/kernel.h> -#include <linux/proc_fs.h> +#include <linux/debugfs.h> #include <linux/smp_lock.h> #include <asm/io.h>
@@ -496,19 +496,18 @@#define MAX_OUTPUT (64 * 1024) -static struct proc_dir_entry *uhci_proc_root =NULL ; +static struct dentry *uhci_debugfs_root =NULL ; -struct uhci_proc { +struct uhci_debug {int size;char *data;struct uhci_hcd *uhci; }; -static int uhci_proc_open (struct inode *inode,struct file *file) +static int uhci_debug_open (struct inode *inode,struct file *file) { -const struct proc_dir_entry *dp =PDE (inode); -struct uhci_hcd *uhci = dp->data; -struct uhci_proc *up; +struct uhci_hcd *uhci = inode->u.generic_ip; +struct uhci_debug *up;int ret = -ENOMEM ;lock_kernel ();
@@ -532,9 +531,9 @@return ret; } -static loff_t uhci_proc_lseek (struct file *file,loff_t off,int whence) +static loff_t uhci_debug_lseek (struct file *file,loff_t off,int whence) { -struct uhci_proc *up; +struct uhci_debug *up;loff_t new =-1 ;lock_kernel ();
@@ -556,16 +555,16 @@return (file->f_pos = new); } -static ssize_t uhci_proc_read (struct file *file,char __user *buf, +static ssize_t uhci_debug_read (struct file *file,char __user *buf,size_t nbytes,loff_t *ppos) { -struct uhci_proc *up = file->private_data; +struct uhci_debug *up = file->private_data;return simple_read_from_buffer (buf, nbytes, ppos, up->data, up->size); } -static int uhci_proc_release (struct inode *inode,struct file *file) +static int uhci_debug_release (struct inode *inode,struct file *file) { -struct uhci_proc *up = file->private_data; +struct uhci_debug *up = file->private_data;kfree (up->data);kfree (up);
@@ -573,11 +572,10 @@ return 0; } -static struct file_operations uhci_proc_operations = { - .open = uhci_proc_open, - .llseek = uhci_proc_lseek, - .read = uhci_proc_read, -// write: uhci_proc_write, - .release = uhci_proc_release, +static struct file_operations uhci_debug_operations = { + .open = uhci_debug_open, + .llseek = uhci_debug_lseek, + .read = uhci_debug_read, + .release = uhci_debug_release, };#endif
drivers/usb/host/uhci-hcd.c +20 -40
116 lines not on this page · raw message
drivers/usb/host/uhci-hcd.h +2 -4
@@ -326,10 +326,8 @@struct uhci_hcd {struct usb_hcd hcd;/* must come first! */ -#ifdef CONFIG_PROC_FS -/* procfs */ -struct proc_dir_entry *proc_entry; -#endif +/* debugfs */ +struct dentry *dentry;/* Grabbed from PCI */ unsigned long io_addr;
ChangeSet 1.1938.444.8, 2004/12/17 14:11:24-08:00, [email protected]
[PATCH] Driver Core: Add platform_get_resource_byname & platform_get_resource_byirq
Adds the ability to find a resource or irq on a platform device by its resource name. This patch also tweaks how resource names get set. Before, resources names were set to pdev->dev.bus_id, now that only happens if the resource name has not been previous set.
All of this allows us to find a resource without assuming what order the resources are in.
drivers/base/platform.c | 40 +++++++++++++++++++++++++++++++++++++++- include/linux/device.h | 2 ++ 2 files changed, 41 insertions(+), 1 deletion(-)
drivers/base/platform.c +39 -1
@@ -58,6 +58,41 @@ }/** +* platform_get_resource_byname - get a resource for a device by name +* @dev: platform device +* @type: resource type +* @name: resource name +*/ +struct resource * +platform_get_resource_byname (struct platform_device *dev,unsigned int type, +char *name) +{ +int i; + +for (i =0 ; i < dev->num_resources; i++) { +struct resource *r = &dev->resource[i]; + +if ((r->flags & (IORESOURCE_IO |IORESOURCE_MEM | +IORESOURCE_IRQ |IORESOURCE_DMA )) == type) +if (!strcmp (r->name, name)) +return r; + } +return NULL ; +} + +/** +* platform_get_irq - get an IRQ for a device +* @dev: platform device +* @name: IRQ name +*/ +int platform_get_irq_byname (struct platform_device *dev,char *name) +{ +struct resource *r =platform_get_resource_byname (dev,IORESOURCE_IRQ , name); + +return r ? r->start :0 ; +} + +/** * platform_add_devices - add a numbers of platform devices * @devs: array of platform devices to add * @num: number of platform devices in array
@@ -103,7 +138,8 @@for (i =0 ; i < pdev->num_resources; i++) {struct resource *p, *r = &pdev->resource[i]; - r->name = pdev->dev.bus_id; +if (r->name ==NULL ) + r->name = pdev->dev.bus_id; p =NULL ;if (r->flags &IORESOURCE_MEM )
@@ -308,3 +344,5 @@EXPORT_SYMBOL_GPL (platform_device_unregister);EXPORT_SYMBOL_GPL (platform_get_irq);EXPORT_SYMBOL_GPL (platform_get_resource); +EXPORT_SYMBOL_GPL (platform_get_irq_byname); +EXPORT_SYMBOL_GPL (platform_get_resource_byname);
include/linux/device.h +2 -0
@@ -382,6 +382,8 @@extern struct resource *platform_get_resource (struct platform_device *,unsigned int ,unsigned int );extern int platform_get_irq (struct platform_device *,unsigned int ); +extern struct resource *platform_get_resource_byname (struct platform_device *,unsigned int ,char *); +extern int platform_get_irq_byname (struct platform_device *,char *);extern int platform_add_devices (struct platform_device **,int );extern struct platform_device *platform_device_register_simple (char *,unsigned int ,struct resource *,unsigned int );
ChangeSet 1.1938.444.9, 2004/12/17 14:50:31-08:00, [email protected]
[PATCH] add ATA over Ethernet driver
Provide support for ATA over Ethernet devices
Documentation/aoe/aoe.txt | 75 +++++ Documentation/aoe/autoload.sh | 17 + Documentation/aoe/mkdevs.sh | 33 ++ Documentation/aoe/mkshelf.sh | 23 + Documentation/aoe/status.sh | 15 + MAINTAINERS | 6 drivers/Makefile | 1 drivers/block/Kconfig | 8 drivers/block/aoe/Makefile | 6 drivers/block/aoe/aoe.h | 163 ++++++++++ drivers/block/aoe/aoeblk.c | 251 ++++++++++++++++ drivers/block/aoe/aoechr.c | 295 +++++++++++++++++++ drivers/block/aoe/aoecmd.c | 627 ++++++++++++++++++++++++++++++++++++++++++ drivers/block/aoe/aoedev.c | 194 ++++++++++++ drivers/block/aoe/aoemain.c | 93 ++++++ drivers/block/aoe/aoenet.c | 173 +++++++++++ 16 files changed, 1980 insertions(+)
Documentation/aoe/aoe.txt new file +75 -0
@@ -0,0 +1,75 @@ +The EtherDrive (R) HOWTO for users of 2.6 kernels is found at ... + + http://www.coraid.com/support/linux/EtherDrive-2.6-HOWTO.html + + It has many tips and hints! + +CREATING DEVICE NODES + + Users of udev should find device nodes created automatically. Two + scripts are provided in Documentation/aoe as examples of static + device node creation for using the aoe driver. + + rm -rf /dev/etherd + sh Documentation/aoe/mkdevs.sh /dev/etherd + + ... or to make just one shelf's worth of block device nodes ... + + sh Documentation/aoe/mkshelf.sh /dev/etherd 0 + + There is also an autoload script that shows how to edit + /etc/modprobe.conf to ensure that the aoe module is loaded when + necessary. + +USING DEVICE NODES + + "cat /dev/etherd/err" blocks, waiting for error diagnostic output, + like any retransmitted packets. + + "echo eth2 eth4 > /dev/etherd/interfaces" tells the aoe driver to + limit ATA over Ethernet traffic to eth2 and eth4. AoE traffic from + untrusted networks should be ignored as a matter of security. + + "echo > /dev/etherd/discover" tells the driver to find out what AoE + devices are available. + + The block devices are named like this: + + e{shelf}.{slot} + e{shelf}.{slot}p{part} + + ... so that "e0.2" is the third blade from the left (slot 2) in the + first shelf (shelf address zero). That's the whole disk. The first + partition on that disk would be "e0.2p1". + +USING SYSFS + + Each aoe block device in /sys/block has the extra attributes of + state, mac, and netif. The state attribute is "up" when the device + is ready for I/O and "down" if detected but unusable. The + "down,closewait" state shows that the device is still open and + cannot come up again until it has been closed. + + The mac attribute is the ethernet address of the remote AoE device. + The netif attribute is the network interface on the localhost + through which we are communicating with the remote AoE device. + + There is a script in this directory that formats this information + in a convenient way. + + root@makki linux# sh Documentation/aoe/status.sh + device mac netif state + e6.0 0010040010c6 eth0 up + e6.1 001004001067 eth0 up + e6.2 001004001068 eth0 up + e6.3 001004001065 eth0 up + e6.4 001004001066 eth0 up + e6.5 0010040010c7 eth0 up + e6.6 0010040010c8 eth0 up + e6.7 0010040010c9 eth0 up + e6.8 0010040010ca eth0 up + e6.9 0010040010cb eth0 up + e9.0 001004000020 eth1 up + e9.5 001004000025 eth1 up + e9.9 001004000029 eth1 up +
Documentation/aoe/autoload.sh new file +17 -0
@@ -0,0 +1,17 @@ +#!/bin/sh +# set aoe to autoload by installing the +# aliases in /etc/modprobe.conf + +f=/etc/modprobe.conf + +if test ! -r $f || test ! -w $f; then + echo "cannot configure $f for module autoloading" 1>&2 + exit 1 +fi + +grep major-152 $f >/dev/null +if [ $? = 1 ]; then + echo alias block-major-152 aoe >> $f + echo alias char-major-152 aoe >> $f +fi +
Documentation/aoe/mkdevs.sh new file +33 -0
@@ -0,0 +1,33 @@ +#!/bin/sh + +n_shelves=10 + +if test "$#" != "1"; then + echo "Usage: sh mkdevs.sh {dir}" 1>&2 + exit 1 +fi +dir=$1 + +MAJOR=152 + +echo "Creating AoE devnode files in $dir ..." + +set -e + +mkdir -p $dir + +# (Status info is in sysfs. See status.sh.) +# rm -f $dir/stat +# mknod -m 0400 $dir/stat c $MAJOR 1 +rm -f $dir/err +mknod -m 0400 $dir/err c $MAJOR 2 +rm -f $dir/discover +mknod -m 0200 $dir/discover c $MAJOR 3 +rm -f $dir/interfaces +mknod -m 0200 $dir/interfaces c $MAJOR 4 + +i=0 +while test $i -lt $n_shelves; do + sh -xc "sh `dirname $0`/mkshelf.sh $dir $i" + i=`expr $i + 1` +done
Documentation/aoe/mkshelf.sh new file +23 -0
@@ -0,0 +1,23 @@ +#! /bin/sh + +if test "$#" != "2"; then + echo "Usage: sh mkshelf.sh {dir} {shelfaddress}" 1>&2 + exit 1 +fi +dir=$1 +shelf=$2 +MAJOR=152 + +set -e + +minor=`echo 10 \* $shelf \* 16 | bc` +for slot in `seq 0 9`; do + for part in `seq 0 15`; do + name=e$shelf.$slot + test "$part" != "0" && name=${name}p$part + rm -f $dir/$name + mknod -m 0660 $dir/$name b $MAJOR $minor + + minor=`expr $minor + 1` + done +done
Documentation/aoe/status.sh new file +15 -0
@@ -0,0 +1,15 @@ +# collate and present sysfs information about AoE storage + +set -e +format="%8s\t%12s\t%8s\t%8s\n" + +printf "$format" device mac netif state + +for d in `ls -d /sys/block/etherd* | grep -v p`; do + dev=`echo "$d" | sed 's/.*!//'` + printf "$format" \ + "$dev" \ + "`cat \"$d/mac\"`" \ + "`cat \"$d/netif\"`" \ + "`cat \"$d/state\"`" +done | sort
MAINTAINERS +6 -0
@@ -328,6 +328,12 @@ W: http://julien.lerouge.free.fr S: Maintained +ATA OVER ETHERNET DRIVER +P: Ed L. Cashin +M: [email protected] +W: http://www.coraid.com/support/linux +S: Supported + ATM P: Chas Williams M: [email protected]
drivers/Makefile +1 -0
@@ -42,6 +42,7 @@ obj-$(CONFIG_SBUS) += sbus/ obj-$(CONFIG_ZORRO) += zorro/ obj-$(CONFIG_MAC) += macintosh/ +obj-$(CONFIG_ATA_OVER_ETH) += block/aoe/ obj-$(CONFIG_PARIDE) += block/paride/ obj-$(CONFIG_TC) += tc/ obj-$(CONFIG_USB) += usb/
drivers/block/Kconfig +8 -0
@@ -429,4 +429,12 @@ source "drivers/block/Kconfig.iosched" +config ATA_OVER_ETH + tristate "ATA over Ethernet support" + depends on NET + default m + help + This driver provides Support for ATA over Ethernet block + devices like the Coraid EtherDrive (R) Storage Blade. + endmenu
drivers/block/aoe/Makefile new file +6 -0
@@ -0,0 +1,6 @@ +# +# Makefile for ATA over Ethernet +# + +obj-$(CONFIG_ATA_OVER_ETH) += aoe.o +aoe-objs := aoeblk.o aoechr.o aoecmd.o aoedev.o aoemain.o aoenet.o
drivers/block/aoe/aoe.h new file +163 -0
163 lines not on this page · raw message
drivers/block/aoe/aoeblk.c new file +251 -0
251 lines not on this page · raw message
drivers/block/aoe/aoechr.c new file +295 -0
295 lines not on this page · raw message
drivers/block/aoe/aoecmd.c new file +627 -0
627 lines not on this page · raw message
drivers/block/aoe/aoedev.c new file +194 -0
194 lines not on this page · raw message
drivers/block/aoe/aoemain.c new file +93 -0
93 lines not on this page · raw message
drivers/block/aoe/aoenet.c new file +173 -0
173 lines not on this page · raw message
ChangeSet 1.1938.444.10, 2004/12/17 14:50:58-08:00, [email protected]
[PATCH] AOE: fix up sparse warnings and get rid of a kmalloc in the aoe driver.
drivers/block/aoe/aoe.h | 2 +- drivers/block/aoe/aoeblk.c | 4 ++-- drivers/block/aoe/aoechr.c | 28 ++++++---------------------- drivers/block/aoe/aoenet.c | 12 +++++++----- 4 files changed, 16 insertions(+), 30 deletions(-)
drivers/block/aoe/aoe.h +1 -1
@@ -158,6 +158,6 @@void aoenet_exit (void );void aoenet_xmit (struct sk_buff *);int is_aoe_netif (struct net_device *ifp); -int set_aoe_iflist (char *str); +int set_aoe_iflist (const char __user *str,size_t size);u64 mac_addr (char addr[6 ]);
drivers/block/aoe/aoeblk.c +2 -2
@@ -170,7 +170,7 @@if (cmd ==HDIO_GETGEO ) { d->geo.start =get_start_sect (inode->i_bdev); -if (!copy_to_user ((void *) arg, &d->geo,sizeof d->geo)) +if (!copy_to_user ((void __user *) arg, &d->geo,sizeof d->geo))return 0 ;return -EFAULT ; }
@@ -227,7 +227,7 @@printk (KERN_INFO "aoe: %012llx e%lu.%lu v%04x has %llu " "sectors\n" ,mac_addr (d->addr), d->aoemajor, d->aoeminor, - d->fw_ver, d->ssize); + d->fw_ver, (long long )d->ssize); }void __exit
drivers/block/aoe/aoechr.c +6 -22
@@ -51,9 +51,9 @@ }static int -interfaces (char *str) +interfaces (const char __user *str,size_t size) { -if (set_aoe_iflist (str)) { +if (set_aoe_iflist (str, size)) {printk (KERN_CRIT "%s: could not set interface list: %s\n" , __FUNCTION__,"too many interfaces" );
@@ -135,24 +135,10 @@ }static ssize_t -aoechr_write (struct file *filp,const char *buf,size_t cnt,loff_t *offp) +aoechr_write (struct file *filp,const char __user *buf,size_t cnt,loff_t *offp) { -char *str =kcalloc (1 , cnt+1 ,GFP_KERNEL ); -int ret; +int ret = -EINVAL ; -if (!str) { -printk (KERN_CRIT "aoe: aoechr_write: cannot allocate memory\n" ); -return -ENOMEM ; - } - - ret = -EFAULT ; -if (copy_from_user (str, buf, cnt)) { -printk (KERN_INFO "aoe: aoechr_write: copy from user failed\n" ); - goto out; - } - - str[cnt] ='\0' ; - ret = -EINVAL ;switch ((unsigned long ) filp->private_data) {default :printk (KERN_INFO "aoe: aoechr_write: can't write to that file.\n" );
@@ -161,13 +147,11 @@ ret =discover ();break ;case MINOR_INTERFACES : - ret =interfaces (str); + ret =interfaces (buf, cnt);break ; }if (ret ==0 ) ret = cnt; - out: -kfree (str);return ret; }
@@ -192,7 +176,7 @@ }static ssize_t -aoechr_read (struct file *filp,char *buf,size_t cnt,loff_t *off) +aoechr_read (struct file *filp,char __user *buf,size_t cnt,loff_t *off) {int n;char *mp;
drivers/block/aoe/aoenet.c +7 -5
@@ -53,14 +53,16 @@ }int -set_aoe_iflist (char *str) +set_aoe_iflist (const char __user *user_str,size_t size) { -int len =strlen (str); - -if (len >=IFLISTSZ ) +if (size >=IFLISTSZ )return -EINVAL ; -strcpy (aoe_iflist, str); +if (copy_from_user (aoe_iflist, user_str, size)) { +printk (KERN_INFO "aoe: %s: copy from user failed\n" , __FUNCTION__); +return -EFAULT ; + } + aoe_iflist[size] =0x00 ;return 0 ; }
ChangeSet 1.1938.444.11, 2004/12/17 15:12:52-08:00, [email protected]
[PATCH] sysfs: Allocate sysfs_dirent structures from their own slab.
Quoted 3 lines · * Andrew Morton ([email protected]) wrote:
That's all well and good, but
sysfs_new_dirent()should be using a standalone slab cache for allocatingsysfs_direntinstances. That way, we use 36 bytes for each one rather than 64.
Reasonable, here's a patch (lightly tested). Without, size-64 looks like so:
size-64 4064 4108 76 52 1 : tunables 32 16 8 : slabdata 79 79 0 : globalstat 4263 4079 79 0 0 0 84 0 : cpustat 15986 337 12286 3
And with:
size-64 1196 1196 76 52 1 : tunables 32 16 8 : slabdata 23 23 0 : globalstat 1297 1196 23 0 0 0 84 0 : cpustat 12418 108 11349 1 sysfs_dir_cache 2862 2916 48 81 1 : tunables 32 16 8 : slabdata 36 36 0 : globalstat 2931 2874 36 0 0 0 113 0 : cpustat 2756 216 110 0
Allocate sysfs_dirent structures from their own slab.
fs/sysfs/dir.c | 2 +- fs/sysfs/mount.c | 17 +++++++++++++++-- fs/sysfs/sysfs.h | 3 ++- 3 files changed, 18 insertions(+), 4 deletions(-)
fs/sysfs/dir.c +1 -1
@@ -36,7 +36,7 @@ {struct sysfs_dirent * sd; - sd =kmalloc (sizeof (*sd),GFP_KERNEL ); + sd =kmem_cache_alloc (sysfs_dir_cachep,GFP_KERNEL );if (!sd)return NULL ;
fs/sysfs/mount.c +15 -2
@@ -16,6 +16,7 @@struct vfsmount *sysfs_mount;struct super_block * sysfs_sb =NULL ; +kmem_cache_t *sysfs_dir_cachep;static struct super_operations sysfs_ops = { .statfs = simple_statfs,
@@ -76,7 +77,13 @@int __init sysfs_init (void ) { -int err; +int err = -ENOMEM ; + + sysfs_dir_cachep =kmem_cache_create ("sysfs_dir_cache" , +sizeof (struct sysfs_dirent ), +0 ,0 ,NULL ,NULL ); +if (!sysfs_dir_cachep) + goto out; err =register_filesystem (&sysfs_fs_type);if (!err) {
@@ -85,7 +92,13 @@printk (KERN_ERR "sysfs: could not mount!\n" ); err =PTR_ERR (sysfs_mount); sysfs_mount =NULL ; + goto out_err; } - } + }else + goto out_err; +out:return err; +out_err: +kmem_cache_destroy (sysfs_dir_cachep); + goto out; }
fs/sysfs/sysfs.h +2 -1
@@ -1,5 +1,6 @@extern struct vfsmount * sysfs_mount; +extern kmem_cache_t *sysfs_dir_cachep;extern struct inode *sysfs_new_inode (mode_t mode);extern int sysfs_create (struct dentry *,int mode,int (*init)(struct inode *));
@@ -74,7 +75,7 @@kobject_put (sl->target_kobj);kfree (sl); } -kfree (sd); +kmem_cache_free (sysfs_dir_cachep, sd); }static inline struct sysfs_dirent *sysfs_get (struct sysfs_dirent * sd)
ChangeSet 1.1938.444.12, 2004/12/20 15:17:05-08:00, [email protected]
Merge kroah.com:/home/greg/linux/BK/driver-2.6
into kroah.com:/home/greg/linux/BK/usb-2.6
drivers/usb/host/uhci-hcd.c | 60 ++++++++++++++------------------------------ drivers/usb/host/uhci-hcd.h | 6 +--- 2 files changed, 22 insertions(+), 44 deletions(-)
drivers/usb/host/uhci-hcd.c +20 -40
@@ -46,7 +46,7 @@#include <linux/unistd.h> #include <linux/interrupt.h> #include <linux/spinlock.h> -#include <linux/proc_fs.h> +#include <linux/debugfs.h> #include <linux/pm.h> #include <linux/dmapool.h> #include <linux/dma-mapping.h>
@@ -74,7 +74,7 @@* debug = 0, no debugging messages * debug = 1, dump failed URB's except for stalls * debug = 2, dump all failed URB's (including stalls) -* show all queues in /proc/driver/uhci/[pci_addr] +* show all queues in /debug/uhci/[pci_addr] * debug = 3, show all TD's in URB's when dumping */ #ifdef DEBUG
@@ -1929,12 +1929,10 @@ uhci->fl =NULL ; } -#ifdef CONFIG_PROC_FS -if (uhci->proc_entry) { -remove_proc_entry (uhci->hcd.self.bus_name, uhci_proc_root); - uhci->proc_entry =NULL ; +if (uhci->dentry) { +debugfs_remove (uhci->dentry); + uhci->dentry =NULL ; } -#endif }static int uhci_reset (struct usb_hcd *hcd)
@@ -1974,25 +1972,17 @@unsigned io_size;dma_addr_t dma_handle;struct usb_device *udev; -#ifdef CONFIG_PROC_FS -struct proc_dir_entry *ent; -#endif +struct dentry *dentry; io_size =pci_resource_len (to_pci_dev (uhci_dev (uhci)), hcd->region); -#ifdef CONFIG_PROC_FS - ent =create_proc_entry (hcd->self.bus_name,S_IFREG |S_IRUGO |S_IWUSR , uhci_proc_root); -if (!ent) { -dev_err (uhci_dev (uhci),"couldn't create uhci proc entry\n" ); + dentry =debugfs_create_file (hcd->self.bus_name,S_IFREG |S_IRUGO |S_IWUSR , uhci_debugfs_root, uhci, &uhci_debug_operations); +if (!dentry) { +dev_err (uhci_dev (uhci),"couldn't create uhci debugfs entry\n" ); retval = -ENOMEM ; - goto err_create_proc_entry; + goto err_create_debug_entry; } - - ent->data = uhci; - ent->proc_fops = &uhci_proc_operations; - ent->size =0 ; - uhci->proc_entry = ent; -#endif + uhci->dentry = dentry; uhci->fsbr =0 ; uhci->fsbrtimeout =0 ;
@@ -2194,13 +2184,10 @@ uhci->fl =NULL ; err_alloc_fl: -#ifdef CONFIG_PROC_FS -remove_proc_entry (hcd->self.bus_name, uhci_proc_root); - uhci->proc_entry =NULL ; - -err_create_proc_entry: -#endif +debugfs_remove (uhci->dentry); + uhci->dentry =NULL ; +err_create_debug_entry:return retval; }
@@ -2363,11 +2350,9 @@ goto errbuf_failed; } -#ifdef CONFIG_PROC_FS - uhci_proc_root =create_proc_entry ("driver/uhci" ,S_IFDIR ,NULL ); -if (!uhci_proc_root) - goto proc_failed; -#endif + uhci_debugfs_root =debugfs_create_dir ("uhci" ,NULL ); +if (!uhci_debugfs_root) + goto debug_failed; uhci_up_cachep =kmem_cache_create ("uhci_urb_priv" ,sizeof (struct urb_priv ),0 ,0 ,NULL ,NULL );
@@ -2385,12 +2370,9 @@warn ("not all urb_priv's were freed!" ); up_failed: +debugfs_remove (uhci_debugfs_root); -#ifdef CONFIG_PROC_FS -remove_proc_entry ("driver/uhci" ,NULL ); - -proc_failed: -#endif +debug_failed:if (errbuf)kfree (errbuf);
@@ -2406,9 +2388,7 @@if (kmem_cache_destroy (uhci_up_cachep))warn ("not all urb_priv's were freed!" ); -#ifdef CONFIG_PROC_FS -remove_proc_entry ("driver/uhci" ,NULL ); -#endif +debugfs_remove (uhci_debugfs_root);if (errbuf)kfree (errbuf);
drivers/usb/host/uhci-hcd.h +2 -4
@@ -322,10 +322,8 @@*/ struct uhci_hcd { -#ifdef CONFIG_PROC_FS -/* procfs */ -struct proc_dir_entry *proc_entry; -#endif +/* debugfs */ +struct dentry *dentry;/* Grabbed from PCI */ unsigned long io_addr;
ChangeSet 1.1938.444.13, 2004/12/20 15:43:59-08:00, [email protected]
USB: convert the idVendor, idProduct, bcdDevice and bcdUSB fields to __le16
These fields are in the struct usb_device_descriptor, and now we keep the native (on-the-wire mode) format of these fields. Any driver using these fields needs to convert it to cpu endian before using them.
All USB drivers in the kernel tree have been fixed up to work properly with this change. All out-of-the USB kernel drivers are on their own...
drivers/char/watchdog/pcwd_usb.c | 6 -- drivers/isdn/hisax/hfc_usb.c | 7 +-- drivers/isdn/hisax/st5481_init.c | 3 - drivers/media/dvb/dibusb/dvb-dibusb.c | 12 ++--- drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c | 6 +- drivers/media/dvb/ttusb-dec/ttusb_dec.c | 8 +-- drivers/net/irda/irda-usb.c | 4 - drivers/net/irda/stir4200.c | 4 - drivers/usb/atm/speedtch.c | 11 ++--- drivers/usb/class/audio.c | 3 - drivers/usb/class/usb-midi.c | 26 ++++++------ drivers/usb/class/usb-midi.h | 4 - drivers/usb/class/usblp.c | 19 ++++---- drivers/usb/core/devices.c | 10 +++- drivers/usb/core/hcd.c | 16 +++---- drivers/usb/core/hub.c | 2 drivers/usb/core/message.c | 7 --- drivers/usb/core/otg_whitelist.h | 16 +++---- drivers/usb/core/sysfs.c | 26 +++++++++--- drivers/usb/core/usb.c | 22 +++++----- drivers/usb/host/hc_crisv10.c | 8 +-- drivers/usb/image/microtek.c | 4 - drivers/usb/input/aiptek.c | 6 +- drivers/usb/input/ati_remote.c | 17 ++----- drivers/usb/input/hid-core.c | 8 ++- drivers/usb/input/hid-ff.c | 4 - drivers/usb/input/hid-input.c | 6 +- drivers/usb/input/hid-lgff.c | 4 - drivers/usb/input/hiddev.c | 6 +- drivers/usb/input/kbtab.c | 6 +- drivers/usb/input/mtouchusb.c | 6 +- drivers/usb/input/powermate.c | 13 +++--- drivers/usb/input/touchkitusb.c | 6 +- drivers/usb/input/usbkbd.c | 6 +- drivers/usb/input/usbmouse.c | 6 +- drivers/usb/input/wacom.c | 6 +- drivers/usb/input/xpad.c | 10 ++-- drivers/usb/media/dabusb.c | 9 ++-- drivers/usb/media/ibmcam.c | 21 ++------- drivers/usb/media/konicawc.c | 8 +-- drivers/usb/media/ov511.c | 6 +- drivers/usb/media/se401.c | 22 +++++----- drivers/usb/media/sn9c102_core.c | 4 - drivers/usb/media/sn9c102_tas5110c1b.c | 6 +- drivers/usb/media/sn9c102_tas5130d1b.c | 4 - drivers/usb/media/stv680.c | 3 - drivers/usb/media/ultracam.c | 8 --- drivers/usb/media/vicam.c | 6 -- drivers/usb/media/w9968cf.c | 8 +-- drivers/usb/misc/auerswald.c | 9 +--- drivers/usb/misc/emi26.c | 8 +-- drivers/usb/misc/emi62.c | 6 -- drivers/usb/misc/legousbtower.c | 7 --- drivers/usb/misc/usblcd.c | 15 ++++--- drivers/usb/misc/usbtest.c | 10 ++-- drivers/usb/misc/uss720.c | 3 - drivers/usb/net/catc.c | 5 +- drivers/usb/net/kaweth.c | 8 +-- drivers/usb/serial/belkin_sa.c | 4 - drivers/usb/serial/io_edgeport.c | 4 - drivers/usb/serial/io_ti.c | 4 - drivers/usb/serial/keyspan.c | 12 ++--- drivers/usb/serial/keyspan_pda.c | 6 +- drivers/usb/serial/kobil_sct.c | 2 drivers/usb/serial/mct_u232.c | 9 ++-- drivers/usb/serial/ti_usb_3410_5052.c | 5 +- drivers/usb/serial/usb-serial.c | 14 +++--- drivers/usb/serial/usb-serial.h | 4 - drivers/usb/serial/visor.c | 4 - drivers/usb/storage/scsiglue.c | 2 drivers/usb/storage/transport.c | 2 drivers/usb/storage/usb.c | 20 +++++---- include/linux/usb_ch9.h | 10 ++-- sound/usb/usbaudio.c | 47 ++++++++++++---------- sound/usb/usbmidi.c | 6 +- sound/usb/usbmixer.c | 6 +- sound/usb/usx2y/usX2Yhwdep.c | 4 - sound/usb/usx2y/usbusx2y.c | 11 ++--- sound/usb/usx2y/usbusx2yaudio.c | 4 - 79 files changed, 343 insertions(+), 347 deletions(-)
drivers/char/watchdog/pcwd_usb.c +0 -6
@@ -571,12 +571,6 @@char fw_ver_str[20 ];unsigned char option_switches, dummy; -/* See if the device offered us matches what we can accept */ -if ((udev->descriptor.idVendor !=USB_PCWD_VENDOR_ID ) || - (udev->descriptor.idProduct !=USB_PCWD_PRODUCT_ID )) { -return -ENODEV ; - } - cards_found++;if (cards_found >1 ) { printk(KERN_ERR PFX "This driver only supports 1 device\n");
drivers/isdn/hisax/hfc_usb.c +4 -3
@@ -1360,9 +1360,10 @@// usb_show_device_descriptor(&dev->descriptor); // usb_show_interface_descriptor(&iface->desc); vend_idx=0xffff ; -for (i=0 ;vdata[i].vendor;i++) - { -if (dev->descriptor.idVendor==vdata[i].vendor && dev->descriptor.idProduct==vdata[i].prod_id) vend_idx=i; +for (i=0 ;vdata[i].vendor;i++) { +if (le16_to_cpu (dev->descriptor.idVendor) == vdata[i].vendor && +le16_to_cpu (dev->descriptor.idProduct) == vdata[i].prod_id) + vend_idx = i; }
drivers/isdn/hisax/st5481_init.c +2 -1
@@ -67,7 +67,8 @@int retval, i;printk (KERN_INFO "st541: found adapter VendorId %04x, ProductId %04x, LEDs %d\n" , - dev->descriptor.idVendor, dev->descriptor.idProduct, +le16_to_cpu (dev->descriptor.idVendor), +le16_to_cpu (dev->descriptor.idProduct), number_of_leds); adapter =kmalloc (sizeof (struct st5481_adapter ),GFP_KERNEL );
drivers/media/dvb/dibusb/dvb-dibusb.c +6 -6
@@ -602,8 +602,8 @@if (dib->fe ==NULL ) {printk ("dvb-dibusb: A frontend driver was not found for device %04x/%04x\n" , - dib->udev->descriptor.idVendor, - dib->udev->descriptor.idProduct); +le16_to_cpu (dib->udev->descriptor.idVendor), +le16_to_cpu (dib->udev->descriptor.idProduct)); }else {if (dvb_register_frontend (dib->adapter, dib->fe)) {printk ("dvb-dibusb: Frontend registration failed!\n" );
@@ -917,11 +917,11 @@int ret = -ENOMEM ,i,cold=0 ;for (i =0 ; i <DIBUSB_SUPPORTED_DEVICES ; i++) -if (dibusb_devices[i].cold_product_id == udev->descriptor.idProduct || - dibusb_devices[i].warm_product_id == udev->descriptor.idProduct) { +if (dibusb_devices[i].cold_product_id ==le16_to_cpu (udev->descriptor.idProduct) || + dibusb_devices[i].warm_product_id ==le16_to_cpu (udev->descriptor.idProduct)) { dibdev = &dibusb_devices[i]; - cold = dibdev->cold_product_id == udev->descriptor.idProduct; + cold = dibdev->cold_product_id ==le16_to_cpu (udev->descriptor.idProduct);if (cold)info ("found a '%s' in cold state, will try to load a firmware" ,dibdev->name);
@@ -931,7 +931,7 @@if (dibdev ==NULL ) {err ("something went very wrong, " -"unknown product ID: %.4x" ,udev->descriptor.idProduct); +"unknown product ID: %.4x" ,le16_to_cpu (udev->descriptor.idProduct));return -ENODEV ; }
drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c +3 -3
@@ -1348,7 +1348,7 @@static void frontend_init (struct ttusb * ttusb) { -switch (ttusb->dev->descriptor.idProduct) { +switch (le16_to_cpu (ttusb->dev->descriptor.idProduct)) {case 0x1003 :// Hauppauge/TT Nova-USB-S budget (stv0299/ALPS BSRU6(tsa5059) // try the ALPS BSRU6 first ttusb->fe =stv0299_attach (&alps_bsru6_config, &ttusb->i2c_adap);
@@ -1381,8 +1381,8 @@if (ttusb->fe ==NULL ) {printk ("dvb-ttusb-budget: A frontend driver was not found for device %04x/%04x\n" , - ttusb->dev->descriptor.idVendor, - ttusb->dev->descriptor.idProduct); +le16_to_cpu (ttusb->dev->descriptor.idVendor), +le16_to_cpu (ttusb->dev->descriptor.idProduct)); }else {if (dvb_register_frontend (ttusb->adapter, ttusb->fe)) {printk ("dvb-ttusb-budget: Frontend registration failed!\n" );
drivers/media/dvb/ttusb-dec/ttusb_dec.c +4 -4
@@ -1447,7 +1447,7 @@memset (dec,0 ,sizeof (struct ttusb_dec )); -switch (id->idProduct) { +switch (le16_to_cpu (id->idProduct)) {case 0x1006 :ttusb_dec_set_model (dec,TTUSB_DEC3000S );break ;
@@ -1471,7 +1471,7 @@ttusb_dec_init_dvb (dec); dec->adapter->priv = dec; -switch (id->idProduct) { +switch (le16_to_cpu (id->idProduct)) {case 0x1006 : dec->fe =ttusbdecfe_dvbs_attach (&fe_config);break ;
@@ -1484,8 +1484,8 @@if (dec->fe ==NULL ) {printk ("dvb-ttusb-dec: A frontend driver was not found for device %04x/%04x\n" , - dec->udev->descriptor.idVendor, - dec->udev->descriptor.idProduct); +le16_to_cpu (dec->udev->descriptor.idVendor), +le16_to_cpu (dec->udev->descriptor.idProduct)); }else {if (dvb_register_frontend (dec->adapter, dec->fe)) {printk ("budget-ci: Frontend registration failed!\n" );
drivers/net/irda/irda-usb.c +2 -2
@@ -1360,8 +1360,8 @@* Jean II */ MESSAGE ("IRDA-USB found at address %d, Vendor: %x, Product: %x\n" , - dev->devnum, dev->descriptor.idVendor, - dev->descriptor.idProduct); + dev->devnum,le16_to_cpu (dev->descriptor.idVendor), +le16_to_cpu (dev->descriptor.idProduct)); net =alloc_irdadev (sizeof (*self));if (!net)
drivers/net/irda/stir4200.c +2 -2
@@ -1072,8 +1072,8 @@printk (KERN_INFO "SigmaTel STIr4200 IRDA/USB found at address %d, " "Vendor: %x, Product: %x\n" , - dev->devnum, dev->descriptor.idVendor, - dev->descriptor.idProduct); + dev->devnum,le16_to_cpu (dev->descriptor.idVendor), +le16_to_cpu (dev->descriptor.idProduct));/* Initialize QoS for this device */ irda_init_max_qos_capabilies (&stir->qos);
drivers/usb/atm/speedtch.c +6 -5
@@ -594,7 +594,7 @@ const struct firmware **fw_p) {char buf[24 ]; -const u16 bcdDevice = instance->u.usb_dev->descriptor.bcdDevice; +const u16 bcdDevice =le16_to_cpu (instance->u.usb_dev->descriptor.bcdDevice);const u8 major_revision = bcdDevice >>8 ;const u8 minor_revision = bcdDevice &0xff ;
@@ -737,11 +737,12 @@int ret, i;char buf7[SIZE_7 ]; -dbg ("speedtch_usb_probe: trying device with vendor=0x%x, product=0x%x, ifnum %d" , dev->descriptor.idVendor, dev->descriptor.idProduct, ifnum); +dbg ("speedtch_usb_probe: trying device with vendor=0x%x, product=0x%x, ifnum %d" , +le16_to_cpu (dev->descriptor.idVendor), +le16_to_cpu (dev->descriptor.idProduct), ifnum); -if ((dev->descriptor.bDeviceClass !=USB_CLASS_VENDOR_SPEC ) || - (dev->descriptor.idVendor !=SPEEDTOUCH_VENDORID ) || - (dev->descriptor.idProduct !=SPEEDTOUCH_PRODUCTID ) || (ifnum !=1 )) +if ((dev->descriptor.bDeviceClass !=USB_CLASS_VENDOR_SPEC ) || + (ifnum !=1 ))return -ENODEV ;dbg ("speedtch_usb_probe: device accepted" );
drivers/usb/class/audio.c +2 -1
@@ -2971,7 +2971,8 @@ } format = (fmt[5 ] ==2 ) ? (AFMT_U16_LE |AFMT_U8 ) : (AFMT_S16_LE |AFMT_S8 );/* Dallas DS4201 workaround */ -if (dev->descriptor.idVendor ==0x04fa && dev->descriptor.idProduct ==0x4201 ) +if (le16_to_cpu (dev->descriptor.idVendor) ==0x04fa && +le16_to_cpu (dev->descriptor.idProduct) ==0x4201 ) format = (AFMT_S16_LE |AFMT_S8 ); fmt =find_csinterface_descriptor (buffer, buflen,NULL ,FORMAT_TYPE , asifout, i);if (!fmt) {
drivers/usb/class/usb-midi.c +14 -12
@@ -1306,8 +1306,8 @@return NULL ; } u->deviceName =NULL ; - u->idVendor = d->descriptor.idVendor; - u->idProduct = d->descriptor.idProduct; + u->idVendor =le16_to_cpu (d->descriptor.idVendor); + u->idProduct =le16_to_cpu (d->descriptor.idProduct); u->interface = ifnum; u->altSetting = altSetting; u->in[0 ].endpoint =-1 ;
@@ -1661,11 +1661,11 @@ }/* Failsafe */ if ( !u->deviceName[0 ] ) { -if ( d->descriptor.idVendor ==USB_VENDOR_ID_ROLAND ) { +if (le16_to_cpu (d->descriptor.idVendor) ==USB_VENDOR_ID_ROLAND ) {strcpy (u->deviceName,"Unknown Roland" ); - }else if ( d->descriptor.idVendor ==USB_VENDOR_ID_STEINBERG ) { + }else if (le16_to_cpu (d->descriptor.idVendor) ==USB_VENDOR_ID_STEINBERG ) {strcpy (u->deviceName,"Unknown Steinberg" ); - }else if ( d->descriptor.idVendor ==USB_VENDOR_ID_YAMAHA ) { + }else if (le16_to_cpu (d->descriptor.idVendor) ==USB_VENDOR_ID_YAMAHA ) {strcpy (u->deviceName,"Unknown Yamaha" ); }else {strcpy (u->deviceName,"Unknown" );
@@ -1782,7 +1782,7 @@int alts=-1 ;int ret; -if (d->descriptor.idVendor !=USB_VENDOR_ID_YAMAHA ) { +if (le16_to_cpu (d->descriptor.idVendor) !=USB_VENDOR_ID_YAMAHA ) {return -EINVAL ; }
@@ -1799,7 +1799,8 @@ }printk (KERN_INFO "usb-midi: Found YAMAHA USB-MIDI device on dev %04x:%04x, iface %d\n" , - d->descriptor.idVendor, d->descriptor.idProduct, ifnum); +le16_to_cpu (d->descriptor.idVendor), +le16_to_cpu (d->descriptor.idProduct), ifnum); i = d->actconfig - d->config; buffer = d->rawdescriptors[i];
@@ -1833,8 +1834,8 @@for ( i=0 ; i<VENDOR_SPECIFIC_USB_MIDI_DEVICES ; i++ ) { u=&(usb_midi_devices[i]); -if ( d->descriptor.idVendor != u->idVendor || - d->descriptor.idProduct != u->idProduct || +if (le16_to_cpu (d->descriptor.idVendor) != u->idVendor || +le16_to_cpu (d->descriptor.idProduct) != u->idProduct || ifnum != u->interface )continue ;
@@ -1875,7 +1876,8 @@ }printk (KERN_INFO "usb-midi: Found MIDISTREAMING on dev %04x:%04x, iface %d\n" , - d->descriptor.idVendor, d->descriptor.idProduct, ifnum); +le16_to_cpu (d->descriptor.idVendor), +le16_to_cpu (d->descriptor.idProduct), ifnum);/* From USB Spec v2.0, Section 9.5.
@@ -1915,8 +1917,8 @@ {struct usb_midi_device u; -if ( d->descriptor.idVendor != uvendor || - d->descriptor.idProduct != uproduct || +if (le16_to_cpu (d->descriptor.idVendor) != uvendor || +le16_to_cpu (d->descriptor.idProduct) != uproduct || ifnum != uinterface ) {return -EINVAL ; }
drivers/usb/class/usb-midi.h +2 -2
@@ -63,8 +63,8 @@struct usb_midi_device {char *deviceName; -int idVendor; -int idProduct; +u16 idVendor; +u16 idProduct;int interface;int altSetting;/* -1: auto detect */
drivers/usb/class/usblp.c +10 -9
@@ -527,7 +527,7 @@case IOCNR_HP_SET_CHANNEL :if (_IOC_DIR (cmd) != _IOC_WRITE || - usblp->dev->descriptor.idVendor !=0x03F0 || +le16_to_cpu (usblp->dev->descriptor.idVendor) !=0x03F0 || usblp->quirks &USBLP_QUIRK_BIDIR ) { retval = -EINVAL ; goto done;
@@ -574,8 +574,8 @@ goto done; } - twoints[0 ] = usblp->dev->descriptor.idVendor; - twoints[1 ] = usblp->dev->descriptor.idProduct; + twoints[0 ] =le16_to_cpu (usblp->dev->descriptor.idVendor); + twoints[1 ] =le16_to_cpu (usblp->dev->descriptor.idProduct);if (copy_to_user ((void __user *)arg, (unsigned char *)twoints,sizeof (twoints))) {
@@ -910,15 +910,15 @@/* Lookup quirks for this printer. */ usblp->quirks =usblp_quirks ( - dev->descriptor.idVendor, - dev->descriptor.idProduct); +le16_to_cpu (dev->descriptor.idVendor), +le16_to_cpu (dev->descriptor.idProduct));/* Analyze and pick initial alternate settings and endpoints. */ protocol =usblp_select_alts (usblp);if (protocol <0 ) {dbg ("incompatible printer-class device 0x%4.4X/0x%4.4X" , - dev->descriptor.idVendor, - dev->descriptor.idProduct); +le16_to_cpu (dev->descriptor.idVendor), +le16_to_cpu (dev->descriptor.idProduct)); goto abort; }
@@ -938,8 +938,9 @@ usblp->minor, usblp->bidir ?"Bi" :"Uni" , dev->devnum, usblp->ifnum, usblp->protocol[usblp->current_protocol].alt_setting, - usblp->current_protocol, usblp->dev->descriptor.idVendor, - usblp->dev->descriptor.idProduct); + usblp->current_protocol, +le16_to_cpu (usblp->dev->descriptor.idVendor), + le16_to_cpu(usblp->dev->descriptor.idProduct));usb_set_intfdata (intf, usblp);
drivers/usb/core/devices.c +7 -3
@@ -335,10 +335,13 @@*/ static char *usb_dump_device_descriptor (char *start,char *end,const struct usb_device_descriptor *desc) { +u16 bcdUSB =le16_to_cpu (desc->bcdUSB); +u16 bcdDevice =le16_to_cpu (desc->bcdDevice); +if (start > end)return start; start += sprintf (start, format_device1, - desc->bcdUSB >> 8, desc->bcdUSB & 0xff, + bcdUSB >> 8, bcdUSB & 0xff, desc->bDeviceClass, class_decode (desc->bDeviceClass), desc->bDeviceSubClass,
@@ -348,8 +351,9 @@if (start > end)return start; start +=sprintf (start, format_device2, - desc->idVendor, desc->idProduct, - desc->bcdDevice >>8 , desc->bcdDevice &0xff ); +le16_to_cpu (desc->idVendor), +le16_to_cpu (desc->idProduct), + bcdDevice >>8 , bcdDevice &0xff );return start; }
drivers/usb/core/hcd.c +8 -8
@@ -120,16 +120,16 @@static const u8 usb2_rh_dev_descriptor [18 ] = {0x12 ,/* __u8 bLength; */ 0x01 ,/* __u8 bDescriptorType; Device */ -0x00 ,0x02 ,/* __u16 bcdUSB; v2.0 */ +0x00 ,0x02 ,/* __le16 bcdUSB; v2.0 */ 0x09 ,/* __u8 bDeviceClass; HUB_CLASSCODE */ 0x00 ,/* __u8 bDeviceSubClass; */ 0x01 ,/* __u8 bDeviceProtocol; [ usb 2.0 single TT ]*/ 0x08 ,/* __u8 bMaxPacketSize0; 8 Bytes */ -0x00 ,0x00 ,/* __u16 idVendor; */ -0x00 ,0x00 ,/* __u16 idProduct; */ -KERNEL_VER ,KERNEL_REL ,/* __u16 bcdDevice */ +0x00 ,0x00 ,/* __le16 idVendor; */ +0x00 ,0x00 ,/* __le16 idProduct; */ +KERNEL_VER ,KERNEL_REL ,/* __le16 bcdDevice */ 0x03 ,/* __u8 iManufacturer; */ 0x02 ,/* __u8 iProduct; */
@@ -143,16 +143,16 @@static const u8 usb11_rh_dev_descriptor [18 ] = {0x12 ,/* __u8 bLength; */ 0x01 ,/* __u8 bDescriptorType; Device */ -0x10 ,0x01 ,/* __u16 bcdUSB; v1.1 */ +0x10 ,0x01 ,/* __le16 bcdUSB; v1.1 */ 0x09 ,/* __u8 bDeviceClass; HUB_CLASSCODE */ 0x00 ,/* __u8 bDeviceSubClass; */ 0x00 ,/* __u8 bDeviceProtocol; [ low/full speeds only ] */ 0x08 ,/* __u8 bMaxPacketSize0; 8 Bytes */ -0x00 ,0x00 ,/* __u16 idVendor; */ -0x00 ,0x00 ,/* __u16 idProduct; */ -KERNEL_VER ,KERNEL_REL ,/* __u16 bcdDevice */ +0x00 ,0x00 ,/* __le16 idVendor; */ +0x00 ,0x00 ,/* __le16 idProduct; */ +KERNEL_VER ,KERNEL_REL ,/* __le16 bcdDevice */ 0x03 ,/* __u8 iManufacturer; */ 0x02 ,/* __u8 iProduct; */
drivers/usb/core/hub.c +1 -1
@@ -2494,7 +2494,7 @@ }/* check for devices running slower than they could */ -if (udev->descriptor.bcdUSB >=0x0200 +if (le16_to_cpu (udev->descriptor.bcdUSB) >=0x0200 && udev->speed ==USB_SPEED_FULL && highspeed_hubs !=0 )check_highspeed (hub, udev, port1);
drivers/usb/core/message.c +1 -6
@@ -796,13 +796,8 @@return -ENOMEM ; ret =usb_get_descriptor (dev,USB_DT_DEVICE ,0 , desc, size); -if (ret >=0 ) { -le16_to_cpus (&desc->bcdUSB); -le16_to_cpus (&desc->idVendor); -le16_to_cpus (&desc->idProduct); -le16_to_cpus (&desc->bcdDevice); +if (ret >=0 )memcpy (&dev->descriptor, desc, size); - }kfree (desc);return ret; }
drivers/usb/core/otg_whitelist.h +8 -8
@@ -55,8 +55,8 @@return 1 ;/* HNP test device is _never_ targeted (see OTG spec 6.6.6) */ -if (dev->descriptor.idVendor ==0x1a0a - && dev->descriptor.idProduct ==0xbadd ) +if ((le16_to_cpu (dev->descriptor.idVendor) ==0x1a0a && +le16_to_cpu (dev->descriptor.idProduct) ==0xbadd ))return 0 ;/* NOTE: can't use usb_match_id() since interface caches
@@ -64,21 +64,21 @@*/ for (id = whitelist_table; id->match_flags; id++) {if ((id->match_flags &USB_DEVICE_ID_MATCH_VENDOR ) && - id->idVendor != dev->descriptor.idVendor) + id->idVendor !=le16_to_cpu (dev->descriptor.idVendor))continue ;if ((id->match_flags &USB_DEVICE_ID_MATCH_PRODUCT ) && - id->idProduct != dev->descriptor.idProduct) + id->idProduct !=le16_to_cpu (dev->descriptor.idProduct))continue ;/* No need to test id->bcdDevice_lo != 0, since 0 is never greater than any unsigned number. */ if ((id->match_flags &USB_DEVICE_ID_MATCH_DEV_LO ) && - (id->bcdDevice_lo > dev->descriptor.bcdDevice)) + (id->bcdDevice_lo >le16_to_cpu (dev->descriptor.bcdDevice)))continue ;if ((id->match_flags &USB_DEVICE_ID_MATCH_DEV_HI ) && - (id->bcdDevice_hi < dev->descriptor.bcdDevice)) + (id->bcdDevice_hi <le16_to_cpu (dev->descriptor.bcdDevice)))continue ; if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_CLASS) &&
@@ -101,8 +101,8 @@/* OTG MESSAGE: report errors here, customize to match your product */ dev_err (&dev->dev,"device v%04x p%04x is not supported\n" , - dev->descriptor.idVendor, - dev->descriptor.idProduct); +le16_to_cpu (dev->descriptor.idVendor), +le16_to_cpu (dev->descriptor.idProduct));#ifdef CONFIG_USB_OTG_WHITELIST return 0 ;#else
drivers/usb/core/sysfs.c +20 -6
@@ -149,10 +149,11 @@ show_version (struct device *dev, char *buf) { struct usb_device *udev; +u16 bcdUSB; - udev =to_usb_device (dev); -return sprintf (buf,"%2x.%02x\n" , udev->descriptor.bcdUSB >>8 , - udev->descriptor.bcdUSB &0xff ); + udev =to_usb_device (dev); + bcdUSB =le16_to_cpu (udev->descriptor.bcdUSB); +return sprintf (buf,"%2x.%02x\n" , bcdUSB >>8 , bcdUSB &0xff ); } static DEVICE_ATTR(version, S_IRUGO, show_version, NULL);
@@ -167,6 +168,22 @@ static DEVICE_ATTR(maxchild, S_IRUGO, show_maxchild, NULL);/* Descriptor fields */ +#define usb_descriptor_attr_le16 (field, format_string) \ +static ssize_t \ +show_##field (struct device *dev, char *buf) \ +{ \ + struct usb_device *udev; \ + \ + udev = to_usb_device (dev); \ + return sprintf (buf, format_string, \ + le16_to_cpu(udev->descriptor.field)); \ +} \ +static DEVICE_ATTR(field, S_IRUGO, show_##field, NULL); + +usb_descriptor_attr_le16(idVendor, "%04x\n") +usb_descriptor_attr_le16(idProduct, "%04x\n") +usb_descriptor_attr_le16(bcdDevice, "%04x\n") +#define usb_descriptor_attr (field, format_string) \ static ssize_t \ show_##field (struct device *dev, char *buf) \
@@ -178,9 +195,6 @@ } \ static DEVICE_ATTR(field, S_IRUGO, show_##field, NULL); -usb_descriptor_attr (idVendor, "%04x\n") -usb_descriptor_attr (idProduct, "%04x\n") -usb_descriptor_attr (bcdDevice, "%04x\n") usb_descriptor_attr (bDeviceClass, "%02x\n") usb_descriptor_attr (bDeviceSubClass, "%02x\n")usb_descriptor_attr (bDeviceProtocol,"%02x\n" )
drivers/usb/core/usb.c +11 -11
@@ -423,21 +423,21 @@ id->driver_info; id++) {if ((id->match_flags &USB_DEVICE_ID_MATCH_VENDOR ) && - id->idVendor != dev->descriptor.idVendor) + id->idVendor !=le16_to_cpu (dev->descriptor.idVendor))continue ;if ((id->match_flags &USB_DEVICE_ID_MATCH_PRODUCT ) && - id->idProduct != dev->descriptor.idProduct) + id->idProduct !=le16_to_cpu (dev->descriptor.idProduct))continue ;/* No need to test id->bcdDevice_lo != 0, since 0 is never greater than any unsigned number. */ if ((id->match_flags &USB_DEVICE_ID_MATCH_DEV_LO ) && - (id->bcdDevice_lo > dev->descriptor.bcdDevice)) + (id->bcdDevice_lo >le16_to_cpu (dev->descriptor.bcdDevice)))continue ;if ((id->match_flags &USB_DEVICE_ID_MATCH_DEV_HI ) && - (id->bcdDevice_hi < dev->descriptor.bcdDevice)) + (id->bcdDevice_hi <le16_to_cpu (dev->descriptor.bcdDevice)))continue ; if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_CLASS) &&
@@ -588,9 +588,9 @@if (add_hotplug_env_var (envp, num_envp, &i, buffer, buffer_size, &length,"PRODUCT=%x/%x/%x" , - usb_dev->descriptor.idVendor, - usb_dev->descriptor.idProduct, - usb_dev->descriptor.bcdDevice)) +le16_to_cpu (usb_dev->descriptor.idVendor), +le16_to_cpu (usb_dev->descriptor.idProduct), +le16_to_cpu (usb_dev->descriptor.bcdDevice)))return -ENOMEM ;/* class-based driver binding models */
@@ -959,12 +959,12 @@int child;dev_dbg (&dev->dev,"check for vendor %04x, product %04x ...\n" , - dev->descriptor.idVendor, - dev->descriptor.idProduct); +le16_to_cpu (dev->descriptor.idVendor), +le16_to_cpu (dev->descriptor.idProduct));/* see if this device matches */ -if ((dev->descriptor.idVendor == vendor_id) && - (dev->descriptor.idProduct == product_id)) { +if ((vendor_id ==le16_to_cpu (dev->descriptor.idVendor)) && + (product_id ==le16_to_cpu (dev->descriptor.idProduct))) {dev_dbg (&dev->dev,"matched this device!\n" ); ret_dev =usb_get_dev (dev); goto exit;
drivers/usb/host/hc_crisv10.c +4 -4
@@ -113,17 +113,17 @@ {0x12 ,/* __u8 bLength; */ 0x01 ,/* __u8 bDescriptorType; Device */ -0x00 ,/* __u16 bcdUSB; v1.0 */ +0x00 ,/* __le16 bcdUSB; v1.0 */ 0x01 ,0x09 ,/* __u8 bDeviceClass; HUB_CLASSCODE */ 0x00 ,/* __u8 bDeviceSubClass; */ 0x00 ,/* __u8 bDeviceProtocol; */ 0x08 ,/* __u8 bMaxPacketSize0; 8 Bytes */ -0x00 ,/* __u16 idVendor; */ +0x00 ,/* __le16 idVendor; */ 0x00 , -0x00 ,/* __u16 idProduct; */ +0x00 ,/* __le16 idProduct; */ 0x00 , -0x00 ,/* __u16 bcdDevice; */ +0x00 ,/* __le16 bcdDevice; */ 0x00 ,0x00 ,/* __u8 iManufacturer; */ 0x02, /* __u8 iProduct; */
drivers/usb/image/microtek.c +2 -2
@@ -715,8 +715,8 @@MTS_DEBUG ("usb-device descriptor at %x\n" , (int )dev );MTS_DEBUG ("product id = 0x%x, vendor id = 0x%x\n" , - (int )dev->descriptor.idProduct, - (int )dev->descriptor.idVendor ); +le16_to_cpu (dev->descriptor.idProduct), +le16_to_cpu (dev->descriptor.idVendor) );MTS_DEBUG_GOT_HERE ();
drivers/usb/input/aiptek.c +3 -3
@@ -2137,9 +2137,9 @@ aiptek->inputdev.name ="Aiptek" ; aiptek->inputdev.phys = aiptek->features.usbPath; aiptek->inputdev.id.bustype =BUS_USB ; - aiptek->inputdev.id.vendor = usbdev->descriptor.idVendor; - aiptek->inputdev.id.product = usbdev->descriptor.idProduct; - aiptek->inputdev.id.version = usbdev->descriptor.bcdDevice; + aiptek->inputdev.id.vendor =le16_to_cpu (usbdev->descriptor.idVendor); + aiptek->inputdev.id.product =le16_to_cpu (usbdev->descriptor.idProduct); + aiptek->inputdev.id.version =le16_to_cpu (usbdev->descriptor.bcdDevice); aiptek->usbdev = usbdev; aiptek->ifnum = intf->altsetting[0 ].desc.bInterfaceNumber;
drivers/usb/input/ati_remote.c +5 -12
@@ -672,9 +672,9 @@ idev->phys = ati_remote->phys; idev->id.bustype =BUS_USB ; - idev->id.vendor = ati_remote->udev->descriptor.idVendor; - idev->id.product = ati_remote->udev->descriptor.idProduct; - idev->id.version = ati_remote->udev->descriptor.bcdDevice; + idev->id.vendor =le16_to_cpu (ati_remote->udev->descriptor.idVendor); + idev->id.product =le16_to_cpu (ati_remote->udev->descriptor.idProduct); + idev->id.version =le16_to_cpu (ati_remote->udev->descriptor.bcdDevice); }static int ati_remote_initialize (struct ati_remote *ati_remote)
@@ -729,13 +729,6 @@char path[64 ];char *buf =NULL ; -/* See if the offered device matches what we can accept */ -if ((udev->descriptor.idVendor !=ATI_REMOTE_VENDOR_ID ) || - ( (udev->descriptor.idProduct !=ATI_REMOTE_PRODUCT_ID ) && - (udev->descriptor.idProduct !=LOLA_REMOTE_PRODUCT_ID ) && - (udev->descriptor.idProduct !=MEDION_REMOTE_PRODUCT_ID ) )) -return -ENODEV ; -/* Allocate and clear an ati_remote struct */ if (!(ati_remote =kmalloc (sizeof (struct ati_remote ),GFP_KERNEL )))return -ENOMEM ;
@@ -803,8 +796,8 @@if (!strlen (ati_remote->name))sprintf (ati_remote->name,DRIVER_DESC "(%04x,%04x)" , - ati_remote->udev->descriptor.idVendor, - ati_remote->udev->descriptor.idProduct); +le16_to_cpu (ati_remote->udev->descriptor.idVendor), +le16_to_cpu (ati_remote->udev->descriptor.idProduct));/* Device Hardware Initialization - fills in ati_remote->idev from udev. */ retval =ati_remote_initialize (ati_remote);
drivers/usb/input/hid-core.c +5 -3
@@ -1599,8 +1599,8 @@int n;for (n =0 ; hid_blacklist[n].idVendor; n++) -if ((hid_blacklist[n].idVendor == dev->descriptor.idVendor) && - (hid_blacklist[n].idProduct == dev->descriptor.idProduct)) +if ((hid_blacklist[n].idVendor ==le16_to_cpu (dev->descriptor.idVendor)) && + (hid_blacklist[n].idProduct ==le16_to_cpu (dev->descriptor.idProduct))) quirks = hid_blacklist[n].quirks;if (quirks &HID_QUIRK_IGNORE )
@@ -1724,7 +1724,9 @@ }else if (usb_string (dev, dev->descriptor.iProduct, buf,128 ) >0 ) {snprintf (hid->name,128 ,"%s" , buf); }else -snprintf (hid->name,128 ,"%04x:%04x" , dev->descriptor.idVendor, dev->descriptor.idProduct); +snprintf (hid->name,128 ,"%04x:%04x" , +le16_to_cpu (dev->descriptor.idVendor), +le16_to_cpu (dev->descriptor.idProduct));usb_make_path (dev, buf,64 ); snprintf(hid->phys, 64, "%s/input%d", buf,
drivers/usb/input/hid-ff.c +2 -2
@@ -82,8 +82,8 @@ {struct hid_ff_initializer *init; - init =hid_get_ff_init (hid->dev->descriptor.idVendor, - hid->dev->descriptor.idProduct); + init =hid_get_ff_init (le16_to_cpu (hid->dev->descriptor.idVendor), +le16_to_cpu (hid->dev->descriptor.idProduct));if (!init) {dbg ("hid_ff_init could not find initializer" );
drivers/usb/input/hid-input.c +3 -3
@@ -593,9 +593,9 @@ hidinput->input.phys = hid->phys; hidinput->input.uniq = hid->uniq; hidinput->input.id.bustype =BUS_USB ; - hidinput->input.id.vendor = dev->descriptor.idVendor; - hidinput->input.id.product = dev->descriptor.idProduct; - hidinput->input.id.version = dev->descriptor.bcdDevice; + hidinput->input.id.vendor =le16_to_cpu (dev->descriptor.idVendor); + hidinput->input.id.product =le16_to_cpu (dev->descriptor.idProduct); + hidinput->input.id.version =le16_to_cpu (dev->descriptor.bcdDevice); hidinput->input.dev = &hid->intf->dev; }
drivers/usb/input/hid-lgff.c +2 -2
@@ -251,8 +251,8 @@ {struct device_type * dev = devices;signed short * ff; -u16 idVendor = hid->dev->descriptor.idVendor; -u16 idProduct = hid->dev->descriptor.idProduct; +u16 idVendor =le16_to_cpu (hid->dev->descriptor.idVendor); +u16 idProduct =le16_to_cpu (hid->dev->descriptor.idProduct); struct hid_input *hidinput = list_entry(hid->inputs.next, struct hid_input, list);while (dev->idVendor && (idVendor != dev->idVendor || idProduct != dev->idProduct))
drivers/usb/input/hiddev.c +3 -3
@@ -423,9 +423,9 @@ dinfo.busnum = dev->bus->busnum; dinfo.devnum = dev->devnum; dinfo.ifnum = hid->ifnum; - dinfo.vendor = dev->descriptor.idVendor; - dinfo.product = dev->descriptor.idProduct; - dinfo.version = dev->descriptor.bcdDevice; + dinfo.vendor =le16_to_cpu (dev->descriptor.idVendor); + dinfo.product =le16_to_cpu (dev->descriptor.idProduct); + dinfo.version =le16_to_cpu (dev->descriptor.bcdDevice); dinfo.num_applications = hid->maxapplication;if (copy_to_user (user_arg, &dinfo,sizeof (dinfo)))return -EFAULT ;
drivers/usb/input/kbtab.c +3 -3
@@ -175,9 +175,9 @@ kbtab->dev.name ="KB Gear Tablet" ; kbtab->dev.phys = kbtab->phys; kbtab->dev.id.bustype =BUS_USB ; - kbtab->dev.id.vendor = dev->descriptor.idVendor; - kbtab->dev.id.product = dev->descriptor.idProduct; - kbtab->dev.id.version = dev->descriptor.bcdDevice; + kbtab->dev.id.vendor =le16_to_cpu (dev->descriptor.idVendor); + kbtab->dev.id.product =le16_to_cpu (dev->descriptor.idProduct); + kbtab->dev.id.version =le16_to_cpu (dev->descriptor.bcdDevice); kbtab->dev.dev = &intf->dev; kbtab->usbdev = dev;
drivers/usb/input/mtouchusb.c +3 -3
@@ -223,9 +223,9 @@ mtouch->input.name = mtouch->name; mtouch->input.phys = mtouch->phys; mtouch->input.id.bustype =BUS_USB ; - mtouch->input.id.vendor = udev->descriptor.idVendor; - mtouch->input.id.product = udev->descriptor.idProduct; - mtouch->input.id.version = udev->descriptor.bcdDevice; + mtouch->input.id.vendor =le16_to_cpu (udev->descriptor.idVendor); + mtouch->input.id.product =le16_to_cpu (udev->descriptor.idProduct); + mtouch->input.id.version =le16_to_cpu (udev->descriptor.bcdDevice); mtouch->input.dev = &intf->dev; mtouch->input.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS );
drivers/usb/input/powermate.c +7 -6
@@ -375,12 +375,13 @@return -EIO ;/* failure */ } -switch (udev->descriptor.idProduct) { +switch (le16_to_cpu (udev->descriptor.idProduct)) {case POWERMATE_PRODUCT_NEW : pm->input.name = pm_name_powermate;break ;case POWERMATE_PRODUCT_OLD : pm->input.name = pm_name_soundknob;break ;default : - pm->input.name = pm_name_soundknob; -printk (KERN_WARNING "powermate: unknown product id %04x\n" , udev->descriptor.idProduct); + pm->input.name = pm_name_soundknob; +printk (KERN_WARNING "powermate: unknown product id %04x\n" , +le16_to_cpu (udev->descriptor.idProduct)); } pm->input.private = pm;
@@ -389,9 +390,9 @@ pm->input.relbit[LONG (REL_DIAL )] =BIT (REL_DIAL ); pm->input.mscbit[LONG (MSC_PULSELED )] =BIT (MSC_PULSELED ); pm->input.id.bustype =BUS_USB ; - pm->input.id.vendor = udev->descriptor.idVendor; - pm->input.id.product = udev->descriptor.idProduct; - pm->input.id.version = udev->descriptor.bcdDevice; + pm->input.id.vendor =le16_to_cpu (udev->descriptor.idVendor); + pm->input.id.product =le16_to_cpu (udev->descriptor.idProduct); + pm->input.id.version =le16_to_cpu (udev->descriptor.bcdDevice); pm->input.event = powermate_input_event; pm->input.dev = &intf->dev;
drivers/usb/input/touchkitusb.c +3 -3
@@ -211,9 +211,9 @@ touchkit->input.name = touchkit->name; touchkit->input.phys = touchkit->phys; touchkit->input.id.bustype =BUS_USB ; - touchkit->input.id.vendor = udev->descriptor.idVendor; - touchkit->input.id.product = udev->descriptor.idProduct; - touchkit->input.id.version = udev->descriptor.bcdDevice; + touchkit->input.id.vendor =le16_to_cpu (udev->descriptor.idVendor); + touchkit->input.id.product =le16_to_cpu (udev->descriptor.idProduct); + touchkit->input.id.version =le16_to_cpu (udev->descriptor.bcdDevice); touchkit->input.dev = &intf->dev; touchkit->input.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS );
drivers/usb/input/usbkbd.c +3 -3
@@ -296,9 +296,9 @@ kbd->dev.name = kbd->name; kbd->dev.phys = kbd->phys; kbd->dev.id.bustype =BUS_USB ; - kbd->dev.id.vendor = dev->descriptor.idVendor; - kbd->dev.id.product = dev->descriptor.idProduct; - kbd->dev.id.version = dev->descriptor.bcdDevice; + kbd->dev.id.vendor =le16_to_cpu (dev->descriptor.idVendor); + kbd->dev.id.product =le16_to_cpu (dev->descriptor.idProduct); + kbd->dev.id.version =le16_to_cpu (dev->descriptor.bcdDevice); kbd->dev.dev = &iface->dev;if (!(buf =kmalloc (63 ,GFP_KERNEL ))) {
drivers/usb/input/usbmouse.c +3 -3
@@ -180,9 +180,9 @@ mouse->dev.name = mouse->name; mouse->dev.phys = mouse->phys; mouse->dev.id.bustype =BUS_USB ; - mouse->dev.id.vendor = dev->descriptor.idVendor; - mouse->dev.id.product = dev->descriptor.idProduct; - mouse->dev.id.version = dev->descriptor.bcdDevice; + mouse->dev.id.vendor =le16_to_cpu (dev->descriptor.idVendor); + mouse->dev.id.product =le16_to_cpu (dev->descriptor.idProduct); + mouse->dev.id.version =le16_to_cpu (dev->descriptor.bcdDevice); mouse->dev.dev = &intf->dev;if (!(buf =kmalloc (63 ,GFP_KERNEL ))) {
drivers/usb/input/wacom.c +3 -3
@@ -692,9 +692,9 @@ wacom->dev.name = wacom->features->name; wacom->dev.phys = wacom->phys; wacom->dev.id.bustype =BUS_USB ; - wacom->dev.id.vendor = dev->descriptor.idVendor; - wacom->dev.id.product = dev->descriptor.idProduct; - wacom->dev.id.version = dev->descriptor.bcdDevice; + wacom->dev.id.vendor =le16_to_cpu (dev->descriptor.idVendor); + wacom->dev.id.product =le16_to_cpu (dev->descriptor.idProduct); + wacom->dev.id.version =le16_to_cpu (dev->descriptor.bcdDevice); wacom->dev.dev = &intf->dev; wacom->usbdev = dev;
drivers/usb/input/xpad.c +5 -5
@@ -226,8 +226,8 @@int i;for (i =0 ; xpad_device[i].idVendor; i++) { -if ((udev->descriptor.idVendor == xpad_device[i].idVendor) && - (udev->descriptor.idProduct == xpad_device[i].idProduct)) +if ((le16_to_cpu (udev->descriptor.idVendor) == xpad_device[i].idVendor) && + (le16_to_cpu (udev->descriptor.idProduct) == xpad_device[i].idProduct))break ; }
@@ -264,9 +264,9 @@ xpad->udev = udev; xpad->dev.id.bustype =BUS_USB ; - xpad->dev.id.vendor = udev->descriptor.idVendor; - xpad->dev.id.product = udev->descriptor.idProduct; - xpad->dev.id.version = udev->descriptor.bcdDevice; + xpad->dev.id.vendor =le16_to_cpu (udev->descriptor.idVendor); + xpad->dev.id.product =le16_to_cpu (udev->descriptor.idProduct); + xpad->dev.id.version =le16_to_cpu (udev->descriptor.bcdDevice); xpad->dev.dev = &intf->dev; xpad->dev.private = xpad; xpad->dev.name = xpad_device[i].name;
drivers/usb/media/dabusb.c +6 -3
@@ -724,13 +724,16 @@pdabusb_t s;dbg ("dabusb: probe: vendor id 0x%x, device id 0x%x ifnum:%d" , - usbdev->descriptor.idVendor, usbdev->descriptor.idProduct, intf->altsetting->desc.bInterfaceNumber); +le16_to_cpu (usbdev->descriptor.idVendor), +le16_to_cpu (usbdev->descriptor.idProduct), + intf->altsetting->desc.bInterfaceNumber);/* We don't handle multiple configurations */ if (usbdev->descriptor.bNumConfigurations !=1 )return -ENODEV ; -if (intf->altsetting->desc.bInterfaceNumber != _DABUSB_IF && usbdev->descriptor.idProduct ==0x9999 ) +if (intf->altsetting->desc.bInterfaceNumber != _DABUSB_IF && +le16_to_cpu (usbdev->descriptor.idProduct) ==0x9999 )return -ENODEV ;
@@ -746,7 +749,7 @@err ("reset_configuration failed" ); goto reject; } -if (usbdev->descriptor.idProduct ==0x2131 ) { +if (le16_to_cpu (usbdev->descriptor.idProduct) ==0x2131 ) {dabusb_loadmem (s,NULL ); goto reject; }
drivers/usb/media/ibmcam.c +6 -15
@@ -3659,17 +3659,8 @@if (dev->descriptor.bNumConfigurations !=1 )return -ENODEV ; -/* Is it an IBM camera? */ -if (dev->descriptor.idVendor !=IBMCAM_VENDOR_ID ) -return -ENODEV ; -if ((dev->descriptor.idProduct !=IBMCAM_PRODUCT_ID ) && - (dev->descriptor.idProduct !=VEO_800C_PRODUCT_ID ) && - (dev->descriptor.idProduct !=VEO_800D_PRODUCT_ID ) && - (dev->descriptor.idProduct !=NETCAM_PRODUCT_ID )) -return -ENODEV ; -/* Check the version/revision */ -switch (dev->descriptor.bcdDevice) { +switch (le16_to_cpu (dev->descriptor.bcdDevice)) {case 0x0002 :if (ifnum !=2 )return -ENODEV ;
@@ -3678,8 +3669,8 @@case 0x030A :if (ifnum !=0 )return -ENODEV ; -if ((dev->descriptor.idProduct ==NETCAM_PRODUCT_ID ) || - (dev->descriptor.idProduct ==VEO_800D_PRODUCT_ID )) +if ((le16_to_cpu (dev->descriptor.idProduct) ==NETCAM_PRODUCT_ID ) || + (le16_to_cpu (dev->descriptor.idProduct) ==VEO_800D_PRODUCT_ID )) model =IBMCAM_MODEL_4 ;else model =IBMCAM_MODEL_2 ;
@@ -3691,14 +3682,14 @@break ;default :err ("IBM camera with revision 0x%04x is not supported." , - dev->descriptor.bcdDevice); +le16_to_cpu (dev->descriptor.bcdDevice));return -ENODEV ; }/* Print detailed info on what we found so far */ do { char *brand = NULL; - switch (dev->descriptor.idProduct) { + switch (le16_to_cpu(dev->descriptor.idProduct)) { case NETCAM_PRODUCT_ID: brand = "IBM NetCamera"; break;
@@ -3714,7 +3705,7 @@break ; }info ("%s USB camera found (model %d, rev. 0x%04x)" , - brand, model, dev->descriptor.bcdDevice); + brand, model,le16_to_cpu (dev->descriptor.bcdDevice)); }while (0 );/* Validate found interface: must have one ISO endpoint */
drivers/usb/media/konicawc.c +4 -4
@@ -732,7 +732,7 @@if (dev->descriptor.bNumConfigurations !=1 )return -ENODEV ; -info ("Konica Webcam (rev. 0x%04x)" , dev->descriptor.bcdDevice); +info ("Konica Webcam (rev. 0x%04x)" ,le16_to_cpu (dev->descriptor.bcdDevice));RESTRICT_TO_RANGE (speed,0 ,MAX_SPEED );/* Validate found interface: must have one ISO endpoint */
@@ -846,9 +846,9 @@ cam->input.evbit[0 ] =BIT (EV_KEY ); cam->input.keybit[LONG (BTN_0 )] =BIT (BTN_0 ); cam->input.id.bustype =BUS_USB ; - cam->input.id.vendor = dev->descriptor.idVendor; - cam->input.id.product = dev->descriptor.idProduct; - cam->input.id.version = dev->descriptor.bcdDevice; + cam->input.id.vendor =le16_to_cpu (dev->descriptor.idVendor); + cam->input.id.product =le16_to_cpu (dev->descriptor.idProduct); + cam->input.id.version =le16_to_cpu (dev->descriptor.bcdDevice);input_register_device (&cam->input);usb_make_path (dev, cam->input_physname,56 );
drivers/usb/media/ov511.c +3 -3
@@ -5825,7 +5825,7 @@ ov->auto_gain = autogain; ov->auto_exp = autoexp; -switch (dev->descriptor.idProduct) { +switch (le16_to_cpu (dev->descriptor.idProduct)) {case PROD_OV511 : ov->bridge =BRG_OV511 ; ov->bclass =BCL_OV511 ;
@@ -5843,13 +5843,13 @@ ov->bclass =BCL_OV518 ;break ;case PROD_ME2CAM : -if (dev->descriptor.idVendor !=VEND_MATTEL ) +if (le16_to_cpu (dev->descriptor.idVendor) !=VEND_MATTEL ) goto error; ov->bridge =BRG_OV511PLUS ; ov->bclass =BCL_OV511 ;break ;default : -err ("Unknown product ID 0x%04x" , dev->descriptor.idProduct); +err ("Unknown product ID 0x%04x" ,le16_to_cpu (dev->descriptor.idProduct)); goto error; }
drivers/usb/media/se401.c +11 -11
@@ -1315,20 +1315,20 @@ interface = &intf->cur_altsetting->desc;/* Is it an se401? */ -if (dev->descriptor.idVendor ==0x03e8 && - dev->descriptor.idProduct ==0x0004 ) { +if (le16_to_cpu (dev->descriptor.idVendor) ==0x03e8 && +le16_to_cpu (dev->descriptor.idProduct) ==0x0004 ) { camera_name="Endpoints/Aox SE401" ; - }else if (dev->descriptor.idVendor ==0x0471 && - dev->descriptor.idProduct ==0x030b ) { + }else if (le16_to_cpu (dev->descriptor.idVendor) ==0x0471 && +le16_to_cpu (dev->descriptor.idProduct) ==0x030b ) { camera_name="Philips PCVC665K" ; - }else if (dev->descriptor.idVendor ==0x047d && - dev->descriptor.idProduct ==0x5001 ) { + }else if (le16_to_cpu (dev->descriptor.idVendor) ==0x047d && +le16_to_cpu (dev->descriptor.idProduct) ==0x5001 ) { camera_name="Kensington VideoCAM 67014" ; - }else if (dev->descriptor.idVendor ==0x047d && - dev->descriptor.idProduct ==0x5002 ) { + }else if (le16_to_cpu (dev->descriptor.idVendor) ==0x047d && +le16_to_cpu (dev->descriptor.idProduct) ==0x5002 ) { camera_name="Kensington VideoCAM 6701(5/7)" ; - }else if (dev->descriptor.idVendor ==0x047d && - dev->descriptor.idProduct ==0x5003 ) { + }else if (le16_to_cpu (dev->descriptor.idVendor) ==0x047d && +le16_to_cpu (dev->descriptor.idProduct) ==0x5003 ) { camera_name="Kensington VideoCAM 67016" ; button=0 ; }else
@@ -1354,7 +1354,7 @@ se401->iface = interface->bInterfaceNumber; se401->camera_name = camera_name; -info ("firmware version: %02x" , dev->descriptor.bcdDevice &255 ); +info ("firmware version: %02x" ,le16_to_cpu (dev->descriptor.bcdDevice) &255 );if (se401_init (se401, button)) {kfree (se401);
drivers/usb/media/sn9c102_core.c +2 -2
@@ -2496,8 +2496,8 @@ n =sizeof (sn9c102_id_table)/sizeof (sn9c102_id_table[0 ]);for (i =0 ; i < n-1 ; i++) -if (udev->descriptor.idVendor==sn9c102_id_table[i].idVendor && - udev->descriptor.idProduct==sn9c102_id_table[i].idProduct) +if (le16_to_cpu (udev->descriptor.idVendor) == sn9c102_id_table[i].idVendor && +le16_to_cpu (udev->descriptor.idProduct) == sn9c102_id_table[i].idProduct)break ;if (i == n-1 )return -ENODEV ;
drivers/usb/media/sn9c102_tas5110c1b.c +3 -3
@@ -165,9 +165,9 @@sn9c102_attach_sensor (cam, &tas5110c1b);/* Sensor detection is based on USB pid/vid */ -if (tas5110c1b.usbdev->descriptor.idProduct !=0x6001 && - tas5110c1b.usbdev->descriptor.idProduct !=0x6005 && - tas5110c1b.usbdev->descriptor.idProduct !=0x60ab ) +if (le16_to_cpu (tas5110c1b.usbdev->descriptor.idProduct) !=0x6001 && +le16_to_cpu (tas5110c1b.usbdev->descriptor.idProduct) !=0x6005 && +le16_to_cpu (tas5110c1b.usbdev->descriptor.idProduct) !=0x60ab )return -ENODEV ;return 0 ;
drivers/usb/media/sn9c102_tas5130d1b.c +2 -2
@@ -180,8 +180,8 @@sn9c102_attach_sensor (cam, &tas5130d1b);/* Sensor detection is based on USB pid/vid */ -if (tas5130d1b.usbdev->descriptor.idProduct !=0x6025 && - tas5130d1b.usbdev->descriptor.idProduct !=0x60aa ) +if (le16_to_cpu (tas5130d1b.usbdev->descriptor.idProduct) !=0x6025 && +le16_to_cpu (tas5130d1b.usbdev->descriptor.idProduct) !=0x60aa )return -ENODEV ;return 0 ;
drivers/usb/media/stv680.c +2 -1
@@ -1371,7 +1371,8 @@ interface = &intf->altsetting[0 ];/* Is it a STV680? */ -if ((dev->descriptor.idVendor ==USB_PENCAM_VENDOR_ID ) && (dev->descriptor.idProduct ==USB_PENCAM_PRODUCT_ID )) { +if ((le16_to_cpu (dev->descriptor.idVendor) ==USB_PENCAM_VENDOR_ID ) && + (le16_to_cpu (dev->descriptor.idProduct) ==USB_PENCAM_PRODUCT_ID )) { camera_name ="STV0680" ;PDEBUG (0 ,"STV(i): STV0680 camera found." ); }else {
drivers/usb/media/ultracam.c +2 -6
@@ -524,12 +524,8 @@if (dev->descriptor.bNumConfigurations !=1 )return -ENODEV ; -/* Is it an IBM camera? */ -if ((dev->descriptor.idVendor !=ULTRACAM_VENDOR_ID ) || - (dev->descriptor.idProduct !=ULTRACAM_PRODUCT_ID )) -return -ENODEV ; - -info ("IBM Ultra camera found (rev. 0x%04x)" , dev->descriptor.bcdDevice); +info ("IBM Ultra camera found (rev. 0x%04x)" , +le16_to_cpu (dev->descriptor.bcdDevice));/* Validate found interface: must have one ISO endpoint */ nas = intf->num_altsetting;
drivers/usb/media/vicam.c +0 -6
@@ -1281,12 +1281,6 @@const struct usb_endpoint_descriptor *endpoint;struct vicam_camera *cam; -/* See if the device offered us matches what we can accept */ -if ((dev->descriptor.idVendor !=USB_VICAM_VENDOR_ID ) || - (dev->descriptor.idProduct !=USB_VICAM_PRODUCT_ID )) { -return -ENODEV ; - } -printk (KERN_INFO "ViCam based webcam connected\n" ); interface = intf->cur_altsetting;
drivers/usb/media/w9968cf.c +4 -4
@@ -3516,11 +3516,11 @@u8 sc =0 ;/* number of simultaneous cameras */ static unsigned short dev_nr =0 ;/* we are handling device number n */ -if (udev->descriptor.idVendor == winbond_id_table[0 ].idVendor && - udev->descriptor.idProduct == winbond_id_table[0 ].idProduct) +if (le16_to_cpu (udev->descriptor.idVendor) == winbond_id_table[0 ].idVendor && +le16_to_cpu (udev->descriptor.idProduct) == winbond_id_table[0 ].idProduct) mod_id =W9968CF_MOD_CLVBWGP ;/* see camlist[] table */ -else if (udev->descriptor.idVendor == winbond_id_table[1 ].idVendor && - udev->descriptor.idProduct == winbond_id_table[1 ].idProduct) +else if (le16_to_cpu (udev->descriptor.idVendor) == winbond_id_table[1 ].idVendor && +le16_to_cpu (udev->descriptor.idProduct) == winbond_id_table[1 ].idProduct) mod_id =W9968CF_MOD_GENERIC ;/* see camlist[] table */ else return -ENODEV ;
drivers/usb/misc/auerswald.c +3 -6
@@ -1931,11 +1931,8 @@int ret;dbg ("probe: vendor id 0x%x, device id 0x%x" , - usbdev->descriptor.idVendor, usbdev->descriptor.idProduct); - -/* See if the device offered us matches that we can accept */ -if (usbdev->descriptor.idVendor !=ID_AUERSWALD ) -return -ENODEV ; +le16_to_cpu (usbdev->descriptor.idVendor), +le16_to_cpu (usbdev->descriptor.idProduct));/* we use only the first -and only- interface */ if (intf->altsetting->desc.bInterfaceNumber !=0 )
@@ -1969,7 +1966,7 @@ cp->dtindex = intf->minor;/* Get the usb version of the device */ - cp->version = cp->usbdev->descriptor.bcdDevice; + cp->version =le16_to_cpu (cp->usbdev->descriptor.bcdDevice);dbg ("Version is %X" , cp->version);/* allow some time to settle the device */
drivers/usb/misc/emi26.c +3 -5
@@ -213,11 +213,9 @@struct usb_device *dev =interface_to_usbdev (intf);info ("%s start" , __FUNCTION__); - -if ((dev->descriptor.idVendor ==EMI26_VENDOR_ID ) && (dev->descriptor.idProduct ==EMI26_PRODUCT_ID )) { -emi26_load_firmware (dev); - } - + +emi26_load_firmware (dev); +/* do not return the driver context, let real audio driver do that */ return -EIO ; }
drivers/usb/misc/emi62.c +2 -4
@@ -255,10 +255,8 @@info ("%s start" , __FUNCTION__); -if ((dev->descriptor.idVendor ==EMI62_VENDOR_ID ) && (dev->descriptor.idProduct ==EMI62_PRODUCT_ID )) { -emi62_load_firmware (dev); - } - +emi62_load_firmware (dev); +/* do not return the driver context, let real audio driver do that */ return -EIO ; }
drivers/usb/misc/legousbtower.c +0 -7
@@ -859,13 +859,6 @@info ("udev is NULL." ); } -/* See if the device offered us matches what we can accept */ -if ((udev->descriptor.idVendor !=LEGO_USB_TOWER_VENDOR_ID ) || - (udev->descriptor.idProduct !=LEGO_USB_TOWER_PRODUCT_ID )) { -return -ENODEV ; - } - -/* allocate memory for our device state and intialize it */ dev =kmalloc (sizeof (struct lego_usb_tower ),GFP_KERNEL );
drivers/usb/misc/usblcd.c +9 -6
@@ -74,7 +74,7 @@ unsigned long arg) {struct lcd_usb_data *lcd = &lcd_instance; -int i; +u16 bcdDevice;char buf[30 ];/* Sanity check to make sure lcd is connected, powered, etc */
@@ -85,9 +85,12 @@switch (cmd) {case IOCTL_GET_HARD_VERSION : - i = (lcd->lcd_dev)->descriptor.bcdDevice; -sprintf (buf,"%1d%1d.%1d%1d" ,(i &0xF000 )>>12 ,(i &0xF00 )>>8 , - (i &0xF0 )>>4 ,(i &0xF )); + bcdDevice =le16_to_cpu ((lcd->lcd_dev)->descriptor.bcdDevice); +sprintf (buf,"%1d%1d.%1d%1d" , + (bcdDevice &0xF000 )>>12 , + (bcdDevice &0xF00 )>>8 , + (bcdDevice &0xF0 )>>4 , + (bcdDevice &0xF ));if (copy_to_user ((void __user *)arg,buf,strlen (buf))!=0 )return -EFAULT ;break ;
@@ -258,7 +261,7 @@int i;int retval; -if (dev->descriptor.idProduct !=0x0001 ) { +if (le16_to_cpu (dev->descriptor.idProduct) !=0x0001 ) {warn (KERN_INFO "USBLCD model not supported." );return -ENODEV ; }
@@ -268,7 +271,7 @@return -ENODEV ; } - i = dev->descriptor.bcdDevice; + i =le16_to_cpu (dev->descriptor.bcdDevice); info("USBLCD Version %1d%1d.%1d%1d found at address %d", (i & 0xF000)>>12,(i & 0xF00)>>8,(i & 0xF0)>>4,(i & 0xF),
drivers/usb/misc/usbtest.c +5 -5
@@ -636,7 +636,7 @@ }/* and sometimes [9.2.6.6] speed dependent descriptors */ -if (udev->descriptor.bcdUSB ==0x0200 ) {/* pre-swapped */ +if (le16_to_cpu (udev->descriptor.bcdUSB) ==0x0200 ) {struct usb_qualifier_descriptor *d =NULL ;/* device qualifier [9.6.2] */
@@ -1842,13 +1842,13 @@/* specify devices by module parameters? */ if (id->match_flags ==0 ) {/* vendor match required, product match optional */ -if (!vendor || udev->descriptor.idVendor != (u16 )vendor) +if (!vendor ||le16_to_cpu (udev->descriptor.idVendor) != (u16 )vendor)return -ENODEV ; -if (product && udev->descriptor.idProduct != (u16 )product) +if (product &&le16_to_cpu (udev->descriptor.idProduct) != (u16 )product)return -ENODEV ;dbg ("matched module params, vend=0x%04x prod=0x%04x" , - udev->descriptor.idVendor, - udev->descriptor.idProduct); +le16_to_cpu (udev->descriptor.idVendor), +le16_to_cpu (udev->descriptor.idProduct)); }#endif
drivers/usb/misc/uss720.c +2 -1
@@ -544,7 +544,8 @@int i;printk (KERN_DEBUG "uss720: probe: vendor id 0x%x, device id 0x%x\n" , - usbdev->descriptor.idVendor, usbdev->descriptor.idProduct); +le16_to_cpu (usbdev->descriptor.idVendor), +le16_to_cpu (usbdev->descriptor.idProduct));/* our known interfaces have 3 alternate settings */ if (intf->num_altsetting !=3 )
drivers/usb/net/catc.c +3 -2
@@ -800,8 +800,9 @@ }/* The F5U011 has the same vendor/product as the netmate but a device version of 0x130 */ -if (usbdev->descriptor.idVendor ==0x0423 && usbdev->descriptor.idProduct ==0xa && - catc->usbdev->descriptor.bcdDevice ==0x0130 ) { +if (le16_to_cpu (usbdev->descriptor.idVendor) ==0x0423 && +le16_to_cpu (usbdev->descriptor.idProduct) ==0xa && +le16_to_cpu (catc->usbdev->descriptor.bcdDevice) ==0x0130 ) {dbg ("Testing for f5u011" ); catc->is_f5u011 =1 ;atomic_set (&catc->recq_sz,0 );
drivers/usb/net/kaweth.c +4 -4
@@ -903,9 +903,9 @@kaweth_dbg ("Kawasaki Device Probe (Device number:%d): 0x%4.4x:0x%4.4x:0x%4.4x" , dev->devnum, - (int )dev->descriptor.idVendor, - (int )dev->descriptor.idProduct, - (int )dev->descriptor.bcdDevice); +le16_to_cpu (dev->descriptor.idVendor), +le16_to_cpu (dev->descriptor.idProduct), +le16_to_cpu (dev->descriptor.bcdDevice));kaweth_dbg ("Device at %p" , dev);
@@ -933,7 +933,7 @@* downloaded. Don't try to do it again, or we'll hang the device. */ -if (dev->descriptor.bcdDevice >>8 ) { +if (le16_to_cpu (dev->descriptor.bcdDevice) >>8 ) {kaweth_info ("Firmware present in device." ); }else {/* Download the firmware */
drivers/usb/serial/belkin_sa.c +2 -2
@@ -181,8 +181,8 @@ priv->last_lsr =0 ; priv->last_msr =0 ;/* see comments at top of file */ - priv->bad_flow_control = (dev->descriptor.bcdDevice <=0x0206 ) ?1 :0 ; -info ("bcdDevice: %04x, bfc: %d" , dev->descriptor.bcdDevice, priv->bad_flow_control); + priv->bad_flow_control = (le16_to_cpu (dev->descriptor.bcdDevice) <=0x0206 ) ?1 :0 ; +info ("bcdDevice: %04x, bfc: %d" ,le16_to_cpu (dev->descriptor.bcdDevice), priv->bad_flow_control);init_waitqueue_head (&serial->port[0 ]->write_wait);usb_set_serial_port_data (serial->port[0 ], priv);
drivers/usb/serial/io_edgeport.c +2 -2
@@ -659,7 +659,7 @@memset (product_info,0 ,sizeof (struct edgeport_product_info )); - product_info->ProductId = (__u16)(edge_serial->serial->dev->descriptor.idProduct & ~ION_DEVICE_ID_80251_NETCHIP ); + product_info->ProductId = (__u16)(le16_to_cpu (edge_serial->serial->dev->descriptor.idProduct) & ~ION_DEVICE_ID_80251_NETCHIP ); product_info->NumPorts = edge_serial->manuf_descriptor.NumPorts; product_info->ProdInfoVer =0 ;
@@ -675,7 +675,7 @@memcpy (product_info->ManufactureDescDate, edge_serial->manuf_descriptor.DescDate,sizeof (edge_serial->manuf_descriptor.DescDate));// check if this is 2nd generation hardware -if (edge_serial->serial->dev->descriptor.idProduct &ION_DEVICE_ID_80251_NETCHIP ) { +if (le16_to_cpu (edge_serial->serial->dev->descriptor.idProduct) &ION_DEVICE_ID_80251_NETCHIP ) { product_info->FirmwareMajorVersion = OperationalCodeImageVersion_GEN2.MajorVersion; product_info->FirmwareMinorVersion = OperationalCodeImageVersion_GEN2.MinorVersion; product_info->FirmwareBuildNumber =cpu_to_le16 (OperationalCodeImageVersion_GEN2.BuildNumber);
drivers/usb/serial/io_ti.c +2 -2
@@ -1342,9 +1342,9 @@if (status)return status; -if (serial->serial->dev->descriptor.idVendor !=USB_VENDOR_ID_ION ) { +if (le16_to_cpu (serial->serial->dev->descriptor.idVendor) !=USB_VENDOR_ID_ION ) {dbg ("%s - VID = 0x%x" , __FUNCTION__, - serial->serial->dev->descriptor.idVendor); +le16_to_cpu (serial->serial->dev->descriptor.idVendor)); serial->TI_I2C_Type =DTK_ADDR_SPACE_I2C_TYPE_II ; goto StayInBootMode; }
drivers/usb/serial/keyspan.c +6 -6
@@ -1174,16 +1174,16 @@char *fw_name;dbg ("Keyspan startup version %04x product %04x" , - serial->dev->descriptor.bcdDevice, - serial->dev->descriptor.idProduct); +le16_to_cpu (serial->dev->descriptor.bcdDevice), +le16_to_cpu (serial->dev->descriptor.idProduct)); -if ((serial->dev->descriptor.bcdDevice &0x8000 ) !=0x8000 ) { +if ((le16_to_cpu (serial->dev->descriptor.bcdDevice) &0x8000 ) !=0x8000 ) {dbg ("Firmware already loaded. Quitting." );return (1 ); }/* Select firmware image on the basis of idProduct */ -switch (serial->dev->descriptor.idProduct) { +switch (le16_to_cpu (serial->dev->descriptor.idProduct)) {case keyspan_usa28_pre_product_id: record = &keyspan_usa28_firmware[0 ]; fw_name ="USA28" ;
@@ -2248,10 +2248,10 @@dbg ("%s" , __FUNCTION__);for (i =0 ; (d_details = keyspan_devices[i]) !=NULL ; ++i) -if (d_details->product_id == serial->dev->descriptor.idProduct) +if (d_details->product_id ==le16_to_cpu (serial->dev->descriptor.idProduct))break ;if (d_details ==NULL ) { -dev_err (&serial->dev->dev,"%s - unknown product id %x\n" , __FUNCTION__, serial->dev->descriptor.idProduct); +dev_err (&serial->dev->dev,"%s - unknown product id %x\n" , __FUNCTION__,le16_to_cpu (serial->dev->descriptor.idProduct));return 1 ; }
drivers/usb/serial/keyspan_pda.c +3 -3
@@ -713,12 +713,12 @@ response =ezusb_set_reset (serial,1 );#ifdef KEYSPAN -if (serial->dev->descriptor.idVendor ==KEYSPAN_VENDOR_ID ) +if (le16_to_cpu (serial->dev->descriptor.idVendor) ==KEYSPAN_VENDOR_ID ) record = &keyspan_pda_firmware[0 ];#endif #ifdef XIRCOM -if ((serial->dev->descriptor.idVendor ==XIRCOM_VENDOR_ID ) || - (serial->dev->descriptor.idVendor ==ENTREGRA_VENDOR_ID )) +if ((le16_to_cpu (serial->dev->descriptor.idVendor) ==XIRCOM_VENDOR_ID ) || + (le16_to_cpu (serial->dev->descriptor.idVendor) ==ENTREGRA_VENDOR_ID )) record = &xircom_pgs_firmware[0 ];#endif if (record ==NULL ) {
drivers/usb/serial/kobil_sct.c +1 -1
@@ -155,7 +155,7 @@ priv->filled =0 ; priv->cur_pos =0 ; - priv->device_type = serial->product; + priv->device_type =le16_to_cpu (serial->dev->descriptor.idProduct); priv->line_state =0 ;switch (priv->device_type){
drivers/usb/serial/mct_u232.c +5 -4
@@ -173,9 +173,10 @@* we do not know how to support. We ignore them for the moment. * XXX Rate-limit the error message, it's user triggerable. */ -static int mct_u232_calculate_baud_rate (struct usb_serial *serial,int value) { -if (serial->dev->descriptor.idProduct ==MCT_U232_SITECOM_PID - || serial->dev->descriptor.idProduct ==MCT_U232_BELKIN_F5U109_PID ) { +static int mct_u232_calculate_baud_rate (struct usb_serial *serial,int value) +{ +if (le16_to_cpu (serial->dev->descriptor.idProduct) ==MCT_U232_SITECOM_PID + ||le16_to_cpu (serial->dev->descriptor.idProduct) ==MCT_U232_BELKIN_F5U109_PID ) {switch (value) {case B300 :return 0x01 ;case B600 :return 0x02 ;/* this one not tested */
@@ -403,7 +404,7 @@* it seems to be able to accept only 16 bytes (and that's what * SniffUSB says too...) */ -if (serial->dev->descriptor.idProduct ==MCT_U232_SITECOM_PID ) +if (le16_to_cpu (serial->dev->descriptor.idProduct) ==MCT_U232_SITECOM_PID ) port->bulk_out_size =16 ;/* Do a defined restart: the normal serial device seems to
drivers/usb/serial/ti_usb_3410_5052.c +4 -1
@@ -407,7 +407,10 @@int i; -dbg ("%s - product 0x%4X, num configurations %d, configuration value %d" , __FUNCTION__, dev->descriptor.idProduct, dev->descriptor.bNumConfigurations, dev->actconfig->desc.bConfigurationValue); +dbg ("%s - product 0x%4X, num configurations %d, configuration value %d" , + __FUNCTION__,le16_to_cpu (dev->descriptor.idProduct), + dev->descriptor.bNumConfigurations, + dev->actconfig->desc.bConfigurationValue);/* create device structure */ tdev =kmalloc (sizeof (struct ti_device ),GFP_KERNEL );
drivers/usb/serial/usb-serial.c +7 -7
@@ -721,7 +721,9 @@if (serial->type->owner) length +=sprintf (page+length," module:%s" ,module_name (serial->type->owner)); length +=sprintf (page+length," name:\"%s\"" , serial->type->name); - length +=sprintf (page+length," vendor:%04x product:%04x" , serial->vendor, serial->product); + length +=sprintf (page+length," vendor:%04x product:%04x" , +le16_to_cpu (serial->dev->descriptor.idVendor), +le16_to_cpu (serial->dev->descriptor.idProduct)); length +=sprintf (page+length," num_ports:%d" , serial->num_ports); length +=sprintf (page+length," port:%d" , i - serial->minor +1 );
@@ -834,8 +836,6 @@ serial->dev =usb_get_dev (dev); serial->type = type; serial->interface = interface; - serial->vendor = dev->descriptor.idVendor; - serial->product = dev->descriptor.idProduct;kref_init (&serial->kref);return serial;
@@ -959,10 +959,10 @@#if defined(CONFIG_USB_SERIAL_PL2303 ) || defined(CONFIG_USB_SERIAL_PL2303_MODULE )/* BEGIN HORRIBLE HACK FOR PL2303 */ /* this is needed due to the looney way its endpoints are set up */ -if (((dev->descriptor.idVendor ==PL2303_VENDOR_ID ) && - (dev->descriptor.idProduct ==PL2303_PRODUCT_ID )) || - ((dev->descriptor.idVendor ==ATEN_VENDOR_ID ) && - (dev->descriptor.idProduct ==ATEN_PRODUCT_ID ))) { +if (((le16_to_cpu (dev->descriptor.idVendor) ==PL2303_VENDOR_ID ) && + (le16_to_cpu (dev->descriptor.idProduct) ==PL2303_PRODUCT_ID )) || + ((le16_to_cpu (dev->descriptor.idVendor) ==ATEN_VENDOR_ID ) && + (le16_to_cpu (dev->descriptor.idProduct) ==ATEN_PRODUCT_ID ))) {if (interface != dev->actconfig->interface[0 ]) {/* check out the endpoints of the other interface*/ iface_desc = dev->actconfig->interface[0 ]->cur_altsetting;
drivers/usb/serial/usb-serial.h +0 -4
@@ -148,8 +148,6 @@* @num_interrupt_out: number of interrupt out endpoints we have * @num_bulk_in: number of bulk in endpoints we have * @num_bulk_out: number of bulk out endpoints we have -* @vendor: vendor id of this device -* @product: product id of this device * @port: array of struct usb_serial_port structures for the different ports. * @private: place to put any driver specific information that is needed. The * usb-serial driver is required to manage this data, the usb-serial core
@@ -167,8 +165,6 @@char num_interrupt_out;char num_bulk_in;char num_bulk_out; -__u16 vendor; -__u16 product;struct usb_serial_port * port[MAX_NUM_PORTS ];struct kref kref;void * private;
drivers/usb/serial/visor.c +2 -2
@@ -926,8 +926,8 @@/* Only do this endpoint hack for the Handspring devices with * interrupt in endpoints, which for now are the Treo devices. */ -if (!((serial->dev->descriptor.idVendor ==HANDSPRING_VENDOR_ID ) || - (serial->dev->descriptor.idVendor ==KYOCERA_VENDOR_ID )) || +if (!((le16_to_cpu (serial->dev->descriptor.idVendor) ==HANDSPRING_VENDOR_ID ) || + (le16_to_cpu (serial->dev->descriptor.idVendor) ==KYOCERA_VENDOR_ID )) || (serial->num_interrupt_in ==0 )) goto generic_startup;
drivers/usb/storage/scsiglue.c +1 -1
@@ -118,7 +118,7 @@* works okay and that's what Windows does. But we'll be * conservative; people can always use the sysfs interface to * increase max_sectors. */ -if (us->pusb_dev->descriptor.idVendor ==USB_VENDOR_ID_GENESYS && +if (le16_to_cpu (us->pusb_dev->descriptor.idVendor) ==USB_VENDOR_ID_GENESYS && sdev->request_queue->max_sectors >64 )blk_queue_max_sectors (sdev->request_queue,64 );
drivers/usb/storage/transport.c +1 -1
@@ -994,7 +994,7 @@/* Genesys Logic interface chips need a 100us delay between the * command phase and the data phase. Some devices need a little * more than that, probably because of clock rate inaccuracies. */ -if (us->pusb_dev->descriptor.idVendor ==USB_VENDOR_ID_GENESYS ) +if (le16_to_cpu (us->pusb_dev->descriptor.idVendor) ==USB_VENDOR_ID_GENESYS )udelay (110 );if (transfer_length) {
drivers/usb/storage/usb.c +11 -9
@@ -263,16 +263,17 @@ available from the device."). */memset (data+8 ,0 ,28 ); }else { +u16 bcdDevice =le16_to_cpu (us->pusb_dev->descriptor.bcdDevice);memcpy (data+8 , us->unusual_dev->vendorName,strlen (us->unusual_dev->vendorName) >8 ?8 :strlen (us->unusual_dev->vendorName));memcpy (data+16 , us->unusual_dev->productName,strlen (us->unusual_dev->productName) >16 ?16 :strlen (us->unusual_dev->productName)); - data[32 ] =0x30 + ((us->pusb_dev->descriptor.bcdDevice>>12 ) &0x0F ); - data[33 ] =0x30 + ((us->pusb_dev->descriptor.bcdDevice>>8 ) &0x0F ); - data[34 ] =0x30 + ((us->pusb_dev->descriptor.bcdDevice>>4 ) &0x0F ); - data[35 ] =0x30 + ((us->pusb_dev->descriptor.bcdDevice) &0x0F ); + data[32 ] =0x30 + ((bcdDevice>>12 ) &0x0F ); + data[33 ] =0x30 + ((bcdDevice>>8 ) &0x0F ); + data[34 ] =0x30 + ((bcdDevice>>4 ) &0x0F ); + data[35 ] =0x30 + ((bcdDevice) &0x0F ); }usb_stor_set_xfer_buf (data, data_len, us->srb);
@@ -436,9 +437,9 @@ us->pusb_intf = intf; us->ifnum = intf->cur_altsetting->desc.bInterfaceNumber;US_DEBUGP ("Vendor: 0x%04x, Product: 0x%04x, Revision: 0x%04x\n" , - us->pusb_dev->descriptor.idVendor, - us->pusb_dev->descriptor.idProduct, - us->pusb_dev->descriptor.bcdDevice); +le16_to_cpu (us->pusb_dev->descriptor.idVendor), +le16_to_cpu (us->pusb_dev->descriptor.idProduct), +le16_to_cpu (us->pusb_dev->descriptor.bcdDevice));US_DEBUGP ("Interface Subclass: 0x%02x, Protocol: 0x%02x\n" , intf->cur_altsetting->desc.bInterfaceSubClass, intf->cur_altsetting->desc.bInterfaceProtocol);
@@ -507,8 +508,9 @@" has %s in unusual_devs.h\n" " Please send a copy of this message to " "<[email protected]>\n" , - ddesc->idVendor, ddesc->idProduct, - ddesc->bcdDevice, +le16_to_cpu (ddesc->idVendor), +le16_to_cpu (ddesc->idProduct), +le16_to_cpu (ddesc->bcdDevice), idesc->bInterfaceSubClass, idesc->bInterfaceProtocol, msgs[msg]);
include/linux/usb_ch9.h +5 -5
@@ -156,14 +156,14 @@__u8 bLength;__u8 bDescriptorType; -__u16 bcdUSB; +__le16 bcdUSB;__u8 bDeviceClass;__u8 bDeviceSubClass;__u8 bDeviceProtocol;__u8 bMaxPacketSize0; -__u16 idVendor; -__u16 idProduct; -__u16 bcdDevice; +__le16 idVendor; +__le16 idProduct; +__le16 bcdDevice;__u8 iManufacturer;__u8 iProduct;__u8 iSerialNumber;
@@ -297,7 +297,7 @@__u8 bLength;__u8 bDescriptorType; -__u16 bcdUSB; +__le16 bcdUSB;__u8 bDeviceClass;__u8 bDeviceSubClass;__u8 bDeviceProtocol;
sound/usb/usbaudio.c +27 -20
124 lines not on this page · raw message
sound/usb/usbmidi.c +3 -3
@@ -521,7 +521,7 @@struct usb_host_interface *hostif;struct usb_interface_descriptor * intfd; -if (umidi->chip->dev->descriptor.idVendor !=0x0582 ) +if (le16_to_cpu (umidi->chip->dev->descriptor.idVendor) !=0x0582 )return NULL ; intf = umidi->iface;if (!intf || intf->num_altsetting !=2 )
@@ -839,8 +839,8 @@/* TODO: read port name from jack descriptor */ name_format ="%s MIDI %d" ; - vendor = umidi->chip->dev->descriptor.idVendor; - product = umidi->chip->dev->descriptor.idProduct; + vendor =le16_to_cpu (umidi->chip->dev->descriptor.idVendor); + product =le16_to_cpu (umidi->chip->dev->descriptor.idProduct);for (i =0 ; i <ARRAY_SIZE (snd_usbmidi_port_names); ++i) { if (snd_usbmidi_port_names[i].vendor == vendor && snd_usbmidi_port_names[i].product == product &&
sound/usb/usbmixer.c +3 -3
@@ -1490,12 +1490,12 @@ state.buffer = hostif->extra; state.buflen = hostif->extralen; state.ctrlif = ctrlif; - state.vendor = dev->idVendor; - state.product = dev->idProduct; + state.vendor =le16_to_cpu (dev->idVendor); + state.product =le16_to_cpu (dev->idProduct);/* check the mapping table */ for (map = usbmix_ctl_maps; map->vendor; map++) { -if (map->vendor == dev->idVendor && map->product == dev->idProduct) { +if (map->vendor ==le16_to_cpu (dev->idVendor) && map->product ==le16_to_cpu (dev->idProduct)) { state.map = map->map; chip->ignore_ctl_error = map->ignore_ctl_error;break ;
sound/usb/usx2y/usX2Yhwdep.c +2 -2
@@ -133,7 +133,7 @@ };int id =-1 ; -switch (((usX2Ydev_t *)hw->private_data)->chip.dev->descriptor.idProduct) { +switch (le16_to_cpu (((usX2Ydev_t *)hw->private_data)->chip.dev->descriptor.idProduct)) {case USB_ID_US122 : id =USX2Y_TYPE_122 ;break ;
@@ -185,7 +185,7 @@ };struct usb_device *dev =usX2Y (card)->chip.dev;struct usb_interface *iface =usb_ifnum_to_if (dev,0 ); -snd_usb_audio_quirk_t *quirk = dev->descriptor.idProduct ==USB_ID_US428 ? &quirk_2 : &quirk_1; +snd_usb_audio_quirk_t *quirk =le16_to_cpu (dev->descriptor.idProduct) ==USB_ID_US428 ? &quirk_2 : &quirk_1;snd_printdd ("usX2Y_create_usbmidi \n" );return snd_usb_create_midi_interface (&usX2Y (card)->chip, iface, quirk);
sound/usb/usx2y/usbusx2y.c +6 -5
@@ -331,7 +331,8 @@sprintf (card->shortname,"TASCAM " NAME_ALLCAPS "" );sprintf (card->longname,"%s (%x:%x if %d at %03d/%03d)" , card->shortname, - device->descriptor.idVendor, device->descriptor.idProduct, +le16_to_cpu (device->descriptor.idVendor), +le16_to_cpu (device->descriptor.idProduct),0 ,//us428(card)->usbmidi.ifnum, usX2Y (card)->chip.dev->bus->busnum,usX2Y (card)->chip.dev->devnum );
@@ -344,10 +345,10 @@ {int err;snd_card_t * card; -if (device->descriptor.idVendor !=0x1604 || - (device->descriptor.idProduct !=USB_ID_US122 && - device->descriptor.idProduct !=USB_ID_US224 && - device->descriptor.idProduct !=USB_ID_US428 ) || +if (le16_to_cpu (device->descriptor.idVendor) !=0x1604 || + (le16_to_cpu (device->descriptor.idProduct) !=USB_ID_US122 && +le16_to_cpu (device->descriptor.idProduct) !=USB_ID_US224 && +le16_to_cpu (device->descriptor.idProduct) !=USB_ID_US428 ) || !(card =usX2Y_create_card (device)))return NULL ; if ((err = usX2Y_hwdep_new(card, device)) < 0 ||
sound/usb/usx2y/usbusx2yaudio.c +2 -2
@@ -1023,10 +1023,10 @@if (0 > (err =usX2Y_audio_stream_new (card,0xA ,0x8 )))return err; -if (usX2Y (card)->chip.dev->descriptor.idProduct ==USB_ID_US428 ) +if (le16_to_cpu (usX2Y (card)->chip.dev->descriptor.idProduct) ==USB_ID_US428 )if (0 > (err =usX2Y_audio_stream_new (card,0 ,0xA )))return err; -if (usX2Y (card)->chip.dev->descriptor.idProduct !=USB_ID_US122 ) +if (le16_to_cpu (usX2Y (card)->chip.dev->descriptor.idProduct) !=USB_ID_US122 ) err =usX2Y_rate_set (usX2Y (card),44100 );// Lets us428 recognize output-volume settings, disturbs us122. return err; }
ChangeSet 1.1938.444.14, 2004/12/20 16:17:10-08:00, [email protected]
USB: change wTotalLength field in struct usb_config_descriptor to be __le16
Another step in the quest to get all USB data structures to be native endian.
arch/mips/au1000/common/usbdev.c | 4 ++-- drivers/usb/class/audio.c | 2 +- drivers/usb/class/usb-midi.c | 4 ++-- drivers/usb/core/config.c | 2 +- drivers/usb/core/devio.c | 2 +- drivers/usb/core/hcd.c | 4 ++-- drivers/usb/core/hub.c | 8 ++++---- drivers/usb/core/inode.c | 2 +- drivers/usb/host/hc_crisv10.c | 2 +- drivers/usb/misc/usbtest.c | 5 ++--- include/linux/usb_ch9.h | 2 +- sound/usb/usbaudio.c | 7 ++++--- sound/usb/usbmidi.c | 2 +- 13 files changed, 23 insertions(+), 23 deletions(-)
arch/mips/au1000/common/usbdev.c +2 -2
@@ -766,7 +766,7 @@ dev->conf_desc), 0); }else { -int len = dev->conf_desc->wTotalLength; +int len =le16_to_cpu (dev->conf_desc->wTotalLength);dbg ("sending whole config desc," " size=%d, our size=%d" , desc_len, len); desc_len = desc_len > len ? len : desc_len;
@@ -1407,7 +1407,7 @@/* * initialize the full config descriptor */ - usbdev.full_conf_desc = fcd =kmalloc (config_desc->wTotalLength, + usbdev.full_conf_desc = fcd =kmalloc (le16_to_cpu (config_desc->wTotalLength),ALLOC_FLAGS );if (!fcd) {err ("failed to alloc full config descriptor" );
drivers/usb/class/audio.c +1 -1
@@ -3801,7 +3801,7 @@* find which configuration number is active */ buffer = dev->rawdescriptors[dev->actconfig - dev->config]; - buflen = dev->actconfig->desc.wTotalLength; + buflen =le16_to_cpu (dev->actconfig->desc.wTotalLength); s =usb_audio_parsecontrol (dev, buffer, buflen, intf->altsetting->desc.bInterfaceNumber);if (s) {usb_set_intfdata (intf, s);
drivers/usb/class/usb-midi.c +2 -2
@@ -1804,7 +1804,7 @@ i = d->actconfig - d->config; buffer = d->rawdescriptors[i]; - bufSize = d->actconfig->desc.wTotalLength; + bufSize =le16_to_cpu (d->actconfig->desc.wTotalLength); u =parse_descriptor ( d, buffer, bufSize, ifnum, alts,1 );if ( u ==NULL ) {
@@ -1892,7 +1892,7 @@ i = d->actconfig - d->config; buffer = d->rawdescriptors[i]; - bufSize = d->actconfig->desc.wTotalLength; + bufSize =le16_to_cpu (d->actconfig->desc.wTotalLength); u =parse_descriptor ( d, buffer, bufSize, ifnum, alts,0 );if ( u ==NULL ) {
drivers/usb/core/config.c +1 -1
@@ -320,7 +320,7 @@ }/* for ((buffer2 = buffer, size2 = size); ...) */ size = buffer2 - buffer; - config->desc.wTotalLength = buffer2 - buffer0; + config->desc.wTotalLength =cpu_to_le16 (buffer2 - buffer0);if (n != nintf) dev_warn(ddev, "config %d has %d interface%s, different from "
drivers/usb/core/devio.c +1 -1
@@ -148,7 +148,7 @@/* The descriptor may claim to be longer than it * really is. Here is the actual allocated length. */ unsigned alloclen = - dev->config[i].desc.wTotalLength; +le16_to_cpu (dev->config[i].desc.wTotalLength); len = length - (*ppos - pos);if (len > nbytes)
drivers/usb/core/hcd.c +2 -2
@@ -170,7 +170,7 @@/* one configuration */ 0x09 ,/* __u8 bLength; */ 0x02 ,/* __u8 bDescriptorType; Configuration */ -0x19 ,0x00 ,/* __u16 wTotalLength; */ +0x19 ,0x00 ,/* __le16 wTotalLength; */ 0x01 ,/* __u8 bNumInterfaces; (1) */ 0x01 ,/* __u8 bConfigurationValue; */ 0x00, /* __u8 iConfiguration; */
@@ -217,7 +217,7 @@/* one configuration */ 0x09 ,/* __u8 bLength; */ 0x02 ,/* __u8 bDescriptorType; Configuration */ -0x19 ,0x00 ,/* __u16 wTotalLength; */ +0x19 ,0x00 ,/* __le16 wTotalLength; */ 0x01 ,/* __u8 bNumInterfaces; (1) */ 0x01 ,/* __u8 bConfigurationValue; */ 0x00, /* __u8 iConfiguration; */
drivers/usb/core/hub.c +4 -4
@@ -1189,7 +1189,7 @@/* descriptor may appear anywhere in config */ if (__usb_get_extra_descriptor (udev->rawdescriptors[0 ], - udev->config[0 ].desc.wTotalLength, +le16_to_cpu (udev->config[0 ].desc.wTotalLength),USB_DT_OTG , (void **) &desc) ==0 ) {if (desc->bmAttributes &USB_OTG_HNP ) {unsigned port1;
@@ -2828,8 +2828,8 @@struct usb_config_descriptor *buf;for (index =0 ; index < udev->descriptor.bNumConfigurations; index++) { -if (len < udev->config[index].desc.wTotalLength) - len = udev->config[index].desc.wTotalLength; +if (len <le16_to_cpu (udev->config[index].desc.wTotalLength)) + len =le16_to_cpu (udev->config[index].desc.wTotalLength); } buf =kmalloc (len,SLAB_KERNEL );if (buf ==0 ) {
@@ -2839,7 +2839,7 @@ }for (index =0 ; index < udev->descriptor.bNumConfigurations; index++) {int length; -int old_length = udev->config[index].desc.wTotalLength; +int old_length =le16_to_cpu (udev->config[index].desc.wTotalLength); length =usb_get_descriptor (udev,USB_DT_CONFIG , index, buf, old_length);
drivers/usb/core/inode.c +1 -1
@@ -695,7 +695,7 @@for (i =0 ; i < dev->descriptor.bNumConfigurations; ++i) {struct usb_config_descriptor *config = (struct usb_config_descriptor *)dev->rawdescriptors[i]; - i_size +=le16_to_cpu ((__force __le16 )config->wTotalLength); + i_size +=le16_to_cpu (config->wTotalLength); }if (dev->usbfs_dentry->d_inode) dev->usbfs_dentry->d_inode->i_size = i_size;
drivers/usb/host/hc_crisv10.c +1 -1
@@ -136,7 +136,7 @@ {0x09 ,/* __u8 bLength; */ 0x02 ,/* __u8 bDescriptorType; Configuration */ -0x19 ,/* __u16 wTotalLength; */ +0x19 ,/* __le16 wTotalLength; */ 0x00 ,0x01 ,/* __u8 bNumInterfaces; */ 0x01, /* __u8 bConfigurationValue; */
drivers/usb/misc/usbtest.c +2 -3
@@ -527,10 +527,9 @@return 0 ; } -le16_to_cpus (&config->wTotalLength); -if (config->wTotalLength == len)/* read it all */ +if (le16_to_cpu (config->wTotalLength) == len)/* read it all */ return 1 ; -if (config->wTotalLength >=TBUF_SIZE )/* max partial read */ +if (le16_to_cpu (config->wTotalLength) >=TBUF_SIZE )/* max partial read */ return 1 ;dbg ("bogus config descriptor read size" );return 0 ;
include/linux/usb_ch9.h +1 -1
@@ -208,7 +208,7 @@__u8 bLength;__u8 bDescriptorType; -__u16 wTotalLength; +__le16 wTotalLength;__u8 bNumInterfaces;__u8 bConfigurationValue;__u8 iConfiguration;
sound/usb/usbaudio.c +4 -3
@@ -2933,8 +2933,8 @@struct usb_host_config *config = dev->actconfig;int err; -if (get_cfg_desc (config)->wTotalLength ==EXTIGY_FIRMWARE_SIZE_OLD || -get_cfg_desc (config)->wTotalLength ==EXTIGY_FIRMWARE_SIZE_NEW ) { +if (le16_to_cpu (get_cfg_desc (config)->wTotalLength) ==EXTIGY_FIRMWARE_SIZE_OLD || +le16_to_cpu (get_cfg_desc (config)->wTotalLength) ==EXTIGY_FIRMWARE_SIZE_NEW ) {snd_printdd ("sending Extigy boot sequence...\n" );/* Send message to force it to reconnect with full interface. */ err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev,0),
@@ -2946,7 +2946,8 @@if (err <0 )snd_printdd ("error usb_get_descriptor: %d\n" , err); err =usb_reset_configuration (dev);if (err <0 )snd_printdd ("error usb_reset_configuration: %d\n" , err); -snd_printdd ("extigy_boot: new boot length = %d\n" ,get_cfg_desc (config)->wTotalLength); +snd_printdd ("extigy_boot: new boot length = %d\n" , +le16_to_cpu (get_cfg_desc (config)->wTotalLength));return -ENODEV ;/* quit this anyway */ }return 0 ;
sound/usb/usbmidi.c +1 -1
@@ -59,7 +59,7 @@__u8 bDescriptorType;__u8 bDescriptorSubtype;__u8 bcdMSC[2 ]; -__u16 wTotalLength; +__le16 wTotalLength; } __attribute__ ((packed));struct usb_ms_endpoint_descriptor {
ChangeSet 1.1938.444.15, 2004/12/20 17:15:36-08:00, [email protected]
USB: change wMaxPacketSize field in struct usb_config_descriptor to be __le16
Yet another step in the quest to get all USB data structures to be native endian.
arch/mips/au1000/common/usbdev.c | 2 - drivers/bluetooth/bfusb.c | 2 - drivers/bluetooth/hci_usb.c | 10 +++---- drivers/char/watchdog/pcwd_usb.c | 2 - drivers/isdn/hisax/hfc_usb.c | 8 ++--- drivers/isdn/hisax/st5481_b.c | 2 - drivers/isdn/hisax/st5481_d.c | 2 - drivers/isdn/hisax/st5481_usb.c | 4 +- drivers/media/dvb/b2c2/b2c2-usb-core.c | 2 - drivers/net/irda/irda-usb.c | 2 - drivers/usb/class/audio.c | 2 - drivers/usb/class/bluetty.c | 6 ++-- drivers/usb/class/cdc-acm.c | 6 ++-- drivers/usb/core/config.c | 1 drivers/usb/core/devices.c | 4 +- drivers/usb/core/hcd.c | 6 ++-- drivers/usb/core/hub.c | 10 +++---- drivers/usb/gadget/dummy_hcd.c | 4 +- drivers/usb/gadget/file_storage.c | 2 - drivers/usb/host/hc_crisv10.c | 4 +- drivers/usb/host/ohci-q.c | 4 +- drivers/usb/image/mdc800.c | 45 +++++++++++++++++++++++++++++---- drivers/usb/input/ati_remote.c | 2 - drivers/usb/media/ibmcam.c | 4 +- drivers/usb/media/konicawc.c | 10 +++---- drivers/usb/media/ov511.c | 2 - drivers/usb/media/ultracam.c | 8 ++--- drivers/usb/misc/auerswald.c | 2 - drivers/usb/misc/legousbtower.c | 4 +- drivers/usb/misc/usbtest.c | 6 ++-- drivers/usb/serial/usb-serial.c | 8 ++--- drivers/usb/usb-skeleton.c | 2 - drivers/w1/dscore.c | 2 - include/linux/usb.h | 2 - include/linux/usb_ch9.h | 2 - sound/usb/usbaudio.c | 8 ++--- sound/usb/usx2y/usbusx2yaudio.c | 4 +- 37 files changed, 115 insertions(+), 81 deletions(-)
arch/mips/au1000/common/usbdev.c +1 -1
@@ -1398,7 +1398,7 @@ epd->bEndpointAddress |= (u8 )ep->address; ep->direction = epd->bEndpointAddress &0x80 ; ep->type = epd->bmAttributes &0x03 ; - ep->max_pkt_size = epd->wMaxPacketSize; + ep->max_pkt_size =le16_to_cpu (epd->wMaxPacketSize);spin_lock_init (&ep->lock); ep->desc = epd; ep->reg = &ep_reg[ep->address];
drivers/bluetooth/bfusb.c +1 -1
@@ -678,7 +678,7 @@ bfusb->udev = udev; bfusb->bulk_in_ep = bulk_in_ep->desc.bEndpointAddress; bfusb->bulk_out_ep = bulk_out_ep->desc.bEndpointAddress; - bfusb->bulk_pkt_size = bulk_out_ep->desc.wMaxPacketSize; + bfusb->bulk_pkt_size =le16_to_cpu (bulk_out_ep->desc.wMaxPacketSize);rwlock_init (&bfusb->lock);
drivers/bluetooth/hci_usb.c +5 -5
@@ -193,7 +193,7 @@BT_DBG ("%s" , husb->hdev->name); - size = husb->intr_in_ep->desc.wMaxPacketSize; + size =le16_to_cpu (husb->intr_in_ep->desc.wMaxPacketSize); buf =kmalloc (size,GFP_ATOMIC );if (!buf)
@@ -268,7 +268,7 @@int err, mtu, size;void *buf; - mtu = husb->isoc_in_ep->desc.wMaxPacketSize; + mtu =le16_to_cpu (husb->isoc_in_ep->desc.wMaxPacketSize); size = mtu *HCI_MAX_ISOC_FRAMES ; buf =kmalloc (size,GFP_ATOMIC );
@@ -525,7 +525,7 @@ urb->transfer_buffer = skb->data; urb->transfer_buffer_length = skb->len; -__fill_isoc_desc (urb, skb->len, husb->isoc_out_ep->desc.wMaxPacketSize); +__fill_isoc_desc (urb, skb->len,le16_to_cpu (husb->isoc_out_ep->desc.wMaxPacketSize)); _urb->priv = skb;return __tx_submit (husb, _urb);
@@ -897,10 +897,10 @@switch (ep->desc.bmAttributes &USB_ENDPOINT_XFERTYPE_MASK ) {case USB_ENDPOINT_XFER_ISOC : -if (ep->desc.wMaxPacketSize < size || +if (le16_to_cpu (ep->desc.wMaxPacketSize) < size || uif->desc.bAlternateSetting != isoc)break ; - size = ep->desc.wMaxPacketSize; + size =le16_to_cpu (ep->desc.wMaxPacketSize); isoc_alts = uif->desc.bAlternateSetting;
drivers/char/watchdog/pcwd_usb.c +1 -1
@@ -615,7 +615,7 @@ usb_pcwd->udev = udev; usb_pcwd->interface = interface; usb_pcwd->interface_number = iface_desc->desc.bInterfaceNumber; - usb_pcwd->intr_size = (endpoint->wMaxPacketSize >8 ? endpoint->wMaxPacketSize :8 ); + usb_pcwd->intr_size = (le16_to_cpu (endpoint->wMaxPacketSize) >8 ?le16_to_cpu (endpoint->wMaxPacketSize) :8 );/* set up the memory buffer's */ if (!(usb_pcwd->intr_buffer =usb_buffer_alloc (udev, usb_pcwd->intr_size,SLAB_ATOMIC , &usb_pcwd->intr_dma))) {
drivers/isdn/hisax/hfc_usb.c +4 -4
@@ -1492,7 +1492,7 @@case USB_ENDPOINT_XFER_INT : context->fifos[cidx].pipe =usb_rcvintpipe (dev, ep->desc.bEndpointAddress); context->fifos[cidx].usb_transfer_mode =USB_INT ; - packet_size = ep->desc.wMaxPacketSize;// remember max packet size + packet_size =le16_to_cpu (ep->desc.wMaxPacketSize);// remember max packet size #ifdef VERBOSE_USB_DEBUG printk (KERN_INFO "HFC-USB: Interrupt-In Endpoint found %d ms(idx:%d cidx:%d)!\n" , ep->desc.bInterval, idx, cidx);
@@ -1504,7 +1504,7 @@else context->fifos[cidx].pipe =usb_sndbulkpipe (dev, ep->desc.bEndpointAddress); context->fifos[cidx].usb_transfer_mode =USB_BULK ; - packet_size = ep->desc.wMaxPacketSize;// remember max packet size + packet_size =le16_to_cpu (ep->desc.wMaxPacketSize);// remember max packet size #ifdef VERBOSE_USB_DEBUG printk (KERN_INFO "HFC-USB: Bulk Endpoint found (idx:%d cidx:%d)!\n" , idx, cidx);
@@ -1516,7 +1516,7 @@else context->fifos[cidx].pipe =usb_sndisocpipe (dev, ep->desc.bEndpointAddress); context->fifos[cidx].usb_transfer_mode =USB_ISOC ; - iso_packet_size = ep->desc.wMaxPacketSize;// remember max packet size + iso_packet_size =le16_to_cpu (ep->desc.wMaxPacketSize);// remember max packet size #ifdef VERBOSE_USB_DEBUG printk (KERN_INFO "HFC-USB: ISO Endpoint found (idx:%d cidx:%d)!\n" , idx, cidx);
@@ -1529,7 +1529,7 @@if (context->fifos[cidx].pipe) { context->fifos[cidx].fifonum = cidx; context->fifos[cidx].hfc = context; - context->fifos[cidx].usb_packet_maxlen = ep->desc.wMaxPacketSize; + context->fifos[cidx].usb_packet_maxlen =le16_to_cpu (ep->desc.wMaxPacketSize); context->fifos[cidx].intervall = ep->desc.bInterval; context->fifos[cidx].skbuff =NULL ;#ifdef VERBOSE_USB_DEBUG
drivers/isdn/hisax/st5481_b.c +1 -1
@@ -274,7 +274,7 @@ endpoint = &altsetting->endpoint[EP_B1_OUT -1 + bcs->channel *2 ];DBG (4 ,"endpoint address=%02x,packet size=%d" , - endpoint->desc.bEndpointAddress, endpoint->desc.wMaxPacketSize); + endpoint->desc.bEndpointAddress,le16_to_cpu (endpoint->desc.wMaxPacketSize));// Allocate memory for 8000bytes/sec + extra bytes if underrun return st5481_setup_isocpipes(b_out->urb, dev,
drivers/isdn/hisax/st5481_d.c +1 -1
@@ -669,7 +669,7 @@ endpoint = &altsetting->endpoint[EP_D_OUT -1 ];DBG (2 ,"endpoint address=%02x,packet size=%d" , - endpoint->desc.bEndpointAddress, endpoint->desc.wMaxPacketSize); + endpoint->desc.bEndpointAddress,le16_to_cpu (endpoint->desc.wMaxPacketSize)); return st5481_setup_isocpipes(d_out->urb, dev, usb_sndisocpipe(dev, endpoint->desc.bEndpointAddress),
drivers/isdn/hisax/st5481_usb.c +2 -2
@@ -268,8 +268,8 @@ }// The descriptor is wrong for some early samples of the ST5481 chip - altsetting->endpoint[3 ].desc.wMaxPacketSize =32 ; - altsetting->endpoint[4 ].desc.wMaxPacketSize =32 ; + altsetting->endpoint[3 ].desc.wMaxPacketSize =__constant_cpu_to_le16 (32 ); + altsetting->endpoint[4 ].desc.wMaxPacketSize =__constant_cpu_to_le16 (32 );// Use alternative setting 3 on interface 0 to have 2B+D if ((status =usb_set_interface (dev,0 ,3 )) <0 ) {
drivers/media/dvb/b2c2/b2c2-usb-core.c +1 -1
@@ -370,7 +370,7 @@static int b2c2_init_usb (struct usb_b2c2_usb *b2c2) { -u16 frame_size = b2c2->uintf->cur_altsetting->endpoint[0 ].desc.wMaxPacketSize; +u16 frame_size =le16_to_cpu (b2c2->uintf->cur_altsetting->endpoint[0 ].desc.wMaxPacketSize);int bufsize =B2C2_USB_NUM_ISO_URB *B2C2_USB_FRAMES_PER_ISO * frame_size,i,j,ret;int buffer_offset =0 ;
drivers/net/irda/irda-usb.c +1 -1
@@ -1220,7 +1220,7 @@ ep = endpoint[i].desc.bEndpointAddress &USB_ENDPOINT_NUMBER_MASK ; dir = endpoint[i].desc.bEndpointAddress &USB_ENDPOINT_DIR_MASK ; attr = endpoint[i].desc.bmAttributes; - psize = endpoint[i].desc.wMaxPacketSize; + psize =le16_to_cpu (endpoint[i].desc.wMaxPacketSize);/* Is it a bulk endpoint ??? */ if (attr ==USB_ENDPOINT_XFER_BULK ) {
drivers/usb/class/audio.c +1 -1
@@ -3717,7 +3717,7 @@if (alt->desc.bNumEndpoints >0 ) {/* Check all endpoints; should they all have a bandwidth of 0 ? */ for (k =0 ; k < alt->desc.bNumEndpoints; k++) { -if (alt->endpoint[k].desc.wMaxPacketSize >0 ) { +if (le16_to_cpu (alt->endpoint[k].desc.wMaxPacketSize) >0 ) {printk (KERN_ERR "usbaudio: device %d audiocontrol interface %u endpoint %d does not have 0 bandwidth at alt[0]\n" , dev->devnum, ctrlif, k);break ; }
drivers/usb/class/bluetty.c +3 -3
@@ -1086,7 +1086,7 @@err ("No free urbs available" ); goto probe_error; } - bluetooth->bulk_in_buffer_size = buffer_size = endpoint->wMaxPacketSize; + bluetooth->bulk_in_buffer_size = buffer_size =le16_to_cpu (endpoint->wMaxPacketSize); bluetooth->bulk_in_endpointAddress = endpoint->bEndpointAddress; bluetooth->bulk_in_buffer =kmalloc (buffer_size,GFP_KERNEL );if (!bluetooth->bulk_in_buffer) {
@@ -1098,7 +1098,7 @@ endpoint = bulk_out_endpoint[0 ]; bluetooth->bulk_out_endpointAddress = endpoint->bEndpointAddress; - bluetooth->bulk_out_buffer_size = endpoint->wMaxPacketSize *2 ; + bluetooth->bulk_out_buffer_size =le16_to_cpu (endpoint->wMaxPacketSize) *2 ; endpoint = interrupt_in_endpoint[0 ]; bluetooth->interrupt_in_urb =usb_alloc_urb (0 ,GFP_KERNEL );
@@ -1106,7 +1106,7 @@err ("No free urbs available" ); goto probe_error; } - bluetooth->interrupt_in_buffer_size = buffer_size = endpoint->wMaxPacketSize; + bluetooth->interrupt_in_buffer_size = buffer_size =le16_to_cpu (endpoint->wMaxPacketSize); bluetooth->interrupt_in_endpointAddress = endpoint->bEndpointAddress; bluetooth->interrupt_in_interval = endpoint->bInterval; bluetooth->interrupt_in_buffer =kmalloc (buffer_size,GFP_KERNEL );
drivers/usb/class/cdc-acm.c +3 -3
@@ -657,9 +657,9 @@ }memset (acm,0 ,sizeof (struct acm )); - ctrlsize = epctrl->wMaxPacketSize; - readsize = epread->wMaxPacketSize; - acm->writesize = epwrite->wMaxPacketSize; + ctrlsize =le16_to_cpu (epctrl->wMaxPacketSize); + readsize =le16_to_cpu (epread->wMaxPacketSize); + acm->writesize =le16_to_cpu (epwrite->wMaxPacketSize); acm->control = control_interface; acm->data = data_interface; acm->minor = minor;
drivers/usb/core/config.c +0 -1
@@ -87,7 +87,6 @@ ++ifp->desc.bNumEndpoints;memcpy (&endpoint->desc, d, n); -le16_to_cpus (&endpoint->desc.wMaxPacketSize);INIT_LIST_HEAD (&endpoint->urb_list);/* Skip over any Class Specific or Vendor Specific descriptors;
drivers/usb/core/devices.c +2 -2
@@ -180,7 +180,7 @@ in = (desc->bEndpointAddress &USB_DIR_IN ); dir = in ?'I' :'O' ;if (speed ==USB_SPEED_HIGH ) { -switch (desc->wMaxPacketSize & (0x03 <<11 )) { +switch (le16_to_cpu (desc->wMaxPacketSize) & (0x03 <<11 )) {case 1 <<11 : bandwidth =2 ;break ;case 2 <<11 : bandwidth =3 ;break ; }
@@ -227,7 +227,7 @@ start +=sprintf (start, format_endpt, desc->bEndpointAddress, dir, desc->bmAttributes, type, - (desc->wMaxPacketSize &0x07ff ) * bandwidth, + (le16_to_cpu (desc->wMaxPacketSize) &0x07ff ) * bandwidth, interval, unit);return start; }
drivers/usb/core/hcd.c +3 -3
@@ -208,7 +208,7 @@0x05 ,/* __u8 ep_bDescriptorType; Endpoint */ 0x81 ,/* __u8 ep_bEndpointAddress; IN Endpoint 1 */ 0x03 ,/* __u8 ep_bmAttributes; Interrupt */ -0x02 ,0x00 ,/* __u16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8) */ +0x02 ,0x00 ,/* __le16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8) */ 0xff /* __u8 ep_bInterval; (255ms -- usb 2.0 spec) */ };
@@ -255,7 +255,7 @@0x05 ,/* __u8 ep_bDescriptorType; Endpoint */ 0x81 ,/* __u8 ep_bEndpointAddress; IN Endpoint 1 */ 0x03 ,/* __u8 ep_bmAttributes; Interrupt */ -0x02 ,0x00 ,/* __u16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8) */ +0x02 ,0x00 ,/* __le16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8) */ 0x0c /* __u8 ep_bInterval; (256ms -- usb 2.0 spec) */ };
@@ -809,7 +809,7 @@down (&usb_bus_list_lock); usb_dev->bus->root_hub = usb_dev; - usb_dev->ep0.desc.wMaxPacketSize =64 ; + usb_dev->ep0.desc.wMaxPacketSize =__constant_cpu_to_le16 (64 ); retval =usb_get_device_descriptor (usb_dev,USB_DT_DEVICE_SIZE );if (retval !=sizeof usb_dev->descriptor) { usb_dev->bus->root_hub =NULL ;
drivers/usb/core/hub.c +5 -5
@@ -2119,17 +2119,17 @@*/ switch (udev->speed) {case USB_SPEED_HIGH :/* fixed at 64 */ - udev->ep0.desc.wMaxPacketSize =64 ; + udev->ep0.desc.wMaxPacketSize =__constant_cpu_to_le16 (64 );break ;case USB_SPEED_FULL :/* 8, 16, 32, or 64 */ /* to determine the ep0 maxpacket size, try to read * the device descriptor to get bMaxPacketSize0 and * then correct our initial guess. */ - udev->ep0.desc.wMaxPacketSize =64 ; + udev->ep0.desc.wMaxPacketSize =__constant_cpu_to_le16 (64 );break ;case USB_SPEED_LOW :/* fixed at 8 */ - udev->ep0.desc.wMaxPacketSize =8 ; + udev->ep0.desc.wMaxPacketSize =__constant_cpu_to_le16 (8 );break ;default : goto fail;
@@ -2263,7 +2263,7 @@ goto fail; i = udev->descriptor.bMaxPacketSize0; -if (udev->ep0.desc.wMaxPacketSize != i) { +if (le16_to_cpu (udev->ep0.desc.wMaxPacketSize) != i) {if (udev->speed !=USB_SPEED_FULL || !(i ==8 || i ==16 || i ==32 || i ==64 )) {dev_err (&udev->dev,"ep0 maxpacket = %d\n" , i);
@@ -2271,7 +2271,7 @@ goto fail; }dev_dbg (&udev->dev,"ep0 maxpacket = %d\n" , i); - udev->ep0.desc.wMaxPacketSize = i; + udev->ep0.desc.wMaxPacketSize =cpu_to_le16 (i);ep0_reinit (udev); }
drivers/usb/gadget/dummy_hcd.c +2 -2
@@ -247,7 +247,7 @@ dum =ep_to_dummy (ep);if (!dum->driver || !is_enabled (dum))return -ESHUTDOWN ; - max = desc->wMaxPacketSize &0x3ff ; + max =le16_to_cpu (desc->wMaxPacketSize) &0x3ff ;/* drivers must not request bad settings, since lower levels * (hardware or its drivers) may not check. some endpoints
@@ -1025,7 +1025,7 @@int tmp;/* high bandwidth mode */ - tmp = ep->desc->wMaxPacketSize; + tmp =le16_to_cpu (ep->desc->wMaxPacketSize); tmp =le16_to_cpu (tmp); tmp = (tmp >>11 ) &0x03 ; tmp *=8 /* applies to entire frame */ ;
drivers/usb/gadget/file_storage.c +1 -1
@@ -3132,7 +3132,7 @@if ((rc =enable_endpoint (fsg, fsg->bulk_out, d)) !=0 ) goto reset; fsg->bulk_out_enabled =1 ; - fsg->bulk_out_maxpacket = d->wMaxPacketSize; + fsg->bulk_out_maxpacket =le16_to_cpu (d->wMaxPacketSize);if (transport_is_cbi ()) { d =ep_desc (fsg->gadget, &fs_intr_in_desc, &hs_intr_in_desc);
drivers/usb/host/hc_crisv10.c +2 -2
@@ -160,7 +160,7 @@0x05 ,/* __u8 ep_bDescriptorType; Endpoint */ 0x81 ,/* __u8 ep_bEndpointAddress; IN Endpoint 1 */ 0x03 ,/* __u8 ep_bmAttributes; Interrupt */ -0x08 ,/* __u16 ep_wMaxPacketSize; 8 Bytes */ +0x08 ,/* __le16 ep_wMaxPacketSize; 8 Bytes */ 0x00 , 0xff /* __u8 ep_bInterval; 255 ms */ };
@@ -4528,7 +4528,7 @@ usb_rh->speed =USB_SPEED_FULL ; usb_rh->devnum =1 ; hc->bus->devnum_next =2 ; - usb_rh->ep0.desc.wMaxPacketSize =64 ; + usb_rh->ep0.desc.wMaxPacketSize =__const_cpu_to_le16 (64 );usb_get_device_descriptor (usb_rh,USB_DT_DEVICE_SIZE );usb_new_device (usb_rh);
drivers/usb/host/ohci-q.c +2 -2
@@ -433,7 +433,7 @@ ed->type =usb_pipetype (pipe); info |= (ep->desc.bEndpointAddress & ~USB_DIR_IN ) <<7 ; - info |= ep->desc.wMaxPacketSize <<16 ; + info |=le16_to_cpu (ep->desc.wMaxPacketSize) <<16 ;if (udev->speed ==USB_SPEED_LOW ) info |=ED_LOWSPEED ;/* only control transfers store pids in tds */
@@ -449,7 +449,7 @@ ed->load =usb_calc_bus_time ( udev->speed, !is_out, ed->type ==PIPE_ISOCHRONOUS , - ep->desc.wMaxPacketSize) +le16_to_cpu (ep->desc.wMaxPacketSize)) /1000 ; } }
drivers/usb/image/mdc800.c +40 -5
52 lines not on this page · raw message
drivers/usb/input/ati_remote.c +1 -1
@@ -756,7 +756,7 @@ retval = -ENODEV ; goto error; } -if (ati_remote->endpoint_in->wMaxPacketSize ==0 ) { +if (le16_to_cpu (ati_remote->endpoint_in->wMaxPacketSize) ==0 ) {err ("%s: endpoint_in message size==0? \n" , __FUNCTION__); retval = -ENODEV ; goto error;
drivers/usb/media/ibmcam.c +2 -2
@@ -3743,7 +3743,7 @@err ("Interface %d. has ISO OUT endpoint!" , ifnum);return -ENODEV ; } -if (endpoint->wMaxPacketSize ==0 ) { +if (le16_to_cpu (endpoint->wMaxPacketSize) ==0 ) {if (inactInterface <0 ) inactInterface = i;else {
@@ -3753,7 +3753,7 @@ }else {if (actInterface <0 ) { actInterface = i; - maxPS = endpoint->wMaxPacketSize; + maxPS =le16_to_cpu (endpoint->wMaxPacketSize);if (debug >0 )info ("Active setting=%d. maxPS=%d." , i, maxPS); }else
drivers/usb/media/konicawc.c +5 -5
@@ -390,7 +390,7 @@ spd_to_iface[cam->speed]);if (!interface)return -ENXIO ; - pktsz = interface->endpoint[1 ].desc.wMaxPacketSize; + pktsz =le16_to_cpu (interface->endpoint[1 ].desc.wMaxPacketSize);DEBUG (1 ,"pktsz = %d" , pktsz);if (!CAMERA_IS_OPERATIONAL (uvd)) {err ("Camera is not operational" );
@@ -756,7 +756,7 @@ } endpoint = &interface->endpoint[1 ].desc;DEBUG (1 ,"found endpoint: addr: 0x%2.2x maxps = 0x%4.4x" , - endpoint->bEndpointAddress, endpoint->wMaxPacketSize); + endpoint->bEndpointAddress,le16_to_cpu (endpoint->wMaxPacketSize));if (video_ep ==0 ) video_ep = endpoint->bEndpointAddress;else if (video_ep != endpoint->bEndpointAddress) {
@@ -773,7 +773,7 @@ interface->desc.bInterfaceNumber);return -ENODEV ; } -if (endpoint->wMaxPacketSize ==0 ) { +if (le16_to_cpu (endpoint->wMaxPacketSize) ==0 ) {if (inactInterface <0 ) inactInterface = i;else {
@@ -786,8 +786,8 @@ actInterface = i; } } -if (endpoint->wMaxPacketSize > maxPS) - maxPS = endpoint->wMaxPacketSize; +if (le16_to_cpu (endpoint->wMaxPacketSize) > maxPS) + maxPS =le16_to_cpu (endpoint->wMaxPacketSize); }if (actInterface ==-1 ) {err ("Cant find required endpoint" );
drivers/usb/media/ov511.c +1 -1
@@ -5596,7 +5596,7 @@if (ifp) { alt =usb_altnum_to_altsetting (ifp,7 );if (alt) - mxps = alt->endpoint[0 ].desc.wMaxPacketSize; + mxps =le16_to_cpu (alt->endpoint[0 ].desc.wMaxPacketSize); }/* Some OV518s have packet numbering by default, some don't */
drivers/usb/media/ultracam.c +4 -4
@@ -565,7 +565,7 @@ interface->desc.bInterfaceNumber);return -ENODEV ; } -if (endpoint->wMaxPacketSize ==0 ) { +if (le16_to_cpu (endpoint->wMaxPacketSize) ==0 ) {if (inactInterface <0 ) inactInterface = i;else {
@@ -575,15 +575,15 @@ }else {if (actInterface <0 ) { actInterface = i; - maxPS = endpoint->wMaxPacketSize; + maxPS =le16_to_cpu (endpoint->wMaxPacketSize);if (debug >0 )info ("Active setting=%d. maxPS=%d." , i, maxPS); }else {/* Got another active alt. setting */ -if (maxPS < endpoint->wMaxPacketSize) { +if (maxPS <le16_to_cpu (endpoint->wMaxPacketSize)) {/* This one is better! */ actInterface = i; - maxPS = endpoint->wMaxPacketSize; + maxPS =le16_to_cpu (endpoint->wMaxPacketSize);if (debug >0 ) {info ("Even better ctive setting=%d. maxPS=%d." , i, maxPS);
drivers/usb/misc/auerswald.c +1 -1
@@ -1132,7 +1132,7 @@ ret = -EFAULT ; goto intoend; } - irqsize = ep->desc.wMaxPacketSize; + irqsize =le16_to_cpu (ep->desc.wMaxPacketSize); cp->irqsize = irqsize;/* allocate the urb and data buffer */
drivers/usb/misc/legousbtower.c +2 -2
@@ -405,7 +405,7 @@ dev->udev,usb_rcvintpipe (dev->udev, dev->interrupt_in_endpoint->bEndpointAddress), dev->interrupt_in_buffer, - dev->interrupt_in_endpoint->wMaxPacketSize, +le16_to_cpu (dev->interrupt_in_endpoint->wMaxPacketSize), tower_interrupt_in_callback, dev, dev->interrupt_in_interval);
@@ -924,7 +924,7 @@err ("Couldn't allocate read_buffer" ); goto error; } - dev->interrupt_in_buffer =kmalloc (dev->interrupt_in_endpoint->wMaxPacketSize,GFP_KERNEL ); + dev->interrupt_in_buffer =kmalloc (le16_to_cpu (dev->interrupt_in_endpoint->wMaxPacketSize),GFP_KERNEL );if (!dev->interrupt_in_buffer) {err ("Couldn't allocate interrupt_in_buffer" ); goto error;
drivers/usb/misc/usbtest.c +3 -3
@@ -1371,8 +1371,8 @@if (bytes <0 || !desc)return NULL ; - maxp =0x7ff & desc->wMaxPacketSize; - maxp *=1 + (0x3 & (desc->wMaxPacketSize >>11 )); + maxp =0x7ff &le16_to_cpu (desc->wMaxPacketSize); + maxp *=1 + (0x3 & (le16_to_cpu (desc->wMaxPacketSize) >>11 )); packets = (bytes + maxp -1 ) / maxp; urb =usb_alloc_urb (packets,SLAB_KERNEL );
@@ -1432,7 +1432,7 @@"... iso period %d %sframes, wMaxPacket %04x\n" ,1 << (desc->bInterval -1 ), (udev->speed ==USB_SPEED_HIGH ) ?"micro" :"" , - desc->wMaxPacketSize); + le16_to_cpu(desc->wMaxPacketSize));for (i =0 ; i < param->sglen; i++) { urbs [i] = iso_alloc_urb (udev, pipe, desc,
drivers/usb/serial/usb-serial.c +4 -4
@@ -1060,7 +1060,7 @@dev_err (&interface->dev,"No free urbs available\n" ); goto probe_error; } - buffer_size = endpoint->wMaxPacketSize; + buffer_size =le16_to_cpu (endpoint->wMaxPacketSize); port->bulk_in_size = buffer_size; port->bulk_in_endpointAddress = endpoint->bEndpointAddress; port->bulk_in_buffer =kmalloc (buffer_size,GFP_KERNEL );
@@ -1084,7 +1084,7 @@dev_err (&interface->dev,"No free urbs available\n" ); goto probe_error; } - buffer_size = endpoint->wMaxPacketSize; + buffer_size =le16_to_cpu (endpoint->wMaxPacketSize); port->bulk_out_size = buffer_size; port->bulk_out_endpointAddress = endpoint->bEndpointAddress; port->bulk_out_buffer =kmalloc (buffer_size,GFP_KERNEL );
@@ -1109,7 +1109,7 @@dev_err (&interface->dev,"No free urbs available\n" ); goto probe_error; } - buffer_size = endpoint->wMaxPacketSize; + buffer_size =le16_to_cpu (endpoint->wMaxPacketSize); port->interrupt_in_endpointAddress = endpoint->bEndpointAddress; port->interrupt_in_buffer =kmalloc (buffer_size,GFP_KERNEL );if (!port->interrupt_in_buffer) {
@@ -1136,7 +1136,7 @@dev_err (&interface->dev,"No free urbs available\n" ); goto probe_error; } - buffer_size = endpoint->wMaxPacketSize; + buffer_size =le16_to_cpu (endpoint->wMaxPacketSize); port->interrupt_out_size = buffer_size; port->interrupt_out_endpointAddress = endpoint->bEndpointAddress; port->interrupt_out_buffer =kmalloc (buffer_size,GFP_KERNEL );
drivers/usb/usb-skeleton.c +1 -1
@@ -260,7 +260,7 @@ ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_BULK)) {/* we found a bulk in endpoint */ - buffer_size = endpoint->wMaxPacketSize; + buffer_size =le16_to_cpu (endpoint->wMaxPacketSize); dev->bulk_in_size = buffer_size; dev->bulk_in_endpointAddr = endpoint->bEndpointAddress; dev->bulk_in_buffer =kmalloc (buffer_size,GFP_KERNEL );
drivers/w1/dscore.c +1 -1
@@ -676,7 +676,7 @@ ds_dev->ep[i+1 ] = endpoint->bEndpointAddress;printk ("%d: addr=%x, size=%d, dir=%s, type=%x\n" , - i, endpoint->bEndpointAddress, endpoint->wMaxPacketSize, + i, endpoint->bEndpointAddress,le16_to_cpu (endpoint->wMaxPacketSize), (endpoint->bEndpointAddress &USB_DIR_IN )?"IN" :"OUT" , endpoint->bmAttributes &USB_ENDPOINT_XFERTYPE_MASK ); }
include/linux/usb.h +1 -1
@@ -1125,7 +1125,7 @@return 0 ;/* NOTE: only 0x07ff bits are for packet size... */ -return ep->desc.wMaxPacketSize; +return le16_to_cpu (ep->desc.wMaxPacketSize); }/* -------------------------------------------------------------------------- */
include/linux/usb_ch9.h +1 -1
@@ -264,7 +264,7 @@__u8 bEndpointAddress;__u8 bmAttributes; -__u16 wMaxPacketSize; +__le16 wMaxPacketSize;__u8 bInterval;// NOTE: these two are _only_ in audio endpoints.
sound/usb/usbaudio.c +4 -4
@@ -2450,7 +2450,7 @@ (altsd->bInterfaceSubClass !=USB_SUBCLASS_AUDIO_STREAMING && altsd->bInterfaceSubClass !=USB_SUBCLASS_VENDOR_SPEC ) || altsd->bNumEndpoints <1 || - get_endpoint(alts, 0)->wMaxPacketSize == 0) + le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) == 0) continue;/* must be isochronous */ if ((get_endpoint(alts, 0)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) !=
@@ -2513,7 +2513,7 @@ fp->endpoint =get_endpoint (alts,0 )->bEndpointAddress; fp->ep_attr =get_endpoint (alts,0 )->bmAttributes;/* FIXME: decode wMaxPacketSize of high bandwith endpoints */ - fp->maxpacksize =get_endpoint (alts,0 )->wMaxPacketSize; + fp->maxpacksize =le16_to_cpu (get_endpoint (alts,0 )->wMaxPacketSize); fp->attributes = csep[3 ];/* some quirks for attributes here */
@@ -2809,7 +2809,7 @@ fp->iface = altsd->bInterfaceNumber; fp->endpoint =get_endpoint (alts,0 )->bEndpointAddress; fp->ep_attr =get_endpoint (alts,0 )->bmAttributes; - fp->maxpacksize =get_endpoint (alts,0 )->wMaxPacketSize; + fp->maxpacksize =le16_to_cpu (get_endpoint (alts,0 )->wMaxPacketSize);switch (fp->maxpacksize) {case 0x120 :
@@ -2875,7 +2875,7 @@ fp->iface = altsd->bInterfaceNumber; fp->endpoint =get_endpoint (alts,0 )->bEndpointAddress; fp->ep_attr =get_endpoint (alts,0 )->bmAttributes; - fp->maxpacksize =get_endpoint (alts,0 )->wMaxPacketSize; + fp->maxpacksize =le16_to_cpu (get_endpoint (alts,0 )->wMaxPacketSize); fp->rate_max = fp->rate_min =combine_triple (&alts->extra[8 ]); stream = (fp->endpoint &USB_DIR_IN )
sound/usb/usx2y/usbusx2yaudio.c +2 -2
@@ -458,7 +458,7 @@ ep = dev->ep_out[subs->endpoint];if (!ep)return -EINVAL ; - subs->maxpacksize = ep->desc.wMaxPacketSize; + subs->maxpacksize =le16_to_cpu (ep->desc.wMaxPacketSize);if (NULL == subs->tmpbuf) { subs->tmpbuf =kcalloc (NRPACKS , subs->maxpacksize,GFP_KERNEL );if (NULL == subs->tmpbuf) {
@@ -471,7 +471,7 @@ ep = dev->ep_in[subs->endpoint];if (!ep)return -EINVAL ; - subs->maxpacksize = ep->desc.wMaxPacketSize; + subs->maxpacksize =le16_to_cpu (ep->desc.wMaxPacketSize); }/* allocate and initialize data urbs */
ChangeSet 1.1938.444.16, 2004/12/20 17:25:07-08:00, [email protected]
USB Gadget: fix up simple sparse warnings (NULL stuff) in dummy_hcd.c driver
drivers/usb/gadget/dummy_hcd.c | 26 +++++++++++++------------- 1 files changed, 13 insertions(+), 13 deletions(-)
drivers/usb/gadget/dummy_hcd.c +13 -13
@@ -375,7 +375,7 @@ dum =ep_to_dummy (ep);spin_lock_irqsave (&dum->lock, flags); - ep->desc =0 ; + ep->desc =NULL ; retval =0 ;nuke (dum, ep);spin_unlock_irqrestore (&dum->lock, flags);
@@ -391,12 +391,12 @@struct dummy_request *req;if (!_ep) -return 0 ; +return NULL ; ep =usb_ep_to_dummy_ep (_ep); req =kmalloc (sizeof *req, mem_flags);if (!req) -return 0 ; +return NULL ;memset (req,0 ,sizeof *req);INIT_LIST_HEAD (&req->queue);return &req->req;
@@ -432,7 +432,7 @@ dum =ep_to_dummy (ep);if (!dum->driver) -return 0 ; +return NULL ; retval =kmalloc (bytes, mem_flags); *dma = (dma_addr_t ) retval;return retval;
@@ -516,7 +516,7 @@struct dummy *dum;int retval = -EINVAL ;unsigned long flags; -struct dummy_request *req =0 ; +struct dummy_request *req =NULL ;if (!_ep || !_req)return retval;
@@ -730,7 +730,7 @@ ep->ep.maxpacket = ~0 ; ep->last_io = jiffies; ep->gadget = &dum->gadget; - ep->desc =0 ; + ep->desc =NULL ;INIT_LIST_HEAD (&ep->queue); }
@@ -744,8 +744,8 @@dev_dbg (dummy_dev (dum),"binding gadget driver '%s'\n" , driver->driver.name);if ((retval = driver->bind (&dum->gadget)) !=0 ) { - dum->driver =0 ; - dum->gadget.dev.driver =0 ; + dum->driver =NULL ; + dum->gadget.dev.driver =NULL ;return retval; }
@@ -807,7 +807,7 @@spin_unlock_irqrestore (&dum->lock, flags); driver->unbind (&dum->gadget); - dum->driver =0 ; + dum->driver =NULL ;device_release_driver (&dum->gadget.dev);
@@ -1117,7 +1117,7 @@struct urb *urb;struct dummy_request *req;u8 address; -struct dummy_ep *ep =0 ; +struct dummy_ep *ep =NULL ;int type; urb = urbp->urb;
@@ -1372,7 +1372,7 @@ ep->already_seen = ep->setup_stage =0 ;spin_unlock (&dum->lock); -usb_hcd_giveback_urb (dummy_to_hcd (dum), urb,0 ); +usb_hcd_giveback_urb (dummy_to_hcd (dum), urb,NULL );spin_lock (&dum->lock); goto restart;
@@ -1644,7 +1644,7 @@INIT_LIST_HEAD (&dum->urbp_list); - root =usb_alloc_dev (0 , &hcd->self,0 ); + root =usb_alloc_dev (NULL , &hcd->self,0 );if (!root)return -ENOMEM ;
@@ -1696,7 +1696,7 @@static int dummy_h_get_frame (struct usb_hcd *hcd) { -return dummy_g_get_frame (0 ); +return dummy_g_get_frame (NULL ); }static const struct hc_driver dummy_hcd = {
ChangeSet 1.1938.444.17, 2004/12/21 10:01:15-08:00, [email protected]
USB: explicitly mark the endianness of some visor data fields.
drivers/usb/serial/visor.c | 4 +--- drivers/usb/serial/visor.h | 6 +++--- 2 files changed, 4 insertions(+), 6 deletions(-)
drivers/usb/serial/visor.c +1 -3
@@ -734,9 +734,7 @@if (retval ==sizeof (*connection_info)) { connection_info = (struct visor_connection_info *)transfer_buffer; -le16_to_cpus (&connection_info->num_ports); - num_ports = connection_info->num_ports; - + num_ports =le16_to_cpu (connection_info->num_ports);for (i =0 ; i < num_ports; ++i) {switch (connection_info->connections[i].port_function_id) {case VISOR_FUNCTION_GENERIC :
drivers/usb/serial/visor.h +3 -3
@@ -89,7 +89,7 @@* VISOR_GET_CONNECTION_INFORMATION returns data in the following format ****************************************************************************/ struct visor_connection_info { -__u16 num_ports; +__le16 num_ports;struct {__u8 port_function_id;__u8 port;
@@ -135,12 +135,12 @@struct palm_ext_connection_info {__u8 num_ports;__u8 endpoint_numbers_different; -__u16 reserved1; +__le16 reserved1;struct {__u32 port_function_id;__u8 port;__u8 end_point_info; -__u16 reserved; +__le16 reserved; } connections[2 ]; };
ChangeSet 1.1938.444.18, 2004/12/21 10:36:03-08:00, [email protected]
[PATCH] module sysfs: make module.mkobj inline
Make module.mkobj inline. As this is simpler and what's usually done with kobjs when it's representing an entity.
include/linux/module.h | 2 +- kernel/module.c | 35 +++++++++++------------------------ kernel/params.c | 12 ++++-------- 3 files changed, 16 insertions(+), 33 deletions(-)
include/linux/module.h +1 -1
@@ -250,7 +250,7 @@char name[MODULE_NAME_LEN ];/* Sysfs stuff. */ -struct module_kobject *mkobj; +struct module_kobject mkobj;struct param_kobject *params_kobject;/* Exported symbols */
kernel/module.c +11 -24
@@ -964,9 +964,6 @@unsigned int nloaded =0 , i;struct module_sect_attr *sattr; -if (!mod->mkobj) -return ; -/* Count loaded sections and allocate structures */ for (i =0 ; i < nsect; i++)if (sechdrs[i].sh_flags &SHF_ALLOC )
@@ -980,7 +977,7 @@memset (mod->sect_attrs,0 ,sizeof (struct module_sections ));if (kobject_set_name (&mod->sect_attrs->kobj,"sections" )) goto out; - mod->sect_attrs->kobj.parent = &mod->mkobj->kobj; + mod->sect_attrs->kobj.parent = &mod->mkobj.kobj; mod->sect_attrs->kobj.ktype = &module_sect_ktype;if (kobject_register (&mod->sect_attrs->kobj)) goto out;
@@ -1029,11 +1026,11 @@#ifdef CONFIG_MODULE_UNLOAD static inline int module_add_refcnt_attr (struct module *mod) { -return sysfs_create_file (&mod->mkobj->kobj, &refcnt.attr); +return sysfs_create_file (&mod->mkobj.kobj, &refcnt.attr); }static void module_remove_refcnt_attr (struct module *mod) { -return sysfs_remove_file (&mod->mkobj->kobj, &refcnt.attr); +return sysfs_remove_file (&mod->mkobj.kobj, &refcnt.attr); }#else static inline int module_add_refcnt_attr (struct module *mod)
@@ -1052,17 +1049,13 @@ {int err; - mod->mkobj =kmalloc (sizeof (struct module_kobject ),GFP_KERNEL ); -if (!mod->mkobj) -return -ENOMEM ; - -memset (&mod->mkobj->kobj,0 ,sizeof (mod->mkobj->kobj)); - err =kobject_set_name (&mod->mkobj->kobj,"%s" , mod->name); +memset (&mod->mkobj.kobj,0 ,sizeof (mod->mkobj.kobj)); + err =kobject_set_name (&mod->mkobj.kobj,"%s" , mod->name);if (err) goto out; -kobj_set_kset_s (mod->mkobj, module_subsys); - mod->mkobj->mod = mod; - err =kobject_register (&mod->mkobj->kobj); +kobj_set_kset_s (&mod->mkobj, module_subsys); + mod->mkobj.mod = mod; + err =kobject_register (&mod->mkobj.kobj);if (err) goto out;
@@ -1077,11 +1070,8 @@return 0 ; out_unreg: -/* Calls module_kobj_release */ -kobject_unregister (&mod->mkobj->kobj); -return err; +kobject_unregister (&mod->mkobj.kobj); out: -kfree (mod->mkobj);return err; }
@@ -1090,8 +1080,7 @@module_remove_refcnt_attr (mod);module_param_sysfs_remove (mod); -/* Calls module_kobj_release */ -kobject_unregister (&mod->mkobj->kobj); +kobject_unregister (&mod->mkobj.kobj); }/* Free a module, remove from lists, etc (must hold module mutex). */
@@ -2089,11 +2078,9 @@ {if (!mod || !drv)return ; -if (!mod->mkobj) -return ;/* Don't check return code; this call is idempotent */ -sysfs_create_link (&drv->kobj, &mod->mkobj->kobj,"module" ); +sysfs_create_link (&drv->kobj, &mod->mkobj.kobj,"module" ); }EXPORT_SYMBOL (module_add_driver);
kernel/params.c +4 -8
@@ -567,7 +567,7 @@ {struct param_kobject *pk; - pk =param_sysfs_setup (mod->mkobj, kparam, num_params,0 ); + pk =param_sysfs_setup (&mod->mkobj, kparam, num_params,0 );if (IS_ERR (pk))return PTR_ERR (pk);
@@ -610,8 +610,10 @@kobject_register (&mk->kobj);/* no need to keep the kobject if no parameter is exported */ -if (!param_sysfs_setup (mk, kparam, num_params, name_skip)) +if (!param_sysfs_setup (mk, kparam, num_params, name_skip)) {kobject_unregister (&mk->kobj); +kfree (mk); + } }/*
@@ -710,14 +712,8 @@ };#endif -static void module_kobj_release (struct kobject *kobj) -{ -kfree (container_of (kobj ,struct module_kobject ,kobj )); -} -static struct kobj_type module_ktype = { .sysfs_ops = &module_sysfs_ops, - .release = &module_kobj_release, };decl_subsys (module, &module_ktype,NULL );
ChangeSet 1.1938.444.19, 2004/12/21 10:36:20-08:00, [email protected]
[PATCH] module sysfs: expand module_attribute methods
Modify module_attribute show/store methods to accept self argument to enable further extensions.
include/linux/module.h | 5 +++-- kernel/module.c | 3 ++- kernel/params.c | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-)
include/linux/module.h +3 -2
@@ -48,8 +48,9 @@struct module_attribute {struct attribute attr; -ssize_t (*show)(struct module *,char *); -ssize_t (*store)(struct module *,const char *,size_t count); +ssize_t (*show)(struct module_attribute *,struct module *,char *); +ssize_t (*store)(struct module_attribute *,struct module *, +const char *,size_t count); };struct module_kobject
kernel/module.c +2 -1
@@ -651,7 +651,8 @@ }EXPORT_SYMBOL_GPL (symbol_put_addr); -static ssize_t show_refcnt (struct module *mod,char *buffer) +static ssize_t show_refcnt (struct module_attribute *mattr, +struct module *mod,char *buffer) {/* sysfs holds a reference */ return sprintf (buffer,"%u\n" ,module_refcount (mod)-1 );
kernel/params.c +1 -1
@@ -693,7 +693,7 @@if (!try_module_get (mk->mod))return -ENODEV ; - ret = attribute->show (mk->mod, buf); + ret = attribute->show (attribute, mk->mod, buf);module_put (mk->mod);
ChangeSet 1.1938.444.20, 2004/12/21 10:36:35-08:00, [email protected]
[PATCH] module sysfs: sections attr reimplemented using attr group
Reimplement section attributes using attribute group. This makes more sense, for, while they reside in a separate subdirectory, they belong to the ownig module and their lifetime exactly equals the lifetime of the owning module, and it's simpler.
include/linux/module.h | 8 ++--- kernel/module.c | 75 ++++++++++++++++++++++--------------------------- 2 files changed, 39 insertions(+), 44 deletions(-)
include/linux/module.h +4 -4
@@ -227,14 +227,14 @@#define MODULE_SECT_NAME_LEN 32struct module_sect_attr { -struct attribute attr; +struct module_attribute mattr;char name[MODULE_SECT_NAME_LEN ];unsigned long address; }; -struct module_sections +struct module_sect_attrs { -struct kobject kobj; +struct attribute_group grp;struct module_sect_attr attrs[0 ]; };
@@ -313,7 +313,7 @@char *strtab;/* Section attributes */ -struct module_sections *sect_attrs; +struct module_sect_attrs *sect_attrs;#endif /* Per-cpu data. */
kernel/module.c +35 -40
111 lines not on this page · raw message
ChangeSet 1.1938.444.21, 2004/12/21 10:36:52-08:00, [email protected]
[PATCH] module sysfs: module parameters reimplemented using attr group
Reimplement parameter attributes using attribute group. This makes more sense, for, while they reside in a separate subdirectory, they belong to the ownig module and their lifetime exactly equals the lifetime of the owning module, and it's simpler.
include/linux/module.h | 4 - kernel/params.c | 179 ++++++++++++++----------------------------------- 2 files changed, 56 insertions(+), 127 deletions(-)
include/linux/module.h +2 -2
@@ -238,7 +238,7 @@struct module_sect_attr attrs[0 ]; }; -struct param_kobject ; +struct module_param_attrs ;struct module {
@@ -252,7 +252,7 @@/* Sysfs stuff. */ struct module_kobject mkobj; -struct param_kobject *params_kobject; +struct module_param_attrs *param_attrs;/* Exported symbols */ const struct kernel_symbol *syms;
kernel/params.c +54 -125
260 lines not on this page · raw message
ChangeSet 1.1938.444.22, 2004/12/21 10:37:07-08:00, [email protected]
[PATCH] sysfs: add mmap support to struct bin_attribute files
This patch adds an mmap method and some more error checking to struct bin_attribute--good for things like exporting PCI resources directly. I wasn't sure about the return values for the case where an attribute is missing a given method, and it looks like mm.h can't be included in sysfs.h, so I had to forward declare struct vm_area_struct. Other than that, it works fine for my test cases.
fs/sysfs/bin.c | 27 +++++++++++++++++++++++++-- include/linux/sysfs.h | 6 ++++++ 2 files changed, 31 insertions(+), 2 deletions(-)
fs/sysfs/bin.c +25 -2
@@ -1,5 +1,9 @@/* * bin.c - binary file operations for sysfs. +* +* Copyright (c) 2003 Patrick Mochel +* Copyright (c) 2003 Matthew Wilcox +* Copyright (c) 2004 Silicon Graphics, Inc. */ #undef DEBUG
@@ -20,6 +24,9 @@struct bin_attribute * attr =to_bin_attr (dentry);struct kobject * kobj =to_kobj (dentry->d_parent); +if (!attr->read) +return -EINVAL ; +return attr->read (kobj, buffer, off, count); }
@@ -63,6 +70,9 @@struct bin_attribute *attr =to_bin_attr (dentry);struct kobject *kobj =to_kobj (dentry->d_parent); +if (!attr->write) +return -EINVAL ; +return attr->write (kobj, buffer, offset, count); }
@@ -92,6 +102,18 @@return count; } +static int mmap (struct file *file,struct vm_area_struct *vma) +{ +struct dentry *dentry = file->f_dentry; +struct bin_attribute *attr =to_bin_attr (dentry); +struct kobject *kobj =to_kobj (dentry->d_parent); + +if (!attr->mmap) +return -EINVAL ; + +return attr->mmap (kobj, attr, vma); +} +static int open (struct inode * inode,struct file * file) {struct kobject *kobj =sysfs_get_kobject (file->f_dentry->d_parent);
@@ -107,9 +129,9 @@ goto Done; error = -EACCES ; -if ((file->f_mode &FMODE_WRITE ) && !attr->write) +if ((file->f_mode &FMODE_WRITE ) && !(attr->write || attr->mmap)) goto Error; -if ((file->f_mode &FMODE_READ ) && !attr->read) +if ((file->f_mode &FMODE_READ ) && !(attr->read || attr->mmap)) goto Error; error = -ENOMEM ;
@@ -144,6 +166,7 @@struct file_operations bin_fops = { .read = read, .write = write, + .mmap = mmap, .llseek = generic_file_llseek, .open = open, .release = release,
include/linux/sysfs.h +6 -0
@@ -2,6 +2,7 @@* sysfs.h - definitions for the device driver filesystem * * Copyright (c) 2001,2002 Patrick Mochel +* Copyright (c) 2004 Silicon Graphics, Inc. * * Please see Documentation/filesystems/sysfs.txt for more information. */
@@ -47,11 +48,16 @@#define attr_name (_attr) (_attr).attr.name +struct vm_area_struct ; +struct bin_attribute {struct attribute attr;size_t size; +void *private;ssize_t (*read)(struct kobject *,char *,loff_t ,size_t );ssize_t (*write)(struct kobject *,char *,loff_t ,size_t ); +int (*mmap)(struct kobject *,struct bin_attribute *attr, +struct vm_area_struct *vma); };struct sysfs_ops {
ChangeSet 1.1938.444.23, 2004/12/21 10:50:37-08:00, [email protected]
[PATCH] rename ETH_P_AOE
Rename old ETH_P_EDP2 ("EtherDrive Protocol 2") to ETH_P_AOE (ATA over Ethernet).
drivers/block/aoe/aoe.h | 1 - include/linux/if_ether.h | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-)
drivers/block/aoe/aoe.h +0 -1
@@ -26,7 +26,6 @@AOECCMD_FSET , AOE_HVER = 0x10, - ETH_P_AOE = 0x88a2, }; struct aoe_hdr {
include/linux/if_ether.h +1 -1
@@ -69,7 +69,7 @@#define ETH_P_ATMFATE 0x8884/* Frame-based ATM Transport * over Ethernet */ -#define ETH_P_EDP2 0x88A2/* Coraid EDP2 */ +#define ETH_P_AOE 0x88A2/* ATA over Ethernet */ /* * Non DIX types. Won't clash for 1500 types.
ChangeSet 1.1938.444.24, 2004/12/21 11:20:03-08:00, [email protected]
[PATCH] USB: additional device id for kaweth driver
thanks to Magnus an additional device id.
drivers/usb/net/kaweth.c | 1 + 1 files changed, 1 insertion(+)
drivers/usb/net/kaweth.c +1 -0
@@ -160,6 +160,7 @@ { USB_DEVICE(0x1342, 0x0204) }, /* Mobility USB-Ethernet Adapter */ { USB_DEVICE(0x13d2, 0x0400) }, /* Shark Pocket Adapter */ { USB_DEVICE(0x1485, 0x0001) }, /* Silicom U2E */ + { USB_DEVICE(0x1485, 0x0002) }, /* Psion Dacom Gold Port Ethernet */ { USB_DEVICE(0x1645, 0x0005) }, /* Entrega E45 */ { USB_DEVICE(0x1645, 0x0008) }, /* Entrega USB Ethernet Adapter */ { USB_DEVICE(0x1645, 0x8005) }, /* PortGear Ethernet Adapter */
ChangeSet 1.1938.444.25, 2004/12/21 11:20:39-08:00, [email protected]
[PATCH] USB: ohci build tweaks
Resolves some build glitches that snuck into OHCI.
drivers/usb/host/ohci-hcd.c | 13 ++----------- 1 files changed, 2 insertions(+), 11 deletions(-)
drivers/usb/host/ohci-hcd.c +2 -11
@@ -416,7 +416,6 @@static int ohci_init (struct ohci_hcd *ohci) { -u32 temp;int ret;disable (ohci);
@@ -427,6 +426,8 @@/* SMM owns the HC? not for long! */ if (!no_handshake &&ohci_readl (ohci, &ohci->regs->control) &OHCI_CTRL_IR ) { +u32 temp; +ohci_dbg (ohci,"USB HC TakeOver from BIOS/SMM\n" );/* this timeout is arbitrary. we make it long, so systems
@@ -902,14 +903,4 @@ || defined (CONFIG_PXA27x) \ )#error "missing bus glue for ohci-hcd" -#endif - -#if !defined(HAVE_HNP ) && defined(CONFIG_USB_OTG ) - -#warning non-OTG configuration, too many HCDs - -static void start_hnp (struct ohci_hcd *ohci) -{ -/* "can't happen" */ -}#endif
ChangeSet 1.1938.444.26, 2004/12/21 11:21:08-08:00, [email protected]
[PATCH] USB: fix Scheduling while atomic warning when resuming.
From: David Brownell <[email protected]>
drivers/usb/host/ehci-hub.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-)
drivers/usb/host/ehci-hub.c +1 -1
@@ -122,7 +122,7 @@writel (temp, &ehci->regs->port_status [i]); } i =HCS_N_PORTS (ehci->hcs_params); -msleep (20 ); +mdelay (20 );while (i--) { temp =readl (&ehci->regs->port_status [i]);if ((temp &PORT_SUSPEND ) ==0 )
ChangeSet 1.1938.444.27, 2004/12/21 12:12:05-08:00, [email protected]
[PATCH] PCI: export PCI resources in sysfs
This patch exports PCI resources to userspace in the corresponding sysfs device directory. It depends on the platform HAVE_PCI_MMAP code, and is #ifdef'd accordingly. I've also added documentation describing the sysfs PCI device file layout.
Documentation/filesystems/sysfs-pci.txt | 64 ++++++++++++++++++++++ drivers/pci/pci-sysfs.c | 92 ++++++++++++++++++++++++++++++++ include/linux/pci.h | 1 3 files changed, 157 insertions(+)
Documentation/filesystems/sysfs-pci.txt new file +64 -0
@@ -0,0 +1,64 @@ +Accessing PCI device resources through sysfs + +sysfs, usually mounted at /sys, provides access to PCI resources on platforms +that support it. For example, a given bus might look like this: + + pci0000:17 + |-- 0000:17:00.0 + | |-- class + | |-- config + | |-- detach_state + | |-- device + | |-- irq + | |-- local_cpus + | |-- resource + | |-- resource0 + | |-- resource1 + | |-- resource2 + | |-- rom + | |-- subsystem_device + | |-- subsystem_vendor + | `-- vendor + `-- detach_state + +The topmost element describes the PCI domain and bus number. In this case, +the domain number is 0000 and the bus number is 17 (both values are in hex). +This bus contains a single function device in slot 0. The domain and bus +numbers are reproduced for convenience. Under the device directory are several +files, each with their own function. + + file function + ---- -------- + class PCI class (ascii, ro) + config PCI config space (binary, rw) + detach_state connection status (bool, rw) + device PCI device (ascii, ro) + irq IRQ number (ascii, ro) + local_cpus nearby CPU mask (cpumask, ro) + resource PCI resource host addresses (ascii, ro) + resource0..N PCI resource N, if present (binary, mmap) + rom PCI ROM resource, if present (binary, ro) + subsystem_device PCI subsystem device (ascii, ro) + subsystem_vendor PCI subsystem vendor (ascii, ro) + vendor PCI vendor (ascii, ro) + + ro - read only file + rw - file is readable and writable + mmap - file is mmapable + ascii - file contains ascii text + binary - file contains binary data + cpumask - file contains a cpumask type + +The read only files are informational, writes to them will be ignored. +Writable files can be used to perform actions on the device (e.g. changing +config space, detaching a device). mmapable files are available via an +mmap of the file at offset 0 and can be used to do actual device programming +from userspace. Note that some platforms don't support mmapping of certain +resources, so be sure to check the return value from any attempted mmap. + +Supporting PCI access on new platforms + +In order to support PCI resource mapping as described above, Linux platform +code must define HAVE_PCI_MMAP and provide a pci_mmap_page_range function. +Platforms are free to only support subsets of the mmap functionality, but +useful return codes should be provided.
drivers/pci/pci-sysfs.c +92 -0
116 lines not on this page · raw message
include/linux/pci.h +1 -0
@@ -539,6 +539,7 @@u32 saved_config_space[16 ];/* config space saved at suspend time */ struct bin_attribute *rom_attr;/* attribute descriptor for sysfs ROM entry */ int rom_attr_enabled;/* has display of the rom attribute been enabled? */ +struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE ];/* sysfs file for resources */ #ifdef CONFIG_PCI_NAMES #define PCI_NAME_SIZE 96#define PCI_NAME_HALF __stringify(43)/* less than half to handle slop */
ChangeSet 1.1938.444.28, 2004/12/21 16:51:39-08:00, [email protected]
[PATCH] driver core: allow struct bin_attributes in class devices
This small patch adds routines to create and remove bin_attribute files for class devices. One intended use is for binary files corresponding to PCI busses, like bus legacy I/O ports or ISA memory.
drivers/base/class.c | 18 ++++++++++++++++++ include/linux/device.h | 5 ++++- 2 files changed, 22 insertions(+), 1 deletion(-)
drivers/base/class.c +18 -0
@@ -179,6 +179,22 @@sysfs_remove_file (&class_dev->kobj, &attr->attr); } +int class_device_create_bin_file (struct class_device *class_dev, +struct bin_attribute *attr) +{ +int error = -EINVAL ; +if (class_dev) + error =sysfs_create_bin_file (&class_dev->kobj, attr); +return error; +} + +void class_device_remove_bin_file (struct class_device *class_dev, +struct bin_attribute *attr) +{ +if (class_dev) +sysfs_remove_bin_file (&class_dev->kobj, attr); +} +static int class_device_dev_link (struct class_device * class_dev) {if (class_dev->dev)
@@ -576,6 +592,8 @@EXPORT_SYMBOL_GPL (class_device_put);EXPORT_SYMBOL_GPL (class_device_create_file);EXPORT_SYMBOL_GPL (class_device_remove_file); +EXPORT_SYMBOL_GPL (class_device_create_bin_file); +EXPORT_SYMBOL_GPL (class_device_remove_bin_file);EXPORT_SYMBOL_GPL (class_interface_register);EXPORT_SYMBOL_GPL (class_interface_unregister);
include/linux/device.h +4 -1
@@ -228,7 +228,10 @@ const struct class_device_attribute *);extern void class_device_remove_file (struct class_device *,const struct class_device_attribute *); - +extern int class_device_create_bin_file (struct class_device *, +struct bin_attribute *); +extern void class_device_remove_bin_file (struct class_device *, +struct bin_attribute *);struct class_interface {struct list_head node;
ChangeSet 1.1938.444.29, 2004/12/21 22:40:34-08:00, [email protected]
sysfs: export the /sys/kernel subsystem for people to use.
include/linux/kobject.h | 2 ++ kernel/ksysfs.c | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-)
include/linux/kobject.h +2 -0
@@ -167,6 +167,8 @@ } \ } +/* The global /sys/kernel/ subsystem for people to chain off of */ +extern struct subsystem kernel_subsys;/** * Helpers for setting the kset of registered objects.
kernel/ksysfs.c +2 -1
@@ -30,7 +30,8 @@KERNEL_ATTR_RO (hotplug_seqnum);#endif -static decl_subsys(kernel, NULL, NULL); +decl_subsys (kernel,NULL ,NULL ); +EXPORT_SYMBOL_GPL (kernel_subsys); static struct attribute * kernel_attrs[] = {#ifdef CONFIG_HOTPLUG
ChangeSet 1.1938.444.30, 2004/12/21 22:43:19-08:00, [email protected]
debugfs: add /sys/kernel/debug mount point for people to mount debugfs on.
fs/debugfs/inode.c | 15 ++++++++++++++- 1 files changed, 14 insertions(+), 1 deletion(-)
fs/debugfs/inode.c +14 -1
@@ -298,15 +298,28 @@ }EXPORT_SYMBOL_GPL (debugfs_remove); +static decl_subsys(debug, NULL, NULL); +static int __init debugfs_init (void ) { -return register_filesystem (&debug_fs_type); +int retval; + +kset_set_kset_s (&debug_subsys, kernel_subsys); + retval =subsystem_register (&debug_subsys); +if (retval) +return retval; + + retval =register_filesystem (&debug_fs_type); +if (retval) +subsystem_unregister (&debug_subsys); +return retval; } static void __exit debugfs_exit(void) {simple_release_fs (&debugfs_mount, &debugfs_mount_count);unregister_filesystem (&debug_fs_type); +subsystem_unregister (&debug_subsys); }core_initcall (debugfs_init);
ChangeSet 1.1938.444.31, 2004/12/22 09:51:50-08:00, [email protected]
[PATCH] usb atm: macro consolidation, fixes debugging problem
Hi Greg, the recent reorganisation of the speedtouch driver broke the logic that turns on debugging output in speedtch.c and usb_atm.c when DEBUG or CONFIG_USB_DEBUG is set. This patch fixes things up, and moves duplicated debugging code into the header file.
drivers/usb/atm/speedtch.c | 20 -------------------- drivers/usb/atm/usb_atm.c | 17 ----------------- drivers/usb/atm/usb_atm.h | 19 ++++++++++++++++++- 3 files changed, 18 insertions(+), 38 deletions(-)
drivers/usb/atm/speedtch.c +0 -20
@@ -44,28 +44,8 @@#include "usb_atm.h" -/* -#define DEBUG -#define VERBOSE_DEBUG -*/ - -#if !defined (DEBUG ) && defined (CONFIG_USB_DEBUG ) -# define DEBUG -#endif - -#include <linux/usb.h> -#if defined(CONFIG_FW_LOADER ) || defined(CONFIG_FW_LOADER_MODULE )# define USE_FW_LOADER -#endif - -#ifdef VERBOSE_DEBUG -static int udsl_print_packet (const unsigned char *data,int len); -#define PACKETDEBUG(arg...) udsl_print_packet (arg) -#define vdbg(arg...) dbg (arg) -#else -#define PACKETDEBUG(arg...) -#define vdbg(arg...)#endif #define DRIVER_AUTHOR "Johan Verrept, Duncan Sands <[email protected]>"
drivers/usb/atm/usb_atm.c +0 -17
@@ -83,23 +83,6 @@#include "usb_atm.h" -/* -#define DEBUG -#define VERBOSE_DEBUG -*/ - -#if !defined (DEBUG ) && defined (CONFIG_USB_DEBUG ) -# define DEBUG -#endif - -#include <linux/usb.h> - -#ifdef DEBUG -#define UDSL_ASSERT (x) BUG_ON(!(x)) -#else -#define UDSL_ASSERT (x) do { if (!(x)) warn("failed assertion '" #x "' at line %d", __LINE__); } while(0) -#endif -#ifdef VERBOSE_DEBUG static int udsl_print_packet (const unsigned char *data,int len); #define PACKETDEBUG(arg...) udsl_print_packet (arg)
drivers/usb/atm/usb_atm.h +18 -1
@@ -21,12 +21,29 @@* ******************************************************************************/ +#include <linux/config.h> #include <linux/list.h> -#include <linux/usb.h> #include <linux/kref.h> #include <linux/atm.h> #include <linux/atmdev.h> #include <asm/semaphore.h> + +/* +#define DEBUG +#define VERBOSE_DEBUG +*/ + +#if !defined (DEBUG ) && defined (CONFIG_USB_DEBUG ) +# define DEBUG +#endif + +#include <linux/usb.h> + +#ifdef DEBUG +#define UDSL_ASSERT (x) BUG_ON(!(x)) +#else +#define UDSL_ASSERT (x) do { if (!(x)) warn("failed assertion '" #x "' at line %d", __LINE__); } while(0) +#endif #define UDSL_MAX_RCV_URBS 4#define UDSL_MAX_SND_URBS 4
ChangeSet 1.1938.444.32, 2004/12/22 13:06:36-08:00, [email protected]
[PATCH] PCI: add legacy resources to sysfs for pci busses
This patch adds legacy_io and legacy_mem files to the pci_bus class hierarchy in sysfs. The files can be used (if the platform supports them) to access legacy I/O port space and legacy ISA memory space--useful for things like x86 emulators or VGA card POSTing. The interfaces are documented in Documentation/filesystems/sysfs-pci.txt.
Documentation/filesystems/sysfs-pci.txt | 26 +++++++++- drivers/pci/pci-sysfs.c | 70 +++++++++++++++++++++++++++ drivers/pci/probe.c | 82 ++++++++++++++++++++++++++------ include/linux/pci.h | 2 4 files changed, 164 insertions(+), 16 deletions(-)
Documentation/filesystems/sysfs-pci.txt +25 -1
@@ -3,7 +3,7 @@ sysfs, usually mounted at /sys, provides access to PCI resources on platforms that support it. For example, a given bus might look like this: - pci0000:17 + /sys/devices/pci0000:17 |-- 0000:17:00.0 | |-- class | |-- config
@@ -56,9 +56,33 @@ from userspace. Note that some platforms don't support mmapping of certain resources, so be sure to check the return value from any attempted mmap. +Accessing legacy resources through sysfs + +Legacy I/O port and ISA memory resources are also provided in sysfs if the +underlying platform supports them. They're located in the PCI class heirarchy, +e.g. + + /sys/class/pci_bus/0000:17/ + |-- bridge -> ../../../devices/pci0000:17 + |-- cpuaffinity + |-- legacy_io + `-- legacy_mem + +The legacy_io file is a read/write file that can be used by applications to +do legacy port I/O. The application should open the file, seek to the desired +port (e.g. 0x3e8) and do a read or a write of 1, 2 or 4 bytes. The legacy_mem +file should be mmapped with an offset corresponding to the memory offset +desired, e.g. 0xa0000 for the VGA frame buffer. The application can then +simply dereference the returned pointer (after checking for errors of course) +to access legacy memory space. + Supporting PCI access on new platforms In order to support PCI resource mapping as described above, Linux platform code must define HAVE_PCI_MMAP and provide a pci_mmap_page_range function. Platforms are free to only support subsets of the mmap functionality, but useful return codes should be provided. + +Legacy resources are protected by the HAVE_PCI_LEGACY define. Platforms +wishing to support legacy functionality should define it and provide +pci_legacy_read, pci_legacy_write and pci_mmap_legacy_page_range functions.
drivers/pci/pci-sysfs.c +70 -0
76 lines not on this page · raw message
drivers/pci/probe.c +67 -15
106 lines not on this page · raw message
include/linux/pci.h +2 -0
@@ -594,6 +594,8 @@unsigned short pad2;struct device *bridge;struct class_device class_dev; +struct bin_attribute *legacy_io;/* legacy I/O for this bus */ +struct bin_attribute *legacy_mem;/* legacy mem */ };#define pci_bus_b (n) list_entry(n, struct pci_bus, node)
ChangeSet 1.1938.444.33, 2004/12/22 13:50:21-08:00, [email protected]
[PATCH] driver core: Fix up vesafb failure probing.
bus.c file invokes a probe callback for most devices in a list, then checks for -ENODEV return ("no such device"), if so it remains silent. However, some drivers (including vesafb.c) may return -ENXIO ("no such device or address"), which is indeed error -6.
I shut up the warning with the attached patch, that basically ignores both -ENODEV and -ENXIO.
Quoted 1 line
From https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=125890
original patch by: Alessandro Suardi <[email protected]>
drivers/base/bus.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-)
drivers/base/bus.c +1 -1
@@ -326,7 +326,7 @@if (!error)/* success, driver matched */ return 1 ; -if (error != -ENODEV ) +if (error != -ENODEV && error != -ENXIO )/* driver matched but the probe failed */ printk(KERN_WARNING "%s: probe of %s failed with error %d\n",
ChangeSet 1.1938.446.1, 2004/12/15 14:12:02-08:00, [email protected]
[PATCH] USB: serial driver for TI USB 3410/5052 chips (3/3)
* New USB serial driver for devices based on the TI USB 3410 and 5052 chips. (3/3)
2 lines not shown · raw message
drivers/usb/serial/ti_fw_5052.h new file +885 -0
@@ -0,0 +1,885 @@ +/* vi: ts=8 sw=8 +* +* TI 5052 USB Serial Driver Firmware Header +* +* Copyright (C) 2004 Texas Instruments +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +*/ + +#ifndef _TI_FW_5052_H_ +#define _TI_FW_5052_H_ + +/* firmware 9/18/04 */ + +static unsigned char ti_fw_5052[] = { +0xC1 ,0x35 ,/* firmware image length excluding header, little endian */ +0x00 ,/* placeholder for checksum */ + +0x02 ,0x00 ,0x1e ,0x02 ,0x1b ,0x32 ,0xff ,0xff ,0xff ,0xff ,0xff ,0x02 ,0x32 ,0x6a ,0xff ,0xff , +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0x02 ,0x33 ,0x15 ,0x75 ,0x81 , +0xc8 ,0x90 ,0xfe ,0xf0 ,0x85 ,0x83 ,0xa0 ,0x12 ,0x34 ,0x7d ,0xec ,0x4d ,0x60 ,0x6a ,0x78 ,0xa5 , +0x80 ,0x03 ,0x76 ,0x00 ,0x18 ,0xb8 ,0x96 ,0xfa ,0x78 ,0x79 ,0x80 ,0x03 ,0x76 ,0x00 ,0x18 ,0xb8 , +0x5f ,0xfa ,0x78 ,0x20 ,0x80 ,0x03 ,0x76 ,0x00 ,0x18 ,0xb8 ,0x20 ,0xfa ,0x90 ,0xfe ,0xe5 ,0xae , +0x83 ,0xaf ,0x82 ,0x90 ,0xfd ,0x00 ,0x12 ,0x00 ,0xa1 ,0x60 ,0x05 ,0xe4 ,0xf0 ,0xa3 ,0x80 ,0xf6 , +0x90 ,0xfe ,0xf0 ,0xa8 ,0x82 ,0x90 ,0xfe ,0xf0 ,0xa9 ,0x82 ,0xe8 ,0xc3 ,0x99 ,0x50 ,0x05 ,0x76 , +0x00 ,0x08 ,0x80 ,0xf6 ,0x90 ,0x00 ,0xff ,0x12 ,0x00 ,0xaa ,0x90 ,0x01 ,0x03 ,0x12 ,0x00 ,0xaa , +0x90 ,0x01 ,0x07 ,0x12 ,0x00 ,0xaa ,0x90 ,0x01 ,0x0b ,0x12 ,0x00 ,0xc8 ,0x90 ,0x01 ,0x11 ,0x12 , +0x00 ,0xc8 ,0x90 ,0x01 ,0x17 ,0x12 ,0x00 ,0xc8 ,0x75 ,0xd0 ,0x00 ,0x12 ,0x33 ,0x67 ,0x02 ,0x01 , +0x1d ,0xef ,0x65 ,0x82 ,0x70 ,0x03 ,0xee ,0x65 ,0x83 ,0x22 ,0xe4 ,0x93 ,0xf8 ,0x74 ,0x01 ,0x93 , +0xf9 ,0x74 ,0x02 ,0x93 ,0xfe ,0x74 ,0x03 ,0x93 ,0xf5 ,0x82 ,0x8e ,0x83 ,0xe8 ,0x69 ,0x70 ,0x01 , +0x22 ,0xe4 ,0x93 ,0xf6 ,0xa3 ,0x08 ,0x80 ,0xf4 ,0xe4 ,0x93 ,0xfc ,0x74 ,0x01 ,0x93 ,0xfd ,0x74 , +0x02 ,0x93 ,0xfe ,0x74 ,0x03 ,0x93 ,0xff ,0x74 ,0x04 ,0x93 ,0xf8 ,0x74 ,0x05 ,0x93 ,0xf5 ,0x82 , +0x88 ,0x83 ,0x12 ,0x00 ,0xa1 ,0x70 ,0x01 ,0x22 ,0xe4 ,0x93 ,0xa3 ,0xa8 ,0x83 ,0xa9 ,0x82 ,0x8c , +0x83 ,0x8d ,0x82 ,0xf0 ,0xa3 ,0xac ,0x83 ,0xad ,0x82 ,0x88 ,0x83 ,0x89 ,0x82 ,0x80 ,0xe3 ,0x21 , +0x21 ,0x04 ,0x92 ,0x7a ,0x7a ,0x04 ,0x92 ,0xa6 ,0xa8 ,0x04 ,0x92 ,0xfe ,0xf0 ,0x04 ,0x94 ,0x04 , +0x94 ,0xfb ,0xfb ,0x04 ,0x99 ,0x04 ,0x94 ,0xfb ,0xfb ,0x04 ,0xf9 ,0x04 ,0xf9 ,0x80 ,0xfe ,0xd0 , +0xf0 ,0x30 ,0xf0 ,0x09 ,0x20 ,0xf3 ,0x03 ,0xf6 ,0x80 ,0x10 ,0xf7 ,0x80 ,0x0d ,0x30 ,0xf1 ,0x09 , +0x20 ,0xf3 ,0x03 ,0xf2 ,0x80 ,0x04 ,0xf3 ,0x80 ,0x01 ,0xf0 ,0x20 ,0xf4 ,0x04 ,0xfc ,0xd0 ,0xe0 , +0xcc ,0x22 ,0xcc ,0xc0 ,0xe0 ,0x12 ,0x01 ,0x5a ,0x02 ,0x01 ,0x4b ,0xbc ,0x00 ,0x05 ,0xd0 ,0xf0 , +0xac ,0xf0 ,0x22 ,0xc3 ,0x13 ,0xdc ,0xfc ,0x02 ,0x01 ,0x21 ,0xbf ,0x00 ,0x09 ,0xed ,0x25 ,0x82 , +0x75 ,0xf0 ,0x01 ,0xf8 ,0xe6 ,0x22 ,0xbf ,0x01 ,0x0f ,0xed ,0x25 ,0x82 ,0xf5 ,0x82 ,0xee ,0x35 , +0x83 ,0xf5 ,0x83 ,0x75 ,0xf0 ,0x04 ,0xe0 ,0x22 ,0xed ,0x25 ,0x82 ,0x75 ,0xf0 ,0x02 ,0xf8 ,0xe2 , +0x22 ,0xd0 ,0x83 ,0xd0 ,0x82 ,0xf5 ,0xf0 ,0xc3 ,0xe4 ,0x93 ,0xa3 ,0xc5 ,0xf0 ,0x95 ,0xf0 ,0xc0 , +0xe0 ,0xc3 ,0xd0 ,0xf0 ,0xe4 ,0x93 ,0xa3 ,0x95 ,0xf0 ,0x40 ,0x12 ,0xa3 ,0xa3 ,0xc3 ,0xe5 ,0xf0 , +0x33 ,0x50 ,0x02 ,0x05 ,0x83 ,0x25 ,0x82 ,0xf5 ,0x82 ,0x50 ,0x02 ,0x05 ,0x83 ,0x74 ,0x01 ,0x93 , +0xc0 ,0xe0 ,0xe4 ,0x93 ,0xc0 ,0xe0 ,0x22 ,0xd0 ,0x83 ,0xd0 ,0x82 ,0xf5 ,0xf0 ,0xe4 ,0x93 ,0x70 , +0x09 ,0x74 ,0x01 ,0x93 ,0x70 ,0x04 ,0xa3 ,0xa3 ,0x80 ,0x0c ,0x74 ,0x02 ,0x93 ,0x65 ,0xf0 ,0x60 , +0x05 ,0xa3 ,0xa3 ,0xa3 ,0x80 ,0xe7 ,0x74 ,0x01 ,0x93 ,0xc0 ,0xe0 ,0xe4 ,0x93 ,0xc0 ,0xe0 ,0x22 , +0x12 ,0x02 ,0x5b ,0x02 ,0x01 ,0xf2 ,0x12 ,0x02 ,0xaf ,0x02 ,0x01 ,0xf2 ,0x12 ,0x02 ,0xd3 ,0x02 , +0x01 ,0xf2 ,0x30 ,0xe0 ,0x07 ,0x20 ,0xe3 ,0x02 ,0xe6 ,0x22 ,0xe7 ,0x22 ,0x30 ,0xe1 ,0x07 ,0x20 , +0xe3 ,0x02 ,0xe2 ,0x22 ,0xe3 ,0x22 ,0x30 ,0xe2 ,0x02 ,0xe0 ,0x22 ,0xe4 ,0x93 ,0x22 ,0x12 ,0x02 , +0xd3 ,0x02 ,0x02 ,0x1a ,0x12 ,0x02 ,0xaf ,0x02 ,0x02 ,0x1a ,0xab ,0xf0 ,0x12 ,0x02 ,0x24 ,0xcb , +0xc5 ,0xf0 ,0xcb ,0x22 ,0x30 ,0xe0 ,0x10 ,0x20 ,0xe3 ,0x06 ,0xe6 ,0xf5 ,0xf0 ,0x08 ,0xe6 ,0x22 , +0xe7 ,0xf5 ,0xf0 ,0x09 ,0xe7 ,0x19 ,0x22 ,0x30 ,0xe1 ,0x10 ,0x20 ,0xe3 ,0x06 ,0xe2 ,0xf5 ,0xf0 , +0x08 ,0xe2 ,0x22 ,0xe3 ,0xf5 ,0xf0 ,0x09 ,0xe3 ,0x19 ,0x22 ,0x30 ,0xe2 ,0x06 ,0xe0 ,0xf5 ,0xf0 , +0xa3 ,0xe0 ,0x22 ,0xe4 ,0x93 ,0xf5 ,0xf0 ,0x74 ,0x01 ,0x93 ,0x22 ,0xbb ,0x00 ,0x03 ,0x74 ,0x09 , +0x22 ,0xbb ,0x01 ,0x07 ,0x89 ,0x82 ,0x8a ,0x83 ,0x74 ,0x04 ,0x22 ,0xbb ,0x02 ,0x07 ,0x89 ,0x82 , +0x8a ,0x83 ,0x74 ,0x10 ,0x22 ,0x74 ,0x0a ,0x22 ,0x02 ,0x02 ,0x7b ,0xbb ,0x00 ,0x07 ,0xe9 ,0x25 , +0x82 ,0xf8 ,0x74 ,0x01 ,0x22 ,0xbb ,0x01 ,0x0d ,0xe9 ,0x25 ,0x82 ,0xf5 ,0x82 ,0xea ,0x35 ,0x83 , +0xf5 ,0x83 ,0x74 ,0x04 ,0x22 ,0xbb ,0x02 ,0x0d ,0xe9 ,0x25 ,0x82 ,0xf5 ,0x82 ,0xea ,0x35 ,0x83 , +0xf5 ,0x83 ,0x74 ,0x10 ,0x22 ,0xe9 ,0x25 ,0x82 ,0xf8 ,0x74 ,0x02 ,0x22 ,0x02 ,0x02 ,0xaf ,0xbf , +0x00 ,0x05 ,0xed ,0xf8 ,0x74 ,0x01 ,0x22 ,0xbf ,0x01 ,0x07 ,0x8d ,0x82 ,0x8e ,0x83 ,0x74 ,0x04 , +0x22 ,0xbf ,0x02 ,0x07 ,0x8d ,0x82 ,0x8e ,0x83 ,0x74 ,0x10 ,0x22 ,0xed ,0xf8 ,0x74 ,0x02 ,0x22 , +0x02 ,0x02 ,0xd3 ,0xbf ,0x00 ,0x07 ,0xed ,0x25 ,0x82 ,0xf8 ,0x74 ,0x01 ,0x22 ,0xbf ,0x01 ,0x0d , +0xed ,0x25 ,0x82 ,0xf5 ,0x82 ,0xee ,0x35 ,0x83 ,0xf5 ,0x83 ,0x74 ,0x04 ,0x22 ,0xbf ,0x02 ,0x0d , +0xed ,0x25 ,0x82 ,0xf5 ,0x82 ,0xee ,0x35 ,0x83 ,0xf5 ,0x83 ,0x74 ,0x10 ,0x22 ,0xed ,0x25 ,0x82 , +0xf8 ,0x74 ,0x02 ,0x22 ,0x02 ,0x03 ,0x07 ,0xc0 ,0xe0 ,0x12 ,0x02 ,0x5b ,0x02 ,0x03 ,0x1f ,0xc0 , +0xe0 ,0x12 ,0x02 ,0xaf ,0x02 ,0x03 ,0x1f ,0xc0 ,0xe0 ,0x12 ,0x02 ,0xd3 ,0x02 ,0x03 ,0x1f ,0x30 , +0xe0 ,0x0b ,0x20 ,0xe3 ,0x04 ,0xd0 ,0xe0 ,0xf6 ,0x22 ,0xd0 ,0xe0 ,0xf7 ,0x22 ,0x30 ,0xe1 ,0x0b , +0x20 ,0xe3 ,0x04 ,0xd0 ,0xe0 ,0xf2 ,0x22 ,0xd0 ,0xe0 ,0xf3 ,0x22 ,0xd0 ,0xe0 ,0xf0 ,0x22 ,0xc9 , +0xcd ,0xc9 ,0xca ,0xce ,0xca ,0xcb ,0xcf ,0xcb ,0x12 ,0x03 ,0x52 ,0xed ,0xf9 ,0xee ,0xfa ,0xef , +0xfb ,0x22 ,0xbb ,0x00 ,0x2f ,0xbf ,0x00 ,0x0a ,0xfa ,0xed ,0xf8 ,0xe7 ,0xf6 ,0x08 ,0x09 ,0xda , +0xfa ,0x22 ,0xbf ,0x01 ,0x12 ,0x8d ,0x82 ,0x8e ,0x83 ,0xf8 ,0x02 ,0x03 ,0x6f ,0x09 ,0xa3 ,0xe7 , +0xf0 ,0xd8 ,0xfa ,0x22 ,0x02 ,0x03 ,0x7a ,0xfa ,0xed ,0xf8 ,0xe7 ,0xf2 ,0x08 ,0x09 ,0xda ,0xfa , +0x22 ,0x02 ,0x03 ,0x84 ,0xbb ,0x01 ,0x4d ,0xbf ,0x00 ,0x14 ,0x89 ,0x82 ,0x8a ,0x83 ,0xf9 ,0xed , +0xf8 ,0x02 ,0x03 ,0x96 ,0x08 ,0xa3 ,0xe0 ,0xf6 ,0xd9 ,0xfa ,0x22 ,0x02 ,0x03 ,0xa7 ,0xbf ,0x01 , +0x22 ,0x8d ,0x82 ,0x8e ,0x83 ,0xfb ,0x08 ,0xc9 ,0xc5 ,0x82 ,0xc9 ,0xca ,0xc5 ,0x83 ,0xca ,0xe0 , +0xa3 ,0xc9 ,0xc5 ,0x82 ,0xc9 ,0xca ,0xc5 ,0x83 ,0xca ,0xf0 ,0xa3 ,0xdb ,0xea ,0xd8 ,0xe8 ,0x22 , +0x02 ,0x03 ,0xca ,0x8d ,0x82 ,0x8e ,0x83 ,0xf9 ,0xed ,0xf8 ,0xe0 ,0xf2 ,0x08 ,0xa3 ,0xd9 ,0xfa , +0x22 ,0x02 ,0x03 ,0xd4 ,0xbb ,0x02 ,0x4d ,0xbf ,0x00 ,0x12 ,0x89 ,0x82 ,0x8a ,0x83 ,0xf9 ,0xed , +0xf8 ,0x02 ,0x03 ,0xe6 ,0x08 ,0xa3 ,0xe4 ,0x93 ,0xf6 ,0xd9 ,0xf9 ,0x22 ,0xbf ,0x01 ,0x23 ,0x8d , +0x82 ,0x8e ,0x83 ,0xfb ,0x08 ,0xc9 ,0xc5 ,0x82 ,0xc9 ,0xca ,0xc5 ,0x83 ,0xca ,0xe4 ,0x93 ,0xa3 , +0xc9 ,0xc5 ,0x82 ,0xc9 ,0xca ,0xc5 ,0x83 ,0xca ,0xf0 ,0xa3 ,0xdb ,0xe9 ,0xd8 ,0xe7 ,0x22 ,0x02 , +0x04 ,0x19 ,0x89 ,0x82 ,0x8a ,0x83 ,0xf9 ,0xed ,0xf8 ,0xe4 ,0x93 ,0xf2 ,0x08 ,0xa3 ,0xd9 ,0xf9 , +0x22 ,0x02 ,0x04 ,0x2a ,0xbf ,0x00 ,0x0d ,0xfa ,0xed ,0xf8 ,0xe3 ,0xf6 ,0x08 ,0x09 ,0xda ,0xfa , +0x22 ,0x02 ,0x04 ,0x34 ,0xbf ,0x01 ,0x12 ,0x8d ,0x82 ,0x8e ,0x83 ,0xf8 ,0x02 ,0x04 ,0x41 ,0x09 , +0xa3 ,0xe3 ,0xf0 ,0xd8 ,0xfa ,0x22 ,0x02 ,0x04 ,0x4c ,0xfa ,0xed ,0xf8 ,0xe3 ,0xf2 ,0x08 ,0x09 , +0xda ,0xfa ,0x22 ,0x02 ,0x04 ,0x56 ,0xe6 ,0xfb ,0x08 ,0xe6 ,0xfa ,0x08 ,0xe6 ,0xf9 ,0x04 ,0xf6 , +0x18 ,0x70 ,0x01 ,0x06 ,0x22 ,0xe6 ,0xff ,0x08 ,0xe6 ,0xfe ,0x08 ,0xe6 ,0xfd ,0x22 ,0xef ,0xf0 , +0xa3 ,0xee ,0xf0 ,0xa3 ,0xed ,0xf0 ,0x22 ,0xeb ,0xf0 ,0xa3 ,0xea ,0xf0 ,0xa3 ,0xe9 ,0xf0 ,0x22 , +0xe0 ,0xff ,0xa3 ,0xe0 ,0xfe ,0xa3 ,0xe0 ,0xfd ,0x22 ,0xe0 ,0xfb ,0xa3 ,0xe0 ,0xfa ,0xa3 ,0xe0 , +0xf9 ,0x22 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x04 ,0xf9 ,0x00 ,0x5b ,0x05 ,0x73 ,0x00 , +0x26 ,0x05 ,0x9a ,0x00 ,0x33 ,0x0a ,0x0b ,0x00 ,0x5b ,0x0a ,0x77 ,0x00 ,0x60 ,0x15 ,0x52 ,0x00 , +0x5b ,0x0c ,0xfb ,0x00 ,0x5b ,0x09 ,0xab ,0x00 ,0x5b ,0x09 ,0xe2 ,0x00 ,0x5b ,0x0d ,0xc2 ,0x00 , +0x5b ,0x0b ,0xf3 ,0x00 ,0x5b ,0x0a ,0x1e ,0x00 ,0x5b ,0x0a ,0x53 ,0x00 ,0x5b ,0x17 ,0x4a ,0x00 , +0x33 ,0x17 ,0x60 ,0x00 ,0x34 ,0x1e ,0x4d ,0x00 ,0x43 ,0x1e ,0xf0 ,0x00 ,0x44 ,0x20 ,0x5d ,0x00 , +0x44 ,0x20 ,0x4b ,0x00 ,0x47 ,0x1f ,0x17 ,0x00 ,0x47 ,0x1f ,0xbc ,0x00 ,0x4d ,0x20 ,0x0d ,0x00 , +0x4f ,0x1f ,0x39 ,0x00 ,0x58 ,0x31 ,0xf5 ,0x00 ,0x5b ,0x7c ,0xcc ,0x7d ,0xff ,0x12 ,0x1c ,0xfe , +0x22 ,0x74 ,0x90 ,0x90 ,0xff ,0x91 ,0xf0 ,0x90 ,0xff ,0xfc ,0xe0 ,0x20 ,0xe7 ,0x2d ,0xc2 ,0xaf , +0xae ,0x59 ,0xaf ,0x58 ,0x75 ,0x5a ,0x20 ,0xe5 ,0x5a ,0x14 ,0xc5 ,0x5a ,0x60 ,0x19 ,0xe4 ,0xfe , +0x7f ,0x05 ,0xee ,0x4f ,0xce ,0x24 ,0xff ,0xce ,0xcf ,0x34 ,0xff ,0xcf ,0x60 ,0x07 ,0xe4 ,0x90 , +0xff ,0x92 ,0xf0 ,0x80 ,0xed ,0x80 ,0xe0 ,0x8e ,0x59 ,0x8f ,0x58 ,0x22 ,0x12 ,0x05 ,0x01 ,0x7d , +0x07 ,0x7c ,0xb7 ,0x12 ,0x32 ,0x11 ,0x7d ,0x0f ,0x7c ,0x6e ,0x12 ,0x32 ,0x2b ,0x78 ,0x97 ,0x7a , +0x06 ,0xe4 ,0xf6 ,0x08 ,0xda ,0xfc ,0x7a ,0x06 ,0x12 ,0x05 ,0xcf ,0x7c ,0x03 ,0x12 ,0x0e ,0x57 , +0x7c ,0x04 ,0x12 ,0x0e ,0x57 ,0x12 ,0x21 ,0x8b ,0xe4 ,0xfe ,0xff ,0x7c ,0x0f ,0x12 ,0x31 ,0x9a , +0xd2 ,0xa8 ,0x22 ,0x12 ,0x30 ,0x85 ,0xe4 ,0x90 ,0xfd ,0x40 ,0xf0 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x30 , +0xe4 ,0x08 ,0x74 ,0x01 ,0x90 ,0xfd ,0x41 ,0xf0 ,0x80 ,0x05 ,0xe4 ,0x90 ,0xfd ,0x41 ,0xf0 ,0x7d , +0x0a ,0x7c ,0x00 ,0x12 ,0x24 ,0xb1 ,0x12 ,0x31 ,0x08 ,0x22 ,0x12 ,0x30 ,0x85 ,0x90 ,0xfd ,0x41 , +0xe0 ,0x14 ,0x70 ,0x0e ,0x90 ,0xff ,0xf0 ,0xe0 ,0x44 ,0x10 ,0xf0 ,0x7c ,0x00 ,0x12 ,0x25 ,0x4a , +0x80 ,0x19 ,0x90 ,0xfd ,0x41 ,0xe0 ,0x70 ,0x0e ,0x90 ,0xff ,0xf0 ,0xe0 ,0x54 ,0xef ,0xf0 ,0x7c , +0x00 ,0x12 ,0x25 ,0x4a ,0x80 ,0x05 ,0x7c ,0x17 ,0x12 ,0x25 ,0x4a ,0x12 ,0x31 ,0x08 ,0x22 ,0x90 , +0xff ,0xf0 ,0xe0 ,0x54 ,0xab ,0xf0 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x44 ,0x20 ,0xf0 ,0x22 ,0x8c ,0x37 , +0x8d ,0x36 ,0x78 ,0x7c ,0xed ,0xf6 ,0x08 ,0xec ,0xf6 ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 , +0x00 ,0x05 ,0x12 ,0x01 ,0xec ,0x78 ,0x7a ,0xf6 ,0x78 ,0x7c ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xed , +0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x04 ,0x12 ,0x01 ,0xec ,0x54 ,0x0f ,0xfc ,0x7d ,0x7a , +0x12 ,0x17 ,0x9d ,0x78 ,0x7a ,0xe6 ,0x70 ,0x0d ,0xad ,0x3a ,0xae ,0x39 ,0xaf ,0x38 ,0xe4 ,0x12 , +0x03 ,0x0f ,0x7c ,0x08 ,0x22 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x54 ,0xfe ,0xf0 ,0x90 ,0xff ,0xf0 ,0xe0 , +0x54 ,0xfd ,0xf0 ,0x80 ,0x1e ,0x78 ,0x7c ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xed ,0xfe ,0xec ,0xfd , +0x7f ,0x01 ,0x90 ,0x00 ,0x08 ,0x12 ,0x02 ,0x0e ,0x25 ,0xe0 ,0x44 ,0x01 ,0x90 ,0xff ,0xf3 ,0xf0 , +0x02 ,0x06 ,0xdb ,0x78 ,0x7c ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 , +0x90 ,0x00 ,0x06 ,0x12 ,0x02 ,0x0e ,0x54 ,0xfe ,0x90 ,0xff ,0xf3 ,0xf0 ,0x80 ,0x2b ,0x78 ,0x7c , +0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x08 ,0x12 ,0x02 , +0x0e ,0xfa ,0xeb ,0x90 ,0xff ,0xf1 ,0xf0 ,0x12 ,0x08 ,0xca ,0x40 ,0x0d ,0xad ,0x3a ,0xae ,0x39 , +0xaf ,0x38 ,0xe4 ,0x12 ,0x03 ,0x0f ,0x7c ,0x18 ,0x22 ,0x78 ,0x7c ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc , +0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x08 ,0x12 ,0x02 ,0x0e ,0x90 ,0xff ,0xf1 ,0xf0 , +0x12 ,0x08 ,0xca ,0x40 ,0x0d ,0xad ,0x3a ,0xae ,0x39 ,0xaf ,0x38 ,0xe4 ,0x12 ,0x03 ,0x0f ,0x7c , +0x18 ,0x22 ,0x78 ,0x7c ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 , +0x00 ,0x06 ,0x12 ,0x02 ,0x0e ,0x44 ,0x01 ,0x90 ,0xff ,0xf3 ,0xf0 ,0x78 ,0x7d ,0xe6 ,0x24 ,0x03 , +0xf6 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf6 ,0x78 ,0x7a ,0xe6 ,0x24 ,0xfe ,0x50 ,0x09 ,0x90 ,0xff ,0xf0 , +0xe0 ,0x54 ,0xfd ,0xf0 ,0x80 ,0x07 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x44 ,0x02 ,0xf0 ,0xe4 ,0x90 ,0xff , +0xf1 ,0xf0 ,0x78 ,0x7b ,0x76 ,0x00 ,0x78 ,0x7a ,0xe6 ,0x24 ,0xff ,0xfc ,0xe4 ,0x34 ,0xff ,0xfd , +0x78 ,0x7b ,0xe6 ,0x7f ,0x00 ,0xfe ,0xec ,0xd3 ,0x9e ,0xef ,0x64 ,0x80 ,0xcd ,0x64 ,0x80 ,0x9d , +0x40 ,0x2f ,0x12 ,0x08 ,0xaf ,0x40 ,0x0f ,0x78 ,0x7b ,0xe6 ,0xad ,0x3a ,0xae ,0x39 ,0xaf ,0x38 , +0x12 ,0x03 ,0x0f ,0x7c ,0x18 ,0x22 ,0x90 ,0xff ,0xf2 ,0xe0 ,0xfc ,0x78 ,0x7c ,0x86 ,0x83 ,0x08 , +0x86 ,0x82 ,0xec ,0xf0 ,0x78 ,0x7b ,0x06 ,0xa3 ,0x78 ,0x7c ,0xa6 ,0x83 ,0x08 ,0xa6 ,0x82 ,0x80 , +0xb5 ,0x12 ,0x08 ,0xaf ,0x40 ,0x0f ,0x78 ,0x7b ,0xe6 ,0xad ,0x3a ,0xae ,0x39 ,0xaf ,0x38 ,0x12 , +0x03 ,0x0f ,0x7c ,0x18 ,0x22 ,0x90 ,0xff ,0xf2 ,0xe0 ,0xfc ,0x78 ,0x7c ,0x86 ,0x83 ,0x08 ,0x86 , +0x82 ,0xec ,0xf0 ,0x78 ,0x7a ,0xe6 ,0xad ,0x3a ,0xae ,0x39 ,0xaf ,0x38 ,0x12 ,0x03 ,0x0f ,0x7c , +0x00 ,0x22 ,0x8c ,0x37 ,0x8d ,0x36 ,0x78 ,0x7c ,0xed ,0xf6 ,0x08 ,0xec ,0xf6 ,0xed ,0xfe ,0xec , +0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x05 ,0x12 ,0x01 ,0xec ,0x78 ,0x7b ,0xf6 ,0x78 ,0x7c ,0xe6 ,0xfd , +0x08 ,0xe6 ,0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x04 ,0x12 ,0x01 ,0xec ,0x54 , +0x0f ,0xfc ,0x7d ,0x7b ,0x12 ,0x17 ,0x9d ,0x78 ,0x7b ,0xe6 ,0x70 ,0x03 ,0x7c ,0x08 ,0x22 ,0x90 , +0xff ,0xf0 ,0xe0 ,0x54 ,0xfe ,0xf0 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x54 ,0xfd ,0xf0 ,0x80 ,0x1b ,0x78 , +0x7c ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x08 ,0x12 , +0x02 ,0x0e ,0x25 ,0xe0 ,0x90 ,0xff ,0xf3 ,0xf0 ,0x80 ,0x5b ,0x78 ,0x7c ,0xe6 ,0xfd ,0x08 ,0xe6 , +0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x06 ,0x12 ,0x02 ,0x0e ,0x54 ,0xfe ,0x90 , +0xff ,0xf3 ,0xf0 ,0x80 ,0x21 ,0x78 ,0x7c ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xed ,0xfe ,0xec ,0xfd , +0x7f ,0x01 ,0x90 ,0x00 ,0x08 ,0x12 ,0x02 ,0x0e ,0xfa ,0xeb ,0x90 ,0xff ,0xf1 ,0xf0 ,0x12 ,0x08 , +0xca ,0x40 ,0x03 ,0x7c ,0x18 ,0x22 ,0x78 ,0x7c ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xed ,0xfe ,0xec , +0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x08 ,0x12 ,0x02 ,0x0e ,0x90 ,0xff ,0xf1 ,0xf0 ,0x12 ,0x08 ,0xca , +0x40 ,0x03 ,0x7c ,0x18 ,0x22 ,0x78 ,0x7d ,0xe6 ,0x24 ,0x0a ,0xf6 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf6 , +0x78 ,0x7a ,0x76 ,0x00 ,0x78 ,0x7b ,0xe6 ,0x24 ,0xff ,0xfc ,0xe4 ,0x34 ,0xff ,0xfd ,0x78 ,0x7a , +0xe6 ,0x7f ,0x00 ,0xfe ,0xec ,0xd3 ,0x9e ,0xef ,0x64 ,0x80 ,0xcd ,0x64 ,0x80 ,0x9d ,0x40 ,0x21 , +0x78 ,0x7c ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xe0 ,0x90 ,0xff ,0xf1 ,0xf0 ,0x12 ,0x08 ,0xca ,0x40 , +0x03 ,0x7c ,0x18 ,0x22 ,0x78 ,0x7a ,0x06 ,0x78 ,0x7d ,0x06 ,0xe6 ,0x18 ,0x70 ,0x01 ,0x06 ,0x80 , +0xc3 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x44 ,0x01 ,0xf0 ,0x78 ,0x7c ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xe0 , +0x90 ,0xff ,0xf1 ,0xf0 ,0x12 ,0x08 ,0xca ,0x40 ,0x03 ,0x7c ,0x18 ,0x22 ,0x7c ,0x00 ,0x22 ,0x90 , +0xff ,0xf0 ,0xe0 ,0x20 ,0xe7 ,0x12 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x30 ,0xe5 ,0x09 ,0x90 ,0xff ,0xf0 , +0xe0 ,0x44 ,0x20 ,0xf0 ,0xc3 ,0x22 ,0x80 ,0xe7 ,0xd3 ,0x22 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x20 ,0xe3 , +0x12 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x30 ,0xe5 ,0x09 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x44 ,0x20 ,0xf0 ,0xc3 , +0x22 ,0x80 ,0xe7 ,0xd3 ,0x22 ,0x8c ,0x42 ,0x8d ,0x41 ,0x7c ,0x00 ,0xed ,0x54 ,0xf0 ,0xfd ,0xec , +0x70 ,0x03 ,0xed ,0x64 ,0x30 ,0x70 ,0x05 ,0x75 ,0x3e ,0x03 ,0x80 ,0x03 ,0x75 ,0x3e ,0x04 ,0xac , +0x3e ,0x12 ,0x0f ,0x7c ,0x75 ,0x83 ,0x00 ,0x85 ,0x83 ,0x40 ,0xe5 ,0x41 ,0x54 ,0x0f ,0xf5 ,0x3f , +0xe5 ,0x40 ,0x70 ,0x04 ,0xe5 ,0x3f ,0x64 ,0x03 ,0x70 ,0x35 ,0xe5 ,0x3e ,0x24 ,0xfd ,0x75 ,0xf0 , +0x0a ,0xa4 ,0x24 ,0x0a ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfd ,0xf5 ,0x83 ,0xe0 ,0x30 ,0xe6 ,0x05 ,0x12 , +0x10 ,0x67 ,0x80 ,0x19 ,0xe5 ,0x3e ,0x24 ,0x97 ,0xf8 ,0xc6 ,0x54 ,0xfb ,0xf6 ,0x78 ,0xa3 ,0xe6 , +0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0x74 ,0x0f ,0xf0 ,0x80 ,0x59 ,0xe5 , +0x40 ,0x70 ,0x04 ,0xe5 ,0x3f ,0x64 ,0x04 ,0x70 ,0x48 ,0xe5 ,0x3e ,0x24 ,0xfd ,0x75 ,0xf0 ,0x0a , +0xa4 ,0x24 ,0x0a ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfd ,0xf5 ,0x83 ,0xe0 ,0x30 ,0xe5 ,0x07 ,0xac ,0x42 , +0xad ,0x41 ,0x12 ,0x1c ,0x93 ,0xe5 ,0x42 ,0x30 ,0xe2 ,0x15 ,0x78 ,0xa7 ,0xe6 ,0x30 ,0xe0 ,0x0f , +0x78 ,0xa7 ,0xe6 ,0x30 ,0xe1 ,0x09 ,0xe4 ,0xff ,0x04 ,0xfe ,0x7c ,0x04 ,0x12 ,0x31 ,0x9a ,0x78 , +0xa3 ,0xe6 ,0x24 ,0x06 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0x74 ,0x0f ,0xf0 ,0x80 , +0x07 ,0xe4 ,0xfc ,0x7d ,0xee ,0x12 ,0x1c ,0x93 ,0xc2 ,0x03 ,0x22 ,0x12 ,0x30 ,0x85 ,0x12 ,0x0f , +0x7c ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x06 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x90 , +0xfd ,0x40 ,0xf0 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 , +0xe0 ,0x90 ,0xfd ,0x41 ,0xf0 ,0xc2 ,0x03 ,0x7d ,0x02 ,0x7c ,0x00 ,0x12 ,0x24 ,0xb1 ,0x12 ,0x31 , +0x08 ,0x22 ,0x12 ,0x30 ,0x85 ,0x78 ,0x8f ,0xec ,0xf6 ,0xec ,0x24 ,0x97 ,0xf8 ,0xe6 ,0x30 ,0xe1 , +0x07 ,0x7c ,0x13 ,0x12 ,0x25 ,0x4a ,0x80 ,0x0f ,0x90 ,0xfd ,0x41 ,0xe0 ,0xfd ,0x78 ,0x8f ,0xe6 , +0xfc ,0x12 ,0x13 ,0xfd ,0x12 ,0x25 ,0x4a ,0x12 ,0x31 ,0x08 ,0x22 ,0x12 ,0x30 ,0x85 ,0x78 ,0x8f , +0xec ,0xf6 ,0x7d ,0x00 ,0x12 ,0x0f ,0x0b ,0x12 ,0x25 ,0x4a ,0x12 ,0x31 ,0x08 ,0x22 ,0x12 ,0x30 , +0x85 ,0x78 ,0x8f ,0xec ,0xf6 ,0xec ,0x24 ,0x97 ,0xf8 ,0xe6 ,0x30 ,0xe2 ,0x07 ,0x7c ,0x13 ,0x12 , +0x25 ,0x4a ,0x80 ,0x1b ,0x78 ,0x8f ,0xe6 ,0x24 ,0x97 ,0xf8 ,0xe6 ,0x20 ,0xe1 ,0x07 ,0x7c ,0x12 , +0x12 ,0x25 ,0x4a ,0x80 ,0x0a ,0x78 ,0x8f ,0xe6 ,0xfc ,0x12 ,0x14 ,0x21 ,0x12 ,0x25 ,0x4a ,0x12 , +0x31 ,0x08 ,0x22 ,0x12 ,0x30 ,0x85 ,0x78 ,0x8f ,0xec ,0xf6 ,0xec ,0x24 ,0x97 ,0xf8 ,0xe6 ,0x20 , +0xe2 ,0x07 ,0x7c ,0x11 ,0x12 ,0x25 ,0x4a ,0x80 ,0x0a ,0x78 ,0x8f ,0xe6 ,0xfc ,0x12 ,0x15 ,0x22 , +0x12 ,0x25 ,0x4a ,0x12 ,0x31 ,0x08 ,0x22 ,0x12 ,0x30 ,0x85 ,0x78 ,0x8f ,0xec ,0xf6 ,0x12 ,0x0f , +0x7c ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x09 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x90 , +0xfd ,0x47 ,0xf0 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x0a ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 , +0xe0 ,0x90 ,0xfd ,0x48 ,0xf0 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x03 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0xfc ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 , +0x83 ,0xe0 ,0xf5 ,0x5c ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 , +0x83 ,0xe0 ,0xf5 ,0x5d ,0x8c ,0x5b ,0xe4 ,0xec ,0x33 ,0x33 ,0x54 ,0x01 ,0x78 ,0x8f ,0xf6 ,0x60 , +0x08 ,0xe5 ,0x5c ,0x30 ,0xe1 ,0x03 ,0x78 ,0x8f ,0x06 ,0x78 ,0x8f ,0xe6 ,0x90 ,0xfd ,0x49 ,0xf0 , +0x78 ,0xa1 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0xfd ,0xa3 , +0xe0 ,0x54 ,0x0c ,0xfc ,0xed ,0x54 ,0xe6 ,0x8c ,0x5f ,0xf5 ,0x5e ,0xe5 ,0x5b ,0x30 ,0xe5 ,0x03 , +0x43 ,0x5f ,0x01 ,0xe5 ,0x5c ,0x20 ,0xe5 ,0x0e ,0xe5 ,0x5b ,0x54 ,0x7f ,0x70 ,0x08 ,0xe5 ,0x5b , +0x20 ,0xe7 ,0x03 ,0x43 ,0x5f ,0x02 ,0xe5 ,0x5b ,0x30 ,0xe3 ,0x03 ,0x43 ,0x5f ,0x10 ,0xe5 ,0x5b , +0x30 ,0xe2 ,0x03 ,0x43 ,0x5f ,0x20 ,0xe5 ,0x5b ,0x54 ,0x03 ,0x60 ,0x03 ,0x43 ,0x5f ,0x40 ,0xe5 , +0x5b ,0x30 ,0xe1 ,0x03 ,0x43 ,0x5f ,0x80 ,0xe5 ,0x5b ,0x30 ,0xe4 ,0x03 ,0x43 ,0x5e ,0x01 ,0xe5 , +0x5b ,0x30 ,0xe6 ,0x03 ,0x43 ,0x5e ,0x08 ,0xe5 ,0x5c ,0x20 ,0xe4 ,0x0e ,0xe5 ,0x5b ,0x54 ,0x7f , +0x70 ,0x08 ,0xe5 ,0x5b ,0x20 ,0xe7 ,0x03 ,0x43 ,0x5e ,0x10 ,0x53 ,0x5f ,0xfb ,0x53 ,0x5e ,0xf9 , +0xad ,0x5e ,0xe5 ,0x5f ,0x90 ,0xfd ,0x42 ,0xcd ,0xf0 ,0xa3 ,0xcd ,0xf0 ,0xe5 ,0x5d ,0x30 ,0xe3 , +0x0d ,0xe5 ,0x5d ,0x54 ,0x30 ,0xc4 ,0x54 ,0x0f ,0x90 ,0xfd ,0x45 ,0xf0 ,0x80 ,0x05 ,0xe4 ,0x90 , +0xfd ,0x45 ,0xf0 ,0xe5 ,0x5d ,0x54 ,0x03 ,0x90 ,0xfd ,0x44 ,0xf0 ,0xe5 ,0x5d ,0x54 ,0x04 ,0xc3 , +0x13 ,0x90 ,0xfd ,0x46 ,0xf0 ,0x90 ,0xfd ,0x44 ,0xe0 ,0x70 ,0x0e ,0x7d ,0x3d ,0x7e ,0xfd ,0x7f , +0x01 ,0x74 ,0x01 ,0x90 ,0x00 ,0x09 ,0x12 ,0x01 ,0x42 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x08 ,0xf5 ,0x82 , +0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x7c ,0x00 ,0xfd ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x07 ,0xf5 , +0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x7f ,0x00 ,0x4c ,0xfe ,0xef ,0x4d ,0x90 ,0xfd , +0x40 ,0xf0 ,0xa3 ,0xce ,0xf0 ,0xce ,0xc2 ,0x03 ,0x7d ,0x0a ,0x7c ,0x00 ,0x12 ,0x24 ,0xb1 ,0x12 , +0x31 ,0x08 ,0x22 ,0x12 ,0x30 ,0x85 ,0x78 ,0x8f ,0xec ,0xf6 ,0x78 ,0x94 ,0x76 ,0x01 ,0x08 ,0x76 , +0xfd ,0x08 ,0x76 ,0x40 ,0x78 ,0x91 ,0x76 ,0x0c ,0x78 ,0x94 ,0x12 ,0x04 ,0x65 ,0x12 ,0x02 ,0x14 , +0x78 ,0x92 ,0xcb ,0xf6 ,0xcb ,0x08 ,0xf6 ,0x7f ,0x00 ,0xef ,0x24 ,0xeb ,0x40 ,0x1f ,0xe4 ,0xef , +0x25 ,0xe0 ,0x90 ,0x34 ,0xbf ,0xfd ,0x93 ,0xcd ,0x04 ,0x93 ,0x78 ,0x93 ,0x66 ,0x70 ,0x03 ,0xed , +0x18 ,0x66 ,0x70 ,0x06 ,0x78 ,0x91 ,0x76 ,0x00 ,0x80 ,0x03 ,0x0f ,0x80 ,0xdc ,0x78 ,0x90 ,0xef , +0xf6 ,0x78 ,0x94 ,0x12 ,0x04 ,0x65 ,0x90 ,0x00 ,0x02 ,0x12 ,0x02 ,0x0e ,0x78 ,0x92 ,0xcb ,0xf6 , +0xcb ,0x08 ,0xf6 ,0x54 ,0x04 ,0xcb ,0x54 ,0x06 ,0x4b ,0x60 ,0x04 ,0x78 ,0x91 ,0x76 ,0x0b ,0x78 , +0x93 ,0xe6 ,0x30 ,0xe3 ,0x13 ,0x78 ,0x94 ,0x12 ,0x04 ,0x65 ,0x90 ,0x00 ,0x05 ,0x12 ,0x01 ,0xec , +0x24 ,0xfb ,0x50 ,0x04 ,0x78 ,0x91 ,0x76 ,0x0d ,0x78 ,0x93 ,0xe6 ,0x54 ,0xc0 ,0x7d ,0x00 ,0x64 , +0xc0 ,0x4d ,0x70 ,0x04 ,0x78 ,0x91 ,0x76 ,0x0b ,0x78 ,0x94 ,0x12 ,0x04 ,0x65 ,0x90 ,0x00 ,0x04 , +0x12 ,0x01 ,0xec ,0x24 ,0xfc ,0x50 ,0x04 ,0x78 ,0x91 ,0x76 ,0x0f ,0x78 ,0x94 ,0x12 ,0x04 ,0x65 , +0x90 ,0x00 ,0x06 ,0x12 ,0x01 ,0xec ,0x24 ,0xfd ,0x50 ,0x04 ,0x78 ,0x91 ,0x76 ,0x0e ,0x78 ,0x94 , +0x12 ,0x04 ,0x65 ,0x90 ,0x00 ,0x09 ,0x12 ,0x01 ,0xec ,0x24 ,0xfd ,0x50 ,0x04 ,0x78 ,0x91 ,0x76 , +0x0a ,0x78 ,0x91 ,0xe6 ,0x70 ,0x2a ,0x78 ,0x8f ,0xe6 ,0xfc ,0x12 ,0x0f ,0x7c ,0x78 ,0x94 ,0x12 , +0x04 ,0x65 ,0x78 ,0xa1 ,0xe6 ,0xf9 ,0x78 ,0xa0 ,0xe6 ,0xfa ,0x7b ,0x01 ,0x74 ,0x0a ,0x78 ,0x00 , +0x12 ,0x03 ,0x3f ,0xc2 ,0x03 ,0x78 ,0x8f ,0xe6 ,0xfc ,0x12 ,0x11 ,0x23 ,0x78 ,0x91 ,0xec ,0xf6 , +0x78 ,0x91 ,0xe6 ,0xfc ,0x12 ,0x25 ,0x4a ,0x12 ,0x31 ,0x08 ,0x22 ,0x12 ,0x30 ,0x85 ,0x78 ,0x8f , +0xec ,0xf6 ,0x12 ,0x0f ,0x7c ,0x78 ,0x8f ,0xe6 ,0x24 ,0xfd ,0x75 ,0xf0 ,0x0a ,0xa4 ,0x24 ,0x1c , +0xf5 ,0x82 ,0xe4 ,0x34 ,0xfd ,0xf5 ,0x83 ,0xac ,0x82 ,0xad ,0x83 ,0x78 ,0xa0 ,0x86 ,0x83 ,0x08 , +0x86 ,0x82 ,0xec ,0xf9 ,0xed ,0xfa ,0x7b ,0x0a ,0x78 ,0x01 ,0x12 ,0x03 ,0xa7 ,0xc2 ,0x03 ,0x78 , +0x8f ,0xe6 ,0xfc ,0x12 ,0x11 ,0x23 ,0x12 ,0x31 ,0x08 ,0x22 ,0x8d ,0x2b ,0x8c ,0x2a ,0xed ,0x60 , +0x40 ,0x75 ,0x27 ,0x01 ,0x75 ,0x29 ,0x48 ,0x75 ,0x28 ,0xff ,0xe5 ,0x2a ,0x24 ,0xfd ,0xfc ,0xe4 , +0x34 ,0xff ,0xfd ,0xec ,0x7c ,0x03 ,0x25 ,0xe0 ,0xcd ,0x33 ,0xcd ,0xdc ,0xf9 ,0xfc ,0xe5 ,0x29 , +0x2c ,0xf5 ,0x29 ,0xe5 ,0x28 ,0x3d ,0xf5 ,0x28 ,0xad ,0x29 ,0xae ,0x28 ,0xaf ,0x27 ,0x74 ,0x80 , +0x90 ,0x00 ,0x06 ,0x12 ,0x03 ,0x17 ,0x74 ,0x80 ,0x90 ,0x00 ,0x02 ,0x12 ,0x03 ,0x17 ,0x12 ,0x0f , +0xd3 ,0xe5 ,0x2b ,0x14 ,0x60 ,0x3b ,0x75 ,0x27 ,0x01 ,0x75 ,0x29 ,0x08 ,0x75 ,0x28 ,0xff ,0xe5 , +0x2a ,0x24 ,0xfd ,0xfc ,0xe4 ,0x34 ,0xff ,0xfd ,0xec ,0x7c ,0x03 ,0x25 ,0xe0 ,0xcd ,0x33 ,0xcd , +0xdc ,0xf9 ,0xfc ,0xe5 ,0x29 ,0x2c ,0xf5 ,0x29 ,0xe5 ,0x28 ,0x3d ,0xf5 ,0x28 ,0xad ,0x29 ,0xae , +0x28 ,0xaf ,0x27 ,0xe4 ,0x90 ,0x00 ,0x06 ,0x12 ,0x03 ,0x17 ,0xe4 ,0x90 ,0x00 ,0x02 ,0x12 ,0x03 , +0x17 ,0x22 ,0x12 ,0x30 ,0x85 ,0x78 ,0x8f ,0xec ,0xf6 ,0xec ,0x24 ,0x97 ,0xf8 ,0xe6 ,0x30 ,0xe2 , +0x09 ,0x78 ,0x8f ,0xe6 ,0xfc ,0x12 ,0x15 ,0x22 ,0xd2 ,0x00 ,0x78 ,0x8f ,0xe6 ,0xfc ,0x12 ,0x0f , +0x7c ,0x78 ,0x90 ,0x76 ,0x00 ,0x90 ,0xfd ,0x41 ,0xe0 ,0x30 ,0xe7 ,0x04 ,0x78 ,0x90 ,0x76 ,0x01 , +0x78 ,0x90 ,0xe6 ,0xfd ,0x78 ,0x8f ,0xe6 ,0xfc ,0x12 ,0x0d ,0x3a ,0xc2 ,0x03 ,0x30 ,0x00 ,0x07 , +0x78 ,0x8f ,0xe6 ,0xfc ,0x12 ,0x14 ,0x21 ,0x7c ,0x00 ,0x12 ,0x25 ,0x4a ,0x12 ,0x31 ,0x08 ,0x22 , +0x78 ,0xa3 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x44 ,0x01 , +0xf0 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x30 , +0xe0 ,0x02 ,0x80 ,0xed ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x0b ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 , +0x83 ,0xe0 ,0x54 ,0xf8 ,0xf0 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0x44 ,0x80 ,0xf0 ,0x22 ,0xc2 ,0x03 ,0x8c ,0x58 ,0x12 ,0x0f ,0x7c ,0x78 ,0xa0 , +0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0x79 ,0xee ,0x7a ,0x34 ,0x7b ,0x0a ,0x78 ,0x01 ,0x12 ,0x03 ,0xf5 , +0x12 ,0x0e ,0x10 ,0xac ,0x58 ,0x7d ,0x02 ,0x12 ,0x0d ,0x3a ,0xc2 ,0x03 ,0xac ,0x58 ,0x12 ,0x11 , +0x23 ,0x22 ,0x8d ,0x53 ,0x8e ,0x52 ,0x8f ,0x51 ,0x8c ,0x50 ,0x12 ,0x0f ,0x7c ,0x75 ,0x4f ,0x00 , +0x78 ,0xa3 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x20 ,0xe4 , +0x16 ,0xe5 ,0x4f ,0x24 ,0xf6 ,0x40 ,0x10 ,0x05 ,0x4f ,0xc2 ,0x03 ,0x7c ,0x18 ,0x12 ,0x32 ,0x48 , +0xac ,0x50 ,0x12 ,0x0f ,0x7c ,0x80 ,0xd9 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 , +0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x20 ,0xe4 ,0x05 ,0xc2 ,0x03 ,0x7c ,0x02 ,0x22 ,0x78 ,0xa3 ,0xe6 , +0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0x0f ,0x60 ,0x16 ,0x78 , +0xa3 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0x0f ,0xf0 , +0xc2 ,0x03 ,0x7c ,0x01 ,0x22 ,0x78 ,0xa2 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xe0 ,0xad ,0x53 ,0xae , +0x52 ,0xaf ,0x51 ,0x12 ,0x03 ,0x0f ,0xc2 ,0x03 ,0x7c ,0x00 ,0x22 ,0x8d ,0x31 ,0x8c ,0x30 ,0x12 , +0x15 ,0x22 ,0xe5 ,0x31 ,0x60 ,0x20 ,0xe5 ,0x30 ,0xb4 ,0x03 ,0x0c ,0x7c ,0x01 ,0x12 ,0x24 ,0x7c , +0x7c ,0x81 ,0x12 ,0x24 ,0x7c ,0x80 ,0x0f ,0xe5 ,0x30 ,0xb4 ,0x04 ,0x0a ,0x7c ,0x02 ,0x12 ,0x24 , +0x7c ,0x7c ,0x82 ,0x12 ,0x24 ,0x7c ,0xac ,0x30 ,0x12 ,0x0f ,0x7c ,0xe5 ,0x31 ,0x60 ,0x1a ,0x78 , +0xa4 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xe0 ,0x54 ,0xe7 ,0xf0 ,0xa3 ,0xa3 ,0xa3 ,0xa3 ,0xe0 ,0x54 , +0xe7 ,0xf0 ,0xac ,0x30 ,0x7d ,0x02 ,0x12 ,0x0d ,0x3a ,0x78 ,0xa0 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 , +0x79 ,0xf8 ,0x7a ,0x34 ,0x7b ,0x0a ,0x78 ,0x01 ,0x12 ,0x03 ,0xf5 ,0xc2 ,0x03 ,0xe5 ,0x30 ,0x24 , +0x97 ,0xf8 ,0xc6 ,0x54 ,0xfd ,0xf6 ,0xac ,0x30 ,0x12 ,0x11 ,0x23 ,0x22 ,0x8c ,0x26 ,0x30 ,0x03 , +0x05 ,0x12 ,0x31 ,0xe7 ,0x80 ,0xf8 ,0x7c ,0x0a ,0x12 ,0x30 ,0xfa ,0xd2 ,0x03 ,0xe5 ,0x26 ,0x24 , +0xfd ,0x78 ,0x9d ,0xf6 ,0x70 ,0x09 ,0x78 ,0xa4 ,0x76 ,0xff ,0x08 ,0x76 ,0xe0 ,0x80 ,0x07 ,0x78 , +0xa4 ,0x76 ,0xff ,0x08 ,0x76 ,0xe2 ,0x78 ,0x9d ,0xe6 ,0x75 ,0xf0 ,0x10 ,0xa4 ,0xad ,0xf0 ,0xfc , +0x24 ,0xa0 ,0x78 ,0xa3 ,0xf6 ,0xed ,0x34 ,0xff ,0x18 ,0xf6 ,0x78 ,0x9d ,0xe6 ,0x75 ,0xf0 ,0x0a , +0xa4 ,0x24 ,0x08 ,0xfc ,0xe4 ,0x34 ,0xfd ,0xfd ,0x78 ,0xa0 ,0xed ,0xf6 ,0x08 ,0xec ,0xf6 ,0x12 , +0x31 ,0x93 ,0x22 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 , +0xe0 ,0x30 ,0xe7 ,0x22 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 , +0x83 ,0xe0 ,0x54 ,0x7f ,0xf0 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0x44 ,0x80 ,0xf0 ,0x22 ,0x78 ,0xa4 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xe0 ,0x54 , +0x7f ,0xf0 ,0xad ,0x83 ,0xe5 ,0x82 ,0x24 ,0x04 ,0xfc ,0xe4 ,0x3d ,0x8c ,0x82 ,0xf5 ,0x83 ,0xe0 , +0x54 ,0x7f ,0xf0 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x0b ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 , +0xe0 ,0x54 ,0xf8 ,0xf0 ,0x78 ,0xa5 ,0xe6 ,0x24 ,0x01 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 , +0x83 ,0xe0 ,0x44 ,0x03 ,0xf0 ,0x78 ,0xa5 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0x44 ,0x03 ,0xf0 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 , +0x00 ,0xf5 ,0x83 ,0x74 ,0x0f ,0xf0 ,0x22 ,0x78 ,0xa4 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xe0 ,0x54 , +0x3f ,0xf0 ,0xad ,0x83 ,0xe5 ,0x82 ,0x24 ,0x04 ,0xfc ,0xe4 ,0x3d ,0x8c ,0x82 ,0xf5 ,0x83 ,0xe0 , +0x54 ,0x3f ,0xf0 ,0x78 ,0x9d ,0xe6 ,0x24 ,0x9e ,0xf8 ,0xe6 ,0xfc ,0x78 ,0xa5 ,0xe6 ,0x24 ,0x01 , +0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0x78 ,0x9d ,0xe6 ,0x24 ,0x9e ,0xf8 , +0xe6 ,0xfc ,0x78 ,0xa5 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec , +0xf0 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x0b ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 , +0xfb ,0x44 ,0x02 ,0xf5 ,0x26 ,0x78 ,0xa1 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0x30 ,0xe5 ,0x03 ,0x43 ,0x26 ,0x01 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 , +0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x30 ,0xe0 ,0x03 ,0x12 ,0x0f ,0xd3 ,0xe5 ,0x26 ,0xfc , +0x78 ,0xa3 ,0xe6 ,0x24 ,0x0b ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0x78 , +0xa3 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0x74 ,0x0f ,0xf0 ,0x78 , +0xa4 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xe0 ,0x44 ,0x80 ,0xf0 ,0xa3 ,0xa3 ,0xa3 ,0xa3 ,0xe0 ,0x44 , +0x80 ,0xf0 ,0x22 ,0x8c ,0x2a ,0x12 ,0x0f ,0x7c ,0x78 ,0xa1 ,0xe6 ,0x24 ,0x08 ,0xf5 ,0x82 ,0x18 , +0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0xfc ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x0a ,0xf5 ,0x82 ,0x18 ,0xe6 , +0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0x78 ,0xa1 ,0xe6 ,0x24 ,0x07 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 , +0x00 ,0xf5 ,0x83 ,0xe0 ,0xfc ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x09 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xec ,0xf0 ,0x78 ,0xa0 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xe0 ,0xfd ,0xa3 ,0xe0 ,0xfc , +0xed ,0xfe ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x08 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xee , +0xf0 ,0xec ,0xfe ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x07 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 , +0xee ,0xf0 ,0x8c ,0x29 ,0x8d ,0x28 ,0xc3 ,0xec ,0x94 ,0x02 ,0xed ,0x94 ,0x06 ,0x40 ,0x05 ,0x75 , +0x27 ,0x7c ,0x80 ,0x33 ,0xd3 ,0xe5 ,0x29 ,0x94 ,0x81 ,0xe5 ,0x28 ,0x94 ,0x01 ,0x40 ,0x05 ,0x75 , +0x27 ,0x3c ,0x80 ,0x23 ,0xd3 ,0xe5 ,0x29 ,0x94 ,0xc0 ,0xe5 ,0x28 ,0x94 ,0x00 ,0x40 ,0x05 ,0x75 , +0x27 ,0x18 ,0x80 ,0x13 ,0xd3 ,0xe5 ,0x29 ,0x94 ,0x30 ,0xe5 ,0x28 ,0x94 ,0x00 ,0x40 ,0x05 ,0x75 , +0x27 ,0x0c ,0x80 ,0x03 ,0x75 ,0x27 ,0x08 ,0xaf ,0x27 ,0xe4 ,0xef ,0x54 ,0x7c ,0x44 ,0x83 ,0xff , +0x8f ,0x27 ,0xe5 ,0x27 ,0xfc ,0x78 ,0xa5 ,0xe6 ,0x24 ,0x01 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xec ,0xf0 ,0xe5 ,0x27 ,0xfc ,0x78 ,0xa5 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 , +0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0xe5 ,0x27 ,0xfc ,0x78 ,0x9d ,0xe6 ,0x24 ,0x9e ,0xf8 ,0xec , +0xf6 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0xf5 , +0x27 ,0x78 ,0xa1 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xa3 ,0xe0 , +0x30 ,0xe3 ,0x17 ,0x53 ,0x27 ,0xc7 ,0x78 ,0xa1 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 , +0x00 ,0xf5 ,0x83 ,0xe0 ,0x90 ,0x34 ,0xe9 ,0x93 ,0x42 ,0x27 ,0x78 ,0xa1 ,0xe6 ,0x24 ,0x02 ,0xf5 , +0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x30 ,0xe7 ,0x05 ,0x43 ,0x27 ,0x40 ,0x80 ,0x03 , +0x53 ,0x27 ,0xbf ,0x53 ,0x27 ,0xfb ,0x78 ,0xa1 ,0xe6 ,0x24 ,0x06 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 , +0x00 ,0xf5 ,0x83 ,0xe0 ,0x60 ,0x03 ,0x43 ,0x27 ,0x04 ,0x53 ,0x27 ,0xfc ,0x78 ,0xa1 ,0xe6 ,0x24 , +0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x42 ,0x27 ,0x43 ,0x27 ,0x80 ,0xe5 , +0x27 ,0xfc ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec , +0xf0 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0xf5 , +0x27 ,0x78 ,0xa1 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xa3 ,0xe0 , +0x30 ,0xe1 ,0x05 ,0x53 ,0x27 ,0xdf ,0x80 ,0x03 ,0x43 ,0x27 ,0x20 ,0x78 ,0xa1 ,0xe6 ,0x24 ,0x02 , +0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x30 ,0xe4 ,0x05 ,0x53 ,0x27 ,0xef ,0x80 , +0x03 ,0x43 ,0x27 ,0x10 ,0x78 ,0xa1 ,0xe6 ,0x24 ,0x09 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 , +0x83 ,0xe0 ,0xb4 ,0x02 ,0x03 ,0x43 ,0x27 ,0x02 ,0xe5 ,0x27 ,0xfc ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x04 , +0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x03 ,0xf5 , +0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0xf5 ,0x27 ,0x78 ,0xa1 ,0xe6 ,0x24 ,0x09 ,0xf5 , +0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x70 ,0x05 ,0x53 ,0x27 ,0x7f ,0x80 ,0x03 ,0x43 , +0x27 ,0x80 ,0x78 ,0xa1 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xa3 , +0xe0 ,0x30 ,0xe0 ,0x05 ,0x43 ,0x27 ,0x20 ,0x80 ,0x03 ,0x53 ,0x27 ,0xdf ,0x78 ,0xa1 ,0xe6 ,0x24 , +0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x30 ,0xe3 ,0x05 ,0x43 ,0x27 ,0x40 , +0x80 ,0x03 ,0x53 ,0x27 ,0xbf ,0x78 ,0xa1 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0x30 ,0xe0 ,0x05 ,0x43 ,0x27 ,0x10 ,0x80 ,0x03 ,0x53 ,0x27 ,0xef ,0x78 ,0xa1 , +0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xa3 ,0xe0 ,0x30 ,0xe4 ,0x05 , +0x43 ,0x27 ,0x08 ,0x80 ,0x03 ,0x53 ,0x27 ,0xf7 ,0x78 ,0xa1 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 , +0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xa3 ,0xe0 ,0x30 ,0xe5 ,0x05 ,0x43 ,0x27 ,0x04 ,0x80 ,0x03 ,0x53 , +0x27 ,0xfb ,0x78 ,0xa1 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xa3 , +0xe0 ,0x30 ,0xe6 ,0x05 ,0x43 ,0x27 ,0x01 ,0x80 ,0x03 ,0x53 ,0x27 ,0xfe ,0x78 ,0xa1 ,0xe6 ,0x24 , +0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xa3 ,0xe0 ,0x30 ,0xe7 ,0x05 ,0x43 ,0x27 , +0x02 ,0x80 ,0x03 ,0x53 ,0x27 ,0xfd ,0xe5 ,0x27 ,0xfc ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x03 ,0xf5 ,0x82 , +0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0xc2 ,0x03 ,0x7c ,0x00 ,0x22 ,0x8d ,0x27 ,0x8c , +0x26 ,0xed ,0x54 ,0x03 ,0x14 ,0x60 ,0x03 ,0x7c ,0x10 ,0x22 ,0xe5 ,0x27 ,0x54 ,0x7c ,0x24 ,0xfc , +0x40 ,0x03 ,0x7c ,0x0b ,0x22 ,0xe5 ,0x26 ,0x24 ,0x97 ,0xf8 ,0xc6 ,0x44 ,0x02 ,0xf6 ,0x7c ,0x00 , +0x22 ,0x8c ,0x30 ,0x12 ,0x0f ,0x7c ,0xe5 ,0x30 ,0x24 ,0x97 ,0xf8 ,0xe6 ,0x20 ,0xe2 ,0x4f ,0xac , +0x30 ,0x7d ,0x02 ,0x12 ,0x0d ,0x3a ,0xe5 ,0x30 ,0x24 ,0xfe ,0x44 ,0x28 ,0xfc ,0x78 ,0xa4 ,0x86 , +0x83 ,0x08 ,0x86 ,0x82 ,0xec ,0xf0 ,0xaf ,0x83 ,0xe5 ,0x82 ,0x24 ,0x04 ,0xfe ,0xe4 ,0x3f ,0xff , +0xec ,0x8e ,0x82 ,0x8f ,0x83 ,0xf0 ,0x7c ,0x03 ,0x8c ,0x2c ,0xe5 ,0x2c ,0xfc ,0x78 ,0xa5 ,0xe6 , +0x24 ,0x01 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0xe5 ,0x2c ,0xfc ,0x78 , +0xa5 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0x75 ,0x2d , +0x01 ,0x75 ,0x2f ,0x48 ,0x75 ,0x2e ,0xff ,0xe5 ,0x30 ,0x24 ,0xfd ,0xfc ,0xe4 ,0x34 ,0xff ,0xfd , +0xec ,0x7c ,0x03 ,0x25 ,0xe0 ,0xcd ,0x33 ,0xcd ,0xdc ,0xf9 ,0xfc ,0xe5 ,0x2f ,0x2c ,0xf5 ,0x2f , +0xe5 ,0x2e ,0x3d ,0xf5 ,0x2e ,0x78 ,0xa5 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0x54 ,0xe7 ,0xf5 ,0x2c ,0xad ,0x2f ,0xae ,0x2e ,0xaf ,0x2d ,0xe4 ,0x90 ,0x00 , +0x02 ,0x12 ,0x03 ,0x17 ,0xe4 ,0x90 ,0x00 ,0x06 ,0x12 ,0x03 ,0x17 ,0x12 ,0x01 ,0xe6 ,0x30 ,0xe5 , +0x03 ,0x43 ,0x2c ,0x10 ,0xe5 ,0x2c ,0xfc ,0x78 ,0xa5 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 , +0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0x12 ,0x10 ,0x67 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x06 ,0xf5 ,0x82 , +0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0xc2 ,0x03 ,0xfc ,0xe5 ,0x30 ,0x24 ,0x97 ,0xf8 ,0xc6 , +0x44 ,0x04 ,0xf6 ,0x8c ,0x2c ,0xe5 ,0x30 ,0x54 ,0x0f ,0xc4 ,0x54 ,0xf0 ,0x7e ,0x00 ,0xff ,0xee , +0xef ,0x44 ,0x04 ,0x7d ,0x00 ,0xff ,0xec ,0x4e ,0xfc ,0xed ,0x4f ,0xfd ,0x12 ,0x1c ,0xfe ,0x7c , +0x00 ,0x22 ,0x8c ,0x2f ,0x12 ,0x0f ,0x7c ,0x12 ,0x10 ,0x07 ,0x78 ,0xa4 ,0x86 ,0x83 ,0x08 ,0x86 , +0x82 ,0xe0 ,0x54 ,0x08 ,0xf0 ,0xa3 ,0xa3 ,0xa3 ,0xa3 ,0xe0 ,0x54 ,0x08 ,0xf0 ,0xac ,0x2f ,0x7d , +0x02 ,0x12 ,0x0d ,0x3a ,0xc2 ,0x03 ,0xe5 ,0x2f ,0x24 ,0x97 ,0xf8 ,0xc6 ,0x54 ,0xfb ,0xf6 ,0x7c , +0x00 ,0x22 ,0x12 ,0x30 ,0x85 ,0x78 ,0x90 ,0xec ,0xf6 ,0xec ,0x24 ,0x97 ,0xf8 ,0xe6 ,0x30 ,0xe1 , +0x0a ,0x7d ,0x00 ,0x7c ,0x13 ,0x12 ,0x24 ,0xb1 ,0x12 ,0x31 ,0x08 ,0x78 ,0x90 ,0xe6 ,0x24 ,0x97 , +0xf8 ,0xc6 ,0x44 ,0x01 ,0xf6 ,0x78 ,0x90 ,0xe6 ,0xfc ,0x12 ,0x0f ,0x7c ,0x78 ,0x90 ,0xe6 ,0x24 , +0xfd ,0x75 ,0xf0 ,0x0a ,0xa4 ,0x24 ,0x1c ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfd ,0xf5 ,0x83 ,0x78 ,0xa0 , +0xe6 ,0xfa ,0x08 ,0xe6 ,0xf9 ,0x7b ,0x0a ,0x78 ,0x01 ,0x12 ,0x03 ,0xa7 ,0x78 ,0xa0 ,0x86 ,0x83 , +0x08 ,0x86 ,0x82 ,0x79 ,0xf8 ,0x7a ,0x34 ,0x7b ,0x0a ,0x78 ,0x01 ,0x12 ,0x03 ,0xf5 ,0x12 ,0x0f , +0xd3 ,0xc2 ,0x03 ,0x78 ,0x90 ,0xe6 ,0xfc ,0x12 ,0x11 ,0x23 ,0x78 ,0x8f ,0xec ,0xf6 ,0xec ,0x60 , +0x0a ,0x7d ,0x00 ,0x7c ,0x08 ,0x12 ,0x24 ,0xb1 ,0x12 ,0x31 ,0x08 ,0x78 ,0x90 ,0xe6 ,0xfc ,0x12 , +0x0f ,0x7c ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 , +0x44 ,0x10 ,0x54 ,0xdf ,0xfc ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xec ,0xf0 ,0x78 ,0x8f ,0xec ,0xf6 ,0xc2 ,0x03 ,0x7c ,0xc8 ,0x12 ,0x32 ,0x48 ,0x78 , +0x90 ,0xe6 ,0xfc ,0x12 ,0x0f ,0x7c ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 , +0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0xef ,0xf0 ,0xc2 ,0x03 ,0x7c ,0xc8 ,0x12 ,0x32 ,0x48 ,0x78 ,0x90 , +0xe6 ,0xfc ,0x12 ,0x0f ,0x7c ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0x44 ,0x10 ,0xf0 ,0xc2 ,0x03 ,0x7c ,0xc8 ,0x12 ,0x32 ,0x48 ,0x78 ,0x90 ,0xe6 , +0xfc ,0x12 ,0x0f ,0x7c ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 , +0x83 ,0xe0 ,0x44 ,0x20 ,0xf0 ,0xc2 ,0x03 ,0x7c ,0xf0 ,0x12 ,0x32 ,0x48 ,0x78 ,0x90 ,0xe6 ,0xfc , +0x12 ,0x0f ,0x7c ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 , +0xe0 ,0x30 ,0xe4 ,0x15 ,0xc2 ,0x03 ,0x78 ,0x90 ,0xe6 ,0x44 ,0x10 ,0x7f ,0x00 ,0xfe ,0x7c ,0x07 , +0x12 ,0x31 ,0x9a ,0x12 ,0x31 ,0x08 ,0x02 ,0x17 ,0x49 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 , +0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0xcf ,0xf0 ,0xc2 ,0x03 ,0x7c ,0xc8 ,0x12 ,0x32 , +0x48 ,0x78 ,0x90 ,0xe6 ,0xfc ,0x12 ,0x0f ,0x7c ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 , +0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x44 ,0x30 ,0xf0 ,0xc2 ,0x03 ,0x7c ,0xf0 ,0x12 ,0x32 ,0x48 , +0x78 ,0x90 ,0xe6 ,0xfc ,0x12 ,0x0f ,0x7c ,0x78 ,0xa3 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 , +0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x30 ,0xe4 ,0x14 ,0xc2 ,0x03 ,0x78 ,0x90 ,0xe6 ,0x44 ,0x10 ,0x7f , +0x00 ,0xfe ,0x7c ,0x07 ,0x12 ,0x31 ,0x9a ,0x12 ,0x31 ,0x08 ,0x80 ,0x5d ,0x78 ,0xa3 ,0xe6 ,0x24 , +0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0xef ,0xf0 ,0x78 ,0xa3 ,0xe6 , +0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0xdf ,0xf0 ,0x78 ,0x90 , +0xe6 ,0x24 ,0xfd ,0x75 ,0xf0 ,0x0a ,0xa4 ,0x24 ,0x1c ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfd ,0xf5 ,0x83 , +0xac ,0x82 ,0xad ,0x83 ,0x78 ,0xa0 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xec ,0xf9 ,0xed ,0xfa ,0x7b , +0x0a ,0x78 ,0x01 ,0x12 ,0x03 ,0xa7 ,0xc2 ,0x03 ,0x78 ,0x90 ,0xe6 ,0xfc ,0x12 ,0x11 ,0x23 ,0x7d , +0x00 ,0x7c ,0x0b ,0x12 ,0x24 ,0xb1 ,0x12 ,0x31 ,0x08 ,0x22 ,0x12 ,0x30 ,0x85 ,0x90 ,0xff ,0x91 , +0xe0 ,0x90 ,0xfd ,0x41 ,0xf0 ,0x7d ,0x02 ,0x7c ,0x00 ,0x12 ,0x24 ,0xb1 ,0x12 ,0x31 ,0x08 ,0x22 , +0x12 ,0x30 ,0x85 ,0x90 ,0xfd ,0x40 ,0xe0 ,0xf4 ,0xfc ,0x90 ,0xff ,0x91 ,0xe0 ,0x5c ,0xf5 ,0x33 , +0x90 ,0xfd ,0x41 ,0xe0 ,0xfc ,0x90 ,0xfd ,0x40 ,0xe0 ,0x5c ,0x42 ,0x33 ,0xe5 ,0x33 ,0x90 ,0xff , +0x91 ,0xf0 ,0x7c ,0x00 ,0x12 ,0x25 ,0x4a ,0x12 ,0x31 ,0x08 ,0x22 ,0x74 ,0x3c ,0x90 ,0xfb ,0xe8 , +0xf0 ,0x74 ,0x3e ,0x90 ,0xfb ,0xe8 ,0xf0 ,0xe4 ,0x90 ,0xfd ,0x30 ,0xf0 ,0x22 ,0x8d ,0x35 ,0x8c , +0x34 ,0xec ,0xb4 ,0x01 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x02 ,0x80 ,0x28 ,0xb4 ,0x02 ,0x02 ,0x80 , +0x03 ,0xd3 ,0x40 ,0x08 ,0xa8 ,0x35 ,0xc6 ,0x25 ,0xe0 ,0xf6 ,0x80 ,0x18 ,0xb4 ,0x04 ,0x02 ,0x80 , +0x03 ,0xd3 ,0x40 ,0x0a ,0xa8 ,0x35 ,0xc6 ,0x25 ,0xe0 ,0x25 ,0xe0 ,0xf6 ,0x80 ,0x06 ,0xa8 ,0x35 , +0x76 ,0x00 ,0x80 ,0x00 ,0x22 ,0x8c ,0x3c ,0x8d ,0x3b ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x75 , +0x60 ,0x06 ,0x75 ,0x61 ,0x00 ,0x90 ,0xfd ,0x31 ,0x12 ,0x04 ,0x6e ,0x12 ,0x01 ,0xe6 ,0xb4 ,0x80 , +0x02 ,0x80 ,0x06 ,0xd3 ,0x50 ,0x03 ,0x02 ,0x18 ,0x9e ,0x90 ,0xfd ,0x31 ,0x12 ,0x04 ,0x80 ,0x90 , +0x00 ,0x03 ,0x12 ,0x01 ,0xec ,0x54 ,0xf0 ,0xb4 ,0x30 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x5f ,0x90 , +0xfd ,0x31 ,0x12 ,0x04 ,0x80 ,0x90 ,0x00 ,0x08 ,0x12 ,0x02 ,0x0e ,0xfa ,0xfd ,0xeb ,0xfe ,0x7f , +0x01 ,0x90 ,0xfd ,0x34 ,0x12 ,0x04 ,0x6e ,0xee ,0xcd ,0x90 ,0x35 ,0x02 ,0xfc ,0xe4 ,0x93 ,0xff , +0x74 ,0x01 ,0x93 ,0xfe ,0xf9 ,0xef ,0xfa ,0x7b ,0x01 ,0xea ,0xff ,0xe9 ,0xfe ,0xec ,0xc3 ,0x9e , +0xed ,0x9f ,0x40 ,0x25 ,0x90 ,0x35 ,0x04 ,0xe4 ,0x93 ,0xfd ,0x74 ,0x01 ,0x93 ,0xfc ,0xed ,0xfe , +0xec ,0xfd ,0x7f ,0x01 ,0xee ,0xcd ,0xfc ,0x90 ,0xfd ,0x36 ,0xe0 ,0xd3 ,0x9c ,0x90 ,0xfd ,0x35 , +0xe0 ,0x9d ,0x50 ,0x05 ,0x75 ,0x60 ,0x80 ,0x80 ,0x33 ,0x12 ,0x19 ,0xbc ,0x80 ,0x2e ,0xb4 ,0x60 , +0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x0b ,0xac ,0x3c ,0xad ,0x3b ,0x12 ,0x07 ,0x82 ,0x8c ,0x60 ,0x80 , +0x1b ,0xb4 ,0x10 ,0x03 ,0xb3 ,0x40 ,0x10 ,0xc3 ,0xb4 ,0x20 ,0x03 ,0xb3 ,0x40 ,0x09 ,0xc3 ,0xb4 , +0x40 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x00 ,0x75 ,0x60 ,0x81 ,0x80 ,0x00 ,0x80 ,0x75 ,0xb4 ,0x81 , +0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x6b ,0x90 ,0xfd ,0x31 ,0x12 ,0x04 ,0x80 ,0x90 ,0x00 ,0x03 ,0x12 , +0x01 ,0xec ,0x54 ,0xf0 ,0xb4 ,0x30 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x1d ,0x90 ,0xfd ,0x31 ,0x12 , +0x04 ,0x80 ,0x90 ,0x00 ,0x08 ,0x12 ,0x02 ,0x0e ,0xfa ,0xfd ,0xeb ,0xfe ,0x7f ,0x01 ,0x90 ,0xfd , +0x37 ,0x12 ,0x04 ,0x6e ,0x12 ,0x19 ,0x26 ,0x80 ,0x36 ,0xb4 ,0x60 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 , +0x13 ,0x75 ,0x3a ,0x61 ,0xe4 ,0xf5 ,0x39 ,0xf5 ,0x38 ,0xac ,0x3c ,0xad ,0x3b ,0x12 ,0x05 ,0xde , +0x8c ,0x60 ,0x80 ,0x1b ,0xb4 ,0x10 ,0x03 ,0xb3 ,0x40 ,0x10 ,0xc3 ,0xb4 ,0x20 ,0x03 ,0xb3 ,0x40 , +0x09 ,0xc3 ,0xb4 ,0x40 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x00 ,0x75 ,0x60 ,0x81 ,0x80 ,0x00 ,0x80 , +0x02 ,0x80 ,0x00 ,0xe5 ,0x60 ,0xfc ,0x90 ,0xfd ,0x31 ,0x12 ,0x04 ,0x80 ,0xec ,0x90 ,0x00 ,0x02 , +0x12 ,0x03 ,0x17 ,0xac ,0x61 ,0x22 ,0x90 ,0xfd ,0x31 ,0x12 ,0x04 ,0x80 ,0x90 ,0x00 ,0x04 ,0x12 , +0x01 ,0xec ,0x60 ,0x04 ,0x74 ,0x01 ,0x80 ,0x01 ,0xe4 ,0xa2 ,0xe0 ,0x92 ,0x01 ,0x90 ,0xfd ,0x31 , +0x12 ,0x04 ,0x80 ,0xed ,0x24 ,0x03 ,0xfd ,0x50 ,0x01 ,0x0e ,0x90 ,0xfd ,0x34 ,0x12 ,0x04 ,0x6e , +0x90 ,0xfd ,0x31 ,0x12 ,0x04 ,0x80 ,0x90 ,0x00 ,0x05 ,0x12 ,0x01 ,0xec ,0xf5 ,0x61 ,0x90 ,0x00 , +0x04 ,0x12 ,0x01 ,0xec ,0x54 ,0x0f ,0xfc ,0x7d ,0x61 ,0x12 ,0x17 ,0x9d ,0xe5 ,0x61 ,0x70 ,0x04 , +0x75 ,0x60 ,0x08 ,0x22 ,0x75 ,0x60 ,0x00 ,0x78 ,0x7e ,0x76 ,0x00 ,0x78 ,0x7e ,0xe6 ,0xc3 ,0x95 , +0x61 ,0x50 ,0x38 ,0x90 ,0xfd ,0x37 ,0x12 ,0x04 ,0x80 ,0x12 ,0x01 ,0xe6 ,0xfc ,0x90 ,0xfd ,0x34 , +0x12 ,0x04 ,0x80 ,0xec ,0x12 ,0x03 ,0x0f ,0x30 ,0x01 ,0x0e ,0x90 ,0xfd ,0x39 ,0xe0 ,0x04 ,0xf0 , +0x90 ,0xfd ,0x38 ,0x70 ,0x03 ,0xe0 ,0x04 ,0xf0 ,0x78 ,0x7e ,0x06 ,0x90 ,0xfd ,0x36 ,0xe0 ,0x04 , +0xf0 ,0x90 ,0xfd ,0x35 ,0x70 ,0x03 ,0xe0 ,0x04 ,0xf0 ,0x80 ,0xc0 ,0x22 ,0x90 ,0xfd ,0x32 ,0xe0 , +0xfd ,0xa3 ,0xe0 ,0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0xed ,0x24 ,0x0a ,0xfd ,0x50 ,0x01 , +0x0e ,0x90 ,0xfd ,0x3a ,0x12 ,0x04 ,0x6e ,0x90 ,0xfd ,0x31 ,0x12 ,0x04 ,0x80 ,0x90 ,0x00 ,0x04 , +0x12 ,0x01 ,0xec ,0x54 ,0x0f ,0xb4 ,0x01 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x17 ,0x90 ,0xfd ,0x3a , +0x12 ,0x04 ,0x80 ,0x0d ,0xed ,0x70 ,0x01 ,0x0e ,0x90 ,0xfd ,0x37 ,0x12 ,0x04 ,0x6e ,0x78 ,0x82 , +0x76 ,0x01 ,0x80 ,0x4e ,0xb4 ,0x02 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x19 ,0x90 ,0xfd ,0x3a ,0x12 , +0x04 ,0x80 ,0xed ,0x24 ,0x02 ,0xfd ,0x50 ,0x01 ,0x0e ,0x90 ,0xfd ,0x37 ,0x12 ,0x04 ,0x6e ,0x78 , +0x82 ,0x76 ,0x02 ,0x80 ,0x2d ,0xb4 ,0x04 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x19 ,0x90 ,0xfd ,0x3a , +0x12 ,0x04 ,0x80 ,0xed ,0x24 ,0x04 ,0xfd ,0x50 ,0x01 ,0x0e ,0x90 ,0xfd ,0x37 ,0x12 ,0x04 ,0x6e , +0x78 ,0x82 ,0x76 ,0x04 ,0x80 ,0x0c ,0xb4 ,0x00 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x00 ,0x75 ,0x60 , +0x08 ,0x22 ,0x90 ,0xfd ,0x31 ,0x12 ,0x04 ,0x80 ,0x90 ,0x00 ,0x05 ,0x12 ,0x01 ,0xec ,0xf5 ,0x61 , +0x78 ,0x7f ,0x76 ,0x00 ,0x78 ,0x7f ,0xe6 ,0xc3 ,0x95 ,0x61 ,0x40 ,0x03 ,0x02 ,0x1b ,0x24 ,0x78 , +0x80 ,0x76 ,0x00 ,0x78 ,0x80 ,0xe6 ,0xc3 ,0x78 ,0x82 ,0x96 ,0x50 ,0x76 ,0x90 ,0xfd ,0x34 ,0x12 , +0x04 ,0x80 ,0x12 ,0x01 ,0xe6 ,0xfc ,0x90 ,0xfd ,0x3a ,0x12 ,0x04 ,0x89 ,0x12 ,0x01 ,0xe0 ,0xf4 , +0x5c ,0xfc ,0x12 ,0x01 ,0xe0 ,0xf8 ,0x90 ,0xfd ,0x37 ,0x12 ,0x04 ,0x80 ,0xe8 ,0xc0 ,0xe0 ,0x12 , +0x01 ,0xe6 ,0xc8 ,0xd0 ,0xe0 ,0xc8 ,0x58 ,0x4c ,0xfc ,0x90 ,0xfd ,0x34 ,0x12 ,0x04 ,0x80 ,0xec , +0x12 ,0x03 ,0x0f ,0x78 ,0x81 ,0xec ,0xf6 ,0x90 ,0xfd ,0x39 ,0xe0 ,0x04 ,0xf0 ,0x90 ,0xfd ,0x38 , +0x70 ,0x03 ,0xe0 ,0x04 ,0xf0 ,0x09 ,0xe9 ,0x70 ,0x01 ,0x0a ,0x90 ,0xfd ,0x3a ,0x12 ,0x04 ,0x77 , +0x90 ,0xfd ,0x31 ,0x12 ,0x04 ,0x80 ,0x90 ,0x00 ,0x04 ,0x12 ,0x01 ,0xec ,0x30 ,0xe4 ,0x0e ,0x90 , +0xfd ,0x36 ,0xe0 ,0x04 ,0xf0 ,0x90 ,0xfd ,0x35 ,0x70 ,0x03 ,0xe0 ,0x04 ,0xf0 ,0x78 ,0x80 ,0x06 , +0x80 ,0x81 ,0x78 ,0x82 ,0xe6 ,0xfd ,0xe4 ,0xfe ,0xff ,0xee ,0xcd ,0xfc ,0x90 ,0xfd ,0x39 ,0xe0 , +0x2c ,0xf0 ,0x90 ,0xfd ,0x38 ,0xe0 ,0x3d ,0xf0 ,0x78 ,0x82 ,0xe6 ,0xfd ,0xe4 ,0xfe ,0xff ,0xee , +0xcd ,0xfc ,0x90 ,0xfd ,0x3c ,0xe0 ,0x2c ,0xf0 ,0x90 ,0xfd ,0x3b ,0xe0 ,0x3d ,0xf0 ,0x78 ,0x7f , +0x06 ,0x02 ,0x1a ,0x64 ,0x75 ,0x60 ,0x00 ,0x22 ,0xe5 ,0x3d ,0x05 ,0x3d ,0x04 ,0x70 ,0x02 ,0xb2 , +0xb0 ,0x22 ,0xc0 ,0xe0 ,0xc0 ,0xf0 ,0xc0 ,0x82 ,0xc0 ,0x83 ,0xc0 ,0xd0 ,0xe8 ,0xc0 ,0xe0 ,0xe9 , +0xc0 ,0xe0 ,0xea ,0xc0 ,0xe0 ,0xeb ,0xc0 ,0xe0 ,0xec ,0xc0 ,0xe0 ,0xed ,0xc0 ,0xe0 ,0xee ,0xc0 , +0xe0 ,0xef ,0xc0 ,0xe0 ,0x90 ,0xff ,0x92 ,0xe0 ,0x12 ,0x01 ,0xb7 ,0x1b ,0x80 ,0x30 ,0x1b ,0x80 , +0x32 ,0x1b ,0x8f ,0x38 ,0x1b ,0xa1 ,0x3a ,0x1b ,0xb3 ,0x3e ,0x1b ,0xcb ,0x44 ,0x1b ,0xbf ,0x46 , +0x1b ,0xd7 ,0x50 ,0x1c ,0x19 ,0x52 ,0x1b ,0xf8 ,0x54 ,0x1c ,0x3a ,0x56 ,0x00 ,0x00 ,0x1c ,0x5b , +0x90 ,0xff ,0x92 ,0xe0 ,0x7f ,0x00 ,0xfe ,0x7c ,0x01 ,0x12 ,0x31 ,0x9a ,0x02 ,0x1c ,0x6b ,0xe4 , +0xff ,0x04 ,0xfe ,0x7c ,0x03 ,0x12 ,0x31 ,0x9a ,0x74 ,0x20 ,0x90 ,0xff ,0xfe ,0xf0 ,0x02 ,0x1c , +0x6b ,0xe4 ,0xff ,0x04 ,0xfe ,0x7c ,0x02 ,0x12 ,0x31 ,0x9a ,0x74 ,0x40 ,0x90 ,0xff ,0xfe ,0xf0 , +0x02 ,0x1c ,0x6b ,0xe4 ,0xff ,0x04 ,0xfe ,0x7c ,0x04 ,0x12 ,0x31 ,0x9a ,0x02 ,0x1c ,0x6b ,0xe4 , +0xff ,0x04 ,0xfe ,0x7c ,0x05 ,0x12 ,0x31 ,0x9a ,0x02 ,0x1c ,0x6b ,0xe4 ,0xff ,0x04 ,0xfe ,0x7c , +0x06 ,0x12 ,0x31 ,0x9a ,0x02 ,0x1c ,0x6b ,0x90 ,0xff ,0xa5 ,0xe0 ,0x7d ,0x00 ,0x90 ,0xfd ,0x00 , +0xcd ,0xf0 ,0xa3 ,0xcd ,0xf0 ,0x90 ,0xfd ,0x01 ,0xe0 ,0xfc ,0xf5 ,0x83 ,0x90 ,0xfd ,0x00 ,0xe0 , +0x44 ,0x33 ,0xfd ,0x12 ,0x1c ,0xfe ,0x80 ,0x73 ,0x90 ,0xff ,0xb5 ,0xe0 ,0x7d ,0x00 ,0x90 ,0xfd , +0x02 ,0xcd ,0xf0 ,0xa3 ,0xcd ,0xf0 ,0x90 ,0xfd ,0x03 ,0xe0 ,0xfc ,0xf5 ,0x83 ,0x90 ,0xfd ,0x02 , +0xe0 ,0x44 ,0x43 ,0xfd ,0x12 ,0x1c ,0xfe ,0x80 ,0x52 ,0x90 ,0xff ,0xa6 ,0xe0 ,0x7d ,0x00 ,0x90 , +0xfd ,0x04 ,0xcd ,0xf0 ,0xa3 ,0xcd ,0xf0 ,0x90 ,0xfd ,0x05 ,0xe0 ,0xfc ,0xf5 ,0x83 ,0x90 ,0xfd , +0x04 ,0xe0 ,0x44 ,0x34 ,0xfd ,0x12 ,0x1c ,0xfe ,0x80 ,0x31 ,0x90 ,0xff ,0xb6 ,0xe0 ,0x7d ,0x00 , +0x90 ,0xfd ,0x06 ,0xcd ,0xf0 ,0xa3 ,0xcd ,0xf0 ,0x90 ,0xfd ,0x07 ,0xe0 ,0xfc ,0xf5 ,0x83 ,0x90 , +0xfd ,0x06 ,0xe0 ,0x44 ,0x44 ,0xfd ,0x12 ,0x1c ,0xfe ,0x80 ,0x10 ,0x90 ,0xff ,0x92 ,0xe0 ,0x7d , +0x00 ,0xfc ,0xed ,0x44 ,0xaa ,0xfd ,0x12 ,0x1c ,0xfe ,0x80 ,0x00 ,0xe4 ,0x90 ,0xff ,0x92 ,0xf0 , +0xd0 ,0xe0 ,0xff ,0xd0 ,0xe0 ,0xfe ,0xd0 ,0xe0 ,0xfd ,0xd0 ,0xe0 ,0xfc ,0xd0 ,0xe0 ,0xfb ,0xd0 , +0xe0 ,0xfa ,0xd0 ,0xe0 ,0xf9 ,0xd0 ,0xe0 ,0xf8 ,0xd0 ,0xd0 ,0xd0 ,0x83 ,0xd0 ,0x82 ,0xd0 ,0xf0 , +0xd0 ,0xe0 ,0x32 ,0x05 ,0x81 ,0x05 ,0x81 ,0x05 ,0x81 ,0x05 ,0x81 ,0xa8 ,0x81 ,0x18 ,0x18 ,0x18 , +0xed ,0xf6 ,0x08 ,0xec ,0xf6 ,0x90 ,0xff ,0x6a ,0xe0 ,0x20 ,0xe7 ,0x02 ,0x80 ,0xf7 ,0x90 ,0xff , +0x69 ,0xe0 ,0x7d ,0x00 ,0xa8 ,0x81 ,0x18 ,0xcd ,0xf6 ,0xcd ,0x08 ,0xf6 ,0x7d ,0x03 ,0xa8 ,0x81 , +0xe6 ,0x18 ,0xfc ,0xe6 ,0xcc ,0x25 ,0xe0 ,0xcc ,0x33 ,0xcc ,0xdd ,0xf9 ,0xcc ,0xf6 ,0xcc ,0x08 , +0xf6 ,0xa8 ,0x81 ,0x18 ,0xe6 ,0x44 ,0xf8 ,0xf6 ,0xa8 ,0x81 ,0x18 ,0x18 ,0x18 ,0xe6 ,0xfd ,0x08 , +0xe6 ,0xfc ,0xa8 ,0x81 ,0x18 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xed ,0xf0 ,0xa3 ,0xec ,0xf0 ,0x74 , +0x02 ,0x90 ,0xff ,0x6a ,0xf0 ,0x15 ,0x81 ,0x15 ,0x81 ,0x15 ,0x81 ,0x15 ,0x81 ,0x22 ,0xe5 ,0x81 , +0x24 ,0x05 ,0xf5 ,0x81 ,0xe4 ,0xa8 ,0x81 ,0x18 ,0xf6 ,0xa8 ,0x81 ,0x18 ,0x18 ,0x18 ,0x18 ,0xed , +0xf6 ,0x08 ,0xec ,0xf6 ,0x90 ,0xfb ,0xfd ,0xe0 ,0x24 ,0xf8 ,0x50 ,0x03 ,0x02 ,0x1e ,0x1f ,0xe4 , +0xa8 ,0x81 ,0x18 ,0x18 ,0xf6 ,0xa8 ,0x81 ,0x18 ,0xe6 ,0xfe ,0xa8 ,0x81 ,0x18 ,0x18 ,0x18 ,0x18 , +0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0x7f ,0x00 ,0xef ,0x24 ,0xf8 ,0x40 ,0x4d ,0xe4 ,0xef ,0x25 ,0xe0 , +0x24 ,0x85 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfd ,0xf5 ,0x83 ,0xe0 ,0xfb ,0xa3 ,0xe0 ,0x6c ,0x70 ,0x03 , +0xfa ,0xeb ,0x6d ,0x70 ,0x09 ,0x74 ,0x01 ,0xa8 ,0x81 ,0x18 ,0x18 ,0xf6 ,0x80 ,0x2b ,0xe4 ,0xef , +0x25 ,0xe0 ,0x24 ,0x85 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfd ,0xf5 ,0x83 ,0x7a ,0x00 ,0xe0 ,0x54 ,0xf0 , +0xcc ,0xf8 ,0xcc ,0xcd ,0xf9 ,0xcd ,0xfb ,0x78 ,0x00 ,0xe9 ,0x54 ,0xf0 ,0xf9 ,0xea ,0x68 ,0x70 , +0x02 ,0xeb ,0x69 ,0x70 ,0x01 ,0x0e ,0x0f ,0x80 ,0xae ,0xa8 ,0x81 ,0x18 ,0xee ,0xf6 ,0xa8 ,0x81 , +0x18 ,0x18 ,0x18 ,0x18 ,0xed ,0xf6 ,0x08 ,0xec ,0xf6 ,0xa8 ,0x81 ,0xef ,0xf6 ,0xa8 ,0x81 ,0x18 , +0x18 ,0xe6 ,0x70 ,0x79 ,0xa8 ,0x81 ,0x18 ,0xe6 ,0x24 ,0xf7 ,0x40 ,0x71 ,0xa8 ,0x81 ,0x18 ,0x18 , +0x18 ,0x18 ,0xe6 ,0x54 ,0x0f ,0xa8 ,0x81 ,0xf6 ,0x64 ,0x04 ,0x60 ,0x17 ,0xa8 ,0x81 ,0xe6 ,0x64 , +0x03 ,0x60 ,0x10 ,0xa8 ,0x81 ,0x18 ,0x18 ,0x18 ,0x18 ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0x12 ,0x1c , +0x93 ,0x80 ,0x4a ,0x7c ,0x0a ,0x12 ,0x30 ,0xfa ,0xa8 ,0x81 ,0x18 ,0x18 ,0x18 ,0x18 ,0xe6 ,0xfd , +0x08 ,0xe6 ,0xfc ,0x90 ,0xfb ,0xfc ,0xe0 ,0x25 ,0xe0 ,0x24 ,0x85 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfd , +0xf5 ,0x83 ,0xed ,0xf0 ,0xa3 ,0xec ,0xf0 ,0x90 ,0xfb ,0xfc ,0xe0 ,0xff ,0xe4 ,0xef ,0x04 ,0x54 , +0x07 ,0xff ,0x90 ,0xfb ,0xfc ,0xf0 ,0x90 ,0xfb ,0xfd ,0xe0 ,0x04 ,0xf0 ,0x12 ,0x31 ,0x93 ,0x90 , +0xfb ,0xfe ,0xe0 ,0x70 ,0x08 ,0xe4 ,0xfe ,0xff ,0x7c ,0x0f ,0x12 ,0x31 ,0x9a ,0x80 ,0x27 ,0x90 , +0xfb ,0xff ,0xe0 ,0x04 ,0xf0 ,0x54 ,0x3f ,0x70 ,0x1d ,0x90 ,0xfb ,0xff ,0xe0 ,0x44 ,0xfe ,0x7d , +0x00 ,0xfc ,0x90 ,0xfb ,0xfc ,0xe0 ,0x25 ,0xe0 ,0x24 ,0x85 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfd ,0xf5 , +0x83 ,0xed ,0xf0 ,0xa3 ,0xec ,0xf0 ,0xe5 ,0x81 ,0x24 ,0xfb ,0xf5 ,0x81 ,0x22 ,0x78 ,0x85 ,0x76 , +0x00 ,0x78 ,0x86 ,0x76 ,0x00 ,0x74 ,0x01 ,0x90 ,0xfb ,0xfe ,0xf0 ,0x12 ,0x30 ,0x85 ,0x90 ,0xfb , +0xfd ,0xe0 ,0x60 ,0x59 ,0x7c ,0x0a ,0x12 ,0x30 ,0xfa ,0x90 ,0xfb ,0xfb ,0xe0 ,0x25 ,0xe0 ,0x24 , +0x85 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfd ,0xf5 ,0x83 ,0xe0 ,0xfd ,0xa3 ,0xe0 ,0xfc ,0x90 ,0xfb ,0xfb , +0xe0 ,0x25 ,0xe0 ,0x24 ,0x85 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfd ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0xa3 ,0xf0 , +0x90 ,0xfb ,0xfb ,0xe0 ,0xff ,0xe4 ,0xef ,0x04 ,0x54 ,0x07 ,0xff ,0x90 ,0xfb ,0xfb ,0xf0 ,0x90 , +0xfb ,0xfd ,0xe0 ,0x14 ,0xf0 ,0x78 ,0x83 ,0xed ,0xf6 ,0x08 ,0xec ,0xf6 ,0x12 ,0x31 ,0x93 ,0xb2 , +0xb3 ,0x78 ,0x83 ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0x12 ,0x08 ,0xe5 ,0x80 ,0xa1 ,0x12 ,0x31 ,0xe7 , +0x78 ,0x85 ,0x06 ,0xb6 ,0x00 ,0x11 ,0x78 ,0x85 ,0x76 ,0x00 ,0x78 ,0x86 ,0xe6 ,0xf4 ,0x04 ,0x04 , +0xa2 ,0xe0 ,0x92 ,0xb4 ,0x78 ,0x86 ,0xf6 ,0x80 ,0x85 ,0xe4 ,0x90 ,0xfb ,0xfe ,0xf0 ,0x90 ,0xfb , +0xfd ,0xe0 ,0x7d ,0x00 ,0xfc ,0xed ,0x44 ,0xcf ,0xfd ,0x12 ,0x1c ,0x93 ,0x12 ,0x31 ,0x08 ,0x22 , +0x12 ,0x30 ,0x85 ,0xe5 ,0x6a ,0x64 ,0x49 ,0x45 ,0x69 ,0x60 ,0x15 ,0x90 ,0xff ,0x83 ,0xe0 ,0x54 , +0x0f ,0x7d ,0x00 ,0xd3 ,0x95 ,0x6a ,0xed ,0x95 ,0x69 ,0x50 ,0x05 ,0x12 ,0x2e ,0xce ,0x80 ,0x03 , +0x12 ,0x2f ,0x9e ,0x12 ,0x31 ,0x08 ,0x22 ,0x12 ,0x30 ,0x85 ,0xe5 ,0x6a ,0x64 ,0x49 ,0x45 ,0x69 , +0x60 ,0x05 ,0x12 ,0x2f ,0xd8 ,0x80 ,0x0e ,0x90 ,0xff ,0x80 ,0xe0 ,0x44 ,0x08 ,0xf0 ,0x90 ,0xff , +0x83 ,0xe0 ,0x54 ,0x7f ,0xf0 ,0x12 ,0x31 ,0x08 ,0x22 ,0x12 ,0x30 ,0x85 ,0x8c ,0x54 ,0xec ,0x54 , +0xf0 ,0xb4 ,0x10 ,0x15 ,0x75 ,0x64 ,0x3d ,0x75 ,0x63 ,0xfd ,0x75 ,0x62 ,0x01 ,0xe5 ,0x64 ,0x24 , +0x03 ,0xf5 ,0x64 ,0xe5 ,0x63 ,0x34 ,0x00 ,0xf5 ,0x63 ,0xe4 ,0xf5 ,0x57 ,0xf5 ,0x56 ,0xe5 ,0x56 , +0xc3 ,0x94 ,0x01 ,0x50 ,0x27 ,0xe5 ,0x54 ,0x54 ,0x0f ,0xfc ,0xad ,0x64 ,0xae ,0x63 ,0xaf ,0x62 , +0x12 ,0x0e ,0x82 ,0x8c ,0x55 ,0xec ,0x60 ,0x02 ,0x80 ,0x12 ,0x05 ,0x64 ,0xe5 ,0x64 ,0x70 ,0x02 , +0x05 ,0x63 ,0x05 ,0x57 ,0xe5 ,0x57 ,0x70 ,0x02 ,0x05 ,0x56 ,0x80 ,0xd2 ,0xe5 ,0x54 ,0x54 ,0x0f , +0x24 ,0x97 ,0xf8 ,0xc6 ,0x54 ,0xfe ,0xf6 ,0xe5 ,0x54 ,0x54 ,0x0f ,0x7f ,0x00 ,0xfe ,0x7c ,0x12 , +0x12 ,0x31 ,0x9a ,0xe5 ,0x55 ,0x14 ,0x70 ,0x09 ,0x7d ,0x00 ,0x7c ,0x09 ,0x12 ,0x24 ,0xb1 ,0x80 , +0x07 ,0xad ,0x57 ,0x7c ,0x00 ,0x12 ,0x24 ,0xb1 ,0x12 ,0x31 ,0x08 ,0x22 ,0x12 ,0x30 ,0x85 ,0x90 , +0xff ,0xfc ,0xe0 ,0x44 ,0x02 ,0xf0 ,0x90 ,0xff ,0x00 ,0xe0 ,0x30 ,0xe7 ,0x13 ,0x90 ,0xff ,0x83 , +0xe0 ,0x44 ,0x80 ,0xf0 ,0x43 ,0x67 ,0x80 ,0x90 ,0xff ,0xfc ,0xe0 ,0x44 ,0x01 ,0xf0 ,0x80 ,0x11 , +0x90 ,0xff ,0x82 ,0xe0 ,0x44 ,0x08 ,0xf0 ,0x53 ,0x67 ,0x7f ,0x90 ,0xff ,0xfc ,0xe0 ,0x54 ,0xfe , +0xf0 ,0x90 ,0xff ,0x81 ,0xe0 ,0x44 ,0x80 ,0xf0 ,0x12 ,0x25 ,0x64 ,0x90 ,0xff ,0xfe ,0xe0 ,0x44 , +0x05 ,0xf0 ,0x90 ,0xff ,0xfc ,0xe0 ,0x54 ,0xfd ,0xf0 ,0x12 ,0x31 ,0x08 ,0x22 ,0x12 ,0x30 ,0x85 , +0x7c ,0x01 ,0x12 ,0x32 ,0x48 ,0x78 ,0xa7 ,0xe6 ,0x44 ,0x02 ,0xf6 ,0x74 ,0xfe ,0xfc ,0x04 ,0xfd , +0x12 ,0x1c ,0xfe ,0x90 ,0xff ,0x6a ,0xe0 ,0x30 ,0xe7 ,0x02 ,0x80 ,0xf7 ,0xe4 ,0xf5 ,0x4e ,0x75 , +0x4d ,0x10 ,0xac ,0x4e ,0xad ,0x4d ,0xe5 ,0x4e ,0x15 ,0x4e ,0x70 ,0x02 ,0x15 ,0x4d ,0xec ,0x4d , +0x60 ,0x02 ,0x80 ,0xee ,0x43 ,0x87 ,0x01 ,0x12 ,0x31 ,0x08 ,0x22 ,0x12 ,0x30 ,0x85 ,0x7c ,0x02 , +0x12 ,0x31 ,0x14 ,0x78 ,0xa7 ,0xe6 ,0x54 ,0xfd ,0xf6 ,0x12 ,0x31 ,0x08 ,0x22 ,0x12 ,0x30 ,0x85 , +0x78 ,0xa7 ,0xe6 ,0x30 ,0xe0 ,0x2c ,0x78 ,0xa7 ,0xe6 ,0x30 ,0xe1 ,0x26 ,0x78 ,0xa7 ,0xe6 ,0xfc , +0xf5 ,0x83 ,0x18 ,0xe6 ,0x44 ,0xf0 ,0xfd ,0x12 ,0x1c ,0x93 ,0x90 ,0xff ,0xfc ,0xe0 ,0x44 ,0x20 , +0xf0 ,0x7c ,0x02 ,0x12 ,0x32 ,0x48 ,0x78 ,0xa7 ,0xe6 ,0x54 ,0xfd ,0xf6 ,0x74 ,0x1a ,0x90 ,0xff , +0xfe ,0xf0 ,0x78 ,0xa7 ,0xe6 ,0xfc ,0xf5 ,0x83 ,0x18 ,0xe6 ,0x44 ,0xf1 ,0xfd ,0x12 ,0x1c ,0x93 , +0x12 ,0x31 ,0x08 ,0x22 ,0x75 ,0x67 ,0x00 ,0x75 ,0x68 ,0x00 ,0xe4 ,0xf5 ,0x66 ,0xf5 ,0x65 ,0xe4 , +0xf5 ,0x69 ,0x75 ,0x6a ,0x49 ,0x74 ,0x84 ,0x90 ,0xff ,0x82 ,0xf0 ,0x74 ,0x84 ,0x90 ,0xff ,0x80 , +0xf0 ,0x74 ,0x80 ,0x90 ,0xff ,0x68 ,0xf0 ,0x74 ,0x80 ,0x90 ,0xff ,0x6a ,0xf0 ,0xad ,0x46 ,0xaf , +0x45 ,0x7e ,0x00 ,0xee ,0x24 ,0xfc ,0x50 ,0x03 ,0x02 ,0x21 ,0x6a ,0xe4 ,0xee ,0x75 ,0xf0 ,0x07 , +0xa4 ,0x24 ,0x3f ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 ,0xe0 ,0xff ,0xe4 ,0xef ,0x54 ,0x80 , +0xfd ,0xe4 ,0xef ,0x54 ,0x0f ,0x14 ,0xff ,0xed ,0x60 ,0x38 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 , +0x24 ,0x48 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0x74 ,0x90 ,0xf0 ,0xe4 ,0xef ,0x75 ,0xf0 , +0x08 ,0xa4 ,0x24 ,0x4a ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0x74 ,0x80 ,0xf0 ,0xe4 ,0xef , +0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4e ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0x74 ,0x80 ,0xf0 , +0x80 ,0x34 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x08 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 , +0x83 ,0x74 ,0x90 ,0xf0 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x0a ,0xf5 ,0x82 ,0xe4 ,0x34 , +0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x0e ,0xf5 ,0x82 ,0xe4 , +0x34 ,0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0x0e ,0x02 ,0x20 ,0xd3 ,0x8d ,0x46 ,0x8e ,0x44 ,0x8f ,0x45 , +0x74 ,0x7f ,0x90 ,0xff ,0xfd ,0xf0 ,0x74 ,0x90 ,0x90 ,0xff ,0xfc ,0xf0 ,0x90 ,0xfc ,0x19 ,0xe0 , +0x30 ,0xe6 ,0x07 ,0x90 ,0xff ,0xfc ,0xe0 ,0x44 ,0x04 ,0xf0 ,0x22 ,0x90 ,0xfc ,0x0d ,0xe0 ,0x14 , +0x70 ,0x04 ,0x90 ,0xfc ,0x0c ,0xe0 ,0x70 ,0x39 ,0x90 ,0xfc ,0x00 ,0x79 ,0x06 ,0x7a ,0x35 ,0x7b , +0x12 ,0x78 ,0x01 ,0x12 ,0x03 ,0xf5 ,0x7f ,0x00 ,0xef ,0x33 ,0x40 ,0x15 ,0xef ,0x90 ,0x35 ,0x4d , +0x93 ,0xfc ,0xef ,0x24 ,0x80 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 ,0xec ,0xf0 ,0x0f ,0x80 , +0xe7 ,0x8f ,0x59 ,0x90 ,0xfc ,0x2b ,0x79 ,0x18 ,0x7a ,0x35 ,0x7b ,0x35 ,0x78 ,0x01 ,0x12 ,0x03 , +0xf5 ,0xe4 ,0x90 ,0xff ,0xff ,0xf0 ,0x74 ,0x51 ,0x90 ,0xff ,0xfa ,0xf0 ,0x74 ,0x04 ,0x90 ,0xff , +0xfb ,0xf0 ,0x74 ,0x53 ,0x90 ,0xff ,0xf8 ,0xf0 ,0x74 ,0x51 ,0x90 ,0xff ,0xf9 ,0xf0 ,0x74 ,0x55 , +0x90 ,0xff ,0xf7 ,0xf0 ,0x74 ,0x93 ,0x90 ,0xff ,0xf6 ,0xf0 ,0x74 ,0x32 ,0x90 ,0xff ,0xf5 ,0xf0 , +0x75 ,0x64 ,0x3d ,0x75 ,0x63 ,0xfd ,0x75 ,0x62 ,0x01 ,0xe4 ,0x90 ,0xff ,0x83 ,0xf0 ,0x74 ,0x80 , +0x90 ,0xff ,0x81 ,0xf0 ,0x75 ,0x58 ,0x04 ,0xe5 ,0x58 ,0x75 ,0xf0 ,0x07 ,0xa4 ,0x24 ,0x3f ,0xf5 , +0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 ,0xe0 ,0x78 ,0x89 ,0xf6 ,0xfc ,0x54 ,0x0f ,0x14 ,0xfc ,0x78 , +0x89 ,0xec ,0xf6 ,0xe5 ,0x58 ,0x75 ,0xf0 ,0x07 ,0xa4 ,0x24 ,0x41 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc , +0xf5 ,0x83 ,0xe0 ,0x78 ,0x8c ,0x76 ,0xf8 ,0x08 ,0x76 ,0x00 ,0xfc ,0x78 ,0x89 ,0xe6 ,0x75 ,0xf0 , +0x08 ,0xa4 ,0x24 ,0x48 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0x78 ,0x89 ,0xe6 , +0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4f ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xec ,0xf0 ,0x78 , +0x8c ,0xe6 ,0xff ,0x08 ,0xe6 ,0x7e ,0x03 ,0xcf ,0xc3 ,0x13 ,0xcf ,0x13 ,0xde ,0xf9 ,0xfe ,0x78 , +0x89 ,0xe6 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x49 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xee , +0xf0 ,0x78 ,0x89 ,0xe6 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4a ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 , +0x83 ,0x74 ,0x80 ,0xf0 ,0x78 ,0x8a ,0xec ,0xf6 ,0x7d ,0x00 ,0x78 ,0x8d ,0xe6 ,0x2c ,0xf6 ,0x18 , +0xe6 ,0x3d ,0xf6 ,0x78 ,0x8c ,0xe6 ,0xfd ,0x08 ,0xe6 ,0x7c ,0x03 ,0xcd ,0xc3 ,0x13 ,0xcd ,0x13 , +0xdc ,0xf9 ,0xfc ,0x78 ,0x89 ,0xe6 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4d ,0xf5 ,0x82 ,0xe4 ,0x34 , +0xff ,0xf5 ,0x83 ,0xec ,0xf0 ,0x78 ,0x89 ,0xe6 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4e ,0xf5 ,0x82 , +0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0x78 ,0x8c ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0x78 ,0x89 , +0xe6 ,0xff ,0x7e ,0x00 ,0xee ,0x24 ,0xfc ,0x50 ,0x03 ,0x02 ,0x24 ,0x6b ,0xe4 ,0xee ,0x75 ,0xf0 , +0x07 ,0xa4 ,0x24 ,0x3f ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 ,0xe0 ,0xff ,0xe4 ,0xef ,0x54 , +0x80 ,0xfa ,0xe4 ,0xef ,0x54 ,0x0f ,0x14 ,0xff ,0xe4 ,0xee ,0x75 ,0xf0 ,0x07 ,0xa4 ,0x24 ,0x41 , +0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 ,0xe0 ,0x78 ,0x8a ,0xf6 ,0xee ,0x75 ,0xf0 ,0x80 ,0xa4 , +0x24 ,0x08 ,0xf8 ,0xe5 ,0xf0 ,0x34 ,0xf8 ,0xf9 ,0xe8 ,0xfc ,0xe9 ,0xfd ,0x8a ,0x59 ,0xea ,0x70 , +0x03 ,0x02 ,0x23 ,0xd8 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x48 ,0xf5 ,0x82 ,0xe4 ,0x34 , +0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0x78 ,0x8a ,0xe6 ,0xfa ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 , +0x4f ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xea ,0xf0 ,0xed ,0xfb ,0xec ,0x7a ,0x03 ,0xcb , +0xc3 ,0x13 ,0xcb ,0x13 ,0xda ,0xf9 ,0xfa ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x49 ,0xf5 , +0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xea ,0xf0 ,0x78 ,0x8a ,0xe6 ,0x7b ,0x00 ,0xfa ,0xec ,0x2a , +0xfc ,0xed ,0x3b ,0xfd ,0xfb ,0xec ,0x7a ,0x03 ,0xcb ,0xc3 ,0x13 ,0xcb ,0x13 ,0xda ,0xf9 ,0xfa , +0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4d ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xea , +0xf0 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4a ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 , +0x74 ,0x80 ,0xf0 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4e ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff , +0xf5 ,0x83 ,0x74 ,0x80 ,0xf0 ,0x02 ,0x24 ,0x67 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x08 , +0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0x78 ,0x8a ,0xe6 ,0xfa ,0xe4 ,0xef ,0x75 , +0xf0 ,0x08 ,0xa4 ,0x24 ,0x0f ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xea ,0xf0 ,0xed ,0xfb , +0xec ,0x7a ,0x03 ,0xcb ,0xc3 ,0x13 ,0xcb ,0x13 ,0xda ,0xf9 ,0xfa ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 , +0xa4 ,0x24 ,0x09 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xea ,0xf0 ,0x78 ,0x8a ,0xe6 ,0x7b , +0x00 ,0xfa ,0xec ,0x2a ,0xfc ,0xed ,0x3b ,0xfd ,0xfb ,0xec ,0x7a ,0x03 ,0xcb ,0xc3 ,0x13 ,0xcb , +0x13 ,0xda ,0xf9 ,0xfa ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x0d ,0xf5 ,0x82 ,0xe4 ,0x34 , +0xff ,0xf5 ,0x83 ,0xea ,0xf0 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x0a ,0xf5 ,0x82 ,0xe4 , +0x34 ,0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x0e ,0xf5 ,0x82 , +0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0x0e ,0x02 ,0x22 ,0xf4 ,0x8e ,0x58 ,0x78 ,0x8c ,0xed , +0xf6 ,0x08 ,0xec ,0xf6 ,0x78 ,0x89 ,0xef ,0xf6 ,0x12 ,0x20 ,0xa4 ,0x22 ,0x8c ,0x26 ,0xec ,0x30 , +0xe7 ,0x18 ,0xe5 ,0x26 ,0x54 ,0x0f ,0x14 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x48 ,0xf5 ,0x82 ,0xe4 , +0x34 ,0xff ,0xf5 ,0x83 ,0xe0 ,0x54 ,0xdf ,0xf0 ,0x80 ,0x16 ,0xe5 ,0x26 ,0x54 ,0x0f ,0x14 ,0x75 , +0xf0 ,0x08 ,0xa4 ,0x24 ,0x08 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe0 ,0x54 ,0xdf ,0xf0 , +0x22 ,0xec ,0x90 ,0xfd ,0x3f ,0xf0 ,0x8c ,0x24 ,0xed ,0x24 ,0x03 ,0xf5 ,0x25 ,0x7d ,0x00 ,0xd3 , +0x95 ,0x6c ,0xed ,0x95 ,0x6b ,0x40 ,0x03 ,0x85 ,0x6c ,0x25 ,0xe5 ,0x25 ,0x24 ,0xb7 ,0x50 ,0x09 , +0x75 ,0x25 ,0x03 ,0x74 ,0x02 ,0x90 ,0xfd ,0x3f ,0xf0 ,0xac ,0x25 ,0x12 ,0x2f ,0xc3 ,0x22 ,0xe4 , +0xf5 ,0x66 ,0xf5 ,0x65 ,0x12 ,0x24 ,0xe8 ,0x22 ,0x90 ,0xfd ,0x3d ,0xe0 ,0x65 ,0x6d ,0x60 ,0x0e , +0x74 ,0x04 ,0x90 ,0xfd ,0x3f ,0xf0 ,0xe4 ,0xf5 ,0x65 ,0x75 ,0x66 ,0x03 ,0x80 ,0x46 ,0x7d ,0x6d , +0xe4 ,0xfe ,0xff ,0x79 ,0x3d ,0x7a ,0xfd ,0x7b ,0x01 ,0x74 ,0x05 ,0x78 ,0x00 ,0x12 ,0x03 ,0x3f , +0xe5 ,0x66 ,0x24 ,0x03 ,0xf5 ,0x66 ,0xe5 ,0x65 ,0x34 ,0x00 ,0xf5 ,0x65 ,0xe5 ,0x66 ,0xd3 ,0x95 , +0x6c ,0xe5 ,0x65 ,0x95 ,0x6b ,0x40 ,0x06 ,0x85 ,0x6c ,0x66 ,0x85 ,0x6b ,0x65 ,0xd3 ,0xe5 ,0x66 , +0x94 ,0x48 ,0xe5 ,0x65 ,0x94 ,0x00 ,0x40 ,0x0c ,0x74 ,0x02 ,0x90 ,0xfd ,0x3f ,0xf0 ,0xe4 ,0xf5 , +0x65 ,0x75 ,0x66 ,0x03 ,0xac ,0x66 ,0x12 ,0x2f ,0xc3 ,0x22 ,0xec ,0x90 ,0xfd ,0x3f ,0xf0 ,0xe4 , +0xf5 ,0x66 ,0xf5 ,0x65 ,0x8c ,0x32 ,0xec ,0x60 ,0x05 ,0x12 ,0x2f ,0xb4 ,0x80 ,0x05 ,0x7c ,0x00 , +0x12 ,0x2f ,0xc3 ,0x22 ,0x90 ,0xff ,0x04 ,0xe0 ,0xf5 ,0x4a ,0x90 ,0xff ,0x06 ,0xe0 ,0xfd ,0xa3 , +0xe0 ,0xed ,0x7d ,0x00 ,0xfc ,0x7d ,0x00 ,0xfc ,0x90 ,0xff ,0x06 ,0xe0 ,0xff ,0xa3 ,0xe0 ,0x7e , +0x00 ,0xff ,0xe4 ,0xfe ,0xec ,0x4e ,0xfc ,0xed ,0x4f ,0xfd ,0xc3 ,0xec ,0x94 ,0x48 ,0xed ,0x94 , +0x00 ,0x50 ,0x22 ,0x90 ,0xff ,0x06 ,0xe0 ,0xfd ,0xa3 ,0xe0 ,0xed ,0x7d ,0x00 ,0xfc ,0x7d ,0x00 , +0xfc ,0x90 ,0xff ,0x06 ,0xe0 ,0xff ,0xa3 ,0xe0 ,0x7e ,0x00 ,0xff ,0xe4 ,0xfe ,0xec ,0x4e ,0xfc , +0xed ,0x4f ,0xfd ,0x80 ,0x04 ,0xe4 ,0xfd ,0x7c ,0x48 ,0x8c ,0x6c ,0x8d ,0x6b ,0x90 ,0xff ,0x02 , +0xe0 ,0xfd ,0xa3 ,0xe0 ,0xed ,0x7d ,0x00 ,0xfc ,0x7d ,0x00 ,0xfc ,0x90 ,0xff ,0x02 ,0xe0 ,0xff , +0xa3 ,0xe0 ,0x7e ,0x00 ,0xff ,0xe4 ,0xfe ,0xec ,0x4e ,0xf5 ,0x4c ,0xed ,0x4f ,0xf5 ,0x4b ,0x75 , +0x64 ,0x3d ,0x75 ,0x63 ,0xfd ,0x75 ,0x62 ,0x01 ,0x7d ,0x3d ,0x7e ,0xfd ,0x7f ,0x01 ,0x79 ,0x6d , +0xe4 ,0xfa ,0xfb ,0x74 ,0x05 ,0x78 ,0x00 ,0x12 ,0x03 ,0x3f ,0x75 ,0x49 ,0x00 ,0xe5 ,0x49 ,0x24 , +0xfe ,0x40 ,0x19 ,0xad ,0x64 ,0xae ,0x63 ,0xaf ,0x62 ,0xe4 ,0x12 ,0x03 ,0x0f ,0x05 ,0x49 ,0x0d , +0xed ,0x70 ,0x01 ,0x0e ,0x8d ,0x64 ,0x8e ,0x63 ,0x8f ,0x62 ,0x80 ,0xe1 ,0x75 ,0x64 ,0x3d ,0x75 , +0x63 ,0xfd ,0x75 ,0x62 ,0x01 ,0x90 ,0xff ,0x00 ,0xe0 ,0x54 ,0x60 ,0xb4 ,0x00 ,0x02 ,0x80 ,0x06 , +0xd3 ,0x50 ,0x03 ,0x02 ,0x2c ,0x12 ,0xe5 ,0x4a ,0x54 ,0x0f ,0xf5 ,0x49 ,0xe5 ,0x4a ,0x54 ,0x80 , +0xa2 ,0xe0 ,0x92 ,0x02 ,0x90 ,0xff ,0x01 ,0xe0 ,0x12 ,0x01 ,0x81 ,0x00 ,0x0b ,0x2c ,0x0d ,0x26 , +0x67 ,0x27 ,0x85 ,0x2c ,0x0d ,0x28 ,0x91 ,0x2c ,0x0d ,0x29 ,0x74 ,0x29 ,0xa8 ,0x2b ,0x0f ,0x2b , +0x12 ,0x2b ,0x52 ,0x2b ,0xb6 ,0x2b ,0xe4 ,0xe5 ,0x67 ,0x30 ,0xe7 ,0x0e ,0xe5 ,0x4c ,0x45 ,0x4b , +0x70 ,0x08 ,0xe5 ,0x6c ,0x64 ,0x02 ,0x45 ,0x6b ,0x60 ,0x03 ,0x02 ,0x2c ,0x0f ,0x90 ,0xff ,0x00 , +0xe0 ,0x54 ,0x1f ,0xb4 ,0x00 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x29 ,0xe5 ,0x4a ,0x60 ,0x03 ,0x02 , +0x27 ,0x82 ,0xad ,0x64 ,0xae ,0x63 ,0xaf ,0x62 ,0x74 ,0x01 ,0x12 ,0x03 ,0x0f ,0x78 ,0xa7 ,0xe6 , +0x30 ,0xe0 ,0x0b ,0xad ,0x64 ,0xae ,0x63 ,0xaf ,0x62 ,0x74 ,0x02 ,0x12 ,0x03 ,0x0f ,0x7c ,0x02 , +0x12 ,0x2f ,0xc3 ,0x22 ,0xb4 ,0x01 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x1b ,0xe5 ,0x67 ,0x20 ,0xe1 , +0x07 ,0xe5 ,0x4a ,0x60 ,0x03 ,0x02 ,0x27 ,0x82 ,0xe5 ,0x4a ,0x24 ,0xfe ,0x50 ,0x03 ,0x02 ,0x27 , +0x82 ,0x7c ,0x02 ,0x12 ,0x2f ,0xc3 ,0x22 ,0xb4 ,0x02 ,0x02 ,0x80 ,0x06 ,0xd3 ,0x50 ,0x03 ,0x02 , +0x27 ,0x80 ,0xe5 ,0x67 ,0x20 ,0xe1 ,0x0d ,0xe5 ,0x4a ,0x60 ,0x09 ,0xe5 ,0x4a ,0x64 ,0x80 ,0x60 , +0x03 ,0x02 ,0x27 ,0x82 ,0xac ,0x4a ,0x12 ,0x30 ,0x4a ,0x40 ,0x03 ,0x02 ,0x27 ,0x82 ,0xe5 ,0x49 , +0x70 ,0x25 ,0x30 ,0x02 ,0x11 ,0x90 ,0xff ,0x80 ,0xe0 ,0x54 ,0x08 ,0xad ,0x64 ,0xae ,0x63 ,0xaf , +0x62 ,0x12 ,0x03 ,0x0f ,0x80 ,0x0f ,0x90 ,0xff ,0x82 ,0xe0 ,0x54 ,0x08 ,0xad ,0x64 ,0xae ,0x63 , +0xaf ,0x62 ,0x12 ,0x03 ,0x0f ,0x80 ,0x3d ,0x15 ,0x49 ,0x30 ,0x02 ,0x1d ,0xe5 ,0x49 ,0x75 ,0xf0 , +0x08 ,0xa4 ,0x24 ,0x48 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe0 ,0x54 ,0x08 ,0xad ,0x64 , +0xae ,0x63 ,0xaf ,0x62 ,0x12 ,0x03 ,0x0f ,0x80 ,0x1b ,0xe5 ,0x49 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 , +0x08 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe0 ,0x54 ,0x08 ,0xad ,0x64 ,0xae ,0x63 ,0xaf , +0x62 ,0x12 ,0x03 ,0x0f ,0xad ,0x64 ,0xae ,0x63 ,0xaf ,0x62 ,0x12 ,0x01 ,0xe6 ,0x60 ,0x0b ,0xad , +0x64 ,0xae ,0x63 ,0xaf ,0x62 ,0x74 ,0x01 ,0x12 ,0x03 ,0x0f ,0x7c ,0x02 ,0x12 ,0x2f ,0xc3 ,0x22 , +0x80 ,0x00 ,0x02 ,0x2c ,0x0f ,0xe5 ,0x67 ,0x20 ,0xe7 ,0x06 ,0xe5 ,0x6c ,0x45 ,0x6b ,0x60 ,0x03 , +0x02 ,0x2c ,0x0f ,0x90 ,0xff ,0x00 ,0xe0 ,0x54 ,0x1f ,0xb4 ,0x00 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 , +0x1a ,0xe5 ,0x4c ,0x14 ,0x45 ,0x4b ,0x70 ,0x04 ,0xe5 ,0x4a ,0x60 ,0x03 ,0x02 ,0x28 ,0x8e ,0x78 , +0xa7 ,0xe6 ,0x54 ,0xfe ,0xf6 ,0x7c ,0x00 ,0x12 ,0x2f ,0xc3 ,0x22 ,0xb4 ,0x01 ,0x02 ,0x80 ,0x03 , +0xd3 ,0x40 ,0x2a ,0xe5 ,0x67 ,0x20 ,0xe1 ,0x08 ,0xe5 ,0x67 ,0x20 ,0xe0 ,0x03 ,0x02 ,0x28 ,0x8e , +0xe5 ,0x67 ,0x30 ,0xe0 ,0x04 ,0xe5 ,0x4a ,0x70 ,0x0b ,0xe5 ,0x67 ,0x30 ,0xe1 ,0x09 ,0xe5 ,0x4a , +0x24 ,0xfe ,0x50 ,0x03 ,0x02 ,0x28 ,0x8e ,0x7c ,0x00 ,0x12 ,0x2f ,0xc3 ,0x22 ,0xb4 ,0x02 ,0x02 , +0x80 ,0x06 ,0xd3 ,0x50 ,0x03 ,0x02 ,0x28 ,0x8c ,0xe5 ,0x4c ,0x45 ,0x4b ,0x60 ,0x03 ,0x02 ,0x28 , +0x8e ,0xac ,0x4a ,0x12 ,0x30 ,0x4a ,0x40 ,0x03 ,0x02 ,0x28 ,0x8e ,0xe5 ,0x67 ,0x20 ,0xe1 ,0x07 , +0xe5 ,0x67 ,0x20 ,0xe0 ,0x02 ,0x80 ,0x77 ,0xe5 ,0x67 ,0x30 ,0xe0 ,0x06 ,0xe5 ,0x49 ,0x60 ,0x02 , +0x80 ,0x6c ,0xe5 ,0x49 ,0x70 ,0x0f ,0x90 ,0xff ,0x82 ,0xe0 ,0x54 ,0xf7 ,0xf0 ,0x90 ,0xff ,0x80 , +0xe0 ,0x54 ,0xf7 ,0xf0 ,0x22 ,0xe5 ,0x49 ,0xb4 ,0x01 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x09 ,0x7d , +0x01 ,0x7c ,0x03 ,0x12 ,0x0f ,0x0b ,0x80 ,0x11 ,0xb4 ,0x02 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x09 , +0x7d ,0x01 ,0x7c ,0x04 ,0x12 ,0x0f ,0x0b ,0x80 ,0x00 ,0x15 ,0x49 ,0x30 ,0x02 ,0x15 ,0xe5 ,0x49 , +0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x48 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe0 ,0x54 ,0xf7 , +0xf0 ,0x80 ,0x13 ,0xe5 ,0x49 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x08 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff , +0xf5 ,0x83 ,0xe0 ,0x54 ,0xf7 ,0xf0 ,0x7c ,0x00 ,0x12 ,0x2f ,0xc3 ,0x22 ,0x80 ,0x00 ,0x02 ,0x2c , +0x0f ,0xe5 ,0x67 ,0x20 ,0xe7 ,0x06 ,0xe5 ,0x6c ,0x45 ,0x6b ,0x60 ,0x03 ,0x02 ,0x2c ,0x0f ,0x90 , +0xff ,0x00 ,0xe0 ,0x54 ,0x1f ,0xb4 ,0x00 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x1a ,0xe5 ,0x4c ,0x14 , +0x45 ,0x4b ,0x70 ,0x04 ,0xe5 ,0x4a ,0x60 ,0x03 ,0x02 ,0x29 ,0x71 ,0x78 ,0xa7 ,0xe6 ,0x44 ,0x01 , +0xf6 ,0x7c ,0x00 ,0x12 ,0x2f ,0xc3 ,0x22 ,0xb4 ,0x01 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x29 ,0xe5 , +0x67 ,0x20 ,0xe1 ,0x08 ,0xe5 ,0x67 ,0x20 ,0xe0 ,0x03 ,0x02 ,0x29 ,0x71 ,0xe5 ,0x67 ,0x30 ,0xe0 , +0x04 ,0xe5 ,0x49 ,0x70 ,0x0b ,0xe5 ,0x67 ,0x30 ,0xe1 ,0x08 ,0xe5 ,0x49 ,0x24 ,0xfe ,0x50 ,0x02 , +0x80 ,0x7f ,0x7c ,0x00 ,0x12 ,0x2f ,0xc3 ,0x22 ,0xb4 ,0x02 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x6f , +0xe5 ,0x4c ,0x45 ,0x4b ,0x60 ,0x02 ,0x80 ,0x69 ,0xac ,0x4a ,0x12 ,0x30 ,0x4a ,0x40 ,0x02 ,0x80 , +0x60 ,0xe5 ,0x67 ,0x20 ,0xe1 ,0x07 ,0xe5 ,0x67 ,0x20 ,0xe0 ,0x02 ,0x80 ,0x54 ,0xe5 ,0x49 ,0x70 , +0x14 ,0x30 ,0x02 ,0x09 ,0x90 ,0xff ,0x80 ,0xe0 ,0x44 ,0x08 ,0xf0 ,0x80 ,0x07 ,0x90 ,0xff ,0x82 , +0xe0 ,0x44 ,0x08 ,0xf0 ,0x22 ,0xe5 ,0x67 ,0x30 ,0xe1 ,0x33 ,0x15 ,0x49 ,0x30 ,0x02 ,0x15 ,0xe5 , +0x49 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x48 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe0 ,0x44 , +0x08 ,0xf0 ,0x80 ,0x13 ,0xe5 ,0x49 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x08 ,0xf5 ,0x82 ,0xe4 ,0x34 , +0xff ,0xf5 ,0x83 ,0xe0 ,0x44 ,0x08 ,0xf0 ,0x7c ,0x00 ,0x12 ,0x2f ,0xc3 ,0x22 ,0x80 ,0x02 ,0x80 , +0x00 ,0x02 ,0x2c ,0x0f ,0xe5 ,0x67 ,0x20 ,0xe7 ,0x12 ,0xe5 ,0x6c ,0x45 ,0x6b ,0x70 ,0x0c ,0xe5 , +0x4a ,0x70 ,0x08 ,0x90 ,0xff ,0x00 ,0xe0 ,0x54 ,0x1f ,0x60 ,0x03 ,0x02 ,0x2c ,0x0f ,0xe5 ,0x4c , +0x90 ,0xff ,0xff ,0xf0 ,0x90 ,0xff ,0xff ,0xe0 ,0x60 ,0x05 ,0x43 ,0x67 ,0x01 ,0x80 ,0x03 ,0x53 , +0x67 ,0xfe ,0x7c ,0x00 ,0x12 ,0x2f ,0xc3 ,0x22 ,0xe5 ,0x67 ,0x30 ,0xe7 ,0x0e ,0xe5 ,0x6c ,0x45 , +0x6b ,0x60 ,0x08 ,0x90 ,0xff ,0x00 ,0xe0 ,0x54 ,0x1f ,0x60 ,0x03 ,0x02 ,0x2c ,0x0f ,0xad ,0x4b , +0xe5 ,0x4c ,0xed ,0x7d ,0x00 ,0xfc ,0x7d ,0x00 ,0xfc ,0xbd ,0x00 ,0x02 ,0x80 ,0x03 ,0x02 ,0x2b , +0x0a ,0xb4 ,0x01 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x32 ,0xe5 ,0x4a ,0x70 ,0x05 ,0xe5 ,0x4c ,0xfc , +0x60 ,0x03 ,0x02 ,0x2b ,0x0c ,0x75 ,0x64 ,0x00 ,0x75 ,0x63 ,0xfc ,0x75 ,0x62 ,0x01 ,0xd3 ,0xe5 , +0x6c ,0x94 ,0x12 ,0xe5 ,0x6b ,0x94 ,0x00 ,0x40 ,0x06 ,0xe4 ,0xfd ,0x7c ,0x12 ,0x80 ,0x04 ,0xac , +0x6c ,0xad ,0x6b ,0x8c ,0x6a ,0x8d ,0x69 ,0x12 ,0x2f ,0xd8 ,0x22 ,0xb4 ,0x02 ,0x02 ,0x80 ,0x03 , +0xd3 ,0x40 ,0x59 ,0xe5 ,0x4a ,0x60 ,0x03 ,0x02 ,0x2b ,0x0c ,0xe5 ,0x4c ,0xfc ,0x70 ,0x27 ,0x75 , +0x64 ,0x12 ,0x75 ,0x63 ,0xfc ,0x75 ,0x62 ,0x01 ,0xd3 ,0xe5 ,0x6c ,0x94 ,0x19 ,0xe5 ,0x6b ,0x94 , +0x00 ,0x40 ,0x06 ,0xe4 ,0xfd ,0x7c ,0x19 ,0x80 ,0x04 ,0xac ,0x6c ,0xad ,0x6b ,0x8c ,0x6a ,0x8d , +0x69 ,0x12 ,0x2f ,0xd8 ,0x80 ,0x25 ,0x75 ,0x64 ,0x2b ,0x75 ,0x63 ,0xfc ,0x75 ,0x62 ,0x01 ,0xd3 , +0xe5 ,0x6c ,0x94 ,0x35 ,0xe5 ,0x6b ,0x94 ,0x00 ,0x40 ,0x06 ,0xe4 ,0xfd ,0x7c ,0x35 ,0x80 ,0x04 , +0xac ,0x6c ,0xad ,0x6b ,0x8c ,0x6a ,0x8d ,0x69 ,0x12 ,0x2f ,0xd8 ,0x22 ,0xb4 ,0x03 ,0x02 ,0x80 , +0x06 ,0xd3 ,0x50 ,0x03 ,0x02 ,0x2b ,0x0a ,0xe5 ,0x4c ,0xf5 ,0x49 ,0x70 ,0x0f ,0x90 ,0xff ,0x04 , +0xe0 ,0xfd ,0xa3 ,0xe0 ,0x4d ,0x60 ,0x03 ,0x02 ,0x2b ,0x0c ,0x80 ,0x18 ,0x90 ,0xfc ,0x82 ,0xe0 , +0xfd ,0xa3 ,0xe0 ,0xfc ,0x90 ,0xff ,0x05 ,0xe0 ,0x6c ,0x70 ,0x07 ,0x90 ,0xff ,0x04 ,0xe0 ,0x6d , +0x60 ,0x02 ,0x80 ,0x68 ,0xe4 ,0xf5 ,0x6a ,0xf5 ,0x69 ,0x7f ,0x00 ,0xe5 ,0x49 ,0x14 ,0xc5 ,0x49 , +0x60 ,0x0f ,0xef ,0x24 ,0x80 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 ,0xe0 ,0x2f ,0xff ,0x80 , +0xea ,0x8f ,0x4a ,0xe5 ,0x4a ,0x24 ,0x80 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 ,0xe0 ,0x7d , +0x00 ,0xd3 ,0x95 ,0x6c ,0xed ,0x95 ,0x6b ,0x40 ,0x06 ,0xac ,0x6c ,0xad ,0x6b ,0x80 ,0x0f ,0xe5 , +0x4a ,0x24 ,0x80 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 ,0xe0 ,0x7d ,0x00 ,0xfc ,0x8c ,0x6a , +0x8d ,0x69 ,0xe5 ,0x4a ,0x24 ,0x80 ,0xfc ,0xe4 ,0x34 ,0xfc ,0xfd ,0xfe ,0xec ,0xfd ,0x7f ,0x01 , +0x8d ,0x64 ,0x8e ,0x63 ,0x8f ,0x62 ,0x12 ,0x2f ,0xd8 ,0x22 ,0x80 ,0x00 ,0x02 ,0x2c ,0x0f ,0x02 , +0x2c ,0x0f ,0xe5 ,0x67 ,0x30 ,0xe7 ,0x19 ,0xe5 ,0x6c ,0x14 ,0x45 ,0x6b ,0x70 ,0x12 ,0xe5 ,0x4a , +0x70 ,0x0e ,0xe5 ,0x4c ,0x45 ,0x4b ,0x70 ,0x08 ,0x90 ,0xff ,0x00 ,0xe0 ,0x54 ,0x1f ,0x60 ,0x03 , +0x02 ,0x2c ,0x0f ,0xe5 ,0x67 ,0x20 ,0xe0 ,0x08 ,0xe5 ,0x67 ,0x20 ,0xe1 ,0x03 ,0x02 ,0x2c ,0x0f , +0x75 ,0x64 ,0x68 ,0xe4 ,0xf5 ,0x63 ,0xf5 ,0x62 ,0xe4 ,0xf5 ,0x69 ,0x04 ,0xf5 ,0x6a ,0x12 ,0x2f , +0xd8 ,0x22 ,0xe5 ,0x67 ,0x20 ,0xe7 ,0x27 ,0xe5 ,0x6c ,0x45 ,0x6b ,0x70 ,0x21 ,0xe5 ,0x4a ,0x70 , +0x1d ,0xe5 ,0x4c ,0x64 ,0x02 ,0x45 ,0x4b ,0x60 ,0x0d ,0xe5 ,0x4c ,0x14 ,0x45 ,0x4b ,0x60 ,0x06 , +0xe5 ,0x4c ,0x45 ,0x4b ,0x70 ,0x08 ,0x90 ,0xff ,0x00 ,0xe0 ,0x54 ,0x1f ,0x60 ,0x03 ,0x02 ,0x2c , +0x0f ,0xe5 ,0x67 ,0x20 ,0xe0 ,0x08 ,0xe5 ,0x67 ,0x20 ,0xe1 ,0x03 ,0x02 ,0x2c ,0x0f ,0x85 ,0x4c , +0x68 ,0xe5 ,0x68 ,0x70 ,0x08 ,0x43 ,0x67 ,0x01 ,0x53 ,0x67 ,0xfd ,0x80 ,0x13 ,0xe5 ,0x68 ,0x64 , +0x02 ,0x60 ,0x07 ,0xe5 ,0x68 ,0x14 ,0x60 ,0x02 ,0x80 ,0x65 ,0x53 ,0x67 ,0xfe ,0x43 ,0x67 ,0x02 , +0x7c ,0x00 ,0x12 ,0x2f ,0xc3 ,0x22 ,0xe5 ,0x67 ,0x30 ,0xe7 ,0x1a ,0xe5 ,0x6c ,0x14 ,0x45 ,0x6b , +0x70 ,0x13 ,0xe5 ,0x4a ,0x70 ,0x0f ,0xe5 ,0x4c ,0x45 ,0x4b ,0x70 ,0x09 ,0x90 ,0xff ,0x00 ,0xe0 , +0x54 ,0x1f ,0x14 ,0x60 ,0x02 ,0x80 ,0x38 ,0xe5 ,0x67 ,0x20 ,0xe1 ,0x02 ,0x80 ,0x31 ,0x7c ,0x01 , +0x12 ,0x2f ,0xc3 ,0x22 ,0xe5 ,0x67 ,0x20 ,0xe7 ,0x15 ,0xe5 ,0x6c ,0x45 ,0x6b ,0x70 ,0x0f ,0xe5 , +0x4c ,0x45 ,0x4b ,0x70 ,0x09 ,0x90 ,0xff ,0x00 ,0xe0 ,0x54 ,0x1f ,0x14 ,0x60 ,0x02 ,0x80 ,0x0f , +0xe5 ,0x67 ,0x20 ,0xe1 ,0x02 ,0x80 ,0x08 ,0x7c ,0x00 ,0x12 ,0x2f ,0xc3 ,0x22 ,0x80 ,0x00 ,0x02 , +0x2e ,0xca ,0xb4 ,0x40 ,0x02 ,0x80 ,0x06 ,0xd3 ,0x50 ,0x03 ,0x02 ,0x2e ,0xc0 ,0x90 ,0xff ,0x01 , +0xe0 ,0x90 ,0xfd ,0x3d ,0xf0 ,0xe5 ,0x4a ,0x90 ,0xfd ,0x3e ,0xf0 ,0xe4 ,0x90 ,0xfd ,0x3f ,0xf0 , +0xe5 ,0x64 ,0x24 ,0x03 ,0xf5 ,0x64 ,0xe5 ,0x63 ,0x34 ,0x00 ,0xf5 ,0x63 ,0xad ,0x4b ,0xe5 ,0x4c , +0x85 ,0x64 ,0x82 ,0x85 ,0x63 ,0x83 ,0xcd ,0xf0 ,0xa3 ,0xcd ,0xf0 ,0x90 ,0xff ,0x01 ,0xe0 ,0x12 , +0x01 ,0xb7 ,0x2c ,0x7d ,0x01 ,0x2c ,0xa3 ,0x02 ,0x2c ,0xcd ,0x03 ,0x2c ,0xf7 ,0x04 ,0x2d ,0x45 , +0x05 ,0x2d ,0x82 ,0x06 ,0x2d ,0xa8 ,0x07 ,0x2d ,0xce ,0x08 ,0x2d ,0xf4 ,0x09 ,0x2e ,0x1a ,0x0b , +0x2e ,0x40 ,0x0c ,0x2e ,0x4f ,0x80 ,0x2e ,0x4f ,0x81 ,0x00 ,0x00 ,0x2e ,0xad ,0xe5 ,0x67 ,0x20 , +0xe7 ,0x06 ,0x7c ,0x05 ,0x12 ,0x25 ,0x4a ,0x22 ,0x7d ,0xb7 ,0x7e ,0x34 ,0x7f ,0x02 ,0x79 ,0x40 , +0x7a ,0xfd ,0x7b ,0x01 ,0x74 ,0x08 ,0x78 ,0x00 ,0x12 ,0x03 ,0x3f ,0x7d ,0x08 ,0x7c ,0x00 ,0x12 , +0x24 ,0xb1 ,0x22 ,0xe5 ,0x67 ,0x20 ,0xe7 ,0x06 ,0x7c ,0x05 ,0x12 ,0x25 ,0x4a ,0x22 ,0xe5 ,0x4a , +0xb4 ,0x03 ,0x00 ,0x40 ,0x10 ,0xb4 ,0x05 ,0x00 ,0x50 ,0x0b ,0xe5 ,0x4a ,0x7f ,0x00 ,0xfe ,0x7c , +0x10 ,0x12 ,0x31 ,0x9a ,0x22 ,0x7d ,0x00 ,0x7c ,0x07 ,0x12 ,0x24 ,0xb1 ,0x22 ,0xe5 ,0x67 ,0x20 , +0xe7 ,0x06 ,0x7c ,0x05 ,0x12 ,0x25 ,0x4a ,0x22 ,0xe5 ,0x4a ,0xb4 ,0x03 ,0x00 ,0x40 ,0x10 ,0xb4 , +0x05 ,0x00 ,0x50 ,0x0b ,0xe5 ,0x4a ,0x7f ,0x00 ,0xfe ,0x7c ,0x11 ,0x12 ,0x31 ,0x9a ,0x22 ,0x7d , +0x00 ,0x7c ,0x07 ,0x12 ,0x24 ,0xb1 ,0x22 ,0xe5 ,0x67 ,0x20 ,0xe7 ,0x06 ,0x7c ,0x05 ,0x12 ,0x25 , +0x4a ,0x22 ,0xe5 ,0x4a ,0xb4 ,0x05 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x0a ,0xe4 ,0xff ,0x04 ,0xfe , +0x7c ,0x0a ,0x12 ,0x31 ,0x9a ,0x22 ,0xb4 ,0x01 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x0a ,0xe4 ,0xff , +0x04 ,0xfe ,0x7c ,0x08 ,0x12 ,0x31 ,0x9a ,0x22 ,0xb4 ,0x03 ,0x00 ,0x40 ,0x10 ,0xb4 ,0x05 ,0x00 , +0x50,0x0b,0xe5,0x4a,0x7f,0x00,0xfe,0x7c,0x13,0x12,0x31,0x9a,0x22,0x7d,0x00,0x7c,
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Parts of this message are not shown here. View the raw message.
ChangeSet 1.1938.446.2, 2004/12/15 14:12:32-08:00, [email protected]
[PATCH] USB: serial driver for TI USB 3410/5052 chips (1/3)
* New USB serial driver for devices based on the TI USB 3410 and 5052 chips. (1/3)
* Changed to use circ_buf.h.
drivers/usb/serial/Kconfig | 10 drivers/usb/serial/Makefile | 1 drivers/usb/serial/ti_usb_3410_5052.c | 1839 ++++++++++++++++++++++++++++++++++ drivers/usb/serial/ti_usb_3410_5052.h | 224 ++++ 4 files changed, 2074 insertions(+)
drivers/usb/serial/Kconfig +10 -0
@@ -380,6 +380,16 @@ bool "USB Secure Encapsulated Driver - Padded" depends on USB_SERIAL_SAFE +config USB_SERIAL_TI + tristate "USB TI 3410/5052 Serial Driver" + depends on USB_SERIAL + help + Say Y here if you want to use the TI USB 3410 or 5052 + serial devices. + + To compile this driver as a module, choose M here: the + module will be called ti_usb_3410_5052. + config USB_SERIAL_CYBERJACK tristate "USB REINER SCT cyberJack pinpad/e-com chipcard reader (EXPERIMENTAL)" depends on USB_SERIAL && EXPERIMENTAL
drivers/usb/serial/Makefile +1 -0
@@ -30,6 +30,7 @@ obj-$(CONFIG_USB_SERIAL_OMNINET) += omninet.o obj-$(CONFIG_USB_SERIAL_PL2303) += pl2303.o obj-$(CONFIG_USB_SERIAL_SAFE) += safe_serial.o +obj-$(CONFIG_USB_SERIAL_TI) += ti_usb_3410_5052.o obj-$(CONFIG_USB_SERIAL_VISOR) += visor.o obj-$(CONFIG_USB_SERIAL_WHITEHEAT) += whiteheat.o obj-$(CONFIG_USB_SERIAL_XIRCOM) += keyspan_pda.o
drivers/usb/serial/ti_usb_3410_5052.c new file +1839 -0
1,839 lines not on this page · raw message
drivers/usb/serial/ti_usb_3410_5052.h new file +224 -0
224 lines not on this page · raw message
ChangeSet 1.1938.446.3, 2004/12/15 14:13:03-08:00, [email protected]
[PATCH] USB: serial driver for TI USB 3410/5052 chips (2/3)
* New USB serial driver for devices based on the TI USB 3410 and 5052 chips. (2/3)
2 lines not shown · raw message
drivers/usb/serial/ti_fw_3410.h new file +885 -0
@@ -0,0 +1,885 @@ +/* vi: ts=8 sw=8 +* +* TI 3410 USB Serial Driver Firmware Header +* +* Copyright (C) 2004 Texas Instruments +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +*/ + +#ifndef _TI_FW_3410_H_ +#define _TI_FW_3410_H_ + +/* firmware 9/10/04 FW3410_Special_StartWdogOnStartPort */ + +static unsigned char ti_fw_3410[] = { +0xC2 ,0x35 ,/* firmware image length excluding header, little endian */ +0x00 ,/* placeholder for checksum */ + +0x02 ,0x00 ,0x1e ,0x02 ,0x1a ,0xdb ,0xff ,0xff ,0xff ,0xff ,0xff ,0x02 ,0x32 ,0xcb ,0xff ,0xff , +0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0xff ,0x02 ,0x33 ,0x76 ,0x75 ,0x81 , +0xce ,0x90 ,0xfd ,0xe8 ,0x85 ,0x83 ,0xa0 ,0x12 ,0x34 ,0xea ,0xec ,0x4d ,0x60 ,0x6a ,0x78 ,0xab , +0x80 ,0x03 ,0x76 ,0x00 ,0x18 ,0xb8 ,0x9c ,0xfa ,0x78 ,0x7f ,0x80 ,0x03 ,0x76 ,0x00 ,0x18 ,0xb8 , +0x65 ,0xfa ,0x78 ,0x20 ,0x80 ,0x03 ,0x76 ,0x00 ,0x18 ,0xb8 ,0x20 ,0xfa ,0x90 ,0xfd ,0xdd ,0xae , +0x83 ,0xaf ,0x82 ,0x90 ,0xfb ,0xf8 ,0x12 ,0x00 ,0xa1 ,0x60 ,0x05 ,0xe4 ,0xf0 ,0xa3 ,0x80 ,0xf6 , +0x90 ,0xfd ,0xe8 ,0xa8 ,0x82 ,0x90 ,0xfd ,0xe8 ,0xa9 ,0x82 ,0xe8 ,0xc3 ,0x99 ,0x50 ,0x05 ,0x76 , +0x00 ,0x08 ,0x80 ,0xf6 ,0x90 ,0x00 ,0xff ,0x12 ,0x00 ,0xaa ,0x90 ,0x01 ,0x03 ,0x12 ,0x00 ,0xaa , +0x90 ,0x01 ,0x07 ,0x12 ,0x00 ,0xaa ,0x90 ,0x01 ,0x0b ,0x12 ,0x00 ,0xc8 ,0x90 ,0x01 ,0x11 ,0x12 , +0x00 ,0xc8 ,0x90 ,0x01 ,0x17 ,0x12 ,0x00 ,0xc8 ,0x75 ,0xd0 ,0x00 ,0x12 ,0x33 ,0xc8 ,0x02 ,0x01 , +0x1d ,0xef ,0x65 ,0x82 ,0x70 ,0x03 ,0xee ,0x65 ,0x83 ,0x22 ,0xe4 ,0x93 ,0xf8 ,0x74 ,0x01 ,0x93 , +0xf9 ,0x74 ,0x02 ,0x93 ,0xfe ,0x74 ,0x03 ,0x93 ,0xf5 ,0x82 ,0x8e ,0x83 ,0xe8 ,0x69 ,0x70 ,0x01 , +0x22 ,0xe4 ,0x93 ,0xf6 ,0xa3 ,0x08 ,0x80 ,0xf4 ,0xe4 ,0x93 ,0xfc ,0x74 ,0x01 ,0x93 ,0xfd ,0x74 , +0x02 ,0x93 ,0xfe ,0x74 ,0x03 ,0x93 ,0xff ,0x74 ,0x04 ,0x93 ,0xf8 ,0x74 ,0x05 ,0x93 ,0xf5 ,0x82 , +0x88 ,0x83 ,0x12 ,0x00 ,0xa1 ,0x70 ,0x01 ,0x22 ,0xe4 ,0x93 ,0xa3 ,0xa8 ,0x83 ,0xa9 ,0x82 ,0x8c , +0x83 ,0x8d ,0x82 ,0xf0 ,0xa3 ,0xac ,0x83 ,0xad ,0x82 ,0x88 ,0x83 ,0x89 ,0x82 ,0x80 ,0xe3 ,0x21 , +0x21 ,0x04 ,0x92 ,0x80 ,0x80 ,0x04 ,0x92 ,0xac ,0xae ,0x04 ,0x92 ,0xfd ,0xe8 ,0x04 ,0x94 ,0x04 , +0x94 ,0xfb ,0xf3 ,0x04 ,0x99 ,0x04 ,0x94 ,0xfb ,0xf3 ,0x04 ,0xf9 ,0x04 ,0xf9 ,0x80 ,0xfe ,0xd0 , +0xf0 ,0x30 ,0xf0 ,0x09 ,0x20 ,0xf3 ,0x03 ,0xf6 ,0x80 ,0x10 ,0xf7 ,0x80 ,0x0d ,0x30 ,0xf1 ,0x09 , +0x20 ,0xf3 ,0x03 ,0xf2 ,0x80 ,0x04 ,0xf3 ,0x80 ,0x01 ,0xf0 ,0x20 ,0xf4 ,0x04 ,0xfc ,0xd0 ,0xe0 , +0xcc ,0x22 ,0xcc ,0xc0 ,0xe0 ,0x12 ,0x01 ,0x5a ,0x02 ,0x01 ,0x4b ,0xbc ,0x00 ,0x05 ,0xd0 ,0xf0 , +0xac ,0xf0 ,0x22 ,0xc3 ,0x13 ,0xdc ,0xfc ,0x02 ,0x01 ,0x21 ,0xbf ,0x00 ,0x09 ,0xed ,0x25 ,0x82 , +0x75 ,0xf0 ,0x01 ,0xf8 ,0xe6 ,0x22 ,0xbf ,0x01 ,0x0f ,0xed ,0x25 ,0x82 ,0xf5 ,0x82 ,0xee ,0x35 , +0x83 ,0xf5 ,0x83 ,0x75 ,0xf0 ,0x04 ,0xe0 ,0x22 ,0xed ,0x25 ,0x82 ,0x75 ,0xf0 ,0x02 ,0xf8 ,0xe2 , +0x22 ,0xd0 ,0x83 ,0xd0 ,0x82 ,0xf5 ,0xf0 ,0xc3 ,0xe4 ,0x93 ,0xa3 ,0xc5 ,0xf0 ,0x95 ,0xf0 ,0xc0 , +0xe0 ,0xc3 ,0xd0 ,0xf0 ,0xe4 ,0x93 ,0xa3 ,0x95 ,0xf0 ,0x40 ,0x12 ,0xa3 ,0xa3 ,0xc3 ,0xe5 ,0xf0 , +0x33 ,0x50 ,0x02 ,0x05 ,0x83 ,0x25 ,0x82 ,0xf5 ,0x82 ,0x50 ,0x02 ,0x05 ,0x83 ,0x74 ,0x01 ,0x93 , +0xc0 ,0xe0 ,0xe4 ,0x93 ,0xc0 ,0xe0 ,0x22 ,0xd0 ,0x83 ,0xd0 ,0x82 ,0xf5 ,0xf0 ,0xe4 ,0x93 ,0x70 , +0x09 ,0x74 ,0x01 ,0x93 ,0x70 ,0x04 ,0xa3 ,0xa3 ,0x80 ,0x0c ,0x74 ,0x02 ,0x93 ,0x65 ,0xf0 ,0x60 , +0x05 ,0xa3 ,0xa3 ,0xa3 ,0x80 ,0xe7 ,0x74 ,0x01 ,0x93 ,0xc0 ,0xe0 ,0xe4 ,0x93 ,0xc0 ,0xe0 ,0x22 , +0x12 ,0x02 ,0x5b ,0x02 ,0x01 ,0xf2 ,0x12 ,0x02 ,0xaf ,0x02 ,0x01 ,0xf2 ,0x12 ,0x02 ,0xd3 ,0x02 , +0x01 ,0xf2 ,0x30 ,0xe0 ,0x07 ,0x20 ,0xe3 ,0x02 ,0xe6 ,0x22 ,0xe7 ,0x22 ,0x30 ,0xe1 ,0x07 ,0x20 , +0xe3 ,0x02 ,0xe2 ,0x22 ,0xe3 ,0x22 ,0x30 ,0xe2 ,0x02 ,0xe0 ,0x22 ,0xe4 ,0x93 ,0x22 ,0x12 ,0x02 , +0xd3 ,0x02 ,0x02 ,0x1a ,0x12 ,0x02 ,0xaf ,0x02 ,0x02 ,0x1a ,0xab ,0xf0 ,0x12 ,0x02 ,0x24 ,0xcb , +0xc5 ,0xf0 ,0xcb ,0x22 ,0x30 ,0xe0 ,0x10 ,0x20 ,0xe3 ,0x06 ,0xe6 ,0xf5 ,0xf0 ,0x08 ,0xe6 ,0x22 , +0xe7 ,0xf5 ,0xf0 ,0x09 ,0xe7 ,0x19 ,0x22 ,0x30 ,0xe1 ,0x10 ,0x20 ,0xe3 ,0x06 ,0xe2 ,0xf5 ,0xf0 , +0x08 ,0xe2 ,0x22 ,0xe3 ,0xf5 ,0xf0 ,0x09 ,0xe3 ,0x19 ,0x22 ,0x30 ,0xe2 ,0x06 ,0xe0 ,0xf5 ,0xf0 , +0xa3 ,0xe0 ,0x22 ,0xe4 ,0x93 ,0xf5 ,0xf0 ,0x74 ,0x01 ,0x93 ,0x22 ,0xbb ,0x00 ,0x03 ,0x74 ,0x09 , +0x22 ,0xbb ,0x01 ,0x07 ,0x89 ,0x82 ,0x8a ,0x83 ,0x74 ,0x04 ,0x22 ,0xbb ,0x02 ,0x07 ,0x89 ,0x82 , +0x8a ,0x83 ,0x74 ,0x10 ,0x22 ,0x74 ,0x0a ,0x22 ,0x02 ,0x02 ,0x7b ,0xbb ,0x00 ,0x07 ,0xe9 ,0x25 , +0x82 ,0xf8 ,0x74 ,0x01 ,0x22 ,0xbb ,0x01 ,0x0d ,0xe9 ,0x25 ,0x82 ,0xf5 ,0x82 ,0xea ,0x35 ,0x83 , +0xf5 ,0x83 ,0x74 ,0x04 ,0x22 ,0xbb ,0x02 ,0x0d ,0xe9 ,0x25 ,0x82 ,0xf5 ,0x82 ,0xea ,0x35 ,0x83 , +0xf5 ,0x83 ,0x74 ,0x10 ,0x22 ,0xe9 ,0x25 ,0x82 ,0xf8 ,0x74 ,0x02 ,0x22 ,0x02 ,0x02 ,0xaf ,0xbf , +0x00 ,0x05 ,0xed ,0xf8 ,0x74 ,0x01 ,0x22 ,0xbf ,0x01 ,0x07 ,0x8d ,0x82 ,0x8e ,0x83 ,0x74 ,0x04 , +0x22 ,0xbf ,0x02 ,0x07 ,0x8d ,0x82 ,0x8e ,0x83 ,0x74 ,0x10 ,0x22 ,0xed ,0xf8 ,0x74 ,0x02 ,0x22 , +0x02 ,0x02 ,0xd3 ,0xbf ,0x00 ,0x07 ,0xed ,0x25 ,0x82 ,0xf8 ,0x74 ,0x01 ,0x22 ,0xbf ,0x01 ,0x0d , +0xed ,0x25 ,0x82 ,0xf5 ,0x82 ,0xee ,0x35 ,0x83 ,0xf5 ,0x83 ,0x74 ,0x04 ,0x22 ,0xbf ,0x02 ,0x0d , +0xed ,0x25 ,0x82 ,0xf5 ,0x82 ,0xee ,0x35 ,0x83 ,0xf5 ,0x83 ,0x74 ,0x10 ,0x22 ,0xed ,0x25 ,0x82 , +0xf8 ,0x74 ,0x02 ,0x22 ,0x02 ,0x03 ,0x07 ,0xc0 ,0xe0 ,0x12 ,0x02 ,0x5b ,0x02 ,0x03 ,0x1f ,0xc0 , +0xe0 ,0x12 ,0x02 ,0xaf ,0x02 ,0x03 ,0x1f ,0xc0 ,0xe0 ,0x12 ,0x02 ,0xd3 ,0x02 ,0x03 ,0x1f ,0x30 , +0xe0 ,0x0b ,0x20 ,0xe3 ,0x04 ,0xd0 ,0xe0 ,0xf6 ,0x22 ,0xd0 ,0xe0 ,0xf7 ,0x22 ,0x30 ,0xe1 ,0x0b , +0x20 ,0xe3 ,0x04 ,0xd0 ,0xe0 ,0xf2 ,0x22 ,0xd0 ,0xe0 ,0xf3 ,0x22 ,0xd0 ,0xe0 ,0xf0 ,0x22 ,0xc9 , +0xcd ,0xc9 ,0xca ,0xce ,0xca ,0xcb ,0xcf ,0xcb ,0x12 ,0x03 ,0x52 ,0xed ,0xf9 ,0xee ,0xfa ,0xef , +0xfb ,0x22 ,0xbb ,0x00 ,0x2f ,0xbf ,0x00 ,0x0a ,0xfa ,0xed ,0xf8 ,0xe7 ,0xf6 ,0x08 ,0x09 ,0xda , +0xfa ,0x22 ,0xbf ,0x01 ,0x12 ,0x8d ,0x82 ,0x8e ,0x83 ,0xf8 ,0x02 ,0x03 ,0x6f ,0x09 ,0xa3 ,0xe7 , +0xf0 ,0xd8 ,0xfa ,0x22 ,0x02 ,0x03 ,0x7a ,0xfa ,0xed ,0xf8 ,0xe7 ,0xf2 ,0x08 ,0x09 ,0xda ,0xfa , +0x22 ,0x02 ,0x03 ,0x84 ,0xbb ,0x01 ,0x4d ,0xbf ,0x00 ,0x14 ,0x89 ,0x82 ,0x8a ,0x83 ,0xf9 ,0xed , +0xf8 ,0x02 ,0x03 ,0x96 ,0x08 ,0xa3 ,0xe0 ,0xf6 ,0xd9 ,0xfa ,0x22 ,0x02 ,0x03 ,0xa7 ,0xbf ,0x01 , +0x22 ,0x8d ,0x82 ,0x8e ,0x83 ,0xfb ,0x08 ,0xc9 ,0xc5 ,0x82 ,0xc9 ,0xca ,0xc5 ,0x83 ,0xca ,0xe0 , +0xa3 ,0xc9 ,0xc5 ,0x82 ,0xc9 ,0xca ,0xc5 ,0x83 ,0xca ,0xf0 ,0xa3 ,0xdb ,0xea ,0xd8 ,0xe8 ,0x22 , +0x02 ,0x03 ,0xca ,0x8d ,0x82 ,0x8e ,0x83 ,0xf9 ,0xed ,0xf8 ,0xe0 ,0xf2 ,0x08 ,0xa3 ,0xd9 ,0xfa , +0x22 ,0x02 ,0x03 ,0xd4 ,0xbb ,0x02 ,0x4d ,0xbf ,0x00 ,0x12 ,0x89 ,0x82 ,0x8a ,0x83 ,0xf9 ,0xed , +0xf8 ,0x02 ,0x03 ,0xe6 ,0x08 ,0xa3 ,0xe4 ,0x93 ,0xf6 ,0xd9 ,0xf9 ,0x22 ,0xbf ,0x01 ,0x23 ,0x8d , +0x82 ,0x8e ,0x83 ,0xfb ,0x08 ,0xc9 ,0xc5 ,0x82 ,0xc9 ,0xca ,0xc5 ,0x83 ,0xca ,0xe4 ,0x93 ,0xa3 , +0xc9 ,0xc5 ,0x82 ,0xc9 ,0xca ,0xc5 ,0x83 ,0xca ,0xf0 ,0xa3 ,0xdb ,0xe9 ,0xd8 ,0xe7 ,0x22 ,0x02 , +0x04 ,0x19 ,0x89 ,0x82 ,0x8a ,0x83 ,0xf9 ,0xed ,0xf8 ,0xe4 ,0x93 ,0xf2 ,0x08 ,0xa3 ,0xd9 ,0xf9 , +0x22 ,0x02 ,0x04 ,0x2a ,0xbf ,0x00 ,0x0d ,0xfa ,0xed ,0xf8 ,0xe3 ,0xf6 ,0x08 ,0x09 ,0xda ,0xfa , +0x22 ,0x02 ,0x04 ,0x34 ,0xbf ,0x01 ,0x12 ,0x8d ,0x82 ,0x8e ,0x83 ,0xf8 ,0x02 ,0x04 ,0x41 ,0x09 , +0xa3 ,0xe3 ,0xf0 ,0xd8 ,0xfa ,0x22 ,0x02 ,0x04 ,0x4c ,0xfa ,0xed ,0xf8 ,0xe3 ,0xf2 ,0x08 ,0x09 , +0xda ,0xfa ,0x22 ,0x02 ,0x04 ,0x56 ,0xe6 ,0xfb ,0x08 ,0xe6 ,0xfa ,0x08 ,0xe6 ,0xf9 ,0x04 ,0xf6 , +0x18 ,0x70 ,0x01 ,0x06 ,0x22 ,0xe6 ,0xff ,0x08 ,0xe6 ,0xfe ,0x08 ,0xe6 ,0xfd ,0x22 ,0xef ,0xf0 , +0xa3 ,0xee ,0xf0 ,0xa3 ,0xed ,0xf0 ,0x22 ,0xeb ,0xf0 ,0xa3 ,0xea ,0xf0 ,0xa3 ,0xe9 ,0xf0 ,0x22 , +0xe0 ,0xff ,0xa3 ,0xe0 ,0xfe ,0xa3 ,0xe0 ,0xfd ,0x22 ,0xe0 ,0xfb ,0xa3 ,0xe0 ,0xfa ,0xa3 ,0xe0 , +0xf9 ,0x22 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x04 ,0xf9 ,0x00 ,0x61 ,0x05 ,0x68 ,0x00 , +0x26 ,0x05 ,0x8f ,0x00 ,0x33 ,0x0a ,0x00 ,0x00 ,0x61 ,0x0a ,0x6c ,0x00 ,0x66 ,0x15 ,0x1d ,0x00 , +0x61 ,0x0c ,0xf0 ,0x00 ,0x61 ,0x09 ,0xa0 ,0x00 ,0x61 ,0x09 ,0xd7 ,0x00 ,0x61 ,0x0d ,0xb7 ,0x00 , +0x61 ,0x0b ,0xe8 ,0x00 ,0x61 ,0x0a ,0x13 ,0x00 ,0x61 ,0x0a ,0x48 ,0x00 ,0x61 ,0x17 ,0x15 ,0x00 , +0x33 ,0x17 ,0x28 ,0x00 ,0x34 ,0x1d ,0xf6 ,0x00 ,0x43 ,0x1e ,0xa1 ,0x00 ,0x44 ,0x20 ,0x0e ,0x00 , +0x44 ,0x1f ,0xfc ,0x00 ,0x47 ,0x1e ,0xc8 ,0x00 ,0x47 ,0x1f ,0x6d ,0x00 ,0x4d ,0x1f ,0xbe ,0x00 , +0x4f ,0x1e ,0xea ,0x00 ,0x58 ,0x32 ,0x56 ,0x00 ,0x61 ,0x7c ,0xcc ,0x7d ,0xff ,0x12 ,0x1c ,0xa7 , +0x22 ,0x90 ,0xff ,0xfc ,0xe0 ,0x20 ,0xe7 ,0x2d ,0xc2 ,0xaf ,0xae ,0x59 ,0xaf ,0x58 ,0x75 ,0x5a , +0x20 ,0xe5 ,0x5a ,0x14 ,0xc5 ,0x5a ,0x60 ,0x19 ,0xe4 ,0xfe ,0x7f ,0x05 ,0xee ,0x4f ,0xce ,0x24 , +0xff ,0xce ,0xcf ,0x34 ,0xff ,0xcf ,0x60 ,0x07 ,0xe4 ,0x90 ,0xff ,0x92 ,0xf0 ,0x80 ,0xed ,0x80 , +0xe0 ,0x8e ,0x59 ,0x8f ,0x58 ,0x22 ,0x12 ,0x05 ,0x01 ,0x7d ,0x07 ,0x7c ,0xb7 ,0x12 ,0x32 ,0x72 , +0x7d ,0x0f ,0x7c ,0x6e ,0x12 ,0x32 ,0x8c ,0x78 ,0x9d ,0x7a ,0x06 ,0xe4 ,0xf6 ,0x08 ,0xda ,0xfc , +0x7a ,0x06 ,0x12 ,0x05 ,0xc4 ,0x7c ,0x03 ,0x12 ,0x0e ,0x4c ,0x12 ,0x21 ,0x4a ,0xe4 ,0xfe ,0xff , +0x7c ,0x0f ,0x12 ,0x31 ,0xfb ,0xd2 ,0xa8 ,0x22 ,0x12 ,0x30 ,0xe6 ,0xe4 ,0x90 ,0xfc ,0x38 ,0xf0 , +0x90 ,0xff ,0xf0 ,0xe0 ,0x30 ,0xe4 ,0x08 ,0x74 ,0x01 ,0x90 ,0xfc ,0x39 ,0xf0 ,0x80 ,0x05 ,0xe4 , +0x90 ,0xfc ,0x39 ,0xf0 ,0x7d ,0x0a ,0x7c ,0x00 ,0x12 ,0x25 ,0x26 ,0x12 ,0x31 ,0x69 ,0x22 ,0x12 , +0x30 ,0xe6 ,0x90 ,0xfc ,0x39 ,0xe0 ,0x14 ,0x70 ,0x0e ,0x90 ,0xff ,0xf0 ,0xe0 ,0x44 ,0x10 ,0xf0 , +0x7c ,0x00 ,0x12 ,0x25 ,0xbf ,0x80 ,0x19 ,0x90 ,0xfc ,0x39 ,0xe0 ,0x70 ,0x0e ,0x90 ,0xff ,0xf0 , +0xe0 ,0x54 ,0xef ,0xf0 ,0x7c ,0x00 ,0x12 ,0x25 ,0xbf ,0x80 ,0x05 ,0x7c ,0x17 ,0x12 ,0x25 ,0xbf , +0x12 ,0x31 ,0x69 ,0x22 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x54 ,0xab ,0xf0 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x44 , +0x20 ,0xf0 ,0x22 ,0x8c ,0x37 ,0x8d ,0x36 ,0x78 ,0x82 ,0xed ,0xf6 ,0x08 ,0xec ,0xf6 ,0xed ,0xfe , +0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x05 ,0x12 ,0x01 ,0xec ,0x78 ,0x80 ,0xf6 ,0x78 ,0x82 ,0xe6 , +0xfd ,0x08 ,0xe6 ,0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x04 ,0x12 ,0x01 ,0xec , +0x54 ,0x0f ,0xfc ,0x7d ,0x80 ,0x12 ,0x17 ,0x46 ,0x78 ,0x80 ,0xe6 ,0x70 ,0x0d ,0xad ,0x3a ,0xae , +0x39 ,0xaf ,0x38 ,0xe4 ,0x12 ,0x03 ,0x0f ,0x7c ,0x08 ,0x22 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x54 ,0xfe , +0xf0 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x54 ,0xfd ,0xf0 ,0x80 ,0x1e ,0x78 ,0x82 ,0xe6 ,0xfd ,0x08 ,0xe6 , +0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x08 ,0x12 ,0x02 ,0x0e ,0x25 ,0xe0 ,0x44 , +0x01 ,0x90 ,0xff ,0xf3 ,0xf0 ,0x02 ,0x06 ,0xd0 ,0x78 ,0x82 ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xed , +0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x06 ,0x12 ,0x02 ,0x0e ,0x54 ,0xfe ,0x90 ,0xff ,0xf3 , +0xf0 ,0x80 ,0x2b ,0x78 ,0x82 ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 , +0x90 ,0x00 ,0x08 ,0x12 ,0x02 ,0x0e ,0xfa ,0xeb ,0x90 ,0xff ,0xf1 ,0xf0 ,0x12 ,0x08 ,0xbf ,0x40 , +0x0d ,0xad ,0x3a ,0xae ,0x39 ,0xaf ,0x38 ,0xe4 ,0x12 ,0x03 ,0x0f ,0x7c ,0x18 ,0x22 ,0x78 ,0x82 , +0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x08 ,0x12 ,0x02 , +0x0e ,0x90 ,0xff ,0xf1 ,0xf0 ,0x12 ,0x08 ,0xbf ,0x40 ,0x0d ,0xad ,0x3a ,0xae ,0x39 ,0xaf ,0x38 , +0xe4 ,0x12 ,0x03 ,0x0f ,0x7c ,0x18 ,0x22 ,0x78 ,0x82 ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xed ,0xfe , +0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x06 ,0x12 ,0x02 ,0x0e ,0x44 ,0x01 ,0x90 ,0xff ,0xf3 ,0xf0 , +0x78 ,0x83 ,0xe6 ,0x24 ,0x03 ,0xf6 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf6 ,0x78 ,0x80 ,0xe6 ,0x24 ,0xfe , +0x50 ,0x09 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x54 ,0xfd ,0xf0 ,0x80 ,0x07 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x44 , +0x02 ,0xf0 ,0xe4 ,0x90 ,0xff ,0xf1 ,0xf0 ,0x78 ,0x81 ,0x76 ,0x00 ,0x78 ,0x80 ,0xe6 ,0x24 ,0xff , +0xfc ,0xe4 ,0x34 ,0xff ,0xfd ,0x78 ,0x81 ,0xe6 ,0x7f ,0x00 ,0xfe ,0xec ,0xd3 ,0x9e ,0xef ,0x64 , +0x80 ,0xcd ,0x64 ,0x80 ,0x9d ,0x40 ,0x2f ,0x12 ,0x08 ,0xa4 ,0x40 ,0x0f ,0x78 ,0x81 ,0xe6 ,0xad , +0x3a ,0xae ,0x39 ,0xaf ,0x38 ,0x12 ,0x03 ,0x0f ,0x7c ,0x18 ,0x22 ,0x90 ,0xff ,0xf2 ,0xe0 ,0xfc , +0x78 ,0x82 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xec ,0xf0 ,0x78 ,0x81 ,0x06 ,0xa3 ,0x78 ,0x82 ,0xa6 , +0x83 ,0x08 ,0xa6 ,0x82 ,0x80 ,0xb5 ,0x12 ,0x08 ,0xa4 ,0x40 ,0x0f ,0x78 ,0x81 ,0xe6 ,0xad ,0x3a , +0xae ,0x39 ,0xaf ,0x38 ,0x12 ,0x03 ,0x0f ,0x7c ,0x18 ,0x22 ,0x90 ,0xff ,0xf2 ,0xe0 ,0xfc ,0x78 , +0x82 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xec ,0xf0 ,0x78 ,0x80 ,0xe6 ,0xad ,0x3a ,0xae ,0x39 ,0xaf , +0x38 ,0x12 ,0x03 ,0x0f ,0x7c ,0x00 ,0x22 ,0x8c ,0x37 ,0x8d ,0x36 ,0x78 ,0x82 ,0xed ,0xf6 ,0x08 , +0xec ,0xf6 ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x05 ,0x12 ,0x01 ,0xec ,0x78 ,0x81 , +0xf6 ,0x78 ,0x82 ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 , +0x04 ,0x12 ,0x01 ,0xec ,0x54 ,0x0f ,0xfc ,0x7d ,0x81 ,0x12 ,0x17 ,0x46 ,0x78 ,0x81 ,0xe6 ,0x70 , +0x03 ,0x7c ,0x08 ,0x22 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x54 ,0xfe ,0xf0 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x54 , +0xfd ,0xf0 ,0x80 ,0x1b ,0x78 ,0x82 ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f , +0x01 ,0x90 ,0x00 ,0x08 ,0x12 ,0x02 ,0x0e ,0x25 ,0xe0 ,0x90 ,0xff ,0xf3 ,0xf0 ,0x80 ,0x5b ,0x78 , +0x82 ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x06 ,0x12 , +0x02 ,0x0e ,0x54 ,0xfe ,0x90 ,0xff ,0xf3 ,0xf0 ,0x80 ,0x21 ,0x78 ,0x82 ,0xe6 ,0xfd ,0x08 ,0xe6 , +0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x08 ,0x12 ,0x02 ,0x0e ,0xfa ,0xeb ,0x90 , +0xff ,0xf1 ,0xf0 ,0x12 ,0x08 ,0xbf ,0x40 ,0x03 ,0x7c ,0x18 ,0x22 ,0x78 ,0x82 ,0xe6 ,0xfd ,0x08 , +0xe6 ,0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x90 ,0x00 ,0x08 ,0x12 ,0x02 ,0x0e ,0x90 ,0xff , +0xf1 ,0xf0 ,0x12 ,0x08 ,0xbf ,0x40 ,0x03 ,0x7c ,0x18 ,0x22 ,0x78 ,0x83 ,0xe6 ,0x24 ,0x0a ,0xf6 , +0x18 ,0xe6 ,0x34 ,0x00 ,0xf6 ,0x78 ,0x80 ,0x76 ,0x00 ,0x78 ,0x81 ,0xe6 ,0x24 ,0xff ,0xfc ,0xe4 , +0x34 ,0xff ,0xfd ,0x78 ,0x80 ,0xe6 ,0x7f ,0x00 ,0xfe ,0xec ,0xd3 ,0x9e ,0xef ,0x64 ,0x80 ,0xcd , +0x64 ,0x80 ,0x9d ,0x40 ,0x21 ,0x78 ,0x82 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xe0 ,0x90 ,0xff ,0xf1 , +0xf0 ,0x12 ,0x08 ,0xbf ,0x40 ,0x03 ,0x7c ,0x18 ,0x22 ,0x78 ,0x80 ,0x06 ,0x78 ,0x83 ,0x06 ,0xe6 , +0x18 ,0x70 ,0x01 ,0x06 ,0x80 ,0xc3 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x44 ,0x01 ,0xf0 ,0x78 ,0x82 ,0x86 , +0x83 ,0x08 ,0x86 ,0x82 ,0xe0 ,0x90 ,0xff ,0xf1 ,0xf0 ,0x12 ,0x08 ,0xbf ,0x40 ,0x03 ,0x7c ,0x18 , +0x22 ,0x7c ,0x00 ,0x22 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x20 ,0xe7 ,0x12 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x30 , +0xe5 ,0x09 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x44 ,0x20 ,0xf0 ,0xc3 ,0x22 ,0x80 ,0xe7 ,0xd3 ,0x22 ,0x90 , +0xff ,0xf0 ,0xe0 ,0x20 ,0xe3 ,0x12 ,0x90 ,0xff ,0xf0 ,0xe0 ,0x30 ,0xe5 ,0x09 ,0x90 ,0xff ,0xf0 , +0xe0 ,0x44 ,0x20 ,0xf0 ,0xc3 ,0x22 ,0x80 ,0xe7 ,0xd3 ,0x22 ,0x8c ,0x42 ,0x8d ,0x41 ,0x7c ,0x00 , +0xed ,0x54 ,0xf0 ,0xfd ,0xec ,0x70 ,0x03 ,0xed ,0x64 ,0x30 ,0x70 ,0x05 ,0x75 ,0x3e ,0x03 ,0x80 , +0x03 ,0x75 ,0x3e ,0x04 ,0xac ,0x3e ,0x12 ,0x0f ,0x69 ,0x75 ,0x83 ,0x00 ,0x85 ,0x83 ,0x40 ,0xe5 , +0x41 ,0x54 ,0x0f ,0xf5 ,0x3f ,0xe5 ,0x40 ,0x70 ,0x04 ,0xe5 ,0x3f ,0x64 ,0x03 ,0x70 ,0x35 ,0xe5 , +0x3e ,0x24 ,0xfd ,0x75 ,0xf0 ,0x0a ,0xa4 ,0x24 ,0x02 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 , +0xe0 ,0x30 ,0xe6 ,0x05 ,0x12 ,0x10 ,0x4b ,0x80 ,0x19 ,0xe5 ,0x3e ,0x24 ,0x9d ,0xf8 ,0xc6 ,0x54 , +0xfb ,0xf6 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0x74 , +0x0f ,0xf0 ,0x80 ,0x59 ,0xe5 ,0x40 ,0x70 ,0x04 ,0xe5 ,0x3f ,0x64 ,0x04 ,0x70 ,0x48 ,0xe5 ,0x3e , +0x24 ,0xfd ,0x75 ,0xf0 ,0x0a ,0xa4 ,0x24 ,0x02 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 ,0xe0 , +0x30 ,0xe5 ,0x07 ,0xac ,0x42 ,0xad ,0x41 ,0x12 ,0x1c ,0x3c ,0xe5 ,0x42 ,0x30 ,0xe2 ,0x15 ,0x78 , +0xad ,0xe6 ,0x30 ,0xe0 ,0x0f ,0x78 ,0xad ,0xe6 ,0x30 ,0xe1 ,0x09 ,0xe4 ,0xff ,0x04 ,0xfe ,0x7c , +0x04 ,0x12 ,0x31 ,0xfb ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x06 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 , +0x83 ,0x74 ,0x0f ,0xf0 ,0x80 ,0x07 ,0xe4 ,0xfc ,0x7d ,0xee ,0x12 ,0x1c ,0x3c ,0xc2 ,0x03 ,0x22 , +0x12 ,0x30 ,0xe6 ,0x12 ,0x0f ,0x69 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x06 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 , +0x00 ,0xf5 ,0x83 ,0xe0 ,0x90 ,0xfc ,0x38 ,0xf0 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 , +0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x90 ,0xfc ,0x39 ,0xf0 ,0xc2 ,0x03 ,0x7d ,0x02 ,0x7c ,0x00 , +0x12 ,0x25 ,0x26 ,0x12 ,0x31 ,0x69 ,0x22 ,0x12 ,0x30 ,0xe6 ,0x78 ,0x95 ,0xec ,0xf6 ,0xec ,0x24 , +0x9d ,0xf8 ,0xe6 ,0x30 ,0xe1 ,0x07 ,0x7c ,0x13 ,0x12 ,0x25 ,0xbf ,0x80 ,0x0f ,0x90 ,0xfc ,0x39 , +0xe0 ,0xfd ,0x78 ,0x95 ,0xe6 ,0xfc ,0x12 ,0x13 ,0xc8 ,0x12 ,0x25 ,0xbf ,0x12 ,0x31 ,0x69 ,0x22 , +0x12 ,0x30 ,0xe6 ,0x78 ,0x95 ,0xec ,0xf6 ,0x7d ,0x00 ,0x12 ,0x0f ,0x09 ,0x12 ,0x25 ,0xbf ,0x12 , +0x31 ,0x69 ,0x22 ,0x12 ,0x30 ,0xe6 ,0x78 ,0x95 ,0xec ,0xf6 ,0xec ,0x24 ,0x9d ,0xf8 ,0xe6 ,0x30 , +0xe2 ,0x07 ,0x7c ,0x13 ,0x12 ,0x25 ,0xbf ,0x80 ,0x1b ,0x78 ,0x95 ,0xe6 ,0x24 ,0x9d ,0xf8 ,0xe6 , +0x20 ,0xe1 ,0x07 ,0x7c ,0x12 ,0x12 ,0x25 ,0xbf ,0x80 ,0x0a ,0x78 ,0x95 ,0xe6 ,0xfc ,0x12 ,0x13 , +0xec ,0x12 ,0x25 ,0xbf ,0x12 ,0x31 ,0x69 ,0x22 ,0x12 ,0x30 ,0xe6 ,0x78 ,0x95 ,0xec ,0xf6 ,0xec , +0x24 ,0x9d ,0xf8 ,0xe6 ,0x20 ,0xe2 ,0x07 ,0x7c ,0x11 ,0x12 ,0x25 ,0xbf ,0x80 ,0x0a ,0x78 ,0x95 , +0xe6 ,0xfc ,0x12 ,0x14 ,0xed ,0x12 ,0x25 ,0xbf ,0x12 ,0x31 ,0x69 ,0x22 ,0x12 ,0x30 ,0xe6 ,0x78 , +0x95 ,0xec ,0xf6 ,0x12 ,0x0f ,0x69 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x09 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 , +0x00 ,0xf5 ,0x83 ,0xe0 ,0x90 ,0xfc ,0x3f ,0xf0 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x0a ,0xf5 ,0x82 ,0x18 , +0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x90 ,0xfc ,0x40 ,0xf0 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x03 ,0xf5 , +0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0xfc ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 , +0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0xf5 ,0x62 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 , +0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0xf5 ,0x63 ,0x8c ,0x61 ,0xe4 ,0xec ,0x33 ,0x33 ,0x54 , +0x01 ,0x78 ,0x95 ,0xf6 ,0x60 ,0x08 ,0xe5 ,0x62 ,0x30 ,0xe1 ,0x03 ,0x78 ,0x95 ,0x06 ,0x78 ,0x95 , +0xe6 ,0x90 ,0xfc ,0x41 ,0xf0 ,0x78 ,0xa7 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0xfd ,0xa3 ,0xe0 ,0x54 ,0x0c ,0xfc ,0xed ,0x54 ,0xe6 ,0x8c ,0x65 ,0xf5 ,0x64 , +0xe5 ,0x61 ,0x30 ,0xe5 ,0x03 ,0x43 ,0x65 ,0x01 ,0xe5 ,0x62 ,0x20 ,0xe5 ,0x0e ,0xe5 ,0x61 ,0x54 , +0x7f ,0x70 ,0x08 ,0xe5 ,0x61 ,0x20 ,0xe7 ,0x03 ,0x43 ,0x65 ,0x02 ,0xe5 ,0x61 ,0x30 ,0xe3 ,0x03 , +0x43 ,0x65 ,0x10 ,0xe5 ,0x61 ,0x30 ,0xe2 ,0x03 ,0x43 ,0x65 ,0x20 ,0xe5 ,0x61 ,0x54 ,0x03 ,0x60 , +0x03 ,0x43 ,0x65 ,0x40 ,0xe5 ,0x61 ,0x30 ,0xe1 ,0x03 ,0x43 ,0x65 ,0x80 ,0xe5 ,0x61 ,0x30 ,0xe4 , +0x03 ,0x43 ,0x64 ,0x01 ,0xe5 ,0x61 ,0x30 ,0xe6 ,0x03 ,0x43 ,0x64 ,0x08 ,0xe5 ,0x62 ,0x20 ,0xe4 , +0x0e ,0xe5 ,0x61 ,0x54 ,0x7f ,0x70 ,0x08 ,0xe5 ,0x61 ,0x20 ,0xe7 ,0x03 ,0x43 ,0x64 ,0x10 ,0x53 , +0x65 ,0xfb ,0x53 ,0x64 ,0x79 ,0xad ,0x64 ,0xe5 ,0x65 ,0x90 ,0xfc ,0x3a ,0xcd ,0xf0 ,0xa3 ,0xcd , +0xf0 ,0xe5 ,0x63 ,0x30 ,0xe3 ,0x0d ,0xe5 ,0x63 ,0x54 ,0x30 ,0xc4 ,0x54 ,0x0f ,0x90 ,0xfc ,0x3d , +0xf0 ,0x80 ,0x05 ,0xe4 ,0x90 ,0xfc ,0x3d ,0xf0 ,0xe5 ,0x63 ,0x54 ,0x03 ,0x90 ,0xfc ,0x3c ,0xf0 , +0xe5 ,0x63 ,0x54 ,0x04 ,0xc3 ,0x13 ,0x90 ,0xfc ,0x3e ,0xf0 ,0x90 ,0xfc ,0x3c ,0xe0 ,0x70 ,0x0e , +0x7d ,0x35 ,0x7e ,0xfc ,0x7f ,0x01 ,0x74 ,0x01 ,0x90 ,0x00 ,0x09 ,0x12 ,0x01 ,0x42 ,0x78 ,0xa9 , +0xe6 ,0x24 ,0x08 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x7c ,0x00 ,0xfd ,0x78 , +0xa9 ,0xe6 ,0x24 ,0x07 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x7f ,0x00 ,0x4c , +0xfe ,0xef ,0x4d ,0x90 ,0xfc ,0x38 ,0xf0 ,0xa3 ,0xce ,0xf0 ,0xce ,0xc2 ,0x03 ,0x7d ,0x0a ,0x7c , +0x00 ,0x12 ,0x25 ,0x26 ,0x12 ,0x31 ,0x69 ,0x22 ,0x12 ,0x30 ,0xe6 ,0x78 ,0x95 ,0xec ,0xf6 ,0x78 , +0x9a ,0x76 ,0x01 ,0x08 ,0x76 ,0xfc ,0x08 ,0x76 ,0x38 ,0x78 ,0x97 ,0x76 ,0x0c ,0x78 ,0x9a ,0x12 , +0x04 ,0x65 ,0x12 ,0x02 ,0x14 ,0x78 ,0x98 ,0xcb ,0xf6 ,0xcb ,0x08 ,0xf6 ,0x7f ,0x00 ,0xef ,0x24 , +0xea ,0x40 ,0x1f ,0xe4 ,0xef ,0x25 ,0xe0 ,0x90 ,0x35 ,0x2c ,0xfd ,0x93 ,0xcd ,0x04 ,0x93 ,0x78 , +0x99 ,0x66 ,0x70 ,0x03 ,0xed ,0x18 ,0x66 ,0x70 ,0x06 ,0x78 ,0x97 ,0x76 ,0x00 ,0x80 ,0x03 ,0x0f , +0x80 ,0xdc ,0x78 ,0x96 ,0xef ,0xf6 ,0x78 ,0x9a ,0x12 ,0x04 ,0x65 ,0x90 ,0x00 ,0x02 ,0x12 ,0x02 , +0x0e ,0x78 ,0x98 ,0xcb ,0xf6 ,0xcb ,0x08 ,0xf6 ,0x54 ,0x04 ,0xcb ,0x54 ,0x86 ,0x4b ,0x60 ,0x04 , +0x78 ,0x97 ,0x76 ,0x0b ,0x78 ,0x99 ,0xe6 ,0x30 ,0xe3 ,0x13 ,0x78 ,0x9a ,0x12 ,0x04 ,0x65 ,0x90 , +0x00 ,0x05 ,0x12 ,0x01 ,0xec ,0x24 ,0xfb ,0x50 ,0x04 ,0x78 ,0x97 ,0x76 ,0x0d ,0x78 ,0x99 ,0xe6 , +0x54 ,0xc0 ,0x7d ,0x00 ,0x64 ,0xc0 ,0x4d ,0x70 ,0x04 ,0x78 ,0x97 ,0x76 ,0x0b ,0x78 ,0x9a ,0x12 , +0x04 ,0x65 ,0x90 ,0x00 ,0x04 ,0x12 ,0x01 ,0xec ,0x24 ,0xfc ,0x50 ,0x04 ,0x78 ,0x97 ,0x76 ,0x0f , +0x78 ,0x9a ,0x12 ,0x04 ,0x65 ,0x90 ,0x00 ,0x06 ,0x12 ,0x01 ,0xec ,0x24 ,0xfd ,0x50 ,0x04 ,0x78 , +0x97 ,0x76 ,0x0e ,0x78 ,0x9a ,0x12 ,0x04 ,0x65 ,0x90 ,0x00 ,0x09 ,0x12 ,0x01 ,0xec ,0x24 ,0xfd , +0x50 ,0x04 ,0x78 ,0x97 ,0x76 ,0x0a ,0x78 ,0x97 ,0xe6 ,0x70 ,0x2a ,0x78 ,0x95 ,0xe6 ,0xfc ,0x12 , +0x0f ,0x69 ,0x78 ,0x9a ,0x12 ,0x04 ,0x65 ,0x78 ,0xa7 ,0xe6 ,0xf9 ,0x78 ,0xa6 ,0xe6 ,0xfa ,0x7b , +0x01 ,0x74 ,0x0a ,0x78 ,0x00 ,0x12 ,0x03 ,0x3f ,0xc2 ,0x03 ,0x78 ,0x95 ,0xe6 ,0xfc ,0x12 ,0x11 , +0x07 ,0x78 ,0x97 ,0xec ,0xf6 ,0x78 ,0x97 ,0xe6 ,0xfc ,0x12 ,0x25 ,0xbf ,0x12 ,0x31 ,0x69 ,0x22 , +0x12 ,0x30 ,0xe6 ,0x78 ,0x95 ,0xec ,0xf6 ,0x12 ,0x0f ,0x69 ,0x78 ,0x95 ,0xe6 ,0x24 ,0xfd ,0x75 , +0xf0 ,0x0a ,0xa4 ,0x24 ,0x14 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 ,0xac ,0x82 ,0xad ,0x83 , +0x78 ,0xa6 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xec ,0xf9 ,0xed ,0xfa ,0x7b ,0x0a ,0x78 ,0x01 ,0x12 , +0x03 ,0xa7 ,0xc2 ,0x03 ,0x78 ,0x95 ,0xe6 ,0xfc ,0x12 ,0x11 ,0x07 ,0x12 ,0x31 ,0x69 ,0x22 ,0x8d , +0x2b ,0x8c ,0x2a ,0xed ,0x60 ,0x40 ,0x75 ,0x27 ,0x01 ,0x75 ,0x29 ,0x48 ,0x75 ,0x28 ,0xff ,0xe5 , +0x2a ,0x24 ,0xfd ,0xfc ,0xe4 ,0x34 ,0xff ,0xfd ,0xec ,0x7c ,0x03 ,0x25 ,0xe0 ,0xcd ,0x33 ,0xcd , +0xdc ,0xf9 ,0xfc ,0xe5 ,0x29 ,0x2c ,0xf5 ,0x29 ,0xe5 ,0x28 ,0x3d ,0xf5 ,0x28 ,0xad ,0x29 ,0xae , +0x28 ,0xaf ,0x27 ,0x74 ,0x80 ,0x90 ,0x00 ,0x06 ,0x12 ,0x03 ,0x17 ,0x74 ,0x80 ,0x90 ,0x00 ,0x02 , +0x12 ,0x03 ,0x17 ,0x12 ,0x0f ,0xb7 ,0xe5 ,0x2b ,0x14 ,0x60 ,0x3b ,0x75 ,0x27 ,0x01 ,0x75 ,0x29 , +0x08 ,0x75 ,0x28 ,0xff ,0xe5 ,0x2a ,0x24 ,0xfd ,0xfc ,0xe4 ,0x34 ,0xff ,0xfd ,0xec ,0x7c ,0x03 , +0x25 ,0xe0 ,0xcd ,0x33 ,0xcd ,0xdc ,0xf9 ,0xfc ,0xe5 ,0x29 ,0x2c ,0xf5 ,0x29 ,0xe5 ,0x28 ,0x3d , +0xf5 ,0x28 ,0xad ,0x29 ,0xae ,0x28 ,0xaf ,0x27 ,0xe4 ,0x90 ,0x00 ,0x06 ,0x12 ,0x03 ,0x17 ,0xe4 , +0x90 ,0x00 ,0x02 ,0x12 ,0x03 ,0x17 ,0x22 ,0x12 ,0x30 ,0xe6 ,0x78 ,0x95 ,0xec ,0xf6 ,0xec ,0x24 , +0x9d ,0xf8 ,0xe6 ,0x30 ,0xe2 ,0x09 ,0x78 ,0x95 ,0xe6 ,0xfc ,0x12 ,0x14 ,0xed ,0xd2 ,0x00 ,0x78 , +0x95 ,0xe6 ,0xfc ,0x12 ,0x0f ,0x69 ,0x78 ,0x96 ,0x76 ,0x00 ,0x90 ,0xfc ,0x39 ,0xe0 ,0x30 ,0xe7 , +0x04 ,0x78 ,0x96 ,0x76 ,0x01 ,0x78 ,0x96 ,0xe6 ,0xfd ,0x78 ,0x95 ,0xe6 ,0xfc ,0x12 ,0x0d ,0x2f , +0xc2 ,0x03 ,0x30 ,0x00 ,0x07 ,0x78 ,0x95 ,0xe6 ,0xfc ,0x12 ,0x13 ,0xec ,0x7c ,0x00 ,0x12 ,0x25 , +0xbf ,0x12 ,0x31 ,0x69 ,0x22 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0x44 ,0x01 ,0xf0 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 , +0x00 ,0xf5 ,0x83 ,0xe0 ,0x30 ,0xe0 ,0x02 ,0x80 ,0xed ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x0b ,0xf5 ,0x82 , +0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0xf8 ,0xf0 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x02 ,0xf5 , +0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x44 ,0x80 ,0xf0 ,0x22 ,0xc2 ,0x03 ,0x8c ,0x58 , +0x12 ,0x0f ,0x69 ,0x78 ,0xa6 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0x79 ,0x5d ,0x7a ,0x35 ,0x7b ,0x0a , +0x78 ,0x01 ,0x12 ,0x03 ,0xf5 ,0x12 ,0x0e ,0x05 ,0xac ,0x58 ,0x7d ,0x02 ,0x12 ,0x0d ,0x2f ,0xc2 , +0x03 ,0xac ,0x58 ,0x12 ,0x11 ,0x07 ,0x22 ,0x8d ,0x53 ,0x8e ,0x52 ,0x8f ,0x51 ,0x8c ,0x50 ,0x12 , +0x0f ,0x69 ,0x75 ,0x4f ,0x00 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0x20 ,0xe4 ,0x1f ,0xe5 ,0x4f ,0x24 ,0xf6 ,0x40 ,0x19 ,0x05 ,0x4f ,0xc2 ,0x03 , +0x7c ,0x18 ,0x12 ,0x32 ,0xa9 ,0x90 ,0xff ,0x93 ,0xe0 ,0x44 ,0x01 ,0xf0 ,0xb2 ,0xb3 ,0xac ,0x50 , +0x12 ,0x0f ,0x69 ,0x80 ,0xd0 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0x20 ,0xe4 ,0x05 ,0xc2 ,0x03 ,0x7c ,0x02 ,0x22 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x05 , +0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0x0f ,0x60 ,0x16 ,0x78 ,0xa9 ,0xe6 , +0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0x0f ,0xf0 ,0xc2 ,0x03 , +0x7c ,0x01 ,0x22 ,0x78 ,0xa8 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xe0 ,0xad ,0x53 ,0xae ,0x52 ,0xaf , +0x51 ,0x12 ,0x03 ,0x0f ,0xc2 ,0x03 ,0x7c ,0x00 ,0x22 ,0x8d ,0x31 ,0x8c ,0x30 ,0x12 ,0x14 ,0xed , +0xe5 ,0x31 ,0x60 ,0x0f ,0xe5 ,0x30 ,0xb4 ,0x03 ,0x0a ,0x7c ,0x01 ,0x12 ,0x24 ,0xee ,0x7c ,0x81 , +0x12 ,0x24 ,0xee ,0xac ,0x30 ,0x12 ,0x0f ,0x69 ,0xe5 ,0x31 ,0x60 ,0x1a ,0x78 ,0xaa ,0x86 ,0x83 , +0x08 ,0x86 ,0x82 ,0xe0 ,0x54 ,0xe7 ,0xf0 ,0xa3 ,0xa3 ,0xa3 ,0xa3 ,0xe0 ,0x54 ,0xe7 ,0xf0 ,0xac , +0x30 ,0x7d ,0x02 ,0x12 ,0x0d ,0x2f ,0x78 ,0xa6 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0x79 ,0x67 ,0x7a , +0x35 ,0x7b ,0x0a ,0x78 ,0x01 ,0x12 ,0x03 ,0xf5 ,0xc2 ,0x03 ,0xe5 ,0x30 ,0x24 ,0x9d ,0xf8 ,0xc6 , +0x54 ,0xfd ,0xf6 ,0xac ,0x30 ,0x12 ,0x11 ,0x07 ,0x22 ,0x8c ,0x26 ,0x30 ,0x03 ,0x05 ,0x12 ,0x32 , +0x48 ,0x80 ,0xf8 ,0x7c ,0x0a ,0x12 ,0x31 ,0x5b ,0xd2 ,0x03 ,0xe5 ,0x26 ,0x24 ,0xfd ,0x78 ,0xa3 , +0xf6 ,0x70 ,0x07 ,0x78 ,0xaa ,0x76 ,0xff ,0x08 ,0x76 ,0xe0 ,0x78 ,0xa3 ,0xe6 ,0x75 ,0xf0 ,0x10 , +0xa4 ,0xad ,0xf0 ,0xfc ,0x24 ,0xa0 ,0x78 ,0xa9 ,0xf6 ,0xed ,0x34 ,0xff ,0x18 ,0xf6 ,0x78 ,0xa3 , +0xe6 ,0x75 ,0xf0 ,0x0a ,0xa4 ,0x24 ,0x00 ,0xfc ,0xe4 ,0x34 ,0xfc ,0xfd ,0x78 ,0xa6 ,0xed ,0xf6 , +0x08 ,0xec ,0xf6 ,0x12 ,0x31 ,0xf4 ,0x22 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 , +0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x30 ,0xe7 ,0x22 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 , +0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0x7f ,0xf0 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 , +0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x44 ,0x80 ,0xf0 ,0x22 ,0x78 ,0xaa ,0x86 ,0x83 ,0x08 , +0x86 ,0x82 ,0xe0 ,0x54 ,0x7f ,0xf0 ,0xad ,0x83 ,0xe5 ,0x82 ,0x24 ,0x04 ,0xfc ,0xe4 ,0x3d ,0x8c , +0x82 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0x7f ,0xf0 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x0b ,0xf5 ,0x82 ,0x18 ,0xe6 , +0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0xf8 ,0xf0 ,0x78 ,0xab ,0xe6 ,0x24 ,0x01 ,0xf5 ,0x82 ,0x18 , +0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x44 ,0x03 ,0xf0 ,0x78 ,0xab ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 , +0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x44 ,0x03 ,0xf0 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x05 ,0xf5 , +0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0x74 ,0x0f ,0xf0 ,0x22 ,0x78 ,0xaa ,0x86 ,0x83 ,0x08 , +0x86 ,0x82 ,0xe0 ,0x54 ,0x3f ,0xf0 ,0xad ,0x83 ,0xe5 ,0x82 ,0x24 ,0x04 ,0xfc ,0xe4 ,0x3d ,0x8c , +0x82 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0x3f ,0xf0 ,0x78 ,0xa3 ,0xe6 ,0x24 ,0xa4 ,0xf8 ,0xe6 ,0xfc ,0x78 , +0xab ,0xe6 ,0x24 ,0x01 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0x78 ,0xa3 , +0xe6 ,0x24 ,0xa4 ,0xf8 ,0xe6 ,0xfc ,0x78 ,0xab ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 , +0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x0b ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0x54 ,0xfb ,0x44 ,0x02 ,0xf5 ,0x26 ,0x78 ,0xa7 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 , +0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x30 ,0xe5 ,0x03 ,0x43 ,0x26 ,0x01 ,0x78 ,0xa9 ,0xe6 , +0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x30 ,0xe0 ,0x03 ,0x12 ,0x0f , +0xb7 ,0xe5 ,0x26 ,0xfc ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x0b ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 , +0x83 ,0xec ,0xf0 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 , +0x74 ,0x0f ,0xf0 ,0x78 ,0xaa ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xe0 ,0x44 ,0x80 ,0xf0 ,0xa3 ,0xa3 , +0xa3 ,0xa3 ,0xe0 ,0x44 ,0x80 ,0xf0 ,0x22 ,0x8c ,0x2a ,0x12 ,0x0f ,0x69 ,0x78 ,0xa7 ,0xe6 ,0x24 , +0x08 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0xfc ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x0a , +0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0x78 ,0xa7 ,0xe6 ,0x24 ,0x07 ,0xf5 , +0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0xfc ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x09 ,0xf5 ,0x82 , +0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0x78 ,0xa6 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xe0 , +0xfd ,0xa3 ,0xe0 ,0xfc ,0xed ,0xfe ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x08 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 , +0x00 ,0xf5 ,0x83 ,0xee ,0xf0 ,0xec ,0xfe ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x07 ,0xf5 ,0x82 ,0x18 ,0xe6 , +0x34 ,0x00 ,0xf5 ,0x83 ,0xee ,0xf0 ,0x8c ,0x29 ,0x8d ,0x28 ,0xc3 ,0xec ,0x94 ,0x05 ,0xed ,0x94 , +0x0c ,0x40 ,0x05 ,0x75 ,0x27 ,0x7c ,0x80 ,0x33 ,0xd3 ,0xe5 ,0x29 ,0x94 ,0x01 ,0xe5 ,0x28 ,0x94 , +0x03 ,0x40 ,0x05 ,0x75 ,0x27 ,0x3c ,0x80 ,0x23 ,0xd3 ,0xe5 ,0x29 ,0x94 ,0x81 ,0xe5 ,0x28 ,0x94 , +0x01 ,0x40 ,0x05 ,0x75 ,0x27 ,0x18 ,0x80 ,0x13 ,0xd3 ,0xe5 ,0x29 ,0x94 ,0x60 ,0xe5 ,0x28 ,0x94 , +0x00 ,0x40 ,0x05 ,0x75 ,0x27 ,0x0c ,0x80 ,0x03 ,0x75 ,0x27 ,0x08 ,0xaf ,0x27 ,0xe4 ,0xef ,0x54 , +0x7c ,0x44 ,0x83 ,0xff ,0x8f ,0x27 ,0xe5 ,0x27 ,0xfc ,0x78 ,0xab ,0xe6 ,0x24 ,0x01 ,0xf5 ,0x82 , +0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0xe5 ,0x27 ,0xfc ,0x78 ,0xab ,0xe6 ,0x24 ,0x05 , +0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0xe5 ,0x27 ,0xfc ,0x78 ,0xa3 ,0xe6 , +0x24 ,0xa4 ,0xf8 ,0xec ,0xf6 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0xf5 ,0x27 ,0x78 ,0xa7 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xa3 ,0xe0 ,0x30 ,0xe3 ,0x17 ,0x53 ,0x27 ,0xc7 ,0x78 ,0xa7 ,0xe6 ,0x24 ,0x05 ,0xf5 , +0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x90 ,0x35 ,0x58 ,0x93 ,0x42 ,0x27 ,0x53 ,0x27 , +0xfb ,0x78 ,0xa7 ,0xe6 ,0x24 ,0x06 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x60 , +0x03 ,0x43 ,0x27 ,0x04 ,0x53 ,0x27 ,0xfc ,0x78 ,0xa7 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 , +0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x42 ,0x27 ,0x43 ,0x27 ,0x80 ,0xe5 ,0x27 ,0xfc ,0x78 ,0xa9 ,0xe6 , +0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0x78 ,0xa9 ,0xe6 ,0x24 , +0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0xf5 ,0x27 ,0x78 ,0xa7 ,0xe6 ,0x24 , +0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xa3 ,0xe0 ,0x30 ,0xe1 ,0x05 ,0x53 ,0x27 , +0xdf ,0x80 ,0x03 ,0x43 ,0x27 ,0x20 ,0x78 ,0xa7 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 , +0x00 ,0xf5 ,0x83 ,0xe0 ,0x30 ,0xe4 ,0x05 ,0x53 ,0x27 ,0xef ,0x80 ,0x03 ,0x43 ,0x27 ,0x10 ,0x78 , +0xa7 ,0xe6 ,0x24 ,0x09 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0xb4 ,0x02 ,0x03 , +0x43 ,0x27 ,0x02 ,0xe5 ,0x27 ,0xfc ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 , +0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x03 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0xf5 ,0x27 ,0x78 ,0xa7 ,0xe6 ,0x24 ,0x09 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 , +0xf5 ,0x83 ,0xe0 ,0x70 ,0x05 ,0x53 ,0x27 ,0x7f ,0x80 ,0x03 ,0x43 ,0x27 ,0x80 ,0x78 ,0xa7 ,0xe6 , +0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xa3 ,0xe0 ,0x30 ,0xe0 ,0x05 ,0x43 , +0x27 ,0x20 ,0x80 ,0x03 ,0x53 ,0x27 ,0xdf ,0x78 ,0xa7 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 , +0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x30 ,0xe3 ,0x05 ,0x43 ,0x27 ,0x40 ,0x80 ,0x03 ,0x53 ,0x27 ,0xbf , +0x78 ,0xa7 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x30 ,0xe0 , +0x05 ,0x43 ,0x27 ,0x10 ,0x80 ,0x03 ,0x53 ,0x27 ,0xef ,0x78 ,0xa7 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 , +0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xa3 ,0xe0 ,0x30 ,0xe4 ,0x05 ,0x43 ,0x27 ,0x08 ,0x80 ,0x03 , +0x53 ,0x27 ,0xf7 ,0x78 ,0xa7 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 , +0xa3 ,0xe0 ,0x30 ,0xe5 ,0x05 ,0x43 ,0x27 ,0x04 ,0x80 ,0x03 ,0x53 ,0x27 ,0xfb ,0x78 ,0xa7 ,0xe6 , +0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xa3 ,0xe0 ,0x30 ,0xe6 ,0x05 ,0x43 , +0x27 ,0x01 ,0x80 ,0x03 ,0x53 ,0x27 ,0xfe ,0x78 ,0xa7 ,0xe6 ,0x24 ,0x02 ,0xf5 ,0x82 ,0x18 ,0xe6 , +0x34 ,0x00 ,0xf5 ,0x83 ,0xa3 ,0xe0 ,0x30 ,0xe7 ,0x05 ,0x43 ,0x27 ,0x02 ,0x80 ,0x03 ,0x53 ,0x27 , +0xfd ,0xe5 ,0x27 ,0xfc ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x03 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 , +0x83 ,0xec ,0xf0 ,0xc2 ,0x03 ,0x7c ,0x00 ,0x22 ,0x8d ,0x27 ,0x8c ,0x26 ,0xed ,0x54 ,0x03 ,0x14 , +0x60 ,0x03 ,0x7c ,0x10 ,0x22 ,0xe5 ,0x27 ,0x54 ,0x7c ,0x24 ,0xfc ,0x40 ,0x03 ,0x7c ,0x0b ,0x22 , +0xe5 ,0x26 ,0x24 ,0x9d ,0xf8 ,0xc6 ,0x44 ,0x02 ,0xf6 ,0x7c ,0x00 ,0x22 ,0x8c ,0x30 ,0x12 ,0x0f , +0x69 ,0xe5 ,0x30 ,0x24 ,0x9d ,0xf8 ,0xe6 ,0x20 ,0xe2 ,0x4f ,0xac ,0x30 ,0x7d ,0x02 ,0x12 ,0x0d , +0x2f ,0xe5 ,0x30 ,0x24 ,0xfe ,0x44 ,0x28 ,0xfc ,0x78 ,0xaa ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xec , +0xf0 ,0xaf ,0x83 ,0xe5 ,0x82 ,0x24 ,0x04 ,0xfe ,0xe4 ,0x3f ,0xff ,0xec ,0x8e ,0x82 ,0x8f ,0x83 , +0xf0 ,0x7c ,0x03 ,0x8c ,0x2c ,0xe5 ,0x2c ,0xfc ,0x78 ,0xab ,0xe6 ,0x24 ,0x01 ,0xf5 ,0x82 ,0x18 , +0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0xe5 ,0x2c ,0xfc ,0x78 ,0xab ,0xe6 ,0x24 ,0x05 ,0xf5 , +0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0x75 ,0x2d ,0x01 ,0x75 ,0x2f ,0x48 ,0x75 , +0x2e ,0xff ,0xe5 ,0x30 ,0x24 ,0xfd ,0xfc ,0xe4 ,0x34 ,0xff ,0xfd ,0xec ,0x7c ,0x03 ,0x25 ,0xe0 , +0xcd ,0x33 ,0xcd ,0xdc ,0xf9 ,0xfc ,0xe5 ,0x2f ,0x2c ,0xf5 ,0x2f ,0xe5 ,0x2e ,0x3d ,0xf5 ,0x2e , +0x78 ,0xab ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0xe7 , +0xf5 ,0x2c ,0xad ,0x2f ,0xae ,0x2e ,0xaf ,0x2d ,0xe4 ,0x90 ,0x00 ,0x02 ,0x12 ,0x03 ,0x17 ,0xe4 , +0x90 ,0x00 ,0x06 ,0x12 ,0x03 ,0x17 ,0x12 ,0x01 ,0xe6 ,0x30 ,0xe5 ,0x03 ,0x43 ,0x2c ,0x10 ,0xe5 , +0x2c ,0xfc ,0x78 ,0xab ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec , +0xf0 ,0x12 ,0x10 ,0x4b ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x06 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 , +0x83 ,0xe0 ,0xc2 ,0x03 ,0xfc ,0xe5 ,0x30 ,0x24 ,0x9d ,0xf8 ,0xc6 ,0x44 ,0x04 ,0xf6 ,0x8c ,0x2c , +0xe5 ,0x30 ,0x54 ,0x0f ,0xc4 ,0x54 ,0xf0 ,0x7e ,0x00 ,0xff ,0xee ,0xef ,0x44 ,0x04 ,0x7d ,0x00 , +0xff ,0xec ,0x4e ,0xfc ,0xed ,0x4f ,0xfd ,0x12 ,0x1c ,0xa7 ,0x7c ,0x00 ,0x22 ,0x8c ,0x2f ,0x12 , +0x0f ,0x69 ,0x12 ,0x0f ,0xeb ,0x78 ,0xaa ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xe0 ,0x54 ,0x08 ,0xf0 , +0xa3 ,0xa3 ,0xa3 ,0xa3 ,0xe0 ,0x54 ,0x08 ,0xf0 ,0xac ,0x2f ,0x7d ,0x02 ,0x12 ,0x0d ,0x2f ,0xc2 , +0x03 ,0xe5 ,0x2f ,0x24 ,0x9d ,0xf8 ,0xc6 ,0x54 ,0xfb ,0xf6 ,0x7c ,0x00 ,0x22 ,0x12 ,0x30 ,0xe6 , +0x78 ,0x96 ,0xec ,0xf6 ,0xec ,0x24 ,0x9d ,0xf8 ,0xe6 ,0x30 ,0xe1 ,0x0a ,0x7d ,0x00 ,0x7c ,0x13 , +0x12 ,0x25 ,0x26 ,0x12 ,0x31 ,0x69 ,0x78 ,0x96 ,0xe6 ,0x24 ,0x9d ,0xf8 ,0xc6 ,0x44 ,0x01 ,0xf6 , +0x78 ,0x96 ,0xe6 ,0xfc ,0x12 ,0x0f ,0x69 ,0x78 ,0x96 ,0xe6 ,0x24 ,0xfd ,0x75 ,0xf0 ,0x0a ,0xa4 , +0x24 ,0x14 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 ,0x78 ,0xa6 ,0xe6 ,0xfa ,0x08 ,0xe6 ,0xf9 , +0x7b ,0x0a ,0x78 ,0x01 ,0x12 ,0x03 ,0xa7 ,0x78 ,0xa6 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0x79 ,0x67 , +0x7a ,0x35 ,0x7b ,0x0a ,0x78 ,0x01 ,0x12 ,0x03 ,0xf5 ,0x12 ,0x0f ,0xb7 ,0xc2 ,0x03 ,0x78 ,0x96 , +0xe6 ,0xfc ,0x12 ,0x11 ,0x07 ,0x78 ,0x95 ,0xec ,0xf6 ,0xec ,0x60 ,0x0a ,0x7d ,0x00 ,0x7c ,0x08 , +0x12 ,0x25 ,0x26 ,0x12 ,0x31 ,0x69 ,0x78 ,0x96 ,0xe6 ,0xfc ,0x12 ,0x0f ,0x69 ,0x78 ,0xa9 ,0xe6 , +0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x44 ,0x10 ,0x54 ,0xdf ,0xfc , +0x78 ,0xa9 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xec ,0xf0 ,0x78 , +0x95 ,0xec ,0xf6 ,0xc2 ,0x03 ,0x7c ,0xc8 ,0x12 ,0x32 ,0xa9 ,0x78 ,0x96 ,0xe6 ,0xfc ,0x12 ,0x0f , +0x69 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 , +0xef ,0xf0 ,0xc2 ,0x03 ,0x7c ,0xc8 ,0x12 ,0x32 ,0xa9 ,0x78 ,0x96 ,0xe6 ,0xfc ,0x12 ,0x0f ,0x69 , +0x78 ,0xa9 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x44 ,0x10 , +0xf0 ,0xc2 ,0x03 ,0x7c ,0xc8 ,0x12 ,0x32 ,0xa9 ,0x78 ,0x96 ,0xe6 ,0xfc ,0x12 ,0x0f ,0x69 ,0x78 , +0xa9 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x44 ,0x20 ,0xf0 , +0xc2 ,0x03 ,0x7c ,0xf0 ,0x12 ,0x32 ,0xa9 ,0x78 ,0x96 ,0xe6 ,0xfc ,0x12 ,0x0f ,0x69 ,0x78 ,0xa9 , +0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x30 ,0xe4 ,0x15 ,0xc2 , +0x03 ,0x78 ,0x96 ,0xe6 ,0x44 ,0x10 ,0x7f ,0x00 ,0xfe ,0x7c ,0x07 ,0x12 ,0x31 ,0xfb ,0x12 ,0x31 , +0x69 ,0x02 ,0x17 ,0x14 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 , +0x83 ,0xe0 ,0x54 ,0xcf ,0xf0 ,0xc2 ,0x03 ,0x7c ,0xc8 ,0x12 ,0x32 ,0xa9 ,0x78 ,0x96 ,0xe6 ,0xfc , +0x12 ,0x0f ,0x69 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 , +0xe0 ,0x44 ,0x30 ,0xf0 ,0xc2 ,0x03 ,0x7c ,0xf0 ,0x12 ,0x32 ,0xa9 ,0x78 ,0x96 ,0xe6 ,0xfc ,0x12 , +0x0f ,0x69 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x05 ,0xf5 ,0x82 ,0x18 ,0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 , +0x30 ,0xe4 ,0x14 ,0xc2 ,0x03 ,0x78 ,0x96 ,0xe6 ,0x44 ,0x10 ,0x7f ,0x00 ,0xfe ,0x7c ,0x07 ,0x12 , +0x31 ,0xfb ,0x12 ,0x31 ,0x69 ,0x80 ,0x5d ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 ,0xe6 , +0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0xef ,0xf0 ,0x78 ,0xa9 ,0xe6 ,0x24 ,0x04 ,0xf5 ,0x82 ,0x18 , +0xe6 ,0x34 ,0x00 ,0xf5 ,0x83 ,0xe0 ,0x54 ,0xdf ,0xf0 ,0x78 ,0x96 ,0xe6 ,0x24 ,0xfd ,0x75 ,0xf0 , +0x0a ,0xa4 ,0x24 ,0x14 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 ,0xac ,0x82 ,0xad ,0x83 ,0x78 , +0xa6 ,0x86 ,0x83 ,0x08 ,0x86 ,0x82 ,0xec ,0xf9 ,0xed ,0xfa ,0x7b ,0x0a ,0x78 ,0x01 ,0x12 ,0x03 , +0xa7 ,0xc2 ,0x03 ,0x78 ,0x96 ,0xe6 ,0xfc ,0x12 ,0x11 ,0x07 ,0x7d ,0x00 ,0x7c ,0x0b ,0x12 ,0x25 , +0x26 ,0x12 ,0x31 ,0x69 ,0x22 ,0x12 ,0x30 ,0xe6 ,0xe4 ,0x90 ,0xfc ,0x39 ,0xf0 ,0x7d ,0x02 ,0x7c , +0x00 ,0x12 ,0x25 ,0x26 ,0x12 ,0x31 ,0x69 ,0x22 ,0x12 ,0x30 ,0xe6 ,0x7c ,0x00 ,0x12 ,0x25 ,0xbf , +0x12 ,0x31 ,0x69 ,0x22 ,0x74 ,0x3c ,0x90 ,0xfb ,0xe0 ,0xf0 ,0x74 ,0x3e ,0x90 ,0xfb ,0xe0 ,0xf0 , +0xe4 ,0x90 ,0xfc ,0x28 ,0xf0 ,0x22 ,0x8d ,0x35 ,0x8c ,0x34 ,0xec ,0xb4 ,0x01 ,0x02 ,0x80 ,0x03 , +0xd3 ,0x40 ,0x02 ,0x80 ,0x28 ,0xb4 ,0x02 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x08 ,0xa8 ,0x35 ,0xc6 , +0x25 ,0xe0 ,0xf6 ,0x80 ,0x18 ,0xb4 ,0x04 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x0a ,0xa8 ,0x35 ,0xc6 , +0x25 ,0xe0 ,0x25 ,0xe0 ,0xf6 ,0x80 ,0x06 ,0xa8 ,0x35 ,0x76 ,0x00 ,0x80 ,0x00 ,0x22 ,0x8c ,0x3c , +0x8d ,0x3b ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x75 ,0x66 ,0x06 ,0x75 ,0x67 ,0x00 ,0x90 ,0xfc , +0x29 ,0x12 ,0x04 ,0x6e ,0x12 ,0x01 ,0xe6 ,0xb4 ,0x80 ,0x02 ,0x80 ,0x06 ,0xd3 ,0x50 ,0x03 ,0x02 , +0x18 ,0x47 ,0x90 ,0xfc ,0x29 ,0x12 ,0x04 ,0x80 ,0x90 ,0x00 ,0x03 ,0x12 ,0x01 ,0xec ,0x54 ,0xf0 , +0xb4 ,0x30 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x5f ,0x90 ,0xfc ,0x29 ,0x12 ,0x04 ,0x80 ,0x90 ,0x00 , +0x08 ,0x12 ,0x02 ,0x0e ,0xfa ,0xfd ,0xeb ,0xfe ,0x7f ,0x01 ,0x90 ,0xfc ,0x2c ,0x12 ,0x04 ,0x6e , +0xee ,0xcd ,0x90 ,0x35 ,0x71 ,0xfc ,0xe4 ,0x93 ,0xff ,0x74 ,0x01 ,0x93 ,0xfe ,0xf9 ,0xef ,0xfa , +0x7b ,0x01 ,0xea ,0xff ,0xe9 ,0xfe ,0xec ,0xc3 ,0x9e ,0xed ,0x9f ,0x40 ,0x25 ,0x90 ,0x35 ,0x73 , +0xe4 ,0x93 ,0xfd ,0x74 ,0x01 ,0x93 ,0xfc ,0xed ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0xee ,0xcd ,0xfc , +0x90 ,0xfc ,0x2e ,0xe0 ,0xd3 ,0x9c ,0x90 ,0xfc ,0x2d ,0xe0 ,0x9d ,0x50 ,0x05 ,0x75 ,0x66 ,0x80 , +0x80 ,0x33 ,0x12 ,0x19 ,0x65 ,0x80 ,0x2e ,0xb4 ,0x60 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x0b ,0xac , +0x3c ,0xad ,0x3b ,0x12 ,0x07 ,0x77 ,0x8c ,0x66 ,0x80 ,0x1b ,0xb4 ,0x10 ,0x03 ,0xb3 ,0x40 ,0x10 , +0xc3 ,0xb4 ,0x20 ,0x03 ,0xb3 ,0x40 ,0x09 ,0xc3 ,0xb4 ,0x40 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x00 , +0x75 ,0x66 ,0x81 ,0x80 ,0x00 ,0x80 ,0x75 ,0xb4 ,0x81 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x6b ,0x90 , +0xfc ,0x29 ,0x12 ,0x04 ,0x80 ,0x90 ,0x00 ,0x03 ,0x12 ,0x01 ,0xec ,0x54 ,0xf0 ,0xb4 ,0x30 ,0x02 , +0x80 ,0x03 ,0xd3 ,0x40 ,0x1d ,0x90 ,0xfc ,0x29 ,0x12 ,0x04 ,0x80 ,0x90 ,0x00 ,0x08 ,0x12 ,0x02 , +0x0e ,0xfa ,0xfd ,0xeb ,0xfe ,0x7f ,0x01 ,0x90 ,0xfc ,0x2f ,0x12 ,0x04 ,0x6e ,0x12 ,0x18 ,0xcf , +0x80 ,0x36 ,0xb4 ,0x60 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x13 ,0x75 ,0x3a ,0x67 ,0xe4 ,0xf5 ,0x39 , +0xf5 ,0x38 ,0xac ,0x3c ,0xad ,0x3b ,0x12 ,0x05 ,0xd3 ,0x8c ,0x66 ,0x80 ,0x1b ,0xb4 ,0x10 ,0x03 , +0xb3 ,0x40 ,0x10 ,0xc3 ,0xb4 ,0x20 ,0x03 ,0xb3 ,0x40 ,0x09 ,0xc3 ,0xb4 ,0x40 ,0x02 ,0x80 ,0x03 , +0xd3 ,0x40 ,0x00 ,0x75 ,0x66 ,0x81 ,0x80 ,0x00 ,0x80 ,0x02 ,0x80 ,0x00 ,0xe5 ,0x66 ,0xfc ,0x90 , +0xfc ,0x29 ,0x12 ,0x04 ,0x80 ,0xec ,0x90 ,0x00 ,0x02 ,0x12 ,0x03 ,0x17 ,0xac ,0x67 ,0x22 ,0x90 , +0xfc ,0x29 ,0x12 ,0x04 ,0x80 ,0x90 ,0x00 ,0x04 ,0x12 ,0x01 ,0xec ,0x60 ,0x04 ,0x74 ,0x01 ,0x80 , +0x01 ,0xe4 ,0xa2 ,0xe0 ,0x92 ,0x01 ,0x90 ,0xfc ,0x29 ,0x12 ,0x04 ,0x80 ,0xed ,0x24 ,0x03 ,0xfd , +0x50 ,0x01 ,0x0e ,0x90 ,0xfc ,0x2c ,0x12 ,0x04 ,0x6e ,0x90 ,0xfc ,0x29 ,0x12 ,0x04 ,0x80 ,0x90 , +0x00 ,0x05 ,0x12 ,0x01 ,0xec ,0xf5 ,0x67 ,0x90 ,0x00 ,0x04 ,0x12 ,0x01 ,0xec ,0x54 ,0x0f ,0xfc , +0x7d ,0x67 ,0x12 ,0x17 ,0x46 ,0xe5 ,0x67 ,0x70 ,0x04 ,0x75 ,0x66 ,0x08 ,0x22 ,0x75 ,0x66 ,0x00 , +0x78 ,0x84 ,0x76 ,0x00 ,0x78 ,0x84 ,0xe6 ,0xc3 ,0x95 ,0x67 ,0x50 ,0x38 ,0x90 ,0xfc ,0x2f ,0x12 , +0x04 ,0x80 ,0x12 ,0x01 ,0xe6 ,0xfc ,0x90 ,0xfc ,0x2c ,0x12 ,0x04 ,0x80 ,0xec ,0x12 ,0x03 ,0x0f , +0x30 ,0x01 ,0x0e ,0x90 ,0xfc ,0x31 ,0xe0 ,0x04 ,0xf0 ,0x90 ,0xfc ,0x30 ,0x70 ,0x03 ,0xe0 ,0x04 , +0xf0 ,0x78 ,0x84 ,0x06 ,0x90 ,0xfc ,0x2e ,0xe0 ,0x04 ,0xf0 ,0x90 ,0xfc ,0x2d ,0x70 ,0x03 ,0xe0 , +0x04 ,0xf0 ,0x80 ,0xc0 ,0x22 ,0x90 ,0xfc ,0x2a ,0xe0 ,0xfd ,0xa3 ,0xe0 ,0xfc ,0xed ,0xfe ,0xec , +0xfd ,0x7f ,0x01 ,0xed ,0x24 ,0x0a ,0xfd ,0x50 ,0x01 ,0x0e ,0x90 ,0xfc ,0x32 ,0x12 ,0x04 ,0x6e , +0x90 ,0xfc ,0x29 ,0x12 ,0x04 ,0x80 ,0x90 ,0x00 ,0x04 ,0x12 ,0x01 ,0xec ,0x54 ,0x0f ,0xb4 ,0x01 , +0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x17 ,0x90 ,0xfc ,0x32 ,0x12 ,0x04 ,0x80 ,0x0d ,0xed ,0x70 ,0x01 , +0x0e ,0x90 ,0xfc ,0x2f ,0x12 ,0x04 ,0x6e ,0x78 ,0x88 ,0x76 ,0x01 ,0x80 ,0x4e ,0xb4 ,0x02 ,0x02 , +0x80 ,0x03 ,0xd3 ,0x40 ,0x19 ,0x90 ,0xfc ,0x32 ,0x12 ,0x04 ,0x80 ,0xed ,0x24 ,0x02 ,0xfd ,0x50 , +0x01 ,0x0e ,0x90 ,0xfc ,0x2f ,0x12 ,0x04 ,0x6e ,0x78 ,0x88 ,0x76 ,0x02 ,0x80 ,0x2d ,0xb4 ,0x04 , +0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x19 ,0x90 ,0xfc ,0x32 ,0x12 ,0x04 ,0x80 ,0xed ,0x24 ,0x04 ,0xfd , +0x50 ,0x01 ,0x0e ,0x90 ,0xfc ,0x2f ,0x12 ,0x04 ,0x6e ,0x78 ,0x88 ,0x76 ,0x04 ,0x80 ,0x0c ,0xb4 , +0x00 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x00 ,0x75 ,0x66 ,0x08 ,0x22 ,0x90 ,0xfc ,0x29 ,0x12 ,0x04 , +0x80 ,0x90 ,0x00 ,0x05 ,0x12 ,0x01 ,0xec ,0xf5 ,0x67 ,0x78 ,0x85 ,0x76 ,0x00 ,0x78 ,0x85 ,0xe6 , +0xc3 ,0x95 ,0x67 ,0x40 ,0x03 ,0x02 ,0x1a ,0xcd ,0x78 ,0x86 ,0x76 ,0x00 ,0x78 ,0x86 ,0xe6 ,0xc3 , +0x78 ,0x88 ,0x96 ,0x50 ,0x76 ,0x90 ,0xfc ,0x2c ,0x12 ,0x04 ,0x80 ,0x12 ,0x01 ,0xe6 ,0xfc ,0x90 , +0xfc ,0x32 ,0x12 ,0x04 ,0x89 ,0x12 ,0x01 ,0xe0 ,0xf4 ,0x5c ,0xfc ,0x12 ,0x01 ,0xe0 ,0xf8 ,0x90 , +0xfc ,0x2f ,0x12 ,0x04 ,0x80 ,0xe8 ,0xc0 ,0xe0 ,0x12 ,0x01 ,0xe6 ,0xc8 ,0xd0 ,0xe0 ,0xc8 ,0x58 , +0x4c ,0xfc ,0x90 ,0xfc ,0x2c ,0x12 ,0x04 ,0x80 ,0xec ,0x12 ,0x03 ,0x0f ,0x78 ,0x87 ,0xec ,0xf6 , +0x90 ,0xfc ,0x31 ,0xe0 ,0x04 ,0xf0 ,0x90 ,0xfc ,0x30 ,0x70 ,0x03 ,0xe0 ,0x04 ,0xf0 ,0x09 ,0xe9 , +0x70 ,0x01 ,0x0a ,0x90 ,0xfc ,0x32 ,0x12 ,0x04 ,0x77 ,0x90 ,0xfc ,0x29 ,0x12 ,0x04 ,0x80 ,0x90 , +0x00 ,0x04 ,0x12 ,0x01 ,0xec ,0x30 ,0xe4 ,0x0e ,0x90 ,0xfc ,0x2e ,0xe0 ,0x04 ,0xf0 ,0x90 ,0xfc , +0x2d ,0x70 ,0x03 ,0xe0 ,0x04 ,0xf0 ,0x78 ,0x86 ,0x06 ,0x80 ,0x81 ,0x78 ,0x88 ,0xe6 ,0xfd ,0xe4 , +0xfe ,0xff ,0xee ,0xcd ,0xfc ,0x90 ,0xfc ,0x31 ,0xe0 ,0x2c ,0xf0 ,0x90 ,0xfc ,0x30 ,0xe0 ,0x3d , +0xf0 ,0x78 ,0x88 ,0xe6 ,0xfd ,0xe4 ,0xfe ,0xff ,0xee ,0xcd ,0xfc ,0x90 ,0xfc ,0x34 ,0xe0 ,0x2c , +0xf0 ,0x90 ,0xfc ,0x33 ,0xe0 ,0x3d ,0xf0 ,0x78 ,0x85 ,0x06 ,0x02 ,0x1a ,0x0d ,0x75 ,0x66 ,0x00 , +0x22 ,0xe5 ,0x3d ,0x05 ,0x3d ,0x04 ,0x70 ,0x02 ,0xb2 ,0xb0 ,0x22 ,0xc0 ,0xe0 ,0xc0 ,0xf0 ,0xc0 , +0x82 ,0xc0 ,0x83 ,0xc0 ,0xd0 ,0xe8 ,0xc0 ,0xe0 ,0xe9 ,0xc0 ,0xe0 ,0xea ,0xc0 ,0xe0 ,0xeb ,0xc0 , +0xe0 ,0xec ,0xc0 ,0xe0 ,0xed ,0xc0 ,0xe0 ,0xee ,0xc0 ,0xe0 ,0xef ,0xc0 ,0xe0 ,0x90 ,0xff ,0x92 , +0xe0 ,0x12 ,0x01 ,0xb7 ,0x1b ,0x29 ,0x30 ,0x1b ,0x29 ,0x32 ,0x1b ,0x38 ,0x38 ,0x1b ,0x4a ,0x3a , +0x1b ,0x5c ,0x3e ,0x1b ,0x74 ,0x44 ,0x1b ,0x68 ,0x46 ,0x1b ,0x80 ,0x50 ,0x1b ,0xc2 ,0x52 ,0x1b , +0xa1 ,0x54 ,0x1b ,0xe3 ,0x56 ,0x00 ,0x00 ,0x1c ,0x04 ,0x90 ,0xff ,0x92 ,0xe0 ,0x7f ,0x00 ,0xfe , +0x7c ,0x01 ,0x12 ,0x31 ,0xfb ,0x02 ,0x1c ,0x14 ,0xe4 ,0xff ,0x04 ,0xfe ,0x7c ,0x03 ,0x12 ,0x31 , +0xfb ,0x74 ,0x20 ,0x90 ,0xff ,0xfe ,0xf0 ,0x02 ,0x1c ,0x14 ,0xe4 ,0xff ,0x04 ,0xfe ,0x7c ,0x02 , +0x12 ,0x31 ,0xfb ,0x74 ,0x40 ,0x90 ,0xff ,0xfe ,0xf0 ,0x02 ,0x1c ,0x14 ,0xe4 ,0xff ,0x04 ,0xfe , +0x7c ,0x04 ,0x12 ,0x31 ,0xfb ,0x02 ,0x1c ,0x14 ,0xe4 ,0xff ,0x04 ,0xfe ,0x7c ,0x05 ,0x12 ,0x31 , +0xfb ,0x02 ,0x1c ,0x14 ,0xe4 ,0xff ,0x04 ,0xfe ,0x7c ,0x06 ,0x12 ,0x31 ,0xfb ,0x02 ,0x1c ,0x14 , +0x90 ,0xff ,0xa5 ,0xe0 ,0x7d ,0x00 ,0x90 ,0xfb ,0xf8 ,0xcd ,0xf0 ,0xa3 ,0xcd ,0xf0 ,0x90 ,0xfb , +0xf9 ,0xe0 ,0xfc ,0xf5 ,0x83 ,0x90 ,0xfb ,0xf8 ,0xe0 ,0x44 ,0x33 ,0xfd ,0x12 ,0x1c ,0xa7 ,0x80 , +0x73 ,0x90 ,0xff ,0xb5 ,0xe0 ,0x7d ,0x00 ,0x90 ,0xfb ,0xfa ,0xcd ,0xf0 ,0xa3 ,0xcd ,0xf0 ,0x90 , +0xfb ,0xfb ,0xe0 ,0xfc ,0xf5 ,0x83 ,0x90 ,0xfb ,0xfa ,0xe0 ,0x44 ,0x43 ,0xfd ,0x12 ,0x1c ,0xa7 , +0x80 ,0x52 ,0x90 ,0xff ,0xa6 ,0xe0 ,0x7d ,0x00 ,0x90 ,0xfb ,0xfc ,0xcd ,0xf0 ,0xa3 ,0xcd ,0xf0 , +0x90 ,0xfb ,0xfd ,0xe0 ,0xfc ,0xf5 ,0x83 ,0x90 ,0xfb ,0xfc ,0xe0 ,0x44 ,0x34 ,0xfd ,0x12 ,0x1c , +0xa7 ,0x80 ,0x31 ,0x90 ,0xff ,0xb6 ,0xe0 ,0x7d ,0x00 ,0x90 ,0xfb ,0xfe ,0xcd ,0xf0 ,0xa3 ,0xcd , +0xf0 ,0x90 ,0xfb ,0xff ,0xe0 ,0xfc ,0xf5 ,0x83 ,0x90 ,0xfb ,0xfe ,0xe0 ,0x44 ,0x44 ,0xfd ,0x12 , +0x1c ,0xa7 ,0x80 ,0x10 ,0x90 ,0xff ,0x92 ,0xe0 ,0x7d ,0x00 ,0xfc ,0xed ,0x44 ,0xaa ,0xfd ,0x12 , +0x1c ,0xa7 ,0x80 ,0x00 ,0xe4 ,0x90 ,0xff ,0x92 ,0xf0 ,0xd0 ,0xe0 ,0xff ,0xd0 ,0xe0 ,0xfe ,0xd0 , +0xe0 ,0xfd ,0xd0 ,0xe0 ,0xfc ,0xd0 ,0xe0 ,0xfb ,0xd0 ,0xe0 ,0xfa ,0xd0 ,0xe0 ,0xf9 ,0xd0 ,0xe0 , +0xf8 ,0xd0 ,0xd0 ,0xd0 ,0x83 ,0xd0 ,0x82 ,0xd0 ,0xf0 ,0xd0 ,0xe0 ,0x32 ,0x05 ,0x81 ,0x05 ,0x81 , +0x05 ,0x81 ,0x05 ,0x81 ,0xa8 ,0x81 ,0x18 ,0x18 ,0x18 ,0xed ,0xf6 ,0x08 ,0xec ,0xf6 ,0x90 ,0xff , +0x5a ,0xe0 ,0x20 ,0xe7 ,0x02 ,0x80 ,0xf7 ,0x90 ,0xff ,0x59 ,0xe0 ,0x7d ,0x00 ,0xa8 ,0x81 ,0x18 , +0xcd ,0xf6 ,0xcd ,0x08 ,0xf6 ,0x7d ,0x03 ,0xa8 ,0x81 ,0xe6 ,0x18 ,0xfc ,0xe6 ,0xcc ,0x25 ,0xe0 , +0xcc ,0x33 ,0xcc ,0xdd ,0xf9 ,0xcc ,0xf6 ,0xcc ,0x08 ,0xf6 ,0xa8 ,0x81 ,0x18 ,0xe6 ,0x44 ,0xf8 , +0xf6 ,0xa8 ,0x81 ,0x18 ,0x18 ,0x18 ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0xa8 ,0x81 ,0x18 ,0x86 ,0x83 , +0x08 ,0x86 ,0x82 ,0xed ,0xf0 ,0xa3 ,0xec ,0xf0 ,0x74 ,0x02 ,0x90 ,0xff ,0x5a ,0xf0 ,0x15 ,0x81 , +0x15 ,0x81 ,0x15 ,0x81 ,0x15 ,0x81 ,0x22 ,0xe5 ,0x81 ,0x24 ,0x05 ,0xf5 ,0x81 ,0xe4 ,0xa8 ,0x81 , +0x18 ,0xf6 ,0xa8 ,0x81 ,0x18 ,0x18 ,0x18 ,0x18 ,0xed ,0xf6 ,0x08 ,0xec ,0xf6 ,0x90 ,0xfb ,0xf5 , +0xe0 ,0x24 ,0xf8 ,0x50 ,0x03 ,0x02 ,0x1d ,0xc8 ,0xe4 ,0xa8 ,0x81 ,0x18 ,0x18 ,0xf6 ,0xa8 ,0x81 , +0x18 ,0xe6 ,0xfe ,0xa8 ,0x81 ,0x18 ,0x18 ,0x18 ,0x18 ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0x7f ,0x00 , +0xef ,0x24 ,0xf8 ,0x40 ,0x4d ,0xe4 ,0xef ,0x25 ,0xe0 ,0x24 ,0x7d ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc , +0xf5 ,0x83 ,0xe0 ,0xfb ,0xa3 ,0xe0 ,0x6c ,0x70 ,0x03 ,0xfa ,0xeb ,0x6d ,0x70 ,0x09 ,0x74 ,0x01 , +0xa8 ,0x81 ,0x18 ,0x18 ,0xf6 ,0x80 ,0x2b ,0xe4 ,0xef ,0x25 ,0xe0 ,0x24 ,0x7d ,0xf5 ,0x82 ,0xe4 , +0x34 ,0xfc ,0xf5 ,0x83 ,0x7a ,0x00 ,0xe0 ,0x54 ,0xf0 ,0xcc ,0xf8 ,0xcc ,0xcd ,0xf9 ,0xcd ,0xfb , +0x78 ,0x00 ,0xe9 ,0x54 ,0xf0 ,0xf9 ,0xea ,0x68 ,0x70 ,0x02 ,0xeb ,0x69 ,0x70 ,0x01 ,0x0e ,0x0f , +0x80 ,0xae ,0xa8 ,0x81 ,0x18 ,0xee ,0xf6 ,0xa8 ,0x81 ,0x18 ,0x18 ,0x18 ,0x18 ,0xed ,0xf6 ,0x08 , +0xec ,0xf6 ,0xa8 ,0x81 ,0xef ,0xf6 ,0xa8 ,0x81 ,0x18 ,0x18 ,0xe6 ,0x70 ,0x79 ,0xa8 ,0x81 ,0x18 , +0xe6 ,0x24 ,0xf7 ,0x40 ,0x71 ,0xa8 ,0x81 ,0x18 ,0x18 ,0x18 ,0x18 ,0xe6 ,0x54 ,0x0f ,0xa8 ,0x81 , +0xf6 ,0x64 ,0x04 ,0x60 ,0x17 ,0xa8 ,0x81 ,0xe6 ,0x64 ,0x03 ,0x60 ,0x10 ,0xa8 ,0x81 ,0x18 ,0x18 , +0x18 ,0x18 ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0x12 ,0x1c ,0x3c ,0x80 ,0x4a ,0x7c ,0x0a ,0x12 ,0x31 , +0x5b ,0xa8 ,0x81 ,0x18 ,0x18 ,0x18 ,0x18 ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0x90 ,0xfb ,0xf4 ,0xe0 , +0x25 ,0xe0 ,0x24 ,0x7d ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 ,0xed ,0xf0 ,0xa3 ,0xec ,0xf0 , +0x90 ,0xfb ,0xf4 ,0xe0 ,0xff ,0xe4 ,0xef ,0x04 ,0x54 ,0x07 ,0xff ,0x90 ,0xfb ,0xf4 ,0xf0 ,0x90 , +0xfb ,0xf5 ,0xe0 ,0x04 ,0xf0 ,0x12 ,0x31 ,0xf4 ,0x90 ,0xfb ,0xf6 ,0xe0 ,0x70 ,0x08 ,0xe4 ,0xfe , +0xff ,0x7c ,0x0f ,0x12 ,0x31 ,0xfb ,0x80 ,0x27 ,0x90 ,0xfb ,0xf7 ,0xe0 ,0x04 ,0xf0 ,0x54 ,0x3f , +0x70 ,0x1d ,0x90 ,0xfb ,0xf7 ,0xe0 ,0x44 ,0xfe ,0x7d ,0x00 ,0xfc ,0x90 ,0xfb ,0xf4 ,0xe0 ,0x25 , +0xe0 ,0x24 ,0x7d ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 ,0xed ,0xf0 ,0xa3 ,0xec ,0xf0 ,0xe5 , +0x81 ,0x24 ,0xfb ,0xf5 ,0x81 ,0x22 ,0x78 ,0x8b ,0x76 ,0x00 ,0x78 ,0x8c ,0x76 ,0x00 ,0x74 ,0x01 , +0x90 ,0xfb ,0xf6 ,0xf0 ,0x12 ,0x30 ,0xe6 ,0x90 ,0xfb ,0xf5 ,0xe0 ,0x60 ,0x57 ,0x7c ,0x0a ,0x12 , +0x31 ,0x5b ,0x90 ,0xfb ,0xf3 ,0xe0 ,0x25 ,0xe0 ,0x24 ,0x7d ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfc ,0xf5 , +0x83 ,0xe0 ,0xfd ,0xa3 ,0xe0 ,0xfc ,0x90 ,0xfb ,0xf3 ,0xe0 ,0x25 ,0xe0 ,0x24 ,0x7d ,0xf5 ,0x82 , +0xe4 ,0x34 ,0xfc ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0xa3 ,0xf0 ,0x90 ,0xfb ,0xf3 ,0xe0 ,0xff ,0xe4 ,0xef , +0x04 ,0x54 ,0x07 ,0xff ,0x90 ,0xfb ,0xf3 ,0xf0 ,0x90 ,0xfb ,0xf5 ,0xe0 ,0x14 ,0xf0 ,0x78 ,0x89 , +0xed ,0xf6 ,0x08 ,0xec ,0xf6 ,0x12 ,0x31 ,0xf4 ,0x78 ,0x89 ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc ,0x12 , +0x08 ,0xda ,0x80 ,0xa3 ,0x12 ,0x32 ,0x48 ,0x90 ,0xff ,0x93 ,0xe0 ,0x44 ,0x01 ,0xf0 ,0xb2 ,0xb3 , +0x78 ,0x8b ,0x06 ,0xb6 ,0x00 ,0x11 ,0x78 ,0x8b ,0x76 ,0x00 ,0x78 ,0x8c ,0xe6 ,0xf4 ,0x04 ,0x04 , +0xa2 ,0xe0 ,0x92 ,0xb4 ,0x78 ,0x8c ,0xf6 ,0x02 ,0x1e ,0x07 ,0xe4 ,0x90 ,0xfb ,0xf6 ,0xf0 ,0x90 , +0xfb ,0xf5 ,0xe0 ,0x7d ,0x00 ,0xfc ,0xed ,0x44 ,0xcf ,0xfd ,0x12 ,0x1c ,0x3c ,0x12 ,0x31 ,0x69 , +0x22 ,0x12 ,0x30 ,0xe6 ,0xe5 ,0x70 ,0x64 ,0x49 ,0x45 ,0x6f ,0x60 ,0x15 ,0x90 ,0xff ,0x83 ,0xe0 , +0x54 ,0x0f ,0x7d ,0x00 ,0xd3 ,0x95 ,0x70 ,0xed ,0x95 ,0x6f ,0x50 ,0x05 ,0x12 ,0x2f ,0x2f ,0x80 , +0x03 ,0x12 ,0x2f ,0xff ,0x12 ,0x31 ,0x69 ,0x22 ,0x12 ,0x30 ,0xe6 ,0xe5 ,0x70 ,0x64 ,0x49 ,0x45 , +0x6f ,0x60 ,0x05 ,0x12 ,0x30 ,0x39 ,0x80 ,0x0e ,0x90 ,0xff ,0x80 ,0xe0 ,0x44 ,0x08 ,0xf0 ,0x90 , +0xff ,0x83 ,0xe0 ,0x54 ,0x7f ,0xf0 ,0x12 ,0x31 ,0x69 ,0x22 ,0x12 ,0x30 ,0xe6 ,0x8c ,0x54 ,0xec , +0x54 ,0xf0 ,0xb4 ,0x10 ,0x15 ,0x75 ,0x6a ,0x35 ,0x75 ,0x69 ,0xfc ,0x75 ,0x68 ,0x01 ,0xe5 ,0x6a , +0x24 ,0x03 ,0xf5 ,0x6a ,0xe5 ,0x69 ,0x34 ,0x00 ,0xf5 ,0x69 ,0xe4 ,0xf5 ,0x57 ,0xf5 ,0x56 ,0xe5 , +0x56 ,0xc3 ,0x94 ,0x01 ,0x50 ,0x27 ,0xe5 ,0x54 ,0x54 ,0x0f ,0xfc ,0xad ,0x6a ,0xae ,0x69 ,0xaf , +0x68 ,0x12 ,0x0e ,0x77 ,0x8c ,0x55 ,0xec ,0x60 ,0x02 ,0x80 ,0x12 ,0x05 ,0x6a ,0xe5 ,0x6a ,0x70 , +0x02 ,0x05 ,0x69 ,0x05 ,0x57 ,0xe5 ,0x57 ,0x70 ,0x02 ,0x05 ,0x56 ,0x80 ,0xd2 ,0xe5 ,0x54 ,0x54 , +0x0f ,0x24 ,0x9d ,0xf8 ,0xc6 ,0x54 ,0xfe ,0xf6 ,0xe5 ,0x54 ,0x54 ,0x0f ,0x7f ,0x00 ,0xfe ,0x7c , +0x12 ,0x12 ,0x31 ,0xfb ,0xe5 ,0x55 ,0x14 ,0x70 ,0x09 ,0x7d ,0x00 ,0x7c ,0x09 ,0x12 ,0x25 ,0x26 , +0x80 ,0x07 ,0xad ,0x57 ,0x7c ,0x00 ,0x12 ,0x25 ,0x26 ,0x12 ,0x31 ,0x69 ,0x22 ,0x12 ,0x30 ,0xe6 , +0x90 ,0xff ,0xfc ,0xe0 ,0x44 ,0x02 ,0xf0 ,0x90 ,0xff ,0x00 ,0xe0 ,0x30 ,0xe7 ,0x13 ,0x90 ,0xff , +0x83 ,0xe0 ,0x44 ,0x80 ,0xf0 ,0x43 ,0x6d ,0x80 ,0x90 ,0xff ,0xfc ,0xe0 ,0x44 ,0x01 ,0xf0 ,0x80 , +0x11 ,0x90 ,0xff ,0x82 ,0xe0 ,0x44 ,0x08 ,0xf0 ,0x53 ,0x6d ,0x7f ,0x90 ,0xff ,0xfc ,0xe0 ,0x54 , +0xfe ,0xf0 ,0x90 ,0xff ,0x81 ,0xe0 ,0x44 ,0x80 ,0xf0 ,0x12 ,0x25 ,0xd9 ,0x90 ,0xff ,0xfe ,0xe0 , +0x44 ,0x05 ,0xf0 ,0x90 ,0xff ,0xfc ,0xe0 ,0x54 ,0xfd ,0xf0 ,0x12 ,0x31 ,0x69 ,0x22 ,0x12 ,0x30 , +0xe6 ,0x7c ,0x01 ,0x12 ,0x32 ,0xa9 ,0x78 ,0xad ,0xe6 ,0x44 ,0x02 ,0xf6 ,0x74 ,0xfe ,0xfc ,0x04 , +0xfd ,0x12 ,0x1c ,0xa7 ,0x90 ,0xff ,0x5a ,0xe0 ,0x30 ,0xe7 ,0x02 ,0x80 ,0xf7 ,0xe4 ,0xf5 ,0x4e , +0x75 ,0x4d ,0x10 ,0xac ,0x4e ,0xad ,0x4d ,0xe5 ,0x4e ,0x15 ,0x4e ,0x70 ,0x02 ,0x15 ,0x4d ,0xec , +0x4d ,0x60 ,0x02 ,0x80 ,0xee ,0x43 ,0x87 ,0x01 ,0x12 ,0x31 ,0x69 ,0x22 ,0x12 ,0x30 ,0xe6 ,0x7c , +0x02 ,0x12 ,0x31 ,0x75 ,0x78 ,0xad ,0xe6 ,0x54 ,0xfd ,0xf6 ,0x12 ,0x31 ,0x69 ,0x22 ,0x12 ,0x30 , +0xe6 ,0x78 ,0xad ,0xe6 ,0x30 ,0xe0 ,0x2c ,0x78 ,0xad ,0xe6 ,0x30 ,0xe1 ,0x26 ,0x78 ,0xad ,0xe6 , +0xfc ,0xf5 ,0x83 ,0x18 ,0xe6 ,0x44 ,0xf0 ,0xfd ,0x12 ,0x1c ,0x3c ,0x90 ,0xff ,0xfc ,0xe0 ,0x44 , +0x20 ,0xf0 ,0x7c ,0x02 ,0x12 ,0x32 ,0xa9 ,0x78 ,0xad ,0xe6 ,0x54 ,0xfd ,0xf6 ,0x74 ,0x1a ,0x90 , +0xff ,0xfe ,0xf0 ,0x78 ,0xad ,0xe6 ,0xfc ,0xf5 ,0x83 ,0x18 ,0xe6 ,0x44 ,0xf1 ,0xfd ,0x12 ,0x1c , +0x3c ,0x12 ,0x31 ,0x69 ,0x22 ,0x75 ,0x6d ,0x00 ,0x90 ,0xff ,0xff ,0xe0 ,0x60 ,0x03 ,0x43 ,0x6d , +0x01 ,0x75 ,0x6e ,0x00 ,0xe4 ,0xf5 ,0x6c ,0xf5 ,0x6b ,0xe4 ,0xf5 ,0x6f ,0x75 ,0x70 ,0x49 ,0x74 , +0x84 ,0x90 ,0xff ,0x82 ,0xf0 ,0x74 ,0x84 ,0x90 ,0xff ,0x80 ,0xf0 ,0x74 ,0x80 ,0x90 ,0xff ,0x58 , +0xf0 ,0x74 ,0x80 ,0x90 ,0xff ,0x5a ,0xf0 ,0xad ,0x46 ,0xaf ,0x45 ,0x7e ,0x00 ,0xee ,0x24 ,0xfe , +0x50 ,0x03 ,0x02 ,0x21 ,0x24 ,0xe4 ,0xee ,0x75 ,0xf0 ,0x07 ,0xa4 ,0x24 ,0x7f ,0xf5 ,0x82 ,0xe4 , +0x34 ,0xf8 ,0xf5 ,0x83 ,0xe0 ,0xff ,0xe4 ,0xef ,0x54 ,0x80 ,0xfd ,0xe4 ,0xef ,0x54 ,0x0f ,0x14 , +0xff ,0xed ,0x60 ,0x38 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x48 ,0xf5 ,0x82 ,0xe4 ,0x34 , +0xff ,0xf5 ,0x83 ,0x74 ,0x90 ,0xf0 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4a ,0xf5 ,0x82 , +0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0x74 ,0x80 ,0xf0 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4e , +0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0x74 ,0x80 ,0xf0 ,0x80 ,0x34 ,0xe4 ,0xef ,0x75 ,0xf0 , +0x08 ,0xa4 ,0x24 ,0x08 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0x74 ,0x90 ,0xf0 ,0xe4 ,0xef , +0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x0a ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0xe4 , +0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x0e ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 , +0x0e ,0x02 ,0x20 ,0x8d ,0x8d ,0x46 ,0x8e ,0x44 ,0x8f ,0x45 ,0x74 ,0x7f ,0x90 ,0xff ,0xfd ,0xf0 , +0x74 ,0x90 ,0x90 ,0xff ,0xfc ,0xf0 ,0x22 ,0x8c ,0x58 ,0xec ,0x24 ,0xf6 ,0x50 ,0x06 ,0xe5 ,0x58 , +0x24 ,0x37 ,0xfc ,0x22 ,0xe5 ,0x58 ,0x24 ,0x30 ,0xfc ,0x22 ,0x12 ,0x25 ,0x23 ,0xec ,0x70 ,0x03 , +0x02 ,0x22 ,0x5e ,0x75 ,0x5c ,0x03 ,0xae ,0x5b ,0x7f ,0x00 ,0xe5 ,0x5c ,0x15 ,0x5c ,0x64 ,0x80 , +0x24 ,0x7f ,0x50 ,0x35 ,0xef ,0x24 ,0x00 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfb ,0xf5 ,0x83 ,0xe0 ,0xfe , +0x24 ,0xfe ,0x50 ,0x1e ,0xef ,0x7d ,0x00 ,0xfc ,0xe4 ,0xfb ,0x74 ,0x74 ,0xc3 ,0x9c ,0xfa ,0xeb , +0x9d ,0xfb ,0xee ,0x7d ,0x00 ,0xfc ,0xea ,0xc3 ,0x9c ,0xed ,0x64 ,0x80 ,0xcb ,0x64 ,0x80 ,0x9b , +0x50 ,0x02 ,0x80 ,0x05 ,0xef ,0x2e ,0xff ,0x80 ,0xc1 ,0x8e ,0x5b ,0x8f ,0x5a ,0xe5 ,0x5c ,0x64 , +0x80 ,0x24 ,0x7f ,0x50 ,0x03 ,0x02 ,0x22 ,0x5e ,0xe5 ,0x5a ,0x24 ,0x8e ,0x50 ,0x03 ,0x02 ,0x22 , +0x5e ,0x85 ,0x5a ,0x5d ,0x75 ,0x5b ,0x00 ,0xae ,0x5a ,0xaf ,0x5b ,0x90 ,0x35 ,0x9c ,0xe4 ,0x93 , +0xf5 ,0x5c ,0xe5 ,0x5c ,0x15 ,0x5c ,0x64 ,0x80 ,0x24 ,0x7f ,0x50 ,0x18 ,0xee ,0x24 ,0x00 ,0xf5 , +0x82 ,0xe4 ,0x34 ,0xfb ,0xf5 ,0x83 ,0xe0 ,0xfc ,0xef ,0x90 ,0x35 ,0x9c ,0x93 ,0x6c ,0x70 ,0x04 , +0x0e ,0x0f ,0x80 ,0xde ,0x8e ,0x5a ,0x8f ,0x5b ,0xe5 ,0x5c ,0x64 ,0x80 ,0x24 ,0x7f ,0x40 ,0x6e , +0x75 ,0x5e ,0x01 ,0x75 ,0x60 ,0xe8 ,0x75 ,0x5f ,0xff ,0xe5 ,0x5d ,0x24 ,0x02 ,0xf5 ,0x5a ,0x75 , +0x5c ,0x07 ,0xe5 ,0x5c ,0x33 ,0x40 ,0x57 ,0xad ,0x60 ,0xae ,0x5f ,0xaf ,0x5e ,0xe5 ,0x5c ,0xf5 , +0x82 ,0x33 ,0x95 ,0xe0 ,0xf5 ,0x83 ,0x12 ,0x01 ,0xec ,0xc4 ,0x54 ,0x0f ,0xfc ,0x12 ,0x21 ,0x37 , +0xe5 ,0x5a ,0x24 ,0x00 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfb ,0xf5 ,0x83 ,0xec ,0xf0 ,0x05 ,0x5a ,0x05 , +0x5a ,0xad ,0x60 ,0xae ,0x5f ,0xaf ,0x5e ,0xe5 ,0x5c ,0xf5 ,0x82 ,0x33 ,0x95 ,0xe0 ,0xf5 ,0x83 , +0x12 ,0x01 ,0xec ,0x54 ,0x0f ,0xfc ,0x12 ,0x21 ,0x37 ,0xe5 ,0x5a ,0x24 ,0x00 ,0xf5 ,0x82 ,0xe4 , +0x34 ,0xfb ,0xf5 ,0x83 ,0xec ,0xf0 ,0x05 ,0x5a ,0x05 ,0x5a ,0x15 ,0x5c ,0x80 ,0xa4 ,0x74 ,0x02 , +0x90 ,0xf8 ,0x51 ,0xf0 ,0x90 ,0xf8 ,0x6b ,0x79 ,0x75 ,0x7a ,0x35 ,0x7b ,0x27 ,0x78 ,0x01 ,0x12 , +0x03 ,0xf5 ,0x75 ,0x6a ,0x35 ,0x75 ,0x69 ,0xfc ,0x75 ,0x68 ,0x01 ,0xe4 ,0x90 ,0xff ,0x83 ,0xf0 , +0x74 ,0x80 ,0x90 ,0xff ,0x81 ,0xf0 ,0x75 ,0x59 ,0x02 ,0xe5 ,0x59 ,0x75 ,0xf0 ,0x07 ,0xa4 ,0x24 , +0x7f ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xf8 ,0xf5 ,0x83 ,0xe0 ,0x78 ,0x8f ,0xf6 ,0xfc ,0x54 ,0x0f ,0x14 , +0xfc ,0x78 ,0x8f ,0xec ,0xf6 ,0xe5 ,0x59 ,0x75 ,0xf0 ,0x07 ,0xa4 ,0x24 ,0x81 ,0xf5 ,0x82 ,0xe4 , +0x34 ,0xf8 ,0xf5 ,0x83 ,0xe0 ,0x78 ,0x92 ,0x76 ,0xfd ,0x08 ,0x76 ,0xe8 ,0xfc ,0x78 ,0x8f ,0xe6 , +0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x48 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0x78 , +0x8f ,0xe6 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4f ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xec , +0xf0 ,0x78 ,0x92 ,0xe6 ,0xff ,0x08 ,0xe6 ,0x7e ,0x03 ,0xcf ,0xc3 ,0x13 ,0xcf ,0x13 ,0xde ,0xf9 , +0xfe ,0x78 ,0x8f ,0xe6 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x49 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 , +0x83 ,0xee ,0xf0 ,0x78 ,0x8f ,0xe6 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4a ,0xf5 ,0x82 ,0xe4 ,0x34 , +0xff ,0xf5 ,0x83 ,0x74 ,0x80 ,0xf0 ,0x78 ,0x90 ,0xec ,0xf6 ,0x7d ,0x00 ,0x78 ,0x93 ,0xe6 ,0x2c , +0xf6 ,0x18 ,0xe6 ,0x3d ,0xf6 ,0x78 ,0x92 ,0xe6 ,0xfd ,0x08 ,0xe6 ,0x7c ,0x03 ,0xcd ,0xc3 ,0x13 , +0xcd ,0x13 ,0xdc ,0xf9 ,0xfc ,0x78 ,0x8f ,0xe6 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4d ,0xf5 ,0x82 , +0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xec ,0xf0 ,0x78 ,0x8f ,0xe6 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4e , +0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0x78 ,0x92 ,0xe6 ,0xfd ,0x08 ,0xe6 ,0xfc , +0x78 ,0x8f ,0xe6 ,0xff ,0x7e ,0x00 ,0xee ,0x24 ,0xfe ,0x50 ,0x03 ,0x02 ,0x24 ,0xdd ,0xe4 ,0xee , +0x75 ,0xf0 ,0x07 ,0xa4 ,0x24 ,0x7f ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xf8 ,0xf5 ,0x83 ,0xe0 ,0xff ,0xe4 , +0xef ,0x54 ,0x80 ,0xfa ,0xe4 ,0xef ,0x54 ,0x0f ,0x14 ,0xff ,0xe4 ,0xee ,0x75 ,0xf0 ,0x07 ,0xa4 , +0x24 ,0x81 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xf8 ,0xf5 ,0x83 ,0xe0 ,0x78 ,0x90 ,0xf6 ,0xe4 ,0xee ,0x13 , +0x13 ,0x54 ,0x80 ,0x24 ,0xf0 ,0xf8 ,0xe4 ,0x34 ,0xfd ,0xf9 ,0xe8 ,0xfc ,0xe9 ,0xfd ,0x8a ,0x5a , +0xea ,0x70 ,0x03 ,0x02 ,0x24 ,0x4a ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x48 ,0xf5 ,0x82 , +0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0x78 ,0x90 ,0xe6 ,0xfa ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 , +0xa4 ,0x24 ,0x4f ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xea ,0xf0 ,0xed ,0xfb ,0xec ,0x7a , +0x03 ,0xcb ,0xc3 ,0x13 ,0xcb ,0x13 ,0xda ,0xf9 ,0xfa ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 , +0x49 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xea ,0xf0 ,0x78 ,0x90 ,0xe6 ,0x7b ,0x00 ,0xfa , +0xec ,0x2a ,0xfc ,0xed ,0x3b ,0xfd ,0xfb ,0xec ,0x7a ,0x03 ,0xcb ,0xc3 ,0x13 ,0xcb ,0x13 ,0xda , +0xf9 ,0xfa ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4d ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 , +0x83 ,0xea ,0xf0 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4a ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff , +0xf5 ,0x83 ,0x74 ,0x80 ,0xf0 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x4e ,0xf5 ,0x82 ,0xe4 , +0x34 ,0xff ,0xf5 ,0x83 ,0x74 ,0x80 ,0xf0 ,0x02 ,0x24 ,0xd9 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 , +0x24 ,0x08 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0x78 ,0x90 ,0xe6 ,0xfa ,0xe4 , +0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x0f ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xea ,0xf0 , +0xed ,0xfb ,0xec ,0x7a ,0x03 ,0xcb ,0xc3 ,0x13 ,0xcb ,0x13 ,0xda ,0xf9 ,0xfa ,0xe4 ,0xef ,0x75 , +0xf0 ,0x08 ,0xa4 ,0x24 ,0x09 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xea ,0xf0 ,0x78 ,0x90 , +0xe6 ,0x7b ,0x00 ,0xfa ,0xec ,0x2a ,0xfc ,0xed ,0x3b ,0xfd ,0xfb ,0xec ,0x7a ,0x03 ,0xcb ,0xc3 , +0x13 ,0xcb ,0x13 ,0xda ,0xf9 ,0xfa ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x0d ,0xf5 ,0x82 , +0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xea ,0xf0 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x0a ,0xf5 , +0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0xe4 ,0xef ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x0e , +0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe4 ,0xf0 ,0x0e ,0x02 ,0x23 ,0x66 ,0x8e ,0x59 ,0x78 , +0x92 ,0xed ,0xf6 ,0x08 ,0xec ,0xf6 ,0x78 ,0x8f ,0xef ,0xf6 ,0x12 ,0x20 ,0x55 ,0x22 ,0x8c ,0x26 , +0xec ,0x30 ,0xe7 ,0x18 ,0xe5 ,0x26 ,0x54 ,0x0f ,0x14 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x48 ,0xf5 , +0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe0 ,0x54 ,0xdf ,0xf0 ,0x80 ,0x16 ,0xe5 ,0x26 ,0x54 ,0x0f , +0x14 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x08 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe0 ,0x54 , +0xdf ,0xf0 ,0x22 ,0x7c ,0x00 ,0x22 ,0xec ,0x90 ,0xfc ,0x37 ,0xf0 ,0x8c ,0x24 ,0xed ,0x24 ,0x03 , +0xf5 ,0x25 ,0x7d ,0x00 ,0xd3 ,0x95 ,0x72 ,0xed ,0x95 ,0x71 ,0x40 ,0x03 ,0x85 ,0x72 ,0x25 ,0xe5 , +0x25 ,0x24 ,0xb7 ,0x50 ,0x09 ,0x75 ,0x25 ,0x03 ,0x74 ,0x02 ,0x90 ,0xfc ,0x37 ,0xf0 ,0xac ,0x25 , +0x12 ,0x30 ,0x24 ,0x22 ,0xe4 ,0xf5 ,0x6c ,0xf5 ,0x6b ,0x12 ,0x25 ,0x5d ,0x22 ,0x90 ,0xfc ,0x35 , +0xe0 ,0x65 ,0x73 ,0x60 ,0x0e ,0x74 ,0x04 ,0x90 ,0xfc ,0x37 ,0xf0 ,0xe4 ,0xf5 ,0x6b ,0x75 ,0x6c , +0x03 ,0x80 ,0x46 ,0x7d ,0x73 ,0xe4 ,0xfe ,0xff ,0x79 ,0x35 ,0x7a ,0xfc ,0x7b ,0x01 ,0x74 ,0x05 , +0x78 ,0x00 ,0x12 ,0x03 ,0x3f ,0xe5 ,0x6c ,0x24 ,0x03 ,0xf5 ,0x6c ,0xe5 ,0x6b ,0x34 ,0x00 ,0xf5 , +0x6b ,0xe5 ,0x6c ,0xd3 ,0x95 ,0x72 ,0xe5 ,0x6b ,0x95 ,0x71 ,0x40 ,0x06 ,0x85 ,0x72 ,0x6c ,0x85 , +0x71 ,0x6b ,0xd3 ,0xe5 ,0x6c ,0x94 ,0x48 ,0xe5 ,0x6b ,0x94 ,0x00 ,0x40 ,0x0c ,0x74 ,0x02 ,0x90 , +0xfc ,0x37 ,0xf0 ,0xe4 ,0xf5 ,0x6b ,0x75 ,0x6c ,0x03 ,0xac ,0x6c ,0x12 ,0x30 ,0x24 ,0x22 ,0xec , +0x90 ,0xfc ,0x37 ,0xf0 ,0xe4 ,0xf5 ,0x6c ,0xf5 ,0x6b ,0x8c ,0x32 ,0xec ,0x60 ,0x05 ,0x12 ,0x30 , +0x15 ,0x80 ,0x05 ,0x7c ,0x00 ,0x12 ,0x30 ,0x24 ,0x22 ,0x90 ,0xff ,0x93 ,0xe0 ,0x44 ,0x01 ,0xf0 , +0xb2 ,0xb3 ,0x90 ,0xff ,0x04 ,0xe0 ,0xf5 ,0x4a ,0x90 ,0xff ,0x06 ,0xe0 ,0xfd ,0xa3 ,0xe0 ,0xed , +0x7d ,0x00 ,0xfc ,0x7d ,0x00 ,0xfc ,0x90 ,0xff ,0x06 ,0xe0 ,0xff ,0xa3 ,0xe0 ,0x7e ,0x00 ,0xff , +0xe4 ,0xfe ,0xec ,0x4e ,0xfc ,0xed ,0x4f ,0xfd ,0xc3 ,0xec ,0x94 ,0x48 ,0xed ,0x94 ,0x00 ,0x50 , +0x22 ,0x90 ,0xff ,0x06 ,0xe0 ,0xfd ,0xa3 ,0xe0 ,0xed ,0x7d ,0x00 ,0xfc ,0x7d ,0x00 ,0xfc ,0x90 , +0xff ,0x06 ,0xe0 ,0xff ,0xa3 ,0xe0 ,0x7e ,0x00 ,0xff ,0xe4 ,0xfe ,0xec ,0x4e ,0xfc ,0xed ,0x4f , +0xfd ,0x80 ,0x04 ,0xe4 ,0xfd ,0x7c ,0x48 ,0x8c ,0x72 ,0x8d ,0x71 ,0x90 ,0xff ,0x02 ,0xe0 ,0xfd , +0xa3 ,0xe0 ,0xed ,0x7d ,0x00 ,0xfc ,0x7d ,0x00 ,0xfc ,0x90 ,0xff ,0x02 ,0xe0 ,0xff ,0xa3 ,0xe0 , +0x7e ,0x00 ,0xff ,0xe4 ,0xfe ,0xec ,0x4e ,0xf5 ,0x4c ,0xed ,0x4f ,0xf5 ,0x4b ,0x75 ,0x6a ,0x35 , +0x75 ,0x69 ,0xfc ,0x75 ,0x68 ,0x01 ,0x7d ,0x35 ,0x7e ,0xfc ,0x7f ,0x01 ,0x79 ,0x73 ,0xe4 ,0xfa , +0xfb ,0x74 ,0x05 ,0x78 ,0x00 ,0x12 ,0x03 ,0x3f ,0x75 ,0x49 ,0x00 ,0xe5 ,0x49 ,0x24 ,0xfe ,0x40 , +0x19 ,0xad ,0x6a ,0xae ,0x69 ,0xaf ,0x68 ,0xe4 ,0x12 ,0x03 ,0x0f ,0x05 ,0x49 ,0x0d ,0xed ,0x70 , +0x01 ,0x0e ,0x8d ,0x6a ,0x8e ,0x69 ,0x8f ,0x68 ,0x80 ,0xe1 ,0x75 ,0x6a ,0x35 ,0x75 ,0x69 ,0xfc , +0x75 ,0x68 ,0x01 ,0x90 ,0xff ,0x00 ,0xe0 ,0x54 ,0x60 ,0xb4 ,0x00 ,0x02 ,0x80 ,0x06 ,0xd3 ,0x50 , +0x03 ,0x02 ,0x2c ,0x6d ,0xe5 ,0x4a ,0x54 ,0x0f ,0xf5 ,0x49 ,0xe5 ,0x4a ,0x54 ,0x80 ,0xa2 ,0xe0 , +0x92 ,0x02 ,0x90 ,0xff ,0x01 ,0xe0 ,0x12 ,0x01 ,0x81 ,0x00 ,0x0b ,0x2c ,0x68 ,0x26 ,0xe5 ,0x28 , +0x03 ,0x2c ,0x68 ,0x29 ,0x0f ,0x2c ,0x68 ,0x29 ,0xf2 ,0x2a ,0x26 ,0x2b ,0x8d ,0x2b ,0x90 ,0x2b , +0xd0 ,0x2c ,0x11 ,0x2c ,0x3f ,0xe5 ,0x6d ,0x30 ,0xe7 ,0x0e ,0xe5 ,0x4c ,0x45 ,0x4b ,0x70 ,0x08 , +0xe5 ,0x72 ,0x64 ,0x02 ,0x45 ,0x71 ,0x60 ,0x03 ,0x02 ,0x2c ,0x6a ,0x90 ,0xff ,0x00 ,0xe0 ,0x54 , +0x1f ,0xb4 ,0x00 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x29 ,0xe5 ,0x4a ,0x60 ,0x03 ,0x02 ,0x28 ,0x00 , +0xad ,0x6a ,0xae ,0x69 ,0xaf ,0x68 ,0x74 ,0x01 ,0x12 ,0x03 ,0x0f ,0x78 ,0xad ,0xe6 ,0x30 ,0xe0 , +0x0b ,0xad ,0x6a ,0xae ,0x69 ,0xaf ,0x68 ,0x74 ,0x02 ,0x12 ,0x03 ,0x0f ,0x7c ,0x02 ,0x12 ,0x30 , +0x24 ,0x22 ,0xb4 ,0x01 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x1b ,0xe5 ,0x6d ,0x20 ,0xe1 ,0x07 ,0xe5 , +0x4a ,0x60 ,0x03 ,0x02 ,0x28 ,0x00 ,0xe5 ,0x4a ,0x24 ,0xfe ,0x50 ,0x03 ,0x02 ,0x28 ,0x00 ,0x7c , +0x02 ,0x12 ,0x30 ,0x24 ,0x22 ,0xb4 ,0x02 ,0x02 ,0x80 ,0x06 ,0xd3 ,0x50 ,0x03 ,0x02 ,0x27 ,0xfe , +0xe5 ,0x6d ,0x20 ,0xe1 ,0x0d ,0xe5 ,0x4a ,0x60 ,0x09 ,0xe5 ,0x4a ,0x64 ,0x80 ,0x60 ,0x03 ,0x02 , +0x28 ,0x00 ,0xac ,0x4a ,0x12 ,0x30 ,0xab ,0x40 ,0x03 ,0x02 ,0x28 ,0x00 ,0xe5 ,0x49 ,0x70 ,0x25 , +0x30 ,0x02 ,0x11 ,0x90 ,0xff ,0x80 ,0xe0 ,0x54 ,0x08 ,0xad ,0x6a ,0xae ,0x69 ,0xaf ,0x68 ,0x12 , +0x03 ,0x0f ,0x80 ,0x0f ,0x90 ,0xff ,0x82 ,0xe0 ,0x54 ,0x08 ,0xad ,0x6a ,0xae ,0x69 ,0xaf ,0x68 , +0x12 ,0x03 ,0x0f ,0x80 ,0x3d ,0x15 ,0x49 ,0x30 ,0x02 ,0x1d ,0xe5 ,0x49 ,0x75 ,0xf0 ,0x08 ,0xa4 , +0x24 ,0x48 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe0 ,0x54 ,0x08 ,0xad ,0x6a ,0xae ,0x69 , +0xaf ,0x68 ,0x12 ,0x03 ,0x0f ,0x80 ,0x1b ,0xe5 ,0x49 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x08 ,0xf5 , +0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe0 ,0x54 ,0x08 ,0xad ,0x6a ,0xae ,0x69 ,0xaf ,0x68 ,0x12 , +0x03 ,0x0f ,0xad ,0x6a ,0xae ,0x69 ,0xaf ,0x68 ,0x12 ,0x01 ,0xe6 ,0x60 ,0x0b ,0xad ,0x6a ,0xae , +0x69 ,0xaf ,0x68 ,0x74 ,0x01 ,0x12 ,0x03 ,0x0f ,0x7c ,0x02 ,0x12 ,0x30 ,0x24 ,0x22 ,0x80 ,0x00 , +0x02 ,0x2c ,0x6a ,0xe5 ,0x6d ,0x20 ,0xe7 ,0x06 ,0xe5 ,0x72 ,0x45 ,0x71 ,0x60 ,0x03 ,0x02 ,0x2c , +0x6a ,0x90 ,0xff ,0x00 ,0xe0 ,0x54 ,0x1f ,0xb4 ,0x00 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x1a ,0xe5 , +0x4c ,0x14 ,0x45 ,0x4b ,0x70 ,0x04 ,0xe5 ,0x4a ,0x60 ,0x03 ,0x02 ,0x29 ,0x0c ,0x78 ,0xad ,0xe6 , +0x54 ,0xfe ,0xf6 ,0x7c ,0x00 ,0x12 ,0x30 ,0x24 ,0x22 ,0xb4 ,0x01 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 , +0x2a ,0xe5 ,0x6d ,0x20 ,0xe1 ,0x08 ,0xe5 ,0x6d ,0x20 ,0xe0 ,0x03 ,0x02 ,0x29 ,0x0c ,0xe5 ,0x6d , +0x30 ,0xe0 ,0x04 ,0xe5 ,0x4a ,0x70 ,0x0b ,0xe5 ,0x6d ,0x30 ,0xe1 ,0x09 ,0xe5 ,0x4a ,0x24 ,0xfe , +0x50 ,0x03 ,0x02 ,0x29 ,0x0c ,0x7c ,0x00 ,0x12 ,0x30 ,0x24 ,0x22 ,0xb4 ,0x02 ,0x02 ,0x80 ,0x06 , +0xd3 ,0x50 ,0x03 ,0x02 ,0x29 ,0x0a ,0xe5 ,0x4c ,0x45 ,0x4b ,0x60 ,0x03 ,0x02 ,0x29 ,0x0c ,0xac , +0x4a ,0x12 ,0x30 ,0xab ,0x40 ,0x03 ,0x02 ,0x29 ,0x0c ,0xe5 ,0x6d ,0x20 ,0xe1 ,0x07 ,0xe5 ,0x6d , +0x20 ,0xe0 ,0x02 ,0x80 ,0x77 ,0xe5 ,0x6d ,0x30 ,0xe0 ,0x06 ,0xe5 ,0x49 ,0x60 ,0x02 ,0x80 ,0x6c , +0xe5 ,0x49 ,0x70 ,0x0f ,0x90 ,0xff ,0x82 ,0xe0 ,0x54 ,0xf7 ,0xf0 ,0x90 ,0xff ,0x80 ,0xe0 ,0x54 , +0xf7 ,0xf0 ,0x22 ,0xe5 ,0x49 ,0xb4 ,0x01 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x09 ,0x7d ,0x01 ,0x7c , +0x03 ,0x12 ,0x0f ,0x09 ,0x80 ,0x11 ,0xb4 ,0x02 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x09 ,0x7d ,0x01 , +0x7c ,0x04 ,0x12 ,0x0f ,0x09 ,0x80 ,0x00 ,0x15 ,0x49 ,0x30 ,0x02 ,0x15 ,0xe5 ,0x49 ,0x75 ,0xf0 , +0x08 ,0xa4 ,0x24 ,0x48 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe0 ,0x54 ,0xf7 ,0xf0 ,0x80 , +0x13 ,0xe5 ,0x49 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x08 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 , +0xe0 ,0x54 ,0xf7 ,0xf0 ,0x7c ,0x00 ,0x12 ,0x30 ,0x24 ,0x22 ,0x80 ,0x00 ,0x02 ,0x2c ,0x6a ,0xe5 , +0x6d ,0x20 ,0xe7 ,0x06 ,0xe5 ,0x72 ,0x45 ,0x71 ,0x60 ,0x03 ,0x02 ,0x2c ,0x6a ,0x90 ,0xff ,0x00 , +0xe0 ,0x54 ,0x1f ,0xb4 ,0x00 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x1a ,0xe5 ,0x4c ,0x14 ,0x45 ,0x4b , +0x70 ,0x04 ,0xe5 ,0x4a ,0x60 ,0x03 ,0x02 ,0x29 ,0xef ,0x78 ,0xad ,0xe6 ,0x44 ,0x01 ,0xf6 ,0x7c , +0x00 ,0x12 ,0x30 ,0x24 ,0x22 ,0xb4 ,0x01 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x29 ,0xe5 ,0x6d ,0x20 , +0xe1 ,0x08 ,0xe5 ,0x6d ,0x20 ,0xe0 ,0x03 ,0x02 ,0x29 ,0xef ,0xe5 ,0x6d ,0x30 ,0xe0 ,0x04 ,0xe5 , +0x49 ,0x70 ,0x0b ,0xe5 ,0x6d ,0x30 ,0xe1 ,0x08 ,0xe5 ,0x49 ,0x24 ,0xfe ,0x50 ,0x02 ,0x80 ,0x7f , +0x7c ,0x00 ,0x12 ,0x30 ,0x24 ,0x22 ,0xb4 ,0x02 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x6f ,0xe5 ,0x4c , +0x45 ,0x4b ,0x60 ,0x02 ,0x80 ,0x69 ,0xac ,0x4a ,0x12 ,0x30 ,0xab ,0x40 ,0x02 ,0x80 ,0x60 ,0xe5 , +0x6d ,0x20 ,0xe1 ,0x07 ,0xe5 ,0x6d ,0x20 ,0xe0 ,0x02 ,0x80 ,0x54 ,0xe5 ,0x49 ,0x70 ,0x14 ,0x30 , +0x02 ,0x09 ,0x90 ,0xff ,0x80 ,0xe0 ,0x44 ,0x08 ,0xf0 ,0x80 ,0x07 ,0x90 ,0xff ,0x82 ,0xe0 ,0x44 , +0x08 ,0xf0 ,0x22 ,0xe5 ,0x6d ,0x30 ,0xe1 ,0x33 ,0x15 ,0x49 ,0x30 ,0x02 ,0x15 ,0xe5 ,0x49 ,0x75 , +0xf0 ,0x08 ,0xa4 ,0x24 ,0x48 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 ,0x83 ,0xe0 ,0x44 ,0x08 ,0xf0 , +0x80 ,0x13 ,0xe5 ,0x49 ,0x75 ,0xf0 ,0x08 ,0xa4 ,0x24 ,0x08 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xff ,0xf5 , +0x83 ,0xe0 ,0x44 ,0x08 ,0xf0 ,0x7c ,0x00 ,0x12 ,0x30 ,0x24 ,0x22 ,0x80 ,0x02 ,0x80 ,0x00 ,0x02 , +0x2c ,0x6a ,0xe5 ,0x6d ,0x20 ,0xe7 ,0x12 ,0xe5 ,0x72 ,0x45 ,0x71 ,0x70 ,0x0c ,0xe5 ,0x4a ,0x70 , +0x08 ,0x90 ,0xff ,0x00 ,0xe0 ,0x54 ,0x1f ,0x60 ,0x03 ,0x02 ,0x2c ,0x6a ,0xe5 ,0x4c ,0x90 ,0xff , +0xff ,0xf0 ,0x90 ,0xff ,0xff ,0xe0 ,0x60 ,0x05 ,0x43 ,0x6d ,0x01 ,0x80 ,0x03 ,0x53 ,0x6d ,0xfe , +0x7c ,0x00 ,0x12 ,0x30 ,0x24 ,0x22 ,0xe5 ,0x6d ,0x30 ,0xe7 ,0x0e ,0xe5 ,0x72 ,0x45 ,0x71 ,0x60 , +0x08 ,0x90 ,0xff ,0x00 ,0xe0 ,0x54 ,0x1f ,0x60 ,0x03 ,0x02 ,0x2c ,0x6a ,0xad ,0x4b ,0xe5 ,0x4c , +0xed ,0x7d ,0x00 ,0xfc ,0x7d ,0x00 ,0xfc ,0xbd ,0x00 ,0x02 ,0x80 ,0x03 ,0x02 ,0x2b ,0x88 ,0xb4 , +0x01 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 ,0x32 ,0xe5 ,0x4a ,0x70 ,0x05 ,0xe5 ,0x4c ,0xfc ,0x60 ,0x03 , +0x02 ,0x2b ,0x8a ,0x75 ,0x6a ,0x40 ,0x75 ,0x69 ,0xf8 ,0x75 ,0x68 ,0x01 ,0xd3 ,0xe5 ,0x72 ,0x94 , +0x12 ,0xe5 ,0x71 ,0x94 ,0x00 ,0x40 ,0x06 ,0xe4 ,0xfd ,0x7c ,0x12 ,0x80 ,0x04 ,0xac ,0x72 ,0xad , +0x71 ,0x8c ,0x70 ,0x8d ,0x6f ,0x12 ,0x30 ,0x39 ,0x22 ,0xb4 ,0x02 ,0x02 ,0x80 ,0x03 ,0xd3 ,0x40 , +0x59 ,0xe5 ,0x4a ,0x60 ,0x03 ,0x02 ,0x2b ,0x8a ,0xe5 ,0x4c ,0xfc ,0x70 ,0x27 ,0x75 ,0x6a ,0x52 , +0x75 ,0x69 ,0xf8 ,0x75 ,0x68 ,0x01 ,0xd3 ,0xe5 ,0x72 ,0x94 ,0x19 ,0xe5 ,0x71 ,0x94 ,0x00 ,0x40 , +0x06 ,0xe4 ,0xfd ,0x7c ,0x19 ,0x80 ,0x04 ,0xac ,0x72 ,0xad ,0x71 ,0x8c ,0x70 ,0x8d ,0x6f ,0x12 , +0x30 ,0x39 ,0x80 ,0x25 ,0x75 ,0x6a ,0x6b ,0x75 ,0x69 ,0xf8 ,0x75 ,0x68 ,0x01 ,0xd3 ,0xe5 ,0x72 , +0x94 ,0x27 ,0xe5 ,0x71 ,0x94 ,0x00 ,0x40 ,0x06 ,0xe4 ,0xfd ,0x7c ,0x27 ,0x80 ,0x04 ,0xac ,0x72 , +0xad ,0x71 ,0x8c ,0x70 ,0x8d ,0x6f ,0x12 ,0x30 ,0x39 ,0x22 ,0xb4 ,0x03 ,0x02 ,0x80 ,0x06 ,0xd3 , +0x50 ,0x03 ,0x02 ,0x2b ,0x88 ,0xe5 ,0x4c ,0xf5 ,0x49 ,0x70 ,0x0f ,0x90 ,0xff ,0x04 ,0xe0 ,0xfd , +0xa3 ,0xe0 ,0x4d ,0x60 ,0x03 ,0x02 ,0x2b ,0x8a ,0x80 ,0x18 ,0x90 ,0xfb ,0x02 ,0xe0 ,0xfd ,0xa3 , +0xe0 ,0xfc ,0x90 ,0xff ,0x05 ,0xe0 ,0x6c ,0x70 ,0x07 ,0x90 ,0xff ,0x04 ,0xe0 ,0x6d ,0x60 ,0x02 , +0x80 ,0x68 ,0xe4 ,0xf5 ,0x70 ,0xf5 ,0x6f ,0x7f ,0x00 ,0xe5 ,0x49 ,0x14 ,0xc5 ,0x49 ,0x60 ,0x0f , +0xef ,0x24 ,0x00 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfb ,0xf5 ,0x83 ,0xe0 ,0x2f ,0xff ,0x80 ,0xea ,0x8f , +0x4a ,0xe5 ,0x4a ,0x24 ,0x00 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfb ,0xf5 ,0x83 ,0xe0 ,0x7d ,0x00 ,0xd3 , +0x95 ,0x72 ,0xed ,0x95 ,0x71 ,0x40 ,0x06 ,0xac ,0x72 ,0xad ,0x71 ,0x80 ,0x0f ,0xe5 ,0x4a ,0x24 , +0x00 ,0xf5 ,0x82 ,0xe4 ,0x34 ,0xfb ,0xf5 ,0x83 ,0xe0 ,0x7d ,0x00 ,0xfc ,0x8c ,0x70 ,0x8d ,0x6f , +0xe5 ,0x4a ,0x24 ,0x00 ,0xfc ,0xe4 ,0x34 ,0xfb ,0xfd ,0xfe ,0xec ,0xfd ,0x7f ,0x01 ,0x8d ,0x6a , +0x8e ,0x69 ,0x8f ,0x68 ,0x12 ,0x30 ,0x39 ,0x22 ,0x80 ,0x00 ,0x02 ,0x2c ,0x6a ,0x02 ,0x2c ,0x6a , +0xe5 ,0x6d ,0x30 ,0xe7 ,0x19 ,0xe5 ,0x72 ,0x14 ,0x45 ,0x71 ,0x70 ,0x12 ,0xe5 ,0x4a ,0x70 ,0x0e , +0xe5 ,0x4c ,0x45 ,0x4b ,0x70 ,0x08 ,0x90 ,0xff ,0x00 ,0xe0 ,0x54 ,0x1f ,0x60 ,0x03 ,0x02 ,0x2c , +0x6a ,0xe5 ,0x6d ,0x20 ,0xe0 ,0x08 ,0xe5 ,0x6d ,0x20 ,0xe1 ,0x03 ,0x02 ,0x2c ,0x6a ,0x75 ,0x6a , +0x6e ,0xe4 ,0xf5 ,0x69 ,0xf5 ,0x68 ,0xe4 ,0xf5 ,0x6f ,0x04 ,0xf5 ,0x70 ,0x12 ,0x30 ,0x39 ,0x22 , +0xe5 ,0x6d ,0x20 ,0xe7 ,0x12 ,0xe5 ,0x72 ,0x45 ,0x71 ,0x70 ,0x0c ,0xe5 ,0x4a ,0x70 ,0x08 ,0x90 , +0xff ,0x00 ,0xe0 ,0x54 ,0x1f ,0x60 ,0x03 ,0x02 ,0x2c ,0x6a ,0xe5 ,0x6d ,0x20 ,0xe0 ,0x07 ,0xe5 , +0x6d ,0x20 ,0xe1 ,0x02 ,0x80 ,0x74 ,0x85 ,0x4c ,0x6e ,0xe5 ,0x6e ,0x70 ,0x08 ,0x43 ,0x6d ,0x01 , +0x53 ,0x6d ,0xfd ,0x80 ,0x06 ,0x53 ,0x6d ,0xfe ,0x43 ,0x6d ,0x02 ,0x7c ,0x00 ,0x12 ,0x30 ,0x24 , +0x22 ,0xe5 ,0x6d ,0x30 ,0xe7 ,0x1a ,0xe5 ,0x72 ,0x14 ,0x45 ,0x71 ,0x70 ,0x13 ,0xe5 ,0x4a ,0x70 , +0x0f ,0xe5 ,0x4c ,0x45 ,0x4b ,0x70 ,0x09 ,0x90 ,0xff ,0x00 ,0xe0 ,0x54 ,0x1f ,0x14 ,0x60 ,0x02 , +0x80 ,0x38 ,0xe5 ,0x6d ,0x20 ,0xe1 ,0x02 ,0x80 ,0x31 ,0x7c ,0x01 ,0x12 ,0x30 ,0x24 ,0x22 ,0xe5 , +0x6d ,0x20 ,0xe7 ,0x15 ,0xe5 ,0x72 ,0x45 ,0x71 ,0x70 ,0x0f ,0xe5 ,0x4c ,0x45 ,0x4b ,0x70 ,0x09 , +0x90 ,0xff ,0x00 ,0xe0 ,0x54 ,0x1f ,0x14 ,0x60 ,0x02 ,0x80 ,0x0f ,0xe5 ,0x6d ,0x20 ,0xe1 ,0x02 , +0x80 ,0x08 ,0x7c ,0x00 ,0x12 ,0x30 ,0x24 ,0x22 ,0x80 ,0x00 ,0x02 ,0x2f ,0x2b ,0xb4 ,0x40 ,0x02 , +0x80 ,0x06 ,0xd3 ,0x50 ,0x03 ,0x02 ,0x2f ,0x21 ,0x90 ,0xff ,0x01 ,0xe0 ,0x90 ,0xfc ,0x35 ,0xf0 , +0xe5 ,0x4a ,0x90 ,0xfc ,0x36 ,0xf0 ,0xe4 ,0x90 ,0xfc ,0x37 ,0xf0 ,0xe5 ,0x6a ,0x24 ,0x03 ,0xf5 , +0x6a ,0xe5 ,0x69 ,0x34 ,0x00 ,0xf5 ,0x69 ,0xad ,0x4b ,0xe5 ,0x4c ,0x85 ,0x6a ,0x82 ,0x85 ,0x69 , +0x83 ,0xcd ,0xf0 ,0xa3 ,0xcd ,0xf0 ,0x90 ,0xff ,0x01 ,0xe0 ,0x12 ,0x01 ,0xb7 ,0x2c ,0xd8 ,0x01 , +0x2c ,0xfe ,0x02 ,0x2d ,0x28 ,0x03 ,0x2d ,0x52 ,0x04 ,0x2d ,0xa0 ,0x05 ,0x2d ,0xdd ,0x06 ,0x2e , +0x03 ,0x07 ,0x2e ,0x29 ,0x08 ,0x2e ,0x55 ,0x09 ,0x2e ,0x7b ,0x0b ,0x2e ,0xa1 ,0x0c ,0x2e ,0xb0 , +0x80 ,0x2e ,0xb0 ,0x81 ,0x00 ,0x00 ,0x2f ,0x0e ,0xe5 ,0x6d ,0x20 ,0xe7 ,0x06 ,0x7c ,0x05 ,0x12 , +0x25 ,0xbf ,0x22 ,0x7d ,0x24 ,0x7e ,0x35 ,0x7f ,0x02 ,0x79 ,0x38 ,0x7a ,0xfc ,0x7b ,0x01 ,0x74 , +0x08 ,0x78 ,0x00 ,0x12 ,0x03 ,0x3f ,0x7d ,0x08 ,0x7c ,0x00 ,0x12 ,0x25 ,0x26 ,0x22 ,0xe5 ,0x6d , +0x20 ,0xe7 ,0x06 ,0x7c ,0x05 ,0x12 ,0x25 ,0xbf ,0x22 ,0xe5 ,0x4a ,0xb4 ,0x03 ,0x00 ,0x40 ,0x10 , +0xb4 ,0x05 ,0x00 ,0x50 ,0x0b ,0xe5 ,0x4a ,0x7f ,0x00 ,0xfe ,0x7c ,0x10 ,0x12 ,0x31 ,0xfb ,0x22 , +0x7d ,0x00 ,0x7c ,0x07 ,0x12 ,0x25 ,0x26 ,0x22 ,0xe5 ,0x6d ,0x20 ,0xe7 ,0x06 ,0x7c ,0x05 ,0x12 , +0x25,0xbf,0x22,0xe5,0x4a,0xb4,0x03,0x00,0x40,0x10,0xb4,0x05,0x00,0x50,0x0b,0xe5,
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Parts of this message are not shown here. View the raw message.
ChangeSet 1.1938.446.4, 2004/12/15 14:13:33-08:00, [email protected]
[PATCH] USB: fix sparse and compiler warnings in ti_usb_3410_5052.c
drivers/usb/serial/ti_usb_3410_5052.c | 22 +++++++++++----------- 1 files changed, 11 insertions(+), 11 deletions(-)
drivers/usb/serial/ti_usb_3410_5052.c +11 -11
@@ -179,7 +179,7 @@static int ti_get_serial_info (struct ti_port *tport,struct serial_struct __user *ret_arg);static int ti_set_serial_info (struct ti_port *tport, -struct serial_struct *new_arg); +struct serial_struct __user *new_arg);static void ti_handle_new_msr (struct ti_port *tport,__u8 msr);static void ti_drain (struct ti_port *tport,unsigned long timeout,int flush);
@@ -200,10 +200,10 @@/* circular buffer */ static struct circ_buf *ti_buf_alloc (void ); -static inline void ti_buf_free (struct circ_buf *cb); -static inline void ti_buf_clear (struct circ_buf *cb); -static inline int ti_buf_data_avail (struct circ_buf *cb); -static inline int ti_buf_space_avail (struct circ_buf *cb); +static void ti_buf_free (struct circ_buf *cb); +static void ti_buf_clear (struct circ_buf *cb); +static int ti_buf_data_avail (struct circ_buf *cb); +static int ti_buf_space_avail (struct circ_buf *cb);static int ti_buf_put (struct circ_buf *cb,const char *buf,int count);static int ti_buf_get (struct circ_buf *cb,char *buf,int count);
@@ -841,7 +841,7 @@case TIOCSSERIAL :dbg ("%s - (%d) TIOCSSERIAL" , __FUNCTION__, port->number); -return ti_set_serial_info (tport, (struct serial_struct *)arg); +return ti_set_serial_info (tport, (struct serial_struct __user *)arg);break ;case TIOCMIWAIT :
@@ -1428,7 +1428,7 @@static int ti_set_serial_info (struct ti_port *tport, -struct serial_struct *new_arg) +struct serial_struct __user *new_arg) {struct usb_serial_port *port = tport->tp_port;struct serial_struct new_serial;
@@ -1734,7 +1734,7 @@* Free the buffer and all associated memory. */ -static inline void ti_buf_free (struct circ_buf *cb) +static void ti_buf_free (struct circ_buf *cb) {kfree (cb->buf);kfree (cb);
@@ -1747,7 +1747,7 @@* Clear out all data in the circular buffer. */ -static inline void ti_buf_clear (struct circ_buf *cb) +static void ti_buf_clear (struct circ_buf *cb) { cb->head = cb->tail =0 ; }
@@ -1760,7 +1760,7 @@* buffer. */ -static inline int ti_buf_data_avail (struct circ_buf *cb) +static int ti_buf_data_avail (struct circ_buf *cb) {return CIRC_CNT (cb->head,cb->tail,TI_WRITE_BUF_SIZE ); }
@@ -1773,7 +1773,7 @@* buffer. */ -static inline int ti_buf_space_avail (struct circ_buf *cb) +static int ti_buf_space_avail (struct circ_buf *cb) {return CIRC_SPACE (cb->head,cb->tail,TI_WRITE_BUF_SIZE ); }
ChangeSet 1.1938.446.5, 2004/12/15 14:25:46-08:00, [email protected]
[PATCH] USB: SN9C10x driver updates
SN9C10x driver updates.
Changes: + new, - removed, * cleanup, @ bugfix, = sync with kernels
* SN9C10x system clock fine-tuning when switching from native to compressed format and viceversa for each image sensor
+ Add sn9c102_i2c_try_raw_read()
+ Frame header available from sysfs interface
+ Documentation updates: new "Video frame formats" paragraph, new entries in "Credits" and frame header description
+ Plugin's for HV7131D and MI-0343 image sensors
Documentation/usb/sn9c102.txt | 202 ++++++++++++++---- drivers/usb/media/Makefile | 2 drivers/usb/media/sn9c102.h | 13 - drivers/usb/media/sn9c102_core.c | 115 +++++++--- drivers/usb/media/sn9c102_hv7131d.c | 271 ++++++++++++++++++++++++ drivers/usb/media/sn9c102_mi0343.c | 363 +++++++++++++++++++++++++++++++++ drivers/usb/media/sn9c102_pas106b.c | 45 +--- drivers/usb/media/sn9c102_pas202bcb.c | 49 +--- drivers/usb/media/sn9c102_sensor.h | 62 ++++- drivers/usb/media/sn9c102_tas5110c1b.c | 22 +- drivers/usb/media/sn9c102_tas5130d1b.c | 22 +- 11 files changed, 1004 insertions(+), 162 deletions(-)
Documentation/usb/sn9c102.txt +159 -43
@@ -11,16 +11,17 @@ 1. Copyright 2. Disclaimer 3. License -4. Overview -5. Driver installation +4. Overview and features +5. Module dependencies 6. Module loading 7. Module parameters 8. Optional device control through "sysfs" 9. Supported devices -10. How to add support for new image sensors +10. How to add plug-in's for new image sensors 11. Notes for V4L2 application developers -12. Contact information -13. Credits +12. Video frame formats +13. Contact information +14. Credits 1. Copyright
@@ -51,16 +52,18 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -4. Overview -=========== +4. Overview and features +======================== This driver attempts to support the video and audio streaming capabilities of -the devices mounting the SONiX SN9C101, SN9C102 and SN9C103 (or SUI-102) PC -Camera Controllers. +the devices mounting the SONiX SN9C101, SN9C102 and SN9C103 PC Camera +Controllers. It's worth to note that SONiX has never collaborated with the author during the development of this project, despite several requests for enough detailed specifications of the register tables, compression engine and video data format -of the above chips. +of the above chips. Nevertheless, these informations are no longer necessary, +becouse all the aspects related to these chips are known and have been +described in detail in this documentation. The driver relies on the Video4Linux2 and USB core modules. It has been designed to run properly on SMP systems as well.
@@ -79,15 +82,16 @@ pixel area of image sensor; - image downscaling with arbitrary scaling factors from 1, 2 and 4 in both directions (see "Notes for V4L2 application developers" paragraph); -- two different video formats for uncompressed or compressed data (see also - "Notes for V4L2 application developers" paragraph); +- two different video formats for uncompressed or compressed data in low or + high compression quality (see also "Notes for V4L2 application developers" + and "Video frame formats" paragraphs); - full support for the capabilities of many of the possible image sensors that can be connected to the SN9C10x bridges, including, for istance, red, green, blue and global gain adjustments and exposure (see "Supported devices" paragraph for details); - use of default color settings for sunlight conditions; -- dynamic I/O interface for both SN9C10x and image sensor control (see - "Optional device control through 'sysfs'" paragraph); +- dynamic I/O interface for both SN9C10x and image sensor control and + monitoring (see "Optional device control through 'sysfs'" paragraph); - dynamic driver control thanks to various module parameters (see "Module parameters" paragraph); - up to 64 cameras can be handled at the same time; they can be connected and
@@ -177,7 +181,7 @@ ------------------------------------------------------------------------------- -8. Optional device control through "sysfs" +8. Optional device control through "sysfs" [1] ========================================== It is possible to read and write both the SN9C10x and the image sensor registers by using the "sysfs" filesystem interface.
@@ -195,9 +199,9 @@ SN9C10x bridge, while the other two control the sensor chip. "reg" and "i2c_reg" hold the values of the current register index where the following reading/writing operations are addressed at through "val" and "i2c_val". Their -use is not intended for end-users, unless you know what you are doing. Note -that "i2c_reg" and "i2c_val" won't be created if the sensor does not actually -support the standard I2C protocol. Also, remember that you must be logged in as +use is not intended for end-users. Note that "i2c_reg" and "i2c_val" won't be +created if the sensor does not actually support the standard I2C protocol or +its registers are not 8-bit long. Also, remember that you must be logged in as root before writing to them. As an example, suppose we were to want to read the value contained in the
@@ -216,7 +220,48 @@ [root@localhost #] echo 2 > val Note that the SN9C10x always returns 0 when some of its registers are read. -To avoid race conditions, all the I/O accesses to the files are serialized. +To avoid race conditions, all the I/O accesses to the above files are +serialized. + +The sysfs interface also provides the "frame_header" entry, which exports the +frame header of the most recent requested and captured video frame. The header +is 12-bytes long and is appended to every video frame by the SN9C10x +controllers. As an example, this additional information can be used by the user +application for implementing auto-exposure features via software. + +The following table describes the frame header: + +Byte # Value Description +------ ----- ----------- +0x00 0xFF Frame synchronisation pattern. +0x01 0xFF Frame synchronisation pattern. +0x02 0x00 Frame synchronisation pattern. +0x03 0xC4 Frame synchronisation pattern. +0x04 0xC4 Frame synchronisation pattern. +0x05 0x96 Frame synchronisation pattern. +0x06 0x00 or 0x01 Unknown meaning. The exact value depends on the chip. +0x07 0xXX Variable value, whose bits are ff00uzzc, where ff is a + frame counter, u is unknown, zz is a size indicator + (00 = VGA, 01 = SIF, 10 = QSIF) and c stands for + "compression enabled" (1 = yes, 0 = no). +0x08 0xXX Brightness sum inside Auto-Exposure area (low-byte). +0x09 0xXX Brightness sum inside Auto-Exposure area (high-byte). + For a pure white image, this number will be equal to 500 + times the area of the specified AE area. For images + that are not pure white, the value scales down according + to relative whiteness. +0x0A 0xXX Brightness sum outside Auto-Exposure area (low-byte). +0x0B 0xXX Brightness sum outside Auto-Exposure area (high-byte). + For a pure white image, this number will be equal to 125 + times the area outside of the specified AE area. For + images that are not pure white, the value scales down + according to relative whiteness. + +The AE area (sx, sy, ex, ey) in the active window can be set by programming the +registers 0x1c, 0x1d, 0x1e and 0x1f of the SN9C10x controllers, where one unit +corresponds to 32 pixels. + +[1] The frame header has been documented by Bertrik Sikken. 9. Supported devices
@@ -275,8 +320,10 @@ Model Manufacturer ----- ------------ -PAS106B PixArt Imaging Inc. -PAS202BCB PixArt Imaging Inc. +HV7131D Hynix Semiconductor, Inc. +MI-0343 Micron Technology, Inc. +PAS106B PixArt Imaging, Inc. +PAS202BCB PixArt Imaging, Inc. TAS5110C1B Taiwan Advanced Sensor Corporation TAS5130D1B Taiwan Advanced Sensor Corporation
@@ -295,15 +342,15 @@ driver. -10. How to add support for new image sensors -============================================ -It should be easy to write code for new sensors by using the small API that I -have created for this purpose, which is present in "sn9c102_sensor.h" +10. How to add plug-in's for new image sensors +============================================== +It should be easy to write plug-in's for new sensors by using the small API +that has been created for this purpose, which is present in "sn9c102_sensor.h" (documentation is included there). As an example, have a look at the code in "sn9c102_pas106b.c", which uses the mentioned interface. -At the moment, possible unsupported image sensors are: HV7131x series (VGA), -MI03x series (VGA), OV7620 (VGA), OV7630 (VGA), CIS-VF10 (VGA). +At the moment, possible unsupported image sensors are: CIS-VF10 (VGA), +OV7620 (VGA), OV7630 (VGA). 11. Notes for V4L2 application developers
@@ -332,29 +379,98 @@ This driver supports two different video formats: the first one is the "8-bit Sequential Bayer" format and can be used to obtain uncompressed video data from the device through the current I/O method, while the second one provides -"raw" compressed video data (without the initial and final frame headers). The -compression quality may vary from 0 to 1 and can be selected or queried thanks -to the VIDIOC_S_JPEGCOMP and VIDIOC_G_JPEGCOMP V4L2 ioctl's. For maximum -flexibility, the default active video format depends on how the image sensor -being used is initialized (as described in the documentation of the API for the -image sensors supplied by this driver). +"raw" compressed video data (without frame headers not related to the +compressed data). The compression quality may vary from 0 to 1 and can be +selected or queried thanks to the VIDIOC_S_JPEGCOMP and VIDIOC_G_JPEGCOMP V4L2 +ioctl's. For maximum flexibility, both the default active video format and the +default compression quality depend on how the image sensor being used is +initialized (as described in the documentation of the API for the image sensors +supplied by this driver). -12. Contact information +12. Video frame formats [1] ======================= -I may be contacted by e-mail at <[email protected]>. +The SN9C10x PC Camera Controllers can send images in two possible video +formats over the USB: either native "Sequential RGB Bayer" or Huffman +compressed. The latter is used to achieve high frame rates. The current video +format may be selected or queried from the user application by calling the +VIDIOC_S_FMT or VIDIOC_G_FMT ioctl's, as described in the V4L2 API +specifications. + +The name "Sequential Bayer" indicates the organization of the red, green and +blue pixels in one video frame. Each pixel is associated with a 8-bit long +value and is disposed in memory according to the pattern shown below: + +B[0] G[1] B[2] G[3] ... B[m-2] G[m-1] +G[m] R[m+1] G[m+2] R[m+2] ... G[2m-2] R[2m-1] +... +... B[(n-1)(m-2)] G[(n-1)(m-1)] +... G[n(m-2)] R[n(m-1)] + +The above matrix also represents the sequential or progressive read-out mode of +the (n, m) Bayer color filter array used in many CCD/CMOS image sensors. + +One compressed video frame consists of a bitstream that encodes for every R, G, +or B pixel the difference between the value of the pixel itself and some +reference pixel value. Pixels are organised in the Bayer pattern and the Bayer +sub-pixels are tracked individually and alternatingly. For example, in the +first line values for the B and G1 pixels are alternatingly encoded, while in +the second line values for the G2 and R pixels are alternatingly encoded. + +The pixel reference value is calculated as follows: +- the 4 top left pixels are encoded in raw uncompressed 8-bit format; +- the value in the top two rows is the value of the pixel left of the current + pixel; +- the value in the left column is the value of the pixel above the current + pixel; +- for all other pixels, the reference value is the average of the value of the + pixel on the left and the value of the pixel above the current pixel; +- there is one code in the bitstream that specifies the value of a pixel + directly (in 4-bit resolution); +- pixel values need to be clamped inside the range [0..255] for proper + decoding. + +The algorithm purely describes the conversion from compressed Bayer code used +in the SN9C10x chips to uncompressed Bayer. Additional steps are required to +convert this to a color image (i.e. a color interpolation algorithm). + +The following Huffman codes have been found: +0: +0 (relative to reference pixel value) +100: +4 +101: -4? +1110xxxx: set absolute value to xxxx.0000 +1101: +11 +1111: -11 +11001: +20 +110000: -20 +110001: ??? - these codes are apparently not used -I can accept GPG/PGP encrypted e-mail. My GPG key ID is 'FCE635A4'. -My public 1024-bit key should be available at any keyserver; the fingerprint -is: '88E8 F32F 7244 68BA 3958 5D40 99DA 5D2A FCE6 35A4'. +[1] The Huffman compression algorithm has been reverse-engineered and + documented by Bertrik Sikken. + + +13. Contact information +======================= +The author may be contacted by e-mail at <[email protected]>. +GPG/PGP encrypted e-mail's are accepted. The GPG key ID of the author is +'FCE635A4'; the public 1024-bit key should be available at any keyserver; +the fingerprint is: '88E8 F32F 7244 68BA 3958 5D40 99DA 5D2A FCE6 35A4'. -13. Credits + +14. Credits =========== -I would thank the following persons: +Many thanks to following persons for their contribute (listed in alphabetical +order): -- Stefano Mozzi, who donated 45 EU; - Luca Capello for the donation of a webcam; -- Mizuno Takafumi for the donation of a webcam; +- Joao Rodrigo Fuzaro, Joao Limirio, Claudio Filho and Caio Begotti for the + donation of a webcam; - Carlos Eduardo Medaglia Dyonisio, who added the support for the PAS202BCB - image sensor. + image sensor; +- Stefano Mozzi, who donated 45 EU; +- Bertrik Sikken, who reverse-engineered and documented the Huffman compression + algorithm used in the SN9C10x controllers and implemented the first decoder; +- Mizuno Takafumi for the donation of a webcam; +- An "anonymous" donator (who didn't want his name to be revealed) for the + donation of a webcam.
drivers/usb/media/Makefile +1 -1
@@ -2,7 +2,7 @@ # Makefile for USB Media drivers # -sn9c102-objs := sn9c102_core.o sn9c102_pas106b.o sn9c102_tas5110c1b.o sn9c102_tas5130d1b.o sn9c102_pas202bcb.o +sn9c102-objs := sn9c102_core.o sn9c102_hv7131d.o sn9c102_mi0343.o sn9c102_pas106b.o sn9c102_pas202bcb.o sn9c102_tas5110c1b.o sn9c102_tas5130d1b.o obj-$(CONFIG_USB_DABUSB) += dabusb.o obj-$(CONFIG_USB_DSBR) += dsbr100.o
drivers/usb/media/sn9c102.h +9 -4
@@ -46,8 +46,8 @@#define SN9C102_URBS 2#define SN9C102_ISO_PACKETS 7#define SN9C102_ALTERNATE_SETTING 8 -#define SN9C102_URB_TIMEOUT msecs_to_jiffies(3) -#define SN9C102_CTRL_TIMEOUT msecs_to_jiffies(100) +#define SN9C102_URB_TIMEOUT msecs_to_jiffies(2 * SN9C102_ISO_PACKETS) +#define SN9C102_CTRL_TIMEOUT msecs_to_jiffies(300)/*****************************************************************************/
@@ -55,8 +55,8 @@#define SN9C102_MODULE_AUTHOR "(C) 2004 Luca Risolia"#define SN9C102_AUTHOR_EMAIL "<[email protected]>"#define SN9C102_MODULE_LICENSE "GPL" -#define SN9C102_MODULE_VERSION "1:1.19" -#define SN9C102_MODULE_VERSION_CODE KERNEL_VERSION(1, 0, 19) +#define SN9C102_MODULE_VERSION "1:1.20" +#define SN9C102_MODULE_VERSION_CODE KERNEL_VERSION(1, 0, 20)enum sn9c102_bridge {BRIDGE_SN9C101 =0x01 ,
@@ -101,8 +101,12 @@ STREAM_ON, }; +typedef char sn9c102_sof_header_t [12 ]; +typedef char sn9c102_eof_header_t [4 ]; +struct sn9c102_sysfs_attr {u8 reg, i2c_reg; +sn9c102_sof_header_t frame_header; };static DECLARE_MUTEX (sn9c102_sysfs_lock);
@@ -131,6 +135,7 @@struct v4l2_jpegcompression compression;struct sn9c102_sysfs_attr sysfs; +sn9c102_sof_header_t sof_header;u16 reg[32 ];enum sn9c102_dev_state state;
drivers/usb/media/sn9c102_core.c +81 -34
267 lines not on this page · raw message
drivers/usb/media/sn9c102_hv7131d.c new file +271 -0
271 lines not on this page · raw message
drivers/usb/media/sn9c102_mi0343.c new file +363 -0
363 lines not on this page · raw message
drivers/usb/media/sn9c102_pas106b.c +19 -26
86 lines not on this page · raw message
drivers/usb/media/sn9c102_pas202bcb.c +21 -28
105 lines not on this page · raw message
drivers/usb/media/sn9c102_sensor.h +44 -18
139 lines not on this page · raw message
drivers/usb/media/sn9c102_tas5110c1b.c +18 -4
@@ -93,7 +93,21 @@/* Don't change ! */ err +=sn9c102_write_reg (cam,0x14 ,0x1a ); err +=sn9c102_write_reg (cam,0x0a ,0x1b ); - err +=sn9c102_write_reg (cam,0xfb ,0x19 ); + err +=sn9c102_write_reg (cam,sn9c102_pread_reg (cam,0x19 ),0x19 ); + +return err; +} + + +static int tas5110c1b_set_pix_format (struct sn9c102_device * cam, +const struct v4l2_pix_format * pix) +{ +int err =0 ; + +if (pix->pixelformat ==V4L2_PIX_FMT_SN9C10X ) + err +=sn9c102_write_reg (cam,0x2b ,0x19 ); +else + err +=sn9c102_write_reg (cam,0xfb ,0x19 );return err; }
@@ -102,10 +116,9 @@static struct sn9c102_sensor tas5110c1b = { .name ="TAS5110C1B" , .maintainer ="Luca Risolia <[email protected]>" , + .sysfs_ops =SN9C102_I2C_WRITE , .frequency =SN9C102_I2C_100KHZ , .interface =SN9C102_I2C_3WIRES , - .slave_read_id =SN9C102_I2C_SLAVEID_UNAVAILABLE , - .slave_write_id =SN9C102_I2C_SLAVEID_FICTITIOUS , .init = &tas5110c1b_init, .qctrl = { {
@@ -141,7 +154,8 @@ .height = 288, .pixelformat = V4L2_PIX_FMT_SBGGR8, .priv = 8, - } + }, + .set_pix_format = &tas5110c1b_set_pix_format };
drivers/usb/media/sn9c102_tas5130d1b.c +18 -4
@@ -98,7 +98,21 @@/* Do NOT change! */ err +=sn9c102_write_reg (cam,0x1f ,0x1a ); err +=sn9c102_write_reg (cam,0x1a ,0x1b ); - err +=sn9c102_write_reg (cam,0xf3 ,0x19 ); + err +=sn9c102_write_reg (cam,sn9c102_pread_reg (cam,0x19 ),0x19 ); + +return err; +} + + +static int tas5130d1b_set_pix_format (struct sn9c102_device * cam, +const struct v4l2_pix_format * pix) +{ +int err =0 ; + +if (pix->pixelformat ==V4L2_PIX_FMT_SN9C10X ) + err +=sn9c102_write_reg (cam,0x63 ,0x19 ); +else + err +=sn9c102_write_reg (cam,0xf3 ,0x19 );return err; }
@@ -107,10 +121,9 @@static struct sn9c102_sensor tas5130d1b = { .name ="TAS5130D1B" , .maintainer ="Luca Risolia <[email protected]>" , + .sysfs_ops =SN9C102_I2C_WRITE , .frequency =SN9C102_I2C_100KHZ , .interface =SN9C102_I2C_3WIRES , - .slave_read_id =SN9C102_I2C_SLAVEID_UNAVAILABLE , - .slave_write_id =SN9C102_I2C_SLAVEID_FICTITIOUS , .init = &tas5130d1b_init, .qctrl = { {
@@ -156,7 +169,8 @@ .height = 480, .pixelformat = V4L2_PIX_FMT_SBGGR8, .priv = 8, - } + }, + .set_pix_format = &tas5130d1b_set_pix_format };
ChangeSet 1.1938.446.6, 2004/12/15 14:26:09-08:00, [email protected]
[PATCH] USB Storage: support 'bulk32' devices
This patch implements support for what we call "bulk32" devices. These are devices that use the BBB transport mechanism with the slight modification that the CBW is padded to 32 bytes (instead of the standard 31 bytes).
drivers/usb/storage/transport.c | 9 ++++++++- drivers/usb/storage/unusual_devs.h | 24 ++++++++++++++++++++++++ drivers/usb/storage/usb.h | 1 + 3 files changed, 33 insertions(+), 1 deletion(-)
drivers/usb/storage/transport.c +8 -1
@@ -954,6 +954,13 @@int result;int fake_sense =0 ;unsigned int cswlen; +unsigned int cbwlen =US_BULK_CB_WRAP_LEN ; + +/* Take care of BULK32 devices; set extra byte to 0 */ +if (unlikely (us->flags &US_FL_BULK32 )) { + cbwlen =32 ; + us->iobuf[31 ] =0 ; + }/* set up the command wrapper */ bcb->Signature =cpu_to_le32 (US_BULK_CB_SIGN );
@@ -976,7 +983,7 @@ (bcb->Lun >>4 ), (bcb->Lun &0x0F ), bcb->Length); result =usb_stor_bulk_transfer_buf (us, us->send_bulk_pipe, - bcb,US_BULK_CB_WRAP_LEN ,NULL ); + bcb, cbwlen,NULL );US_DEBUGP ("Bulk command transfer result=%d\n" , result);if (result !=USB_STOR_XFER_GOOD )return USB_STOR_TRANSPORT_ERROR ;
drivers/usb/storage/unusual_devs.h +24 -0
@@ -249,6 +249,17 @@ "CD-RW Device", US_SC_8020, US_PR_CB, NULL, 0), +/* Entry and supporting patch by Theodore Kilgore <[email protected]>. +* Device uses standards-violating 32-byte Bulk Command Block Wrappers and +* reports itself as "Proprietary SCSI Bulk." Cf. device entry 0x084d:0x0011. +*/ + +UNUSUAL_DEV (0x04fc ,0x80c2 ,0x0100 ,0x0100 , +"Kobian Mercury" , +"Binocam DCB-132" , +US_SC_DEVICE ,US_PR_DEVICE ,NULL , +US_FL_BULK32 ), +/* Reported by Bob Sass <[email protected]> -- only rev 1.33 tested */ UNUSUAL_DEV( 0x050d, 0x0115, 0x0133, 0x0133, "Belkin",
@@ -714,6 +725,19 @@ "Digimax 410", US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_FIX_INQUIRY), + +/* Entry and supporting patch by Theodore Kilgore <[email protected]>. +* Flag will support Bulk devices which use a standards-violating 32-byte +* Command Block Wrapper. Here, the "DC2MEGA" cameras (several brands) with +* Grandtech GT892x chip, which request "Proprietary SCSI Bulk" support. +*/ + +UNUSUAL_DEV (0x084d ,0x0011 ,0x0110 ,0x0110 , +"Grandtech" , +"DC2MEGA" , +US_SC_DEVICE ,US_PR_DEVICE ,NULL , + US_FL_BULK32), +/* Aiptek PocketCAM 3Mega * Nicolas DUPEUX <[email protected]>
drivers/usb/storage/usb.h +1 -0
@@ -74,6 +74,7 @@#define US_FL_FIX_INQUIRY 0x00000040/* INQUIRY response needs faking */ #define US_FL_FIX_CAPACITY 0x00000080/* READ CAPACITY response too big */ #define US_FL_IGNORE_RESIDUE 0x00000100/* reported residue is wrong */ +#define US_FL_BULK32 0x00000200/* Uses 32-byte CBW length */ /* Dynamic flag definitions: used in set_bit() etc. */ #define US_FLIDX_URB_ACTIVE 18/* 0x00040000 current_urb is in use */
ChangeSet 1.1938.446.7, 2004/12/15 14:47:29-08:00, [email protected]
USB: delete the tiglusb driver as it's not needed
You can use a userspace program and libusb instead. The author asked for this driver to be removed because of this.
drivers/usb/misc/tiglusb.c | 592 --------------------------------------------- drivers/usb/misc/tiglusb.h | 43 --- drivers/usb/Makefile | 1 drivers/usb/misc/Kconfig | 20 - drivers/usb/misc/Makefile | 1 5 files changed, 657 deletions(-)
drivers/usb/Makefile +0 -1
@@ -65,7 +65,6 @@ obj-$(CONFIG_USB_LEGOTOWER) += misc/ obj-$(CONFIG_USB_RIO500) += misc/ obj-$(CONFIG_USB_TEST) += misc/ -obj-$(CONFIG_USB_TIGL) += misc/ obj-$(CONFIG_USB_USS720) += misc/ obj-$(CONFIG_USB_PHIDGETSERVO) += misc/
drivers/usb/misc/Kconfig +0 -20
@@ -32,26 +32,6 @@ To compile this driver as a module, choose M here: the module will be called emi26. -config USB_TIGL - tristate "Texas Instruments Graph Link USB (aka SilverLink) cable support" - depends on USB - ---help--- - If you own a Texas Instruments graphing calculator and use a - TI-GRAPH LINK USB cable (aka SilverLink), then you might be - interested in this driver. - - If you enable this driver, you will be able to communicate with - your calculator through a set of device nodes under /dev. - - To compile this driver as a module, choose M here: the - module will be called tiglusb. - - If you don't know what the SilverLink cable is or what a Texas - Instruments graphing calculator is, then you probably don't need this - driver. - - If unsure, say N. - config USB_AUERSWALD tristate "USB Auerswald ISDN support (EXPERIMENTAL)" depends on USB && EXPERIMENTAL
drivers/usb/misc/Makefile +0 -1
@@ -14,5 +14,4 @@ obj-$(CONFIG_USB_PHIDGETSERVO) += phidgetservo.o obj-$(CONFIG_USB_RIO500) += rio500.o obj-$(CONFIG_USB_TEST) += usbtest.o -obj-$(CONFIG_USB_TIGL) += tiglusb.o obj-$(CONFIG_USB_USS720) += uss720.o
drivers/usb/misc/tiglusb.c deleted +0 -592
592 lines not on this page · raw message
drivers/usb/misc/tiglusb.h deleted +0 -43
43 lines not on this page · raw message
ChangeSet 1.1938.446.8, 2004/12/15 15:10:26-08:00, [email protected]
[PATCH] USB Storage: Remove MODE_XLATE flag from unusual_devs.h
This patch removes all MODE_XLATE flags from unusual_devs.h. Since the file is no longer close to in sync with the 2.4 version, Alan and I agreed it's reasonable to remove all of these now.
drivers/usb/storage/unusual_devs.h | 58 ++++++++++++++++++------------------- 1 files changed, 29 insertions(+), 29 deletions(-)
drivers/usb/storage/unusual_devs.h +29 -29
@@ -321,14 +321,14 @@ "Sony", "DSC-S30/S70/S75/505V/F505/F707/F717/P8", US_SC_SCSI, US_PR_DEVICE, NULL, - US_FL_SINGLE_LUN | US_FL_MODE_XLATE ), + US_FL_SINGLE_LUN ),/* This entry is needed because the device reports Sub=ff */ UNUSUAL_DEV (0x054c ,0x0010 ,0x0500 ,0x0500 ,"Sony" ,"DSC-T1" ,US_SC_8070 ,US_PR_DEVICE ,NULL , - US_FL_SINGLE_LUN | US_FL_MODE_XLATE ), + US_FL_SINGLE_LUN ),/* Reported by [email protected] */
@@ -357,14 +357,14 @@ "Sony", "Handycam", US_SC_SCSI, US_PR_DEVICE, NULL, - US_FL_SINGLE_LUN | US_FL_MODE_XLATE), + US_FL_SINGLE_LUN ),/* Submitted by Rajesh Kumble Nayak <[email protected]> */ UNUSUAL_DEV (0x054c ,0x002e ,0x0500 ,0x0500 ,"Sony" ,"Handycam HC-85" ,US_SC_UFI ,US_PR_DEVICE ,NULL , -US_FL_SINGLE_LUN |US_FL_MODE_XLATE ), +US_FL_SINGLE_LUN ), UNUSUAL_DEV( 0x054c, 0x0032, 0x0000, 0x9999, "Sony",
@@ -494,7 +494,7 @@ "Lexar", "Jumpshot USB CF Reader", US_SC_SCSI, US_PR_JUMPSHOT, NULL, - US_FL_NEED_OVERRIDE | US_FL_MODE_XLATE ), + US_FL_NEED_OVERRIDE ),#endif /* Reported by Blake Matheny <[email protected]> */
@@ -510,7 +510,7 @@ "Vivitar", "Vivicam 35Xx", US_SC_SCSI, US_PR_BULK, NULL, - US_FL_FIX_INQUIRY | US_FL_MODE_XLATE), + US_FL_FIX_INQUIRY ), UNUSUAL_DEV( 0x0644, 0x0000, 0x0100, 0x0100, "TEAC",
@@ -620,48 +620,48 @@ "Datafab", "MDCFE-B USB CF Reader", US_SC_SCSI, US_PR_DATAFAB, NULL, - US_FL_MODE_XLATE ), + 0 ), -/* -* The following Datafab-based devices may or may not work -* using the current driver...the 0xffff is arbitrary since I -* don't know what device versions exist for these guys. -* -* The 0xa003 and 0xa004 devices in particular I'm curious about. -* I'm told they exist but so far nobody has come forward to say that -* they work with this driver. Given the success we've had getting -* other Datafab-based cards operational with this driver, I've decided -* to leave these two devices in the list. -*/ +/* +* The following Datafab-based devices may or may not work +* using the current driver...the 0xffff is arbitrary since I +* don't know what device versions exist for these guys. +* +* The 0xa003 and 0xa004 devices in particular I'm curious about. +* I'm told they exist but so far nobody has come forward to say that +* they work with this driver. Given the success we've had getting +* other Datafab-based cards operational with this driver, I've decided +* to leave these two devices in the list. +*/ UNUSUAL_DEV (0x07c4 ,0xa001 ,0x0000 ,0xffff ,"SIIG/Datafab" ,"SIIG/Datafab Memory Stick+CF Reader/Writer" ,US_SC_SCSI ,US_PR_DATAFAB ,NULL , -US_FL_MODE_XLATE ), +0 ),UNUSUAL_DEV (0x07c4 ,0xa003 ,0x0000 ,0xffff ,"Datafab/Unknown" ,"Datafab-based Reader" ,US_SC_SCSI ,US_PR_DATAFAB ,NULL , -US_FL_MODE_XLATE ), +0 ),UNUSUAL_DEV (0x07c4 ,0xa004 ,0x0000 ,0xffff ,"Datafab/Unknown" ,"Datafab-based Reader" ,US_SC_SCSI ,US_PR_DATAFAB ,NULL , -US_FL_MODE_XLATE ), +0 ),UNUSUAL_DEV (0x07c4 ,0xa005 ,0x0000 ,0xffff ,"PNY/Datafab" ,"PNY/Datafab CF+SM Reader" ,US_SC_SCSI ,US_PR_DATAFAB ,NULL , -US_FL_MODE_XLATE ), +0 ),UNUSUAL_DEV (0x07c4 ,0xa006 ,0x0000 ,0xffff ,"Simple Tech/Datafab" ,"Simple Tech/Datafab CF+SM Reader" ,US_SC_SCSI ,US_PR_DATAFAB ,NULL , -US_FL_MODE_XLATE ), +0 ), #endif #ifdef CONFIG_USB_STORAGE_SDDR55
@@ -679,7 +679,7 @@ "Datafab Systems, Inc.", "USB to CF + SM Combo (LC1)", US_SC_SCSI, US_PR_DATAFAB, NULL, - US_FL_MODE_XLATE ), + 0 ),#endif #ifdef CONFIG_USB_STORAGE_SDDR55 /* SM part - aeb <[email protected]> */
@@ -746,7 +746,7 @@"AIPTEK" ,"PocketCAM 3Mega" ,US_SC_DEVICE ,US_PR_DEVICE ,NULL , - US_FL_MODE_XLATE ), + 0 ),/* Entry needed for flags. Moreover, all devices with this ID use * bulk-only transport, but _some_ falsely report Control/Bulk instead.
@@ -757,14 +757,14 @@ "Trumpion", "t33520 USB Flash Card Controller", US_SC_DEVICE, US_PR_BULK, NULL, - US_FL_NEED_OVERRIDE | US_FL_MODE_XLATE), + US_FL_NEED_OVERRIDE ),/* Trumpion Microelectronics MP3 player ([email protected]) */ UNUSUAL_DEV (0x090a ,0x1200 ,0x0000 ,0x9999 ,"Trumpion" ,"MP3 player" ,US_SC_RBC ,US_PR_BULK ,NULL , -US_FL_MODE_XLATE ), +0 ),/* aeb */ UNUSUAL_DEV( 0x090c, 0x1132, 0x0000, 0xffff,
@@ -777,7 +777,7 @@"Minds@Work" ,"Digital Wallet" ,US_SC_DEVICE ,US_PR_DEVICE ,NULL , - US_FL_MODE_XLATE ), + 0 ),/* This Pentax still camera is not conformant * to the USB storage specification: -
@@ -892,7 +892,7 @@ "CCYU TECHNOLOGY", "EasyDisk Portable Device", US_SC_DEVICE, US_PR_DEVICE, NULL, - US_FL_MODE_XLATE ), + 0 ),/* Reported by Kotrla Vitezslav <[email protected]> */ UNUSUAL_DEV( 0x1370, 0x6828, 0x0110, 0x0110,
ChangeSet 1.1938.446.9, 2004/12/15 15:11:26-08:00, [email protected]
[PATCH] USB: update drivers/usb/README
This just adds a bit more info to drivers/usb/README, mostly just pointing to where documentation is to be found (including current kerneldoc).
drivers/usb/README | 33 ++++++++++++++++++++++++++++----- 1 files changed, 28 insertions(+), 5 deletions(-)
drivers/usb/README +28 -5
@@ -1,14 +1,37 @@ +To understand all the Linux-USB framework, you'll use these resources: + + * This source code. This is necessarily an evolving work, and + includes kerneldoc that should help you get a current overview. + ("make pdfdocs", and then look at "usb.pdf" for host side and + "gadget.pdf" for peripheral side.) Also, Documentation/usb has + more information. + + * The USB 2.0 specification (from www.usb.org), with supplements + such as those for USB OTG and the various device classes. + The USB specification has a good overview chapter, and USB + peripherals conform to the widely known "Chapter 9". + + * Chip specifications for USB controllers. Examples include + host controllers (on PCs, servers, and more); peripheral + controllers (in devices with Linux firmware, like printers or + cell phones); and hard-wired peripherals like Ethernet adapters. + + * Specifications for other protocols implemented by USB peripheral + functions. Some are vendor-specific; others are vendor-neutral + but just standardized outside of the www.usb.org team. + Here is a list of what each subdirectory here is, and what is contained in them. core/ - This is for the core USB host code, including the - usbfs files. + usbfs files and the hub class driver ("khubd"). -host/ - This is for all of the USB host drivers. This - includes UHCI, OHCI, EHCI, and any others that might - be created in the future. +host/ - This is for USB host controller drivers. This + includes UHCI, OHCI, EHCI, and others that might + be used with more specialized "embedded" systems. -gadget/ - This is for all of the USB device controller drivers. +gadget/ - This is for USB peripheral controller drivers and + the various gadget drivers which talk to them. Individual USB driver directories. A new driver should be added to the
ChangeSet 1.1938.446.10, 2004/12/15 15:12:10-08:00, [email protected]
[PATCH] USB Storage: Remove old XLATE-only entries from unusual_devs.h
This patch removes all entries from unusual_devs.h that appear to have only been there for the MODE_XLATE flag which was removed in my previous patch.
drivers/usb/storage/unusual_devs.h | 26 -------------------------- 1 files changed, 26 deletions(-)
drivers/usb/storage/unusual_devs.h +0 -26
@@ -739,15 +739,6 @@ US_FL_BULK32), -/* Aiptek PocketCAM 3Mega -* Nicolas DUPEUX <[email protected]> -*/ -UNUSUAL_DEV (0x08ca ,0x2011 ,0x0000 ,0x9999 , -"AIPTEK" , -"PocketCAM 3Mega" , -US_SC_DEVICE ,US_PR_DEVICE ,NULL , - 0 ), -/* Entry needed for flags. Moreover, all devices with this ID use * bulk-only transport, but _some_ falsely report Control/Bulk instead. * One example is "Trumpion Digital Research MYMP3".
@@ -773,12 +764,6 @@US_SC_DEVICE ,US_PR_DEVICE ,NULL , US_FL_FIX_CAPACITY ), -UNUSUAL_DEV (0x097a ,0x0001 ,0x0000 ,0x0001 , -"Minds@Work" , -"Digital Wallet" , -US_SC_DEVICE ,US_PR_DEVICE ,NULL , - 0 ), -/* This Pentax still camera is not conformant * to the USB storage specification: - * - It does not like the INQUIRY command. So we must handle this command
@@ -881,17 +866,6 @@"Desknote" ,"UCR-61S2B" ,US_SC_DEVICE ,US_PR_DEVICE , usb_stor_ucr61s2b_init, - 0 ), - -/* Reported by Dan Pilone <[email protected]> -* The device needs the flags only. -* Also reported by Brian Hall <[email protected]>, again for flags. -* I also suspect this device may have a broken serial number. -*/ -UNUSUAL_DEV (0x1065 ,0x2136 ,0x0000 ,0x9999 , -"CCYU TECHNOLOGY" , -"EasyDisk Portable Device" , -US_SC_DEVICE ,US_PR_DEVICE ,NULL , 0 ),/* Reported by Kotrla Vitezslav <[email protected]> */
ChangeSet 1.1938.446.11, 2004/12/15 16:01:23-08:00, [email protected]
[PATCH] usb-serial: add tty_hangup on disconnect
When a USB serial device is disconnected, user applications performing a read() now receive an error code, rather than waiting indefinitely. The included patch is originally from Al Borchers, massaged to apply to 2.6.9 and 2.6.10-rc2. I've tested it on 2.6.9, but not on 2.6.10-rc2.
Al Borcher's original post:
http://www.mail-archive.com/[email protected]/msg27475.html
drivers/usb/serial/usb-serial.c | 7 +++++++ 1 files changed, 7 insertions(+)
drivers/usb/serial/usb-serial.c +7 -0
@@ -1238,13 +1238,20 @@void usb_serial_disconnect (struct usb_interface *interface) { +int i;struct usb_serial *serial =usb_get_intfdata (interface);struct device *dev = &interface->dev; +struct usb_serial_port *port;dbg ("%s" , __FUNCTION__);usb_set_intfdata (interface,NULL );if (serial) { +for (i =0 ; i < serial->num_ports; ++i) { + port = serial->port[i]; +if (port && port->tty) +tty_hangup (port->tty); + }/* let the last holder of this object * cause it to be cleaned up */ kref_put (&serial->kref, destroy_serial);
ChangeSet 1.1938.446.12, 2004/12/15 16:01:46-08:00, [email protected]
[PATCH] ftdi_sio: Add sysfs attributes for event character and latency
Setting the event character and latency timer can greatly improve performance for some applications which use the ftdi_sio module (a serial->USB converter). The following patch adds sysfs attributes, exposing these configuration registers.
drivers/usb/serial/ftdi_sio.c | 133 ++++++++++++++++++++++++++++++++++++++++++ drivers/usb/serial/ftdi_sio.h | 51 ++++++++++++++++ 2 files changed, 184 insertions(+)
drivers/usb/serial/ftdi_sio.c +133 -0
@@ -1174,6 +1174,135 @@ }/* set_serial_info */ + +/* +* *************************************************************************** +* Sysfs Attribute +* *************************************************************************** +*/ + +ssize_t show_latency_timer (struct device *dev,char *buf) +{ +struct usb_serial_port *port =to_usb_serial_port (dev); +struct ftdi_private *priv =usb_get_serial_port_data (port); +struct usb_device *udev; +unsigned short latency =0 ; +int rv =0 ; + + udev =to_usb_device (dev); + +dbg ("%s" ,__FUNCTION__); + + rv =usb_control_msg (udev, +usb_rcvctrlpipe (udev,0 ), +FTDI_SIO_GET_LATENCY_TIMER_REQUEST , +FTDI_SIO_GET_LATENCY_TIMER_REQUEST_TYPE , +0 , priv->interface, + (char *) &latency,1 ,WDR_TIMEOUT ); + +if (rv <0 ) { +dev_err (dev,"Unable to read latency timer: %i" , rv); +return -EIO ; + } +return sprintf (buf,"%i\n" , latency); +} + +/* Write a new value of the latency timer, in units of milliseconds. */ +ssize_t store_latency_timer (struct device *dev,const char *valbuf,size_t count) +{ +struct usb_serial_port *port =to_usb_serial_port (dev); +struct ftdi_private *priv =usb_get_serial_port_data (port); +struct usb_device *udev; +char buf[1 ]; +int v =simple_strtoul (valbuf,NULL ,10 ); +int rv =0 ; + + udev =to_usb_device (dev); + +dbg ("%s: setting latency timer = %i" , __FUNCTION__, v); + + rv =usb_control_msg (udev, +usb_sndctrlpipe (udev,0 ), +FTDI_SIO_SET_LATENCY_TIMER_REQUEST , +FTDI_SIO_SET_LATENCY_TIMER_REQUEST_TYPE , + v, priv->interface, + buf,0 ,WDR_TIMEOUT ); + +if (rv <0 ) { +dev_err (dev,"Unable to write latency timer: %i" , rv); +return -EIO ; + } + +return count; +} + +/* Write an event character directly to the FTDI register. The ASCII +value is in the low 8 bits, with the enable bit in the 9th bit. */ +ssize_t store_event_char (struct device *dev,const char *valbuf,size_t count) +{ +struct usb_serial_port *port =to_usb_serial_port (dev); +struct ftdi_private *priv =usb_get_serial_port_data (port); +struct usb_device *udev; +char buf[1 ]; +int v =simple_strtoul (valbuf,NULL ,10 ); +int rv =0 ; + + udev =to_usb_device (dev); + +dbg ("%s: setting event char = %i" , __FUNCTION__, v); + + rv =usb_control_msg (udev, +usb_sndctrlpipe (udev,0 ), +FTDI_SIO_SET_EVENT_CHAR_REQUEST , +FTDI_SIO_SET_EVENT_CHAR_REQUEST_TYPE , + v, priv->interface, + buf,0 ,WDR_TIMEOUT ); + +if (rv <0 ) { +dbg ("Unable to write event character: %i" , rv); +return -EIO ; + } + +return count; +} + +static DEVICE_ATTR(latency_timer, S_IWUGO | S_IRUGO, show_latency_timer, store_latency_timer); +static DEVICE_ATTR(event_char, S_IWUGO, NULL, store_event_char); + +void create_sysfs_attrs (struct usb_serial *serial) +{ +struct ftdi_private *priv; +struct usb_device *udev; + +dbg ("%s" ,__FUNCTION__); + + priv =usb_get_serial_port_data (serial->port[0 ]); + udev = serial->dev; + +if (priv->chip_type ==FT232BM ) { +dbg ("sysfs attributes for FT232BM" ); +device_create_file (&udev->dev, &dev_attr_event_char); +device_create_file (&udev->dev, &dev_attr_latency_timer); + } +} + +void remove_sysfs_attrs (struct usb_serial *serial) +{ +struct ftdi_private *priv; +struct usb_device *udev; + +dbg ("%s" ,__FUNCTION__); + + priv =usb_get_serial_port_data (serial->port[0 ]); + udev = serial->dev; + +if (priv->chip_type ==FT232BM ) { +device_remove_file (&udev->dev, &dev_attr_event_char); +device_remove_file (&udev->dev, &dev_attr_latency_timer); + } + +} +/* * *************************************************************************** * FTDI driver specific functions
@@ -1291,6 +1420,8 @@ priv->chip_type =FT232BM ; priv->baud_base =48000000 /2 ;/* Would be / 16, but FT232BM supports multiple of 0.125 divisor fractions! */ +create_sysfs_attrs (serial); +return (0 ); }/* ftdi_FT232BM_startup */
@@ -1384,6 +1515,8 @@dbg ("%s" , __FUNCTION__); +remove_sysfs_attrs (serial); +/* all open ports are closed at this point * (by usbserial.c:__serial_close, which calls ftdi_close) */
drivers/usb/serial/ftdi_sio.h +51 -0
63 lines not on this page · raw message
ChangeSet 1.1938.446.13, 2004/12/15 16:31:49-08:00, [email protected]
[PATCH] USB: usb_dev->ep[] not usb_dev->epmaxpacket (1/15)
This starts updating the usbcore interface to use endpoints in places it previously used pipes or other representations of the endpoint.
- add new arrays of "struct usb_host_endpoint" pointers, matching current config and altsetting
- get rid of the two epmaxpacket[] arrays; they duplicate information that's now readily accessible from the usb_host_endpoint.
- resolve a FIXME by removing a function that only existed because the usb_host_endpoint wasn't readily accessible.
It also removes most of an old rant about pipes, trimming it down so only the important bits remain.
include/linux/usb.h | 73 ++++++++++++++++++++++++++-------------------------- 1 files changed, 37 insertions(+), 36 deletions(-)
include/linux/usb.h +37 -36
@@ -224,11 +224,6 @@int extralen; }; -// FIXME remove; exported only for drivers/usb/misc/auserwald.c -// prefer usb_device->epnum[0..31] -extern struct usb_endpoint_descriptor * -usb_epnum_to_ep_desc (struct usb_device *dev,unsigned epnum); -int __usb_get_extra_descriptor (char *buffer,unsigned size,unsigned char type,void **ptr);#define usb_get_extra_descriptor (ifpoint,type,ptr)\
@@ -311,17 +306,19 @@struct semaphore serialize;unsigned int toggle[2 ];/* one bit for each endpoint ([0] = IN, [1] = OUT) */ -int epmaxpacketin[16 ];/* INput endpoint specific maximums */ -int epmaxpacketout[16 ];/* OUTput endpoint specific maximums */ struct usb_device *parent;/* our hub, unless we're the root */ struct usb_bus *bus;/* Bus we're part of */ +struct usb_host_endpoint ep0;struct device dev;/* Generic device interface */ struct usb_device_descriptor descriptor;/* Descriptor */ struct usb_host_config *config;/* All of the configs */ +struct usb_host_config *actconfig;/* the active configuration */ +struct usb_host_endpoint *ep_in[16 ]; +struct usb_host_endpoint *ep_out[16 ];char **rawdescriptors;/* Raw descriptors for each config */
@@ -360,6 +357,8 @@extern struct usb_device *usb_find_device (u16 vendor_id,u16 product_id); +/*-------------------------------------------------------------------------*/ +/* for drivers using iso endpoints */ extern int usb_get_current_frame_number (struct usb_device *usb_dev);
@@ -1040,55 +1039,35 @@/* -------------------------------------------------------------------------- */ /* -* Calling this entity a "pipe" is glorifying it. A USB pipe -* is something embarrassingly simple: it basically consists -* of the following information: -* - device number (7 bits) -* - endpoint number (4 bits) -* - current Data0/1 state (1 bit) [Historical; now gone] -* - direction (1 bit) -* - speed (1 bit) [Historical and specific to USB 1.1; now gone.] -* - max packet size (2 bits: 8, 16, 32 or 64) [Historical; now gone.] -* - pipe type (2 bits: control, interrupt, bulk, isochronous) -* -* That's 18 bits. Really. Nothing more. And the USB people have -* documented these eighteen bits as some kind of glorious -* virtual data structure. +* For various legacy reasons, Linux has a small cookie that's paired with +* a struct usb_device to identify an endpoint queue. Queue characteristics +* are defined by the endpoint's descriptor. This cookie is called a "pipe", +* an unsigned int encoded as: * -* Let's not fall in that trap. We'll just encode it as a simple -* unsigned int. The encoding is: -* -* - max size: bits 0-1 [Historical; now gone.] * - direction: bit 7 (0 = Host-to-Device [Out], * 1 = Device-to-Host [In] ... * like endpoint bEndpointAddress) -* - device: bits 8-14 ... bit positions known to uhci-hcd +* - device address: bits 8-14 ... bit positions known to uhci-hcd * - endpoint: bits 15-18 ... bit positions known to uhci-hcd -* - Data0/1: bit 19 [Historical; now gone. ] -* - lowspeed: bit 26 [Historical; now gone. ] * - pipe type: bits 30-31 (00 = isochronous, 01 = interrupt, * 10 = control, 11 = bulk) * -* Why? Because it's arbitrary, and whatever encoding we select is really -* up to us. This one happens to share a lot of bit positions with the UHCI -* specification, so that much of the uhci driver can just mask the bits -* appropriately. +* Given the device address and endpoint descriptor, pipes are redundant. */ /* NOTE: these are not the standard USB_ENDPOINT_XFER_* values!! */ +/* (yet ... they're the values used by usbfs) */ #define PIPE_ISOCHRONOUS 0#define PIPE_INTERRUPT 1#define PIPE_CONTROL 2#define PIPE_BULK 3 -#define usb_maxpacket (dev, pipe, out) (out \ - ? (dev)->epmaxpacketout[usb_pipeendpoint(pipe)] \ - : (dev)->epmaxpacketin [usb_pipeendpoint(pipe)] ) -#define usb_pipein (pipe) ((pipe) & USB_DIR_IN)#define usb_pipeout (pipe) (!usb_pipein(pipe)) +#define usb_pipedevice (pipe) (((pipe) >> 8) & 0x7f)#define usb_pipeendpoint (pipe) (((pipe) >> 15) & 0xf) +#define usb_pipetype (pipe) (((pipe) >> 30) & 3)#define usb_pipeisoc (pipe) (usb_pipetype((pipe)) == PIPE_ISOCHRONOUS)#define usb_pipeint (pipe) (usb_pipetype((pipe)) == PIPE_INTERRUPT)
@@ -1115,6 +1094,28 @@#define usb_rcvbulkpipe (dev,endpoint) ((PIPE_BULK << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)#define usb_sndintpipe (dev,endpoint) ((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint))#define usb_rcvintpipe (dev,endpoint) ((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN) + +/*-------------------------------------------------------------------------*/ + +static inline __u16 +usb_maxpacket (struct usb_device *udev,int pipe,int is_out) +{ +struct usb_host_endpoint *ep; +unsigned epnum =usb_pipeendpoint (pipe); + +if (is_out) { +WARN_ON (usb_pipein (pipe)); + ep = udev->ep_out[epnum]; + }else { +WARN_ON (usb_pipeout (pipe)); + ep = udev->ep_in[epnum]; + } +if (!ep) +return 0 ; + +/* NOTE: only 0x07ff bits are for packet size... */ +return ep->desc.wMaxPacketSize; +}/* -------------------------------------------------------------------------- */
ChangeSet 1.1938.446.14, 2004/12/15 16:32:16-08:00, [email protected]
[PATCH] USB: usbcore changes for usb_dev->ep[](2/15)
This patch updates usbcore to match interface changes in the previous patch.
- udev->ep[] arrays are updated during config change events and as needed during enumeration;
- usb_epnum_to_ep_desc() vanishes;
- so do the udev->epmaxpacket[] arrays.
drivers/usb/core/hcd.c | 10 ++-------- drivers/usb/core/hub.c | 45 +++++++++++++++++++++++++-------------------- drivers/usb/core/message.c | 45 +++++++++++++++++++++++++-------------------- drivers/usb/core/urb.c | 2 +- drivers/usb/core/usb.c | 44 +++++--------------------------------------- drivers/usb/core/usb.h | 2 -- 6 files changed, 58 insertions(+), 90 deletions(-)
drivers/usb/core/hcd.c +2 -8
@@ -807,7 +807,7 @@down (&usb_bus_list_lock); usb_dev->bus->root_hub = usb_dev; - usb_dev->epmaxpacketin[0 ] = usb_dev->epmaxpacketout[0 ] =64 ; + usb_dev->ep0.desc.wMaxPacketSize =64 ; retval =usb_get_device_descriptor (usb_dev,USB_DT_DEVICE_SIZE );if (retval !=sizeof usb_dev->descriptor) { usb_dev->bus->root_hub =NULL ;
@@ -1335,14 +1335,8 @@local_irq_disable (); +/* ep is already gone from udev->ep_{in,out}[]; no more submits */ rescan: -/* (re)block new requests, as best we can */ -if (endpoint &USB_DIR_IN ) - udev->epmaxpacketin [epnum] =0 ; -else - udev->epmaxpacketout [epnum] =0 ; - -/* then kill any current requests */ spin_lock (&hcd_data_lock); list_for_each_entry (urb, &dev->urb_list, urb_list) {int tmp = urb->pipe;
drivers/usb/core/hub.c +25 -20
100 lines not on this page · raw message
drivers/usb/core/message.c +25 -20
75 lines not on this page · raw message
drivers/usb/core/urb.c +1 -1
@@ -265,7 +265,7 @@ max =usb_maxpacket (dev, pipe, is_out);if (max <=0 ) {dev_dbg (&dev->dev, -"bogus endpoint ep%d%s in %s (bad maxpacket %d)" , +"bogus endpoint ep%d%s in %s (bad maxpacket %d)\n" ,usb_pipeendpoint (pipe), is_out ?"out" :"in" , __FUNCTION__, max);return -EMSGSIZE ;
drivers/usb/core/usb.c +5 -39
62 lines not on this page · raw message
drivers/usb/core/usb.h +0 -2
@@ -13,8 +13,6 @@extern void usb_release_interface_cache (struct kref *ref);extern void usb_disable_device (struct usb_device *dev,int skip_ep0); -extern void usb_enable_endpoint (struct usb_device *dev, -struct usb_endpoint_descriptor *epd);extern void usb_enable_interface (struct usb_device *dev,struct usb_interface *intf);
ChangeSet 1.1938.446.15, 2004/12/15 16:32:41-08:00, [email protected]
[PATCH] USB: usbfs changes for usb_dev->ep[] (3/15)
Updates usbfs to stop using usb_epnum_to_ep_desc(). In the process, it acquires better error detection on its urb submit path.
drivers/usb/core/devio.c | 39 +++++++++++++++++++++++++-------------- 1 files changed, 25 insertions(+), 14 deletions(-)
drivers/usb/core/devio.c +25 -14
@@ -808,7 +808,7 @@ {struct usbdevfs_urb uurb;struct usbdevfs_iso_packet_desc *isopkt =NULL ; -struct usb_endpoint_descriptor *ep_desc; +struct usb_host_endpoint *ep;struct async *as;struct usb_ctrlrequest *dr =NULL ;unsigned int u, totlen, isofrmlen;
@@ -829,14 +829,17 @@if ((ret =checkintf (ps, ifnum)))return ret; } +if ((uurb.endpoint & ~USB_ENDPOINT_DIR_MASK ) !=0 ) + ep = ps->dev->ep_in [uurb.endpoint &USB_ENDPOINT_NUMBER_MASK ]; +else + ep = ps->dev->ep_out [uurb.endpoint &USB_ENDPOINT_NUMBER_MASK ]; +if (!ep) +return -ENOENT ;switch (uurb.type) {case USBDEVFS_URB_TYPE_CONTROL : -if ((uurb.endpoint & ~USB_ENDPOINT_DIR_MASK ) !=0 ) { -if (!(ep_desc =usb_epnum_to_ep_desc (ps->dev, uurb.endpoint))) -return -ENOENT ; -if ((ep_desc->bmAttributes &USB_ENDPOINT_XFERTYPE_MASK ) !=USB_ENDPOINT_XFER_CONTROL ) -return -EINVAL ; - } +if ((ep->desc.bmAttributes &USB_ENDPOINT_XFERTYPE_MASK ) + !=USB_ENDPOINT_XFER_CONTROL ) +return -EINVAL ;/* min 8 byte setup packet, max arbitrary */ if (uurb.buffer_length <8 || uurb.buffer_length >PAGE_SIZE )return -EINVAL ;
@@ -865,6 +868,12 @@break ;case USBDEVFS_URB_TYPE_BULK : +switch (ep->desc.bmAttributes &USB_ENDPOINT_XFERTYPE_MASK ) { +case USB_ENDPOINT_XFER_CONTROL : +case USB_ENDPOINT_XFER_ISOC : +return -EINVAL ; +/* allow single-shot interrupt transfers, at bogus rates */ + } uurb.number_of_packets =0 ;if (uurb.buffer_length >MAX_USBFS_BUFFER_SIZE )return -EINVAL ;
@@ -876,9 +885,10 @@/* arbitrary limit */ if (uurb.number_of_packets <1 || uurb.number_of_packets >128 )return -EINVAL ; -if (!(ep_desc =usb_epnum_to_ep_desc (ps->dev, uurb.endpoint))) -return -ENOENT ; - interval =1 <<min (15 , ep_desc->bInterval -1 ); +if ((ep->desc.bmAttributes &USB_ENDPOINT_XFERTYPE_MASK ) + !=USB_ENDPOINT_XFER_ISOC ) +return -EINVAL ; + interval =1 <<min (15 , ep->desc.bInterval -1 ); isofrmlen =sizeof (struct usbdevfs_iso_packet_desc ) * uurb.number_of_packets;if (!(isopkt =kmalloc (isofrmlen,GFP_KERNEL )))return -ENOMEM ;
@@ -902,12 +912,13 @@case USBDEVFS_URB_TYPE_INTERRUPT : uurb.number_of_packets =0 ; -if (!(ep_desc =usb_epnum_to_ep_desc (ps->dev, uurb.endpoint))) -return -ENOENT ; +if ((ep->desc.bmAttributes &USB_ENDPOINT_XFERTYPE_MASK ) + !=USB_ENDPOINT_XFER_INT ) +return -EINVAL ;if (ps->dev->speed ==USB_SPEED_HIGH ) - interval =1 <<min (15 , ep_desc->bInterval -1 ); + interval =1 <<min (15 , ep->desc.bInterval -1 );else - interval = ep_desc->bInterval; + interval = ep->desc.bInterval;if (uurb.buffer_length >MAX_USBFS_BUFFER_SIZE )return -EINVAL ;if (!access_ok ((uurb.endpoint &USB_DIR_IN ) ?VERIFY_WRITE :VERIFY_READ , uurb.buffer, uurb.buffer_length))
ChangeSet 1.1938.446.16, 2004/12/15 16:33:06-08:00, [email protected]
[PATCH] USB: ALSA and usb_dev->ep[] (4/15)
Makes an ALSA audio driver stop referencing the udev->epmaxpacket[] arrays.
sound/usb/usx2y/usbusx2yaudio.c | 11 +++++++++-- 1 files changed, 9 insertions(+), 2 deletions(-)
sound/usb/usx2y/usbusx2yaudio.c +9 -2
@@ -449,12 +449,16 @@int i;int is_playback = subs == subs->usX2Y->substream[SNDRV_PCM_STREAM_PLAYBACK ];struct usb_device *dev = subs->usX2Y->chip.dev; +struct usb_host_endpoint *ep; snd_assert(!subs->prepared, return 0);if (is_playback) {/* allocate a temporary buffer for playback */ subs->datapipe =usb_sndisocpipe (dev, subs->endpoint); - subs->maxpacksize = dev->epmaxpacketout[subs->endpoint]; + ep = dev->ep_out[subs->endpoint]; +if (!ep) +return -EINVAL ; + subs->maxpacksize = ep->desc.wMaxPacketSize;if (NULL == subs->tmpbuf) { subs->tmpbuf =kcalloc (NRPACKS , subs->maxpacksize,GFP_KERNEL );if (NULL == subs->tmpbuf) {
@@ -464,7 +468,10 @@ } }else { subs->datapipe =usb_rcvisocpipe (dev, subs->endpoint); - subs->maxpacksize = dev->epmaxpacketin[subs->endpoint]; + ep = dev->ep_in[subs->endpoint]; +if (!ep) +return -EINVAL ; + subs->maxpacksize = ep->desc.wMaxPacketSize; }/* allocate and initialize data urbs */
ChangeSet 1.1938.446.17, 2004/12/15 16:33:30-08:00, [email protected]
[PATCH] USB: auerswald and usb_dev->ep[] (5/15)
Update the auerswald driver to stop using the now-vanished usb_epnum_to_ep_desc() function.
drivers/usb/misc/auerswald.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-)
drivers/usb/misc/auerswald.c +6 -4
@@ -1123,16 +1123,16 @@static int auerswald_int_open (pauerswald_t cp) {int ret; -struct usb_endpoint_descriptor *ep; +struct usb_host_endpoint *ep;int irqsize;dbg ("auerswald_int_open" ); - ep =usb_epnum_to_ep_desc (cp->usbdev,USB_DIR_IN |AU_IRQENDP ); + ep = cp->usbdev->ep_in[AU_IRQENDP ];if (!ep) { ret = -EFAULT ; goto intoend; } - irqsize = ep->wMaxPacketSize; + irqsize = ep->desc.wMaxPacketSize; cp->irqsize = irqsize;/* allocate the urb and data buffer */
@@ -1151,7 +1151,9 @@ } }/* setup urb */ -usb_fill_int_urb (cp->inturbp, cp->usbdev,usb_rcvintpipe (cp->usbdev,AU_IRQENDP ), cp->intbufp, irqsize, auerswald_int_complete, cp, ep->bInterval); +usb_fill_int_urb (cp->inturbp, cp->usbdev, +usb_rcvintpipe (cp->usbdev,AU_IRQENDP ), cp->intbufp, + irqsize, auerswald_int_complete, cp, ep->desc.bInterval);/* start the urb */ cp->inturbp->status =0 ;/* needed! */ ret =usb_submit_urb (cp->inturbp,GFP_KERNEL );
ChangeSet 1.1938.446.18, 2004/12/15 16:33:56-08:00, [email protected]
[PATCH] USB: CRIS HCD and usb_dev->epmaxpacket (6/15)
Makes the CRIS HCD stop referencing the udev->epmaxpacket[] arrays. Also makes it stop providing device allocate/deallocate routines; this HCD doesn't need them, and a later patch will remove that API.
drivers/usb/host/hc_crisv10.c | 20 +------------------- 1 files changed, 1 insertion(+), 19 deletions(-)
drivers/usb/host/hc_crisv10.c +1 -19
@@ -479,8 +479,6 @@static int etrax_usb_submit_urb (struct urb *urb,int mem_flags);static int etrax_usb_unlink_urb (struct urb *urb,int status);static int etrax_usb_get_frame_number (struct usb_device *usb_dev); -static int etrax_usb_allocate_dev (struct usb_device *usb_dev); -static int etrax_usb_deallocate_dev (struct usb_device *usb_dev);static irqreturn_t etrax_usb_tx_interrupt (int irq,void *vhc,struct pt_regs *regs);static irqreturn_t etrax_usb_rx_interrupt (int irq,void *vhc,struct pt_regs *regs);
@@ -512,8 +510,6 @@static struct usb_operations etrax_usb_device_operations = { - .allocate = etrax_usb_allocate_dev, - .deallocate = etrax_usb_deallocate_dev, .get_frame_number = etrax_usb_get_frame_number, .submit_urb = etrax_usb_submit_urb, .unlink_urb = etrax_usb_unlink_urb,
@@ -1579,20 +1575,6 @@return (*R_USB_FM_NUMBER &0x7ff ); } -static int etrax_usb_allocate_dev (struct usb_device *usb_dev) -{ -DBFENTER ; -DBFEXIT ; -return 0 ; -} - -static int etrax_usb_deallocate_dev (struct usb_device *usb_dev) -{ -DBFENTER ; -DBFEXIT ; -return 0 ; -} -static irqreturn_t etrax_usb_tx_interrupt (int irq,void *vhc,struct pt_regs *regs) {DBFENTER ;
@@ -4546,7 +4528,7 @@ usb_rh->speed =USB_SPEED_FULL ; usb_rh->devnum =1 ; hc->bus->devnum_next =2 ; - usb_rh->epmaxpacketin[0 ] = usb_rh->epmaxpacketout[0 ] =64 ; + usb_rh->ep0.desc.wMaxPacketSize =64 ;usb_get_device_descriptor (usb_rh,USB_DT_DEVICE_SIZE );usb_new_device (usb_rh);
ChangeSet 1.1938.446.19, 2004/12/15 16:34:18-08:00, [email protected]
[PATCH] USB: EHCI HCD and usb_dev->epmaxpacket (7/15)
Makes EHCI stop referencing the udev->epmaxpacket[] arrays.
drivers/usb/host/ehci-sched.c | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-)
drivers/usb/host/ehci-sched.c +1 -2
@@ -614,11 +614,10 @@*/ epnum =usb_pipeendpoint (pipe); is_input =usb_pipein (pipe) ?USB_DIR_IN :0 ; + maxp =usb_maxpacket (dev, pipe, !is_input);if (is_input) { - maxp = dev->epmaxpacketin [epnum]; buf1 = (1 <<11 ); }else { - maxp = dev->epmaxpacketout [epnum]; buf1 =0 ; }
ChangeSet 1.1938.446.20, 2004/12/15 16:34:41-08:00, [email protected]
[PATCH] USB: usbtest and usb_dev->epmaxpacket (8/15)
Makes usbtest stop referencing the udev->epmaxpacket[] arrays.
drivers/usb/misc/usbtest.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/usb/misc/usbtest.c +2 -2
@@ -954,13 +954,13 @@case 13 :// short read, resembling case 10 req.wValue =cpu_to_le16 ((USB_DT_CONFIG <<8 ) |0 );// last data packet "should" be DATA1, not DATA0 - len =1024 - udev->epmaxpacketin [0 ]; + len =1024 - udev->descriptor.bMaxPacketSize0; expected = -EREMOTEIO ;break ;case 14 :// short read; try to fill the last packet req.wValue =cpu_to_le16 ((USB_DT_DEVICE <<8 ) |0 );// device descriptor size == 18 bytes - len = udev->epmaxpacketin [0 ]; + len = udev->descriptor.bMaxPacketSize0;switch (len) {case 8 : len =24 ;break ;case 16 : len =32 ;break ;
ChangeSet 1.1938.446.21, 2004/12/15 16:35:03-08:00, [email protected]
[PATCH] USB: HCD/usb_bus interface cleanup (9/15)
This changes the usbcore interfaces provided to HCDs:
- Remove usb_device->hcpriv and it allocation/deallocation hooks
- Replace struct hcd_dev with more appropriate per-endpoint state
- Update HCD apis to use usb_host_endpoint in key places
drivers/usb/core/hcd.h | 20 ++++++-------------- include/linux/usb.h | 17 ++++++++++++++--- 2 files changed, 20 insertions(+), 17 deletions(-)
drivers/usb/core/hcd.h +6 -14
@@ -66,7 +66,6 @@const char *description;/* "ehci-hcd" etc */ struct timer_list rh_timer;/* drives root hub */ -struct list_head dev_list;/* devices on this bus */ /* * hardware info/state
@@ -113,14 +112,6 @@ } -struct hcd_dev {/* usb_device.hcpriv points to this */ -struct list_head dev_list;/* on this hcd */ -struct list_head urb_list;/* pending on this dev */ - -/* per-configuration HC/HCD state, such as QH or ED */ -void *ep[32 ]; -}; -// urb.hcpriv is really hardware-specific struct hcd_timeout {/* timeouts we allocate */
@@ -136,8 +127,6 @@*/ struct usb_operations { -int (*allocate)(struct usb_device *); -int (*deallocate)(struct usb_device *);int (*get_frame_number) (struct usb_device *usb_dev);int (*submit_urb) (struct urb *urb,int mem_flags);int (*unlink_urb) (struct urb *urb,int status);
@@ -149,7 +138,8 @@void (*buffer_free)(struct usb_bus *bus,size_t size,void *addr,dma_addr_t dma); -void (*disable)(struct usb_device *udev,int bEndpointAddress); +void (*disable)(struct usb_device *udev, +struct usb_host_endpoint *ep);/* global suspend/resume of bus */ int (*hub_suspend)(struct usb_bus *);
@@ -200,13 +190,15 @@struct usb_hcd *(*hcd_alloc) (void );/* manage i/o requests, device state */ -int (*urb_enqueue) (struct usb_hcd *hcd,struct urb *urb, +int (*urb_enqueue) (struct usb_hcd *hcd, +struct usb_host_endpoint *ep, +struct urb *urb,int mem_flags);int (*urb_dequeue) (struct usb_hcd *hcd,struct urb *urb);/* hw synch, freeing endpoint resources that urb_dequeue can't */ void (*endpoint_disable)(struct usb_hcd *hcd, -struct hcd_dev *dev,int bEndpointAddress); +struct usb_host_endpoint *ep);/* root hub support */ int (*hub_status_data) (struct usb_hcd *hcd,char *buf);
include/linux/usb.h +14 -3
@@ -40,9 +40,22 @@* Devices may also have class-specific or vendor-specific descriptors. */ -/* host-side wrapper for parsed endpoint descriptors */ +/** +* struct usb_host_endpoint - host-side endpoint descriptor and queue +* @desc: descriptor for this endpoint, wMaxPacketSize in native byteorder +* @urb_list: urbs queued to this endpoint; maintained by usbcore +* @hcpriv: for use by HCD; typically holds hardware dma queue head (QH) +* with one or more transfer descriptors (TDs) per urb +* @extra: descriptors following this endpoint in the configuration +* @extralen: how many bytes of "extra" are valid +* +* USB requests are always queued to a given endpoint, identified by a +* descriptor within an active interface in a given USB configuration. +*/ struct usb_host_endpoint {struct usb_endpoint_descriptor desc; +struct list_head urb_list; +void *hcpriv;unsigned char *extra;/* Extra descriptors */ int extralen;
@@ -325,8 +338,6 @@int have_langid;/* whether string_langid is valid yet */ int string_langid;/* language ID for strings */ -void *hcpriv;/* Host Controller private data */ -struct list_head filelist;struct dentry *usbfs_dentry;/* usbfs dentry entry for the device */
ChangeSet 1.1938.446.22, 2004/12/15 16:35:26-08:00, [email protected]
[PATCH] USB: remove some now-unused HCD infrastructure (10/15)
This removes the code supporting usb_device->hcpriv allocation/deallocation, and hcd_dev-dev_list, from usbcore and the HCDs.
drivers/usb/core/hcd-pci.c | 2 - drivers/usb/core/hcd.c | 74 ---------------------------------------- drivers/usb/core/usb.c | 9 ---- drivers/usb/host/ohci-lh7a404.c | 2 - drivers/usb/host/ohci-omap.c | 1 drivers/usb/host/ohci-pxa27x.c | 2 - drivers/usb/host/ohci-sa1111.c | 2 - 7 files changed, 92 deletions(-)
drivers/usb/core/hcd-pci.c +0 -2
@@ -195,8 +195,6 @@ hcd->self.hcpriv = (void *) hcd;init_timer (&hcd->rh_timer); -INIT_LIST_HEAD (&hcd->dev_list); -usb_register_bus (&hcd->self);if ((retval = driver->start (hcd)) <0 ) {
drivers/usb/core/hcd.c +0 -74
95 lines not on this page · raw message
drivers/usb/core/usb.c +0 -9
@@ -646,8 +646,6 @@ udev =to_usb_device (dev); -if (udev->bus && udev->bus->op && udev->bus->op->deallocate) - udev->bus->op->deallocate (udev);usb_destroy_configuration (udev);usb_bus_put (udev->bus);kfree (udev);
@@ -729,13 +727,6 @@INIT_LIST_HEAD (&dev->filelist);init_MUTEX (&dev->serialize); - -if (dev->bus->op->allocate) -if (dev->bus->op->allocate (dev)) { -usb_bus_put (bus); -kfree (dev); -return NULL ; - }return dev; }
drivers/usb/host/ohci-lh7a404.c +0 -2
@@ -151,8 +151,6 @@ hcd->self.bus_name ="lh7a404" ; hcd->product_desc ="LH7A404 OHCI" ; -INIT_LIST_HEAD (&hcd->dev_list); -usb_register_bus (&hcd->self);if ((retval = driver->start (hcd)) <0 )
drivers/usb/host/ohci-omap.c +0 -1
@@ -335,7 +335,6 @@ hcd->self.bus_name = pdev->dev.bus_id; hcd->product_desc ="OMAP OHCI" ; -INIT_LIST_HEAD (&hcd->dev_list);usb_register_bus (&hcd->self);if ((retval = driver->start (hcd)) <0 )
drivers/usb/host/ohci-pxa27x.c +0 -2
@@ -249,8 +249,6 @@ hcd->self.bus_name ="pxa27x" ; hcd->product_desc ="PXA27x OHCI" ; -INIT_LIST_HEAD (&hcd->dev_list); -usb_register_bus (&hcd->self);if ((retval = driver->start (hcd)) <0 ) {
drivers/usb/host/ohci-sa1111.c +0 -2
@@ -199,8 +199,6 @@ hcd->self.bus_name ="sa1111" ; hcd->product_desc ="SA-1111 OHCI" ; -INIT_LIST_HEAD (&hcd->dev_list); -usb_register_bus (&hcd->self);if ((retval = driver->start (hcd)) <0 )
ChangeSet 1.1938.446.23, 2004/12/15 16:35:49-08:00, [email protected]
[PATCH] USB: maintain usb_host_endpoint.urb_list (11/15)
This patch changes the HCD glue code to use the URB queue now kept in usb_host_endpoint, and matching HCD API changes.
drivers/usb/core/config.c | 1 drivers/usb/core/hcd.c | 58 +++++++++++++++++++++------------------------ drivers/usb/core/message.c | 2 - drivers/usb/core/usb.c | 1 4 files changed, 31 insertions(+), 31 deletions(-)
drivers/usb/core/config.c +1 -0
@@ -88,6 +88,7 @@memcpy (&endpoint->desc, d, n);le16_to_cpus (&endpoint->desc.wMaxPacketSize); +INIT_LIST_HEAD (&endpoint->urb_list);/* Skip over any Class Specific or Vendor Specific descriptors; * find the next endpoint or interface descriptor */
drivers/usb/core/hcd.c +28 -30
134 lines not on this page · raw message
drivers/usb/core/message.c +1 -1
@@ -932,7 +932,7 @@ dev->ep_in[epnum] =NULL ; }if (ep && dev->bus && dev->bus->op && dev->bus->op->disable) - dev->bus->op->disable (dev, ep->desc.bEndpointAddress); + dev->bus->op->disable (dev, ep); }/**
drivers/usb/core/usb.c +1 -0
@@ -688,6 +688,7 @@ dev->dev.release = usb_release_dev; dev->state =USB_STATE_ATTACHED ; +INIT_LIST_HEAD (&dev->ep0.urb_list); dev->ep0.desc.bLength =USB_DT_ENDPOINT_SIZE ; dev->ep0.desc.bDescriptorType =USB_DT_ENDPOINT ;/* ep0 maxpacket comes later, from device descriptor */
ChangeSet 1.1938.446.24, 2004/12/15 16:36:14-08:00, [email protected]
[PATCH] USB: EHCI and HCD API updates (12/15)
Updates the EHCI HCD to match API updates. This includes both new changes (struct hcd_dev gone) and older ones (endpoints now properly enabled/disabled, so "re"init paths aren't needed). Hmm, the ISO stuff could avoid that lookup now too.
drivers/usb/host/ehci-hcd.c | 20 ++++++++------------ drivers/usb/host/ehci-q.c | 33 ++++++--------------------------- drivers/usb/host/ehci-sched.c | 33 ++++++++++++++------------------- drivers/usb/host/ehci.h | 3 ++- 4 files changed, 30 insertions(+), 59 deletions(-)
drivers/usb/host/ehci-hcd.c +8 -12
@@ -895,6 +895,7 @@*/ static int ehci_urb_enqueue (struct usb_hcd *hcd, +struct usb_host_endpoint *ep,struct urb *urb,int mem_flags ) {
@@ -909,12 +910,12 @@default :if (!qh_urb_transaction (ehci, urb, &qtd_list, mem_flags))return -ENOMEM ; -return submit_async (ehci, urb, &qtd_list, mem_flags); +return submit_async (ehci, ep, urb, &qtd_list, mem_flags);case PIPE_INTERRUPT :if (!qh_urb_transaction (ehci, urb, &qtd_list, mem_flags))return -ENOMEM ; -return intr_submit (ehci, urb, &qtd_list, mem_flags); +return intr_submit (ehci, ep, urb, &qtd_list, mem_flags);case PIPE_ISOCHRONOUS :if (urb->dev->speed ==USB_SPEED_HIGH )
@@ -1014,23 +1015,18 @@// bulk qh holds the data toggle static void -ehci_endpoint_disable (struct usb_hcd *hcd,struct hcd_dev *dev,int ep) +ehci_endpoint_disable (struct usb_hcd *hcd,struct usb_host_endpoint *ep) {struct ehci_hcd *ehci =hcd_to_ehci (hcd); -int epnum;unsigned long flags;struct ehci_qh *qh, *tmp;/* ASSERT: any requests/urbs are being unlinked */ /* ASSERT: nobody can be submitting urbs for this any more */ - epnum = ep &USB_ENDPOINT_NUMBER_MASK ; -if (epnum !=0 && (ep &USB_DIR_IN )) - epnum |=0x10 ; - rescan:spin_lock_irqsave (&ehci->lock, flags); - qh = (struct ehci_qh *) dev->ep [epnum]; + qh = ep->hcpriv;if (!qh) goto done;
@@ -1072,12 +1068,12 @@/* caller was supposed to have unlinked any requests; * that's not our job. just leak this memory. */ -ehci_err (ehci,"qh %p (#%d) state %d%s\n" , - qh, epnum, qh->qh_state, +ehci_err (ehci,"qh %p (#%02x) state %d%s\n" , + qh, ep->desc.bEndpointAddress, qh->qh_state,list_empty (&qh->qtd_list) ?"" :"(has tds)" );break ; } - dev->ep[epnum] =NULL ; + ep->hcpriv =NULL ; done:spin_unlock_irqrestore (&ehci->lock, flags);return ;
drivers/usb/host/ehci-q.c +6 -27
@@ -832,26 +832,8 @@ qtd = list_entry (qtd_list->next, struct ehci_qtd, qtd_list); -/* control qh may need patching after enumeration */ +/* control qh may need patching ... */ if (unlikely (epnum ==0 )) { -/* set_address changes the address */ -if ((qh->hw_info1 &QH_ADDR_MASK ) ==0 ) - qh->hw_info1 |=cpu_to_le32 ( -usb_pipedevice (urb->pipe)); - -/* for full speed, ep0 maxpacket can grow */ -else if (!(qh->hw_info1 - &__constant_cpu_to_le32 (0x3 <<12 ))) { -u32 info, max; - - info =le32_to_cpu (qh->hw_info1); - max = urb->dev->descriptor.bMaxPacketSize0; -if (max > (0x07ff & (info >>16 ))) { - info &= ~(0x07ff <<16 ); - info |= max <<16 ; - qh->hw_info1 =cpu_to_le32 (info); - } - }/* usb_reset_device() briefly reverts to address 0 */ if (usb_pipedevice (urb->pipe) ==0 )
@@ -908,33 +890,30 @@static int submit_async (struct ehci_hcd *ehci, +struct usb_host_endpoint *ep,struct urb *urb,struct list_head *qtd_list,int mem_flags ) {struct ehci_qtd *qtd; -struct hcd_dev *dev;int epnum;unsigned long flags;struct ehci_qh *qh =NULL ; qtd = list_entry (qtd_list->next, struct ehci_qtd, qtd_list); - dev = (struct hcd_dev *)urb->dev->hcpriv; - epnum =usb_pipeendpoint (urb->pipe); -if (usb_pipein (urb->pipe) && !usb_pipecontrol (urb->pipe)) - epnum |=0x10 ; + epnum = ep->desc.bEndpointAddress;#ifdef EHCI_URB_TRACE ehci_dbg (ehci,"%s %s urb %p ep%d%s len %d, qtd %p [qh %p]\n" , __FUNCTION__, urb->dev->devpath, urb, - epnum &0x0f ,usb_pipein (urb->pipe) ?"in" :"out" , + epnum &0x0f , (epnum &USB_DIR_IN ) ?"in" :"out" , urb->transfer_buffer_length, - qtd, dev ? dev->ep [epnum] : (void *)~0 ); + qtd, ep->hcpriv);#endif spin_lock_irqsave (&ehci->lock, flags); - qh =qh_append_tds (ehci, urb, qtd_list, epnum, &dev->ep [epnum]); + qh =qh_append_tds (ehci, urb, qtd_list, epnum, &ep->hcpriv);/* Control/bulk operations through TTs don't need scheduling, * the HC and TT handle it when the TT has a buffer ready.
drivers/usb/host/ehci-sched.c +14 -19
@@ -525,6 +525,7 @@static int intr_submit (struct ehci_hcd *ehci, +struct usb_host_endpoint *ep,struct urb *urb,struct list_head *qtd_list, int mem_flags
@@ -532,23 +533,17 @@unsigned epnum;unsigned long flags;struct ehci_qh *qh; -struct hcd_dev *dev; -int is_input;int status =0 ;struct list_head empty;/* get endpoint and transfer/schedule data */ - epnum =usb_pipeendpoint (urb->pipe); - is_input =usb_pipein (urb->pipe); -if (is_input) - epnum |=0x10 ; + epnum = ep->desc.bEndpointAddress;spin_lock_irqsave (&ehci->lock, flags); - dev = (struct hcd_dev *)urb->dev->hcpriv;/* get qh and force any scheduling errors */ INIT_LIST_HEAD (&empty); - qh =qh_append_tds (ehci, urb, &empty, epnum, &dev->ep [epnum]); + qh =qh_append_tds (ehci, urb, &empty, epnum, &ep->hcpriv);if (qh ==0 ) { status = -ENOMEM ; goto done;
@@ -559,7 +554,7 @@ }/* then queue the urb's tds to the qh */ - qh =qh_append_tds (ehci, urb, qtd_list, epnum, &dev->ep [epnum]); + qh =qh_append_tds (ehci, urb, qtd_list, epnum, &ep->hcpriv);BUG_ON (qh ==0 );/* ... update usbfs periodic stats */
@@ -689,7 +684,6 @@*/ if (stream->refcount ==1 ) {int is_in; -struct hcd_dev *dev = stream->udev->hcpriv;// BUG_ON (!list_empty(&stream->td_list));
@@ -719,7 +713,7 @@ is_in = (stream->bEndpointAddress &USB_DIR_IN ) ?0x10 :0 ; stream->bEndpointAddress &=0x0f ; - dev->ep[is_in + stream->bEndpointAddress] =NULL ; + stream->ep->hcpriv =NULL ;if (stream->rescheduled) { ehci_info (ehci, "ep%d%s-iso rescheduled "
@@ -746,24 +740,25 @@ iso_stream_find (struct ehci_hcd *ehci, struct urb *urb) { unsigned epnum; -struct hcd_dev *dev;struct ehci_iso_stream *stream; +struct usb_host_endpoint *ep;unsigned long flags; epnum =usb_pipeendpoint (urb->pipe);if (usb_pipein (urb->pipe)) - epnum +=0x10 ; + ep = urb->dev->ep_in[epnum]; +else + ep = urb->dev->ep_out[epnum];spin_lock_irqsave (&ehci->lock, flags); - - dev = (struct hcd_dev *)urb->dev->hcpriv; - stream = dev->ep [epnum]; + stream = ep->hcpriv;if (unlikely (stream ==0 )) { stream =iso_stream_alloc (GFP_ATOMIC );if (likely (stream !=0 )) {/* dev->ep owns the initial refcount */ - dev->ep[epnum] = stream; + ep->hcpriv = stream; + stream->ep = ep;iso_stream_init (stream, urb->dev, urb->pipe, urb->interval); }
@@ -771,8 +766,8 @@/* if dev->ep [epnum] is a QH, info1.maxpacket is nonzero */ }else if (unlikely (stream->hw_info1 !=0 )) {ehci_dbg (ehci,"dev %s ep%d%s, not iso??\n" , - urb->dev->devpath, epnum &0x0f , - (epnum &0x10 ) ?"in" :"out" ); + urb->dev->devpath, epnum, +usb_pipein (urb->pipe) ?"in" :"out" ); stream =NULL ; }
drivers/usb/host/ehci.h +2 -1
@@ -36,7 +36,7 @@/* ehci_hcd->lock guards shared data against other CPUs: * ehci_hcd: async, reclaim, periodic (and shadow), ... -* hcd_dev: ep[] +* usb_host_endpoint: hcpriv * ehci_qh: qh_next, qtd_list * ehci_qtd: qtd_list *
@@ -430,6 +430,7 @@struct list_head td_list;/* queued itds/sitds */ struct list_head free_list;/* list of unused itds/sitds */ struct usb_device *udev; +struct usb_host_endpoint *ep;/* output of (re)scheduling */ unsigned long start;/* jiffies */
ChangeSet 1.1938.446.25, 2004/12/15 16:37:08-08:00, [email protected]
[PATCH] USB: OHCI and HCD API changes (13/15)
Updates the OHCI HCD to match API updates. This includes both new changes (struct hcd_dev gone) and older ones (endpoints now properly enabled/disabled, so "re"init paths aren't needed).
drivers/usb/host/ohci-hcd.c | 23 ++++++++-------------- drivers/usb/host/ohci-q.c | 46 +++++++++++++++++++------------------------- 2 files changed, 29 insertions(+), 40 deletions(-)
drivers/usb/host/ohci-hcd.c +9 -14
@@ -165,6 +165,7 @@*/ static int ohci_urb_enqueue (struct usb_hcd *hcd, +struct usb_host_endpoint *ep,struct urb *urb,int mem_flags ) {
@@ -181,7 +182,7 @@#endif /* every endpoint has a ed, locate and maybe (re)initialize it */ -if (! (ed =ed_get (ohci, urb->dev, pipe, urb->interval))) +if (! (ed =ed_get (ohci, ep, urb->dev, pipe, urb->interval)))return -ENOMEM ;/* for the private part of the URB we need the number of TDs (size) */
@@ -338,26 +339,21 @@*/ static void -ohci_endpoint_disable (struct usb_hcd *hcd,struct hcd_dev *dev,int ep) +ohci_endpoint_disable (struct usb_hcd *hcd,struct usb_host_endpoint *ep) {struct ohci_hcd *ohci =hcd_to_ohci (hcd); -int epnum = ep &USB_ENDPOINT_NUMBER_MASK ;unsigned long flags; -struct ed *ed; +struct ed *ed = ep->hcpriv;unsigned limit =1000 ;/* ASSERT: any requests/urbs are being unlinked */ /* ASSERT: nobody can be submitting urbs for this any more */ - epnum <<=1 ; -if (epnum !=0 && !(ep &USB_DIR_IN )) - epnum |=1 ; +if (!ed) +return ; rescan:spin_lock_irqsave (&ohci->lock, flags); - ed = dev->ep [epnum]; -if (!ed) - goto done;if (!HCD_IS_RUNNING (ohci->hcd.state)) { sanitize:
@@ -387,14 +383,13 @@/* caller was supposed to have unlinked any requests; * that's not our job. can't recover; must leak ed. */ -ohci_err (ohci,"leak ed %p (#%d) state %d%s\n" , - ed, epnum, ed->state, +ohci_err (ohci,"leak ed %p (#%02x) state %d%s\n" , + ed, ep->desc.bEndpointAddress, ed->state,list_empty (&ed->td_list) ?"" :" (has tds)" );td_free (ohci, ed->dummy);break ; } - dev->ep [epnum] =NULL ; -done: + ep->hcpriv =NULL ;spin_unlock_irqrestore (&ohci->lock, flags);return ; }
drivers/usb/host/ohci-q.c +20 -26
95 lines not on this page · raw message
ChangeSet 1.1938.446.26, 2004/12/15 16:37:38-08:00, [email protected]
[PATCH] USB: UHCI and HCD API change (14/15)
UHCI changes to match the updated HCD glue calls. Since it's handed the relevant endpoint queue on a silver platter, the driver no longer needs to search anything to find the queue entries.
drivers/usb/host/uhci-hcd.c | 39 +++++---------------------------------- 1 files changed, 5 insertions(+), 34 deletions(-)
drivers/usb/host/uhci-hcd.c +5 -34
@@ -1255,7 +1255,9 @@return NULL ; } -static int uhci_urb_enqueue (struct usb_hcd *hcd,struct urb *urb,int mem_flags) +static int uhci_urb_enqueue (struct usb_hcd *hcd, +struct usb_host_endpoint *ep, +struct urb *urb,int mem_flags) {int ret;struct uhci_hcd *uhci =hcd_to_uhci (hcd);
@@ -2293,44 +2295,13 @@return &uhci->hcd; } -/* Are there any URBs for a particular device/endpoint on a given list? */ -static int urbs_for_ep_list (struct list_head *head, -struct hcd_dev *hdev,int ep) -{ -struct urb_priv *urbp; - -list_for_each_entry (urbp, head, urb_list) { -struct urb *urb = urbp->urb; - -if (hdev == urb->dev->hcpriv && ep == - (usb_pipeendpoint (urb->pipe) | -usb_pipein (urb->pipe))) -return 1 ; - } -return 0 ; -} - -/* Are there any URBs for a particular device/endpoint? */ -static int urbs_for_ep (struct uhci_hcd *uhci,struct hcd_dev *hdev,int ep) -{ -int rc; - -spin_lock_irq (&uhci->schedule_lock); - rc = (urbs_for_ep_list (&uhci->urb_list, hdev, ep) || -urbs_for_ep_list (&uhci->complete_list, hdev, ep) || -urbs_for_ep_list (&uhci->urb_remove_list, hdev, ep)); -spin_unlock_irq (&uhci->schedule_lock); -return rc; -} -/* Wait until all the URBs for a particular device/endpoint are gone */ static void uhci_hcd_endpoint_disable (struct usb_hcd *hcd, -struct hcd_dev *hdev,int endpoint) +struct usb_host_endpoint *ep) {struct uhci_hcd *uhci =hcd_to_uhci (hcd); -wait_event_interruptible (uhci->waitqh, - !urbs_for_ep (uhci, hdev, endpoint)); +wait_event_interruptible (uhci->waitqh,list_empty (&ep->urb_list)); }static int uhci_hcd_get_frame_number (struct usb_hcd *hcd)
ChangeSet 1.1938.446.27, 2004/12/15 16:38:01-08:00, [email protected]
[PATCH] USB: better messages for "no-IRQ" cases (15/15)
This changes the usbcore message about HCD IRQ problems so it makes sense on systems without ACPI or an APIC. It also updates the comments; the issue doesn't appiear only with PCI, and with the recent enumeration changes it doesn't happen just with set_address either.
drivers/usb/core/hcd.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-)
drivers/usb/core/hcd.c +4 -3
@@ -1251,13 +1251,14 @@ goto done; } -/* PCI IRQ setup can easily be broken so that USB controllers +/* IRQ setup can easily be broken so that USB controllers * never get completion IRQs ... maybe even the ones we need to -* finish unlinking the initial failed usb_set_address(). +* finish unlinking the initial failed usb_set_address() +* or device descriptor fetch. */ if (!hcd->saw_irq && hcd->self.root_hub != urb->dev) {dev_warn (hcd->self.controller,"Unlink after no-IRQ? " -"Different ACPI or APIC settings may help." +"Controller is probably using the wrong IRQ." "\n" ); hcd->saw_irq =1 ; }
ChangeSet 1.1938.446.28, 2004/12/16 14:39:21-08:00, [email protected]
[PATCH] USB Storage: unusual_devs: prolific atapi controler
This adds an unusual devices entry for a Prolific ATAPI-6 conmtroller that needs the FIX_CAPACITY flag.
drivers/usb/storage/unusual_devs.h | 7 +++++++ 1 files changed, 7 insertions(+)
drivers/usb/storage/unusual_devs.h +7 -0
@@ -532,6 +532,13 @@ US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_FIX_CAPACITY ), +/* Reported by Alex Butcher <[email protected]> */ +UNUSUAL_DEV (0x067b ,0x3507 ,0x0001 ,0x0001 , +"Prolific Technology Inc." , +"ATAPI-6 Bridge Controller" , +US_SC_DEVICE ,US_PR_DEVICE ,NULL , +US_FL_FIX_CAPACITY ), +/* Submitted by Benny Sjostrand <[email protected]> */ UNUSUAL_DEV( 0x0686, 0x4011, 0x0001, 0x0001, "Minolta",
ChangeSet 1.1938.446.29, 2004/12/17 11:39:40-08:00, [email protected]
[PATCH] USB: HCDs and per-device state (16/15)
SL811 changes getting rid of the "hcd_dev" support, using usb_host_endpoint to hold the QH. This also eliminates the "sl811h_req" data type. Compile-tested only!
drivers/usb/host/sl811-hcd.c | 149 +++++++++++++++---------------------------- drivers/usb/host/sl811.h | 10 -- 2 files changed, 53 insertions(+), 106 deletions(-)
drivers/usb/host/sl811-hcd.c +52 -97
@@ -67,7 +67,7 @@MODULE_DESCRIPTION ("SL811HS USB Host Controller Driver" );MODULE_LICENSE ("GPL" ); -#define DRIVER_VERSION "06 Dec 2004" +#define DRIVER_VERSION "15 Dec 2004"#ifndef DEBUG
@@ -314,7 +314,6 @@static struct sl811h_ep *start (struct sl811 *sl811,u8 bank) {struct sl811h_ep *ep; -struct sl811h_req *req;struct urb *urb;int fclock;u8 control;
@@ -348,13 +347,12 @@ struct sl811h_ep, schedule); } -if (unlikely (list_empty (&ep->queue))) { +if (unlikely (list_empty (&ep->hep->urb_list))) {DBG ("empty %p queue?\n" , ep);return NULL ; } - req = container_of(ep->queue.next, struct sl811h_req, queue); - urb = req->urb; + urb = container_of(ep->hep->urb_list.next, struct urb, urb_list); control = ep->defctrl;/* if this frame doesn't have enough time left to transfer this
@@ -432,17 +430,12 @@static void finish_request (struct sl811 *sl811,struct sl811h_ep *ep, -struct sl811h_req *req, +struct urb *urb,struct pt_regs *regs,int status ) __releases(sl811->lock) __acquires(sl811->lock) {unsigned i; -struct urb *urb = req->urb; - -list_del (&req->queue); -kfree (req); - urb->hcpriv =NULL ;if (usb_pipecontrol (urb->pipe)) ep->nextpid =USB_PID_SETUP ;
@@ -457,7 +450,7 @@spin_lock (&sl811->lock);/* leave active endpoints in the schedule */ -if (!list_empty (&ep->queue)) +if (!list_empty (&ep->hep->urb_list))return ;/* async deschedule? */
@@ -496,7 +489,6 @@ done(struct sl811 *sl811, struct sl811h_ep *ep, u8 bank, struct pt_regs *regs) { u8 status; -struct sl811h_req *req;struct urb *urb;int urbstat = -EINPROGRESS ;
@@ -505,8 +497,7 @@ status =sl811_read (sl811, bank +SL11H_PKTSTATREG ); - req = container_of(ep->queue.next, struct sl811h_req, queue); - urb = req->urb; + urb = container_of(ep->hep->urb_list.next, struct urb, urb_list);/* we can safely ignore NAKs */ if (status &SL11H_STATMASK_NAK ) {
@@ -577,7 +568,7 @@ urb->status = urbstat;spin_unlock (&urb->lock); - req =NULL ; + urb =NULL ; ep->nextpid =USB_PID_ACK ; }break ;
@@ -618,9 +609,8 @@ bank, status, ep, urbstat); } -if ((urbstat != -EINPROGRESS || urb->status != -EINPROGRESS ) - && req) -finish_request (sl811, ep, req, regs, urbstat); +if (urb && (urbstat != -EINPROGRESS || urb->status != -EINPROGRESS )) +finish_request (sl811, ep, urb, regs, urbstat); }static inline u8 checkdone (struct sl811 *sl811)
@@ -643,7 +633,7 @@ ctl =sl811_read (sl811,SL811_EP_B (SL11H_HOSTCTLREG ));if (ctl &SL11H_HCTLMASK_ARM )sl811_write (sl811,SL811_EP_B (SL11H_HOSTCTLREG ),0 ); -DBG ("%s DONE_B: ctrl %02x sts %02x\n" , ctl, +DBG ("%s DONE_B: ctrl %02x sts %02x\n" , (ctl &SL11H_HCTLMASK_ARM ) ?"timeout" :"lost" , ctl,sl811_read (sl811,SL811_EP_B (SL11H_PKTSTATREG )));
@@ -732,8 +722,8 @@if (sl811->active_a) {sl811_write (sl811,SL811_EP_A (SL11H_HOSTCTLREG ),0 );finish_request (sl811, sl811->active_a, -container_of (sl811->active_a->queue.next, - struct sl811h_req, queue), +container_of (sl811->active_a->hep->urb_list.next, + struct urb, urb_list),NULL , -ESHUTDOWN ); sl811->active_a =NULL ; }
@@ -741,8 +731,8 @@if (sl811->active_b) {sl811_write (sl811,SL811_EP_B (SL11H_HOSTCTLREG ),0 );finish_request (sl811, sl811->active_b, -container_of (sl811->active_b->queue.next, - struct sl811h_req, queue), +container_of (sl811->active_b->hep->urb_list.next, + struct urb, urb_list),NULL , -ESHUTDOWN ); sl811->active_b =NULL ; }
@@ -816,19 +806,18 @@/*-------------------------------------------------------------------------*/ static int sl811h_urb_enqueue ( -struct usb_hcd *hcd, -struct urb *urb, -int mem_flags +struct usb_hcd *hcd, +struct usb_host_endpoint *hep, +struct urb *urb, +int mem_flags ) {struct sl811 *sl811 =hcd_to_sl811 (hcd);struct usb_device *udev = urb->dev; -struct hcd_dev *hdev = (struct hcd_dev *) udev->hcpriv;unsigned int pipe = urb->pipe;int is_out = !usb_pipein (pipe);int type =usb_pipetype (pipe);int epnum =usb_pipeendpoint (pipe);struct sl811h_ep *ep =NULL ; -struct sl811h_req *req;unsigned long flags;int i;int retval =0 ;
@@ -838,16 +827,8 @@return -ENOSPC ;#endif -/* avoid all allocations within spinlocks: request or endpoint */ - urb->hcpriv = req =kmalloc (sizeof *req, mem_flags); -if (!req) -return -ENOMEM ; - req->urb = urb; - - i = epnum <<1 ; -if (i && is_out) - i |=1 ; -if (!hdev->ep[i]) +/* avoid all allocations within spinlocks */ +if (!hep->hcpriv) ep =kcalloc (1 ,sizeof *ep, mem_flags);spin_lock_irqsave (&sl811->lock, flags);
@@ -859,15 +840,14 @@ goto fail; } -if (hdev->ep[i]) { +if (hep->hcpriv) {kfree (ep); - ep = hdev->ep[i]; + ep = hep->hcpriv; }else if (!ep) { retval = -ENOMEM ; goto fail; }else { -INIT_LIST_HEAD (&ep->queue);INIT_LIST_HEAD (&ep->schedule); ep->udev =usb_get_dev (udev); ep->epnum = epnum;
@@ -911,7 +891,7 @@break ; } - hdev->ep[i] = ep; + hep->hcpriv = ep; }/* maybe put endpoint into schedule */
@@ -966,47 +946,38 @@spin_lock (&urb->lock);if (urb->status != -EINPROGRESS ) {spin_unlock (&urb->lock); -finish_request (sl811, ep, req,NULL ,0 ); - req =NULL ; +finish_request (sl811, ep, urb,NULL ,0 ); retval =0 ; goto fail; } -list_add_tail (&req->queue, &ep->queue); + urb->hcpriv = hep;spin_unlock (&urb->lock);start_transfer (sl811);sl811_write (sl811,SL11H_IRQ_ENABLE , sl811->irq_enable); fail:spin_unlock_irqrestore (&sl811->lock, flags); -if (retval) -kfree (req);return retval; }static int sl811h_urb_dequeue (struct usb_hcd *hcd,struct urb *urb) {struct sl811 *sl811 =hcd_to_sl811 (hcd); -struct usb_device *udev = urb->dev; -struct hcd_dev *hdev = (struct hcd_dev *) udev->hcpriv; -unsigned int pipe = urb->pipe; -int is_out = !usb_pipein (pipe); +struct usb_host_endpoint *hep = urb->hcpriv;unsigned long flags; -unsigned i;struct sl811h_ep *ep; -struct sl811h_req *req = urb->hcpriv;int retval =0 ; - i =usb_pipeendpoint (pipe) <<1 ; -if (i && is_out) - i |=1 ; +if (!hep) +return -EINVAL ;spin_lock_irqsave (&sl811->lock, flags); - ep = hdev->ep[i]; + ep = hep->hcpriv;if (ep) {/* finish right away if this urb can't be active ... * note that some drivers wrongly expect delays */ -if (ep->queue.next != &req->queue) { +if (ep->hep->urb_list.next != &urb->urb_list) {/* not front of queue? never active */ /* for active transfers, we expect an IRQ */
@@ -1022,7 +993,7 @@ 0); sl811->active_a =NULL ; }else - req =NULL ; + urb =NULL ; #ifdef USE_B }else if (sl811->active_b == ep) {if (time_before_eq (sl811->jiffies_a, jiffies)) {
@@ -1036,14 +1007,14 @@ 0); sl811->active_b = NULL; }else - req =NULL ; + urb =NULL ;#endif }else {/* front of queue for inactive endpoint */ } -if (req) -finish_request (sl811, ep, req,NULL ,0 ); +if (urb) +finish_request (sl811, ep, urb,NULL ,0 );else VDBG ("dequeue, urb %p active %s; wait4irq\n" , urb, (sl811->active_a == ep) ?"A" :"B" );
@@ -1054,33 +1025,22 @@ }static void -sl811h_endpoint_disable (struct usb_hcd *hcd,struct hcd_dev *hdev,int epnum) +sl811h_endpoint_disable (struct usb_hcd *hcd,struct usb_host_endpoint *hep) { -struct sl811 *sl811 =hcd_to_sl811 (hcd); -struct sl811h_ep *ep; -unsigned long flags; -int i; - - i = (epnum &0xf ) <<1 ; -if (epnum && !(epnum &USB_DIR_IN )) - i |=1 ; - -spin_lock_irqsave (&sl811->lock, flags); - ep = hdev->ep[i]; - hdev->ep[i] =NULL ; -spin_unlock_irqrestore (&sl811->lock, flags); +struct sl811h_ep *ep = hep->hcpriv; -if (ep) { -/* assume we'd just wait for the irq */ -if (!list_empty (&ep->queue)) -msleep (3 ); -if (!list_empty (&ep->queue)) -WARN ("ep %p not empty?\n" , ep); +if (!ep) +return ; -usb_put_dev (ep->udev); -kfree (ep); - } -return ; +/* assume we'd just wait for the irq */ +if (!list_empty (&hep->urb_list)) +msleep (3 ); +if (!list_empty (&hep->urb_list)) +WARN ("ep %p not empty?\n" , ep); + +usb_put_dev (ep->udev); +kfree (ep); + hep->hcpriv =0 ; } static int
@@ -1481,7 +1441,7 @@ sl811_read(sl811, SL811_EP_B(SL11H_PKTSTATREG)));seq_printf (s,"\n" ); list_for_each_entry (ep, &sl811->async, schedule) { -struct sl811h_req *req; +struct urb *urb; seq_printf(s, "%s%sqh%p, ep%d%s, maxpacket %d" " nak %d err %d\n",
@@ -1497,10 +1457,10 @@ }; s;}), ep->maxpacket, ep->nak_count, ep->error_count); - list_for_each_entry (req, &ep->queue, queue) { -seq_printf (s," urb%p, %d/%d\n" , req->urb, - req->urb->actual_length, - req->urb->transfer_buffer_length); + list_for_each_entry (urb, &ep->hep->urb_list, urb_list) { +seq_printf (s," urb%p, %d/%d\n" , urb, + urb->actual_length, + urb->transfer_buffer_length); } }if (!list_empty (&sl811->async))
@@ -1743,11 +1703,6 @@ sl811->hcd.self.op = &usb_hcd_operations; sl811->hcd.self.hcpriv = sl811; -// NOTE: 2.6.11 starts to change the hcd glue layer some more, -// eventually letting us eliminate struct sl811h_req and a -// lot of the boilerplate code here - -INIT_LIST_HEAD (&sl811->hcd.dev_list); sl811->hcd.self.release = &usb_hcd_release; sl811->hcd.description = sl811h_hc_driver.description;
drivers/usb/host/sl811.h +1 -9
@@ -162,7 +162,7 @@ }struct sl811h_ep { -struct list_head queue; +struct usb_host_endpoint *hep;struct usb_device *udev;u8 defctrl;
@@ -182,14 +182,6 @@/* async schedule */ struct list_head schedule; -}; - -struct sl811h_req { -/* FIXME usbcore should maintain endpoints' urb queues -* directly in 'struct usb_host_endpoint' -*/ -struct urb *urb; -struct list_head queue; };/*-------------------------------------------------------------------------*/
ChangeSet 1.1938.446.30, 2004/12/17 11:41:02-08:00, [email protected]
[PATCH] USB Storage: Increase Genesys delay
This is patch as436 from Alan Stern.
This patch increases the delay used for Genesys devices about 10%. At least one user reports that this created a significant improvement in operation.
drivers/usb/storage/transport.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
drivers/usb/storage/transport.c +3 -2
@@ -992,9 +992,10 @@/* send/receive data payload, if there is any */ /* Genesys Logic interface chips need a 100us delay between the -* command phase and the data phase */ +* command phase and the data phase. Some devices need a little +* more than that, probably because of clock rate inaccuracies. */ if (us->pusb_dev->descriptor.idVendor ==USB_VENDOR_ID_GENESYS ) -udelay (100 ); +udelay (110 );if (transfer_length) { unsigned int pipe = srb->sc_data_direction == DMA_FROM_DEVICE ?
ChangeSet 1.1938.446.31, 2004/12/17 11:41:58-08:00, [email protected]
[PATCH] USB: EHCI "park" mode disabled
This changes the default initialization of the EHCI "park" mode so that silicon which supports it (NF2, NF3, ALI, GeneSys, ...) will not use it unless explicitly told to do so by a (new) module parameter.
This is a workaround for some problems observed on some NF2 systems:
- Throughput ("hdparm -tT") is lower than expected with recent high performance drives (Maxtor) ... disabling "park" increases it by about 2 MByte/sec, but it's still much slower than expected. (USB analyser traces should be informative here.)
- Some data corruption observed on reads from drives using an ALI storage adapter ... disabling "park" stops the corruption. (Strongly suggestive of hardware or peripheral firmware bugs; multiple back-to-back bulk-IN packets should work just fine.)
The "don't use park mode" workaround will at most reduce USB (and PCI) throughput slightly on systems that work as expected, but some of those can re-enable the "park" mode.
drivers/usb/host/ehci-hcd.c | 27 ++++++++++++++++++++++----- 1 files changed, 22 insertions(+), 5 deletions(-)
drivers/usb/host/ehci-hcd.c +22 -5
@@ -124,11 +124,16 @@#define EHCI_ASYNC_JIFFIES (HZ/20)/* async idle timeout */ #define EHCI_SHRINK_JIFFIES (HZ/200)/* async qh unlink delay */ -/* Initial IRQ latency: lower than default */ +/* Initial IRQ latency: faster than hw default */ static int log2_irq_thresh =0 ;// 0 to 6 module_param (log2_irq_thresh, int,S_IRUGO );MODULE_PARM_DESC (log2_irq_thresh,"log2 IRQ latency, 1-64 microframes" ); +/* initial park setting: slower than hw default */ +static unsigned park =0 ; +module_param (park, uint,S_IRUGO ); +MODULE_PARM_DESC (park,"park setting; 1-3 back-to-back async packets" ); +#define INTR_MASK (STS_IAA | STS_FATAL | STS_PCD | STS_ERR | STS_INT)/*-------------------------------------------------------------------------*/
@@ -506,11 +511,24 @@ }/* clear interrupt enables, set irq latency */ - temp =readl (&ehci->regs->command) &0x0fff ;if (log2_irq_thresh <0 || log2_irq_thresh >6 ) log2_irq_thresh =0 ; - temp |=1 << (16 + log2_irq_thresh); -// if hc can park (ehci >= 0.96), default is 3 packets per async QH + temp =1 << (16 + log2_irq_thresh); +if (HCC_CANPARK (hcc_params)) { +/* HW default park == 3, on hardware that supports it (like +* NVidia and ALI silicon), maximizes throughput on the async +* schedule by avoiding QH fetches between transfers. +* +* With fast usb storage devices and NForce2, "park" seems to +* make problems: throughput reduction (!), data errors... +*/ +if (park) { + park =min (park, (unsigned )3 ); + temp |=CMD_PARK ; + temp |= park <<8 ; + } +ehci_info (ehci,"park %d\n" , park); + }if (HCC_PGM_FRAMELISTLEN (hcc_params)) {/* periodic schedule size can be smaller than default */ temp &= ~(3 <<2 );
@@ -522,7 +540,6 @@default :BUG (); } } - temp &= ~(CMD_IAAD |CMD_ASE |CMD_PSE ),// Philips, Intel, and maybe others need CMD_RUN before the // root hub will detect new devices (why?); NEC doesn't temp |=CMD_RUN ;
ChangeSet 1.1938.446.32, 2004/12/17 11:42:46-08:00, [email protected]
[PATCH] USB Storage: unusual_devs: prolific atapi controler
This adds an unusual devices entry for a Prolific ATAPI-6 conmtroller that needs the FIX_CAPACITY flag.
drivers/usb/storage/unusual_devs.h | 7 +++++++ 1 files changed, 7 insertions(+)
drivers/usb/storage/unusual_devs.h +7 -0
@@ -539,6 +539,13 @@ US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_FIX_CAPACITY ), +/* Reported by Alex Butcher <[email protected]> */ +UNUSUAL_DEV (0x067b ,0x3507 ,0x0001 ,0x0001 , +"Prolific Technology Inc." , +"ATAPI-6 Bridge Controller" , +US_SC_DEVICE ,US_PR_DEVICE ,NULL , +US_FL_FIX_CAPACITY ), +/* Submitted by Benny Sjostrand <[email protected]> */ UNUSUAL_DEV( 0x0686, 0x4011, 0x0001, 0x0001, "Minolta",
ChangeSet 1.1938.446.33, 2004/12/17 11:45:25-08:00, [email protected]
[PATCH] USB: EHCI periodic schedule tree
This implements an interrupt schedule tree for EHCI; the bug's listed in bugzilla (http://bugme.osdl.org/show_bug.cgi?id=3374) and affects the ability to handle certain devices and configurations.
Now multiple interrupt transfers are supported per microframe. Scheduling prevents overcommit for reserved bandwidth and, for full/low speed devices, the relevant transaction translator's buffer. (TT-per-port hubs are already initialized into the multi-TT mode.)
The interrupt transfer schedule is arranged in a sparse tree, just like OHCI. A key difference is that OHCI implements a "best fit" scheduling policy, while this implements "first fit" for EHCI. (There's no load balancing; it's not really needed in most users' configurations.)
There's also logic here to handle "high bandwidth" transfers, guaranteed streaming of from 8-24 KB of data per millisecond.
Also includes some related cleanups for descheduling interrupt transfers. Those will probably be split into a separate patch.
Against 2.6.10-rc3-bk5 ... this hasn't recently been tested much, but the main old bug seems to be gone so it shouldn't make too much trouble.
From: David Brownell <[email protected]>
drivers/usb/host/ehci-hcd.c | 19 +- drivers/usb/host/ehci-q.c | 12 - drivers/usb/host/ehci-sched.c | 354 ++++++++++++++++++++++++------------------ 3 files changed, 227 insertions(+), 158 deletions(-)
drivers/usb/host/ehci-hcd.c +13 -6
@@ -97,7 +97,7 @@* 2001-June Works with usb-storage and NEC EHCI on 2.4 */ -#define DRIVER_VERSION "26 Oct 2004" +#define DRIVER_VERSION "10 Dec 2004"#define DRIVER_AUTHOR "David Brownell"#define DRIVER_DESC "USB 2.0 'Enhanced' Host Controller (EHCI) Driver"
@@ -991,12 +991,18 @@ qh = (struct ehci_qh *) urb->hcpriv;if (!qh)break ; -if (qh->qh_state ==QH_STATE_LINKED ) { -/* messy, can spin or block a microframe ... */ -intr_deschedule (ehci, qh,1 ); -/* qh_state == IDLE */ +switch (qh->qh_state) { +case QH_STATE_LINKED : +intr_deschedule (ehci, qh); +/* FALL THROUGH */ +case QH_STATE_IDLE : +qh_completions (ehci, qh,NULL ); +break ; +default : +ehci_dbg (ehci,"bogus qh %p state %d\n" , + qh, qh->qh_state); + goto done; } -qh_completions (ehci, qh,NULL );/* reschedule QH iff another request is queued */ if (!list_empty (&qh->qtd_list)
@@ -1023,6 +1029,7 @@// completion irqs can wait up to 1024 msec, break ; } +done:spin_unlock_irqrestore (&ehci->lock, flags);return 0 ; }
drivers/usb/host/ehci-q.c +7 -5
@@ -268,8 +268,7 @@static void start_unlink_async (struct ehci_hcd *ehci,struct ehci_qh *qh); -static void intr_deschedule (struct ehci_hcd *ehci, -struct ehci_qh *qh,int wait); +static void intr_deschedule (struct ehci_hcd *ehci,struct ehci_qh *qh);static int qh_schedule (struct ehci_hcd *ehci,struct ehci_qh *qh);/*
@@ -428,7 +427,7 @@* except maybe high bandwidth ... */ if (qh->period) { -intr_deschedule (ehci, qh,1 ); +intr_deschedule (ehci, qh); (void )qh_schedule (ehci, qh); }else start_unlink_async (ehci, qh);
@@ -664,9 +663,12 @@ qh->c_usecs =0 ; qh->gap_uf =0 ; -/* FIXME handle HS periods of less than 1 frame. */ qh->period = urb->interval >>3 ; -if (qh->period <1 ) { +if (qh->period ==0 && urb->interval !=1 ) { +/* NOTE interval 2 or 4 uframes could work. +* But interval 1 scheduling is simpler, and +* includes high bandwidth. +*/ dbg ("intr period %d uframes, NYET!" , urb->interval); goto done;
drivers/usb/host/ehci-sched.c +207 -147
472 lines not on this page · raw message